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/DLM/LifecyclePolicy.hs b/gen/Stratosphere/DLM/LifecyclePolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy.hs
@@ -0,0 +1,138 @@
+module Stratosphere.DLM.LifecyclePolicy (
+        module Exports, LifecyclePolicy(..), mkLifecyclePolicy
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DLM.LifecyclePolicy.CrossRegionCopyTargetsProperty as Exports
+import {-# SOURCE #-} Stratosphere.DLM.LifecyclePolicy.ExclusionsProperty as Exports
+import {-# SOURCE #-} Stratosphere.DLM.LifecyclePolicy.PolicyDetailsProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data LifecyclePolicy
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dlm-lifecyclepolicy.html>
+    LifecyclePolicy {haddock_workaround_ :: (),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dlm-lifecyclepolicy.html#cfn-dlm-lifecyclepolicy-copytags>
+                     copyTags :: (Prelude.Maybe (Value Prelude.Bool)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dlm-lifecyclepolicy.html#cfn-dlm-lifecyclepolicy-createinterval>
+                     createInterval :: (Prelude.Maybe (Value Prelude.Integer)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dlm-lifecyclepolicy.html#cfn-dlm-lifecyclepolicy-crossregioncopytargets>
+                     crossRegionCopyTargets :: (Prelude.Maybe CrossRegionCopyTargetsProperty),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dlm-lifecyclepolicy.html#cfn-dlm-lifecyclepolicy-defaultpolicy>
+                     defaultPolicy :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dlm-lifecyclepolicy.html#cfn-dlm-lifecyclepolicy-description>
+                     description :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dlm-lifecyclepolicy.html#cfn-dlm-lifecyclepolicy-exclusions>
+                     exclusions :: (Prelude.Maybe ExclusionsProperty),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dlm-lifecyclepolicy.html#cfn-dlm-lifecyclepolicy-executionrolearn>
+                     executionRoleArn :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dlm-lifecyclepolicy.html#cfn-dlm-lifecyclepolicy-extenddeletion>
+                     extendDeletion :: (Prelude.Maybe (Value Prelude.Bool)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dlm-lifecyclepolicy.html#cfn-dlm-lifecyclepolicy-policydetails>
+                     policyDetails :: (Prelude.Maybe PolicyDetailsProperty),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dlm-lifecyclepolicy.html#cfn-dlm-lifecyclepolicy-retaininterval>
+                     retainInterval :: (Prelude.Maybe (Value Prelude.Integer)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dlm-lifecyclepolicy.html#cfn-dlm-lifecyclepolicy-state>
+                     state :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dlm-lifecyclepolicy.html#cfn-dlm-lifecyclepolicy-tags>
+                     tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLifecyclePolicy :: LifecyclePolicy
+mkLifecyclePolicy
+  = LifecyclePolicy
+      {haddock_workaround_ = (), copyTags = Prelude.Nothing,
+       createInterval = Prelude.Nothing,
+       crossRegionCopyTargets = Prelude.Nothing,
+       defaultPolicy = Prelude.Nothing, description = Prelude.Nothing,
+       exclusions = Prelude.Nothing, executionRoleArn = Prelude.Nothing,
+       extendDeletion = Prelude.Nothing, policyDetails = Prelude.Nothing,
+       retainInterval = Prelude.Nothing, state = Prelude.Nothing,
+       tags = Prelude.Nothing}
+instance ToResourceProperties LifecyclePolicy where
+  toResourceProperties LifecyclePolicy {..}
+    = ResourceProperties
+        {awsType = "AWS::DLM::LifecyclePolicy",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CopyTags" Prelude.<$> copyTags,
+                            (JSON..=) "CreateInterval" Prelude.<$> createInterval,
+                            (JSON..=) "CrossRegionCopyTargets"
+                              Prelude.<$> crossRegionCopyTargets,
+                            (JSON..=) "DefaultPolicy" Prelude.<$> defaultPolicy,
+                            (JSON..=) "Description" Prelude.<$> description,
+                            (JSON..=) "Exclusions" Prelude.<$> exclusions,
+                            (JSON..=) "ExecutionRoleArn" Prelude.<$> executionRoleArn,
+                            (JSON..=) "ExtendDeletion" Prelude.<$> extendDeletion,
+                            (JSON..=) "PolicyDetails" Prelude.<$> policyDetails,
+                            (JSON..=) "RetainInterval" Prelude.<$> retainInterval,
+                            (JSON..=) "State" Prelude.<$> state,
+                            (JSON..=) "Tags" Prelude.<$> tags])}
+instance JSON.ToJSON LifecyclePolicy where
+  toJSON LifecyclePolicy {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CopyTags" Prelude.<$> copyTags,
+               (JSON..=) "CreateInterval" Prelude.<$> createInterval,
+               (JSON..=) "CrossRegionCopyTargets"
+                 Prelude.<$> crossRegionCopyTargets,
+               (JSON..=) "DefaultPolicy" Prelude.<$> defaultPolicy,
+               (JSON..=) "Description" Prelude.<$> description,
+               (JSON..=) "Exclusions" Prelude.<$> exclusions,
+               (JSON..=) "ExecutionRoleArn" Prelude.<$> executionRoleArn,
+               (JSON..=) "ExtendDeletion" Prelude.<$> extendDeletion,
+               (JSON..=) "PolicyDetails" Prelude.<$> policyDetails,
+               (JSON..=) "RetainInterval" Prelude.<$> retainInterval,
+               (JSON..=) "State" Prelude.<$> state,
+               (JSON..=) "Tags" Prelude.<$> tags]))
+instance Property "CopyTags" LifecyclePolicy where
+  type PropertyType "CopyTags" LifecyclePolicy = Value Prelude.Bool
+  set newValue LifecyclePolicy {..}
+    = LifecyclePolicy {copyTags = Prelude.pure newValue, ..}
+instance Property "CreateInterval" LifecyclePolicy where
+  type PropertyType "CreateInterval" LifecyclePolicy = Value Prelude.Integer
+  set newValue LifecyclePolicy {..}
+    = LifecyclePolicy {createInterval = Prelude.pure newValue, ..}
+instance Property "CrossRegionCopyTargets" LifecyclePolicy where
+  type PropertyType "CrossRegionCopyTargets" LifecyclePolicy = CrossRegionCopyTargetsProperty
+  set newValue LifecyclePolicy {..}
+    = LifecyclePolicy
+        {crossRegionCopyTargets = Prelude.pure newValue, ..}
+instance Property "DefaultPolicy" LifecyclePolicy where
+  type PropertyType "DefaultPolicy" LifecyclePolicy = Value Prelude.Text
+  set newValue LifecyclePolicy {..}
+    = LifecyclePolicy {defaultPolicy = Prelude.pure newValue, ..}
+instance Property "Description" LifecyclePolicy where
+  type PropertyType "Description" LifecyclePolicy = Value Prelude.Text
+  set newValue LifecyclePolicy {..}
+    = LifecyclePolicy {description = Prelude.pure newValue, ..}
+instance Property "Exclusions" LifecyclePolicy where
+  type PropertyType "Exclusions" LifecyclePolicy = ExclusionsProperty
+  set newValue LifecyclePolicy {..}
+    = LifecyclePolicy {exclusions = Prelude.pure newValue, ..}
+instance Property "ExecutionRoleArn" LifecyclePolicy where
+  type PropertyType "ExecutionRoleArn" LifecyclePolicy = Value Prelude.Text
+  set newValue LifecyclePolicy {..}
+    = LifecyclePolicy {executionRoleArn = Prelude.pure newValue, ..}
+instance Property "ExtendDeletion" LifecyclePolicy where
+  type PropertyType "ExtendDeletion" LifecyclePolicy = Value Prelude.Bool
+  set newValue LifecyclePolicy {..}
+    = LifecyclePolicy {extendDeletion = Prelude.pure newValue, ..}
+instance Property "PolicyDetails" LifecyclePolicy where
+  type PropertyType "PolicyDetails" LifecyclePolicy = PolicyDetailsProperty
+  set newValue LifecyclePolicy {..}
+    = LifecyclePolicy {policyDetails = Prelude.pure newValue, ..}
+instance Property "RetainInterval" LifecyclePolicy where
+  type PropertyType "RetainInterval" LifecyclePolicy = Value Prelude.Integer
+  set newValue LifecyclePolicy {..}
+    = LifecyclePolicy {retainInterval = Prelude.pure newValue, ..}
+instance Property "State" LifecyclePolicy where
+  type PropertyType "State" LifecyclePolicy = Value Prelude.Text
+  set newValue LifecyclePolicy {..}
+    = LifecyclePolicy {state = Prelude.pure newValue, ..}
+instance Property "Tags" LifecyclePolicy where
+  type PropertyType "Tags" LifecyclePolicy = [Tag]
+  set newValue LifecyclePolicy {..}
+    = LifecyclePolicy {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/ActionProperty.hs b/gen/Stratosphere/DLM/LifecyclePolicy/ActionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/ActionProperty.hs
@@ -0,0 +1,43 @@
+module Stratosphere.DLM.LifecyclePolicy.ActionProperty (
+        module Exports, ActionProperty(..), mkActionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DLM.LifecyclePolicy.CrossRegionCopyActionProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ActionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-action.html>
+    ActionProperty {haddock_workaround_ :: (),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-action.html#cfn-dlm-lifecyclepolicy-action-crossregioncopy>
+                    crossRegionCopy :: [CrossRegionCopyActionProperty],
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-action.html#cfn-dlm-lifecyclepolicy-action-name>
+                    name :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkActionProperty ::
+  [CrossRegionCopyActionProperty]
+  -> Value Prelude.Text -> ActionProperty
+mkActionProperty crossRegionCopy name
+  = ActionProperty
+      {haddock_workaround_ = (), crossRegionCopy = crossRegionCopy,
+       name = name}
+instance ToResourceProperties ActionProperty where
+  toResourceProperties ActionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DLM::LifecyclePolicy.Action",
+         supportsTags = Prelude.False,
+         properties = ["CrossRegionCopy" JSON..= crossRegionCopy,
+                       "Name" JSON..= name]}
+instance JSON.ToJSON ActionProperty where
+  toJSON ActionProperty {..}
+    = JSON.object
+        ["CrossRegionCopy" JSON..= crossRegionCopy, "Name" JSON..= name]
+instance Property "CrossRegionCopy" ActionProperty where
+  type PropertyType "CrossRegionCopy" ActionProperty = [CrossRegionCopyActionProperty]
+  set newValue ActionProperty {..}
+    = ActionProperty {crossRegionCopy = newValue, ..}
+instance Property "Name" ActionProperty where
+  type PropertyType "Name" ActionProperty = Value Prelude.Text
+  set newValue ActionProperty {..}
+    = ActionProperty {name = newValue, ..}
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/ActionProperty.hs-boot b/gen/Stratosphere/DLM/LifecyclePolicy/ActionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/ActionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DLM.LifecyclePolicy.ActionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ActionProperty :: Prelude.Type
+instance ToResourceProperties ActionProperty
+instance Prelude.Eq ActionProperty
+instance Prelude.Show ActionProperty
+instance JSON.ToJSON ActionProperty
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/ArchiveRetainRuleProperty.hs b/gen/Stratosphere/DLM/LifecyclePolicy/ArchiveRetainRuleProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/ArchiveRetainRuleProperty.hs
@@ -0,0 +1,34 @@
+module Stratosphere.DLM.LifecyclePolicy.ArchiveRetainRuleProperty (
+        module Exports, ArchiveRetainRuleProperty(..),
+        mkArchiveRetainRuleProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DLM.LifecyclePolicy.RetentionArchiveTierProperty as Exports
+import Stratosphere.ResourceProperties
+data ArchiveRetainRuleProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-archiveretainrule.html>
+    ArchiveRetainRuleProperty {haddock_workaround_ :: (),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-archiveretainrule.html#cfn-dlm-lifecyclepolicy-archiveretainrule-retentionarchivetier>
+                               retentionArchiveTier :: RetentionArchiveTierProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkArchiveRetainRuleProperty ::
+  RetentionArchiveTierProperty -> ArchiveRetainRuleProperty
+mkArchiveRetainRuleProperty retentionArchiveTier
+  = ArchiveRetainRuleProperty
+      {haddock_workaround_ = (),
+       retentionArchiveTier = retentionArchiveTier}
+instance ToResourceProperties ArchiveRetainRuleProperty where
+  toResourceProperties ArchiveRetainRuleProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DLM::LifecyclePolicy.ArchiveRetainRule",
+         supportsTags = Prelude.False,
+         properties = ["RetentionArchiveTier" JSON..= retentionArchiveTier]}
+instance JSON.ToJSON ArchiveRetainRuleProperty where
+  toJSON ArchiveRetainRuleProperty {..}
+    = JSON.object ["RetentionArchiveTier" JSON..= retentionArchiveTier]
+instance Property "RetentionArchiveTier" ArchiveRetainRuleProperty where
+  type PropertyType "RetentionArchiveTier" ArchiveRetainRuleProperty = RetentionArchiveTierProperty
+  set newValue ArchiveRetainRuleProperty {..}
+    = ArchiveRetainRuleProperty {retentionArchiveTier = newValue, ..}
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/ArchiveRetainRuleProperty.hs-boot b/gen/Stratosphere/DLM/LifecyclePolicy/ArchiveRetainRuleProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/ArchiveRetainRuleProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DLM.LifecyclePolicy.ArchiveRetainRuleProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ArchiveRetainRuleProperty :: Prelude.Type
+instance ToResourceProperties ArchiveRetainRuleProperty
+instance Prelude.Eq ArchiveRetainRuleProperty
+instance Prelude.Show ArchiveRetainRuleProperty
+instance JSON.ToJSON ArchiveRetainRuleProperty
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/ArchiveRuleProperty.hs b/gen/Stratosphere/DLM/LifecyclePolicy/ArchiveRuleProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/ArchiveRuleProperty.hs
@@ -0,0 +1,32 @@
+module Stratosphere.DLM.LifecyclePolicy.ArchiveRuleProperty (
+        module Exports, ArchiveRuleProperty(..), mkArchiveRuleProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DLM.LifecyclePolicy.ArchiveRetainRuleProperty as Exports
+import Stratosphere.ResourceProperties
+data ArchiveRuleProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-archiverule.html>
+    ArchiveRuleProperty {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-archiverule.html#cfn-dlm-lifecyclepolicy-archiverule-retainrule>
+                         retainRule :: ArchiveRetainRuleProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkArchiveRuleProperty ::
+  ArchiveRetainRuleProperty -> ArchiveRuleProperty
+mkArchiveRuleProperty retainRule
+  = ArchiveRuleProperty
+      {haddock_workaround_ = (), retainRule = retainRule}
+instance ToResourceProperties ArchiveRuleProperty where
+  toResourceProperties ArchiveRuleProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DLM::LifecyclePolicy.ArchiveRule",
+         supportsTags = Prelude.False,
+         properties = ["RetainRule" JSON..= retainRule]}
+instance JSON.ToJSON ArchiveRuleProperty where
+  toJSON ArchiveRuleProperty {..}
+    = JSON.object ["RetainRule" JSON..= retainRule]
+instance Property "RetainRule" ArchiveRuleProperty where
+  type PropertyType "RetainRule" ArchiveRuleProperty = ArchiveRetainRuleProperty
+  set newValue ArchiveRuleProperty {..}
+    = ArchiveRuleProperty {retainRule = newValue, ..}
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/ArchiveRuleProperty.hs-boot b/gen/Stratosphere/DLM/LifecyclePolicy/ArchiveRuleProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/ArchiveRuleProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DLM.LifecyclePolicy.ArchiveRuleProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ArchiveRuleProperty :: Prelude.Type
+instance ToResourceProperties ArchiveRuleProperty
+instance Prelude.Eq ArchiveRuleProperty
+instance Prelude.Show ArchiveRuleProperty
+instance JSON.ToJSON ArchiveRuleProperty
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/CreateRuleProperty.hs b/gen/Stratosphere/DLM/LifecyclePolicy/CreateRuleProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/CreateRuleProperty.hs
@@ -0,0 +1,80 @@
+module Stratosphere.DLM.LifecyclePolicy.CreateRuleProperty (
+        module Exports, CreateRuleProperty(..), mkCreateRuleProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DLM.LifecyclePolicy.ScriptProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CreateRuleProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-createrule.html>
+    CreateRuleProperty {haddock_workaround_ :: (),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-createrule.html#cfn-dlm-lifecyclepolicy-createrule-cronexpression>
+                        cronExpression :: (Prelude.Maybe (Value Prelude.Text)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-createrule.html#cfn-dlm-lifecyclepolicy-createrule-interval>
+                        interval :: (Prelude.Maybe (Value Prelude.Integer)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-createrule.html#cfn-dlm-lifecyclepolicy-createrule-intervalunit>
+                        intervalUnit :: (Prelude.Maybe (Value Prelude.Text)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-createrule.html#cfn-dlm-lifecyclepolicy-createrule-location>
+                        location :: (Prelude.Maybe (Value Prelude.Text)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-createrule.html#cfn-dlm-lifecyclepolicy-createrule-scripts>
+                        scripts :: (Prelude.Maybe [ScriptProperty]),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-createrule.html#cfn-dlm-lifecyclepolicy-createrule-times>
+                        times :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCreateRuleProperty :: CreateRuleProperty
+mkCreateRuleProperty
+  = CreateRuleProperty
+      {haddock_workaround_ = (), cronExpression = Prelude.Nothing,
+       interval = Prelude.Nothing, intervalUnit = Prelude.Nothing,
+       location = Prelude.Nothing, scripts = Prelude.Nothing,
+       times = Prelude.Nothing}
+instance ToResourceProperties CreateRuleProperty where
+  toResourceProperties CreateRuleProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DLM::LifecyclePolicy.CreateRule",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CronExpression" Prelude.<$> cronExpression,
+                            (JSON..=) "Interval" Prelude.<$> interval,
+                            (JSON..=) "IntervalUnit" Prelude.<$> intervalUnit,
+                            (JSON..=) "Location" Prelude.<$> location,
+                            (JSON..=) "Scripts" Prelude.<$> scripts,
+                            (JSON..=) "Times" Prelude.<$> times])}
+instance JSON.ToJSON CreateRuleProperty where
+  toJSON CreateRuleProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CronExpression" Prelude.<$> cronExpression,
+               (JSON..=) "Interval" Prelude.<$> interval,
+               (JSON..=) "IntervalUnit" Prelude.<$> intervalUnit,
+               (JSON..=) "Location" Prelude.<$> location,
+               (JSON..=) "Scripts" Prelude.<$> scripts,
+               (JSON..=) "Times" Prelude.<$> times]))
+instance Property "CronExpression" CreateRuleProperty where
+  type PropertyType "CronExpression" CreateRuleProperty = Value Prelude.Text
+  set newValue CreateRuleProperty {..}
+    = CreateRuleProperty {cronExpression = Prelude.pure newValue, ..}
+instance Property "Interval" CreateRuleProperty where
+  type PropertyType "Interval" CreateRuleProperty = Value Prelude.Integer
+  set newValue CreateRuleProperty {..}
+    = CreateRuleProperty {interval = Prelude.pure newValue, ..}
+instance Property "IntervalUnit" CreateRuleProperty where
+  type PropertyType "IntervalUnit" CreateRuleProperty = Value Prelude.Text
+  set newValue CreateRuleProperty {..}
+    = CreateRuleProperty {intervalUnit = Prelude.pure newValue, ..}
+instance Property "Location" CreateRuleProperty where
+  type PropertyType "Location" CreateRuleProperty = Value Prelude.Text
+  set newValue CreateRuleProperty {..}
+    = CreateRuleProperty {location = Prelude.pure newValue, ..}
+instance Property "Scripts" CreateRuleProperty where
+  type PropertyType "Scripts" CreateRuleProperty = [ScriptProperty]
+  set newValue CreateRuleProperty {..}
+    = CreateRuleProperty {scripts = Prelude.pure newValue, ..}
+instance Property "Times" CreateRuleProperty where
+  type PropertyType "Times" CreateRuleProperty = ValueList Prelude.Text
+  set newValue CreateRuleProperty {..}
+    = CreateRuleProperty {times = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/CreateRuleProperty.hs-boot b/gen/Stratosphere/DLM/LifecyclePolicy/CreateRuleProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/CreateRuleProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DLM.LifecyclePolicy.CreateRuleProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CreateRuleProperty :: Prelude.Type
+instance ToResourceProperties CreateRuleProperty
+instance Prelude.Eq CreateRuleProperty
+instance Prelude.Show CreateRuleProperty
+instance JSON.ToJSON CreateRuleProperty
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/CrossRegionCopyActionProperty.hs b/gen/Stratosphere/DLM/LifecyclePolicy/CrossRegionCopyActionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/CrossRegionCopyActionProperty.hs
@@ -0,0 +1,63 @@
+module Stratosphere.DLM.LifecyclePolicy.CrossRegionCopyActionProperty (
+        module Exports, CrossRegionCopyActionProperty(..),
+        mkCrossRegionCopyActionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DLM.LifecyclePolicy.CrossRegionCopyRetainRuleProperty as Exports
+import {-# SOURCE #-} Stratosphere.DLM.LifecyclePolicy.EncryptionConfigurationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CrossRegionCopyActionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-crossregioncopyaction.html>
+    CrossRegionCopyActionProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-crossregioncopyaction.html#cfn-dlm-lifecyclepolicy-crossregioncopyaction-encryptionconfiguration>
+                                   encryptionConfiguration :: EncryptionConfigurationProperty,
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-crossregioncopyaction.html#cfn-dlm-lifecyclepolicy-crossregioncopyaction-retainrule>
+                                   retainRule :: (Prelude.Maybe CrossRegionCopyRetainRuleProperty),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-crossregioncopyaction.html#cfn-dlm-lifecyclepolicy-crossregioncopyaction-target>
+                                   target :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCrossRegionCopyActionProperty ::
+  EncryptionConfigurationProperty
+  -> Value Prelude.Text -> CrossRegionCopyActionProperty
+mkCrossRegionCopyActionProperty encryptionConfiguration target
+  = CrossRegionCopyActionProperty
+      {haddock_workaround_ = (),
+       encryptionConfiguration = encryptionConfiguration, target = target,
+       retainRule = Prelude.Nothing}
+instance ToResourceProperties CrossRegionCopyActionProperty where
+  toResourceProperties CrossRegionCopyActionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DLM::LifecyclePolicy.CrossRegionCopyAction",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["EncryptionConfiguration" JSON..= encryptionConfiguration,
+                            "Target" JSON..= target]
+                           (Prelude.catMaybes
+                              [(JSON..=) "RetainRule" Prelude.<$> retainRule]))}
+instance JSON.ToJSON CrossRegionCopyActionProperty where
+  toJSON CrossRegionCopyActionProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["EncryptionConfiguration" JSON..= encryptionConfiguration,
+               "Target" JSON..= target]
+              (Prelude.catMaybes
+                 [(JSON..=) "RetainRule" Prelude.<$> retainRule])))
+instance Property "EncryptionConfiguration" CrossRegionCopyActionProperty where
+  type PropertyType "EncryptionConfiguration" CrossRegionCopyActionProperty = EncryptionConfigurationProperty
+  set newValue CrossRegionCopyActionProperty {..}
+    = CrossRegionCopyActionProperty
+        {encryptionConfiguration = newValue, ..}
+instance Property "RetainRule" CrossRegionCopyActionProperty where
+  type PropertyType "RetainRule" CrossRegionCopyActionProperty = CrossRegionCopyRetainRuleProperty
+  set newValue CrossRegionCopyActionProperty {..}
+    = CrossRegionCopyActionProperty
+        {retainRule = Prelude.pure newValue, ..}
+instance Property "Target" CrossRegionCopyActionProperty where
+  type PropertyType "Target" CrossRegionCopyActionProperty = Value Prelude.Text
+  set newValue CrossRegionCopyActionProperty {..}
+    = CrossRegionCopyActionProperty {target = newValue, ..}
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/CrossRegionCopyActionProperty.hs-boot b/gen/Stratosphere/DLM/LifecyclePolicy/CrossRegionCopyActionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/CrossRegionCopyActionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DLM.LifecyclePolicy.CrossRegionCopyActionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CrossRegionCopyActionProperty :: Prelude.Type
+instance ToResourceProperties CrossRegionCopyActionProperty
+instance Prelude.Eq CrossRegionCopyActionProperty
+instance Prelude.Show CrossRegionCopyActionProperty
+instance JSON.ToJSON CrossRegionCopyActionProperty
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/CrossRegionCopyDeprecateRuleProperty.hs b/gen/Stratosphere/DLM/LifecyclePolicy/CrossRegionCopyDeprecateRuleProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/CrossRegionCopyDeprecateRuleProperty.hs
@@ -0,0 +1,44 @@
+module Stratosphere.DLM.LifecyclePolicy.CrossRegionCopyDeprecateRuleProperty (
+        CrossRegionCopyDeprecateRuleProperty(..),
+        mkCrossRegionCopyDeprecateRuleProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CrossRegionCopyDeprecateRuleProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-crossregioncopydeprecaterule.html>
+    CrossRegionCopyDeprecateRuleProperty {haddock_workaround_ :: (),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-crossregioncopydeprecaterule.html#cfn-dlm-lifecyclepolicy-crossregioncopydeprecaterule-interval>
+                                          interval :: (Value Prelude.Integer),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-crossregioncopydeprecaterule.html#cfn-dlm-lifecyclepolicy-crossregioncopydeprecaterule-intervalunit>
+                                          intervalUnit :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCrossRegionCopyDeprecateRuleProperty ::
+  Value Prelude.Integer
+  -> Value Prelude.Text -> CrossRegionCopyDeprecateRuleProperty
+mkCrossRegionCopyDeprecateRuleProperty interval intervalUnit
+  = CrossRegionCopyDeprecateRuleProperty
+      {haddock_workaround_ = (), interval = interval,
+       intervalUnit = intervalUnit}
+instance ToResourceProperties CrossRegionCopyDeprecateRuleProperty where
+  toResourceProperties CrossRegionCopyDeprecateRuleProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DLM::LifecyclePolicy.CrossRegionCopyDeprecateRule",
+         supportsTags = Prelude.False,
+         properties = ["Interval" JSON..= interval,
+                       "IntervalUnit" JSON..= intervalUnit]}
+instance JSON.ToJSON CrossRegionCopyDeprecateRuleProperty where
+  toJSON CrossRegionCopyDeprecateRuleProperty {..}
+    = JSON.object
+        ["Interval" JSON..= interval, "IntervalUnit" JSON..= intervalUnit]
+instance Property "Interval" CrossRegionCopyDeprecateRuleProperty where
+  type PropertyType "Interval" CrossRegionCopyDeprecateRuleProperty = Value Prelude.Integer
+  set newValue CrossRegionCopyDeprecateRuleProperty {..}
+    = CrossRegionCopyDeprecateRuleProperty {interval = newValue, ..}
+instance Property "IntervalUnit" CrossRegionCopyDeprecateRuleProperty where
+  type PropertyType "IntervalUnit" CrossRegionCopyDeprecateRuleProperty = Value Prelude.Text
+  set newValue CrossRegionCopyDeprecateRuleProperty {..}
+    = CrossRegionCopyDeprecateRuleProperty
+        {intervalUnit = newValue, ..}
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/CrossRegionCopyDeprecateRuleProperty.hs-boot b/gen/Stratosphere/DLM/LifecyclePolicy/CrossRegionCopyDeprecateRuleProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/CrossRegionCopyDeprecateRuleProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DLM.LifecyclePolicy.CrossRegionCopyDeprecateRuleProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CrossRegionCopyDeprecateRuleProperty :: Prelude.Type
+instance ToResourceProperties CrossRegionCopyDeprecateRuleProperty
+instance Prelude.Eq CrossRegionCopyDeprecateRuleProperty
+instance Prelude.Show CrossRegionCopyDeprecateRuleProperty
+instance JSON.ToJSON CrossRegionCopyDeprecateRuleProperty
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/CrossRegionCopyRetainRuleProperty.hs b/gen/Stratosphere/DLM/LifecyclePolicy/CrossRegionCopyRetainRuleProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/CrossRegionCopyRetainRuleProperty.hs
@@ -0,0 +1,43 @@
+module Stratosphere.DLM.LifecyclePolicy.CrossRegionCopyRetainRuleProperty (
+        CrossRegionCopyRetainRuleProperty(..),
+        mkCrossRegionCopyRetainRuleProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CrossRegionCopyRetainRuleProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-crossregioncopyretainrule.html>
+    CrossRegionCopyRetainRuleProperty {haddock_workaround_ :: (),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-crossregioncopyretainrule.html#cfn-dlm-lifecyclepolicy-crossregioncopyretainrule-interval>
+                                       interval :: (Value Prelude.Integer),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-crossregioncopyretainrule.html#cfn-dlm-lifecyclepolicy-crossregioncopyretainrule-intervalunit>
+                                       intervalUnit :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCrossRegionCopyRetainRuleProperty ::
+  Value Prelude.Integer
+  -> Value Prelude.Text -> CrossRegionCopyRetainRuleProperty
+mkCrossRegionCopyRetainRuleProperty interval intervalUnit
+  = CrossRegionCopyRetainRuleProperty
+      {haddock_workaround_ = (), interval = interval,
+       intervalUnit = intervalUnit}
+instance ToResourceProperties CrossRegionCopyRetainRuleProperty where
+  toResourceProperties CrossRegionCopyRetainRuleProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DLM::LifecyclePolicy.CrossRegionCopyRetainRule",
+         supportsTags = Prelude.False,
+         properties = ["Interval" JSON..= interval,
+                       "IntervalUnit" JSON..= intervalUnit]}
+instance JSON.ToJSON CrossRegionCopyRetainRuleProperty where
+  toJSON CrossRegionCopyRetainRuleProperty {..}
+    = JSON.object
+        ["Interval" JSON..= interval, "IntervalUnit" JSON..= intervalUnit]
+instance Property "Interval" CrossRegionCopyRetainRuleProperty where
+  type PropertyType "Interval" CrossRegionCopyRetainRuleProperty = Value Prelude.Integer
+  set newValue CrossRegionCopyRetainRuleProperty {..}
+    = CrossRegionCopyRetainRuleProperty {interval = newValue, ..}
+instance Property "IntervalUnit" CrossRegionCopyRetainRuleProperty where
+  type PropertyType "IntervalUnit" CrossRegionCopyRetainRuleProperty = Value Prelude.Text
+  set newValue CrossRegionCopyRetainRuleProperty {..}
+    = CrossRegionCopyRetainRuleProperty {intervalUnit = newValue, ..}
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/CrossRegionCopyRetainRuleProperty.hs-boot b/gen/Stratosphere/DLM/LifecyclePolicy/CrossRegionCopyRetainRuleProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/CrossRegionCopyRetainRuleProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DLM.LifecyclePolicy.CrossRegionCopyRetainRuleProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CrossRegionCopyRetainRuleProperty :: Prelude.Type
+instance ToResourceProperties CrossRegionCopyRetainRuleProperty
+instance Prelude.Eq CrossRegionCopyRetainRuleProperty
+instance Prelude.Show CrossRegionCopyRetainRuleProperty
+instance JSON.ToJSON CrossRegionCopyRetainRuleProperty
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/CrossRegionCopyRuleProperty.hs b/gen/Stratosphere/DLM/LifecyclePolicy/CrossRegionCopyRuleProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/CrossRegionCopyRuleProperty.hs
@@ -0,0 +1,97 @@
+module Stratosphere.DLM.LifecyclePolicy.CrossRegionCopyRuleProperty (
+        module Exports, CrossRegionCopyRuleProperty(..),
+        mkCrossRegionCopyRuleProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DLM.LifecyclePolicy.CrossRegionCopyDeprecateRuleProperty as Exports
+import {-# SOURCE #-} Stratosphere.DLM.LifecyclePolicy.CrossRegionCopyRetainRuleProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CrossRegionCopyRuleProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-crossregioncopyrule.html>
+    CrossRegionCopyRuleProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-crossregioncopyrule.html#cfn-dlm-lifecyclepolicy-crossregioncopyrule-cmkarn>
+                                 cmkArn :: (Prelude.Maybe (Value Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-crossregioncopyrule.html#cfn-dlm-lifecyclepolicy-crossregioncopyrule-copytags>
+                                 copyTags :: (Prelude.Maybe (Value Prelude.Bool)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-crossregioncopyrule.html#cfn-dlm-lifecyclepolicy-crossregioncopyrule-deprecaterule>
+                                 deprecateRule :: (Prelude.Maybe CrossRegionCopyDeprecateRuleProperty),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-crossregioncopyrule.html#cfn-dlm-lifecyclepolicy-crossregioncopyrule-encrypted>
+                                 encrypted :: (Value Prelude.Bool),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-crossregioncopyrule.html#cfn-dlm-lifecyclepolicy-crossregioncopyrule-retainrule>
+                                 retainRule :: (Prelude.Maybe CrossRegionCopyRetainRuleProperty),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-crossregioncopyrule.html#cfn-dlm-lifecyclepolicy-crossregioncopyrule-target>
+                                 target :: (Prelude.Maybe (Value Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-crossregioncopyrule.html#cfn-dlm-lifecyclepolicy-crossregioncopyrule-targetregion>
+                                 targetRegion :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCrossRegionCopyRuleProperty ::
+  Value Prelude.Bool -> CrossRegionCopyRuleProperty
+mkCrossRegionCopyRuleProperty encrypted
+  = CrossRegionCopyRuleProperty
+      {haddock_workaround_ = (), encrypted = encrypted,
+       cmkArn = Prelude.Nothing, copyTags = Prelude.Nothing,
+       deprecateRule = Prelude.Nothing, retainRule = Prelude.Nothing,
+       target = Prelude.Nothing, targetRegion = Prelude.Nothing}
+instance ToResourceProperties CrossRegionCopyRuleProperty where
+  toResourceProperties CrossRegionCopyRuleProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DLM::LifecyclePolicy.CrossRegionCopyRule",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Encrypted" JSON..= encrypted]
+                           (Prelude.catMaybes
+                              [(JSON..=) "CmkArn" Prelude.<$> cmkArn,
+                               (JSON..=) "CopyTags" Prelude.<$> copyTags,
+                               (JSON..=) "DeprecateRule" Prelude.<$> deprecateRule,
+                               (JSON..=) "RetainRule" Prelude.<$> retainRule,
+                               (JSON..=) "Target" Prelude.<$> target,
+                               (JSON..=) "TargetRegion" Prelude.<$> targetRegion]))}
+instance JSON.ToJSON CrossRegionCopyRuleProperty where
+  toJSON CrossRegionCopyRuleProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Encrypted" JSON..= encrypted]
+              (Prelude.catMaybes
+                 [(JSON..=) "CmkArn" Prelude.<$> cmkArn,
+                  (JSON..=) "CopyTags" Prelude.<$> copyTags,
+                  (JSON..=) "DeprecateRule" Prelude.<$> deprecateRule,
+                  (JSON..=) "RetainRule" Prelude.<$> retainRule,
+                  (JSON..=) "Target" Prelude.<$> target,
+                  (JSON..=) "TargetRegion" Prelude.<$> targetRegion])))
+instance Property "CmkArn" CrossRegionCopyRuleProperty where
+  type PropertyType "CmkArn" CrossRegionCopyRuleProperty = Value Prelude.Text
+  set newValue CrossRegionCopyRuleProperty {..}
+    = CrossRegionCopyRuleProperty {cmkArn = Prelude.pure newValue, ..}
+instance Property "CopyTags" CrossRegionCopyRuleProperty where
+  type PropertyType "CopyTags" CrossRegionCopyRuleProperty = Value Prelude.Bool
+  set newValue CrossRegionCopyRuleProperty {..}
+    = CrossRegionCopyRuleProperty
+        {copyTags = Prelude.pure newValue, ..}
+instance Property "DeprecateRule" CrossRegionCopyRuleProperty where
+  type PropertyType "DeprecateRule" CrossRegionCopyRuleProperty = CrossRegionCopyDeprecateRuleProperty
+  set newValue CrossRegionCopyRuleProperty {..}
+    = CrossRegionCopyRuleProperty
+        {deprecateRule = Prelude.pure newValue, ..}
+instance Property "Encrypted" CrossRegionCopyRuleProperty where
+  type PropertyType "Encrypted" CrossRegionCopyRuleProperty = Value Prelude.Bool
+  set newValue CrossRegionCopyRuleProperty {..}
+    = CrossRegionCopyRuleProperty {encrypted = newValue, ..}
+instance Property "RetainRule" CrossRegionCopyRuleProperty where
+  type PropertyType "RetainRule" CrossRegionCopyRuleProperty = CrossRegionCopyRetainRuleProperty
+  set newValue CrossRegionCopyRuleProperty {..}
+    = CrossRegionCopyRuleProperty
+        {retainRule = Prelude.pure newValue, ..}
+instance Property "Target" CrossRegionCopyRuleProperty where
+  type PropertyType "Target" CrossRegionCopyRuleProperty = Value Prelude.Text
+  set newValue CrossRegionCopyRuleProperty {..}
+    = CrossRegionCopyRuleProperty {target = Prelude.pure newValue, ..}
+instance Property "TargetRegion" CrossRegionCopyRuleProperty where
+  type PropertyType "TargetRegion" CrossRegionCopyRuleProperty = Value Prelude.Text
+  set newValue CrossRegionCopyRuleProperty {..}
+    = CrossRegionCopyRuleProperty
+        {targetRegion = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/CrossRegionCopyRuleProperty.hs-boot b/gen/Stratosphere/DLM/LifecyclePolicy/CrossRegionCopyRuleProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/CrossRegionCopyRuleProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DLM.LifecyclePolicy.CrossRegionCopyRuleProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CrossRegionCopyRuleProperty :: Prelude.Type
+instance ToResourceProperties CrossRegionCopyRuleProperty
+instance Prelude.Eq CrossRegionCopyRuleProperty
+instance Prelude.Show CrossRegionCopyRuleProperty
+instance JSON.ToJSON CrossRegionCopyRuleProperty
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/CrossRegionCopyTargetProperty.hs b/gen/Stratosphere/DLM/LifecyclePolicy/CrossRegionCopyTargetProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/CrossRegionCopyTargetProperty.hs
@@ -0,0 +1,37 @@
+module Stratosphere.DLM.LifecyclePolicy.CrossRegionCopyTargetProperty (
+        CrossRegionCopyTargetProperty(..), mkCrossRegionCopyTargetProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CrossRegionCopyTargetProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-crossregioncopytarget.html>
+    CrossRegionCopyTargetProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-crossregioncopytarget.html#cfn-dlm-lifecyclepolicy-crossregioncopytarget-targetregion>
+                                   targetRegion :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCrossRegionCopyTargetProperty :: CrossRegionCopyTargetProperty
+mkCrossRegionCopyTargetProperty
+  = CrossRegionCopyTargetProperty
+      {haddock_workaround_ = (), targetRegion = Prelude.Nothing}
+instance ToResourceProperties CrossRegionCopyTargetProperty where
+  toResourceProperties CrossRegionCopyTargetProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DLM::LifecyclePolicy.CrossRegionCopyTarget",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "TargetRegion" Prelude.<$> targetRegion])}
+instance JSON.ToJSON CrossRegionCopyTargetProperty where
+  toJSON CrossRegionCopyTargetProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "TargetRegion" Prelude.<$> targetRegion]))
+instance Property "TargetRegion" CrossRegionCopyTargetProperty where
+  type PropertyType "TargetRegion" CrossRegionCopyTargetProperty = Value Prelude.Text
+  set newValue CrossRegionCopyTargetProperty {..}
+    = CrossRegionCopyTargetProperty
+        {targetRegion = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/CrossRegionCopyTargetProperty.hs-boot b/gen/Stratosphere/DLM/LifecyclePolicy/CrossRegionCopyTargetProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/CrossRegionCopyTargetProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DLM.LifecyclePolicy.CrossRegionCopyTargetProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CrossRegionCopyTargetProperty :: Prelude.Type
+instance ToResourceProperties CrossRegionCopyTargetProperty
+instance Prelude.Eq CrossRegionCopyTargetProperty
+instance Prelude.Show CrossRegionCopyTargetProperty
+instance JSON.ToJSON CrossRegionCopyTargetProperty
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/CrossRegionCopyTargetsProperty.hs b/gen/Stratosphere/DLM/LifecyclePolicy/CrossRegionCopyTargetsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/CrossRegionCopyTargetsProperty.hs
@@ -0,0 +1,6 @@
+module Stratosphere.DLM.LifecyclePolicy.CrossRegionCopyTargetsProperty (
+        module Exports, CrossRegionCopyTargetsProperty
+    ) where
+import {-# SOURCE #-} Stratosphere.DLM.LifecyclePolicy.CrossRegionCopyTargetProperty as Exports
+type CrossRegionCopyTargetsProperty =
+    [CrossRegionCopyTargetProperty]
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/CrossRegionCopyTargetsProperty.hs-boot b/gen/Stratosphere/DLM/LifecyclePolicy/CrossRegionCopyTargetsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/CrossRegionCopyTargetsProperty.hs-boot
@@ -0,0 +1,6 @@
+module Stratosphere.DLM.LifecyclePolicy.CrossRegionCopyTargetsProperty (
+        module Exports, CrossRegionCopyTargetsProperty
+    ) where
+import {-# SOURCE #-} Stratosphere.DLM.LifecyclePolicy.CrossRegionCopyTargetProperty as Exports
+type CrossRegionCopyTargetsProperty =
+    [CrossRegionCopyTargetProperty]
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/DeprecateRuleProperty.hs b/gen/Stratosphere/DLM/LifecyclePolicy/DeprecateRuleProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/DeprecateRuleProperty.hs
@@ -0,0 +1,53 @@
+module Stratosphere.DLM.LifecyclePolicy.DeprecateRuleProperty (
+        DeprecateRuleProperty(..), mkDeprecateRuleProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data DeprecateRuleProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-deprecaterule.html>
+    DeprecateRuleProperty {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-deprecaterule.html#cfn-dlm-lifecyclepolicy-deprecaterule-count>
+                           count :: (Prelude.Maybe (Value Prelude.Integer)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-deprecaterule.html#cfn-dlm-lifecyclepolicy-deprecaterule-interval>
+                           interval :: (Prelude.Maybe (Value Prelude.Integer)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-deprecaterule.html#cfn-dlm-lifecyclepolicy-deprecaterule-intervalunit>
+                           intervalUnit :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDeprecateRuleProperty :: DeprecateRuleProperty
+mkDeprecateRuleProperty
+  = DeprecateRuleProperty
+      {haddock_workaround_ = (), count = Prelude.Nothing,
+       interval = Prelude.Nothing, intervalUnit = Prelude.Nothing}
+instance ToResourceProperties DeprecateRuleProperty where
+  toResourceProperties DeprecateRuleProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DLM::LifecyclePolicy.DeprecateRule",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Count" Prelude.<$> count,
+                            (JSON..=) "Interval" Prelude.<$> interval,
+                            (JSON..=) "IntervalUnit" Prelude.<$> intervalUnit])}
+instance JSON.ToJSON DeprecateRuleProperty where
+  toJSON DeprecateRuleProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Count" Prelude.<$> count,
+               (JSON..=) "Interval" Prelude.<$> interval,
+               (JSON..=) "IntervalUnit" Prelude.<$> intervalUnit]))
+instance Property "Count" DeprecateRuleProperty where
+  type PropertyType "Count" DeprecateRuleProperty = Value Prelude.Integer
+  set newValue DeprecateRuleProperty {..}
+    = DeprecateRuleProperty {count = Prelude.pure newValue, ..}
+instance Property "Interval" DeprecateRuleProperty where
+  type PropertyType "Interval" DeprecateRuleProperty = Value Prelude.Integer
+  set newValue DeprecateRuleProperty {..}
+    = DeprecateRuleProperty {interval = Prelude.pure newValue, ..}
+instance Property "IntervalUnit" DeprecateRuleProperty where
+  type PropertyType "IntervalUnit" DeprecateRuleProperty = Value Prelude.Text
+  set newValue DeprecateRuleProperty {..}
+    = DeprecateRuleProperty {intervalUnit = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/DeprecateRuleProperty.hs-boot b/gen/Stratosphere/DLM/LifecyclePolicy/DeprecateRuleProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/DeprecateRuleProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DLM.LifecyclePolicy.DeprecateRuleProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data DeprecateRuleProperty :: Prelude.Type
+instance ToResourceProperties DeprecateRuleProperty
+instance Prelude.Eq DeprecateRuleProperty
+instance Prelude.Show DeprecateRuleProperty
+instance JSON.ToJSON DeprecateRuleProperty
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/EncryptionConfigurationProperty.hs b/gen/Stratosphere/DLM/LifecyclePolicy/EncryptionConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/EncryptionConfigurationProperty.hs
@@ -0,0 +1,48 @@
+module Stratosphere.DLM.LifecyclePolicy.EncryptionConfigurationProperty (
+        EncryptionConfigurationProperty(..),
+        mkEncryptionConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EncryptionConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-encryptionconfiguration.html>
+    EncryptionConfigurationProperty {haddock_workaround_ :: (),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-encryptionconfiguration.html#cfn-dlm-lifecyclepolicy-encryptionconfiguration-cmkarn>
+                                     cmkArn :: (Prelude.Maybe (Value Prelude.Text)),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-encryptionconfiguration.html#cfn-dlm-lifecyclepolicy-encryptionconfiguration-encrypted>
+                                     encrypted :: (Value Prelude.Bool)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEncryptionConfigurationProperty ::
+  Value Prelude.Bool -> EncryptionConfigurationProperty
+mkEncryptionConfigurationProperty encrypted
+  = EncryptionConfigurationProperty
+      {haddock_workaround_ = (), encrypted = encrypted,
+       cmkArn = Prelude.Nothing}
+instance ToResourceProperties EncryptionConfigurationProperty where
+  toResourceProperties EncryptionConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DLM::LifecyclePolicy.EncryptionConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Encrypted" JSON..= encrypted]
+                           (Prelude.catMaybes [(JSON..=) "CmkArn" Prelude.<$> cmkArn]))}
+instance JSON.ToJSON EncryptionConfigurationProperty where
+  toJSON EncryptionConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Encrypted" JSON..= encrypted]
+              (Prelude.catMaybes [(JSON..=) "CmkArn" Prelude.<$> cmkArn])))
+instance Property "CmkArn" EncryptionConfigurationProperty where
+  type PropertyType "CmkArn" EncryptionConfigurationProperty = Value Prelude.Text
+  set newValue EncryptionConfigurationProperty {..}
+    = EncryptionConfigurationProperty
+        {cmkArn = Prelude.pure newValue, ..}
+instance Property "Encrypted" EncryptionConfigurationProperty where
+  type PropertyType "Encrypted" EncryptionConfigurationProperty = Value Prelude.Bool
+  set newValue EncryptionConfigurationProperty {..}
+    = EncryptionConfigurationProperty {encrypted = newValue, ..}
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/EncryptionConfigurationProperty.hs-boot b/gen/Stratosphere/DLM/LifecyclePolicy/EncryptionConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/EncryptionConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DLM.LifecyclePolicy.EncryptionConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EncryptionConfigurationProperty :: Prelude.Type
+instance ToResourceProperties EncryptionConfigurationProperty
+instance Prelude.Eq EncryptionConfigurationProperty
+instance Prelude.Show EncryptionConfigurationProperty
+instance JSON.ToJSON EncryptionConfigurationProperty
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/EventParametersProperty.hs b/gen/Stratosphere/DLM/LifecyclePolicy/EventParametersProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/EventParametersProperty.hs
@@ -0,0 +1,58 @@
+module Stratosphere.DLM.LifecyclePolicy.EventParametersProperty (
+        EventParametersProperty(..), mkEventParametersProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EventParametersProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-eventparameters.html>
+    EventParametersProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-eventparameters.html#cfn-dlm-lifecyclepolicy-eventparameters-descriptionregex>
+                             descriptionRegex :: (Prelude.Maybe (Value Prelude.Text)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-eventparameters.html#cfn-dlm-lifecyclepolicy-eventparameters-eventtype>
+                             eventType :: (Value Prelude.Text),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-eventparameters.html#cfn-dlm-lifecyclepolicy-eventparameters-snapshotowner>
+                             snapshotOwner :: (ValueList Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEventParametersProperty ::
+  Value Prelude.Text
+  -> ValueList Prelude.Text -> EventParametersProperty
+mkEventParametersProperty eventType snapshotOwner
+  = EventParametersProperty
+      {haddock_workaround_ = (), eventType = eventType,
+       snapshotOwner = snapshotOwner, descriptionRegex = Prelude.Nothing}
+instance ToResourceProperties EventParametersProperty where
+  toResourceProperties EventParametersProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DLM::LifecyclePolicy.EventParameters",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["EventType" JSON..= eventType,
+                            "SnapshotOwner" JSON..= snapshotOwner]
+                           (Prelude.catMaybes
+                              [(JSON..=) "DescriptionRegex" Prelude.<$> descriptionRegex]))}
+instance JSON.ToJSON EventParametersProperty where
+  toJSON EventParametersProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["EventType" JSON..= eventType,
+               "SnapshotOwner" JSON..= snapshotOwner]
+              (Prelude.catMaybes
+                 [(JSON..=) "DescriptionRegex" Prelude.<$> descriptionRegex])))
+instance Property "DescriptionRegex" EventParametersProperty where
+  type PropertyType "DescriptionRegex" EventParametersProperty = Value Prelude.Text
+  set newValue EventParametersProperty {..}
+    = EventParametersProperty
+        {descriptionRegex = Prelude.pure newValue, ..}
+instance Property "EventType" EventParametersProperty where
+  type PropertyType "EventType" EventParametersProperty = Value Prelude.Text
+  set newValue EventParametersProperty {..}
+    = EventParametersProperty {eventType = newValue, ..}
+instance Property "SnapshotOwner" EventParametersProperty where
+  type PropertyType "SnapshotOwner" EventParametersProperty = ValueList Prelude.Text
+  set newValue EventParametersProperty {..}
+    = EventParametersProperty {snapshotOwner = newValue, ..}
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/EventParametersProperty.hs-boot b/gen/Stratosphere/DLM/LifecyclePolicy/EventParametersProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/EventParametersProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DLM.LifecyclePolicy.EventParametersProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EventParametersProperty :: Prelude.Type
+instance ToResourceProperties EventParametersProperty
+instance Prelude.Eq EventParametersProperty
+instance Prelude.Show EventParametersProperty
+instance JSON.ToJSON EventParametersProperty
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/EventSourceProperty.hs b/gen/Stratosphere/DLM/LifecyclePolicy/EventSourceProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/EventSourceProperty.hs
@@ -0,0 +1,48 @@
+module Stratosphere.DLM.LifecyclePolicy.EventSourceProperty (
+        module Exports, EventSourceProperty(..), mkEventSourceProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DLM.LifecyclePolicy.EventParametersProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EventSourceProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-eventsource.html>
+    EventSourceProperty {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-eventsource.html#cfn-dlm-lifecyclepolicy-eventsource-parameters>
+                         parameters :: (Prelude.Maybe EventParametersProperty),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-eventsource.html#cfn-dlm-lifecyclepolicy-eventsource-type>
+                         type' :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEventSourceProperty :: Value Prelude.Text -> EventSourceProperty
+mkEventSourceProperty type'
+  = EventSourceProperty
+      {haddock_workaround_ = (), type' = type',
+       parameters = Prelude.Nothing}
+instance ToResourceProperties EventSourceProperty where
+  toResourceProperties EventSourceProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DLM::LifecyclePolicy.EventSource",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Type" JSON..= type']
+                           (Prelude.catMaybes
+                              [(JSON..=) "Parameters" Prelude.<$> parameters]))}
+instance JSON.ToJSON EventSourceProperty where
+  toJSON EventSourceProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Type" JSON..= type']
+              (Prelude.catMaybes
+                 [(JSON..=) "Parameters" Prelude.<$> parameters])))
+instance Property "Parameters" EventSourceProperty where
+  type PropertyType "Parameters" EventSourceProperty = EventParametersProperty
+  set newValue EventSourceProperty {..}
+    = EventSourceProperty {parameters = Prelude.pure newValue, ..}
+instance Property "Type" EventSourceProperty where
+  type PropertyType "Type" EventSourceProperty = Value Prelude.Text
+  set newValue EventSourceProperty {..}
+    = EventSourceProperty {type' = newValue, ..}
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/EventSourceProperty.hs-boot b/gen/Stratosphere/DLM/LifecyclePolicy/EventSourceProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/EventSourceProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DLM.LifecyclePolicy.EventSourceProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EventSourceProperty :: Prelude.Type
+instance ToResourceProperties EventSourceProperty
+instance Prelude.Eq EventSourceProperty
+instance Prelude.Show EventSourceProperty
+instance JSON.ToJSON EventSourceProperty
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/ExcludeTagsProperty.hs b/gen/Stratosphere/DLM/LifecyclePolicy/ExcludeTagsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/ExcludeTagsProperty.hs
@@ -0,0 +1,5 @@
+module Stratosphere.DLM.LifecyclePolicy.ExcludeTagsProperty (
+        ExcludeTagsProperty
+    ) where
+import Stratosphere.Tag
+type ExcludeTagsProperty = [Tag]
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/ExcludeTagsProperty.hs-boot b/gen/Stratosphere/DLM/LifecyclePolicy/ExcludeTagsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/ExcludeTagsProperty.hs-boot
@@ -0,0 +1,5 @@
+module Stratosphere.DLM.LifecyclePolicy.ExcludeTagsProperty (
+        ExcludeTagsProperty
+    ) where
+import Stratosphere.Tag
+type ExcludeTagsProperty = [Tag]
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/ExcludeVolumeTypesListProperty.hs b/gen/Stratosphere/DLM/LifecyclePolicy/ExcludeVolumeTypesListProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/ExcludeVolumeTypesListProperty.hs
@@ -0,0 +1,5 @@
+module Stratosphere.DLM.LifecyclePolicy.ExcludeVolumeTypesListProperty (
+        module Exports, ExcludeVolumeTypesListProperty
+    ) where
+import {-# SOURCE #-} Stratosphere.DLM.LifecyclePolicy.VolumeTypeValuesProperty as Exports
+type ExcludeVolumeTypesListProperty = [VolumeTypeValuesProperty]
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/ExcludeVolumeTypesListProperty.hs-boot b/gen/Stratosphere/DLM/LifecyclePolicy/ExcludeVolumeTypesListProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/ExcludeVolumeTypesListProperty.hs-boot
@@ -0,0 +1,5 @@
+module Stratosphere.DLM.LifecyclePolicy.ExcludeVolumeTypesListProperty (
+        module Exports, ExcludeVolumeTypesListProperty
+    ) where
+import {-# SOURCE #-} Stratosphere.DLM.LifecyclePolicy.VolumeTypeValuesProperty as Exports
+type ExcludeVolumeTypesListProperty = [VolumeTypeValuesProperty]
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/ExclusionsProperty.hs b/gen/Stratosphere/DLM/LifecyclePolicy/ExclusionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/ExclusionsProperty.hs
@@ -0,0 +1,58 @@
+module Stratosphere.DLM.LifecyclePolicy.ExclusionsProperty (
+        module Exports, ExclusionsProperty(..), mkExclusionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DLM.LifecyclePolicy.ExcludeTagsProperty as Exports
+import {-# SOURCE #-} Stratosphere.DLM.LifecyclePolicy.ExcludeVolumeTypesListProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ExclusionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-exclusions.html>
+    ExclusionsProperty {haddock_workaround_ :: (),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-exclusions.html#cfn-dlm-lifecyclepolicy-exclusions-excludebootvolumes>
+                        excludeBootVolumes :: (Prelude.Maybe (Value Prelude.Bool)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-exclusions.html#cfn-dlm-lifecyclepolicy-exclusions-excludetags>
+                        excludeTags :: (Prelude.Maybe ExcludeTagsProperty),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-exclusions.html#cfn-dlm-lifecyclepolicy-exclusions-excludevolumetypes>
+                        excludeVolumeTypes :: (Prelude.Maybe ExcludeVolumeTypesListProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkExclusionsProperty :: ExclusionsProperty
+mkExclusionsProperty
+  = ExclusionsProperty
+      {haddock_workaround_ = (), excludeBootVolumes = Prelude.Nothing,
+       excludeTags = Prelude.Nothing,
+       excludeVolumeTypes = Prelude.Nothing}
+instance ToResourceProperties ExclusionsProperty where
+  toResourceProperties ExclusionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DLM::LifecyclePolicy.Exclusions",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ExcludeBootVolumes" Prelude.<$> excludeBootVolumes,
+                            (JSON..=) "ExcludeTags" Prelude.<$> excludeTags,
+                            (JSON..=) "ExcludeVolumeTypes" Prelude.<$> excludeVolumeTypes])}
+instance JSON.ToJSON ExclusionsProperty where
+  toJSON ExclusionsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ExcludeBootVolumes" Prelude.<$> excludeBootVolumes,
+               (JSON..=) "ExcludeTags" Prelude.<$> excludeTags,
+               (JSON..=) "ExcludeVolumeTypes" Prelude.<$> excludeVolumeTypes]))
+instance Property "ExcludeBootVolumes" ExclusionsProperty where
+  type PropertyType "ExcludeBootVolumes" ExclusionsProperty = Value Prelude.Bool
+  set newValue ExclusionsProperty {..}
+    = ExclusionsProperty
+        {excludeBootVolumes = Prelude.pure newValue, ..}
+instance Property "ExcludeTags" ExclusionsProperty where
+  type PropertyType "ExcludeTags" ExclusionsProperty = ExcludeTagsProperty
+  set newValue ExclusionsProperty {..}
+    = ExclusionsProperty {excludeTags = Prelude.pure newValue, ..}
+instance Property "ExcludeVolumeTypes" ExclusionsProperty where
+  type PropertyType "ExcludeVolumeTypes" ExclusionsProperty = ExcludeVolumeTypesListProperty
+  set newValue ExclusionsProperty {..}
+    = ExclusionsProperty
+        {excludeVolumeTypes = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/ExclusionsProperty.hs-boot b/gen/Stratosphere/DLM/LifecyclePolicy/ExclusionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/ExclusionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DLM.LifecyclePolicy.ExclusionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ExclusionsProperty :: Prelude.Type
+instance ToResourceProperties ExclusionsProperty
+instance Prelude.Eq ExclusionsProperty
+instance Prelude.Show ExclusionsProperty
+instance JSON.ToJSON ExclusionsProperty
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/FastRestoreRuleProperty.hs b/gen/Stratosphere/DLM/LifecyclePolicy/FastRestoreRuleProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/FastRestoreRuleProperty.hs
@@ -0,0 +1,64 @@
+module Stratosphere.DLM.LifecyclePolicy.FastRestoreRuleProperty (
+        FastRestoreRuleProperty(..), mkFastRestoreRuleProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data FastRestoreRuleProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-fastrestorerule.html>
+    FastRestoreRuleProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-fastrestorerule.html#cfn-dlm-lifecyclepolicy-fastrestorerule-availabilityzones>
+                             availabilityZones :: (Prelude.Maybe (ValueList Prelude.Text)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-fastrestorerule.html#cfn-dlm-lifecyclepolicy-fastrestorerule-count>
+                             count :: (Prelude.Maybe (Value Prelude.Integer)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-fastrestorerule.html#cfn-dlm-lifecyclepolicy-fastrestorerule-interval>
+                             interval :: (Prelude.Maybe (Value Prelude.Integer)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-fastrestorerule.html#cfn-dlm-lifecyclepolicy-fastrestorerule-intervalunit>
+                             intervalUnit :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkFastRestoreRuleProperty :: FastRestoreRuleProperty
+mkFastRestoreRuleProperty
+  = FastRestoreRuleProperty
+      {haddock_workaround_ = (), availabilityZones = Prelude.Nothing,
+       count = Prelude.Nothing, interval = Prelude.Nothing,
+       intervalUnit = Prelude.Nothing}
+instance ToResourceProperties FastRestoreRuleProperty where
+  toResourceProperties FastRestoreRuleProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DLM::LifecyclePolicy.FastRestoreRule",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AvailabilityZones" Prelude.<$> availabilityZones,
+                            (JSON..=) "Count" Prelude.<$> count,
+                            (JSON..=) "Interval" Prelude.<$> interval,
+                            (JSON..=) "IntervalUnit" Prelude.<$> intervalUnit])}
+instance JSON.ToJSON FastRestoreRuleProperty where
+  toJSON FastRestoreRuleProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AvailabilityZones" Prelude.<$> availabilityZones,
+               (JSON..=) "Count" Prelude.<$> count,
+               (JSON..=) "Interval" Prelude.<$> interval,
+               (JSON..=) "IntervalUnit" Prelude.<$> intervalUnit]))
+instance Property "AvailabilityZones" FastRestoreRuleProperty where
+  type PropertyType "AvailabilityZones" FastRestoreRuleProperty = ValueList Prelude.Text
+  set newValue FastRestoreRuleProperty {..}
+    = FastRestoreRuleProperty
+        {availabilityZones = Prelude.pure newValue, ..}
+instance Property "Count" FastRestoreRuleProperty where
+  type PropertyType "Count" FastRestoreRuleProperty = Value Prelude.Integer
+  set newValue FastRestoreRuleProperty {..}
+    = FastRestoreRuleProperty {count = Prelude.pure newValue, ..}
+instance Property "Interval" FastRestoreRuleProperty where
+  type PropertyType "Interval" FastRestoreRuleProperty = Value Prelude.Integer
+  set newValue FastRestoreRuleProperty {..}
+    = FastRestoreRuleProperty {interval = Prelude.pure newValue, ..}
+instance Property "IntervalUnit" FastRestoreRuleProperty where
+  type PropertyType "IntervalUnit" FastRestoreRuleProperty = Value Prelude.Text
+  set newValue FastRestoreRuleProperty {..}
+    = FastRestoreRuleProperty
+        {intervalUnit = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/FastRestoreRuleProperty.hs-boot b/gen/Stratosphere/DLM/LifecyclePolicy/FastRestoreRuleProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/FastRestoreRuleProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DLM.LifecyclePolicy.FastRestoreRuleProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data FastRestoreRuleProperty :: Prelude.Type
+instance ToResourceProperties FastRestoreRuleProperty
+instance Prelude.Eq FastRestoreRuleProperty
+instance Prelude.Show FastRestoreRuleProperty
+instance JSON.ToJSON FastRestoreRuleProperty
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/ParametersProperty.hs b/gen/Stratosphere/DLM/LifecyclePolicy/ParametersProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/ParametersProperty.hs
@@ -0,0 +1,59 @@
+module Stratosphere.DLM.LifecyclePolicy.ParametersProperty (
+        ParametersProperty(..), mkParametersProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data ParametersProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-parameters.html>
+    ParametersProperty {haddock_workaround_ :: (),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-parameters.html#cfn-dlm-lifecyclepolicy-parameters-excludebootvolume>
+                        excludeBootVolume :: (Prelude.Maybe (Value Prelude.Bool)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-parameters.html#cfn-dlm-lifecyclepolicy-parameters-excludedatavolumetags>
+                        excludeDataVolumeTags :: (Prelude.Maybe [Tag]),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-parameters.html#cfn-dlm-lifecyclepolicy-parameters-noreboot>
+                        noReboot :: (Prelude.Maybe (Value Prelude.Bool))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkParametersProperty :: ParametersProperty
+mkParametersProperty
+  = ParametersProperty
+      {haddock_workaround_ = (), excludeBootVolume = Prelude.Nothing,
+       excludeDataVolumeTags = Prelude.Nothing,
+       noReboot = Prelude.Nothing}
+instance ToResourceProperties ParametersProperty where
+  toResourceProperties ParametersProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DLM::LifecyclePolicy.Parameters",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ExcludeBootVolume" Prelude.<$> excludeBootVolume,
+                            (JSON..=) "ExcludeDataVolumeTags"
+                              Prelude.<$> excludeDataVolumeTags,
+                            (JSON..=) "NoReboot" Prelude.<$> noReboot])}
+instance JSON.ToJSON ParametersProperty where
+  toJSON ParametersProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ExcludeBootVolume" Prelude.<$> excludeBootVolume,
+               (JSON..=) "ExcludeDataVolumeTags"
+                 Prelude.<$> excludeDataVolumeTags,
+               (JSON..=) "NoReboot" Prelude.<$> noReboot]))
+instance Property "ExcludeBootVolume" ParametersProperty where
+  type PropertyType "ExcludeBootVolume" ParametersProperty = Value Prelude.Bool
+  set newValue ParametersProperty {..}
+    = ParametersProperty
+        {excludeBootVolume = Prelude.pure newValue, ..}
+instance Property "ExcludeDataVolumeTags" ParametersProperty where
+  type PropertyType "ExcludeDataVolumeTags" ParametersProperty = [Tag]
+  set newValue ParametersProperty {..}
+    = ParametersProperty
+        {excludeDataVolumeTags = Prelude.pure newValue, ..}
+instance Property "NoReboot" ParametersProperty where
+  type PropertyType "NoReboot" ParametersProperty = Value Prelude.Bool
+  set newValue ParametersProperty {..}
+    = ParametersProperty {noReboot = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/ParametersProperty.hs-boot b/gen/Stratosphere/DLM/LifecyclePolicy/ParametersProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/ParametersProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DLM.LifecyclePolicy.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/gen/Stratosphere/DLM/LifecyclePolicy/PolicyDetailsProperty.hs b/gen/Stratosphere/DLM/LifecyclePolicy/PolicyDetailsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/PolicyDetailsProperty.hs
@@ -0,0 +1,180 @@
+module Stratosphere.DLM.LifecyclePolicy.PolicyDetailsProperty (
+        module Exports, PolicyDetailsProperty(..), mkPolicyDetailsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DLM.LifecyclePolicy.ActionProperty as Exports
+import {-# SOURCE #-} Stratosphere.DLM.LifecyclePolicy.CrossRegionCopyTargetsProperty as Exports
+import {-# SOURCE #-} Stratosphere.DLM.LifecyclePolicy.EventSourceProperty as Exports
+import {-# SOURCE #-} Stratosphere.DLM.LifecyclePolicy.ExclusionsProperty as Exports
+import {-# SOURCE #-} Stratosphere.DLM.LifecyclePolicy.ParametersProperty as Exports
+import {-# SOURCE #-} Stratosphere.DLM.LifecyclePolicy.ScheduleProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data PolicyDetailsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-policydetails.html>
+    PolicyDetailsProperty {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-policydetails.html#cfn-dlm-lifecyclepolicy-policydetails-actions>
+                           actions :: (Prelude.Maybe [ActionProperty]),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-policydetails.html#cfn-dlm-lifecyclepolicy-policydetails-copytags>
+                           copyTags :: (Prelude.Maybe (Value Prelude.Bool)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-policydetails.html#cfn-dlm-lifecyclepolicy-policydetails-createinterval>
+                           createInterval :: (Prelude.Maybe (Value Prelude.Integer)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-policydetails.html#cfn-dlm-lifecyclepolicy-policydetails-crossregioncopytargets>
+                           crossRegionCopyTargets :: (Prelude.Maybe CrossRegionCopyTargetsProperty),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-policydetails.html#cfn-dlm-lifecyclepolicy-policydetails-eventsource>
+                           eventSource :: (Prelude.Maybe EventSourceProperty),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-policydetails.html#cfn-dlm-lifecyclepolicy-policydetails-exclusions>
+                           exclusions :: (Prelude.Maybe ExclusionsProperty),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-policydetails.html#cfn-dlm-lifecyclepolicy-policydetails-extenddeletion>
+                           extendDeletion :: (Prelude.Maybe (Value Prelude.Bool)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-policydetails.html#cfn-dlm-lifecyclepolicy-policydetails-parameters>
+                           parameters :: (Prelude.Maybe ParametersProperty),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-policydetails.html#cfn-dlm-lifecyclepolicy-policydetails-policylanguage>
+                           policyLanguage :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-policydetails.html#cfn-dlm-lifecyclepolicy-policydetails-policytype>
+                           policyType :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-policydetails.html#cfn-dlm-lifecyclepolicy-policydetails-resourcelocations>
+                           resourceLocations :: (Prelude.Maybe (ValueList Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-policydetails.html#cfn-dlm-lifecyclepolicy-policydetails-resourcetype>
+                           resourceType :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-policydetails.html#cfn-dlm-lifecyclepolicy-policydetails-resourcetypes>
+                           resourceTypes :: (Prelude.Maybe (ValueList Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-policydetails.html#cfn-dlm-lifecyclepolicy-policydetails-retaininterval>
+                           retainInterval :: (Prelude.Maybe (Value Prelude.Integer)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-policydetails.html#cfn-dlm-lifecyclepolicy-policydetails-schedules>
+                           schedules :: (Prelude.Maybe [ScheduleProperty]),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-policydetails.html#cfn-dlm-lifecyclepolicy-policydetails-targettags>
+                           targetTags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPolicyDetailsProperty :: PolicyDetailsProperty
+mkPolicyDetailsProperty
+  = PolicyDetailsProperty
+      {haddock_workaround_ = (), actions = Prelude.Nothing,
+       copyTags = Prelude.Nothing, createInterval = Prelude.Nothing,
+       crossRegionCopyTargets = Prelude.Nothing,
+       eventSource = Prelude.Nothing, exclusions = Prelude.Nothing,
+       extendDeletion = Prelude.Nothing, parameters = Prelude.Nothing,
+       policyLanguage = Prelude.Nothing, policyType = Prelude.Nothing,
+       resourceLocations = Prelude.Nothing,
+       resourceType = Prelude.Nothing, resourceTypes = Prelude.Nothing,
+       retainInterval = Prelude.Nothing, schedules = Prelude.Nothing,
+       targetTags = Prelude.Nothing}
+instance ToResourceProperties PolicyDetailsProperty where
+  toResourceProperties PolicyDetailsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DLM::LifecyclePolicy.PolicyDetails",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Actions" Prelude.<$> actions,
+                            (JSON..=) "CopyTags" Prelude.<$> copyTags,
+                            (JSON..=) "CreateInterval" Prelude.<$> createInterval,
+                            (JSON..=) "CrossRegionCopyTargets"
+                              Prelude.<$> crossRegionCopyTargets,
+                            (JSON..=) "EventSource" Prelude.<$> eventSource,
+                            (JSON..=) "Exclusions" Prelude.<$> exclusions,
+                            (JSON..=) "ExtendDeletion" Prelude.<$> extendDeletion,
+                            (JSON..=) "Parameters" Prelude.<$> parameters,
+                            (JSON..=) "PolicyLanguage" Prelude.<$> policyLanguage,
+                            (JSON..=) "PolicyType" Prelude.<$> policyType,
+                            (JSON..=) "ResourceLocations" Prelude.<$> resourceLocations,
+                            (JSON..=) "ResourceType" Prelude.<$> resourceType,
+                            (JSON..=) "ResourceTypes" Prelude.<$> resourceTypes,
+                            (JSON..=) "RetainInterval" Prelude.<$> retainInterval,
+                            (JSON..=) "Schedules" Prelude.<$> schedules,
+                            (JSON..=) "TargetTags" Prelude.<$> targetTags])}
+instance JSON.ToJSON PolicyDetailsProperty where
+  toJSON PolicyDetailsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Actions" Prelude.<$> actions,
+               (JSON..=) "CopyTags" Prelude.<$> copyTags,
+               (JSON..=) "CreateInterval" Prelude.<$> createInterval,
+               (JSON..=) "CrossRegionCopyTargets"
+                 Prelude.<$> crossRegionCopyTargets,
+               (JSON..=) "EventSource" Prelude.<$> eventSource,
+               (JSON..=) "Exclusions" Prelude.<$> exclusions,
+               (JSON..=) "ExtendDeletion" Prelude.<$> extendDeletion,
+               (JSON..=) "Parameters" Prelude.<$> parameters,
+               (JSON..=) "PolicyLanguage" Prelude.<$> policyLanguage,
+               (JSON..=) "PolicyType" Prelude.<$> policyType,
+               (JSON..=) "ResourceLocations" Prelude.<$> resourceLocations,
+               (JSON..=) "ResourceType" Prelude.<$> resourceType,
+               (JSON..=) "ResourceTypes" Prelude.<$> resourceTypes,
+               (JSON..=) "RetainInterval" Prelude.<$> retainInterval,
+               (JSON..=) "Schedules" Prelude.<$> schedules,
+               (JSON..=) "TargetTags" Prelude.<$> targetTags]))
+instance Property "Actions" PolicyDetailsProperty where
+  type PropertyType "Actions" PolicyDetailsProperty = [ActionProperty]
+  set newValue PolicyDetailsProperty {..}
+    = PolicyDetailsProperty {actions = Prelude.pure newValue, ..}
+instance Property "CopyTags" PolicyDetailsProperty where
+  type PropertyType "CopyTags" PolicyDetailsProperty = Value Prelude.Bool
+  set newValue PolicyDetailsProperty {..}
+    = PolicyDetailsProperty {copyTags = Prelude.pure newValue, ..}
+instance Property "CreateInterval" PolicyDetailsProperty where
+  type PropertyType "CreateInterval" PolicyDetailsProperty = Value Prelude.Integer
+  set newValue PolicyDetailsProperty {..}
+    = PolicyDetailsProperty
+        {createInterval = Prelude.pure newValue, ..}
+instance Property "CrossRegionCopyTargets" PolicyDetailsProperty where
+  type PropertyType "CrossRegionCopyTargets" PolicyDetailsProperty = CrossRegionCopyTargetsProperty
+  set newValue PolicyDetailsProperty {..}
+    = PolicyDetailsProperty
+        {crossRegionCopyTargets = Prelude.pure newValue, ..}
+instance Property "EventSource" PolicyDetailsProperty where
+  type PropertyType "EventSource" PolicyDetailsProperty = EventSourceProperty
+  set newValue PolicyDetailsProperty {..}
+    = PolicyDetailsProperty {eventSource = Prelude.pure newValue, ..}
+instance Property "Exclusions" PolicyDetailsProperty where
+  type PropertyType "Exclusions" PolicyDetailsProperty = ExclusionsProperty
+  set newValue PolicyDetailsProperty {..}
+    = PolicyDetailsProperty {exclusions = Prelude.pure newValue, ..}
+instance Property "ExtendDeletion" PolicyDetailsProperty where
+  type PropertyType "ExtendDeletion" PolicyDetailsProperty = Value Prelude.Bool
+  set newValue PolicyDetailsProperty {..}
+    = PolicyDetailsProperty
+        {extendDeletion = Prelude.pure newValue, ..}
+instance Property "Parameters" PolicyDetailsProperty where
+  type PropertyType "Parameters" PolicyDetailsProperty = ParametersProperty
+  set newValue PolicyDetailsProperty {..}
+    = PolicyDetailsProperty {parameters = Prelude.pure newValue, ..}
+instance Property "PolicyLanguage" PolicyDetailsProperty where
+  type PropertyType "PolicyLanguage" PolicyDetailsProperty = Value Prelude.Text
+  set newValue PolicyDetailsProperty {..}
+    = PolicyDetailsProperty
+        {policyLanguage = Prelude.pure newValue, ..}
+instance Property "PolicyType" PolicyDetailsProperty where
+  type PropertyType "PolicyType" PolicyDetailsProperty = Value Prelude.Text
+  set newValue PolicyDetailsProperty {..}
+    = PolicyDetailsProperty {policyType = Prelude.pure newValue, ..}
+instance Property "ResourceLocations" PolicyDetailsProperty where
+  type PropertyType "ResourceLocations" PolicyDetailsProperty = ValueList Prelude.Text
+  set newValue PolicyDetailsProperty {..}
+    = PolicyDetailsProperty
+        {resourceLocations = Prelude.pure newValue, ..}
+instance Property "ResourceType" PolicyDetailsProperty where
+  type PropertyType "ResourceType" PolicyDetailsProperty = Value Prelude.Text
+  set newValue PolicyDetailsProperty {..}
+    = PolicyDetailsProperty {resourceType = Prelude.pure newValue, ..}
+instance Property "ResourceTypes" PolicyDetailsProperty where
+  type PropertyType "ResourceTypes" PolicyDetailsProperty = ValueList Prelude.Text
+  set newValue PolicyDetailsProperty {..}
+    = PolicyDetailsProperty {resourceTypes = Prelude.pure newValue, ..}
+instance Property "RetainInterval" PolicyDetailsProperty where
+  type PropertyType "RetainInterval" PolicyDetailsProperty = Value Prelude.Integer
+  set newValue PolicyDetailsProperty {..}
+    = PolicyDetailsProperty
+        {retainInterval = Prelude.pure newValue, ..}
+instance Property "Schedules" PolicyDetailsProperty where
+  type PropertyType "Schedules" PolicyDetailsProperty = [ScheduleProperty]
+  set newValue PolicyDetailsProperty {..}
+    = PolicyDetailsProperty {schedules = Prelude.pure newValue, ..}
+instance Property "TargetTags" PolicyDetailsProperty where
+  type PropertyType "TargetTags" PolicyDetailsProperty = [Tag]
+  set newValue PolicyDetailsProperty {..}
+    = PolicyDetailsProperty {targetTags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/PolicyDetailsProperty.hs-boot b/gen/Stratosphere/DLM/LifecyclePolicy/PolicyDetailsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/PolicyDetailsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DLM.LifecyclePolicy.PolicyDetailsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data PolicyDetailsProperty :: Prelude.Type
+instance ToResourceProperties PolicyDetailsProperty
+instance Prelude.Eq PolicyDetailsProperty
+instance Prelude.Show PolicyDetailsProperty
+instance JSON.ToJSON PolicyDetailsProperty
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/RetainRuleProperty.hs b/gen/Stratosphere/DLM/LifecyclePolicy/RetainRuleProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/RetainRuleProperty.hs
@@ -0,0 +1,53 @@
+module Stratosphere.DLM.LifecyclePolicy.RetainRuleProperty (
+        RetainRuleProperty(..), mkRetainRuleProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data RetainRuleProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-retainrule.html>
+    RetainRuleProperty {haddock_workaround_ :: (),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-retainrule.html#cfn-dlm-lifecyclepolicy-retainrule-count>
+                        count :: (Prelude.Maybe (Value Prelude.Integer)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-retainrule.html#cfn-dlm-lifecyclepolicy-retainrule-interval>
+                        interval :: (Prelude.Maybe (Value Prelude.Integer)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-retainrule.html#cfn-dlm-lifecyclepolicy-retainrule-intervalunit>
+                        intervalUnit :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRetainRuleProperty :: RetainRuleProperty
+mkRetainRuleProperty
+  = RetainRuleProperty
+      {haddock_workaround_ = (), count = Prelude.Nothing,
+       interval = Prelude.Nothing, intervalUnit = Prelude.Nothing}
+instance ToResourceProperties RetainRuleProperty where
+  toResourceProperties RetainRuleProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DLM::LifecyclePolicy.RetainRule",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Count" Prelude.<$> count,
+                            (JSON..=) "Interval" Prelude.<$> interval,
+                            (JSON..=) "IntervalUnit" Prelude.<$> intervalUnit])}
+instance JSON.ToJSON RetainRuleProperty where
+  toJSON RetainRuleProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Count" Prelude.<$> count,
+               (JSON..=) "Interval" Prelude.<$> interval,
+               (JSON..=) "IntervalUnit" Prelude.<$> intervalUnit]))
+instance Property "Count" RetainRuleProperty where
+  type PropertyType "Count" RetainRuleProperty = Value Prelude.Integer
+  set newValue RetainRuleProperty {..}
+    = RetainRuleProperty {count = Prelude.pure newValue, ..}
+instance Property "Interval" RetainRuleProperty where
+  type PropertyType "Interval" RetainRuleProperty = Value Prelude.Integer
+  set newValue RetainRuleProperty {..}
+    = RetainRuleProperty {interval = Prelude.pure newValue, ..}
+instance Property "IntervalUnit" RetainRuleProperty where
+  type PropertyType "IntervalUnit" RetainRuleProperty = Value Prelude.Text
+  set newValue RetainRuleProperty {..}
+    = RetainRuleProperty {intervalUnit = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/RetainRuleProperty.hs-boot b/gen/Stratosphere/DLM/LifecyclePolicy/RetainRuleProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/RetainRuleProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DLM.LifecyclePolicy.RetainRuleProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data RetainRuleProperty :: Prelude.Type
+instance ToResourceProperties RetainRuleProperty
+instance Prelude.Eq RetainRuleProperty
+instance Prelude.Show RetainRuleProperty
+instance JSON.ToJSON RetainRuleProperty
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/RetentionArchiveTierProperty.hs b/gen/Stratosphere/DLM/LifecyclePolicy/RetentionArchiveTierProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/RetentionArchiveTierProperty.hs
@@ -0,0 +1,55 @@
+module Stratosphere.DLM.LifecyclePolicy.RetentionArchiveTierProperty (
+        RetentionArchiveTierProperty(..), mkRetentionArchiveTierProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data RetentionArchiveTierProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-retentionarchivetier.html>
+    RetentionArchiveTierProperty {haddock_workaround_ :: (),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-retentionarchivetier.html#cfn-dlm-lifecyclepolicy-retentionarchivetier-count>
+                                  count :: (Prelude.Maybe (Value Prelude.Integer)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-retentionarchivetier.html#cfn-dlm-lifecyclepolicy-retentionarchivetier-interval>
+                                  interval :: (Prelude.Maybe (Value Prelude.Integer)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-retentionarchivetier.html#cfn-dlm-lifecyclepolicy-retentionarchivetier-intervalunit>
+                                  intervalUnit :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRetentionArchiveTierProperty :: RetentionArchiveTierProperty
+mkRetentionArchiveTierProperty
+  = RetentionArchiveTierProperty
+      {haddock_workaround_ = (), count = Prelude.Nothing,
+       interval = Prelude.Nothing, intervalUnit = Prelude.Nothing}
+instance ToResourceProperties RetentionArchiveTierProperty where
+  toResourceProperties RetentionArchiveTierProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DLM::LifecyclePolicy.RetentionArchiveTier",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Count" Prelude.<$> count,
+                            (JSON..=) "Interval" Prelude.<$> interval,
+                            (JSON..=) "IntervalUnit" Prelude.<$> intervalUnit])}
+instance JSON.ToJSON RetentionArchiveTierProperty where
+  toJSON RetentionArchiveTierProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Count" Prelude.<$> count,
+               (JSON..=) "Interval" Prelude.<$> interval,
+               (JSON..=) "IntervalUnit" Prelude.<$> intervalUnit]))
+instance Property "Count" RetentionArchiveTierProperty where
+  type PropertyType "Count" RetentionArchiveTierProperty = Value Prelude.Integer
+  set newValue RetentionArchiveTierProperty {..}
+    = RetentionArchiveTierProperty {count = Prelude.pure newValue, ..}
+instance Property "Interval" RetentionArchiveTierProperty where
+  type PropertyType "Interval" RetentionArchiveTierProperty = Value Prelude.Integer
+  set newValue RetentionArchiveTierProperty {..}
+    = RetentionArchiveTierProperty
+        {interval = Prelude.pure newValue, ..}
+instance Property "IntervalUnit" RetentionArchiveTierProperty where
+  type PropertyType "IntervalUnit" RetentionArchiveTierProperty = Value Prelude.Text
+  set newValue RetentionArchiveTierProperty {..}
+    = RetentionArchiveTierProperty
+        {intervalUnit = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/RetentionArchiveTierProperty.hs-boot b/gen/Stratosphere/DLM/LifecyclePolicy/RetentionArchiveTierProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/RetentionArchiveTierProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DLM.LifecyclePolicy.RetentionArchiveTierProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data RetentionArchiveTierProperty :: Prelude.Type
+instance ToResourceProperties RetentionArchiveTierProperty
+instance Prelude.Eq RetentionArchiveTierProperty
+instance Prelude.Show RetentionArchiveTierProperty
+instance JSON.ToJSON RetentionArchiveTierProperty
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/ScheduleProperty.hs b/gen/Stratosphere/DLM/LifecyclePolicy/ScheduleProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/ScheduleProperty.hs
@@ -0,0 +1,131 @@
+module Stratosphere.DLM.LifecyclePolicy.ScheduleProperty (
+        module Exports, ScheduleProperty(..), mkScheduleProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.DLM.LifecyclePolicy.ArchiveRuleProperty as Exports
+import {-# SOURCE #-} Stratosphere.DLM.LifecyclePolicy.CreateRuleProperty as Exports
+import {-# SOURCE #-} Stratosphere.DLM.LifecyclePolicy.CrossRegionCopyRuleProperty as Exports
+import {-# SOURCE #-} Stratosphere.DLM.LifecyclePolicy.DeprecateRuleProperty as Exports
+import {-# SOURCE #-} Stratosphere.DLM.LifecyclePolicy.FastRestoreRuleProperty as Exports
+import {-# SOURCE #-} Stratosphere.DLM.LifecyclePolicy.RetainRuleProperty as Exports
+import {-# SOURCE #-} Stratosphere.DLM.LifecyclePolicy.ShareRuleProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data ScheduleProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-schedule.html>
+    ScheduleProperty {haddock_workaround_ :: (),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-schedule.html#cfn-dlm-lifecyclepolicy-schedule-archiverule>
+                      archiveRule :: (Prelude.Maybe ArchiveRuleProperty),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-schedule.html#cfn-dlm-lifecyclepolicy-schedule-copytags>
+                      copyTags :: (Prelude.Maybe (Value Prelude.Bool)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-schedule.html#cfn-dlm-lifecyclepolicy-schedule-createrule>
+                      createRule :: (Prelude.Maybe CreateRuleProperty),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-schedule.html#cfn-dlm-lifecyclepolicy-schedule-crossregioncopyrules>
+                      crossRegionCopyRules :: (Prelude.Maybe [CrossRegionCopyRuleProperty]),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-schedule.html#cfn-dlm-lifecyclepolicy-schedule-deprecaterule>
+                      deprecateRule :: (Prelude.Maybe DeprecateRuleProperty),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-schedule.html#cfn-dlm-lifecyclepolicy-schedule-fastrestorerule>
+                      fastRestoreRule :: (Prelude.Maybe FastRestoreRuleProperty),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-schedule.html#cfn-dlm-lifecyclepolicy-schedule-name>
+                      name :: (Prelude.Maybe (Value Prelude.Text)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-schedule.html#cfn-dlm-lifecyclepolicy-schedule-retainrule>
+                      retainRule :: (Prelude.Maybe RetainRuleProperty),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-schedule.html#cfn-dlm-lifecyclepolicy-schedule-sharerules>
+                      shareRules :: (Prelude.Maybe [ShareRuleProperty]),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-schedule.html#cfn-dlm-lifecyclepolicy-schedule-tagstoadd>
+                      tagsToAdd :: (Prelude.Maybe [Tag]),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-schedule.html#cfn-dlm-lifecyclepolicy-schedule-variabletags>
+                      variableTags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkScheduleProperty :: ScheduleProperty
+mkScheduleProperty
+  = ScheduleProperty
+      {haddock_workaround_ = (), archiveRule = Prelude.Nothing,
+       copyTags = Prelude.Nothing, createRule = Prelude.Nothing,
+       crossRegionCopyRules = Prelude.Nothing,
+       deprecateRule = Prelude.Nothing, fastRestoreRule = Prelude.Nothing,
+       name = Prelude.Nothing, retainRule = Prelude.Nothing,
+       shareRules = Prelude.Nothing, tagsToAdd = Prelude.Nothing,
+       variableTags = Prelude.Nothing}
+instance ToResourceProperties ScheduleProperty where
+  toResourceProperties ScheduleProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DLM::LifecyclePolicy.Schedule",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ArchiveRule" Prelude.<$> archiveRule,
+                            (JSON..=) "CopyTags" Prelude.<$> copyTags,
+                            (JSON..=) "CreateRule" Prelude.<$> createRule,
+                            (JSON..=) "CrossRegionCopyRules" Prelude.<$> crossRegionCopyRules,
+                            (JSON..=) "DeprecateRule" Prelude.<$> deprecateRule,
+                            (JSON..=) "FastRestoreRule" Prelude.<$> fastRestoreRule,
+                            (JSON..=) "Name" Prelude.<$> name,
+                            (JSON..=) "RetainRule" Prelude.<$> retainRule,
+                            (JSON..=) "ShareRules" Prelude.<$> shareRules,
+                            (JSON..=) "TagsToAdd" Prelude.<$> tagsToAdd,
+                            (JSON..=) "VariableTags" Prelude.<$> variableTags])}
+instance JSON.ToJSON ScheduleProperty where
+  toJSON ScheduleProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ArchiveRule" Prelude.<$> archiveRule,
+               (JSON..=) "CopyTags" Prelude.<$> copyTags,
+               (JSON..=) "CreateRule" Prelude.<$> createRule,
+               (JSON..=) "CrossRegionCopyRules" Prelude.<$> crossRegionCopyRules,
+               (JSON..=) "DeprecateRule" Prelude.<$> deprecateRule,
+               (JSON..=) "FastRestoreRule" Prelude.<$> fastRestoreRule,
+               (JSON..=) "Name" Prelude.<$> name,
+               (JSON..=) "RetainRule" Prelude.<$> retainRule,
+               (JSON..=) "ShareRules" Prelude.<$> shareRules,
+               (JSON..=) "TagsToAdd" Prelude.<$> tagsToAdd,
+               (JSON..=) "VariableTags" Prelude.<$> variableTags]))
+instance Property "ArchiveRule" ScheduleProperty where
+  type PropertyType "ArchiveRule" ScheduleProperty = ArchiveRuleProperty
+  set newValue ScheduleProperty {..}
+    = ScheduleProperty {archiveRule = Prelude.pure newValue, ..}
+instance Property "CopyTags" ScheduleProperty where
+  type PropertyType "CopyTags" ScheduleProperty = Value Prelude.Bool
+  set newValue ScheduleProperty {..}
+    = ScheduleProperty {copyTags = Prelude.pure newValue, ..}
+instance Property "CreateRule" ScheduleProperty where
+  type PropertyType "CreateRule" ScheduleProperty = CreateRuleProperty
+  set newValue ScheduleProperty {..}
+    = ScheduleProperty {createRule = Prelude.pure newValue, ..}
+instance Property "CrossRegionCopyRules" ScheduleProperty where
+  type PropertyType "CrossRegionCopyRules" ScheduleProperty = [CrossRegionCopyRuleProperty]
+  set newValue ScheduleProperty {..}
+    = ScheduleProperty
+        {crossRegionCopyRules = Prelude.pure newValue, ..}
+instance Property "DeprecateRule" ScheduleProperty where
+  type PropertyType "DeprecateRule" ScheduleProperty = DeprecateRuleProperty
+  set newValue ScheduleProperty {..}
+    = ScheduleProperty {deprecateRule = Prelude.pure newValue, ..}
+instance Property "FastRestoreRule" ScheduleProperty where
+  type PropertyType "FastRestoreRule" ScheduleProperty = FastRestoreRuleProperty
+  set newValue ScheduleProperty {..}
+    = ScheduleProperty {fastRestoreRule = Prelude.pure newValue, ..}
+instance Property "Name" ScheduleProperty where
+  type PropertyType "Name" ScheduleProperty = Value Prelude.Text
+  set newValue ScheduleProperty {..}
+    = ScheduleProperty {name = Prelude.pure newValue, ..}
+instance Property "RetainRule" ScheduleProperty where
+  type PropertyType "RetainRule" ScheduleProperty = RetainRuleProperty
+  set newValue ScheduleProperty {..}
+    = ScheduleProperty {retainRule = Prelude.pure newValue, ..}
+instance Property "ShareRules" ScheduleProperty where
+  type PropertyType "ShareRules" ScheduleProperty = [ShareRuleProperty]
+  set newValue ScheduleProperty {..}
+    = ScheduleProperty {shareRules = Prelude.pure newValue, ..}
+instance Property "TagsToAdd" ScheduleProperty where
+  type PropertyType "TagsToAdd" ScheduleProperty = [Tag]
+  set newValue ScheduleProperty {..}
+    = ScheduleProperty {tagsToAdd = Prelude.pure newValue, ..}
+instance Property "VariableTags" ScheduleProperty where
+  type PropertyType "VariableTags" ScheduleProperty = [Tag]
+  set newValue ScheduleProperty {..}
+    = ScheduleProperty {variableTags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/ScheduleProperty.hs-boot b/gen/Stratosphere/DLM/LifecyclePolicy/ScheduleProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/ScheduleProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DLM.LifecyclePolicy.ScheduleProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ScheduleProperty :: Prelude.Type
+instance ToResourceProperties ScheduleProperty
+instance Prelude.Eq ScheduleProperty
+instance Prelude.Show ScheduleProperty
+instance JSON.ToJSON ScheduleProperty
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/ScriptProperty.hs b/gen/Stratosphere/DLM/LifecyclePolicy/ScriptProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/ScriptProperty.hs
@@ -0,0 +1,87 @@
+module Stratosphere.DLM.LifecyclePolicy.ScriptProperty (
+        ScriptProperty(..), mkScriptProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ScriptProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-script.html>
+    ScriptProperty {haddock_workaround_ :: (),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-script.html#cfn-dlm-lifecyclepolicy-script-executeoperationonscriptfailure>
+                    executeOperationOnScriptFailure :: (Prelude.Maybe (Value Prelude.Bool)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-script.html#cfn-dlm-lifecyclepolicy-script-executionhandler>
+                    executionHandler :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-script.html#cfn-dlm-lifecyclepolicy-script-executionhandlerservice>
+                    executionHandlerService :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-script.html#cfn-dlm-lifecyclepolicy-script-executiontimeout>
+                    executionTimeout :: (Prelude.Maybe (Value Prelude.Integer)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-script.html#cfn-dlm-lifecyclepolicy-script-maximumretrycount>
+                    maximumRetryCount :: (Prelude.Maybe (Value Prelude.Integer)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-script.html#cfn-dlm-lifecyclepolicy-script-stages>
+                    stages :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkScriptProperty :: ScriptProperty
+mkScriptProperty
+  = ScriptProperty
+      {haddock_workaround_ = (),
+       executeOperationOnScriptFailure = Prelude.Nothing,
+       executionHandler = Prelude.Nothing,
+       executionHandlerService = Prelude.Nothing,
+       executionTimeout = Prelude.Nothing,
+       maximumRetryCount = Prelude.Nothing, stages = Prelude.Nothing}
+instance ToResourceProperties ScriptProperty where
+  toResourceProperties ScriptProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DLM::LifecyclePolicy.Script",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ExecuteOperationOnScriptFailure"
+                              Prelude.<$> executeOperationOnScriptFailure,
+                            (JSON..=) "ExecutionHandler" Prelude.<$> executionHandler,
+                            (JSON..=) "ExecutionHandlerService"
+                              Prelude.<$> executionHandlerService,
+                            (JSON..=) "ExecutionTimeout" Prelude.<$> executionTimeout,
+                            (JSON..=) "MaximumRetryCount" Prelude.<$> maximumRetryCount,
+                            (JSON..=) "Stages" Prelude.<$> stages])}
+instance JSON.ToJSON ScriptProperty where
+  toJSON ScriptProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ExecuteOperationOnScriptFailure"
+                 Prelude.<$> executeOperationOnScriptFailure,
+               (JSON..=) "ExecutionHandler" Prelude.<$> executionHandler,
+               (JSON..=) "ExecutionHandlerService"
+                 Prelude.<$> executionHandlerService,
+               (JSON..=) "ExecutionTimeout" Prelude.<$> executionTimeout,
+               (JSON..=) "MaximumRetryCount" Prelude.<$> maximumRetryCount,
+               (JSON..=) "Stages" Prelude.<$> stages]))
+instance Property "ExecuteOperationOnScriptFailure" ScriptProperty where
+  type PropertyType "ExecuteOperationOnScriptFailure" ScriptProperty = Value Prelude.Bool
+  set newValue ScriptProperty {..}
+    = ScriptProperty
+        {executeOperationOnScriptFailure = Prelude.pure newValue, ..}
+instance Property "ExecutionHandler" ScriptProperty where
+  type PropertyType "ExecutionHandler" ScriptProperty = Value Prelude.Text
+  set newValue ScriptProperty {..}
+    = ScriptProperty {executionHandler = Prelude.pure newValue, ..}
+instance Property "ExecutionHandlerService" ScriptProperty where
+  type PropertyType "ExecutionHandlerService" ScriptProperty = Value Prelude.Text
+  set newValue ScriptProperty {..}
+    = ScriptProperty
+        {executionHandlerService = Prelude.pure newValue, ..}
+instance Property "ExecutionTimeout" ScriptProperty where
+  type PropertyType "ExecutionTimeout" ScriptProperty = Value Prelude.Integer
+  set newValue ScriptProperty {..}
+    = ScriptProperty {executionTimeout = Prelude.pure newValue, ..}
+instance Property "MaximumRetryCount" ScriptProperty where
+  type PropertyType "MaximumRetryCount" ScriptProperty = Value Prelude.Integer
+  set newValue ScriptProperty {..}
+    = ScriptProperty {maximumRetryCount = Prelude.pure newValue, ..}
+instance Property "Stages" ScriptProperty where
+  type PropertyType "Stages" ScriptProperty = ValueList Prelude.Text
+  set newValue ScriptProperty {..}
+    = ScriptProperty {stages = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/ScriptProperty.hs-boot b/gen/Stratosphere/DLM/LifecyclePolicy/ScriptProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/ScriptProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DLM.LifecyclePolicy.ScriptProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ScriptProperty :: Prelude.Type
+instance ToResourceProperties ScriptProperty
+instance Prelude.Eq ScriptProperty
+instance Prelude.Show ScriptProperty
+instance JSON.ToJSON ScriptProperty
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/ShareRuleProperty.hs b/gen/Stratosphere/DLM/LifecyclePolicy/ShareRuleProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/ShareRuleProperty.hs
@@ -0,0 +1,55 @@
+module Stratosphere.DLM.LifecyclePolicy.ShareRuleProperty (
+        ShareRuleProperty(..), mkShareRuleProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ShareRuleProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-sharerule.html>
+    ShareRuleProperty {haddock_workaround_ :: (),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-sharerule.html#cfn-dlm-lifecyclepolicy-sharerule-targetaccounts>
+                       targetAccounts :: (Prelude.Maybe (ValueList Prelude.Text)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-sharerule.html#cfn-dlm-lifecyclepolicy-sharerule-unshareinterval>
+                       unshareInterval :: (Prelude.Maybe (Value Prelude.Integer)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dlm-lifecyclepolicy-sharerule.html#cfn-dlm-lifecyclepolicy-sharerule-unshareintervalunit>
+                       unshareIntervalUnit :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkShareRuleProperty :: ShareRuleProperty
+mkShareRuleProperty
+  = ShareRuleProperty
+      {haddock_workaround_ = (), targetAccounts = Prelude.Nothing,
+       unshareInterval = Prelude.Nothing,
+       unshareIntervalUnit = Prelude.Nothing}
+instance ToResourceProperties ShareRuleProperty where
+  toResourceProperties ShareRuleProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::DLM::LifecyclePolicy.ShareRule",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "TargetAccounts" Prelude.<$> targetAccounts,
+                            (JSON..=) "UnshareInterval" Prelude.<$> unshareInterval,
+                            (JSON..=) "UnshareIntervalUnit" Prelude.<$> unshareIntervalUnit])}
+instance JSON.ToJSON ShareRuleProperty where
+  toJSON ShareRuleProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "TargetAccounts" Prelude.<$> targetAccounts,
+               (JSON..=) "UnshareInterval" Prelude.<$> unshareInterval,
+               (JSON..=) "UnshareIntervalUnit" Prelude.<$> unshareIntervalUnit]))
+instance Property "TargetAccounts" ShareRuleProperty where
+  type PropertyType "TargetAccounts" ShareRuleProperty = ValueList Prelude.Text
+  set newValue ShareRuleProperty {..}
+    = ShareRuleProperty {targetAccounts = Prelude.pure newValue, ..}
+instance Property "UnshareInterval" ShareRuleProperty where
+  type PropertyType "UnshareInterval" ShareRuleProperty = Value Prelude.Integer
+  set newValue ShareRuleProperty {..}
+    = ShareRuleProperty {unshareInterval = Prelude.pure newValue, ..}
+instance Property "UnshareIntervalUnit" ShareRuleProperty where
+  type PropertyType "UnshareIntervalUnit" ShareRuleProperty = Value Prelude.Text
+  set newValue ShareRuleProperty {..}
+    = ShareRuleProperty
+        {unshareIntervalUnit = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/ShareRuleProperty.hs-boot b/gen/Stratosphere/DLM/LifecyclePolicy/ShareRuleProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/ShareRuleProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.DLM.LifecyclePolicy.ShareRuleProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ShareRuleProperty :: Prelude.Type
+instance ToResourceProperties ShareRuleProperty
+instance Prelude.Eq ShareRuleProperty
+instance Prelude.Show ShareRuleProperty
+instance JSON.ToJSON ShareRuleProperty
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/VolumeTypeValuesProperty.hs b/gen/Stratosphere/DLM/LifecyclePolicy/VolumeTypeValuesProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/VolumeTypeValuesProperty.hs
@@ -0,0 +1,6 @@
+module Stratosphere.DLM.LifecyclePolicy.VolumeTypeValuesProperty (
+        VolumeTypeValuesProperty
+    ) where
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Value
+type VolumeTypeValuesProperty = Value Prelude.Text
diff --git a/gen/Stratosphere/DLM/LifecyclePolicy/VolumeTypeValuesProperty.hs-boot b/gen/Stratosphere/DLM/LifecyclePolicy/VolumeTypeValuesProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/DLM/LifecyclePolicy/VolumeTypeValuesProperty.hs-boot
@@ -0,0 +1,6 @@
+module Stratosphere.DLM.LifecyclePolicy.VolumeTypeValuesProperty (
+        VolumeTypeValuesProperty
+    ) where
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Value
+type VolumeTypeValuesProperty = Value Prelude.Text
diff --git a/stratosphere-dlm.cabal b/stratosphere-dlm.cabal
new file mode 100644
--- /dev/null
+++ b/stratosphere-dlm.cabal
@@ -0,0 +1,99 @@
+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-dlm
+version:        1.0.0
+synopsis:       Stratosphere integration for AWS DLM.
+description:    Integration into stratosphere to generate resources and properties for AWS DLM
+category:       AWS, Cloud, DLM
+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.DLM.LifecyclePolicy
+      Stratosphere.DLM.LifecyclePolicy.ActionProperty
+      Stratosphere.DLM.LifecyclePolicy.ArchiveRetainRuleProperty
+      Stratosphere.DLM.LifecyclePolicy.ArchiveRuleProperty
+      Stratosphere.DLM.LifecyclePolicy.CreateRuleProperty
+      Stratosphere.DLM.LifecyclePolicy.CrossRegionCopyActionProperty
+      Stratosphere.DLM.LifecyclePolicy.CrossRegionCopyDeprecateRuleProperty
+      Stratosphere.DLM.LifecyclePolicy.CrossRegionCopyRetainRuleProperty
+      Stratosphere.DLM.LifecyclePolicy.CrossRegionCopyRuleProperty
+      Stratosphere.DLM.LifecyclePolicy.CrossRegionCopyTargetProperty
+      Stratosphere.DLM.LifecyclePolicy.CrossRegionCopyTargetsProperty
+      Stratosphere.DLM.LifecyclePolicy.DeprecateRuleProperty
+      Stratosphere.DLM.LifecyclePolicy.EncryptionConfigurationProperty
+      Stratosphere.DLM.LifecyclePolicy.EventParametersProperty
+      Stratosphere.DLM.LifecyclePolicy.EventSourceProperty
+      Stratosphere.DLM.LifecyclePolicy.ExcludeTagsProperty
+      Stratosphere.DLM.LifecyclePolicy.ExcludeVolumeTypesListProperty
+      Stratosphere.DLM.LifecyclePolicy.ExclusionsProperty
+      Stratosphere.DLM.LifecyclePolicy.FastRestoreRuleProperty
+      Stratosphere.DLM.LifecyclePolicy.ParametersProperty
+      Stratosphere.DLM.LifecyclePolicy.PolicyDetailsProperty
+      Stratosphere.DLM.LifecyclePolicy.RetainRuleProperty
+      Stratosphere.DLM.LifecyclePolicy.RetentionArchiveTierProperty
+      Stratosphere.DLM.LifecyclePolicy.ScheduleProperty
+      Stratosphere.DLM.LifecyclePolicy.ScriptProperty
+      Stratosphere.DLM.LifecyclePolicy.ShareRuleProperty
+      Stratosphere.DLM.LifecyclePolicy.VolumeTypeValuesProperty
+  other-modules:
+      Paths_stratosphere_dlm
+  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
