diff --git a/LICENSE.md b/LICENSE.md
new file mode 100644
--- /dev/null
+++ b/LICENSE.md
@@ -0,0 +1,20 @@
+Copyright (c) 2016 David Reaver
+Copyright (c) 2022 Markus Schirp
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/gen/Stratosphere/CleanRooms/AnalysisTemplate.hs b/gen/Stratosphere/CleanRooms/AnalysisTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/AnalysisTemplate.hs
@@ -0,0 +1,126 @@
+module Stratosphere.CleanRooms.AnalysisTemplate (
+        module Exports, AnalysisTemplate(..), mkAnalysisTemplate
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CleanRooms.AnalysisTemplate.AnalysisParameterProperty as Exports
+import {-# SOURCE #-} Stratosphere.CleanRooms.AnalysisTemplate.AnalysisSchemaProperty as Exports
+import {-# SOURCE #-} Stratosphere.CleanRooms.AnalysisTemplate.AnalysisSourceProperty as Exports
+import {-# SOURCE #-} Stratosphere.CleanRooms.AnalysisTemplate.AnalysisSourceMetadataProperty as Exports
+import {-# SOURCE #-} Stratosphere.CleanRooms.AnalysisTemplate.ErrorMessageConfigurationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data AnalysisTemplate
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-analysistemplate.html>
+    AnalysisTemplate {haddock_workaround_ :: (),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-analysistemplate.html#cfn-cleanrooms-analysistemplate-analysisparameters>
+                      analysisParameters :: (Prelude.Maybe [AnalysisParameterProperty]),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-analysistemplate.html#cfn-cleanrooms-analysistemplate-description>
+                      description :: (Prelude.Maybe (Value Prelude.Text)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-analysistemplate.html#cfn-cleanrooms-analysistemplate-errormessageconfiguration>
+                      errorMessageConfiguration :: (Prelude.Maybe ErrorMessageConfigurationProperty),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-analysistemplate.html#cfn-cleanrooms-analysistemplate-format>
+                      format :: (Value Prelude.Text),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-analysistemplate.html#cfn-cleanrooms-analysistemplate-membershipidentifier>
+                      membershipIdentifier :: (Value Prelude.Text),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-analysistemplate.html#cfn-cleanrooms-analysistemplate-name>
+                      name :: (Value Prelude.Text),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-analysistemplate.html#cfn-cleanrooms-analysistemplate-schema>
+                      schema :: (Prelude.Maybe AnalysisSchemaProperty),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-analysistemplate.html#cfn-cleanrooms-analysistemplate-source>
+                      source :: AnalysisSourceProperty,
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-analysistemplate.html#cfn-cleanrooms-analysistemplate-sourcemetadata>
+                      sourceMetadata :: (Prelude.Maybe AnalysisSourceMetadataProperty),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-analysistemplate.html#cfn-cleanrooms-analysistemplate-tags>
+                      tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAnalysisTemplate ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Text -> AnalysisSourceProperty -> AnalysisTemplate
+mkAnalysisTemplate format membershipIdentifier name source
+  = AnalysisTemplate
+      {haddock_workaround_ = (), format = format,
+       membershipIdentifier = membershipIdentifier, name = name,
+       source = source, analysisParameters = Prelude.Nothing,
+       description = Prelude.Nothing,
+       errorMessageConfiguration = Prelude.Nothing,
+       schema = Prelude.Nothing, sourceMetadata = Prelude.Nothing,
+       tags = Prelude.Nothing}
+instance ToResourceProperties AnalysisTemplate where
+  toResourceProperties AnalysisTemplate {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::AnalysisTemplate",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Format" JSON..= format,
+                            "MembershipIdentifier" JSON..= membershipIdentifier,
+                            "Name" JSON..= name, "Source" JSON..= source]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AnalysisParameters" Prelude.<$> analysisParameters,
+                               (JSON..=) "Description" Prelude.<$> description,
+                               (JSON..=) "ErrorMessageConfiguration"
+                                 Prelude.<$> errorMessageConfiguration,
+                               (JSON..=) "Schema" Prelude.<$> schema,
+                               (JSON..=) "SourceMetadata" Prelude.<$> sourceMetadata,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON AnalysisTemplate where
+  toJSON AnalysisTemplate {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Format" JSON..= format,
+               "MembershipIdentifier" JSON..= membershipIdentifier,
+               "Name" JSON..= name, "Source" JSON..= source]
+              (Prelude.catMaybes
+                 [(JSON..=) "AnalysisParameters" Prelude.<$> analysisParameters,
+                  (JSON..=) "Description" Prelude.<$> description,
+                  (JSON..=) "ErrorMessageConfiguration"
+                    Prelude.<$> errorMessageConfiguration,
+                  (JSON..=) "Schema" Prelude.<$> schema,
+                  (JSON..=) "SourceMetadata" Prelude.<$> sourceMetadata,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "AnalysisParameters" AnalysisTemplate where
+  type PropertyType "AnalysisParameters" AnalysisTemplate = [AnalysisParameterProperty]
+  set newValue AnalysisTemplate {..}
+    = AnalysisTemplate {analysisParameters = Prelude.pure newValue, ..}
+instance Property "Description" AnalysisTemplate where
+  type PropertyType "Description" AnalysisTemplate = Value Prelude.Text
+  set newValue AnalysisTemplate {..}
+    = AnalysisTemplate {description = Prelude.pure newValue, ..}
+instance Property "ErrorMessageConfiguration" AnalysisTemplate where
+  type PropertyType "ErrorMessageConfiguration" AnalysisTemplate = ErrorMessageConfigurationProperty
+  set newValue AnalysisTemplate {..}
+    = AnalysisTemplate
+        {errorMessageConfiguration = Prelude.pure newValue, ..}
+instance Property "Format" AnalysisTemplate where
+  type PropertyType "Format" AnalysisTemplate = Value Prelude.Text
+  set newValue AnalysisTemplate {..}
+    = AnalysisTemplate {format = newValue, ..}
+instance Property "MembershipIdentifier" AnalysisTemplate where
+  type PropertyType "MembershipIdentifier" AnalysisTemplate = Value Prelude.Text
+  set newValue AnalysisTemplate {..}
+    = AnalysisTemplate {membershipIdentifier = newValue, ..}
+instance Property "Name" AnalysisTemplate where
+  type PropertyType "Name" AnalysisTemplate = Value Prelude.Text
+  set newValue AnalysisTemplate {..}
+    = AnalysisTemplate {name = newValue, ..}
+instance Property "Schema" AnalysisTemplate where
+  type PropertyType "Schema" AnalysisTemplate = AnalysisSchemaProperty
+  set newValue AnalysisTemplate {..}
+    = AnalysisTemplate {schema = Prelude.pure newValue, ..}
+instance Property "Source" AnalysisTemplate where
+  type PropertyType "Source" AnalysisTemplate = AnalysisSourceProperty
+  set newValue AnalysisTemplate {..}
+    = AnalysisTemplate {source = newValue, ..}
+instance Property "SourceMetadata" AnalysisTemplate where
+  type PropertyType "SourceMetadata" AnalysisTemplate = AnalysisSourceMetadataProperty
+  set newValue AnalysisTemplate {..}
+    = AnalysisTemplate {sourceMetadata = Prelude.pure newValue, ..}
+instance Property "Tags" AnalysisTemplate where
+  type PropertyType "Tags" AnalysisTemplate = [Tag]
+  set newValue AnalysisTemplate {..}
+    = AnalysisTemplate {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/AnalysisTemplate/AnalysisParameterProperty.hs b/gen/Stratosphere/CleanRooms/AnalysisTemplate/AnalysisParameterProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/AnalysisTemplate/AnalysisParameterProperty.hs
@@ -0,0 +1,56 @@
+module Stratosphere.CleanRooms.AnalysisTemplate.AnalysisParameterProperty (
+        AnalysisParameterProperty(..), mkAnalysisParameterProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AnalysisParameterProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-analysistemplate-analysisparameter.html>
+    AnalysisParameterProperty {haddock_workaround_ :: (),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-analysistemplate-analysisparameter.html#cfn-cleanrooms-analysistemplate-analysisparameter-defaultvalue>
+                               defaultValue :: (Prelude.Maybe (Value Prelude.Text)),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-analysistemplate-analysisparameter.html#cfn-cleanrooms-analysistemplate-analysisparameter-name>
+                               name :: (Value Prelude.Text),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-analysistemplate-analysisparameter.html#cfn-cleanrooms-analysistemplate-analysisparameter-type>
+                               type' :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAnalysisParameterProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> AnalysisParameterProperty
+mkAnalysisParameterProperty name type'
+  = AnalysisParameterProperty
+      {haddock_workaround_ = (), name = name, type' = type',
+       defaultValue = Prelude.Nothing}
+instance ToResourceProperties AnalysisParameterProperty where
+  toResourceProperties AnalysisParameterProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::AnalysisTemplate.AnalysisParameter",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Name" JSON..= name, "Type" JSON..= type']
+                           (Prelude.catMaybes
+                              [(JSON..=) "DefaultValue" Prelude.<$> defaultValue]))}
+instance JSON.ToJSON AnalysisParameterProperty where
+  toJSON AnalysisParameterProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Name" JSON..= name, "Type" JSON..= type']
+              (Prelude.catMaybes
+                 [(JSON..=) "DefaultValue" Prelude.<$> defaultValue])))
+instance Property "DefaultValue" AnalysisParameterProperty where
+  type PropertyType "DefaultValue" AnalysisParameterProperty = Value Prelude.Text
+  set newValue AnalysisParameterProperty {..}
+    = AnalysisParameterProperty
+        {defaultValue = Prelude.pure newValue, ..}
+instance Property "Name" AnalysisParameterProperty where
+  type PropertyType "Name" AnalysisParameterProperty = Value Prelude.Text
+  set newValue AnalysisParameterProperty {..}
+    = AnalysisParameterProperty {name = newValue, ..}
+instance Property "Type" AnalysisParameterProperty where
+  type PropertyType "Type" AnalysisParameterProperty = Value Prelude.Text
+  set newValue AnalysisParameterProperty {..}
+    = AnalysisParameterProperty {type' = newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/AnalysisTemplate/AnalysisParameterProperty.hs-boot b/gen/Stratosphere/CleanRooms/AnalysisTemplate/AnalysisParameterProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/AnalysisTemplate/AnalysisParameterProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.AnalysisTemplate.AnalysisParameterProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AnalysisParameterProperty :: Prelude.Type
+instance ToResourceProperties AnalysisParameterProperty
+instance Prelude.Eq AnalysisParameterProperty
+instance Prelude.Show AnalysisParameterProperty
+instance JSON.ToJSON AnalysisParameterProperty
diff --git a/gen/Stratosphere/CleanRooms/AnalysisTemplate/AnalysisSchemaProperty.hs b/gen/Stratosphere/CleanRooms/AnalysisTemplate/AnalysisSchemaProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/AnalysisTemplate/AnalysisSchemaProperty.hs
@@ -0,0 +1,32 @@
+module Stratosphere.CleanRooms.AnalysisTemplate.AnalysisSchemaProperty (
+        AnalysisSchemaProperty(..), mkAnalysisSchemaProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AnalysisSchemaProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-analysistemplate-analysisschema.html>
+    AnalysisSchemaProperty {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-analysistemplate-analysisschema.html#cfn-cleanrooms-analysistemplate-analysisschema-referencedtables>
+                            referencedTables :: (ValueList Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAnalysisSchemaProperty ::
+  ValueList Prelude.Text -> AnalysisSchemaProperty
+mkAnalysisSchemaProperty referencedTables
+  = AnalysisSchemaProperty
+      {haddock_workaround_ = (), referencedTables = referencedTables}
+instance ToResourceProperties AnalysisSchemaProperty where
+  toResourceProperties AnalysisSchemaProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::AnalysisTemplate.AnalysisSchema",
+         supportsTags = Prelude.False,
+         properties = ["ReferencedTables" JSON..= referencedTables]}
+instance JSON.ToJSON AnalysisSchemaProperty where
+  toJSON AnalysisSchemaProperty {..}
+    = JSON.object ["ReferencedTables" JSON..= referencedTables]
+instance Property "ReferencedTables" AnalysisSchemaProperty where
+  type PropertyType "ReferencedTables" AnalysisSchemaProperty = ValueList Prelude.Text
+  set newValue AnalysisSchemaProperty {..}
+    = AnalysisSchemaProperty {referencedTables = newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/AnalysisTemplate/AnalysisSchemaProperty.hs-boot b/gen/Stratosphere/CleanRooms/AnalysisTemplate/AnalysisSchemaProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/AnalysisTemplate/AnalysisSchemaProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.AnalysisTemplate.AnalysisSchemaProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AnalysisSchemaProperty :: Prelude.Type
+instance ToResourceProperties AnalysisSchemaProperty
+instance Prelude.Eq AnalysisSchemaProperty
+instance Prelude.Show AnalysisSchemaProperty
+instance JSON.ToJSON AnalysisSchemaProperty
diff --git a/gen/Stratosphere/CleanRooms/AnalysisTemplate/AnalysisSourceMetadataProperty.hs b/gen/Stratosphere/CleanRooms/AnalysisTemplate/AnalysisSourceMetadataProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/AnalysisTemplate/AnalysisSourceMetadataProperty.hs
@@ -0,0 +1,34 @@
+module Stratosphere.CleanRooms.AnalysisTemplate.AnalysisSourceMetadataProperty (
+        module Exports, AnalysisSourceMetadataProperty(..),
+        mkAnalysisSourceMetadataProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CleanRooms.AnalysisTemplate.AnalysisTemplateArtifactMetadataProperty as Exports
+import Stratosphere.ResourceProperties
+data AnalysisSourceMetadataProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-analysistemplate-analysissourcemetadata.html>
+    AnalysisSourceMetadataProperty {haddock_workaround_ :: (),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-analysistemplate-analysissourcemetadata.html#cfn-cleanrooms-analysistemplate-analysissourcemetadata-artifacts>
+                                    artifacts :: AnalysisTemplateArtifactMetadataProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAnalysisSourceMetadataProperty ::
+  AnalysisTemplateArtifactMetadataProperty
+  -> AnalysisSourceMetadataProperty
+mkAnalysisSourceMetadataProperty artifacts
+  = AnalysisSourceMetadataProperty
+      {haddock_workaround_ = (), artifacts = artifacts}
+instance ToResourceProperties AnalysisSourceMetadataProperty where
+  toResourceProperties AnalysisSourceMetadataProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::AnalysisTemplate.AnalysisSourceMetadata",
+         supportsTags = Prelude.False,
+         properties = ["Artifacts" JSON..= artifacts]}
+instance JSON.ToJSON AnalysisSourceMetadataProperty where
+  toJSON AnalysisSourceMetadataProperty {..}
+    = JSON.object ["Artifacts" JSON..= artifacts]
+instance Property "Artifacts" AnalysisSourceMetadataProperty where
+  type PropertyType "Artifacts" AnalysisSourceMetadataProperty = AnalysisTemplateArtifactMetadataProperty
+  set newValue AnalysisSourceMetadataProperty {..}
+    = AnalysisSourceMetadataProperty {artifacts = newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/AnalysisTemplate/AnalysisSourceMetadataProperty.hs-boot b/gen/Stratosphere/CleanRooms/AnalysisTemplate/AnalysisSourceMetadataProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/AnalysisTemplate/AnalysisSourceMetadataProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.AnalysisTemplate.AnalysisSourceMetadataProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AnalysisSourceMetadataProperty :: Prelude.Type
+instance ToResourceProperties AnalysisSourceMetadataProperty
+instance Prelude.Eq AnalysisSourceMetadataProperty
+instance Prelude.Show AnalysisSourceMetadataProperty
+instance JSON.ToJSON AnalysisSourceMetadataProperty
diff --git a/gen/Stratosphere/CleanRooms/AnalysisTemplate/AnalysisSourceProperty.hs b/gen/Stratosphere/CleanRooms/AnalysisTemplate/AnalysisSourceProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/AnalysisTemplate/AnalysisSourceProperty.hs
@@ -0,0 +1,47 @@
+module Stratosphere.CleanRooms.AnalysisTemplate.AnalysisSourceProperty (
+        module Exports, AnalysisSourceProperty(..),
+        mkAnalysisSourceProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CleanRooms.AnalysisTemplate.AnalysisTemplateArtifactsProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AnalysisSourceProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-analysistemplate-analysissource.html>
+    AnalysisSourceProperty {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-analysistemplate-analysissource.html#cfn-cleanrooms-analysistemplate-analysissource-artifacts>
+                            artifacts :: (Prelude.Maybe AnalysisTemplateArtifactsProperty),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-analysistemplate-analysissource.html#cfn-cleanrooms-analysistemplate-analysissource-text>
+                            text :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAnalysisSourceProperty :: AnalysisSourceProperty
+mkAnalysisSourceProperty
+  = AnalysisSourceProperty
+      {haddock_workaround_ = (), artifacts = Prelude.Nothing,
+       text = Prelude.Nothing}
+instance ToResourceProperties AnalysisSourceProperty where
+  toResourceProperties AnalysisSourceProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::AnalysisTemplate.AnalysisSource",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Artifacts" Prelude.<$> artifacts,
+                            (JSON..=) "Text" Prelude.<$> text])}
+instance JSON.ToJSON AnalysisSourceProperty where
+  toJSON AnalysisSourceProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Artifacts" Prelude.<$> artifacts,
+               (JSON..=) "Text" Prelude.<$> text]))
+instance Property "Artifacts" AnalysisSourceProperty where
+  type PropertyType "Artifacts" AnalysisSourceProperty = AnalysisTemplateArtifactsProperty
+  set newValue AnalysisSourceProperty {..}
+    = AnalysisSourceProperty {artifacts = Prelude.pure newValue, ..}
+instance Property "Text" AnalysisSourceProperty where
+  type PropertyType "Text" AnalysisSourceProperty = Value Prelude.Text
+  set newValue AnalysisSourceProperty {..}
+    = AnalysisSourceProperty {text = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/AnalysisTemplate/AnalysisSourceProperty.hs-boot b/gen/Stratosphere/CleanRooms/AnalysisTemplate/AnalysisSourceProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/AnalysisTemplate/AnalysisSourceProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.AnalysisTemplate.AnalysisSourceProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AnalysisSourceProperty :: Prelude.Type
+instance ToResourceProperties AnalysisSourceProperty
+instance Prelude.Eq AnalysisSourceProperty
+instance Prelude.Show AnalysisSourceProperty
+instance JSON.ToJSON AnalysisSourceProperty
diff --git a/gen/Stratosphere/CleanRooms/AnalysisTemplate/AnalysisTemplateArtifactMetadataProperty.hs b/gen/Stratosphere/CleanRooms/AnalysisTemplate/AnalysisTemplateArtifactMetadataProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/AnalysisTemplate/AnalysisTemplateArtifactMetadataProperty.hs
@@ -0,0 +1,53 @@
+module Stratosphere.CleanRooms.AnalysisTemplate.AnalysisTemplateArtifactMetadataProperty (
+        module Exports, AnalysisTemplateArtifactMetadataProperty(..),
+        mkAnalysisTemplateArtifactMetadataProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CleanRooms.AnalysisTemplate.HashProperty as Exports
+import Stratosphere.ResourceProperties
+data AnalysisTemplateArtifactMetadataProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-analysistemplate-analysistemplateartifactmetadata.html>
+    AnalysisTemplateArtifactMetadataProperty {haddock_workaround_ :: (),
+                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-analysistemplate-analysistemplateartifactmetadata.html#cfn-cleanrooms-analysistemplate-analysistemplateartifactmetadata-additionalartifacthashes>
+                                              additionalArtifactHashes :: (Prelude.Maybe [HashProperty]),
+                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-analysistemplate-analysistemplateartifactmetadata.html#cfn-cleanrooms-analysistemplate-analysistemplateartifactmetadata-entrypointhash>
+                                              entryPointHash :: HashProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAnalysisTemplateArtifactMetadataProperty ::
+  HashProperty -> AnalysisTemplateArtifactMetadataProperty
+mkAnalysisTemplateArtifactMetadataProperty entryPointHash
+  = AnalysisTemplateArtifactMetadataProperty
+      {haddock_workaround_ = (), entryPointHash = entryPointHash,
+       additionalArtifactHashes = Prelude.Nothing}
+instance ToResourceProperties AnalysisTemplateArtifactMetadataProperty where
+  toResourceProperties AnalysisTemplateArtifactMetadataProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::AnalysisTemplate.AnalysisTemplateArtifactMetadata",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["EntryPointHash" JSON..= entryPointHash]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AdditionalArtifactHashes"
+                                 Prelude.<$> additionalArtifactHashes]))}
+instance JSON.ToJSON AnalysisTemplateArtifactMetadataProperty where
+  toJSON AnalysisTemplateArtifactMetadataProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["EntryPointHash" JSON..= entryPointHash]
+              (Prelude.catMaybes
+                 [(JSON..=) "AdditionalArtifactHashes"
+                    Prelude.<$> additionalArtifactHashes])))
+instance Property "AdditionalArtifactHashes" AnalysisTemplateArtifactMetadataProperty where
+  type PropertyType "AdditionalArtifactHashes" AnalysisTemplateArtifactMetadataProperty = [HashProperty]
+  set newValue AnalysisTemplateArtifactMetadataProperty {..}
+    = AnalysisTemplateArtifactMetadataProperty
+        {additionalArtifactHashes = Prelude.pure newValue, ..}
+instance Property "EntryPointHash" AnalysisTemplateArtifactMetadataProperty where
+  type PropertyType "EntryPointHash" AnalysisTemplateArtifactMetadataProperty = HashProperty
+  set newValue AnalysisTemplateArtifactMetadataProperty {..}
+    = AnalysisTemplateArtifactMetadataProperty
+        {entryPointHash = newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/AnalysisTemplate/AnalysisTemplateArtifactMetadataProperty.hs-boot b/gen/Stratosphere/CleanRooms/AnalysisTemplate/AnalysisTemplateArtifactMetadataProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/AnalysisTemplate/AnalysisTemplateArtifactMetadataProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.AnalysisTemplate.AnalysisTemplateArtifactMetadataProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AnalysisTemplateArtifactMetadataProperty :: Prelude.Type
+instance ToResourceProperties AnalysisTemplateArtifactMetadataProperty
+instance Prelude.Eq AnalysisTemplateArtifactMetadataProperty
+instance Prelude.Show AnalysisTemplateArtifactMetadataProperty
+instance JSON.ToJSON AnalysisTemplateArtifactMetadataProperty
diff --git a/gen/Stratosphere/CleanRooms/AnalysisTemplate/AnalysisTemplateArtifactProperty.hs b/gen/Stratosphere/CleanRooms/AnalysisTemplate/AnalysisTemplateArtifactProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/AnalysisTemplate/AnalysisTemplateArtifactProperty.hs
@@ -0,0 +1,33 @@
+module Stratosphere.CleanRooms.AnalysisTemplate.AnalysisTemplateArtifactProperty (
+        module Exports, AnalysisTemplateArtifactProperty(..),
+        mkAnalysisTemplateArtifactProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CleanRooms.AnalysisTemplate.S3LocationProperty as Exports
+import Stratosphere.ResourceProperties
+data AnalysisTemplateArtifactProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-analysistemplate-analysistemplateartifact.html>
+    AnalysisTemplateArtifactProperty {haddock_workaround_ :: (),
+                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-analysistemplate-analysistemplateartifact.html#cfn-cleanrooms-analysistemplate-analysistemplateartifact-location>
+                                      location :: S3LocationProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAnalysisTemplateArtifactProperty ::
+  S3LocationProperty -> AnalysisTemplateArtifactProperty
+mkAnalysisTemplateArtifactProperty location
+  = AnalysisTemplateArtifactProperty
+      {haddock_workaround_ = (), location = location}
+instance ToResourceProperties AnalysisTemplateArtifactProperty where
+  toResourceProperties AnalysisTemplateArtifactProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::AnalysisTemplate.AnalysisTemplateArtifact",
+         supportsTags = Prelude.False,
+         properties = ["Location" JSON..= location]}
+instance JSON.ToJSON AnalysisTemplateArtifactProperty where
+  toJSON AnalysisTemplateArtifactProperty {..}
+    = JSON.object ["Location" JSON..= location]
+instance Property "Location" AnalysisTemplateArtifactProperty where
+  type PropertyType "Location" AnalysisTemplateArtifactProperty = S3LocationProperty
+  set newValue AnalysisTemplateArtifactProperty {..}
+    = AnalysisTemplateArtifactProperty {location = newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/AnalysisTemplate/AnalysisTemplateArtifactProperty.hs-boot b/gen/Stratosphere/CleanRooms/AnalysisTemplate/AnalysisTemplateArtifactProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/AnalysisTemplate/AnalysisTemplateArtifactProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.AnalysisTemplate.AnalysisTemplateArtifactProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AnalysisTemplateArtifactProperty :: Prelude.Type
+instance ToResourceProperties AnalysisTemplateArtifactProperty
+instance Prelude.Eq AnalysisTemplateArtifactProperty
+instance Prelude.Show AnalysisTemplateArtifactProperty
+instance JSON.ToJSON AnalysisTemplateArtifactProperty
diff --git a/gen/Stratosphere/CleanRooms/AnalysisTemplate/AnalysisTemplateArtifactsProperty.hs b/gen/Stratosphere/CleanRooms/AnalysisTemplate/AnalysisTemplateArtifactsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/AnalysisTemplate/AnalysisTemplateArtifactsProperty.hs
@@ -0,0 +1,60 @@
+module Stratosphere.CleanRooms.AnalysisTemplate.AnalysisTemplateArtifactsProperty (
+        module Exports, AnalysisTemplateArtifactsProperty(..),
+        mkAnalysisTemplateArtifactsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CleanRooms.AnalysisTemplate.AnalysisTemplateArtifactProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AnalysisTemplateArtifactsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-analysistemplate-analysistemplateartifacts.html>
+    AnalysisTemplateArtifactsProperty {haddock_workaround_ :: (),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-analysistemplate-analysistemplateartifacts.html#cfn-cleanrooms-analysistemplate-analysistemplateartifacts-additionalartifacts>
+                                       additionalArtifacts :: (Prelude.Maybe [AnalysisTemplateArtifactProperty]),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-analysistemplate-analysistemplateartifacts.html#cfn-cleanrooms-analysistemplate-analysistemplateartifacts-entrypoint>
+                                       entryPoint :: AnalysisTemplateArtifactProperty,
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-analysistemplate-analysistemplateartifacts.html#cfn-cleanrooms-analysistemplate-analysistemplateartifacts-rolearn>
+                                       roleArn :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAnalysisTemplateArtifactsProperty ::
+  AnalysisTemplateArtifactProperty
+  -> Value Prelude.Text -> AnalysisTemplateArtifactsProperty
+mkAnalysisTemplateArtifactsProperty entryPoint roleArn
+  = AnalysisTemplateArtifactsProperty
+      {haddock_workaround_ = (), entryPoint = entryPoint,
+       roleArn = roleArn, additionalArtifacts = Prelude.Nothing}
+instance ToResourceProperties AnalysisTemplateArtifactsProperty where
+  toResourceProperties AnalysisTemplateArtifactsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::AnalysisTemplate.AnalysisTemplateArtifacts",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["EntryPoint" JSON..= entryPoint, "RoleArn" JSON..= roleArn]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AdditionalArtifacts"
+                                 Prelude.<$> additionalArtifacts]))}
+instance JSON.ToJSON AnalysisTemplateArtifactsProperty where
+  toJSON AnalysisTemplateArtifactsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["EntryPoint" JSON..= entryPoint, "RoleArn" JSON..= roleArn]
+              (Prelude.catMaybes
+                 [(JSON..=) "AdditionalArtifacts"
+                    Prelude.<$> additionalArtifacts])))
+instance Property "AdditionalArtifacts" AnalysisTemplateArtifactsProperty where
+  type PropertyType "AdditionalArtifacts" AnalysisTemplateArtifactsProperty = [AnalysisTemplateArtifactProperty]
+  set newValue AnalysisTemplateArtifactsProperty {..}
+    = AnalysisTemplateArtifactsProperty
+        {additionalArtifacts = Prelude.pure newValue, ..}
+instance Property "EntryPoint" AnalysisTemplateArtifactsProperty where
+  type PropertyType "EntryPoint" AnalysisTemplateArtifactsProperty = AnalysisTemplateArtifactProperty
+  set newValue AnalysisTemplateArtifactsProperty {..}
+    = AnalysisTemplateArtifactsProperty {entryPoint = newValue, ..}
+instance Property "RoleArn" AnalysisTemplateArtifactsProperty where
+  type PropertyType "RoleArn" AnalysisTemplateArtifactsProperty = Value Prelude.Text
+  set newValue AnalysisTemplateArtifactsProperty {..}
+    = AnalysisTemplateArtifactsProperty {roleArn = newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/AnalysisTemplate/AnalysisTemplateArtifactsProperty.hs-boot b/gen/Stratosphere/CleanRooms/AnalysisTemplate/AnalysisTemplateArtifactsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/AnalysisTemplate/AnalysisTemplateArtifactsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.AnalysisTemplate.AnalysisTemplateArtifactsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AnalysisTemplateArtifactsProperty :: Prelude.Type
+instance ToResourceProperties AnalysisTemplateArtifactsProperty
+instance Prelude.Eq AnalysisTemplateArtifactsProperty
+instance Prelude.Show AnalysisTemplateArtifactsProperty
+instance JSON.ToJSON AnalysisTemplateArtifactsProperty
diff --git a/gen/Stratosphere/CleanRooms/AnalysisTemplate/ErrorMessageConfigurationProperty.hs b/gen/Stratosphere/CleanRooms/AnalysisTemplate/ErrorMessageConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/AnalysisTemplate/ErrorMessageConfigurationProperty.hs
@@ -0,0 +1,32 @@
+module Stratosphere.CleanRooms.AnalysisTemplate.ErrorMessageConfigurationProperty (
+        ErrorMessageConfigurationProperty(..),
+        mkErrorMessageConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ErrorMessageConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-analysistemplate-errormessageconfiguration.html>
+    ErrorMessageConfigurationProperty {haddock_workaround_ :: (),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-analysistemplate-errormessageconfiguration.html#cfn-cleanrooms-analysistemplate-errormessageconfiguration-type>
+                                       type' :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkErrorMessageConfigurationProperty ::
+  Value Prelude.Text -> ErrorMessageConfigurationProperty
+mkErrorMessageConfigurationProperty type'
+  = ErrorMessageConfigurationProperty
+      {haddock_workaround_ = (), type' = type'}
+instance ToResourceProperties ErrorMessageConfigurationProperty where
+  toResourceProperties ErrorMessageConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::AnalysisTemplate.ErrorMessageConfiguration",
+         supportsTags = Prelude.False, properties = ["Type" JSON..= type']}
+instance JSON.ToJSON ErrorMessageConfigurationProperty where
+  toJSON ErrorMessageConfigurationProperty {..}
+    = JSON.object ["Type" JSON..= type']
+instance Property "Type" ErrorMessageConfigurationProperty where
+  type PropertyType "Type" ErrorMessageConfigurationProperty = Value Prelude.Text
+  set newValue ErrorMessageConfigurationProperty {..}
+    = ErrorMessageConfigurationProperty {type' = newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/AnalysisTemplate/ErrorMessageConfigurationProperty.hs-boot b/gen/Stratosphere/CleanRooms/AnalysisTemplate/ErrorMessageConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/AnalysisTemplate/ErrorMessageConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.AnalysisTemplate.ErrorMessageConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ErrorMessageConfigurationProperty :: Prelude.Type
+instance ToResourceProperties ErrorMessageConfigurationProperty
+instance Prelude.Eq ErrorMessageConfigurationProperty
+instance Prelude.Show ErrorMessageConfigurationProperty
+instance JSON.ToJSON ErrorMessageConfigurationProperty
diff --git a/gen/Stratosphere/CleanRooms/AnalysisTemplate/HashProperty.hs b/gen/Stratosphere/CleanRooms/AnalysisTemplate/HashProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/AnalysisTemplate/HashProperty.hs
@@ -0,0 +1,33 @@
+module Stratosphere.CleanRooms.AnalysisTemplate.HashProperty (
+        HashProperty(..), mkHashProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data HashProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-analysistemplate-hash.html>
+    HashProperty {haddock_workaround_ :: (),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-analysistemplate-hash.html#cfn-cleanrooms-analysistemplate-hash-sha256>
+                  sha256 :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkHashProperty :: HashProperty
+mkHashProperty
+  = HashProperty {haddock_workaround_ = (), sha256 = Prelude.Nothing}
+instance ToResourceProperties HashProperty where
+  toResourceProperties HashProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::AnalysisTemplate.Hash",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes [(JSON..=) "Sha256" Prelude.<$> sha256])}
+instance JSON.ToJSON HashProperty where
+  toJSON HashProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes [(JSON..=) "Sha256" Prelude.<$> sha256]))
+instance Property "Sha256" HashProperty where
+  type PropertyType "Sha256" HashProperty = Value Prelude.Text
+  set newValue HashProperty {..}
+    = HashProperty {sha256 = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/AnalysisTemplate/HashProperty.hs-boot b/gen/Stratosphere/CleanRooms/AnalysisTemplate/HashProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/AnalysisTemplate/HashProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.AnalysisTemplate.HashProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data HashProperty :: Prelude.Type
+instance ToResourceProperties HashProperty
+instance Prelude.Eq HashProperty
+instance Prelude.Show HashProperty
+instance JSON.ToJSON HashProperty
diff --git a/gen/Stratosphere/CleanRooms/AnalysisTemplate/S3LocationProperty.hs b/gen/Stratosphere/CleanRooms/AnalysisTemplate/S3LocationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/AnalysisTemplate/S3LocationProperty.hs
@@ -0,0 +1,38 @@
+module Stratosphere.CleanRooms.AnalysisTemplate.S3LocationProperty (
+        S3LocationProperty(..), mkS3LocationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data S3LocationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-analysistemplate-s3location.html>
+    S3LocationProperty {haddock_workaround_ :: (),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-analysistemplate-s3location.html#cfn-cleanrooms-analysistemplate-s3location-bucket>
+                        bucket :: (Value Prelude.Text),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-analysistemplate-s3location.html#cfn-cleanrooms-analysistemplate-s3location-key>
+                        key :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkS3LocationProperty ::
+  Value Prelude.Text -> Value Prelude.Text -> S3LocationProperty
+mkS3LocationProperty bucket key
+  = S3LocationProperty
+      {haddock_workaround_ = (), bucket = bucket, key = key}
+instance ToResourceProperties S3LocationProperty where
+  toResourceProperties S3LocationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::AnalysisTemplate.S3Location",
+         supportsTags = Prelude.False,
+         properties = ["Bucket" JSON..= bucket, "Key" JSON..= key]}
+instance JSON.ToJSON S3LocationProperty where
+  toJSON S3LocationProperty {..}
+    = JSON.object ["Bucket" JSON..= bucket, "Key" JSON..= key]
+instance Property "Bucket" S3LocationProperty where
+  type PropertyType "Bucket" S3LocationProperty = Value Prelude.Text
+  set newValue S3LocationProperty {..}
+    = S3LocationProperty {bucket = newValue, ..}
+instance Property "Key" S3LocationProperty where
+  type PropertyType "Key" S3LocationProperty = Value Prelude.Text
+  set newValue S3LocationProperty {..}
+    = S3LocationProperty {key = newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/AnalysisTemplate/S3LocationProperty.hs-boot b/gen/Stratosphere/CleanRooms/AnalysisTemplate/S3LocationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/AnalysisTemplate/S3LocationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.AnalysisTemplate.S3LocationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data S3LocationProperty :: Prelude.Type
+instance ToResourceProperties S3LocationProperty
+instance Prelude.Eq S3LocationProperty
+instance Prelude.Show S3LocationProperty
+instance JSON.ToJSON S3LocationProperty
diff --git a/gen/Stratosphere/CleanRooms/Collaboration.hs b/gen/Stratosphere/CleanRooms/Collaboration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/Collaboration.hs
@@ -0,0 +1,164 @@
+module Stratosphere.CleanRooms.Collaboration (
+        module Exports, Collaboration(..), mkCollaboration
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CleanRooms.Collaboration.DataEncryptionMetadataProperty as Exports
+import {-# SOURCE #-} Stratosphere.CleanRooms.Collaboration.MLMemberAbilitiesProperty as Exports
+import {-# SOURCE #-} Stratosphere.CleanRooms.Collaboration.MemberSpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.CleanRooms.Collaboration.PaymentConfigurationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data Collaboration
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-collaboration.html>
+    Collaboration {haddock_workaround_ :: (),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-collaboration.html#cfn-cleanrooms-collaboration-analyticsengine>
+                   analyticsEngine :: (Prelude.Maybe (Value Prelude.Text)),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-collaboration.html#cfn-cleanrooms-collaboration-autoapprovedchangetypes>
+                   autoApprovedChangeTypes :: (Prelude.Maybe (ValueList Prelude.Text)),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-collaboration.html#cfn-cleanrooms-collaboration-creatordisplayname>
+                   creatorDisplayName :: (Value Prelude.Text),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-collaboration.html#cfn-cleanrooms-collaboration-creatormlmemberabilities>
+                   creatorMLMemberAbilities :: (Prelude.Maybe MLMemberAbilitiesProperty),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-collaboration.html#cfn-cleanrooms-collaboration-creatormemberabilities>
+                   creatorMemberAbilities :: (Prelude.Maybe (ValueList Prelude.Text)),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-collaboration.html#cfn-cleanrooms-collaboration-creatorpaymentconfiguration>
+                   creatorPaymentConfiguration :: (Prelude.Maybe PaymentConfigurationProperty),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-collaboration.html#cfn-cleanrooms-collaboration-dataencryptionmetadata>
+                   dataEncryptionMetadata :: (Prelude.Maybe DataEncryptionMetadataProperty),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-collaboration.html#cfn-cleanrooms-collaboration-description>
+                   description :: (Value Prelude.Text),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-collaboration.html#cfn-cleanrooms-collaboration-joblogstatus>
+                   jobLogStatus :: (Prelude.Maybe (Value Prelude.Text)),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-collaboration.html#cfn-cleanrooms-collaboration-members>
+                   members :: (Prelude.Maybe [MemberSpecificationProperty]),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-collaboration.html#cfn-cleanrooms-collaboration-name>
+                   name :: (Value Prelude.Text),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-collaboration.html#cfn-cleanrooms-collaboration-querylogstatus>
+                   queryLogStatus :: (Value Prelude.Text),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-collaboration.html#cfn-cleanrooms-collaboration-tags>
+                   tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCollaboration ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Text -> Value Prelude.Text -> Collaboration
+mkCollaboration creatorDisplayName description name queryLogStatus
+  = Collaboration
+      {haddock_workaround_ = (), creatorDisplayName = creatorDisplayName,
+       description = description, name = name,
+       queryLogStatus = queryLogStatus, analyticsEngine = Prelude.Nothing,
+       autoApprovedChangeTypes = Prelude.Nothing,
+       creatorMLMemberAbilities = Prelude.Nothing,
+       creatorMemberAbilities = Prelude.Nothing,
+       creatorPaymentConfiguration = Prelude.Nothing,
+       dataEncryptionMetadata = Prelude.Nothing,
+       jobLogStatus = Prelude.Nothing, members = Prelude.Nothing,
+       tags = Prelude.Nothing}
+instance ToResourceProperties Collaboration where
+  toResourceProperties Collaboration {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::Collaboration",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["CreatorDisplayName" JSON..= creatorDisplayName,
+                            "Description" JSON..= description, "Name" JSON..= name,
+                            "QueryLogStatus" JSON..= queryLogStatus]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AnalyticsEngine" Prelude.<$> analyticsEngine,
+                               (JSON..=) "AutoApprovedChangeTypes"
+                                 Prelude.<$> autoApprovedChangeTypes,
+                               (JSON..=) "CreatorMLMemberAbilities"
+                                 Prelude.<$> creatorMLMemberAbilities,
+                               (JSON..=) "CreatorMemberAbilities"
+                                 Prelude.<$> creatorMemberAbilities,
+                               (JSON..=) "CreatorPaymentConfiguration"
+                                 Prelude.<$> creatorPaymentConfiguration,
+                               (JSON..=) "DataEncryptionMetadata"
+                                 Prelude.<$> dataEncryptionMetadata,
+                               (JSON..=) "JobLogStatus" Prelude.<$> jobLogStatus,
+                               (JSON..=) "Members" Prelude.<$> members,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON Collaboration where
+  toJSON Collaboration {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["CreatorDisplayName" JSON..= creatorDisplayName,
+               "Description" JSON..= description, "Name" JSON..= name,
+               "QueryLogStatus" JSON..= queryLogStatus]
+              (Prelude.catMaybes
+                 [(JSON..=) "AnalyticsEngine" Prelude.<$> analyticsEngine,
+                  (JSON..=) "AutoApprovedChangeTypes"
+                    Prelude.<$> autoApprovedChangeTypes,
+                  (JSON..=) "CreatorMLMemberAbilities"
+                    Prelude.<$> creatorMLMemberAbilities,
+                  (JSON..=) "CreatorMemberAbilities"
+                    Prelude.<$> creatorMemberAbilities,
+                  (JSON..=) "CreatorPaymentConfiguration"
+                    Prelude.<$> creatorPaymentConfiguration,
+                  (JSON..=) "DataEncryptionMetadata"
+                    Prelude.<$> dataEncryptionMetadata,
+                  (JSON..=) "JobLogStatus" Prelude.<$> jobLogStatus,
+                  (JSON..=) "Members" Prelude.<$> members,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "AnalyticsEngine" Collaboration where
+  type PropertyType "AnalyticsEngine" Collaboration = Value Prelude.Text
+  set newValue Collaboration {..}
+    = Collaboration {analyticsEngine = Prelude.pure newValue, ..}
+instance Property "AutoApprovedChangeTypes" Collaboration where
+  type PropertyType "AutoApprovedChangeTypes" Collaboration = ValueList Prelude.Text
+  set newValue Collaboration {..}
+    = Collaboration
+        {autoApprovedChangeTypes = Prelude.pure newValue, ..}
+instance Property "CreatorDisplayName" Collaboration where
+  type PropertyType "CreatorDisplayName" Collaboration = Value Prelude.Text
+  set newValue Collaboration {..}
+    = Collaboration {creatorDisplayName = newValue, ..}
+instance Property "CreatorMLMemberAbilities" Collaboration where
+  type PropertyType "CreatorMLMemberAbilities" Collaboration = MLMemberAbilitiesProperty
+  set newValue Collaboration {..}
+    = Collaboration
+        {creatorMLMemberAbilities = Prelude.pure newValue, ..}
+instance Property "CreatorMemberAbilities" Collaboration where
+  type PropertyType "CreatorMemberAbilities" Collaboration = ValueList Prelude.Text
+  set newValue Collaboration {..}
+    = Collaboration
+        {creatorMemberAbilities = Prelude.pure newValue, ..}
+instance Property "CreatorPaymentConfiguration" Collaboration where
+  type PropertyType "CreatorPaymentConfiguration" Collaboration = PaymentConfigurationProperty
+  set newValue Collaboration {..}
+    = Collaboration
+        {creatorPaymentConfiguration = Prelude.pure newValue, ..}
+instance Property "DataEncryptionMetadata" Collaboration where
+  type PropertyType "DataEncryptionMetadata" Collaboration = DataEncryptionMetadataProperty
+  set newValue Collaboration {..}
+    = Collaboration
+        {dataEncryptionMetadata = Prelude.pure newValue, ..}
+instance Property "Description" Collaboration where
+  type PropertyType "Description" Collaboration = Value Prelude.Text
+  set newValue Collaboration {..}
+    = Collaboration {description = newValue, ..}
+instance Property "JobLogStatus" Collaboration where
+  type PropertyType "JobLogStatus" Collaboration = Value Prelude.Text
+  set newValue Collaboration {..}
+    = Collaboration {jobLogStatus = Prelude.pure newValue, ..}
+instance Property "Members" Collaboration where
+  type PropertyType "Members" Collaboration = [MemberSpecificationProperty]
+  set newValue Collaboration {..}
+    = Collaboration {members = Prelude.pure newValue, ..}
+instance Property "Name" Collaboration where
+  type PropertyType "Name" Collaboration = Value Prelude.Text
+  set newValue Collaboration {..}
+    = Collaboration {name = newValue, ..}
+instance Property "QueryLogStatus" Collaboration where
+  type PropertyType "QueryLogStatus" Collaboration = Value Prelude.Text
+  set newValue Collaboration {..}
+    = Collaboration {queryLogStatus = newValue, ..}
+instance Property "Tags" Collaboration where
+  type PropertyType "Tags" Collaboration = [Tag]
+  set newValue Collaboration {..}
+    = Collaboration {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/Collaboration/DataEncryptionMetadataProperty.hs b/gen/Stratosphere/CleanRooms/Collaboration/DataEncryptionMetadataProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/Collaboration/DataEncryptionMetadataProperty.hs
@@ -0,0 +1,71 @@
+module Stratosphere.CleanRooms.Collaboration.DataEncryptionMetadataProperty (
+        DataEncryptionMetadataProperty(..),
+        mkDataEncryptionMetadataProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data DataEncryptionMetadataProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-collaboration-dataencryptionmetadata.html>
+    DataEncryptionMetadataProperty {haddock_workaround_ :: (),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-collaboration-dataencryptionmetadata.html#cfn-cleanrooms-collaboration-dataencryptionmetadata-allowcleartext>
+                                    allowCleartext :: (Value Prelude.Bool),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-collaboration-dataencryptionmetadata.html#cfn-cleanrooms-collaboration-dataencryptionmetadata-allowduplicates>
+                                    allowDuplicates :: (Value Prelude.Bool),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-collaboration-dataencryptionmetadata.html#cfn-cleanrooms-collaboration-dataencryptionmetadata-allowjoinsoncolumnswithdifferentnames>
+                                    allowJoinsOnColumnsWithDifferentNames :: (Value Prelude.Bool),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-collaboration-dataencryptionmetadata.html#cfn-cleanrooms-collaboration-dataencryptionmetadata-preservenulls>
+                                    preserveNulls :: (Value Prelude.Bool)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDataEncryptionMetadataProperty ::
+  Value Prelude.Bool
+  -> Value Prelude.Bool
+     -> Value Prelude.Bool
+        -> Value Prelude.Bool -> DataEncryptionMetadataProperty
+mkDataEncryptionMetadataProperty
+  allowCleartext
+  allowDuplicates
+  allowJoinsOnColumnsWithDifferentNames
+  preserveNulls
+  = DataEncryptionMetadataProperty
+      {haddock_workaround_ = (), allowCleartext = allowCleartext,
+       allowDuplicates = allowDuplicates,
+       allowJoinsOnColumnsWithDifferentNames = allowJoinsOnColumnsWithDifferentNames,
+       preserveNulls = preserveNulls}
+instance ToResourceProperties DataEncryptionMetadataProperty where
+  toResourceProperties DataEncryptionMetadataProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::Collaboration.DataEncryptionMetadata",
+         supportsTags = Prelude.False,
+         properties = ["AllowCleartext" JSON..= allowCleartext,
+                       "AllowDuplicates" JSON..= allowDuplicates,
+                       "AllowJoinsOnColumnsWithDifferentNames"
+                         JSON..= allowJoinsOnColumnsWithDifferentNames,
+                       "PreserveNulls" JSON..= preserveNulls]}
+instance JSON.ToJSON DataEncryptionMetadataProperty where
+  toJSON DataEncryptionMetadataProperty {..}
+    = JSON.object
+        ["AllowCleartext" JSON..= allowCleartext,
+         "AllowDuplicates" JSON..= allowDuplicates,
+         "AllowJoinsOnColumnsWithDifferentNames"
+           JSON..= allowJoinsOnColumnsWithDifferentNames,
+         "PreserveNulls" JSON..= preserveNulls]
+instance Property "AllowCleartext" DataEncryptionMetadataProperty where
+  type PropertyType "AllowCleartext" DataEncryptionMetadataProperty = Value Prelude.Bool
+  set newValue DataEncryptionMetadataProperty {..}
+    = DataEncryptionMetadataProperty {allowCleartext = newValue, ..}
+instance Property "AllowDuplicates" DataEncryptionMetadataProperty where
+  type PropertyType "AllowDuplicates" DataEncryptionMetadataProperty = Value Prelude.Bool
+  set newValue DataEncryptionMetadataProperty {..}
+    = DataEncryptionMetadataProperty {allowDuplicates = newValue, ..}
+instance Property "AllowJoinsOnColumnsWithDifferentNames" DataEncryptionMetadataProperty where
+  type PropertyType "AllowJoinsOnColumnsWithDifferentNames" DataEncryptionMetadataProperty = Value Prelude.Bool
+  set newValue DataEncryptionMetadataProperty {..}
+    = DataEncryptionMetadataProperty
+        {allowJoinsOnColumnsWithDifferentNames = newValue, ..}
+instance Property "PreserveNulls" DataEncryptionMetadataProperty where
+  type PropertyType "PreserveNulls" DataEncryptionMetadataProperty = Value Prelude.Bool
+  set newValue DataEncryptionMetadataProperty {..}
+    = DataEncryptionMetadataProperty {preserveNulls = newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/Collaboration/DataEncryptionMetadataProperty.hs-boot b/gen/Stratosphere/CleanRooms/Collaboration/DataEncryptionMetadataProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/Collaboration/DataEncryptionMetadataProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.Collaboration.DataEncryptionMetadataProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data DataEncryptionMetadataProperty :: Prelude.Type
+instance ToResourceProperties DataEncryptionMetadataProperty
+instance Prelude.Eq DataEncryptionMetadataProperty
+instance Prelude.Show DataEncryptionMetadataProperty
+instance JSON.ToJSON DataEncryptionMetadataProperty
diff --git a/gen/Stratosphere/CleanRooms/Collaboration/JobComputePaymentConfigProperty.hs b/gen/Stratosphere/CleanRooms/Collaboration/JobComputePaymentConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/Collaboration/JobComputePaymentConfigProperty.hs
@@ -0,0 +1,33 @@
+module Stratosphere.CleanRooms.Collaboration.JobComputePaymentConfigProperty (
+        JobComputePaymentConfigProperty(..),
+        mkJobComputePaymentConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data JobComputePaymentConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-collaboration-jobcomputepaymentconfig.html>
+    JobComputePaymentConfigProperty {haddock_workaround_ :: (),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-collaboration-jobcomputepaymentconfig.html#cfn-cleanrooms-collaboration-jobcomputepaymentconfig-isresponsible>
+                                     isResponsible :: (Value Prelude.Bool)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkJobComputePaymentConfigProperty ::
+  Value Prelude.Bool -> JobComputePaymentConfigProperty
+mkJobComputePaymentConfigProperty isResponsible
+  = JobComputePaymentConfigProperty
+      {haddock_workaround_ = (), isResponsible = isResponsible}
+instance ToResourceProperties JobComputePaymentConfigProperty where
+  toResourceProperties JobComputePaymentConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::Collaboration.JobComputePaymentConfig",
+         supportsTags = Prelude.False,
+         properties = ["IsResponsible" JSON..= isResponsible]}
+instance JSON.ToJSON JobComputePaymentConfigProperty where
+  toJSON JobComputePaymentConfigProperty {..}
+    = JSON.object ["IsResponsible" JSON..= isResponsible]
+instance Property "IsResponsible" JobComputePaymentConfigProperty where
+  type PropertyType "IsResponsible" JobComputePaymentConfigProperty = Value Prelude.Bool
+  set newValue JobComputePaymentConfigProperty {..}
+    = JobComputePaymentConfigProperty {isResponsible = newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/Collaboration/JobComputePaymentConfigProperty.hs-boot b/gen/Stratosphere/CleanRooms/Collaboration/JobComputePaymentConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/Collaboration/JobComputePaymentConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.Collaboration.JobComputePaymentConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data JobComputePaymentConfigProperty :: Prelude.Type
+instance ToResourceProperties JobComputePaymentConfigProperty
+instance Prelude.Eq JobComputePaymentConfigProperty
+instance Prelude.Show JobComputePaymentConfigProperty
+instance JSON.ToJSON JobComputePaymentConfigProperty
diff --git a/gen/Stratosphere/CleanRooms/Collaboration/MLMemberAbilitiesProperty.hs b/gen/Stratosphere/CleanRooms/Collaboration/MLMemberAbilitiesProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/Collaboration/MLMemberAbilitiesProperty.hs
@@ -0,0 +1,36 @@
+module Stratosphere.CleanRooms.Collaboration.MLMemberAbilitiesProperty (
+        MLMemberAbilitiesProperty(..), mkMLMemberAbilitiesProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data MLMemberAbilitiesProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-collaboration-mlmemberabilities.html>
+    MLMemberAbilitiesProperty {haddock_workaround_ :: (),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-collaboration-mlmemberabilities.html#cfn-cleanrooms-collaboration-mlmemberabilities-custommlmemberabilities>
+                               customMLMemberAbilities :: (ValueList Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMLMemberAbilitiesProperty ::
+  ValueList Prelude.Text -> MLMemberAbilitiesProperty
+mkMLMemberAbilitiesProperty customMLMemberAbilities
+  = MLMemberAbilitiesProperty
+      {haddock_workaround_ = (),
+       customMLMemberAbilities = customMLMemberAbilities}
+instance ToResourceProperties MLMemberAbilitiesProperty where
+  toResourceProperties MLMemberAbilitiesProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::Collaboration.MLMemberAbilities",
+         supportsTags = Prelude.False,
+         properties = ["CustomMLMemberAbilities"
+                         JSON..= customMLMemberAbilities]}
+instance JSON.ToJSON MLMemberAbilitiesProperty where
+  toJSON MLMemberAbilitiesProperty {..}
+    = JSON.object
+        ["CustomMLMemberAbilities" JSON..= customMLMemberAbilities]
+instance Property "CustomMLMemberAbilities" MLMemberAbilitiesProperty where
+  type PropertyType "CustomMLMemberAbilities" MLMemberAbilitiesProperty = ValueList Prelude.Text
+  set newValue MLMemberAbilitiesProperty {..}
+    = MLMemberAbilitiesProperty
+        {customMLMemberAbilities = newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/Collaboration/MLMemberAbilitiesProperty.hs-boot b/gen/Stratosphere/CleanRooms/Collaboration/MLMemberAbilitiesProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/Collaboration/MLMemberAbilitiesProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.Collaboration.MLMemberAbilitiesProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MLMemberAbilitiesProperty :: Prelude.Type
+instance ToResourceProperties MLMemberAbilitiesProperty
+instance Prelude.Eq MLMemberAbilitiesProperty
+instance Prelude.Show MLMemberAbilitiesProperty
+instance JSON.ToJSON MLMemberAbilitiesProperty
diff --git a/gen/Stratosphere/CleanRooms/Collaboration/MLPaymentConfigProperty.hs b/gen/Stratosphere/CleanRooms/Collaboration/MLPaymentConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/Collaboration/MLPaymentConfigProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.CleanRooms.Collaboration.MLPaymentConfigProperty (
+        module Exports, MLPaymentConfigProperty(..),
+        mkMLPaymentConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CleanRooms.Collaboration.ModelInferencePaymentConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.CleanRooms.Collaboration.ModelTrainingPaymentConfigProperty as Exports
+import Stratosphere.ResourceProperties
+data MLPaymentConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-collaboration-mlpaymentconfig.html>
+    MLPaymentConfigProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-collaboration-mlpaymentconfig.html#cfn-cleanrooms-collaboration-mlpaymentconfig-modelinference>
+                             modelInference :: (Prelude.Maybe ModelInferencePaymentConfigProperty),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-collaboration-mlpaymentconfig.html#cfn-cleanrooms-collaboration-mlpaymentconfig-modeltraining>
+                             modelTraining :: (Prelude.Maybe ModelTrainingPaymentConfigProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMLPaymentConfigProperty :: MLPaymentConfigProperty
+mkMLPaymentConfigProperty
+  = MLPaymentConfigProperty
+      {haddock_workaround_ = (), modelInference = Prelude.Nothing,
+       modelTraining = Prelude.Nothing}
+instance ToResourceProperties MLPaymentConfigProperty where
+  toResourceProperties MLPaymentConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::Collaboration.MLPaymentConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ModelInference" Prelude.<$> modelInference,
+                            (JSON..=) "ModelTraining" Prelude.<$> modelTraining])}
+instance JSON.ToJSON MLPaymentConfigProperty where
+  toJSON MLPaymentConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ModelInference" Prelude.<$> modelInference,
+               (JSON..=) "ModelTraining" Prelude.<$> modelTraining]))
+instance Property "ModelInference" MLPaymentConfigProperty where
+  type PropertyType "ModelInference" MLPaymentConfigProperty = ModelInferencePaymentConfigProperty
+  set newValue MLPaymentConfigProperty {..}
+    = MLPaymentConfigProperty
+        {modelInference = Prelude.pure newValue, ..}
+instance Property "ModelTraining" MLPaymentConfigProperty where
+  type PropertyType "ModelTraining" MLPaymentConfigProperty = ModelTrainingPaymentConfigProperty
+  set newValue MLPaymentConfigProperty {..}
+    = MLPaymentConfigProperty
+        {modelTraining = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/Collaboration/MLPaymentConfigProperty.hs-boot b/gen/Stratosphere/CleanRooms/Collaboration/MLPaymentConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/Collaboration/MLPaymentConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.Collaboration.MLPaymentConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MLPaymentConfigProperty :: Prelude.Type
+instance ToResourceProperties MLPaymentConfigProperty
+instance Prelude.Eq MLPaymentConfigProperty
+instance Prelude.Show MLPaymentConfigProperty
+instance JSON.ToJSON MLPaymentConfigProperty
diff --git a/gen/Stratosphere/CleanRooms/Collaboration/MemberSpecificationProperty.hs b/gen/Stratosphere/CleanRooms/Collaboration/MemberSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/Collaboration/MemberSpecificationProperty.hs
@@ -0,0 +1,81 @@
+module Stratosphere.CleanRooms.Collaboration.MemberSpecificationProperty (
+        module Exports, MemberSpecificationProperty(..),
+        mkMemberSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CleanRooms.Collaboration.MLMemberAbilitiesProperty as Exports
+import {-# SOURCE #-} Stratosphere.CleanRooms.Collaboration.PaymentConfigurationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data MemberSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-collaboration-memberspecification.html>
+    MemberSpecificationProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-collaboration-memberspecification.html#cfn-cleanrooms-collaboration-memberspecification-accountid>
+                                 accountId :: (Value Prelude.Text),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-collaboration-memberspecification.html#cfn-cleanrooms-collaboration-memberspecification-displayname>
+                                 displayName :: (Value Prelude.Text),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-collaboration-memberspecification.html#cfn-cleanrooms-collaboration-memberspecification-mlmemberabilities>
+                                 mLMemberAbilities :: (Prelude.Maybe MLMemberAbilitiesProperty),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-collaboration-memberspecification.html#cfn-cleanrooms-collaboration-memberspecification-memberabilities>
+                                 memberAbilities :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-collaboration-memberspecification.html#cfn-cleanrooms-collaboration-memberspecification-paymentconfiguration>
+                                 paymentConfiguration :: (Prelude.Maybe PaymentConfigurationProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMemberSpecificationProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> MemberSpecificationProperty
+mkMemberSpecificationProperty accountId displayName
+  = MemberSpecificationProperty
+      {haddock_workaround_ = (), accountId = accountId,
+       displayName = displayName, mLMemberAbilities = Prelude.Nothing,
+       memberAbilities = Prelude.Nothing,
+       paymentConfiguration = Prelude.Nothing}
+instance ToResourceProperties MemberSpecificationProperty where
+  toResourceProperties MemberSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::Collaboration.MemberSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["AccountId" JSON..= accountId, "DisplayName" JSON..= displayName]
+                           (Prelude.catMaybes
+                              [(JSON..=) "MLMemberAbilities" Prelude.<$> mLMemberAbilities,
+                               (JSON..=) "MemberAbilities" Prelude.<$> memberAbilities,
+                               (JSON..=) "PaymentConfiguration"
+                                 Prelude.<$> paymentConfiguration]))}
+instance JSON.ToJSON MemberSpecificationProperty where
+  toJSON MemberSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["AccountId" JSON..= accountId, "DisplayName" JSON..= displayName]
+              (Prelude.catMaybes
+                 [(JSON..=) "MLMemberAbilities" Prelude.<$> mLMemberAbilities,
+                  (JSON..=) "MemberAbilities" Prelude.<$> memberAbilities,
+                  (JSON..=) "PaymentConfiguration"
+                    Prelude.<$> paymentConfiguration])))
+instance Property "AccountId" MemberSpecificationProperty where
+  type PropertyType "AccountId" MemberSpecificationProperty = Value Prelude.Text
+  set newValue MemberSpecificationProperty {..}
+    = MemberSpecificationProperty {accountId = newValue, ..}
+instance Property "DisplayName" MemberSpecificationProperty where
+  type PropertyType "DisplayName" MemberSpecificationProperty = Value Prelude.Text
+  set newValue MemberSpecificationProperty {..}
+    = MemberSpecificationProperty {displayName = newValue, ..}
+instance Property "MLMemberAbilities" MemberSpecificationProperty where
+  type PropertyType "MLMemberAbilities" MemberSpecificationProperty = MLMemberAbilitiesProperty
+  set newValue MemberSpecificationProperty {..}
+    = MemberSpecificationProperty
+        {mLMemberAbilities = Prelude.pure newValue, ..}
+instance Property "MemberAbilities" MemberSpecificationProperty where
+  type PropertyType "MemberAbilities" MemberSpecificationProperty = ValueList Prelude.Text
+  set newValue MemberSpecificationProperty {..}
+    = MemberSpecificationProperty
+        {memberAbilities = Prelude.pure newValue, ..}
+instance Property "PaymentConfiguration" MemberSpecificationProperty where
+  type PropertyType "PaymentConfiguration" MemberSpecificationProperty = PaymentConfigurationProperty
+  set newValue MemberSpecificationProperty {..}
+    = MemberSpecificationProperty
+        {paymentConfiguration = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/Collaboration/MemberSpecificationProperty.hs-boot b/gen/Stratosphere/CleanRooms/Collaboration/MemberSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/Collaboration/MemberSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.Collaboration.MemberSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MemberSpecificationProperty :: Prelude.Type
+instance ToResourceProperties MemberSpecificationProperty
+instance Prelude.Eq MemberSpecificationProperty
+instance Prelude.Show MemberSpecificationProperty
+instance JSON.ToJSON MemberSpecificationProperty
diff --git a/gen/Stratosphere/CleanRooms/Collaboration/ModelInferencePaymentConfigProperty.hs b/gen/Stratosphere/CleanRooms/Collaboration/ModelInferencePaymentConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/Collaboration/ModelInferencePaymentConfigProperty.hs
@@ -0,0 +1,34 @@
+module Stratosphere.CleanRooms.Collaboration.ModelInferencePaymentConfigProperty (
+        ModelInferencePaymentConfigProperty(..),
+        mkModelInferencePaymentConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ModelInferencePaymentConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-collaboration-modelinferencepaymentconfig.html>
+    ModelInferencePaymentConfigProperty {haddock_workaround_ :: (),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-collaboration-modelinferencepaymentconfig.html#cfn-cleanrooms-collaboration-modelinferencepaymentconfig-isresponsible>
+                                         isResponsible :: (Value Prelude.Bool)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkModelInferencePaymentConfigProperty ::
+  Value Prelude.Bool -> ModelInferencePaymentConfigProperty
+mkModelInferencePaymentConfigProperty isResponsible
+  = ModelInferencePaymentConfigProperty
+      {haddock_workaround_ = (), isResponsible = isResponsible}
+instance ToResourceProperties ModelInferencePaymentConfigProperty where
+  toResourceProperties ModelInferencePaymentConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::Collaboration.ModelInferencePaymentConfig",
+         supportsTags = Prelude.False,
+         properties = ["IsResponsible" JSON..= isResponsible]}
+instance JSON.ToJSON ModelInferencePaymentConfigProperty where
+  toJSON ModelInferencePaymentConfigProperty {..}
+    = JSON.object ["IsResponsible" JSON..= isResponsible]
+instance Property "IsResponsible" ModelInferencePaymentConfigProperty where
+  type PropertyType "IsResponsible" ModelInferencePaymentConfigProperty = Value Prelude.Bool
+  set newValue ModelInferencePaymentConfigProperty {..}
+    = ModelInferencePaymentConfigProperty
+        {isResponsible = newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/Collaboration/ModelInferencePaymentConfigProperty.hs-boot b/gen/Stratosphere/CleanRooms/Collaboration/ModelInferencePaymentConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/Collaboration/ModelInferencePaymentConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.Collaboration.ModelInferencePaymentConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ModelInferencePaymentConfigProperty :: Prelude.Type
+instance ToResourceProperties ModelInferencePaymentConfigProperty
+instance Prelude.Eq ModelInferencePaymentConfigProperty
+instance Prelude.Show ModelInferencePaymentConfigProperty
+instance JSON.ToJSON ModelInferencePaymentConfigProperty
diff --git a/gen/Stratosphere/CleanRooms/Collaboration/ModelTrainingPaymentConfigProperty.hs b/gen/Stratosphere/CleanRooms/Collaboration/ModelTrainingPaymentConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/Collaboration/ModelTrainingPaymentConfigProperty.hs
@@ -0,0 +1,33 @@
+module Stratosphere.CleanRooms.Collaboration.ModelTrainingPaymentConfigProperty (
+        ModelTrainingPaymentConfigProperty(..),
+        mkModelTrainingPaymentConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ModelTrainingPaymentConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-collaboration-modeltrainingpaymentconfig.html>
+    ModelTrainingPaymentConfigProperty {haddock_workaround_ :: (),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-collaboration-modeltrainingpaymentconfig.html#cfn-cleanrooms-collaboration-modeltrainingpaymentconfig-isresponsible>
+                                        isResponsible :: (Value Prelude.Bool)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkModelTrainingPaymentConfigProperty ::
+  Value Prelude.Bool -> ModelTrainingPaymentConfigProperty
+mkModelTrainingPaymentConfigProperty isResponsible
+  = ModelTrainingPaymentConfigProperty
+      {haddock_workaround_ = (), isResponsible = isResponsible}
+instance ToResourceProperties ModelTrainingPaymentConfigProperty where
+  toResourceProperties ModelTrainingPaymentConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::Collaboration.ModelTrainingPaymentConfig",
+         supportsTags = Prelude.False,
+         properties = ["IsResponsible" JSON..= isResponsible]}
+instance JSON.ToJSON ModelTrainingPaymentConfigProperty where
+  toJSON ModelTrainingPaymentConfigProperty {..}
+    = JSON.object ["IsResponsible" JSON..= isResponsible]
+instance Property "IsResponsible" ModelTrainingPaymentConfigProperty where
+  type PropertyType "IsResponsible" ModelTrainingPaymentConfigProperty = Value Prelude.Bool
+  set newValue ModelTrainingPaymentConfigProperty {..}
+    = ModelTrainingPaymentConfigProperty {isResponsible = newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/Collaboration/ModelTrainingPaymentConfigProperty.hs-boot b/gen/Stratosphere/CleanRooms/Collaboration/ModelTrainingPaymentConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/Collaboration/ModelTrainingPaymentConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.Collaboration.ModelTrainingPaymentConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ModelTrainingPaymentConfigProperty :: Prelude.Type
+instance ToResourceProperties ModelTrainingPaymentConfigProperty
+instance Prelude.Eq ModelTrainingPaymentConfigProperty
+instance Prelude.Show ModelTrainingPaymentConfigProperty
+instance JSON.ToJSON ModelTrainingPaymentConfigProperty
diff --git a/gen/Stratosphere/CleanRooms/Collaboration/PaymentConfigurationProperty.hs b/gen/Stratosphere/CleanRooms/Collaboration/PaymentConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/Collaboration/PaymentConfigurationProperty.hs
@@ -0,0 +1,61 @@
+module Stratosphere.CleanRooms.Collaboration.PaymentConfigurationProperty (
+        module Exports, PaymentConfigurationProperty(..),
+        mkPaymentConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CleanRooms.Collaboration.JobComputePaymentConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.CleanRooms.Collaboration.MLPaymentConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.CleanRooms.Collaboration.QueryComputePaymentConfigProperty as Exports
+import Stratosphere.ResourceProperties
+data PaymentConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-collaboration-paymentconfiguration.html>
+    PaymentConfigurationProperty {haddock_workaround_ :: (),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-collaboration-paymentconfiguration.html#cfn-cleanrooms-collaboration-paymentconfiguration-jobcompute>
+                                  jobCompute :: (Prelude.Maybe JobComputePaymentConfigProperty),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-collaboration-paymentconfiguration.html#cfn-cleanrooms-collaboration-paymentconfiguration-machinelearning>
+                                  machineLearning :: (Prelude.Maybe MLPaymentConfigProperty),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-collaboration-paymentconfiguration.html#cfn-cleanrooms-collaboration-paymentconfiguration-querycompute>
+                                  queryCompute :: QueryComputePaymentConfigProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPaymentConfigurationProperty ::
+  QueryComputePaymentConfigProperty -> PaymentConfigurationProperty
+mkPaymentConfigurationProperty queryCompute
+  = PaymentConfigurationProperty
+      {haddock_workaround_ = (), queryCompute = queryCompute,
+       jobCompute = Prelude.Nothing, machineLearning = Prelude.Nothing}
+instance ToResourceProperties PaymentConfigurationProperty where
+  toResourceProperties PaymentConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::Collaboration.PaymentConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["QueryCompute" JSON..= queryCompute]
+                           (Prelude.catMaybes
+                              [(JSON..=) "JobCompute" Prelude.<$> jobCompute,
+                               (JSON..=) "MachineLearning" Prelude.<$> machineLearning]))}
+instance JSON.ToJSON PaymentConfigurationProperty where
+  toJSON PaymentConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["QueryCompute" JSON..= queryCompute]
+              (Prelude.catMaybes
+                 [(JSON..=) "JobCompute" Prelude.<$> jobCompute,
+                  (JSON..=) "MachineLearning" Prelude.<$> machineLearning])))
+instance Property "JobCompute" PaymentConfigurationProperty where
+  type PropertyType "JobCompute" PaymentConfigurationProperty = JobComputePaymentConfigProperty
+  set newValue PaymentConfigurationProperty {..}
+    = PaymentConfigurationProperty
+        {jobCompute = Prelude.pure newValue, ..}
+instance Property "MachineLearning" PaymentConfigurationProperty where
+  type PropertyType "MachineLearning" PaymentConfigurationProperty = MLPaymentConfigProperty
+  set newValue PaymentConfigurationProperty {..}
+    = PaymentConfigurationProperty
+        {machineLearning = Prelude.pure newValue, ..}
+instance Property "QueryCompute" PaymentConfigurationProperty where
+  type PropertyType "QueryCompute" PaymentConfigurationProperty = QueryComputePaymentConfigProperty
+  set newValue PaymentConfigurationProperty {..}
+    = PaymentConfigurationProperty {queryCompute = newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/Collaboration/PaymentConfigurationProperty.hs-boot b/gen/Stratosphere/CleanRooms/Collaboration/PaymentConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/Collaboration/PaymentConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.Collaboration.PaymentConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data PaymentConfigurationProperty :: Prelude.Type
+instance ToResourceProperties PaymentConfigurationProperty
+instance Prelude.Eq PaymentConfigurationProperty
+instance Prelude.Show PaymentConfigurationProperty
+instance JSON.ToJSON PaymentConfigurationProperty
diff --git a/gen/Stratosphere/CleanRooms/Collaboration/QueryComputePaymentConfigProperty.hs b/gen/Stratosphere/CleanRooms/Collaboration/QueryComputePaymentConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/Collaboration/QueryComputePaymentConfigProperty.hs
@@ -0,0 +1,33 @@
+module Stratosphere.CleanRooms.Collaboration.QueryComputePaymentConfigProperty (
+        QueryComputePaymentConfigProperty(..),
+        mkQueryComputePaymentConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data QueryComputePaymentConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-collaboration-querycomputepaymentconfig.html>
+    QueryComputePaymentConfigProperty {haddock_workaround_ :: (),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-collaboration-querycomputepaymentconfig.html#cfn-cleanrooms-collaboration-querycomputepaymentconfig-isresponsible>
+                                       isResponsible :: (Value Prelude.Bool)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkQueryComputePaymentConfigProperty ::
+  Value Prelude.Bool -> QueryComputePaymentConfigProperty
+mkQueryComputePaymentConfigProperty isResponsible
+  = QueryComputePaymentConfigProperty
+      {haddock_workaround_ = (), isResponsible = isResponsible}
+instance ToResourceProperties QueryComputePaymentConfigProperty where
+  toResourceProperties QueryComputePaymentConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::Collaboration.QueryComputePaymentConfig",
+         supportsTags = Prelude.False,
+         properties = ["IsResponsible" JSON..= isResponsible]}
+instance JSON.ToJSON QueryComputePaymentConfigProperty where
+  toJSON QueryComputePaymentConfigProperty {..}
+    = JSON.object ["IsResponsible" JSON..= isResponsible]
+instance Property "IsResponsible" QueryComputePaymentConfigProperty where
+  type PropertyType "IsResponsible" QueryComputePaymentConfigProperty = Value Prelude.Bool
+  set newValue QueryComputePaymentConfigProperty {..}
+    = QueryComputePaymentConfigProperty {isResponsible = newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/Collaboration/QueryComputePaymentConfigProperty.hs-boot b/gen/Stratosphere/CleanRooms/Collaboration/QueryComputePaymentConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/Collaboration/QueryComputePaymentConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.Collaboration.QueryComputePaymentConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data QueryComputePaymentConfigProperty :: Prelude.Type
+instance ToResourceProperties QueryComputePaymentConfigProperty
+instance Prelude.Eq QueryComputePaymentConfigProperty
+instance Prelude.Show QueryComputePaymentConfigProperty
+instance JSON.ToJSON QueryComputePaymentConfigProperty
diff --git a/gen/Stratosphere/CleanRooms/ConfiguredTable.hs b/gen/Stratosphere/CleanRooms/ConfiguredTable.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/ConfiguredTable.hs
@@ -0,0 +1,105 @@
+module Stratosphere.CleanRooms.ConfiguredTable (
+        module Exports, ConfiguredTable(..), mkConfiguredTable
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CleanRooms.ConfiguredTable.AnalysisRuleProperty as Exports
+import {-# SOURCE #-} Stratosphere.CleanRooms.ConfiguredTable.TableReferenceProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data ConfiguredTable
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-configuredtable.html>
+    ConfiguredTable {haddock_workaround_ :: (),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-configuredtable.html#cfn-cleanrooms-configuredtable-allowedcolumns>
+                     allowedColumns :: (ValueList Prelude.Text),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-configuredtable.html#cfn-cleanrooms-configuredtable-analysismethod>
+                     analysisMethod :: (Value Prelude.Text),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-configuredtable.html#cfn-cleanrooms-configuredtable-analysisrules>
+                     analysisRules :: (Prelude.Maybe [AnalysisRuleProperty]),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-configuredtable.html#cfn-cleanrooms-configuredtable-description>
+                     description :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-configuredtable.html#cfn-cleanrooms-configuredtable-name>
+                     name :: (Value Prelude.Text),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-configuredtable.html#cfn-cleanrooms-configuredtable-selectedanalysismethods>
+                     selectedAnalysisMethods :: (Prelude.Maybe (ValueList Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-configuredtable.html#cfn-cleanrooms-configuredtable-tablereference>
+                     tableReference :: TableReferenceProperty,
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-configuredtable.html#cfn-cleanrooms-configuredtable-tags>
+                     tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkConfiguredTable ::
+  ValueList Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Text -> TableReferenceProperty -> ConfiguredTable
+mkConfiguredTable allowedColumns analysisMethod name tableReference
+  = ConfiguredTable
+      {haddock_workaround_ = (), allowedColumns = allowedColumns,
+       analysisMethod = analysisMethod, name = name,
+       tableReference = tableReference, analysisRules = Prelude.Nothing,
+       description = Prelude.Nothing,
+       selectedAnalysisMethods = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties ConfiguredTable where
+  toResourceProperties ConfiguredTable {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::ConfiguredTable",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["AllowedColumns" JSON..= allowedColumns,
+                            "AnalysisMethod" JSON..= analysisMethod, "Name" JSON..= name,
+                            "TableReference" JSON..= tableReference]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AnalysisRules" Prelude.<$> analysisRules,
+                               (JSON..=) "Description" Prelude.<$> description,
+                               (JSON..=) "SelectedAnalysisMethods"
+                                 Prelude.<$> selectedAnalysisMethods,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON ConfiguredTable where
+  toJSON ConfiguredTable {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["AllowedColumns" JSON..= allowedColumns,
+               "AnalysisMethod" JSON..= analysisMethod, "Name" JSON..= name,
+               "TableReference" JSON..= tableReference]
+              (Prelude.catMaybes
+                 [(JSON..=) "AnalysisRules" Prelude.<$> analysisRules,
+                  (JSON..=) "Description" Prelude.<$> description,
+                  (JSON..=) "SelectedAnalysisMethods"
+                    Prelude.<$> selectedAnalysisMethods,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "AllowedColumns" ConfiguredTable where
+  type PropertyType "AllowedColumns" ConfiguredTable = ValueList Prelude.Text
+  set newValue ConfiguredTable {..}
+    = ConfiguredTable {allowedColumns = newValue, ..}
+instance Property "AnalysisMethod" ConfiguredTable where
+  type PropertyType "AnalysisMethod" ConfiguredTable = Value Prelude.Text
+  set newValue ConfiguredTable {..}
+    = ConfiguredTable {analysisMethod = newValue, ..}
+instance Property "AnalysisRules" ConfiguredTable where
+  type PropertyType "AnalysisRules" ConfiguredTable = [AnalysisRuleProperty]
+  set newValue ConfiguredTable {..}
+    = ConfiguredTable {analysisRules = Prelude.pure newValue, ..}
+instance Property "Description" ConfiguredTable where
+  type PropertyType "Description" ConfiguredTable = Value Prelude.Text
+  set newValue ConfiguredTable {..}
+    = ConfiguredTable {description = Prelude.pure newValue, ..}
+instance Property "Name" ConfiguredTable where
+  type PropertyType "Name" ConfiguredTable = Value Prelude.Text
+  set newValue ConfiguredTable {..}
+    = ConfiguredTable {name = newValue, ..}
+instance Property "SelectedAnalysisMethods" ConfiguredTable where
+  type PropertyType "SelectedAnalysisMethods" ConfiguredTable = ValueList Prelude.Text
+  set newValue ConfiguredTable {..}
+    = ConfiguredTable
+        {selectedAnalysisMethods = Prelude.pure newValue, ..}
+instance Property "TableReference" ConfiguredTable where
+  type PropertyType "TableReference" ConfiguredTable = TableReferenceProperty
+  set newValue ConfiguredTable {..}
+    = ConfiguredTable {tableReference = newValue, ..}
+instance Property "Tags" ConfiguredTable where
+  type PropertyType "Tags" ConfiguredTable = [Tag]
+  set newValue ConfiguredTable {..}
+    = ConfiguredTable {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/ConfiguredTable/AggregateColumnProperty.hs b/gen/Stratosphere/CleanRooms/ConfiguredTable/AggregateColumnProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/ConfiguredTable/AggregateColumnProperty.hs
@@ -0,0 +1,42 @@
+module Stratosphere.CleanRooms.ConfiguredTable.AggregateColumnProperty (
+        AggregateColumnProperty(..), mkAggregateColumnProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AggregateColumnProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-aggregatecolumn.html>
+    AggregateColumnProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-aggregatecolumn.html#cfn-cleanrooms-configuredtable-aggregatecolumn-columnnames>
+                             columnNames :: (ValueList Prelude.Text),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-aggregatecolumn.html#cfn-cleanrooms-configuredtable-aggregatecolumn-function>
+                             function :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAggregateColumnProperty ::
+  ValueList Prelude.Text
+  -> Value Prelude.Text -> AggregateColumnProperty
+mkAggregateColumnProperty columnNames function
+  = AggregateColumnProperty
+      {haddock_workaround_ = (), columnNames = columnNames,
+       function = function}
+instance ToResourceProperties AggregateColumnProperty where
+  toResourceProperties AggregateColumnProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::ConfiguredTable.AggregateColumn",
+         supportsTags = Prelude.False,
+         properties = ["ColumnNames" JSON..= columnNames,
+                       "Function" JSON..= function]}
+instance JSON.ToJSON AggregateColumnProperty where
+  toJSON AggregateColumnProperty {..}
+    = JSON.object
+        ["ColumnNames" JSON..= columnNames, "Function" JSON..= function]
+instance Property "ColumnNames" AggregateColumnProperty where
+  type PropertyType "ColumnNames" AggregateColumnProperty = ValueList Prelude.Text
+  set newValue AggregateColumnProperty {..}
+    = AggregateColumnProperty {columnNames = newValue, ..}
+instance Property "Function" AggregateColumnProperty where
+  type PropertyType "Function" AggregateColumnProperty = Value Prelude.Text
+  set newValue AggregateColumnProperty {..}
+    = AggregateColumnProperty {function = newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/ConfiguredTable/AggregateColumnProperty.hs-boot b/gen/Stratosphere/CleanRooms/ConfiguredTable/AggregateColumnProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/ConfiguredTable/AggregateColumnProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.ConfiguredTable.AggregateColumnProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AggregateColumnProperty :: Prelude.Type
+instance ToResourceProperties AggregateColumnProperty
+instance Prelude.Eq AggregateColumnProperty
+instance Prelude.Show AggregateColumnProperty
+instance JSON.ToJSON AggregateColumnProperty
diff --git a/gen/Stratosphere/CleanRooms/ConfiguredTable/AggregationConstraintProperty.hs b/gen/Stratosphere/CleanRooms/ConfiguredTable/AggregationConstraintProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/ConfiguredTable/AggregationConstraintProperty.hs
@@ -0,0 +1,50 @@
+module Stratosphere.CleanRooms.ConfiguredTable.AggregationConstraintProperty (
+        AggregationConstraintProperty(..), mkAggregationConstraintProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AggregationConstraintProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-aggregationconstraint.html>
+    AggregationConstraintProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-aggregationconstraint.html#cfn-cleanrooms-configuredtable-aggregationconstraint-columnname>
+                                   columnName :: (Value Prelude.Text),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-aggregationconstraint.html#cfn-cleanrooms-configuredtable-aggregationconstraint-minimum>
+                                   minimum :: (Value Prelude.Double),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-aggregationconstraint.html#cfn-cleanrooms-configuredtable-aggregationconstraint-type>
+                                   type' :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAggregationConstraintProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Double
+     -> Value Prelude.Text -> AggregationConstraintProperty
+mkAggregationConstraintProperty columnName minimum type'
+  = AggregationConstraintProperty
+      {haddock_workaround_ = (), columnName = columnName,
+       minimum = minimum, type' = type'}
+instance ToResourceProperties AggregationConstraintProperty where
+  toResourceProperties AggregationConstraintProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::ConfiguredTable.AggregationConstraint",
+         supportsTags = Prelude.False,
+         properties = ["ColumnName" JSON..= columnName,
+                       "Minimum" JSON..= minimum, "Type" JSON..= type']}
+instance JSON.ToJSON AggregationConstraintProperty where
+  toJSON AggregationConstraintProperty {..}
+    = JSON.object
+        ["ColumnName" JSON..= columnName, "Minimum" JSON..= minimum,
+         "Type" JSON..= type']
+instance Property "ColumnName" AggregationConstraintProperty where
+  type PropertyType "ColumnName" AggregationConstraintProperty = Value Prelude.Text
+  set newValue AggregationConstraintProperty {..}
+    = AggregationConstraintProperty {columnName = newValue, ..}
+instance Property "Minimum" AggregationConstraintProperty where
+  type PropertyType "Minimum" AggregationConstraintProperty = Value Prelude.Double
+  set newValue AggregationConstraintProperty {..}
+    = AggregationConstraintProperty {minimum = newValue, ..}
+instance Property "Type" AggregationConstraintProperty where
+  type PropertyType "Type" AggregationConstraintProperty = Value Prelude.Text
+  set newValue AggregationConstraintProperty {..}
+    = AggregationConstraintProperty {type' = newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/ConfiguredTable/AggregationConstraintProperty.hs-boot b/gen/Stratosphere/CleanRooms/ConfiguredTable/AggregationConstraintProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/ConfiguredTable/AggregationConstraintProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.ConfiguredTable.AggregationConstraintProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AggregationConstraintProperty :: Prelude.Type
+instance ToResourceProperties AggregationConstraintProperty
+instance Prelude.Eq AggregationConstraintProperty
+instance Prelude.Show AggregationConstraintProperty
+instance JSON.ToJSON AggregationConstraintProperty
diff --git a/gen/Stratosphere/CleanRooms/ConfiguredTable/AnalysisRuleAggregationProperty.hs b/gen/Stratosphere/CleanRooms/ConfiguredTable/AnalysisRuleAggregationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/ConfiguredTable/AnalysisRuleAggregationProperty.hs
@@ -0,0 +1,117 @@
+module Stratosphere.CleanRooms.ConfiguredTable.AnalysisRuleAggregationProperty (
+        module Exports, AnalysisRuleAggregationProperty(..),
+        mkAnalysisRuleAggregationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CleanRooms.ConfiguredTable.AggregateColumnProperty as Exports
+import {-# SOURCE #-} Stratosphere.CleanRooms.ConfiguredTable.AggregationConstraintProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AnalysisRuleAggregationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-analysisruleaggregation.html>
+    AnalysisRuleAggregationProperty {haddock_workaround_ :: (),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-analysisruleaggregation.html#cfn-cleanrooms-configuredtable-analysisruleaggregation-additionalanalyses>
+                                     additionalAnalyses :: (Prelude.Maybe (Value Prelude.Text)),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-analysisruleaggregation.html#cfn-cleanrooms-configuredtable-analysisruleaggregation-aggregatecolumns>
+                                     aggregateColumns :: [AggregateColumnProperty],
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-analysisruleaggregation.html#cfn-cleanrooms-configuredtable-analysisruleaggregation-allowedjoinoperators>
+                                     allowedJoinOperators :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-analysisruleaggregation.html#cfn-cleanrooms-configuredtable-analysisruleaggregation-dimensioncolumns>
+                                     dimensionColumns :: (ValueList Prelude.Text),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-analysisruleaggregation.html#cfn-cleanrooms-configuredtable-analysisruleaggregation-joincolumns>
+                                     joinColumns :: (ValueList Prelude.Text),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-analysisruleaggregation.html#cfn-cleanrooms-configuredtable-analysisruleaggregation-joinrequired>
+                                     joinRequired :: (Prelude.Maybe (Value Prelude.Text)),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-analysisruleaggregation.html#cfn-cleanrooms-configuredtable-analysisruleaggregation-outputconstraints>
+                                     outputConstraints :: [AggregationConstraintProperty],
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-analysisruleaggregation.html#cfn-cleanrooms-configuredtable-analysisruleaggregation-scalarfunctions>
+                                     scalarFunctions :: (ValueList Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAnalysisRuleAggregationProperty ::
+  [AggregateColumnProperty]
+  -> ValueList Prelude.Text
+     -> ValueList Prelude.Text
+        -> [AggregationConstraintProperty]
+           -> ValueList Prelude.Text -> AnalysisRuleAggregationProperty
+mkAnalysisRuleAggregationProperty
+  aggregateColumns
+  dimensionColumns
+  joinColumns
+  outputConstraints
+  scalarFunctions
+  = AnalysisRuleAggregationProperty
+      {haddock_workaround_ = (), aggregateColumns = aggregateColumns,
+       dimensionColumns = dimensionColumns, joinColumns = joinColumns,
+       outputConstraints = outputConstraints,
+       scalarFunctions = scalarFunctions,
+       additionalAnalyses = Prelude.Nothing,
+       allowedJoinOperators = Prelude.Nothing,
+       joinRequired = Prelude.Nothing}
+instance ToResourceProperties AnalysisRuleAggregationProperty where
+  toResourceProperties AnalysisRuleAggregationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::ConfiguredTable.AnalysisRuleAggregation",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["AggregateColumns" JSON..= aggregateColumns,
+                            "DimensionColumns" JSON..= dimensionColumns,
+                            "JoinColumns" JSON..= joinColumns,
+                            "OutputConstraints" JSON..= outputConstraints,
+                            "ScalarFunctions" JSON..= scalarFunctions]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AdditionalAnalyses" Prelude.<$> additionalAnalyses,
+                               (JSON..=) "AllowedJoinOperators" Prelude.<$> allowedJoinOperators,
+                               (JSON..=) "JoinRequired" Prelude.<$> joinRequired]))}
+instance JSON.ToJSON AnalysisRuleAggregationProperty where
+  toJSON AnalysisRuleAggregationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["AggregateColumns" JSON..= aggregateColumns,
+               "DimensionColumns" JSON..= dimensionColumns,
+               "JoinColumns" JSON..= joinColumns,
+               "OutputConstraints" JSON..= outputConstraints,
+               "ScalarFunctions" JSON..= scalarFunctions]
+              (Prelude.catMaybes
+                 [(JSON..=) "AdditionalAnalyses" Prelude.<$> additionalAnalyses,
+                  (JSON..=) "AllowedJoinOperators" Prelude.<$> allowedJoinOperators,
+                  (JSON..=) "JoinRequired" Prelude.<$> joinRequired])))
+instance Property "AdditionalAnalyses" AnalysisRuleAggregationProperty where
+  type PropertyType "AdditionalAnalyses" AnalysisRuleAggregationProperty = Value Prelude.Text
+  set newValue AnalysisRuleAggregationProperty {..}
+    = AnalysisRuleAggregationProperty
+        {additionalAnalyses = Prelude.pure newValue, ..}
+instance Property "AggregateColumns" AnalysisRuleAggregationProperty where
+  type PropertyType "AggregateColumns" AnalysisRuleAggregationProperty = [AggregateColumnProperty]
+  set newValue AnalysisRuleAggregationProperty {..}
+    = AnalysisRuleAggregationProperty {aggregateColumns = newValue, ..}
+instance Property "AllowedJoinOperators" AnalysisRuleAggregationProperty where
+  type PropertyType "AllowedJoinOperators" AnalysisRuleAggregationProperty = ValueList Prelude.Text
+  set newValue AnalysisRuleAggregationProperty {..}
+    = AnalysisRuleAggregationProperty
+        {allowedJoinOperators = Prelude.pure newValue, ..}
+instance Property "DimensionColumns" AnalysisRuleAggregationProperty where
+  type PropertyType "DimensionColumns" AnalysisRuleAggregationProperty = ValueList Prelude.Text
+  set newValue AnalysisRuleAggregationProperty {..}
+    = AnalysisRuleAggregationProperty {dimensionColumns = newValue, ..}
+instance Property "JoinColumns" AnalysisRuleAggregationProperty where
+  type PropertyType "JoinColumns" AnalysisRuleAggregationProperty = ValueList Prelude.Text
+  set newValue AnalysisRuleAggregationProperty {..}
+    = AnalysisRuleAggregationProperty {joinColumns = newValue, ..}
+instance Property "JoinRequired" AnalysisRuleAggregationProperty where
+  type PropertyType "JoinRequired" AnalysisRuleAggregationProperty = Value Prelude.Text
+  set newValue AnalysisRuleAggregationProperty {..}
+    = AnalysisRuleAggregationProperty
+        {joinRequired = Prelude.pure newValue, ..}
+instance Property "OutputConstraints" AnalysisRuleAggregationProperty where
+  type PropertyType "OutputConstraints" AnalysisRuleAggregationProperty = [AggregationConstraintProperty]
+  set newValue AnalysisRuleAggregationProperty {..}
+    = AnalysisRuleAggregationProperty
+        {outputConstraints = newValue, ..}
+instance Property "ScalarFunctions" AnalysisRuleAggregationProperty where
+  type PropertyType "ScalarFunctions" AnalysisRuleAggregationProperty = ValueList Prelude.Text
+  set newValue AnalysisRuleAggregationProperty {..}
+    = AnalysisRuleAggregationProperty {scalarFunctions = newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/ConfiguredTable/AnalysisRuleAggregationProperty.hs-boot b/gen/Stratosphere/CleanRooms/ConfiguredTable/AnalysisRuleAggregationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/ConfiguredTable/AnalysisRuleAggregationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.ConfiguredTable.AnalysisRuleAggregationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AnalysisRuleAggregationProperty :: Prelude.Type
+instance ToResourceProperties AnalysisRuleAggregationProperty
+instance Prelude.Eq AnalysisRuleAggregationProperty
+instance Prelude.Show AnalysisRuleAggregationProperty
+instance JSON.ToJSON AnalysisRuleAggregationProperty
diff --git a/gen/Stratosphere/CleanRooms/ConfiguredTable/AnalysisRuleCustomProperty.hs b/gen/Stratosphere/CleanRooms/ConfiguredTable/AnalysisRuleCustomProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/ConfiguredTable/AnalysisRuleCustomProperty.hs
@@ -0,0 +1,85 @@
+module Stratosphere.CleanRooms.ConfiguredTable.AnalysisRuleCustomProperty (
+        module Exports, AnalysisRuleCustomProperty(..),
+        mkAnalysisRuleCustomProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CleanRooms.ConfiguredTable.DifferentialPrivacyProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AnalysisRuleCustomProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-analysisrulecustom.html>
+    AnalysisRuleCustomProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-analysisrulecustom.html#cfn-cleanrooms-configuredtable-analysisrulecustom-additionalanalyses>
+                                additionalAnalyses :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-analysisrulecustom.html#cfn-cleanrooms-configuredtable-analysisrulecustom-allowedanalyses>
+                                allowedAnalyses :: (ValueList Prelude.Text),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-analysisrulecustom.html#cfn-cleanrooms-configuredtable-analysisrulecustom-allowedanalysisproviders>
+                                allowedAnalysisProviders :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-analysisrulecustom.html#cfn-cleanrooms-configuredtable-analysisrulecustom-differentialprivacy>
+                                differentialPrivacy :: (Prelude.Maybe DifferentialPrivacyProperty),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-analysisrulecustom.html#cfn-cleanrooms-configuredtable-analysisrulecustom-disallowedoutputcolumns>
+                                disallowedOutputColumns :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAnalysisRuleCustomProperty ::
+  ValueList Prelude.Text -> AnalysisRuleCustomProperty
+mkAnalysisRuleCustomProperty allowedAnalyses
+  = AnalysisRuleCustomProperty
+      {haddock_workaround_ = (), allowedAnalyses = allowedAnalyses,
+       additionalAnalyses = Prelude.Nothing,
+       allowedAnalysisProviders = Prelude.Nothing,
+       differentialPrivacy = Prelude.Nothing,
+       disallowedOutputColumns = Prelude.Nothing}
+instance ToResourceProperties AnalysisRuleCustomProperty where
+  toResourceProperties AnalysisRuleCustomProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::ConfiguredTable.AnalysisRuleCustom",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["AllowedAnalyses" JSON..= allowedAnalyses]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AdditionalAnalyses" Prelude.<$> additionalAnalyses,
+                               (JSON..=) "AllowedAnalysisProviders"
+                                 Prelude.<$> allowedAnalysisProviders,
+                               (JSON..=) "DifferentialPrivacy" Prelude.<$> differentialPrivacy,
+                               (JSON..=) "DisallowedOutputColumns"
+                                 Prelude.<$> disallowedOutputColumns]))}
+instance JSON.ToJSON AnalysisRuleCustomProperty where
+  toJSON AnalysisRuleCustomProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["AllowedAnalyses" JSON..= allowedAnalyses]
+              (Prelude.catMaybes
+                 [(JSON..=) "AdditionalAnalyses" Prelude.<$> additionalAnalyses,
+                  (JSON..=) "AllowedAnalysisProviders"
+                    Prelude.<$> allowedAnalysisProviders,
+                  (JSON..=) "DifferentialPrivacy" Prelude.<$> differentialPrivacy,
+                  (JSON..=) "DisallowedOutputColumns"
+                    Prelude.<$> disallowedOutputColumns])))
+instance Property "AdditionalAnalyses" AnalysisRuleCustomProperty where
+  type PropertyType "AdditionalAnalyses" AnalysisRuleCustomProperty = Value Prelude.Text
+  set newValue AnalysisRuleCustomProperty {..}
+    = AnalysisRuleCustomProperty
+        {additionalAnalyses = Prelude.pure newValue, ..}
+instance Property "AllowedAnalyses" AnalysisRuleCustomProperty where
+  type PropertyType "AllowedAnalyses" AnalysisRuleCustomProperty = ValueList Prelude.Text
+  set newValue AnalysisRuleCustomProperty {..}
+    = AnalysisRuleCustomProperty {allowedAnalyses = newValue, ..}
+instance Property "AllowedAnalysisProviders" AnalysisRuleCustomProperty where
+  type PropertyType "AllowedAnalysisProviders" AnalysisRuleCustomProperty = ValueList Prelude.Text
+  set newValue AnalysisRuleCustomProperty {..}
+    = AnalysisRuleCustomProperty
+        {allowedAnalysisProviders = Prelude.pure newValue, ..}
+instance Property "DifferentialPrivacy" AnalysisRuleCustomProperty where
+  type PropertyType "DifferentialPrivacy" AnalysisRuleCustomProperty = DifferentialPrivacyProperty
+  set newValue AnalysisRuleCustomProperty {..}
+    = AnalysisRuleCustomProperty
+        {differentialPrivacy = Prelude.pure newValue, ..}
+instance Property "DisallowedOutputColumns" AnalysisRuleCustomProperty where
+  type PropertyType "DisallowedOutputColumns" AnalysisRuleCustomProperty = ValueList Prelude.Text
+  set newValue AnalysisRuleCustomProperty {..}
+    = AnalysisRuleCustomProperty
+        {disallowedOutputColumns = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/ConfiguredTable/AnalysisRuleCustomProperty.hs-boot b/gen/Stratosphere/CleanRooms/ConfiguredTable/AnalysisRuleCustomProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/ConfiguredTable/AnalysisRuleCustomProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.ConfiguredTable.AnalysisRuleCustomProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AnalysisRuleCustomProperty :: Prelude.Type
+instance ToResourceProperties AnalysisRuleCustomProperty
+instance Prelude.Eq AnalysisRuleCustomProperty
+instance Prelude.Show AnalysisRuleCustomProperty
+instance JSON.ToJSON AnalysisRuleCustomProperty
diff --git a/gen/Stratosphere/CleanRooms/ConfiguredTable/AnalysisRuleListProperty.hs b/gen/Stratosphere/CleanRooms/ConfiguredTable/AnalysisRuleListProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/ConfiguredTable/AnalysisRuleListProperty.hs
@@ -0,0 +1,70 @@
+module Stratosphere.CleanRooms.ConfiguredTable.AnalysisRuleListProperty (
+        AnalysisRuleListProperty(..), mkAnalysisRuleListProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AnalysisRuleListProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-analysisrulelist.html>
+    AnalysisRuleListProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-analysisrulelist.html#cfn-cleanrooms-configuredtable-analysisrulelist-additionalanalyses>
+                              additionalAnalyses :: (Prelude.Maybe (Value Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-analysisrulelist.html#cfn-cleanrooms-configuredtable-analysisrulelist-allowedjoinoperators>
+                              allowedJoinOperators :: (Prelude.Maybe (ValueList Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-analysisrulelist.html#cfn-cleanrooms-configuredtable-analysisrulelist-joincolumns>
+                              joinColumns :: (ValueList Prelude.Text),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-analysisrulelist.html#cfn-cleanrooms-configuredtable-analysisrulelist-listcolumns>
+                              listColumns :: (ValueList Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAnalysisRuleListProperty ::
+  ValueList Prelude.Text
+  -> ValueList Prelude.Text -> AnalysisRuleListProperty
+mkAnalysisRuleListProperty joinColumns listColumns
+  = AnalysisRuleListProperty
+      {haddock_workaround_ = (), joinColumns = joinColumns,
+       listColumns = listColumns, additionalAnalyses = Prelude.Nothing,
+       allowedJoinOperators = Prelude.Nothing}
+instance ToResourceProperties AnalysisRuleListProperty where
+  toResourceProperties AnalysisRuleListProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::ConfiguredTable.AnalysisRuleList",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["JoinColumns" JSON..= joinColumns,
+                            "ListColumns" JSON..= listColumns]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AdditionalAnalyses" Prelude.<$> additionalAnalyses,
+                               (JSON..=) "AllowedJoinOperators"
+                                 Prelude.<$> allowedJoinOperators]))}
+instance JSON.ToJSON AnalysisRuleListProperty where
+  toJSON AnalysisRuleListProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["JoinColumns" JSON..= joinColumns,
+               "ListColumns" JSON..= listColumns]
+              (Prelude.catMaybes
+                 [(JSON..=) "AdditionalAnalyses" Prelude.<$> additionalAnalyses,
+                  (JSON..=) "AllowedJoinOperators"
+                    Prelude.<$> allowedJoinOperators])))
+instance Property "AdditionalAnalyses" AnalysisRuleListProperty where
+  type PropertyType "AdditionalAnalyses" AnalysisRuleListProperty = Value Prelude.Text
+  set newValue AnalysisRuleListProperty {..}
+    = AnalysisRuleListProperty
+        {additionalAnalyses = Prelude.pure newValue, ..}
+instance Property "AllowedJoinOperators" AnalysisRuleListProperty where
+  type PropertyType "AllowedJoinOperators" AnalysisRuleListProperty = ValueList Prelude.Text
+  set newValue AnalysisRuleListProperty {..}
+    = AnalysisRuleListProperty
+        {allowedJoinOperators = Prelude.pure newValue, ..}
+instance Property "JoinColumns" AnalysisRuleListProperty where
+  type PropertyType "JoinColumns" AnalysisRuleListProperty = ValueList Prelude.Text
+  set newValue AnalysisRuleListProperty {..}
+    = AnalysisRuleListProperty {joinColumns = newValue, ..}
+instance Property "ListColumns" AnalysisRuleListProperty where
+  type PropertyType "ListColumns" AnalysisRuleListProperty = ValueList Prelude.Text
+  set newValue AnalysisRuleListProperty {..}
+    = AnalysisRuleListProperty {listColumns = newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/ConfiguredTable/AnalysisRuleListProperty.hs-boot b/gen/Stratosphere/CleanRooms/ConfiguredTable/AnalysisRuleListProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/ConfiguredTable/AnalysisRuleListProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.ConfiguredTable.AnalysisRuleListProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AnalysisRuleListProperty :: Prelude.Type
+instance ToResourceProperties AnalysisRuleListProperty
+instance Prelude.Eq AnalysisRuleListProperty
+instance Prelude.Show AnalysisRuleListProperty
+instance JSON.ToJSON AnalysisRuleListProperty
diff --git a/gen/Stratosphere/CleanRooms/ConfiguredTable/AnalysisRuleProperty.hs b/gen/Stratosphere/CleanRooms/ConfiguredTable/AnalysisRuleProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/ConfiguredTable/AnalysisRuleProperty.hs
@@ -0,0 +1,40 @@
+module Stratosphere.CleanRooms.ConfiguredTable.AnalysisRuleProperty (
+        module Exports, AnalysisRuleProperty(..), mkAnalysisRuleProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CleanRooms.ConfiguredTable.ConfiguredTableAnalysisRulePolicyProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AnalysisRuleProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-analysisrule.html>
+    AnalysisRuleProperty {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-analysisrule.html#cfn-cleanrooms-configuredtable-analysisrule-policy>
+                          policy :: ConfiguredTableAnalysisRulePolicyProperty,
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-analysisrule.html#cfn-cleanrooms-configuredtable-analysisrule-type>
+                          type' :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAnalysisRuleProperty ::
+  ConfiguredTableAnalysisRulePolicyProperty
+  -> Value Prelude.Text -> AnalysisRuleProperty
+mkAnalysisRuleProperty policy type'
+  = AnalysisRuleProperty
+      {haddock_workaround_ = (), policy = policy, type' = type'}
+instance ToResourceProperties AnalysisRuleProperty where
+  toResourceProperties AnalysisRuleProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::ConfiguredTable.AnalysisRule",
+         supportsTags = Prelude.False,
+         properties = ["Policy" JSON..= policy, "Type" JSON..= type']}
+instance JSON.ToJSON AnalysisRuleProperty where
+  toJSON AnalysisRuleProperty {..}
+    = JSON.object ["Policy" JSON..= policy, "Type" JSON..= type']
+instance Property "Policy" AnalysisRuleProperty where
+  type PropertyType "Policy" AnalysisRuleProperty = ConfiguredTableAnalysisRulePolicyProperty
+  set newValue AnalysisRuleProperty {..}
+    = AnalysisRuleProperty {policy = newValue, ..}
+instance Property "Type" AnalysisRuleProperty where
+  type PropertyType "Type" AnalysisRuleProperty = Value Prelude.Text
+  set newValue AnalysisRuleProperty {..}
+    = AnalysisRuleProperty {type' = newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/ConfiguredTable/AnalysisRuleProperty.hs-boot b/gen/Stratosphere/CleanRooms/ConfiguredTable/AnalysisRuleProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/ConfiguredTable/AnalysisRuleProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.ConfiguredTable.AnalysisRuleProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AnalysisRuleProperty :: Prelude.Type
+instance ToResourceProperties AnalysisRuleProperty
+instance Prelude.Eq AnalysisRuleProperty
+instance Prelude.Show AnalysisRuleProperty
+instance JSON.ToJSON AnalysisRuleProperty
diff --git a/gen/Stratosphere/CleanRooms/ConfiguredTable/AthenaTableReferenceProperty.hs b/gen/Stratosphere/CleanRooms/ConfiguredTable/AthenaTableReferenceProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/ConfiguredTable/AthenaTableReferenceProperty.hs
@@ -0,0 +1,66 @@
+module Stratosphere.CleanRooms.ConfiguredTable.AthenaTableReferenceProperty (
+        AthenaTableReferenceProperty(..), mkAthenaTableReferenceProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AthenaTableReferenceProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-athenatablereference.html>
+    AthenaTableReferenceProperty {haddock_workaround_ :: (),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-athenatablereference.html#cfn-cleanrooms-configuredtable-athenatablereference-databasename>
+                                  databaseName :: (Value Prelude.Text),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-athenatablereference.html#cfn-cleanrooms-configuredtable-athenatablereference-outputlocation>
+                                  outputLocation :: (Prelude.Maybe (Value Prelude.Text)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-athenatablereference.html#cfn-cleanrooms-configuredtable-athenatablereference-tablename>
+                                  tableName :: (Value Prelude.Text),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-athenatablereference.html#cfn-cleanrooms-configuredtable-athenatablereference-workgroup>
+                                  workGroup :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAthenaTableReferenceProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Text -> AthenaTableReferenceProperty
+mkAthenaTableReferenceProperty databaseName tableName workGroup
+  = AthenaTableReferenceProperty
+      {haddock_workaround_ = (), databaseName = databaseName,
+       tableName = tableName, workGroup = workGroup,
+       outputLocation = Prelude.Nothing}
+instance ToResourceProperties AthenaTableReferenceProperty where
+  toResourceProperties AthenaTableReferenceProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::ConfiguredTable.AthenaTableReference",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["DatabaseName" JSON..= databaseName,
+                            "TableName" JSON..= tableName, "WorkGroup" JSON..= workGroup]
+                           (Prelude.catMaybes
+                              [(JSON..=) "OutputLocation" Prelude.<$> outputLocation]))}
+instance JSON.ToJSON AthenaTableReferenceProperty where
+  toJSON AthenaTableReferenceProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["DatabaseName" JSON..= databaseName,
+               "TableName" JSON..= tableName, "WorkGroup" JSON..= workGroup]
+              (Prelude.catMaybes
+                 [(JSON..=) "OutputLocation" Prelude.<$> outputLocation])))
+instance Property "DatabaseName" AthenaTableReferenceProperty where
+  type PropertyType "DatabaseName" AthenaTableReferenceProperty = Value Prelude.Text
+  set newValue AthenaTableReferenceProperty {..}
+    = AthenaTableReferenceProperty {databaseName = newValue, ..}
+instance Property "OutputLocation" AthenaTableReferenceProperty where
+  type PropertyType "OutputLocation" AthenaTableReferenceProperty = Value Prelude.Text
+  set newValue AthenaTableReferenceProperty {..}
+    = AthenaTableReferenceProperty
+        {outputLocation = Prelude.pure newValue, ..}
+instance Property "TableName" AthenaTableReferenceProperty where
+  type PropertyType "TableName" AthenaTableReferenceProperty = Value Prelude.Text
+  set newValue AthenaTableReferenceProperty {..}
+    = AthenaTableReferenceProperty {tableName = newValue, ..}
+instance Property "WorkGroup" AthenaTableReferenceProperty where
+  type PropertyType "WorkGroup" AthenaTableReferenceProperty = Value Prelude.Text
+  set newValue AthenaTableReferenceProperty {..}
+    = AthenaTableReferenceProperty {workGroup = newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/ConfiguredTable/AthenaTableReferenceProperty.hs-boot b/gen/Stratosphere/CleanRooms/ConfiguredTable/AthenaTableReferenceProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/ConfiguredTable/AthenaTableReferenceProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.ConfiguredTable.AthenaTableReferenceProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AthenaTableReferenceProperty :: Prelude.Type
+instance ToResourceProperties AthenaTableReferenceProperty
+instance Prelude.Eq AthenaTableReferenceProperty
+instance Prelude.Show AthenaTableReferenceProperty
+instance JSON.ToJSON AthenaTableReferenceProperty
diff --git a/gen/Stratosphere/CleanRooms/ConfiguredTable/ConfiguredTableAnalysisRulePolicyProperty.hs b/gen/Stratosphere/CleanRooms/ConfiguredTable/ConfiguredTableAnalysisRulePolicyProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/ConfiguredTable/ConfiguredTableAnalysisRulePolicyProperty.hs
@@ -0,0 +1,33 @@
+module Stratosphere.CleanRooms.ConfiguredTable.ConfiguredTableAnalysisRulePolicyProperty (
+        module Exports, ConfiguredTableAnalysisRulePolicyProperty(..),
+        mkConfiguredTableAnalysisRulePolicyProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CleanRooms.ConfiguredTable.ConfiguredTableAnalysisRulePolicyV1Property as Exports
+import Stratosphere.ResourceProperties
+data ConfiguredTableAnalysisRulePolicyProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-configuredtableanalysisrulepolicy.html>
+    ConfiguredTableAnalysisRulePolicyProperty {haddock_workaround_ :: (),
+                                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-configuredtableanalysisrulepolicy.html#cfn-cleanrooms-configuredtable-configuredtableanalysisrulepolicy-v1>
+                                               v1 :: ConfiguredTableAnalysisRulePolicyV1Property}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkConfiguredTableAnalysisRulePolicyProperty ::
+  ConfiguredTableAnalysisRulePolicyV1Property
+  -> ConfiguredTableAnalysisRulePolicyProperty
+mkConfiguredTableAnalysisRulePolicyProperty v1
+  = ConfiguredTableAnalysisRulePolicyProperty
+      {haddock_workaround_ = (), v1 = v1}
+instance ToResourceProperties ConfiguredTableAnalysisRulePolicyProperty where
+  toResourceProperties ConfiguredTableAnalysisRulePolicyProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::ConfiguredTable.ConfiguredTableAnalysisRulePolicy",
+         supportsTags = Prelude.False, properties = ["V1" JSON..= v1]}
+instance JSON.ToJSON ConfiguredTableAnalysisRulePolicyProperty where
+  toJSON ConfiguredTableAnalysisRulePolicyProperty {..}
+    = JSON.object ["V1" JSON..= v1]
+instance Property "V1" ConfiguredTableAnalysisRulePolicyProperty where
+  type PropertyType "V1" ConfiguredTableAnalysisRulePolicyProperty = ConfiguredTableAnalysisRulePolicyV1Property
+  set newValue ConfiguredTableAnalysisRulePolicyProperty {..}
+    = ConfiguredTableAnalysisRulePolicyProperty {v1 = newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/ConfiguredTable/ConfiguredTableAnalysisRulePolicyProperty.hs-boot b/gen/Stratosphere/CleanRooms/ConfiguredTable/ConfiguredTableAnalysisRulePolicyProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/ConfiguredTable/ConfiguredTableAnalysisRulePolicyProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.ConfiguredTable.ConfiguredTableAnalysisRulePolicyProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ConfiguredTableAnalysisRulePolicyProperty :: Prelude.Type
+instance ToResourceProperties ConfiguredTableAnalysisRulePolicyProperty
+instance Prelude.Eq ConfiguredTableAnalysisRulePolicyProperty
+instance Prelude.Show ConfiguredTableAnalysisRulePolicyProperty
+instance JSON.ToJSON ConfiguredTableAnalysisRulePolicyProperty
diff --git a/gen/Stratosphere/CleanRooms/ConfiguredTable/ConfiguredTableAnalysisRulePolicyV1Property.hs b/gen/Stratosphere/CleanRooms/ConfiguredTable/ConfiguredTableAnalysisRulePolicyV1Property.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/ConfiguredTable/ConfiguredTableAnalysisRulePolicyV1Property.hs
@@ -0,0 +1,61 @@
+module Stratosphere.CleanRooms.ConfiguredTable.ConfiguredTableAnalysisRulePolicyV1Property (
+        module Exports, ConfiguredTableAnalysisRulePolicyV1Property(..),
+        mkConfiguredTableAnalysisRulePolicyV1Property
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CleanRooms.ConfiguredTable.AnalysisRuleAggregationProperty as Exports
+import {-# SOURCE #-} Stratosphere.CleanRooms.ConfiguredTable.AnalysisRuleCustomProperty as Exports
+import {-# SOURCE #-} Stratosphere.CleanRooms.ConfiguredTable.AnalysisRuleListProperty as Exports
+import Stratosphere.ResourceProperties
+data ConfiguredTableAnalysisRulePolicyV1Property
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-configuredtableanalysisrulepolicyv1.html>
+    ConfiguredTableAnalysisRulePolicyV1Property {haddock_workaround_ :: (),
+                                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-configuredtableanalysisrulepolicyv1.html#cfn-cleanrooms-configuredtable-configuredtableanalysisrulepolicyv1-aggregation>
+                                                 aggregation :: (Prelude.Maybe AnalysisRuleAggregationProperty),
+                                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-configuredtableanalysisrulepolicyv1.html#cfn-cleanrooms-configuredtable-configuredtableanalysisrulepolicyv1-custom>
+                                                 custom :: (Prelude.Maybe AnalysisRuleCustomProperty),
+                                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-configuredtableanalysisrulepolicyv1.html#cfn-cleanrooms-configuredtable-configuredtableanalysisrulepolicyv1-list>
+                                                 list :: (Prelude.Maybe AnalysisRuleListProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkConfiguredTableAnalysisRulePolicyV1Property ::
+  ConfiguredTableAnalysisRulePolicyV1Property
+mkConfiguredTableAnalysisRulePolicyV1Property
+  = ConfiguredTableAnalysisRulePolicyV1Property
+      {haddock_workaround_ = (), aggregation = Prelude.Nothing,
+       custom = Prelude.Nothing, list = Prelude.Nothing}
+instance ToResourceProperties ConfiguredTableAnalysisRulePolicyV1Property where
+  toResourceProperties
+    ConfiguredTableAnalysisRulePolicyV1Property {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::ConfiguredTable.ConfiguredTableAnalysisRulePolicyV1",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Aggregation" Prelude.<$> aggregation,
+                            (JSON..=) "Custom" Prelude.<$> custom,
+                            (JSON..=) "List" Prelude.<$> list])}
+instance JSON.ToJSON ConfiguredTableAnalysisRulePolicyV1Property where
+  toJSON ConfiguredTableAnalysisRulePolicyV1Property {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Aggregation" Prelude.<$> aggregation,
+               (JSON..=) "Custom" Prelude.<$> custom,
+               (JSON..=) "List" Prelude.<$> list]))
+instance Property "Aggregation" ConfiguredTableAnalysisRulePolicyV1Property where
+  type PropertyType "Aggregation" ConfiguredTableAnalysisRulePolicyV1Property = AnalysisRuleAggregationProperty
+  set newValue ConfiguredTableAnalysisRulePolicyV1Property {..}
+    = ConfiguredTableAnalysisRulePolicyV1Property
+        {aggregation = Prelude.pure newValue, ..}
+instance Property "Custom" ConfiguredTableAnalysisRulePolicyV1Property where
+  type PropertyType "Custom" ConfiguredTableAnalysisRulePolicyV1Property = AnalysisRuleCustomProperty
+  set newValue ConfiguredTableAnalysisRulePolicyV1Property {..}
+    = ConfiguredTableAnalysisRulePolicyV1Property
+        {custom = Prelude.pure newValue, ..}
+instance Property "List" ConfiguredTableAnalysisRulePolicyV1Property where
+  type PropertyType "List" ConfiguredTableAnalysisRulePolicyV1Property = AnalysisRuleListProperty
+  set newValue ConfiguredTableAnalysisRulePolicyV1Property {..}
+    = ConfiguredTableAnalysisRulePolicyV1Property
+        {list = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/ConfiguredTable/ConfiguredTableAnalysisRulePolicyV1Property.hs-boot b/gen/Stratosphere/CleanRooms/ConfiguredTable/ConfiguredTableAnalysisRulePolicyV1Property.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/ConfiguredTable/ConfiguredTableAnalysisRulePolicyV1Property.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.ConfiguredTable.ConfiguredTableAnalysisRulePolicyV1Property where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ConfiguredTableAnalysisRulePolicyV1Property :: Prelude.Type
+instance ToResourceProperties ConfiguredTableAnalysisRulePolicyV1Property
+instance Prelude.Eq ConfiguredTableAnalysisRulePolicyV1Property
+instance Prelude.Show ConfiguredTableAnalysisRulePolicyV1Property
+instance JSON.ToJSON ConfiguredTableAnalysisRulePolicyV1Property
diff --git a/gen/Stratosphere/CleanRooms/ConfiguredTable/DifferentialPrivacyColumnProperty.hs b/gen/Stratosphere/CleanRooms/ConfiguredTable/DifferentialPrivacyColumnProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/ConfiguredTable/DifferentialPrivacyColumnProperty.hs
@@ -0,0 +1,32 @@
+module Stratosphere.CleanRooms.ConfiguredTable.DifferentialPrivacyColumnProperty (
+        DifferentialPrivacyColumnProperty(..),
+        mkDifferentialPrivacyColumnProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data DifferentialPrivacyColumnProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-differentialprivacycolumn.html>
+    DifferentialPrivacyColumnProperty {haddock_workaround_ :: (),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-differentialprivacycolumn.html#cfn-cleanrooms-configuredtable-differentialprivacycolumn-name>
+                                       name :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDifferentialPrivacyColumnProperty ::
+  Value Prelude.Text -> DifferentialPrivacyColumnProperty
+mkDifferentialPrivacyColumnProperty name
+  = DifferentialPrivacyColumnProperty
+      {haddock_workaround_ = (), name = name}
+instance ToResourceProperties DifferentialPrivacyColumnProperty where
+  toResourceProperties DifferentialPrivacyColumnProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::ConfiguredTable.DifferentialPrivacyColumn",
+         supportsTags = Prelude.False, properties = ["Name" JSON..= name]}
+instance JSON.ToJSON DifferentialPrivacyColumnProperty where
+  toJSON DifferentialPrivacyColumnProperty {..}
+    = JSON.object ["Name" JSON..= name]
+instance Property "Name" DifferentialPrivacyColumnProperty where
+  type PropertyType "Name" DifferentialPrivacyColumnProperty = Value Prelude.Text
+  set newValue DifferentialPrivacyColumnProperty {..}
+    = DifferentialPrivacyColumnProperty {name = newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/ConfiguredTable/DifferentialPrivacyColumnProperty.hs-boot b/gen/Stratosphere/CleanRooms/ConfiguredTable/DifferentialPrivacyColumnProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/ConfiguredTable/DifferentialPrivacyColumnProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.ConfiguredTable.DifferentialPrivacyColumnProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data DifferentialPrivacyColumnProperty :: Prelude.Type
+instance ToResourceProperties DifferentialPrivacyColumnProperty
+instance Prelude.Eq DifferentialPrivacyColumnProperty
+instance Prelude.Show DifferentialPrivacyColumnProperty
+instance JSON.ToJSON DifferentialPrivacyColumnProperty
diff --git a/gen/Stratosphere/CleanRooms/ConfiguredTable/DifferentialPrivacyProperty.hs b/gen/Stratosphere/CleanRooms/ConfiguredTable/DifferentialPrivacyProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/ConfiguredTable/DifferentialPrivacyProperty.hs
@@ -0,0 +1,33 @@
+module Stratosphere.CleanRooms.ConfiguredTable.DifferentialPrivacyProperty (
+        module Exports, DifferentialPrivacyProperty(..),
+        mkDifferentialPrivacyProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CleanRooms.ConfiguredTable.DifferentialPrivacyColumnProperty as Exports
+import Stratosphere.ResourceProperties
+data DifferentialPrivacyProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-differentialprivacy.html>
+    DifferentialPrivacyProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-differentialprivacy.html#cfn-cleanrooms-configuredtable-differentialprivacy-columns>
+                                 columns :: [DifferentialPrivacyColumnProperty]}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDifferentialPrivacyProperty ::
+  [DifferentialPrivacyColumnProperty] -> DifferentialPrivacyProperty
+mkDifferentialPrivacyProperty columns
+  = DifferentialPrivacyProperty
+      {haddock_workaround_ = (), columns = columns}
+instance ToResourceProperties DifferentialPrivacyProperty where
+  toResourceProperties DifferentialPrivacyProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::ConfiguredTable.DifferentialPrivacy",
+         supportsTags = Prelude.False,
+         properties = ["Columns" JSON..= columns]}
+instance JSON.ToJSON DifferentialPrivacyProperty where
+  toJSON DifferentialPrivacyProperty {..}
+    = JSON.object ["Columns" JSON..= columns]
+instance Property "Columns" DifferentialPrivacyProperty where
+  type PropertyType "Columns" DifferentialPrivacyProperty = [DifferentialPrivacyColumnProperty]
+  set newValue DifferentialPrivacyProperty {..}
+    = DifferentialPrivacyProperty {columns = newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/ConfiguredTable/DifferentialPrivacyProperty.hs-boot b/gen/Stratosphere/CleanRooms/ConfiguredTable/DifferentialPrivacyProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/ConfiguredTable/DifferentialPrivacyProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.ConfiguredTable.DifferentialPrivacyProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data DifferentialPrivacyProperty :: Prelude.Type
+instance ToResourceProperties DifferentialPrivacyProperty
+instance Prelude.Eq DifferentialPrivacyProperty
+instance Prelude.Show DifferentialPrivacyProperty
+instance JSON.ToJSON DifferentialPrivacyProperty
diff --git a/gen/Stratosphere/CleanRooms/ConfiguredTable/GlueTableReferenceProperty.hs b/gen/Stratosphere/CleanRooms/ConfiguredTable/GlueTableReferenceProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/ConfiguredTable/GlueTableReferenceProperty.hs
@@ -0,0 +1,43 @@
+module Stratosphere.CleanRooms.ConfiguredTable.GlueTableReferenceProperty (
+        GlueTableReferenceProperty(..), mkGlueTableReferenceProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data GlueTableReferenceProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-gluetablereference.html>
+    GlueTableReferenceProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-gluetablereference.html#cfn-cleanrooms-configuredtable-gluetablereference-databasename>
+                                databaseName :: (Value Prelude.Text),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-gluetablereference.html#cfn-cleanrooms-configuredtable-gluetablereference-tablename>
+                                tableName :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkGlueTableReferenceProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> GlueTableReferenceProperty
+mkGlueTableReferenceProperty databaseName tableName
+  = GlueTableReferenceProperty
+      {haddock_workaround_ = (), databaseName = databaseName,
+       tableName = tableName}
+instance ToResourceProperties GlueTableReferenceProperty where
+  toResourceProperties GlueTableReferenceProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::ConfiguredTable.GlueTableReference",
+         supportsTags = Prelude.False,
+         properties = ["DatabaseName" JSON..= databaseName,
+                       "TableName" JSON..= tableName]}
+instance JSON.ToJSON GlueTableReferenceProperty where
+  toJSON GlueTableReferenceProperty {..}
+    = JSON.object
+        ["DatabaseName" JSON..= databaseName,
+         "TableName" JSON..= tableName]
+instance Property "DatabaseName" GlueTableReferenceProperty where
+  type PropertyType "DatabaseName" GlueTableReferenceProperty = Value Prelude.Text
+  set newValue GlueTableReferenceProperty {..}
+    = GlueTableReferenceProperty {databaseName = newValue, ..}
+instance Property "TableName" GlueTableReferenceProperty where
+  type PropertyType "TableName" GlueTableReferenceProperty = Value Prelude.Text
+  set newValue GlueTableReferenceProperty {..}
+    = GlueTableReferenceProperty {tableName = newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/ConfiguredTable/GlueTableReferenceProperty.hs-boot b/gen/Stratosphere/CleanRooms/ConfiguredTable/GlueTableReferenceProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/ConfiguredTable/GlueTableReferenceProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.ConfiguredTable.GlueTableReferenceProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data GlueTableReferenceProperty :: Prelude.Type
+instance ToResourceProperties GlueTableReferenceProperty
+instance Prelude.Eq GlueTableReferenceProperty
+instance Prelude.Show GlueTableReferenceProperty
+instance JSON.ToJSON GlueTableReferenceProperty
diff --git a/gen/Stratosphere/CleanRooms/ConfiguredTable/SnowflakeTableReferenceProperty.hs b/gen/Stratosphere/CleanRooms/ConfiguredTable/SnowflakeTableReferenceProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/ConfiguredTable/SnowflakeTableReferenceProperty.hs
@@ -0,0 +1,86 @@
+module Stratosphere.CleanRooms.ConfiguredTable.SnowflakeTableReferenceProperty (
+        module Exports, SnowflakeTableReferenceProperty(..),
+        mkSnowflakeTableReferenceProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CleanRooms.ConfiguredTable.SnowflakeTableSchemaProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SnowflakeTableReferenceProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-snowflaketablereference.html>
+    SnowflakeTableReferenceProperty {haddock_workaround_ :: (),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-snowflaketablereference.html#cfn-cleanrooms-configuredtable-snowflaketablereference-accountidentifier>
+                                     accountIdentifier :: (Value Prelude.Text),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-snowflaketablereference.html#cfn-cleanrooms-configuredtable-snowflaketablereference-databasename>
+                                     databaseName :: (Value Prelude.Text),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-snowflaketablereference.html#cfn-cleanrooms-configuredtable-snowflaketablereference-schemaname>
+                                     schemaName :: (Value Prelude.Text),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-snowflaketablereference.html#cfn-cleanrooms-configuredtable-snowflaketablereference-secretarn>
+                                     secretArn :: (Value Prelude.Text),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-snowflaketablereference.html#cfn-cleanrooms-configuredtable-snowflaketablereference-tablename>
+                                     tableName :: (Value Prelude.Text),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-snowflaketablereference.html#cfn-cleanrooms-configuredtable-snowflaketablereference-tableschema>
+                                     tableSchema :: SnowflakeTableSchemaProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSnowflakeTableReferenceProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Text
+        -> Value Prelude.Text
+           -> Value Prelude.Text
+              -> SnowflakeTableSchemaProperty -> SnowflakeTableReferenceProperty
+mkSnowflakeTableReferenceProperty
+  accountIdentifier
+  databaseName
+  schemaName
+  secretArn
+  tableName
+  tableSchema
+  = SnowflakeTableReferenceProperty
+      {haddock_workaround_ = (), accountIdentifier = accountIdentifier,
+       databaseName = databaseName, schemaName = schemaName,
+       secretArn = secretArn, tableName = tableName,
+       tableSchema = tableSchema}
+instance ToResourceProperties SnowflakeTableReferenceProperty where
+  toResourceProperties SnowflakeTableReferenceProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::ConfiguredTable.SnowflakeTableReference",
+         supportsTags = Prelude.False,
+         properties = ["AccountIdentifier" JSON..= accountIdentifier,
+                       "DatabaseName" JSON..= databaseName,
+                       "SchemaName" JSON..= schemaName, "SecretArn" JSON..= secretArn,
+                       "TableName" JSON..= tableName, "TableSchema" JSON..= tableSchema]}
+instance JSON.ToJSON SnowflakeTableReferenceProperty where
+  toJSON SnowflakeTableReferenceProperty {..}
+    = JSON.object
+        ["AccountIdentifier" JSON..= accountIdentifier,
+         "DatabaseName" JSON..= databaseName,
+         "SchemaName" JSON..= schemaName, "SecretArn" JSON..= secretArn,
+         "TableName" JSON..= tableName, "TableSchema" JSON..= tableSchema]
+instance Property "AccountIdentifier" SnowflakeTableReferenceProperty where
+  type PropertyType "AccountIdentifier" SnowflakeTableReferenceProperty = Value Prelude.Text
+  set newValue SnowflakeTableReferenceProperty {..}
+    = SnowflakeTableReferenceProperty
+        {accountIdentifier = newValue, ..}
+instance Property "DatabaseName" SnowflakeTableReferenceProperty where
+  type PropertyType "DatabaseName" SnowflakeTableReferenceProperty = Value Prelude.Text
+  set newValue SnowflakeTableReferenceProperty {..}
+    = SnowflakeTableReferenceProperty {databaseName = newValue, ..}
+instance Property "SchemaName" SnowflakeTableReferenceProperty where
+  type PropertyType "SchemaName" SnowflakeTableReferenceProperty = Value Prelude.Text
+  set newValue SnowflakeTableReferenceProperty {..}
+    = SnowflakeTableReferenceProperty {schemaName = newValue, ..}
+instance Property "SecretArn" SnowflakeTableReferenceProperty where
+  type PropertyType "SecretArn" SnowflakeTableReferenceProperty = Value Prelude.Text
+  set newValue SnowflakeTableReferenceProperty {..}
+    = SnowflakeTableReferenceProperty {secretArn = newValue, ..}
+instance Property "TableName" SnowflakeTableReferenceProperty where
+  type PropertyType "TableName" SnowflakeTableReferenceProperty = Value Prelude.Text
+  set newValue SnowflakeTableReferenceProperty {..}
+    = SnowflakeTableReferenceProperty {tableName = newValue, ..}
+instance Property "TableSchema" SnowflakeTableReferenceProperty where
+  type PropertyType "TableSchema" SnowflakeTableReferenceProperty = SnowflakeTableSchemaProperty
+  set newValue SnowflakeTableReferenceProperty {..}
+    = SnowflakeTableReferenceProperty {tableSchema = newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/ConfiguredTable/SnowflakeTableReferenceProperty.hs-boot b/gen/Stratosphere/CleanRooms/ConfiguredTable/SnowflakeTableReferenceProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/ConfiguredTable/SnowflakeTableReferenceProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.ConfiguredTable.SnowflakeTableReferenceProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SnowflakeTableReferenceProperty :: Prelude.Type
+instance ToResourceProperties SnowflakeTableReferenceProperty
+instance Prelude.Eq SnowflakeTableReferenceProperty
+instance Prelude.Show SnowflakeTableReferenceProperty
+instance JSON.ToJSON SnowflakeTableReferenceProperty
diff --git a/gen/Stratosphere/CleanRooms/ConfiguredTable/SnowflakeTableSchemaProperty.hs b/gen/Stratosphere/CleanRooms/ConfiguredTable/SnowflakeTableSchemaProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/ConfiguredTable/SnowflakeTableSchemaProperty.hs
@@ -0,0 +1,31 @@
+module Stratosphere.CleanRooms.ConfiguredTable.SnowflakeTableSchemaProperty (
+        module Exports, SnowflakeTableSchemaProperty(..),
+        mkSnowflakeTableSchemaProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CleanRooms.ConfiguredTable.SnowflakeTableSchemaV1Property as Exports
+import Stratosphere.ResourceProperties
+data SnowflakeTableSchemaProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-snowflaketableschema.html>
+    SnowflakeTableSchemaProperty {haddock_workaround_ :: (),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-snowflaketableschema.html#cfn-cleanrooms-configuredtable-snowflaketableschema-v1>
+                                  v1 :: [SnowflakeTableSchemaV1Property]}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSnowflakeTableSchemaProperty ::
+  [SnowflakeTableSchemaV1Property] -> SnowflakeTableSchemaProperty
+mkSnowflakeTableSchemaProperty v1
+  = SnowflakeTableSchemaProperty {haddock_workaround_ = (), v1 = v1}
+instance ToResourceProperties SnowflakeTableSchemaProperty where
+  toResourceProperties SnowflakeTableSchemaProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::ConfiguredTable.SnowflakeTableSchema",
+         supportsTags = Prelude.False, properties = ["V1" JSON..= v1]}
+instance JSON.ToJSON SnowflakeTableSchemaProperty where
+  toJSON SnowflakeTableSchemaProperty {..}
+    = JSON.object ["V1" JSON..= v1]
+instance Property "V1" SnowflakeTableSchemaProperty where
+  type PropertyType "V1" SnowflakeTableSchemaProperty = [SnowflakeTableSchemaV1Property]
+  set newValue SnowflakeTableSchemaProperty {..}
+    = SnowflakeTableSchemaProperty {v1 = newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/ConfiguredTable/SnowflakeTableSchemaProperty.hs-boot b/gen/Stratosphere/CleanRooms/ConfiguredTable/SnowflakeTableSchemaProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/ConfiguredTable/SnowflakeTableSchemaProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.ConfiguredTable.SnowflakeTableSchemaProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SnowflakeTableSchemaProperty :: Prelude.Type
+instance ToResourceProperties SnowflakeTableSchemaProperty
+instance Prelude.Eq SnowflakeTableSchemaProperty
+instance Prelude.Show SnowflakeTableSchemaProperty
+instance JSON.ToJSON SnowflakeTableSchemaProperty
diff --git a/gen/Stratosphere/CleanRooms/ConfiguredTable/SnowflakeTableSchemaV1Property.hs b/gen/Stratosphere/CleanRooms/ConfiguredTable/SnowflakeTableSchemaV1Property.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/ConfiguredTable/SnowflakeTableSchemaV1Property.hs
@@ -0,0 +1,43 @@
+module Stratosphere.CleanRooms.ConfiguredTable.SnowflakeTableSchemaV1Property (
+        SnowflakeTableSchemaV1Property(..),
+        mkSnowflakeTableSchemaV1Property
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SnowflakeTableSchemaV1Property
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-snowflaketableschemav1.html>
+    SnowflakeTableSchemaV1Property {haddock_workaround_ :: (),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-snowflaketableschemav1.html#cfn-cleanrooms-configuredtable-snowflaketableschemav1-columnname>
+                                    columnName :: (Value Prelude.Text),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-snowflaketableschemav1.html#cfn-cleanrooms-configuredtable-snowflaketableschemav1-columntype>
+                                    columnType :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSnowflakeTableSchemaV1Property ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> SnowflakeTableSchemaV1Property
+mkSnowflakeTableSchemaV1Property columnName columnType
+  = SnowflakeTableSchemaV1Property
+      {haddock_workaround_ = (), columnName = columnName,
+       columnType = columnType}
+instance ToResourceProperties SnowflakeTableSchemaV1Property where
+  toResourceProperties SnowflakeTableSchemaV1Property {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::ConfiguredTable.SnowflakeTableSchemaV1",
+         supportsTags = Prelude.False,
+         properties = ["ColumnName" JSON..= columnName,
+                       "ColumnType" JSON..= columnType]}
+instance JSON.ToJSON SnowflakeTableSchemaV1Property where
+  toJSON SnowflakeTableSchemaV1Property {..}
+    = JSON.object
+        ["ColumnName" JSON..= columnName, "ColumnType" JSON..= columnType]
+instance Property "ColumnName" SnowflakeTableSchemaV1Property where
+  type PropertyType "ColumnName" SnowflakeTableSchemaV1Property = Value Prelude.Text
+  set newValue SnowflakeTableSchemaV1Property {..}
+    = SnowflakeTableSchemaV1Property {columnName = newValue, ..}
+instance Property "ColumnType" SnowflakeTableSchemaV1Property where
+  type PropertyType "ColumnType" SnowflakeTableSchemaV1Property = Value Prelude.Text
+  set newValue SnowflakeTableSchemaV1Property {..}
+    = SnowflakeTableSchemaV1Property {columnType = newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/ConfiguredTable/SnowflakeTableSchemaV1Property.hs-boot b/gen/Stratosphere/CleanRooms/ConfiguredTable/SnowflakeTableSchemaV1Property.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/ConfiguredTable/SnowflakeTableSchemaV1Property.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.ConfiguredTable.SnowflakeTableSchemaV1Property where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SnowflakeTableSchemaV1Property :: Prelude.Type
+instance ToResourceProperties SnowflakeTableSchemaV1Property
+instance Prelude.Eq SnowflakeTableSchemaV1Property
+instance Prelude.Show SnowflakeTableSchemaV1Property
+instance JSON.ToJSON SnowflakeTableSchemaV1Property
diff --git a/gen/Stratosphere/CleanRooms/ConfiguredTable/TableReferenceProperty.hs b/gen/Stratosphere/CleanRooms/ConfiguredTable/TableReferenceProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/ConfiguredTable/TableReferenceProperty.hs
@@ -0,0 +1,56 @@
+module Stratosphere.CleanRooms.ConfiguredTable.TableReferenceProperty (
+        module Exports, TableReferenceProperty(..),
+        mkTableReferenceProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CleanRooms.ConfiguredTable.AthenaTableReferenceProperty as Exports
+import {-# SOURCE #-} Stratosphere.CleanRooms.ConfiguredTable.GlueTableReferenceProperty as Exports
+import {-# SOURCE #-} Stratosphere.CleanRooms.ConfiguredTable.SnowflakeTableReferenceProperty as Exports
+import Stratosphere.ResourceProperties
+data TableReferenceProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-tablereference.html>
+    TableReferenceProperty {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-tablereference.html#cfn-cleanrooms-configuredtable-tablereference-athena>
+                            athena :: (Prelude.Maybe AthenaTableReferenceProperty),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-tablereference.html#cfn-cleanrooms-configuredtable-tablereference-glue>
+                            glue :: (Prelude.Maybe GlueTableReferenceProperty),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-tablereference.html#cfn-cleanrooms-configuredtable-tablereference-snowflake>
+                            snowflake :: (Prelude.Maybe SnowflakeTableReferenceProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTableReferenceProperty :: TableReferenceProperty
+mkTableReferenceProperty
+  = TableReferenceProperty
+      {haddock_workaround_ = (), athena = Prelude.Nothing,
+       glue = Prelude.Nothing, snowflake = Prelude.Nothing}
+instance ToResourceProperties TableReferenceProperty where
+  toResourceProperties TableReferenceProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::ConfiguredTable.TableReference",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Athena" Prelude.<$> athena,
+                            (JSON..=) "Glue" Prelude.<$> glue,
+                            (JSON..=) "Snowflake" Prelude.<$> snowflake])}
+instance JSON.ToJSON TableReferenceProperty where
+  toJSON TableReferenceProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Athena" Prelude.<$> athena,
+               (JSON..=) "Glue" Prelude.<$> glue,
+               (JSON..=) "Snowflake" Prelude.<$> snowflake]))
+instance Property "Athena" TableReferenceProperty where
+  type PropertyType "Athena" TableReferenceProperty = AthenaTableReferenceProperty
+  set newValue TableReferenceProperty {..}
+    = TableReferenceProperty {athena = Prelude.pure newValue, ..}
+instance Property "Glue" TableReferenceProperty where
+  type PropertyType "Glue" TableReferenceProperty = GlueTableReferenceProperty
+  set newValue TableReferenceProperty {..}
+    = TableReferenceProperty {glue = Prelude.pure newValue, ..}
+instance Property "Snowflake" TableReferenceProperty where
+  type PropertyType "Snowflake" TableReferenceProperty = SnowflakeTableReferenceProperty
+  set newValue TableReferenceProperty {..}
+    = TableReferenceProperty {snowflake = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/ConfiguredTable/TableReferenceProperty.hs-boot b/gen/Stratosphere/CleanRooms/ConfiguredTable/TableReferenceProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/ConfiguredTable/TableReferenceProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.ConfiguredTable.TableReferenceProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TableReferenceProperty :: Prelude.Type
+instance ToResourceProperties TableReferenceProperty
+instance Prelude.Eq TableReferenceProperty
+instance Prelude.Show TableReferenceProperty
+instance JSON.ToJSON TableReferenceProperty
diff --git a/gen/Stratosphere/CleanRooms/ConfiguredTableAssociation.hs b/gen/Stratosphere/CleanRooms/ConfiguredTableAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/ConfiguredTableAssociation.hs
@@ -0,0 +1,106 @@
+module Stratosphere.CleanRooms.ConfiguredTableAssociation (
+        module Exports, ConfiguredTableAssociation(..),
+        mkConfiguredTableAssociation
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CleanRooms.ConfiguredTableAssociation.ConfiguredTableAssociationAnalysisRuleProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data ConfiguredTableAssociation
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-configuredtableassociation.html>
+    ConfiguredTableAssociation {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-configuredtableassociation.html#cfn-cleanrooms-configuredtableassociation-configuredtableassociationanalysisrules>
+                                configuredTableAssociationAnalysisRules :: (Prelude.Maybe [ConfiguredTableAssociationAnalysisRuleProperty]),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-configuredtableassociation.html#cfn-cleanrooms-configuredtableassociation-configuredtableidentifier>
+                                configuredTableIdentifier :: (Value Prelude.Text),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-configuredtableassociation.html#cfn-cleanrooms-configuredtableassociation-description>
+                                description :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-configuredtableassociation.html#cfn-cleanrooms-configuredtableassociation-membershipidentifier>
+                                membershipIdentifier :: (Value Prelude.Text),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-configuredtableassociation.html#cfn-cleanrooms-configuredtableassociation-name>
+                                name :: (Value Prelude.Text),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-configuredtableassociation.html#cfn-cleanrooms-configuredtableassociation-rolearn>
+                                roleArn :: (Value Prelude.Text),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-configuredtableassociation.html#cfn-cleanrooms-configuredtableassociation-tags>
+                                tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkConfiguredTableAssociation ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Text
+        -> Value Prelude.Text -> ConfiguredTableAssociation
+mkConfiguredTableAssociation
+  configuredTableIdentifier
+  membershipIdentifier
+  name
+  roleArn
+  = ConfiguredTableAssociation
+      {haddock_workaround_ = (),
+       configuredTableIdentifier = configuredTableIdentifier,
+       membershipIdentifier = membershipIdentifier, name = name,
+       roleArn = roleArn,
+       configuredTableAssociationAnalysisRules = Prelude.Nothing,
+       description = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties ConfiguredTableAssociation where
+  toResourceProperties ConfiguredTableAssociation {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::ConfiguredTableAssociation",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["ConfiguredTableIdentifier" JSON..= configuredTableIdentifier,
+                            "MembershipIdentifier" JSON..= membershipIdentifier,
+                            "Name" JSON..= name, "RoleArn" JSON..= roleArn]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ConfiguredTableAssociationAnalysisRules"
+                                 Prelude.<$> configuredTableAssociationAnalysisRules,
+                               (JSON..=) "Description" Prelude.<$> description,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON ConfiguredTableAssociation where
+  toJSON ConfiguredTableAssociation {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["ConfiguredTableIdentifier" JSON..= configuredTableIdentifier,
+               "MembershipIdentifier" JSON..= membershipIdentifier,
+               "Name" JSON..= name, "RoleArn" JSON..= roleArn]
+              (Prelude.catMaybes
+                 [(JSON..=) "ConfiguredTableAssociationAnalysisRules"
+                    Prelude.<$> configuredTableAssociationAnalysisRules,
+                  (JSON..=) "Description" Prelude.<$> description,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "ConfiguredTableAssociationAnalysisRules" ConfiguredTableAssociation where
+  type PropertyType "ConfiguredTableAssociationAnalysisRules" ConfiguredTableAssociation = [ConfiguredTableAssociationAnalysisRuleProperty]
+  set newValue ConfiguredTableAssociation {..}
+    = ConfiguredTableAssociation
+        {configuredTableAssociationAnalysisRules = Prelude.pure newValue,
+         ..}
+instance Property "ConfiguredTableIdentifier" ConfiguredTableAssociation where
+  type PropertyType "ConfiguredTableIdentifier" ConfiguredTableAssociation = Value Prelude.Text
+  set newValue ConfiguredTableAssociation {..}
+    = ConfiguredTableAssociation
+        {configuredTableIdentifier = newValue, ..}
+instance Property "Description" ConfiguredTableAssociation where
+  type PropertyType "Description" ConfiguredTableAssociation = Value Prelude.Text
+  set newValue ConfiguredTableAssociation {..}
+    = ConfiguredTableAssociation
+        {description = Prelude.pure newValue, ..}
+instance Property "MembershipIdentifier" ConfiguredTableAssociation where
+  type PropertyType "MembershipIdentifier" ConfiguredTableAssociation = Value Prelude.Text
+  set newValue ConfiguredTableAssociation {..}
+    = ConfiguredTableAssociation {membershipIdentifier = newValue, ..}
+instance Property "Name" ConfiguredTableAssociation where
+  type PropertyType "Name" ConfiguredTableAssociation = Value Prelude.Text
+  set newValue ConfiguredTableAssociation {..}
+    = ConfiguredTableAssociation {name = newValue, ..}
+instance Property "RoleArn" ConfiguredTableAssociation where
+  type PropertyType "RoleArn" ConfiguredTableAssociation = Value Prelude.Text
+  set newValue ConfiguredTableAssociation {..}
+    = ConfiguredTableAssociation {roleArn = newValue, ..}
+instance Property "Tags" ConfiguredTableAssociation where
+  type PropertyType "Tags" ConfiguredTableAssociation = [Tag]
+  set newValue ConfiguredTableAssociation {..}
+    = ConfiguredTableAssociation {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/ConfiguredTableAssociation/ConfiguredTableAssociationAnalysisRuleAggregationProperty.hs b/gen/Stratosphere/CleanRooms/ConfiguredTableAssociation/ConfiguredTableAssociationAnalysisRuleAggregationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/ConfiguredTableAssociation/ConfiguredTableAssociationAnalysisRuleAggregationProperty.hs
@@ -0,0 +1,60 @@
+module Stratosphere.CleanRooms.ConfiguredTableAssociation.ConfiguredTableAssociationAnalysisRuleAggregationProperty (
+        ConfiguredTableAssociationAnalysisRuleAggregationProperty(..),
+        mkConfiguredTableAssociationAnalysisRuleAggregationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ConfiguredTableAssociationAnalysisRuleAggregationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtableassociation-configuredtableassociationanalysisruleaggregation.html>
+    ConfiguredTableAssociationAnalysisRuleAggregationProperty {haddock_workaround_ :: (),
+                                                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtableassociation-configuredtableassociationanalysisruleaggregation.html#cfn-cleanrooms-configuredtableassociation-configuredtableassociationanalysisruleaggregation-allowedadditionalanalyses>
+                                                               allowedAdditionalAnalyses :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtableassociation-configuredtableassociationanalysisruleaggregation.html#cfn-cleanrooms-configuredtableassociation-configuredtableassociationanalysisruleaggregation-allowedresultreceivers>
+                                                               allowedResultReceivers :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkConfiguredTableAssociationAnalysisRuleAggregationProperty ::
+  ConfiguredTableAssociationAnalysisRuleAggregationProperty
+mkConfiguredTableAssociationAnalysisRuleAggregationProperty
+  = ConfiguredTableAssociationAnalysisRuleAggregationProperty
+      {haddock_workaround_ = (),
+       allowedAdditionalAnalyses = Prelude.Nothing,
+       allowedResultReceivers = Prelude.Nothing}
+instance ToResourceProperties ConfiguredTableAssociationAnalysisRuleAggregationProperty where
+  toResourceProperties
+    ConfiguredTableAssociationAnalysisRuleAggregationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::ConfiguredTableAssociation.ConfiguredTableAssociationAnalysisRuleAggregation",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AllowedAdditionalAnalyses"
+                              Prelude.<$> allowedAdditionalAnalyses,
+                            (JSON..=) "AllowedResultReceivers"
+                              Prelude.<$> allowedResultReceivers])}
+instance JSON.ToJSON ConfiguredTableAssociationAnalysisRuleAggregationProperty where
+  toJSON
+    ConfiguredTableAssociationAnalysisRuleAggregationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AllowedAdditionalAnalyses"
+                 Prelude.<$> allowedAdditionalAnalyses,
+               (JSON..=) "AllowedResultReceivers"
+                 Prelude.<$> allowedResultReceivers]))
+instance Property "AllowedAdditionalAnalyses" ConfiguredTableAssociationAnalysisRuleAggregationProperty where
+  type PropertyType "AllowedAdditionalAnalyses" ConfiguredTableAssociationAnalysisRuleAggregationProperty = ValueList Prelude.Text
+  set
+    newValue
+    ConfiguredTableAssociationAnalysisRuleAggregationProperty {..}
+    = ConfiguredTableAssociationAnalysisRuleAggregationProperty
+        {allowedAdditionalAnalyses = Prelude.pure newValue, ..}
+instance Property "AllowedResultReceivers" ConfiguredTableAssociationAnalysisRuleAggregationProperty where
+  type PropertyType "AllowedResultReceivers" ConfiguredTableAssociationAnalysisRuleAggregationProperty = ValueList Prelude.Text
+  set
+    newValue
+    ConfiguredTableAssociationAnalysisRuleAggregationProperty {..}
+    = ConfiguredTableAssociationAnalysisRuleAggregationProperty
+        {allowedResultReceivers = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/ConfiguredTableAssociation/ConfiguredTableAssociationAnalysisRuleAggregationProperty.hs-boot b/gen/Stratosphere/CleanRooms/ConfiguredTableAssociation/ConfiguredTableAssociationAnalysisRuleAggregationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/ConfiguredTableAssociation/ConfiguredTableAssociationAnalysisRuleAggregationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.ConfiguredTableAssociation.ConfiguredTableAssociationAnalysisRuleAggregationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ConfiguredTableAssociationAnalysisRuleAggregationProperty :: Prelude.Type
+instance ToResourceProperties ConfiguredTableAssociationAnalysisRuleAggregationProperty
+instance Prelude.Eq ConfiguredTableAssociationAnalysisRuleAggregationProperty
+instance Prelude.Show ConfiguredTableAssociationAnalysisRuleAggregationProperty
+instance JSON.ToJSON ConfiguredTableAssociationAnalysisRuleAggregationProperty
diff --git a/gen/Stratosphere/CleanRooms/ConfiguredTableAssociation/ConfiguredTableAssociationAnalysisRuleCustomProperty.hs b/gen/Stratosphere/CleanRooms/ConfiguredTableAssociation/ConfiguredTableAssociationAnalysisRuleCustomProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/ConfiguredTableAssociation/ConfiguredTableAssociationAnalysisRuleCustomProperty.hs
@@ -0,0 +1,59 @@
+module Stratosphere.CleanRooms.ConfiguredTableAssociation.ConfiguredTableAssociationAnalysisRuleCustomProperty (
+        ConfiguredTableAssociationAnalysisRuleCustomProperty(..),
+        mkConfiguredTableAssociationAnalysisRuleCustomProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ConfiguredTableAssociationAnalysisRuleCustomProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtableassociation-configuredtableassociationanalysisrulecustom.html>
+    ConfiguredTableAssociationAnalysisRuleCustomProperty {haddock_workaround_ :: (),
+                                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtableassociation-configuredtableassociationanalysisrulecustom.html#cfn-cleanrooms-configuredtableassociation-configuredtableassociationanalysisrulecustom-allowedadditionalanalyses>
+                                                          allowedAdditionalAnalyses :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtableassociation-configuredtableassociationanalysisrulecustom.html#cfn-cleanrooms-configuredtableassociation-configuredtableassociationanalysisrulecustom-allowedresultreceivers>
+                                                          allowedResultReceivers :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkConfiguredTableAssociationAnalysisRuleCustomProperty ::
+  ConfiguredTableAssociationAnalysisRuleCustomProperty
+mkConfiguredTableAssociationAnalysisRuleCustomProperty
+  = ConfiguredTableAssociationAnalysisRuleCustomProperty
+      {haddock_workaround_ = (),
+       allowedAdditionalAnalyses = Prelude.Nothing,
+       allowedResultReceivers = Prelude.Nothing}
+instance ToResourceProperties ConfiguredTableAssociationAnalysisRuleCustomProperty where
+  toResourceProperties
+    ConfiguredTableAssociationAnalysisRuleCustomProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::ConfiguredTableAssociation.ConfiguredTableAssociationAnalysisRuleCustom",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AllowedAdditionalAnalyses"
+                              Prelude.<$> allowedAdditionalAnalyses,
+                            (JSON..=) "AllowedResultReceivers"
+                              Prelude.<$> allowedResultReceivers])}
+instance JSON.ToJSON ConfiguredTableAssociationAnalysisRuleCustomProperty where
+  toJSON ConfiguredTableAssociationAnalysisRuleCustomProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AllowedAdditionalAnalyses"
+                 Prelude.<$> allowedAdditionalAnalyses,
+               (JSON..=) "AllowedResultReceivers"
+                 Prelude.<$> allowedResultReceivers]))
+instance Property "AllowedAdditionalAnalyses" ConfiguredTableAssociationAnalysisRuleCustomProperty where
+  type PropertyType "AllowedAdditionalAnalyses" ConfiguredTableAssociationAnalysisRuleCustomProperty = ValueList Prelude.Text
+  set
+    newValue
+    ConfiguredTableAssociationAnalysisRuleCustomProperty {..}
+    = ConfiguredTableAssociationAnalysisRuleCustomProperty
+        {allowedAdditionalAnalyses = Prelude.pure newValue, ..}
+instance Property "AllowedResultReceivers" ConfiguredTableAssociationAnalysisRuleCustomProperty where
+  type PropertyType "AllowedResultReceivers" ConfiguredTableAssociationAnalysisRuleCustomProperty = ValueList Prelude.Text
+  set
+    newValue
+    ConfiguredTableAssociationAnalysisRuleCustomProperty {..}
+    = ConfiguredTableAssociationAnalysisRuleCustomProperty
+        {allowedResultReceivers = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/ConfiguredTableAssociation/ConfiguredTableAssociationAnalysisRuleCustomProperty.hs-boot b/gen/Stratosphere/CleanRooms/ConfiguredTableAssociation/ConfiguredTableAssociationAnalysisRuleCustomProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/ConfiguredTableAssociation/ConfiguredTableAssociationAnalysisRuleCustomProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.ConfiguredTableAssociation.ConfiguredTableAssociationAnalysisRuleCustomProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ConfiguredTableAssociationAnalysisRuleCustomProperty :: Prelude.Type
+instance ToResourceProperties ConfiguredTableAssociationAnalysisRuleCustomProperty
+instance Prelude.Eq ConfiguredTableAssociationAnalysisRuleCustomProperty
+instance Prelude.Show ConfiguredTableAssociationAnalysisRuleCustomProperty
+instance JSON.ToJSON ConfiguredTableAssociationAnalysisRuleCustomProperty
diff --git a/gen/Stratosphere/CleanRooms/ConfiguredTableAssociation/ConfiguredTableAssociationAnalysisRuleListProperty.hs b/gen/Stratosphere/CleanRooms/ConfiguredTableAssociation/ConfiguredTableAssociationAnalysisRuleListProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/ConfiguredTableAssociation/ConfiguredTableAssociationAnalysisRuleListProperty.hs
@@ -0,0 +1,59 @@
+module Stratosphere.CleanRooms.ConfiguredTableAssociation.ConfiguredTableAssociationAnalysisRuleListProperty (
+        ConfiguredTableAssociationAnalysisRuleListProperty(..),
+        mkConfiguredTableAssociationAnalysisRuleListProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ConfiguredTableAssociationAnalysisRuleListProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtableassociation-configuredtableassociationanalysisrulelist.html>
+    ConfiguredTableAssociationAnalysisRuleListProperty {haddock_workaround_ :: (),
+                                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtableassociation-configuredtableassociationanalysisrulelist.html#cfn-cleanrooms-configuredtableassociation-configuredtableassociationanalysisrulelist-allowedadditionalanalyses>
+                                                        allowedAdditionalAnalyses :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtableassociation-configuredtableassociationanalysisrulelist.html#cfn-cleanrooms-configuredtableassociation-configuredtableassociationanalysisrulelist-allowedresultreceivers>
+                                                        allowedResultReceivers :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkConfiguredTableAssociationAnalysisRuleListProperty ::
+  ConfiguredTableAssociationAnalysisRuleListProperty
+mkConfiguredTableAssociationAnalysisRuleListProperty
+  = ConfiguredTableAssociationAnalysisRuleListProperty
+      {haddock_workaround_ = (),
+       allowedAdditionalAnalyses = Prelude.Nothing,
+       allowedResultReceivers = Prelude.Nothing}
+instance ToResourceProperties ConfiguredTableAssociationAnalysisRuleListProperty where
+  toResourceProperties
+    ConfiguredTableAssociationAnalysisRuleListProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::ConfiguredTableAssociation.ConfiguredTableAssociationAnalysisRuleList",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AllowedAdditionalAnalyses"
+                              Prelude.<$> allowedAdditionalAnalyses,
+                            (JSON..=) "AllowedResultReceivers"
+                              Prelude.<$> allowedResultReceivers])}
+instance JSON.ToJSON ConfiguredTableAssociationAnalysisRuleListProperty where
+  toJSON ConfiguredTableAssociationAnalysisRuleListProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AllowedAdditionalAnalyses"
+                 Prelude.<$> allowedAdditionalAnalyses,
+               (JSON..=) "AllowedResultReceivers"
+                 Prelude.<$> allowedResultReceivers]))
+instance Property "AllowedAdditionalAnalyses" ConfiguredTableAssociationAnalysisRuleListProperty where
+  type PropertyType "AllowedAdditionalAnalyses" ConfiguredTableAssociationAnalysisRuleListProperty = ValueList Prelude.Text
+  set
+    newValue
+    ConfiguredTableAssociationAnalysisRuleListProperty {..}
+    = ConfiguredTableAssociationAnalysisRuleListProperty
+        {allowedAdditionalAnalyses = Prelude.pure newValue, ..}
+instance Property "AllowedResultReceivers" ConfiguredTableAssociationAnalysisRuleListProperty where
+  type PropertyType "AllowedResultReceivers" ConfiguredTableAssociationAnalysisRuleListProperty = ValueList Prelude.Text
+  set
+    newValue
+    ConfiguredTableAssociationAnalysisRuleListProperty {..}
+    = ConfiguredTableAssociationAnalysisRuleListProperty
+        {allowedResultReceivers = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/ConfiguredTableAssociation/ConfiguredTableAssociationAnalysisRuleListProperty.hs-boot b/gen/Stratosphere/CleanRooms/ConfiguredTableAssociation/ConfiguredTableAssociationAnalysisRuleListProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/ConfiguredTableAssociation/ConfiguredTableAssociationAnalysisRuleListProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.ConfiguredTableAssociation.ConfiguredTableAssociationAnalysisRuleListProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ConfiguredTableAssociationAnalysisRuleListProperty :: Prelude.Type
+instance ToResourceProperties ConfiguredTableAssociationAnalysisRuleListProperty
+instance Prelude.Eq ConfiguredTableAssociationAnalysisRuleListProperty
+instance Prelude.Show ConfiguredTableAssociationAnalysisRuleListProperty
+instance JSON.ToJSON ConfiguredTableAssociationAnalysisRuleListProperty
diff --git a/gen/Stratosphere/CleanRooms/ConfiguredTableAssociation/ConfiguredTableAssociationAnalysisRulePolicyProperty.hs b/gen/Stratosphere/CleanRooms/ConfiguredTableAssociation/ConfiguredTableAssociationAnalysisRulePolicyProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/ConfiguredTableAssociation/ConfiguredTableAssociationAnalysisRulePolicyProperty.hs
@@ -0,0 +1,38 @@
+module Stratosphere.CleanRooms.ConfiguredTableAssociation.ConfiguredTableAssociationAnalysisRulePolicyProperty (
+        module Exports,
+        ConfiguredTableAssociationAnalysisRulePolicyProperty(..),
+        mkConfiguredTableAssociationAnalysisRulePolicyProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CleanRooms.ConfiguredTableAssociation.ConfiguredTableAssociationAnalysisRulePolicyV1Property as Exports
+import Stratosphere.ResourceProperties
+data ConfiguredTableAssociationAnalysisRulePolicyProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtableassociation-configuredtableassociationanalysisrulepolicy.html>
+    ConfiguredTableAssociationAnalysisRulePolicyProperty {haddock_workaround_ :: (),
+                                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtableassociation-configuredtableassociationanalysisrulepolicy.html#cfn-cleanrooms-configuredtableassociation-configuredtableassociationanalysisrulepolicy-v1>
+                                                          v1 :: ConfiguredTableAssociationAnalysisRulePolicyV1Property}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkConfiguredTableAssociationAnalysisRulePolicyProperty ::
+  ConfiguredTableAssociationAnalysisRulePolicyV1Property
+  -> ConfiguredTableAssociationAnalysisRulePolicyProperty
+mkConfiguredTableAssociationAnalysisRulePolicyProperty v1
+  = ConfiguredTableAssociationAnalysisRulePolicyProperty
+      {haddock_workaround_ = (), v1 = v1}
+instance ToResourceProperties ConfiguredTableAssociationAnalysisRulePolicyProperty where
+  toResourceProperties
+    ConfiguredTableAssociationAnalysisRulePolicyProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::ConfiguredTableAssociation.ConfiguredTableAssociationAnalysisRulePolicy",
+         supportsTags = Prelude.False, properties = ["V1" JSON..= v1]}
+instance JSON.ToJSON ConfiguredTableAssociationAnalysisRulePolicyProperty where
+  toJSON ConfiguredTableAssociationAnalysisRulePolicyProperty {..}
+    = JSON.object ["V1" JSON..= v1]
+instance Property "V1" ConfiguredTableAssociationAnalysisRulePolicyProperty where
+  type PropertyType "V1" ConfiguredTableAssociationAnalysisRulePolicyProperty = ConfiguredTableAssociationAnalysisRulePolicyV1Property
+  set
+    newValue
+    ConfiguredTableAssociationAnalysisRulePolicyProperty {..}
+    = ConfiguredTableAssociationAnalysisRulePolicyProperty
+        {v1 = newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/ConfiguredTableAssociation/ConfiguredTableAssociationAnalysisRulePolicyProperty.hs-boot b/gen/Stratosphere/CleanRooms/ConfiguredTableAssociation/ConfiguredTableAssociationAnalysisRulePolicyProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/ConfiguredTableAssociation/ConfiguredTableAssociationAnalysisRulePolicyProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.ConfiguredTableAssociation.ConfiguredTableAssociationAnalysisRulePolicyProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ConfiguredTableAssociationAnalysisRulePolicyProperty :: Prelude.Type
+instance ToResourceProperties ConfiguredTableAssociationAnalysisRulePolicyProperty
+instance Prelude.Eq ConfiguredTableAssociationAnalysisRulePolicyProperty
+instance Prelude.Show ConfiguredTableAssociationAnalysisRulePolicyProperty
+instance JSON.ToJSON ConfiguredTableAssociationAnalysisRulePolicyProperty
diff --git a/gen/Stratosphere/CleanRooms/ConfiguredTableAssociation/ConfiguredTableAssociationAnalysisRulePolicyV1Property.hs b/gen/Stratosphere/CleanRooms/ConfiguredTableAssociation/ConfiguredTableAssociationAnalysisRulePolicyV1Property.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/ConfiguredTableAssociation/ConfiguredTableAssociationAnalysisRulePolicyV1Property.hs
@@ -0,0 +1,68 @@
+module Stratosphere.CleanRooms.ConfiguredTableAssociation.ConfiguredTableAssociationAnalysisRulePolicyV1Property (
+        module Exports,
+        ConfiguredTableAssociationAnalysisRulePolicyV1Property(..),
+        mkConfiguredTableAssociationAnalysisRulePolicyV1Property
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CleanRooms.ConfiguredTableAssociation.ConfiguredTableAssociationAnalysisRuleAggregationProperty as Exports
+import {-# SOURCE #-} Stratosphere.CleanRooms.ConfiguredTableAssociation.ConfiguredTableAssociationAnalysisRuleCustomProperty as Exports
+import {-# SOURCE #-} Stratosphere.CleanRooms.ConfiguredTableAssociation.ConfiguredTableAssociationAnalysisRuleListProperty as Exports
+import Stratosphere.ResourceProperties
+data ConfiguredTableAssociationAnalysisRulePolicyV1Property
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtableassociation-configuredtableassociationanalysisrulepolicyv1.html>
+    ConfiguredTableAssociationAnalysisRulePolicyV1Property {haddock_workaround_ :: (),
+                                                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtableassociation-configuredtableassociationanalysisrulepolicyv1.html#cfn-cleanrooms-configuredtableassociation-configuredtableassociationanalysisrulepolicyv1-aggregation>
+                                                            aggregation :: (Prelude.Maybe ConfiguredTableAssociationAnalysisRuleAggregationProperty),
+                                                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtableassociation-configuredtableassociationanalysisrulepolicyv1.html#cfn-cleanrooms-configuredtableassociation-configuredtableassociationanalysisrulepolicyv1-custom>
+                                                            custom :: (Prelude.Maybe ConfiguredTableAssociationAnalysisRuleCustomProperty),
+                                                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtableassociation-configuredtableassociationanalysisrulepolicyv1.html#cfn-cleanrooms-configuredtableassociation-configuredtableassociationanalysisrulepolicyv1-list>
+                                                            list :: (Prelude.Maybe ConfiguredTableAssociationAnalysisRuleListProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkConfiguredTableAssociationAnalysisRulePolicyV1Property ::
+  ConfiguredTableAssociationAnalysisRulePolicyV1Property
+mkConfiguredTableAssociationAnalysisRulePolicyV1Property
+  = ConfiguredTableAssociationAnalysisRulePolicyV1Property
+      {haddock_workaround_ = (), aggregation = Prelude.Nothing,
+       custom = Prelude.Nothing, list = Prelude.Nothing}
+instance ToResourceProperties ConfiguredTableAssociationAnalysisRulePolicyV1Property where
+  toResourceProperties
+    ConfiguredTableAssociationAnalysisRulePolicyV1Property {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::ConfiguredTableAssociation.ConfiguredTableAssociationAnalysisRulePolicyV1",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Aggregation" Prelude.<$> aggregation,
+                            (JSON..=) "Custom" Prelude.<$> custom,
+                            (JSON..=) "List" Prelude.<$> list])}
+instance JSON.ToJSON ConfiguredTableAssociationAnalysisRulePolicyV1Property where
+  toJSON ConfiguredTableAssociationAnalysisRulePolicyV1Property {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Aggregation" Prelude.<$> aggregation,
+               (JSON..=) "Custom" Prelude.<$> custom,
+               (JSON..=) "List" Prelude.<$> list]))
+instance Property "Aggregation" ConfiguredTableAssociationAnalysisRulePolicyV1Property where
+  type PropertyType "Aggregation" ConfiguredTableAssociationAnalysisRulePolicyV1Property = ConfiguredTableAssociationAnalysisRuleAggregationProperty
+  set
+    newValue
+    ConfiguredTableAssociationAnalysisRulePolicyV1Property {..}
+    = ConfiguredTableAssociationAnalysisRulePolicyV1Property
+        {aggregation = Prelude.pure newValue, ..}
+instance Property "Custom" ConfiguredTableAssociationAnalysisRulePolicyV1Property where
+  type PropertyType "Custom" ConfiguredTableAssociationAnalysisRulePolicyV1Property = ConfiguredTableAssociationAnalysisRuleCustomProperty
+  set
+    newValue
+    ConfiguredTableAssociationAnalysisRulePolicyV1Property {..}
+    = ConfiguredTableAssociationAnalysisRulePolicyV1Property
+        {custom = Prelude.pure newValue, ..}
+instance Property "List" ConfiguredTableAssociationAnalysisRulePolicyV1Property where
+  type PropertyType "List" ConfiguredTableAssociationAnalysisRulePolicyV1Property = ConfiguredTableAssociationAnalysisRuleListProperty
+  set
+    newValue
+    ConfiguredTableAssociationAnalysisRulePolicyV1Property {..}
+    = ConfiguredTableAssociationAnalysisRulePolicyV1Property
+        {list = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/ConfiguredTableAssociation/ConfiguredTableAssociationAnalysisRulePolicyV1Property.hs-boot b/gen/Stratosphere/CleanRooms/ConfiguredTableAssociation/ConfiguredTableAssociationAnalysisRulePolicyV1Property.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/ConfiguredTableAssociation/ConfiguredTableAssociationAnalysisRulePolicyV1Property.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.ConfiguredTableAssociation.ConfiguredTableAssociationAnalysisRulePolicyV1Property where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ConfiguredTableAssociationAnalysisRulePolicyV1Property :: Prelude.Type
+instance ToResourceProperties ConfiguredTableAssociationAnalysisRulePolicyV1Property
+instance Prelude.Eq ConfiguredTableAssociationAnalysisRulePolicyV1Property
+instance Prelude.Show ConfiguredTableAssociationAnalysisRulePolicyV1Property
+instance JSON.ToJSON ConfiguredTableAssociationAnalysisRulePolicyV1Property
diff --git a/gen/Stratosphere/CleanRooms/ConfiguredTableAssociation/ConfiguredTableAssociationAnalysisRuleProperty.hs b/gen/Stratosphere/CleanRooms/ConfiguredTableAssociation/ConfiguredTableAssociationAnalysisRuleProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/ConfiguredTableAssociation/ConfiguredTableAssociationAnalysisRuleProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.CleanRooms.ConfiguredTableAssociation.ConfiguredTableAssociationAnalysisRuleProperty (
+        module Exports, ConfiguredTableAssociationAnalysisRuleProperty(..),
+        mkConfiguredTableAssociationAnalysisRuleProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CleanRooms.ConfiguredTableAssociation.ConfiguredTableAssociationAnalysisRulePolicyProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ConfiguredTableAssociationAnalysisRuleProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtableassociation-configuredtableassociationanalysisrule.html>
+    ConfiguredTableAssociationAnalysisRuleProperty {haddock_workaround_ :: (),
+                                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtableassociation-configuredtableassociationanalysisrule.html#cfn-cleanrooms-configuredtableassociation-configuredtableassociationanalysisrule-policy>
+                                                    policy :: ConfiguredTableAssociationAnalysisRulePolicyProperty,
+                                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtableassociation-configuredtableassociationanalysisrule.html#cfn-cleanrooms-configuredtableassociation-configuredtableassociationanalysisrule-type>
+                                                    type' :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkConfiguredTableAssociationAnalysisRuleProperty ::
+  ConfiguredTableAssociationAnalysisRulePolicyProperty
+  -> Value Prelude.Text
+     -> ConfiguredTableAssociationAnalysisRuleProperty
+mkConfiguredTableAssociationAnalysisRuleProperty policy type'
+  = ConfiguredTableAssociationAnalysisRuleProperty
+      {haddock_workaround_ = (), policy = policy, type' = type'}
+instance ToResourceProperties ConfiguredTableAssociationAnalysisRuleProperty where
+  toResourceProperties
+    ConfiguredTableAssociationAnalysisRuleProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::ConfiguredTableAssociation.ConfiguredTableAssociationAnalysisRule",
+         supportsTags = Prelude.False,
+         properties = ["Policy" JSON..= policy, "Type" JSON..= type']}
+instance JSON.ToJSON ConfiguredTableAssociationAnalysisRuleProperty where
+  toJSON ConfiguredTableAssociationAnalysisRuleProperty {..}
+    = JSON.object ["Policy" JSON..= policy, "Type" JSON..= type']
+instance Property "Policy" ConfiguredTableAssociationAnalysisRuleProperty where
+  type PropertyType "Policy" ConfiguredTableAssociationAnalysisRuleProperty = ConfiguredTableAssociationAnalysisRulePolicyProperty
+  set newValue ConfiguredTableAssociationAnalysisRuleProperty {..}
+    = ConfiguredTableAssociationAnalysisRuleProperty
+        {policy = newValue, ..}
+instance Property "Type" ConfiguredTableAssociationAnalysisRuleProperty where
+  type PropertyType "Type" ConfiguredTableAssociationAnalysisRuleProperty = Value Prelude.Text
+  set newValue ConfiguredTableAssociationAnalysisRuleProperty {..}
+    = ConfiguredTableAssociationAnalysisRuleProperty
+        {type' = newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/ConfiguredTableAssociation/ConfiguredTableAssociationAnalysisRuleProperty.hs-boot b/gen/Stratosphere/CleanRooms/ConfiguredTableAssociation/ConfiguredTableAssociationAnalysisRuleProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/ConfiguredTableAssociation/ConfiguredTableAssociationAnalysisRuleProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.ConfiguredTableAssociation.ConfiguredTableAssociationAnalysisRuleProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ConfiguredTableAssociationAnalysisRuleProperty :: Prelude.Type
+instance ToResourceProperties ConfiguredTableAssociationAnalysisRuleProperty
+instance Prelude.Eq ConfiguredTableAssociationAnalysisRuleProperty
+instance Prelude.Show ConfiguredTableAssociationAnalysisRuleProperty
+instance JSON.ToJSON ConfiguredTableAssociationAnalysisRuleProperty
diff --git a/gen/Stratosphere/CleanRooms/IdMappingTable.hs b/gen/Stratosphere/CleanRooms/IdMappingTable.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/IdMappingTable.hs
@@ -0,0 +1,86 @@
+module Stratosphere.CleanRooms.IdMappingTable (
+        module Exports, IdMappingTable(..), mkIdMappingTable
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CleanRooms.IdMappingTable.IdMappingTableInputReferenceConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data IdMappingTable
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-idmappingtable.html>
+    IdMappingTable {haddock_workaround_ :: (),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-idmappingtable.html#cfn-cleanrooms-idmappingtable-description>
+                    description :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-idmappingtable.html#cfn-cleanrooms-idmappingtable-inputreferenceconfig>
+                    inputReferenceConfig :: IdMappingTableInputReferenceConfigProperty,
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-idmappingtable.html#cfn-cleanrooms-idmappingtable-kmskeyarn>
+                    kmsKeyArn :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-idmappingtable.html#cfn-cleanrooms-idmappingtable-membershipidentifier>
+                    membershipIdentifier :: (Value Prelude.Text),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-idmappingtable.html#cfn-cleanrooms-idmappingtable-name>
+                    name :: (Value Prelude.Text),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-idmappingtable.html#cfn-cleanrooms-idmappingtable-tags>
+                    tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkIdMappingTable ::
+  IdMappingTableInputReferenceConfigProperty
+  -> Value Prelude.Text -> Value Prelude.Text -> IdMappingTable
+mkIdMappingTable inputReferenceConfig membershipIdentifier name
+  = IdMappingTable
+      {haddock_workaround_ = (),
+       inputReferenceConfig = inputReferenceConfig,
+       membershipIdentifier = membershipIdentifier, name = name,
+       description = Prelude.Nothing, kmsKeyArn = Prelude.Nothing,
+       tags = Prelude.Nothing}
+instance ToResourceProperties IdMappingTable where
+  toResourceProperties IdMappingTable {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::IdMappingTable",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["InputReferenceConfig" JSON..= inputReferenceConfig,
+                            "MembershipIdentifier" JSON..= membershipIdentifier,
+                            "Name" JSON..= name]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Description" Prelude.<$> description,
+                               (JSON..=) "KmsKeyArn" Prelude.<$> kmsKeyArn,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON IdMappingTable where
+  toJSON IdMappingTable {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["InputReferenceConfig" JSON..= inputReferenceConfig,
+               "MembershipIdentifier" JSON..= membershipIdentifier,
+               "Name" JSON..= name]
+              (Prelude.catMaybes
+                 [(JSON..=) "Description" Prelude.<$> description,
+                  (JSON..=) "KmsKeyArn" Prelude.<$> kmsKeyArn,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "Description" IdMappingTable where
+  type PropertyType "Description" IdMappingTable = Value Prelude.Text
+  set newValue IdMappingTable {..}
+    = IdMappingTable {description = Prelude.pure newValue, ..}
+instance Property "InputReferenceConfig" IdMappingTable where
+  type PropertyType "InputReferenceConfig" IdMappingTable = IdMappingTableInputReferenceConfigProperty
+  set newValue IdMappingTable {..}
+    = IdMappingTable {inputReferenceConfig = newValue, ..}
+instance Property "KmsKeyArn" IdMappingTable where
+  type PropertyType "KmsKeyArn" IdMappingTable = Value Prelude.Text
+  set newValue IdMappingTable {..}
+    = IdMappingTable {kmsKeyArn = Prelude.pure newValue, ..}
+instance Property "MembershipIdentifier" IdMappingTable where
+  type PropertyType "MembershipIdentifier" IdMappingTable = Value Prelude.Text
+  set newValue IdMappingTable {..}
+    = IdMappingTable {membershipIdentifier = newValue, ..}
+instance Property "Name" IdMappingTable where
+  type PropertyType "Name" IdMappingTable = Value Prelude.Text
+  set newValue IdMappingTable {..}
+    = IdMappingTable {name = newValue, ..}
+instance Property "Tags" IdMappingTable where
+  type PropertyType "Tags" IdMappingTable = [Tag]
+  set newValue IdMappingTable {..}
+    = IdMappingTable {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/IdMappingTable/IdMappingTableInputReferenceConfigProperty.hs b/gen/Stratosphere/CleanRooms/IdMappingTable/IdMappingTableInputReferenceConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/IdMappingTable/IdMappingTableInputReferenceConfigProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.CleanRooms.IdMappingTable.IdMappingTableInputReferenceConfigProperty (
+        IdMappingTableInputReferenceConfigProperty(..),
+        mkIdMappingTableInputReferenceConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data IdMappingTableInputReferenceConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-idmappingtable-idmappingtableinputreferenceconfig.html>
+    IdMappingTableInputReferenceConfigProperty {haddock_workaround_ :: (),
+                                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-idmappingtable-idmappingtableinputreferenceconfig.html#cfn-cleanrooms-idmappingtable-idmappingtableinputreferenceconfig-inputreferencearn>
+                                                inputReferenceArn :: (Value Prelude.Text),
+                                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-idmappingtable-idmappingtableinputreferenceconfig.html#cfn-cleanrooms-idmappingtable-idmappingtableinputreferenceconfig-manageresourcepolicies>
+                                                manageResourcePolicies :: (Value Prelude.Bool)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkIdMappingTableInputReferenceConfigProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Bool -> IdMappingTableInputReferenceConfigProperty
+mkIdMappingTableInputReferenceConfigProperty
+  inputReferenceArn
+  manageResourcePolicies
+  = IdMappingTableInputReferenceConfigProperty
+      {haddock_workaround_ = (), inputReferenceArn = inputReferenceArn,
+       manageResourcePolicies = manageResourcePolicies}
+instance ToResourceProperties IdMappingTableInputReferenceConfigProperty where
+  toResourceProperties
+    IdMappingTableInputReferenceConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::IdMappingTable.IdMappingTableInputReferenceConfig",
+         supportsTags = Prelude.False,
+         properties = ["InputReferenceArn" JSON..= inputReferenceArn,
+                       "ManageResourcePolicies" JSON..= manageResourcePolicies]}
+instance JSON.ToJSON IdMappingTableInputReferenceConfigProperty where
+  toJSON IdMappingTableInputReferenceConfigProperty {..}
+    = JSON.object
+        ["InputReferenceArn" JSON..= inputReferenceArn,
+         "ManageResourcePolicies" JSON..= manageResourcePolicies]
+instance Property "InputReferenceArn" IdMappingTableInputReferenceConfigProperty where
+  type PropertyType "InputReferenceArn" IdMappingTableInputReferenceConfigProperty = Value Prelude.Text
+  set newValue IdMappingTableInputReferenceConfigProperty {..}
+    = IdMappingTableInputReferenceConfigProperty
+        {inputReferenceArn = newValue, ..}
+instance Property "ManageResourcePolicies" IdMappingTableInputReferenceConfigProperty where
+  type PropertyType "ManageResourcePolicies" IdMappingTableInputReferenceConfigProperty = Value Prelude.Bool
+  set newValue IdMappingTableInputReferenceConfigProperty {..}
+    = IdMappingTableInputReferenceConfigProperty
+        {manageResourcePolicies = newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/IdMappingTable/IdMappingTableInputReferenceConfigProperty.hs-boot b/gen/Stratosphere/CleanRooms/IdMappingTable/IdMappingTableInputReferenceConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/IdMappingTable/IdMappingTableInputReferenceConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.IdMappingTable.IdMappingTableInputReferenceConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data IdMappingTableInputReferenceConfigProperty :: Prelude.Type
+instance ToResourceProperties IdMappingTableInputReferenceConfigProperty
+instance Prelude.Eq IdMappingTableInputReferenceConfigProperty
+instance Prelude.Show IdMappingTableInputReferenceConfigProperty
+instance JSON.ToJSON IdMappingTableInputReferenceConfigProperty
diff --git a/gen/Stratosphere/CleanRooms/IdMappingTable/IdMappingTableInputReferencePropertiesProperty.hs b/gen/Stratosphere/CleanRooms/IdMappingTable/IdMappingTableInputReferencePropertiesProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/IdMappingTable/IdMappingTableInputReferencePropertiesProperty.hs
@@ -0,0 +1,40 @@
+module Stratosphere.CleanRooms.IdMappingTable.IdMappingTableInputReferencePropertiesProperty (
+        module Exports, IdMappingTableInputReferencePropertiesProperty(..),
+        mkIdMappingTableInputReferencePropertiesProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CleanRooms.IdMappingTable.IdMappingTableInputSourceProperty as Exports
+import Stratosphere.ResourceProperties
+data IdMappingTableInputReferencePropertiesProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-idmappingtable-idmappingtableinputreferenceproperties.html>
+    IdMappingTableInputReferencePropertiesProperty {haddock_workaround_ :: (),
+                                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-idmappingtable-idmappingtableinputreferenceproperties.html#cfn-cleanrooms-idmappingtable-idmappingtableinputreferenceproperties-idmappingtableinputsource>
+                                                    idMappingTableInputSource :: [IdMappingTableInputSourceProperty]}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkIdMappingTableInputReferencePropertiesProperty ::
+  [IdMappingTableInputSourceProperty]
+  -> IdMappingTableInputReferencePropertiesProperty
+mkIdMappingTableInputReferencePropertiesProperty
+  idMappingTableInputSource
+  = IdMappingTableInputReferencePropertiesProperty
+      {haddock_workaround_ = (),
+       idMappingTableInputSource = idMappingTableInputSource}
+instance ToResourceProperties IdMappingTableInputReferencePropertiesProperty where
+  toResourceProperties
+    IdMappingTableInputReferencePropertiesProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::IdMappingTable.IdMappingTableInputReferenceProperties",
+         supportsTags = Prelude.False,
+         properties = ["IdMappingTableInputSource"
+                         JSON..= idMappingTableInputSource]}
+instance JSON.ToJSON IdMappingTableInputReferencePropertiesProperty where
+  toJSON IdMappingTableInputReferencePropertiesProperty {..}
+    = JSON.object
+        ["IdMappingTableInputSource" JSON..= idMappingTableInputSource]
+instance Property "IdMappingTableInputSource" IdMappingTableInputReferencePropertiesProperty where
+  type PropertyType "IdMappingTableInputSource" IdMappingTableInputReferencePropertiesProperty = [IdMappingTableInputSourceProperty]
+  set newValue IdMappingTableInputReferencePropertiesProperty {..}
+    = IdMappingTableInputReferencePropertiesProperty
+        {idMappingTableInputSource = newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/IdMappingTable/IdMappingTableInputReferencePropertiesProperty.hs-boot b/gen/Stratosphere/CleanRooms/IdMappingTable/IdMappingTableInputReferencePropertiesProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/IdMappingTable/IdMappingTableInputReferencePropertiesProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.IdMappingTable.IdMappingTableInputReferencePropertiesProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data IdMappingTableInputReferencePropertiesProperty :: Prelude.Type
+instance ToResourceProperties IdMappingTableInputReferencePropertiesProperty
+instance Prelude.Eq IdMappingTableInputReferencePropertiesProperty
+instance Prelude.Show IdMappingTableInputReferencePropertiesProperty
+instance JSON.ToJSON IdMappingTableInputReferencePropertiesProperty
diff --git a/gen/Stratosphere/CleanRooms/IdMappingTable/IdMappingTableInputSourceProperty.hs b/gen/Stratosphere/CleanRooms/IdMappingTable/IdMappingTableInputSourceProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/IdMappingTable/IdMappingTableInputSourceProperty.hs
@@ -0,0 +1,46 @@
+module Stratosphere.CleanRooms.IdMappingTable.IdMappingTableInputSourceProperty (
+        IdMappingTableInputSourceProperty(..),
+        mkIdMappingTableInputSourceProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data IdMappingTableInputSourceProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-idmappingtable-idmappingtableinputsource.html>
+    IdMappingTableInputSourceProperty {haddock_workaround_ :: (),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-idmappingtable-idmappingtableinputsource.html#cfn-cleanrooms-idmappingtable-idmappingtableinputsource-idnamespaceassociationid>
+                                       idNamespaceAssociationId :: (Value Prelude.Text),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-idmappingtable-idmappingtableinputsource.html#cfn-cleanrooms-idmappingtable-idmappingtableinputsource-type>
+                                       type' :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkIdMappingTableInputSourceProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> IdMappingTableInputSourceProperty
+mkIdMappingTableInputSourceProperty idNamespaceAssociationId type'
+  = IdMappingTableInputSourceProperty
+      {haddock_workaround_ = (),
+       idNamespaceAssociationId = idNamespaceAssociationId, type' = type'}
+instance ToResourceProperties IdMappingTableInputSourceProperty where
+  toResourceProperties IdMappingTableInputSourceProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::IdMappingTable.IdMappingTableInputSource",
+         supportsTags = Prelude.False,
+         properties = ["IdNamespaceAssociationId"
+                         JSON..= idNamespaceAssociationId,
+                       "Type" JSON..= type']}
+instance JSON.ToJSON IdMappingTableInputSourceProperty where
+  toJSON IdMappingTableInputSourceProperty {..}
+    = JSON.object
+        ["IdNamespaceAssociationId" JSON..= idNamespaceAssociationId,
+         "Type" JSON..= type']
+instance Property "IdNamespaceAssociationId" IdMappingTableInputSourceProperty where
+  type PropertyType "IdNamespaceAssociationId" IdMappingTableInputSourceProperty = Value Prelude.Text
+  set newValue IdMappingTableInputSourceProperty {..}
+    = IdMappingTableInputSourceProperty
+        {idNamespaceAssociationId = newValue, ..}
+instance Property "Type" IdMappingTableInputSourceProperty where
+  type PropertyType "Type" IdMappingTableInputSourceProperty = Value Prelude.Text
+  set newValue IdMappingTableInputSourceProperty {..}
+    = IdMappingTableInputSourceProperty {type' = newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/IdMappingTable/IdMappingTableInputSourceProperty.hs-boot b/gen/Stratosphere/CleanRooms/IdMappingTable/IdMappingTableInputSourceProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/IdMappingTable/IdMappingTableInputSourceProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.IdMappingTable.IdMappingTableInputSourceProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data IdMappingTableInputSourceProperty :: Prelude.Type
+instance ToResourceProperties IdMappingTableInputSourceProperty
+instance Prelude.Eq IdMappingTableInputSourceProperty
+instance Prelude.Show IdMappingTableInputSourceProperty
+instance JSON.ToJSON IdMappingTableInputSourceProperty
diff --git a/gen/Stratosphere/CleanRooms/IdNamespaceAssociation.hs b/gen/Stratosphere/CleanRooms/IdNamespaceAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/IdNamespaceAssociation.hs
@@ -0,0 +1,93 @@
+module Stratosphere.CleanRooms.IdNamespaceAssociation (
+        module Exports, IdNamespaceAssociation(..),
+        mkIdNamespaceAssociation
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CleanRooms.IdNamespaceAssociation.IdMappingConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.CleanRooms.IdNamespaceAssociation.IdNamespaceAssociationInputReferenceConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data IdNamespaceAssociation
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-idnamespaceassociation.html>
+    IdNamespaceAssociation {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-idnamespaceassociation.html#cfn-cleanrooms-idnamespaceassociation-description>
+                            description :: (Prelude.Maybe (Value Prelude.Text)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-idnamespaceassociation.html#cfn-cleanrooms-idnamespaceassociation-idmappingconfig>
+                            idMappingConfig :: (Prelude.Maybe IdMappingConfigProperty),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-idnamespaceassociation.html#cfn-cleanrooms-idnamespaceassociation-inputreferenceconfig>
+                            inputReferenceConfig :: IdNamespaceAssociationInputReferenceConfigProperty,
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-idnamespaceassociation.html#cfn-cleanrooms-idnamespaceassociation-membershipidentifier>
+                            membershipIdentifier :: (Value Prelude.Text),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-idnamespaceassociation.html#cfn-cleanrooms-idnamespaceassociation-name>
+                            name :: (Value Prelude.Text),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-idnamespaceassociation.html#cfn-cleanrooms-idnamespaceassociation-tags>
+                            tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkIdNamespaceAssociation ::
+  IdNamespaceAssociationInputReferenceConfigProperty
+  -> Value Prelude.Text
+     -> Value Prelude.Text -> IdNamespaceAssociation
+mkIdNamespaceAssociation
+  inputReferenceConfig
+  membershipIdentifier
+  name
+  = IdNamespaceAssociation
+      {haddock_workaround_ = (),
+       inputReferenceConfig = inputReferenceConfig,
+       membershipIdentifier = membershipIdentifier, name = name,
+       description = Prelude.Nothing, idMappingConfig = Prelude.Nothing,
+       tags = Prelude.Nothing}
+instance ToResourceProperties IdNamespaceAssociation where
+  toResourceProperties IdNamespaceAssociation {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::IdNamespaceAssociation",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["InputReferenceConfig" JSON..= inputReferenceConfig,
+                            "MembershipIdentifier" JSON..= membershipIdentifier,
+                            "Name" JSON..= name]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Description" Prelude.<$> description,
+                               (JSON..=) "IdMappingConfig" Prelude.<$> idMappingConfig,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON IdNamespaceAssociation where
+  toJSON IdNamespaceAssociation {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["InputReferenceConfig" JSON..= inputReferenceConfig,
+               "MembershipIdentifier" JSON..= membershipIdentifier,
+               "Name" JSON..= name]
+              (Prelude.catMaybes
+                 [(JSON..=) "Description" Prelude.<$> description,
+                  (JSON..=) "IdMappingConfig" Prelude.<$> idMappingConfig,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "Description" IdNamespaceAssociation where
+  type PropertyType "Description" IdNamespaceAssociation = Value Prelude.Text
+  set newValue IdNamespaceAssociation {..}
+    = IdNamespaceAssociation {description = Prelude.pure newValue, ..}
+instance Property "IdMappingConfig" IdNamespaceAssociation where
+  type PropertyType "IdMappingConfig" IdNamespaceAssociation = IdMappingConfigProperty
+  set newValue IdNamespaceAssociation {..}
+    = IdNamespaceAssociation
+        {idMappingConfig = Prelude.pure newValue, ..}
+instance Property "InputReferenceConfig" IdNamespaceAssociation where
+  type PropertyType "InputReferenceConfig" IdNamespaceAssociation = IdNamespaceAssociationInputReferenceConfigProperty
+  set newValue IdNamespaceAssociation {..}
+    = IdNamespaceAssociation {inputReferenceConfig = newValue, ..}
+instance Property "MembershipIdentifier" IdNamespaceAssociation where
+  type PropertyType "MembershipIdentifier" IdNamespaceAssociation = Value Prelude.Text
+  set newValue IdNamespaceAssociation {..}
+    = IdNamespaceAssociation {membershipIdentifier = newValue, ..}
+instance Property "Name" IdNamespaceAssociation where
+  type PropertyType "Name" IdNamespaceAssociation = Value Prelude.Text
+  set newValue IdNamespaceAssociation {..}
+    = IdNamespaceAssociation {name = newValue, ..}
+instance Property "Tags" IdNamespaceAssociation where
+  type PropertyType "Tags" IdNamespaceAssociation = [Tag]
+  set newValue IdNamespaceAssociation {..}
+    = IdNamespaceAssociation {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/IdNamespaceAssociation/IdMappingConfigProperty.hs b/gen/Stratosphere/CleanRooms/IdNamespaceAssociation/IdMappingConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/IdNamespaceAssociation/IdMappingConfigProperty.hs
@@ -0,0 +1,36 @@
+module Stratosphere.CleanRooms.IdNamespaceAssociation.IdMappingConfigProperty (
+        IdMappingConfigProperty(..), mkIdMappingConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data IdMappingConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-idnamespaceassociation-idmappingconfig.html>
+    IdMappingConfigProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-idnamespaceassociation-idmappingconfig.html#cfn-cleanrooms-idnamespaceassociation-idmappingconfig-allowuseasdimensioncolumn>
+                             allowUseAsDimensionColumn :: (Value Prelude.Bool)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkIdMappingConfigProperty ::
+  Value Prelude.Bool -> IdMappingConfigProperty
+mkIdMappingConfigProperty allowUseAsDimensionColumn
+  = IdMappingConfigProperty
+      {haddock_workaround_ = (),
+       allowUseAsDimensionColumn = allowUseAsDimensionColumn}
+instance ToResourceProperties IdMappingConfigProperty where
+  toResourceProperties IdMappingConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::IdNamespaceAssociation.IdMappingConfig",
+         supportsTags = Prelude.False,
+         properties = ["AllowUseAsDimensionColumn"
+                         JSON..= allowUseAsDimensionColumn]}
+instance JSON.ToJSON IdMappingConfigProperty where
+  toJSON IdMappingConfigProperty {..}
+    = JSON.object
+        ["AllowUseAsDimensionColumn" JSON..= allowUseAsDimensionColumn]
+instance Property "AllowUseAsDimensionColumn" IdMappingConfigProperty where
+  type PropertyType "AllowUseAsDimensionColumn" IdMappingConfigProperty = Value Prelude.Bool
+  set newValue IdMappingConfigProperty {..}
+    = IdMappingConfigProperty
+        {allowUseAsDimensionColumn = newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/IdNamespaceAssociation/IdMappingConfigProperty.hs-boot b/gen/Stratosphere/CleanRooms/IdNamespaceAssociation/IdMappingConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/IdNamespaceAssociation/IdMappingConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.IdNamespaceAssociation.IdMappingConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data IdMappingConfigProperty :: Prelude.Type
+instance ToResourceProperties IdMappingConfigProperty
+instance Prelude.Eq IdMappingConfigProperty
+instance Prelude.Show IdMappingConfigProperty
+instance JSON.ToJSON IdMappingConfigProperty
diff --git a/gen/Stratosphere/CleanRooms/IdNamespaceAssociation/IdNamespaceAssociationInputReferenceConfigProperty.hs b/gen/Stratosphere/CleanRooms/IdNamespaceAssociation/IdNamespaceAssociationInputReferenceConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/IdNamespaceAssociation/IdNamespaceAssociationInputReferenceConfigProperty.hs
@@ -0,0 +1,54 @@
+module Stratosphere.CleanRooms.IdNamespaceAssociation.IdNamespaceAssociationInputReferenceConfigProperty (
+        IdNamespaceAssociationInputReferenceConfigProperty(..),
+        mkIdNamespaceAssociationInputReferenceConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data IdNamespaceAssociationInputReferenceConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-idnamespaceassociation-idnamespaceassociationinputreferenceconfig.html>
+    IdNamespaceAssociationInputReferenceConfigProperty {haddock_workaround_ :: (),
+                                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-idnamespaceassociation-idnamespaceassociationinputreferenceconfig.html#cfn-cleanrooms-idnamespaceassociation-idnamespaceassociationinputreferenceconfig-inputreferencearn>
+                                                        inputReferenceArn :: (Value Prelude.Text),
+                                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-idnamespaceassociation-idnamespaceassociationinputreferenceconfig.html#cfn-cleanrooms-idnamespaceassociation-idnamespaceassociationinputreferenceconfig-manageresourcepolicies>
+                                                        manageResourcePolicies :: (Value Prelude.Bool)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkIdNamespaceAssociationInputReferenceConfigProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Bool
+     -> IdNamespaceAssociationInputReferenceConfigProperty
+mkIdNamespaceAssociationInputReferenceConfigProperty
+  inputReferenceArn
+  manageResourcePolicies
+  = IdNamespaceAssociationInputReferenceConfigProperty
+      {haddock_workaround_ = (), inputReferenceArn = inputReferenceArn,
+       manageResourcePolicies = manageResourcePolicies}
+instance ToResourceProperties IdNamespaceAssociationInputReferenceConfigProperty where
+  toResourceProperties
+    IdNamespaceAssociationInputReferenceConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::IdNamespaceAssociation.IdNamespaceAssociationInputReferenceConfig",
+         supportsTags = Prelude.False,
+         properties = ["InputReferenceArn" JSON..= inputReferenceArn,
+                       "ManageResourcePolicies" JSON..= manageResourcePolicies]}
+instance JSON.ToJSON IdNamespaceAssociationInputReferenceConfigProperty where
+  toJSON IdNamespaceAssociationInputReferenceConfigProperty {..}
+    = JSON.object
+        ["InputReferenceArn" JSON..= inputReferenceArn,
+         "ManageResourcePolicies" JSON..= manageResourcePolicies]
+instance Property "InputReferenceArn" IdNamespaceAssociationInputReferenceConfigProperty where
+  type PropertyType "InputReferenceArn" IdNamespaceAssociationInputReferenceConfigProperty = Value Prelude.Text
+  set
+    newValue
+    IdNamespaceAssociationInputReferenceConfigProperty {..}
+    = IdNamespaceAssociationInputReferenceConfigProperty
+        {inputReferenceArn = newValue, ..}
+instance Property "ManageResourcePolicies" IdNamespaceAssociationInputReferenceConfigProperty where
+  type PropertyType "ManageResourcePolicies" IdNamespaceAssociationInputReferenceConfigProperty = Value Prelude.Bool
+  set
+    newValue
+    IdNamespaceAssociationInputReferenceConfigProperty {..}
+    = IdNamespaceAssociationInputReferenceConfigProperty
+        {manageResourcePolicies = newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/IdNamespaceAssociation/IdNamespaceAssociationInputReferenceConfigProperty.hs-boot b/gen/Stratosphere/CleanRooms/IdNamespaceAssociation/IdNamespaceAssociationInputReferenceConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/IdNamespaceAssociation/IdNamespaceAssociationInputReferenceConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.IdNamespaceAssociation.IdNamespaceAssociationInputReferenceConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data IdNamespaceAssociationInputReferenceConfigProperty :: Prelude.Type
+instance ToResourceProperties IdNamespaceAssociationInputReferenceConfigProperty
+instance Prelude.Eq IdNamespaceAssociationInputReferenceConfigProperty
+instance Prelude.Show IdNamespaceAssociationInputReferenceConfigProperty
+instance JSON.ToJSON IdNamespaceAssociationInputReferenceConfigProperty
diff --git a/gen/Stratosphere/CleanRooms/IdNamespaceAssociation/IdNamespaceAssociationInputReferencePropertiesProperty.hs b/gen/Stratosphere/CleanRooms/IdNamespaceAssociation/IdNamespaceAssociationInputReferencePropertiesProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/IdNamespaceAssociation/IdNamespaceAssociationInputReferencePropertiesProperty.hs
@@ -0,0 +1,57 @@
+module Stratosphere.CleanRooms.IdNamespaceAssociation.IdNamespaceAssociationInputReferencePropertiesProperty (
+        IdNamespaceAssociationInputReferencePropertiesProperty(..),
+        mkIdNamespaceAssociationInputReferencePropertiesProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data IdNamespaceAssociationInputReferencePropertiesProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-idnamespaceassociation-idnamespaceassociationinputreferenceproperties.html>
+    IdNamespaceAssociationInputReferencePropertiesProperty {haddock_workaround_ :: (),
+                                                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-idnamespaceassociation-idnamespaceassociationinputreferenceproperties.html#cfn-cleanrooms-idnamespaceassociation-idnamespaceassociationinputreferenceproperties-idmappingworkflowssupported>
+                                                            idMappingWorkflowsSupported :: (Prelude.Maybe JSON.Object),
+                                                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-idnamespaceassociation-idnamespaceassociationinputreferenceproperties.html#cfn-cleanrooms-idnamespaceassociation-idnamespaceassociationinputreferenceproperties-idnamespacetype>
+                                                            idNamespaceType :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkIdNamespaceAssociationInputReferencePropertiesProperty ::
+  IdNamespaceAssociationInputReferencePropertiesProperty
+mkIdNamespaceAssociationInputReferencePropertiesProperty
+  = IdNamespaceAssociationInputReferencePropertiesProperty
+      {haddock_workaround_ = (),
+       idMappingWorkflowsSupported = Prelude.Nothing,
+       idNamespaceType = Prelude.Nothing}
+instance ToResourceProperties IdNamespaceAssociationInputReferencePropertiesProperty where
+  toResourceProperties
+    IdNamespaceAssociationInputReferencePropertiesProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::IdNamespaceAssociation.IdNamespaceAssociationInputReferenceProperties",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "IdMappingWorkflowsSupported"
+                              Prelude.<$> idMappingWorkflowsSupported,
+                            (JSON..=) "IdNamespaceType" Prelude.<$> idNamespaceType])}
+instance JSON.ToJSON IdNamespaceAssociationInputReferencePropertiesProperty where
+  toJSON IdNamespaceAssociationInputReferencePropertiesProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "IdMappingWorkflowsSupported"
+                 Prelude.<$> idMappingWorkflowsSupported,
+               (JSON..=) "IdNamespaceType" Prelude.<$> idNamespaceType]))
+instance Property "IdMappingWorkflowsSupported" IdNamespaceAssociationInputReferencePropertiesProperty where
+  type PropertyType "IdMappingWorkflowsSupported" IdNamespaceAssociationInputReferencePropertiesProperty = JSON.Object
+  set
+    newValue
+    IdNamespaceAssociationInputReferencePropertiesProperty {..}
+    = IdNamespaceAssociationInputReferencePropertiesProperty
+        {idMappingWorkflowsSupported = Prelude.pure newValue, ..}
+instance Property "IdNamespaceType" IdNamespaceAssociationInputReferencePropertiesProperty where
+  type PropertyType "IdNamespaceType" IdNamespaceAssociationInputReferencePropertiesProperty = Value Prelude.Text
+  set
+    newValue
+    IdNamespaceAssociationInputReferencePropertiesProperty {..}
+    = IdNamespaceAssociationInputReferencePropertiesProperty
+        {idNamespaceType = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/IdNamespaceAssociation/IdNamespaceAssociationInputReferencePropertiesProperty.hs-boot b/gen/Stratosphere/CleanRooms/IdNamespaceAssociation/IdNamespaceAssociationInputReferencePropertiesProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/IdNamespaceAssociation/IdNamespaceAssociationInputReferencePropertiesProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.IdNamespaceAssociation.IdNamespaceAssociationInputReferencePropertiesProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data IdNamespaceAssociationInputReferencePropertiesProperty :: Prelude.Type
+instance ToResourceProperties IdNamespaceAssociationInputReferencePropertiesProperty
+instance Prelude.Eq IdNamespaceAssociationInputReferencePropertiesProperty
+instance Prelude.Show IdNamespaceAssociationInputReferencePropertiesProperty
+instance JSON.ToJSON IdNamespaceAssociationInputReferencePropertiesProperty
diff --git a/gen/Stratosphere/CleanRooms/Membership.hs b/gen/Stratosphere/CleanRooms/Membership.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/Membership.hs
@@ -0,0 +1,103 @@
+module Stratosphere.CleanRooms.Membership (
+        module Exports, Membership(..), mkMembership
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CleanRooms.Membership.MembershipPaymentConfigurationProperty as Exports
+import {-# SOURCE #-} Stratosphere.CleanRooms.Membership.MembershipProtectedJobResultConfigurationProperty as Exports
+import {-# SOURCE #-} Stratosphere.CleanRooms.Membership.MembershipProtectedQueryResultConfigurationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data Membership
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-membership.html>
+    Membership {haddock_workaround_ :: (),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-membership.html#cfn-cleanrooms-membership-collaborationidentifier>
+                collaborationIdentifier :: (Value Prelude.Text),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-membership.html#cfn-cleanrooms-membership-defaultjobresultconfiguration>
+                defaultJobResultConfiguration :: (Prelude.Maybe MembershipProtectedJobResultConfigurationProperty),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-membership.html#cfn-cleanrooms-membership-defaultresultconfiguration>
+                defaultResultConfiguration :: (Prelude.Maybe MembershipProtectedQueryResultConfigurationProperty),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-membership.html#cfn-cleanrooms-membership-joblogstatus>
+                jobLogStatus :: (Prelude.Maybe (Value Prelude.Text)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-membership.html#cfn-cleanrooms-membership-paymentconfiguration>
+                paymentConfiguration :: (Prelude.Maybe MembershipPaymentConfigurationProperty),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-membership.html#cfn-cleanrooms-membership-querylogstatus>
+                queryLogStatus :: (Value Prelude.Text),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-membership.html#cfn-cleanrooms-membership-tags>
+                tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMembership ::
+  Value Prelude.Text -> Value Prelude.Text -> Membership
+mkMembership collaborationIdentifier queryLogStatus
+  = Membership
+      {haddock_workaround_ = (),
+       collaborationIdentifier = collaborationIdentifier,
+       queryLogStatus = queryLogStatus,
+       defaultJobResultConfiguration = Prelude.Nothing,
+       defaultResultConfiguration = Prelude.Nothing,
+       jobLogStatus = Prelude.Nothing,
+       paymentConfiguration = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties Membership where
+  toResourceProperties Membership {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::Membership",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["CollaborationIdentifier" JSON..= collaborationIdentifier,
+                            "QueryLogStatus" JSON..= queryLogStatus]
+                           (Prelude.catMaybes
+                              [(JSON..=) "DefaultJobResultConfiguration"
+                                 Prelude.<$> defaultJobResultConfiguration,
+                               (JSON..=) "DefaultResultConfiguration"
+                                 Prelude.<$> defaultResultConfiguration,
+                               (JSON..=) "JobLogStatus" Prelude.<$> jobLogStatus,
+                               (JSON..=) "PaymentConfiguration" Prelude.<$> paymentConfiguration,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON Membership where
+  toJSON Membership {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["CollaborationIdentifier" JSON..= collaborationIdentifier,
+               "QueryLogStatus" JSON..= queryLogStatus]
+              (Prelude.catMaybes
+                 [(JSON..=) "DefaultJobResultConfiguration"
+                    Prelude.<$> defaultJobResultConfiguration,
+                  (JSON..=) "DefaultResultConfiguration"
+                    Prelude.<$> defaultResultConfiguration,
+                  (JSON..=) "JobLogStatus" Prelude.<$> jobLogStatus,
+                  (JSON..=) "PaymentConfiguration" Prelude.<$> paymentConfiguration,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "CollaborationIdentifier" Membership where
+  type PropertyType "CollaborationIdentifier" Membership = Value Prelude.Text
+  set newValue Membership {..}
+    = Membership {collaborationIdentifier = newValue, ..}
+instance Property "DefaultJobResultConfiguration" Membership where
+  type PropertyType "DefaultJobResultConfiguration" Membership = MembershipProtectedJobResultConfigurationProperty
+  set newValue Membership {..}
+    = Membership
+        {defaultJobResultConfiguration = Prelude.pure newValue, ..}
+instance Property "DefaultResultConfiguration" Membership where
+  type PropertyType "DefaultResultConfiguration" Membership = MembershipProtectedQueryResultConfigurationProperty
+  set newValue Membership {..}
+    = Membership
+        {defaultResultConfiguration = Prelude.pure newValue, ..}
+instance Property "JobLogStatus" Membership where
+  type PropertyType "JobLogStatus" Membership = Value Prelude.Text
+  set newValue Membership {..}
+    = Membership {jobLogStatus = Prelude.pure newValue, ..}
+instance Property "PaymentConfiguration" Membership where
+  type PropertyType "PaymentConfiguration" Membership = MembershipPaymentConfigurationProperty
+  set newValue Membership {..}
+    = Membership {paymentConfiguration = Prelude.pure newValue, ..}
+instance Property "QueryLogStatus" Membership where
+  type PropertyType "QueryLogStatus" Membership = Value Prelude.Text
+  set newValue Membership {..}
+    = Membership {queryLogStatus = newValue, ..}
+instance Property "Tags" Membership where
+  type PropertyType "Tags" Membership = [Tag]
+  set newValue Membership {..}
+    = Membership {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/Membership/MembershipJobComputePaymentConfigProperty.hs b/gen/Stratosphere/CleanRooms/Membership/MembershipJobComputePaymentConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/Membership/MembershipJobComputePaymentConfigProperty.hs
@@ -0,0 +1,34 @@
+module Stratosphere.CleanRooms.Membership.MembershipJobComputePaymentConfigProperty (
+        MembershipJobComputePaymentConfigProperty(..),
+        mkMembershipJobComputePaymentConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data MembershipJobComputePaymentConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-membership-membershipjobcomputepaymentconfig.html>
+    MembershipJobComputePaymentConfigProperty {haddock_workaround_ :: (),
+                                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-membership-membershipjobcomputepaymentconfig.html#cfn-cleanrooms-membership-membershipjobcomputepaymentconfig-isresponsible>
+                                               isResponsible :: (Value Prelude.Bool)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMembershipJobComputePaymentConfigProperty ::
+  Value Prelude.Bool -> MembershipJobComputePaymentConfigProperty
+mkMembershipJobComputePaymentConfigProperty isResponsible
+  = MembershipJobComputePaymentConfigProperty
+      {haddock_workaround_ = (), isResponsible = isResponsible}
+instance ToResourceProperties MembershipJobComputePaymentConfigProperty where
+  toResourceProperties MembershipJobComputePaymentConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::Membership.MembershipJobComputePaymentConfig",
+         supportsTags = Prelude.False,
+         properties = ["IsResponsible" JSON..= isResponsible]}
+instance JSON.ToJSON MembershipJobComputePaymentConfigProperty where
+  toJSON MembershipJobComputePaymentConfigProperty {..}
+    = JSON.object ["IsResponsible" JSON..= isResponsible]
+instance Property "IsResponsible" MembershipJobComputePaymentConfigProperty where
+  type PropertyType "IsResponsible" MembershipJobComputePaymentConfigProperty = Value Prelude.Bool
+  set newValue MembershipJobComputePaymentConfigProperty {..}
+    = MembershipJobComputePaymentConfigProperty
+        {isResponsible = newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/Membership/MembershipJobComputePaymentConfigProperty.hs-boot b/gen/Stratosphere/CleanRooms/Membership/MembershipJobComputePaymentConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/Membership/MembershipJobComputePaymentConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.Membership.MembershipJobComputePaymentConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MembershipJobComputePaymentConfigProperty :: Prelude.Type
+instance ToResourceProperties MembershipJobComputePaymentConfigProperty
+instance Prelude.Eq MembershipJobComputePaymentConfigProperty
+instance Prelude.Show MembershipJobComputePaymentConfigProperty
+instance JSON.ToJSON MembershipJobComputePaymentConfigProperty
diff --git a/gen/Stratosphere/CleanRooms/Membership/MembershipMLPaymentConfigProperty.hs b/gen/Stratosphere/CleanRooms/Membership/MembershipMLPaymentConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/Membership/MembershipMLPaymentConfigProperty.hs
@@ -0,0 +1,50 @@
+module Stratosphere.CleanRooms.Membership.MembershipMLPaymentConfigProperty (
+        module Exports, MembershipMLPaymentConfigProperty(..),
+        mkMembershipMLPaymentConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CleanRooms.Membership.MembershipModelInferencePaymentConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.CleanRooms.Membership.MembershipModelTrainingPaymentConfigProperty as Exports
+import Stratosphere.ResourceProperties
+data MembershipMLPaymentConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-membership-membershipmlpaymentconfig.html>
+    MembershipMLPaymentConfigProperty {haddock_workaround_ :: (),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-membership-membershipmlpaymentconfig.html#cfn-cleanrooms-membership-membershipmlpaymentconfig-modelinference>
+                                       modelInference :: (Prelude.Maybe MembershipModelInferencePaymentConfigProperty),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-membership-membershipmlpaymentconfig.html#cfn-cleanrooms-membership-membershipmlpaymentconfig-modeltraining>
+                                       modelTraining :: (Prelude.Maybe MembershipModelTrainingPaymentConfigProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMembershipMLPaymentConfigProperty ::
+  MembershipMLPaymentConfigProperty
+mkMembershipMLPaymentConfigProperty
+  = MembershipMLPaymentConfigProperty
+      {haddock_workaround_ = (), modelInference = Prelude.Nothing,
+       modelTraining = Prelude.Nothing}
+instance ToResourceProperties MembershipMLPaymentConfigProperty where
+  toResourceProperties MembershipMLPaymentConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::Membership.MembershipMLPaymentConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ModelInference" Prelude.<$> modelInference,
+                            (JSON..=) "ModelTraining" Prelude.<$> modelTraining])}
+instance JSON.ToJSON MembershipMLPaymentConfigProperty where
+  toJSON MembershipMLPaymentConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ModelInference" Prelude.<$> modelInference,
+               (JSON..=) "ModelTraining" Prelude.<$> modelTraining]))
+instance Property "ModelInference" MembershipMLPaymentConfigProperty where
+  type PropertyType "ModelInference" MembershipMLPaymentConfigProperty = MembershipModelInferencePaymentConfigProperty
+  set newValue MembershipMLPaymentConfigProperty {..}
+    = MembershipMLPaymentConfigProperty
+        {modelInference = Prelude.pure newValue, ..}
+instance Property "ModelTraining" MembershipMLPaymentConfigProperty where
+  type PropertyType "ModelTraining" MembershipMLPaymentConfigProperty = MembershipModelTrainingPaymentConfigProperty
+  set newValue MembershipMLPaymentConfigProperty {..}
+    = MembershipMLPaymentConfigProperty
+        {modelTraining = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/Membership/MembershipMLPaymentConfigProperty.hs-boot b/gen/Stratosphere/CleanRooms/Membership/MembershipMLPaymentConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/Membership/MembershipMLPaymentConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.Membership.MembershipMLPaymentConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MembershipMLPaymentConfigProperty :: Prelude.Type
+instance ToResourceProperties MembershipMLPaymentConfigProperty
+instance Prelude.Eq MembershipMLPaymentConfigProperty
+instance Prelude.Show MembershipMLPaymentConfigProperty
+instance JSON.ToJSON MembershipMLPaymentConfigProperty
diff --git a/gen/Stratosphere/CleanRooms/Membership/MembershipModelInferencePaymentConfigProperty.hs b/gen/Stratosphere/CleanRooms/Membership/MembershipModelInferencePaymentConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/Membership/MembershipModelInferencePaymentConfigProperty.hs
@@ -0,0 +1,35 @@
+module Stratosphere.CleanRooms.Membership.MembershipModelInferencePaymentConfigProperty (
+        MembershipModelInferencePaymentConfigProperty(..),
+        mkMembershipModelInferencePaymentConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data MembershipModelInferencePaymentConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-membership-membershipmodelinferencepaymentconfig.html>
+    MembershipModelInferencePaymentConfigProperty {haddock_workaround_ :: (),
+                                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-membership-membershipmodelinferencepaymentconfig.html#cfn-cleanrooms-membership-membershipmodelinferencepaymentconfig-isresponsible>
+                                                   isResponsible :: (Value Prelude.Bool)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMembershipModelInferencePaymentConfigProperty ::
+  Value Prelude.Bool -> MembershipModelInferencePaymentConfigProperty
+mkMembershipModelInferencePaymentConfigProperty isResponsible
+  = MembershipModelInferencePaymentConfigProperty
+      {haddock_workaround_ = (), isResponsible = isResponsible}
+instance ToResourceProperties MembershipModelInferencePaymentConfigProperty where
+  toResourceProperties
+    MembershipModelInferencePaymentConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::Membership.MembershipModelInferencePaymentConfig",
+         supportsTags = Prelude.False,
+         properties = ["IsResponsible" JSON..= isResponsible]}
+instance JSON.ToJSON MembershipModelInferencePaymentConfigProperty where
+  toJSON MembershipModelInferencePaymentConfigProperty {..}
+    = JSON.object ["IsResponsible" JSON..= isResponsible]
+instance Property "IsResponsible" MembershipModelInferencePaymentConfigProperty where
+  type PropertyType "IsResponsible" MembershipModelInferencePaymentConfigProperty = Value Prelude.Bool
+  set newValue MembershipModelInferencePaymentConfigProperty {..}
+    = MembershipModelInferencePaymentConfigProperty
+        {isResponsible = newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/Membership/MembershipModelInferencePaymentConfigProperty.hs-boot b/gen/Stratosphere/CleanRooms/Membership/MembershipModelInferencePaymentConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/Membership/MembershipModelInferencePaymentConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.Membership.MembershipModelInferencePaymentConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MembershipModelInferencePaymentConfigProperty :: Prelude.Type
+instance ToResourceProperties MembershipModelInferencePaymentConfigProperty
+instance Prelude.Eq MembershipModelInferencePaymentConfigProperty
+instance Prelude.Show MembershipModelInferencePaymentConfigProperty
+instance JSON.ToJSON MembershipModelInferencePaymentConfigProperty
diff --git a/gen/Stratosphere/CleanRooms/Membership/MembershipModelTrainingPaymentConfigProperty.hs b/gen/Stratosphere/CleanRooms/Membership/MembershipModelTrainingPaymentConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/Membership/MembershipModelTrainingPaymentConfigProperty.hs
@@ -0,0 +1,35 @@
+module Stratosphere.CleanRooms.Membership.MembershipModelTrainingPaymentConfigProperty (
+        MembershipModelTrainingPaymentConfigProperty(..),
+        mkMembershipModelTrainingPaymentConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data MembershipModelTrainingPaymentConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-membership-membershipmodeltrainingpaymentconfig.html>
+    MembershipModelTrainingPaymentConfigProperty {haddock_workaround_ :: (),
+                                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-membership-membershipmodeltrainingpaymentconfig.html#cfn-cleanrooms-membership-membershipmodeltrainingpaymentconfig-isresponsible>
+                                                  isResponsible :: (Value Prelude.Bool)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMembershipModelTrainingPaymentConfigProperty ::
+  Value Prelude.Bool -> MembershipModelTrainingPaymentConfigProperty
+mkMembershipModelTrainingPaymentConfigProperty isResponsible
+  = MembershipModelTrainingPaymentConfigProperty
+      {haddock_workaround_ = (), isResponsible = isResponsible}
+instance ToResourceProperties MembershipModelTrainingPaymentConfigProperty where
+  toResourceProperties
+    MembershipModelTrainingPaymentConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::Membership.MembershipModelTrainingPaymentConfig",
+         supportsTags = Prelude.False,
+         properties = ["IsResponsible" JSON..= isResponsible]}
+instance JSON.ToJSON MembershipModelTrainingPaymentConfigProperty where
+  toJSON MembershipModelTrainingPaymentConfigProperty {..}
+    = JSON.object ["IsResponsible" JSON..= isResponsible]
+instance Property "IsResponsible" MembershipModelTrainingPaymentConfigProperty where
+  type PropertyType "IsResponsible" MembershipModelTrainingPaymentConfigProperty = Value Prelude.Bool
+  set newValue MembershipModelTrainingPaymentConfigProperty {..}
+    = MembershipModelTrainingPaymentConfigProperty
+        {isResponsible = newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/Membership/MembershipModelTrainingPaymentConfigProperty.hs-boot b/gen/Stratosphere/CleanRooms/Membership/MembershipModelTrainingPaymentConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/Membership/MembershipModelTrainingPaymentConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.Membership.MembershipModelTrainingPaymentConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MembershipModelTrainingPaymentConfigProperty :: Prelude.Type
+instance ToResourceProperties MembershipModelTrainingPaymentConfigProperty
+instance Prelude.Eq MembershipModelTrainingPaymentConfigProperty
+instance Prelude.Show MembershipModelTrainingPaymentConfigProperty
+instance JSON.ToJSON MembershipModelTrainingPaymentConfigProperty
diff --git a/gen/Stratosphere/CleanRooms/Membership/MembershipPaymentConfigurationProperty.hs b/gen/Stratosphere/CleanRooms/Membership/MembershipPaymentConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/Membership/MembershipPaymentConfigurationProperty.hs
@@ -0,0 +1,63 @@
+module Stratosphere.CleanRooms.Membership.MembershipPaymentConfigurationProperty (
+        module Exports, MembershipPaymentConfigurationProperty(..),
+        mkMembershipPaymentConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CleanRooms.Membership.MembershipJobComputePaymentConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.CleanRooms.Membership.MembershipMLPaymentConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.CleanRooms.Membership.MembershipQueryComputePaymentConfigProperty as Exports
+import Stratosphere.ResourceProperties
+data MembershipPaymentConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-membership-membershippaymentconfiguration.html>
+    MembershipPaymentConfigurationProperty {haddock_workaround_ :: (),
+                                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-membership-membershippaymentconfiguration.html#cfn-cleanrooms-membership-membershippaymentconfiguration-jobcompute>
+                                            jobCompute :: (Prelude.Maybe MembershipJobComputePaymentConfigProperty),
+                                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-membership-membershippaymentconfiguration.html#cfn-cleanrooms-membership-membershippaymentconfiguration-machinelearning>
+                                            machineLearning :: (Prelude.Maybe MembershipMLPaymentConfigProperty),
+                                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-membership-membershippaymentconfiguration.html#cfn-cleanrooms-membership-membershippaymentconfiguration-querycompute>
+                                            queryCompute :: MembershipQueryComputePaymentConfigProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMembershipPaymentConfigurationProperty ::
+  MembershipQueryComputePaymentConfigProperty
+  -> MembershipPaymentConfigurationProperty
+mkMembershipPaymentConfigurationProperty queryCompute
+  = MembershipPaymentConfigurationProperty
+      {haddock_workaround_ = (), queryCompute = queryCompute,
+       jobCompute = Prelude.Nothing, machineLearning = Prelude.Nothing}
+instance ToResourceProperties MembershipPaymentConfigurationProperty where
+  toResourceProperties MembershipPaymentConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::Membership.MembershipPaymentConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["QueryCompute" JSON..= queryCompute]
+                           (Prelude.catMaybes
+                              [(JSON..=) "JobCompute" Prelude.<$> jobCompute,
+                               (JSON..=) "MachineLearning" Prelude.<$> machineLearning]))}
+instance JSON.ToJSON MembershipPaymentConfigurationProperty where
+  toJSON MembershipPaymentConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["QueryCompute" JSON..= queryCompute]
+              (Prelude.catMaybes
+                 [(JSON..=) "JobCompute" Prelude.<$> jobCompute,
+                  (JSON..=) "MachineLearning" Prelude.<$> machineLearning])))
+instance Property "JobCompute" MembershipPaymentConfigurationProperty where
+  type PropertyType "JobCompute" MembershipPaymentConfigurationProperty = MembershipJobComputePaymentConfigProperty
+  set newValue MembershipPaymentConfigurationProperty {..}
+    = MembershipPaymentConfigurationProperty
+        {jobCompute = Prelude.pure newValue, ..}
+instance Property "MachineLearning" MembershipPaymentConfigurationProperty where
+  type PropertyType "MachineLearning" MembershipPaymentConfigurationProperty = MembershipMLPaymentConfigProperty
+  set newValue MembershipPaymentConfigurationProperty {..}
+    = MembershipPaymentConfigurationProperty
+        {machineLearning = Prelude.pure newValue, ..}
+instance Property "QueryCompute" MembershipPaymentConfigurationProperty where
+  type PropertyType "QueryCompute" MembershipPaymentConfigurationProperty = MembershipQueryComputePaymentConfigProperty
+  set newValue MembershipPaymentConfigurationProperty {..}
+    = MembershipPaymentConfigurationProperty
+        {queryCompute = newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/Membership/MembershipPaymentConfigurationProperty.hs-boot b/gen/Stratosphere/CleanRooms/Membership/MembershipPaymentConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/Membership/MembershipPaymentConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.Membership.MembershipPaymentConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MembershipPaymentConfigurationProperty :: Prelude.Type
+instance ToResourceProperties MembershipPaymentConfigurationProperty
+instance Prelude.Eq MembershipPaymentConfigurationProperty
+instance Prelude.Show MembershipPaymentConfigurationProperty
+instance JSON.ToJSON MembershipPaymentConfigurationProperty
diff --git a/gen/Stratosphere/CleanRooms/Membership/MembershipProtectedJobOutputConfigurationProperty.hs b/gen/Stratosphere/CleanRooms/Membership/MembershipProtectedJobOutputConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/Membership/MembershipProtectedJobOutputConfigurationProperty.hs
@@ -0,0 +1,36 @@
+module Stratosphere.CleanRooms.Membership.MembershipProtectedJobOutputConfigurationProperty (
+        module Exports,
+        MembershipProtectedJobOutputConfigurationProperty(..),
+        mkMembershipProtectedJobOutputConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CleanRooms.Membership.ProtectedJobS3OutputConfigurationInputProperty as Exports
+import Stratosphere.ResourceProperties
+data MembershipProtectedJobOutputConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-membership-membershipprotectedjoboutputconfiguration.html>
+    MembershipProtectedJobOutputConfigurationProperty {haddock_workaround_ :: (),
+                                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-membership-membershipprotectedjoboutputconfiguration.html#cfn-cleanrooms-membership-membershipprotectedjoboutputconfiguration-s3>
+                                                       s3 :: ProtectedJobS3OutputConfigurationInputProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMembershipProtectedJobOutputConfigurationProperty ::
+  ProtectedJobS3OutputConfigurationInputProperty
+  -> MembershipProtectedJobOutputConfigurationProperty
+mkMembershipProtectedJobOutputConfigurationProperty s3
+  = MembershipProtectedJobOutputConfigurationProperty
+      {haddock_workaround_ = (), s3 = s3}
+instance ToResourceProperties MembershipProtectedJobOutputConfigurationProperty where
+  toResourceProperties
+    MembershipProtectedJobOutputConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::Membership.MembershipProtectedJobOutputConfiguration",
+         supportsTags = Prelude.False, properties = ["S3" JSON..= s3]}
+instance JSON.ToJSON MembershipProtectedJobOutputConfigurationProperty where
+  toJSON MembershipProtectedJobOutputConfigurationProperty {..}
+    = JSON.object ["S3" JSON..= s3]
+instance Property "S3" MembershipProtectedJobOutputConfigurationProperty where
+  type PropertyType "S3" MembershipProtectedJobOutputConfigurationProperty = ProtectedJobS3OutputConfigurationInputProperty
+  set newValue MembershipProtectedJobOutputConfigurationProperty {..}
+    = MembershipProtectedJobOutputConfigurationProperty
+        {s3 = newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/Membership/MembershipProtectedJobOutputConfigurationProperty.hs-boot b/gen/Stratosphere/CleanRooms/Membership/MembershipProtectedJobOutputConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/Membership/MembershipProtectedJobOutputConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.Membership.MembershipProtectedJobOutputConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MembershipProtectedJobOutputConfigurationProperty :: Prelude.Type
+instance ToResourceProperties MembershipProtectedJobOutputConfigurationProperty
+instance Prelude.Eq MembershipProtectedJobOutputConfigurationProperty
+instance Prelude.Show MembershipProtectedJobOutputConfigurationProperty
+instance JSON.ToJSON MembershipProtectedJobOutputConfigurationProperty
diff --git a/gen/Stratosphere/CleanRooms/Membership/MembershipProtectedJobResultConfigurationProperty.hs b/gen/Stratosphere/CleanRooms/Membership/MembershipProtectedJobResultConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/Membership/MembershipProtectedJobResultConfigurationProperty.hs
@@ -0,0 +1,52 @@
+module Stratosphere.CleanRooms.Membership.MembershipProtectedJobResultConfigurationProperty (
+        module Exports,
+        MembershipProtectedJobResultConfigurationProperty(..),
+        mkMembershipProtectedJobResultConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CleanRooms.Membership.MembershipProtectedJobOutputConfigurationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data MembershipProtectedJobResultConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-membership-membershipprotectedjobresultconfiguration.html>
+    MembershipProtectedJobResultConfigurationProperty {haddock_workaround_ :: (),
+                                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-membership-membershipprotectedjobresultconfiguration.html#cfn-cleanrooms-membership-membershipprotectedjobresultconfiguration-outputconfiguration>
+                                                       outputConfiguration :: MembershipProtectedJobOutputConfigurationProperty,
+                                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-membership-membershipprotectedjobresultconfiguration.html#cfn-cleanrooms-membership-membershipprotectedjobresultconfiguration-rolearn>
+                                                       roleArn :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMembershipProtectedJobResultConfigurationProperty ::
+  MembershipProtectedJobOutputConfigurationProperty
+  -> Value Prelude.Text
+     -> MembershipProtectedJobResultConfigurationProperty
+mkMembershipProtectedJobResultConfigurationProperty
+  outputConfiguration
+  roleArn
+  = MembershipProtectedJobResultConfigurationProperty
+      {haddock_workaround_ = (),
+       outputConfiguration = outputConfiguration, roleArn = roleArn}
+instance ToResourceProperties MembershipProtectedJobResultConfigurationProperty where
+  toResourceProperties
+    MembershipProtectedJobResultConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::Membership.MembershipProtectedJobResultConfiguration",
+         supportsTags = Prelude.False,
+         properties = ["OutputConfiguration" JSON..= outputConfiguration,
+                       "RoleArn" JSON..= roleArn]}
+instance JSON.ToJSON MembershipProtectedJobResultConfigurationProperty where
+  toJSON MembershipProtectedJobResultConfigurationProperty {..}
+    = JSON.object
+        ["OutputConfiguration" JSON..= outputConfiguration,
+         "RoleArn" JSON..= roleArn]
+instance Property "OutputConfiguration" MembershipProtectedJobResultConfigurationProperty where
+  type PropertyType "OutputConfiguration" MembershipProtectedJobResultConfigurationProperty = MembershipProtectedJobOutputConfigurationProperty
+  set newValue MembershipProtectedJobResultConfigurationProperty {..}
+    = MembershipProtectedJobResultConfigurationProperty
+        {outputConfiguration = newValue, ..}
+instance Property "RoleArn" MembershipProtectedJobResultConfigurationProperty where
+  type PropertyType "RoleArn" MembershipProtectedJobResultConfigurationProperty = Value Prelude.Text
+  set newValue MembershipProtectedJobResultConfigurationProperty {..}
+    = MembershipProtectedJobResultConfigurationProperty
+        {roleArn = newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/Membership/MembershipProtectedJobResultConfigurationProperty.hs-boot b/gen/Stratosphere/CleanRooms/Membership/MembershipProtectedJobResultConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/Membership/MembershipProtectedJobResultConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.Membership.MembershipProtectedJobResultConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MembershipProtectedJobResultConfigurationProperty :: Prelude.Type
+instance ToResourceProperties MembershipProtectedJobResultConfigurationProperty
+instance Prelude.Eq MembershipProtectedJobResultConfigurationProperty
+instance Prelude.Show MembershipProtectedJobResultConfigurationProperty
+instance JSON.ToJSON MembershipProtectedJobResultConfigurationProperty
diff --git a/gen/Stratosphere/CleanRooms/Membership/MembershipProtectedQueryOutputConfigurationProperty.hs b/gen/Stratosphere/CleanRooms/Membership/MembershipProtectedQueryOutputConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/Membership/MembershipProtectedQueryOutputConfigurationProperty.hs
@@ -0,0 +1,38 @@
+module Stratosphere.CleanRooms.Membership.MembershipProtectedQueryOutputConfigurationProperty (
+        module Exports,
+        MembershipProtectedQueryOutputConfigurationProperty(..),
+        mkMembershipProtectedQueryOutputConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CleanRooms.Membership.ProtectedQueryS3OutputConfigurationProperty as Exports
+import Stratosphere.ResourceProperties
+data MembershipProtectedQueryOutputConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-membership-membershipprotectedqueryoutputconfiguration.html>
+    MembershipProtectedQueryOutputConfigurationProperty {haddock_workaround_ :: (),
+                                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-membership-membershipprotectedqueryoutputconfiguration.html#cfn-cleanrooms-membership-membershipprotectedqueryoutputconfiguration-s3>
+                                                         s3 :: ProtectedQueryS3OutputConfigurationProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMembershipProtectedQueryOutputConfigurationProperty ::
+  ProtectedQueryS3OutputConfigurationProperty
+  -> MembershipProtectedQueryOutputConfigurationProperty
+mkMembershipProtectedQueryOutputConfigurationProperty s3
+  = MembershipProtectedQueryOutputConfigurationProperty
+      {haddock_workaround_ = (), s3 = s3}
+instance ToResourceProperties MembershipProtectedQueryOutputConfigurationProperty where
+  toResourceProperties
+    MembershipProtectedQueryOutputConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::Membership.MembershipProtectedQueryOutputConfiguration",
+         supportsTags = Prelude.False, properties = ["S3" JSON..= s3]}
+instance JSON.ToJSON MembershipProtectedQueryOutputConfigurationProperty where
+  toJSON MembershipProtectedQueryOutputConfigurationProperty {..}
+    = JSON.object ["S3" JSON..= s3]
+instance Property "S3" MembershipProtectedQueryOutputConfigurationProperty where
+  type PropertyType "S3" MembershipProtectedQueryOutputConfigurationProperty = ProtectedQueryS3OutputConfigurationProperty
+  set
+    newValue
+    MembershipProtectedQueryOutputConfigurationProperty {..}
+    = MembershipProtectedQueryOutputConfigurationProperty
+        {s3 = newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/Membership/MembershipProtectedQueryOutputConfigurationProperty.hs-boot b/gen/Stratosphere/CleanRooms/Membership/MembershipProtectedQueryOutputConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/Membership/MembershipProtectedQueryOutputConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.Membership.MembershipProtectedQueryOutputConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MembershipProtectedQueryOutputConfigurationProperty :: Prelude.Type
+instance ToResourceProperties MembershipProtectedQueryOutputConfigurationProperty
+instance Prelude.Eq MembershipProtectedQueryOutputConfigurationProperty
+instance Prelude.Show MembershipProtectedQueryOutputConfigurationProperty
+instance JSON.ToJSON MembershipProtectedQueryOutputConfigurationProperty
diff --git a/gen/Stratosphere/CleanRooms/Membership/MembershipProtectedQueryResultConfigurationProperty.hs b/gen/Stratosphere/CleanRooms/Membership/MembershipProtectedQueryResultConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/Membership/MembershipProtectedQueryResultConfigurationProperty.hs
@@ -0,0 +1,59 @@
+module Stratosphere.CleanRooms.Membership.MembershipProtectedQueryResultConfigurationProperty (
+        module Exports,
+        MembershipProtectedQueryResultConfigurationProperty(..),
+        mkMembershipProtectedQueryResultConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CleanRooms.Membership.MembershipProtectedQueryOutputConfigurationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data MembershipProtectedQueryResultConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-membership-membershipprotectedqueryresultconfiguration.html>
+    MembershipProtectedQueryResultConfigurationProperty {haddock_workaround_ :: (),
+                                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-membership-membershipprotectedqueryresultconfiguration.html#cfn-cleanrooms-membership-membershipprotectedqueryresultconfiguration-outputconfiguration>
+                                                         outputConfiguration :: MembershipProtectedQueryOutputConfigurationProperty,
+                                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-membership-membershipprotectedqueryresultconfiguration.html#cfn-cleanrooms-membership-membershipprotectedqueryresultconfiguration-rolearn>
+                                                         roleArn :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMembershipProtectedQueryResultConfigurationProperty ::
+  MembershipProtectedQueryOutputConfigurationProperty
+  -> MembershipProtectedQueryResultConfigurationProperty
+mkMembershipProtectedQueryResultConfigurationProperty
+  outputConfiguration
+  = MembershipProtectedQueryResultConfigurationProperty
+      {haddock_workaround_ = (),
+       outputConfiguration = outputConfiguration,
+       roleArn = Prelude.Nothing}
+instance ToResourceProperties MembershipProtectedQueryResultConfigurationProperty where
+  toResourceProperties
+    MembershipProtectedQueryResultConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::Membership.MembershipProtectedQueryResultConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["OutputConfiguration" JSON..= outputConfiguration]
+                           (Prelude.catMaybes [(JSON..=) "RoleArn" Prelude.<$> roleArn]))}
+instance JSON.ToJSON MembershipProtectedQueryResultConfigurationProperty where
+  toJSON MembershipProtectedQueryResultConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["OutputConfiguration" JSON..= outputConfiguration]
+              (Prelude.catMaybes [(JSON..=) "RoleArn" Prelude.<$> roleArn])))
+instance Property "OutputConfiguration" MembershipProtectedQueryResultConfigurationProperty where
+  type PropertyType "OutputConfiguration" MembershipProtectedQueryResultConfigurationProperty = MembershipProtectedQueryOutputConfigurationProperty
+  set
+    newValue
+    MembershipProtectedQueryResultConfigurationProperty {..}
+    = MembershipProtectedQueryResultConfigurationProperty
+        {outputConfiguration = newValue, ..}
+instance Property "RoleArn" MembershipProtectedQueryResultConfigurationProperty where
+  type PropertyType "RoleArn" MembershipProtectedQueryResultConfigurationProperty = Value Prelude.Text
+  set
+    newValue
+    MembershipProtectedQueryResultConfigurationProperty {..}
+    = MembershipProtectedQueryResultConfigurationProperty
+        {roleArn = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/Membership/MembershipProtectedQueryResultConfigurationProperty.hs-boot b/gen/Stratosphere/CleanRooms/Membership/MembershipProtectedQueryResultConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/Membership/MembershipProtectedQueryResultConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.Membership.MembershipProtectedQueryResultConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MembershipProtectedQueryResultConfigurationProperty :: Prelude.Type
+instance ToResourceProperties MembershipProtectedQueryResultConfigurationProperty
+instance Prelude.Eq MembershipProtectedQueryResultConfigurationProperty
+instance Prelude.Show MembershipProtectedQueryResultConfigurationProperty
+instance JSON.ToJSON MembershipProtectedQueryResultConfigurationProperty
diff --git a/gen/Stratosphere/CleanRooms/Membership/MembershipQueryComputePaymentConfigProperty.hs b/gen/Stratosphere/CleanRooms/Membership/MembershipQueryComputePaymentConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/Membership/MembershipQueryComputePaymentConfigProperty.hs
@@ -0,0 +1,35 @@
+module Stratosphere.CleanRooms.Membership.MembershipQueryComputePaymentConfigProperty (
+        MembershipQueryComputePaymentConfigProperty(..),
+        mkMembershipQueryComputePaymentConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data MembershipQueryComputePaymentConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-membership-membershipquerycomputepaymentconfig.html>
+    MembershipQueryComputePaymentConfigProperty {haddock_workaround_ :: (),
+                                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-membership-membershipquerycomputepaymentconfig.html#cfn-cleanrooms-membership-membershipquerycomputepaymentconfig-isresponsible>
+                                                 isResponsible :: (Value Prelude.Bool)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMembershipQueryComputePaymentConfigProperty ::
+  Value Prelude.Bool -> MembershipQueryComputePaymentConfigProperty
+mkMembershipQueryComputePaymentConfigProperty isResponsible
+  = MembershipQueryComputePaymentConfigProperty
+      {haddock_workaround_ = (), isResponsible = isResponsible}
+instance ToResourceProperties MembershipQueryComputePaymentConfigProperty where
+  toResourceProperties
+    MembershipQueryComputePaymentConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::Membership.MembershipQueryComputePaymentConfig",
+         supportsTags = Prelude.False,
+         properties = ["IsResponsible" JSON..= isResponsible]}
+instance JSON.ToJSON MembershipQueryComputePaymentConfigProperty where
+  toJSON MembershipQueryComputePaymentConfigProperty {..}
+    = JSON.object ["IsResponsible" JSON..= isResponsible]
+instance Property "IsResponsible" MembershipQueryComputePaymentConfigProperty where
+  type PropertyType "IsResponsible" MembershipQueryComputePaymentConfigProperty = Value Prelude.Bool
+  set newValue MembershipQueryComputePaymentConfigProperty {..}
+    = MembershipQueryComputePaymentConfigProperty
+        {isResponsible = newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/Membership/MembershipQueryComputePaymentConfigProperty.hs-boot b/gen/Stratosphere/CleanRooms/Membership/MembershipQueryComputePaymentConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/Membership/MembershipQueryComputePaymentConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.Membership.MembershipQueryComputePaymentConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MembershipQueryComputePaymentConfigProperty :: Prelude.Type
+instance ToResourceProperties MembershipQueryComputePaymentConfigProperty
+instance Prelude.Eq MembershipQueryComputePaymentConfigProperty
+instance Prelude.Show MembershipQueryComputePaymentConfigProperty
+instance JSON.ToJSON MembershipQueryComputePaymentConfigProperty
diff --git a/gen/Stratosphere/CleanRooms/Membership/ProtectedJobS3OutputConfigurationInputProperty.hs b/gen/Stratosphere/CleanRooms/Membership/ProtectedJobS3OutputConfigurationInputProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/Membership/ProtectedJobS3OutputConfigurationInputProperty.hs
@@ -0,0 +1,51 @@
+module Stratosphere.CleanRooms.Membership.ProtectedJobS3OutputConfigurationInputProperty (
+        ProtectedJobS3OutputConfigurationInputProperty(..),
+        mkProtectedJobS3OutputConfigurationInputProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ProtectedJobS3OutputConfigurationInputProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-membership-protectedjobs3outputconfigurationinput.html>
+    ProtectedJobS3OutputConfigurationInputProperty {haddock_workaround_ :: (),
+                                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-membership-protectedjobs3outputconfigurationinput.html#cfn-cleanrooms-membership-protectedjobs3outputconfigurationinput-bucket>
+                                                    bucket :: (Value Prelude.Text),
+                                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-membership-protectedjobs3outputconfigurationinput.html#cfn-cleanrooms-membership-protectedjobs3outputconfigurationinput-keyprefix>
+                                                    keyPrefix :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkProtectedJobS3OutputConfigurationInputProperty ::
+  Value Prelude.Text
+  -> ProtectedJobS3OutputConfigurationInputProperty
+mkProtectedJobS3OutputConfigurationInputProperty bucket
+  = ProtectedJobS3OutputConfigurationInputProperty
+      {haddock_workaround_ = (), bucket = bucket,
+       keyPrefix = Prelude.Nothing}
+instance ToResourceProperties ProtectedJobS3OutputConfigurationInputProperty where
+  toResourceProperties
+    ProtectedJobS3OutputConfigurationInputProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::Membership.ProtectedJobS3OutputConfigurationInput",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Bucket" JSON..= bucket]
+                           (Prelude.catMaybes [(JSON..=) "KeyPrefix" Prelude.<$> keyPrefix]))}
+instance JSON.ToJSON ProtectedJobS3OutputConfigurationInputProperty where
+  toJSON ProtectedJobS3OutputConfigurationInputProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Bucket" JSON..= bucket]
+              (Prelude.catMaybes [(JSON..=) "KeyPrefix" Prelude.<$> keyPrefix])))
+instance Property "Bucket" ProtectedJobS3OutputConfigurationInputProperty where
+  type PropertyType "Bucket" ProtectedJobS3OutputConfigurationInputProperty = Value Prelude.Text
+  set newValue ProtectedJobS3OutputConfigurationInputProperty {..}
+    = ProtectedJobS3OutputConfigurationInputProperty
+        {bucket = newValue, ..}
+instance Property "KeyPrefix" ProtectedJobS3OutputConfigurationInputProperty where
+  type PropertyType "KeyPrefix" ProtectedJobS3OutputConfigurationInputProperty = Value Prelude.Text
+  set newValue ProtectedJobS3OutputConfigurationInputProperty {..}
+    = ProtectedJobS3OutputConfigurationInputProperty
+        {keyPrefix = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/Membership/ProtectedJobS3OutputConfigurationInputProperty.hs-boot b/gen/Stratosphere/CleanRooms/Membership/ProtectedJobS3OutputConfigurationInputProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/Membership/ProtectedJobS3OutputConfigurationInputProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.Membership.ProtectedJobS3OutputConfigurationInputProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ProtectedJobS3OutputConfigurationInputProperty :: Prelude.Type
+instance ToResourceProperties ProtectedJobS3OutputConfigurationInputProperty
+instance Prelude.Eq ProtectedJobS3OutputConfigurationInputProperty
+instance Prelude.Show ProtectedJobS3OutputConfigurationInputProperty
+instance JSON.ToJSON ProtectedJobS3OutputConfigurationInputProperty
diff --git a/gen/Stratosphere/CleanRooms/Membership/ProtectedQueryS3OutputConfigurationProperty.hs b/gen/Stratosphere/CleanRooms/Membership/ProtectedQueryS3OutputConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/Membership/ProtectedQueryS3OutputConfigurationProperty.hs
@@ -0,0 +1,71 @@
+module Stratosphere.CleanRooms.Membership.ProtectedQueryS3OutputConfigurationProperty (
+        ProtectedQueryS3OutputConfigurationProperty(..),
+        mkProtectedQueryS3OutputConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ProtectedQueryS3OutputConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-membership-protectedquerys3outputconfiguration.html>
+    ProtectedQueryS3OutputConfigurationProperty {haddock_workaround_ :: (),
+                                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-membership-protectedquerys3outputconfiguration.html#cfn-cleanrooms-membership-protectedquerys3outputconfiguration-bucket>
+                                                 bucket :: (Value Prelude.Text),
+                                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-membership-protectedquerys3outputconfiguration.html#cfn-cleanrooms-membership-protectedquerys3outputconfiguration-keyprefix>
+                                                 keyPrefix :: (Prelude.Maybe (Value Prelude.Text)),
+                                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-membership-protectedquerys3outputconfiguration.html#cfn-cleanrooms-membership-protectedquerys3outputconfiguration-resultformat>
+                                                 resultFormat :: (Value Prelude.Text),
+                                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-membership-protectedquerys3outputconfiguration.html#cfn-cleanrooms-membership-protectedquerys3outputconfiguration-singlefileoutput>
+                                                 singleFileOutput :: (Prelude.Maybe (Value Prelude.Bool))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkProtectedQueryS3OutputConfigurationProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> ProtectedQueryS3OutputConfigurationProperty
+mkProtectedQueryS3OutputConfigurationProperty bucket resultFormat
+  = ProtectedQueryS3OutputConfigurationProperty
+      {haddock_workaround_ = (), bucket = bucket,
+       resultFormat = resultFormat, keyPrefix = Prelude.Nothing,
+       singleFileOutput = Prelude.Nothing}
+instance ToResourceProperties ProtectedQueryS3OutputConfigurationProperty where
+  toResourceProperties
+    ProtectedQueryS3OutputConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::Membership.ProtectedQueryS3OutputConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Bucket" JSON..= bucket, "ResultFormat" JSON..= resultFormat]
+                           (Prelude.catMaybes
+                              [(JSON..=) "KeyPrefix" Prelude.<$> keyPrefix,
+                               (JSON..=) "SingleFileOutput" Prelude.<$> singleFileOutput]))}
+instance JSON.ToJSON ProtectedQueryS3OutputConfigurationProperty where
+  toJSON ProtectedQueryS3OutputConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Bucket" JSON..= bucket, "ResultFormat" JSON..= resultFormat]
+              (Prelude.catMaybes
+                 [(JSON..=) "KeyPrefix" Prelude.<$> keyPrefix,
+                  (JSON..=) "SingleFileOutput" Prelude.<$> singleFileOutput])))
+instance Property "Bucket" ProtectedQueryS3OutputConfigurationProperty where
+  type PropertyType "Bucket" ProtectedQueryS3OutputConfigurationProperty = Value Prelude.Text
+  set newValue ProtectedQueryS3OutputConfigurationProperty {..}
+    = ProtectedQueryS3OutputConfigurationProperty
+        {bucket = newValue, ..}
+instance Property "KeyPrefix" ProtectedQueryS3OutputConfigurationProperty where
+  type PropertyType "KeyPrefix" ProtectedQueryS3OutputConfigurationProperty = Value Prelude.Text
+  set newValue ProtectedQueryS3OutputConfigurationProperty {..}
+    = ProtectedQueryS3OutputConfigurationProperty
+        {keyPrefix = Prelude.pure newValue, ..}
+instance Property "ResultFormat" ProtectedQueryS3OutputConfigurationProperty where
+  type PropertyType "ResultFormat" ProtectedQueryS3OutputConfigurationProperty = Value Prelude.Text
+  set newValue ProtectedQueryS3OutputConfigurationProperty {..}
+    = ProtectedQueryS3OutputConfigurationProperty
+        {resultFormat = newValue, ..}
+instance Property "SingleFileOutput" ProtectedQueryS3OutputConfigurationProperty where
+  type PropertyType "SingleFileOutput" ProtectedQueryS3OutputConfigurationProperty = Value Prelude.Bool
+  set newValue ProtectedQueryS3OutputConfigurationProperty {..}
+    = ProtectedQueryS3OutputConfigurationProperty
+        {singleFileOutput = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/Membership/ProtectedQueryS3OutputConfigurationProperty.hs-boot b/gen/Stratosphere/CleanRooms/Membership/ProtectedQueryS3OutputConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/Membership/ProtectedQueryS3OutputConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.Membership.ProtectedQueryS3OutputConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ProtectedQueryS3OutputConfigurationProperty :: Prelude.Type
+instance ToResourceProperties ProtectedQueryS3OutputConfigurationProperty
+instance Prelude.Eq ProtectedQueryS3OutputConfigurationProperty
+instance Prelude.Show ProtectedQueryS3OutputConfigurationProperty
+instance JSON.ToJSON ProtectedQueryS3OutputConfigurationProperty
diff --git a/gen/Stratosphere/CleanRooms/PrivacyBudgetTemplate.hs b/gen/Stratosphere/CleanRooms/PrivacyBudgetTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/PrivacyBudgetTemplate.hs
@@ -0,0 +1,81 @@
+module Stratosphere.CleanRooms.PrivacyBudgetTemplate (
+        module Exports, PrivacyBudgetTemplate(..), mkPrivacyBudgetTemplate
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CleanRooms.PrivacyBudgetTemplate.ParametersProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data PrivacyBudgetTemplate
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-privacybudgettemplate.html>
+    PrivacyBudgetTemplate {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-privacybudgettemplate.html#cfn-cleanrooms-privacybudgettemplate-autorefresh>
+                           autoRefresh :: (Value Prelude.Text),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-privacybudgettemplate.html#cfn-cleanrooms-privacybudgettemplate-membershipidentifier>
+                           membershipIdentifier :: (Value Prelude.Text),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-privacybudgettemplate.html#cfn-cleanrooms-privacybudgettemplate-parameters>
+                           parameters :: ParametersProperty,
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-privacybudgettemplate.html#cfn-cleanrooms-privacybudgettemplate-privacybudgettype>
+                           privacyBudgetType :: (Value Prelude.Text),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-privacybudgettemplate.html#cfn-cleanrooms-privacybudgettemplate-tags>
+                           tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPrivacyBudgetTemplate ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> ParametersProperty
+        -> Value Prelude.Text -> PrivacyBudgetTemplate
+mkPrivacyBudgetTemplate
+  autoRefresh
+  membershipIdentifier
+  parameters
+  privacyBudgetType
+  = PrivacyBudgetTemplate
+      {haddock_workaround_ = (), autoRefresh = autoRefresh,
+       membershipIdentifier = membershipIdentifier,
+       parameters = parameters, privacyBudgetType = privacyBudgetType,
+       tags = Prelude.Nothing}
+instance ToResourceProperties PrivacyBudgetTemplate where
+  toResourceProperties PrivacyBudgetTemplate {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::PrivacyBudgetTemplate",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["AutoRefresh" JSON..= autoRefresh,
+                            "MembershipIdentifier" JSON..= membershipIdentifier,
+                            "Parameters" JSON..= parameters,
+                            "PrivacyBudgetType" JSON..= privacyBudgetType]
+                           (Prelude.catMaybes [(JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON PrivacyBudgetTemplate where
+  toJSON PrivacyBudgetTemplate {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["AutoRefresh" JSON..= autoRefresh,
+               "MembershipIdentifier" JSON..= membershipIdentifier,
+               "Parameters" JSON..= parameters,
+               "PrivacyBudgetType" JSON..= privacyBudgetType]
+              (Prelude.catMaybes [(JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "AutoRefresh" PrivacyBudgetTemplate where
+  type PropertyType "AutoRefresh" PrivacyBudgetTemplate = Value Prelude.Text
+  set newValue PrivacyBudgetTemplate {..}
+    = PrivacyBudgetTemplate {autoRefresh = newValue, ..}
+instance Property "MembershipIdentifier" PrivacyBudgetTemplate where
+  type PropertyType "MembershipIdentifier" PrivacyBudgetTemplate = Value Prelude.Text
+  set newValue PrivacyBudgetTemplate {..}
+    = PrivacyBudgetTemplate {membershipIdentifier = newValue, ..}
+instance Property "Parameters" PrivacyBudgetTemplate where
+  type PropertyType "Parameters" PrivacyBudgetTemplate = ParametersProperty
+  set newValue PrivacyBudgetTemplate {..}
+    = PrivacyBudgetTemplate {parameters = newValue, ..}
+instance Property "PrivacyBudgetType" PrivacyBudgetTemplate where
+  type PropertyType "PrivacyBudgetType" PrivacyBudgetTemplate = Value Prelude.Text
+  set newValue PrivacyBudgetTemplate {..}
+    = PrivacyBudgetTemplate {privacyBudgetType = newValue, ..}
+instance Property "Tags" PrivacyBudgetTemplate where
+  type PropertyType "Tags" PrivacyBudgetTemplate = [Tag]
+  set newValue PrivacyBudgetTemplate {..}
+    = PrivacyBudgetTemplate {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/PrivacyBudgetTemplate/ParametersProperty.hs b/gen/Stratosphere/CleanRooms/PrivacyBudgetTemplate/ParametersProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/PrivacyBudgetTemplate/ParametersProperty.hs
@@ -0,0 +1,43 @@
+module Stratosphere.CleanRooms.PrivacyBudgetTemplate.ParametersProperty (
+        ParametersProperty(..), mkParametersProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ParametersProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-privacybudgettemplate-parameters.html>
+    ParametersProperty {haddock_workaround_ :: (),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-privacybudgettemplate-parameters.html#cfn-cleanrooms-privacybudgettemplate-parameters-epsilon>
+                        epsilon :: (Value Prelude.Integer),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-privacybudgettemplate-parameters.html#cfn-cleanrooms-privacybudgettemplate-parameters-usersnoiseperquery>
+                        usersNoisePerQuery :: (Value Prelude.Integer)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkParametersProperty ::
+  Value Prelude.Integer
+  -> Value Prelude.Integer -> ParametersProperty
+mkParametersProperty epsilon usersNoisePerQuery
+  = ParametersProperty
+      {haddock_workaround_ = (), epsilon = epsilon,
+       usersNoisePerQuery = usersNoisePerQuery}
+instance ToResourceProperties ParametersProperty where
+  toResourceProperties ParametersProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CleanRooms::PrivacyBudgetTemplate.Parameters",
+         supportsTags = Prelude.False,
+         properties = ["Epsilon" JSON..= epsilon,
+                       "UsersNoisePerQuery" JSON..= usersNoisePerQuery]}
+instance JSON.ToJSON ParametersProperty where
+  toJSON ParametersProperty {..}
+    = JSON.object
+        ["Epsilon" JSON..= epsilon,
+         "UsersNoisePerQuery" JSON..= usersNoisePerQuery]
+instance Property "Epsilon" ParametersProperty where
+  type PropertyType "Epsilon" ParametersProperty = Value Prelude.Integer
+  set newValue ParametersProperty {..}
+    = ParametersProperty {epsilon = newValue, ..}
+instance Property "UsersNoisePerQuery" ParametersProperty where
+  type PropertyType "UsersNoisePerQuery" ParametersProperty = Value Prelude.Integer
+  set newValue ParametersProperty {..}
+    = ParametersProperty {usersNoisePerQuery = newValue, ..}
diff --git a/gen/Stratosphere/CleanRooms/PrivacyBudgetTemplate/ParametersProperty.hs-boot b/gen/Stratosphere/CleanRooms/PrivacyBudgetTemplate/ParametersProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CleanRooms/PrivacyBudgetTemplate/ParametersProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CleanRooms.PrivacyBudgetTemplate.ParametersProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ParametersProperty :: Prelude.Type
+instance ToResourceProperties ParametersProperty
+instance Prelude.Eq ParametersProperty
+instance Prelude.Show ParametersProperty
+instance JSON.ToJSON ParametersProperty
diff --git a/stratosphere-cleanrooms.cabal b/stratosphere-cleanrooms.cabal
new file mode 100644
--- /dev/null
+++ b/stratosphere-cleanrooms.cabal
@@ -0,0 +1,140 @@
+cabal-version: 1.12
+
+-- This file has been generated from package.yaml by hpack version 0.38.2.
+--
+-- see: https://github.com/sol/hpack
+
+name:           stratosphere-cleanrooms
+version:        1.0.0
+synopsis:       Stratosphere integration for AWS CleanRooms.
+description:    Integration into stratosphere to generate resources and properties for AWS CleanRooms
+category:       AWS, Cloud, CleanRooms
+stability:      experimental
+homepage:       https://github.com/mbj/stratosphere#readme
+bug-reports:    https://github.com/mbj/stratosphere/issues
+maintainer:     Markus Schirp
+license:        MIT
+license-file:   LICENSE.md
+build-type:     Simple
+
+source-repository head
+  type: git
+  location: https://github.com/mbj/stratosphere
+
+flag development
+  description: Run GHC with development flags
+  manual: True
+  default: False
+
+library
+  exposed-modules:
+      Stratosphere.CleanRooms.AnalysisTemplate
+      Stratosphere.CleanRooms.AnalysisTemplate.AnalysisParameterProperty
+      Stratosphere.CleanRooms.AnalysisTemplate.AnalysisSchemaProperty
+      Stratosphere.CleanRooms.AnalysisTemplate.AnalysisSourceMetadataProperty
+      Stratosphere.CleanRooms.AnalysisTemplate.AnalysisSourceProperty
+      Stratosphere.CleanRooms.AnalysisTemplate.AnalysisTemplateArtifactMetadataProperty
+      Stratosphere.CleanRooms.AnalysisTemplate.AnalysisTemplateArtifactProperty
+      Stratosphere.CleanRooms.AnalysisTemplate.AnalysisTemplateArtifactsProperty
+      Stratosphere.CleanRooms.AnalysisTemplate.ErrorMessageConfigurationProperty
+      Stratosphere.CleanRooms.AnalysisTemplate.HashProperty
+      Stratosphere.CleanRooms.AnalysisTemplate.S3LocationProperty
+      Stratosphere.CleanRooms.Collaboration
+      Stratosphere.CleanRooms.Collaboration.DataEncryptionMetadataProperty
+      Stratosphere.CleanRooms.Collaboration.JobComputePaymentConfigProperty
+      Stratosphere.CleanRooms.Collaboration.MemberSpecificationProperty
+      Stratosphere.CleanRooms.Collaboration.MLMemberAbilitiesProperty
+      Stratosphere.CleanRooms.Collaboration.MLPaymentConfigProperty
+      Stratosphere.CleanRooms.Collaboration.ModelInferencePaymentConfigProperty
+      Stratosphere.CleanRooms.Collaboration.ModelTrainingPaymentConfigProperty
+      Stratosphere.CleanRooms.Collaboration.PaymentConfigurationProperty
+      Stratosphere.CleanRooms.Collaboration.QueryComputePaymentConfigProperty
+      Stratosphere.CleanRooms.ConfiguredTable
+      Stratosphere.CleanRooms.ConfiguredTable.AggregateColumnProperty
+      Stratosphere.CleanRooms.ConfiguredTable.AggregationConstraintProperty
+      Stratosphere.CleanRooms.ConfiguredTable.AnalysisRuleAggregationProperty
+      Stratosphere.CleanRooms.ConfiguredTable.AnalysisRuleCustomProperty
+      Stratosphere.CleanRooms.ConfiguredTable.AnalysisRuleListProperty
+      Stratosphere.CleanRooms.ConfiguredTable.AnalysisRuleProperty
+      Stratosphere.CleanRooms.ConfiguredTable.AthenaTableReferenceProperty
+      Stratosphere.CleanRooms.ConfiguredTable.ConfiguredTableAnalysisRulePolicyProperty
+      Stratosphere.CleanRooms.ConfiguredTable.ConfiguredTableAnalysisRulePolicyV1Property
+      Stratosphere.CleanRooms.ConfiguredTable.DifferentialPrivacyColumnProperty
+      Stratosphere.CleanRooms.ConfiguredTable.DifferentialPrivacyProperty
+      Stratosphere.CleanRooms.ConfiguredTable.GlueTableReferenceProperty
+      Stratosphere.CleanRooms.ConfiguredTable.SnowflakeTableReferenceProperty
+      Stratosphere.CleanRooms.ConfiguredTable.SnowflakeTableSchemaProperty
+      Stratosphere.CleanRooms.ConfiguredTable.SnowflakeTableSchemaV1Property
+      Stratosphere.CleanRooms.ConfiguredTable.TableReferenceProperty
+      Stratosphere.CleanRooms.ConfiguredTableAssociation
+      Stratosphere.CleanRooms.ConfiguredTableAssociation.ConfiguredTableAssociationAnalysisRuleAggregationProperty
+      Stratosphere.CleanRooms.ConfiguredTableAssociation.ConfiguredTableAssociationAnalysisRuleCustomProperty
+      Stratosphere.CleanRooms.ConfiguredTableAssociation.ConfiguredTableAssociationAnalysisRuleListProperty
+      Stratosphere.CleanRooms.ConfiguredTableAssociation.ConfiguredTableAssociationAnalysisRulePolicyProperty
+      Stratosphere.CleanRooms.ConfiguredTableAssociation.ConfiguredTableAssociationAnalysisRulePolicyV1Property
+      Stratosphere.CleanRooms.ConfiguredTableAssociation.ConfiguredTableAssociationAnalysisRuleProperty
+      Stratosphere.CleanRooms.IdMappingTable
+      Stratosphere.CleanRooms.IdMappingTable.IdMappingTableInputReferenceConfigProperty
+      Stratosphere.CleanRooms.IdMappingTable.IdMappingTableInputReferencePropertiesProperty
+      Stratosphere.CleanRooms.IdMappingTable.IdMappingTableInputSourceProperty
+      Stratosphere.CleanRooms.IdNamespaceAssociation
+      Stratosphere.CleanRooms.IdNamespaceAssociation.IdMappingConfigProperty
+      Stratosphere.CleanRooms.IdNamespaceAssociation.IdNamespaceAssociationInputReferenceConfigProperty
+      Stratosphere.CleanRooms.IdNamespaceAssociation.IdNamespaceAssociationInputReferencePropertiesProperty
+      Stratosphere.CleanRooms.Membership
+      Stratosphere.CleanRooms.Membership.MembershipJobComputePaymentConfigProperty
+      Stratosphere.CleanRooms.Membership.MembershipMLPaymentConfigProperty
+      Stratosphere.CleanRooms.Membership.MembershipModelInferencePaymentConfigProperty
+      Stratosphere.CleanRooms.Membership.MembershipModelTrainingPaymentConfigProperty
+      Stratosphere.CleanRooms.Membership.MembershipPaymentConfigurationProperty
+      Stratosphere.CleanRooms.Membership.MembershipProtectedJobOutputConfigurationProperty
+      Stratosphere.CleanRooms.Membership.MembershipProtectedJobResultConfigurationProperty
+      Stratosphere.CleanRooms.Membership.MembershipProtectedQueryOutputConfigurationProperty
+      Stratosphere.CleanRooms.Membership.MembershipProtectedQueryResultConfigurationProperty
+      Stratosphere.CleanRooms.Membership.MembershipQueryComputePaymentConfigProperty
+      Stratosphere.CleanRooms.Membership.ProtectedJobS3OutputConfigurationInputProperty
+      Stratosphere.CleanRooms.Membership.ProtectedQueryS3OutputConfigurationProperty
+      Stratosphere.CleanRooms.PrivacyBudgetTemplate
+      Stratosphere.CleanRooms.PrivacyBudgetTemplate.ParametersProperty
+  other-modules:
+      Paths_stratosphere_cleanrooms
+  hs-source-dirs:
+      gen
+  default-extensions:
+      DataKinds
+      DeriveGeneric
+      DerivingStrategies
+      DerivingVia
+      DuplicateRecordFields
+      FlexibleContexts
+      FlexibleInstances
+      GADTs
+      GeneralizedNewtypeDeriving
+      InstanceSigs
+      LambdaCase
+      MultiParamTypeClasses
+      NoFieldSelectors
+      NoImplicitPrelude
+      NumericUnderscores
+      OverloadedLists
+      OverloadedRecordDot
+      OverloadedStrings
+      PolyKinds
+      RecordWildCards
+      ScopedTypeVariables
+      StandaloneDeriving
+      Strict
+      TemplateHaskell
+      TupleSections
+      TypeApplications
+      TypeFamilies
+  ghc-options: -Wall -Wcompat -Widentities -Wimplicit-prelude -Wincomplete-record-updates -Wincomplete-uni-patterns -Wmissing-local-signatures -Wmissing-signatures -Wmonomorphism-restriction -Wredundant-constraints -fhide-source-paths -funbox-strict-fields -optP-Wno-nonportable-include-path -Wno-unused-imports
+  build-depends:
+      aeson ==2.*
+    , base >=4.8 && <4.22
+    , stratosphere ==1.0.0
+  default-language: Haskell2010
+  if flag(development)
+    ghc-options: -Werror
+  else
+    ghc-options: -Wwarn
