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/CloudTrail/Channel.hs b/gen/Stratosphere/CloudTrail/Channel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudTrail/Channel.hs
@@ -0,0 +1,63 @@
+module Stratosphere.CloudTrail.Channel (
+        module Exports, Channel(..), mkChannel
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudTrail.Channel.DestinationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data Channel
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-channel.html>
+    Channel {haddock_workaround_ :: (),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-channel.html#cfn-cloudtrail-channel-destinations>
+             destinations :: (Prelude.Maybe [DestinationProperty]),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-channel.html#cfn-cloudtrail-channel-name>
+             name :: (Prelude.Maybe (Value Prelude.Text)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-channel.html#cfn-cloudtrail-channel-source>
+             source :: (Prelude.Maybe (Value Prelude.Text)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-channel.html#cfn-cloudtrail-channel-tags>
+             tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkChannel :: Channel
+mkChannel
+  = Channel
+      {haddock_workaround_ = (), destinations = Prelude.Nothing,
+       name = Prelude.Nothing, source = Prelude.Nothing,
+       tags = Prelude.Nothing}
+instance ToResourceProperties Channel where
+  toResourceProperties Channel {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudTrail::Channel", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Destinations" Prelude.<$> destinations,
+                            (JSON..=) "Name" Prelude.<$> name,
+                            (JSON..=) "Source" Prelude.<$> source,
+                            (JSON..=) "Tags" Prelude.<$> tags])}
+instance JSON.ToJSON Channel where
+  toJSON Channel {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Destinations" Prelude.<$> destinations,
+               (JSON..=) "Name" Prelude.<$> name,
+               (JSON..=) "Source" Prelude.<$> source,
+               (JSON..=) "Tags" Prelude.<$> tags]))
+instance Property "Destinations" Channel where
+  type PropertyType "Destinations" Channel = [DestinationProperty]
+  set newValue Channel {..}
+    = Channel {destinations = Prelude.pure newValue, ..}
+instance Property "Name" Channel where
+  type PropertyType "Name" Channel = Value Prelude.Text
+  set newValue Channel {..}
+    = Channel {name = Prelude.pure newValue, ..}
+instance Property "Source" Channel where
+  type PropertyType "Source" Channel = Value Prelude.Text
+  set newValue Channel {..}
+    = Channel {source = Prelude.pure newValue, ..}
+instance Property "Tags" Channel where
+  type PropertyType "Tags" Channel = [Tag]
+  set newValue Channel {..}
+    = Channel {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudTrail/Channel/DestinationProperty.hs b/gen/Stratosphere/CloudTrail/Channel/DestinationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudTrail/Channel/DestinationProperty.hs
@@ -0,0 +1,38 @@
+module Stratosphere.CloudTrail.Channel.DestinationProperty (
+        DestinationProperty(..), mkDestinationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data DestinationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-channel-destination.html>
+    DestinationProperty {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-channel-destination.html#cfn-cloudtrail-channel-destination-location>
+                         location :: (Value Prelude.Text),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-channel-destination.html#cfn-cloudtrail-channel-destination-type>
+                         type' :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDestinationProperty ::
+  Value Prelude.Text -> Value Prelude.Text -> DestinationProperty
+mkDestinationProperty location type'
+  = DestinationProperty
+      {haddock_workaround_ = (), location = location, type' = type'}
+instance ToResourceProperties DestinationProperty where
+  toResourceProperties DestinationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudTrail::Channel.Destination",
+         supportsTags = Prelude.False,
+         properties = ["Location" JSON..= location, "Type" JSON..= type']}
+instance JSON.ToJSON DestinationProperty where
+  toJSON DestinationProperty {..}
+    = JSON.object ["Location" JSON..= location, "Type" JSON..= type']
+instance Property "Location" DestinationProperty where
+  type PropertyType "Location" DestinationProperty = Value Prelude.Text
+  set newValue DestinationProperty {..}
+    = DestinationProperty {location = newValue, ..}
+instance Property "Type" DestinationProperty where
+  type PropertyType "Type" DestinationProperty = Value Prelude.Text
+  set newValue DestinationProperty {..}
+    = DestinationProperty {type' = newValue, ..}
diff --git a/gen/Stratosphere/CloudTrail/Channel/DestinationProperty.hs-boot b/gen/Stratosphere/CloudTrail/Channel/DestinationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudTrail/Channel/DestinationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudTrail.Channel.DestinationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data DestinationProperty :: Prelude.Type
+instance ToResourceProperties DestinationProperty
+instance Prelude.Eq DestinationProperty
+instance Prelude.Show DestinationProperty
+instance JSON.ToJSON DestinationProperty
diff --git a/gen/Stratosphere/CloudTrail/Dashboard.hs b/gen/Stratosphere/CloudTrail/Dashboard.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudTrail/Dashboard.hs
@@ -0,0 +1,77 @@
+module Stratosphere.CloudTrail.Dashboard (
+        module Exports, Dashboard(..), mkDashboard
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudTrail.Dashboard.RefreshScheduleProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudTrail.Dashboard.WidgetProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data Dashboard
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-dashboard.html>
+    Dashboard {haddock_workaround_ :: (),
+               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-dashboard.html#cfn-cloudtrail-dashboard-name>
+               name :: (Prelude.Maybe (Value Prelude.Text)),
+               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-dashboard.html#cfn-cloudtrail-dashboard-refreshschedule>
+               refreshSchedule :: (Prelude.Maybe RefreshScheduleProperty),
+               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-dashboard.html#cfn-cloudtrail-dashboard-tags>
+               tags :: (Prelude.Maybe [Tag]),
+               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-dashboard.html#cfn-cloudtrail-dashboard-terminationprotectionenabled>
+               terminationProtectionEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-dashboard.html#cfn-cloudtrail-dashboard-widgets>
+               widgets :: (Prelude.Maybe [WidgetProperty])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDashboard :: Dashboard
+mkDashboard
+  = Dashboard
+      {haddock_workaround_ = (), name = Prelude.Nothing,
+       refreshSchedule = Prelude.Nothing, tags = Prelude.Nothing,
+       terminationProtectionEnabled = Prelude.Nothing,
+       widgets = Prelude.Nothing}
+instance ToResourceProperties Dashboard where
+  toResourceProperties Dashboard {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudTrail::Dashboard",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Name" Prelude.<$> name,
+                            (JSON..=) "RefreshSchedule" Prelude.<$> refreshSchedule,
+                            (JSON..=) "Tags" Prelude.<$> tags,
+                            (JSON..=) "TerminationProtectionEnabled"
+                              Prelude.<$> terminationProtectionEnabled,
+                            (JSON..=) "Widgets" Prelude.<$> widgets])}
+instance JSON.ToJSON Dashboard where
+  toJSON Dashboard {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Name" Prelude.<$> name,
+               (JSON..=) "RefreshSchedule" Prelude.<$> refreshSchedule,
+               (JSON..=) "Tags" Prelude.<$> tags,
+               (JSON..=) "TerminationProtectionEnabled"
+                 Prelude.<$> terminationProtectionEnabled,
+               (JSON..=) "Widgets" Prelude.<$> widgets]))
+instance Property "Name" Dashboard where
+  type PropertyType "Name" Dashboard = Value Prelude.Text
+  set newValue Dashboard {..}
+    = Dashboard {name = Prelude.pure newValue, ..}
+instance Property "RefreshSchedule" Dashboard where
+  type PropertyType "RefreshSchedule" Dashboard = RefreshScheduleProperty
+  set newValue Dashboard {..}
+    = Dashboard {refreshSchedule = Prelude.pure newValue, ..}
+instance Property "Tags" Dashboard where
+  type PropertyType "Tags" Dashboard = [Tag]
+  set newValue Dashboard {..}
+    = Dashboard {tags = Prelude.pure newValue, ..}
+instance Property "TerminationProtectionEnabled" Dashboard where
+  type PropertyType "TerminationProtectionEnabled" Dashboard = Value Prelude.Bool
+  set newValue Dashboard {..}
+    = Dashboard
+        {terminationProtectionEnabled = Prelude.pure newValue, ..}
+instance Property "Widgets" Dashboard where
+  type PropertyType "Widgets" Dashboard = [WidgetProperty]
+  set newValue Dashboard {..}
+    = Dashboard {widgets = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudTrail/Dashboard/FrequencyProperty.hs b/gen/Stratosphere/CloudTrail/Dashboard/FrequencyProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudTrail/Dashboard/FrequencyProperty.hs
@@ -0,0 +1,38 @@
+module Stratosphere.CloudTrail.Dashboard.FrequencyProperty (
+        FrequencyProperty(..), mkFrequencyProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data FrequencyProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-dashboard-frequency.html>
+    FrequencyProperty {haddock_workaround_ :: (),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-dashboard-frequency.html#cfn-cloudtrail-dashboard-frequency-unit>
+                       unit :: (Value Prelude.Text),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-dashboard-frequency.html#cfn-cloudtrail-dashboard-frequency-value>
+                       value :: (Value Prelude.Integer)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkFrequencyProperty ::
+  Value Prelude.Text -> Value Prelude.Integer -> FrequencyProperty
+mkFrequencyProperty unit value
+  = FrequencyProperty
+      {haddock_workaround_ = (), unit = unit, value = value}
+instance ToResourceProperties FrequencyProperty where
+  toResourceProperties FrequencyProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudTrail::Dashboard.Frequency",
+         supportsTags = Prelude.False,
+         properties = ["Unit" JSON..= unit, "Value" JSON..= value]}
+instance JSON.ToJSON FrequencyProperty where
+  toJSON FrequencyProperty {..}
+    = JSON.object ["Unit" JSON..= unit, "Value" JSON..= value]
+instance Property "Unit" FrequencyProperty where
+  type PropertyType "Unit" FrequencyProperty = Value Prelude.Text
+  set newValue FrequencyProperty {..}
+    = FrequencyProperty {unit = newValue, ..}
+instance Property "Value" FrequencyProperty where
+  type PropertyType "Value" FrequencyProperty = Value Prelude.Integer
+  set newValue FrequencyProperty {..}
+    = FrequencyProperty {value = newValue, ..}
diff --git a/gen/Stratosphere/CloudTrail/Dashboard/FrequencyProperty.hs-boot b/gen/Stratosphere/CloudTrail/Dashboard/FrequencyProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudTrail/Dashboard/FrequencyProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudTrail.Dashboard.FrequencyProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data FrequencyProperty :: Prelude.Type
+instance ToResourceProperties FrequencyProperty
+instance Prelude.Eq FrequencyProperty
+instance Prelude.Show FrequencyProperty
+instance JSON.ToJSON FrequencyProperty
diff --git a/gen/Stratosphere/CloudTrail/Dashboard/RefreshScheduleProperty.hs b/gen/Stratosphere/CloudTrail/Dashboard/RefreshScheduleProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudTrail/Dashboard/RefreshScheduleProperty.hs
@@ -0,0 +1,55 @@
+module Stratosphere.CloudTrail.Dashboard.RefreshScheduleProperty (
+        module Exports, RefreshScheduleProperty(..),
+        mkRefreshScheduleProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudTrail.Dashboard.FrequencyProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data RefreshScheduleProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-dashboard-refreshschedule.html>
+    RefreshScheduleProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-dashboard-refreshschedule.html#cfn-cloudtrail-dashboard-refreshschedule-frequency>
+                             frequency :: (Prelude.Maybe FrequencyProperty),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-dashboard-refreshschedule.html#cfn-cloudtrail-dashboard-refreshschedule-status>
+                             status :: (Prelude.Maybe (Value Prelude.Text)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-dashboard-refreshschedule.html#cfn-cloudtrail-dashboard-refreshschedule-timeofday>
+                             timeOfDay :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRefreshScheduleProperty :: RefreshScheduleProperty
+mkRefreshScheduleProperty
+  = RefreshScheduleProperty
+      {haddock_workaround_ = (), frequency = Prelude.Nothing,
+       status = Prelude.Nothing, timeOfDay = Prelude.Nothing}
+instance ToResourceProperties RefreshScheduleProperty where
+  toResourceProperties RefreshScheduleProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudTrail::Dashboard.RefreshSchedule",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Frequency" Prelude.<$> frequency,
+                            (JSON..=) "Status" Prelude.<$> status,
+                            (JSON..=) "TimeOfDay" Prelude.<$> timeOfDay])}
+instance JSON.ToJSON RefreshScheduleProperty where
+  toJSON RefreshScheduleProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Frequency" Prelude.<$> frequency,
+               (JSON..=) "Status" Prelude.<$> status,
+               (JSON..=) "TimeOfDay" Prelude.<$> timeOfDay]))
+instance Property "Frequency" RefreshScheduleProperty where
+  type PropertyType "Frequency" RefreshScheduleProperty = FrequencyProperty
+  set newValue RefreshScheduleProperty {..}
+    = RefreshScheduleProperty {frequency = Prelude.pure newValue, ..}
+instance Property "Status" RefreshScheduleProperty where
+  type PropertyType "Status" RefreshScheduleProperty = Value Prelude.Text
+  set newValue RefreshScheduleProperty {..}
+    = RefreshScheduleProperty {status = Prelude.pure newValue, ..}
+instance Property "TimeOfDay" RefreshScheduleProperty where
+  type PropertyType "TimeOfDay" RefreshScheduleProperty = Value Prelude.Text
+  set newValue RefreshScheduleProperty {..}
+    = RefreshScheduleProperty {timeOfDay = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudTrail/Dashboard/RefreshScheduleProperty.hs-boot b/gen/Stratosphere/CloudTrail/Dashboard/RefreshScheduleProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudTrail/Dashboard/RefreshScheduleProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudTrail.Dashboard.RefreshScheduleProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data RefreshScheduleProperty :: Prelude.Type
+instance ToResourceProperties RefreshScheduleProperty
+instance Prelude.Eq RefreshScheduleProperty
+instance Prelude.Show RefreshScheduleProperty
+instance JSON.ToJSON RefreshScheduleProperty
diff --git a/gen/Stratosphere/CloudTrail/Dashboard/WidgetProperty.hs b/gen/Stratosphere/CloudTrail/Dashboard/WidgetProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudTrail/Dashboard/WidgetProperty.hs
@@ -0,0 +1,56 @@
+module Stratosphere.CloudTrail.Dashboard.WidgetProperty (
+        WidgetProperty(..), mkWidgetProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data WidgetProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-dashboard-widget.html>
+    WidgetProperty {haddock_workaround_ :: (),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-dashboard-widget.html#cfn-cloudtrail-dashboard-widget-queryparameters>
+                    queryParameters :: (Prelude.Maybe (ValueList Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-dashboard-widget.html#cfn-cloudtrail-dashboard-widget-querystatement>
+                    queryStatement :: (Value Prelude.Text),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-dashboard-widget.html#cfn-cloudtrail-dashboard-widget-viewproperties>
+                    viewProperties :: (Prelude.Maybe (Prelude.Map Prelude.Text (Value Prelude.Text)))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkWidgetProperty :: Value Prelude.Text -> WidgetProperty
+mkWidgetProperty queryStatement
+  = WidgetProperty
+      {haddock_workaround_ = (), queryStatement = queryStatement,
+       queryParameters = Prelude.Nothing,
+       viewProperties = Prelude.Nothing}
+instance ToResourceProperties WidgetProperty where
+  toResourceProperties WidgetProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudTrail::Dashboard.Widget",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["QueryStatement" JSON..= queryStatement]
+                           (Prelude.catMaybes
+                              [(JSON..=) "QueryParameters" Prelude.<$> queryParameters,
+                               (JSON..=) "ViewProperties" Prelude.<$> viewProperties]))}
+instance JSON.ToJSON WidgetProperty where
+  toJSON WidgetProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["QueryStatement" JSON..= queryStatement]
+              (Prelude.catMaybes
+                 [(JSON..=) "QueryParameters" Prelude.<$> queryParameters,
+                  (JSON..=) "ViewProperties" Prelude.<$> viewProperties])))
+instance Property "QueryParameters" WidgetProperty where
+  type PropertyType "QueryParameters" WidgetProperty = ValueList Prelude.Text
+  set newValue WidgetProperty {..}
+    = WidgetProperty {queryParameters = Prelude.pure newValue, ..}
+instance Property "QueryStatement" WidgetProperty where
+  type PropertyType "QueryStatement" WidgetProperty = Value Prelude.Text
+  set newValue WidgetProperty {..}
+    = WidgetProperty {queryStatement = newValue, ..}
+instance Property "ViewProperties" WidgetProperty where
+  type PropertyType "ViewProperties" WidgetProperty = Prelude.Map Prelude.Text (Value Prelude.Text)
+  set newValue WidgetProperty {..}
+    = WidgetProperty {viewProperties = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudTrail/Dashboard/WidgetProperty.hs-boot b/gen/Stratosphere/CloudTrail/Dashboard/WidgetProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudTrail/Dashboard/WidgetProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudTrail.Dashboard.WidgetProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data WidgetProperty :: Prelude.Type
+instance ToResourceProperties WidgetProperty
+instance Prelude.Eq WidgetProperty
+instance Prelude.Show WidgetProperty
+instance JSON.ToJSON WidgetProperty
diff --git a/gen/Stratosphere/CloudTrail/EventDataStore.hs b/gen/Stratosphere/CloudTrail/EventDataStore.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudTrail/EventDataStore.hs
@@ -0,0 +1,179 @@
+module Stratosphere.CloudTrail.EventDataStore (
+        module Exports, EventDataStore(..), mkEventDataStore
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudTrail.EventDataStore.AdvancedEventSelectorProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudTrail.EventDataStore.ContextKeySelectorProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudTrail.EventDataStore.InsightSelectorProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data EventDataStore
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-eventdatastore.html>
+    EventDataStore {haddock_workaround_ :: (),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-eventdatastore.html#cfn-cloudtrail-eventdatastore-advancedeventselectors>
+                    advancedEventSelectors :: (Prelude.Maybe [AdvancedEventSelectorProperty]),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-eventdatastore.html#cfn-cloudtrail-eventdatastore-billingmode>
+                    billingMode :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-eventdatastore.html#cfn-cloudtrail-eventdatastore-contextkeyselectors>
+                    contextKeySelectors :: (Prelude.Maybe [ContextKeySelectorProperty]),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-eventdatastore.html#cfn-cloudtrail-eventdatastore-federationenabled>
+                    federationEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-eventdatastore.html#cfn-cloudtrail-eventdatastore-federationrolearn>
+                    federationRoleArn :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-eventdatastore.html#cfn-cloudtrail-eventdatastore-ingestionenabled>
+                    ingestionEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-eventdatastore.html#cfn-cloudtrail-eventdatastore-insightselectors>
+                    insightSelectors :: (Prelude.Maybe [InsightSelectorProperty]),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-eventdatastore.html#cfn-cloudtrail-eventdatastore-insightsdestination>
+                    insightsDestination :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-eventdatastore.html#cfn-cloudtrail-eventdatastore-kmskeyid>
+                    kmsKeyId :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-eventdatastore.html#cfn-cloudtrail-eventdatastore-maxeventsize>
+                    maxEventSize :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-eventdatastore.html#cfn-cloudtrail-eventdatastore-multiregionenabled>
+                    multiRegionEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-eventdatastore.html#cfn-cloudtrail-eventdatastore-name>
+                    name :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-eventdatastore.html#cfn-cloudtrail-eventdatastore-organizationenabled>
+                    organizationEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-eventdatastore.html#cfn-cloudtrail-eventdatastore-retentionperiod>
+                    retentionPeriod :: (Prelude.Maybe (Value Prelude.Integer)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-eventdatastore.html#cfn-cloudtrail-eventdatastore-tags>
+                    tags :: (Prelude.Maybe [Tag]),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-eventdatastore.html#cfn-cloudtrail-eventdatastore-terminationprotectionenabled>
+                    terminationProtectionEnabled :: (Prelude.Maybe (Value Prelude.Bool))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEventDataStore :: EventDataStore
+mkEventDataStore
+  = EventDataStore
+      {haddock_workaround_ = (),
+       advancedEventSelectors = Prelude.Nothing,
+       billingMode = Prelude.Nothing,
+       contextKeySelectors = Prelude.Nothing,
+       federationEnabled = Prelude.Nothing,
+       federationRoleArn = Prelude.Nothing,
+       ingestionEnabled = Prelude.Nothing,
+       insightSelectors = Prelude.Nothing,
+       insightsDestination = Prelude.Nothing, kmsKeyId = Prelude.Nothing,
+       maxEventSize = Prelude.Nothing,
+       multiRegionEnabled = Prelude.Nothing, name = Prelude.Nothing,
+       organizationEnabled = Prelude.Nothing,
+       retentionPeriod = Prelude.Nothing, tags = Prelude.Nothing,
+       terminationProtectionEnabled = Prelude.Nothing}
+instance ToResourceProperties EventDataStore where
+  toResourceProperties EventDataStore {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudTrail::EventDataStore",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AdvancedEventSelectors"
+                              Prelude.<$> advancedEventSelectors,
+                            (JSON..=) "BillingMode" Prelude.<$> billingMode,
+                            (JSON..=) "ContextKeySelectors" Prelude.<$> contextKeySelectors,
+                            (JSON..=) "FederationEnabled" Prelude.<$> federationEnabled,
+                            (JSON..=) "FederationRoleArn" Prelude.<$> federationRoleArn,
+                            (JSON..=) "IngestionEnabled" Prelude.<$> ingestionEnabled,
+                            (JSON..=) "InsightSelectors" Prelude.<$> insightSelectors,
+                            (JSON..=) "InsightsDestination" Prelude.<$> insightsDestination,
+                            (JSON..=) "KmsKeyId" Prelude.<$> kmsKeyId,
+                            (JSON..=) "MaxEventSize" Prelude.<$> maxEventSize,
+                            (JSON..=) "MultiRegionEnabled" Prelude.<$> multiRegionEnabled,
+                            (JSON..=) "Name" Prelude.<$> name,
+                            (JSON..=) "OrganizationEnabled" Prelude.<$> organizationEnabled,
+                            (JSON..=) "RetentionPeriod" Prelude.<$> retentionPeriod,
+                            (JSON..=) "Tags" Prelude.<$> tags,
+                            (JSON..=) "TerminationProtectionEnabled"
+                              Prelude.<$> terminationProtectionEnabled])}
+instance JSON.ToJSON EventDataStore where
+  toJSON EventDataStore {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AdvancedEventSelectors"
+                 Prelude.<$> advancedEventSelectors,
+               (JSON..=) "BillingMode" Prelude.<$> billingMode,
+               (JSON..=) "ContextKeySelectors" Prelude.<$> contextKeySelectors,
+               (JSON..=) "FederationEnabled" Prelude.<$> federationEnabled,
+               (JSON..=) "FederationRoleArn" Prelude.<$> federationRoleArn,
+               (JSON..=) "IngestionEnabled" Prelude.<$> ingestionEnabled,
+               (JSON..=) "InsightSelectors" Prelude.<$> insightSelectors,
+               (JSON..=) "InsightsDestination" Prelude.<$> insightsDestination,
+               (JSON..=) "KmsKeyId" Prelude.<$> kmsKeyId,
+               (JSON..=) "MaxEventSize" Prelude.<$> maxEventSize,
+               (JSON..=) "MultiRegionEnabled" Prelude.<$> multiRegionEnabled,
+               (JSON..=) "Name" Prelude.<$> name,
+               (JSON..=) "OrganizationEnabled" Prelude.<$> organizationEnabled,
+               (JSON..=) "RetentionPeriod" Prelude.<$> retentionPeriod,
+               (JSON..=) "Tags" Prelude.<$> tags,
+               (JSON..=) "TerminationProtectionEnabled"
+                 Prelude.<$> terminationProtectionEnabled]))
+instance Property "AdvancedEventSelectors" EventDataStore where
+  type PropertyType "AdvancedEventSelectors" EventDataStore = [AdvancedEventSelectorProperty]
+  set newValue EventDataStore {..}
+    = EventDataStore
+        {advancedEventSelectors = Prelude.pure newValue, ..}
+instance Property "BillingMode" EventDataStore where
+  type PropertyType "BillingMode" EventDataStore = Value Prelude.Text
+  set newValue EventDataStore {..}
+    = EventDataStore {billingMode = Prelude.pure newValue, ..}
+instance Property "ContextKeySelectors" EventDataStore where
+  type PropertyType "ContextKeySelectors" EventDataStore = [ContextKeySelectorProperty]
+  set newValue EventDataStore {..}
+    = EventDataStore {contextKeySelectors = Prelude.pure newValue, ..}
+instance Property "FederationEnabled" EventDataStore where
+  type PropertyType "FederationEnabled" EventDataStore = Value Prelude.Bool
+  set newValue EventDataStore {..}
+    = EventDataStore {federationEnabled = Prelude.pure newValue, ..}
+instance Property "FederationRoleArn" EventDataStore where
+  type PropertyType "FederationRoleArn" EventDataStore = Value Prelude.Text
+  set newValue EventDataStore {..}
+    = EventDataStore {federationRoleArn = Prelude.pure newValue, ..}
+instance Property "IngestionEnabled" EventDataStore where
+  type PropertyType "IngestionEnabled" EventDataStore = Value Prelude.Bool
+  set newValue EventDataStore {..}
+    = EventDataStore {ingestionEnabled = Prelude.pure newValue, ..}
+instance Property "InsightSelectors" EventDataStore where
+  type PropertyType "InsightSelectors" EventDataStore = [InsightSelectorProperty]
+  set newValue EventDataStore {..}
+    = EventDataStore {insightSelectors = Prelude.pure newValue, ..}
+instance Property "InsightsDestination" EventDataStore where
+  type PropertyType "InsightsDestination" EventDataStore = Value Prelude.Text
+  set newValue EventDataStore {..}
+    = EventDataStore {insightsDestination = Prelude.pure newValue, ..}
+instance Property "KmsKeyId" EventDataStore where
+  type PropertyType "KmsKeyId" EventDataStore = Value Prelude.Text
+  set newValue EventDataStore {..}
+    = EventDataStore {kmsKeyId = Prelude.pure newValue, ..}
+instance Property "MaxEventSize" EventDataStore where
+  type PropertyType "MaxEventSize" EventDataStore = Value Prelude.Text
+  set newValue EventDataStore {..}
+    = EventDataStore {maxEventSize = Prelude.pure newValue, ..}
+instance Property "MultiRegionEnabled" EventDataStore where
+  type PropertyType "MultiRegionEnabled" EventDataStore = Value Prelude.Bool
+  set newValue EventDataStore {..}
+    = EventDataStore {multiRegionEnabled = Prelude.pure newValue, ..}
+instance Property "Name" EventDataStore where
+  type PropertyType "Name" EventDataStore = Value Prelude.Text
+  set newValue EventDataStore {..}
+    = EventDataStore {name = Prelude.pure newValue, ..}
+instance Property "OrganizationEnabled" EventDataStore where
+  type PropertyType "OrganizationEnabled" EventDataStore = Value Prelude.Bool
+  set newValue EventDataStore {..}
+    = EventDataStore {organizationEnabled = Prelude.pure newValue, ..}
+instance Property "RetentionPeriod" EventDataStore where
+  type PropertyType "RetentionPeriod" EventDataStore = Value Prelude.Integer
+  set newValue EventDataStore {..}
+    = EventDataStore {retentionPeriod = Prelude.pure newValue, ..}
+instance Property "Tags" EventDataStore where
+  type PropertyType "Tags" EventDataStore = [Tag]
+  set newValue EventDataStore {..}
+    = EventDataStore {tags = Prelude.pure newValue, ..}
+instance Property "TerminationProtectionEnabled" EventDataStore where
+  type PropertyType "TerminationProtectionEnabled" EventDataStore = Value Prelude.Bool
+  set newValue EventDataStore {..}
+    = EventDataStore
+        {terminationProtectionEnabled = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudTrail/EventDataStore/AdvancedEventSelectorProperty.hs b/gen/Stratosphere/CloudTrail/EventDataStore/AdvancedEventSelectorProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudTrail/EventDataStore/AdvancedEventSelectorProperty.hs
@@ -0,0 +1,48 @@
+module Stratosphere.CloudTrail.EventDataStore.AdvancedEventSelectorProperty (
+        module Exports, AdvancedEventSelectorProperty(..),
+        mkAdvancedEventSelectorProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudTrail.EventDataStore.AdvancedFieldSelectorProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AdvancedEventSelectorProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-eventdatastore-advancedeventselector.html>
+    AdvancedEventSelectorProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-eventdatastore-advancedeventselector.html#cfn-cloudtrail-eventdatastore-advancedeventselector-fieldselectors>
+                                   fieldSelectors :: [AdvancedFieldSelectorProperty],
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-eventdatastore-advancedeventselector.html#cfn-cloudtrail-eventdatastore-advancedeventselector-name>
+                                   name :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAdvancedEventSelectorProperty ::
+  [AdvancedFieldSelectorProperty] -> AdvancedEventSelectorProperty
+mkAdvancedEventSelectorProperty fieldSelectors
+  = AdvancedEventSelectorProperty
+      {haddock_workaround_ = (), fieldSelectors = fieldSelectors,
+       name = Prelude.Nothing}
+instance ToResourceProperties AdvancedEventSelectorProperty where
+  toResourceProperties AdvancedEventSelectorProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudTrail::EventDataStore.AdvancedEventSelector",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["FieldSelectors" JSON..= fieldSelectors]
+                           (Prelude.catMaybes [(JSON..=) "Name" Prelude.<$> name]))}
+instance JSON.ToJSON AdvancedEventSelectorProperty where
+  toJSON AdvancedEventSelectorProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["FieldSelectors" JSON..= fieldSelectors]
+              (Prelude.catMaybes [(JSON..=) "Name" Prelude.<$> name])))
+instance Property "FieldSelectors" AdvancedEventSelectorProperty where
+  type PropertyType "FieldSelectors" AdvancedEventSelectorProperty = [AdvancedFieldSelectorProperty]
+  set newValue AdvancedEventSelectorProperty {..}
+    = AdvancedEventSelectorProperty {fieldSelectors = newValue, ..}
+instance Property "Name" AdvancedEventSelectorProperty where
+  type PropertyType "Name" AdvancedEventSelectorProperty = Value Prelude.Text
+  set newValue AdvancedEventSelectorProperty {..}
+    = AdvancedEventSelectorProperty {name = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudTrail/EventDataStore/AdvancedEventSelectorProperty.hs-boot b/gen/Stratosphere/CloudTrail/EventDataStore/AdvancedEventSelectorProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudTrail/EventDataStore/AdvancedEventSelectorProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudTrail.EventDataStore.AdvancedEventSelectorProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AdvancedEventSelectorProperty :: Prelude.Type
+instance ToResourceProperties AdvancedEventSelectorProperty
+instance Prelude.Eq AdvancedEventSelectorProperty
+instance Prelude.Show AdvancedEventSelectorProperty
+instance JSON.ToJSON AdvancedEventSelectorProperty
diff --git a/gen/Stratosphere/CloudTrail/EventDataStore/AdvancedFieldSelectorProperty.hs b/gen/Stratosphere/CloudTrail/EventDataStore/AdvancedFieldSelectorProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudTrail/EventDataStore/AdvancedFieldSelectorProperty.hs
@@ -0,0 +1,96 @@
+module Stratosphere.CloudTrail.EventDataStore.AdvancedFieldSelectorProperty (
+        AdvancedFieldSelectorProperty(..), mkAdvancedFieldSelectorProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AdvancedFieldSelectorProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-eventdatastore-advancedfieldselector.html>
+    AdvancedFieldSelectorProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-eventdatastore-advancedfieldselector.html#cfn-cloudtrail-eventdatastore-advancedfieldselector-endswith>
+                                   endsWith :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-eventdatastore-advancedfieldselector.html#cfn-cloudtrail-eventdatastore-advancedfieldselector-equals>
+                                   equals :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-eventdatastore-advancedfieldselector.html#cfn-cloudtrail-eventdatastore-advancedfieldselector-field>
+                                   field :: (Value Prelude.Text),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-eventdatastore-advancedfieldselector.html#cfn-cloudtrail-eventdatastore-advancedfieldselector-notendswith>
+                                   notEndsWith :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-eventdatastore-advancedfieldselector.html#cfn-cloudtrail-eventdatastore-advancedfieldselector-notequals>
+                                   notEquals :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-eventdatastore-advancedfieldselector.html#cfn-cloudtrail-eventdatastore-advancedfieldselector-notstartswith>
+                                   notStartsWith :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-eventdatastore-advancedfieldselector.html#cfn-cloudtrail-eventdatastore-advancedfieldselector-startswith>
+                                   startsWith :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAdvancedFieldSelectorProperty ::
+  Value Prelude.Text -> AdvancedFieldSelectorProperty
+mkAdvancedFieldSelectorProperty field
+  = AdvancedFieldSelectorProperty
+      {haddock_workaround_ = (), field = field,
+       endsWith = Prelude.Nothing, equals = Prelude.Nothing,
+       notEndsWith = Prelude.Nothing, notEquals = Prelude.Nothing,
+       notStartsWith = Prelude.Nothing, startsWith = Prelude.Nothing}
+instance ToResourceProperties AdvancedFieldSelectorProperty where
+  toResourceProperties AdvancedFieldSelectorProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudTrail::EventDataStore.AdvancedFieldSelector",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Field" JSON..= field]
+                           (Prelude.catMaybes
+                              [(JSON..=) "EndsWith" Prelude.<$> endsWith,
+                               (JSON..=) "Equals" Prelude.<$> equals,
+                               (JSON..=) "NotEndsWith" Prelude.<$> notEndsWith,
+                               (JSON..=) "NotEquals" Prelude.<$> notEquals,
+                               (JSON..=) "NotStartsWith" Prelude.<$> notStartsWith,
+                               (JSON..=) "StartsWith" Prelude.<$> startsWith]))}
+instance JSON.ToJSON AdvancedFieldSelectorProperty where
+  toJSON AdvancedFieldSelectorProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Field" JSON..= field]
+              (Prelude.catMaybes
+                 [(JSON..=) "EndsWith" Prelude.<$> endsWith,
+                  (JSON..=) "Equals" Prelude.<$> equals,
+                  (JSON..=) "NotEndsWith" Prelude.<$> notEndsWith,
+                  (JSON..=) "NotEquals" Prelude.<$> notEquals,
+                  (JSON..=) "NotStartsWith" Prelude.<$> notStartsWith,
+                  (JSON..=) "StartsWith" Prelude.<$> startsWith])))
+instance Property "EndsWith" AdvancedFieldSelectorProperty where
+  type PropertyType "EndsWith" AdvancedFieldSelectorProperty = ValueList Prelude.Text
+  set newValue AdvancedFieldSelectorProperty {..}
+    = AdvancedFieldSelectorProperty
+        {endsWith = Prelude.pure newValue, ..}
+instance Property "Equals" AdvancedFieldSelectorProperty where
+  type PropertyType "Equals" AdvancedFieldSelectorProperty = ValueList Prelude.Text
+  set newValue AdvancedFieldSelectorProperty {..}
+    = AdvancedFieldSelectorProperty
+        {equals = Prelude.pure newValue, ..}
+instance Property "Field" AdvancedFieldSelectorProperty where
+  type PropertyType "Field" AdvancedFieldSelectorProperty = Value Prelude.Text
+  set newValue AdvancedFieldSelectorProperty {..}
+    = AdvancedFieldSelectorProperty {field = newValue, ..}
+instance Property "NotEndsWith" AdvancedFieldSelectorProperty where
+  type PropertyType "NotEndsWith" AdvancedFieldSelectorProperty = ValueList Prelude.Text
+  set newValue AdvancedFieldSelectorProperty {..}
+    = AdvancedFieldSelectorProperty
+        {notEndsWith = Prelude.pure newValue, ..}
+instance Property "NotEquals" AdvancedFieldSelectorProperty where
+  type PropertyType "NotEquals" AdvancedFieldSelectorProperty = ValueList Prelude.Text
+  set newValue AdvancedFieldSelectorProperty {..}
+    = AdvancedFieldSelectorProperty
+        {notEquals = Prelude.pure newValue, ..}
+instance Property "NotStartsWith" AdvancedFieldSelectorProperty where
+  type PropertyType "NotStartsWith" AdvancedFieldSelectorProperty = ValueList Prelude.Text
+  set newValue AdvancedFieldSelectorProperty {..}
+    = AdvancedFieldSelectorProperty
+        {notStartsWith = Prelude.pure newValue, ..}
+instance Property "StartsWith" AdvancedFieldSelectorProperty where
+  type PropertyType "StartsWith" AdvancedFieldSelectorProperty = ValueList Prelude.Text
+  set newValue AdvancedFieldSelectorProperty {..}
+    = AdvancedFieldSelectorProperty
+        {startsWith = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudTrail/EventDataStore/AdvancedFieldSelectorProperty.hs-boot b/gen/Stratosphere/CloudTrail/EventDataStore/AdvancedFieldSelectorProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudTrail/EventDataStore/AdvancedFieldSelectorProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudTrail.EventDataStore.AdvancedFieldSelectorProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AdvancedFieldSelectorProperty :: Prelude.Type
+instance ToResourceProperties AdvancedFieldSelectorProperty
+instance Prelude.Eq AdvancedFieldSelectorProperty
+instance Prelude.Show AdvancedFieldSelectorProperty
+instance JSON.ToJSON AdvancedFieldSelectorProperty
diff --git a/gen/Stratosphere/CloudTrail/EventDataStore/ContextKeySelectorProperty.hs b/gen/Stratosphere/CloudTrail/EventDataStore/ContextKeySelectorProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudTrail/EventDataStore/ContextKeySelectorProperty.hs
@@ -0,0 +1,39 @@
+module Stratosphere.CloudTrail.EventDataStore.ContextKeySelectorProperty (
+        ContextKeySelectorProperty(..), mkContextKeySelectorProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ContextKeySelectorProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-eventdatastore-contextkeyselector.html>
+    ContextKeySelectorProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-eventdatastore-contextkeyselector.html#cfn-cloudtrail-eventdatastore-contextkeyselector-equals>
+                                equals :: (ValueList Prelude.Text),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-eventdatastore-contextkeyselector.html#cfn-cloudtrail-eventdatastore-contextkeyselector-type>
+                                type' :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkContextKeySelectorProperty ::
+  ValueList Prelude.Text
+  -> Value Prelude.Text -> ContextKeySelectorProperty
+mkContextKeySelectorProperty equals type'
+  = ContextKeySelectorProperty
+      {haddock_workaround_ = (), equals = equals, type' = type'}
+instance ToResourceProperties ContextKeySelectorProperty where
+  toResourceProperties ContextKeySelectorProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudTrail::EventDataStore.ContextKeySelector",
+         supportsTags = Prelude.False,
+         properties = ["Equals" JSON..= equals, "Type" JSON..= type']}
+instance JSON.ToJSON ContextKeySelectorProperty where
+  toJSON ContextKeySelectorProperty {..}
+    = JSON.object ["Equals" JSON..= equals, "Type" JSON..= type']
+instance Property "Equals" ContextKeySelectorProperty where
+  type PropertyType "Equals" ContextKeySelectorProperty = ValueList Prelude.Text
+  set newValue ContextKeySelectorProperty {..}
+    = ContextKeySelectorProperty {equals = newValue, ..}
+instance Property "Type" ContextKeySelectorProperty where
+  type PropertyType "Type" ContextKeySelectorProperty = Value Prelude.Text
+  set newValue ContextKeySelectorProperty {..}
+    = ContextKeySelectorProperty {type' = newValue, ..}
diff --git a/gen/Stratosphere/CloudTrail/EventDataStore/ContextKeySelectorProperty.hs-boot b/gen/Stratosphere/CloudTrail/EventDataStore/ContextKeySelectorProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudTrail/EventDataStore/ContextKeySelectorProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudTrail.EventDataStore.ContextKeySelectorProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ContextKeySelectorProperty :: Prelude.Type
+instance ToResourceProperties ContextKeySelectorProperty
+instance Prelude.Eq ContextKeySelectorProperty
+instance Prelude.Show ContextKeySelectorProperty
+instance JSON.ToJSON ContextKeySelectorProperty
diff --git a/gen/Stratosphere/CloudTrail/EventDataStore/InsightSelectorProperty.hs b/gen/Stratosphere/CloudTrail/EventDataStore/InsightSelectorProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudTrail/EventDataStore/InsightSelectorProperty.hs
@@ -0,0 +1,36 @@
+module Stratosphere.CloudTrail.EventDataStore.InsightSelectorProperty (
+        InsightSelectorProperty(..), mkInsightSelectorProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data InsightSelectorProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-eventdatastore-insightselector.html>
+    InsightSelectorProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-eventdatastore-insightselector.html#cfn-cloudtrail-eventdatastore-insightselector-insighttype>
+                             insightType :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkInsightSelectorProperty :: InsightSelectorProperty
+mkInsightSelectorProperty
+  = InsightSelectorProperty
+      {haddock_workaround_ = (), insightType = Prelude.Nothing}
+instance ToResourceProperties InsightSelectorProperty where
+  toResourceProperties InsightSelectorProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudTrail::EventDataStore.InsightSelector",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "InsightType" Prelude.<$> insightType])}
+instance JSON.ToJSON InsightSelectorProperty where
+  toJSON InsightSelectorProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "InsightType" Prelude.<$> insightType]))
+instance Property "InsightType" InsightSelectorProperty where
+  type PropertyType "InsightType" InsightSelectorProperty = Value Prelude.Text
+  set newValue InsightSelectorProperty {..}
+    = InsightSelectorProperty {insightType = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudTrail/EventDataStore/InsightSelectorProperty.hs-boot b/gen/Stratosphere/CloudTrail/EventDataStore/InsightSelectorProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudTrail/EventDataStore/InsightSelectorProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudTrail.EventDataStore.InsightSelectorProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data InsightSelectorProperty :: Prelude.Type
+instance ToResourceProperties InsightSelectorProperty
+instance Prelude.Eq InsightSelectorProperty
+instance Prelude.Show InsightSelectorProperty
+instance JSON.ToJSON InsightSelectorProperty
diff --git a/gen/Stratosphere/CloudTrail/ResourcePolicy.hs b/gen/Stratosphere/CloudTrail/ResourcePolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudTrail/ResourcePolicy.hs
@@ -0,0 +1,42 @@
+module Stratosphere.CloudTrail.ResourcePolicy (
+        ResourcePolicy(..), mkResourcePolicy
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ResourcePolicy
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-resourcepolicy.html>
+    ResourcePolicy {haddock_workaround_ :: (),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-resourcepolicy.html#cfn-cloudtrail-resourcepolicy-resourcearn>
+                    resourceArn :: (Value Prelude.Text),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-resourcepolicy.html#cfn-cloudtrail-resourcepolicy-resourcepolicy>
+                    resourcePolicy :: JSON.Object}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkResourcePolicy ::
+  Value Prelude.Text -> JSON.Object -> ResourcePolicy
+mkResourcePolicy resourceArn resourcePolicy
+  = ResourcePolicy
+      {haddock_workaround_ = (), resourceArn = resourceArn,
+       resourcePolicy = resourcePolicy}
+instance ToResourceProperties ResourcePolicy where
+  toResourceProperties ResourcePolicy {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudTrail::ResourcePolicy",
+         supportsTags = Prelude.False,
+         properties = ["ResourceArn" JSON..= resourceArn,
+                       "ResourcePolicy" JSON..= resourcePolicy]}
+instance JSON.ToJSON ResourcePolicy where
+  toJSON ResourcePolicy {..}
+    = JSON.object
+        ["ResourceArn" JSON..= resourceArn,
+         "ResourcePolicy" JSON..= resourcePolicy]
+instance Property "ResourceArn" ResourcePolicy where
+  type PropertyType "ResourceArn" ResourcePolicy = Value Prelude.Text
+  set newValue ResourcePolicy {..}
+    = ResourcePolicy {resourceArn = newValue, ..}
+instance Property "ResourcePolicy" ResourcePolicy where
+  type PropertyType "ResourcePolicy" ResourcePolicy = JSON.Object
+  set newValue ResourcePolicy {..}
+    = ResourcePolicy {resourcePolicy = newValue, ..}
diff --git a/gen/Stratosphere/CloudTrail/Trail.hs b/gen/Stratosphere/CloudTrail/Trail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudTrail/Trail.hs
@@ -0,0 +1,180 @@
+module Stratosphere.CloudTrail.Trail (
+        module Exports, Trail(..), mkTrail
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudTrail.Trail.AdvancedEventSelectorProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudTrail.Trail.EventSelectorProperty as Exports
+import {-# SOURCE #-} Stratosphere.CloudTrail.Trail.InsightSelectorProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data Trail
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-trail.html>
+    Trail {haddock_workaround_ :: (),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-trail.html#cfn-cloudtrail-trail-advancedeventselectors>
+           advancedEventSelectors :: (Prelude.Maybe [AdvancedEventSelectorProperty]),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-trail.html#cfn-cloudtrail-trail-cloudwatchlogsloggrouparn>
+           cloudWatchLogsLogGroupArn :: (Prelude.Maybe (Value Prelude.Text)),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-trail.html#cfn-cloudtrail-trail-cloudwatchlogsrolearn>
+           cloudWatchLogsRoleArn :: (Prelude.Maybe (Value Prelude.Text)),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-trail.html#cfn-cloudtrail-trail-enablelogfilevalidation>
+           enableLogFileValidation :: (Prelude.Maybe (Value Prelude.Bool)),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-trail.html#cfn-cloudtrail-trail-eventselectors>
+           eventSelectors :: (Prelude.Maybe [EventSelectorProperty]),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-trail.html#cfn-cloudtrail-trail-includeglobalserviceevents>
+           includeGlobalServiceEvents :: (Prelude.Maybe (Value Prelude.Bool)),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-trail.html#cfn-cloudtrail-trail-insightselectors>
+           insightSelectors :: (Prelude.Maybe [InsightSelectorProperty]),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-trail.html#cfn-cloudtrail-trail-islogging>
+           isLogging :: (Value Prelude.Bool),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-trail.html#cfn-cloudtrail-trail-ismultiregiontrail>
+           isMultiRegionTrail :: (Prelude.Maybe (Value Prelude.Bool)),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-trail.html#cfn-cloudtrail-trail-isorganizationtrail>
+           isOrganizationTrail :: (Prelude.Maybe (Value Prelude.Bool)),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-trail.html#cfn-cloudtrail-trail-kmskeyid>
+           kMSKeyId :: (Prelude.Maybe (Value Prelude.Text)),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-trail.html#cfn-cloudtrail-trail-s3bucketname>
+           s3BucketName :: (Value Prelude.Text),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-trail.html#cfn-cloudtrail-trail-s3keyprefix>
+           s3KeyPrefix :: (Prelude.Maybe (Value Prelude.Text)),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-trail.html#cfn-cloudtrail-trail-snstopicname>
+           snsTopicName :: (Prelude.Maybe (Value Prelude.Text)),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-trail.html#cfn-cloudtrail-trail-tags>
+           tags :: (Prelude.Maybe [Tag]),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-trail.html#cfn-cloudtrail-trail-trailname>
+           trailName :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTrail :: Value Prelude.Bool -> Value Prelude.Text -> Trail
+mkTrail isLogging s3BucketName
+  = Trail
+      {haddock_workaround_ = (), isLogging = isLogging,
+       s3BucketName = s3BucketName,
+       advancedEventSelectors = Prelude.Nothing,
+       cloudWatchLogsLogGroupArn = Prelude.Nothing,
+       cloudWatchLogsRoleArn = Prelude.Nothing,
+       enableLogFileValidation = Prelude.Nothing,
+       eventSelectors = Prelude.Nothing,
+       includeGlobalServiceEvents = Prelude.Nothing,
+       insightSelectors = Prelude.Nothing,
+       isMultiRegionTrail = Prelude.Nothing,
+       isOrganizationTrail = Prelude.Nothing, kMSKeyId = Prelude.Nothing,
+       s3KeyPrefix = Prelude.Nothing, snsTopicName = Prelude.Nothing,
+       tags = Prelude.Nothing, trailName = Prelude.Nothing}
+instance ToResourceProperties Trail where
+  toResourceProperties Trail {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudTrail::Trail", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["IsLogging" JSON..= isLogging,
+                            "S3BucketName" JSON..= s3BucketName]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AdvancedEventSelectors"
+                                 Prelude.<$> advancedEventSelectors,
+                               (JSON..=) "CloudWatchLogsLogGroupArn"
+                                 Prelude.<$> cloudWatchLogsLogGroupArn,
+                               (JSON..=) "CloudWatchLogsRoleArn"
+                                 Prelude.<$> cloudWatchLogsRoleArn,
+                               (JSON..=) "EnableLogFileValidation"
+                                 Prelude.<$> enableLogFileValidation,
+                               (JSON..=) "EventSelectors" Prelude.<$> eventSelectors,
+                               (JSON..=) "IncludeGlobalServiceEvents"
+                                 Prelude.<$> includeGlobalServiceEvents,
+                               (JSON..=) "InsightSelectors" Prelude.<$> insightSelectors,
+                               (JSON..=) "IsMultiRegionTrail" Prelude.<$> isMultiRegionTrail,
+                               (JSON..=) "IsOrganizationTrail" Prelude.<$> isOrganizationTrail,
+                               (JSON..=) "KMSKeyId" Prelude.<$> kMSKeyId,
+                               (JSON..=) "S3KeyPrefix" Prelude.<$> s3KeyPrefix,
+                               (JSON..=) "SnsTopicName" Prelude.<$> snsTopicName,
+                               (JSON..=) "Tags" Prelude.<$> tags,
+                               (JSON..=) "TrailName" Prelude.<$> trailName]))}
+instance JSON.ToJSON Trail where
+  toJSON Trail {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["IsLogging" JSON..= isLogging,
+               "S3BucketName" JSON..= s3BucketName]
+              (Prelude.catMaybes
+                 [(JSON..=) "AdvancedEventSelectors"
+                    Prelude.<$> advancedEventSelectors,
+                  (JSON..=) "CloudWatchLogsLogGroupArn"
+                    Prelude.<$> cloudWatchLogsLogGroupArn,
+                  (JSON..=) "CloudWatchLogsRoleArn"
+                    Prelude.<$> cloudWatchLogsRoleArn,
+                  (JSON..=) "EnableLogFileValidation"
+                    Prelude.<$> enableLogFileValidation,
+                  (JSON..=) "EventSelectors" Prelude.<$> eventSelectors,
+                  (JSON..=) "IncludeGlobalServiceEvents"
+                    Prelude.<$> includeGlobalServiceEvents,
+                  (JSON..=) "InsightSelectors" Prelude.<$> insightSelectors,
+                  (JSON..=) "IsMultiRegionTrail" Prelude.<$> isMultiRegionTrail,
+                  (JSON..=) "IsOrganizationTrail" Prelude.<$> isOrganizationTrail,
+                  (JSON..=) "KMSKeyId" Prelude.<$> kMSKeyId,
+                  (JSON..=) "S3KeyPrefix" Prelude.<$> s3KeyPrefix,
+                  (JSON..=) "SnsTopicName" Prelude.<$> snsTopicName,
+                  (JSON..=) "Tags" Prelude.<$> tags,
+                  (JSON..=) "TrailName" Prelude.<$> trailName])))
+instance Property "AdvancedEventSelectors" Trail where
+  type PropertyType "AdvancedEventSelectors" Trail = [AdvancedEventSelectorProperty]
+  set newValue Trail {..}
+    = Trail {advancedEventSelectors = Prelude.pure newValue, ..}
+instance Property "CloudWatchLogsLogGroupArn" Trail where
+  type PropertyType "CloudWatchLogsLogGroupArn" Trail = Value Prelude.Text
+  set newValue Trail {..}
+    = Trail {cloudWatchLogsLogGroupArn = Prelude.pure newValue, ..}
+instance Property "CloudWatchLogsRoleArn" Trail where
+  type PropertyType "CloudWatchLogsRoleArn" Trail = Value Prelude.Text
+  set newValue Trail {..}
+    = Trail {cloudWatchLogsRoleArn = Prelude.pure newValue, ..}
+instance Property "EnableLogFileValidation" Trail where
+  type PropertyType "EnableLogFileValidation" Trail = Value Prelude.Bool
+  set newValue Trail {..}
+    = Trail {enableLogFileValidation = Prelude.pure newValue, ..}
+instance Property "EventSelectors" Trail where
+  type PropertyType "EventSelectors" Trail = [EventSelectorProperty]
+  set newValue Trail {..}
+    = Trail {eventSelectors = Prelude.pure newValue, ..}
+instance Property "IncludeGlobalServiceEvents" Trail where
+  type PropertyType "IncludeGlobalServiceEvents" Trail = Value Prelude.Bool
+  set newValue Trail {..}
+    = Trail {includeGlobalServiceEvents = Prelude.pure newValue, ..}
+instance Property "InsightSelectors" Trail where
+  type PropertyType "InsightSelectors" Trail = [InsightSelectorProperty]
+  set newValue Trail {..}
+    = Trail {insightSelectors = Prelude.pure newValue, ..}
+instance Property "IsLogging" Trail where
+  type PropertyType "IsLogging" Trail = Value Prelude.Bool
+  set newValue Trail {..} = Trail {isLogging = newValue, ..}
+instance Property "IsMultiRegionTrail" Trail where
+  type PropertyType "IsMultiRegionTrail" Trail = Value Prelude.Bool
+  set newValue Trail {..}
+    = Trail {isMultiRegionTrail = Prelude.pure newValue, ..}
+instance Property "IsOrganizationTrail" Trail where
+  type PropertyType "IsOrganizationTrail" Trail = Value Prelude.Bool
+  set newValue Trail {..}
+    = Trail {isOrganizationTrail = Prelude.pure newValue, ..}
+instance Property "KMSKeyId" Trail where
+  type PropertyType "KMSKeyId" Trail = Value Prelude.Text
+  set newValue Trail {..}
+    = Trail {kMSKeyId = Prelude.pure newValue, ..}
+instance Property "S3BucketName" Trail where
+  type PropertyType "S3BucketName" Trail = Value Prelude.Text
+  set newValue Trail {..} = Trail {s3BucketName = newValue, ..}
+instance Property "S3KeyPrefix" Trail where
+  type PropertyType "S3KeyPrefix" Trail = Value Prelude.Text
+  set newValue Trail {..}
+    = Trail {s3KeyPrefix = Prelude.pure newValue, ..}
+instance Property "SnsTopicName" Trail where
+  type PropertyType "SnsTopicName" Trail = Value Prelude.Text
+  set newValue Trail {..}
+    = Trail {snsTopicName = Prelude.pure newValue, ..}
+instance Property "Tags" Trail where
+  type PropertyType "Tags" Trail = [Tag]
+  set newValue Trail {..} = Trail {tags = Prelude.pure newValue, ..}
+instance Property "TrailName" Trail where
+  type PropertyType "TrailName" Trail = Value Prelude.Text
+  set newValue Trail {..}
+    = Trail {trailName = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudTrail/Trail/AdvancedEventSelectorProperty.hs b/gen/Stratosphere/CloudTrail/Trail/AdvancedEventSelectorProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudTrail/Trail/AdvancedEventSelectorProperty.hs
@@ -0,0 +1,48 @@
+module Stratosphere.CloudTrail.Trail.AdvancedEventSelectorProperty (
+        module Exports, AdvancedEventSelectorProperty(..),
+        mkAdvancedEventSelectorProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudTrail.Trail.AdvancedFieldSelectorProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AdvancedEventSelectorProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-trail-advancedeventselector.html>
+    AdvancedEventSelectorProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-trail-advancedeventselector.html#cfn-cloudtrail-trail-advancedeventselector-fieldselectors>
+                                   fieldSelectors :: [AdvancedFieldSelectorProperty],
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-trail-advancedeventselector.html#cfn-cloudtrail-trail-advancedeventselector-name>
+                                   name :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAdvancedEventSelectorProperty ::
+  [AdvancedFieldSelectorProperty] -> AdvancedEventSelectorProperty
+mkAdvancedEventSelectorProperty fieldSelectors
+  = AdvancedEventSelectorProperty
+      {haddock_workaround_ = (), fieldSelectors = fieldSelectors,
+       name = Prelude.Nothing}
+instance ToResourceProperties AdvancedEventSelectorProperty where
+  toResourceProperties AdvancedEventSelectorProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudTrail::Trail.AdvancedEventSelector",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["FieldSelectors" JSON..= fieldSelectors]
+                           (Prelude.catMaybes [(JSON..=) "Name" Prelude.<$> name]))}
+instance JSON.ToJSON AdvancedEventSelectorProperty where
+  toJSON AdvancedEventSelectorProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["FieldSelectors" JSON..= fieldSelectors]
+              (Prelude.catMaybes [(JSON..=) "Name" Prelude.<$> name])))
+instance Property "FieldSelectors" AdvancedEventSelectorProperty where
+  type PropertyType "FieldSelectors" AdvancedEventSelectorProperty = [AdvancedFieldSelectorProperty]
+  set newValue AdvancedEventSelectorProperty {..}
+    = AdvancedEventSelectorProperty {fieldSelectors = newValue, ..}
+instance Property "Name" AdvancedEventSelectorProperty where
+  type PropertyType "Name" AdvancedEventSelectorProperty = Value Prelude.Text
+  set newValue AdvancedEventSelectorProperty {..}
+    = AdvancedEventSelectorProperty {name = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudTrail/Trail/AdvancedEventSelectorProperty.hs-boot b/gen/Stratosphere/CloudTrail/Trail/AdvancedEventSelectorProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudTrail/Trail/AdvancedEventSelectorProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudTrail.Trail.AdvancedEventSelectorProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AdvancedEventSelectorProperty :: Prelude.Type
+instance ToResourceProperties AdvancedEventSelectorProperty
+instance Prelude.Eq AdvancedEventSelectorProperty
+instance Prelude.Show AdvancedEventSelectorProperty
+instance JSON.ToJSON AdvancedEventSelectorProperty
diff --git a/gen/Stratosphere/CloudTrail/Trail/AdvancedFieldSelectorProperty.hs b/gen/Stratosphere/CloudTrail/Trail/AdvancedFieldSelectorProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudTrail/Trail/AdvancedFieldSelectorProperty.hs
@@ -0,0 +1,96 @@
+module Stratosphere.CloudTrail.Trail.AdvancedFieldSelectorProperty (
+        AdvancedFieldSelectorProperty(..), mkAdvancedFieldSelectorProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AdvancedFieldSelectorProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-trail-advancedfieldselector.html>
+    AdvancedFieldSelectorProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-trail-advancedfieldselector.html#cfn-cloudtrail-trail-advancedfieldselector-endswith>
+                                   endsWith :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-trail-advancedfieldselector.html#cfn-cloudtrail-trail-advancedfieldselector-equals>
+                                   equals :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-trail-advancedfieldselector.html#cfn-cloudtrail-trail-advancedfieldselector-field>
+                                   field :: (Value Prelude.Text),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-trail-advancedfieldselector.html#cfn-cloudtrail-trail-advancedfieldselector-notendswith>
+                                   notEndsWith :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-trail-advancedfieldselector.html#cfn-cloudtrail-trail-advancedfieldselector-notequals>
+                                   notEquals :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-trail-advancedfieldselector.html#cfn-cloudtrail-trail-advancedfieldselector-notstartswith>
+                                   notStartsWith :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-trail-advancedfieldselector.html#cfn-cloudtrail-trail-advancedfieldselector-startswith>
+                                   startsWith :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAdvancedFieldSelectorProperty ::
+  Value Prelude.Text -> AdvancedFieldSelectorProperty
+mkAdvancedFieldSelectorProperty field
+  = AdvancedFieldSelectorProperty
+      {haddock_workaround_ = (), field = field,
+       endsWith = Prelude.Nothing, equals = Prelude.Nothing,
+       notEndsWith = Prelude.Nothing, notEquals = Prelude.Nothing,
+       notStartsWith = Prelude.Nothing, startsWith = Prelude.Nothing}
+instance ToResourceProperties AdvancedFieldSelectorProperty where
+  toResourceProperties AdvancedFieldSelectorProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudTrail::Trail.AdvancedFieldSelector",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Field" JSON..= field]
+                           (Prelude.catMaybes
+                              [(JSON..=) "EndsWith" Prelude.<$> endsWith,
+                               (JSON..=) "Equals" Prelude.<$> equals,
+                               (JSON..=) "NotEndsWith" Prelude.<$> notEndsWith,
+                               (JSON..=) "NotEquals" Prelude.<$> notEquals,
+                               (JSON..=) "NotStartsWith" Prelude.<$> notStartsWith,
+                               (JSON..=) "StartsWith" Prelude.<$> startsWith]))}
+instance JSON.ToJSON AdvancedFieldSelectorProperty where
+  toJSON AdvancedFieldSelectorProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Field" JSON..= field]
+              (Prelude.catMaybes
+                 [(JSON..=) "EndsWith" Prelude.<$> endsWith,
+                  (JSON..=) "Equals" Prelude.<$> equals,
+                  (JSON..=) "NotEndsWith" Prelude.<$> notEndsWith,
+                  (JSON..=) "NotEquals" Prelude.<$> notEquals,
+                  (JSON..=) "NotStartsWith" Prelude.<$> notStartsWith,
+                  (JSON..=) "StartsWith" Prelude.<$> startsWith])))
+instance Property "EndsWith" AdvancedFieldSelectorProperty where
+  type PropertyType "EndsWith" AdvancedFieldSelectorProperty = ValueList Prelude.Text
+  set newValue AdvancedFieldSelectorProperty {..}
+    = AdvancedFieldSelectorProperty
+        {endsWith = Prelude.pure newValue, ..}
+instance Property "Equals" AdvancedFieldSelectorProperty where
+  type PropertyType "Equals" AdvancedFieldSelectorProperty = ValueList Prelude.Text
+  set newValue AdvancedFieldSelectorProperty {..}
+    = AdvancedFieldSelectorProperty
+        {equals = Prelude.pure newValue, ..}
+instance Property "Field" AdvancedFieldSelectorProperty where
+  type PropertyType "Field" AdvancedFieldSelectorProperty = Value Prelude.Text
+  set newValue AdvancedFieldSelectorProperty {..}
+    = AdvancedFieldSelectorProperty {field = newValue, ..}
+instance Property "NotEndsWith" AdvancedFieldSelectorProperty where
+  type PropertyType "NotEndsWith" AdvancedFieldSelectorProperty = ValueList Prelude.Text
+  set newValue AdvancedFieldSelectorProperty {..}
+    = AdvancedFieldSelectorProperty
+        {notEndsWith = Prelude.pure newValue, ..}
+instance Property "NotEquals" AdvancedFieldSelectorProperty where
+  type PropertyType "NotEquals" AdvancedFieldSelectorProperty = ValueList Prelude.Text
+  set newValue AdvancedFieldSelectorProperty {..}
+    = AdvancedFieldSelectorProperty
+        {notEquals = Prelude.pure newValue, ..}
+instance Property "NotStartsWith" AdvancedFieldSelectorProperty where
+  type PropertyType "NotStartsWith" AdvancedFieldSelectorProperty = ValueList Prelude.Text
+  set newValue AdvancedFieldSelectorProperty {..}
+    = AdvancedFieldSelectorProperty
+        {notStartsWith = Prelude.pure newValue, ..}
+instance Property "StartsWith" AdvancedFieldSelectorProperty where
+  type PropertyType "StartsWith" AdvancedFieldSelectorProperty = ValueList Prelude.Text
+  set newValue AdvancedFieldSelectorProperty {..}
+    = AdvancedFieldSelectorProperty
+        {startsWith = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudTrail/Trail/AdvancedFieldSelectorProperty.hs-boot b/gen/Stratosphere/CloudTrail/Trail/AdvancedFieldSelectorProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudTrail/Trail/AdvancedFieldSelectorProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudTrail.Trail.AdvancedFieldSelectorProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AdvancedFieldSelectorProperty :: Prelude.Type
+instance ToResourceProperties AdvancedFieldSelectorProperty
+instance Prelude.Eq AdvancedFieldSelectorProperty
+instance Prelude.Show AdvancedFieldSelectorProperty
+instance JSON.ToJSON AdvancedFieldSelectorProperty
diff --git a/gen/Stratosphere/CloudTrail/Trail/DataResourceProperty.hs b/gen/Stratosphere/CloudTrail/Trail/DataResourceProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudTrail/Trail/DataResourceProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.CloudTrail.Trail.DataResourceProperty (
+        DataResourceProperty(..), mkDataResourceProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data DataResourceProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-trail-dataresource.html>
+    DataResourceProperty {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-trail-dataresource.html#cfn-cloudtrail-trail-dataresource-type>
+                          type' :: (Value Prelude.Text),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-trail-dataresource.html#cfn-cloudtrail-trail-dataresource-values>
+                          values :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDataResourceProperty ::
+  Value Prelude.Text -> DataResourceProperty
+mkDataResourceProperty type'
+  = DataResourceProperty
+      {haddock_workaround_ = (), type' = type', values = Prelude.Nothing}
+instance ToResourceProperties DataResourceProperty where
+  toResourceProperties DataResourceProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudTrail::Trail.DataResource",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Type" JSON..= type']
+                           (Prelude.catMaybes [(JSON..=) "Values" Prelude.<$> values]))}
+instance JSON.ToJSON DataResourceProperty where
+  toJSON DataResourceProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Type" JSON..= type']
+              (Prelude.catMaybes [(JSON..=) "Values" Prelude.<$> values])))
+instance Property "Type" DataResourceProperty where
+  type PropertyType "Type" DataResourceProperty = Value Prelude.Text
+  set newValue DataResourceProperty {..}
+    = DataResourceProperty {type' = newValue, ..}
+instance Property "Values" DataResourceProperty where
+  type PropertyType "Values" DataResourceProperty = ValueList Prelude.Text
+  set newValue DataResourceProperty {..}
+    = DataResourceProperty {values = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudTrail/Trail/DataResourceProperty.hs-boot b/gen/Stratosphere/CloudTrail/Trail/DataResourceProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudTrail/Trail/DataResourceProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudTrail.Trail.DataResourceProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data DataResourceProperty :: Prelude.Type
+instance ToResourceProperties DataResourceProperty
+instance Prelude.Eq DataResourceProperty
+instance Prelude.Show DataResourceProperty
+instance JSON.ToJSON DataResourceProperty
diff --git a/gen/Stratosphere/CloudTrail/Trail/EventSelectorProperty.hs b/gen/Stratosphere/CloudTrail/Trail/EventSelectorProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudTrail/Trail/EventSelectorProperty.hs
@@ -0,0 +1,70 @@
+module Stratosphere.CloudTrail.Trail.EventSelectorProperty (
+        module Exports, EventSelectorProperty(..), mkEventSelectorProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CloudTrail.Trail.DataResourceProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EventSelectorProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-trail-eventselector.html>
+    EventSelectorProperty {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-trail-eventselector.html#cfn-cloudtrail-trail-eventselector-dataresources>
+                           dataResources :: (Prelude.Maybe [DataResourceProperty]),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-trail-eventselector.html#cfn-cloudtrail-trail-eventselector-excludemanagementeventsources>
+                           excludeManagementEventSources :: (Prelude.Maybe (ValueList Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-trail-eventselector.html#cfn-cloudtrail-trail-eventselector-includemanagementevents>
+                           includeManagementEvents :: (Prelude.Maybe (Value Prelude.Bool)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-trail-eventselector.html#cfn-cloudtrail-trail-eventselector-readwritetype>
+                           readWriteType :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEventSelectorProperty :: EventSelectorProperty
+mkEventSelectorProperty
+  = EventSelectorProperty
+      {haddock_workaround_ = (), dataResources = Prelude.Nothing,
+       excludeManagementEventSources = Prelude.Nothing,
+       includeManagementEvents = Prelude.Nothing,
+       readWriteType = Prelude.Nothing}
+instance ToResourceProperties EventSelectorProperty where
+  toResourceProperties EventSelectorProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudTrail::Trail.EventSelector",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "DataResources" Prelude.<$> dataResources,
+                            (JSON..=) "ExcludeManagementEventSources"
+                              Prelude.<$> excludeManagementEventSources,
+                            (JSON..=) "IncludeManagementEvents"
+                              Prelude.<$> includeManagementEvents,
+                            (JSON..=) "ReadWriteType" Prelude.<$> readWriteType])}
+instance JSON.ToJSON EventSelectorProperty where
+  toJSON EventSelectorProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "DataResources" Prelude.<$> dataResources,
+               (JSON..=) "ExcludeManagementEventSources"
+                 Prelude.<$> excludeManagementEventSources,
+               (JSON..=) "IncludeManagementEvents"
+                 Prelude.<$> includeManagementEvents,
+               (JSON..=) "ReadWriteType" Prelude.<$> readWriteType]))
+instance Property "DataResources" EventSelectorProperty where
+  type PropertyType "DataResources" EventSelectorProperty = [DataResourceProperty]
+  set newValue EventSelectorProperty {..}
+    = EventSelectorProperty {dataResources = Prelude.pure newValue, ..}
+instance Property "ExcludeManagementEventSources" EventSelectorProperty where
+  type PropertyType "ExcludeManagementEventSources" EventSelectorProperty = ValueList Prelude.Text
+  set newValue EventSelectorProperty {..}
+    = EventSelectorProperty
+        {excludeManagementEventSources = Prelude.pure newValue, ..}
+instance Property "IncludeManagementEvents" EventSelectorProperty where
+  type PropertyType "IncludeManagementEvents" EventSelectorProperty = Value Prelude.Bool
+  set newValue EventSelectorProperty {..}
+    = EventSelectorProperty
+        {includeManagementEvents = Prelude.pure newValue, ..}
+instance Property "ReadWriteType" EventSelectorProperty where
+  type PropertyType "ReadWriteType" EventSelectorProperty = Value Prelude.Text
+  set newValue EventSelectorProperty {..}
+    = EventSelectorProperty {readWriteType = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudTrail/Trail/EventSelectorProperty.hs-boot b/gen/Stratosphere/CloudTrail/Trail/EventSelectorProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudTrail/Trail/EventSelectorProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudTrail.Trail.EventSelectorProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EventSelectorProperty :: Prelude.Type
+instance ToResourceProperties EventSelectorProperty
+instance Prelude.Eq EventSelectorProperty
+instance Prelude.Show EventSelectorProperty
+instance JSON.ToJSON EventSelectorProperty
diff --git a/gen/Stratosphere/CloudTrail/Trail/InsightSelectorProperty.hs b/gen/Stratosphere/CloudTrail/Trail/InsightSelectorProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudTrail/Trail/InsightSelectorProperty.hs
@@ -0,0 +1,36 @@
+module Stratosphere.CloudTrail.Trail.InsightSelectorProperty (
+        InsightSelectorProperty(..), mkInsightSelectorProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data InsightSelectorProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-trail-insightselector.html>
+    InsightSelectorProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudtrail-trail-insightselector.html#cfn-cloudtrail-trail-insightselector-insighttype>
+                             insightType :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkInsightSelectorProperty :: InsightSelectorProperty
+mkInsightSelectorProperty
+  = InsightSelectorProperty
+      {haddock_workaround_ = (), insightType = Prelude.Nothing}
+instance ToResourceProperties InsightSelectorProperty where
+  toResourceProperties InsightSelectorProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CloudTrail::Trail.InsightSelector",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "InsightType" Prelude.<$> insightType])}
+instance JSON.ToJSON InsightSelectorProperty where
+  toJSON InsightSelectorProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "InsightType" Prelude.<$> insightType]))
+instance Property "InsightType" InsightSelectorProperty where
+  type PropertyType "InsightType" InsightSelectorProperty = Value Prelude.Text
+  set newValue InsightSelectorProperty {..}
+    = InsightSelectorProperty {insightType = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CloudTrail/Trail/InsightSelectorProperty.hs-boot b/gen/Stratosphere/CloudTrail/Trail/InsightSelectorProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CloudTrail/Trail/InsightSelectorProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CloudTrail.Trail.InsightSelectorProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data InsightSelectorProperty :: Prelude.Type
+instance ToResourceProperties InsightSelectorProperty
+instance Prelude.Eq InsightSelectorProperty
+instance Prelude.Show InsightSelectorProperty
+instance JSON.ToJSON InsightSelectorProperty
diff --git a/stratosphere-cloudtrail.cabal b/stratosphere-cloudtrail.cabal
new file mode 100644
--- /dev/null
+++ b/stratosphere-cloudtrail.cabal
@@ -0,0 +1,90 @@
+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-cloudtrail
+version:        1.0.0
+synopsis:       Stratosphere integration for AWS CloudTrail.
+description:    Integration into stratosphere to generate resources and properties for AWS CloudTrail
+category:       AWS, Cloud, CloudTrail
+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.CloudTrail.Channel
+      Stratosphere.CloudTrail.Channel.DestinationProperty
+      Stratosphere.CloudTrail.Dashboard
+      Stratosphere.CloudTrail.Dashboard.FrequencyProperty
+      Stratosphere.CloudTrail.Dashboard.RefreshScheduleProperty
+      Stratosphere.CloudTrail.Dashboard.WidgetProperty
+      Stratosphere.CloudTrail.EventDataStore
+      Stratosphere.CloudTrail.EventDataStore.AdvancedEventSelectorProperty
+      Stratosphere.CloudTrail.EventDataStore.AdvancedFieldSelectorProperty
+      Stratosphere.CloudTrail.EventDataStore.ContextKeySelectorProperty
+      Stratosphere.CloudTrail.EventDataStore.InsightSelectorProperty
+      Stratosphere.CloudTrail.ResourcePolicy
+      Stratosphere.CloudTrail.Trail
+      Stratosphere.CloudTrail.Trail.AdvancedEventSelectorProperty
+      Stratosphere.CloudTrail.Trail.AdvancedFieldSelectorProperty
+      Stratosphere.CloudTrail.Trail.DataResourceProperty
+      Stratosphere.CloudTrail.Trail.EventSelectorProperty
+      Stratosphere.CloudTrail.Trail.InsightSelectorProperty
+  other-modules:
+      Paths_stratosphere_cloudtrail
+  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
