# frozen_string_literal: true

# WARNING ABOUT GENERATED CODE
#
# This file is generated. See the contributing guide for more information:
# https://github.com/aws/aws-sdk-ruby/blob/version-3/CONTRIBUTING.md
#
# WARNING ABOUT GENERATED CODE


module Aws::CloudWatchEvidently
  # @api private
  module ClientApi

    include Seahorse::Model

    AccessDeniedException = Shapes::StructureShape.new(name: 'AccessDeniedException')
    AppConfigResourceId = Shapes::StringShape.new(name: 'AppConfigResourceId')
    Arn = Shapes::StringShape.new(name: 'Arn')
    BatchEvaluateFeatureRequest = Shapes::StructureShape.new(name: 'BatchEvaluateFeatureRequest')
    BatchEvaluateFeatureResponse = Shapes::StructureShape.new(name: 'BatchEvaluateFeatureResponse')
    Boolean = Shapes::BooleanShape.new(name: 'Boolean')
    ChangeDirectionEnum = Shapes::StringShape.new(name: 'ChangeDirectionEnum')
    CloudWatchLogsDestination = Shapes::StructureShape.new(name: 'CloudWatchLogsDestination')
    CloudWatchLogsDestinationConfig = Shapes::StructureShape.new(name: 'CloudWatchLogsDestinationConfig')
    ConflictException = Shapes::StructureShape.new(name: 'ConflictException')
    CreateExperimentRequest = Shapes::StructureShape.new(name: 'CreateExperimentRequest')
    CreateExperimentResponse = Shapes::StructureShape.new(name: 'CreateExperimentResponse')
    CreateFeatureRequest = Shapes::StructureShape.new(name: 'CreateFeatureRequest')
    CreateFeatureResponse = Shapes::StructureShape.new(name: 'CreateFeatureResponse')
    CreateLaunchRequest = Shapes::StructureShape.new(name: 'CreateLaunchRequest')
    CreateLaunchResponse = Shapes::StructureShape.new(name: 'CreateLaunchResponse')
    CreateProjectRequest = Shapes::StructureShape.new(name: 'CreateProjectRequest')
    CreateProjectResponse = Shapes::StructureShape.new(name: 'CreateProjectResponse')
    CreateSegmentRequest = Shapes::StructureShape.new(name: 'CreateSegmentRequest')
    CreateSegmentResponse = Shapes::StructureShape.new(name: 'CreateSegmentResponse')
    CwDimensionSafeName = Shapes::StringShape.new(name: 'CwDimensionSafeName')
    CwLogGroupSafeName = Shapes::StringShape.new(name: 'CwLogGroupSafeName')
    DeleteExperimentRequest = Shapes::StructureShape.new(name: 'DeleteExperimentRequest')
    DeleteExperimentResponse = Shapes::StructureShape.new(name: 'DeleteExperimentResponse')
    DeleteFeatureRequest = Shapes::StructureShape.new(name: 'DeleteFeatureRequest')
    DeleteFeatureResponse = Shapes::StructureShape.new(name: 'DeleteFeatureResponse')
    DeleteLaunchRequest = Shapes::StructureShape.new(name: 'DeleteLaunchRequest')
    DeleteLaunchResponse = Shapes::StructureShape.new(name: 'DeleteLaunchResponse')
    DeleteProjectRequest = Shapes::StructureShape.new(name: 'DeleteProjectRequest')
    DeleteProjectResponse = Shapes::StructureShape.new(name: 'DeleteProjectResponse')
    DeleteSegmentRequest = Shapes::StructureShape.new(name: 'DeleteSegmentRequest')
    DeleteSegmentResponse = Shapes::StructureShape.new(name: 'DeleteSegmentResponse')
    Description = Shapes::StringShape.new(name: 'Description')
    Double = Shapes::FloatShape.new(name: 'Double')
    DoubleValueList = Shapes::ListShape.new(name: 'DoubleValueList')
    EntityId = Shapes::StringShape.new(name: 'EntityId')
    EntityOverrideMap = Shapes::MapShape.new(name: 'EntityOverrideMap')
    ErrorCodeEnum = Shapes::StringShape.new(name: 'ErrorCodeEnum')
    ErrorMessage = Shapes::StringShape.new(name: 'ErrorMessage')
    EvaluateFeatureRequest = Shapes::StructureShape.new(name: 'EvaluateFeatureRequest')
    EvaluateFeatureResponse = Shapes::StructureShape.new(name: 'EvaluateFeatureResponse')
    EvaluationRequest = Shapes::StructureShape.new(name: 'EvaluationRequest')
    EvaluationRequestsList = Shapes::ListShape.new(name: 'EvaluationRequestsList')
    EvaluationResult = Shapes::StructureShape.new(name: 'EvaluationResult')
    EvaluationResultsList = Shapes::ListShape.new(name: 'EvaluationResultsList')
    EvaluationRule = Shapes::StructureShape.new(name: 'EvaluationRule')
    EvaluationRulesList = Shapes::ListShape.new(name: 'EvaluationRulesList')
    Event = Shapes::StructureShape.new(name: 'Event')
    EventList = Shapes::ListShape.new(name: 'EventList')
    EventType = Shapes::StringShape.new(name: 'EventType')
    Experiment = Shapes::StructureShape.new(name: 'Experiment')
    ExperimentArn = Shapes::StringShape.new(name: 'ExperimentArn')
    ExperimentBaseStat = Shapes::StringShape.new(name: 'ExperimentBaseStat')
    ExperimentExecution = Shapes::StructureShape.new(name: 'ExperimentExecution')
    ExperimentList = Shapes::ListShape.new(name: 'ExperimentList')
    ExperimentName = Shapes::StringShape.new(name: 'ExperimentName')
    ExperimentReport = Shapes::StructureShape.new(name: 'ExperimentReport')
    ExperimentReportList = Shapes::ListShape.new(name: 'ExperimentReportList')
    ExperimentReportName = Shapes::StringShape.new(name: 'ExperimentReportName')
    ExperimentReportNameList = Shapes::ListShape.new(name: 'ExperimentReportNameList')
    ExperimentResultRequestType = Shapes::StringShape.new(name: 'ExperimentResultRequestType')
    ExperimentResultRequestTypeList = Shapes::ListShape.new(name: 'ExperimentResultRequestTypeList')
    ExperimentResultResponseType = Shapes::StringShape.new(name: 'ExperimentResultResponseType')
    ExperimentResultsData = Shapes::StructureShape.new(name: 'ExperimentResultsData')
    ExperimentResultsDataList = Shapes::ListShape.new(name: 'ExperimentResultsDataList')
    ExperimentSchedule = Shapes::StructureShape.new(name: 'ExperimentSchedule')
    ExperimentStatus = Shapes::StringShape.new(name: 'ExperimentStatus')
    ExperimentStopDesiredState = Shapes::StringShape.new(name: 'ExperimentStopDesiredState')
    ExperimentType = Shapes::StringShape.new(name: 'ExperimentType')
    Feature = Shapes::StructureShape.new(name: 'Feature')
    FeatureArn = Shapes::StringShape.new(name: 'FeatureArn')
    FeatureEvaluationStrategy = Shapes::StringShape.new(name: 'FeatureEvaluationStrategy')
    FeatureName = Shapes::StringShape.new(name: 'FeatureName')
    FeatureStatus = Shapes::StringShape.new(name: 'FeatureStatus')
    FeatureSummariesList = Shapes::ListShape.new(name: 'FeatureSummariesList')
    FeatureSummary = Shapes::StructureShape.new(name: 'FeatureSummary')
    FeatureToVariationMap = Shapes::MapShape.new(name: 'FeatureToVariationMap')
    GetExperimentRequest = Shapes::StructureShape.new(name: 'GetExperimentRequest')
    GetExperimentResponse = Shapes::StructureShape.new(name: 'GetExperimentResponse')
    GetExperimentResultsRequest = Shapes::StructureShape.new(name: 'GetExperimentResultsRequest')
    GetExperimentResultsResponse = Shapes::StructureShape.new(name: 'GetExperimentResultsResponse')
    GetFeatureRequest = Shapes::StructureShape.new(name: 'GetFeatureRequest')
    GetFeatureResponse = Shapes::StructureShape.new(name: 'GetFeatureResponse')
    GetLaunchRequest = Shapes::StructureShape.new(name: 'GetLaunchRequest')
    GetLaunchResponse = Shapes::StructureShape.new(name: 'GetLaunchResponse')
    GetProjectRequest = Shapes::StructureShape.new(name: 'GetProjectRequest')
    GetProjectResponse = Shapes::StructureShape.new(name: 'GetProjectResponse')
    GetSegmentRequest = Shapes::StructureShape.new(name: 'GetSegmentRequest')
    GetSegmentResponse = Shapes::StructureShape.new(name: 'GetSegmentResponse')
    GroupName = Shapes::StringShape.new(name: 'GroupName')
    GroupToWeightMap = Shapes::MapShape.new(name: 'GroupToWeightMap')
    Integer = Shapes::IntegerShape.new(name: 'Integer')
    InternalServerException = Shapes::StructureShape.new(name: 'InternalServerException')
    JsonPath = Shapes::StringShape.new(name: 'JsonPath')
    JsonValue = Shapes::StringShape.new(name: 'JsonValue')
    Launch = Shapes::StructureShape.new(name: 'Launch')
    LaunchArn = Shapes::StringShape.new(name: 'LaunchArn')
    LaunchExecution = Shapes::StructureShape.new(name: 'LaunchExecution')
    LaunchGroup = Shapes::StructureShape.new(name: 'LaunchGroup')
    LaunchGroupConfig = Shapes::StructureShape.new(name: 'LaunchGroupConfig')
    LaunchGroupConfigList = Shapes::ListShape.new(name: 'LaunchGroupConfigList')
    LaunchGroupList = Shapes::ListShape.new(name: 'LaunchGroupList')
    LaunchName = Shapes::StringShape.new(name: 'LaunchName')
    LaunchStatus = Shapes::StringShape.new(name: 'LaunchStatus')
    LaunchStopDesiredState = Shapes::StringShape.new(name: 'LaunchStopDesiredState')
    LaunchType = Shapes::StringShape.new(name: 'LaunchType')
    LaunchesList = Shapes::ListShape.new(name: 'LaunchesList')
    ListExperimentsRequest = Shapes::StructureShape.new(name: 'ListExperimentsRequest')
    ListExperimentsResponse = Shapes::StructureShape.new(name: 'ListExperimentsResponse')
    ListFeaturesRequest = Shapes::StructureShape.new(name: 'ListFeaturesRequest')
    ListFeaturesResponse = Shapes::StructureShape.new(name: 'ListFeaturesResponse')
    ListLaunchesRequest = Shapes::StructureShape.new(name: 'ListLaunchesRequest')
    ListLaunchesResponse = Shapes::StructureShape.new(name: 'ListLaunchesResponse')
    ListProjectsRequest = Shapes::StructureShape.new(name: 'ListProjectsRequest')
    ListProjectsResponse = Shapes::StructureShape.new(name: 'ListProjectsResponse')
    ListSegmentReferencesRequest = Shapes::StructureShape.new(name: 'ListSegmentReferencesRequest')
    ListSegmentReferencesResponse = Shapes::StructureShape.new(name: 'ListSegmentReferencesResponse')
    ListSegmentsRequest = Shapes::StructureShape.new(name: 'ListSegmentsRequest')
    ListSegmentsResponse = Shapes::StructureShape.new(name: 'ListSegmentsResponse')
    ListTagsForResourceRequest = Shapes::StructureShape.new(name: 'ListTagsForResourceRequest')
    ListTagsForResourceResponse = Shapes::StructureShape.new(name: 'ListTagsForResourceResponse')
    Long = Shapes::IntegerShape.new(name: 'Long')
    MaxExperiments = Shapes::IntegerShape.new(name: 'MaxExperiments')
    MaxFeatures = Shapes::IntegerShape.new(name: 'MaxFeatures')
    MaxLaunches = Shapes::IntegerShape.new(name: 'MaxLaunches')
    MaxProjects = Shapes::IntegerShape.new(name: 'MaxProjects')
    MaxReferences = Shapes::IntegerShape.new(name: 'MaxReferences')
    MaxSegments = Shapes::IntegerShape.new(name: 'MaxSegments')
    MetricDefinition = Shapes::StructureShape.new(name: 'MetricDefinition')
    MetricDefinitionConfig = Shapes::StructureShape.new(name: 'MetricDefinitionConfig')
    MetricDefinitionConfigEventPatternString = Shapes::StringShape.new(name: 'MetricDefinitionConfigEventPatternString')
    MetricGoal = Shapes::StructureShape.new(name: 'MetricGoal')
    MetricGoalConfig = Shapes::StructureShape.new(name: 'MetricGoalConfig')
    MetricGoalConfigList = Shapes::ListShape.new(name: 'MetricGoalConfigList')
    MetricGoalsList = Shapes::ListShape.new(name: 'MetricGoalsList')
    MetricMonitor = Shapes::StructureShape.new(name: 'MetricMonitor')
    MetricMonitorConfig = Shapes::StructureShape.new(name: 'MetricMonitorConfig')
    MetricMonitorConfigList = Shapes::ListShape.new(name: 'MetricMonitorConfigList')
    MetricMonitorList = Shapes::ListShape.new(name: 'MetricMonitorList')
    MetricNameList = Shapes::ListShape.new(name: 'MetricNameList')
    MetricUnitLabel = Shapes::StringShape.new(name: 'MetricUnitLabel')
    NextToken = Shapes::StringShape.new(name: 'NextToken')
    OnlineAbConfig = Shapes::StructureShape.new(name: 'OnlineAbConfig')
    OnlineAbDefinition = Shapes::StructureShape.new(name: 'OnlineAbDefinition')
    PrimitiveBoolean = Shapes::BooleanShape.new(name: 'PrimitiveBoolean')
    Project = Shapes::StructureShape.new(name: 'Project')
    ProjectAppConfigResource = Shapes::StructureShape.new(name: 'ProjectAppConfigResource')
    ProjectAppConfigResourceConfig = Shapes::StructureShape.new(name: 'ProjectAppConfigResourceConfig')
    ProjectArn = Shapes::StringShape.new(name: 'ProjectArn')
    ProjectDataDelivery = Shapes::StructureShape.new(name: 'ProjectDataDelivery')
    ProjectDataDeliveryConfig = Shapes::StructureShape.new(name: 'ProjectDataDeliveryConfig')
    ProjectName = Shapes::StringShape.new(name: 'ProjectName')
    ProjectRef = Shapes::StringShape.new(name: 'ProjectRef')
    ProjectStatus = Shapes::StringShape.new(name: 'ProjectStatus')
    ProjectSummariesList = Shapes::ListShape.new(name: 'ProjectSummariesList')
    ProjectSummary = Shapes::StructureShape.new(name: 'ProjectSummary')
    PutProjectEventsRequest = Shapes::StructureShape.new(name: 'PutProjectEventsRequest')
    PutProjectEventsResponse = Shapes::StructureShape.new(name: 'PutProjectEventsResponse')
    PutProjectEventsResultEntry = Shapes::StructureShape.new(name: 'PutProjectEventsResultEntry')
    PutProjectEventsResultEntryList = Shapes::ListShape.new(name: 'PutProjectEventsResultEntryList')
    RandomizationSalt = Shapes::StringShape.new(name: 'RandomizationSalt')
    RefResource = Shapes::StructureShape.new(name: 'RefResource')
    RefResourceList = Shapes::ListShape.new(name: 'RefResourceList')
    ResourceNotFoundException = Shapes::StructureShape.new(name: 'ResourceNotFoundException')
    ResultsPeriod = Shapes::IntegerShape.new(name: 'ResultsPeriod')
    RuleName = Shapes::StringShape.new(name: 'RuleName')
    RuleType = Shapes::StringShape.new(name: 'RuleType')
    S3BucketSafeName = Shapes::StringShape.new(name: 'S3BucketSafeName')
    S3Destination = Shapes::StructureShape.new(name: 'S3Destination')
    S3DestinationConfig = Shapes::StructureShape.new(name: 'S3DestinationConfig')
    S3PrefixSafeName = Shapes::StringShape.new(name: 'S3PrefixSafeName')
    ScheduledSplit = Shapes::StructureShape.new(name: 'ScheduledSplit')
    ScheduledSplitConfig = Shapes::StructureShape.new(name: 'ScheduledSplitConfig')
    ScheduledSplitConfigList = Shapes::ListShape.new(name: 'ScheduledSplitConfigList')
    ScheduledSplitsLaunchConfig = Shapes::StructureShape.new(name: 'ScheduledSplitsLaunchConfig')
    ScheduledSplitsLaunchDefinition = Shapes::StructureShape.new(name: 'ScheduledSplitsLaunchDefinition')
    ScheduledStepList = Shapes::ListShape.new(name: 'ScheduledStepList')
    Segment = Shapes::StructureShape.new(name: 'Segment')
    SegmentArn = Shapes::StringShape.new(name: 'SegmentArn')
    SegmentList = Shapes::ListShape.new(name: 'SegmentList')
    SegmentName = Shapes::StringShape.new(name: 'SegmentName')
    SegmentOverride = Shapes::StructureShape.new(name: 'SegmentOverride')
    SegmentOverridesList = Shapes::ListShape.new(name: 'SegmentOverridesList')
    SegmentPattern = Shapes::StringShape.new(name: 'SegmentPattern')
    SegmentRef = Shapes::StringShape.new(name: 'SegmentRef')
    SegmentReferenceResourceType = Shapes::StringShape.new(name: 'SegmentReferenceResourceType')
    ServiceQuotaExceededException = Shapes::StructureShape.new(name: 'ServiceQuotaExceededException')
    ServiceUnavailableException = Shapes::StructureShape.new(name: 'ServiceUnavailableException')
    SplitWeight = Shapes::IntegerShape.new(name: 'SplitWeight')
    StartExperimentRequest = Shapes::StructureShape.new(name: 'StartExperimentRequest')
    StartExperimentResponse = Shapes::StructureShape.new(name: 'StartExperimentResponse')
    StartLaunchRequest = Shapes::StructureShape.new(name: 'StartLaunchRequest')
    StartLaunchResponse = Shapes::StructureShape.new(name: 'StartLaunchResponse')
    StopExperimentRequest = Shapes::StructureShape.new(name: 'StopExperimentRequest')
    StopExperimentResponse = Shapes::StructureShape.new(name: 'StopExperimentResponse')
    StopLaunchRequest = Shapes::StructureShape.new(name: 'StopLaunchRequest')
    StopLaunchResponse = Shapes::StructureShape.new(name: 'StopLaunchResponse')
    String = Shapes::StringShape.new(name: 'String')
    TagKey = Shapes::StringShape.new(name: 'TagKey')
    TagKeyList = Shapes::ListShape.new(name: 'TagKeyList')
    TagMap = Shapes::MapShape.new(name: 'TagMap')
    TagResourceRequest = Shapes::StructureShape.new(name: 'TagResourceRequest')
    TagResourceResponse = Shapes::StructureShape.new(name: 'TagResourceResponse')
    TagValue = Shapes::StringShape.new(name: 'TagValue')
    TestSegmentPatternRequest = Shapes::StructureShape.new(name: 'TestSegmentPatternRequest')
    TestSegmentPatternResponse = Shapes::StructureShape.new(name: 'TestSegmentPatternResponse')
    ThrottlingException = Shapes::StructureShape.new(name: 'ThrottlingException')
    Timestamp = Shapes::TimestampShape.new(name: 'Timestamp')
    TimestampList = Shapes::ListShape.new(name: 'TimestampList')
    Treatment = Shapes::StructureShape.new(name: 'Treatment')
    TreatmentConfig = Shapes::StructureShape.new(name: 'TreatmentConfig')
    TreatmentConfigList = Shapes::ListShape.new(name: 'TreatmentConfigList')
    TreatmentList = Shapes::ListShape.new(name: 'TreatmentList')
    TreatmentName = Shapes::StringShape.new(name: 'TreatmentName')
    TreatmentNameList = Shapes::ListShape.new(name: 'TreatmentNameList')
    TreatmentToWeightMap = Shapes::MapShape.new(name: 'TreatmentToWeightMap')
    UntagResourceRequest = Shapes::StructureShape.new(name: 'UntagResourceRequest')
    UntagResourceResponse = Shapes::StructureShape.new(name: 'UntagResourceResponse')
    UpdateExperimentRequest = Shapes::StructureShape.new(name: 'UpdateExperimentRequest')
    UpdateExperimentResponse = Shapes::StructureShape.new(name: 'UpdateExperimentResponse')
    UpdateFeatureRequest = Shapes::StructureShape.new(name: 'UpdateFeatureRequest')
    UpdateFeatureResponse = Shapes::StructureShape.new(name: 'UpdateFeatureResponse')
    UpdateLaunchRequest = Shapes::StructureShape.new(name: 'UpdateLaunchRequest')
    UpdateLaunchResponse = Shapes::StructureShape.new(name: 'UpdateLaunchResponse')
    UpdateProjectDataDeliveryRequest = Shapes::StructureShape.new(name: 'UpdateProjectDataDeliveryRequest')
    UpdateProjectDataDeliveryResponse = Shapes::StructureShape.new(name: 'UpdateProjectDataDeliveryResponse')
    UpdateProjectRequest = Shapes::StructureShape.new(name: 'UpdateProjectRequest')
    UpdateProjectResponse = Shapes::StructureShape.new(name: 'UpdateProjectResponse')
    Uuid = Shapes::StringShape.new(name: 'Uuid')
    ValidationException = Shapes::StructureShape.new(name: 'ValidationException')
    ValidationExceptionField = Shapes::StructureShape.new(name: 'ValidationExceptionField')
    ValidationExceptionFieldList = Shapes::ListShape.new(name: 'ValidationExceptionFieldList')
    ValidationExceptionReason = Shapes::StringShape.new(name: 'ValidationExceptionReason')
    VariableValue = Shapes::UnionShape.new(name: 'VariableValue')
    VariableValueLongValueLong = Shapes::IntegerShape.new(name: 'VariableValueLongValueLong')
    VariableValueStringValueString = Shapes::StringShape.new(name: 'VariableValueStringValueString')
    Variation = Shapes::StructureShape.new(name: 'Variation')
    VariationConfig = Shapes::StructureShape.new(name: 'VariationConfig')
    VariationConfigsList = Shapes::ListShape.new(name: 'VariationConfigsList')
    VariationName = Shapes::StringShape.new(name: 'VariationName')
    VariationNameList = Shapes::ListShape.new(name: 'VariationNameList')
    VariationValueType = Shapes::StringShape.new(name: 'VariationValueType')
    VariationsList = Shapes::ListShape.new(name: 'VariationsList')

    AccessDeniedException.add_member(:message, Shapes::ShapeRef.new(shape: String, location_name: "message"))
    AccessDeniedException.struct_class = Types::AccessDeniedException

    BatchEvaluateFeatureRequest.add_member(:project, Shapes::ShapeRef.new(shape: ProjectRef, required: true, location: "uri", location_name: "project"))
    BatchEvaluateFeatureRequest.add_member(:requests, Shapes::ShapeRef.new(shape: EvaluationRequestsList, required: true, location_name: "requests"))
    BatchEvaluateFeatureRequest.struct_class = Types::BatchEvaluateFeatureRequest

    BatchEvaluateFeatureResponse.add_member(:results, Shapes::ShapeRef.new(shape: EvaluationResultsList, location_name: "results"))
    BatchEvaluateFeatureResponse.struct_class = Types::BatchEvaluateFeatureResponse

    CloudWatchLogsDestination.add_member(:log_group, Shapes::ShapeRef.new(shape: CwLogGroupSafeName, location_name: "logGroup"))
    CloudWatchLogsDestination.struct_class = Types::CloudWatchLogsDestination

    CloudWatchLogsDestinationConfig.add_member(:log_group, Shapes::ShapeRef.new(shape: CwLogGroupSafeName, location_name: "logGroup"))
    CloudWatchLogsDestinationConfig.struct_class = Types::CloudWatchLogsDestinationConfig

    ConflictException.add_member(:message, Shapes::ShapeRef.new(shape: String, location_name: "message"))
    ConflictException.add_member(:resource_id, Shapes::ShapeRef.new(shape: String, location_name: "resourceId"))
    ConflictException.add_member(:resource_type, Shapes::ShapeRef.new(shape: String, location_name: "resourceType"))
    ConflictException.struct_class = Types::ConflictException

    CreateExperimentRequest.add_member(:description, Shapes::ShapeRef.new(shape: Description, location_name: "description"))
    CreateExperimentRequest.add_member(:metric_goals, Shapes::ShapeRef.new(shape: MetricGoalConfigList, required: true, location_name: "metricGoals"))
    CreateExperimentRequest.add_member(:name, Shapes::ShapeRef.new(shape: ExperimentName, required: true, location_name: "name"))
    CreateExperimentRequest.add_member(:online_ab_config, Shapes::ShapeRef.new(shape: OnlineAbConfig, location_name: "onlineAbConfig"))
    CreateExperimentRequest.add_member(:project, Shapes::ShapeRef.new(shape: ProjectRef, required: true, location: "uri", location_name: "project"))
    CreateExperimentRequest.add_member(:randomization_salt, Shapes::ShapeRef.new(shape: RandomizationSalt, location_name: "randomizationSalt"))
    CreateExperimentRequest.add_member(:sampling_rate, Shapes::ShapeRef.new(shape: SplitWeight, location_name: "samplingRate", metadata: {"box" => true}))
    CreateExperimentRequest.add_member(:segment, Shapes::ShapeRef.new(shape: SegmentRef, location_name: "segment"))
    CreateExperimentRequest.add_member(:tags, Shapes::ShapeRef.new(shape: TagMap, location_name: "tags"))
    CreateExperimentRequest.add_member(:treatments, Shapes::ShapeRef.new(shape: TreatmentConfigList, required: true, location_name: "treatments"))
    CreateExperimentRequest.struct_class = Types::CreateExperimentRequest

    CreateExperimentResponse.add_member(:experiment, Shapes::ShapeRef.new(shape: Experiment, required: true, location_name: "experiment"))
    CreateExperimentResponse.struct_class = Types::CreateExperimentResponse

    CreateFeatureRequest.add_member(:default_variation, Shapes::ShapeRef.new(shape: VariationName, location_name: "defaultVariation"))
    CreateFeatureRequest.add_member(:description, Shapes::ShapeRef.new(shape: Description, location_name: "description"))
    CreateFeatureRequest.add_member(:entity_overrides, Shapes::ShapeRef.new(shape: EntityOverrideMap, location_name: "entityOverrides"))
    CreateFeatureRequest.add_member(:evaluation_strategy, Shapes::ShapeRef.new(shape: FeatureEvaluationStrategy, location_name: "evaluationStrategy"))
    CreateFeatureRequest.add_member(:name, Shapes::ShapeRef.new(shape: FeatureName, required: true, location_name: "name"))
    CreateFeatureRequest.add_member(:project, Shapes::ShapeRef.new(shape: ProjectRef, required: true, location: "uri", location_name: "project"))
    CreateFeatureRequest.add_member(:tags, Shapes::ShapeRef.new(shape: TagMap, location_name: "tags"))
    CreateFeatureRequest.add_member(:variations, Shapes::ShapeRef.new(shape: VariationConfigsList, required: true, location_name: "variations"))
    CreateFeatureRequest.struct_class = Types::CreateFeatureRequest

    CreateFeatureResponse.add_member(:feature, Shapes::ShapeRef.new(shape: Feature, location_name: "feature"))
    CreateFeatureResponse.struct_class = Types::CreateFeatureResponse

    CreateLaunchRequest.add_member(:description, Shapes::ShapeRef.new(shape: Description, location_name: "description"))
    CreateLaunchRequest.add_member(:groups, Shapes::ShapeRef.new(shape: LaunchGroupConfigList, required: true, location_name: "groups"))
    CreateLaunchRequest.add_member(:metric_monitors, Shapes::ShapeRef.new(shape: MetricMonitorConfigList, location_name: "metricMonitors"))
    CreateLaunchRequest.add_member(:name, Shapes::ShapeRef.new(shape: LaunchName, required: true, location_name: "name"))
    CreateLaunchRequest.add_member(:project, Shapes::ShapeRef.new(shape: ProjectRef, required: true, location: "uri", location_name: "project"))
    CreateLaunchRequest.add_member(:randomization_salt, Shapes::ShapeRef.new(shape: RandomizationSalt, location_name: "randomizationSalt"))
    CreateLaunchRequest.add_member(:scheduled_splits_config, Shapes::ShapeRef.new(shape: ScheduledSplitsLaunchConfig, location_name: "scheduledSplitsConfig"))
    CreateLaunchRequest.add_member(:tags, Shapes::ShapeRef.new(shape: TagMap, location_name: "tags"))
    CreateLaunchRequest.struct_class = Types::CreateLaunchRequest

    CreateLaunchResponse.add_member(:launch, Shapes::ShapeRef.new(shape: Launch, required: true, location_name: "launch"))
    CreateLaunchResponse.struct_class = Types::CreateLaunchResponse

    CreateProjectRequest.add_member(:app_config_resource, Shapes::ShapeRef.new(shape: ProjectAppConfigResourceConfig, location_name: "appConfigResource"))
    CreateProjectRequest.add_member(:data_delivery, Shapes::ShapeRef.new(shape: ProjectDataDeliveryConfig, location_name: "dataDelivery"))
    CreateProjectRequest.add_member(:description, Shapes::ShapeRef.new(shape: Description, location_name: "description"))
    CreateProjectRequest.add_member(:name, Shapes::ShapeRef.new(shape: ProjectName, required: true, location_name: "name"))
    CreateProjectRequest.add_member(:tags, Shapes::ShapeRef.new(shape: TagMap, location_name: "tags"))
    CreateProjectRequest.struct_class = Types::CreateProjectRequest

    CreateProjectResponse.add_member(:project, Shapes::ShapeRef.new(shape: Project, required: true, location_name: "project"))
    CreateProjectResponse.struct_class = Types::CreateProjectResponse

    CreateSegmentRequest.add_member(:description, Shapes::ShapeRef.new(shape: Description, location_name: "description"))
    CreateSegmentRequest.add_member(:name, Shapes::ShapeRef.new(shape: SegmentName, required: true, location_name: "name"))
    CreateSegmentRequest.add_member(:pattern, Shapes::ShapeRef.new(shape: SegmentPattern, required: true, location_name: "pattern", metadata: {"jsonvalue" => true}))
    CreateSegmentRequest.add_member(:tags, Shapes::ShapeRef.new(shape: TagMap, location_name: "tags"))
    CreateSegmentRequest.struct_class = Types::CreateSegmentRequest

    CreateSegmentResponse.add_member(:segment, Shapes::ShapeRef.new(shape: Segment, required: true, location_name: "segment"))
    CreateSegmentResponse.struct_class = Types::CreateSegmentResponse

    DeleteExperimentRequest.add_member(:experiment, Shapes::ShapeRef.new(shape: ExperimentName, required: true, location: "uri", location_name: "experiment"))
    DeleteExperimentRequest.add_member(:project, Shapes::ShapeRef.new(shape: ProjectRef, required: true, location: "uri", location_name: "project"))
    DeleteExperimentRequest.struct_class = Types::DeleteExperimentRequest

    DeleteExperimentResponse.struct_class = Types::DeleteExperimentResponse

    DeleteFeatureRequest.add_member(:feature, Shapes::ShapeRef.new(shape: FeatureName, required: true, location: "uri", location_name: "feature"))
    DeleteFeatureRequest.add_member(:project, Shapes::ShapeRef.new(shape: ProjectRef, required: true, location: "uri", location_name: "project"))
    DeleteFeatureRequest.struct_class = Types::DeleteFeatureRequest

    DeleteFeatureResponse.struct_class = Types::DeleteFeatureResponse

    DeleteLaunchRequest.add_member(:launch, Shapes::ShapeRef.new(shape: LaunchName, required: true, location: "uri", location_name: "launch"))
    DeleteLaunchRequest.add_member(:project, Shapes::ShapeRef.new(shape: ProjectRef, required: true, location: "uri", location_name: "project"))
    DeleteLaunchRequest.struct_class = Types::DeleteLaunchRequest

    DeleteLaunchResponse.struct_class = Types::DeleteLaunchResponse

    DeleteProjectRequest.add_member(:project, Shapes::ShapeRef.new(shape: ProjectRef, required: true, location: "uri", location_name: "project"))
    DeleteProjectRequest.struct_class = Types::DeleteProjectRequest

    DeleteProjectResponse.struct_class = Types::DeleteProjectResponse

    DeleteSegmentRequest.add_member(:segment, Shapes::ShapeRef.new(shape: SegmentRef, required: true, location: "uri", location_name: "segment"))
    DeleteSegmentRequest.struct_class = Types::DeleteSegmentRequest

    DeleteSegmentResponse.struct_class = Types::DeleteSegmentResponse

    DoubleValueList.member = Shapes::ShapeRef.new(shape: Double)

    EntityOverrideMap.key = Shapes::ShapeRef.new(shape: EntityId)
    EntityOverrideMap.value = Shapes::ShapeRef.new(shape: VariationName)

    EvaluateFeatureRequest.add_member(:entity_id, Shapes::ShapeRef.new(shape: EntityId, required: true, location_name: "entityId"))
    EvaluateFeatureRequest.add_member(:evaluation_context, Shapes::ShapeRef.new(shape: JsonValue, location_name: "evaluationContext", metadata: {"jsonvalue" => true}))
    EvaluateFeatureRequest.add_member(:feature, Shapes::ShapeRef.new(shape: FeatureName, required: true, location: "uri", location_name: "feature"))
    EvaluateFeatureRequest.add_member(:project, Shapes::ShapeRef.new(shape: ProjectRef, required: true, location: "uri", location_name: "project"))
    EvaluateFeatureRequest.struct_class = Types::EvaluateFeatureRequest

    EvaluateFeatureResponse.add_member(:details, Shapes::ShapeRef.new(shape: JsonValue, location_name: "details", metadata: {"jsonvalue" => true}))
    EvaluateFeatureResponse.add_member(:reason, Shapes::ShapeRef.new(shape: String, location_name: "reason"))
    EvaluateFeatureResponse.add_member(:value, Shapes::ShapeRef.new(shape: VariableValue, location_name: "value"))
    EvaluateFeatureResponse.add_member(:variation, Shapes::ShapeRef.new(shape: String, location_name: "variation"))
    EvaluateFeatureResponse.struct_class = Types::EvaluateFeatureResponse

    EvaluationRequest.add_member(:entity_id, Shapes::ShapeRef.new(shape: EntityId, required: true, location_name: "entityId"))
    EvaluationRequest.add_member(:evaluation_context, Shapes::ShapeRef.new(shape: JsonValue, location_name: "evaluationContext", metadata: {"jsonvalue" => true}))
    EvaluationRequest.add_member(:feature, Shapes::ShapeRef.new(shape: FeatureName, required: true, location_name: "feature"))
    EvaluationRequest.struct_class = Types::EvaluationRequest

    EvaluationRequestsList.member = Shapes::ShapeRef.new(shape: EvaluationRequest)

    EvaluationResult.add_member(:details, Shapes::ShapeRef.new(shape: JsonValue, location_name: "details", metadata: {"jsonvalue" => true}))
    EvaluationResult.add_member(:entity_id, Shapes::ShapeRef.new(shape: EntityId, required: true, location_name: "entityId"))
    EvaluationResult.add_member(:feature, Shapes::ShapeRef.new(shape: FeatureName, required: true, location_name: "feature"))
    EvaluationResult.add_member(:project, Shapes::ShapeRef.new(shape: Arn, location_name: "project"))
    EvaluationResult.add_member(:reason, Shapes::ShapeRef.new(shape: String, location_name: "reason"))
    EvaluationResult.add_member(:value, Shapes::ShapeRef.new(shape: VariableValue, location_name: "value"))
    EvaluationResult.add_member(:variation, Shapes::ShapeRef.new(shape: String, location_name: "variation"))
    EvaluationResult.struct_class = Types::EvaluationResult

    EvaluationResultsList.member = Shapes::ShapeRef.new(shape: EvaluationResult)

    EvaluationRule.add_member(:name, Shapes::ShapeRef.new(shape: RuleName, location_name: "name"))
    EvaluationRule.add_member(:type, Shapes::ShapeRef.new(shape: RuleType, required: true, location_name: "type"))
    EvaluationRule.struct_class = Types::EvaluationRule

    EvaluationRulesList.member = Shapes::ShapeRef.new(shape: EvaluationRule)

    Event.add_member(:data, Shapes::ShapeRef.new(shape: JsonValue, required: true, location_name: "data", metadata: {"jsonvalue" => true}))
    Event.add_member(:timestamp, Shapes::ShapeRef.new(shape: Timestamp, required: true, location_name: "timestamp"))
    Event.add_member(:type, Shapes::ShapeRef.new(shape: EventType, required: true, location_name: "type"))
    Event.struct_class = Types::Event

    EventList.member = Shapes::ShapeRef.new(shape: Event)

    Experiment.add_member(:arn, Shapes::ShapeRef.new(shape: ExperimentArn, required: true, location_name: "arn"))
    Experiment.add_member(:created_time, Shapes::ShapeRef.new(shape: Timestamp, required: true, location_name: "createdTime"))
    Experiment.add_member(:description, Shapes::ShapeRef.new(shape: Description, location_name: "description"))
    Experiment.add_member(:execution, Shapes::ShapeRef.new(shape: ExperimentExecution, location_name: "execution"))
    Experiment.add_member(:last_updated_time, Shapes::ShapeRef.new(shape: Timestamp, required: true, location_name: "lastUpdatedTime"))
    Experiment.add_member(:metric_goals, Shapes::ShapeRef.new(shape: MetricGoalsList, location_name: "metricGoals"))
    Experiment.add_member(:name, Shapes::ShapeRef.new(shape: ExperimentName, required: true, location_name: "name"))
    Experiment.add_member(:online_ab_definition, Shapes::ShapeRef.new(shape: OnlineAbDefinition, location_name: "onlineAbDefinition"))
    Experiment.add_member(:project, Shapes::ShapeRef.new(shape: ProjectArn, location_name: "project"))
    Experiment.add_member(:randomization_salt, Shapes::ShapeRef.new(shape: RandomizationSalt, location_name: "randomizationSalt"))
    Experiment.add_member(:sampling_rate, Shapes::ShapeRef.new(shape: SplitWeight, location_name: "samplingRate"))
    Experiment.add_member(:schedule, Shapes::ShapeRef.new(shape: ExperimentSchedule, location_name: "schedule"))
    Experiment.add_member(:segment, Shapes::ShapeRef.new(shape: SegmentArn, location_name: "segment"))
    Experiment.add_member(:status, Shapes::ShapeRef.new(shape: ExperimentStatus, required: true, location_name: "status"))
    Experiment.add_member(:status_reason, Shapes::ShapeRef.new(shape: Description, location_name: "statusReason"))
    Experiment.add_member(:tags, Shapes::ShapeRef.new(shape: TagMap, location_name: "tags"))
    Experiment.add_member(:treatments, Shapes::ShapeRef.new(shape: TreatmentList, location_name: "treatments"))
    Experiment.add_member(:type, Shapes::ShapeRef.new(shape: ExperimentType, required: true, location_name: "type"))
    Experiment.struct_class = Types::Experiment

    ExperimentExecution.add_member(:ended_time, Shapes::ShapeRef.new(shape: Timestamp, location_name: "endedTime"))
    ExperimentExecution.add_member(:started_time, Shapes::ShapeRef.new(shape: Timestamp, location_name: "startedTime"))
    ExperimentExecution.struct_class = Types::ExperimentExecution

    ExperimentList.member = Shapes::ShapeRef.new(shape: Experiment)

    ExperimentReport.add_member(:content, Shapes::ShapeRef.new(shape: JsonValue, location_name: "content", metadata: {"jsonvalue" => true}))
    ExperimentReport.add_member(:metric_name, Shapes::ShapeRef.new(shape: CwDimensionSafeName, location_name: "metricName"))
    ExperimentReport.add_member(:report_name, Shapes::ShapeRef.new(shape: ExperimentReportName, location_name: "reportName"))
    ExperimentReport.add_member(:treatment_name, Shapes::ShapeRef.new(shape: TreatmentName, location_name: "treatmentName"))
    ExperimentReport.struct_class = Types::ExperimentReport

    ExperimentReportList.member = Shapes::ShapeRef.new(shape: ExperimentReport)

    ExperimentReportNameList.member = Shapes::ShapeRef.new(shape: ExperimentReportName)

    ExperimentResultRequestTypeList.member = Shapes::ShapeRef.new(shape: ExperimentResultRequestType)

    ExperimentResultsData.add_member(:metric_name, Shapes::ShapeRef.new(shape: CwDimensionSafeName, location_name: "metricName"))
    ExperimentResultsData.add_member(:result_stat, Shapes::ShapeRef.new(shape: ExperimentResultResponseType, location_name: "resultStat"))
    ExperimentResultsData.add_member(:treatment_name, Shapes::ShapeRef.new(shape: TreatmentName, location_name: "treatmentName"))
    ExperimentResultsData.add_member(:values, Shapes::ShapeRef.new(shape: DoubleValueList, location_name: "values"))
    ExperimentResultsData.struct_class = Types::ExperimentResultsData

    ExperimentResultsDataList.member = Shapes::ShapeRef.new(shape: ExperimentResultsData)

    ExperimentSchedule.add_member(:analysis_complete_time, Shapes::ShapeRef.new(shape: Timestamp, location_name: "analysisCompleteTime"))
    ExperimentSchedule.struct_class = Types::ExperimentSchedule

    Feature.add_member(:arn, Shapes::ShapeRef.new(shape: FeatureArn, required: true, location_name: "arn"))
    Feature.add_member(:created_time, Shapes::ShapeRef.new(shape: Timestamp, required: true, location_name: "createdTime"))
    Feature.add_member(:default_variation, Shapes::ShapeRef.new(shape: VariationName, location_name: "defaultVariation"))
    Feature.add_member(:description, Shapes::ShapeRef.new(shape: Description, location_name: "description"))
    Feature.add_member(:entity_overrides, Shapes::ShapeRef.new(shape: EntityOverrideMap, location_name: "entityOverrides"))
    Feature.add_member(:evaluation_rules, Shapes::ShapeRef.new(shape: EvaluationRulesList, location_name: "evaluationRules"))
    Feature.add_member(:evaluation_strategy, Shapes::ShapeRef.new(shape: FeatureEvaluationStrategy, required: true, location_name: "evaluationStrategy"))
    Feature.add_member(:last_updated_time, Shapes::ShapeRef.new(shape: Timestamp, required: true, location_name: "lastUpdatedTime"))
    Feature.add_member(:name, Shapes::ShapeRef.new(shape: FeatureName, required: true, location_name: "name"))
    Feature.add_member(:project, Shapes::ShapeRef.new(shape: ProjectArn, location_name: "project"))
    Feature.add_member(:status, Shapes::ShapeRef.new(shape: FeatureStatus, required: true, location_name: "status"))
    Feature.add_member(:tags, Shapes::ShapeRef.new(shape: TagMap, location_name: "tags"))
    Feature.add_member(:value_type, Shapes::ShapeRef.new(shape: VariationValueType, required: true, location_name: "valueType"))
    Feature.add_member(:variations, Shapes::ShapeRef.new(shape: VariationsList, required: true, location_name: "variations"))
    Feature.struct_class = Types::Feature

    FeatureSummariesList.member = Shapes::ShapeRef.new(shape: FeatureSummary)

    FeatureSummary.add_member(:arn, Shapes::ShapeRef.new(shape: Arn, required: true, location_name: "arn"))
    FeatureSummary.add_member(:created_time, Shapes::ShapeRef.new(shape: Timestamp, required: true, location_name: "createdTime"))
    FeatureSummary.add_member(:default_variation, Shapes::ShapeRef.new(shape: VariationName, location_name: "defaultVariation"))
    FeatureSummary.add_member(:evaluation_rules, Shapes::ShapeRef.new(shape: EvaluationRulesList, location_name: "evaluationRules"))
    FeatureSummary.add_member(:evaluation_strategy, Shapes::ShapeRef.new(shape: FeatureEvaluationStrategy, required: true, location_name: "evaluationStrategy"))
    FeatureSummary.add_member(:last_updated_time, Shapes::ShapeRef.new(shape: Timestamp, required: true, location_name: "lastUpdatedTime"))
    FeatureSummary.add_member(:name, Shapes::ShapeRef.new(shape: FeatureName, required: true, location_name: "name"))
    FeatureSummary.add_member(:project, Shapes::ShapeRef.new(shape: ProjectRef, location_name: "project"))
    FeatureSummary.add_member(:status, Shapes::ShapeRef.new(shape: FeatureStatus, required: true, location_name: "status"))
    FeatureSummary.add_member(:tags, Shapes::ShapeRef.new(shape: TagMap, location_name: "tags"))
    FeatureSummary.struct_class = Types::FeatureSummary

    FeatureToVariationMap.key = Shapes::ShapeRef.new(shape: FeatureName)
    FeatureToVariationMap.value = Shapes::ShapeRef.new(shape: VariationName)

    GetExperimentRequest.add_member(:experiment, Shapes::ShapeRef.new(shape: ExperimentName, required: true, location: "uri", location_name: "experiment"))
    GetExperimentRequest.add_member(:project, Shapes::ShapeRef.new(shape: ProjectRef, required: true, location: "uri", location_name: "project"))
    GetExperimentRequest.struct_class = Types::GetExperimentRequest

    GetExperimentResponse.add_member(:experiment, Shapes::ShapeRef.new(shape: Experiment, location_name: "experiment"))
    GetExperimentResponse.struct_class = Types::GetExperimentResponse

    GetExperimentResultsRequest.add_member(:base_stat, Shapes::ShapeRef.new(shape: ExperimentBaseStat, location_name: "baseStat"))
    GetExperimentResultsRequest.add_member(:end_time, Shapes::ShapeRef.new(shape: Timestamp, location_name: "endTime"))
    GetExperimentResultsRequest.add_member(:experiment, Shapes::ShapeRef.new(shape: ExperimentName, required: true, location: "uri", location_name: "experiment"))
    GetExperimentResultsRequest.add_member(:metric_names, Shapes::ShapeRef.new(shape: MetricNameList, required: true, location_name: "metricNames"))
    GetExperimentResultsRequest.add_member(:period, Shapes::ShapeRef.new(shape: ResultsPeriod, location_name: "period"))
    GetExperimentResultsRequest.add_member(:project, Shapes::ShapeRef.new(shape: ProjectRef, required: true, location: "uri", location_name: "project"))
    GetExperimentResultsRequest.add_member(:report_names, Shapes::ShapeRef.new(shape: ExperimentReportNameList, location_name: "reportNames"))
    GetExperimentResultsRequest.add_member(:result_stats, Shapes::ShapeRef.new(shape: ExperimentResultRequestTypeList, location_name: "resultStats"))
    GetExperimentResultsRequest.add_member(:start_time, Shapes::ShapeRef.new(shape: Timestamp, location_name: "startTime"))
    GetExperimentResultsRequest.add_member(:treatment_names, Shapes::ShapeRef.new(shape: TreatmentNameList, required: true, location_name: "treatmentNames"))
    GetExperimentResultsRequest.struct_class = Types::GetExperimentResultsRequest

    GetExperimentResultsResponse.add_member(:details, Shapes::ShapeRef.new(shape: String, location_name: "details"))
    GetExperimentResultsResponse.add_member(:reports, Shapes::ShapeRef.new(shape: ExperimentReportList, location_name: "reports"))
    GetExperimentResultsResponse.add_member(:results_data, Shapes::ShapeRef.new(shape: ExperimentResultsDataList, location_name: "resultsData"))
    GetExperimentResultsResponse.add_member(:timestamps, Shapes::ShapeRef.new(shape: TimestampList, location_name: "timestamps"))
    GetExperimentResultsResponse.struct_class = Types::GetExperimentResultsResponse

    GetFeatureRequest.add_member(:feature, Shapes::ShapeRef.new(shape: FeatureName, required: true, location: "uri", location_name: "feature"))
    GetFeatureRequest.add_member(:project, Shapes::ShapeRef.new(shape: ProjectRef, required: true, location: "uri", location_name: "project"))
    GetFeatureRequest.struct_class = Types::GetFeatureRequest

    GetFeatureResponse.add_member(:feature, Shapes::ShapeRef.new(shape: Feature, required: true, location_name: "feature"))
    GetFeatureResponse.struct_class = Types::GetFeatureResponse

    GetLaunchRequest.add_member(:launch, Shapes::ShapeRef.new(shape: LaunchName, required: true, location: "uri", location_name: "launch"))
    GetLaunchRequest.add_member(:project, Shapes::ShapeRef.new(shape: ProjectRef, required: true, location: "uri", location_name: "project"))
    GetLaunchRequest.struct_class = Types::GetLaunchRequest

    GetLaunchResponse.add_member(:launch, Shapes::ShapeRef.new(shape: Launch, location_name: "launch"))
    GetLaunchResponse.struct_class = Types::GetLaunchResponse

    GetProjectRequest.add_member(:project, Shapes::ShapeRef.new(shape: ProjectRef, required: true, location: "uri", location_name: "project"))
    GetProjectRequest.struct_class = Types::GetProjectRequest

    GetProjectResponse.add_member(:project, Shapes::ShapeRef.new(shape: Project, required: true, location_name: "project"))
    GetProjectResponse.struct_class = Types::GetProjectResponse

    GetSegmentRequest.add_member(:segment, Shapes::ShapeRef.new(shape: SegmentRef, required: true, location: "uri", location_name: "segment"))
    GetSegmentRequest.struct_class = Types::GetSegmentRequest

    GetSegmentResponse.add_member(:segment, Shapes::ShapeRef.new(shape: Segment, required: true, location_name: "segment"))
    GetSegmentResponse.struct_class = Types::GetSegmentResponse

    GroupToWeightMap.key = Shapes::ShapeRef.new(shape: GroupName)
    GroupToWeightMap.value = Shapes::ShapeRef.new(shape: SplitWeight)

    InternalServerException.add_member(:message, Shapes::ShapeRef.new(shape: String, location_name: "message"))
    InternalServerException.struct_class = Types::InternalServerException

    Launch.add_member(:arn, Shapes::ShapeRef.new(shape: LaunchArn, required: true, location_name: "arn"))
    Launch.add_member(:created_time, Shapes::ShapeRef.new(shape: Timestamp, required: true, location_name: "createdTime"))
    Launch.add_member(:description, Shapes::ShapeRef.new(shape: Description, location_name: "description"))
    Launch.add_member(:execution, Shapes::ShapeRef.new(shape: LaunchExecution, location_name: "execution"))
    Launch.add_member(:groups, Shapes::ShapeRef.new(shape: LaunchGroupList, location_name: "groups"))
    Launch.add_member(:last_updated_time, Shapes::ShapeRef.new(shape: Timestamp, required: true, location_name: "lastUpdatedTime"))
    Launch.add_member(:metric_monitors, Shapes::ShapeRef.new(shape: MetricMonitorList, location_name: "metricMonitors"))
    Launch.add_member(:name, Shapes::ShapeRef.new(shape: LaunchName, required: true, location_name: "name"))
    Launch.add_member(:project, Shapes::ShapeRef.new(shape: ProjectRef, location_name: "project"))
    Launch.add_member(:randomization_salt, Shapes::ShapeRef.new(shape: RandomizationSalt, location_name: "randomizationSalt"))
    Launch.add_member(:scheduled_splits_definition, Shapes::ShapeRef.new(shape: ScheduledSplitsLaunchDefinition, location_name: "scheduledSplitsDefinition"))
    Launch.add_member(:status, Shapes::ShapeRef.new(shape: LaunchStatus, required: true, location_name: "status"))
    Launch.add_member(:status_reason, Shapes::ShapeRef.new(shape: Description, location_name: "statusReason"))
    Launch.add_member(:tags, Shapes::ShapeRef.new(shape: TagMap, location_name: "tags"))
    Launch.add_member(:type, Shapes::ShapeRef.new(shape: LaunchType, required: true, location_name: "type"))
    Launch.struct_class = Types::Launch

    LaunchExecution.add_member(:ended_time, Shapes::ShapeRef.new(shape: Timestamp, location_name: "endedTime"))
    LaunchExecution.add_member(:started_time, Shapes::ShapeRef.new(shape: Timestamp, location_name: "startedTime"))
    LaunchExecution.struct_class = Types::LaunchExecution

    LaunchGroup.add_member(:description, Shapes::ShapeRef.new(shape: Description, location_name: "description"))
    LaunchGroup.add_member(:feature_variations, Shapes::ShapeRef.new(shape: FeatureToVariationMap, required: true, location_name: "featureVariations"))
    LaunchGroup.add_member(:name, Shapes::ShapeRef.new(shape: GroupName, required: true, location_name: "name"))
    LaunchGroup.struct_class = Types::LaunchGroup

    LaunchGroupConfig.add_member(:description, Shapes::ShapeRef.new(shape: Description, location_name: "description"))
    LaunchGroupConfig.add_member(:feature, Shapes::ShapeRef.new(shape: FeatureName, required: true, location_name: "feature"))
    LaunchGroupConfig.add_member(:name, Shapes::ShapeRef.new(shape: GroupName, required: true, location_name: "name"))
    LaunchGroupConfig.add_member(:variation, Shapes::ShapeRef.new(shape: VariationName, required: true, location_name: "variation"))
    LaunchGroupConfig.struct_class = Types::LaunchGroupConfig

    LaunchGroupConfigList.member = Shapes::ShapeRef.new(shape: LaunchGroupConfig)

    LaunchGroupList.member = Shapes::ShapeRef.new(shape: LaunchGroup)

    LaunchesList.member = Shapes::ShapeRef.new(shape: Launch)

    ListExperimentsRequest.add_member(:max_results, Shapes::ShapeRef.new(shape: MaxExperiments, location: "querystring", location_name: "maxResults"))
    ListExperimentsRequest.add_member(:next_token, Shapes::ShapeRef.new(shape: NextToken, location: "querystring", location_name: "nextToken"))
    ListExperimentsRequest.add_member(:project, Shapes::ShapeRef.new(shape: ProjectRef, required: true, location: "uri", location_name: "project"))
    ListExperimentsRequest.add_member(:status, Shapes::ShapeRef.new(shape: ExperimentStatus, location: "querystring", location_name: "status"))
    ListExperimentsRequest.struct_class = Types::ListExperimentsRequest

    ListExperimentsResponse.add_member(:experiments, Shapes::ShapeRef.new(shape: ExperimentList, location_name: "experiments"))
    ListExperimentsResponse.add_member(:next_token, Shapes::ShapeRef.new(shape: NextToken, location_name: "nextToken"))
    ListExperimentsResponse.struct_class = Types::ListExperimentsResponse

    ListFeaturesRequest.add_member(:max_results, Shapes::ShapeRef.new(shape: MaxFeatures, location: "querystring", location_name: "maxResults"))
    ListFeaturesRequest.add_member(:next_token, Shapes::ShapeRef.new(shape: NextToken, location: "querystring", location_name: "nextToken"))
    ListFeaturesRequest.add_member(:project, Shapes::ShapeRef.new(shape: ProjectRef, required: true, location: "uri", location_name: "project"))
    ListFeaturesRequest.struct_class = Types::ListFeaturesRequest

    ListFeaturesResponse.add_member(:features, Shapes::ShapeRef.new(shape: FeatureSummariesList, location_name: "features"))
    ListFeaturesResponse.add_member(:next_token, Shapes::ShapeRef.new(shape: NextToken, location_name: "nextToken"))
    ListFeaturesResponse.struct_class = Types::ListFeaturesResponse

    ListLaunchesRequest.add_member(:max_results, Shapes::ShapeRef.new(shape: MaxLaunches, location: "querystring", location_name: "maxResults"))
    ListLaunchesRequest.add_member(:next_token, Shapes::ShapeRef.new(shape: NextToken, location: "querystring", location_name: "nextToken"))
    ListLaunchesRequest.add_member(:project, Shapes::ShapeRef.new(shape: ProjectRef, required: true, location: "uri", location_name: "project"))
    ListLaunchesRequest.add_member(:status, Shapes::ShapeRef.new(shape: LaunchStatus, location: "querystring", location_name: "status"))
    ListLaunchesRequest.struct_class = Types::ListLaunchesRequest

    ListLaunchesResponse.add_member(:launches, Shapes::ShapeRef.new(shape: LaunchesList, location_name: "launches"))
    ListLaunchesResponse.add_member(:next_token, Shapes::ShapeRef.new(shape: NextToken, location_name: "nextToken"))
    ListLaunchesResponse.struct_class = Types::ListLaunchesResponse

    ListProjectsRequest.add_member(:max_results, Shapes::ShapeRef.new(shape: MaxProjects, location: "querystring", location_name: "maxResults"))
    ListProjectsRequest.add_member(:next_token, Shapes::ShapeRef.new(shape: NextToken, location: "querystring", location_name: "nextToken"))
    ListProjectsRequest.struct_class = Types::ListProjectsRequest

    ListProjectsResponse.add_member(:next_token, Shapes::ShapeRef.new(shape: NextToken, location_name: "nextToken"))
    ListProjectsResponse.add_member(:projects, Shapes::ShapeRef.new(shape: ProjectSummariesList, location_name: "projects"))
    ListProjectsResponse.struct_class = Types::ListProjectsResponse

    ListSegmentReferencesRequest.add_member(:max_results, Shapes::ShapeRef.new(shape: MaxReferences, location: "querystring", location_name: "maxResults"))
    ListSegmentReferencesRequest.add_member(:next_token, Shapes::ShapeRef.new(shape: NextToken, location: "querystring", location_name: "nextToken"))
    ListSegmentReferencesRequest.add_member(:segment, Shapes::ShapeRef.new(shape: SegmentRef, required: true, location: "uri", location_name: "segment"))
    ListSegmentReferencesRequest.add_member(:type, Shapes::ShapeRef.new(shape: SegmentReferenceResourceType, required: true, location: "querystring", location_name: "type"))
    ListSegmentReferencesRequest.struct_class = Types::ListSegmentReferencesRequest

    ListSegmentReferencesResponse.add_member(:next_token, Shapes::ShapeRef.new(shape: NextToken, location_name: "nextToken"))
    ListSegmentReferencesResponse.add_member(:referenced_by, Shapes::ShapeRef.new(shape: RefResourceList, location_name: "referencedBy"))
    ListSegmentReferencesResponse.struct_class = Types::ListSegmentReferencesResponse

    ListSegmentsRequest.add_member(:max_results, Shapes::ShapeRef.new(shape: MaxSegments, location: "querystring", location_name: "maxResults"))
    ListSegmentsRequest.add_member(:next_token, Shapes::ShapeRef.new(shape: NextToken, location: "querystring", location_name: "nextToken"))
    ListSegmentsRequest.struct_class = Types::ListSegmentsRequest

    ListSegmentsResponse.add_member(:next_token, Shapes::ShapeRef.new(shape: NextToken, location_name: "nextToken"))
    ListSegmentsResponse.add_member(:segments, Shapes::ShapeRef.new(shape: SegmentList, location_name: "segments"))
    ListSegmentsResponse.struct_class = Types::ListSegmentsResponse

    ListTagsForResourceRequest.add_member(:resource_arn, Shapes::ShapeRef.new(shape: Arn, required: true, location: "uri", location_name: "resourceArn"))
    ListTagsForResourceRequest.struct_class = Types::ListTagsForResourceRequest

    ListTagsForResourceResponse.add_member(:tags, Shapes::ShapeRef.new(shape: TagMap, location_name: "tags"))
    ListTagsForResourceResponse.struct_class = Types::ListTagsForResourceResponse

    MetricDefinition.add_member(:entity_id_key, Shapes::ShapeRef.new(shape: JsonPath, location_name: "entityIdKey"))
    MetricDefinition.add_member(:event_pattern, Shapes::ShapeRef.new(shape: JsonValue, location_name: "eventPattern", metadata: {"jsonvalue" => true}))
    MetricDefinition.add_member(:name, Shapes::ShapeRef.new(shape: CwDimensionSafeName, location_name: "name"))
    MetricDefinition.add_member(:unit_label, Shapes::ShapeRef.new(shape: MetricUnitLabel, location_name: "unitLabel"))
    MetricDefinition.add_member(:value_key, Shapes::ShapeRef.new(shape: JsonPath, location_name: "valueKey"))
    MetricDefinition.struct_class = Types::MetricDefinition

    MetricDefinitionConfig.add_member(:entity_id_key, Shapes::ShapeRef.new(shape: JsonPath, required: true, location_name: "entityIdKey"))
    MetricDefinitionConfig.add_member(:event_pattern, Shapes::ShapeRef.new(shape: MetricDefinitionConfigEventPatternString, location_name: "eventPattern", metadata: {"jsonvalue" => true}))
    MetricDefinitionConfig.add_member(:name, Shapes::ShapeRef.new(shape: CwDimensionSafeName, required: true, location_name: "name"))
    MetricDefinitionConfig.add_member(:unit_label, Shapes::ShapeRef.new(shape: MetricUnitLabel, location_name: "unitLabel"))
    MetricDefinitionConfig.add_member(:value_key, Shapes::ShapeRef.new(shape: JsonPath, required: true, location_name: "valueKey"))
    MetricDefinitionConfig.struct_class = Types::MetricDefinitionConfig

    MetricGoal.add_member(:desired_change, Shapes::ShapeRef.new(shape: ChangeDirectionEnum, location_name: "desiredChange"))
    MetricGoal.add_member(:metric_definition, Shapes::ShapeRef.new(shape: MetricDefinition, required: true, location_name: "metricDefinition"))
    MetricGoal.struct_class = Types::MetricGoal

    MetricGoalConfig.add_member(:desired_change, Shapes::ShapeRef.new(shape: ChangeDirectionEnum, location_name: "desiredChange"))
    MetricGoalConfig.add_member(:metric_definition, Shapes::ShapeRef.new(shape: MetricDefinitionConfig, required: true, location_name: "metricDefinition"))
    MetricGoalConfig.struct_class = Types::MetricGoalConfig

    MetricGoalConfigList.member = Shapes::ShapeRef.new(shape: MetricGoalConfig)

    MetricGoalsList.member = Shapes::ShapeRef.new(shape: MetricGoal)

    MetricMonitor.add_member(:metric_definition, Shapes::ShapeRef.new(shape: MetricDefinition, required: true, location_name: "metricDefinition"))
    MetricMonitor.struct_class = Types::MetricMonitor

    MetricMonitorConfig.add_member(:metric_definition, Shapes::ShapeRef.new(shape: MetricDefinitionConfig, required: true, location_name: "metricDefinition"))
    MetricMonitorConfig.struct_class = Types::MetricMonitorConfig

    MetricMonitorConfigList.member = Shapes::ShapeRef.new(shape: MetricMonitorConfig)

    MetricMonitorList.member = Shapes::ShapeRef.new(shape: MetricMonitor)

    MetricNameList.member = Shapes::ShapeRef.new(shape: CwDimensionSafeName)

    OnlineAbConfig.add_member(:control_treatment_name, Shapes::ShapeRef.new(shape: TreatmentName, location_name: "controlTreatmentName"))
    OnlineAbConfig.add_member(:treatment_weights, Shapes::ShapeRef.new(shape: TreatmentToWeightMap, location_name: "treatmentWeights"))
    OnlineAbConfig.struct_class = Types::OnlineAbConfig

    OnlineAbDefinition.add_member(:control_treatment_name, Shapes::ShapeRef.new(shape: TreatmentName, location_name: "controlTreatmentName"))
    OnlineAbDefinition.add_member(:treatment_weights, Shapes::ShapeRef.new(shape: TreatmentToWeightMap, location_name: "treatmentWeights"))
    OnlineAbDefinition.struct_class = Types::OnlineAbDefinition

    Project.add_member(:active_experiment_count, Shapes::ShapeRef.new(shape: Long, location_name: "activeExperimentCount"))
    Project.add_member(:active_launch_count, Shapes::ShapeRef.new(shape: Long, location_name: "activeLaunchCount"))
    Project.add_member(:app_config_resource, Shapes::ShapeRef.new(shape: ProjectAppConfigResource, location_name: "appConfigResource"))
    Project.add_member(:arn, Shapes::ShapeRef.new(shape: ProjectArn, required: true, location_name: "arn"))
    Project.add_member(:created_time, Shapes::ShapeRef.new(shape: Timestamp, required: true, location_name: "createdTime"))
    Project.add_member(:data_delivery, Shapes::ShapeRef.new(shape: ProjectDataDelivery, location_name: "dataDelivery"))
    Project.add_member(:description, Shapes::ShapeRef.new(shape: Description, location_name: "description"))
    Project.add_member(:experiment_count, Shapes::ShapeRef.new(shape: Long, location_name: "experimentCount"))
    Project.add_member(:feature_count, Shapes::ShapeRef.new(shape: Long, location_name: "featureCount"))
    Project.add_member(:last_updated_time, Shapes::ShapeRef.new(shape: Timestamp, required: true, location_name: "lastUpdatedTime"))
    Project.add_member(:launch_count, Shapes::ShapeRef.new(shape: Long, location_name: "launchCount"))
    Project.add_member(:name, Shapes::ShapeRef.new(shape: ProjectName, required: true, location_name: "name"))
    Project.add_member(:status, Shapes::ShapeRef.new(shape: ProjectStatus, required: true, location_name: "status"))
    Project.add_member(:tags, Shapes::ShapeRef.new(shape: TagMap, location_name: "tags"))
    Project.struct_class = Types::Project

    ProjectAppConfigResource.add_member(:application_id, Shapes::ShapeRef.new(shape: AppConfigResourceId, required: true, location_name: "applicationId"))
    ProjectAppConfigResource.add_member(:configuration_profile_id, Shapes::ShapeRef.new(shape: AppConfigResourceId, required: true, location_name: "configurationProfileId"))
    ProjectAppConfigResource.add_member(:environment_id, Shapes::ShapeRef.new(shape: AppConfigResourceId, required: true, location_name: "environmentId"))
    ProjectAppConfigResource.struct_class = Types::ProjectAppConfigResource

    ProjectAppConfigResourceConfig.add_member(:application_id, Shapes::ShapeRef.new(shape: AppConfigResourceId, location_name: "applicationId"))
    ProjectAppConfigResourceConfig.add_member(:environment_id, Shapes::ShapeRef.new(shape: AppConfigResourceId, location_name: "environmentId"))
    ProjectAppConfigResourceConfig.struct_class = Types::ProjectAppConfigResourceConfig

    ProjectDataDelivery.add_member(:cloud_watch_logs, Shapes::ShapeRef.new(shape: CloudWatchLogsDestination, location_name: "cloudWatchLogs"))
    ProjectDataDelivery.add_member(:s3_destination, Shapes::ShapeRef.new(shape: S3Destination, location_name: "s3Destination"))
    ProjectDataDelivery.struct_class = Types::ProjectDataDelivery

    ProjectDataDeliveryConfig.add_member(:cloud_watch_logs, Shapes::ShapeRef.new(shape: CloudWatchLogsDestinationConfig, location_name: "cloudWatchLogs"))
    ProjectDataDeliveryConfig.add_member(:s3_destination, Shapes::ShapeRef.new(shape: S3DestinationConfig, location_name: "s3Destination"))
    ProjectDataDeliveryConfig.struct_class = Types::ProjectDataDeliveryConfig

    ProjectSummariesList.member = Shapes::ShapeRef.new(shape: ProjectSummary)

    ProjectSummary.add_member(:active_experiment_count, Shapes::ShapeRef.new(shape: Long, location_name: "activeExperimentCount"))
    ProjectSummary.add_member(:active_launch_count, Shapes::ShapeRef.new(shape: Long, location_name: "activeLaunchCount"))
    ProjectSummary.add_member(:arn, Shapes::ShapeRef.new(shape: ProjectArn, required: true, location_name: "arn"))
    ProjectSummary.add_member(:created_time, Shapes::ShapeRef.new(shape: Timestamp, required: true, location_name: "createdTime"))
    ProjectSummary.add_member(:description, Shapes::ShapeRef.new(shape: Description, location_name: "description"))
    ProjectSummary.add_member(:experiment_count, Shapes::ShapeRef.new(shape: Long, location_name: "experimentCount"))
    ProjectSummary.add_member(:feature_count, Shapes::ShapeRef.new(shape: Long, location_name: "featureCount"))
    ProjectSummary.add_member(:last_updated_time, Shapes::ShapeRef.new(shape: Timestamp, required: true, location_name: "lastUpdatedTime"))
    ProjectSummary.add_member(:launch_count, Shapes::ShapeRef.new(shape: Long, location_name: "launchCount"))
    ProjectSummary.add_member(:name, Shapes::ShapeRef.new(shape: ProjectName, required: true, location_name: "name"))
    ProjectSummary.add_member(:status, Shapes::ShapeRef.new(shape: ProjectStatus, required: true, location_name: "status"))
    ProjectSummary.add_member(:tags, Shapes::ShapeRef.new(shape: TagMap, location_name: "tags"))
    ProjectSummary.struct_class = Types::ProjectSummary

    PutProjectEventsRequest.add_member(:events, Shapes::ShapeRef.new(shape: EventList, required: true, location_name: "events"))
    PutProjectEventsRequest.add_member(:project, Shapes::ShapeRef.new(shape: ProjectRef, required: true, location: "uri", location_name: "project"))
    PutProjectEventsRequest.struct_class = Types::PutProjectEventsRequest

    PutProjectEventsResponse.add_member(:event_results, Shapes::ShapeRef.new(shape: PutProjectEventsResultEntryList, location_name: "eventResults"))
    PutProjectEventsResponse.add_member(:failed_event_count, Shapes::ShapeRef.new(shape: Integer, location_name: "failedEventCount"))
    PutProjectEventsResponse.struct_class = Types::PutProjectEventsResponse

    PutProjectEventsResultEntry.add_member(:error_code, Shapes::ShapeRef.new(shape: ErrorCodeEnum, location_name: "errorCode"))
    PutProjectEventsResultEntry.add_member(:error_message, Shapes::ShapeRef.new(shape: ErrorMessage, location_name: "errorMessage"))
    PutProjectEventsResultEntry.add_member(:event_id, Shapes::ShapeRef.new(shape: Uuid, location_name: "eventId"))
    PutProjectEventsResultEntry.struct_class = Types::PutProjectEventsResultEntry

    PutProjectEventsResultEntryList.member = Shapes::ShapeRef.new(shape: PutProjectEventsResultEntry)

    RefResource.add_member(:arn, Shapes::ShapeRef.new(shape: String, location_name: "arn"))
    RefResource.add_member(:end_time, Shapes::ShapeRef.new(shape: String, location_name: "endTime"))
    RefResource.add_member(:last_updated_on, Shapes::ShapeRef.new(shape: String, location_name: "lastUpdatedOn"))
    RefResource.add_member(:name, Shapes::ShapeRef.new(shape: String, required: true, location_name: "name"))
    RefResource.add_member(:start_time, Shapes::ShapeRef.new(shape: String, location_name: "startTime"))
    RefResource.add_member(:status, Shapes::ShapeRef.new(shape: String, location_name: "status"))
    RefResource.add_member(:type, Shapes::ShapeRef.new(shape: String, required: true, location_name: "type"))
    RefResource.struct_class = Types::RefResource

    RefResourceList.member = Shapes::ShapeRef.new(shape: RefResource)

    ResourceNotFoundException.add_member(:message, Shapes::ShapeRef.new(shape: String, location_name: "message"))
    ResourceNotFoundException.add_member(:resource_id, Shapes::ShapeRef.new(shape: String, location_name: "resourceId"))
    ResourceNotFoundException.add_member(:resource_type, Shapes::ShapeRef.new(shape: String, location_name: "resourceType"))
    ResourceNotFoundException.struct_class = Types::ResourceNotFoundException

    S3Destination.add_member(:bucket, Shapes::ShapeRef.new(shape: S3BucketSafeName, location_name: "bucket"))
    S3Destination.add_member(:prefix, Shapes::ShapeRef.new(shape: S3PrefixSafeName, location_name: "prefix"))
    S3Destination.struct_class = Types::S3Destination

    S3DestinationConfig.add_member(:bucket, Shapes::ShapeRef.new(shape: S3BucketSafeName, location_name: "bucket"))
    S3DestinationConfig.add_member(:prefix, Shapes::ShapeRef.new(shape: S3PrefixSafeName, location_name: "prefix"))
    S3DestinationConfig.struct_class = Types::S3DestinationConfig

    ScheduledSplit.add_member(:group_weights, Shapes::ShapeRef.new(shape: GroupToWeightMap, location_name: "groupWeights"))
    ScheduledSplit.add_member(:segment_overrides, Shapes::ShapeRef.new(shape: SegmentOverridesList, location_name: "segmentOverrides"))
    ScheduledSplit.add_member(:start_time, Shapes::ShapeRef.new(shape: Timestamp, required: true, location_name: "startTime"))
    ScheduledSplit.struct_class = Types::ScheduledSplit

    ScheduledSplitConfig.add_member(:group_weights, Shapes::ShapeRef.new(shape: GroupToWeightMap, required: true, location_name: "groupWeights"))
    ScheduledSplitConfig.add_member(:segment_overrides, Shapes::ShapeRef.new(shape: SegmentOverridesList, location_name: "segmentOverrides"))
    ScheduledSplitConfig.add_member(:start_time, Shapes::ShapeRef.new(shape: Timestamp, required: true, location_name: "startTime"))
    ScheduledSplitConfig.struct_class = Types::ScheduledSplitConfig

    ScheduledSplitConfigList.member = Shapes::ShapeRef.new(shape: ScheduledSplitConfig)

    ScheduledSplitsLaunchConfig.add_member(:steps, Shapes::ShapeRef.new(shape: ScheduledSplitConfigList, required: true, location_name: "steps"))
    ScheduledSplitsLaunchConfig.struct_class = Types::ScheduledSplitsLaunchConfig

    ScheduledSplitsLaunchDefinition.add_member(:steps, Shapes::ShapeRef.new(shape: ScheduledStepList, location_name: "steps"))
    ScheduledSplitsLaunchDefinition.struct_class = Types::ScheduledSplitsLaunchDefinition

    ScheduledStepList.member = Shapes::ShapeRef.new(shape: ScheduledSplit)

    Segment.add_member(:arn, Shapes::ShapeRef.new(shape: SegmentArn, required: true, location_name: "arn"))
    Segment.add_member(:created_time, Shapes::ShapeRef.new(shape: Timestamp, required: true, location_name: "createdTime"))
    Segment.add_member(:description, Shapes::ShapeRef.new(shape: Description, location_name: "description"))
    Segment.add_member(:experiment_count, Shapes::ShapeRef.new(shape: Long, location_name: "experimentCount"))
    Segment.add_member(:last_updated_time, Shapes::ShapeRef.new(shape: Timestamp, required: true, location_name: "lastUpdatedTime"))
    Segment.add_member(:launch_count, Shapes::ShapeRef.new(shape: Long, location_name: "launchCount"))
    Segment.add_member(:name, Shapes::ShapeRef.new(shape: SegmentName, required: true, location_name: "name"))
    Segment.add_member(:pattern, Shapes::ShapeRef.new(shape: SegmentPattern, required: true, location_name: "pattern", metadata: {"jsonvalue" => true}))
    Segment.add_member(:tags, Shapes::ShapeRef.new(shape: TagMap, location_name: "tags"))
    Segment.struct_class = Types::Segment

    SegmentList.member = Shapes::ShapeRef.new(shape: Segment)

    SegmentOverride.add_member(:evaluation_order, Shapes::ShapeRef.new(shape: Long, required: true, location_name: "evaluationOrder"))
    SegmentOverride.add_member(:segment, Shapes::ShapeRef.new(shape: SegmentRef, required: true, location_name: "segment"))
    SegmentOverride.add_member(:weights, Shapes::ShapeRef.new(shape: GroupToWeightMap, required: true, location_name: "weights"))
    SegmentOverride.struct_class = Types::SegmentOverride

    SegmentOverridesList.member = Shapes::ShapeRef.new(shape: SegmentOverride)

    ServiceQuotaExceededException.add_member(:message, Shapes::ShapeRef.new(shape: String, location_name: "message"))
    ServiceQuotaExceededException.add_member(:quota_code, Shapes::ShapeRef.new(shape: String, location_name: "quotaCode"))
    ServiceQuotaExceededException.add_member(:resource_id, Shapes::ShapeRef.new(shape: String, location_name: "resourceId"))
    ServiceQuotaExceededException.add_member(:resource_type, Shapes::ShapeRef.new(shape: String, location_name: "resourceType"))
    ServiceQuotaExceededException.add_member(:service_code, Shapes::ShapeRef.new(shape: String, location_name: "serviceCode"))
    ServiceQuotaExceededException.struct_class = Types::ServiceQuotaExceededException

    ServiceUnavailableException.add_member(:message, Shapes::ShapeRef.new(shape: String, location_name: "message"))
    ServiceUnavailableException.struct_class = Types::ServiceUnavailableException

    StartExperimentRequest.add_member(:analysis_complete_time, Shapes::ShapeRef.new(shape: Timestamp, required: true, location_name: "analysisCompleteTime"))
    StartExperimentRequest.add_member(:experiment, Shapes::ShapeRef.new(shape: ExperimentName, required: true, location: "uri", location_name: "experiment"))
    StartExperimentRequest.add_member(:project, Shapes::ShapeRef.new(shape: ProjectRef, required: true, location: "uri", location_name: "project"))
    StartExperimentRequest.struct_class = Types::StartExperimentRequest

    StartExperimentResponse.add_member(:started_time, Shapes::ShapeRef.new(shape: Timestamp, location_name: "startedTime"))
    StartExperimentResponse.struct_class = Types::StartExperimentResponse

    StartLaunchRequest.add_member(:launch, Shapes::ShapeRef.new(shape: LaunchName, required: true, location: "uri", location_name: "launch"))
    StartLaunchRequest.add_member(:project, Shapes::ShapeRef.new(shape: ProjectRef, required: true, location: "uri", location_name: "project"))
    StartLaunchRequest.struct_class = Types::StartLaunchRequest

    StartLaunchResponse.add_member(:launch, Shapes::ShapeRef.new(shape: Launch, required: true, location_name: "launch"))
    StartLaunchResponse.struct_class = Types::StartLaunchResponse

    StopExperimentRequest.add_member(:desired_state, Shapes::ShapeRef.new(shape: ExperimentStopDesiredState, location_name: "desiredState"))
    StopExperimentRequest.add_member(:experiment, Shapes::ShapeRef.new(shape: ExperimentName, required: true, location: "uri", location_name: "experiment"))
    StopExperimentRequest.add_member(:project, Shapes::ShapeRef.new(shape: ProjectRef, required: true, location: "uri", location_name: "project"))
    StopExperimentRequest.add_member(:reason, Shapes::ShapeRef.new(shape: Description, location_name: "reason"))
    StopExperimentRequest.struct_class = Types::StopExperimentRequest

    StopExperimentResponse.add_member(:ended_time, Shapes::ShapeRef.new(shape: Timestamp, location_name: "endedTime"))
    StopExperimentResponse.struct_class = Types::StopExperimentResponse

    StopLaunchRequest.add_member(:desired_state, Shapes::ShapeRef.new(shape: LaunchStopDesiredState, location_name: "desiredState"))
    StopLaunchRequest.add_member(:launch, Shapes::ShapeRef.new(shape: LaunchName, required: true, location: "uri", location_name: "launch"))
    StopLaunchRequest.add_member(:project, Shapes::ShapeRef.new(shape: ProjectRef, required: true, location: "uri", location_name: "project"))
    StopLaunchRequest.add_member(:reason, Shapes::ShapeRef.new(shape: Description, location_name: "reason"))
    StopLaunchRequest.struct_class = Types::StopLaunchRequest

    StopLaunchResponse.add_member(:ended_time, Shapes::ShapeRef.new(shape: Timestamp, location_name: "endedTime"))
    StopLaunchResponse.struct_class = Types::StopLaunchResponse

    TagKeyList.member = Shapes::ShapeRef.new(shape: TagKey)

    TagMap.key = Shapes::ShapeRef.new(shape: TagKey)
    TagMap.value = Shapes::ShapeRef.new(shape: TagValue)

    TagResourceRequest.add_member(:resource_arn, Shapes::ShapeRef.new(shape: Arn, required: true, location: "uri", location_name: "resourceArn"))
    TagResourceRequest.add_member(:tags, Shapes::ShapeRef.new(shape: TagMap, required: true, location_name: "tags"))
    TagResourceRequest.struct_class = Types::TagResourceRequest

    TagResourceResponse.struct_class = Types::TagResourceResponse

    TestSegmentPatternRequest.add_member(:pattern, Shapes::ShapeRef.new(shape: SegmentPattern, required: true, location_name: "pattern", metadata: {"jsonvalue" => true}))
    TestSegmentPatternRequest.add_member(:payload, Shapes::ShapeRef.new(shape: JsonValue, required: true, location_name: "payload", metadata: {"jsonvalue" => true}))
    TestSegmentPatternRequest.struct_class = Types::TestSegmentPatternRequest

    TestSegmentPatternResponse.add_member(:match, Shapes::ShapeRef.new(shape: Boolean, required: true, location_name: "match"))
    TestSegmentPatternResponse.struct_class = Types::TestSegmentPatternResponse

    ThrottlingException.add_member(:message, Shapes::ShapeRef.new(shape: String, location_name: "message"))
    ThrottlingException.add_member(:quota_code, Shapes::ShapeRef.new(shape: String, location_name: "quotaCode"))
    ThrottlingException.add_member(:service_code, Shapes::ShapeRef.new(shape: String, location_name: "serviceCode"))
    ThrottlingException.struct_class = Types::ThrottlingException

    TimestampList.member = Shapes::ShapeRef.new(shape: Timestamp)

    Treatment.add_member(:description, Shapes::ShapeRef.new(shape: Description, location_name: "description"))
    Treatment.add_member(:feature_variations, Shapes::ShapeRef.new(shape: FeatureToVariationMap, location_name: "featureVariations"))
    Treatment.add_member(:name, Shapes::ShapeRef.new(shape: TreatmentName, required: true, location_name: "name"))
    Treatment.struct_class = Types::Treatment

    TreatmentConfig.add_member(:description, Shapes::ShapeRef.new(shape: Description, location_name: "description"))
    TreatmentConfig.add_member(:feature, Shapes::ShapeRef.new(shape: FeatureName, required: true, location_name: "feature"))
    TreatmentConfig.add_member(:name, Shapes::ShapeRef.new(shape: TreatmentName, required: true, location_name: "name"))
    TreatmentConfig.add_member(:variation, Shapes::ShapeRef.new(shape: VariationName, required: true, location_name: "variation"))
    TreatmentConfig.struct_class = Types::TreatmentConfig

    TreatmentConfigList.member = Shapes::ShapeRef.new(shape: TreatmentConfig)

    TreatmentList.member = Shapes::ShapeRef.new(shape: Treatment)

    TreatmentNameList.member = Shapes::ShapeRef.new(shape: TreatmentName)

    TreatmentToWeightMap.key = Shapes::ShapeRef.new(shape: TreatmentName)
    TreatmentToWeightMap.value = Shapes::ShapeRef.new(shape: SplitWeight)

    UntagResourceRequest.add_member(:resource_arn, Shapes::ShapeRef.new(shape: Arn, required: true, location: "uri", location_name: "resourceArn"))
    UntagResourceRequest.add_member(:tag_keys, Shapes::ShapeRef.new(shape: TagKeyList, required: true, location: "querystring", location_name: "tagKeys"))
    UntagResourceRequest.struct_class = Types::UntagResourceRequest

    UntagResourceResponse.struct_class = Types::UntagResourceResponse

    UpdateExperimentRequest.add_member(:description, Shapes::ShapeRef.new(shape: Description, location_name: "description"))
    UpdateExperimentRequest.add_member(:experiment, Shapes::ShapeRef.new(shape: ExperimentName, required: true, location: "uri", location_name: "experiment"))
    UpdateExperimentRequest.add_member(:metric_goals, Shapes::ShapeRef.new(shape: MetricGoalConfigList, location_name: "metricGoals"))
    UpdateExperimentRequest.add_member(:online_ab_config, Shapes::ShapeRef.new(shape: OnlineAbConfig, location_name: "onlineAbConfig"))
    UpdateExperimentRequest.add_member(:project, Shapes::ShapeRef.new(shape: ProjectRef, required: true, location: "uri", location_name: "project"))
    UpdateExperimentRequest.add_member(:randomization_salt, Shapes::ShapeRef.new(shape: RandomizationSalt, location_name: "randomizationSalt"))
    UpdateExperimentRequest.add_member(:remove_segment, Shapes::ShapeRef.new(shape: PrimitiveBoolean, location_name: "removeSegment"))
    UpdateExperimentRequest.add_member(:sampling_rate, Shapes::ShapeRef.new(shape: SplitWeight, location_name: "samplingRate", metadata: {"box" => true}))
    UpdateExperimentRequest.add_member(:segment, Shapes::ShapeRef.new(shape: SegmentRef, location_name: "segment"))
    UpdateExperimentRequest.add_member(:treatments, Shapes::ShapeRef.new(shape: TreatmentConfigList, location_name: "treatments"))
    UpdateExperimentRequest.struct_class = Types::UpdateExperimentRequest

    UpdateExperimentResponse.add_member(:experiment, Shapes::ShapeRef.new(shape: Experiment, required: true, location_name: "experiment"))
    UpdateExperimentResponse.struct_class = Types::UpdateExperimentResponse

    UpdateFeatureRequest.add_member(:add_or_update_variations, Shapes::ShapeRef.new(shape: VariationConfigsList, location_name: "addOrUpdateVariations"))
    UpdateFeatureRequest.add_member(:default_variation, Shapes::ShapeRef.new(shape: VariationName, location_name: "defaultVariation"))
    UpdateFeatureRequest.add_member(:description, Shapes::ShapeRef.new(shape: Description, location_name: "description"))
    UpdateFeatureRequest.add_member(:entity_overrides, Shapes::ShapeRef.new(shape: EntityOverrideMap, location_name: "entityOverrides"))
    UpdateFeatureRequest.add_member(:evaluation_strategy, Shapes::ShapeRef.new(shape: FeatureEvaluationStrategy, location_name: "evaluationStrategy"))
    UpdateFeatureRequest.add_member(:feature, Shapes::ShapeRef.new(shape: FeatureName, required: true, location: "uri", location_name: "feature"))
    UpdateFeatureRequest.add_member(:project, Shapes::ShapeRef.new(shape: ProjectRef, required: true, location: "uri", location_name: "project"))
    UpdateFeatureRequest.add_member(:remove_variations, Shapes::ShapeRef.new(shape: VariationNameList, location_name: "removeVariations"))
    UpdateFeatureRequest.struct_class = Types::UpdateFeatureRequest

    UpdateFeatureResponse.add_member(:feature, Shapes::ShapeRef.new(shape: Feature, required: true, location_name: "feature"))
    UpdateFeatureResponse.struct_class = Types::UpdateFeatureResponse

    UpdateLaunchRequest.add_member(:description, Shapes::ShapeRef.new(shape: Description, location_name: "description"))
    UpdateLaunchRequest.add_member(:groups, Shapes::ShapeRef.new(shape: LaunchGroupConfigList, location_name: "groups"))
    UpdateLaunchRequest.add_member(:launch, Shapes::ShapeRef.new(shape: LaunchName, required: true, location: "uri", location_name: "launch"))
    UpdateLaunchRequest.add_member(:metric_monitors, Shapes::ShapeRef.new(shape: MetricMonitorConfigList, location_name: "metricMonitors"))
    UpdateLaunchRequest.add_member(:project, Shapes::ShapeRef.new(shape: ProjectRef, required: true, location: "uri", location_name: "project"))
    UpdateLaunchRequest.add_member(:randomization_salt, Shapes::ShapeRef.new(shape: RandomizationSalt, location_name: "randomizationSalt"))
    UpdateLaunchRequest.add_member(:scheduled_splits_config, Shapes::ShapeRef.new(shape: ScheduledSplitsLaunchConfig, location_name: "scheduledSplitsConfig"))
    UpdateLaunchRequest.struct_class = Types::UpdateLaunchRequest

    UpdateLaunchResponse.add_member(:launch, Shapes::ShapeRef.new(shape: Launch, required: true, location_name: "launch"))
    UpdateLaunchResponse.struct_class = Types::UpdateLaunchResponse

    UpdateProjectDataDeliveryRequest.add_member(:cloud_watch_logs, Shapes::ShapeRef.new(shape: CloudWatchLogsDestinationConfig, location_name: "cloudWatchLogs"))
    UpdateProjectDataDeliveryRequest.add_member(:project, Shapes::ShapeRef.new(shape: ProjectRef, required: true, location: "uri", location_name: "project"))
    UpdateProjectDataDeliveryRequest.add_member(:s3_destination, Shapes::ShapeRef.new(shape: S3DestinationConfig, location_name: "s3Destination"))
    UpdateProjectDataDeliveryRequest.struct_class = Types::UpdateProjectDataDeliveryRequest

    UpdateProjectDataDeliveryResponse.add_member(:project, Shapes::ShapeRef.new(shape: Project, required: true, location_name: "project"))
    UpdateProjectDataDeliveryResponse.struct_class = Types::UpdateProjectDataDeliveryResponse

    UpdateProjectRequest.add_member(:app_config_resource, Shapes::ShapeRef.new(shape: ProjectAppConfigResourceConfig, location_name: "appConfigResource"))
    UpdateProjectRequest.add_member(:description, Shapes::ShapeRef.new(shape: Description, location_name: "description"))
    UpdateProjectRequest.add_member(:project, Shapes::ShapeRef.new(shape: ProjectRef, required: true, location: "uri", location_name: "project"))
    UpdateProjectRequest.struct_class = Types::UpdateProjectRequest

    UpdateProjectResponse.add_member(:project, Shapes::ShapeRef.new(shape: Project, required: true, location_name: "project"))
    UpdateProjectResponse.struct_class = Types::UpdateProjectResponse

    ValidationException.add_member(:field_list, Shapes::ShapeRef.new(shape: ValidationExceptionFieldList, location_name: "fieldList"))
    ValidationException.add_member(:message, Shapes::ShapeRef.new(shape: String, location_name: "message"))
    ValidationException.add_member(:reason, Shapes::ShapeRef.new(shape: ValidationExceptionReason, location_name: "reason"))
    ValidationException.struct_class = Types::ValidationException

    ValidationExceptionField.add_member(:message, Shapes::ShapeRef.new(shape: String, required: true, location_name: "message"))
    ValidationExceptionField.add_member(:name, Shapes::ShapeRef.new(shape: String, required: true, location_name: "name"))
    ValidationExceptionField.struct_class = Types::ValidationExceptionField

    ValidationExceptionFieldList.member = Shapes::ShapeRef.new(shape: ValidationExceptionField)

    VariableValue.add_member(:bool_value, Shapes::ShapeRef.new(shape: Boolean, location_name: "boolValue"))
    VariableValue.add_member(:double_value, Shapes::ShapeRef.new(shape: Double, location_name: "doubleValue"))
    VariableValue.add_member(:long_value, Shapes::ShapeRef.new(shape: VariableValueLongValueLong, location_name: "longValue"))
    VariableValue.add_member(:string_value, Shapes::ShapeRef.new(shape: VariableValueStringValueString, location_name: "stringValue"))
    VariableValue.add_member(:unknown, Shapes::ShapeRef.new(shape: nil, location_name: 'unknown'))
    VariableValue.add_member_subclass(:bool_value, Types::VariableValue::BoolValue)
    VariableValue.add_member_subclass(:double_value, Types::VariableValue::DoubleValue)
    VariableValue.add_member_subclass(:long_value, Types::VariableValue::LongValue)
    VariableValue.add_member_subclass(:string_value, Types::VariableValue::StringValue)
    VariableValue.add_member_subclass(:unknown, Types::VariableValue::Unknown)
    VariableValue.struct_class = Types::VariableValue

    Variation.add_member(:name, Shapes::ShapeRef.new(shape: VariationName, location_name: "name"))
    Variation.add_member(:value, Shapes::ShapeRef.new(shape: VariableValue, location_name: "value"))
    Variation.struct_class = Types::Variation

    VariationConfig.add_member(:name, Shapes::ShapeRef.new(shape: VariationName, required: true, location_name: "name"))
    VariationConfig.add_member(:value, Shapes::ShapeRef.new(shape: VariableValue, required: true, location_name: "value"))
    VariationConfig.struct_class = Types::VariationConfig

    VariationConfigsList.member = Shapes::ShapeRef.new(shape: VariationConfig)

    VariationNameList.member = Shapes::ShapeRef.new(shape: VariationName)

    VariationsList.member = Shapes::ShapeRef.new(shape: Variation)


    # @api private
    API = Seahorse::Model::Api.new.tap do |api|

      api.version = "2021-02-01"

      api.metadata = {
        "apiVersion" => "2021-02-01",
        "endpointPrefix" => "evidently",
        "jsonVersion" => "1.1",
        "protocol" => "rest-json",
        "serviceFullName" => "Amazon CloudWatch Evidently",
        "serviceId" => "Evidently",
        "signatureVersion" => "v4",
        "signingName" => "evidently",
        "uid" => "evidently-2021-02-01",
      }

      api.add_operation(:batch_evaluate_feature, Seahorse::Model::Operation.new.tap do |o|
        o.name = "BatchEvaluateFeature"
        o.http_method = "POST"
        o.http_request_uri = "/projects/{project}/evaluations"
        o.endpoint_pattern = {
          "hostPrefix" => "dataplane.",
        }
        o.input = Shapes::ShapeRef.new(shape: BatchEvaluateFeatureRequest)
        o.output = Shapes::ShapeRef.new(shape: BatchEvaluateFeatureResponse)
        o.errors << Shapes::ShapeRef.new(shape: ThrottlingException)
        o.errors << Shapes::ShapeRef.new(shape: ValidationException)
        o.errors << Shapes::ShapeRef.new(shape: ResourceNotFoundException)
        o.errors << Shapes::ShapeRef.new(shape: AccessDeniedException)
      end)

      api.add_operation(:create_experiment, Seahorse::Model::Operation.new.tap do |o|
        o.name = "CreateExperiment"
        o.http_method = "POST"
        o.http_request_uri = "/projects/{project}/experiments"
        o.input = Shapes::ShapeRef.new(shape: CreateExperimentRequest)
        o.output = Shapes::ShapeRef.new(shape: CreateExperimentResponse)
        o.errors << Shapes::ShapeRef.new(shape: ValidationException)
        o.errors << Shapes::ShapeRef.new(shape: ConflictException)
        o.errors << Shapes::ShapeRef.new(shape: ServiceQuotaExceededException)
        o.errors << Shapes::ShapeRef.new(shape: ResourceNotFoundException)
        o.errors << Shapes::ShapeRef.new(shape: AccessDeniedException)
      end)

      api.add_operation(:create_feature, Seahorse::Model::Operation.new.tap do |o|
        o.name = "CreateFeature"
        o.http_method = "POST"
        o.http_request_uri = "/projects/{project}/features"
        o.input = Shapes::ShapeRef.new(shape: CreateFeatureRequest)
        o.output = Shapes::ShapeRef.new(shape: CreateFeatureResponse)
        o.errors << Shapes::ShapeRef.new(shape: ValidationException)
        o.errors << Shapes::ShapeRef.new(shape: ConflictException)
        o.errors << Shapes::ShapeRef.new(shape: ServiceQuotaExceededException)
        o.errors << Shapes::ShapeRef.new(shape: ResourceNotFoundException)
        o.errors << Shapes::ShapeRef.new(shape: AccessDeniedException)
      end)

      api.add_operation(:create_launch, Seahorse::Model::Operation.new.tap do |o|
        o.name = "CreateLaunch"
        o.http_method = "POST"
        o.http_request_uri = "/projects/{project}/launches"
        o.input = Shapes::ShapeRef.new(shape: CreateLaunchRequest)
        o.output = Shapes::ShapeRef.new(shape: CreateLaunchResponse)
        o.errors << Shapes::ShapeRef.new(shape: ValidationException)
        o.errors << Shapes::ShapeRef.new(shape: ConflictException)
        o.errors << Shapes::ShapeRef.new(shape: ServiceQuotaExceededException)
        o.errors << Shapes::ShapeRef.new(shape: ResourceNotFoundException)
        o.errors << Shapes::ShapeRef.new(shape: AccessDeniedException)
      end)

      api.add_operation(:create_project, Seahorse::Model::Operation.new.tap do |o|
        o.name = "CreateProject"
        o.http_method = "POST"
        o.http_request_uri = "/projects"
        o.input = Shapes::ShapeRef.new(shape: CreateProjectRequest)
        o.output = Shapes::ShapeRef.new(shape: CreateProjectResponse)
        o.errors << Shapes::ShapeRef.new(shape: ValidationException)
        o.errors << Shapes::ShapeRef.new(shape: ConflictException)
        o.errors << Shapes::ShapeRef.new(shape: ServiceQuotaExceededException)
        o.errors << Shapes::ShapeRef.new(shape: AccessDeniedException)
      end)

      api.add_operation(:create_segment, Seahorse::Model::Operation.new.tap do |o|
        o.name = "CreateSegment"
        o.http_method = "POST"
        o.http_request_uri = "/segments"
        o.input = Shapes::ShapeRef.new(shape: CreateSegmentRequest)
        o.output = Shapes::ShapeRef.new(shape: CreateSegmentResponse)
        o.errors << Shapes::ShapeRef.new(shape: ValidationException)
        o.errors << Shapes::ShapeRef.new(shape: ConflictException)
        o.errors << Shapes::ShapeRef.new(shape: ServiceQuotaExceededException)
        o.errors << Shapes::ShapeRef.new(shape: AccessDeniedException)
      end)

      api.add_operation(:delete_experiment, Seahorse::Model::Operation.new.tap do |o|
        o.name = "DeleteExperiment"
        o.http_method = "DELETE"
        o.http_request_uri = "/projects/{project}/experiments/{experiment}"
        o.input = Shapes::ShapeRef.new(shape: DeleteExperimentRequest)
        o.output = Shapes::ShapeRef.new(shape: DeleteExperimentResponse)
        o.errors << Shapes::ShapeRef.new(shape: ValidationException)
        o.errors << Shapes::ShapeRef.new(shape: InternalServerException)
        o.errors << Shapes::ShapeRef.new(shape: ConflictException)
        o.errors << Shapes::ShapeRef.new(shape: ServiceUnavailableException)
        o.errors << Shapes::ShapeRef.new(shape: ResourceNotFoundException)
        o.errors << Shapes::ShapeRef.new(shape: AccessDeniedException)
      end)

      api.add_operation(:delete_feature, Seahorse::Model::Operation.new.tap do |o|
        o.name = "DeleteFeature"
        o.http_method = "DELETE"
        o.http_request_uri = "/projects/{project}/features/{feature}"
        o.input = Shapes::ShapeRef.new(shape: DeleteFeatureRequest)
        o.output = Shapes::ShapeRef.new(shape: DeleteFeatureResponse)
        o.errors << Shapes::ShapeRef.new(shape: ThrottlingException)
        o.errors << Shapes::ShapeRef.new(shape: ValidationException)
        o.errors << Shapes::ShapeRef.new(shape: ConflictException)
        o.errors << Shapes::ShapeRef.new(shape: ResourceNotFoundException)
        o.errors << Shapes::ShapeRef.new(shape: AccessDeniedException)
      end)

      api.add_operation(:delete_launch, Seahorse::Model::Operation.new.tap do |o|
        o.name = "DeleteLaunch"
        o.http_method = "DELETE"
        o.http_request_uri = "/projects/{project}/launches/{launch}"
        o.input = Shapes::ShapeRef.new(shape: DeleteLaunchRequest)
        o.output = Shapes::ShapeRef.new(shape: DeleteLaunchResponse)
        o.errors << Shapes::ShapeRef.new(shape: ThrottlingException)
        o.errors << Shapes::ShapeRef.new(shape: ValidationException)
        o.errors << Shapes::ShapeRef.new(shape: ConflictException)
        o.errors << Shapes::ShapeRef.new(shape: ResourceNotFoundException)
        o.errors << Shapes::ShapeRef.new(shape: AccessDeniedException)
      end)

      api.add_operation(:delete_project, Seahorse::Model::Operation.new.tap do |o|
        o.name = "DeleteProject"
        o.http_method = "DELETE"
        o.http_request_uri = "/projects/{project}"
        o.input = Shapes::ShapeRef.new(shape: DeleteProjectRequest)
        o.output = Shapes::ShapeRef.new(shape: DeleteProjectResponse)
        o.errors << Shapes::ShapeRef.new(shape: ThrottlingException)
        o.errors << Shapes::ShapeRef.new(shape: ValidationException)
        o.errors << Shapes::ShapeRef.new(shape: ConflictException)
        o.errors << Shapes::ShapeRef.new(shape: ResourceNotFoundException)
        o.errors << Shapes::ShapeRef.new(shape: AccessDeniedException)
      end)

      api.add_operation(:delete_segment, Seahorse::Model::Operation.new.tap do |o|
        o.name = "DeleteSegment"
        o.http_method = "DELETE"
        o.http_request_uri = "/segments/{segment}"
        o.input = Shapes::ShapeRef.new(shape: DeleteSegmentRequest)
        o.output = Shapes::ShapeRef.new(shape: DeleteSegmentResponse)
        o.errors << Shapes::ShapeRef.new(shape: ThrottlingException)
        o.errors << Shapes::ShapeRef.new(shape: ValidationException)
        o.errors << Shapes::ShapeRef.new(shape: ConflictException)
        o.errors << Shapes::ShapeRef.new(shape: ResourceNotFoundException)
        o.errors << Shapes::ShapeRef.new(shape: AccessDeniedException)
      end)

      api.add_operation(:evaluate_feature, Seahorse::Model::Operation.new.tap do |o|
        o.name = "EvaluateFeature"
        o.http_method = "POST"
        o.http_request_uri = "/projects/{project}/evaluations/{feature}"
        o.endpoint_pattern = {
          "hostPrefix" => "dataplane.",
        }
        o.input = Shapes::ShapeRef.new(shape: EvaluateFeatureRequest)
        o.output = Shapes::ShapeRef.new(shape: EvaluateFeatureResponse)
        o.errors << Shapes::ShapeRef.new(shape: ThrottlingException)
        o.errors << Shapes::ShapeRef.new(shape: ValidationException)
        o.errors << Shapes::ShapeRef.new(shape: ResourceNotFoundException)
        o.errors << Shapes::ShapeRef.new(shape: AccessDeniedException)
      end)

      api.add_operation(:get_experiment, Seahorse::Model::Operation.new.tap do |o|
        o.name = "GetExperiment"
        o.http_method = "GET"
        o.http_request_uri = "/projects/{project}/experiments/{experiment}"
        o.input = Shapes::ShapeRef.new(shape: GetExperimentRequest)
        o.output = Shapes::ShapeRef.new(shape: GetExperimentResponse)
        o.errors << Shapes::ShapeRef.new(shape: ThrottlingException)
        o.errors << Shapes::ShapeRef.new(shape: ValidationException)
        o.errors << Shapes::ShapeRef.new(shape: ResourceNotFoundException)
        o.errors << Shapes::ShapeRef.new(shape: AccessDeniedException)
      end)

      api.add_operation(:get_experiment_results, Seahorse::Model::Operation.new.tap do |o|
        o.name = "GetExperimentResults"
        o.http_method = "POST"
        o.http_request_uri = "/projects/{project}/experiments/{experiment}/results"
        o.input = Shapes::ShapeRef.new(shape: GetExperimentResultsRequest)
        o.output = Shapes::ShapeRef.new(shape: GetExperimentResultsResponse)
        o.errors << Shapes::ShapeRef.new(shape: ThrottlingException)
        o.errors << Shapes::ShapeRef.new(shape: ValidationException)
        o.errors << Shapes::ShapeRef.new(shape: ConflictException)
        o.errors << Shapes::ShapeRef.new(shape: ResourceNotFoundException)
        o.errors << Shapes::ShapeRef.new(shape: AccessDeniedException)
      end)

      api.add_operation(:get_feature, Seahorse::Model::Operation.new.tap do |o|
        o.name = "GetFeature"
        o.http_method = "GET"
        o.http_request_uri = "/projects/{project}/features/{feature}"
        o.input = Shapes::ShapeRef.new(shape: GetFeatureRequest)
        o.output = Shapes::ShapeRef.new(shape: GetFeatureResponse)
        o.errors << Shapes::ShapeRef.new(shape: ThrottlingException)
        o.errors << Shapes::ShapeRef.new(shape: ValidationException)
        o.errors << Shapes::ShapeRef.new(shape: ResourceNotFoundException)
        o.errors << Shapes::ShapeRef.new(shape: AccessDeniedException)
      end)

      api.add_operation(:get_launch, Seahorse::Model::Operation.new.tap do |o|
        o.name = "GetLaunch"
        o.http_method = "GET"
        o.http_request_uri = "/projects/{project}/launches/{launch}"
        o.input = Shapes::ShapeRef.new(shape: GetLaunchRequest)
        o.output = Shapes::ShapeRef.new(shape: GetLaunchResponse)
        o.errors << Shapes::ShapeRef.new(shape: ThrottlingException)
        o.errors << Shapes::ShapeRef.new(shape: ValidationException)
        o.errors << Shapes::ShapeRef.new(shape: ResourceNotFoundException)
        o.errors << Shapes::ShapeRef.new(shape: AccessDeniedException)
      end)

      api.add_operation(:get_project, Seahorse::Model::Operation.new.tap do |o|
        o.name = "GetProject"
        o.http_method = "GET"
        o.http_request_uri = "/projects/{project}"
        o.input = Shapes::ShapeRef.new(shape: GetProjectRequest)
        o.output = Shapes::ShapeRef.new(shape: GetProjectResponse)
        o.errors << Shapes::ShapeRef.new(shape: ThrottlingException)
        o.errors << Shapes::ShapeRef.new(shape: ValidationException)
        o.errors << Shapes::ShapeRef.new(shape: ResourceNotFoundException)
        o.errors << Shapes::ShapeRef.new(shape: AccessDeniedException)
      end)

      api.add_operation(:get_segment, Seahorse::Model::Operation.new.tap do |o|
        o.name = "GetSegment"
        o.http_method = "GET"
        o.http_request_uri = "/segments/{segment}"
        o.input = Shapes::ShapeRef.new(shape: GetSegmentRequest)
        o.output = Shapes::ShapeRef.new(shape: GetSegmentResponse)
        o.errors << Shapes::ShapeRef.new(shape: ThrottlingException)
        o.errors << Shapes::ShapeRef.new(shape: ValidationException)
        o.errors << Shapes::ShapeRef.new(shape: ResourceNotFoundException)
        o.errors << Shapes::ShapeRef.new(shape: AccessDeniedException)
      end)

      api.add_operation(:list_experiments, Seahorse::Model::Operation.new.tap do |o|
        o.name = "ListExperiments"
        o.http_method = "GET"
        o.http_request_uri = "/projects/{project}/experiments"
        o.input = Shapes::ShapeRef.new(shape: ListExperimentsRequest)
        o.output = Shapes::ShapeRef.new(shape: ListExperimentsResponse)
        o.errors << Shapes::ShapeRef.new(shape: ValidationException)
        o.errors << Shapes::ShapeRef.new(shape: ResourceNotFoundException)
        o.errors << Shapes::ShapeRef.new(shape: AccessDeniedException)
        o[:pager] = Aws::Pager.new(
          limit_key: "max_results",
          tokens: {
            "next_token" => "next_token"
          }
        )
      end)

      api.add_operation(:list_features, Seahorse::Model::Operation.new.tap do |o|
        o.name = "ListFeatures"
        o.http_method = "GET"
        o.http_request_uri = "/projects/{project}/features"
        o.input = Shapes::ShapeRef.new(shape: ListFeaturesRequest)
        o.output = Shapes::ShapeRef.new(shape: ListFeaturesResponse)
        o.errors << Shapes::ShapeRef.new(shape: ThrottlingException)
        o.errors << Shapes::ShapeRef.new(shape: ValidationException)
        o.errors << Shapes::ShapeRef.new(shape: ResourceNotFoundException)
        o.errors << Shapes::ShapeRef.new(shape: AccessDeniedException)
        o[:pager] = Aws::Pager.new(
          limit_key: "max_results",
          tokens: {
            "next_token" => "next_token"
          }
        )
      end)

      api.add_operation(:list_launches, Seahorse::Model::Operation.new.tap do |o|
        o.name = "ListLaunches"
        o.http_method = "GET"
        o.http_request_uri = "/projects/{project}/launches"
        o.input = Shapes::ShapeRef.new(shape: ListLaunchesRequest)
        o.output = Shapes::ShapeRef.new(shape: ListLaunchesResponse)
        o.errors << Shapes::ShapeRef.new(shape: ThrottlingException)
        o.errors << Shapes::ShapeRef.new(shape: ValidationException)
        o.errors << Shapes::ShapeRef.new(shape: AccessDeniedException)
        o[:pager] = Aws::Pager.new(
          limit_key: "max_results",
          tokens: {
            "next_token" => "next_token"
          }
        )
      end)

      api.add_operation(:list_projects, Seahorse::Model::Operation.new.tap do |o|
        o.name = "ListProjects"
        o.http_method = "GET"
        o.http_request_uri = "/projects"
        o.input = Shapes::ShapeRef.new(shape: ListProjectsRequest)
        o.output = Shapes::ShapeRef.new(shape: ListProjectsResponse)
        o.errors << Shapes::ShapeRef.new(shape: ThrottlingException)
        o.errors << Shapes::ShapeRef.new(shape: ValidationException)
        o.errors << Shapes::ShapeRef.new(shape: AccessDeniedException)
        o[:pager] = Aws::Pager.new(
          limit_key: "max_results",
          tokens: {
            "next_token" => "next_token"
          }
        )
      end)

      api.add_operation(:list_segment_references, Seahorse::Model::Operation.new.tap do |o|
        o.name = "ListSegmentReferences"
        o.http_method = "GET"
        o.http_request_uri = "/segments/{segment}/references"
        o.input = Shapes::ShapeRef.new(shape: ListSegmentReferencesRequest)
        o.output = Shapes::ShapeRef.new(shape: ListSegmentReferencesResponse)
        o.errors << Shapes::ShapeRef.new(shape: ThrottlingException)
        o.errors << Shapes::ShapeRef.new(shape: ValidationException)
        o.errors << Shapes::ShapeRef.new(shape: ResourceNotFoundException)
        o.errors << Shapes::ShapeRef.new(shape: AccessDeniedException)
        o[:pager] = Aws::Pager.new(
          limit_key: "max_results",
          tokens: {
            "next_token" => "next_token"
          }
        )
      end)

      api.add_operation(:list_segments, Seahorse::Model::Operation.new.tap do |o|
        o.name = "ListSegments"
        o.http_method = "GET"
        o.http_request_uri = "/segments"
        o.input = Shapes::ShapeRef.new(shape: ListSegmentsRequest)
        o.output = Shapes::ShapeRef.new(shape: ListSegmentsResponse)
        o.errors << Shapes::ShapeRef.new(shape: ThrottlingException)
        o.errors << Shapes::ShapeRef.new(shape: ValidationException)
        o.errors << Shapes::ShapeRef.new(shape: AccessDeniedException)
        o[:pager] = Aws::Pager.new(
          limit_key: "max_results",
          tokens: {
            "next_token" => "next_token"
          }
        )
      end)

      api.add_operation(:list_tags_for_resource, Seahorse::Model::Operation.new.tap do |o|
        o.name = "ListTagsForResource"
        o.http_method = "GET"
        o.http_request_uri = "/tags/{resourceArn}"
        o.input = Shapes::ShapeRef.new(shape: ListTagsForResourceRequest)
        o.output = Shapes::ShapeRef.new(shape: ListTagsForResourceResponse)
        o.errors << Shapes::ShapeRef.new(shape: ValidationException)
        o.errors << Shapes::ShapeRef.new(shape: ConflictException)
        o.errors << Shapes::ShapeRef.new(shape: ResourceNotFoundException)
      end)

      api.add_operation(:put_project_events, Seahorse::Model::Operation.new.tap do |o|
        o.name = "PutProjectEvents"
        o.http_method = "POST"
        o.http_request_uri = "/events/projects/{project}"
        o.endpoint_pattern = {
          "hostPrefix" => "dataplane.",
        }
        o.input = Shapes::ShapeRef.new(shape: PutProjectEventsRequest)
        o.output = Shapes::ShapeRef.new(shape: PutProjectEventsResponse)
        o.errors << Shapes::ShapeRef.new(shape: ThrottlingException)
        o.errors << Shapes::ShapeRef.new(shape: ValidationException)
        o.errors << Shapes::ShapeRef.new(shape: ResourceNotFoundException)
        o.errors << Shapes::ShapeRef.new(shape: AccessDeniedException)
      end)

      api.add_operation(:start_experiment, Seahorse::Model::Operation.new.tap do |o|
        o.name = "StartExperiment"
        o.http_method = "POST"
        o.http_request_uri = "/projects/{project}/experiments/{experiment}/start"
        o.input = Shapes::ShapeRef.new(shape: StartExperimentRequest)
        o.output = Shapes::ShapeRef.new(shape: StartExperimentResponse)
        o.errors << Shapes::ShapeRef.new(shape: ThrottlingException)
        o.errors << Shapes::ShapeRef.new(shape: ValidationException)
        o.errors << Shapes::ShapeRef.new(shape: ConflictException)
        o.errors << Shapes::ShapeRef.new(shape: ServiceQuotaExceededException)
        o.errors << Shapes::ShapeRef.new(shape: ResourceNotFoundException)
        o.errors << Shapes::ShapeRef.new(shape: AccessDeniedException)
      end)

      api.add_operation(:start_launch, Seahorse::Model::Operation.new.tap do |o|
        o.name = "StartLaunch"
        o.http_method = "POST"
        o.http_request_uri = "/projects/{project}/launches/{launch}/start"
        o.input = Shapes::ShapeRef.new(shape: StartLaunchRequest)
        o.output = Shapes::ShapeRef.new(shape: StartLaunchResponse)
        o.errors << Shapes::ShapeRef.new(shape: ThrottlingException)
        o.errors << Shapes::ShapeRef.new(shape: ValidationException)
        o.errors << Shapes::ShapeRef.new(shape: ConflictException)
        o.errors << Shapes::ShapeRef.new(shape: ServiceQuotaExceededException)
        o.errors << Shapes::ShapeRef.new(shape: ResourceNotFoundException)
        o.errors << Shapes::ShapeRef.new(shape: AccessDeniedException)
      end)

      api.add_operation(:stop_experiment, Seahorse::Model::Operation.new.tap do |o|
        o.name = "StopExperiment"
        o.http_method = "POST"
        o.http_request_uri = "/projects/{project}/experiments/{experiment}/cancel"
        o.input = Shapes::ShapeRef.new(shape: StopExperimentRequest)
        o.output = Shapes::ShapeRef.new(shape: StopExperimentResponse)
        o.errors << Shapes::ShapeRef.new(shape: ThrottlingException)
        o.errors << Shapes::ShapeRef.new(shape: ValidationException)
        o.errors << Shapes::ShapeRef.new(shape: ConflictException)
        o.errors << Shapes::ShapeRef.new(shape: ServiceQuotaExceededException)
        o.errors << Shapes::ShapeRef.new(shape: ResourceNotFoundException)
        o.errors << Shapes::ShapeRef.new(shape: AccessDeniedException)
      end)

      api.add_operation(:stop_launch, Seahorse::Model::Operation.new.tap do |o|
        o.name = "StopLaunch"
        o.http_method = "POST"
        o.http_request_uri = "/projects/{project}/launches/{launch}/cancel"
        o.input = Shapes::ShapeRef.new(shape: StopLaunchRequest)
        o.output = Shapes::ShapeRef.new(shape: StopLaunchResponse)
        o.errors << Shapes::ShapeRef.new(shape: ThrottlingException)
        o.errors << Shapes::ShapeRef.new(shape: ValidationException)
        o.errors << Shapes::ShapeRef.new(shape: ResourceNotFoundException)
        o.errors << Shapes::ShapeRef.new(shape: AccessDeniedException)
      end)

      api.add_operation(:tag_resource, Seahorse::Model::Operation.new.tap do |o|
        o.name = "TagResource"
        o.http_method = "POST"
        o.http_request_uri = "/tags/{resourceArn}"
        o.input = Shapes::ShapeRef.new(shape: TagResourceRequest)
        o.output = Shapes::ShapeRef.new(shape: TagResourceResponse)
        o.errors << Shapes::ShapeRef.new(shape: ValidationException)
        o.errors << Shapes::ShapeRef.new(shape: ConflictException)
        o.errors << Shapes::ShapeRef.new(shape: ResourceNotFoundException)
      end)

      api.add_operation(:test_segment_pattern, Seahorse::Model::Operation.new.tap do |o|
        o.name = "TestSegmentPattern"
        o.http_method = "POST"
        o.http_request_uri = "/test-segment-pattern"
        o.input = Shapes::ShapeRef.new(shape: TestSegmentPatternRequest)
        o.output = Shapes::ShapeRef.new(shape: TestSegmentPatternResponse)
        o.errors << Shapes::ShapeRef.new(shape: ThrottlingException)
        o.errors << Shapes::ShapeRef.new(shape: ValidationException)
        o.errors << Shapes::ShapeRef.new(shape: AccessDeniedException)
      end)

      api.add_operation(:untag_resource, Seahorse::Model::Operation.new.tap do |o|
        o.name = "UntagResource"
        o.http_method = "DELETE"
        o.http_request_uri = "/tags/{resourceArn}"
        o.input = Shapes::ShapeRef.new(shape: UntagResourceRequest)
        o.output = Shapes::ShapeRef.new(shape: UntagResourceResponse)
        o.errors << Shapes::ShapeRef.new(shape: ValidationException)
        o.errors << Shapes::ShapeRef.new(shape: ConflictException)
        o.errors << Shapes::ShapeRef.new(shape: ResourceNotFoundException)
      end)

      api.add_operation(:update_experiment, Seahorse::Model::Operation.new.tap do |o|
        o.name = "UpdateExperiment"
        o.http_method = "PATCH"
        o.http_request_uri = "/projects/{project}/experiments/{experiment}"
        o.input = Shapes::ShapeRef.new(shape: UpdateExperimentRequest)
        o.output = Shapes::ShapeRef.new(shape: UpdateExperimentResponse)
        o.errors << Shapes::ShapeRef.new(shape: ValidationException)
        o.errors << Shapes::ShapeRef.new(shape: ConflictException)
        o.errors << Shapes::ShapeRef.new(shape: ResourceNotFoundException)
        o.errors << Shapes::ShapeRef.new(shape: AccessDeniedException)
      end)

      api.add_operation(:update_feature, Seahorse::Model::Operation.new.tap do |o|
        o.name = "UpdateFeature"
        o.http_method = "PATCH"
        o.http_request_uri = "/projects/{project}/features/{feature}"
        o.input = Shapes::ShapeRef.new(shape: UpdateFeatureRequest)
        o.output = Shapes::ShapeRef.new(shape: UpdateFeatureResponse)
        o.errors << Shapes::ShapeRef.new(shape: ValidationException)
        o.errors << Shapes::ShapeRef.new(shape: ConflictException)
        o.errors << Shapes::ShapeRef.new(shape: ServiceQuotaExceededException)
        o.errors << Shapes::ShapeRef.new(shape: ResourceNotFoundException)
        o.errors << Shapes::ShapeRef.new(shape: AccessDeniedException)
      end)

      api.add_operation(:update_launch, Seahorse::Model::Operation.new.tap do |o|
        o.name = "UpdateLaunch"
        o.http_method = "PATCH"
        o.http_request_uri = "/projects/{project}/launches/{launch}"
        o.input = Shapes::ShapeRef.new(shape: UpdateLaunchRequest)
        o.output = Shapes::ShapeRef.new(shape: UpdateLaunchResponse)
        o.errors << Shapes::ShapeRef.new(shape: ValidationException)
        o.errors << Shapes::ShapeRef.new(shape: ConflictException)
        o.errors << Shapes::ShapeRef.new(shape: ResourceNotFoundException)
        o.errors << Shapes::ShapeRef.new(shape: AccessDeniedException)
      end)

      api.add_operation(:update_project, Seahorse::Model::Operation.new.tap do |o|
        o.name = "UpdateProject"
        o.http_method = "PATCH"
        o.http_request_uri = "/projects/{project}"
        o.input = Shapes::ShapeRef.new(shape: UpdateProjectRequest)
        o.output = Shapes::ShapeRef.new(shape: UpdateProjectResponse)
        o.errors << Shapes::ShapeRef.new(shape: ValidationException)
        o.errors << Shapes::ShapeRef.new(shape: ConflictException)
        o.errors << Shapes::ShapeRef.new(shape: ServiceQuotaExceededException)
        o.errors << Shapes::ShapeRef.new(shape: ResourceNotFoundException)
        o.errors << Shapes::ShapeRef.new(shape: AccessDeniedException)
      end)

      api.add_operation(:update_project_data_delivery, Seahorse::Model::Operation.new.tap do |o|
        o.name = "UpdateProjectDataDelivery"
        o.http_method = "PATCH"
        o.http_request_uri = "/projects/{project}/data-delivery"
        o.input = Shapes::ShapeRef.new(shape: UpdateProjectDataDeliveryRequest)
        o.output = Shapes::ShapeRef.new(shape: UpdateProjectDataDeliveryResponse)
        o.errors << Shapes::ShapeRef.new(shape: ValidationException)
        o.errors << Shapes::ShapeRef.new(shape: ConflictException)
        o.errors << Shapes::ShapeRef.new(shape: ServiceQuotaExceededException)
        o.errors << Shapes::ShapeRef.new(shape: ResourceNotFoundException)
        o.errors << Shapes::ShapeRef.new(shape: AccessDeniedException)
      end)
    end

  end
end
