diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
 
 ## Version
 
-`1.4.5`
+`1.5.0`
 
 
 ## Description
diff --git a/amazonka-s3.cabal b/amazonka-s3.cabal
--- a/amazonka-s3.cabal
+++ b/amazonka-s3.cabal
@@ -1,13 +1,13 @@
 name:                  amazonka-s3
-version:               1.4.5
+version:               1.5.0
 synopsis:              Amazon Simple Storage Service SDK.
 homepage:              https://github.com/brendanhay/amazonka
 bug-reports:           https://github.com/brendanhay/amazonka/issues
-license:               OtherLicense
+license:               MPL-2.0
 license-file:          LICENSE
 author:                Brendan Hay
-maintainer:            Brendan Hay <brendan.g.hay@gmail.com>
-copyright:             Copyright (c) 2013-2016 Brendan Hay
+maintainer:            Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+copyright:             Copyright (c) 2013-2017 Brendan Hay
 category:              Network, AWS, Cloud, Distributed Computing
 build-type:            Simple
 cabal-version:         >= 1.10
@@ -29,14 +29,19 @@
     to get started.
 
 source-repository head
-    type:     git
-    location: git://github.com/brendanhay/amazonka.git
+    type:              git
+    location:          git://github.com/brendanhay/amazonka.git
+    subdir:            amazonka-s3
 
 library
     default-language:  Haskell2010
     hs-source-dirs:    src gen
 
-    ghc-options:       -Wall
+    ghc-options:
+        -Wall
+        -fwarn-incomplete-uni-patterns
+        -fwarn-incomplete-record-updates
+        -funbox-strict-fields
 
     exposed-modules:
           Network.AWS.S3
@@ -48,6 +53,7 @@
         , Network.AWS.S3.DeleteBucket
         , Network.AWS.S3.DeleteBucketAnalyticsConfiguration
         , Network.AWS.S3.DeleteBucketCORS
+        , Network.AWS.S3.DeleteBucketEncryption
         , Network.AWS.S3.DeleteBucketInventoryConfiguration
         , Network.AWS.S3.DeleteBucketLifecycle
         , Network.AWS.S3.DeleteBucketMetricsConfiguration
@@ -62,6 +68,7 @@
         , Network.AWS.S3.GetBucketAccelerateConfiguration
         , Network.AWS.S3.GetBucketAnalyticsConfiguration
         , Network.AWS.S3.GetBucketCORS
+        , Network.AWS.S3.GetBucketEncryption
         , Network.AWS.S3.GetBucketInventoryConfiguration
         , Network.AWS.S3.GetBucketLifecycleConfiguration
         , Network.AWS.S3.GetBucketLocation
@@ -93,6 +100,7 @@
         , Network.AWS.S3.PutBucketAccelerateConfiguration
         , Network.AWS.S3.PutBucketAnalyticsConfiguration
         , Network.AWS.S3.PutBucketCORS
+        , Network.AWS.S3.PutBucketEncryption
         , Network.AWS.S3.PutBucketInventoryConfiguration
         , Network.AWS.S3.PutBucketLifecycleConfiguration
         , Network.AWS.S3.PutBucketLogging
@@ -119,7 +127,7 @@
         , Network.AWS.S3.Types.Sum
 
     build-depends:
-          amazonka-core == 1.4.5.*
+          amazonka-core == 1.5.0.*
         , base          >= 4.7     && < 5
         , lens >= 4.4
         , text >= 1.1
@@ -141,9 +149,9 @@
         , Test.AWS.S3.Internal
 
     build-depends:
-          amazonka-core == 1.4.5.*
-        , amazonka-test == 1.4.5.*
-        , amazonka-s3 == 1.4.5.*
+          amazonka-core == 1.5.0.*
+        , amazonka-test == 1.5.0.*
+        , amazonka-s3
         , base
         , bytestring
         , tasty
diff --git a/fixture/DeleteBucketEncryption.yaml b/fixture/DeleteBucketEncryption.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBucketEncryption.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/s3/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  s3.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteBucketEncryptionResponse.proto b/fixture/DeleteBucketEncryptionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBucketEncryptionResponse.proto
diff --git a/fixture/GetBucketACLResponse.proto b/fixture/GetBucketACLResponse.proto
--- a/fixture/GetBucketACLResponse.proto
+++ b/fixture/GetBucketACLResponse.proto
@@ -0,0 +1,15 @@
+<AccessControlPolicy xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
+  <Owner>
+    <ID>fedcba0987654321</ID>
+    <DisplayName>foo</DisplayName>
+  </Owner>
+  <AccessControlList>
+    <Grant>
+      <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser">
+        <ID>1234567890abcdef</ID>
+        <DisplayName>bar</DisplayName>
+      </Grantee>
+      <Permission>FULL_CONTROL</Permission>
+    </Grant>
+  </AccessControlList>
+</AccessControlPolicy>
diff --git a/fixture/GetBucketEncryption.yaml b/fixture/GetBucketEncryption.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetBucketEncryption.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/s3/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  s3.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetBucketEncryptionResponse.proto b/fixture/GetBucketEncryptionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetBucketEncryptionResponse.proto
diff --git a/fixture/PutBucketEncryption.yaml b/fixture/PutBucketEncryption.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutBucketEncryption.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/s3/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  s3.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/PutBucketEncryptionResponse.proto b/fixture/PutBucketEncryptionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutBucketEncryptionResponse.proto
diff --git a/gen/Network/AWS/S3.hs b/gen/Network/AWS/S3.hs
--- a/gen/Network/AWS/S3.hs
+++ b/gen/Network/AWS/S3.hs
@@ -5,9 +5,9 @@
 
 -- |
 -- Module      : Network.AWS.S3
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -185,6 +185,9 @@
     -- ** DeleteBucketPolicy
     , module Network.AWS.S3.DeleteBucketPolicy
 
+    -- ** GetBucketEncryption
+    , module Network.AWS.S3.GetBucketEncryption
+
     -- ** AbortMultipartUpload
     , module Network.AWS.S3.AbortMultipartUpload
 
@@ -239,6 +242,12 @@
     -- ** GetBucketPolicy
     , module Network.AWS.S3.GetBucketPolicy
 
+    -- ** PutBucketEncryption
+    , module Network.AWS.S3.PutBucketEncryption
+
+    -- ** DeleteBucketEncryption
+    , module Network.AWS.S3.DeleteBucketEncryption
+
     -- ** GetBucketLogging
     , module Network.AWS.S3.GetBucketLogging
 
@@ -331,6 +340,9 @@
     -- ** ObjectVersionStorageClass
     , ObjectVersionStorageClass (..)
 
+    -- ** OwnerOverride
+    , OwnerOverride (..)
+
     -- ** Payer
     , Payer (..)
 
@@ -355,6 +367,9 @@
     -- ** ServerSideEncryption
     , ServerSideEncryption (..)
 
+    -- ** SseKMSEncryptedObjectsStatus
+    , SseKMSEncryptedObjectsStatus (..)
+
     -- ** StorageClass
     , StorageClass (..)
 
@@ -389,6 +404,11 @@
     , acpGrants
     , acpOwner
 
+    -- ** AccessControlTranslation
+    , AccessControlTranslation
+    , accessControlTranslation
+    , actOwner
+
     -- ** AnalyticsAndOperator
     , AnalyticsAndOperator
     , analyticsAndOperator
@@ -517,9 +537,17 @@
     -- ** Destination
     , Destination
     , destination
+    , dAccessControlTranslation
+    , dAccount
     , dStorageClass
+    , dEncryptionConfiguration
     , dBucket
 
+    -- ** EncryptionConfiguration
+    , EncryptionConfiguration
+    , encryptionConfiguration
+    , ecReplicaKMSKeyId
+
     -- ** ErrorDocument
     , ErrorDocument
     , errorDocument
@@ -578,6 +606,12 @@
     , inventoryDestination
     , idS3BucketDestination
 
+    -- ** InventoryEncryption
+    , InventoryEncryption
+    , inventoryEncryption
+    , ieSSES3
+    , ieSSEKMS
+
     -- ** InventoryFilter
     , InventoryFilter
     , inventoryFilter
@@ -588,6 +622,7 @@
     , inventoryS3BucketDestination
     , isbdPrefix
     , isbdAccountId
+    , isbdEncryption
     , isbdBucket
     , isbdFormat
 
@@ -771,6 +806,7 @@
     , ReplicationRule
     , replicationRule
     , rrId
+    , rrSourceSelectionCriteria
     , rrPrefix
     , rrStatus
     , rrDestination
@@ -805,6 +841,41 @@
     , sseCode
     , sseMessage
 
+    -- ** SSEKMS
+    , SSEKMS
+    , sSEKMS
+    , ssekKeyId
+
+    -- ** SSES3
+    , SSES3
+    , sSES3
+
+    -- ** ServerSideEncryptionByDefault
+    , ServerSideEncryptionByDefault
+    , serverSideEncryptionByDefault
+    , ssebdKMSMasterKeyId
+    , ssebdSSEAlgorithm
+
+    -- ** ServerSideEncryptionConfiguration
+    , ServerSideEncryptionConfiguration
+    , serverSideEncryptionConfiguration
+    , ssecRules
+
+    -- ** ServerSideEncryptionRule
+    , ServerSideEncryptionRule
+    , serverSideEncryptionRule
+    , sserApplyServerSideEncryptionByDefault
+
+    -- ** SourceSelectionCriteria
+    , SourceSelectionCriteria
+    , sourceSelectionCriteria
+    , sscSseKMSEncryptedObjects
+
+    -- ** SseKMSEncryptedObjects
+    , SseKMSEncryptedObjects
+    , sseKMSEncryptedObjects
+    , skeoStatus
+
     -- ** StorageClassAnalysis
     , StorageClassAnalysis
     , storageClassAnalysis
@@ -863,79 +934,82 @@
     , wcRoutingRules
     ) where
 
-import           Network.AWS.S3.AbortMultipartUpload
-import           Network.AWS.S3.CompleteMultipartUpload
-import           Network.AWS.S3.CopyObject
-import           Network.AWS.S3.CreateBucket
-import           Network.AWS.S3.CreateMultipartUpload
-import           Network.AWS.S3.DeleteBucket
-import           Network.AWS.S3.DeleteBucketAnalyticsConfiguration
-import           Network.AWS.S3.DeleteBucketCORS
-import           Network.AWS.S3.DeleteBucketInventoryConfiguration
-import           Network.AWS.S3.DeleteBucketLifecycle
-import           Network.AWS.S3.DeleteBucketMetricsConfiguration
-import           Network.AWS.S3.DeleteBucketPolicy
-import           Network.AWS.S3.DeleteBucketReplication
-import           Network.AWS.S3.DeleteBucketTagging
-import           Network.AWS.S3.DeleteBucketWebsite
-import           Network.AWS.S3.DeleteObject
-import           Network.AWS.S3.DeleteObjects
-import           Network.AWS.S3.DeleteObjectTagging
-import           Network.AWS.S3.GetBucketAccelerateConfiguration
-import           Network.AWS.S3.GetBucketACL
-import           Network.AWS.S3.GetBucketAnalyticsConfiguration
-import           Network.AWS.S3.GetBucketCORS
-import           Network.AWS.S3.GetBucketInventoryConfiguration
-import           Network.AWS.S3.GetBucketLifecycleConfiguration
-import           Network.AWS.S3.GetBucketLocation
-import           Network.AWS.S3.GetBucketLogging
-import           Network.AWS.S3.GetBucketMetricsConfiguration
-import           Network.AWS.S3.GetBucketNotificationConfiguration
-import           Network.AWS.S3.GetBucketPolicy
-import           Network.AWS.S3.GetBucketReplication
-import           Network.AWS.S3.GetBucketRequestPayment
-import           Network.AWS.S3.GetBucketTagging
-import           Network.AWS.S3.GetBucketVersioning
-import           Network.AWS.S3.GetBucketWebsite
-import           Network.AWS.S3.GetObject
-import           Network.AWS.S3.GetObjectACL
-import           Network.AWS.S3.GetObjectTagging
-import           Network.AWS.S3.GetObjectTorrent
-import           Network.AWS.S3.HeadBucket
-import           Network.AWS.S3.HeadObject
-import           Network.AWS.S3.Internal
-import           Network.AWS.S3.ListBucketAnalyticsConfigurations
-import           Network.AWS.S3.ListBucketInventoryConfigurations
-import           Network.AWS.S3.ListBucketMetricsConfigurations
-import           Network.AWS.S3.ListBuckets
-import           Network.AWS.S3.ListMultipartUploads
-import           Network.AWS.S3.ListObjects
-import           Network.AWS.S3.ListObjectsV
-import           Network.AWS.S3.ListObjectVersions
-import           Network.AWS.S3.ListParts
-import           Network.AWS.S3.PutBucketAccelerateConfiguration
-import           Network.AWS.S3.PutBucketACL
-import           Network.AWS.S3.PutBucketAnalyticsConfiguration
-import           Network.AWS.S3.PutBucketCORS
-import           Network.AWS.S3.PutBucketInventoryConfiguration
-import           Network.AWS.S3.PutBucketLifecycleConfiguration
-import           Network.AWS.S3.PutBucketLogging
-import           Network.AWS.S3.PutBucketMetricsConfiguration
-import           Network.AWS.S3.PutBucketNotificationConfiguration
-import           Network.AWS.S3.PutBucketPolicy
-import           Network.AWS.S3.PutBucketReplication
-import           Network.AWS.S3.PutBucketRequestPayment
-import           Network.AWS.S3.PutBucketTagging
-import           Network.AWS.S3.PutBucketVersioning
-import           Network.AWS.S3.PutBucketWebsite
-import           Network.AWS.S3.PutObject
-import           Network.AWS.S3.PutObjectACL
-import           Network.AWS.S3.PutObjectTagging
-import           Network.AWS.S3.RestoreObject
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.UploadPart
-import           Network.AWS.S3.UploadPartCopy
-import           Network.AWS.S3.Waiters
+import Network.AWS.S3.AbortMultipartUpload
+import Network.AWS.S3.CompleteMultipartUpload
+import Network.AWS.S3.CopyObject
+import Network.AWS.S3.CreateBucket
+import Network.AWS.S3.CreateMultipartUpload
+import Network.AWS.S3.DeleteBucket
+import Network.AWS.S3.DeleteBucketAnalyticsConfiguration
+import Network.AWS.S3.DeleteBucketCORS
+import Network.AWS.S3.DeleteBucketEncryption
+import Network.AWS.S3.DeleteBucketInventoryConfiguration
+import Network.AWS.S3.DeleteBucketLifecycle
+import Network.AWS.S3.DeleteBucketMetricsConfiguration
+import Network.AWS.S3.DeleteBucketPolicy
+import Network.AWS.S3.DeleteBucketReplication
+import Network.AWS.S3.DeleteBucketTagging
+import Network.AWS.S3.DeleteBucketWebsite
+import Network.AWS.S3.DeleteObject
+import Network.AWS.S3.DeleteObjects
+import Network.AWS.S3.DeleteObjectTagging
+import Network.AWS.S3.GetBucketAccelerateConfiguration
+import Network.AWS.S3.GetBucketACL
+import Network.AWS.S3.GetBucketAnalyticsConfiguration
+import Network.AWS.S3.GetBucketCORS
+import Network.AWS.S3.GetBucketEncryption
+import Network.AWS.S3.GetBucketInventoryConfiguration
+import Network.AWS.S3.GetBucketLifecycleConfiguration
+import Network.AWS.S3.GetBucketLocation
+import Network.AWS.S3.GetBucketLogging
+import Network.AWS.S3.GetBucketMetricsConfiguration
+import Network.AWS.S3.GetBucketNotificationConfiguration
+import Network.AWS.S3.GetBucketPolicy
+import Network.AWS.S3.GetBucketReplication
+import Network.AWS.S3.GetBucketRequestPayment
+import Network.AWS.S3.GetBucketTagging
+import Network.AWS.S3.GetBucketVersioning
+import Network.AWS.S3.GetBucketWebsite
+import Network.AWS.S3.GetObject
+import Network.AWS.S3.GetObjectACL
+import Network.AWS.S3.GetObjectTagging
+import Network.AWS.S3.GetObjectTorrent
+import Network.AWS.S3.HeadBucket
+import Network.AWS.S3.HeadObject
+import Network.AWS.S3.Internal
+import Network.AWS.S3.ListBucketAnalyticsConfigurations
+import Network.AWS.S3.ListBucketInventoryConfigurations
+import Network.AWS.S3.ListBucketMetricsConfigurations
+import Network.AWS.S3.ListBuckets
+import Network.AWS.S3.ListMultipartUploads
+import Network.AWS.S3.ListObjects
+import Network.AWS.S3.ListObjectsV
+import Network.AWS.S3.ListObjectVersions
+import Network.AWS.S3.ListParts
+import Network.AWS.S3.PutBucketAccelerateConfiguration
+import Network.AWS.S3.PutBucketACL
+import Network.AWS.S3.PutBucketAnalyticsConfiguration
+import Network.AWS.S3.PutBucketCORS
+import Network.AWS.S3.PutBucketEncryption
+import Network.AWS.S3.PutBucketInventoryConfiguration
+import Network.AWS.S3.PutBucketLifecycleConfiguration
+import Network.AWS.S3.PutBucketLogging
+import Network.AWS.S3.PutBucketMetricsConfiguration
+import Network.AWS.S3.PutBucketNotificationConfiguration
+import Network.AWS.S3.PutBucketPolicy
+import Network.AWS.S3.PutBucketReplication
+import Network.AWS.S3.PutBucketRequestPayment
+import Network.AWS.S3.PutBucketTagging
+import Network.AWS.S3.PutBucketVersioning
+import Network.AWS.S3.PutBucketWebsite
+import Network.AWS.S3.PutObject
+import Network.AWS.S3.PutObjectACL
+import Network.AWS.S3.PutObjectTagging
+import Network.AWS.S3.RestoreObject
+import Network.AWS.S3.Types
+import Network.AWS.S3.UploadPart
+import Network.AWS.S3.UploadPartCopy
+import Network.AWS.S3.Waiters
 
 {- $errors
 Error matchers are designed for use with the functions provided by
diff --git a/gen/Network/AWS/S3/AbortMultipartUpload.hs b/gen/Network/AWS/S3/AbortMultipartUpload.hs
--- a/gen/Network/AWS/S3/AbortMultipartUpload.hs
+++ b/gen/Network/AWS/S3/AbortMultipartUpload.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.AbortMultipartUpload
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -42,21 +42,22 @@
     , amursResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'abortMultipartUpload' smart constructor.
 data AbortMultipartUpload = AbortMultipartUpload'
-    { _amuRequestPayer :: !(Maybe RequestPayer)
-    , _amuBucket       :: !BucketName
-    , _amuKey          :: !ObjectKey
-    , _amuUploadId     :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _amuRequestPayer :: !(Maybe RequestPayer)
+  , _amuBucket       :: !BucketName
+  , _amuKey          :: !ObjectKey
+  , _amuUploadId     :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'AbortMultipartUpload' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -74,13 +75,14 @@
     -> Text -- ^ 'amuUploadId'
     -> AbortMultipartUpload
 abortMultipartUpload pBucket_ pKey_ pUploadId_ =
-    AbortMultipartUpload'
-    { _amuRequestPayer = Nothing
-    , _amuBucket = pBucket_
-    , _amuKey = pKey_
-    , _amuUploadId = pUploadId_
-    }
+  AbortMultipartUpload'
+  { _amuRequestPayer = Nothing
+  , _amuBucket = pBucket_
+  , _amuKey = pKey_
+  , _amuUploadId = pUploadId_
+  }
 
+
 -- | Undocumented member.
 amuRequestPayer :: Lens' AbortMultipartUpload (Maybe RequestPayer)
 amuRequestPayer = lens _amuRequestPayer (\ s a -> s{_amuRequestPayer = a});
@@ -108,9 +110,9 @@
                    (h .#? "x-amz-request-charged") <*>
                      (pure (fromEnum s)))
 
-instance Hashable AbortMultipartUpload
+instance Hashable AbortMultipartUpload where
 
-instance NFData AbortMultipartUpload
+instance NFData AbortMultipartUpload where
 
 instance ToHeaders AbortMultipartUpload where
         toHeaders AbortMultipartUpload'{..}
@@ -126,10 +128,11 @@
 
 -- | /See:/ 'abortMultipartUploadResponse' smart constructor.
 data AbortMultipartUploadResponse = AbortMultipartUploadResponse'
-    { _amursRequestCharged :: !(Maybe RequestCharged)
-    , _amursResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _amursRequestCharged :: !(Maybe RequestCharged)
+  , _amursResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'AbortMultipartUploadResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -141,11 +144,10 @@
     :: Int -- ^ 'amursResponseStatus'
     -> AbortMultipartUploadResponse
 abortMultipartUploadResponse pResponseStatus_ =
-    AbortMultipartUploadResponse'
-    { _amursRequestCharged = Nothing
-    , _amursResponseStatus = pResponseStatus_
-    }
+  AbortMultipartUploadResponse'
+  {_amursRequestCharged = Nothing, _amursResponseStatus = pResponseStatus_}
 
+
 -- | Undocumented member.
 amursRequestCharged :: Lens' AbortMultipartUploadResponse (Maybe RequestCharged)
 amursRequestCharged = lens _amursRequestCharged (\ s a -> s{_amursRequestCharged = a});
@@ -154,4 +156,4 @@
 amursResponseStatus :: Lens' AbortMultipartUploadResponse Int
 amursResponseStatus = lens _amursResponseStatus (\ s a -> s{_amursResponseStatus = a});
 
-instance NFData AbortMultipartUploadResponse
+instance NFData AbortMultipartUploadResponse where
diff --git a/gen/Network/AWS/S3/CompleteMultipartUpload.hs b/gen/Network/AWS/S3/CompleteMultipartUpload.hs
--- a/gen/Network/AWS/S3/CompleteMultipartUpload.hs
+++ b/gen/Network/AWS/S3/CompleteMultipartUpload.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.CompleteMultipartUpload
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -47,22 +47,23 @@
     , crsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'completeMultipartUpload' smart constructor.
 data CompleteMultipartUpload = CompleteMultipartUpload'
-    { _cRequestPayer    :: !(Maybe RequestPayer)
-    , _cMultipartUpload :: !(Maybe CompletedMultipartUpload)
-    , _cBucket          :: !BucketName
-    , _cKey             :: !ObjectKey
-    , _cUploadId        :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _cRequestPayer    :: !(Maybe RequestPayer)
+  , _cMultipartUpload :: !(Maybe CompletedMultipartUpload)
+  , _cBucket          :: !BucketName
+  , _cKey             :: !ObjectKey
+  , _cUploadId        :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'CompleteMultipartUpload' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -82,14 +83,15 @@
     -> Text -- ^ 'cUploadId'
     -> CompleteMultipartUpload
 completeMultipartUpload pBucket_ pKey_ pUploadId_ =
-    CompleteMultipartUpload'
-    { _cRequestPayer = Nothing
-    , _cMultipartUpload = Nothing
-    , _cBucket = pBucket_
-    , _cKey = pKey_
-    , _cUploadId = pUploadId_
-    }
+  CompleteMultipartUpload'
+  { _cRequestPayer = Nothing
+  , _cMultipartUpload = Nothing
+  , _cBucket = pBucket_
+  , _cKey = pKey_
+  , _cUploadId = pUploadId_
+  }
 
+
 -- | Undocumented member.
 cRequestPayer :: Lens' CompleteMultipartUpload (Maybe RequestPayer)
 cRequestPayer = lens _cRequestPayer (\ s a -> s{_cRequestPayer = a});
@@ -129,9 +131,9 @@
                      <*> (h .#? "x-amz-server-side-encryption")
                      <*> (pure (fromEnum s)))
 
-instance Hashable CompleteMultipartUpload
+instance Hashable CompleteMultipartUpload where
 
-instance NFData CompleteMultipartUpload
+instance NFData CompleteMultipartUpload where
 
 instance ToElement CompleteMultipartUpload where
         toElement
@@ -154,18 +156,19 @@
 
 -- | /See:/ 'completeMultipartUploadResponse' smart constructor.
 data CompleteMultipartUploadResponse = CompleteMultipartUploadResponse'
-    { _crsRequestCharged       :: !(Maybe RequestCharged)
-    , _crsETag                 :: !(Maybe ETag)
-    , _crsVersionId            :: !(Maybe ObjectVersionId)
-    , _crsLocation             :: !(Maybe Text)
-    , _crsExpiration           :: !(Maybe Text)
-    , _crsBucket               :: !(Maybe BucketName)
-    , _crsKey                  :: !(Maybe ObjectKey)
-    , _crsSSEKMSKeyId          :: !(Maybe (Sensitive Text))
-    , _crsServerSideEncryption :: !(Maybe ServerSideEncryption)
-    , _crsResponseStatus       :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _crsRequestCharged       :: !(Maybe RequestCharged)
+  , _crsETag                 :: !(Maybe ETag)
+  , _crsVersionId            :: !(Maybe ObjectVersionId)
+  , _crsLocation             :: !(Maybe Text)
+  , _crsExpiration           :: !(Maybe Text)
+  , _crsBucket               :: !(Maybe BucketName)
+  , _crsKey                  :: !(Maybe ObjectKey)
+  , _crsSSEKMSKeyId          :: !(Maybe (Sensitive Text))
+  , _crsServerSideEncryption :: !(Maybe ServerSideEncryption)
+  , _crsResponseStatus       :: !Int
+  } deriving (Eq, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'CompleteMultipartUploadResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -193,19 +196,20 @@
     :: Int -- ^ 'crsResponseStatus'
     -> CompleteMultipartUploadResponse
 completeMultipartUploadResponse pResponseStatus_ =
-    CompleteMultipartUploadResponse'
-    { _crsRequestCharged = Nothing
-    , _crsETag = Nothing
-    , _crsVersionId = Nothing
-    , _crsLocation = Nothing
-    , _crsExpiration = Nothing
-    , _crsBucket = Nothing
-    , _crsKey = Nothing
-    , _crsSSEKMSKeyId = Nothing
-    , _crsServerSideEncryption = Nothing
-    , _crsResponseStatus = pResponseStatus_
-    }
+  CompleteMultipartUploadResponse'
+  { _crsRequestCharged = Nothing
+  , _crsETag = Nothing
+  , _crsVersionId = Nothing
+  , _crsLocation = Nothing
+  , _crsExpiration = Nothing
+  , _crsBucket = Nothing
+  , _crsKey = Nothing
+  , _crsSSEKMSKeyId = Nothing
+  , _crsServerSideEncryption = Nothing
+  , _crsResponseStatus = pResponseStatus_
+  }
 
+
 -- | Undocumented member.
 crsRequestCharged :: Lens' CompleteMultipartUploadResponse (Maybe RequestCharged)
 crsRequestCharged = lens _crsRequestCharged (\ s a -> s{_crsRequestCharged = a});
@@ -246,4 +250,4 @@
 crsResponseStatus :: Lens' CompleteMultipartUploadResponse Int
 crsResponseStatus = lens _crsResponseStatus (\ s a -> s{_crsResponseStatus = a});
 
-instance NFData CompleteMultipartUploadResponse
+instance NFData CompleteMultipartUploadResponse where
diff --git a/gen/Network/AWS/S3/CopyObject.hs b/gen/Network/AWS/S3/CopyObject.hs
--- a/gen/Network/AWS/S3/CopyObject.hs
+++ b/gen/Network/AWS/S3/CopyObject.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.CopyObject
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -75,50 +75,51 @@
     , corsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'copyObject' smart constructor.
 data CopyObject = CopyObject'
-    { _coCopySourceIfModifiedSince      :: !(Maybe RFC822)
-    , _coCopySourceIfUnmodifiedSince    :: !(Maybe RFC822)
-    , _coCopySourceSSECustomerKeyMD5    :: !(Maybe Text)
-    , _coTaggingDirective               :: !(Maybe TaggingDirective)
-    , _coMetadataDirective              :: !(Maybe MetadataDirective)
-    , _coExpires                        :: !(Maybe RFC822)
-    , _coGrantReadACP                   :: !(Maybe Text)
-    , _coCopySourceIfNoneMatch          :: !(Maybe Text)
-    , _coSSECustomerAlgorithm           :: !(Maybe Text)
-    , _coSSECustomerKey                 :: !(Maybe (Sensitive Text))
-    , _coRequestPayer                   :: !(Maybe RequestPayer)
-    , _coGrantWriteACP                  :: !(Maybe Text)
-    , _coCopySourceIfMatch              :: !(Maybe Text)
-    , _coWebsiteRedirectLocation        :: !(Maybe Text)
-    , _coGrantRead                      :: !(Maybe Text)
-    , _coStorageClass                   :: !(Maybe StorageClass)
-    , _coSSECustomerKeyMD5              :: !(Maybe Text)
-    , _coSSEKMSKeyId                    :: !(Maybe (Sensitive Text))
-    , _coGrantFullControl               :: !(Maybe Text)
-    , _coContentEncoding                :: !(Maybe Text)
-    , _coTagging                        :: !(Maybe Text)
-    , _coMetadata                       :: !(Map Text Text)
-    , _coCacheControl                   :: !(Maybe Text)
-    , _coContentLanguage                :: !(Maybe Text)
-    , _coCopySourceSSECustomerKey       :: !(Maybe (Sensitive Text))
-    , _coCopySourceSSECustomerAlgorithm :: !(Maybe Text)
-    , _coACL                            :: !(Maybe ObjectCannedACL)
-    , _coContentDisposition             :: !(Maybe Text)
-    , _coServerSideEncryption           :: !(Maybe ServerSideEncryption)
-    , _coContentType                    :: !(Maybe Text)
-    , _coBucket                         :: !BucketName
-    , _coCopySource                     :: !Text
-    , _coKey                            :: !ObjectKey
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _coCopySourceIfModifiedSince      :: !(Maybe RFC822)
+  , _coCopySourceIfUnmodifiedSince    :: !(Maybe RFC822)
+  , _coCopySourceSSECustomerKeyMD5    :: !(Maybe Text)
+  , _coTaggingDirective               :: !(Maybe TaggingDirective)
+  , _coMetadataDirective              :: !(Maybe MetadataDirective)
+  , _coExpires                        :: !(Maybe RFC822)
+  , _coGrantReadACP                   :: !(Maybe Text)
+  , _coCopySourceIfNoneMatch          :: !(Maybe Text)
+  , _coSSECustomerAlgorithm           :: !(Maybe Text)
+  , _coSSECustomerKey                 :: !(Maybe (Sensitive Text))
+  , _coRequestPayer                   :: !(Maybe RequestPayer)
+  , _coGrantWriteACP                  :: !(Maybe Text)
+  , _coCopySourceIfMatch              :: !(Maybe Text)
+  , _coWebsiteRedirectLocation        :: !(Maybe Text)
+  , _coGrantRead                      :: !(Maybe Text)
+  , _coStorageClass                   :: !(Maybe StorageClass)
+  , _coSSECustomerKeyMD5              :: !(Maybe Text)
+  , _coSSEKMSKeyId                    :: !(Maybe (Sensitive Text))
+  , _coGrantFullControl               :: !(Maybe Text)
+  , _coContentEncoding                :: !(Maybe Text)
+  , _coTagging                        :: !(Maybe Text)
+  , _coMetadata                       :: !(Map Text Text)
+  , _coCacheControl                   :: !(Maybe Text)
+  , _coContentLanguage                :: !(Maybe Text)
+  , _coCopySourceSSECustomerKey       :: !(Maybe (Sensitive Text))
+  , _coCopySourceSSECustomerAlgorithm :: !(Maybe Text)
+  , _coACL                            :: !(Maybe ObjectCannedACL)
+  , _coContentDisposition             :: !(Maybe Text)
+  , _coServerSideEncryption           :: !(Maybe ServerSideEncryption)
+  , _coContentType                    :: !(Maybe Text)
+  , _coBucket                         :: !BucketName
+  , _coCopySource                     :: !Text
+  , _coKey                            :: !ObjectKey
+  } deriving (Eq, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'CopyObject' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -194,42 +195,43 @@
     -> ObjectKey -- ^ 'coKey'
     -> CopyObject
 copyObject pBucket_ pCopySource_ pKey_ =
-    CopyObject'
-    { _coCopySourceIfModifiedSince = Nothing
-    , _coCopySourceIfUnmodifiedSince = Nothing
-    , _coCopySourceSSECustomerKeyMD5 = Nothing
-    , _coTaggingDirective = Nothing
-    , _coMetadataDirective = Nothing
-    , _coExpires = Nothing
-    , _coGrantReadACP = Nothing
-    , _coCopySourceIfNoneMatch = Nothing
-    , _coSSECustomerAlgorithm = Nothing
-    , _coSSECustomerKey = Nothing
-    , _coRequestPayer = Nothing
-    , _coGrantWriteACP = Nothing
-    , _coCopySourceIfMatch = Nothing
-    , _coWebsiteRedirectLocation = Nothing
-    , _coGrantRead = Nothing
-    , _coStorageClass = Nothing
-    , _coSSECustomerKeyMD5 = Nothing
-    , _coSSEKMSKeyId = Nothing
-    , _coGrantFullControl = Nothing
-    , _coContentEncoding = Nothing
-    , _coTagging = Nothing
-    , _coMetadata = mempty
-    , _coCacheControl = Nothing
-    , _coContentLanguage = Nothing
-    , _coCopySourceSSECustomerKey = Nothing
-    , _coCopySourceSSECustomerAlgorithm = Nothing
-    , _coACL = Nothing
-    , _coContentDisposition = Nothing
-    , _coServerSideEncryption = Nothing
-    , _coContentType = Nothing
-    , _coBucket = pBucket_
-    , _coCopySource = pCopySource_
-    , _coKey = pKey_
-    }
+  CopyObject'
+  { _coCopySourceIfModifiedSince = Nothing
+  , _coCopySourceIfUnmodifiedSince = Nothing
+  , _coCopySourceSSECustomerKeyMD5 = Nothing
+  , _coTaggingDirective = Nothing
+  , _coMetadataDirective = Nothing
+  , _coExpires = Nothing
+  , _coGrantReadACP = Nothing
+  , _coCopySourceIfNoneMatch = Nothing
+  , _coSSECustomerAlgorithm = Nothing
+  , _coSSECustomerKey = Nothing
+  , _coRequestPayer = Nothing
+  , _coGrantWriteACP = Nothing
+  , _coCopySourceIfMatch = Nothing
+  , _coWebsiteRedirectLocation = Nothing
+  , _coGrantRead = Nothing
+  , _coStorageClass = Nothing
+  , _coSSECustomerKeyMD5 = Nothing
+  , _coSSEKMSKeyId = Nothing
+  , _coGrantFullControl = Nothing
+  , _coContentEncoding = Nothing
+  , _coTagging = Nothing
+  , _coMetadata = mempty
+  , _coCacheControl = Nothing
+  , _coContentLanguage = Nothing
+  , _coCopySourceSSECustomerKey = Nothing
+  , _coCopySourceSSECustomerAlgorithm = Nothing
+  , _coACL = Nothing
+  , _coContentDisposition = Nothing
+  , _coServerSideEncryption = Nothing
+  , _coContentType = Nothing
+  , _coBucket = pBucket_
+  , _coCopySource = pCopySource_
+  , _coKey = pKey_
+  }
 
+
 -- | Copies the object if it has been modified since the specified time.
 coCopySourceIfModifiedSince :: Lens' CopyObject (Maybe UTCTime)
 coCopySourceIfModifiedSince = lens _coCopySourceIfModifiedSince (\ s a -> s{_coCopySourceIfModifiedSince = a}) . mapping _Time;
@@ -385,9 +387,9 @@
                      <*> (parseXML x)
                      <*> (pure (fromEnum s)))
 
-instance Hashable CopyObject
+instance Hashable CopyObject where
 
-instance NFData CopyObject
+instance NFData CopyObject where
 
 instance ToHeaders CopyObject where
         toHeaders CopyObject'{..}
@@ -445,18 +447,19 @@
 
 -- | /See:/ 'copyObjectResponse' smart constructor.
 data CopyObjectResponse = CopyObjectResponse'
-    { _corsRequestCharged       :: !(Maybe RequestCharged)
-    , _corsVersionId            :: !(Maybe ObjectVersionId)
-    , _corsExpiration           :: !(Maybe Text)
-    , _corsSSECustomerAlgorithm :: !(Maybe Text)
-    , _corsCopySourceVersionId  :: !(Maybe Text)
-    , _corsSSECustomerKeyMD5    :: !(Maybe Text)
-    , _corsSSEKMSKeyId          :: !(Maybe (Sensitive Text))
-    , _corsServerSideEncryption :: !(Maybe ServerSideEncryption)
-    , _corsCopyObjectResult     :: !(Maybe CopyObjectResult)
-    , _corsResponseStatus       :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _corsRequestCharged       :: !(Maybe RequestCharged)
+  , _corsVersionId            :: !(Maybe ObjectVersionId)
+  , _corsExpiration           :: !(Maybe Text)
+  , _corsSSECustomerAlgorithm :: !(Maybe Text)
+  , _corsCopySourceVersionId  :: !(Maybe Text)
+  , _corsSSECustomerKeyMD5    :: !(Maybe Text)
+  , _corsSSEKMSKeyId          :: !(Maybe (Sensitive Text))
+  , _corsServerSideEncryption :: !(Maybe ServerSideEncryption)
+  , _corsCopyObjectResult     :: !(Maybe CopyObjectResult)
+  , _corsResponseStatus       :: !Int
+  } deriving (Eq, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'CopyObjectResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -484,19 +487,20 @@
     :: Int -- ^ 'corsResponseStatus'
     -> CopyObjectResponse
 copyObjectResponse pResponseStatus_ =
-    CopyObjectResponse'
-    { _corsRequestCharged = Nothing
-    , _corsVersionId = Nothing
-    , _corsExpiration = Nothing
-    , _corsSSECustomerAlgorithm = Nothing
-    , _corsCopySourceVersionId = Nothing
-    , _corsSSECustomerKeyMD5 = Nothing
-    , _corsSSEKMSKeyId = Nothing
-    , _corsServerSideEncryption = Nothing
-    , _corsCopyObjectResult = Nothing
-    , _corsResponseStatus = pResponseStatus_
-    }
+  CopyObjectResponse'
+  { _corsRequestCharged = Nothing
+  , _corsVersionId = Nothing
+  , _corsExpiration = Nothing
+  , _corsSSECustomerAlgorithm = Nothing
+  , _corsCopySourceVersionId = Nothing
+  , _corsSSECustomerKeyMD5 = Nothing
+  , _corsSSEKMSKeyId = Nothing
+  , _corsServerSideEncryption = Nothing
+  , _corsCopyObjectResult = Nothing
+  , _corsResponseStatus = pResponseStatus_
+  }
 
+
 -- | Undocumented member.
 corsRequestCharged :: Lens' CopyObjectResponse (Maybe RequestCharged)
 corsRequestCharged = lens _corsRequestCharged (\ s a -> s{_corsRequestCharged = a});
@@ -537,4 +541,4 @@
 corsResponseStatus :: Lens' CopyObjectResponse Int
 corsResponseStatus = lens _corsResponseStatus (\ s a -> s{_corsResponseStatus = a});
 
-instance NFData CopyObjectResponse
+instance NFData CopyObjectResponse where
diff --git a/gen/Network/AWS/S3/CreateBucket.hs b/gen/Network/AWS/S3/CreateBucket.hs
--- a/gen/Network/AWS/S3/CreateBucket.hs
+++ b/gen/Network/AWS/S3/CreateBucket.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.CreateBucket
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -42,25 +42,26 @@
     , cbrsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'createBucket' smart constructor.
 data CreateBucket = CreateBucket'
-    { _cbGrantReadACP              :: !(Maybe Text)
-    , _cbGrantWriteACP             :: !(Maybe Text)
-    , _cbGrantRead                 :: !(Maybe Text)
-    , _cbGrantFullControl          :: !(Maybe Text)
-    , _cbCreateBucketConfiguration :: !(Maybe CreateBucketConfiguration)
-    , _cbGrantWrite                :: !(Maybe Text)
-    , _cbACL                       :: !(Maybe BucketCannedACL)
-    , _cbBucket                    :: !BucketName
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _cbGrantReadACP              :: !(Maybe Text)
+  , _cbGrantWriteACP             :: !(Maybe Text)
+  , _cbGrantRead                 :: !(Maybe Text)
+  , _cbGrantFullControl          :: !(Maybe Text)
+  , _cbCreateBucketConfiguration :: !(Maybe CreateBucketConfiguration)
+  , _cbGrantWrite                :: !(Maybe Text)
+  , _cbACL                       :: !(Maybe BucketCannedACL)
+  , _cbBucket                    :: !BucketName
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'CreateBucket' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -84,17 +85,18 @@
     :: BucketName -- ^ 'cbBucket'
     -> CreateBucket
 createBucket pBucket_ =
-    CreateBucket'
-    { _cbGrantReadACP = Nothing
-    , _cbGrantWriteACP = Nothing
-    , _cbGrantRead = Nothing
-    , _cbGrantFullControl = Nothing
-    , _cbCreateBucketConfiguration = Nothing
-    , _cbGrantWrite = Nothing
-    , _cbACL = Nothing
-    , _cbBucket = pBucket_
-    }
+  CreateBucket'
+  { _cbGrantReadACP = Nothing
+  , _cbGrantWriteACP = Nothing
+  , _cbGrantRead = Nothing
+  , _cbGrantFullControl = Nothing
+  , _cbCreateBucketConfiguration = Nothing
+  , _cbGrantWrite = Nothing
+  , _cbACL = Nothing
+  , _cbBucket = pBucket_
+  }
 
+
 -- | Allows grantee to read the bucket ACL.
 cbGrantReadACP :: Lens' CreateBucket (Maybe Text)
 cbGrantReadACP = lens _cbGrantReadACP (\ s a -> s{_cbGrantReadACP = a});
@@ -136,9 +138,9 @@
                  CreateBucketResponse' <$>
                    (h .#? "Location") <*> (pure (fromEnum s)))
 
-instance Hashable CreateBucket
+instance Hashable CreateBucket where
 
-instance NFData CreateBucket
+instance NFData CreateBucket where
 
 instance ToElement CreateBucket where
         toElement
@@ -166,10 +168,11 @@
 
 -- | /See:/ 'createBucketResponse' smart constructor.
 data CreateBucketResponse = CreateBucketResponse'
-    { _cbrsLocation       :: !(Maybe Text)
-    , _cbrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _cbrsLocation       :: !(Maybe Text)
+  , _cbrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'CreateBucketResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -181,11 +184,10 @@
     :: Int -- ^ 'cbrsResponseStatus'
     -> CreateBucketResponse
 createBucketResponse pResponseStatus_ =
-    CreateBucketResponse'
-    { _cbrsLocation = Nothing
-    , _cbrsResponseStatus = pResponseStatus_
-    }
+  CreateBucketResponse'
+  {_cbrsLocation = Nothing, _cbrsResponseStatus = pResponseStatus_}
 
+
 -- | Undocumented member.
 cbrsLocation :: Lens' CreateBucketResponse (Maybe Text)
 cbrsLocation = lens _cbrsLocation (\ s a -> s{_cbrsLocation = a});
@@ -194,4 +196,4 @@
 cbrsResponseStatus :: Lens' CreateBucketResponse Int
 cbrsResponseStatus = lens _cbrsResponseStatus (\ s a -> s{_cbrsResponseStatus = a});
 
-instance NFData CreateBucketResponse
+instance NFData CreateBucketResponse where
diff --git a/gen/Network/AWS/S3/CreateMultipartUpload.hs b/gen/Network/AWS/S3/CreateMultipartUpload.hs
--- a/gen/Network/AWS/S3/CreateMultipartUpload.hs
+++ b/gen/Network/AWS/S3/CreateMultipartUpload.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.CreateMultipartUpload
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -42,6 +42,7 @@
     , cmuSSEKMSKeyId
     , cmuGrantFullControl
     , cmuContentEncoding
+    , cmuTagging
     , cmuMetadata
     , cmuCacheControl
     , cmuContentLanguage
@@ -69,39 +70,41 @@
     , cmursResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'createMultipartUpload' smart constructor.
 data CreateMultipartUpload = CreateMultipartUpload'
-    { _cmuExpires                 :: !(Maybe RFC822)
-    , _cmuGrantReadACP            :: !(Maybe Text)
-    , _cmuSSECustomerAlgorithm    :: !(Maybe Text)
-    , _cmuSSECustomerKey          :: !(Maybe (Sensitive Text))
-    , _cmuRequestPayer            :: !(Maybe RequestPayer)
-    , _cmuGrantWriteACP           :: !(Maybe Text)
-    , _cmuWebsiteRedirectLocation :: !(Maybe Text)
-    , _cmuGrantRead               :: !(Maybe Text)
-    , _cmuStorageClass            :: !(Maybe StorageClass)
-    , _cmuSSECustomerKeyMD5       :: !(Maybe Text)
-    , _cmuSSEKMSKeyId             :: !(Maybe (Sensitive Text))
-    , _cmuGrantFullControl        :: !(Maybe Text)
-    , _cmuContentEncoding         :: !(Maybe Text)
-    , _cmuMetadata                :: !(Map Text Text)
-    , _cmuCacheControl            :: !(Maybe Text)
-    , _cmuContentLanguage         :: !(Maybe Text)
-    , _cmuACL                     :: !(Maybe ObjectCannedACL)
-    , _cmuContentDisposition      :: !(Maybe Text)
-    , _cmuServerSideEncryption    :: !(Maybe ServerSideEncryption)
-    , _cmuContentType             :: !(Maybe Text)
-    , _cmuBucket                  :: !BucketName
-    , _cmuKey                     :: !ObjectKey
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _cmuExpires                 :: !(Maybe RFC822)
+  , _cmuGrantReadACP            :: !(Maybe Text)
+  , _cmuSSECustomerAlgorithm    :: !(Maybe Text)
+  , _cmuSSECustomerKey          :: !(Maybe (Sensitive Text))
+  , _cmuRequestPayer            :: !(Maybe RequestPayer)
+  , _cmuGrantWriteACP           :: !(Maybe Text)
+  , _cmuWebsiteRedirectLocation :: !(Maybe Text)
+  , _cmuGrantRead               :: !(Maybe Text)
+  , _cmuStorageClass            :: !(Maybe StorageClass)
+  , _cmuSSECustomerKeyMD5       :: !(Maybe Text)
+  , _cmuSSEKMSKeyId             :: !(Maybe (Sensitive Text))
+  , _cmuGrantFullControl        :: !(Maybe Text)
+  , _cmuContentEncoding         :: !(Maybe Text)
+  , _cmuTagging                 :: !(Maybe Text)
+  , _cmuMetadata                :: !(Map Text Text)
+  , _cmuCacheControl            :: !(Maybe Text)
+  , _cmuContentLanguage         :: !(Maybe Text)
+  , _cmuACL                     :: !(Maybe ObjectCannedACL)
+  , _cmuContentDisposition      :: !(Maybe Text)
+  , _cmuServerSideEncryption    :: !(Maybe ServerSideEncryption)
+  , _cmuContentType             :: !(Maybe Text)
+  , _cmuBucket                  :: !BucketName
+  , _cmuKey                     :: !ObjectKey
+  } deriving (Eq, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'CreateMultipartUpload' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -132,6 +135,8 @@
 --
 -- * 'cmuContentEncoding' - Specifies what content encodings have been applied to the object and thus what decoding mechanisms must be applied to obtain the media-type referenced by the Content-Type header field.
 --
+-- * 'cmuTagging' - The tag-set for the object. The tag-set must be encoded as URL Query parameters
+--
 -- * 'cmuMetadata' - A map of metadata to store with the object in S3.
 --
 -- * 'cmuCacheControl' - Specifies caching behavior along the request/reply chain.
@@ -154,31 +159,33 @@
     -> ObjectKey -- ^ 'cmuKey'
     -> CreateMultipartUpload
 createMultipartUpload pBucket_ pKey_ =
-    CreateMultipartUpload'
-    { _cmuExpires = Nothing
-    , _cmuGrantReadACP = Nothing
-    , _cmuSSECustomerAlgorithm = Nothing
-    , _cmuSSECustomerKey = Nothing
-    , _cmuRequestPayer = Nothing
-    , _cmuGrantWriteACP = Nothing
-    , _cmuWebsiteRedirectLocation = Nothing
-    , _cmuGrantRead = Nothing
-    , _cmuStorageClass = Nothing
-    , _cmuSSECustomerKeyMD5 = Nothing
-    , _cmuSSEKMSKeyId = Nothing
-    , _cmuGrantFullControl = Nothing
-    , _cmuContentEncoding = Nothing
-    , _cmuMetadata = mempty
-    , _cmuCacheControl = Nothing
-    , _cmuContentLanguage = Nothing
-    , _cmuACL = Nothing
-    , _cmuContentDisposition = Nothing
-    , _cmuServerSideEncryption = Nothing
-    , _cmuContentType = Nothing
-    , _cmuBucket = pBucket_
-    , _cmuKey = pKey_
-    }
+  CreateMultipartUpload'
+  { _cmuExpires = Nothing
+  , _cmuGrantReadACP = Nothing
+  , _cmuSSECustomerAlgorithm = Nothing
+  , _cmuSSECustomerKey = Nothing
+  , _cmuRequestPayer = Nothing
+  , _cmuGrantWriteACP = Nothing
+  , _cmuWebsiteRedirectLocation = Nothing
+  , _cmuGrantRead = Nothing
+  , _cmuStorageClass = Nothing
+  , _cmuSSECustomerKeyMD5 = Nothing
+  , _cmuSSEKMSKeyId = Nothing
+  , _cmuGrantFullControl = Nothing
+  , _cmuContentEncoding = Nothing
+  , _cmuTagging = Nothing
+  , _cmuMetadata = mempty
+  , _cmuCacheControl = Nothing
+  , _cmuContentLanguage = Nothing
+  , _cmuACL = Nothing
+  , _cmuContentDisposition = Nothing
+  , _cmuServerSideEncryption = Nothing
+  , _cmuContentType = Nothing
+  , _cmuBucket = pBucket_
+  , _cmuKey = pKey_
+  }
 
+
 -- | The date and time at which the object is no longer cacheable.
 cmuExpires :: Lens' CreateMultipartUpload (Maybe UTCTime)
 cmuExpires = lens _cmuExpires (\ s a -> s{_cmuExpires = a}) . mapping _Time;
@@ -231,6 +238,10 @@
 cmuContentEncoding :: Lens' CreateMultipartUpload (Maybe Text)
 cmuContentEncoding = lens _cmuContentEncoding (\ s a -> s{_cmuContentEncoding = a});
 
+-- | The tag-set for the object. The tag-set must be encoded as URL Query parameters
+cmuTagging :: Lens' CreateMultipartUpload (Maybe Text)
+cmuTagging = lens _cmuTagging (\ s a -> s{_cmuTagging = a});
+
 -- | A map of metadata to store with the object in S3.
 cmuMetadata :: Lens' CreateMultipartUpload (HashMap Text Text)
 cmuMetadata = lens _cmuMetadata (\ s a -> s{_cmuMetadata = a}) . _Map;
@@ -291,9 +302,9 @@
                      <*> (h .#? "x-amz-server-side-encryption")
                      <*> (pure (fromEnum s)))
 
-instance Hashable CreateMultipartUpload
+instance Hashable CreateMultipartUpload where
 
-instance NFData CreateMultipartUpload
+instance NFData CreateMultipartUpload where
 
 instance ToHeaders CreateMultipartUpload where
         toHeaders CreateMultipartUpload'{..}
@@ -316,6 +327,7 @@
                  _cmuSSEKMSKeyId,
                "x-amz-grant-full-control" =# _cmuGrantFullControl,
                "Content-Encoding" =# _cmuContentEncoding,
+               "x-amz-tagging" =# _cmuTagging,
                "x-amz-meta-" =# _cmuMetadata,
                "Cache-Control" =# _cmuCacheControl,
                "Content-Language" =# _cmuContentLanguage,
@@ -334,19 +346,20 @@
 
 -- | /See:/ 'createMultipartUploadResponse' smart constructor.
 data CreateMultipartUploadResponse = CreateMultipartUploadResponse'
-    { _cmursRequestCharged       :: !(Maybe RequestCharged)
-    , _cmursBucket               :: !(Maybe BucketName)
-    , _cmursSSECustomerAlgorithm :: !(Maybe Text)
-    , _cmursAbortDate            :: !(Maybe RFC822)
-    , _cmursAbortRuleId          :: !(Maybe Text)
-    , _cmursKey                  :: !(Maybe ObjectKey)
-    , _cmursSSECustomerKeyMD5    :: !(Maybe Text)
-    , _cmursSSEKMSKeyId          :: !(Maybe (Sensitive Text))
-    , _cmursUploadId             :: !(Maybe Text)
-    , _cmursServerSideEncryption :: !(Maybe ServerSideEncryption)
-    , _cmursResponseStatus       :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _cmursRequestCharged       :: !(Maybe RequestCharged)
+  , _cmursBucket               :: !(Maybe BucketName)
+  , _cmursSSECustomerAlgorithm :: !(Maybe Text)
+  , _cmursAbortDate            :: !(Maybe RFC822)
+  , _cmursAbortRuleId          :: !(Maybe Text)
+  , _cmursKey                  :: !(Maybe ObjectKey)
+  , _cmursSSECustomerKeyMD5    :: !(Maybe Text)
+  , _cmursSSEKMSKeyId          :: !(Maybe (Sensitive Text))
+  , _cmursUploadId             :: !(Maybe Text)
+  , _cmursServerSideEncryption :: !(Maybe ServerSideEncryption)
+  , _cmursResponseStatus       :: !Int
+  } deriving (Eq, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'CreateMultipartUploadResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -376,20 +389,21 @@
     :: Int -- ^ 'cmursResponseStatus'
     -> CreateMultipartUploadResponse
 createMultipartUploadResponse pResponseStatus_ =
-    CreateMultipartUploadResponse'
-    { _cmursRequestCharged = Nothing
-    , _cmursBucket = Nothing
-    , _cmursSSECustomerAlgorithm = Nothing
-    , _cmursAbortDate = Nothing
-    , _cmursAbortRuleId = Nothing
-    , _cmursKey = Nothing
-    , _cmursSSECustomerKeyMD5 = Nothing
-    , _cmursSSEKMSKeyId = Nothing
-    , _cmursUploadId = Nothing
-    , _cmursServerSideEncryption = Nothing
-    , _cmursResponseStatus = pResponseStatus_
-    }
+  CreateMultipartUploadResponse'
+  { _cmursRequestCharged = Nothing
+  , _cmursBucket = Nothing
+  , _cmursSSECustomerAlgorithm = Nothing
+  , _cmursAbortDate = Nothing
+  , _cmursAbortRuleId = Nothing
+  , _cmursKey = Nothing
+  , _cmursSSECustomerKeyMD5 = Nothing
+  , _cmursSSEKMSKeyId = Nothing
+  , _cmursUploadId = Nothing
+  , _cmursServerSideEncryption = Nothing
+  , _cmursResponseStatus = pResponseStatus_
+  }
 
+
 -- | Undocumented member.
 cmursRequestCharged :: Lens' CreateMultipartUploadResponse (Maybe RequestCharged)
 cmursRequestCharged = lens _cmursRequestCharged (\ s a -> s{_cmursRequestCharged = a});
@@ -434,4 +448,4 @@
 cmursResponseStatus :: Lens' CreateMultipartUploadResponse Int
 cmursResponseStatus = lens _cmursResponseStatus (\ s a -> s{_cmursResponseStatus = a});
 
-instance NFData CreateMultipartUploadResponse
+instance NFData CreateMultipartUploadResponse where
diff --git a/gen/Network/AWS/S3/DeleteBucket.hs b/gen/Network/AWS/S3/DeleteBucket.hs
--- a/gen/Network/AWS/S3/DeleteBucket.hs
+++ b/gen/Network/AWS/S3/DeleteBucket.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.DeleteBucket
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -32,18 +32,19 @@
     , DeleteBucketResponse
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'deleteBucket' smart constructor.
 newtype DeleteBucket = DeleteBucket'
-    { _dbBucket :: BucketName
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dbBucket :: BucketName
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteBucket' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -52,11 +53,9 @@
 deleteBucket
     :: BucketName -- ^ 'dbBucket'
     -> DeleteBucket
-deleteBucket pBucket_ =
-    DeleteBucket'
-    { _dbBucket = pBucket_
-    }
+deleteBucket pBucket_ = DeleteBucket' {_dbBucket = pBucket_}
 
+
 -- | Undocumented member.
 dbBucket :: Lens' DeleteBucket BucketName
 dbBucket = lens _dbBucket (\ s a -> s{_dbBucket = a});
@@ -66,9 +65,9 @@
         request = delete s3
         response = receiveNull DeleteBucketResponse'
 
-instance Hashable DeleteBucket
+instance Hashable DeleteBucket where
 
-instance NFData DeleteBucket
+instance NFData DeleteBucket where
 
 instance ToHeaders DeleteBucket where
         toHeaders = const mempty
@@ -82,13 +81,15 @@
 
 -- | /See:/ 'deleteBucketResponse' smart constructor.
 data DeleteBucketResponse =
-    DeleteBucketResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
+  DeleteBucketResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteBucketResponse' with the minimum fields required to make a request.
 --
 deleteBucketResponse
     :: DeleteBucketResponse
 deleteBucketResponse = DeleteBucketResponse'
 
-instance NFData DeleteBucketResponse
+
+instance NFData DeleteBucketResponse where
diff --git a/gen/Network/AWS/S3/DeleteBucketAnalyticsConfiguration.hs b/gen/Network/AWS/S3/DeleteBucketAnalyticsConfiguration.hs
--- a/gen/Network/AWS/S3/DeleteBucketAnalyticsConfiguration.hs
+++ b/gen/Network/AWS/S3/DeleteBucketAnalyticsConfiguration.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.DeleteBucketAnalyticsConfiguration
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -33,19 +33,20 @@
     , DeleteBucketAnalyticsConfigurationResponse
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'deleteBucketAnalyticsConfiguration' smart constructor.
 data DeleteBucketAnalyticsConfiguration = DeleteBucketAnalyticsConfiguration'
-    { _dbacBucket :: !BucketName
-    , _dbacId     :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dbacBucket :: !BucketName
+  , _dbacId     :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteBucketAnalyticsConfiguration' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -58,11 +59,9 @@
     -> Text -- ^ 'dbacId'
     -> DeleteBucketAnalyticsConfiguration
 deleteBucketAnalyticsConfiguration pBucket_ pId_ =
-    DeleteBucketAnalyticsConfiguration'
-    { _dbacBucket = pBucket_
-    , _dbacId = pId_
-    }
+  DeleteBucketAnalyticsConfiguration' {_dbacBucket = pBucket_, _dbacId = pId_}
 
+
 -- | The name of the bucket from which an analytics configuration is deleted.
 dbacBucket :: Lens' DeleteBucketAnalyticsConfiguration BucketName
 dbacBucket = lens _dbacBucket (\ s a -> s{_dbacBucket = a});
@@ -72,7 +71,8 @@
 dbacId = lens _dbacId (\ s a -> s{_dbacId = a});
 
 instance AWSRequest
-         DeleteBucketAnalyticsConfiguration where
+           DeleteBucketAnalyticsConfiguration
+         where
         type Rs DeleteBucketAnalyticsConfiguration =
              DeleteBucketAnalyticsConfigurationResponse
         request = delete s3
@@ -81,8 +81,10 @@
               DeleteBucketAnalyticsConfigurationResponse'
 
 instance Hashable DeleteBucketAnalyticsConfiguration
+         where
 
 instance NFData DeleteBucketAnalyticsConfiguration
+         where
 
 instance ToHeaders DeleteBucketAnalyticsConfiguration
          where
@@ -100,15 +102,18 @@
 
 -- | /See:/ 'deleteBucketAnalyticsConfigurationResponse' smart constructor.
 data DeleteBucketAnalyticsConfigurationResponse =
-    DeleteBucketAnalyticsConfigurationResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
+  DeleteBucketAnalyticsConfigurationResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteBucketAnalyticsConfigurationResponse' with the minimum fields required to make a request.
 --
 deleteBucketAnalyticsConfigurationResponse
     :: DeleteBucketAnalyticsConfigurationResponse
 deleteBucketAnalyticsConfigurationResponse =
-    DeleteBucketAnalyticsConfigurationResponse'
+  DeleteBucketAnalyticsConfigurationResponse'
 
+
 instance NFData
-         DeleteBucketAnalyticsConfigurationResponse
+           DeleteBucketAnalyticsConfigurationResponse
+         where
diff --git a/gen/Network/AWS/S3/DeleteBucketCORS.hs b/gen/Network/AWS/S3/DeleteBucketCORS.hs
--- a/gen/Network/AWS/S3/DeleteBucketCORS.hs
+++ b/gen/Network/AWS/S3/DeleteBucketCORS.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.DeleteBucketCORS
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -32,18 +32,19 @@
     , DeleteBucketCORSResponse
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'deleteBucketCORS' smart constructor.
 newtype DeleteBucketCORS = DeleteBucketCORS'
-    { _dbcBucket :: BucketName
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dbcBucket :: BucketName
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteBucketCORS' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -52,11 +53,9 @@
 deleteBucketCORS
     :: BucketName -- ^ 'dbcBucket'
     -> DeleteBucketCORS
-deleteBucketCORS pBucket_ =
-    DeleteBucketCORS'
-    { _dbcBucket = pBucket_
-    }
+deleteBucketCORS pBucket_ = DeleteBucketCORS' {_dbcBucket = pBucket_}
 
+
 -- | Undocumented member.
 dbcBucket :: Lens' DeleteBucketCORS BucketName
 dbcBucket = lens _dbcBucket (\ s a -> s{_dbcBucket = a});
@@ -66,9 +65,9 @@
         request = delete s3
         response = receiveNull DeleteBucketCORSResponse'
 
-instance Hashable DeleteBucketCORS
+instance Hashable DeleteBucketCORS where
 
-instance NFData DeleteBucketCORS
+instance NFData DeleteBucketCORS where
 
 instance ToHeaders DeleteBucketCORS where
         toHeaders = const mempty
@@ -82,13 +81,15 @@
 
 -- | /See:/ 'deleteBucketCORSResponse' smart constructor.
 data DeleteBucketCORSResponse =
-    DeleteBucketCORSResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
+  DeleteBucketCORSResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteBucketCORSResponse' with the minimum fields required to make a request.
 --
 deleteBucketCORSResponse
     :: DeleteBucketCORSResponse
 deleteBucketCORSResponse = DeleteBucketCORSResponse'
 
-instance NFData DeleteBucketCORSResponse
+
+instance NFData DeleteBucketCORSResponse where
diff --git a/gen/Network/AWS/S3/DeleteBucketEncryption.hs b/gen/Network/AWS/S3/DeleteBucketEncryption.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/S3/DeleteBucketEncryption.hs
@@ -0,0 +1,98 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.S3.DeleteBucketEncryption
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the server-side encryption configuration from the bucket.
+module Network.AWS.S3.DeleteBucketEncryption
+    (
+    -- * Creating a Request
+      deleteBucketEncryption
+    , DeleteBucketEncryption
+    -- * Request Lenses
+    , dbeBucket
+
+    -- * Destructuring the Response
+    , deleteBucketEncryptionResponse
+    , DeleteBucketEncryptionResponse
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
+
+-- | /See:/ 'deleteBucketEncryption' smart constructor.
+newtype DeleteBucketEncryption = DeleteBucketEncryption'
+  { _dbeBucket :: BucketName
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteBucketEncryption' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dbeBucket' - The name of the bucket containing the server-side encryption configuration to delete.
+deleteBucketEncryption
+    :: BucketName -- ^ 'dbeBucket'
+    -> DeleteBucketEncryption
+deleteBucketEncryption pBucket_ =
+  DeleteBucketEncryption' {_dbeBucket = pBucket_}
+
+
+-- | The name of the bucket containing the server-side encryption configuration to delete.
+dbeBucket :: Lens' DeleteBucketEncryption BucketName
+dbeBucket = lens _dbeBucket (\ s a -> s{_dbeBucket = a});
+
+instance AWSRequest DeleteBucketEncryption where
+        type Rs DeleteBucketEncryption =
+             DeleteBucketEncryptionResponse
+        request = delete s3
+        response
+          = receiveNull DeleteBucketEncryptionResponse'
+
+instance Hashable DeleteBucketEncryption where
+
+instance NFData DeleteBucketEncryption where
+
+instance ToHeaders DeleteBucketEncryption where
+        toHeaders = const mempty
+
+instance ToPath DeleteBucketEncryption where
+        toPath DeleteBucketEncryption'{..}
+          = mconcat ["/", toBS _dbeBucket]
+
+instance ToQuery DeleteBucketEncryption where
+        toQuery = const (mconcat ["encryption"])
+
+-- | /See:/ 'deleteBucketEncryptionResponse' smart constructor.
+data DeleteBucketEncryptionResponse =
+  DeleteBucketEncryptionResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteBucketEncryptionResponse' with the minimum fields required to make a request.
+--
+deleteBucketEncryptionResponse
+    :: DeleteBucketEncryptionResponse
+deleteBucketEncryptionResponse = DeleteBucketEncryptionResponse'
+
+
+instance NFData DeleteBucketEncryptionResponse where
diff --git a/gen/Network/AWS/S3/DeleteBucketInventoryConfiguration.hs b/gen/Network/AWS/S3/DeleteBucketInventoryConfiguration.hs
--- a/gen/Network/AWS/S3/DeleteBucketInventoryConfiguration.hs
+++ b/gen/Network/AWS/S3/DeleteBucketInventoryConfiguration.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.DeleteBucketInventoryConfiguration
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -33,19 +33,20 @@
     , DeleteBucketInventoryConfigurationResponse
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'deleteBucketInventoryConfiguration' smart constructor.
 data DeleteBucketInventoryConfiguration = DeleteBucketInventoryConfiguration'
-    { _dbicBucket :: !BucketName
-    , _dbicId     :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dbicBucket :: !BucketName
+  , _dbicId     :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteBucketInventoryConfiguration' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -58,11 +59,9 @@
     -> Text -- ^ 'dbicId'
     -> DeleteBucketInventoryConfiguration
 deleteBucketInventoryConfiguration pBucket_ pId_ =
-    DeleteBucketInventoryConfiguration'
-    { _dbicBucket = pBucket_
-    , _dbicId = pId_
-    }
+  DeleteBucketInventoryConfiguration' {_dbicBucket = pBucket_, _dbicId = pId_}
 
+
 -- | The name of the bucket containing the inventory configuration to delete.
 dbicBucket :: Lens' DeleteBucketInventoryConfiguration BucketName
 dbicBucket = lens _dbicBucket (\ s a -> s{_dbicBucket = a});
@@ -72,7 +71,8 @@
 dbicId = lens _dbicId (\ s a -> s{_dbicId = a});
 
 instance AWSRequest
-         DeleteBucketInventoryConfiguration where
+           DeleteBucketInventoryConfiguration
+         where
         type Rs DeleteBucketInventoryConfiguration =
              DeleteBucketInventoryConfigurationResponse
         request = delete s3
@@ -81,8 +81,10 @@
               DeleteBucketInventoryConfigurationResponse'
 
 instance Hashable DeleteBucketInventoryConfiguration
+         where
 
 instance NFData DeleteBucketInventoryConfiguration
+         where
 
 instance ToHeaders DeleteBucketInventoryConfiguration
          where
@@ -100,15 +102,18 @@
 
 -- | /See:/ 'deleteBucketInventoryConfigurationResponse' smart constructor.
 data DeleteBucketInventoryConfigurationResponse =
-    DeleteBucketInventoryConfigurationResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
+  DeleteBucketInventoryConfigurationResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteBucketInventoryConfigurationResponse' with the minimum fields required to make a request.
 --
 deleteBucketInventoryConfigurationResponse
     :: DeleteBucketInventoryConfigurationResponse
 deleteBucketInventoryConfigurationResponse =
-    DeleteBucketInventoryConfigurationResponse'
+  DeleteBucketInventoryConfigurationResponse'
 
+
 instance NFData
-         DeleteBucketInventoryConfigurationResponse
+           DeleteBucketInventoryConfigurationResponse
+         where
diff --git a/gen/Network/AWS/S3/DeleteBucketLifecycle.hs b/gen/Network/AWS/S3/DeleteBucketLifecycle.hs
--- a/gen/Network/AWS/S3/DeleteBucketLifecycle.hs
+++ b/gen/Network/AWS/S3/DeleteBucketLifecycle.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.DeleteBucketLifecycle
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -32,18 +32,19 @@
     , DeleteBucketLifecycleResponse
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'deleteBucketLifecycle' smart constructor.
 newtype DeleteBucketLifecycle = DeleteBucketLifecycle'
-    { _dblBucket :: BucketName
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dblBucket :: BucketName
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteBucketLifecycle' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -52,11 +53,9 @@
 deleteBucketLifecycle
     :: BucketName -- ^ 'dblBucket'
     -> DeleteBucketLifecycle
-deleteBucketLifecycle pBucket_ =
-    DeleteBucketLifecycle'
-    { _dblBucket = pBucket_
-    }
+deleteBucketLifecycle pBucket_ = DeleteBucketLifecycle' {_dblBucket = pBucket_}
 
+
 -- | Undocumented member.
 dblBucket :: Lens' DeleteBucketLifecycle BucketName
 dblBucket = lens _dblBucket (\ s a -> s{_dblBucket = a});
@@ -67,9 +66,9 @@
         request = delete s3
         response = receiveNull DeleteBucketLifecycleResponse'
 
-instance Hashable DeleteBucketLifecycle
+instance Hashable DeleteBucketLifecycle where
 
-instance NFData DeleteBucketLifecycle
+instance NFData DeleteBucketLifecycle where
 
 instance ToHeaders DeleteBucketLifecycle where
         toHeaders = const mempty
@@ -83,13 +82,15 @@
 
 -- | /See:/ 'deleteBucketLifecycleResponse' smart constructor.
 data DeleteBucketLifecycleResponse =
-    DeleteBucketLifecycleResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
+  DeleteBucketLifecycleResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteBucketLifecycleResponse' with the minimum fields required to make a request.
 --
 deleteBucketLifecycleResponse
     :: DeleteBucketLifecycleResponse
 deleteBucketLifecycleResponse = DeleteBucketLifecycleResponse'
 
-instance NFData DeleteBucketLifecycleResponse
+
+instance NFData DeleteBucketLifecycleResponse where
diff --git a/gen/Network/AWS/S3/DeleteBucketMetricsConfiguration.hs b/gen/Network/AWS/S3/DeleteBucketMetricsConfiguration.hs
--- a/gen/Network/AWS/S3/DeleteBucketMetricsConfiguration.hs
+++ b/gen/Network/AWS/S3/DeleteBucketMetricsConfiguration.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.DeleteBucketMetricsConfiguration
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -33,19 +33,20 @@
     , DeleteBucketMetricsConfigurationResponse
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'deleteBucketMetricsConfiguration' smart constructor.
 data DeleteBucketMetricsConfiguration = DeleteBucketMetricsConfiguration'
-    { _dbmcBucket :: !BucketName
-    , _dbmcId     :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dbmcBucket :: !BucketName
+  , _dbmcId     :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteBucketMetricsConfiguration' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -58,11 +59,9 @@
     -> Text -- ^ 'dbmcId'
     -> DeleteBucketMetricsConfiguration
 deleteBucketMetricsConfiguration pBucket_ pId_ =
-    DeleteBucketMetricsConfiguration'
-    { _dbmcBucket = pBucket_
-    , _dbmcId = pId_
-    }
+  DeleteBucketMetricsConfiguration' {_dbmcBucket = pBucket_, _dbmcId = pId_}
 
+
 -- | The name of the bucket containing the metrics configuration to delete.
 dbmcBucket :: Lens' DeleteBucketMetricsConfiguration BucketName
 dbmcBucket = lens _dbmcBucket (\ s a -> s{_dbmcBucket = a});
@@ -81,8 +80,10 @@
               DeleteBucketMetricsConfigurationResponse'
 
 instance Hashable DeleteBucketMetricsConfiguration
+         where
 
 instance NFData DeleteBucketMetricsConfiguration
+         where
 
 instance ToHeaders DeleteBucketMetricsConfiguration
          where
@@ -100,15 +101,18 @@
 
 -- | /See:/ 'deleteBucketMetricsConfigurationResponse' smart constructor.
 data DeleteBucketMetricsConfigurationResponse =
-    DeleteBucketMetricsConfigurationResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
+  DeleteBucketMetricsConfigurationResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteBucketMetricsConfigurationResponse' with the minimum fields required to make a request.
 --
 deleteBucketMetricsConfigurationResponse
     :: DeleteBucketMetricsConfigurationResponse
 deleteBucketMetricsConfigurationResponse =
-    DeleteBucketMetricsConfigurationResponse'
+  DeleteBucketMetricsConfigurationResponse'
 
+
 instance NFData
-         DeleteBucketMetricsConfigurationResponse
+           DeleteBucketMetricsConfigurationResponse
+         where
diff --git a/gen/Network/AWS/S3/DeleteBucketPolicy.hs b/gen/Network/AWS/S3/DeleteBucketPolicy.hs
--- a/gen/Network/AWS/S3/DeleteBucketPolicy.hs
+++ b/gen/Network/AWS/S3/DeleteBucketPolicy.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.DeleteBucketPolicy
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -32,18 +32,19 @@
     , DeleteBucketPolicyResponse
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'deleteBucketPolicy' smart constructor.
 newtype DeleteBucketPolicy = DeleteBucketPolicy'
-    { _dbpBucket :: BucketName
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dbpBucket :: BucketName
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteBucketPolicy' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -52,11 +53,9 @@
 deleteBucketPolicy
     :: BucketName -- ^ 'dbpBucket'
     -> DeleteBucketPolicy
-deleteBucketPolicy pBucket_ =
-    DeleteBucketPolicy'
-    { _dbpBucket = pBucket_
-    }
+deleteBucketPolicy pBucket_ = DeleteBucketPolicy' {_dbpBucket = pBucket_}
 
+
 -- | Undocumented member.
 dbpBucket :: Lens' DeleteBucketPolicy BucketName
 dbpBucket = lens _dbpBucket (\ s a -> s{_dbpBucket = a});
@@ -67,9 +66,9 @@
         request = delete s3
         response = receiveNull DeleteBucketPolicyResponse'
 
-instance Hashable DeleteBucketPolicy
+instance Hashable DeleteBucketPolicy where
 
-instance NFData DeleteBucketPolicy
+instance NFData DeleteBucketPolicy where
 
 instance ToHeaders DeleteBucketPolicy where
         toHeaders = const mempty
@@ -83,13 +82,15 @@
 
 -- | /See:/ 'deleteBucketPolicyResponse' smart constructor.
 data DeleteBucketPolicyResponse =
-    DeleteBucketPolicyResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
+  DeleteBucketPolicyResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteBucketPolicyResponse' with the minimum fields required to make a request.
 --
 deleteBucketPolicyResponse
     :: DeleteBucketPolicyResponse
 deleteBucketPolicyResponse = DeleteBucketPolicyResponse'
 
-instance NFData DeleteBucketPolicyResponse
+
+instance NFData DeleteBucketPolicyResponse where
diff --git a/gen/Network/AWS/S3/DeleteBucketReplication.hs b/gen/Network/AWS/S3/DeleteBucketReplication.hs
--- a/gen/Network/AWS/S3/DeleteBucketReplication.hs
+++ b/gen/Network/AWS/S3/DeleteBucketReplication.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.DeleteBucketReplication
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -32,18 +32,19 @@
     , DeleteBucketReplicationResponse
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'deleteBucketReplication' smart constructor.
 newtype DeleteBucketReplication = DeleteBucketReplication'
-    { _dbrBucket :: BucketName
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dbrBucket :: BucketName
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteBucketReplication' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -53,10 +54,9 @@
     :: BucketName -- ^ 'dbrBucket'
     -> DeleteBucketReplication
 deleteBucketReplication pBucket_ =
-    DeleteBucketReplication'
-    { _dbrBucket = pBucket_
-    }
+  DeleteBucketReplication' {_dbrBucket = pBucket_}
 
+
 -- | Undocumented member.
 dbrBucket :: Lens' DeleteBucketReplication BucketName
 dbrBucket = lens _dbrBucket (\ s a -> s{_dbrBucket = a});
@@ -68,9 +68,9 @@
         response
           = receiveNull DeleteBucketReplicationResponse'
 
-instance Hashable DeleteBucketReplication
+instance Hashable DeleteBucketReplication where
 
-instance NFData DeleteBucketReplication
+instance NFData DeleteBucketReplication where
 
 instance ToHeaders DeleteBucketReplication where
         toHeaders = const mempty
@@ -84,13 +84,15 @@
 
 -- | /See:/ 'deleteBucketReplicationResponse' smart constructor.
 data DeleteBucketReplicationResponse =
-    DeleteBucketReplicationResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
+  DeleteBucketReplicationResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteBucketReplicationResponse' with the minimum fields required to make a request.
 --
 deleteBucketReplicationResponse
     :: DeleteBucketReplicationResponse
 deleteBucketReplicationResponse = DeleteBucketReplicationResponse'
 
-instance NFData DeleteBucketReplicationResponse
+
+instance NFData DeleteBucketReplicationResponse where
diff --git a/gen/Network/AWS/S3/DeleteBucketTagging.hs b/gen/Network/AWS/S3/DeleteBucketTagging.hs
--- a/gen/Network/AWS/S3/DeleteBucketTagging.hs
+++ b/gen/Network/AWS/S3/DeleteBucketTagging.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.DeleteBucketTagging
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -32,18 +32,19 @@
     , DeleteBucketTaggingResponse
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'deleteBucketTagging' smart constructor.
 newtype DeleteBucketTagging = DeleteBucketTagging'
-    { _dbtBucket :: BucketName
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dbtBucket :: BucketName
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteBucketTagging' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -52,11 +53,9 @@
 deleteBucketTagging
     :: BucketName -- ^ 'dbtBucket'
     -> DeleteBucketTagging
-deleteBucketTagging pBucket_ =
-    DeleteBucketTagging'
-    { _dbtBucket = pBucket_
-    }
+deleteBucketTagging pBucket_ = DeleteBucketTagging' {_dbtBucket = pBucket_}
 
+
 -- | Undocumented member.
 dbtBucket :: Lens' DeleteBucketTagging BucketName
 dbtBucket = lens _dbtBucket (\ s a -> s{_dbtBucket = a});
@@ -67,9 +66,9 @@
         request = delete s3
         response = receiveNull DeleteBucketTaggingResponse'
 
-instance Hashable DeleteBucketTagging
+instance Hashable DeleteBucketTagging where
 
-instance NFData DeleteBucketTagging
+instance NFData DeleteBucketTagging where
 
 instance ToHeaders DeleteBucketTagging where
         toHeaders = const mempty
@@ -83,13 +82,15 @@
 
 -- | /See:/ 'deleteBucketTaggingResponse' smart constructor.
 data DeleteBucketTaggingResponse =
-    DeleteBucketTaggingResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
+  DeleteBucketTaggingResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteBucketTaggingResponse' with the minimum fields required to make a request.
 --
 deleteBucketTaggingResponse
     :: DeleteBucketTaggingResponse
 deleteBucketTaggingResponse = DeleteBucketTaggingResponse'
 
-instance NFData DeleteBucketTaggingResponse
+
+instance NFData DeleteBucketTaggingResponse where
diff --git a/gen/Network/AWS/S3/DeleteBucketWebsite.hs b/gen/Network/AWS/S3/DeleteBucketWebsite.hs
--- a/gen/Network/AWS/S3/DeleteBucketWebsite.hs
+++ b/gen/Network/AWS/S3/DeleteBucketWebsite.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.DeleteBucketWebsite
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -32,18 +32,19 @@
     , DeleteBucketWebsiteResponse
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'deleteBucketWebsite' smart constructor.
 newtype DeleteBucketWebsite = DeleteBucketWebsite'
-    { _dbwBucket :: BucketName
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dbwBucket :: BucketName
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteBucketWebsite' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -52,11 +53,9 @@
 deleteBucketWebsite
     :: BucketName -- ^ 'dbwBucket'
     -> DeleteBucketWebsite
-deleteBucketWebsite pBucket_ =
-    DeleteBucketWebsite'
-    { _dbwBucket = pBucket_
-    }
+deleteBucketWebsite pBucket_ = DeleteBucketWebsite' {_dbwBucket = pBucket_}
 
+
 -- | Undocumented member.
 dbwBucket :: Lens' DeleteBucketWebsite BucketName
 dbwBucket = lens _dbwBucket (\ s a -> s{_dbwBucket = a});
@@ -67,9 +66,9 @@
         request = delete s3
         response = receiveNull DeleteBucketWebsiteResponse'
 
-instance Hashable DeleteBucketWebsite
+instance Hashable DeleteBucketWebsite where
 
-instance NFData DeleteBucketWebsite
+instance NFData DeleteBucketWebsite where
 
 instance ToHeaders DeleteBucketWebsite where
         toHeaders = const mempty
@@ -83,13 +82,15 @@
 
 -- | /See:/ 'deleteBucketWebsiteResponse' smart constructor.
 data DeleteBucketWebsiteResponse =
-    DeleteBucketWebsiteResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
+  DeleteBucketWebsiteResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteBucketWebsiteResponse' with the minimum fields required to make a request.
 --
 deleteBucketWebsiteResponse
     :: DeleteBucketWebsiteResponse
 deleteBucketWebsiteResponse = DeleteBucketWebsiteResponse'
 
-instance NFData DeleteBucketWebsiteResponse
+
+instance NFData DeleteBucketWebsiteResponse where
diff --git a/gen/Network/AWS/S3/DeleteObject.hs b/gen/Network/AWS/S3/DeleteObject.hs
--- a/gen/Network/AWS/S3/DeleteObject.hs
+++ b/gen/Network/AWS/S3/DeleteObject.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.DeleteObject
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -41,22 +41,23 @@
     , dorsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'deleteObject' smart constructor.
 data DeleteObject = DeleteObject'
-    { _doVersionId    :: !(Maybe ObjectVersionId)
-    , _doMFA          :: !(Maybe Text)
-    , _doRequestPayer :: !(Maybe RequestPayer)
-    , _doBucket       :: !BucketName
-    , _doKey          :: !ObjectKey
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _doVersionId    :: !(Maybe ObjectVersionId)
+  , _doMFA          :: !(Maybe Text)
+  , _doRequestPayer :: !(Maybe RequestPayer)
+  , _doBucket       :: !BucketName
+  , _doKey          :: !ObjectKey
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteObject' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -75,14 +76,15 @@
     -> ObjectKey -- ^ 'doKey'
     -> DeleteObject
 deleteObject pBucket_ pKey_ =
-    DeleteObject'
-    { _doVersionId = Nothing
-    , _doMFA = Nothing
-    , _doRequestPayer = Nothing
-    , _doBucket = pBucket_
-    , _doKey = pKey_
-    }
+  DeleteObject'
+  { _doVersionId = Nothing
+  , _doMFA = Nothing
+  , _doRequestPayer = Nothing
+  , _doBucket = pBucket_
+  , _doKey = pKey_
+  }
 
+
 -- | VersionId used to reference a specific version of the object.
 doVersionId :: Lens' DeleteObject (Maybe ObjectVersionId)
 doVersionId = lens _doVersionId (\ s a -> s{_doVersionId = a});
@@ -115,9 +117,9 @@
                      <*> (h .#? "x-amz-delete-marker")
                      <*> (pure (fromEnum s)))
 
-instance Hashable DeleteObject
+instance Hashable DeleteObject where
 
-instance NFData DeleteObject
+instance NFData DeleteObject where
 
 instance ToHeaders DeleteObject where
         toHeaders DeleteObject'{..}
@@ -135,12 +137,13 @@
 
 -- | /See:/ 'deleteObjectResponse' smart constructor.
 data DeleteObjectResponse = DeleteObjectResponse'
-    { _dorsRequestCharged :: !(Maybe RequestCharged)
-    , _dorsVersionId      :: !(Maybe ObjectVersionId)
-    , _dorsDeleteMarker   :: !(Maybe Bool)
-    , _dorsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dorsRequestCharged :: !(Maybe RequestCharged)
+  , _dorsVersionId      :: !(Maybe ObjectVersionId)
+  , _dorsDeleteMarker   :: !(Maybe Bool)
+  , _dorsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteObjectResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -156,13 +159,14 @@
     :: Int -- ^ 'dorsResponseStatus'
     -> DeleteObjectResponse
 deleteObjectResponse pResponseStatus_ =
-    DeleteObjectResponse'
-    { _dorsRequestCharged = Nothing
-    , _dorsVersionId = Nothing
-    , _dorsDeleteMarker = Nothing
-    , _dorsResponseStatus = pResponseStatus_
-    }
+  DeleteObjectResponse'
+  { _dorsRequestCharged = Nothing
+  , _dorsVersionId = Nothing
+  , _dorsDeleteMarker = Nothing
+  , _dorsResponseStatus = pResponseStatus_
+  }
 
+
 -- | Undocumented member.
 dorsRequestCharged :: Lens' DeleteObjectResponse (Maybe RequestCharged)
 dorsRequestCharged = lens _dorsRequestCharged (\ s a -> s{_dorsRequestCharged = a});
@@ -179,4 +183,4 @@
 dorsResponseStatus :: Lens' DeleteObjectResponse Int
 dorsResponseStatus = lens _dorsResponseStatus (\ s a -> s{_dorsResponseStatus = a});
 
-instance NFData DeleteObjectResponse
+instance NFData DeleteObjectResponse where
diff --git a/gen/Network/AWS/S3/DeleteObjectTagging.hs b/gen/Network/AWS/S3/DeleteObjectTagging.hs
--- a/gen/Network/AWS/S3/DeleteObjectTagging.hs
+++ b/gen/Network/AWS/S3/DeleteObjectTagging.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.DeleteObjectTagging
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -37,20 +37,21 @@
     , dotrsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'deleteObjectTagging' smart constructor.
 data DeleteObjectTagging = DeleteObjectTagging'
-    { _dotVersionId :: !(Maybe ObjectVersionId)
-    , _dotBucket    :: !BucketName
-    , _dotKey       :: !ObjectKey
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dotVersionId :: !(Maybe ObjectVersionId)
+  , _dotBucket    :: !BucketName
+  , _dotKey       :: !ObjectKey
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteObjectTagging' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -65,12 +66,10 @@
     -> ObjectKey -- ^ 'dotKey'
     -> DeleteObjectTagging
 deleteObjectTagging pBucket_ pKey_ =
-    DeleteObjectTagging'
-    { _dotVersionId = Nothing
-    , _dotBucket = pBucket_
-    , _dotKey = pKey_
-    }
+  DeleteObjectTagging'
+  {_dotVersionId = Nothing, _dotBucket = pBucket_, _dotKey = pKey_}
 
+
 -- | The versionId of the object that the tag-set will be removed from.
 dotVersionId :: Lens' DeleteObjectTagging (Maybe ObjectVersionId)
 dotVersionId = lens _dotVersionId (\ s a -> s{_dotVersionId = a});
@@ -93,9 +92,9 @@
                  DeleteObjectTaggingResponse' <$>
                    (h .#? "x-amz-version-id") <*> (pure (fromEnum s)))
 
-instance Hashable DeleteObjectTagging
+instance Hashable DeleteObjectTagging where
 
-instance NFData DeleteObjectTagging
+instance NFData DeleteObjectTagging where
 
 instance ToHeaders DeleteObjectTagging where
         toHeaders = const mempty
@@ -110,10 +109,11 @@
 
 -- | /See:/ 'deleteObjectTaggingResponse' smart constructor.
 data DeleteObjectTaggingResponse = DeleteObjectTaggingResponse'
-    { _dotrsVersionId      :: !(Maybe ObjectVersionId)
-    , _dotrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dotrsVersionId      :: !(Maybe ObjectVersionId)
+  , _dotrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteObjectTaggingResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -125,11 +125,10 @@
     :: Int -- ^ 'dotrsResponseStatus'
     -> DeleteObjectTaggingResponse
 deleteObjectTaggingResponse pResponseStatus_ =
-    DeleteObjectTaggingResponse'
-    { _dotrsVersionId = Nothing
-    , _dotrsResponseStatus = pResponseStatus_
-    }
+  DeleteObjectTaggingResponse'
+  {_dotrsVersionId = Nothing, _dotrsResponseStatus = pResponseStatus_}
 
+
 -- | The versionId of the object the tag-set was removed from.
 dotrsVersionId :: Lens' DeleteObjectTaggingResponse (Maybe ObjectVersionId)
 dotrsVersionId = lens _dotrsVersionId (\ s a -> s{_dotrsVersionId = a});
@@ -138,4 +137,4 @@
 dotrsResponseStatus :: Lens' DeleteObjectTaggingResponse Int
 dotrsResponseStatus = lens _dotrsResponseStatus (\ s a -> s{_dotrsResponseStatus = a});
 
-instance NFData DeleteObjectTaggingResponse
+instance NFData DeleteObjectTaggingResponse where
diff --git a/gen/Network/AWS/S3/DeleteObjects.hs b/gen/Network/AWS/S3/DeleteObjects.hs
--- a/gen/Network/AWS/S3/DeleteObjects.hs
+++ b/gen/Network/AWS/S3/DeleteObjects.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.DeleteObjects
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -40,21 +40,22 @@
     , drsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'deleteObjects' smart constructor.
 data DeleteObjects = DeleteObjects'
-    { _dosMFA          :: !(Maybe Text)
-    , _dosRequestPayer :: !(Maybe RequestPayer)
-    , _dosBucket       :: !BucketName
-    , _dosDelete       :: !Delete
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _dosMFA          :: !(Maybe Text)
+  , _dosRequestPayer :: !(Maybe RequestPayer)
+  , _dosBucket       :: !BucketName
+  , _dosDelete       :: !Delete
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteObjects' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -71,13 +72,14 @@
     -> Delete -- ^ 'dosDelete'
     -> DeleteObjects
 deleteObjects pBucket_ pDelete_ =
-    DeleteObjects'
-    { _dosMFA = Nothing
-    , _dosRequestPayer = Nothing
-    , _dosBucket = pBucket_
-    , _dosDelete = pDelete_
-    }
+  DeleteObjects'
+  { _dosMFA = Nothing
+  , _dosRequestPayer = Nothing
+  , _dosBucket = pBucket_
+  , _dosDelete = pDelete_
+  }
 
+
 -- | The concatenation of the authentication device's serial number, a space, and the value that is displayed on your authentication device.
 dosMFA :: Lens' DeleteObjects (Maybe Text)
 dosMFA = lens _dosMFA (\ s a -> s{_dosMFA = a});
@@ -106,9 +108,9 @@
                      <*> (may (parseXMLList "Error") x)
                      <*> (pure (fromEnum s)))
 
-instance Hashable DeleteObjects
+instance Hashable DeleteObjects where
 
-instance NFData DeleteObjects
+instance NFData DeleteObjects where
 
 instance ToElement DeleteObjects where
         toElement
@@ -132,12 +134,13 @@
 
 -- | /See:/ 'deleteObjectsResponse' smart constructor.
 data DeleteObjectsResponse = DeleteObjectsResponse'
-    { _drsRequestCharged :: !(Maybe RequestCharged)
-    , _drsDeleted        :: !(Maybe [DeletedObject])
-    , _drsErrors         :: !(Maybe [S3ServiceError])
-    , _drsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _drsRequestCharged :: !(Maybe RequestCharged)
+  , _drsDeleted        :: !(Maybe [DeletedObject])
+  , _drsErrors         :: !(Maybe [S3ServiceError])
+  , _drsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'DeleteObjectsResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -153,13 +156,14 @@
     :: Int -- ^ 'drsResponseStatus'
     -> DeleteObjectsResponse
 deleteObjectsResponse pResponseStatus_ =
-    DeleteObjectsResponse'
-    { _drsRequestCharged = Nothing
-    , _drsDeleted = Nothing
-    , _drsErrors = Nothing
-    , _drsResponseStatus = pResponseStatus_
-    }
+  DeleteObjectsResponse'
+  { _drsRequestCharged = Nothing
+  , _drsDeleted = Nothing
+  , _drsErrors = Nothing
+  , _drsResponseStatus = pResponseStatus_
+  }
 
+
 -- | Undocumented member.
 drsRequestCharged :: Lens' DeleteObjectsResponse (Maybe RequestCharged)
 drsRequestCharged = lens _drsRequestCharged (\ s a -> s{_drsRequestCharged = a});
@@ -176,4 +180,4 @@
 drsResponseStatus :: Lens' DeleteObjectsResponse Int
 drsResponseStatus = lens _drsResponseStatus (\ s a -> s{_drsResponseStatus = a});
 
-instance NFData DeleteObjectsResponse
+instance NFData DeleteObjectsResponse where
diff --git a/gen/Network/AWS/S3/GetBucketACL.hs b/gen/Network/AWS/S3/GetBucketACL.hs
--- a/gen/Network/AWS/S3/GetBucketACL.hs
+++ b/gen/Network/AWS/S3/GetBucketACL.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.GetBucketACL
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -36,18 +36,19 @@
     , gbarsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'getBucketACL' smart constructor.
 newtype GetBucketACL = GetBucketACL'
-    { _gbaBucket :: BucketName
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gbaBucket :: BucketName
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetBucketACL' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -56,11 +57,9 @@
 getBucketACL
     :: BucketName -- ^ 'gbaBucket'
     -> GetBucketACL
-getBucketACL pBucket_ =
-    GetBucketACL'
-    { _gbaBucket = pBucket_
-    }
+getBucketACL pBucket_ = GetBucketACL' {_gbaBucket = pBucket_}
 
+
 -- | Undocumented member.
 gbaBucket :: Lens' GetBucketACL BucketName
 gbaBucket = lens _gbaBucket (\ s a -> s{_gbaBucket = a});
@@ -77,9 +76,9 @@
                      <*> (x .@? "Owner")
                      <*> (pure (fromEnum s)))
 
-instance Hashable GetBucketACL
+instance Hashable GetBucketACL where
 
-instance NFData GetBucketACL
+instance NFData GetBucketACL where
 
 instance ToHeaders GetBucketACL where
         toHeaders = const mempty
@@ -93,11 +92,12 @@
 
 -- | /See:/ 'getBucketACLResponse' smart constructor.
 data GetBucketACLResponse = GetBucketACLResponse'
-    { _gbarsGrants         :: !(Maybe [Grant])
-    , _gbarsOwner          :: !(Maybe Owner)
-    , _gbarsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gbarsGrants         :: !(Maybe [Grant])
+  , _gbarsOwner          :: !(Maybe Owner)
+  , _gbarsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetBucketACLResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -111,12 +111,13 @@
     :: Int -- ^ 'gbarsResponseStatus'
     -> GetBucketACLResponse
 getBucketACLResponse pResponseStatus_ =
-    GetBucketACLResponse'
-    { _gbarsGrants = Nothing
-    , _gbarsOwner = Nothing
-    , _gbarsResponseStatus = pResponseStatus_
-    }
+  GetBucketACLResponse'
+  { _gbarsGrants = Nothing
+  , _gbarsOwner = Nothing
+  , _gbarsResponseStatus = pResponseStatus_
+  }
 
+
 -- | A list of grants.
 gbarsGrants :: Lens' GetBucketACLResponse [Grant]
 gbarsGrants = lens _gbarsGrants (\ s a -> s{_gbarsGrants = a}) . _Default . _Coerce;
@@ -129,4 +130,4 @@
 gbarsResponseStatus :: Lens' GetBucketACLResponse Int
 gbarsResponseStatus = lens _gbarsResponseStatus (\ s a -> s{_gbarsResponseStatus = a});
 
-instance NFData GetBucketACLResponse
+instance NFData GetBucketACLResponse where
diff --git a/gen/Network/AWS/S3/GetBucketAccelerateConfiguration.hs b/gen/Network/AWS/S3/GetBucketAccelerateConfiguration.hs
--- a/gen/Network/AWS/S3/GetBucketAccelerateConfiguration.hs
+++ b/gen/Network/AWS/S3/GetBucketAccelerateConfiguration.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.GetBucketAccelerateConfiguration
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -35,18 +35,19 @@
     , grsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'getBucketAccelerateConfiguration' smart constructor.
 newtype GetBucketAccelerateConfiguration = GetBucketAccelerateConfiguration'
-    { _gbacBucket :: BucketName
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gbacBucket :: BucketName
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetBucketAccelerateConfiguration' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -56,10 +57,9 @@
     :: BucketName -- ^ 'gbacBucket'
     -> GetBucketAccelerateConfiguration
 getBucketAccelerateConfiguration pBucket_ =
-    GetBucketAccelerateConfiguration'
-    { _gbacBucket = pBucket_
-    }
+  GetBucketAccelerateConfiguration' {_gbacBucket = pBucket_}
 
+
 -- | Name of the bucket for which the accelerate configuration is retrieved.
 gbacBucket :: Lens' GetBucketAccelerateConfiguration BucketName
 gbacBucket = lens _gbacBucket (\ s a -> s{_gbacBucket = a});
@@ -76,8 +76,10 @@
                    (x .@? "Status") <*> (pure (fromEnum s)))
 
 instance Hashable GetBucketAccelerateConfiguration
+         where
 
 instance NFData GetBucketAccelerateConfiguration
+         where
 
 instance ToHeaders GetBucketAccelerateConfiguration
          where
@@ -94,10 +96,11 @@
 
 -- | /See:/ 'getBucketAccelerateConfigurationResponse' smart constructor.
 data GetBucketAccelerateConfigurationResponse = GetBucketAccelerateConfigurationResponse'
-    { _grsStatus         :: !(Maybe BucketAccelerateStatus)
-    , _grsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _grsStatus         :: !(Maybe BucketAccelerateStatus)
+  , _grsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetBucketAccelerateConfigurationResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -109,11 +112,10 @@
     :: Int -- ^ 'grsResponseStatus'
     -> GetBucketAccelerateConfigurationResponse
 getBucketAccelerateConfigurationResponse pResponseStatus_ =
-    GetBucketAccelerateConfigurationResponse'
-    { _grsStatus = Nothing
-    , _grsResponseStatus = pResponseStatus_
-    }
+  GetBucketAccelerateConfigurationResponse'
+  {_grsStatus = Nothing, _grsResponseStatus = pResponseStatus_}
 
+
 -- | The accelerate configuration of the bucket.
 grsStatus :: Lens' GetBucketAccelerateConfigurationResponse (Maybe BucketAccelerateStatus)
 grsStatus = lens _grsStatus (\ s a -> s{_grsStatus = a});
@@ -123,4 +125,5 @@
 grsResponseStatus = lens _grsResponseStatus (\ s a -> s{_grsResponseStatus = a});
 
 instance NFData
-         GetBucketAccelerateConfigurationResponse
+           GetBucketAccelerateConfigurationResponse
+         where
diff --git a/gen/Network/AWS/S3/GetBucketAnalyticsConfiguration.hs b/gen/Network/AWS/S3/GetBucketAnalyticsConfiguration.hs
--- a/gen/Network/AWS/S3/GetBucketAnalyticsConfiguration.hs
+++ b/gen/Network/AWS/S3/GetBucketAnalyticsConfiguration.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.GetBucketAnalyticsConfiguration
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -36,19 +36,20 @@
     , gbacrsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'getBucketAnalyticsConfiguration' smart constructor.
 data GetBucketAnalyticsConfiguration = GetBucketAnalyticsConfiguration'
-    { _getBucket :: !BucketName
-    , _getId     :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _getBucket :: !BucketName
+  , _getId     :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetBucketAnalyticsConfiguration' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -61,11 +62,9 @@
     -> Text -- ^ 'getId'
     -> GetBucketAnalyticsConfiguration
 getBucketAnalyticsConfiguration pBucket_ pId_ =
-    GetBucketAnalyticsConfiguration'
-    { _getBucket = pBucket_
-    , _getId = pId_
-    }
+  GetBucketAnalyticsConfiguration' {_getBucket = pBucket_, _getId = pId_}
 
+
 -- | The name of the bucket from which an analytics configuration is retrieved.
 getBucket :: Lens' GetBucketAnalyticsConfiguration BucketName
 getBucket = lens _getBucket (\ s a -> s{_getBucket = a});
@@ -86,8 +85,9 @@
                    (parseXML x) <*> (pure (fromEnum s)))
 
 instance Hashable GetBucketAnalyticsConfiguration
+         where
 
-instance NFData GetBucketAnalyticsConfiguration
+instance NFData GetBucketAnalyticsConfiguration where
 
 instance ToHeaders GetBucketAnalyticsConfiguration
          where
@@ -104,10 +104,11 @@
 
 -- | /See:/ 'getBucketAnalyticsConfigurationResponse' smart constructor.
 data GetBucketAnalyticsConfigurationResponse = GetBucketAnalyticsConfigurationResponse'
-    { _gbacrsAnalyticsConfiguration :: !(Maybe AnalyticsConfiguration)
-    , _gbacrsResponseStatus         :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gbacrsAnalyticsConfiguration :: !(Maybe AnalyticsConfiguration)
+  , _gbacrsResponseStatus         :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetBucketAnalyticsConfigurationResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -119,11 +120,12 @@
     :: Int -- ^ 'gbacrsResponseStatus'
     -> GetBucketAnalyticsConfigurationResponse
 getBucketAnalyticsConfigurationResponse pResponseStatus_ =
-    GetBucketAnalyticsConfigurationResponse'
-    { _gbacrsAnalyticsConfiguration = Nothing
-    , _gbacrsResponseStatus = pResponseStatus_
-    }
+  GetBucketAnalyticsConfigurationResponse'
+  { _gbacrsAnalyticsConfiguration = Nothing
+  , _gbacrsResponseStatus = pResponseStatus_
+  }
 
+
 -- | The configuration and any analyses for the analytics filter.
 gbacrsAnalyticsConfiguration :: Lens' GetBucketAnalyticsConfigurationResponse (Maybe AnalyticsConfiguration)
 gbacrsAnalyticsConfiguration = lens _gbacrsAnalyticsConfiguration (\ s a -> s{_gbacrsAnalyticsConfiguration = a});
@@ -133,4 +135,5 @@
 gbacrsResponseStatus = lens _gbacrsResponseStatus (\ s a -> s{_gbacrsResponseStatus = a});
 
 instance NFData
-         GetBucketAnalyticsConfigurationResponse
+           GetBucketAnalyticsConfigurationResponse
+         where
diff --git a/gen/Network/AWS/S3/GetBucketCORS.hs b/gen/Network/AWS/S3/GetBucketCORS.hs
--- a/gen/Network/AWS/S3/GetBucketCORS.hs
+++ b/gen/Network/AWS/S3/GetBucketCORS.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.GetBucketCORS
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -35,18 +35,19 @@
     , gbcrsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'getBucketCORS' smart constructor.
 newtype GetBucketCORS = GetBucketCORS'
-    { _gbcBucket :: BucketName
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gbcBucket :: BucketName
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetBucketCORS' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -55,11 +56,9 @@
 getBucketCORS
     :: BucketName -- ^ 'gbcBucket'
     -> GetBucketCORS
-getBucketCORS pBucket_ =
-    GetBucketCORS'
-    { _gbcBucket = pBucket_
-    }
+getBucketCORS pBucket_ = GetBucketCORS' {_gbcBucket = pBucket_}
 
+
 -- | Undocumented member.
 gbcBucket :: Lens' GetBucketCORS BucketName
 gbcBucket = lens _gbcBucket (\ s a -> s{_gbcBucket = a});
@@ -74,9 +73,9 @@
                    (may (parseXMLList "CORSRule") x) <*>
                      (pure (fromEnum s)))
 
-instance Hashable GetBucketCORS
+instance Hashable GetBucketCORS where
 
-instance NFData GetBucketCORS
+instance NFData GetBucketCORS where
 
 instance ToHeaders GetBucketCORS where
         toHeaders = const mempty
@@ -90,10 +89,11 @@
 
 -- | /See:/ 'getBucketCORSResponse' smart constructor.
 data GetBucketCORSResponse = GetBucketCORSResponse'
-    { _gbcrsCORSRules      :: !(Maybe [CORSRule])
-    , _gbcrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gbcrsCORSRules      :: !(Maybe [CORSRule])
+  , _gbcrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetBucketCORSResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -105,11 +105,10 @@
     :: Int -- ^ 'gbcrsResponseStatus'
     -> GetBucketCORSResponse
 getBucketCORSResponse pResponseStatus_ =
-    GetBucketCORSResponse'
-    { _gbcrsCORSRules = Nothing
-    , _gbcrsResponseStatus = pResponseStatus_
-    }
+  GetBucketCORSResponse'
+  {_gbcrsCORSRules = Nothing, _gbcrsResponseStatus = pResponseStatus_}
 
+
 -- | Undocumented member.
 gbcrsCORSRules :: Lens' GetBucketCORSResponse [CORSRule]
 gbcrsCORSRules = lens _gbcrsCORSRules (\ s a -> s{_gbcrsCORSRules = a}) . _Default . _Coerce;
@@ -118,4 +117,4 @@
 gbcrsResponseStatus :: Lens' GetBucketCORSResponse Int
 gbcrsResponseStatus = lens _gbcrsResponseStatus (\ s a -> s{_gbcrsResponseStatus = a});
 
-instance NFData GetBucketCORSResponse
+instance NFData GetBucketCORSResponse where
diff --git a/gen/Network/AWS/S3/GetBucketEncryption.hs b/gen/Network/AWS/S3/GetBucketEncryption.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/S3/GetBucketEncryption.hs
@@ -0,0 +1,122 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.S3.GetBucketEncryption
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the server-side encryption configuration of a bucket.
+module Network.AWS.S3.GetBucketEncryption
+    (
+    -- * Creating a Request
+      getBucketEncryption
+    , GetBucketEncryption
+    -- * Request Lenses
+    , gbeBucket
+
+    -- * Destructuring the Response
+    , getBucketEncryptionResponse
+    , GetBucketEncryptionResponse
+    -- * Response Lenses
+    , gbersServerSideEncryptionConfiguration
+    , gbersResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
+
+-- | /See:/ 'getBucketEncryption' smart constructor.
+newtype GetBucketEncryption = GetBucketEncryption'
+  { _gbeBucket :: BucketName
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetBucketEncryption' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gbeBucket' - The name of the bucket from which the server-side encryption configuration is retrieved.
+getBucketEncryption
+    :: BucketName -- ^ 'gbeBucket'
+    -> GetBucketEncryption
+getBucketEncryption pBucket_ = GetBucketEncryption' {_gbeBucket = pBucket_}
+
+
+-- | The name of the bucket from which the server-side encryption configuration is retrieved.
+gbeBucket :: Lens' GetBucketEncryption BucketName
+gbeBucket = lens _gbeBucket (\ s a -> s{_gbeBucket = a});
+
+instance AWSRequest GetBucketEncryption where
+        type Rs GetBucketEncryption =
+             GetBucketEncryptionResponse
+        request = get s3
+        response
+          = receiveXML
+              (\ s h x ->
+                 GetBucketEncryptionResponse' <$>
+                   (parseXML x) <*> (pure (fromEnum s)))
+
+instance Hashable GetBucketEncryption where
+
+instance NFData GetBucketEncryption where
+
+instance ToHeaders GetBucketEncryption where
+        toHeaders = const mempty
+
+instance ToPath GetBucketEncryption where
+        toPath GetBucketEncryption'{..}
+          = mconcat ["/", toBS _gbeBucket]
+
+instance ToQuery GetBucketEncryption where
+        toQuery = const (mconcat ["encryption"])
+
+-- | /See:/ 'getBucketEncryptionResponse' smart constructor.
+data GetBucketEncryptionResponse = GetBucketEncryptionResponse'
+  { _gbersServerSideEncryptionConfiguration :: !(Maybe ServerSideEncryptionConfiguration)
+  , _gbersResponseStatus :: !Int
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetBucketEncryptionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gbersServerSideEncryptionConfiguration' - Undocumented member.
+--
+-- * 'gbersResponseStatus' - -- | The response status code.
+getBucketEncryptionResponse
+    :: Int -- ^ 'gbersResponseStatus'
+    -> GetBucketEncryptionResponse
+getBucketEncryptionResponse pResponseStatus_ =
+  GetBucketEncryptionResponse'
+  { _gbersServerSideEncryptionConfiguration = Nothing
+  , _gbersResponseStatus = pResponseStatus_
+  }
+
+
+-- | Undocumented member.
+gbersServerSideEncryptionConfiguration :: Lens' GetBucketEncryptionResponse (Maybe ServerSideEncryptionConfiguration)
+gbersServerSideEncryptionConfiguration = lens _gbersServerSideEncryptionConfiguration (\ s a -> s{_gbersServerSideEncryptionConfiguration = a});
+
+-- | -- | The response status code.
+gbersResponseStatus :: Lens' GetBucketEncryptionResponse Int
+gbersResponseStatus = lens _gbersResponseStatus (\ s a -> s{_gbersResponseStatus = a});
+
+instance NFData GetBucketEncryptionResponse where
diff --git a/gen/Network/AWS/S3/GetBucketInventoryConfiguration.hs b/gen/Network/AWS/S3/GetBucketInventoryConfiguration.hs
--- a/gen/Network/AWS/S3/GetBucketInventoryConfiguration.hs
+++ b/gen/Network/AWS/S3/GetBucketInventoryConfiguration.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.GetBucketInventoryConfiguration
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -36,19 +36,20 @@
     , gbicrsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'getBucketInventoryConfiguration' smart constructor.
 data GetBucketInventoryConfiguration = GetBucketInventoryConfiguration'
-    { _gbicBucket :: !BucketName
-    , _gbicId     :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gbicBucket :: !BucketName
+  , _gbicId     :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetBucketInventoryConfiguration' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -61,11 +62,9 @@
     -> Text -- ^ 'gbicId'
     -> GetBucketInventoryConfiguration
 getBucketInventoryConfiguration pBucket_ pId_ =
-    GetBucketInventoryConfiguration'
-    { _gbicBucket = pBucket_
-    , _gbicId = pId_
-    }
+  GetBucketInventoryConfiguration' {_gbicBucket = pBucket_, _gbicId = pId_}
 
+
 -- | The name of the bucket containing the inventory configuration to retrieve.
 gbicBucket :: Lens' GetBucketInventoryConfiguration BucketName
 gbicBucket = lens _gbicBucket (\ s a -> s{_gbicBucket = a});
@@ -86,8 +85,9 @@
                    (parseXML x) <*> (pure (fromEnum s)))
 
 instance Hashable GetBucketInventoryConfiguration
+         where
 
-instance NFData GetBucketInventoryConfiguration
+instance NFData GetBucketInventoryConfiguration where
 
 instance ToHeaders GetBucketInventoryConfiguration
          where
@@ -104,10 +104,11 @@
 
 -- | /See:/ 'getBucketInventoryConfigurationResponse' smart constructor.
 data GetBucketInventoryConfigurationResponse = GetBucketInventoryConfigurationResponse'
-    { _gbicrsInventoryConfiguration :: !(Maybe InventoryConfiguration)
-    , _gbicrsResponseStatus         :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gbicrsInventoryConfiguration :: !(Maybe InventoryConfiguration)
+  , _gbicrsResponseStatus         :: !Int
+  } deriving (Eq, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetBucketInventoryConfigurationResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -119,11 +120,12 @@
     :: Int -- ^ 'gbicrsResponseStatus'
     -> GetBucketInventoryConfigurationResponse
 getBucketInventoryConfigurationResponse pResponseStatus_ =
-    GetBucketInventoryConfigurationResponse'
-    { _gbicrsInventoryConfiguration = Nothing
-    , _gbicrsResponseStatus = pResponseStatus_
-    }
+  GetBucketInventoryConfigurationResponse'
+  { _gbicrsInventoryConfiguration = Nothing
+  , _gbicrsResponseStatus = pResponseStatus_
+  }
 
+
 -- | Specifies the inventory configuration.
 gbicrsInventoryConfiguration :: Lens' GetBucketInventoryConfigurationResponse (Maybe InventoryConfiguration)
 gbicrsInventoryConfiguration = lens _gbicrsInventoryConfiguration (\ s a -> s{_gbicrsInventoryConfiguration = a});
@@ -133,4 +135,5 @@
 gbicrsResponseStatus = lens _gbicrsResponseStatus (\ s a -> s{_gbicrsResponseStatus = a});
 
 instance NFData
-         GetBucketInventoryConfigurationResponse
+           GetBucketInventoryConfigurationResponse
+         where
diff --git a/gen/Network/AWS/S3/GetBucketLifecycleConfiguration.hs b/gen/Network/AWS/S3/GetBucketLifecycleConfiguration.hs
--- a/gen/Network/AWS/S3/GetBucketLifecycleConfiguration.hs
+++ b/gen/Network/AWS/S3/GetBucketLifecycleConfiguration.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.GetBucketLifecycleConfiguration
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -35,18 +35,19 @@
     , gblcrsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'getBucketLifecycleConfiguration' smart constructor.
 newtype GetBucketLifecycleConfiguration = GetBucketLifecycleConfiguration'
-    { _gblcBucket :: BucketName
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gblcBucket :: BucketName
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetBucketLifecycleConfiguration' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -56,10 +57,9 @@
     :: BucketName -- ^ 'gblcBucket'
     -> GetBucketLifecycleConfiguration
 getBucketLifecycleConfiguration pBucket_ =
-    GetBucketLifecycleConfiguration'
-    { _gblcBucket = pBucket_
-    }
+  GetBucketLifecycleConfiguration' {_gblcBucket = pBucket_}
 
+
 -- | Undocumented member.
 gblcBucket :: Lens' GetBucketLifecycleConfiguration BucketName
 gblcBucket = lens _gblcBucket (\ s a -> s{_gblcBucket = a});
@@ -77,8 +77,9 @@
                      (pure (fromEnum s)))
 
 instance Hashable GetBucketLifecycleConfiguration
+         where
 
-instance NFData GetBucketLifecycleConfiguration
+instance NFData GetBucketLifecycleConfiguration where
 
 instance ToHeaders GetBucketLifecycleConfiguration
          where
@@ -94,10 +95,11 @@
 
 -- | /See:/ 'getBucketLifecycleConfigurationResponse' smart constructor.
 data GetBucketLifecycleConfigurationResponse = GetBucketLifecycleConfigurationResponse'
-    { _gblcrsRules          :: !(Maybe [LifecycleRule])
-    , _gblcrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gblcrsRules          :: !(Maybe [LifecycleRule])
+  , _gblcrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetBucketLifecycleConfigurationResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -109,11 +111,10 @@
     :: Int -- ^ 'gblcrsResponseStatus'
     -> GetBucketLifecycleConfigurationResponse
 getBucketLifecycleConfigurationResponse pResponseStatus_ =
-    GetBucketLifecycleConfigurationResponse'
-    { _gblcrsRules = Nothing
-    , _gblcrsResponseStatus = pResponseStatus_
-    }
+  GetBucketLifecycleConfigurationResponse'
+  {_gblcrsRules = Nothing, _gblcrsResponseStatus = pResponseStatus_}
 
+
 -- | Undocumented member.
 gblcrsRules :: Lens' GetBucketLifecycleConfigurationResponse [LifecycleRule]
 gblcrsRules = lens _gblcrsRules (\ s a -> s{_gblcrsRules = a}) . _Default . _Coerce;
@@ -123,4 +124,5 @@
 gblcrsResponseStatus = lens _gblcrsResponseStatus (\ s a -> s{_gblcrsResponseStatus = a});
 
 instance NFData
-         GetBucketLifecycleConfigurationResponse
+           GetBucketLifecycleConfigurationResponse
+         where
diff --git a/gen/Network/AWS/S3/GetBucketLocation.hs b/gen/Network/AWS/S3/GetBucketLocation.hs
--- a/gen/Network/AWS/S3/GetBucketLocation.hs
+++ b/gen/Network/AWS/S3/GetBucketLocation.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.GetBucketLocation
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -35,18 +35,19 @@
     , gblbrsLocationConstraint
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'getBucketLocation' smart constructor.
 newtype GetBucketLocation = GetBucketLocation'
-    { _gblBucket :: BucketName
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gblBucket :: BucketName
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetBucketLocation' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -55,11 +56,9 @@
 getBucketLocation
     :: BucketName -- ^ 'gblBucket'
     -> GetBucketLocation
-getBucketLocation pBucket_ =
-    GetBucketLocation'
-    { _gblBucket = pBucket_
-    }
+getBucketLocation pBucket_ = GetBucketLocation' {_gblBucket = pBucket_}
 
+
 -- | Undocumented member.
 gblBucket :: Lens' GetBucketLocation BucketName
 gblBucket = lens _gblBucket (\ s a -> s{_gblBucket = a});
@@ -73,9 +72,9 @@
                  GetBucketLocationResponse' <$>
                    (pure (fromEnum s)) <*> (parseXML x))
 
-instance Hashable GetBucketLocation
+instance Hashable GetBucketLocation where
 
-instance NFData GetBucketLocation
+instance NFData GetBucketLocation where
 
 instance ToHeaders GetBucketLocation where
         toHeaders = const mempty
@@ -89,10 +88,11 @@
 
 -- | /See:/ 'getBucketLocationResponse' smart constructor.
 data GetBucketLocationResponse = GetBucketLocationResponse'
-    { _gblbrsResponseStatus     :: !Int
-    , _gblbrsLocationConstraint :: !LocationConstraint
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gblbrsResponseStatus     :: !Int
+  , _gblbrsLocationConstraint :: !LocationConstraint
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetBucketLocationResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -105,11 +105,12 @@
     -> LocationConstraint -- ^ 'gblbrsLocationConstraint'
     -> GetBucketLocationResponse
 getBucketLocationResponse pResponseStatus_ pLocationConstraint_ =
-    GetBucketLocationResponse'
-    { _gblbrsResponseStatus = pResponseStatus_
-    , _gblbrsLocationConstraint = pLocationConstraint_
-    }
+  GetBucketLocationResponse'
+  { _gblbrsResponseStatus = pResponseStatus_
+  , _gblbrsLocationConstraint = pLocationConstraint_
+  }
 
+
 -- | -- | The response status code.
 gblbrsResponseStatus :: Lens' GetBucketLocationResponse Int
 gblbrsResponseStatus = lens _gblbrsResponseStatus (\ s a -> s{_gblbrsResponseStatus = a});
@@ -118,4 +119,4 @@
 gblbrsLocationConstraint :: Lens' GetBucketLocationResponse LocationConstraint
 gblbrsLocationConstraint = lens _gblbrsLocationConstraint (\ s a -> s{_gblbrsLocationConstraint = a});
 
-instance NFData GetBucketLocationResponse
+instance NFData GetBucketLocationResponse where
diff --git a/gen/Network/AWS/S3/GetBucketLogging.hs b/gen/Network/AWS/S3/GetBucketLogging.hs
--- a/gen/Network/AWS/S3/GetBucketLogging.hs
+++ b/gen/Network/AWS/S3/GetBucketLogging.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.GetBucketLogging
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -35,18 +35,19 @@
     , gblrsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'getBucketLogging' smart constructor.
 newtype GetBucketLogging = GetBucketLogging'
-    { _gBucket :: BucketName
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gBucket :: BucketName
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetBucketLogging' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -55,11 +56,9 @@
 getBucketLogging
     :: BucketName -- ^ 'gBucket'
     -> GetBucketLogging
-getBucketLogging pBucket_ =
-    GetBucketLogging'
-    { _gBucket = pBucket_
-    }
+getBucketLogging pBucket_ = GetBucketLogging' {_gBucket = pBucket_}
 
+
 -- | Undocumented member.
 gBucket :: Lens' GetBucketLogging BucketName
 gBucket = lens _gBucket (\ s a -> s{_gBucket = a});
@@ -73,9 +72,9 @@
                  GetBucketLoggingResponse' <$>
                    (x .@? "LoggingEnabled") <*> (pure (fromEnum s)))
 
-instance Hashable GetBucketLogging
+instance Hashable GetBucketLogging where
 
-instance NFData GetBucketLogging
+instance NFData GetBucketLogging where
 
 instance ToHeaders GetBucketLogging where
         toHeaders = const mempty
@@ -89,10 +88,11 @@
 
 -- | /See:/ 'getBucketLoggingResponse' smart constructor.
 data GetBucketLoggingResponse = GetBucketLoggingResponse'
-    { _gblrsLoggingEnabled :: !(Maybe LoggingEnabled)
-    , _gblrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gblrsLoggingEnabled :: !(Maybe LoggingEnabled)
+  , _gblrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetBucketLoggingResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -104,11 +104,10 @@
     :: Int -- ^ 'gblrsResponseStatus'
     -> GetBucketLoggingResponse
 getBucketLoggingResponse pResponseStatus_ =
-    GetBucketLoggingResponse'
-    { _gblrsLoggingEnabled = Nothing
-    , _gblrsResponseStatus = pResponseStatus_
-    }
+  GetBucketLoggingResponse'
+  {_gblrsLoggingEnabled = Nothing, _gblrsResponseStatus = pResponseStatus_}
 
+
 -- | Undocumented member.
 gblrsLoggingEnabled :: Lens' GetBucketLoggingResponse (Maybe LoggingEnabled)
 gblrsLoggingEnabled = lens _gblrsLoggingEnabled (\ s a -> s{_gblrsLoggingEnabled = a});
@@ -117,4 +116,4 @@
 gblrsResponseStatus :: Lens' GetBucketLoggingResponse Int
 gblrsResponseStatus = lens _gblrsResponseStatus (\ s a -> s{_gblrsResponseStatus = a});
 
-instance NFData GetBucketLoggingResponse
+instance NFData GetBucketLoggingResponse where
diff --git a/gen/Network/AWS/S3/GetBucketMetricsConfiguration.hs b/gen/Network/AWS/S3/GetBucketMetricsConfiguration.hs
--- a/gen/Network/AWS/S3/GetBucketMetricsConfiguration.hs
+++ b/gen/Network/AWS/S3/GetBucketMetricsConfiguration.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.GetBucketMetricsConfiguration
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -36,19 +36,20 @@
     , gbmcrsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'getBucketMetricsConfiguration' smart constructor.
 data GetBucketMetricsConfiguration = GetBucketMetricsConfiguration'
-    { _gbmcBucket :: !BucketName
-    , _gbmcId     :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gbmcBucket :: !BucketName
+  , _gbmcId     :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetBucketMetricsConfiguration' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -61,11 +62,9 @@
     -> Text -- ^ 'gbmcId'
     -> GetBucketMetricsConfiguration
 getBucketMetricsConfiguration pBucket_ pId_ =
-    GetBucketMetricsConfiguration'
-    { _gbmcBucket = pBucket_
-    , _gbmcId = pId_
-    }
+  GetBucketMetricsConfiguration' {_gbmcBucket = pBucket_, _gbmcId = pId_}
 
+
 -- | The name of the bucket containing the metrics configuration to retrieve.
 gbmcBucket :: Lens' GetBucketMetricsConfiguration BucketName
 gbmcBucket = lens _gbmcBucket (\ s a -> s{_gbmcBucket = a});
@@ -85,9 +84,9 @@
                  GetBucketMetricsConfigurationResponse' <$>
                    (parseXML x) <*> (pure (fromEnum s)))
 
-instance Hashable GetBucketMetricsConfiguration
+instance Hashable GetBucketMetricsConfiguration where
 
-instance NFData GetBucketMetricsConfiguration
+instance NFData GetBucketMetricsConfiguration where
 
 instance ToHeaders GetBucketMetricsConfiguration
          where
@@ -103,10 +102,11 @@
 
 -- | /See:/ 'getBucketMetricsConfigurationResponse' smart constructor.
 data GetBucketMetricsConfigurationResponse = GetBucketMetricsConfigurationResponse'
-    { _gbmcrsMetricsConfiguration :: !(Maybe MetricsConfiguration)
-    , _gbmcrsResponseStatus       :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gbmcrsMetricsConfiguration :: !(Maybe MetricsConfiguration)
+  , _gbmcrsResponseStatus       :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetBucketMetricsConfigurationResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -118,11 +118,12 @@
     :: Int -- ^ 'gbmcrsResponseStatus'
     -> GetBucketMetricsConfigurationResponse
 getBucketMetricsConfigurationResponse pResponseStatus_ =
-    GetBucketMetricsConfigurationResponse'
-    { _gbmcrsMetricsConfiguration = Nothing
-    , _gbmcrsResponseStatus = pResponseStatus_
-    }
+  GetBucketMetricsConfigurationResponse'
+  { _gbmcrsMetricsConfiguration = Nothing
+  , _gbmcrsResponseStatus = pResponseStatus_
+  }
 
+
 -- | Specifies the metrics configuration.
 gbmcrsMetricsConfiguration :: Lens' GetBucketMetricsConfigurationResponse (Maybe MetricsConfiguration)
 gbmcrsMetricsConfiguration = lens _gbmcrsMetricsConfiguration (\ s a -> s{_gbmcrsMetricsConfiguration = a});
@@ -132,3 +133,4 @@
 gbmcrsResponseStatus = lens _gbmcrsResponseStatus (\ s a -> s{_gbmcrsResponseStatus = a});
 
 instance NFData GetBucketMetricsConfigurationResponse
+         where
diff --git a/gen/Network/AWS/S3/GetBucketNotificationConfiguration.hs b/gen/Network/AWS/S3/GetBucketNotificationConfiguration.hs
--- a/gen/Network/AWS/S3/GetBucketNotificationConfiguration.hs
+++ b/gen/Network/AWS/S3/GetBucketNotificationConfiguration.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.GetBucketNotificationConfiguration
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -36,18 +36,19 @@
     , ncLambdaFunctionConfigurations
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'getBucketNotificationConfiguration' smart constructor.
 newtype GetBucketNotificationConfiguration = GetBucketNotificationConfiguration'
-    { _gbncBucket :: BucketName
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gbncBucket :: BucketName
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetBucketNotificationConfiguration' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -57,24 +58,26 @@
     :: BucketName -- ^ 'gbncBucket'
     -> GetBucketNotificationConfiguration
 getBucketNotificationConfiguration pBucket_ =
-    GetBucketNotificationConfiguration'
-    { _gbncBucket = pBucket_
-    }
+  GetBucketNotificationConfiguration' {_gbncBucket = pBucket_}
 
+
 -- | Name of the bucket to get the notification configuration for.
 gbncBucket :: Lens' GetBucketNotificationConfiguration BucketName
 gbncBucket = lens _gbncBucket (\ s a -> s{_gbncBucket = a});
 
 instance AWSRequest
-         GetBucketNotificationConfiguration where
+           GetBucketNotificationConfiguration
+         where
         type Rs GetBucketNotificationConfiguration =
              NotificationConfiguration
         request = get s3
         response = receiveXML (\ s h x -> parseXML x)
 
 instance Hashable GetBucketNotificationConfiguration
+         where
 
 instance NFData GetBucketNotificationConfiguration
+         where
 
 instance ToHeaders GetBucketNotificationConfiguration
          where
diff --git a/gen/Network/AWS/S3/GetBucketPolicy.hs b/gen/Network/AWS/S3/GetBucketPolicy.hs
--- a/gen/Network/AWS/S3/GetBucketPolicy.hs
+++ b/gen/Network/AWS/S3/GetBucketPolicy.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.GetBucketPolicy
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -35,18 +35,19 @@
     , gbprsPolicy
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'getBucketPolicy' smart constructor.
 newtype GetBucketPolicy = GetBucketPolicy'
-    { _gbpBucket :: BucketName
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gbpBucket :: BucketName
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetBucketPolicy' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -55,11 +56,9 @@
 getBucketPolicy
     :: BucketName -- ^ 'gbpBucket'
     -> GetBucketPolicy
-getBucketPolicy pBucket_ =
-    GetBucketPolicy'
-    { _gbpBucket = pBucket_
-    }
+getBucketPolicy pBucket_ = GetBucketPolicy' {_gbpBucket = pBucket_}
 
+
 -- | Undocumented member.
 gbpBucket :: Lens' GetBucketPolicy BucketName
 gbpBucket = lens _gbpBucket (\ s a -> s{_gbpBucket = a});
@@ -73,9 +72,9 @@
                  GetBucketPolicyResponse' <$>
                    (pure (fromEnum s)) <*> (pure x))
 
-instance Hashable GetBucketPolicy
+instance Hashable GetBucketPolicy where
 
-instance NFData GetBucketPolicy
+instance NFData GetBucketPolicy where
 
 instance ToHeaders GetBucketPolicy where
         toHeaders = const mempty
@@ -89,10 +88,11 @@
 
 -- | /See:/ 'getBucketPolicyResponse' smart constructor.
 data GetBucketPolicyResponse = GetBucketPolicyResponse'
-    { _gbprsResponseStatus :: !Int
-    , _gbprsPolicy         :: !(HashMap Text Value)
-    } deriving (Eq,Show,Data,Typeable,Generic)
+  { _gbprsResponseStatus :: !Int
+  , _gbprsPolicy         :: !(HashMap Text Value)
+  } deriving (Eq, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetBucketPolicyResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -105,11 +105,10 @@
     -> HashMap Text Value -- ^ 'gbprsPolicy'
     -> GetBucketPolicyResponse
 getBucketPolicyResponse pResponseStatus_ pPolicy_ =
-    GetBucketPolicyResponse'
-    { _gbprsResponseStatus = pResponseStatus_
-    , _gbprsPolicy = pPolicy_
-    }
+  GetBucketPolicyResponse'
+  {_gbprsResponseStatus = pResponseStatus_, _gbprsPolicy = pPolicy_}
 
+
 -- | -- | The response status code.
 gbprsResponseStatus :: Lens' GetBucketPolicyResponse Int
 gbprsResponseStatus = lens _gbprsResponseStatus (\ s a -> s{_gbprsResponseStatus = a});
@@ -118,4 +117,4 @@
 gbprsPolicy :: Lens' GetBucketPolicyResponse (HashMap Text Value)
 gbprsPolicy = lens _gbprsPolicy (\ s a -> s{_gbprsPolicy = a});
 
-instance NFData GetBucketPolicyResponse
+instance NFData GetBucketPolicyResponse where
diff --git a/gen/Network/AWS/S3/GetBucketReplication.hs b/gen/Network/AWS/S3/GetBucketReplication.hs
--- a/gen/Network/AWS/S3/GetBucketReplication.hs
+++ b/gen/Network/AWS/S3/GetBucketReplication.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.GetBucketReplication
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -35,18 +35,19 @@
     , gbrrsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'getBucketReplication' smart constructor.
 newtype GetBucketReplication = GetBucketReplication'
-    { _gbrBucket :: BucketName
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gbrBucket :: BucketName
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetBucketReplication' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -55,11 +56,9 @@
 getBucketReplication
     :: BucketName -- ^ 'gbrBucket'
     -> GetBucketReplication
-getBucketReplication pBucket_ =
-    GetBucketReplication'
-    { _gbrBucket = pBucket_
-    }
+getBucketReplication pBucket_ = GetBucketReplication' {_gbrBucket = pBucket_}
 
+
 -- | Undocumented member.
 gbrBucket :: Lens' GetBucketReplication BucketName
 gbrBucket = lens _gbrBucket (\ s a -> s{_gbrBucket = a});
@@ -74,9 +73,9 @@
                  GetBucketReplicationResponse' <$>
                    (parseXML x) <*> (pure (fromEnum s)))
 
-instance Hashable GetBucketReplication
+instance Hashable GetBucketReplication where
 
-instance NFData GetBucketReplication
+instance NFData GetBucketReplication where
 
 instance ToHeaders GetBucketReplication where
         toHeaders = const mempty
@@ -90,10 +89,11 @@
 
 -- | /See:/ 'getBucketReplicationResponse' smart constructor.
 data GetBucketReplicationResponse = GetBucketReplicationResponse'
-    { _gbrrsReplicationConfiguration :: !(Maybe ReplicationConfiguration)
-    , _gbrrsResponseStatus           :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gbrrsReplicationConfiguration :: !(Maybe ReplicationConfiguration)
+  , _gbrrsResponseStatus           :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetBucketReplicationResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -105,11 +105,12 @@
     :: Int -- ^ 'gbrrsResponseStatus'
     -> GetBucketReplicationResponse
 getBucketReplicationResponse pResponseStatus_ =
-    GetBucketReplicationResponse'
-    { _gbrrsReplicationConfiguration = Nothing
-    , _gbrrsResponseStatus = pResponseStatus_
-    }
+  GetBucketReplicationResponse'
+  { _gbrrsReplicationConfiguration = Nothing
+  , _gbrrsResponseStatus = pResponseStatus_
+  }
 
+
 -- | Undocumented member.
 gbrrsReplicationConfiguration :: Lens' GetBucketReplicationResponse (Maybe ReplicationConfiguration)
 gbrrsReplicationConfiguration = lens _gbrrsReplicationConfiguration (\ s a -> s{_gbrrsReplicationConfiguration = a});
@@ -118,4 +119,4 @@
 gbrrsResponseStatus :: Lens' GetBucketReplicationResponse Int
 gbrrsResponseStatus = lens _gbrrsResponseStatus (\ s a -> s{_gbrrsResponseStatus = a});
 
-instance NFData GetBucketReplicationResponse
+instance NFData GetBucketReplicationResponse where
diff --git a/gen/Network/AWS/S3/GetBucketRequestPayment.hs b/gen/Network/AWS/S3/GetBucketRequestPayment.hs
--- a/gen/Network/AWS/S3/GetBucketRequestPayment.hs
+++ b/gen/Network/AWS/S3/GetBucketRequestPayment.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.GetBucketRequestPayment
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -35,18 +35,19 @@
     , gbrprsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'getBucketRequestPayment' smart constructor.
 newtype GetBucketRequestPayment = GetBucketRequestPayment'
-    { _gbrpBucket :: BucketName
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gbrpBucket :: BucketName
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetBucketRequestPayment' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -56,10 +57,9 @@
     :: BucketName -- ^ 'gbrpBucket'
     -> GetBucketRequestPayment
 getBucketRequestPayment pBucket_ =
-    GetBucketRequestPayment'
-    { _gbrpBucket = pBucket_
-    }
+  GetBucketRequestPayment' {_gbrpBucket = pBucket_}
 
+
 -- | Undocumented member.
 gbrpBucket :: Lens' GetBucketRequestPayment BucketName
 gbrpBucket = lens _gbrpBucket (\ s a -> s{_gbrpBucket = a});
@@ -74,9 +74,9 @@
                  GetBucketRequestPaymentResponse' <$>
                    (x .@? "Payer") <*> (pure (fromEnum s)))
 
-instance Hashable GetBucketRequestPayment
+instance Hashable GetBucketRequestPayment where
 
-instance NFData GetBucketRequestPayment
+instance NFData GetBucketRequestPayment where
 
 instance ToHeaders GetBucketRequestPayment where
         toHeaders = const mempty
@@ -90,10 +90,11 @@
 
 -- | /See:/ 'getBucketRequestPaymentResponse' smart constructor.
 data GetBucketRequestPaymentResponse = GetBucketRequestPaymentResponse'
-    { _gbrprsPayer          :: !(Maybe Payer)
-    , _gbrprsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gbrprsPayer          :: !(Maybe Payer)
+  , _gbrprsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetBucketRequestPaymentResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -105,11 +106,10 @@
     :: Int -- ^ 'gbrprsResponseStatus'
     -> GetBucketRequestPaymentResponse
 getBucketRequestPaymentResponse pResponseStatus_ =
-    GetBucketRequestPaymentResponse'
-    { _gbrprsPayer = Nothing
-    , _gbrprsResponseStatus = pResponseStatus_
-    }
+  GetBucketRequestPaymentResponse'
+  {_gbrprsPayer = Nothing, _gbrprsResponseStatus = pResponseStatus_}
 
+
 -- | Specifies who pays for the download and request fees.
 gbrprsPayer :: Lens' GetBucketRequestPaymentResponse (Maybe Payer)
 gbrprsPayer = lens _gbrprsPayer (\ s a -> s{_gbrprsPayer = a});
@@ -118,4 +118,4 @@
 gbrprsResponseStatus :: Lens' GetBucketRequestPaymentResponse Int
 gbrprsResponseStatus = lens _gbrprsResponseStatus (\ s a -> s{_gbrprsResponseStatus = a});
 
-instance NFData GetBucketRequestPaymentResponse
+instance NFData GetBucketRequestPaymentResponse where
diff --git a/gen/Network/AWS/S3/GetBucketTagging.hs b/gen/Network/AWS/S3/GetBucketTagging.hs
--- a/gen/Network/AWS/S3/GetBucketTagging.hs
+++ b/gen/Network/AWS/S3/GetBucketTagging.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.GetBucketTagging
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -35,18 +35,19 @@
     , gbtrsTagSet
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'getBucketTagging' smart constructor.
 newtype GetBucketTagging = GetBucketTagging'
-    { _gbtBucket :: BucketName
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gbtBucket :: BucketName
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetBucketTagging' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -55,11 +56,9 @@
 getBucketTagging
     :: BucketName -- ^ 'gbtBucket'
     -> GetBucketTagging
-getBucketTagging pBucket_ =
-    GetBucketTagging'
-    { _gbtBucket = pBucket_
-    }
+getBucketTagging pBucket_ = GetBucketTagging' {_gbtBucket = pBucket_}
 
+
 -- | Undocumented member.
 gbtBucket :: Lens' GetBucketTagging BucketName
 gbtBucket = lens _gbtBucket (\ s a -> s{_gbtBucket = a});
@@ -74,9 +73,9 @@
                    (pure (fromEnum s)) <*>
                      (x .@? "TagSet" .!@ mempty >>= parseXMLList "Tag"))
 
-instance Hashable GetBucketTagging
+instance Hashable GetBucketTagging where
 
-instance NFData GetBucketTagging
+instance NFData GetBucketTagging where
 
 instance ToHeaders GetBucketTagging where
         toHeaders = const mempty
@@ -90,10 +89,11 @@
 
 -- | /See:/ 'getBucketTaggingResponse' smart constructor.
 data GetBucketTaggingResponse = GetBucketTaggingResponse'
-    { _gbtrsResponseStatus :: !Int
-    , _gbtrsTagSet         :: ![Tag]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gbtrsResponseStatus :: !Int
+  , _gbtrsTagSet         :: ![Tag]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetBucketTaggingResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -105,11 +105,10 @@
     :: Int -- ^ 'gbtrsResponseStatus'
     -> GetBucketTaggingResponse
 getBucketTaggingResponse pResponseStatus_ =
-    GetBucketTaggingResponse'
-    { _gbtrsResponseStatus = pResponseStatus_
-    , _gbtrsTagSet = mempty
-    }
+  GetBucketTaggingResponse'
+  {_gbtrsResponseStatus = pResponseStatus_, _gbtrsTagSet = mempty}
 
+
 -- | -- | The response status code.
 gbtrsResponseStatus :: Lens' GetBucketTaggingResponse Int
 gbtrsResponseStatus = lens _gbtrsResponseStatus (\ s a -> s{_gbtrsResponseStatus = a});
@@ -118,4 +117,4 @@
 gbtrsTagSet :: Lens' GetBucketTaggingResponse [Tag]
 gbtrsTagSet = lens _gbtrsTagSet (\ s a -> s{_gbtrsTagSet = a}) . _Coerce;
 
-instance NFData GetBucketTaggingResponse
+instance NFData GetBucketTaggingResponse where
diff --git a/gen/Network/AWS/S3/GetBucketVersioning.hs b/gen/Network/AWS/S3/GetBucketVersioning.hs
--- a/gen/Network/AWS/S3/GetBucketVersioning.hs
+++ b/gen/Network/AWS/S3/GetBucketVersioning.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.GetBucketVersioning
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -36,18 +36,19 @@
     , gbvrsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'getBucketVersioning' smart constructor.
 newtype GetBucketVersioning = GetBucketVersioning'
-    { _gbvBucket :: BucketName
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gbvBucket :: BucketName
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetBucketVersioning' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -56,11 +57,9 @@
 getBucketVersioning
     :: BucketName -- ^ 'gbvBucket'
     -> GetBucketVersioning
-getBucketVersioning pBucket_ =
-    GetBucketVersioning'
-    { _gbvBucket = pBucket_
-    }
+getBucketVersioning pBucket_ = GetBucketVersioning' {_gbvBucket = pBucket_}
 
+
 -- | Undocumented member.
 gbvBucket :: Lens' GetBucketVersioning BucketName
 gbvBucket = lens _gbvBucket (\ s a -> s{_gbvBucket = a});
@@ -76,9 +75,9 @@
                    (x .@? "Status") <*> (x .@? "MfaDelete") <*>
                      (pure (fromEnum s)))
 
-instance Hashable GetBucketVersioning
+instance Hashable GetBucketVersioning where
 
-instance NFData GetBucketVersioning
+instance NFData GetBucketVersioning where
 
 instance ToHeaders GetBucketVersioning where
         toHeaders = const mempty
@@ -92,11 +91,12 @@
 
 -- | /See:/ 'getBucketVersioningResponse' smart constructor.
 data GetBucketVersioningResponse = GetBucketVersioningResponse'
-    { _gbvrsStatus         :: !(Maybe BucketVersioningStatus)
-    , _gbvrsMFADelete      :: !(Maybe MFADeleteStatus)
-    , _gbvrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gbvrsStatus         :: !(Maybe BucketVersioningStatus)
+  , _gbvrsMFADelete      :: !(Maybe MFADeleteStatus)
+  , _gbvrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetBucketVersioningResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -110,12 +110,13 @@
     :: Int -- ^ 'gbvrsResponseStatus'
     -> GetBucketVersioningResponse
 getBucketVersioningResponse pResponseStatus_ =
-    GetBucketVersioningResponse'
-    { _gbvrsStatus = Nothing
-    , _gbvrsMFADelete = Nothing
-    , _gbvrsResponseStatus = pResponseStatus_
-    }
+  GetBucketVersioningResponse'
+  { _gbvrsStatus = Nothing
+  , _gbvrsMFADelete = Nothing
+  , _gbvrsResponseStatus = pResponseStatus_
+  }
 
+
 -- | The versioning state of the bucket.
 gbvrsStatus :: Lens' GetBucketVersioningResponse (Maybe BucketVersioningStatus)
 gbvrsStatus = lens _gbvrsStatus (\ s a -> s{_gbvrsStatus = a});
@@ -128,4 +129,4 @@
 gbvrsResponseStatus :: Lens' GetBucketVersioningResponse Int
 gbvrsResponseStatus = lens _gbvrsResponseStatus (\ s a -> s{_gbvrsResponseStatus = a});
 
-instance NFData GetBucketVersioningResponse
+instance NFData GetBucketVersioningResponse where
diff --git a/gen/Network/AWS/S3/GetBucketWebsite.hs b/gen/Network/AWS/S3/GetBucketWebsite.hs
--- a/gen/Network/AWS/S3/GetBucketWebsite.hs
+++ b/gen/Network/AWS/S3/GetBucketWebsite.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.GetBucketWebsite
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -38,18 +38,19 @@
     , gbwrsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'getBucketWebsite' smart constructor.
 newtype GetBucketWebsite = GetBucketWebsite'
-    { _gbwBucket :: BucketName
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gbwBucket :: BucketName
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetBucketWebsite' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -58,11 +59,9 @@
 getBucketWebsite
     :: BucketName -- ^ 'gbwBucket'
     -> GetBucketWebsite
-getBucketWebsite pBucket_ =
-    GetBucketWebsite'
-    { _gbwBucket = pBucket_
-    }
+getBucketWebsite pBucket_ = GetBucketWebsite' {_gbwBucket = pBucket_}
 
+
 -- | Undocumented member.
 gbwBucket :: Lens' GetBucketWebsite BucketName
 gbwBucket = lens _gbwBucket (\ s a -> s{_gbwBucket = a});
@@ -82,9 +81,9 @@
                         may (parseXMLList "RoutingRule"))
                      <*> (pure (fromEnum s)))
 
-instance Hashable GetBucketWebsite
+instance Hashable GetBucketWebsite where
 
-instance NFData GetBucketWebsite
+instance NFData GetBucketWebsite where
 
 instance ToHeaders GetBucketWebsite where
         toHeaders = const mempty
@@ -98,13 +97,14 @@
 
 -- | /See:/ 'getBucketWebsiteResponse' smart constructor.
 data GetBucketWebsiteResponse = GetBucketWebsiteResponse'
-    { _gbwrsRedirectAllRequestsTo :: !(Maybe RedirectAllRequestsTo)
-    , _gbwrsErrorDocument         :: !(Maybe ErrorDocument)
-    , _gbwrsIndexDocument         :: !(Maybe IndexDocument)
-    , _gbwrsRoutingRules          :: !(Maybe [RoutingRule])
-    , _gbwrsResponseStatus        :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gbwrsRedirectAllRequestsTo :: !(Maybe RedirectAllRequestsTo)
+  , _gbwrsErrorDocument         :: !(Maybe ErrorDocument)
+  , _gbwrsIndexDocument         :: !(Maybe IndexDocument)
+  , _gbwrsRoutingRules          :: !(Maybe [RoutingRule])
+  , _gbwrsResponseStatus        :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetBucketWebsiteResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -122,14 +122,15 @@
     :: Int -- ^ 'gbwrsResponseStatus'
     -> GetBucketWebsiteResponse
 getBucketWebsiteResponse pResponseStatus_ =
-    GetBucketWebsiteResponse'
-    { _gbwrsRedirectAllRequestsTo = Nothing
-    , _gbwrsErrorDocument = Nothing
-    , _gbwrsIndexDocument = Nothing
-    , _gbwrsRoutingRules = Nothing
-    , _gbwrsResponseStatus = pResponseStatus_
-    }
+  GetBucketWebsiteResponse'
+  { _gbwrsRedirectAllRequestsTo = Nothing
+  , _gbwrsErrorDocument = Nothing
+  , _gbwrsIndexDocument = Nothing
+  , _gbwrsRoutingRules = Nothing
+  , _gbwrsResponseStatus = pResponseStatus_
+  }
 
+
 -- | Undocumented member.
 gbwrsRedirectAllRequestsTo :: Lens' GetBucketWebsiteResponse (Maybe RedirectAllRequestsTo)
 gbwrsRedirectAllRequestsTo = lens _gbwrsRedirectAllRequestsTo (\ s a -> s{_gbwrsRedirectAllRequestsTo = a});
@@ -150,4 +151,4 @@
 gbwrsResponseStatus :: Lens' GetBucketWebsiteResponse Int
 gbwrsResponseStatus = lens _gbwrsResponseStatus (\ s a -> s{_gbwrsResponseStatus = a});
 
-instance NFData GetBucketWebsiteResponse
+instance NFData GetBucketWebsiteResponse where
diff --git a/gen/Network/AWS/S3/GetObject.hs b/gen/Network/AWS/S3/GetObject.hs
--- a/gen/Network/AWS/S3/GetObject.hs
+++ b/gen/Network/AWS/S3/GetObject.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.GetObject
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -80,36 +80,37 @@
     , gorsBody
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'getObject' smart constructor.
 data GetObject = GetObject'
-    { _goIfMatch                    :: !(Maybe Text)
-    , _goVersionId                  :: !(Maybe ObjectVersionId)
-    , _goResponseContentType        :: !(Maybe Text)
-    , _goResponseContentDisposition :: !(Maybe Text)
-    , _goResponseContentLanguage    :: !(Maybe Text)
-    , _goSSECustomerAlgorithm       :: !(Maybe Text)
-    , _goSSECustomerKey             :: !(Maybe (Sensitive Text))
-    , _goRequestPayer               :: !(Maybe RequestPayer)
-    , _goResponseContentEncoding    :: !(Maybe Text)
-    , _goIfModifiedSince            :: !(Maybe RFC822)
-    , _goPartNumber                 :: !(Maybe Int)
-    , _goRange                      :: !(Maybe Text)
-    , _goIfUnmodifiedSince          :: !(Maybe RFC822)
-    , _goSSECustomerKeyMD5          :: !(Maybe Text)
-    , _goResponseCacheControl       :: !(Maybe Text)
-    , _goResponseExpires            :: !(Maybe RFC822)
-    , _goIfNoneMatch                :: !(Maybe Text)
-    , _goBucket                     :: !BucketName
-    , _goKey                        :: !ObjectKey
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _goIfMatch                    :: !(Maybe Text)
+  , _goVersionId                  :: !(Maybe ObjectVersionId)
+  , _goResponseContentType        :: !(Maybe Text)
+  , _goResponseContentDisposition :: !(Maybe Text)
+  , _goResponseContentLanguage    :: !(Maybe Text)
+  , _goSSECustomerAlgorithm       :: !(Maybe Text)
+  , _goSSECustomerKey             :: !(Maybe (Sensitive Text))
+  , _goRequestPayer               :: !(Maybe RequestPayer)
+  , _goResponseContentEncoding    :: !(Maybe Text)
+  , _goIfModifiedSince            :: !(Maybe RFC822)
+  , _goPartNumber                 :: !(Maybe Int)
+  , _goRange                      :: !(Maybe Text)
+  , _goIfUnmodifiedSince          :: !(Maybe RFC822)
+  , _goSSECustomerKeyMD5          :: !(Maybe Text)
+  , _goResponseCacheControl       :: !(Maybe Text)
+  , _goResponseExpires            :: !(Maybe RFC822)
+  , _goIfNoneMatch                :: !(Maybe Text)
+  , _goBucket                     :: !BucketName
+  , _goKey                        :: !ObjectKey
+  } deriving (Eq, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetObject' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -156,28 +157,29 @@
     -> ObjectKey -- ^ 'goKey'
     -> GetObject
 getObject pBucket_ pKey_ =
-    GetObject'
-    { _goIfMatch = Nothing
-    , _goVersionId = Nothing
-    , _goResponseContentType = Nothing
-    , _goResponseContentDisposition = Nothing
-    , _goResponseContentLanguage = Nothing
-    , _goSSECustomerAlgorithm = Nothing
-    , _goSSECustomerKey = Nothing
-    , _goRequestPayer = Nothing
-    , _goResponseContentEncoding = Nothing
-    , _goIfModifiedSince = Nothing
-    , _goPartNumber = Nothing
-    , _goRange = Nothing
-    , _goIfUnmodifiedSince = Nothing
-    , _goSSECustomerKeyMD5 = Nothing
-    , _goResponseCacheControl = Nothing
-    , _goResponseExpires = Nothing
-    , _goIfNoneMatch = Nothing
-    , _goBucket = pBucket_
-    , _goKey = pKey_
-    }
+  GetObject'
+  { _goIfMatch = Nothing
+  , _goVersionId = Nothing
+  , _goResponseContentType = Nothing
+  , _goResponseContentDisposition = Nothing
+  , _goResponseContentLanguage = Nothing
+  , _goSSECustomerAlgorithm = Nothing
+  , _goSSECustomerKey = Nothing
+  , _goRequestPayer = Nothing
+  , _goResponseContentEncoding = Nothing
+  , _goIfModifiedSince = Nothing
+  , _goPartNumber = Nothing
+  , _goRange = Nothing
+  , _goIfUnmodifiedSince = Nothing
+  , _goSSECustomerKeyMD5 = Nothing
+  , _goResponseCacheControl = Nothing
+  , _goResponseExpires = Nothing
+  , _goIfNoneMatch = Nothing
+  , _goBucket = pBucket_
+  , _goKey = pKey_
+  }
 
+
 -- | Return the object only if its entity tag (ETag) is the same as the one specified, otherwise return a 412 (precondition failed).
 goIfMatch :: Lens' GetObject (Maybe Text)
 goIfMatch = lens _goIfMatch (\ s a -> s{_goIfMatch = a});
@@ -296,9 +298,9 @@
                      <*> (pure (fromEnum s))
                      <*> (pure x))
 
-instance Hashable GetObject
+instance Hashable GetObject where
 
-instance NFData GetObject
+instance NFData GetObject where
 
 instance ToHeaders GetObject where
         toHeaders GetObject'{..}
@@ -337,37 +339,38 @@
 
 -- | /See:/ 'getObjectResponse' smart constructor.
 data GetObjectResponse = GetObjectResponse'
-    { _gorsRequestCharged          :: !(Maybe RequestCharged)
-    , _gorsPartsCount              :: !(Maybe Int)
-    , _gorsETag                    :: !(Maybe ETag)
-    , _gorsVersionId               :: !(Maybe ObjectVersionId)
-    , _gorsContentLength           :: !(Maybe Integer)
-    , _gorsExpires                 :: !(Maybe RFC822)
-    , _gorsRestore                 :: !(Maybe Text)
-    , _gorsExpiration              :: !(Maybe Text)
-    , _gorsDeleteMarker            :: !(Maybe Bool)
-    , _gorsSSECustomerAlgorithm    :: !(Maybe Text)
-    , _gorsTagCount                :: !(Maybe Int)
-    , _gorsMissingMeta             :: !(Maybe Int)
-    , _gorsWebsiteRedirectLocation :: !(Maybe Text)
-    , _gorsAcceptRanges            :: !(Maybe Text)
-    , _gorsStorageClass            :: !(Maybe StorageClass)
-    , _gorsSSECustomerKeyMD5       :: !(Maybe Text)
-    , _gorsSSEKMSKeyId             :: !(Maybe (Sensitive Text))
-    , _gorsContentEncoding         :: !(Maybe Text)
-    , _gorsMetadata                :: !(Map Text Text)
-    , _gorsReplicationStatus       :: !(Maybe ReplicationStatus)
-    , _gorsCacheControl            :: !(Maybe Text)
-    , _gorsContentLanguage         :: !(Maybe Text)
-    , _gorsLastModified            :: !(Maybe RFC822)
-    , _gorsContentDisposition      :: !(Maybe Text)
-    , _gorsContentRange            :: !(Maybe Text)
-    , _gorsServerSideEncryption    :: !(Maybe ServerSideEncryption)
-    , _gorsContentType             :: !(Maybe Text)
-    , _gorsResponseStatus          :: !Int
-    , _gorsBody                    :: !RsBody
-    } deriving (Show,Generic)
+  { _gorsRequestCharged          :: !(Maybe RequestCharged)
+  , _gorsPartsCount              :: !(Maybe Int)
+  , _gorsETag                    :: !(Maybe ETag)
+  , _gorsVersionId               :: !(Maybe ObjectVersionId)
+  , _gorsContentLength           :: !(Maybe Integer)
+  , _gorsExpires                 :: !(Maybe RFC822)
+  , _gorsRestore                 :: !(Maybe Text)
+  , _gorsExpiration              :: !(Maybe Text)
+  , _gorsDeleteMarker            :: !(Maybe Bool)
+  , _gorsSSECustomerAlgorithm    :: !(Maybe Text)
+  , _gorsTagCount                :: !(Maybe Int)
+  , _gorsMissingMeta             :: !(Maybe Int)
+  , _gorsWebsiteRedirectLocation :: !(Maybe Text)
+  , _gorsAcceptRanges            :: !(Maybe Text)
+  , _gorsStorageClass            :: !(Maybe StorageClass)
+  , _gorsSSECustomerKeyMD5       :: !(Maybe Text)
+  , _gorsSSEKMSKeyId             :: !(Maybe (Sensitive Text))
+  , _gorsContentEncoding         :: !(Maybe Text)
+  , _gorsMetadata                :: !(Map Text Text)
+  , _gorsReplicationStatus       :: !(Maybe ReplicationStatus)
+  , _gorsCacheControl            :: !(Maybe Text)
+  , _gorsContentLanguage         :: !(Maybe Text)
+  , _gorsLastModified            :: !(Maybe RFC822)
+  , _gorsContentDisposition      :: !(Maybe Text)
+  , _gorsContentRange            :: !(Maybe Text)
+  , _gorsServerSideEncryption    :: !(Maybe ServerSideEncryption)
+  , _gorsContentType             :: !(Maybe Text)
+  , _gorsResponseStatus          :: !Int
+  , _gorsBody                    :: !RsBody
+  } deriving (Show, Generic)
 
+
 -- | Creates a value of 'GetObjectResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -434,37 +437,38 @@
     -> RsBody -- ^ 'gorsBody'
     -> GetObjectResponse
 getObjectResponse pResponseStatus_ pBody_ =
-    GetObjectResponse'
-    { _gorsRequestCharged = Nothing
-    , _gorsPartsCount = Nothing
-    , _gorsETag = Nothing
-    , _gorsVersionId = Nothing
-    , _gorsContentLength = Nothing
-    , _gorsExpires = Nothing
-    , _gorsRestore = Nothing
-    , _gorsExpiration = Nothing
-    , _gorsDeleteMarker = Nothing
-    , _gorsSSECustomerAlgorithm = Nothing
-    , _gorsTagCount = Nothing
-    , _gorsMissingMeta = Nothing
-    , _gorsWebsiteRedirectLocation = Nothing
-    , _gorsAcceptRanges = Nothing
-    , _gorsStorageClass = Nothing
-    , _gorsSSECustomerKeyMD5 = Nothing
-    , _gorsSSEKMSKeyId = Nothing
-    , _gorsContentEncoding = Nothing
-    , _gorsMetadata = mempty
-    , _gorsReplicationStatus = Nothing
-    , _gorsCacheControl = Nothing
-    , _gorsContentLanguage = Nothing
-    , _gorsLastModified = Nothing
-    , _gorsContentDisposition = Nothing
-    , _gorsContentRange = Nothing
-    , _gorsServerSideEncryption = Nothing
-    , _gorsContentType = Nothing
-    , _gorsResponseStatus = pResponseStatus_
-    , _gorsBody = pBody_
-    }
+  GetObjectResponse'
+  { _gorsRequestCharged = Nothing
+  , _gorsPartsCount = Nothing
+  , _gorsETag = Nothing
+  , _gorsVersionId = Nothing
+  , _gorsContentLength = Nothing
+  , _gorsExpires = Nothing
+  , _gorsRestore = Nothing
+  , _gorsExpiration = Nothing
+  , _gorsDeleteMarker = Nothing
+  , _gorsSSECustomerAlgorithm = Nothing
+  , _gorsTagCount = Nothing
+  , _gorsMissingMeta = Nothing
+  , _gorsWebsiteRedirectLocation = Nothing
+  , _gorsAcceptRanges = Nothing
+  , _gorsStorageClass = Nothing
+  , _gorsSSECustomerKeyMD5 = Nothing
+  , _gorsSSEKMSKeyId = Nothing
+  , _gorsContentEncoding = Nothing
+  , _gorsMetadata = mempty
+  , _gorsReplicationStatus = Nothing
+  , _gorsCacheControl = Nothing
+  , _gorsContentLanguage = Nothing
+  , _gorsLastModified = Nothing
+  , _gorsContentDisposition = Nothing
+  , _gorsContentRange = Nothing
+  , _gorsServerSideEncryption = Nothing
+  , _gorsContentType = Nothing
+  , _gorsResponseStatus = pResponseStatus_
+  , _gorsBody = pBody_
+  }
+
 
 -- | Undocumented member.
 gorsRequestCharged :: Lens' GetObjectResponse (Maybe RequestCharged)
diff --git a/gen/Network/AWS/S3/GetObjectACL.hs b/gen/Network/AWS/S3/GetObjectACL.hs
--- a/gen/Network/AWS/S3/GetObjectACL.hs
+++ b/gen/Network/AWS/S3/GetObjectACL.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.GetObjectACL
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -40,21 +40,22 @@
     , goarsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'getObjectACL' smart constructor.
 data GetObjectACL = GetObjectACL'
-    { _goaVersionId    :: !(Maybe ObjectVersionId)
-    , _goaRequestPayer :: !(Maybe RequestPayer)
-    , _goaBucket       :: !BucketName
-    , _goaKey          :: !ObjectKey
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _goaVersionId    :: !(Maybe ObjectVersionId)
+  , _goaRequestPayer :: !(Maybe RequestPayer)
+  , _goaBucket       :: !BucketName
+  , _goaKey          :: !ObjectKey
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetObjectACL' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -71,13 +72,14 @@
     -> ObjectKey -- ^ 'goaKey'
     -> GetObjectACL
 getObjectACL pBucket_ pKey_ =
-    GetObjectACL'
-    { _goaVersionId = Nothing
-    , _goaRequestPayer = Nothing
-    , _goaBucket = pBucket_
-    , _goaKey = pKey_
-    }
+  GetObjectACL'
+  { _goaVersionId = Nothing
+  , _goaRequestPayer = Nothing
+  , _goaBucket = pBucket_
+  , _goaKey = pKey_
+  }
 
+
 -- | VersionId used to reference a specific version of the object.
 goaVersionId :: Lens' GetObjectACL (Maybe ObjectVersionId)
 goaVersionId = lens _goaVersionId (\ s a -> s{_goaVersionId = a});
@@ -107,9 +109,9 @@
                      <*> (x .@? "Owner")
                      <*> (pure (fromEnum s)))
 
-instance Hashable GetObjectACL
+instance Hashable GetObjectACL where
 
-instance NFData GetObjectACL
+instance NFData GetObjectACL where
 
 instance ToHeaders GetObjectACL where
         toHeaders GetObjectACL'{..}
@@ -125,12 +127,13 @@
 
 -- | /See:/ 'getObjectACLResponse' smart constructor.
 data GetObjectACLResponse = GetObjectACLResponse'
-    { _goarsRequestCharged :: !(Maybe RequestCharged)
-    , _goarsGrants         :: !(Maybe [Grant])
-    , _goarsOwner          :: !(Maybe Owner)
-    , _goarsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _goarsRequestCharged :: !(Maybe RequestCharged)
+  , _goarsGrants         :: !(Maybe [Grant])
+  , _goarsOwner          :: !(Maybe Owner)
+  , _goarsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetObjectACLResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -146,13 +149,14 @@
     :: Int -- ^ 'goarsResponseStatus'
     -> GetObjectACLResponse
 getObjectACLResponse pResponseStatus_ =
-    GetObjectACLResponse'
-    { _goarsRequestCharged = Nothing
-    , _goarsGrants = Nothing
-    , _goarsOwner = Nothing
-    , _goarsResponseStatus = pResponseStatus_
-    }
+  GetObjectACLResponse'
+  { _goarsRequestCharged = Nothing
+  , _goarsGrants = Nothing
+  , _goarsOwner = Nothing
+  , _goarsResponseStatus = pResponseStatus_
+  }
 
+
 -- | Undocumented member.
 goarsRequestCharged :: Lens' GetObjectACLResponse (Maybe RequestCharged)
 goarsRequestCharged = lens _goarsRequestCharged (\ s a -> s{_goarsRequestCharged = a});
@@ -169,4 +173,4 @@
 goarsResponseStatus :: Lens' GetObjectACLResponse Int
 goarsResponseStatus = lens _goarsResponseStatus (\ s a -> s{_goarsResponseStatus = a});
 
-instance NFData GetObjectACLResponse
+instance NFData GetObjectACLResponse where
diff --git a/gen/Network/AWS/S3/GetObjectTagging.hs b/gen/Network/AWS/S3/GetObjectTagging.hs
--- a/gen/Network/AWS/S3/GetObjectTagging.hs
+++ b/gen/Network/AWS/S3/GetObjectTagging.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.GetObjectTagging
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -25,9 +25,9 @@
       getObjectTagging
     , GetObjectTagging
     -- * Request Lenses
+    , gotoVersionId
     , gotoBucket
     , gotoKey
-    , gotoVersionId
 
     -- * Destructuring the Response
     , getObjectTaggingResponse
@@ -38,42 +38,44 @@
     , gotrsTagSet
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'getObjectTagging' smart constructor.
 data GetObjectTagging = GetObjectTagging'
-    { _gotoBucket    :: !BucketName
-    , _gotoKey       :: !ObjectKey
-    , _gotoVersionId :: !ObjectVersionId
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gotoVersionId :: !(Maybe ObjectVersionId)
+  , _gotoBucket    :: !BucketName
+  , _gotoKey       :: !ObjectKey
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetObjectTagging' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
+-- * 'gotoVersionId' - Undocumented member.
+--
 -- * 'gotoBucket' - Undocumented member.
 --
 -- * 'gotoKey' - Undocumented member.
---
--- * 'gotoVersionId' - Undocumented member.
 getObjectTagging
     :: BucketName -- ^ 'gotoBucket'
     -> ObjectKey -- ^ 'gotoKey'
-    -> ObjectVersionId -- ^ 'gotoVersionId'
     -> GetObjectTagging
-getObjectTagging pBucket_ pKey_ pVersionId_ =
-    GetObjectTagging'
-    { _gotoBucket = pBucket_
-    , _gotoKey = pKey_
-    , _gotoVersionId = pVersionId_
-    }
+getObjectTagging pBucket_ pKey_ =
+  GetObjectTagging'
+  {_gotoVersionId = Nothing, _gotoBucket = pBucket_, _gotoKey = pKey_}
 
+
 -- | Undocumented member.
+gotoVersionId :: Lens' GetObjectTagging (Maybe ObjectVersionId)
+gotoVersionId = lens _gotoVersionId (\ s a -> s{_gotoVersionId = a});
+
+-- | Undocumented member.
 gotoBucket :: Lens' GetObjectTagging BucketName
 gotoBucket = lens _gotoBucket (\ s a -> s{_gotoBucket = a});
 
@@ -81,10 +83,6 @@
 gotoKey :: Lens' GetObjectTagging ObjectKey
 gotoKey = lens _gotoKey (\ s a -> s{_gotoKey = a});
 
--- | Undocumented member.
-gotoVersionId :: Lens' GetObjectTagging ObjectVersionId
-gotoVersionId = lens _gotoVersionId (\ s a -> s{_gotoVersionId = a});
-
 instance AWSRequest GetObjectTagging where
         type Rs GetObjectTagging = GetObjectTaggingResponse
         request = get s3
@@ -96,9 +94,9 @@
                      <*>
                      (x .@? "TagSet" .!@ mempty >>= parseXMLList "Tag"))
 
-instance Hashable GetObjectTagging
+instance Hashable GetObjectTagging where
 
-instance NFData GetObjectTagging
+instance NFData GetObjectTagging where
 
 instance ToHeaders GetObjectTagging where
         toHeaders = const mempty
@@ -108,15 +106,17 @@
           = mconcat ["/", toBS _gotoBucket, "/", toBS _gotoKey]
 
 instance ToQuery GetObjectTagging where
-        toQuery = const (mconcat ["tagging"])
+        toQuery GetObjectTagging'{..}
+          = mconcat ["versionId" =: _gotoVersionId, "tagging"]
 
 -- | /See:/ 'getObjectTaggingResponse' smart constructor.
 data GetObjectTaggingResponse = GetObjectTaggingResponse'
-    { _gotrsVersionId      :: !(Maybe ObjectVersionId)
-    , _gotrsResponseStatus :: !Int
-    , _gotrsTagSet         :: ![Tag]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gotrsVersionId      :: !(Maybe ObjectVersionId)
+  , _gotrsResponseStatus :: !Int
+  , _gotrsTagSet         :: ![Tag]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetObjectTaggingResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -130,12 +130,13 @@
     :: Int -- ^ 'gotrsResponseStatus'
     -> GetObjectTaggingResponse
 getObjectTaggingResponse pResponseStatus_ =
-    GetObjectTaggingResponse'
-    { _gotrsVersionId = Nothing
-    , _gotrsResponseStatus = pResponseStatus_
-    , _gotrsTagSet = mempty
-    }
+  GetObjectTaggingResponse'
+  { _gotrsVersionId = Nothing
+  , _gotrsResponseStatus = pResponseStatus_
+  , _gotrsTagSet = mempty
+  }
 
+
 -- | Undocumented member.
 gotrsVersionId :: Lens' GetObjectTaggingResponse (Maybe ObjectVersionId)
 gotrsVersionId = lens _gotrsVersionId (\ s a -> s{_gotrsVersionId = a});
@@ -148,4 +149,4 @@
 gotrsTagSet :: Lens' GetObjectTaggingResponse [Tag]
 gotrsTagSet = lens _gotrsTagSet (\ s a -> s{_gotrsTagSet = a}) . _Coerce;
 
-instance NFData GetObjectTaggingResponse
+instance NFData GetObjectTaggingResponse where
diff --git a/gen/Network/AWS/S3/GetObjectTorrent.hs b/gen/Network/AWS/S3/GetObjectTorrent.hs
--- a/gen/Network/AWS/S3/GetObjectTorrent.hs
+++ b/gen/Network/AWS/S3/GetObjectTorrent.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.GetObjectTorrent
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -38,20 +38,21 @@
     , getrsBody
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'getObjectTorrent' smart constructor.
 data GetObjectTorrent = GetObjectTorrent'
-    { _gotRequestPayer :: !(Maybe RequestPayer)
-    , _gotBucket       :: !BucketName
-    , _gotKey          :: !ObjectKey
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _gotRequestPayer :: !(Maybe RequestPayer)
+  , _gotBucket       :: !BucketName
+  , _gotKey          :: !ObjectKey
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'GetObjectTorrent' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -66,12 +67,10 @@
     -> ObjectKey -- ^ 'gotKey'
     -> GetObjectTorrent
 getObjectTorrent pBucket_ pKey_ =
-    GetObjectTorrent'
-    { _gotRequestPayer = Nothing
-    , _gotBucket = pBucket_
-    , _gotKey = pKey_
-    }
+  GetObjectTorrent'
+  {_gotRequestPayer = Nothing, _gotBucket = pBucket_, _gotKey = pKey_}
 
+
 -- | Undocumented member.
 gotRequestPayer :: Lens' GetObjectTorrent (Maybe RequestPayer)
 gotRequestPayer = lens _gotRequestPayer (\ s a -> s{_gotRequestPayer = a});
@@ -95,9 +94,9 @@
                      (pure (fromEnum s))
                      <*> (pure x))
 
-instance Hashable GetObjectTorrent
+instance Hashable GetObjectTorrent where
 
-instance NFData GetObjectTorrent
+instance NFData GetObjectTorrent where
 
 instance ToHeaders GetObjectTorrent where
         toHeaders GetObjectTorrent'{..}
@@ -112,11 +111,12 @@
 
 -- | /See:/ 'getObjectTorrentResponse' smart constructor.
 data GetObjectTorrentResponse = GetObjectTorrentResponse'
-    { _getrsRequestCharged :: !(Maybe RequestCharged)
-    , _getrsResponseStatus :: !Int
-    , _getrsBody           :: !RsBody
-    } deriving (Show,Generic)
+  { _getrsRequestCharged :: !(Maybe RequestCharged)
+  , _getrsResponseStatus :: !Int
+  , _getrsBody           :: !RsBody
+  } deriving (Show, Generic)
 
+
 -- | Creates a value of 'GetObjectTorrentResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -131,11 +131,12 @@
     -> RsBody -- ^ 'getrsBody'
     -> GetObjectTorrentResponse
 getObjectTorrentResponse pResponseStatus_ pBody_ =
-    GetObjectTorrentResponse'
-    { _getrsRequestCharged = Nothing
-    , _getrsResponseStatus = pResponseStatus_
-    , _getrsBody = pBody_
-    }
+  GetObjectTorrentResponse'
+  { _getrsRequestCharged = Nothing
+  , _getrsResponseStatus = pResponseStatus_
+  , _getrsBody = pBody_
+  }
+
 
 -- | Undocumented member.
 getrsRequestCharged :: Lens' GetObjectTorrentResponse (Maybe RequestCharged)
diff --git a/gen/Network/AWS/S3/HeadBucket.hs b/gen/Network/AWS/S3/HeadBucket.hs
--- a/gen/Network/AWS/S3/HeadBucket.hs
+++ b/gen/Network/AWS/S3/HeadBucket.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.HeadBucket
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -32,18 +32,19 @@
     , HeadBucketResponse
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'headBucket' smart constructor.
 newtype HeadBucket = HeadBucket'
-    { _hbBucket :: BucketName
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _hbBucket :: BucketName
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'HeadBucket' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -52,11 +53,9 @@
 headBucket
     :: BucketName -- ^ 'hbBucket'
     -> HeadBucket
-headBucket pBucket_ =
-    HeadBucket'
-    { _hbBucket = pBucket_
-    }
+headBucket pBucket_ = HeadBucket' {_hbBucket = pBucket_}
 
+
 -- | Undocumented member.
 hbBucket :: Lens' HeadBucket BucketName
 hbBucket = lens _hbBucket (\ s a -> s{_hbBucket = a});
@@ -66,9 +65,9 @@
         request = head' s3
         response = receiveNull HeadBucketResponse'
 
-instance Hashable HeadBucket
+instance Hashable HeadBucket where
 
-instance NFData HeadBucket
+instance NFData HeadBucket where
 
 instance ToHeaders HeadBucket where
         toHeaders = const mempty
@@ -82,13 +81,15 @@
 
 -- | /See:/ 'headBucketResponse' smart constructor.
 data HeadBucketResponse =
-    HeadBucketResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
+  HeadBucketResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'HeadBucketResponse' with the minimum fields required to make a request.
 --
 headBucketResponse
     :: HeadBucketResponse
 headBucketResponse = HeadBucketResponse'
 
-instance NFData HeadBucketResponse
+
+instance NFData HeadBucketResponse where
diff --git a/gen/Network/AWS/S3/HeadObject.hs b/gen/Network/AWS/S3/HeadObject.hs
--- a/gen/Network/AWS/S3/HeadObject.hs
+++ b/gen/Network/AWS/S3/HeadObject.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.HeadObject
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -71,30 +71,31 @@
     , horsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'headObject' smart constructor.
 data HeadObject = HeadObject'
-    { _hoIfMatch              :: !(Maybe Text)
-    , _hoVersionId            :: !(Maybe ObjectVersionId)
-    , _hoSSECustomerAlgorithm :: !(Maybe Text)
-    , _hoSSECustomerKey       :: !(Maybe (Sensitive Text))
-    , _hoRequestPayer         :: !(Maybe RequestPayer)
-    , _hoIfModifiedSince      :: !(Maybe RFC822)
-    , _hoPartNumber           :: !(Maybe Int)
-    , _hoRange                :: !(Maybe Text)
-    , _hoIfUnmodifiedSince    :: !(Maybe RFC822)
-    , _hoSSECustomerKeyMD5    :: !(Maybe Text)
-    , _hoIfNoneMatch          :: !(Maybe Text)
-    , _hoBucket               :: !BucketName
-    , _hoKey                  :: !ObjectKey
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _hoIfMatch              :: !(Maybe Text)
+  , _hoVersionId            :: !(Maybe ObjectVersionId)
+  , _hoSSECustomerAlgorithm :: !(Maybe Text)
+  , _hoSSECustomerKey       :: !(Maybe (Sensitive Text))
+  , _hoRequestPayer         :: !(Maybe RequestPayer)
+  , _hoIfModifiedSince      :: !(Maybe RFC822)
+  , _hoPartNumber           :: !(Maybe Int)
+  , _hoRange                :: !(Maybe Text)
+  , _hoIfUnmodifiedSince    :: !(Maybe RFC822)
+  , _hoSSECustomerKeyMD5    :: !(Maybe Text)
+  , _hoIfNoneMatch          :: !(Maybe Text)
+  , _hoBucket               :: !BucketName
+  , _hoKey                  :: !ObjectKey
+  } deriving (Eq, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'HeadObject' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -129,22 +130,23 @@
     -> ObjectKey -- ^ 'hoKey'
     -> HeadObject
 headObject pBucket_ pKey_ =
-    HeadObject'
-    { _hoIfMatch = Nothing
-    , _hoVersionId = Nothing
-    , _hoSSECustomerAlgorithm = Nothing
-    , _hoSSECustomerKey = Nothing
-    , _hoRequestPayer = Nothing
-    , _hoIfModifiedSince = Nothing
-    , _hoPartNumber = Nothing
-    , _hoRange = Nothing
-    , _hoIfUnmodifiedSince = Nothing
-    , _hoSSECustomerKeyMD5 = Nothing
-    , _hoIfNoneMatch = Nothing
-    , _hoBucket = pBucket_
-    , _hoKey = pKey_
-    }
+  HeadObject'
+  { _hoIfMatch = Nothing
+  , _hoVersionId = Nothing
+  , _hoSSECustomerAlgorithm = Nothing
+  , _hoSSECustomerKey = Nothing
+  , _hoRequestPayer = Nothing
+  , _hoIfModifiedSince = Nothing
+  , _hoPartNumber = Nothing
+  , _hoRange = Nothing
+  , _hoIfUnmodifiedSince = Nothing
+  , _hoSSECustomerKeyMD5 = Nothing
+  , _hoIfNoneMatch = Nothing
+  , _hoBucket = pBucket_
+  , _hoKey = pKey_
+  }
 
+
 -- | Return the object only if its entity tag (ETag) is the same as the one specified, otherwise return a 412 (precondition failed).
 hoIfMatch :: Lens' HeadObject (Maybe Text)
 hoIfMatch = lens _hoIfMatch (\ s a -> s{_hoIfMatch = a});
@@ -236,9 +238,9 @@
                      <*> (h .#? "Content-Type")
                      <*> (pure (fromEnum s)))
 
-instance Hashable HeadObject
+instance Hashable HeadObject where
 
-instance NFData HeadObject
+instance NFData HeadObject where
 
 instance ToHeaders HeadObject where
         toHeaders HeadObject'{..}
@@ -268,34 +270,35 @@
 
 -- | /See:/ 'headObjectResponse' smart constructor.
 data HeadObjectResponse = HeadObjectResponse'
-    { _horsRequestCharged          :: !(Maybe RequestCharged)
-    , _horsPartsCount              :: !(Maybe Int)
-    , _horsETag                    :: !(Maybe ETag)
-    , _horsVersionId               :: !(Maybe ObjectVersionId)
-    , _horsContentLength           :: !(Maybe Integer)
-    , _horsExpires                 :: !(Maybe RFC822)
-    , _horsRestore                 :: !(Maybe Text)
-    , _horsExpiration              :: !(Maybe Text)
-    , _horsDeleteMarker            :: !(Maybe Bool)
-    , _horsSSECustomerAlgorithm    :: !(Maybe Text)
-    , _horsMissingMeta             :: !(Maybe Int)
-    , _horsWebsiteRedirectLocation :: !(Maybe Text)
-    , _horsAcceptRanges            :: !(Maybe Text)
-    , _horsStorageClass            :: !(Maybe StorageClass)
-    , _horsSSECustomerKeyMD5       :: !(Maybe Text)
-    , _horsSSEKMSKeyId             :: !(Maybe (Sensitive Text))
-    , _horsContentEncoding         :: !(Maybe Text)
-    , _horsMetadata                :: !(Map Text Text)
-    , _horsReplicationStatus       :: !(Maybe ReplicationStatus)
-    , _horsCacheControl            :: !(Maybe Text)
-    , _horsContentLanguage         :: !(Maybe Text)
-    , _horsLastModified            :: !(Maybe RFC822)
-    , _horsContentDisposition      :: !(Maybe Text)
-    , _horsServerSideEncryption    :: !(Maybe ServerSideEncryption)
-    , _horsContentType             :: !(Maybe Text)
-    , _horsResponseStatus          :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _horsRequestCharged          :: !(Maybe RequestCharged)
+  , _horsPartsCount              :: !(Maybe Int)
+  , _horsETag                    :: !(Maybe ETag)
+  , _horsVersionId               :: !(Maybe ObjectVersionId)
+  , _horsContentLength           :: !(Maybe Integer)
+  , _horsExpires                 :: !(Maybe RFC822)
+  , _horsRestore                 :: !(Maybe Text)
+  , _horsExpiration              :: !(Maybe Text)
+  , _horsDeleteMarker            :: !(Maybe Bool)
+  , _horsSSECustomerAlgorithm    :: !(Maybe Text)
+  , _horsMissingMeta             :: !(Maybe Int)
+  , _horsWebsiteRedirectLocation :: !(Maybe Text)
+  , _horsAcceptRanges            :: !(Maybe Text)
+  , _horsStorageClass            :: !(Maybe StorageClass)
+  , _horsSSECustomerKeyMD5       :: !(Maybe Text)
+  , _horsSSEKMSKeyId             :: !(Maybe (Sensitive Text))
+  , _horsContentEncoding         :: !(Maybe Text)
+  , _horsMetadata                :: !(Map Text Text)
+  , _horsReplicationStatus       :: !(Maybe ReplicationStatus)
+  , _horsCacheControl            :: !(Maybe Text)
+  , _horsContentLanguage         :: !(Maybe Text)
+  , _horsLastModified            :: !(Maybe RFC822)
+  , _horsContentDisposition      :: !(Maybe Text)
+  , _horsServerSideEncryption    :: !(Maybe ServerSideEncryption)
+  , _horsContentType             :: !(Maybe Text)
+  , _horsResponseStatus          :: !Int
+  } deriving (Eq, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'HeadObjectResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -355,35 +358,36 @@
     :: Int -- ^ 'horsResponseStatus'
     -> HeadObjectResponse
 headObjectResponse pResponseStatus_ =
-    HeadObjectResponse'
-    { _horsRequestCharged = Nothing
-    , _horsPartsCount = Nothing
-    , _horsETag = Nothing
-    , _horsVersionId = Nothing
-    , _horsContentLength = Nothing
-    , _horsExpires = Nothing
-    , _horsRestore = Nothing
-    , _horsExpiration = Nothing
-    , _horsDeleteMarker = Nothing
-    , _horsSSECustomerAlgorithm = Nothing
-    , _horsMissingMeta = Nothing
-    , _horsWebsiteRedirectLocation = Nothing
-    , _horsAcceptRanges = Nothing
-    , _horsStorageClass = Nothing
-    , _horsSSECustomerKeyMD5 = Nothing
-    , _horsSSEKMSKeyId = Nothing
-    , _horsContentEncoding = Nothing
-    , _horsMetadata = mempty
-    , _horsReplicationStatus = Nothing
-    , _horsCacheControl = Nothing
-    , _horsContentLanguage = Nothing
-    , _horsLastModified = Nothing
-    , _horsContentDisposition = Nothing
-    , _horsServerSideEncryption = Nothing
-    , _horsContentType = Nothing
-    , _horsResponseStatus = pResponseStatus_
-    }
+  HeadObjectResponse'
+  { _horsRequestCharged = Nothing
+  , _horsPartsCount = Nothing
+  , _horsETag = Nothing
+  , _horsVersionId = Nothing
+  , _horsContentLength = Nothing
+  , _horsExpires = Nothing
+  , _horsRestore = Nothing
+  , _horsExpiration = Nothing
+  , _horsDeleteMarker = Nothing
+  , _horsSSECustomerAlgorithm = Nothing
+  , _horsMissingMeta = Nothing
+  , _horsWebsiteRedirectLocation = Nothing
+  , _horsAcceptRanges = Nothing
+  , _horsStorageClass = Nothing
+  , _horsSSECustomerKeyMD5 = Nothing
+  , _horsSSEKMSKeyId = Nothing
+  , _horsContentEncoding = Nothing
+  , _horsMetadata = mempty
+  , _horsReplicationStatus = Nothing
+  , _horsCacheControl = Nothing
+  , _horsContentLanguage = Nothing
+  , _horsLastModified = Nothing
+  , _horsContentDisposition = Nothing
+  , _horsServerSideEncryption = Nothing
+  , _horsContentType = Nothing
+  , _horsResponseStatus = pResponseStatus_
+  }
 
+
 -- | Undocumented member.
 horsRequestCharged :: Lens' HeadObjectResponse (Maybe RequestCharged)
 horsRequestCharged = lens _horsRequestCharged (\ s a -> s{_horsRequestCharged = a});
@@ -488,4 +492,4 @@
 horsResponseStatus :: Lens' HeadObjectResponse Int
 horsResponseStatus = lens _horsResponseStatus (\ s a -> s{_horsResponseStatus = a});
 
-instance NFData HeadObjectResponse
+instance NFData HeadObjectResponse where
diff --git a/gen/Network/AWS/S3/ListBucketAnalyticsConfigurations.hs b/gen/Network/AWS/S3/ListBucketAnalyticsConfigurations.hs
--- a/gen/Network/AWS/S3/ListBucketAnalyticsConfigurations.hs
+++ b/gen/Network/AWS/S3/ListBucketAnalyticsConfigurations.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.ListBucketAnalyticsConfigurations
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -39,19 +39,20 @@
     , lbacrsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'listBucketAnalyticsConfigurations' smart constructor.
 data ListBucketAnalyticsConfigurations = ListBucketAnalyticsConfigurations'
-    { _lbacContinuationToken :: !(Maybe Text)
-    , _lbacBucket            :: !BucketName
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _lbacContinuationToken :: !(Maybe Text)
+  , _lbacBucket            :: !BucketName
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'ListBucketAnalyticsConfigurations' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -63,11 +64,10 @@
     :: BucketName -- ^ 'lbacBucket'
     -> ListBucketAnalyticsConfigurations
 listBucketAnalyticsConfigurations pBucket_ =
-    ListBucketAnalyticsConfigurations'
-    { _lbacContinuationToken = Nothing
-    , _lbacBucket = pBucket_
-    }
+  ListBucketAnalyticsConfigurations'
+  {_lbacContinuationToken = Nothing, _lbacBucket = pBucket_}
 
+
 -- | The ContinuationToken that represents a placeholder from where this request should begin.
 lbacContinuationToken :: Lens' ListBucketAnalyticsConfigurations (Maybe Text)
 lbacContinuationToken = lens _lbacContinuationToken (\ s a -> s{_lbacContinuationToken = a});
@@ -92,8 +92,10 @@
                      <*> (pure (fromEnum s)))
 
 instance Hashable ListBucketAnalyticsConfigurations
+         where
 
 instance NFData ListBucketAnalyticsConfigurations
+         where
 
 instance ToHeaders ListBucketAnalyticsConfigurations
          where
@@ -113,13 +115,14 @@
 
 -- | /See:/ 'listBucketAnalyticsConfigurationsResponse' smart constructor.
 data ListBucketAnalyticsConfigurationsResponse = ListBucketAnalyticsConfigurationsResponse'
-    { _lbacrsAnalyticsConfigurationList :: !(Maybe [AnalyticsConfiguration])
-    , _lbacrsContinuationToken          :: !(Maybe Text)
-    , _lbacrsNextContinuationToken      :: !(Maybe Text)
-    , _lbacrsIsTruncated                :: !(Maybe Bool)
-    , _lbacrsResponseStatus             :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _lbacrsAnalyticsConfigurationList :: !(Maybe [AnalyticsConfiguration])
+  , _lbacrsContinuationToken          :: !(Maybe Text)
+  , _lbacrsNextContinuationToken      :: !(Maybe Text)
+  , _lbacrsIsTruncated                :: !(Maybe Bool)
+  , _lbacrsResponseStatus             :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'ListBucketAnalyticsConfigurationsResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -137,14 +140,15 @@
     :: Int -- ^ 'lbacrsResponseStatus'
     -> ListBucketAnalyticsConfigurationsResponse
 listBucketAnalyticsConfigurationsResponse pResponseStatus_ =
-    ListBucketAnalyticsConfigurationsResponse'
-    { _lbacrsAnalyticsConfigurationList = Nothing
-    , _lbacrsContinuationToken = Nothing
-    , _lbacrsNextContinuationToken = Nothing
-    , _lbacrsIsTruncated = Nothing
-    , _lbacrsResponseStatus = pResponseStatus_
-    }
+  ListBucketAnalyticsConfigurationsResponse'
+  { _lbacrsAnalyticsConfigurationList = Nothing
+  , _lbacrsContinuationToken = Nothing
+  , _lbacrsNextContinuationToken = Nothing
+  , _lbacrsIsTruncated = Nothing
+  , _lbacrsResponseStatus = pResponseStatus_
+  }
 
+
 -- | The list of analytics configurations for a bucket.
 lbacrsAnalyticsConfigurationList :: Lens' ListBucketAnalyticsConfigurationsResponse [AnalyticsConfiguration]
 lbacrsAnalyticsConfigurationList = lens _lbacrsAnalyticsConfigurationList (\ s a -> s{_lbacrsAnalyticsConfigurationList = a}) . _Default . _Coerce;
@@ -166,4 +170,5 @@
 lbacrsResponseStatus = lens _lbacrsResponseStatus (\ s a -> s{_lbacrsResponseStatus = a});
 
 instance NFData
-         ListBucketAnalyticsConfigurationsResponse
+           ListBucketAnalyticsConfigurationsResponse
+         where
diff --git a/gen/Network/AWS/S3/ListBucketInventoryConfigurations.hs b/gen/Network/AWS/S3/ListBucketInventoryConfigurations.hs
--- a/gen/Network/AWS/S3/ListBucketInventoryConfigurations.hs
+++ b/gen/Network/AWS/S3/ListBucketInventoryConfigurations.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.ListBucketInventoryConfigurations
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -39,19 +39,20 @@
     , lbicrsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'listBucketInventoryConfigurations' smart constructor.
 data ListBucketInventoryConfigurations = ListBucketInventoryConfigurations'
-    { _lbicContinuationToken :: !(Maybe Text)
-    , _lbicBucket            :: !BucketName
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _lbicContinuationToken :: !(Maybe Text)
+  , _lbicBucket            :: !BucketName
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'ListBucketInventoryConfigurations' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -63,11 +64,10 @@
     :: BucketName -- ^ 'lbicBucket'
     -> ListBucketInventoryConfigurations
 listBucketInventoryConfigurations pBucket_ =
-    ListBucketInventoryConfigurations'
-    { _lbicContinuationToken = Nothing
-    , _lbicBucket = pBucket_
-    }
+  ListBucketInventoryConfigurations'
+  {_lbicContinuationToken = Nothing, _lbicBucket = pBucket_}
 
+
 -- | The marker used to continue an inventory configuration listing that has been truncated. Use the NextContinuationToken from a previously truncated list response to continue the listing. The continuation token is an opaque value that Amazon S3 understands.
 lbicContinuationToken :: Lens' ListBucketInventoryConfigurations (Maybe Text)
 lbicContinuationToken = lens _lbicContinuationToken (\ s a -> s{_lbicContinuationToken = a});
@@ -92,8 +92,10 @@
                      <*> (pure (fromEnum s)))
 
 instance Hashable ListBucketInventoryConfigurations
+         where
 
 instance NFData ListBucketInventoryConfigurations
+         where
 
 instance ToHeaders ListBucketInventoryConfigurations
          where
@@ -113,13 +115,14 @@
 
 -- | /See:/ 'listBucketInventoryConfigurationsResponse' smart constructor.
 data ListBucketInventoryConfigurationsResponse = ListBucketInventoryConfigurationsResponse'
-    { _lbicrsContinuationToken          :: !(Maybe Text)
-    , _lbicrsInventoryConfigurationList :: !(Maybe [InventoryConfiguration])
-    , _lbicrsNextContinuationToken      :: !(Maybe Text)
-    , _lbicrsIsTruncated                :: !(Maybe Bool)
-    , _lbicrsResponseStatus             :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _lbicrsContinuationToken          :: !(Maybe Text)
+  , _lbicrsInventoryConfigurationList :: !(Maybe [InventoryConfiguration])
+  , _lbicrsNextContinuationToken      :: !(Maybe Text)
+  , _lbicrsIsTruncated                :: !(Maybe Bool)
+  , _lbicrsResponseStatus             :: !Int
+  } deriving (Eq, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'ListBucketInventoryConfigurationsResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -137,14 +140,15 @@
     :: Int -- ^ 'lbicrsResponseStatus'
     -> ListBucketInventoryConfigurationsResponse
 listBucketInventoryConfigurationsResponse pResponseStatus_ =
-    ListBucketInventoryConfigurationsResponse'
-    { _lbicrsContinuationToken = Nothing
-    , _lbicrsInventoryConfigurationList = Nothing
-    , _lbicrsNextContinuationToken = Nothing
-    , _lbicrsIsTruncated = Nothing
-    , _lbicrsResponseStatus = pResponseStatus_
-    }
+  ListBucketInventoryConfigurationsResponse'
+  { _lbicrsContinuationToken = Nothing
+  , _lbicrsInventoryConfigurationList = Nothing
+  , _lbicrsNextContinuationToken = Nothing
+  , _lbicrsIsTruncated = Nothing
+  , _lbicrsResponseStatus = pResponseStatus_
+  }
 
+
 -- | If sent in the request, the marker that is used as a starting point for this inventory configuration list response.
 lbicrsContinuationToken :: Lens' ListBucketInventoryConfigurationsResponse (Maybe Text)
 lbicrsContinuationToken = lens _lbicrsContinuationToken (\ s a -> s{_lbicrsContinuationToken = a});
@@ -166,4 +170,5 @@
 lbicrsResponseStatus = lens _lbicrsResponseStatus (\ s a -> s{_lbicrsResponseStatus = a});
 
 instance NFData
-         ListBucketInventoryConfigurationsResponse
+           ListBucketInventoryConfigurationsResponse
+         where
diff --git a/gen/Network/AWS/S3/ListBucketMetricsConfigurations.hs b/gen/Network/AWS/S3/ListBucketMetricsConfigurations.hs
--- a/gen/Network/AWS/S3/ListBucketMetricsConfigurations.hs
+++ b/gen/Network/AWS/S3/ListBucketMetricsConfigurations.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.ListBucketMetricsConfigurations
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -39,19 +39,20 @@
     , lbmcrsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'listBucketMetricsConfigurations' smart constructor.
 data ListBucketMetricsConfigurations = ListBucketMetricsConfigurations'
-    { _lbmcContinuationToken :: !(Maybe Text)
-    , _lbmcBucket            :: !BucketName
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _lbmcContinuationToken :: !(Maybe Text)
+  , _lbmcBucket            :: !BucketName
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'ListBucketMetricsConfigurations' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -63,11 +64,10 @@
     :: BucketName -- ^ 'lbmcBucket'
     -> ListBucketMetricsConfigurations
 listBucketMetricsConfigurations pBucket_ =
-    ListBucketMetricsConfigurations'
-    { _lbmcContinuationToken = Nothing
-    , _lbmcBucket = pBucket_
-    }
+  ListBucketMetricsConfigurations'
+  {_lbmcContinuationToken = Nothing, _lbmcBucket = pBucket_}
 
+
 -- | The marker that is used to continue a metrics configuration listing that has been truncated. Use the NextContinuationToken from a previously truncated list response to continue the listing. The continuation token is an opaque value that Amazon S3 understands.
 lbmcContinuationToken :: Lens' ListBucketMetricsConfigurations (Maybe Text)
 lbmcContinuationToken = lens _lbmcContinuationToken (\ s a -> s{_lbmcContinuationToken = a});
@@ -92,8 +92,9 @@
                      <*> (pure (fromEnum s)))
 
 instance Hashable ListBucketMetricsConfigurations
+         where
 
-instance NFData ListBucketMetricsConfigurations
+instance NFData ListBucketMetricsConfigurations where
 
 instance ToHeaders ListBucketMetricsConfigurations
          where
@@ -112,13 +113,14 @@
 
 -- | /See:/ 'listBucketMetricsConfigurationsResponse' smart constructor.
 data ListBucketMetricsConfigurationsResponse = ListBucketMetricsConfigurationsResponse'
-    { _lbmcrsContinuationToken        :: !(Maybe Text)
-    , _lbmcrsMetricsConfigurationList :: !(Maybe [MetricsConfiguration])
-    , _lbmcrsNextContinuationToken    :: !(Maybe Text)
-    , _lbmcrsIsTruncated              :: !(Maybe Bool)
-    , _lbmcrsResponseStatus           :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _lbmcrsContinuationToken        :: !(Maybe Text)
+  , _lbmcrsMetricsConfigurationList :: !(Maybe [MetricsConfiguration])
+  , _lbmcrsNextContinuationToken    :: !(Maybe Text)
+  , _lbmcrsIsTruncated              :: !(Maybe Bool)
+  , _lbmcrsResponseStatus           :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'ListBucketMetricsConfigurationsResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -136,14 +138,15 @@
     :: Int -- ^ 'lbmcrsResponseStatus'
     -> ListBucketMetricsConfigurationsResponse
 listBucketMetricsConfigurationsResponse pResponseStatus_ =
-    ListBucketMetricsConfigurationsResponse'
-    { _lbmcrsContinuationToken = Nothing
-    , _lbmcrsMetricsConfigurationList = Nothing
-    , _lbmcrsNextContinuationToken = Nothing
-    , _lbmcrsIsTruncated = Nothing
-    , _lbmcrsResponseStatus = pResponseStatus_
-    }
+  ListBucketMetricsConfigurationsResponse'
+  { _lbmcrsContinuationToken = Nothing
+  , _lbmcrsMetricsConfigurationList = Nothing
+  , _lbmcrsNextContinuationToken = Nothing
+  , _lbmcrsIsTruncated = Nothing
+  , _lbmcrsResponseStatus = pResponseStatus_
+  }
 
+
 -- | The marker that is used as a starting point for this metrics configuration list response. This value is present if it was sent in the request.
 lbmcrsContinuationToken :: Lens' ListBucketMetricsConfigurationsResponse (Maybe Text)
 lbmcrsContinuationToken = lens _lbmcrsContinuationToken (\ s a -> s{_lbmcrsContinuationToken = a});
@@ -165,4 +168,5 @@
 lbmcrsResponseStatus = lens _lbmcrsResponseStatus (\ s a -> s{_lbmcrsResponseStatus = a});
 
 instance NFData
-         ListBucketMetricsConfigurationsResponse
+           ListBucketMetricsConfigurationsResponse
+         where
diff --git a/gen/Network/AWS/S3/ListBuckets.hs b/gen/Network/AWS/S3/ListBuckets.hs
--- a/gen/Network/AWS/S3/ListBuckets.hs
+++ b/gen/Network/AWS/S3/ListBuckets.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.ListBuckets
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -34,24 +34,26 @@
     , lbrsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'listBuckets' smart constructor.
 data ListBuckets =
-    ListBuckets'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
+  ListBuckets'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'ListBuckets' with the minimum fields required to make a request.
 --
 listBuckets
     :: ListBuckets
 listBuckets = ListBuckets'
 
+
 instance AWSRequest ListBuckets where
         type Rs ListBuckets = ListBucketsResponse
         request = get s3
@@ -64,9 +66,9 @@
                      <*> (x .@? "Owner")
                      <*> (pure (fromEnum s)))
 
-instance Hashable ListBuckets
+instance Hashable ListBuckets where
 
-instance NFData ListBuckets
+instance NFData ListBuckets where
 
 instance ToHeaders ListBuckets where
         toHeaders = const mempty
@@ -79,11 +81,12 @@
 
 -- | /See:/ 'listBucketsResponse' smart constructor.
 data ListBucketsResponse = ListBucketsResponse'
-    { _lbrsBuckets        :: !(Maybe [Bucket])
-    , _lbrsOwner          :: !(Maybe Owner)
-    , _lbrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _lbrsBuckets        :: !(Maybe [Bucket])
+  , _lbrsOwner          :: !(Maybe Owner)
+  , _lbrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'ListBucketsResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -97,12 +100,13 @@
     :: Int -- ^ 'lbrsResponseStatus'
     -> ListBucketsResponse
 listBucketsResponse pResponseStatus_ =
-    ListBucketsResponse'
-    { _lbrsBuckets = Nothing
-    , _lbrsOwner = Nothing
-    , _lbrsResponseStatus = pResponseStatus_
-    }
+  ListBucketsResponse'
+  { _lbrsBuckets = Nothing
+  , _lbrsOwner = Nothing
+  , _lbrsResponseStatus = pResponseStatus_
+  }
 
+
 -- | Undocumented member.
 lbrsBuckets :: Lens' ListBucketsResponse [Bucket]
 lbrsBuckets = lens _lbrsBuckets (\ s a -> s{_lbrsBuckets = a}) . _Default . _Coerce;
@@ -115,4 +119,4 @@
 lbrsResponseStatus :: Lens' ListBucketsResponse Int
 lbrsResponseStatus = lens _lbrsResponseStatus (\ s a -> s{_lbrsResponseStatus = a});
 
-instance NFData ListBucketsResponse
+instance NFData ListBucketsResponse where
diff --git a/gen/Network/AWS/S3/ListMultipartUploads.hs b/gen/Network/AWS/S3/ListMultipartUploads.hs
--- a/gen/Network/AWS/S3/ListMultipartUploads.hs
+++ b/gen/Network/AWS/S3/ListMultipartUploads.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.ListMultipartUploads
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -54,25 +54,26 @@
     , lmursResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Pager
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Pager
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'listMultipartUploads' smart constructor.
 data ListMultipartUploads = ListMultipartUploads'
-    { _lmuKeyMarker      :: !(Maybe Text)
-    , _lmuPrefix         :: !(Maybe Text)
-    , _lmuEncodingType   :: !(Maybe EncodingType)
-    , _lmuUploadIdMarker :: !(Maybe Text)
-    , _lmuMaxUploads     :: !(Maybe Int)
-    , _lmuDelimiter      :: !(Maybe Delimiter)
-    , _lmuBucket         :: !BucketName
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _lmuKeyMarker      :: !(Maybe Text)
+  , _lmuPrefix         :: !(Maybe Text)
+  , _lmuEncodingType   :: !(Maybe EncodingType)
+  , _lmuUploadIdMarker :: !(Maybe Text)
+  , _lmuMaxUploads     :: !(Maybe Int)
+  , _lmuDelimiter      :: !(Maybe Delimiter)
+  , _lmuBucket         :: !BucketName
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'ListMultipartUploads' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -94,16 +95,17 @@
     :: BucketName -- ^ 'lmuBucket'
     -> ListMultipartUploads
 listMultipartUploads pBucket_ =
-    ListMultipartUploads'
-    { _lmuKeyMarker = Nothing
-    , _lmuPrefix = Nothing
-    , _lmuEncodingType = Nothing
-    , _lmuUploadIdMarker = Nothing
-    , _lmuMaxUploads = Nothing
-    , _lmuDelimiter = Nothing
-    , _lmuBucket = pBucket_
-    }
+  ListMultipartUploads'
+  { _lmuKeyMarker = Nothing
+  , _lmuPrefix = Nothing
+  , _lmuEncodingType = Nothing
+  , _lmuUploadIdMarker = Nothing
+  , _lmuMaxUploads = Nothing
+  , _lmuDelimiter = Nothing
+  , _lmuBucket = pBucket_
+  }
 
+
 -- | Together with upload-id-marker, this parameter specifies the multipart upload after which listing should begin.
 lmuKeyMarker :: Lens' ListMultipartUploads (Maybe Text)
 lmuKeyMarker = lens _lmuKeyMarker (\ s a -> s{_lmuKeyMarker = a});
@@ -163,9 +165,9 @@
                      <*> (x .@? "Delimiter")
                      <*> (pure (fromEnum s)))
 
-instance Hashable ListMultipartUploads
+instance Hashable ListMultipartUploads where
 
-instance NFData ListMultipartUploads
+instance NFData ListMultipartUploads where
 
 instance ToHeaders ListMultipartUploads where
         toHeaders = const mempty
@@ -186,21 +188,22 @@
 
 -- | /See:/ 'listMultipartUploadsResponse' smart constructor.
 data ListMultipartUploadsResponse = ListMultipartUploadsResponse'
-    { _lmursKeyMarker          :: !(Maybe Text)
-    , _lmursPrefix             :: !(Maybe Text)
-    , _lmursCommonPrefixes     :: !(Maybe [CommonPrefix])
-    , _lmursEncodingType       :: !(Maybe EncodingType)
-    , _lmursBucket             :: !(Maybe BucketName)
-    , _lmursUploadIdMarker     :: !(Maybe Text)
-    , _lmursMaxUploads         :: !(Maybe Int)
-    , _lmursNextKeyMarker      :: !(Maybe Text)
-    , _lmursUploads            :: !(Maybe [MultipartUpload])
-    , _lmursIsTruncated        :: !(Maybe Bool)
-    , _lmursNextUploadIdMarker :: !(Maybe Text)
-    , _lmursDelimiter          :: !(Maybe Delimiter)
-    , _lmursResponseStatus     :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _lmursKeyMarker          :: !(Maybe Text)
+  , _lmursPrefix             :: !(Maybe Text)
+  , _lmursCommonPrefixes     :: !(Maybe [CommonPrefix])
+  , _lmursEncodingType       :: !(Maybe EncodingType)
+  , _lmursBucket             :: !(Maybe BucketName)
+  , _lmursUploadIdMarker     :: !(Maybe Text)
+  , _lmursMaxUploads         :: !(Maybe Int)
+  , _lmursNextKeyMarker      :: !(Maybe Text)
+  , _lmursUploads            :: !(Maybe [MultipartUpload])
+  , _lmursIsTruncated        :: !(Maybe Bool)
+  , _lmursNextUploadIdMarker :: !(Maybe Text)
+  , _lmursDelimiter          :: !(Maybe Delimiter)
+  , _lmursResponseStatus     :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'ListMultipartUploadsResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -234,22 +237,23 @@
     :: Int -- ^ 'lmursResponseStatus'
     -> ListMultipartUploadsResponse
 listMultipartUploadsResponse pResponseStatus_ =
-    ListMultipartUploadsResponse'
-    { _lmursKeyMarker = Nothing
-    , _lmursPrefix = Nothing
-    , _lmursCommonPrefixes = Nothing
-    , _lmursEncodingType = Nothing
-    , _lmursBucket = Nothing
-    , _lmursUploadIdMarker = Nothing
-    , _lmursMaxUploads = Nothing
-    , _lmursNextKeyMarker = Nothing
-    , _lmursUploads = Nothing
-    , _lmursIsTruncated = Nothing
-    , _lmursNextUploadIdMarker = Nothing
-    , _lmursDelimiter = Nothing
-    , _lmursResponseStatus = pResponseStatus_
-    }
+  ListMultipartUploadsResponse'
+  { _lmursKeyMarker = Nothing
+  , _lmursPrefix = Nothing
+  , _lmursCommonPrefixes = Nothing
+  , _lmursEncodingType = Nothing
+  , _lmursBucket = Nothing
+  , _lmursUploadIdMarker = Nothing
+  , _lmursMaxUploads = Nothing
+  , _lmursNextKeyMarker = Nothing
+  , _lmursUploads = Nothing
+  , _lmursIsTruncated = Nothing
+  , _lmursNextUploadIdMarker = Nothing
+  , _lmursDelimiter = Nothing
+  , _lmursResponseStatus = pResponseStatus_
+  }
 
+
 -- | The key at or after which the listing began.
 lmursKeyMarker :: Lens' ListMultipartUploadsResponse (Maybe Text)
 lmursKeyMarker = lens _lmursKeyMarker (\ s a -> s{_lmursKeyMarker = a});
@@ -302,4 +306,4 @@
 lmursResponseStatus :: Lens' ListMultipartUploadsResponse Int
 lmursResponseStatus = lens _lmursResponseStatus (\ s a -> s{_lmursResponseStatus = a});
 
-instance NFData ListMultipartUploadsResponse
+instance NFData ListMultipartUploadsResponse where
diff --git a/gen/Network/AWS/S3/ListObjectVersions.hs b/gen/Network/AWS/S3/ListObjectVersions.hs
--- a/gen/Network/AWS/S3/ListObjectVersions.hs
+++ b/gen/Network/AWS/S3/ListObjectVersions.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.ListObjectVersions
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -55,25 +55,26 @@
     , lovrsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Pager
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Pager
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'listObjectVersions' smart constructor.
 data ListObjectVersions = ListObjectVersions'
-    { _lovKeyMarker       :: !(Maybe Text)
-    , _lovPrefix          :: !(Maybe Text)
-    , _lovEncodingType    :: !(Maybe EncodingType)
-    , _lovVersionIdMarker :: !(Maybe Text)
-    , _lovMaxKeys         :: !(Maybe Int)
-    , _lovDelimiter       :: !(Maybe Delimiter)
-    , _lovBucket          :: !BucketName
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _lovKeyMarker       :: !(Maybe Text)
+  , _lovPrefix          :: !(Maybe Text)
+  , _lovEncodingType    :: !(Maybe EncodingType)
+  , _lovVersionIdMarker :: !(Maybe Text)
+  , _lovMaxKeys         :: !(Maybe Int)
+  , _lovDelimiter       :: !(Maybe Delimiter)
+  , _lovBucket          :: !BucketName
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'ListObjectVersions' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -95,16 +96,17 @@
     :: BucketName -- ^ 'lovBucket'
     -> ListObjectVersions
 listObjectVersions pBucket_ =
-    ListObjectVersions'
-    { _lovKeyMarker = Nothing
-    , _lovPrefix = Nothing
-    , _lovEncodingType = Nothing
-    , _lovVersionIdMarker = Nothing
-    , _lovMaxKeys = Nothing
-    , _lovDelimiter = Nothing
-    , _lovBucket = pBucket_
-    }
+  ListObjectVersions'
+  { _lovKeyMarker = Nothing
+  , _lovPrefix = Nothing
+  , _lovEncodingType = Nothing
+  , _lovVersionIdMarker = Nothing
+  , _lovMaxKeys = Nothing
+  , _lovDelimiter = Nothing
+  , _lovBucket = pBucket_
+  }
 
+
 -- | Specifies the key to start with when listing objects in a bucket.
 lovKeyMarker :: Lens' ListObjectVersions (Maybe Text)
 lovKeyMarker = lens _lovKeyMarker (\ s a -> s{_lovKeyMarker = a});
@@ -166,9 +168,9 @@
                      <*> (x .@? "Delimiter")
                      <*> (pure (fromEnum s)))
 
-instance Hashable ListObjectVersions
+instance Hashable ListObjectVersions where
 
-instance NFData ListObjectVersions
+instance NFData ListObjectVersions where
 
 instance ToHeaders ListObjectVersions where
         toHeaders = const mempty
@@ -189,22 +191,23 @@
 
 -- | /See:/ 'listObjectVersionsResponse' smart constructor.
 data ListObjectVersionsResponse = ListObjectVersionsResponse'
-    { _lovrsNextVersionIdMarker :: !(Maybe Text)
-    , _lovrsKeyMarker           :: !(Maybe Text)
-    , _lovrsDeleteMarkers       :: !(Maybe [DeleteMarkerEntry])
-    , _lovrsPrefix              :: !(Maybe Text)
-    , _lovrsCommonPrefixes      :: !(Maybe [CommonPrefix])
-    , _lovrsEncodingType        :: !(Maybe EncodingType)
-    , _lovrsVersions            :: !(Maybe [ObjectVersion])
-    , _lovrsName                :: !(Maybe BucketName)
-    , _lovrsNextKeyMarker       :: !(Maybe Text)
-    , _lovrsVersionIdMarker     :: !(Maybe Text)
-    , _lovrsMaxKeys             :: !(Maybe Int)
-    , _lovrsIsTruncated         :: !(Maybe Bool)
-    , _lovrsDelimiter           :: !(Maybe Delimiter)
-    , _lovrsResponseStatus      :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _lovrsNextVersionIdMarker :: !(Maybe Text)
+  , _lovrsKeyMarker           :: !(Maybe Text)
+  , _lovrsDeleteMarkers       :: !(Maybe [DeleteMarkerEntry])
+  , _lovrsPrefix              :: !(Maybe Text)
+  , _lovrsCommonPrefixes      :: !(Maybe [CommonPrefix])
+  , _lovrsEncodingType        :: !(Maybe EncodingType)
+  , _lovrsVersions            :: !(Maybe [ObjectVersion])
+  , _lovrsName                :: !(Maybe BucketName)
+  , _lovrsNextKeyMarker       :: !(Maybe Text)
+  , _lovrsVersionIdMarker     :: !(Maybe Text)
+  , _lovrsMaxKeys             :: !(Maybe Int)
+  , _lovrsIsTruncated         :: !(Maybe Bool)
+  , _lovrsDelimiter           :: !(Maybe Delimiter)
+  , _lovrsResponseStatus      :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'ListObjectVersionsResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -240,23 +243,24 @@
     :: Int -- ^ 'lovrsResponseStatus'
     -> ListObjectVersionsResponse
 listObjectVersionsResponse pResponseStatus_ =
-    ListObjectVersionsResponse'
-    { _lovrsNextVersionIdMarker = Nothing
-    , _lovrsKeyMarker = Nothing
-    , _lovrsDeleteMarkers = Nothing
-    , _lovrsPrefix = Nothing
-    , _lovrsCommonPrefixes = Nothing
-    , _lovrsEncodingType = Nothing
-    , _lovrsVersions = Nothing
-    , _lovrsName = Nothing
-    , _lovrsNextKeyMarker = Nothing
-    , _lovrsVersionIdMarker = Nothing
-    , _lovrsMaxKeys = Nothing
-    , _lovrsIsTruncated = Nothing
-    , _lovrsDelimiter = Nothing
-    , _lovrsResponseStatus = pResponseStatus_
-    }
+  ListObjectVersionsResponse'
+  { _lovrsNextVersionIdMarker = Nothing
+  , _lovrsKeyMarker = Nothing
+  , _lovrsDeleteMarkers = Nothing
+  , _lovrsPrefix = Nothing
+  , _lovrsCommonPrefixes = Nothing
+  , _lovrsEncodingType = Nothing
+  , _lovrsVersions = Nothing
+  , _lovrsName = Nothing
+  , _lovrsNextKeyMarker = Nothing
+  , _lovrsVersionIdMarker = Nothing
+  , _lovrsMaxKeys = Nothing
+  , _lovrsIsTruncated = Nothing
+  , _lovrsDelimiter = Nothing
+  , _lovrsResponseStatus = pResponseStatus_
+  }
 
+
 -- | Use this value for the next version id marker parameter in a subsequent request.
 lovrsNextVersionIdMarker :: Lens' ListObjectVersionsResponse (Maybe Text)
 lovrsNextVersionIdMarker = lens _lovrsNextVersionIdMarker (\ s a -> s{_lovrsNextVersionIdMarker = a});
@@ -313,4 +317,4 @@
 lovrsResponseStatus :: Lens' ListObjectVersionsResponse Int
 lovrsResponseStatus = lens _lovrsResponseStatus (\ s a -> s{_lovrsResponseStatus = a});
 
-instance NFData ListObjectVersionsResponse
+instance NFData ListObjectVersionsResponse where
diff --git a/gen/Network/AWS/S3/ListObjects.hs b/gen/Network/AWS/S3/ListObjects.hs
--- a/gen/Network/AWS/S3/ListObjects.hs
+++ b/gen/Network/AWS/S3/ListObjects.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.ListObjects
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -52,25 +52,26 @@
     , lorsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Pager
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Pager
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'listObjects' smart constructor.
 data ListObjects = ListObjects'
-    { _loPrefix       :: !(Maybe Text)
-    , _loEncodingType :: !(Maybe EncodingType)
-    , _loRequestPayer :: !(Maybe RequestPayer)
-    , _loMarker       :: !(Maybe Text)
-    , _loMaxKeys      :: !(Maybe Int)
-    , _loDelimiter    :: !(Maybe Delimiter)
-    , _loBucket       :: !BucketName
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _loPrefix       :: !(Maybe Text)
+  , _loEncodingType :: !(Maybe EncodingType)
+  , _loRequestPayer :: !(Maybe RequestPayer)
+  , _loMarker       :: !(Maybe Text)
+  , _loMaxKeys      :: !(Maybe Int)
+  , _loDelimiter    :: !(Maybe Delimiter)
+  , _loBucket       :: !BucketName
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'ListObjects' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -92,16 +93,17 @@
     :: BucketName -- ^ 'loBucket'
     -> ListObjects
 listObjects pBucket_ =
-    ListObjects'
-    { _loPrefix = Nothing
-    , _loEncodingType = Nothing
-    , _loRequestPayer = Nothing
-    , _loMarker = Nothing
-    , _loMaxKeys = Nothing
-    , _loDelimiter = Nothing
-    , _loBucket = pBucket_
-    }
+  ListObjects'
+  { _loPrefix = Nothing
+  , _loEncodingType = Nothing
+  , _loRequestPayer = Nothing
+  , _loMarker = Nothing
+  , _loMaxKeys = Nothing
+  , _loDelimiter = Nothing
+  , _loBucket = pBucket_
+  }
 
+
 -- | Limits the response to keys that begin with the specified prefix.
 loPrefix :: Lens' ListObjects (Maybe Text)
 loPrefix = lens _loPrefix (\ s a -> s{_loPrefix = a});
@@ -164,9 +166,9 @@
                      <*> (x .@? "Delimiter")
                      <*> (pure (fromEnum s)))
 
-instance Hashable ListObjects
+instance Hashable ListObjects where
 
-instance NFData ListObjects
+instance NFData ListObjects where
 
 instance ToHeaders ListObjects where
         toHeaders ListObjects'{..}
@@ -186,19 +188,20 @@
 
 -- | /See:/ 'listObjectsResponse' smart constructor.
 data ListObjectsResponse = ListObjectsResponse'
-    { _lorsContents       :: !(Maybe [Object])
-    , _lorsPrefix         :: !(Maybe Text)
-    , _lorsCommonPrefixes :: !(Maybe [CommonPrefix])
-    , _lorsEncodingType   :: !(Maybe EncodingType)
-    , _lorsName           :: !(Maybe BucketName)
-    , _lorsMarker         :: !(Maybe Text)
-    , _lorsNextMarker     :: !(Maybe Text)
-    , _lorsMaxKeys        :: !(Maybe Int)
-    , _lorsIsTruncated    :: !(Maybe Bool)
-    , _lorsDelimiter      :: !(Maybe Delimiter)
-    , _lorsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _lorsContents       :: !(Maybe [Object])
+  , _lorsPrefix         :: !(Maybe Text)
+  , _lorsCommonPrefixes :: !(Maybe [CommonPrefix])
+  , _lorsEncodingType   :: !(Maybe EncodingType)
+  , _lorsName           :: !(Maybe BucketName)
+  , _lorsMarker         :: !(Maybe Text)
+  , _lorsNextMarker     :: !(Maybe Text)
+  , _lorsMaxKeys        :: !(Maybe Int)
+  , _lorsIsTruncated    :: !(Maybe Bool)
+  , _lorsDelimiter      :: !(Maybe Delimiter)
+  , _lorsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'ListObjectsResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -228,20 +231,21 @@
     :: Int -- ^ 'lorsResponseStatus'
     -> ListObjectsResponse
 listObjectsResponse pResponseStatus_ =
-    ListObjectsResponse'
-    { _lorsContents = Nothing
-    , _lorsPrefix = Nothing
-    , _lorsCommonPrefixes = Nothing
-    , _lorsEncodingType = Nothing
-    , _lorsName = Nothing
-    , _lorsMarker = Nothing
-    , _lorsNextMarker = Nothing
-    , _lorsMaxKeys = Nothing
-    , _lorsIsTruncated = Nothing
-    , _lorsDelimiter = Nothing
-    , _lorsResponseStatus = pResponseStatus_
-    }
+  ListObjectsResponse'
+  { _lorsContents = Nothing
+  , _lorsPrefix = Nothing
+  , _lorsCommonPrefixes = Nothing
+  , _lorsEncodingType = Nothing
+  , _lorsName = Nothing
+  , _lorsMarker = Nothing
+  , _lorsNextMarker = Nothing
+  , _lorsMaxKeys = Nothing
+  , _lorsIsTruncated = Nothing
+  , _lorsDelimiter = Nothing
+  , _lorsResponseStatus = pResponseStatus_
+  }
 
+
 -- | Undocumented member.
 lorsContents :: Lens' ListObjectsResponse [Object]
 lorsContents = lens _lorsContents (\ s a -> s{_lorsContents = a}) . _Default . _Coerce;
@@ -286,4 +290,4 @@
 lorsResponseStatus :: Lens' ListObjectsResponse Int
 lorsResponseStatus = lens _lorsResponseStatus (\ s a -> s{_lorsResponseStatus = a});
 
-instance NFData ListObjectsResponse
+instance NFData ListObjectsResponse where
diff --git a/gen/Network/AWS/S3/ListObjectsV.hs b/gen/Network/AWS/S3/ListObjectsV.hs
--- a/gen/Network/AWS/S3/ListObjectsV.hs
+++ b/gen/Network/AWS/S3/ListObjectsV.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.ListObjectsV
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -54,26 +54,27 @@
     , lrsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'listObjectsV' smart constructor.
 data ListObjectsV = ListObjectsV'
-    { _lStartAfter        :: !(Maybe Text)
-    , _lContinuationToken :: !(Maybe Text)
-    , _lFetchOwner        :: !(Maybe Bool)
-    , _lPrefix            :: !(Maybe Text)
-    , _lEncodingType      :: !(Maybe EncodingType)
-    , _lRequestPayer      :: !(Maybe RequestPayer)
-    , _lMaxKeys           :: !(Maybe Int)
-    , _lDelimiter         :: !(Maybe Delimiter)
-    , _lBucket            :: !BucketName
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _lStartAfter        :: !(Maybe Text)
+  , _lContinuationToken :: !(Maybe Text)
+  , _lFetchOwner        :: !(Maybe Bool)
+  , _lPrefix            :: !(Maybe Text)
+  , _lEncodingType      :: !(Maybe EncodingType)
+  , _lRequestPayer      :: !(Maybe RequestPayer)
+  , _lMaxKeys           :: !(Maybe Int)
+  , _lDelimiter         :: !(Maybe Delimiter)
+  , _lBucket            :: !BucketName
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'ListObjectsV' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -99,18 +100,19 @@
     :: BucketName -- ^ 'lBucket'
     -> ListObjectsV
 listObjectsV pBucket_ =
-    ListObjectsV'
-    { _lStartAfter = Nothing
-    , _lContinuationToken = Nothing
-    , _lFetchOwner = Nothing
-    , _lPrefix = Nothing
-    , _lEncodingType = Nothing
-    , _lRequestPayer = Nothing
-    , _lMaxKeys = Nothing
-    , _lDelimiter = Nothing
-    , _lBucket = pBucket_
-    }
+  ListObjectsV'
+  { _lStartAfter = Nothing
+  , _lContinuationToken = Nothing
+  , _lFetchOwner = Nothing
+  , _lPrefix = Nothing
+  , _lEncodingType = Nothing
+  , _lRequestPayer = Nothing
+  , _lMaxKeys = Nothing
+  , _lDelimiter = Nothing
+  , _lBucket = pBucket_
+  }
 
+
 -- | StartAfter is where you want Amazon S3 to start listing from. Amazon S3 starts listing after this specified key. StartAfter can be any key in the bucket
 lStartAfter :: Lens' ListObjectsV (Maybe Text)
 lStartAfter = lens _lStartAfter (\ s a -> s{_lStartAfter = a});
@@ -167,9 +169,9 @@
                      <*> (x .@? "Delimiter")
                      <*> (pure (fromEnum s)))
 
-instance Hashable ListObjectsV
+instance Hashable ListObjectsV where
 
-instance NFData ListObjectsV
+instance NFData ListObjectsV where
 
 instance ToHeaders ListObjectsV where
         toHeaders ListObjectsV'{..}
@@ -191,21 +193,22 @@
 
 -- | /See:/ 'listObjectsVResponse' smart constructor.
 data ListObjectsVResponse = ListObjectsVResponse'
-    { _lrsStartAfter            :: !(Maybe Text)
-    , _lrsKeyCount              :: !(Maybe Int)
-    , _lrsContents              :: !(Maybe [Object])
-    , _lrsContinuationToken     :: !(Maybe Text)
-    , _lrsPrefix                :: !(Maybe Text)
-    , _lrsCommonPrefixes        :: !(Maybe [CommonPrefix])
-    , _lrsEncodingType          :: !(Maybe EncodingType)
-    , _lrsName                  :: !(Maybe BucketName)
-    , _lrsNextContinuationToken :: !(Maybe Text)
-    , _lrsMaxKeys               :: !(Maybe Int)
-    , _lrsIsTruncated           :: !(Maybe Bool)
-    , _lrsDelimiter             :: !(Maybe Delimiter)
-    , _lrsResponseStatus        :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _lrsStartAfter            :: !(Maybe Text)
+  , _lrsKeyCount              :: !(Maybe Int)
+  , _lrsContents              :: !(Maybe [Object])
+  , _lrsContinuationToken     :: !(Maybe Text)
+  , _lrsPrefix                :: !(Maybe Text)
+  , _lrsCommonPrefixes        :: !(Maybe [CommonPrefix])
+  , _lrsEncodingType          :: !(Maybe EncodingType)
+  , _lrsName                  :: !(Maybe BucketName)
+  , _lrsNextContinuationToken :: !(Maybe Text)
+  , _lrsMaxKeys               :: !(Maybe Int)
+  , _lrsIsTruncated           :: !(Maybe Bool)
+  , _lrsDelimiter             :: !(Maybe Delimiter)
+  , _lrsResponseStatus        :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'ListObjectsVResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -239,22 +242,23 @@
     :: Int -- ^ 'lrsResponseStatus'
     -> ListObjectsVResponse
 listObjectsVResponse pResponseStatus_ =
-    ListObjectsVResponse'
-    { _lrsStartAfter = Nothing
-    , _lrsKeyCount = Nothing
-    , _lrsContents = Nothing
-    , _lrsContinuationToken = Nothing
-    , _lrsPrefix = Nothing
-    , _lrsCommonPrefixes = Nothing
-    , _lrsEncodingType = Nothing
-    , _lrsName = Nothing
-    , _lrsNextContinuationToken = Nothing
-    , _lrsMaxKeys = Nothing
-    , _lrsIsTruncated = Nothing
-    , _lrsDelimiter = Nothing
-    , _lrsResponseStatus = pResponseStatus_
-    }
+  ListObjectsVResponse'
+  { _lrsStartAfter = Nothing
+  , _lrsKeyCount = Nothing
+  , _lrsContents = Nothing
+  , _lrsContinuationToken = Nothing
+  , _lrsPrefix = Nothing
+  , _lrsCommonPrefixes = Nothing
+  , _lrsEncodingType = Nothing
+  , _lrsName = Nothing
+  , _lrsNextContinuationToken = Nothing
+  , _lrsMaxKeys = Nothing
+  , _lrsIsTruncated = Nothing
+  , _lrsDelimiter = Nothing
+  , _lrsResponseStatus = pResponseStatus_
+  }
 
+
 -- | StartAfter is where you want Amazon S3 to start listing from. Amazon S3 starts listing after this specified key. StartAfter can be any key in the bucket
 lrsStartAfter :: Lens' ListObjectsVResponse (Maybe Text)
 lrsStartAfter = lens _lrsStartAfter (\ s a -> s{_lrsStartAfter = a});
@@ -307,4 +311,4 @@
 lrsResponseStatus :: Lens' ListObjectsVResponse Int
 lrsResponseStatus = lens _lrsResponseStatus (\ s a -> s{_lrsResponseStatus = a});
 
-instance NFData ListObjectsVResponse
+instance NFData ListObjectsVResponse where
diff --git a/gen/Network/AWS/S3/ListParts.hs b/gen/Network/AWS/S3/ListParts.hs
--- a/gen/Network/AWS/S3/ListParts.hs
+++ b/gen/Network/AWS/S3/ListParts.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.ListParts
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -55,24 +55,25 @@
     , lprsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Pager
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Pager
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'listParts' smart constructor.
 data ListParts = ListParts'
-    { _lpMaxParts         :: !(Maybe Int)
-    , _lpRequestPayer     :: !(Maybe RequestPayer)
-    , _lpPartNumberMarker :: !(Maybe Int)
-    , _lpBucket           :: !BucketName
-    , _lpKey              :: !ObjectKey
-    , _lpUploadId         :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _lpMaxParts         :: !(Maybe Int)
+  , _lpRequestPayer     :: !(Maybe RequestPayer)
+  , _lpPartNumberMarker :: !(Maybe Int)
+  , _lpBucket           :: !BucketName
+  , _lpKey              :: !ObjectKey
+  , _lpUploadId         :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'ListParts' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -94,15 +95,16 @@
     -> Text -- ^ 'lpUploadId'
     -> ListParts
 listParts pBucket_ pKey_ pUploadId_ =
-    ListParts'
-    { _lpMaxParts = Nothing
-    , _lpRequestPayer = Nothing
-    , _lpPartNumberMarker = Nothing
-    , _lpBucket = pBucket_
-    , _lpKey = pKey_
-    , _lpUploadId = pUploadId_
-    }
+  ListParts'
+  { _lpMaxParts = Nothing
+  , _lpRequestPayer = Nothing
+  , _lpPartNumberMarker = Nothing
+  , _lpBucket = pBucket_
+  , _lpKey = pKey_
+  , _lpUploadId = pUploadId_
+  }
 
+
 -- | Sets the maximum number of parts to return.
 lpMaxParts :: Lens' ListParts (Maybe Int)
 lpMaxParts = lens _lpMaxParts (\ s a -> s{_lpMaxParts = a});
@@ -159,9 +161,9 @@
                      <*> (x .@? "UploadId")
                      <*> (pure (fromEnum s)))
 
-instance Hashable ListParts
+instance Hashable ListParts where
 
-instance NFData ListParts
+instance NFData ListParts where
 
 instance ToHeaders ListParts where
         toHeaders ListParts'{..}
@@ -180,23 +182,24 @@
 
 -- | /See:/ 'listPartsResponse' smart constructor.
 data ListPartsResponse = ListPartsResponse'
-    { _lprsParts                :: !(Maybe [Part])
-    , _lprsRequestCharged       :: !(Maybe RequestCharged)
-    , _lprsMaxParts             :: !(Maybe Int)
-    , _lprsInitiator            :: !(Maybe Initiator)
-    , _lprsBucket               :: !(Maybe BucketName)
-    , _lprsAbortDate            :: !(Maybe RFC822)
-    , _lprsNextPartNumberMarker :: !(Maybe Int)
-    , _lprsAbortRuleId          :: !(Maybe Text)
-    , _lprsOwner                :: !(Maybe Owner)
-    , _lprsKey                  :: !(Maybe ObjectKey)
-    , _lprsStorageClass         :: !(Maybe StorageClass)
-    , _lprsIsTruncated          :: !(Maybe Bool)
-    , _lprsPartNumberMarker     :: !(Maybe Int)
-    , _lprsUploadId             :: !(Maybe Text)
-    , _lprsResponseStatus       :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _lprsParts                :: !(Maybe [Part])
+  , _lprsRequestCharged       :: !(Maybe RequestCharged)
+  , _lprsMaxParts             :: !(Maybe Int)
+  , _lprsInitiator            :: !(Maybe Initiator)
+  , _lprsBucket               :: !(Maybe BucketName)
+  , _lprsAbortDate            :: !(Maybe RFC822)
+  , _lprsNextPartNumberMarker :: !(Maybe Int)
+  , _lprsAbortRuleId          :: !(Maybe Text)
+  , _lprsOwner                :: !(Maybe Owner)
+  , _lprsKey                  :: !(Maybe ObjectKey)
+  , _lprsStorageClass         :: !(Maybe StorageClass)
+  , _lprsIsTruncated          :: !(Maybe Bool)
+  , _lprsPartNumberMarker     :: !(Maybe Int)
+  , _lprsUploadId             :: !(Maybe Text)
+  , _lprsResponseStatus       :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'ListPartsResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -234,24 +237,25 @@
     :: Int -- ^ 'lprsResponseStatus'
     -> ListPartsResponse
 listPartsResponse pResponseStatus_ =
-    ListPartsResponse'
-    { _lprsParts = Nothing
-    , _lprsRequestCharged = Nothing
-    , _lprsMaxParts = Nothing
-    , _lprsInitiator = Nothing
-    , _lprsBucket = Nothing
-    , _lprsAbortDate = Nothing
-    , _lprsNextPartNumberMarker = Nothing
-    , _lprsAbortRuleId = Nothing
-    , _lprsOwner = Nothing
-    , _lprsKey = Nothing
-    , _lprsStorageClass = Nothing
-    , _lprsIsTruncated = Nothing
-    , _lprsPartNumberMarker = Nothing
-    , _lprsUploadId = Nothing
-    , _lprsResponseStatus = pResponseStatus_
-    }
+  ListPartsResponse'
+  { _lprsParts = Nothing
+  , _lprsRequestCharged = Nothing
+  , _lprsMaxParts = Nothing
+  , _lprsInitiator = Nothing
+  , _lprsBucket = Nothing
+  , _lprsAbortDate = Nothing
+  , _lprsNextPartNumberMarker = Nothing
+  , _lprsAbortRuleId = Nothing
+  , _lprsOwner = Nothing
+  , _lprsKey = Nothing
+  , _lprsStorageClass = Nothing
+  , _lprsIsTruncated = Nothing
+  , _lprsPartNumberMarker = Nothing
+  , _lprsUploadId = Nothing
+  , _lprsResponseStatus = pResponseStatus_
+  }
 
+
 -- | Undocumented member.
 lprsParts :: Lens' ListPartsResponse [Part]
 lprsParts = lens _lprsParts (\ s a -> s{_lprsParts = a}) . _Default . _Coerce;
@@ -312,4 +316,4 @@
 lprsResponseStatus :: Lens' ListPartsResponse Int
 lprsResponseStatus = lens _lprsResponseStatus (\ s a -> s{_lprsResponseStatus = a});
 
-instance NFData ListPartsResponse
+instance NFData ListPartsResponse where
diff --git a/gen/Network/AWS/S3/PutBucketACL.hs b/gen/Network/AWS/S3/PutBucketACL.hs
--- a/gen/Network/AWS/S3/PutBucketACL.hs
+++ b/gen/Network/AWS/S3/PutBucketACL.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.PutBucketACL
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -40,26 +40,27 @@
     , PutBucketACLResponse
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'putBucketACL' smart constructor.
 data PutBucketACL = PutBucketACL'
-    { _pbaGrantReadACP        :: !(Maybe Text)
-    , _pbaGrantWriteACP       :: !(Maybe Text)
-    , _pbaGrantRead           :: !(Maybe Text)
-    , _pbaGrantFullControl    :: !(Maybe Text)
-    , _pbaContentMD5          :: !(Maybe Text)
-    , _pbaAccessControlPolicy :: !(Maybe AccessControlPolicy)
-    , _pbaGrantWrite          :: !(Maybe Text)
-    , _pbaACL                 :: !(Maybe BucketCannedACL)
-    , _pbaBucket              :: !BucketName
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _pbaGrantReadACP        :: !(Maybe Text)
+  , _pbaGrantWriteACP       :: !(Maybe Text)
+  , _pbaGrantRead           :: !(Maybe Text)
+  , _pbaGrantFullControl    :: !(Maybe Text)
+  , _pbaContentMD5          :: !(Maybe Text)
+  , _pbaAccessControlPolicy :: !(Maybe AccessControlPolicy)
+  , _pbaGrantWrite          :: !(Maybe Text)
+  , _pbaACL                 :: !(Maybe BucketCannedACL)
+  , _pbaBucket              :: !BucketName
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'PutBucketACL' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -85,18 +86,19 @@
     :: BucketName -- ^ 'pbaBucket'
     -> PutBucketACL
 putBucketACL pBucket_ =
-    PutBucketACL'
-    { _pbaGrantReadACP = Nothing
-    , _pbaGrantWriteACP = Nothing
-    , _pbaGrantRead = Nothing
-    , _pbaGrantFullControl = Nothing
-    , _pbaContentMD5 = Nothing
-    , _pbaAccessControlPolicy = Nothing
-    , _pbaGrantWrite = Nothing
-    , _pbaACL = Nothing
-    , _pbaBucket = pBucket_
-    }
+  PutBucketACL'
+  { _pbaGrantReadACP = Nothing
+  , _pbaGrantWriteACP = Nothing
+  , _pbaGrantRead = Nothing
+  , _pbaGrantFullControl = Nothing
+  , _pbaContentMD5 = Nothing
+  , _pbaAccessControlPolicy = Nothing
+  , _pbaGrantWrite = Nothing
+  , _pbaACL = Nothing
+  , _pbaBucket = pBucket_
+  }
 
+
 -- | Allows grantee to read the bucket ACL.
 pbaGrantReadACP :: Lens' PutBucketACL (Maybe Text)
 pbaGrantReadACP = lens _pbaGrantReadACP (\ s a -> s{_pbaGrantReadACP = a});
@@ -138,9 +140,9 @@
         request = putXML s3
         response = receiveNull PutBucketACLResponse'
 
-instance Hashable PutBucketACL
+instance Hashable PutBucketACL where
 
-instance NFData PutBucketACL
+instance NFData PutBucketACL where
 
 instance ToElement PutBucketACL where
         toElement
@@ -169,13 +171,15 @@
 
 -- | /See:/ 'putBucketACLResponse' smart constructor.
 data PutBucketACLResponse =
-    PutBucketACLResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
+  PutBucketACLResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'PutBucketACLResponse' with the minimum fields required to make a request.
 --
 putBucketACLResponse
     :: PutBucketACLResponse
 putBucketACLResponse = PutBucketACLResponse'
 
-instance NFData PutBucketACLResponse
+
+instance NFData PutBucketACLResponse where
diff --git a/gen/Network/AWS/S3/PutBucketAccelerateConfiguration.hs b/gen/Network/AWS/S3/PutBucketAccelerateConfiguration.hs
--- a/gen/Network/AWS/S3/PutBucketAccelerateConfiguration.hs
+++ b/gen/Network/AWS/S3/PutBucketAccelerateConfiguration.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.PutBucketAccelerateConfiguration
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -33,19 +33,20 @@
     , PutBucketAccelerateConfigurationResponse
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'putBucketAccelerateConfiguration' smart constructor.
 data PutBucketAccelerateConfiguration = PutBucketAccelerateConfiguration'
-    { _pbacBucket                  :: !BucketName
-    , _pbacAccelerateConfiguration :: !AccelerateConfiguration
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _pbacBucket                  :: !BucketName
+  , _pbacAccelerateConfiguration :: !AccelerateConfiguration
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'PutBucketAccelerateConfiguration' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -58,11 +59,12 @@
     -> AccelerateConfiguration -- ^ 'pbacAccelerateConfiguration'
     -> PutBucketAccelerateConfiguration
 putBucketAccelerateConfiguration pBucket_ pAccelerateConfiguration_ =
-    PutBucketAccelerateConfiguration'
-    { _pbacBucket = pBucket_
-    , _pbacAccelerateConfiguration = pAccelerateConfiguration_
-    }
+  PutBucketAccelerateConfiguration'
+  { _pbacBucket = pBucket_
+  , _pbacAccelerateConfiguration = pAccelerateConfiguration_
+  }
 
+
 -- | Name of the bucket for which the accelerate configuration is set.
 pbacBucket :: Lens' PutBucketAccelerateConfiguration BucketName
 pbacBucket = lens _pbacBucket (\ s a -> s{_pbacBucket = a});
@@ -81,8 +83,10 @@
               PutBucketAccelerateConfigurationResponse'
 
 instance Hashable PutBucketAccelerateConfiguration
+         where
 
 instance NFData PutBucketAccelerateConfiguration
+         where
 
 instance ToElement PutBucketAccelerateConfiguration
          where
@@ -107,15 +111,18 @@
 
 -- | /See:/ 'putBucketAccelerateConfigurationResponse' smart constructor.
 data PutBucketAccelerateConfigurationResponse =
-    PutBucketAccelerateConfigurationResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
+  PutBucketAccelerateConfigurationResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'PutBucketAccelerateConfigurationResponse' with the minimum fields required to make a request.
 --
 putBucketAccelerateConfigurationResponse
     :: PutBucketAccelerateConfigurationResponse
 putBucketAccelerateConfigurationResponse =
-    PutBucketAccelerateConfigurationResponse'
+  PutBucketAccelerateConfigurationResponse'
 
+
 instance NFData
-         PutBucketAccelerateConfigurationResponse
+           PutBucketAccelerateConfigurationResponse
+         where
diff --git a/gen/Network/AWS/S3/PutBucketAnalyticsConfiguration.hs b/gen/Network/AWS/S3/PutBucketAnalyticsConfiguration.hs
--- a/gen/Network/AWS/S3/PutBucketAnalyticsConfiguration.hs
+++ b/gen/Network/AWS/S3/PutBucketAnalyticsConfiguration.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.PutBucketAnalyticsConfiguration
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -34,20 +34,21 @@
     , PutBucketAnalyticsConfigurationResponse
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'putBucketAnalyticsConfiguration' smart constructor.
 data PutBucketAnalyticsConfiguration = PutBucketAnalyticsConfiguration'
-    { _pBucket                 :: !BucketName
-    , _pId                     :: !Text
-    , _pAnalyticsConfiguration :: !AnalyticsConfiguration
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _pBucket                 :: !BucketName
+  , _pId                     :: !Text
+  , _pAnalyticsConfiguration :: !AnalyticsConfiguration
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'PutBucketAnalyticsConfiguration' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -63,12 +64,13 @@
     -> AnalyticsConfiguration -- ^ 'pAnalyticsConfiguration'
     -> PutBucketAnalyticsConfiguration
 putBucketAnalyticsConfiguration pBucket_ pId_ pAnalyticsConfiguration_ =
-    PutBucketAnalyticsConfiguration'
-    { _pBucket = pBucket_
-    , _pId = pId_
-    , _pAnalyticsConfiguration = pAnalyticsConfiguration_
-    }
+  PutBucketAnalyticsConfiguration'
+  { _pBucket = pBucket_
+  , _pId = pId_
+  , _pAnalyticsConfiguration = pAnalyticsConfiguration_
+  }
 
+
 -- | The name of the bucket to which an analytics configuration is stored.
 pBucket :: Lens' PutBucketAnalyticsConfiguration BucketName
 pBucket = lens _pBucket (\ s a -> s{_pBucket = a});
@@ -91,8 +93,9 @@
               PutBucketAnalyticsConfigurationResponse'
 
 instance Hashable PutBucketAnalyticsConfiguration
+         where
 
-instance NFData PutBucketAnalyticsConfiguration
+instance NFData PutBucketAnalyticsConfiguration where
 
 instance ToElement PutBucketAnalyticsConfiguration
          where
@@ -117,15 +120,18 @@
 
 -- | /See:/ 'putBucketAnalyticsConfigurationResponse' smart constructor.
 data PutBucketAnalyticsConfigurationResponse =
-    PutBucketAnalyticsConfigurationResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
+  PutBucketAnalyticsConfigurationResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'PutBucketAnalyticsConfigurationResponse' with the minimum fields required to make a request.
 --
 putBucketAnalyticsConfigurationResponse
     :: PutBucketAnalyticsConfigurationResponse
 putBucketAnalyticsConfigurationResponse =
-    PutBucketAnalyticsConfigurationResponse'
+  PutBucketAnalyticsConfigurationResponse'
 
+
 instance NFData
-         PutBucketAnalyticsConfigurationResponse
+           PutBucketAnalyticsConfigurationResponse
+         where
diff --git a/gen/Network/AWS/S3/PutBucketCORS.hs b/gen/Network/AWS/S3/PutBucketCORS.hs
--- a/gen/Network/AWS/S3/PutBucketCORS.hs
+++ b/gen/Network/AWS/S3/PutBucketCORS.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.PutBucketCORS
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -34,20 +34,21 @@
     , PutBucketCORSResponse
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'putBucketCORS' smart constructor.
 data PutBucketCORS = PutBucketCORS'
-    { _pbcContentMD5        :: !(Maybe Text)
-    , _pbcBucket            :: !BucketName
-    , _pbcCORSConfiguration :: !CORSConfiguration
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _pbcContentMD5        :: !(Maybe Text)
+  , _pbcBucket            :: !BucketName
+  , _pbcCORSConfiguration :: !CORSConfiguration
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'PutBucketCORS' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -62,12 +63,13 @@
     -> CORSConfiguration -- ^ 'pbcCORSConfiguration'
     -> PutBucketCORS
 putBucketCORS pBucket_ pCORSConfiguration_ =
-    PutBucketCORS'
-    { _pbcContentMD5 = Nothing
-    , _pbcBucket = pBucket_
-    , _pbcCORSConfiguration = pCORSConfiguration_
-    }
+  PutBucketCORS'
+  { _pbcContentMD5 = Nothing
+  , _pbcBucket = pBucket_
+  , _pbcCORSConfiguration = pCORSConfiguration_
+  }
 
+
 -- | Undocumented member.
 pbcContentMD5 :: Lens' PutBucketCORS (Maybe Text)
 pbcContentMD5 = lens _pbcContentMD5 (\ s a -> s{_pbcContentMD5 = a});
@@ -85,9 +87,9 @@
         request = putXML s3
         response = receiveNull PutBucketCORSResponse'
 
-instance Hashable PutBucketCORS
+instance Hashable PutBucketCORS where
 
-instance NFData PutBucketCORS
+instance NFData PutBucketCORS where
 
 instance ToElement PutBucketCORS where
         toElement
@@ -109,13 +111,15 @@
 
 -- | /See:/ 'putBucketCORSResponse' smart constructor.
 data PutBucketCORSResponse =
-    PutBucketCORSResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
+  PutBucketCORSResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'PutBucketCORSResponse' with the minimum fields required to make a request.
 --
 putBucketCORSResponse
     :: PutBucketCORSResponse
 putBucketCORSResponse = PutBucketCORSResponse'
 
-instance NFData PutBucketCORSResponse
+
+instance NFData PutBucketCORSResponse where
diff --git a/gen/Network/AWS/S3/PutBucketEncryption.hs b/gen/Network/AWS/S3/PutBucketEncryption.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/S3/PutBucketEncryption.hs
@@ -0,0 +1,126 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.S3.PutBucketEncryption
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new server-side encryption configuration (or replaces an existing one, if present).
+module Network.AWS.S3.PutBucketEncryption
+    (
+    -- * Creating a Request
+      putBucketEncryption
+    , PutBucketEncryption
+    -- * Request Lenses
+    , pbeContentMD5
+    , pbeBucket
+    , pbeServerSideEncryptionConfiguration
+
+    -- * Destructuring the Response
+    , putBucketEncryptionResponse
+    , PutBucketEncryptionResponse
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
+
+-- | /See:/ 'putBucketEncryption' smart constructor.
+data PutBucketEncryption = PutBucketEncryption'
+  { _pbeContentMD5                        :: !(Maybe Text)
+  , _pbeBucket                            :: !BucketName
+  , _pbeServerSideEncryptionConfiguration :: !ServerSideEncryptionConfiguration
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'PutBucketEncryption' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pbeContentMD5' - The base64-encoded 128-bit MD5 digest of the server-side encryption configuration.
+--
+-- * 'pbeBucket' - The name of the bucket for which the server-side encryption configuration is set.
+--
+-- * 'pbeServerSideEncryptionConfiguration' - Undocumented member.
+putBucketEncryption
+    :: BucketName -- ^ 'pbeBucket'
+    -> ServerSideEncryptionConfiguration -- ^ 'pbeServerSideEncryptionConfiguration'
+    -> PutBucketEncryption
+putBucketEncryption pBucket_ pServerSideEncryptionConfiguration_ =
+  PutBucketEncryption'
+  { _pbeContentMD5 = Nothing
+  , _pbeBucket = pBucket_
+  , _pbeServerSideEncryptionConfiguration = pServerSideEncryptionConfiguration_
+  }
+
+
+-- | The base64-encoded 128-bit MD5 digest of the server-side encryption configuration.
+pbeContentMD5 :: Lens' PutBucketEncryption (Maybe Text)
+pbeContentMD5 = lens _pbeContentMD5 (\ s a -> s{_pbeContentMD5 = a});
+
+-- | The name of the bucket for which the server-side encryption configuration is set.
+pbeBucket :: Lens' PutBucketEncryption BucketName
+pbeBucket = lens _pbeBucket (\ s a -> s{_pbeBucket = a});
+
+-- | Undocumented member.
+pbeServerSideEncryptionConfiguration :: Lens' PutBucketEncryption ServerSideEncryptionConfiguration
+pbeServerSideEncryptionConfiguration = lens _pbeServerSideEncryptionConfiguration (\ s a -> s{_pbeServerSideEncryptionConfiguration = a});
+
+instance AWSRequest PutBucketEncryption where
+        type Rs PutBucketEncryption =
+             PutBucketEncryptionResponse
+        request = putXML s3
+        response = receiveNull PutBucketEncryptionResponse'
+
+instance Hashable PutBucketEncryption where
+
+instance NFData PutBucketEncryption where
+
+instance ToElement PutBucketEncryption where
+        toElement
+          = mkElement
+              "{http://s3.amazonaws.com/doc/2006-03-01/}ServerSideEncryptionConfiguration"
+              .
+              _pbeServerSideEncryptionConfiguration
+
+instance ToHeaders PutBucketEncryption where
+        toHeaders PutBucketEncryption'{..}
+          = mconcat ["Content-MD5" =# _pbeContentMD5]
+
+instance ToPath PutBucketEncryption where
+        toPath PutBucketEncryption'{..}
+          = mconcat ["/", toBS _pbeBucket]
+
+instance ToQuery PutBucketEncryption where
+        toQuery = const (mconcat ["encryption"])
+
+-- | /See:/ 'putBucketEncryptionResponse' smart constructor.
+data PutBucketEncryptionResponse =
+  PutBucketEncryptionResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'PutBucketEncryptionResponse' with the minimum fields required to make a request.
+--
+putBucketEncryptionResponse
+    :: PutBucketEncryptionResponse
+putBucketEncryptionResponse = PutBucketEncryptionResponse'
+
+
+instance NFData PutBucketEncryptionResponse where
diff --git a/gen/Network/AWS/S3/PutBucketInventoryConfiguration.hs b/gen/Network/AWS/S3/PutBucketInventoryConfiguration.hs
--- a/gen/Network/AWS/S3/PutBucketInventoryConfiguration.hs
+++ b/gen/Network/AWS/S3/PutBucketInventoryConfiguration.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.PutBucketInventoryConfiguration
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -34,20 +34,21 @@
     , PutBucketInventoryConfigurationResponse
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'putBucketInventoryConfiguration' smart constructor.
 data PutBucketInventoryConfiguration = PutBucketInventoryConfiguration'
-    { _pbicBucket                 :: !BucketName
-    , _pbicId                     :: !Text
-    , _pbicInventoryConfiguration :: !InventoryConfiguration
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _pbicBucket                 :: !BucketName
+  , _pbicId                     :: !Text
+  , _pbicInventoryConfiguration :: !InventoryConfiguration
+  } deriving (Eq, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'PutBucketInventoryConfiguration' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -63,12 +64,13 @@
     -> InventoryConfiguration -- ^ 'pbicInventoryConfiguration'
     -> PutBucketInventoryConfiguration
 putBucketInventoryConfiguration pBucket_ pId_ pInventoryConfiguration_ =
-    PutBucketInventoryConfiguration'
-    { _pbicBucket = pBucket_
-    , _pbicId = pId_
-    , _pbicInventoryConfiguration = pInventoryConfiguration_
-    }
+  PutBucketInventoryConfiguration'
+  { _pbicBucket = pBucket_
+  , _pbicId = pId_
+  , _pbicInventoryConfiguration = pInventoryConfiguration_
+  }
 
+
 -- | The name of the bucket where the inventory configuration will be stored.
 pbicBucket :: Lens' PutBucketInventoryConfiguration BucketName
 pbicBucket = lens _pbicBucket (\ s a -> s{_pbicBucket = a});
@@ -91,8 +93,9 @@
               PutBucketInventoryConfigurationResponse'
 
 instance Hashable PutBucketInventoryConfiguration
+         where
 
-instance NFData PutBucketInventoryConfiguration
+instance NFData PutBucketInventoryConfiguration where
 
 instance ToElement PutBucketInventoryConfiguration
          where
@@ -117,15 +120,18 @@
 
 -- | /See:/ 'putBucketInventoryConfigurationResponse' smart constructor.
 data PutBucketInventoryConfigurationResponse =
-    PutBucketInventoryConfigurationResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
+  PutBucketInventoryConfigurationResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'PutBucketInventoryConfigurationResponse' with the minimum fields required to make a request.
 --
 putBucketInventoryConfigurationResponse
     :: PutBucketInventoryConfigurationResponse
 putBucketInventoryConfigurationResponse =
-    PutBucketInventoryConfigurationResponse'
+  PutBucketInventoryConfigurationResponse'
 
+
 instance NFData
-         PutBucketInventoryConfigurationResponse
+           PutBucketInventoryConfigurationResponse
+         where
diff --git a/gen/Network/AWS/S3/PutBucketLifecycleConfiguration.hs b/gen/Network/AWS/S3/PutBucketLifecycleConfiguration.hs
--- a/gen/Network/AWS/S3/PutBucketLifecycleConfiguration.hs
+++ b/gen/Network/AWS/S3/PutBucketLifecycleConfiguration.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.PutBucketLifecycleConfiguration
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -33,19 +33,20 @@
     , PutBucketLifecycleConfigurationResponse
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'putBucketLifecycleConfiguration' smart constructor.
 data PutBucketLifecycleConfiguration = PutBucketLifecycleConfiguration'
-    { _pblcLifecycleConfiguration :: !(Maybe BucketLifecycleConfiguration)
-    , _pblcBucket                 :: !BucketName
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _pblcLifecycleConfiguration :: !(Maybe BucketLifecycleConfiguration)
+  , _pblcBucket                 :: !BucketName
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'PutBucketLifecycleConfiguration' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -57,11 +58,10 @@
     :: BucketName -- ^ 'pblcBucket'
     -> PutBucketLifecycleConfiguration
 putBucketLifecycleConfiguration pBucket_ =
-    PutBucketLifecycleConfiguration'
-    { _pblcLifecycleConfiguration = Nothing
-    , _pblcBucket = pBucket_
-    }
+  PutBucketLifecycleConfiguration'
+  {_pblcLifecycleConfiguration = Nothing, _pblcBucket = pBucket_}
 
+
 -- | Undocumented member.
 pblcLifecycleConfiguration :: Lens' PutBucketLifecycleConfiguration (Maybe BucketLifecycleConfiguration)
 pblcLifecycleConfiguration = lens _pblcLifecycleConfiguration (\ s a -> s{_pblcLifecycleConfiguration = a});
@@ -80,8 +80,9 @@
               PutBucketLifecycleConfigurationResponse'
 
 instance Hashable PutBucketLifecycleConfiguration
+         where
 
-instance NFData PutBucketLifecycleConfiguration
+instance NFData PutBucketLifecycleConfiguration where
 
 instance ToElement PutBucketLifecycleConfiguration
          where
@@ -105,15 +106,18 @@
 
 -- | /See:/ 'putBucketLifecycleConfigurationResponse' smart constructor.
 data PutBucketLifecycleConfigurationResponse =
-    PutBucketLifecycleConfigurationResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
+  PutBucketLifecycleConfigurationResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'PutBucketLifecycleConfigurationResponse' with the minimum fields required to make a request.
 --
 putBucketLifecycleConfigurationResponse
     :: PutBucketLifecycleConfigurationResponse
 putBucketLifecycleConfigurationResponse =
-    PutBucketLifecycleConfigurationResponse'
+  PutBucketLifecycleConfigurationResponse'
 
+
 instance NFData
-         PutBucketLifecycleConfigurationResponse
+           PutBucketLifecycleConfigurationResponse
+         where
diff --git a/gen/Network/AWS/S3/PutBucketLogging.hs b/gen/Network/AWS/S3/PutBucketLogging.hs
--- a/gen/Network/AWS/S3/PutBucketLogging.hs
+++ b/gen/Network/AWS/S3/PutBucketLogging.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.PutBucketLogging
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -34,20 +34,21 @@
     , PutBucketLoggingResponse
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'putBucketLogging' smart constructor.
 data PutBucketLogging = PutBucketLogging'
-    { _pblContentMD5          :: !(Maybe Text)
-    , _pblBucket              :: !BucketName
-    , _pblBucketLoggingStatus :: !BucketLoggingStatus
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _pblContentMD5          :: !(Maybe Text)
+  , _pblBucket              :: !BucketName
+  , _pblBucketLoggingStatus :: !BucketLoggingStatus
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'PutBucketLogging' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -62,12 +63,13 @@
     -> BucketLoggingStatus -- ^ 'pblBucketLoggingStatus'
     -> PutBucketLogging
 putBucketLogging pBucket_ pBucketLoggingStatus_ =
-    PutBucketLogging'
-    { _pblContentMD5 = Nothing
-    , _pblBucket = pBucket_
-    , _pblBucketLoggingStatus = pBucketLoggingStatus_
-    }
+  PutBucketLogging'
+  { _pblContentMD5 = Nothing
+  , _pblBucket = pBucket_
+  , _pblBucketLoggingStatus = pBucketLoggingStatus_
+  }
 
+
 -- | Undocumented member.
 pblContentMD5 :: Lens' PutBucketLogging (Maybe Text)
 pblContentMD5 = lens _pblContentMD5 (\ s a -> s{_pblContentMD5 = a});
@@ -85,9 +87,9 @@
         request = putXML s3
         response = receiveNull PutBucketLoggingResponse'
 
-instance Hashable PutBucketLogging
+instance Hashable PutBucketLogging where
 
-instance NFData PutBucketLogging
+instance NFData PutBucketLogging where
 
 instance ToElement PutBucketLogging where
         toElement
@@ -109,13 +111,15 @@
 
 -- | /See:/ 'putBucketLoggingResponse' smart constructor.
 data PutBucketLoggingResponse =
-    PutBucketLoggingResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
+  PutBucketLoggingResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'PutBucketLoggingResponse' with the minimum fields required to make a request.
 --
 putBucketLoggingResponse
     :: PutBucketLoggingResponse
 putBucketLoggingResponse = PutBucketLoggingResponse'
 
-instance NFData PutBucketLoggingResponse
+
+instance NFData PutBucketLoggingResponse where
diff --git a/gen/Network/AWS/S3/PutBucketMetricsConfiguration.hs b/gen/Network/AWS/S3/PutBucketMetricsConfiguration.hs
--- a/gen/Network/AWS/S3/PutBucketMetricsConfiguration.hs
+++ b/gen/Network/AWS/S3/PutBucketMetricsConfiguration.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.PutBucketMetricsConfiguration
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -34,20 +34,21 @@
     , PutBucketMetricsConfigurationResponse
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'putBucketMetricsConfiguration' smart constructor.
 data PutBucketMetricsConfiguration = PutBucketMetricsConfiguration'
-    { _pbmcBucket               :: !BucketName
-    , _pbmcId                   :: !Text
-    , _pbmcMetricsConfiguration :: !MetricsConfiguration
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _pbmcBucket               :: !BucketName
+  , _pbmcId                   :: !Text
+  , _pbmcMetricsConfiguration :: !MetricsConfiguration
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'PutBucketMetricsConfiguration' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -63,12 +64,13 @@
     -> MetricsConfiguration -- ^ 'pbmcMetricsConfiguration'
     -> PutBucketMetricsConfiguration
 putBucketMetricsConfiguration pBucket_ pId_ pMetricsConfiguration_ =
-    PutBucketMetricsConfiguration'
-    { _pbmcBucket = pBucket_
-    , _pbmcId = pId_
-    , _pbmcMetricsConfiguration = pMetricsConfiguration_
-    }
+  PutBucketMetricsConfiguration'
+  { _pbmcBucket = pBucket_
+  , _pbmcId = pId_
+  , _pbmcMetricsConfiguration = pMetricsConfiguration_
+  }
 
+
 -- | The name of the bucket for which the metrics configuration is set.
 pbmcBucket :: Lens' PutBucketMetricsConfiguration BucketName
 pbmcBucket = lens _pbmcBucket (\ s a -> s{_pbmcBucket = a});
@@ -89,9 +91,9 @@
         response
           = receiveNull PutBucketMetricsConfigurationResponse'
 
-instance Hashable PutBucketMetricsConfiguration
+instance Hashable PutBucketMetricsConfiguration where
 
-instance NFData PutBucketMetricsConfiguration
+instance NFData PutBucketMetricsConfiguration where
 
 instance ToElement PutBucketMetricsConfiguration
          where
@@ -115,13 +117,16 @@
 
 -- | /See:/ 'putBucketMetricsConfigurationResponse' smart constructor.
 data PutBucketMetricsConfigurationResponse =
-    PutBucketMetricsConfigurationResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
+  PutBucketMetricsConfigurationResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'PutBucketMetricsConfigurationResponse' with the minimum fields required to make a request.
 --
 putBucketMetricsConfigurationResponse
     :: PutBucketMetricsConfigurationResponse
 putBucketMetricsConfigurationResponse = PutBucketMetricsConfigurationResponse'
 
+
 instance NFData PutBucketMetricsConfigurationResponse
+         where
diff --git a/gen/Network/AWS/S3/PutBucketNotificationConfiguration.hs b/gen/Network/AWS/S3/PutBucketNotificationConfiguration.hs
--- a/gen/Network/AWS/S3/PutBucketNotificationConfiguration.hs
+++ b/gen/Network/AWS/S3/PutBucketNotificationConfiguration.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.PutBucketNotificationConfiguration
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -33,19 +33,20 @@
     , PutBucketNotificationConfigurationResponse
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'putBucketNotificationConfiguration' smart constructor.
 data PutBucketNotificationConfiguration = PutBucketNotificationConfiguration'
-    { _pbncBucket                    :: !BucketName
-    , _pbncNotificationConfiguration :: !NotificationConfiguration
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _pbncBucket                    :: !BucketName
+  , _pbncNotificationConfiguration :: !NotificationConfiguration
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'PutBucketNotificationConfiguration' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -58,11 +59,12 @@
     -> NotificationConfiguration -- ^ 'pbncNotificationConfiguration'
     -> PutBucketNotificationConfiguration
 putBucketNotificationConfiguration pBucket_ pNotificationConfiguration_ =
-    PutBucketNotificationConfiguration'
-    { _pbncBucket = pBucket_
-    , _pbncNotificationConfiguration = pNotificationConfiguration_
-    }
+  PutBucketNotificationConfiguration'
+  { _pbncBucket = pBucket_
+  , _pbncNotificationConfiguration = pNotificationConfiguration_
+  }
 
+
 -- | Undocumented member.
 pbncBucket :: Lens' PutBucketNotificationConfiguration BucketName
 pbncBucket = lens _pbncBucket (\ s a -> s{_pbncBucket = a});
@@ -72,7 +74,8 @@
 pbncNotificationConfiguration = lens _pbncNotificationConfiguration (\ s a -> s{_pbncNotificationConfiguration = a});
 
 instance AWSRequest
-         PutBucketNotificationConfiguration where
+           PutBucketNotificationConfiguration
+         where
         type Rs PutBucketNotificationConfiguration =
              PutBucketNotificationConfigurationResponse
         request = putXML s3
@@ -81,8 +84,10 @@
               PutBucketNotificationConfigurationResponse'
 
 instance Hashable PutBucketNotificationConfiguration
+         where
 
 instance NFData PutBucketNotificationConfiguration
+         where
 
 instance ToElement PutBucketNotificationConfiguration
          where
@@ -107,15 +112,18 @@
 
 -- | /See:/ 'putBucketNotificationConfigurationResponse' smart constructor.
 data PutBucketNotificationConfigurationResponse =
-    PutBucketNotificationConfigurationResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
+  PutBucketNotificationConfigurationResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'PutBucketNotificationConfigurationResponse' with the minimum fields required to make a request.
 --
 putBucketNotificationConfigurationResponse
     :: PutBucketNotificationConfigurationResponse
 putBucketNotificationConfigurationResponse =
-    PutBucketNotificationConfigurationResponse'
+  PutBucketNotificationConfigurationResponse'
 
+
 instance NFData
-         PutBucketNotificationConfigurationResponse
+           PutBucketNotificationConfigurationResponse
+         where
diff --git a/gen/Network/AWS/S3/PutBucketPolicy.hs b/gen/Network/AWS/S3/PutBucketPolicy.hs
--- a/gen/Network/AWS/S3/PutBucketPolicy.hs
+++ b/gen/Network/AWS/S3/PutBucketPolicy.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.PutBucketPolicy
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -25,6 +25,7 @@
       putBucketPolicy
     , PutBucketPolicy
     -- * Request Lenses
+    , pbpConfirmRemoveSelfBucketAccess
     , pbpContentMD5
     , pbpBucket
     , pbpPolicy
@@ -34,24 +35,28 @@
     , PutBucketPolicyResponse
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'putBucketPolicy' smart constructor.
 data PutBucketPolicy = PutBucketPolicy'
-    { _pbpContentMD5 :: !(Maybe Text)
-    , _pbpBucket     :: !BucketName
-    , _pbpPolicy     :: !(HashMap Text Value)
-    } deriving (Eq,Show,Data,Typeable,Generic)
+  { _pbpConfirmRemoveSelfBucketAccess :: !(Maybe Bool)
+  , _pbpContentMD5                    :: !(Maybe Text)
+  , _pbpBucket                        :: !BucketName
+  , _pbpPolicy                        :: !(HashMap Text Value)
+  } deriving (Eq, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'PutBucketPolicy' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
+-- * 'pbpConfirmRemoveSelfBucketAccess' - Set this parameter to true to confirm that you want to remove your permissions to change this bucket policy in the future.
+--
 -- * 'pbpContentMD5' - Undocumented member.
 --
 -- * 'pbpBucket' - Undocumented member.
@@ -62,12 +67,18 @@
     -> HashMap Text Value -- ^ 'pbpPolicy'
     -> PutBucketPolicy
 putBucketPolicy pBucket_ pPolicy_ =
-    PutBucketPolicy'
-    { _pbpContentMD5 = Nothing
-    , _pbpBucket = pBucket_
-    , _pbpPolicy = pPolicy_
-    }
+  PutBucketPolicy'
+  { _pbpConfirmRemoveSelfBucketAccess = Nothing
+  , _pbpContentMD5 = Nothing
+  , _pbpBucket = pBucket_
+  , _pbpPolicy = pPolicy_
+  }
 
+
+-- | Set this parameter to true to confirm that you want to remove your permissions to change this bucket policy in the future.
+pbpConfirmRemoveSelfBucketAccess :: Lens' PutBucketPolicy (Maybe Bool)
+pbpConfirmRemoveSelfBucketAccess = lens _pbpConfirmRemoveSelfBucketAccess (\ s a -> s{_pbpConfirmRemoveSelfBucketAccess = a});
+
 -- | Undocumented member.
 pbpContentMD5 :: Lens' PutBucketPolicy (Maybe Text)
 pbpContentMD5 = lens _pbpContentMD5 (\ s a -> s{_pbpContentMD5 = a});
@@ -85,16 +96,19 @@
         request = contentMD5Header . putBody s3
         response = receiveNull PutBucketPolicyResponse'
 
-instance Hashable PutBucketPolicy
+instance Hashable PutBucketPolicy where
 
-instance NFData PutBucketPolicy
+instance NFData PutBucketPolicy where
 
 instance ToBody PutBucketPolicy where
         toBody = toBody . _pbpPolicy
 
 instance ToHeaders PutBucketPolicy where
         toHeaders PutBucketPolicy'{..}
-          = mconcat ["Content-MD5" =# _pbpContentMD5]
+          = mconcat
+              ["x-amz-confirm-remove-self-bucket-access" =#
+                 _pbpConfirmRemoveSelfBucketAccess,
+               "Content-MD5" =# _pbpContentMD5]
 
 instance ToPath PutBucketPolicy where
         toPath PutBucketPolicy'{..}
@@ -105,13 +119,15 @@
 
 -- | /See:/ 'putBucketPolicyResponse' smart constructor.
 data PutBucketPolicyResponse =
-    PutBucketPolicyResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
+  PutBucketPolicyResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'PutBucketPolicyResponse' with the minimum fields required to make a request.
 --
 putBucketPolicyResponse
     :: PutBucketPolicyResponse
 putBucketPolicyResponse = PutBucketPolicyResponse'
 
-instance NFData PutBucketPolicyResponse
+
+instance NFData PutBucketPolicyResponse where
diff --git a/gen/Network/AWS/S3/PutBucketReplication.hs b/gen/Network/AWS/S3/PutBucketReplication.hs
--- a/gen/Network/AWS/S3/PutBucketReplication.hs
+++ b/gen/Network/AWS/S3/PutBucketReplication.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.PutBucketReplication
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -34,20 +34,21 @@
     , PutBucketReplicationResponse
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'putBucketReplication' smart constructor.
 data PutBucketReplication = PutBucketReplication'
-    { _pbrContentMD5               :: !(Maybe Text)
-    , _pbrBucket                   :: !BucketName
-    , _pbrReplicationConfiguration :: !ReplicationConfiguration
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _pbrContentMD5               :: !(Maybe Text)
+  , _pbrBucket                   :: !BucketName
+  , _pbrReplicationConfiguration :: !ReplicationConfiguration
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'PutBucketReplication' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -62,12 +63,13 @@
     -> ReplicationConfiguration -- ^ 'pbrReplicationConfiguration'
     -> PutBucketReplication
 putBucketReplication pBucket_ pReplicationConfiguration_ =
-    PutBucketReplication'
-    { _pbrContentMD5 = Nothing
-    , _pbrBucket = pBucket_
-    , _pbrReplicationConfiguration = pReplicationConfiguration_
-    }
+  PutBucketReplication'
+  { _pbrContentMD5 = Nothing
+  , _pbrBucket = pBucket_
+  , _pbrReplicationConfiguration = pReplicationConfiguration_
+  }
 
+
 -- | Undocumented member.
 pbrContentMD5 :: Lens' PutBucketReplication (Maybe Text)
 pbrContentMD5 = lens _pbrContentMD5 (\ s a -> s{_pbrContentMD5 = a});
@@ -86,9 +88,9 @@
         request = putXML s3
         response = receiveNull PutBucketReplicationResponse'
 
-instance Hashable PutBucketReplication
+instance Hashable PutBucketReplication where
 
-instance NFData PutBucketReplication
+instance NFData PutBucketReplication where
 
 instance ToElement PutBucketReplication where
         toElement
@@ -110,13 +112,15 @@
 
 -- | /See:/ 'putBucketReplicationResponse' smart constructor.
 data PutBucketReplicationResponse =
-    PutBucketReplicationResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
+  PutBucketReplicationResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'PutBucketReplicationResponse' with the minimum fields required to make a request.
 --
 putBucketReplicationResponse
     :: PutBucketReplicationResponse
 putBucketReplicationResponse = PutBucketReplicationResponse'
 
-instance NFData PutBucketReplicationResponse
+
+instance NFData PutBucketReplicationResponse where
diff --git a/gen/Network/AWS/S3/PutBucketRequestPayment.hs b/gen/Network/AWS/S3/PutBucketRequestPayment.hs
--- a/gen/Network/AWS/S3/PutBucketRequestPayment.hs
+++ b/gen/Network/AWS/S3/PutBucketRequestPayment.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.PutBucketRequestPayment
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -34,20 +34,21 @@
     , PutBucketRequestPaymentResponse
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'putBucketRequestPayment' smart constructor.
 data PutBucketRequestPayment = PutBucketRequestPayment'
-    { _pbrpContentMD5                  :: !(Maybe Text)
-    , _pbrpBucket                      :: !BucketName
-    , _pbrpRequestPaymentConfiguration :: !RequestPaymentConfiguration
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _pbrpContentMD5                  :: !(Maybe Text)
+  , _pbrpBucket                      :: !BucketName
+  , _pbrpRequestPaymentConfiguration :: !RequestPaymentConfiguration
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'PutBucketRequestPayment' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -62,12 +63,13 @@
     -> RequestPaymentConfiguration -- ^ 'pbrpRequestPaymentConfiguration'
     -> PutBucketRequestPayment
 putBucketRequestPayment pBucket_ pRequestPaymentConfiguration_ =
-    PutBucketRequestPayment'
-    { _pbrpContentMD5 = Nothing
-    , _pbrpBucket = pBucket_
-    , _pbrpRequestPaymentConfiguration = pRequestPaymentConfiguration_
-    }
+  PutBucketRequestPayment'
+  { _pbrpContentMD5 = Nothing
+  , _pbrpBucket = pBucket_
+  , _pbrpRequestPaymentConfiguration = pRequestPaymentConfiguration_
+  }
 
+
 -- | Undocumented member.
 pbrpContentMD5 :: Lens' PutBucketRequestPayment (Maybe Text)
 pbrpContentMD5 = lens _pbrpContentMD5 (\ s a -> s{_pbrpContentMD5 = a});
@@ -87,9 +89,9 @@
         response
           = receiveNull PutBucketRequestPaymentResponse'
 
-instance Hashable PutBucketRequestPayment
+instance Hashable PutBucketRequestPayment where
 
-instance NFData PutBucketRequestPayment
+instance NFData PutBucketRequestPayment where
 
 instance ToElement PutBucketRequestPayment where
         toElement
@@ -111,13 +113,15 @@
 
 -- | /See:/ 'putBucketRequestPaymentResponse' smart constructor.
 data PutBucketRequestPaymentResponse =
-    PutBucketRequestPaymentResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
+  PutBucketRequestPaymentResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'PutBucketRequestPaymentResponse' with the minimum fields required to make a request.
 --
 putBucketRequestPaymentResponse
     :: PutBucketRequestPaymentResponse
 putBucketRequestPaymentResponse = PutBucketRequestPaymentResponse'
 
-instance NFData PutBucketRequestPaymentResponse
+
+instance NFData PutBucketRequestPaymentResponse where
diff --git a/gen/Network/AWS/S3/PutBucketTagging.hs b/gen/Network/AWS/S3/PutBucketTagging.hs
--- a/gen/Network/AWS/S3/PutBucketTagging.hs
+++ b/gen/Network/AWS/S3/PutBucketTagging.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.PutBucketTagging
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -34,20 +34,21 @@
     , PutBucketTaggingResponse
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'putBucketTagging' smart constructor.
 data PutBucketTagging = PutBucketTagging'
-    { _pbtContentMD5 :: !(Maybe Text)
-    , _pbtBucket     :: !BucketName
-    , _pbtTagging    :: !Tagging
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _pbtContentMD5 :: !(Maybe Text)
+  , _pbtBucket     :: !BucketName
+  , _pbtTagging    :: !Tagging
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'PutBucketTagging' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -62,12 +63,10 @@
     -> Tagging -- ^ 'pbtTagging'
     -> PutBucketTagging
 putBucketTagging pBucket_ pTagging_ =
-    PutBucketTagging'
-    { _pbtContentMD5 = Nothing
-    , _pbtBucket = pBucket_
-    , _pbtTagging = pTagging_
-    }
+  PutBucketTagging'
+  {_pbtContentMD5 = Nothing, _pbtBucket = pBucket_, _pbtTagging = pTagging_}
 
+
 -- | Undocumented member.
 pbtContentMD5 :: Lens' PutBucketTagging (Maybe Text)
 pbtContentMD5 = lens _pbtContentMD5 (\ s a -> s{_pbtContentMD5 = a});
@@ -85,9 +84,9 @@
         request = contentMD5Header . putXML s3
         response = receiveNull PutBucketTaggingResponse'
 
-instance Hashable PutBucketTagging
+instance Hashable PutBucketTagging where
 
-instance NFData PutBucketTagging
+instance NFData PutBucketTagging where
 
 instance ToElement PutBucketTagging where
         toElement
@@ -109,13 +108,15 @@
 
 -- | /See:/ 'putBucketTaggingResponse' smart constructor.
 data PutBucketTaggingResponse =
-    PutBucketTaggingResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
+  PutBucketTaggingResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'PutBucketTaggingResponse' with the minimum fields required to make a request.
 --
 putBucketTaggingResponse
     :: PutBucketTaggingResponse
 putBucketTaggingResponse = PutBucketTaggingResponse'
 
-instance NFData PutBucketTaggingResponse
+
+instance NFData PutBucketTaggingResponse where
diff --git a/gen/Network/AWS/S3/PutBucketVersioning.hs b/gen/Network/AWS/S3/PutBucketVersioning.hs
--- a/gen/Network/AWS/S3/PutBucketVersioning.hs
+++ b/gen/Network/AWS/S3/PutBucketVersioning.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.PutBucketVersioning
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -35,21 +35,22 @@
     , PutBucketVersioningResponse
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'putBucketVersioning' smart constructor.
 data PutBucketVersioning = PutBucketVersioning'
-    { _pbvMFA                     :: !(Maybe Text)
-    , _pbvContentMD5              :: !(Maybe Text)
-    , _pbvBucket                  :: !BucketName
-    , _pbvVersioningConfiguration :: !VersioningConfiguration
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _pbvMFA                     :: !(Maybe Text)
+  , _pbvContentMD5              :: !(Maybe Text)
+  , _pbvBucket                  :: !BucketName
+  , _pbvVersioningConfiguration :: !VersioningConfiguration
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'PutBucketVersioning' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -66,13 +67,14 @@
     -> VersioningConfiguration -- ^ 'pbvVersioningConfiguration'
     -> PutBucketVersioning
 putBucketVersioning pBucket_ pVersioningConfiguration_ =
-    PutBucketVersioning'
-    { _pbvMFA = Nothing
-    , _pbvContentMD5 = Nothing
-    , _pbvBucket = pBucket_
-    , _pbvVersioningConfiguration = pVersioningConfiguration_
-    }
+  PutBucketVersioning'
+  { _pbvMFA = Nothing
+  , _pbvContentMD5 = Nothing
+  , _pbvBucket = pBucket_
+  , _pbvVersioningConfiguration = pVersioningConfiguration_
+  }
 
+
 -- | The concatenation of the authentication device's serial number, a space, and the value that is displayed on your authentication device.
 pbvMFA :: Lens' PutBucketVersioning (Maybe Text)
 pbvMFA = lens _pbvMFA (\ s a -> s{_pbvMFA = a});
@@ -95,9 +97,9 @@
         request = putXML s3
         response = receiveNull PutBucketVersioningResponse'
 
-instance Hashable PutBucketVersioning
+instance Hashable PutBucketVersioning where
 
-instance NFData PutBucketVersioning
+instance NFData PutBucketVersioning where
 
 instance ToElement PutBucketVersioning where
         toElement
@@ -121,13 +123,15 @@
 
 -- | /See:/ 'putBucketVersioningResponse' smart constructor.
 data PutBucketVersioningResponse =
-    PutBucketVersioningResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
+  PutBucketVersioningResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'PutBucketVersioningResponse' with the minimum fields required to make a request.
 --
 putBucketVersioningResponse
     :: PutBucketVersioningResponse
 putBucketVersioningResponse = PutBucketVersioningResponse'
 
-instance NFData PutBucketVersioningResponse
+
+instance NFData PutBucketVersioningResponse where
diff --git a/gen/Network/AWS/S3/PutBucketWebsite.hs b/gen/Network/AWS/S3/PutBucketWebsite.hs
--- a/gen/Network/AWS/S3/PutBucketWebsite.hs
+++ b/gen/Network/AWS/S3/PutBucketWebsite.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.PutBucketWebsite
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -34,20 +34,21 @@
     , PutBucketWebsiteResponse
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'putBucketWebsite' smart constructor.
 data PutBucketWebsite = PutBucketWebsite'
-    { _pbwContentMD5           :: !(Maybe Text)
-    , _pbwBucket               :: !BucketName
-    , _pbwWebsiteConfiguration :: !WebsiteConfiguration
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _pbwContentMD5           :: !(Maybe Text)
+  , _pbwBucket               :: !BucketName
+  , _pbwWebsiteConfiguration :: !WebsiteConfiguration
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'PutBucketWebsite' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -62,12 +63,13 @@
     -> WebsiteConfiguration -- ^ 'pbwWebsiteConfiguration'
     -> PutBucketWebsite
 putBucketWebsite pBucket_ pWebsiteConfiguration_ =
-    PutBucketWebsite'
-    { _pbwContentMD5 = Nothing
-    , _pbwBucket = pBucket_
-    , _pbwWebsiteConfiguration = pWebsiteConfiguration_
-    }
+  PutBucketWebsite'
+  { _pbwContentMD5 = Nothing
+  , _pbwBucket = pBucket_
+  , _pbwWebsiteConfiguration = pWebsiteConfiguration_
+  }
 
+
 -- | Undocumented member.
 pbwContentMD5 :: Lens' PutBucketWebsite (Maybe Text)
 pbwContentMD5 = lens _pbwContentMD5 (\ s a -> s{_pbwContentMD5 = a});
@@ -85,9 +87,9 @@
         request = putXML s3
         response = receiveNull PutBucketWebsiteResponse'
 
-instance Hashable PutBucketWebsite
+instance Hashable PutBucketWebsite where
 
-instance NFData PutBucketWebsite
+instance NFData PutBucketWebsite where
 
 instance ToElement PutBucketWebsite where
         toElement
@@ -109,13 +111,15 @@
 
 -- | /See:/ 'putBucketWebsiteResponse' smart constructor.
 data PutBucketWebsiteResponse =
-    PutBucketWebsiteResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
+  PutBucketWebsiteResponse'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'PutBucketWebsiteResponse' with the minimum fields required to make a request.
 --
 putBucketWebsiteResponse
     :: PutBucketWebsiteResponse
 putBucketWebsiteResponse = PutBucketWebsiteResponse'
 
-instance NFData PutBucketWebsiteResponse
+
+instance NFData PutBucketWebsiteResponse where
diff --git a/gen/Network/AWS/S3/PutObject.hs b/gen/Network/AWS/S3/PutObject.hs
--- a/gen/Network/AWS/S3/PutObject.hs
+++ b/gen/Network/AWS/S3/PutObject.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.PutObject
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -67,43 +67,44 @@
     , porsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'putObject' smart constructor.
 data PutObject = PutObject'
-    { _poContentLength           :: !(Maybe Integer)
-    , _poExpires                 :: !(Maybe RFC822)
-    , _poGrantReadACP            :: !(Maybe Text)
-    , _poSSECustomerAlgorithm    :: !(Maybe Text)
-    , _poSSECustomerKey          :: !(Maybe (Sensitive Text))
-    , _poRequestPayer            :: !(Maybe RequestPayer)
-    , _poGrantWriteACP           :: !(Maybe Text)
-    , _poWebsiteRedirectLocation :: !(Maybe Text)
-    , _poGrantRead               :: !(Maybe Text)
-    , _poStorageClass            :: !(Maybe StorageClass)
-    , _poSSECustomerKeyMD5       :: !(Maybe Text)
-    , _poSSEKMSKeyId             :: !(Maybe (Sensitive Text))
-    , _poGrantFullControl        :: !(Maybe Text)
-    , _poContentEncoding         :: !(Maybe Text)
-    , _poTagging                 :: !(Maybe Text)
-    , _poContentMD5              :: !(Maybe Text)
-    , _poMetadata                :: !(Map Text Text)
-    , _poCacheControl            :: !(Maybe Text)
-    , _poContentLanguage         :: !(Maybe Text)
-    , _poACL                     :: !(Maybe ObjectCannedACL)
-    , _poContentDisposition      :: !(Maybe Text)
-    , _poServerSideEncryption    :: !(Maybe ServerSideEncryption)
-    , _poContentType             :: !(Maybe Text)
-    , _poBucket                  :: !BucketName
-    , _poKey                     :: !ObjectKey
-    , _poBody                    :: !RqBody
-    } deriving (Show,Generic)
+  { _poContentLength           :: !(Maybe Integer)
+  , _poExpires                 :: !(Maybe RFC822)
+  , _poGrantReadACP            :: !(Maybe Text)
+  , _poSSECustomerAlgorithm    :: !(Maybe Text)
+  , _poSSECustomerKey          :: !(Maybe (Sensitive Text))
+  , _poRequestPayer            :: !(Maybe RequestPayer)
+  , _poGrantWriteACP           :: !(Maybe Text)
+  , _poWebsiteRedirectLocation :: !(Maybe Text)
+  , _poGrantRead               :: !(Maybe Text)
+  , _poStorageClass            :: !(Maybe StorageClass)
+  , _poSSECustomerKeyMD5       :: !(Maybe Text)
+  , _poSSEKMSKeyId             :: !(Maybe (Sensitive Text))
+  , _poGrantFullControl        :: !(Maybe Text)
+  , _poContentEncoding         :: !(Maybe Text)
+  , _poTagging                 :: !(Maybe Text)
+  , _poContentMD5              :: !(Maybe Text)
+  , _poMetadata                :: !(Map Text Text)
+  , _poCacheControl            :: !(Maybe Text)
+  , _poContentLanguage         :: !(Maybe Text)
+  , _poACL                     :: !(Maybe ObjectCannedACL)
+  , _poContentDisposition      :: !(Maybe Text)
+  , _poServerSideEncryption    :: !(Maybe ServerSideEncryption)
+  , _poContentType             :: !(Maybe Text)
+  , _poBucket                  :: !BucketName
+  , _poKey                     :: !ObjectKey
+  , _poBody                    :: !RqBody
+  } deriving (Show, Generic)
 
+
 -- | Creates a value of 'PutObject' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -165,35 +166,36 @@
     -> RqBody -- ^ 'poBody'
     -> PutObject
 putObject pBucket_ pKey_ pBody_ =
-    PutObject'
-    { _poContentLength = Nothing
-    , _poExpires = Nothing
-    , _poGrantReadACP = Nothing
-    , _poSSECustomerAlgorithm = Nothing
-    , _poSSECustomerKey = Nothing
-    , _poRequestPayer = Nothing
-    , _poGrantWriteACP = Nothing
-    , _poWebsiteRedirectLocation = Nothing
-    , _poGrantRead = Nothing
-    , _poStorageClass = Nothing
-    , _poSSECustomerKeyMD5 = Nothing
-    , _poSSEKMSKeyId = Nothing
-    , _poGrantFullControl = Nothing
-    , _poContentEncoding = Nothing
-    , _poTagging = Nothing
-    , _poContentMD5 = Nothing
-    , _poMetadata = mempty
-    , _poCacheControl = Nothing
-    , _poContentLanguage = Nothing
-    , _poACL = Nothing
-    , _poContentDisposition = Nothing
-    , _poServerSideEncryption = Nothing
-    , _poContentType = Nothing
-    , _poBucket = pBucket_
-    , _poKey = pKey_
-    , _poBody = pBody_
-    }
+  PutObject'
+  { _poContentLength = Nothing
+  , _poExpires = Nothing
+  , _poGrantReadACP = Nothing
+  , _poSSECustomerAlgorithm = Nothing
+  , _poSSECustomerKey = Nothing
+  , _poRequestPayer = Nothing
+  , _poGrantWriteACP = Nothing
+  , _poWebsiteRedirectLocation = Nothing
+  , _poGrantRead = Nothing
+  , _poStorageClass = Nothing
+  , _poSSECustomerKeyMD5 = Nothing
+  , _poSSEKMSKeyId = Nothing
+  , _poGrantFullControl = Nothing
+  , _poContentEncoding = Nothing
+  , _poTagging = Nothing
+  , _poContentMD5 = Nothing
+  , _poMetadata = mempty
+  , _poCacheControl = Nothing
+  , _poContentLanguage = Nothing
+  , _poACL = Nothing
+  , _poContentDisposition = Nothing
+  , _poServerSideEncryption = Nothing
+  , _poContentType = Nothing
+  , _poBucket = pBucket_
+  , _poKey = pKey_
+  , _poBody = pBody_
+  }
 
+
 -- | Size of the body in bytes. This parameter is useful when the size of the body cannot be determined automatically.
 poContentLength :: Lens' PutObject (Maybe Integer)
 poContentLength = lens _poContentLength (\ s a -> s{_poContentLength = a});
@@ -364,17 +366,18 @@
 
 -- | /See:/ 'putObjectResponse' smart constructor.
 data PutObjectResponse = PutObjectResponse'
-    { _porsRequestCharged       :: !(Maybe RequestCharged)
-    , _porsETag                 :: !(Maybe ETag)
-    , _porsVersionId            :: !(Maybe ObjectVersionId)
-    , _porsExpiration           :: !(Maybe Text)
-    , _porsSSECustomerAlgorithm :: !(Maybe Text)
-    , _porsSSECustomerKeyMD5    :: !(Maybe Text)
-    , _porsSSEKMSKeyId          :: !(Maybe (Sensitive Text))
-    , _porsServerSideEncryption :: !(Maybe ServerSideEncryption)
-    , _porsResponseStatus       :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _porsRequestCharged       :: !(Maybe RequestCharged)
+  , _porsETag                 :: !(Maybe ETag)
+  , _porsVersionId            :: !(Maybe ObjectVersionId)
+  , _porsExpiration           :: !(Maybe Text)
+  , _porsSSECustomerAlgorithm :: !(Maybe Text)
+  , _porsSSECustomerKeyMD5    :: !(Maybe Text)
+  , _porsSSEKMSKeyId          :: !(Maybe (Sensitive Text))
+  , _porsServerSideEncryption :: !(Maybe ServerSideEncryption)
+  , _porsResponseStatus       :: !Int
+  } deriving (Eq, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'PutObjectResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -400,18 +403,19 @@
     :: Int -- ^ 'porsResponseStatus'
     -> PutObjectResponse
 putObjectResponse pResponseStatus_ =
-    PutObjectResponse'
-    { _porsRequestCharged = Nothing
-    , _porsETag = Nothing
-    , _porsVersionId = Nothing
-    , _porsExpiration = Nothing
-    , _porsSSECustomerAlgorithm = Nothing
-    , _porsSSECustomerKeyMD5 = Nothing
-    , _porsSSEKMSKeyId = Nothing
-    , _porsServerSideEncryption = Nothing
-    , _porsResponseStatus = pResponseStatus_
-    }
+  PutObjectResponse'
+  { _porsRequestCharged = Nothing
+  , _porsETag = Nothing
+  , _porsVersionId = Nothing
+  , _porsExpiration = Nothing
+  , _porsSSECustomerAlgorithm = Nothing
+  , _porsSSECustomerKeyMD5 = Nothing
+  , _porsSSEKMSKeyId = Nothing
+  , _porsServerSideEncryption = Nothing
+  , _porsResponseStatus = pResponseStatus_
+  }
 
+
 -- | Undocumented member.
 porsRequestCharged :: Lens' PutObjectResponse (Maybe RequestCharged)
 porsRequestCharged = lens _porsRequestCharged (\ s a -> s{_porsRequestCharged = a});
@@ -448,4 +452,4 @@
 porsResponseStatus :: Lens' PutObjectResponse Int
 porsResponseStatus = lens _porsResponseStatus (\ s a -> s{_porsResponseStatus = a});
 
-instance NFData PutObjectResponse
+instance NFData PutObjectResponse where
diff --git a/gen/Network/AWS/S3/PutObjectACL.hs b/gen/Network/AWS/S3/PutObjectACL.hs
--- a/gen/Network/AWS/S3/PutObjectACL.hs
+++ b/gen/Network/AWS/S3/PutObjectACL.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.PutObjectACL
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -46,29 +46,30 @@
     , poarsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'putObjectACL' smart constructor.
 data PutObjectACL = PutObjectACL'
-    { _poaVersionId           :: !(Maybe ObjectVersionId)
-    , _poaGrantReadACP        :: !(Maybe Text)
-    , _poaRequestPayer        :: !(Maybe RequestPayer)
-    , _poaGrantWriteACP       :: !(Maybe Text)
-    , _poaGrantRead           :: !(Maybe Text)
-    , _poaGrantFullControl    :: !(Maybe Text)
-    , _poaContentMD5          :: !(Maybe Text)
-    , _poaAccessControlPolicy :: !(Maybe AccessControlPolicy)
-    , _poaGrantWrite          :: !(Maybe Text)
-    , _poaACL                 :: !(Maybe ObjectCannedACL)
-    , _poaBucket              :: !BucketName
-    , _poaKey                 :: !ObjectKey
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _poaVersionId           :: !(Maybe ObjectVersionId)
+  , _poaGrantReadACP        :: !(Maybe Text)
+  , _poaRequestPayer        :: !(Maybe RequestPayer)
+  , _poaGrantWriteACP       :: !(Maybe Text)
+  , _poaGrantRead           :: !(Maybe Text)
+  , _poaGrantFullControl    :: !(Maybe Text)
+  , _poaContentMD5          :: !(Maybe Text)
+  , _poaAccessControlPolicy :: !(Maybe AccessControlPolicy)
+  , _poaGrantWrite          :: !(Maybe Text)
+  , _poaACL                 :: !(Maybe ObjectCannedACL)
+  , _poaBucket              :: !BucketName
+  , _poaKey                 :: !ObjectKey
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'PutObjectACL' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -101,21 +102,22 @@
     -> ObjectKey -- ^ 'poaKey'
     -> PutObjectACL
 putObjectACL pBucket_ pKey_ =
-    PutObjectACL'
-    { _poaVersionId = Nothing
-    , _poaGrantReadACP = Nothing
-    , _poaRequestPayer = Nothing
-    , _poaGrantWriteACP = Nothing
-    , _poaGrantRead = Nothing
-    , _poaGrantFullControl = Nothing
-    , _poaContentMD5 = Nothing
-    , _poaAccessControlPolicy = Nothing
-    , _poaGrantWrite = Nothing
-    , _poaACL = Nothing
-    , _poaBucket = pBucket_
-    , _poaKey = pKey_
-    }
+  PutObjectACL'
+  { _poaVersionId = Nothing
+  , _poaGrantReadACP = Nothing
+  , _poaRequestPayer = Nothing
+  , _poaGrantWriteACP = Nothing
+  , _poaGrantRead = Nothing
+  , _poaGrantFullControl = Nothing
+  , _poaContentMD5 = Nothing
+  , _poaAccessControlPolicy = Nothing
+  , _poaGrantWrite = Nothing
+  , _poaACL = Nothing
+  , _poaBucket = pBucket_
+  , _poaKey = pKey_
+  }
 
+
 -- | VersionId used to reference a specific version of the object.
 poaVersionId :: Lens' PutObjectACL (Maybe ObjectVersionId)
 poaVersionId = lens _poaVersionId (\ s a -> s{_poaVersionId = a});
@@ -174,9 +176,9 @@
                    (h .#? "x-amz-request-charged") <*>
                      (pure (fromEnum s)))
 
-instance Hashable PutObjectACL
+instance Hashable PutObjectACL where
 
-instance NFData PutObjectACL
+instance NFData PutObjectACL where
 
 instance ToElement PutObjectACL where
         toElement
@@ -207,10 +209,11 @@
 
 -- | /See:/ 'putObjectACLResponse' smart constructor.
 data PutObjectACLResponse = PutObjectACLResponse'
-    { _poarsRequestCharged :: !(Maybe RequestCharged)
-    , _poarsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _poarsRequestCharged :: !(Maybe RequestCharged)
+  , _poarsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'PutObjectACLResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -222,11 +225,10 @@
     :: Int -- ^ 'poarsResponseStatus'
     -> PutObjectACLResponse
 putObjectACLResponse pResponseStatus_ =
-    PutObjectACLResponse'
-    { _poarsRequestCharged = Nothing
-    , _poarsResponseStatus = pResponseStatus_
-    }
+  PutObjectACLResponse'
+  {_poarsRequestCharged = Nothing, _poarsResponseStatus = pResponseStatus_}
 
+
 -- | Undocumented member.
 poarsRequestCharged :: Lens' PutObjectACLResponse (Maybe RequestCharged)
 poarsRequestCharged = lens _poarsRequestCharged (\ s a -> s{_poarsRequestCharged = a});
@@ -235,4 +237,4 @@
 poarsResponseStatus :: Lens' PutObjectACLResponse Int
 poarsResponseStatus = lens _poarsResponseStatus (\ s a -> s{_poarsResponseStatus = a});
 
-instance NFData PutObjectACLResponse
+instance NFData PutObjectACLResponse where
diff --git a/gen/Network/AWS/S3/PutObjectTagging.hs b/gen/Network/AWS/S3/PutObjectTagging.hs
--- a/gen/Network/AWS/S3/PutObjectTagging.hs
+++ b/gen/Network/AWS/S3/PutObjectTagging.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.PutObjectTagging
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -25,11 +25,11 @@
       putObjectTagging
     , PutObjectTagging
     -- * Request Lenses
+    , potVersionId
     , potContentMD5
     , potBucket
     , potKey
     , potTagging
-    , potVersionId
 
     -- * Destructuring the Response
     , putObjectTaggingResponse
@@ -39,26 +39,29 @@
     , potrsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'putObjectTagging' smart constructor.
 data PutObjectTagging = PutObjectTagging'
-    { _potContentMD5 :: !(Maybe Text)
-    , _potBucket     :: !BucketName
-    , _potKey        :: !ObjectKey
-    , _potTagging    :: !Tagging
-    , _potVersionId  :: !ObjectVersionId
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _potVersionId  :: !(Maybe ObjectVersionId)
+  , _potContentMD5 :: !(Maybe Text)
+  , _potBucket     :: !BucketName
+  , _potKey        :: !ObjectKey
+  , _potTagging    :: !Tagging
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'PutObjectTagging' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
+-- * 'potVersionId' - Undocumented member.
+--
 -- * 'potContentMD5' - Undocumented member.
 --
 -- * 'potBucket' - Undocumented member.
@@ -66,24 +69,26 @@
 -- * 'potKey' - Undocumented member.
 --
 -- * 'potTagging' - Undocumented member.
---
--- * 'potVersionId' - Undocumented member.
 putObjectTagging
     :: BucketName -- ^ 'potBucket'
     -> ObjectKey -- ^ 'potKey'
     -> Tagging -- ^ 'potTagging'
-    -> ObjectVersionId -- ^ 'potVersionId'
     -> PutObjectTagging
-putObjectTagging pBucket_ pKey_ pTagging_ pVersionId_ =
-    PutObjectTagging'
-    { _potContentMD5 = Nothing
-    , _potBucket = pBucket_
-    , _potKey = pKey_
-    , _potTagging = pTagging_
-    , _potVersionId = pVersionId_
-    }
+putObjectTagging pBucket_ pKey_ pTagging_ =
+  PutObjectTagging'
+  { _potVersionId = Nothing
+  , _potContentMD5 = Nothing
+  , _potBucket = pBucket_
+  , _potKey = pKey_
+  , _potTagging = pTagging_
+  }
 
+
 -- | Undocumented member.
+potVersionId :: Lens' PutObjectTagging (Maybe ObjectVersionId)
+potVersionId = lens _potVersionId (\ s a -> s{_potVersionId = a});
+
+-- | Undocumented member.
 potContentMD5 :: Lens' PutObjectTagging (Maybe Text)
 potContentMD5 = lens _potContentMD5 (\ s a -> s{_potContentMD5 = a});
 
@@ -99,10 +104,6 @@
 potTagging :: Lens' PutObjectTagging Tagging
 potTagging = lens _potTagging (\ s a -> s{_potTagging = a});
 
--- | Undocumented member.
-potVersionId :: Lens' PutObjectTagging ObjectVersionId
-potVersionId = lens _potVersionId (\ s a -> s{_potVersionId = a});
-
 instance AWSRequest PutObjectTagging where
         type Rs PutObjectTagging = PutObjectTaggingResponse
         request = putXML s3
@@ -112,9 +113,9 @@
                  PutObjectTaggingResponse' <$>
                    (h .#? "x-amz-version-id") <*> (pure (fromEnum s)))
 
-instance Hashable PutObjectTagging
+instance Hashable PutObjectTagging where
 
-instance NFData PutObjectTagging
+instance NFData PutObjectTagging where
 
 instance ToElement PutObjectTagging where
         toElement
@@ -132,14 +133,16 @@
           = mconcat ["/", toBS _potBucket, "/", toBS _potKey]
 
 instance ToQuery PutObjectTagging where
-        toQuery = const (mconcat ["tagging"])
+        toQuery PutObjectTagging'{..}
+          = mconcat ["versionId" =: _potVersionId, "tagging"]
 
 -- | /See:/ 'putObjectTaggingResponse' smart constructor.
 data PutObjectTaggingResponse = PutObjectTaggingResponse'
-    { _potrsVersionId      :: !(Maybe ObjectVersionId)
-    , _potrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _potrsVersionId      :: !(Maybe ObjectVersionId)
+  , _potrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'PutObjectTaggingResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -151,11 +154,10 @@
     :: Int -- ^ 'potrsResponseStatus'
     -> PutObjectTaggingResponse
 putObjectTaggingResponse pResponseStatus_ =
-    PutObjectTaggingResponse'
-    { _potrsVersionId = Nothing
-    , _potrsResponseStatus = pResponseStatus_
-    }
+  PutObjectTaggingResponse'
+  {_potrsVersionId = Nothing, _potrsResponseStatus = pResponseStatus_}
 
+
 -- | Undocumented member.
 potrsVersionId :: Lens' PutObjectTaggingResponse (Maybe ObjectVersionId)
 potrsVersionId = lens _potrsVersionId (\ s a -> s{_potrsVersionId = a});
@@ -164,4 +166,4 @@
 potrsResponseStatus :: Lens' PutObjectTaggingResponse Int
 potrsResponseStatus = lens _potrsResponseStatus (\ s a -> s{_potrsResponseStatus = a});
 
-instance NFData PutObjectTaggingResponse
+instance NFData PutObjectTaggingResponse where
diff --git a/gen/Network/AWS/S3/RestoreObject.hs b/gen/Network/AWS/S3/RestoreObject.hs
--- a/gen/Network/AWS/S3/RestoreObject.hs
+++ b/gen/Network/AWS/S3/RestoreObject.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.RestoreObject
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -39,22 +39,23 @@
     , rorsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'restoreObject' smart constructor.
 data RestoreObject = RestoreObject'
-    { _roVersionId      :: !(Maybe ObjectVersionId)
-    , _roRequestPayer   :: !(Maybe RequestPayer)
-    , _roRestoreRequest :: !(Maybe RestoreRequest)
-    , _roBucket         :: !BucketName
-    , _roKey            :: !ObjectKey
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _roVersionId      :: !(Maybe ObjectVersionId)
+  , _roRequestPayer   :: !(Maybe RequestPayer)
+  , _roRestoreRequest :: !(Maybe RestoreRequest)
+  , _roBucket         :: !BucketName
+  , _roKey            :: !ObjectKey
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'RestoreObject' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -73,14 +74,15 @@
     -> ObjectKey -- ^ 'roKey'
     -> RestoreObject
 restoreObject pBucket_ pKey_ =
-    RestoreObject'
-    { _roVersionId = Nothing
-    , _roRequestPayer = Nothing
-    , _roRestoreRequest = Nothing
-    , _roBucket = pBucket_
-    , _roKey = pKey_
-    }
+  RestoreObject'
+  { _roVersionId = Nothing
+  , _roRequestPayer = Nothing
+  , _roRestoreRequest = Nothing
+  , _roBucket = pBucket_
+  , _roKey = pKey_
+  }
 
+
 -- | Undocumented member.
 roVersionId :: Lens' RestoreObject (Maybe ObjectVersionId)
 roVersionId = lens _roVersionId (\ s a -> s{_roVersionId = a});
@@ -111,9 +113,9 @@
                    (h .#? "x-amz-request-charged") <*>
                      (pure (fromEnum s)))
 
-instance Hashable RestoreObject
+instance Hashable RestoreObject where
 
-instance NFData RestoreObject
+instance NFData RestoreObject where
 
 instance ToElement RestoreObject where
         toElement
@@ -136,10 +138,11 @@
 
 -- | /See:/ 'restoreObjectResponse' smart constructor.
 data RestoreObjectResponse = RestoreObjectResponse'
-    { _rorsRequestCharged :: !(Maybe RequestCharged)
-    , _rorsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _rorsRequestCharged :: !(Maybe RequestCharged)
+  , _rorsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'RestoreObjectResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -151,11 +154,10 @@
     :: Int -- ^ 'rorsResponseStatus'
     -> RestoreObjectResponse
 restoreObjectResponse pResponseStatus_ =
-    RestoreObjectResponse'
-    { _rorsRequestCharged = Nothing
-    , _rorsResponseStatus = pResponseStatus_
-    }
+  RestoreObjectResponse'
+  {_rorsRequestCharged = Nothing, _rorsResponseStatus = pResponseStatus_}
 
+
 -- | Undocumented member.
 rorsRequestCharged :: Lens' RestoreObjectResponse (Maybe RequestCharged)
 rorsRequestCharged = lens _rorsRequestCharged (\ s a -> s{_rorsRequestCharged = a});
@@ -164,4 +166,4 @@
 rorsResponseStatus :: Lens' RestoreObjectResponse Int
 rorsResponseStatus = lens _rorsResponseStatus (\ s a -> s{_rorsResponseStatus = a});
 
-instance NFData RestoreObjectResponse
+instance NFData RestoreObjectResponse where
diff --git a/gen/Network/AWS/S3/Types.hs b/gen/Network/AWS/S3/Types.hs
--- a/gen/Network/AWS/S3/Types.hs
+++ b/gen/Network/AWS/S3/Types.hs
@@ -4,9 +4,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.Types
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -84,6 +84,9 @@
     -- * ObjectVersionStorageClass
     , ObjectVersionStorageClass (..)
 
+    -- * OwnerOverride
+    , OwnerOverride (..)
+
     -- * Payer
     , Payer (..)
 
@@ -108,6 +111,9 @@
     -- * ServerSideEncryption
     , ServerSideEncryption (..)
 
+    -- * SseKMSEncryptedObjectsStatus
+    , SseKMSEncryptedObjectsStatus (..)
+
     -- * StorageClass
     , StorageClass (..)
 
@@ -142,6 +148,11 @@
     , acpGrants
     , acpOwner
 
+    -- * AccessControlTranslation
+    , AccessControlTranslation
+    , accessControlTranslation
+    , actOwner
+
     -- * AnalyticsAndOperator
     , AnalyticsAndOperator
     , analyticsAndOperator
@@ -270,9 +281,17 @@
     -- * Destination
     , Destination
     , destination
+    , dAccessControlTranslation
+    , dAccount
     , dStorageClass
+    , dEncryptionConfiguration
     , dBucket
 
+    -- * EncryptionConfiguration
+    , EncryptionConfiguration
+    , encryptionConfiguration
+    , ecReplicaKMSKeyId
+
     -- * ErrorDocument
     , ErrorDocument
     , errorDocument
@@ -331,6 +350,12 @@
     , inventoryDestination
     , idS3BucketDestination
 
+    -- * InventoryEncryption
+    , InventoryEncryption
+    , inventoryEncryption
+    , ieSSES3
+    , ieSSEKMS
+
     -- * InventoryFilter
     , InventoryFilter
     , inventoryFilter
@@ -341,6 +366,7 @@
     , inventoryS3BucketDestination
     , isbdPrefix
     , isbdAccountId
+    , isbdEncryption
     , isbdBucket
     , isbdFormat
 
@@ -524,6 +550,7 @@
     , ReplicationRule
     , replicationRule
     , rrId
+    , rrSourceSelectionCriteria
     , rrPrefix
     , rrStatus
     , rrDestination
@@ -558,6 +585,41 @@
     , sseCode
     , sseMessage
 
+    -- * SSEKMS
+    , SSEKMS
+    , sSEKMS
+    , ssekKeyId
+
+    -- * SSES3
+    , SSES3
+    , sSES3
+
+    -- * ServerSideEncryptionByDefault
+    , ServerSideEncryptionByDefault
+    , serverSideEncryptionByDefault
+    , ssebdKMSMasterKeyId
+    , ssebdSSEAlgorithm
+
+    -- * ServerSideEncryptionConfiguration
+    , ServerSideEncryptionConfiguration
+    , serverSideEncryptionConfiguration
+    , ssecRules
+
+    -- * ServerSideEncryptionRule
+    , ServerSideEncryptionRule
+    , serverSideEncryptionRule
+    , sserApplyServerSideEncryptionByDefault
+
+    -- * SourceSelectionCriteria
+    , SourceSelectionCriteria
+    , sourceSelectionCriteria
+    , sscSseKMSEncryptedObjects
+
+    -- * SseKMSEncryptedObjects
+    , SseKMSEncryptedObjects
+    , sseKMSEncryptedObjects
+    , skeoStatus
+
     -- * StorageClassAnalysis
     , StorageClassAnalysis
     , storageClassAnalysis
@@ -616,39 +678,41 @@
     , wcRoutingRules
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.S3.Internal
-import           Network.AWS.S3.Types.Product
-import           Network.AWS.S3.Types.Sum
-import           Network.AWS.Sign.V4
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.S3.Internal
+import Network.AWS.S3.Types.Product
+import Network.AWS.S3.Types.Sum
+import Network.AWS.Sign.V4
 
 -- | API version @2006-03-01@ of the Amazon Simple Storage Service SDK configuration.
 s3 :: Service
 s3 =
-    Service
-    { _svcAbbrev = "S3"
-    , _svcSigner = v4
-    , _svcPrefix = "s3"
-    , _svcVersion = "2006-03-01"
-    , _svcEndpoint = defaultEndpoint s3
-    , _svcTimeout = Just 70
-    , _svcCheck = statusSuccess
-    , _svcError = parseXMLError "S3"
-    , _svcRetry = retry
-    }
+  Service
+  { _svcAbbrev = "S3"
+  , _svcSigner = v4
+  , _svcPrefix = "s3"
+  , _svcVersion = "2006-03-01"
+  , _svcEndpoint = defaultEndpoint s3
+  , _svcTimeout = Just 70
+  , _svcCheck = statusSuccess
+  , _svcError = parseXMLError "S3"
+  , _svcRetry = retry
+  }
   where
     retry =
-        Exponential
-        { _retryBase = 5.0e-2
-        , _retryGrowth = 2
-        , _retryAttempts = 5
-        , _retryCheck = check
-        }
+      Exponential
+      { _retryBase = 5.0e-2
+      , _retryGrowth = 2
+      , _retryAttempts = 5
+      , _retryCheck = check
+      }
     check e
+      | has (hasCode "ThrottledException" . hasStatus 400) e =
+        Just "throttled_exception"
       | has (hasStatus 429) e = Just "too_many_requests"
       | has (hasCode "ThrottlingException" . hasStatus 400) e =
-          Just "throttling_exception"
+        Just "throttling_exception"
       | has (hasCode "Throttling" . hasStatus 400) e = Just "throttling"
       | has (hasStatus 504) e = Just "gateway_timeout"
       | has (hasCode "BadDigest" . hasStatus 400) e = Just "contentmd5"
@@ -659,32 +723,39 @@
       | has (hasStatus 509) e = Just "limit_exceeded"
       | otherwise = Nothing
 
+
 -- | Prism for BucketAlreadyOwnedByYou' errors.
 _BucketAlreadyOwnedByYou :: AsError a => Getting (First ServiceError) a ServiceError
-_BucketAlreadyOwnedByYou = _ServiceError . hasCode "BucketAlreadyOwnedByYou"
+_BucketAlreadyOwnedByYou = _MatchServiceError s3 "BucketAlreadyOwnedByYou"
 
+
 -- | This operation is not allowed against this storage tier
 _ObjectAlreadyInActiveTierError :: AsError a => Getting (First ServiceError) a ServiceError
 _ObjectAlreadyInActiveTierError =
-    _ServiceError . hasCode "ObjectAlreadyInActiveTierError"
+  _MatchServiceError s3 "ObjectAlreadyInActiveTierError"
 
+
 -- | The requested bucket name is not available. The bucket namespace is shared by all users of the system. Please select a different name and try again.
 _BucketAlreadyExists :: AsError a => Getting (First ServiceError) a ServiceError
-_BucketAlreadyExists = _ServiceError . hasCode "BucketAlreadyExists"
+_BucketAlreadyExists = _MatchServiceError s3 "BucketAlreadyExists"
 
+
 -- | The source object of the COPY operation is not in the active tier and is only stored in Amazon Glacier.
 _ObjectNotInActiveTierError :: AsError a => Getting (First ServiceError) a ServiceError
-_ObjectNotInActiveTierError =
-    _ServiceError . hasCode "ObjectNotInActiveTierError"
+_ObjectNotInActiveTierError = _MatchServiceError s3 "ObjectNotInActiveTierError"
 
+
 -- | The specified multipart upload does not exist.
 _NoSuchUpload :: AsError a => Getting (First ServiceError) a ServiceError
-_NoSuchUpload = _ServiceError . hasCode "NoSuchUpload"
+_NoSuchUpload = _MatchServiceError s3 "NoSuchUpload"
 
+
 -- | The specified bucket does not exist.
 _NoSuchBucket :: AsError a => Getting (First ServiceError) a ServiceError
-_NoSuchBucket = _ServiceError . hasCode "NoSuchBucket"
+_NoSuchBucket = _MatchServiceError s3 "NoSuchBucket"
 
+
 -- | The specified key does not exist.
 _NoSuchKey :: AsError a => Getting (First ServiceError) a ServiceError
-_NoSuchKey = _ServiceError . hasCode "NoSuchKey"
+_NoSuchKey = _MatchServiceError s3 "NoSuchKey"
+
diff --git a/gen/Network/AWS/S3/Types/Product.hs b/gen/Network/AWS/S3/Types/Product.hs
--- a/gen/Network/AWS/S3/Types/Product.hs
+++ b/gen/Network/AWS/S3/Types/Product.hs
@@ -9,3600 +9,4033 @@
 
 -- |
 -- Module      : Network.AWS.S3.Types.Product
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Network.AWS.S3.Types.Product where
-
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.S3.Internal
-import           Network.AWS.S3.Types.Sum
-
--- | Specifies the days since the initiation of an Incomplete Multipart Upload that Lifecycle will wait before permanently removing all parts of the upload.
---
--- /See:/ 'abortIncompleteMultipartUpload' smart constructor.
-newtype AbortIncompleteMultipartUpload = AbortIncompleteMultipartUpload'
-    { _aimuDaysAfterInitiation :: Maybe Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AbortIncompleteMultipartUpload' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aimuDaysAfterInitiation' - Indicates the number of days that must pass since initiation for Lifecycle to abort an Incomplete Multipart Upload.
-abortIncompleteMultipartUpload
-    :: AbortIncompleteMultipartUpload
-abortIncompleteMultipartUpload =
-    AbortIncompleteMultipartUpload'
-    { _aimuDaysAfterInitiation = Nothing
-    }
-
--- | Indicates the number of days that must pass since initiation for Lifecycle to abort an Incomplete Multipart Upload.
-aimuDaysAfterInitiation :: Lens' AbortIncompleteMultipartUpload (Maybe Int)
-aimuDaysAfterInitiation = lens _aimuDaysAfterInitiation (\ s a -> s{_aimuDaysAfterInitiation = a});
-
-instance FromXML AbortIncompleteMultipartUpload where
-        parseXML x
-          = AbortIncompleteMultipartUpload' <$>
-              (x .@? "DaysAfterInitiation")
-
-instance Hashable AbortIncompleteMultipartUpload
-
-instance NFData AbortIncompleteMultipartUpload
-
-instance ToXML AbortIncompleteMultipartUpload where
-        toXML AbortIncompleteMultipartUpload'{..}
-          = mconcat
-              ["DaysAfterInitiation" @= _aimuDaysAfterInitiation]
-
--- | /See:/ 'accelerateConfiguration' smart constructor.
-newtype AccelerateConfiguration = AccelerateConfiguration'
-    { _acStatus :: Maybe BucketAccelerateStatus
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AccelerateConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'acStatus' - The accelerate configuration of the bucket.
-accelerateConfiguration
-    :: AccelerateConfiguration
-accelerateConfiguration =
-    AccelerateConfiguration'
-    { _acStatus = Nothing
-    }
-
--- | The accelerate configuration of the bucket.
-acStatus :: Lens' AccelerateConfiguration (Maybe BucketAccelerateStatus)
-acStatus = lens _acStatus (\ s a -> s{_acStatus = a});
-
-instance Hashable AccelerateConfiguration
-
-instance NFData AccelerateConfiguration
-
-instance ToXML AccelerateConfiguration where
-        toXML AccelerateConfiguration'{..}
-          = mconcat ["Status" @= _acStatus]
-
--- | /See:/ 'accessControlPolicy' smart constructor.
-data AccessControlPolicy = AccessControlPolicy'
-    { _acpGrants :: !(Maybe [Grant])
-    , _acpOwner  :: !(Maybe Owner)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AccessControlPolicy' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'acpGrants' - A list of grants.
---
--- * 'acpOwner' - Undocumented member.
-accessControlPolicy
-    :: AccessControlPolicy
-accessControlPolicy =
-    AccessControlPolicy'
-    { _acpGrants = Nothing
-    , _acpOwner = Nothing
-    }
-
--- | A list of grants.
-acpGrants :: Lens' AccessControlPolicy [Grant]
-acpGrants = lens _acpGrants (\ s a -> s{_acpGrants = a}) . _Default . _Coerce;
-
--- | Undocumented member.
-acpOwner :: Lens' AccessControlPolicy (Maybe Owner)
-acpOwner = lens _acpOwner (\ s a -> s{_acpOwner = a});
-
-instance Hashable AccessControlPolicy
-
-instance NFData AccessControlPolicy
-
-instance ToXML AccessControlPolicy where
-        toXML AccessControlPolicy'{..}
-          = mconcat
-              ["AccessControlList" @=
-                 toXML (toXMLList "Grant" <$> _acpGrants),
-               "Owner" @= _acpOwner]
-
--- | /See:/ 'analyticsAndOperator' smart constructor.
-data AnalyticsAndOperator = AnalyticsAndOperator'
-    { _aaoPrefix :: !(Maybe Text)
-    , _aaoTags   :: !(Maybe [Tag])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AnalyticsAndOperator' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aaoPrefix' - The prefix to use when evaluating an AND predicate.
---
--- * 'aaoTags' - The list of tags to use when evaluating an AND predicate.
-analyticsAndOperator
-    :: AnalyticsAndOperator
-analyticsAndOperator =
-    AnalyticsAndOperator'
-    { _aaoPrefix = Nothing
-    , _aaoTags = Nothing
-    }
-
--- | The prefix to use when evaluating an AND predicate.
-aaoPrefix :: Lens' AnalyticsAndOperator (Maybe Text)
-aaoPrefix = lens _aaoPrefix (\ s a -> s{_aaoPrefix = a});
-
--- | The list of tags to use when evaluating an AND predicate.
-aaoTags :: Lens' AnalyticsAndOperator [Tag]
-aaoTags = lens _aaoTags (\ s a -> s{_aaoTags = a}) . _Default . _Coerce;
-
-instance FromXML AnalyticsAndOperator where
-        parseXML x
-          = AnalyticsAndOperator' <$>
-              (x .@? "Prefix") <*>
-                (x .@? "Tag" .!@ mempty >>= may (parseXMLList "Tag"))
-
-instance Hashable AnalyticsAndOperator
-
-instance NFData AnalyticsAndOperator
-
-instance ToXML AnalyticsAndOperator where
-        toXML AnalyticsAndOperator'{..}
-          = mconcat
-              ["Prefix" @= _aaoPrefix,
-               "Tag" @= toXML (toXMLList "Tag" <$> _aaoTags)]
-
--- | /See:/ 'analyticsConfiguration' smart constructor.
-data AnalyticsConfiguration = AnalyticsConfiguration'
-    { _acFilter               :: !(Maybe AnalyticsFilter)
-    , _acId                   :: !Text
-    , _acStorageClassAnalysis :: !StorageClassAnalysis
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AnalyticsConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'acFilter' - The filter used to describe a set of objects for analyses. A filter must have exactly one prefix, one tag, or one conjunction (AnalyticsAndOperator). If no filter is provided, all objects will be considered in any analysis.
---
--- * 'acId' - The identifier used to represent an analytics configuration.
---
--- * 'acStorageClassAnalysis' - If present, it indicates that data related to access patterns will be collected and made available to analyze the tradeoffs between different storage classes.
-analyticsConfiguration
-    :: Text -- ^ 'acId'
-    -> StorageClassAnalysis -- ^ 'acStorageClassAnalysis'
-    -> AnalyticsConfiguration
-analyticsConfiguration pId_ pStorageClassAnalysis_ =
-    AnalyticsConfiguration'
-    { _acFilter = Nothing
-    , _acId = pId_
-    , _acStorageClassAnalysis = pStorageClassAnalysis_
-    }
-
--- | The filter used to describe a set of objects for analyses. A filter must have exactly one prefix, one tag, or one conjunction (AnalyticsAndOperator). If no filter is provided, all objects will be considered in any analysis.
-acFilter :: Lens' AnalyticsConfiguration (Maybe AnalyticsFilter)
-acFilter = lens _acFilter (\ s a -> s{_acFilter = a});
-
--- | The identifier used to represent an analytics configuration.
-acId :: Lens' AnalyticsConfiguration Text
-acId = lens _acId (\ s a -> s{_acId = a});
-
--- | If present, it indicates that data related to access patterns will be collected and made available to analyze the tradeoffs between different storage classes.
-acStorageClassAnalysis :: Lens' AnalyticsConfiguration StorageClassAnalysis
-acStorageClassAnalysis = lens _acStorageClassAnalysis (\ s a -> s{_acStorageClassAnalysis = a});
-
-instance FromXML AnalyticsConfiguration where
-        parseXML x
-          = AnalyticsConfiguration' <$>
-              (x .@? "Filter") <*> (x .@ "Id") <*>
-                (x .@ "StorageClassAnalysis")
-
-instance Hashable AnalyticsConfiguration
-
-instance NFData AnalyticsConfiguration
-
-instance ToXML AnalyticsConfiguration where
-        toXML AnalyticsConfiguration'{..}
-          = mconcat
-              ["Filter" @= _acFilter, "Id" @= _acId,
-               "StorageClassAnalysis" @= _acStorageClassAnalysis]
-
--- | /See:/ 'analyticsExportDestination' smart constructor.
-newtype AnalyticsExportDestination = AnalyticsExportDestination'
-    { _aedS3BucketDestination :: AnalyticsS3BucketDestination
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AnalyticsExportDestination' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aedS3BucketDestination' - A destination signifying output to an S3 bucket.
-analyticsExportDestination
-    :: AnalyticsS3BucketDestination -- ^ 'aedS3BucketDestination'
-    -> AnalyticsExportDestination
-analyticsExportDestination pS3BucketDestination_ =
-    AnalyticsExportDestination'
-    { _aedS3BucketDestination = pS3BucketDestination_
-    }
-
--- | A destination signifying output to an S3 bucket.
-aedS3BucketDestination :: Lens' AnalyticsExportDestination AnalyticsS3BucketDestination
-aedS3BucketDestination = lens _aedS3BucketDestination (\ s a -> s{_aedS3BucketDestination = a});
-
-instance FromXML AnalyticsExportDestination where
-        parseXML x
-          = AnalyticsExportDestination' <$>
-              (x .@ "S3BucketDestination")
-
-instance Hashable AnalyticsExportDestination
-
-instance NFData AnalyticsExportDestination
-
-instance ToXML AnalyticsExportDestination where
-        toXML AnalyticsExportDestination'{..}
-          = mconcat
-              ["S3BucketDestination" @= _aedS3BucketDestination]
-
--- | /See:/ 'analyticsFilter' smart constructor.
-data AnalyticsFilter = AnalyticsFilter'
-    { _afTag    :: !(Maybe Tag)
-    , _afPrefix :: !(Maybe Text)
-    , _afAnd    :: !(Maybe AnalyticsAndOperator)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AnalyticsFilter' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'afTag' - The tag to use when evaluating an analytics filter.
---
--- * 'afPrefix' - The prefix to use when evaluating an analytics filter.
---
--- * 'afAnd' - A conjunction (logical AND) of predicates, which is used in evaluating an analytics filter. The operator must have at least two predicates.
-analyticsFilter
-    :: AnalyticsFilter
-analyticsFilter =
-    AnalyticsFilter'
-    { _afTag = Nothing
-    , _afPrefix = Nothing
-    , _afAnd = Nothing
-    }
-
--- | The tag to use when evaluating an analytics filter.
-afTag :: Lens' AnalyticsFilter (Maybe Tag)
-afTag = lens _afTag (\ s a -> s{_afTag = a});
-
--- | The prefix to use when evaluating an analytics filter.
-afPrefix :: Lens' AnalyticsFilter (Maybe Text)
-afPrefix = lens _afPrefix (\ s a -> s{_afPrefix = a});
-
--- | A conjunction (logical AND) of predicates, which is used in evaluating an analytics filter. The operator must have at least two predicates.
-afAnd :: Lens' AnalyticsFilter (Maybe AnalyticsAndOperator)
-afAnd = lens _afAnd (\ s a -> s{_afAnd = a});
-
-instance FromXML AnalyticsFilter where
-        parseXML x
-          = AnalyticsFilter' <$>
-              (x .@? "Tag") <*> (x .@? "Prefix") <*> (x .@? "And")
-
-instance Hashable AnalyticsFilter
-
-instance NFData AnalyticsFilter
-
-instance ToXML AnalyticsFilter where
-        toXML AnalyticsFilter'{..}
-          = mconcat
-              ["Tag" @= _afTag, "Prefix" @= _afPrefix,
-               "And" @= _afAnd]
-
--- | /See:/ 'analyticsS3BucketDestination' smart constructor.
-data AnalyticsS3BucketDestination = AnalyticsS3BucketDestination'
-    { _asbdBucketAccountId :: !(Maybe Text)
-    , _asbdPrefix          :: !(Maybe Text)
-    , _asbdFormat          :: !AnalyticsS3ExportFileFormat
-    , _asbdBucket          :: !BucketName
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AnalyticsS3BucketDestination' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'asbdBucketAccountId' - The account ID that owns the destination bucket. If no account ID is provided, the owner will not be validated prior to exporting data.
---
--- * 'asbdPrefix' - The prefix to use when exporting data. The exported data begins with this prefix.
---
--- * 'asbdFormat' - The file format used when exporting data to Amazon S3.
---
--- * 'asbdBucket' - The Amazon resource name (ARN) of the bucket to which data is exported.
-analyticsS3BucketDestination
-    :: AnalyticsS3ExportFileFormat -- ^ 'asbdFormat'
-    -> BucketName -- ^ 'asbdBucket'
-    -> AnalyticsS3BucketDestination
-analyticsS3BucketDestination pFormat_ pBucket_ =
-    AnalyticsS3BucketDestination'
-    { _asbdBucketAccountId = Nothing
-    , _asbdPrefix = Nothing
-    , _asbdFormat = pFormat_
-    , _asbdBucket = pBucket_
-    }
-
--- | The account ID that owns the destination bucket. If no account ID is provided, the owner will not be validated prior to exporting data.
-asbdBucketAccountId :: Lens' AnalyticsS3BucketDestination (Maybe Text)
-asbdBucketAccountId = lens _asbdBucketAccountId (\ s a -> s{_asbdBucketAccountId = a});
-
--- | The prefix to use when exporting data. The exported data begins with this prefix.
-asbdPrefix :: Lens' AnalyticsS3BucketDestination (Maybe Text)
-asbdPrefix = lens _asbdPrefix (\ s a -> s{_asbdPrefix = a});
-
--- | The file format used when exporting data to Amazon S3.
-asbdFormat :: Lens' AnalyticsS3BucketDestination AnalyticsS3ExportFileFormat
-asbdFormat = lens _asbdFormat (\ s a -> s{_asbdFormat = a});
-
--- | The Amazon resource name (ARN) of the bucket to which data is exported.
-asbdBucket :: Lens' AnalyticsS3BucketDestination BucketName
-asbdBucket = lens _asbdBucket (\ s a -> s{_asbdBucket = a});
-
-instance FromXML AnalyticsS3BucketDestination where
-        parseXML x
-          = AnalyticsS3BucketDestination' <$>
-              (x .@? "BucketAccountId") <*> (x .@? "Prefix") <*>
-                (x .@ "Format")
-                <*> (x .@ "Bucket")
-
-instance Hashable AnalyticsS3BucketDestination
-
-instance NFData AnalyticsS3BucketDestination
-
-instance ToXML AnalyticsS3BucketDestination where
-        toXML AnalyticsS3BucketDestination'{..}
-          = mconcat
-              ["BucketAccountId" @= _asbdBucketAccountId,
-               "Prefix" @= _asbdPrefix, "Format" @= _asbdFormat,
-               "Bucket" @= _asbdBucket]
-
--- | /See:/ 'bucket' smart constructor.
-data Bucket = Bucket'
-    { _bCreationDate :: !RFC822
-    , _bName         :: !BucketName
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Bucket' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'bCreationDate' - Date the bucket was created.
---
--- * 'bName' - The name of the bucket.
-bucket
-    :: UTCTime -- ^ 'bCreationDate'
-    -> BucketName -- ^ 'bName'
-    -> Bucket
-bucket pCreationDate_ pName_ =
-    Bucket'
-    { _bCreationDate = _Time # pCreationDate_
-    , _bName = pName_
-    }
-
--- | Date the bucket was created.
-bCreationDate :: Lens' Bucket UTCTime
-bCreationDate = lens _bCreationDate (\ s a -> s{_bCreationDate = a}) . _Time;
-
--- | The name of the bucket.
-bName :: Lens' Bucket BucketName
-bName = lens _bName (\ s a -> s{_bName = a});
-
-instance FromXML Bucket where
-        parseXML x
-          = Bucket' <$> (x .@ "CreationDate") <*> (x .@ "Name")
-
-instance Hashable Bucket
-
-instance NFData Bucket
-
--- | /See:/ 'bucketLifecycleConfiguration' smart constructor.
-newtype BucketLifecycleConfiguration = BucketLifecycleConfiguration'
-    { _blcRules :: [LifecycleRule]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'BucketLifecycleConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'blcRules' - Undocumented member.
-bucketLifecycleConfiguration
-    :: BucketLifecycleConfiguration
-bucketLifecycleConfiguration =
-    BucketLifecycleConfiguration'
-    { _blcRules = mempty
-    }
-
--- | Undocumented member.
-blcRules :: Lens' BucketLifecycleConfiguration [LifecycleRule]
-blcRules = lens _blcRules (\ s a -> s{_blcRules = a}) . _Coerce;
-
-instance Hashable BucketLifecycleConfiguration
-
-instance NFData BucketLifecycleConfiguration
-
-instance ToXML BucketLifecycleConfiguration where
-        toXML BucketLifecycleConfiguration'{..}
-          = mconcat [toXMLList "Rule" _blcRules]
-
--- | /See:/ 'bucketLoggingStatus' smart constructor.
-newtype BucketLoggingStatus = BucketLoggingStatus'
-    { _blsLoggingEnabled :: Maybe LoggingEnabled
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'BucketLoggingStatus' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'blsLoggingEnabled' - Undocumented member.
-bucketLoggingStatus
-    :: BucketLoggingStatus
-bucketLoggingStatus =
-    BucketLoggingStatus'
-    { _blsLoggingEnabled = Nothing
-    }
-
--- | Undocumented member.
-blsLoggingEnabled :: Lens' BucketLoggingStatus (Maybe LoggingEnabled)
-blsLoggingEnabled = lens _blsLoggingEnabled (\ s a -> s{_blsLoggingEnabled = a});
-
-instance Hashable BucketLoggingStatus
-
-instance NFData BucketLoggingStatus
-
-instance ToXML BucketLoggingStatus where
-        toXML BucketLoggingStatus'{..}
-          = mconcat ["LoggingEnabled" @= _blsLoggingEnabled]
-
--- | /See:/ 'corsConfiguration' smart constructor.
-newtype CORSConfiguration = CORSConfiguration'
-    { _ccCORSRules :: [CORSRule]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CORSConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ccCORSRules' - Undocumented member.
-corsConfiguration
-    :: CORSConfiguration
-corsConfiguration =
-    CORSConfiguration'
-    { _ccCORSRules = mempty
-    }
-
--- | Undocumented member.
-ccCORSRules :: Lens' CORSConfiguration [CORSRule]
-ccCORSRules = lens _ccCORSRules (\ s a -> s{_ccCORSRules = a}) . _Coerce;
-
-instance Hashable CORSConfiguration
-
-instance NFData CORSConfiguration
-
-instance ToXML CORSConfiguration where
-        toXML CORSConfiguration'{..}
-          = mconcat [toXMLList "CORSRule" _ccCORSRules]
-
--- | /See:/ 'corsRule' smart constructor.
-data CORSRule = CORSRule'
-    { _crMaxAgeSeconds  :: !(Maybe Int)
-    , _crAllowedHeaders :: !(Maybe [Text])
-    , _crExposeHeaders  :: !(Maybe [Text])
-    , _crAllowedMethods :: ![Text]
-    , _crAllowedOrigins :: ![Text]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CORSRule' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'crMaxAgeSeconds' - The time in seconds that your browser is to cache the preflight response for the specified resource.
---
--- * 'crAllowedHeaders' - Specifies which headers are allowed in a pre-flight OPTIONS request.
---
--- * 'crExposeHeaders' - One or more headers in the response that you want customers to be able to access from their applications (for example, from a JavaScript XMLHttpRequest object).
---
--- * 'crAllowedMethods' - Identifies HTTP methods that the domain/origin specified in the rule is allowed to execute.
---
--- * 'crAllowedOrigins' - One or more origins you want customers to be able to access the bucket from.
-corsRule
-    :: CORSRule
-corsRule =
-    CORSRule'
-    { _crMaxAgeSeconds = Nothing
-    , _crAllowedHeaders = Nothing
-    , _crExposeHeaders = Nothing
-    , _crAllowedMethods = mempty
-    , _crAllowedOrigins = mempty
-    }
-
--- | The time in seconds that your browser is to cache the preflight response for the specified resource.
-crMaxAgeSeconds :: Lens' CORSRule (Maybe Int)
-crMaxAgeSeconds = lens _crMaxAgeSeconds (\ s a -> s{_crMaxAgeSeconds = a});
-
--- | Specifies which headers are allowed in a pre-flight OPTIONS request.
-crAllowedHeaders :: Lens' CORSRule [Text]
-crAllowedHeaders = lens _crAllowedHeaders (\ s a -> s{_crAllowedHeaders = a}) . _Default . _Coerce;
-
--- | One or more headers in the response that you want customers to be able to access from their applications (for example, from a JavaScript XMLHttpRequest object).
-crExposeHeaders :: Lens' CORSRule [Text]
-crExposeHeaders = lens _crExposeHeaders (\ s a -> s{_crExposeHeaders = a}) . _Default . _Coerce;
-
--- | Identifies HTTP methods that the domain/origin specified in the rule is allowed to execute.
-crAllowedMethods :: Lens' CORSRule [Text]
-crAllowedMethods = lens _crAllowedMethods (\ s a -> s{_crAllowedMethods = a}) . _Coerce;
-
--- | One or more origins you want customers to be able to access the bucket from.
-crAllowedOrigins :: Lens' CORSRule [Text]
-crAllowedOrigins = lens _crAllowedOrigins (\ s a -> s{_crAllowedOrigins = a}) . _Coerce;
-
-instance FromXML CORSRule where
-        parseXML x
-          = CORSRule' <$>
-              (x .@? "MaxAgeSeconds") <*>
-                (may (parseXMLList "AllowedHeader") x)
-                <*> (may (parseXMLList "ExposeHeader") x)
-                <*> (parseXMLList "AllowedMethod" x)
-                <*> (parseXMLList "AllowedOrigin" x)
-
-instance Hashable CORSRule
-
-instance NFData CORSRule
-
-instance ToXML CORSRule where
-        toXML CORSRule'{..}
-          = mconcat
-              ["MaxAgeSeconds" @= _crMaxAgeSeconds,
-               toXML
-                 (toXMLList "AllowedHeader" <$> _crAllowedHeaders),
-               toXML
-                 (toXMLList "ExposeHeader" <$> _crExposeHeaders),
-               toXMLList "AllowedMethod" _crAllowedMethods,
-               toXMLList "AllowedOrigin" _crAllowedOrigins]
-
--- | /See:/ 'commonPrefix' smart constructor.
-newtype CommonPrefix = CommonPrefix'
-    { _cpPrefix :: Maybe Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CommonPrefix' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cpPrefix' - Undocumented member.
-commonPrefix
-    :: CommonPrefix
-commonPrefix =
-    CommonPrefix'
-    { _cpPrefix = Nothing
-    }
-
--- | Undocumented member.
-cpPrefix :: Lens' CommonPrefix (Maybe Text)
-cpPrefix = lens _cpPrefix (\ s a -> s{_cpPrefix = a});
-
-instance FromXML CommonPrefix where
-        parseXML x = CommonPrefix' <$> (x .@? "Prefix")
-
-instance Hashable CommonPrefix
-
-instance NFData CommonPrefix
-
--- | /See:/ 'completedMultipartUpload' smart constructor.
-newtype CompletedMultipartUpload = CompletedMultipartUpload'
-    { _cmuParts :: Maybe (List1 CompletedPart)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CompletedMultipartUpload' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cmuParts' - Undocumented member.
-completedMultipartUpload
-    :: CompletedMultipartUpload
-completedMultipartUpload =
-    CompletedMultipartUpload'
-    { _cmuParts = Nothing
-    }
-
--- | Undocumented member.
-cmuParts :: Lens' CompletedMultipartUpload (Maybe (NonEmpty CompletedPart))
-cmuParts = lens _cmuParts (\ s a -> s{_cmuParts = a}) . mapping _List1;
-
-instance Hashable CompletedMultipartUpload
-
-instance NFData CompletedMultipartUpload
-
-instance ToXML CompletedMultipartUpload where
-        toXML CompletedMultipartUpload'{..}
-          = mconcat [toXML (toXMLList "Part" <$> _cmuParts)]
-
--- | /See:/ 'completedPart' smart constructor.
-data CompletedPart = CompletedPart'
-    { _cpPartNumber :: !Int
-    , _cpETag       :: !ETag
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CompletedPart' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cpPartNumber' - Part number that identifies the part. This is a positive integer between 1 and 10,000.
---
--- * 'cpETag' - Entity tag returned when the part was uploaded.
-completedPart
-    :: Int -- ^ 'cpPartNumber'
-    -> ETag -- ^ 'cpETag'
-    -> CompletedPart
-completedPart pPartNumber_ pETag_ =
-    CompletedPart'
-    { _cpPartNumber = pPartNumber_
-    , _cpETag = pETag_
-    }
-
--- | Part number that identifies the part. This is a positive integer between 1 and 10,000.
-cpPartNumber :: Lens' CompletedPart Int
-cpPartNumber = lens _cpPartNumber (\ s a -> s{_cpPartNumber = a});
-
--- | Entity tag returned when the part was uploaded.
-cpETag :: Lens' CompletedPart ETag
-cpETag = lens _cpETag (\ s a -> s{_cpETag = a});
-
-instance Hashable CompletedPart
-
-instance NFData CompletedPart
-
-instance ToXML CompletedPart where
-        toXML CompletedPart'{..}
-          = mconcat
-              ["PartNumber" @= _cpPartNumber, "ETag" @= _cpETag]
-
--- | /See:/ 'condition' smart constructor.
-data Condition = Condition'
-    { _cKeyPrefixEquals             :: !(Maybe Text)
-    , _cHTTPErrorCodeReturnedEquals :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Condition' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cKeyPrefixEquals' - The object key name prefix when the redirect is applied. For example, to redirect requests for ExamplePage.html, the key prefix will be ExamplePage.html. To redirect request for all pages with the prefix docs/, the key prefix will be /docs, which identifies all objects in the docs/ folder. Required when the parent element Condition is specified and sibling HttpErrorCodeReturnedEquals is not specified. If both conditions are specified, both must be true for the redirect to be applied.
---
--- * 'cHTTPErrorCodeReturnedEquals' - The HTTP error code when the redirect is applied. In the event of an error, if the error code equals this value, then the specified redirect is applied. Required when parent element Condition is specified and sibling KeyPrefixEquals is not specified. If both are specified, then both must be true for the redirect to be applied.
-condition
-    :: Condition
-condition =
-    Condition'
-    { _cKeyPrefixEquals = Nothing
-    , _cHTTPErrorCodeReturnedEquals = Nothing
-    }
-
--- | The object key name prefix when the redirect is applied. For example, to redirect requests for ExamplePage.html, the key prefix will be ExamplePage.html. To redirect request for all pages with the prefix docs/, the key prefix will be /docs, which identifies all objects in the docs/ folder. Required when the parent element Condition is specified and sibling HttpErrorCodeReturnedEquals is not specified. If both conditions are specified, both must be true for the redirect to be applied.
-cKeyPrefixEquals :: Lens' Condition (Maybe Text)
-cKeyPrefixEquals = lens _cKeyPrefixEquals (\ s a -> s{_cKeyPrefixEquals = a});
-
--- | The HTTP error code when the redirect is applied. In the event of an error, if the error code equals this value, then the specified redirect is applied. Required when parent element Condition is specified and sibling KeyPrefixEquals is not specified. If both are specified, then both must be true for the redirect to be applied.
-cHTTPErrorCodeReturnedEquals :: Lens' Condition (Maybe Text)
-cHTTPErrorCodeReturnedEquals = lens _cHTTPErrorCodeReturnedEquals (\ s a -> s{_cHTTPErrorCodeReturnedEquals = a});
-
-instance FromXML Condition where
-        parseXML x
-          = Condition' <$>
-              (x .@? "KeyPrefixEquals") <*>
-                (x .@? "HttpErrorCodeReturnedEquals")
-
-instance Hashable Condition
-
-instance NFData Condition
-
-instance ToXML Condition where
-        toXML Condition'{..}
-          = mconcat
-              ["KeyPrefixEquals" @= _cKeyPrefixEquals,
-               "HttpErrorCodeReturnedEquals" @=
-                 _cHTTPErrorCodeReturnedEquals]
-
--- | /See:/ 'copyObjectResult' smart constructor.
-data CopyObjectResult = CopyObjectResult'
-    { _corETag         :: !(Maybe ETag)
-    , _corLastModified :: !(Maybe RFC822)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CopyObjectResult' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'corETag' - Undocumented member.
---
--- * 'corLastModified' - Undocumented member.
-copyObjectResult
-    :: CopyObjectResult
-copyObjectResult =
-    CopyObjectResult'
-    { _corETag = Nothing
-    , _corLastModified = Nothing
-    }
-
--- | Undocumented member.
-corETag :: Lens' CopyObjectResult (Maybe ETag)
-corETag = lens _corETag (\ s a -> s{_corETag = a});
-
--- | Undocumented member.
-corLastModified :: Lens' CopyObjectResult (Maybe UTCTime)
-corLastModified = lens _corLastModified (\ s a -> s{_corLastModified = a}) . mapping _Time;
-
-instance FromXML CopyObjectResult where
-        parseXML x
-          = CopyObjectResult' <$>
-              (x .@? "ETag") <*> (x .@? "LastModified")
-
-instance Hashable CopyObjectResult
-
-instance NFData CopyObjectResult
-
--- | /See:/ 'copyPartResult' smart constructor.
-data CopyPartResult = CopyPartResult'
-    { _cprETag         :: !(Maybe ETag)
-    , _cprLastModified :: !(Maybe RFC822)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CopyPartResult' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cprETag' - Entity tag of the object.
---
--- * 'cprLastModified' - Date and time at which the object was uploaded.
-copyPartResult
-    :: CopyPartResult
-copyPartResult =
-    CopyPartResult'
-    { _cprETag = Nothing
-    , _cprLastModified = Nothing
-    }
-
--- | Entity tag of the object.
-cprETag :: Lens' CopyPartResult (Maybe ETag)
-cprETag = lens _cprETag (\ s a -> s{_cprETag = a});
-
--- | Date and time at which the object was uploaded.
-cprLastModified :: Lens' CopyPartResult (Maybe UTCTime)
-cprLastModified = lens _cprLastModified (\ s a -> s{_cprLastModified = a}) . mapping _Time;
-
-instance FromXML CopyPartResult where
-        parseXML x
-          = CopyPartResult' <$>
-              (x .@? "ETag") <*> (x .@? "LastModified")
-
-instance Hashable CopyPartResult
-
-instance NFData CopyPartResult
-
--- | /See:/ 'createBucketConfiguration' smart constructor.
-newtype CreateBucketConfiguration = CreateBucketConfiguration'
-    { _cbcLocationConstraint :: Maybe LocationConstraint
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateBucketConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cbcLocationConstraint' - Specifies the region where the bucket will be created. If you don't specify a region, the bucket will be created in US Standard.
-createBucketConfiguration
-    :: CreateBucketConfiguration
-createBucketConfiguration =
-    CreateBucketConfiguration'
-    { _cbcLocationConstraint = Nothing
-    }
-
--- | Specifies the region where the bucket will be created. If you don't specify a region, the bucket will be created in US Standard.
-cbcLocationConstraint :: Lens' CreateBucketConfiguration (Maybe LocationConstraint)
-cbcLocationConstraint = lens _cbcLocationConstraint (\ s a -> s{_cbcLocationConstraint = a});
-
-instance Hashable CreateBucketConfiguration
-
-instance NFData CreateBucketConfiguration
-
-instance ToXML CreateBucketConfiguration where
-        toXML CreateBucketConfiguration'{..}
-          = mconcat
-              ["LocationConstraint" @= _cbcLocationConstraint]
-
--- | /See:/ 'delete'' smart constructor.
-data Delete = Delete'
-    { _dQuiet   :: !(Maybe Bool)
-    , _dObjects :: ![ObjectIdentifier]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Delete' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dQuiet' - Element to enable quiet mode for the request. When you add this element, you must set its value to true.
---
--- * 'dObjects' - Undocumented member.
-delete'
-    :: Delete
-delete' =
-    Delete'
-    { _dQuiet = Nothing
-    , _dObjects = mempty
-    }
-
--- | Element to enable quiet mode for the request. When you add this element, you must set its value to true.
-dQuiet :: Lens' Delete (Maybe Bool)
-dQuiet = lens _dQuiet (\ s a -> s{_dQuiet = a});
-
--- | Undocumented member.
-dObjects :: Lens' Delete [ObjectIdentifier]
-dObjects = lens _dObjects (\ s a -> s{_dObjects = a}) . _Coerce;
-
-instance Hashable Delete
-
-instance NFData Delete
-
-instance ToXML Delete where
-        toXML Delete'{..}
-          = mconcat
-              ["Quiet" @= _dQuiet, toXMLList "Object" _dObjects]
-
--- | /See:/ 'deleteMarkerEntry' smart constructor.
-data DeleteMarkerEntry = DeleteMarkerEntry'
-    { _dmeVersionId    :: !(Maybe ObjectVersionId)
-    , _dmeIsLatest     :: !(Maybe Bool)
-    , _dmeOwner        :: !(Maybe Owner)
-    , _dmeKey          :: !(Maybe ObjectKey)
-    , _dmeLastModified :: !(Maybe RFC822)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteMarkerEntry' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dmeVersionId' - Version ID of an object.
---
--- * 'dmeIsLatest' - Specifies whether the object is (true) or is not (false) the latest version of an object.
---
--- * 'dmeOwner' - Undocumented member.
---
--- * 'dmeKey' - The object key.
---
--- * 'dmeLastModified' - Date and time the object was last modified.
-deleteMarkerEntry
-    :: DeleteMarkerEntry
-deleteMarkerEntry =
-    DeleteMarkerEntry'
-    { _dmeVersionId = Nothing
-    , _dmeIsLatest = Nothing
-    , _dmeOwner = Nothing
-    , _dmeKey = Nothing
-    , _dmeLastModified = Nothing
-    }
-
--- | Version ID of an object.
-dmeVersionId :: Lens' DeleteMarkerEntry (Maybe ObjectVersionId)
-dmeVersionId = lens _dmeVersionId (\ s a -> s{_dmeVersionId = a});
-
--- | Specifies whether the object is (true) or is not (false) the latest version of an object.
-dmeIsLatest :: Lens' DeleteMarkerEntry (Maybe Bool)
-dmeIsLatest = lens _dmeIsLatest (\ s a -> s{_dmeIsLatest = a});
-
--- | Undocumented member.
-dmeOwner :: Lens' DeleteMarkerEntry (Maybe Owner)
-dmeOwner = lens _dmeOwner (\ s a -> s{_dmeOwner = a});
-
--- | The object key.
-dmeKey :: Lens' DeleteMarkerEntry (Maybe ObjectKey)
-dmeKey = lens _dmeKey (\ s a -> s{_dmeKey = a});
-
--- | Date and time the object was last modified.
-dmeLastModified :: Lens' DeleteMarkerEntry (Maybe UTCTime)
-dmeLastModified = lens _dmeLastModified (\ s a -> s{_dmeLastModified = a}) . mapping _Time;
-
-instance FromXML DeleteMarkerEntry where
-        parseXML x
-          = DeleteMarkerEntry' <$>
-              (x .@? "VersionId") <*> (x .@? "IsLatest") <*>
-                (x .@? "Owner")
-                <*> (x .@? "Key")
-                <*> (x .@? "LastModified")
-
-instance Hashable DeleteMarkerEntry
-
-instance NFData DeleteMarkerEntry
-
--- | /See:/ 'deletedObject' smart constructor.
-data DeletedObject = DeletedObject'
-    { _dVersionId             :: !(Maybe ObjectVersionId)
-    , _dDeleteMarker          :: !(Maybe Bool)
-    , _dDeleteMarkerVersionId :: !(Maybe Text)
-    , _dKey                   :: !(Maybe ObjectKey)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeletedObject' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dVersionId' - Undocumented member.
---
--- * 'dDeleteMarker' - Undocumented member.
---
--- * 'dDeleteMarkerVersionId' - Undocumented member.
---
--- * 'dKey' - Undocumented member.
-deletedObject
-    :: DeletedObject
-deletedObject =
-    DeletedObject'
-    { _dVersionId = Nothing
-    , _dDeleteMarker = Nothing
-    , _dDeleteMarkerVersionId = Nothing
-    , _dKey = Nothing
-    }
-
--- | Undocumented member.
-dVersionId :: Lens' DeletedObject (Maybe ObjectVersionId)
-dVersionId = lens _dVersionId (\ s a -> s{_dVersionId = a});
-
--- | Undocumented member.
-dDeleteMarker :: Lens' DeletedObject (Maybe Bool)
-dDeleteMarker = lens _dDeleteMarker (\ s a -> s{_dDeleteMarker = a});
-
--- | Undocumented member.
-dDeleteMarkerVersionId :: Lens' DeletedObject (Maybe Text)
-dDeleteMarkerVersionId = lens _dDeleteMarkerVersionId (\ s a -> s{_dDeleteMarkerVersionId = a});
-
--- | Undocumented member.
-dKey :: Lens' DeletedObject (Maybe ObjectKey)
-dKey = lens _dKey (\ s a -> s{_dKey = a});
-
-instance FromXML DeletedObject where
-        parseXML x
-          = DeletedObject' <$>
-              (x .@? "VersionId") <*> (x .@? "DeleteMarker") <*>
-                (x .@? "DeleteMarkerVersionId")
-                <*> (x .@? "Key")
-
-instance Hashable DeletedObject
-
-instance NFData DeletedObject
-
--- | /See:/ 'destination' smart constructor.
-data Destination = Destination'
-    { _dStorageClass :: !(Maybe StorageClass)
-    , _dBucket       :: !BucketName
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Destination' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dStorageClass' - The class of storage used to store the object.
---
--- * 'dBucket' - Amazon resource name (ARN) of the bucket where you want Amazon S3 to store replicas of the object identified by the rule.
-destination
-    :: BucketName -- ^ 'dBucket'
-    -> Destination
-destination pBucket_ =
-    Destination'
-    { _dStorageClass = Nothing
-    , _dBucket = pBucket_
-    }
-
--- | The class of storage used to store the object.
-dStorageClass :: Lens' Destination (Maybe StorageClass)
-dStorageClass = lens _dStorageClass (\ s a -> s{_dStorageClass = a});
-
--- | Amazon resource name (ARN) of the bucket where you want Amazon S3 to store replicas of the object identified by the rule.
-dBucket :: Lens' Destination BucketName
-dBucket = lens _dBucket (\ s a -> s{_dBucket = a});
-
-instance FromXML Destination where
-        parseXML x
-          = Destination' <$>
-              (x .@? "StorageClass") <*> (x .@ "Bucket")
-
-instance Hashable Destination
-
-instance NFData Destination
-
-instance ToXML Destination where
-        toXML Destination'{..}
-          = mconcat
-              ["StorageClass" @= _dStorageClass,
-               "Bucket" @= _dBucket]
-
--- | /See:/ 'errorDocument' smart constructor.
-newtype ErrorDocument = ErrorDocument'
-    { _edKey :: ObjectKey
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ErrorDocument' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'edKey' - The object key name to use when a 4XX class error occurs.
-errorDocument
-    :: ObjectKey -- ^ 'edKey'
-    -> ErrorDocument
-errorDocument pKey_ =
-    ErrorDocument'
-    { _edKey = pKey_
-    }
-
--- | The object key name to use when a 4XX class error occurs.
-edKey :: Lens' ErrorDocument ObjectKey
-edKey = lens _edKey (\ s a -> s{_edKey = a});
-
-instance FromXML ErrorDocument where
-        parseXML x = ErrorDocument' <$> (x .@ "Key")
-
-instance Hashable ErrorDocument
-
-instance NFData ErrorDocument
-
-instance ToXML ErrorDocument where
-        toXML ErrorDocument'{..} = mconcat ["Key" @= _edKey]
-
--- | Container for key value pair that defines the criteria for the filter rule.
---
--- /See:/ 'filterRule' smart constructor.
-data FilterRule = FilterRule'
-    { _frValue :: !(Maybe Text)
-    , _frName  :: !(Maybe FilterRuleName)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'FilterRule' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'frValue' - Undocumented member.
---
--- * 'frName' - <http://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html Configuring Event Notifications>
-filterRule
-    :: FilterRule
-filterRule =
-    FilterRule'
-    { _frValue = Nothing
-    , _frName = Nothing
-    }
-
--- | Undocumented member.
-frValue :: Lens' FilterRule (Maybe Text)
-frValue = lens _frValue (\ s a -> s{_frValue = a});
-
--- | <http://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html Configuring Event Notifications>
-frName :: Lens' FilterRule (Maybe FilterRuleName)
-frName = lens _frName (\ s a -> s{_frName = a});
-
-instance FromXML FilterRule where
-        parseXML x
-          = FilterRule' <$> (x .@? "Value") <*> (x .@? "Name")
-
-instance Hashable FilterRule
-
-instance NFData FilterRule
-
-instance ToXML FilterRule where
-        toXML FilterRule'{..}
-          = mconcat ["Value" @= _frValue, "Name" @= _frName]
-
--- | /See:/ 'glacierJobParameters' smart constructor.
-newtype GlacierJobParameters = GlacierJobParameters'
-    { _gjpTier :: Tier
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'GlacierJobParameters' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gjpTier' - Glacier retrieval tier at which the restore will be processed.
-glacierJobParameters
-    :: Tier -- ^ 'gjpTier'
-    -> GlacierJobParameters
-glacierJobParameters pTier_ =
-    GlacierJobParameters'
-    { _gjpTier = pTier_
-    }
-
--- | Glacier retrieval tier at which the restore will be processed.
-gjpTier :: Lens' GlacierJobParameters Tier
-gjpTier = lens _gjpTier (\ s a -> s{_gjpTier = a});
-
-instance Hashable GlacierJobParameters
-
-instance NFData GlacierJobParameters
-
-instance ToXML GlacierJobParameters where
-        toXML GlacierJobParameters'{..}
-          = mconcat ["Tier" @= _gjpTier]
-
--- | /See:/ 'grant' smart constructor.
-data Grant = Grant'
-    { _gPermission :: !(Maybe Permission)
-    , _gGrantee    :: !(Maybe Grantee)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Grant' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gPermission' - Specifies the permission given to the grantee.
---
--- * 'gGrantee' - Undocumented member.
-grant
-    :: Grant
-grant =
-    Grant'
-    { _gPermission = Nothing
-    , _gGrantee = Nothing
-    }
-
--- | Specifies the permission given to the grantee.
-gPermission :: Lens' Grant (Maybe Permission)
-gPermission = lens _gPermission (\ s a -> s{_gPermission = a});
-
--- | Undocumented member.
-gGrantee :: Lens' Grant (Maybe Grantee)
-gGrantee = lens _gGrantee (\ s a -> s{_gGrantee = a});
-
-instance FromXML Grant where
-        parseXML x
-          = Grant' <$>
-              (x .@? "Permission") <*> (x .@? "Grantee")
-
-instance Hashable Grant
-
-instance NFData Grant
-
-instance ToXML Grant where
-        toXML Grant'{..}
-          = mconcat
-              ["Permission" @= _gPermission,
-               "Grantee" @= _gGrantee]
-
--- | /See:/ 'grantee' smart constructor.
-data Grantee = Grantee'
-    { _gURI          :: !(Maybe Text)
-    , _gEmailAddress :: !(Maybe Text)
-    , _gDisplayName  :: !(Maybe Text)
-    , _gId           :: !(Maybe Text)
-    , _gType         :: !Type
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Grantee' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gURI' - URI of the grantee group.
---
--- * 'gEmailAddress' - Email address of the grantee.
---
--- * 'gDisplayName' - Screen name of the grantee.
---
--- * 'gId' - The canonical user ID of the grantee.
---
--- * 'gType' - Type of grantee
-grantee
-    :: Type -- ^ 'gType'
-    -> Grantee
-grantee pType_ =
-    Grantee'
-    { _gURI = Nothing
-    , _gEmailAddress = Nothing
-    , _gDisplayName = Nothing
-    , _gId = Nothing
-    , _gType = pType_
-    }
-
--- | URI of the grantee group.
-gURI :: Lens' Grantee (Maybe Text)
-gURI = lens _gURI (\ s a -> s{_gURI = a});
-
--- | Email address of the grantee.
-gEmailAddress :: Lens' Grantee (Maybe Text)
-gEmailAddress = lens _gEmailAddress (\ s a -> s{_gEmailAddress = a});
-
--- | Screen name of the grantee.
-gDisplayName :: Lens' Grantee (Maybe Text)
-gDisplayName = lens _gDisplayName (\ s a -> s{_gDisplayName = a});
-
--- | The canonical user ID of the grantee.
-gId :: Lens' Grantee (Maybe Text)
-gId = lens _gId (\ s a -> s{_gId = a});
-
--- | Type of grantee
-gType :: Lens' Grantee Type
-gType = lens _gType (\ s a -> s{_gType = a});
-
-instance FromXML Grantee where
-        parseXML x
-          = Grantee' <$>
-              (x .@? "URI") <*> (x .@? "EmailAddress") <*>
-                (x .@? "DisplayName")
-                <*> (x .@? "ID")
-                <*> (x .@ "xsi:type")
-
-instance Hashable Grantee
-
-instance NFData Grantee
-
-instance ToXML Grantee where
-        toXML Grantee'{..}
-          = mconcat
-              ["URI" @= _gURI, "EmailAddress" @= _gEmailAddress,
-               "DisplayName" @= _gDisplayName, "ID" @= _gId,
-               "xsi:type" @= _gType]
-
--- | /See:/ 'indexDocument' smart constructor.
-newtype IndexDocument = IndexDocument'
-    { _idSuffix :: Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'IndexDocument' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'idSuffix' - A suffix that is appended to a request that is for a directory on the website endpoint (e.g. if the suffix is index.html and you make a request to samplebucket/images/ the data that is returned will be for the object with the key name images/index.html) The suffix must not be empty and must not include a slash character.
-indexDocument
-    :: Text -- ^ 'idSuffix'
-    -> IndexDocument
-indexDocument pSuffix_ =
-    IndexDocument'
-    { _idSuffix = pSuffix_
-    }
-
--- | A suffix that is appended to a request that is for a directory on the website endpoint (e.g. if the suffix is index.html and you make a request to samplebucket/images/ the data that is returned will be for the object with the key name images/index.html) The suffix must not be empty and must not include a slash character.
-idSuffix :: Lens' IndexDocument Text
-idSuffix = lens _idSuffix (\ s a -> s{_idSuffix = a});
-
-instance FromXML IndexDocument where
-        parseXML x = IndexDocument' <$> (x .@ "Suffix")
-
-instance Hashable IndexDocument
-
-instance NFData IndexDocument
-
-instance ToXML IndexDocument where
-        toXML IndexDocument'{..}
-          = mconcat ["Suffix" @= _idSuffix]
-
--- | /See:/ 'initiator' smart constructor.
-data Initiator = Initiator'
-    { _iDisplayName :: !(Maybe Text)
-    , _iId          :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Initiator' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'iDisplayName' - Name of the Principal.
---
--- * 'iId' - If the principal is an AWS account, it provides the Canonical User ID. If the principal is an IAM User, it provides a user ARN value.
-initiator
-    :: Initiator
-initiator =
-    Initiator'
-    { _iDisplayName = Nothing
-    , _iId = Nothing
-    }
-
--- | Name of the Principal.
-iDisplayName :: Lens' Initiator (Maybe Text)
-iDisplayName = lens _iDisplayName (\ s a -> s{_iDisplayName = a});
-
--- | If the principal is an AWS account, it provides the Canonical User ID. If the principal is an IAM User, it provides a user ARN value.
-iId :: Lens' Initiator (Maybe Text)
-iId = lens _iId (\ s a -> s{_iId = a});
-
-instance FromXML Initiator where
-        parseXML x
-          = Initiator' <$>
-              (x .@? "DisplayName") <*> (x .@? "ID")
-
-instance Hashable Initiator
-
-instance NFData Initiator
-
--- | /See:/ 'inventoryConfiguration' smart constructor.
-data InventoryConfiguration = InventoryConfiguration'
-    { _icOptionalFields         :: !(Maybe [InventoryOptionalField])
-    , _icFilter                 :: !(Maybe InventoryFilter)
-    , _icDestination            :: !InventoryDestination
-    , _icIsEnabled              :: !Bool
-    , _icId                     :: !Text
-    , _icIncludedObjectVersions :: !InventoryIncludedObjectVersions
-    , _icSchedule               :: !InventorySchedule
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InventoryConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'icOptionalFields' - Contains the optional fields that are included in the inventory results.
---
--- * 'icFilter' - Specifies an inventory filter. The inventory only includes objects that meet the filter's criteria.
---
--- * 'icDestination' - Contains information about where to publish the inventory results.
---
--- * 'icIsEnabled' - Specifies whether the inventory is enabled or disabled.
---
--- * 'icId' - The ID used to identify the inventory configuration.
---
--- * 'icIncludedObjectVersions' - Specifies which object version(s) to included in the inventory results.
---
--- * 'icSchedule' - Specifies the schedule for generating inventory results.
-inventoryConfiguration
-    :: InventoryDestination -- ^ 'icDestination'
-    -> Bool -- ^ 'icIsEnabled'
-    -> Text -- ^ 'icId'
-    -> InventoryIncludedObjectVersions -- ^ 'icIncludedObjectVersions'
-    -> InventorySchedule -- ^ 'icSchedule'
-    -> InventoryConfiguration
-inventoryConfiguration pDestination_ pIsEnabled_ pId_ pIncludedObjectVersions_ pSchedule_ =
-    InventoryConfiguration'
-    { _icOptionalFields = Nothing
-    , _icFilter = Nothing
-    , _icDestination = pDestination_
-    , _icIsEnabled = pIsEnabled_
-    , _icId = pId_
-    , _icIncludedObjectVersions = pIncludedObjectVersions_
-    , _icSchedule = pSchedule_
-    }
-
--- | Contains the optional fields that are included in the inventory results.
-icOptionalFields :: Lens' InventoryConfiguration [InventoryOptionalField]
-icOptionalFields = lens _icOptionalFields (\ s a -> s{_icOptionalFields = a}) . _Default . _Coerce;
-
--- | Specifies an inventory filter. The inventory only includes objects that meet the filter's criteria.
-icFilter :: Lens' InventoryConfiguration (Maybe InventoryFilter)
-icFilter = lens _icFilter (\ s a -> s{_icFilter = a});
-
--- | Contains information about where to publish the inventory results.
-icDestination :: Lens' InventoryConfiguration InventoryDestination
-icDestination = lens _icDestination (\ s a -> s{_icDestination = a});
-
--- | Specifies whether the inventory is enabled or disabled.
-icIsEnabled :: Lens' InventoryConfiguration Bool
-icIsEnabled = lens _icIsEnabled (\ s a -> s{_icIsEnabled = a});
-
--- | The ID used to identify the inventory configuration.
-icId :: Lens' InventoryConfiguration Text
-icId = lens _icId (\ s a -> s{_icId = a});
-
--- | Specifies which object version(s) to included in the inventory results.
-icIncludedObjectVersions :: Lens' InventoryConfiguration InventoryIncludedObjectVersions
-icIncludedObjectVersions = lens _icIncludedObjectVersions (\ s a -> s{_icIncludedObjectVersions = a});
-
--- | Specifies the schedule for generating inventory results.
-icSchedule :: Lens' InventoryConfiguration InventorySchedule
-icSchedule = lens _icSchedule (\ s a -> s{_icSchedule = a});
-
-instance FromXML InventoryConfiguration where
-        parseXML x
-          = InventoryConfiguration' <$>
-              (x .@? "OptionalFields" .!@ mempty >>=
-                 may (parseXMLList "Field"))
-                <*> (x .@? "Filter")
-                <*> (x .@ "Destination")
-                <*> (x .@ "IsEnabled")
-                <*> (x .@ "Id")
-                <*> (x .@ "IncludedObjectVersions")
-                <*> (x .@ "Schedule")
-
-instance Hashable InventoryConfiguration
-
-instance NFData InventoryConfiguration
-
-instance ToXML InventoryConfiguration where
-        toXML InventoryConfiguration'{..}
-          = mconcat
-              ["OptionalFields" @=
-                 toXML (toXMLList "Field" <$> _icOptionalFields),
-               "Filter" @= _icFilter,
-               "Destination" @= _icDestination,
-               "IsEnabled" @= _icIsEnabled, "Id" @= _icId,
-               "IncludedObjectVersions" @=
-                 _icIncludedObjectVersions,
-               "Schedule" @= _icSchedule]
-
--- | /See:/ 'inventoryDestination' smart constructor.
-newtype InventoryDestination = InventoryDestination'
-    { _idS3BucketDestination :: InventoryS3BucketDestination
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InventoryDestination' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'idS3BucketDestination' - Contains the bucket name, file format, bucket owner (optional), and prefix (optional) where inventory results are published.
-inventoryDestination
-    :: InventoryS3BucketDestination -- ^ 'idS3BucketDestination'
-    -> InventoryDestination
-inventoryDestination pS3BucketDestination_ =
-    InventoryDestination'
-    { _idS3BucketDestination = pS3BucketDestination_
-    }
-
--- | Contains the bucket name, file format, bucket owner (optional), and prefix (optional) where inventory results are published.
-idS3BucketDestination :: Lens' InventoryDestination InventoryS3BucketDestination
-idS3BucketDestination = lens _idS3BucketDestination (\ s a -> s{_idS3BucketDestination = a});
-
-instance FromXML InventoryDestination where
-        parseXML x
-          = InventoryDestination' <$>
-              (x .@ "S3BucketDestination")
-
-instance Hashable InventoryDestination
-
-instance NFData InventoryDestination
-
-instance ToXML InventoryDestination where
-        toXML InventoryDestination'{..}
-          = mconcat
-              ["S3BucketDestination" @= _idS3BucketDestination]
-
--- | /See:/ 'inventoryFilter' smart constructor.
-newtype InventoryFilter = InventoryFilter'
-    { _ifPrefix :: Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InventoryFilter' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ifPrefix' - The prefix that an object must have to be included in the inventory results.
-inventoryFilter
-    :: Text -- ^ 'ifPrefix'
-    -> InventoryFilter
-inventoryFilter pPrefix_ =
-    InventoryFilter'
-    { _ifPrefix = pPrefix_
-    }
-
--- | The prefix that an object must have to be included in the inventory results.
-ifPrefix :: Lens' InventoryFilter Text
-ifPrefix = lens _ifPrefix (\ s a -> s{_ifPrefix = a});
-
-instance FromXML InventoryFilter where
-        parseXML x = InventoryFilter' <$> (x .@ "Prefix")
-
-instance Hashable InventoryFilter
-
-instance NFData InventoryFilter
-
-instance ToXML InventoryFilter where
-        toXML InventoryFilter'{..}
-          = mconcat ["Prefix" @= _ifPrefix]
-
--- | /See:/ 'inventoryS3BucketDestination' smart constructor.
-data InventoryS3BucketDestination = InventoryS3BucketDestination'
-    { _isbdPrefix    :: !(Maybe Text)
-    , _isbdAccountId :: !(Maybe Text)
-    , _isbdBucket    :: !BucketName
-    , _isbdFormat    :: !InventoryFormat
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InventoryS3BucketDestination' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'isbdPrefix' - The prefix that is prepended to all inventory results.
---
--- * 'isbdAccountId' - The ID of the account that owns the destination bucket.
---
--- * 'isbdBucket' - The Amazon resource name (ARN) of the bucket where inventory results will be published.
---
--- * 'isbdFormat' - Specifies the output format of the inventory results.
-inventoryS3BucketDestination
-    :: BucketName -- ^ 'isbdBucket'
-    -> InventoryFormat -- ^ 'isbdFormat'
-    -> InventoryS3BucketDestination
-inventoryS3BucketDestination pBucket_ pFormat_ =
-    InventoryS3BucketDestination'
-    { _isbdPrefix = Nothing
-    , _isbdAccountId = Nothing
-    , _isbdBucket = pBucket_
-    , _isbdFormat = pFormat_
-    }
-
--- | The prefix that is prepended to all inventory results.
-isbdPrefix :: Lens' InventoryS3BucketDestination (Maybe Text)
-isbdPrefix = lens _isbdPrefix (\ s a -> s{_isbdPrefix = a});
-
--- | The ID of the account that owns the destination bucket.
-isbdAccountId :: Lens' InventoryS3BucketDestination (Maybe Text)
-isbdAccountId = lens _isbdAccountId (\ s a -> s{_isbdAccountId = a});
-
--- | The Amazon resource name (ARN) of the bucket where inventory results will be published.
-isbdBucket :: Lens' InventoryS3BucketDestination BucketName
-isbdBucket = lens _isbdBucket (\ s a -> s{_isbdBucket = a});
-
--- | Specifies the output format of the inventory results.
-isbdFormat :: Lens' InventoryS3BucketDestination InventoryFormat
-isbdFormat = lens _isbdFormat (\ s a -> s{_isbdFormat = a});
-
-instance FromXML InventoryS3BucketDestination where
-        parseXML x
-          = InventoryS3BucketDestination' <$>
-              (x .@? "Prefix") <*> (x .@? "AccountId") <*>
-                (x .@ "Bucket")
-                <*> (x .@ "Format")
-
-instance Hashable InventoryS3BucketDestination
-
-instance NFData InventoryS3BucketDestination
-
-instance ToXML InventoryS3BucketDestination where
-        toXML InventoryS3BucketDestination'{..}
-          = mconcat
-              ["Prefix" @= _isbdPrefix,
-               "AccountId" @= _isbdAccountId,
-               "Bucket" @= _isbdBucket, "Format" @= _isbdFormat]
-
--- | /See:/ 'inventorySchedule' smart constructor.
-newtype InventorySchedule = InventorySchedule'
-    { _isFrequency :: InventoryFrequency
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InventorySchedule' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'isFrequency' - Specifies how frequently inventory results are produced.
-inventorySchedule
-    :: InventoryFrequency -- ^ 'isFrequency'
-    -> InventorySchedule
-inventorySchedule pFrequency_ =
-    InventorySchedule'
-    { _isFrequency = pFrequency_
-    }
-
--- | Specifies how frequently inventory results are produced.
-isFrequency :: Lens' InventorySchedule InventoryFrequency
-isFrequency = lens _isFrequency (\ s a -> s{_isFrequency = a});
-
-instance FromXML InventorySchedule where
-        parseXML x
-          = InventorySchedule' <$> (x .@ "Frequency")
-
-instance Hashable InventorySchedule
-
-instance NFData InventorySchedule
-
-instance ToXML InventorySchedule where
-        toXML InventorySchedule'{..}
-          = mconcat ["Frequency" @= _isFrequency]
-
--- | Container for specifying the AWS Lambda notification configuration.
---
--- /See:/ 'lambdaFunctionConfiguration' smart constructor.
-data LambdaFunctionConfiguration = LambdaFunctionConfiguration'
-    { _lfcId                :: !(Maybe Text)
-    , _lfcFilter            :: !(Maybe NotificationConfigurationFilter)
-    , _lfcLambdaFunctionARN :: !Text
-    , _lfcEvents            :: ![Event]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'LambdaFunctionConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'lfcId' - Undocumented member.
---
--- * 'lfcFilter' - Undocumented member.
---
--- * 'lfcLambdaFunctionARN' - Lambda cloud function ARN that Amazon S3 can invoke when it detects events of the specified type.
---
--- * 'lfcEvents' - Undocumented member.
-lambdaFunctionConfiguration
-    :: Text -- ^ 'lfcLambdaFunctionARN'
-    -> LambdaFunctionConfiguration
-lambdaFunctionConfiguration pLambdaFunctionARN_ =
-    LambdaFunctionConfiguration'
-    { _lfcId = Nothing
-    , _lfcFilter = Nothing
-    , _lfcLambdaFunctionARN = pLambdaFunctionARN_
-    , _lfcEvents = mempty
-    }
-
--- | Undocumented member.
-lfcId :: Lens' LambdaFunctionConfiguration (Maybe Text)
-lfcId = lens _lfcId (\ s a -> s{_lfcId = a});
-
--- | Undocumented member.
-lfcFilter :: Lens' LambdaFunctionConfiguration (Maybe NotificationConfigurationFilter)
-lfcFilter = lens _lfcFilter (\ s a -> s{_lfcFilter = a});
-
--- | Lambda cloud function ARN that Amazon S3 can invoke when it detects events of the specified type.
-lfcLambdaFunctionARN :: Lens' LambdaFunctionConfiguration Text
-lfcLambdaFunctionARN = lens _lfcLambdaFunctionARN (\ s a -> s{_lfcLambdaFunctionARN = a});
-
--- | Undocumented member.
-lfcEvents :: Lens' LambdaFunctionConfiguration [Event]
-lfcEvents = lens _lfcEvents (\ s a -> s{_lfcEvents = a}) . _Coerce;
-
-instance FromXML LambdaFunctionConfiguration where
-        parseXML x
-          = LambdaFunctionConfiguration' <$>
-              (x .@? "Id") <*> (x .@? "Filter") <*>
-                (x .@ "CloudFunction")
-                <*> (parseXMLList "Event" x)
-
-instance Hashable LambdaFunctionConfiguration
-
-instance NFData LambdaFunctionConfiguration
-
-instance ToXML LambdaFunctionConfiguration where
-        toXML LambdaFunctionConfiguration'{..}
-          = mconcat
-              ["Id" @= _lfcId, "Filter" @= _lfcFilter,
-               "CloudFunction" @= _lfcLambdaFunctionARN,
-               toXMLList "Event" _lfcEvents]
-
--- | /See:/ 'lifecycleExpiration' smart constructor.
-data LifecycleExpiration = LifecycleExpiration'
-    { _leDays                      :: !(Maybe Int)
-    , _leDate                      :: !(Maybe RFC822)
-    , _leExpiredObjectDeleteMarker :: !(Maybe Bool)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'LifecycleExpiration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'leDays' - Indicates the lifetime, in days, of the objects that are subject to the rule. The value must be a non-zero positive integer.
---
--- * 'leDate' - Indicates at what date the object is to be moved or deleted. Should be in GMT ISO 8601 Format.
---
--- * 'leExpiredObjectDeleteMarker' - Indicates whether Amazon S3 will remove a delete marker with no noncurrent versions. If set to true, the delete marker will be expired; if set to false the policy takes no action. This cannot be specified with Days or Date in a Lifecycle Expiration Policy.
-lifecycleExpiration
-    :: LifecycleExpiration
-lifecycleExpiration =
-    LifecycleExpiration'
-    { _leDays = Nothing
-    , _leDate = Nothing
-    , _leExpiredObjectDeleteMarker = Nothing
-    }
-
--- | Indicates the lifetime, in days, of the objects that are subject to the rule. The value must be a non-zero positive integer.
-leDays :: Lens' LifecycleExpiration (Maybe Int)
-leDays = lens _leDays (\ s a -> s{_leDays = a});
-
--- | Indicates at what date the object is to be moved or deleted. Should be in GMT ISO 8601 Format.
-leDate :: Lens' LifecycleExpiration (Maybe UTCTime)
-leDate = lens _leDate (\ s a -> s{_leDate = a}) . mapping _Time;
-
--- | Indicates whether Amazon S3 will remove a delete marker with no noncurrent versions. If set to true, the delete marker will be expired; if set to false the policy takes no action. This cannot be specified with Days or Date in a Lifecycle Expiration Policy.
-leExpiredObjectDeleteMarker :: Lens' LifecycleExpiration (Maybe Bool)
-leExpiredObjectDeleteMarker = lens _leExpiredObjectDeleteMarker (\ s a -> s{_leExpiredObjectDeleteMarker = a});
-
-instance FromXML LifecycleExpiration where
-        parseXML x
-          = LifecycleExpiration' <$>
-              (x .@? "Days") <*> (x .@? "Date") <*>
-                (x .@? "ExpiredObjectDeleteMarker")
-
-instance Hashable LifecycleExpiration
-
-instance NFData LifecycleExpiration
-
-instance ToXML LifecycleExpiration where
-        toXML LifecycleExpiration'{..}
-          = mconcat
-              ["Days" @= _leDays, "Date" @= _leDate,
-               "ExpiredObjectDeleteMarker" @=
-                 _leExpiredObjectDeleteMarker]
-
--- | /See:/ 'lifecycleRule' smart constructor.
-data LifecycleRule = LifecycleRule'
-    { _lrTransitions                    :: !(Maybe [Transition])
-    , _lrNoncurrentVersionExpiration    :: !(Maybe NoncurrentVersionExpiration)
-    , _lrPrefix                         :: !(Maybe Text)
-    , _lrNoncurrentVersionTransitions   :: !(Maybe [NoncurrentVersionTransition])
-    , _lrExpiration                     :: !(Maybe LifecycleExpiration)
-    , _lrId                             :: !(Maybe Text)
-    , _lrFilter                         :: !(Maybe LifecycleRuleFilter)
-    , _lrAbortIncompleteMultipartUpload :: !(Maybe AbortIncompleteMultipartUpload)
-    , _lrStatus                         :: !ExpirationStatus
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'LifecycleRule' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'lrTransitions' - Undocumented member.
---
--- * 'lrNoncurrentVersionExpiration' - Undocumented member.
---
--- * 'lrPrefix' - Prefix identifying one or more objects to which the rule applies. This is deprecated; use Filter instead.
---
--- * 'lrNoncurrentVersionTransitions' - Undocumented member.
---
--- * 'lrExpiration' - Undocumented member.
---
--- * 'lrId' - Unique identifier for the rule. The value cannot be longer than 255 characters.
---
--- * 'lrFilter' - Undocumented member.
---
--- * 'lrAbortIncompleteMultipartUpload' - Undocumented member.
---
--- * 'lrStatus' - If 'Enabled', the rule is currently being applied. If 'Disabled', the rule is not currently being applied.
-lifecycleRule
-    :: ExpirationStatus -- ^ 'lrStatus'
-    -> LifecycleRule
-lifecycleRule pStatus_ =
-    LifecycleRule'
-    { _lrTransitions = Nothing
-    , _lrNoncurrentVersionExpiration = Nothing
-    , _lrPrefix = Nothing
-    , _lrNoncurrentVersionTransitions = Nothing
-    , _lrExpiration = Nothing
-    , _lrId = Nothing
-    , _lrFilter = Nothing
-    , _lrAbortIncompleteMultipartUpload = Nothing
-    , _lrStatus = pStatus_
-    }
-
--- | Undocumented member.
-lrTransitions :: Lens' LifecycleRule [Transition]
-lrTransitions = lens _lrTransitions (\ s a -> s{_lrTransitions = a}) . _Default . _Coerce;
-
--- | Undocumented member.
-lrNoncurrentVersionExpiration :: Lens' LifecycleRule (Maybe NoncurrentVersionExpiration)
-lrNoncurrentVersionExpiration = lens _lrNoncurrentVersionExpiration (\ s a -> s{_lrNoncurrentVersionExpiration = a});
-
--- | Prefix identifying one or more objects to which the rule applies. This is deprecated; use Filter instead.
-lrPrefix :: Lens' LifecycleRule (Maybe Text)
-lrPrefix = lens _lrPrefix (\ s a -> s{_lrPrefix = a});
-
--- | Undocumented member.
-lrNoncurrentVersionTransitions :: Lens' LifecycleRule [NoncurrentVersionTransition]
-lrNoncurrentVersionTransitions = lens _lrNoncurrentVersionTransitions (\ s a -> s{_lrNoncurrentVersionTransitions = a}) . _Default . _Coerce;
-
--- | Undocumented member.
-lrExpiration :: Lens' LifecycleRule (Maybe LifecycleExpiration)
-lrExpiration = lens _lrExpiration (\ s a -> s{_lrExpiration = a});
-
--- | Unique identifier for the rule. The value cannot be longer than 255 characters.
-lrId :: Lens' LifecycleRule (Maybe Text)
-lrId = lens _lrId (\ s a -> s{_lrId = a});
-
--- | Undocumented member.
-lrFilter :: Lens' LifecycleRule (Maybe LifecycleRuleFilter)
-lrFilter = lens _lrFilter (\ s a -> s{_lrFilter = a});
-
--- | Undocumented member.
-lrAbortIncompleteMultipartUpload :: Lens' LifecycleRule (Maybe AbortIncompleteMultipartUpload)
-lrAbortIncompleteMultipartUpload = lens _lrAbortIncompleteMultipartUpload (\ s a -> s{_lrAbortIncompleteMultipartUpload = a});
-
--- | If 'Enabled', the rule is currently being applied. If 'Disabled', the rule is not currently being applied.
-lrStatus :: Lens' LifecycleRule ExpirationStatus
-lrStatus = lens _lrStatus (\ s a -> s{_lrStatus = a});
-
-instance FromXML LifecycleRule where
-        parseXML x
-          = LifecycleRule' <$>
-              (may (parseXMLList "Transition") x) <*>
-                (x .@? "NoncurrentVersionExpiration")
-                <*> (x .@? "Prefix")
-                <*>
-                (may (parseXMLList "NoncurrentVersionTransition") x)
-                <*> (x .@? "Expiration")
-                <*> (x .@? "ID")
-                <*> (x .@? "Filter")
-                <*> (x .@? "AbortIncompleteMultipartUpload")
-                <*> (x .@ "Status")
-
-instance Hashable LifecycleRule
-
-instance NFData LifecycleRule
-
-instance ToXML LifecycleRule where
-        toXML LifecycleRule'{..}
-          = mconcat
-              [toXML (toXMLList "Transition" <$> _lrTransitions),
-               "NoncurrentVersionExpiration" @=
-                 _lrNoncurrentVersionExpiration,
-               "Prefix" @= _lrPrefix,
-               toXML
-                 (toXMLList "NoncurrentVersionTransition" <$>
-                    _lrNoncurrentVersionTransitions),
-               "Expiration" @= _lrExpiration, "ID" @= _lrId,
-               "Filter" @= _lrFilter,
-               "AbortIncompleteMultipartUpload" @=
-                 _lrAbortIncompleteMultipartUpload,
-               "Status" @= _lrStatus]
-
--- | This is used in a Lifecycle Rule Filter to apply a logical AND to two or more predicates. The Lifecycle Rule will apply to any object matching all of the predicates configured inside the And operator.
---
--- /See:/ 'lifecycleRuleAndOperator' smart constructor.
-data LifecycleRuleAndOperator = LifecycleRuleAndOperator'
-    { _lraoPrefix :: !(Maybe Text)
-    , _lraoTags   :: !(Maybe [Tag])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'LifecycleRuleAndOperator' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'lraoPrefix' - Undocumented member.
---
--- * 'lraoTags' - All of these tags must exist in the object's tag set in order for the rule to apply.
-lifecycleRuleAndOperator
-    :: LifecycleRuleAndOperator
-lifecycleRuleAndOperator =
-    LifecycleRuleAndOperator'
-    { _lraoPrefix = Nothing
-    , _lraoTags = Nothing
-    }
-
--- | Undocumented member.
-lraoPrefix :: Lens' LifecycleRuleAndOperator (Maybe Text)
-lraoPrefix = lens _lraoPrefix (\ s a -> s{_lraoPrefix = a});
-
--- | All of these tags must exist in the object's tag set in order for the rule to apply.
-lraoTags :: Lens' LifecycleRuleAndOperator [Tag]
-lraoTags = lens _lraoTags (\ s a -> s{_lraoTags = a}) . _Default . _Coerce;
-
-instance FromXML LifecycleRuleAndOperator where
-        parseXML x
-          = LifecycleRuleAndOperator' <$>
-              (x .@? "Prefix") <*>
-                (x .@? "Tag" .!@ mempty >>= may (parseXMLList "Tag"))
-
-instance Hashable LifecycleRuleAndOperator
-
-instance NFData LifecycleRuleAndOperator
-
-instance ToXML LifecycleRuleAndOperator where
-        toXML LifecycleRuleAndOperator'{..}
-          = mconcat
-              ["Prefix" @= _lraoPrefix,
-               "Tag" @= toXML (toXMLList "Tag" <$> _lraoTags)]
-
--- | The Filter is used to identify objects that a Lifecycle Rule applies to. A Filter must have exactly one of Prefix, Tag, or And specified.
---
--- /See:/ 'lifecycleRuleFilter' smart constructor.
-data LifecycleRuleFilter = LifecycleRuleFilter'
-    { _lrfTag    :: !(Maybe Tag)
-    , _lrfPrefix :: !(Maybe Text)
-    , _lrfAnd    :: !(Maybe LifecycleRuleAndOperator)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'LifecycleRuleFilter' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'lrfTag' - This tag must exist in the object's tag set in order for the rule to apply.
---
--- * 'lrfPrefix' - Prefix identifying one or more objects to which the rule applies.
---
--- * 'lrfAnd' - Undocumented member.
-lifecycleRuleFilter
-    :: LifecycleRuleFilter
-lifecycleRuleFilter =
-    LifecycleRuleFilter'
-    { _lrfTag = Nothing
-    , _lrfPrefix = Nothing
-    , _lrfAnd = Nothing
-    }
-
--- | This tag must exist in the object's tag set in order for the rule to apply.
-lrfTag :: Lens' LifecycleRuleFilter (Maybe Tag)
-lrfTag = lens _lrfTag (\ s a -> s{_lrfTag = a});
-
--- | Prefix identifying one or more objects to which the rule applies.
-lrfPrefix :: Lens' LifecycleRuleFilter (Maybe Text)
-lrfPrefix = lens _lrfPrefix (\ s a -> s{_lrfPrefix = a});
-
--- | Undocumented member.
-lrfAnd :: Lens' LifecycleRuleFilter (Maybe LifecycleRuleAndOperator)
-lrfAnd = lens _lrfAnd (\ s a -> s{_lrfAnd = a});
-
-instance FromXML LifecycleRuleFilter where
-        parseXML x
-          = LifecycleRuleFilter' <$>
-              (x .@? "Tag") <*> (x .@? "Prefix") <*> (x .@? "And")
-
-instance Hashable LifecycleRuleFilter
-
-instance NFData LifecycleRuleFilter
-
-instance ToXML LifecycleRuleFilter where
-        toXML LifecycleRuleFilter'{..}
-          = mconcat
-              ["Tag" @= _lrfTag, "Prefix" @= _lrfPrefix,
-               "And" @= _lrfAnd]
-
--- | /See:/ 'loggingEnabled' smart constructor.
-data LoggingEnabled = LoggingEnabled'
-    { _leTargetBucket :: !(Maybe Text)
-    , _leTargetGrants :: !(Maybe [TargetGrant])
-    , _leTargetPrefix :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'LoggingEnabled' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'leTargetBucket' - Specifies the bucket where you want Amazon S3 to store server access logs. You can have your logs delivered to any bucket that you own, including the same bucket that is being logged. You can also configure multiple buckets to deliver their logs to the same target bucket. In this case you should choose a different TargetPrefix for each source bucket so that the delivered log files can be distinguished by key.
---
--- * 'leTargetGrants' - Undocumented member.
---
--- * 'leTargetPrefix' - This element lets you specify a prefix for the keys that the log files will be stored under.
-loggingEnabled
-    :: LoggingEnabled
-loggingEnabled =
-    LoggingEnabled'
-    { _leTargetBucket = Nothing
-    , _leTargetGrants = Nothing
-    , _leTargetPrefix = Nothing
-    }
-
--- | Specifies the bucket where you want Amazon S3 to store server access logs. You can have your logs delivered to any bucket that you own, including the same bucket that is being logged. You can also configure multiple buckets to deliver their logs to the same target bucket. In this case you should choose a different TargetPrefix for each source bucket so that the delivered log files can be distinguished by key.
-leTargetBucket :: Lens' LoggingEnabled (Maybe Text)
-leTargetBucket = lens _leTargetBucket (\ s a -> s{_leTargetBucket = a});
-
--- | Undocumented member.
-leTargetGrants :: Lens' LoggingEnabled [TargetGrant]
-leTargetGrants = lens _leTargetGrants (\ s a -> s{_leTargetGrants = a}) . _Default . _Coerce;
-
--- | This element lets you specify a prefix for the keys that the log files will be stored under.
-leTargetPrefix :: Lens' LoggingEnabled (Maybe Text)
-leTargetPrefix = lens _leTargetPrefix (\ s a -> s{_leTargetPrefix = a});
-
-instance FromXML LoggingEnabled where
-        parseXML x
-          = LoggingEnabled' <$>
-              (x .@? "TargetBucket") <*>
-                (x .@? "TargetGrants" .!@ mempty >>=
-                   may (parseXMLList "Grant"))
-                <*> (x .@? "TargetPrefix")
-
-instance Hashable LoggingEnabled
-
-instance NFData LoggingEnabled
-
-instance ToXML LoggingEnabled where
-        toXML LoggingEnabled'{..}
-          = mconcat
-              ["TargetBucket" @= _leTargetBucket,
-               "TargetGrants" @=
-                 toXML (toXMLList "Grant" <$> _leTargetGrants),
-               "TargetPrefix" @= _leTargetPrefix]
-
--- | /See:/ 'metricsAndOperator' smart constructor.
-data MetricsAndOperator = MetricsAndOperator'
-    { _maoPrefix :: !(Maybe Text)
-    , _maoTags   :: !(Maybe [Tag])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'MetricsAndOperator' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'maoPrefix' - The prefix used when evaluating an AND predicate.
---
--- * 'maoTags' - The list of tags used when evaluating an AND predicate.
-metricsAndOperator
-    :: MetricsAndOperator
-metricsAndOperator =
-    MetricsAndOperator'
-    { _maoPrefix = Nothing
-    , _maoTags = Nothing
-    }
-
--- | The prefix used when evaluating an AND predicate.
-maoPrefix :: Lens' MetricsAndOperator (Maybe Text)
-maoPrefix = lens _maoPrefix (\ s a -> s{_maoPrefix = a});
-
--- | The list of tags used when evaluating an AND predicate.
-maoTags :: Lens' MetricsAndOperator [Tag]
-maoTags = lens _maoTags (\ s a -> s{_maoTags = a}) . _Default . _Coerce;
-
-instance FromXML MetricsAndOperator where
-        parseXML x
-          = MetricsAndOperator' <$>
-              (x .@? "Prefix") <*>
-                (x .@? "Tag" .!@ mempty >>= may (parseXMLList "Tag"))
-
-instance Hashable MetricsAndOperator
-
-instance NFData MetricsAndOperator
-
-instance ToXML MetricsAndOperator where
-        toXML MetricsAndOperator'{..}
-          = mconcat
-              ["Prefix" @= _maoPrefix,
-               "Tag" @= toXML (toXMLList "Tag" <$> _maoTags)]
-
--- | /See:/ 'metricsConfiguration' smart constructor.
-data MetricsConfiguration = MetricsConfiguration'
-    { _mcFilter :: !(Maybe MetricsFilter)
-    , _mcId     :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'MetricsConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mcFilter' - Specifies a metrics configuration filter. The metrics configuration will only include objects that meet the filter's criteria. A filter must be a prefix, a tag, or a conjunction (MetricsAndOperator).
---
--- * 'mcId' - The ID used to identify the metrics configuration.
-metricsConfiguration
-    :: Text -- ^ 'mcId'
-    -> MetricsConfiguration
-metricsConfiguration pId_ =
-    MetricsConfiguration'
-    { _mcFilter = Nothing
-    , _mcId = pId_
-    }
-
--- | Specifies a metrics configuration filter. The metrics configuration will only include objects that meet the filter's criteria. A filter must be a prefix, a tag, or a conjunction (MetricsAndOperator).
-mcFilter :: Lens' MetricsConfiguration (Maybe MetricsFilter)
-mcFilter = lens _mcFilter (\ s a -> s{_mcFilter = a});
-
--- | The ID used to identify the metrics configuration.
-mcId :: Lens' MetricsConfiguration Text
-mcId = lens _mcId (\ s a -> s{_mcId = a});
-
-instance FromXML MetricsConfiguration where
-        parseXML x
-          = MetricsConfiguration' <$>
-              (x .@? "Filter") <*> (x .@ "Id")
-
-instance Hashable MetricsConfiguration
-
-instance NFData MetricsConfiguration
-
-instance ToXML MetricsConfiguration where
-        toXML MetricsConfiguration'{..}
-          = mconcat ["Filter" @= _mcFilter, "Id" @= _mcId]
-
--- | /See:/ 'metricsFilter' smart constructor.
-data MetricsFilter = MetricsFilter'
-    { _mfTag    :: !(Maybe Tag)
-    , _mfPrefix :: !(Maybe Text)
-    , _mfAnd    :: !(Maybe MetricsAndOperator)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'MetricsFilter' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mfTag' - The tag used when evaluating a metrics filter.
---
--- * 'mfPrefix' - The prefix used when evaluating a metrics filter.
---
--- * 'mfAnd' - A conjunction (logical AND) of predicates, which is used in evaluating a metrics filter. The operator must have at least two predicates, and an object must match all of the predicates in order for the filter to apply.
-metricsFilter
-    :: MetricsFilter
-metricsFilter =
-    MetricsFilter'
-    { _mfTag = Nothing
-    , _mfPrefix = Nothing
-    , _mfAnd = Nothing
-    }
-
--- | The tag used when evaluating a metrics filter.
-mfTag :: Lens' MetricsFilter (Maybe Tag)
-mfTag = lens _mfTag (\ s a -> s{_mfTag = a});
-
--- | The prefix used when evaluating a metrics filter.
-mfPrefix :: Lens' MetricsFilter (Maybe Text)
-mfPrefix = lens _mfPrefix (\ s a -> s{_mfPrefix = a});
-
--- | A conjunction (logical AND) of predicates, which is used in evaluating a metrics filter. The operator must have at least two predicates, and an object must match all of the predicates in order for the filter to apply.
-mfAnd :: Lens' MetricsFilter (Maybe MetricsAndOperator)
-mfAnd = lens _mfAnd (\ s a -> s{_mfAnd = a});
-
-instance FromXML MetricsFilter where
-        parseXML x
-          = MetricsFilter' <$>
-              (x .@? "Tag") <*> (x .@? "Prefix") <*> (x .@? "And")
-
-instance Hashable MetricsFilter
-
-instance NFData MetricsFilter
-
-instance ToXML MetricsFilter where
-        toXML MetricsFilter'{..}
-          = mconcat
-              ["Tag" @= _mfTag, "Prefix" @= _mfPrefix,
-               "And" @= _mfAnd]
-
--- | /See:/ 'multipartUpload' smart constructor.
-data MultipartUpload = MultipartUpload'
-    { _muInitiated    :: !(Maybe RFC822)
-    , _muInitiator    :: !(Maybe Initiator)
-    , _muOwner        :: !(Maybe Owner)
-    , _muKey          :: !(Maybe ObjectKey)
-    , _muStorageClass :: !(Maybe StorageClass)
-    , _muUploadId     :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'MultipartUpload' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'muInitiated' - Date and time at which the multipart upload was initiated.
---
--- * 'muInitiator' - Identifies who initiated the multipart upload.
---
--- * 'muOwner' - Undocumented member.
---
--- * 'muKey' - Key of the object for which the multipart upload was initiated.
---
--- * 'muStorageClass' - The class of storage used to store the object.
---
--- * 'muUploadId' - Upload ID that identifies the multipart upload.
-multipartUpload
-    :: MultipartUpload
-multipartUpload =
-    MultipartUpload'
-    { _muInitiated = Nothing
-    , _muInitiator = Nothing
-    , _muOwner = Nothing
-    , _muKey = Nothing
-    , _muStorageClass = Nothing
-    , _muUploadId = Nothing
-    }
-
--- | Date and time at which the multipart upload was initiated.
-muInitiated :: Lens' MultipartUpload (Maybe UTCTime)
-muInitiated = lens _muInitiated (\ s a -> s{_muInitiated = a}) . mapping _Time;
-
--- | Identifies who initiated the multipart upload.
-muInitiator :: Lens' MultipartUpload (Maybe Initiator)
-muInitiator = lens _muInitiator (\ s a -> s{_muInitiator = a});
-
--- | Undocumented member.
-muOwner :: Lens' MultipartUpload (Maybe Owner)
-muOwner = lens _muOwner (\ s a -> s{_muOwner = a});
-
--- | Key of the object for which the multipart upload was initiated.
-muKey :: Lens' MultipartUpload (Maybe ObjectKey)
-muKey = lens _muKey (\ s a -> s{_muKey = a});
-
--- | The class of storage used to store the object.
-muStorageClass :: Lens' MultipartUpload (Maybe StorageClass)
-muStorageClass = lens _muStorageClass (\ s a -> s{_muStorageClass = a});
-
--- | Upload ID that identifies the multipart upload.
-muUploadId :: Lens' MultipartUpload (Maybe Text)
-muUploadId = lens _muUploadId (\ s a -> s{_muUploadId = a});
-
-instance FromXML MultipartUpload where
-        parseXML x
-          = MultipartUpload' <$>
-              (x .@? "Initiated") <*> (x .@? "Initiator") <*>
-                (x .@? "Owner")
-                <*> (x .@? "Key")
-                <*> (x .@? "StorageClass")
-                <*> (x .@? "UploadId")
-
-instance Hashable MultipartUpload
-
-instance NFData MultipartUpload
-
--- | Specifies when noncurrent object versions expire. Upon expiration, Amazon S3 permanently deletes the noncurrent object versions. You set this lifecycle configuration action on a bucket that has versioning enabled (or suspended) to request that Amazon S3 delete noncurrent object versions at a specific period in the object's lifetime.
---
--- /See:/ 'noncurrentVersionExpiration' smart constructor.
-newtype NoncurrentVersionExpiration = NoncurrentVersionExpiration'
-    { _nveNoncurrentDays :: Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'NoncurrentVersionExpiration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'nveNoncurrentDays' - <http://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html How Amazon S3 Calculates When an Object Became Noncurrent>
-noncurrentVersionExpiration
-    :: Int -- ^ 'nveNoncurrentDays'
-    -> NoncurrentVersionExpiration
-noncurrentVersionExpiration pNoncurrentDays_ =
-    NoncurrentVersionExpiration'
-    { _nveNoncurrentDays = pNoncurrentDays_
-    }
-
--- | <http://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html How Amazon S3 Calculates When an Object Became Noncurrent>
-nveNoncurrentDays :: Lens' NoncurrentVersionExpiration Int
-nveNoncurrentDays = lens _nveNoncurrentDays (\ s a -> s{_nveNoncurrentDays = a});
-
-instance FromXML NoncurrentVersionExpiration where
-        parseXML x
-          = NoncurrentVersionExpiration' <$>
-              (x .@ "NoncurrentDays")
-
-instance Hashable NoncurrentVersionExpiration
-
-instance NFData NoncurrentVersionExpiration
-
-instance ToXML NoncurrentVersionExpiration where
-        toXML NoncurrentVersionExpiration'{..}
-          = mconcat ["NoncurrentDays" @= _nveNoncurrentDays]
-
--- | Container for the transition rule that describes when noncurrent objects transition to the STANDARD_IA or GLACIER storage class. If your bucket is versioning-enabled (or versioning is suspended), you can set this action to request that Amazon S3 transition noncurrent object versions to the STANDARD_IA or GLACIER storage class at a specific period in the object's lifetime.
---
--- /See:/ 'noncurrentVersionTransition' smart constructor.
-data NoncurrentVersionTransition = NoncurrentVersionTransition'
-    { _nvtNoncurrentDays :: !Int
-    , _nvtStorageClass   :: !TransitionStorageClass
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'NoncurrentVersionTransition' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'nvtNoncurrentDays' - <http://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html How Amazon S3 Calculates When an Object Became Noncurrent>
---
--- * 'nvtStorageClass' - The class of storage used to store the object.
-noncurrentVersionTransition
-    :: Int -- ^ 'nvtNoncurrentDays'
-    -> TransitionStorageClass -- ^ 'nvtStorageClass'
-    -> NoncurrentVersionTransition
-noncurrentVersionTransition pNoncurrentDays_ pStorageClass_ =
-    NoncurrentVersionTransition'
-    { _nvtNoncurrentDays = pNoncurrentDays_
-    , _nvtStorageClass = pStorageClass_
-    }
-
--- | <http://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html How Amazon S3 Calculates When an Object Became Noncurrent>
-nvtNoncurrentDays :: Lens' NoncurrentVersionTransition Int
-nvtNoncurrentDays = lens _nvtNoncurrentDays (\ s a -> s{_nvtNoncurrentDays = a});
-
--- | The class of storage used to store the object.
-nvtStorageClass :: Lens' NoncurrentVersionTransition TransitionStorageClass
-nvtStorageClass = lens _nvtStorageClass (\ s a -> s{_nvtStorageClass = a});
-
-instance FromXML NoncurrentVersionTransition where
-        parseXML x
-          = NoncurrentVersionTransition' <$>
-              (x .@ "NoncurrentDays") <*> (x .@ "StorageClass")
-
-instance Hashable NoncurrentVersionTransition
-
-instance NFData NoncurrentVersionTransition
-
-instance ToXML NoncurrentVersionTransition where
-        toXML NoncurrentVersionTransition'{..}
-          = mconcat
-              ["NoncurrentDays" @= _nvtNoncurrentDays,
-               "StorageClass" @= _nvtStorageClass]
-
--- | Container for specifying the notification configuration of the bucket. If this element is empty, notifications are turned off on the bucket.
---
--- /See:/ 'notificationConfiguration' smart constructor.
-data NotificationConfiguration = NotificationConfiguration'
-    { _ncQueueConfigurations          :: !(Maybe [QueueConfiguration])
-    , _ncTopicConfigurations          :: !(Maybe [TopicConfiguration])
-    , _ncLambdaFunctionConfigurations :: !(Maybe [LambdaFunctionConfiguration])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'NotificationConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ncQueueConfigurations' - Undocumented member.
---
--- * 'ncTopicConfigurations' - Undocumented member.
---
--- * 'ncLambdaFunctionConfigurations' - Undocumented member.
-notificationConfiguration
-    :: NotificationConfiguration
-notificationConfiguration =
-    NotificationConfiguration'
-    { _ncQueueConfigurations = Nothing
-    , _ncTopicConfigurations = Nothing
-    , _ncLambdaFunctionConfigurations = Nothing
-    }
-
--- | Undocumented member.
-ncQueueConfigurations :: Lens' NotificationConfiguration [QueueConfiguration]
-ncQueueConfigurations = lens _ncQueueConfigurations (\ s a -> s{_ncQueueConfigurations = a}) . _Default . _Coerce;
-
--- | Undocumented member.
-ncTopicConfigurations :: Lens' NotificationConfiguration [TopicConfiguration]
-ncTopicConfigurations = lens _ncTopicConfigurations (\ s a -> s{_ncTopicConfigurations = a}) . _Default . _Coerce;
-
--- | Undocumented member.
-ncLambdaFunctionConfigurations :: Lens' NotificationConfiguration [LambdaFunctionConfiguration]
-ncLambdaFunctionConfigurations = lens _ncLambdaFunctionConfigurations (\ s a -> s{_ncLambdaFunctionConfigurations = a}) . _Default . _Coerce;
-
-instance FromXML NotificationConfiguration where
-        parseXML x
-          = NotificationConfiguration' <$>
-              (may (parseXMLList "QueueConfiguration") x) <*>
-                (may (parseXMLList "TopicConfiguration") x)
-                <*>
-                (may (parseXMLList "CloudFunctionConfiguration") x)
-
-instance Hashable NotificationConfiguration
-
-instance NFData NotificationConfiguration
-
-instance ToXML NotificationConfiguration where
-        toXML NotificationConfiguration'{..}
-          = mconcat
-              [toXML
-                 (toXMLList "QueueConfiguration" <$>
-                    _ncQueueConfigurations),
-               toXML
-                 (toXMLList "TopicConfiguration" <$>
-                    _ncTopicConfigurations),
-               toXML
-                 (toXMLList "CloudFunctionConfiguration" <$>
-                    _ncLambdaFunctionConfigurations)]
-
--- | <http://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html Configuring Event Notifications>
---
--- /See:/ 'notificationConfigurationFilter' smart constructor.
-newtype NotificationConfigurationFilter = NotificationConfigurationFilter'
-    { _ncfKey :: Maybe S3KeyFilter
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'NotificationConfigurationFilter' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ncfKey' - Undocumented member.
-notificationConfigurationFilter
-    :: NotificationConfigurationFilter
-notificationConfigurationFilter =
-    NotificationConfigurationFilter'
-    { _ncfKey = Nothing
-    }
-
--- | Undocumented member.
-ncfKey :: Lens' NotificationConfigurationFilter (Maybe S3KeyFilter)
-ncfKey = lens _ncfKey (\ s a -> s{_ncfKey = a});
-
-instance FromXML NotificationConfigurationFilter
-         where
-        parseXML x
-          = NotificationConfigurationFilter' <$>
-              (x .@? "S3Key")
-
-instance Hashable NotificationConfigurationFilter
-
-instance NFData NotificationConfigurationFilter
-
-instance ToXML NotificationConfigurationFilter where
-        toXML NotificationConfigurationFilter'{..}
-          = mconcat ["S3Key" @= _ncfKey]
-
--- | /See:/ 'object'' smart constructor.
-data Object = Object'
-    { _oOwner        :: !(Maybe Owner)
-    , _oETag         :: !ETag
-    , _oSize         :: !Int
-    , _oKey          :: !ObjectKey
-    , _oStorageClass :: !ObjectStorageClass
-    , _oLastModified :: !RFC822
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Object' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'oOwner' - Undocumented member.
---
--- * 'oETag' - Undocumented member.
---
--- * 'oSize' - Undocumented member.
---
--- * 'oKey' - Undocumented member.
---
--- * 'oStorageClass' - The class of storage used to store the object.
---
--- * 'oLastModified' - Undocumented member.
-object'
-    :: ETag -- ^ 'oETag'
-    -> Int -- ^ 'oSize'
-    -> ObjectKey -- ^ 'oKey'
-    -> ObjectStorageClass -- ^ 'oStorageClass'
-    -> UTCTime -- ^ 'oLastModified'
-    -> Object
-object' pETag_ pSize_ pKey_ pStorageClass_ pLastModified_ =
-    Object'
-    { _oOwner = Nothing
-    , _oETag = pETag_
-    , _oSize = pSize_
-    , _oKey = pKey_
-    , _oStorageClass = pStorageClass_
-    , _oLastModified = _Time # pLastModified_
-    }
-
--- | Undocumented member.
-oOwner :: Lens' Object (Maybe Owner)
-oOwner = lens _oOwner (\ s a -> s{_oOwner = a});
-
--- | Undocumented member.
-oETag :: Lens' Object ETag
-oETag = lens _oETag (\ s a -> s{_oETag = a});
-
--- | Undocumented member.
-oSize :: Lens' Object Int
-oSize = lens _oSize (\ s a -> s{_oSize = a});
-
--- | Undocumented member.
-oKey :: Lens' Object ObjectKey
-oKey = lens _oKey (\ s a -> s{_oKey = a});
-
--- | The class of storage used to store the object.
-oStorageClass :: Lens' Object ObjectStorageClass
-oStorageClass = lens _oStorageClass (\ s a -> s{_oStorageClass = a});
-
--- | Undocumented member.
-oLastModified :: Lens' Object UTCTime
-oLastModified = lens _oLastModified (\ s a -> s{_oLastModified = a}) . _Time;
-
-instance FromXML Object where
-        parseXML x
-          = Object' <$>
-              (x .@? "Owner") <*> (x .@ "ETag") <*> (x .@ "Size")
-                <*> (x .@ "Key")
-                <*> (x .@ "StorageClass")
-                <*> (x .@ "LastModified")
-
-instance Hashable Object
-
-instance NFData Object
-
--- | /See:/ 'objectIdentifier' smart constructor.
-data ObjectIdentifier = ObjectIdentifier'
-    { _oiVersionId :: !(Maybe ObjectVersionId)
-    , _oiKey       :: !ObjectKey
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ObjectIdentifier' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'oiVersionId' - VersionId for the specific version of the object to delete.
---
--- * 'oiKey' - Key name of the object to delete.
-objectIdentifier
-    :: ObjectKey -- ^ 'oiKey'
-    -> ObjectIdentifier
-objectIdentifier pKey_ =
-    ObjectIdentifier'
-    { _oiVersionId = Nothing
-    , _oiKey = pKey_
-    }
-
--- | VersionId for the specific version of the object to delete.
-oiVersionId :: Lens' ObjectIdentifier (Maybe ObjectVersionId)
-oiVersionId = lens _oiVersionId (\ s a -> s{_oiVersionId = a});
-
--- | Key name of the object to delete.
-oiKey :: Lens' ObjectIdentifier ObjectKey
-oiKey = lens _oiKey (\ s a -> s{_oiKey = a});
-
-instance Hashable ObjectIdentifier
-
-instance NFData ObjectIdentifier
-
-instance ToXML ObjectIdentifier where
-        toXML ObjectIdentifier'{..}
-          = mconcat
-              ["VersionId" @= _oiVersionId, "Key" @= _oiKey]
-
--- | /See:/ 'objectVersion' smart constructor.
-data ObjectVersion = ObjectVersion'
-    { _ovETag         :: !(Maybe ETag)
-    , _ovVersionId    :: !(Maybe ObjectVersionId)
-    , _ovSize         :: !(Maybe Int)
-    , _ovIsLatest     :: !(Maybe Bool)
-    , _ovOwner        :: !(Maybe Owner)
-    , _ovKey          :: !(Maybe ObjectKey)
-    , _ovStorageClass :: !(Maybe ObjectVersionStorageClass)
-    , _ovLastModified :: !(Maybe RFC822)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ObjectVersion' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ovETag' - Undocumented member.
---
--- * 'ovVersionId' - Version ID of an object.
---
--- * 'ovSize' - Size in bytes of the object.
---
--- * 'ovIsLatest' - Specifies whether the object is (true) or is not (false) the latest version of an object.
---
--- * 'ovOwner' - Undocumented member.
---
--- * 'ovKey' - The object key.
---
--- * 'ovStorageClass' - The class of storage used to store the object.
---
--- * 'ovLastModified' - Date and time the object was last modified.
-objectVersion
-    :: ObjectVersion
-objectVersion =
-    ObjectVersion'
-    { _ovETag = Nothing
-    , _ovVersionId = Nothing
-    , _ovSize = Nothing
-    , _ovIsLatest = Nothing
-    , _ovOwner = Nothing
-    , _ovKey = Nothing
-    , _ovStorageClass = Nothing
-    , _ovLastModified = Nothing
-    }
-
--- | Undocumented member.
-ovETag :: Lens' ObjectVersion (Maybe ETag)
-ovETag = lens _ovETag (\ s a -> s{_ovETag = a});
-
--- | Version ID of an object.
-ovVersionId :: Lens' ObjectVersion (Maybe ObjectVersionId)
-ovVersionId = lens _ovVersionId (\ s a -> s{_ovVersionId = a});
-
--- | Size in bytes of the object.
-ovSize :: Lens' ObjectVersion (Maybe Int)
-ovSize = lens _ovSize (\ s a -> s{_ovSize = a});
-
--- | Specifies whether the object is (true) or is not (false) the latest version of an object.
-ovIsLatest :: Lens' ObjectVersion (Maybe Bool)
-ovIsLatest = lens _ovIsLatest (\ s a -> s{_ovIsLatest = a});
-
--- | Undocumented member.
-ovOwner :: Lens' ObjectVersion (Maybe Owner)
-ovOwner = lens _ovOwner (\ s a -> s{_ovOwner = a});
-
--- | The object key.
-ovKey :: Lens' ObjectVersion (Maybe ObjectKey)
-ovKey = lens _ovKey (\ s a -> s{_ovKey = a});
-
--- | The class of storage used to store the object.
-ovStorageClass :: Lens' ObjectVersion (Maybe ObjectVersionStorageClass)
-ovStorageClass = lens _ovStorageClass (\ s a -> s{_ovStorageClass = a});
-
--- | Date and time the object was last modified.
-ovLastModified :: Lens' ObjectVersion (Maybe UTCTime)
-ovLastModified = lens _ovLastModified (\ s a -> s{_ovLastModified = a}) . mapping _Time;
-
-instance FromXML ObjectVersion where
-        parseXML x
-          = ObjectVersion' <$>
-              (x .@? "ETag") <*> (x .@? "VersionId") <*>
-                (x .@? "Size")
-                <*> (x .@? "IsLatest")
-                <*> (x .@? "Owner")
-                <*> (x .@? "Key")
-                <*> (x .@? "StorageClass")
-                <*> (x .@? "LastModified")
-
-instance Hashable ObjectVersion
-
-instance NFData ObjectVersion
-
--- | /See:/ 'owner' smart constructor.
-data Owner = Owner'
-    { _oDisplayName :: !(Maybe Text)
-    , _oId          :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Owner' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'oDisplayName' - Undocumented member.
---
--- * 'oId' - Undocumented member.
-owner
-    :: Owner
-owner =
-    Owner'
-    { _oDisplayName = Nothing
-    , _oId = Nothing
-    }
-
--- | Undocumented member.
-oDisplayName :: Lens' Owner (Maybe Text)
-oDisplayName = lens _oDisplayName (\ s a -> s{_oDisplayName = a});
-
--- | Undocumented member.
-oId :: Lens' Owner (Maybe Text)
-oId = lens _oId (\ s a -> s{_oId = a});
-
-instance FromXML Owner where
-        parseXML x
-          = Owner' <$> (x .@? "DisplayName") <*> (x .@? "ID")
-
-instance Hashable Owner
-
-instance NFData Owner
-
-instance ToXML Owner where
-        toXML Owner'{..}
-          = mconcat
-              ["DisplayName" @= _oDisplayName, "ID" @= _oId]
-
--- | /See:/ 'part' smart constructor.
-data Part = Part'
-    { _pETag         :: !(Maybe ETag)
-    , _pSize         :: !(Maybe Int)
-    , _pPartNumber   :: !(Maybe Int)
-    , _pLastModified :: !(Maybe RFC822)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Part' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pETag' - Entity tag returned when the part was uploaded.
---
--- * 'pSize' - Size of the uploaded part data.
---
--- * 'pPartNumber' - Part number identifying the part. This is a positive integer between 1 and 10,000.
---
--- * 'pLastModified' - Date and time at which the part was uploaded.
-part
-    :: Part
-part =
-    Part'
-    { _pETag = Nothing
-    , _pSize = Nothing
-    , _pPartNumber = Nothing
-    , _pLastModified = Nothing
-    }
-
--- | Entity tag returned when the part was uploaded.
-pETag :: Lens' Part (Maybe ETag)
-pETag = lens _pETag (\ s a -> s{_pETag = a});
-
--- | Size of the uploaded part data.
-pSize :: Lens' Part (Maybe Int)
-pSize = lens _pSize (\ s a -> s{_pSize = a});
-
--- | Part number identifying the part. This is a positive integer between 1 and 10,000.
-pPartNumber :: Lens' Part (Maybe Int)
-pPartNumber = lens _pPartNumber (\ s a -> s{_pPartNumber = a});
-
--- | Date and time at which the part was uploaded.
-pLastModified :: Lens' Part (Maybe UTCTime)
-pLastModified = lens _pLastModified (\ s a -> s{_pLastModified = a}) . mapping _Time;
-
-instance FromXML Part where
-        parseXML x
-          = Part' <$>
-              (x .@? "ETag") <*> (x .@? "Size") <*>
-                (x .@? "PartNumber")
-                <*> (x .@? "LastModified")
-
-instance Hashable Part
-
-instance NFData Part
-
--- | Container for specifying an configuration when you want Amazon S3 to publish events to an Amazon Simple Queue Service (Amazon SQS) queue.
---
--- /See:/ 'queueConfiguration' smart constructor.
-data QueueConfiguration = QueueConfiguration'
-    { _qcId       :: !(Maybe Text)
-    , _qcFilter   :: !(Maybe NotificationConfigurationFilter)
-    , _qcQueueARN :: !Text
-    , _qcEvents   :: ![Event]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'QueueConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'qcId' - Undocumented member.
---
--- * 'qcFilter' - Undocumented member.
---
--- * 'qcQueueARN' - Amazon SQS queue ARN to which Amazon S3 will publish a message when it detects events of specified type.
---
--- * 'qcEvents' - Undocumented member.
-queueConfiguration
-    :: Text -- ^ 'qcQueueARN'
-    -> QueueConfiguration
-queueConfiguration pQueueARN_ =
-    QueueConfiguration'
-    { _qcId = Nothing
-    , _qcFilter = Nothing
-    , _qcQueueARN = pQueueARN_
-    , _qcEvents = mempty
-    }
-
--- | Undocumented member.
-qcId :: Lens' QueueConfiguration (Maybe Text)
-qcId = lens _qcId (\ s a -> s{_qcId = a});
-
--- | Undocumented member.
-qcFilter :: Lens' QueueConfiguration (Maybe NotificationConfigurationFilter)
-qcFilter = lens _qcFilter (\ s a -> s{_qcFilter = a});
-
--- | Amazon SQS queue ARN to which Amazon S3 will publish a message when it detects events of specified type.
-qcQueueARN :: Lens' QueueConfiguration Text
-qcQueueARN = lens _qcQueueARN (\ s a -> s{_qcQueueARN = a});
-
--- | Undocumented member.
-qcEvents :: Lens' QueueConfiguration [Event]
-qcEvents = lens _qcEvents (\ s a -> s{_qcEvents = a}) . _Coerce;
-
-instance FromXML QueueConfiguration where
-        parseXML x
-          = QueueConfiguration' <$>
-              (x .@? "Id") <*> (x .@? "Filter") <*> (x .@ "Queue")
-                <*> (parseXMLList "Event" x)
-
-instance Hashable QueueConfiguration
-
-instance NFData QueueConfiguration
-
-instance ToXML QueueConfiguration where
-        toXML QueueConfiguration'{..}
-          = mconcat
-              ["Id" @= _qcId, "Filter" @= _qcFilter,
-               "Queue" @= _qcQueueARN, toXMLList "Event" _qcEvents]
-
--- | /See:/ 'redirect' smart constructor.
-data Redirect = Redirect'
-    { _rHostName             :: !(Maybe Text)
-    , _rProtocol             :: !(Maybe Protocol)
-    , _rHTTPRedirectCode     :: !(Maybe Text)
-    , _rReplaceKeyWith       :: !(Maybe Text)
-    , _rReplaceKeyPrefixWith :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Redirect' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rHostName' - The host name to use in the redirect request.
---
--- * 'rProtocol' - Protocol to use (http, https) when redirecting requests. The default is the protocol that is used in the original request.
---
--- * 'rHTTPRedirectCode' - The HTTP redirect code to use on the response. Not required if one of the siblings is present.
---
--- * 'rReplaceKeyWith' - The specific object key to use in the redirect request. For example, redirect request to error.html. Not required if one of the sibling is present. Can be present only if ReplaceKeyPrefixWith is not provided.
---
--- * 'rReplaceKeyPrefixWith' - The object key prefix to use in the redirect request. For example, to redirect requests for all pages with prefix docs/ (objects in the docs/ folder) to documents/, you can set a condition block with KeyPrefixEquals set to docs/ and in the Redirect set ReplaceKeyPrefixWith to /documents. Not required if one of the siblings is present. Can be present only if ReplaceKeyWith is not provided.
-redirect
-    :: Redirect
-redirect =
-    Redirect'
-    { _rHostName = Nothing
-    , _rProtocol = Nothing
-    , _rHTTPRedirectCode = Nothing
-    , _rReplaceKeyWith = Nothing
-    , _rReplaceKeyPrefixWith = Nothing
-    }
-
--- | The host name to use in the redirect request.
-rHostName :: Lens' Redirect (Maybe Text)
-rHostName = lens _rHostName (\ s a -> s{_rHostName = a});
-
--- | Protocol to use (http, https) when redirecting requests. The default is the protocol that is used in the original request.
-rProtocol :: Lens' Redirect (Maybe Protocol)
-rProtocol = lens _rProtocol (\ s a -> s{_rProtocol = a});
-
--- | The HTTP redirect code to use on the response. Not required if one of the siblings is present.
-rHTTPRedirectCode :: Lens' Redirect (Maybe Text)
-rHTTPRedirectCode = lens _rHTTPRedirectCode (\ s a -> s{_rHTTPRedirectCode = a});
-
--- | The specific object key to use in the redirect request. For example, redirect request to error.html. Not required if one of the sibling is present. Can be present only if ReplaceKeyPrefixWith is not provided.
-rReplaceKeyWith :: Lens' Redirect (Maybe Text)
-rReplaceKeyWith = lens _rReplaceKeyWith (\ s a -> s{_rReplaceKeyWith = a});
-
--- | The object key prefix to use in the redirect request. For example, to redirect requests for all pages with prefix docs/ (objects in the docs/ folder) to documents/, you can set a condition block with KeyPrefixEquals set to docs/ and in the Redirect set ReplaceKeyPrefixWith to /documents. Not required if one of the siblings is present. Can be present only if ReplaceKeyWith is not provided.
-rReplaceKeyPrefixWith :: Lens' Redirect (Maybe Text)
-rReplaceKeyPrefixWith = lens _rReplaceKeyPrefixWith (\ s a -> s{_rReplaceKeyPrefixWith = a});
-
-instance FromXML Redirect where
-        parseXML x
-          = Redirect' <$>
-              (x .@? "HostName") <*> (x .@? "Protocol") <*>
-                (x .@? "HttpRedirectCode")
-                <*> (x .@? "ReplaceKeyWith")
-                <*> (x .@? "ReplaceKeyPrefixWith")
-
-instance Hashable Redirect
-
-instance NFData Redirect
-
-instance ToXML Redirect where
-        toXML Redirect'{..}
-          = mconcat
-              ["HostName" @= _rHostName, "Protocol" @= _rProtocol,
-               "HttpRedirectCode" @= _rHTTPRedirectCode,
-               "ReplaceKeyWith" @= _rReplaceKeyWith,
-               "ReplaceKeyPrefixWith" @= _rReplaceKeyPrefixWith]
-
--- | /See:/ 'redirectAllRequestsTo' smart constructor.
-data RedirectAllRequestsTo = RedirectAllRequestsTo'
-    { _rartProtocol :: !(Maybe Protocol)
-    , _rartHostName :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RedirectAllRequestsTo' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rartProtocol' - Protocol to use (http, https) when redirecting requests. The default is the protocol that is used in the original request.
---
--- * 'rartHostName' - Name of the host where requests will be redirected.
-redirectAllRequestsTo
-    :: Text -- ^ 'rartHostName'
-    -> RedirectAllRequestsTo
-redirectAllRequestsTo pHostName_ =
-    RedirectAllRequestsTo'
-    { _rartProtocol = Nothing
-    , _rartHostName = pHostName_
-    }
-
--- | Protocol to use (http, https) when redirecting requests. The default is the protocol that is used in the original request.
-rartProtocol :: Lens' RedirectAllRequestsTo (Maybe Protocol)
-rartProtocol = lens _rartProtocol (\ s a -> s{_rartProtocol = a});
-
--- | Name of the host where requests will be redirected.
-rartHostName :: Lens' RedirectAllRequestsTo Text
-rartHostName = lens _rartHostName (\ s a -> s{_rartHostName = a});
-
-instance FromXML RedirectAllRequestsTo where
-        parseXML x
-          = RedirectAllRequestsTo' <$>
-              (x .@? "Protocol") <*> (x .@ "HostName")
-
-instance Hashable RedirectAllRequestsTo
-
-instance NFData RedirectAllRequestsTo
-
-instance ToXML RedirectAllRequestsTo where
-        toXML RedirectAllRequestsTo'{..}
-          = mconcat
-              ["Protocol" @= _rartProtocol,
-               "HostName" @= _rartHostName]
-
--- | Container for replication rules. You can add as many as 1,000 rules. Total replication configuration size can be up to 2 MB.
---
--- /See:/ 'replicationConfiguration' smart constructor.
-data ReplicationConfiguration = ReplicationConfiguration'
-    { _rcRole  :: !Text
-    , _rcRules :: ![ReplicationRule]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ReplicationConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rcRole' - Amazon Resource Name (ARN) of an IAM role for Amazon S3 to assume when replicating the objects.
---
--- * 'rcRules' - Container for information about a particular replication rule. Replication configuration must have at least one rule and can contain up to 1,000 rules.
-replicationConfiguration
-    :: Text -- ^ 'rcRole'
-    -> ReplicationConfiguration
-replicationConfiguration pRole_ =
-    ReplicationConfiguration'
-    { _rcRole = pRole_
-    , _rcRules = mempty
-    }
-
--- | Amazon Resource Name (ARN) of an IAM role for Amazon S3 to assume when replicating the objects.
-rcRole :: Lens' ReplicationConfiguration Text
-rcRole = lens _rcRole (\ s a -> s{_rcRole = a});
-
--- | Container for information about a particular replication rule. Replication configuration must have at least one rule and can contain up to 1,000 rules.
-rcRules :: Lens' ReplicationConfiguration [ReplicationRule]
-rcRules = lens _rcRules (\ s a -> s{_rcRules = a}) . _Coerce;
-
-instance FromXML ReplicationConfiguration where
-        parseXML x
-          = ReplicationConfiguration' <$>
-              (x .@ "Role") <*> (parseXMLList "Rule" x)
-
-instance Hashable ReplicationConfiguration
-
-instance NFData ReplicationConfiguration
-
-instance ToXML ReplicationConfiguration where
-        toXML ReplicationConfiguration'{..}
-          = mconcat
-              ["Role" @= _rcRole, toXMLList "Rule" _rcRules]
-
--- | /See:/ 'replicationRule' smart constructor.
-data ReplicationRule = ReplicationRule'
-    { _rrId          :: !(Maybe Text)
-    , _rrPrefix      :: !Text
-    , _rrStatus      :: !ReplicationRuleStatus
-    , _rrDestination :: !Destination
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ReplicationRule' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rrId' - Unique identifier for the rule. The value cannot be longer than 255 characters.
---
--- * 'rrPrefix' - Object keyname prefix identifying one or more objects to which the rule applies. Maximum prefix length can be up to 1,024 characters. Overlapping prefixes are not supported.
---
--- * 'rrStatus' - The rule is ignored if status is not Enabled.
---
--- * 'rrDestination' - Undocumented member.
-replicationRule
-    :: Text -- ^ 'rrPrefix'
-    -> ReplicationRuleStatus -- ^ 'rrStatus'
-    -> Destination -- ^ 'rrDestination'
-    -> ReplicationRule
-replicationRule pPrefix_ pStatus_ pDestination_ =
-    ReplicationRule'
-    { _rrId = Nothing
-    , _rrPrefix = pPrefix_
-    , _rrStatus = pStatus_
-    , _rrDestination = pDestination_
-    }
-
--- | Unique identifier for the rule. The value cannot be longer than 255 characters.
-rrId :: Lens' ReplicationRule (Maybe Text)
-rrId = lens _rrId (\ s a -> s{_rrId = a});
-
--- | Object keyname prefix identifying one or more objects to which the rule applies. Maximum prefix length can be up to 1,024 characters. Overlapping prefixes are not supported.
-rrPrefix :: Lens' ReplicationRule Text
-rrPrefix = lens _rrPrefix (\ s a -> s{_rrPrefix = a});
-
--- | The rule is ignored if status is not Enabled.
-rrStatus :: Lens' ReplicationRule ReplicationRuleStatus
-rrStatus = lens _rrStatus (\ s a -> s{_rrStatus = a});
-
--- | Undocumented member.
-rrDestination :: Lens' ReplicationRule Destination
-rrDestination = lens _rrDestination (\ s a -> s{_rrDestination = a});
-
-instance FromXML ReplicationRule where
-        parseXML x
-          = ReplicationRule' <$>
-              (x .@? "ID") <*> (x .@ "Prefix") <*> (x .@ "Status")
-                <*> (x .@ "Destination")
-
-instance Hashable ReplicationRule
-
-instance NFData ReplicationRule
-
-instance ToXML ReplicationRule where
-        toXML ReplicationRule'{..}
-          = mconcat
-              ["ID" @= _rrId, "Prefix" @= _rrPrefix,
-               "Status" @= _rrStatus,
-               "Destination" @= _rrDestination]
-
--- | /See:/ 'requestPaymentConfiguration' smart constructor.
-newtype RequestPaymentConfiguration = RequestPaymentConfiguration'
-    { _rpcPayer :: Payer
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RequestPaymentConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rpcPayer' - Specifies who pays for the download and request fees.
-requestPaymentConfiguration
-    :: Payer -- ^ 'rpcPayer'
-    -> RequestPaymentConfiguration
-requestPaymentConfiguration pPayer_ =
-    RequestPaymentConfiguration'
-    { _rpcPayer = pPayer_
-    }
-
--- | Specifies who pays for the download and request fees.
-rpcPayer :: Lens' RequestPaymentConfiguration Payer
-rpcPayer = lens _rpcPayer (\ s a -> s{_rpcPayer = a});
-
-instance Hashable RequestPaymentConfiguration
-
-instance NFData RequestPaymentConfiguration
-
-instance ToXML RequestPaymentConfiguration where
-        toXML RequestPaymentConfiguration'{..}
-          = mconcat ["Payer" @= _rpcPayer]
-
--- | /See:/ 'restoreRequest' smart constructor.
-data RestoreRequest = RestoreRequest'
-    { _rrGlacierJobParameters :: !(Maybe GlacierJobParameters)
-    , _rrDays                 :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RestoreRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rrGlacierJobParameters' - Glacier related prameters pertaining to this job.
---
--- * 'rrDays' - Lifetime of the active copy in days
-restoreRequest
-    :: Int -- ^ 'rrDays'
-    -> RestoreRequest
-restoreRequest pDays_ =
-    RestoreRequest'
-    { _rrGlacierJobParameters = Nothing
-    , _rrDays = pDays_
-    }
-
--- | Glacier related prameters pertaining to this job.
-rrGlacierJobParameters :: Lens' RestoreRequest (Maybe GlacierJobParameters)
-rrGlacierJobParameters = lens _rrGlacierJobParameters (\ s a -> s{_rrGlacierJobParameters = a});
-
--- | Lifetime of the active copy in days
-rrDays :: Lens' RestoreRequest Int
-rrDays = lens _rrDays (\ s a -> s{_rrDays = a});
-
-instance Hashable RestoreRequest
-
-instance NFData RestoreRequest
-
-instance ToXML RestoreRequest where
-        toXML RestoreRequest'{..}
-          = mconcat
-              ["GlacierJobParameters" @= _rrGlacierJobParameters,
-               "Days" @= _rrDays]
-
--- | /See:/ 'routingRule' smart constructor.
-data RoutingRule = RoutingRule'
-    { _rrCondition :: !(Maybe Condition)
-    , _rrRedirect  :: !Redirect
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RoutingRule' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rrCondition' - A container for describing a condition that must be met for the specified redirect to apply. For example, 1. If request is for pages in the /docs folder, redirect to the /documents folder. 2. If request results in HTTP error 4xx, redirect request to another host where you might process the error.
---
--- * 'rrRedirect' - Container for redirect information. You can redirect requests to another host, to another page, or with another protocol. In the event of an error, you can can specify a different error code to return.
-routingRule
-    :: Redirect -- ^ 'rrRedirect'
-    -> RoutingRule
-routingRule pRedirect_ =
-    RoutingRule'
-    { _rrCondition = Nothing
-    , _rrRedirect = pRedirect_
-    }
-
--- | A container for describing a condition that must be met for the specified redirect to apply. For example, 1. If request is for pages in the /docs folder, redirect to the /documents folder. 2. If request results in HTTP error 4xx, redirect request to another host where you might process the error.
-rrCondition :: Lens' RoutingRule (Maybe Condition)
-rrCondition = lens _rrCondition (\ s a -> s{_rrCondition = a});
-
--- | Container for redirect information. You can redirect requests to another host, to another page, or with another protocol. In the event of an error, you can can specify a different error code to return.
-rrRedirect :: Lens' RoutingRule Redirect
-rrRedirect = lens _rrRedirect (\ s a -> s{_rrRedirect = a});
-
-instance FromXML RoutingRule where
-        parseXML x
-          = RoutingRule' <$>
-              (x .@? "Condition") <*> (x .@ "Redirect")
-
-instance Hashable RoutingRule
-
-instance NFData RoutingRule
-
-instance ToXML RoutingRule where
-        toXML RoutingRule'{..}
-          = mconcat
-              ["Condition" @= _rrCondition,
-               "Redirect" @= _rrRedirect]
-
--- | Container for object key name prefix and suffix filtering rules.
---
--- /See:/ 's3KeyFilter' smart constructor.
-newtype S3KeyFilter = S3KeyFilter'
-    { _skfFilterRules :: Maybe [FilterRule]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'S3KeyFilter' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'skfFilterRules' - Undocumented member.
-s3KeyFilter
-    :: S3KeyFilter
-s3KeyFilter =
-    S3KeyFilter'
-    { _skfFilterRules = Nothing
-    }
-
--- | Undocumented member.
-skfFilterRules :: Lens' S3KeyFilter [FilterRule]
-skfFilterRules = lens _skfFilterRules (\ s a -> s{_skfFilterRules = a}) . _Default . _Coerce;
-
-instance FromXML S3KeyFilter where
-        parseXML x
-          = S3KeyFilter' <$>
-              (may (parseXMLList "FilterRule") x)
-
-instance Hashable S3KeyFilter
-
-instance NFData S3KeyFilter
-
-instance ToXML S3KeyFilter where
-        toXML S3KeyFilter'{..}
-          = mconcat
-              [toXML (toXMLList "FilterRule" <$> _skfFilterRules)]
-
--- | /See:/ 's3ServiceError' smart constructor.
-data S3ServiceError = S3ServiceError'
-    { _sseVersionId :: !(Maybe ObjectVersionId)
-    , _sseKey       :: !(Maybe ObjectKey)
-    , _sseCode      :: !(Maybe Text)
-    , _sseMessage   :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'S3ServiceError' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sseVersionId' - Undocumented member.
---
--- * 'sseKey' - Undocumented member.
---
--- * 'sseCode' - Undocumented member.
---
--- * 'sseMessage' - Undocumented member.
-s3ServiceError
-    :: S3ServiceError
-s3ServiceError =
-    S3ServiceError'
-    { _sseVersionId = Nothing
-    , _sseKey = Nothing
-    , _sseCode = Nothing
-    , _sseMessage = Nothing
-    }
-
--- | Undocumented member.
-sseVersionId :: Lens' S3ServiceError (Maybe ObjectVersionId)
-sseVersionId = lens _sseVersionId (\ s a -> s{_sseVersionId = a});
-
--- | Undocumented member.
-sseKey :: Lens' S3ServiceError (Maybe ObjectKey)
-sseKey = lens _sseKey (\ s a -> s{_sseKey = a});
-
--- | Undocumented member.
-sseCode :: Lens' S3ServiceError (Maybe Text)
-sseCode = lens _sseCode (\ s a -> s{_sseCode = a});
-
--- | Undocumented member.
-sseMessage :: Lens' S3ServiceError (Maybe Text)
-sseMessage = lens _sseMessage (\ s a -> s{_sseMessage = a});
-
-instance FromXML S3ServiceError where
-        parseXML x
-          = S3ServiceError' <$>
-              (x .@? "VersionId") <*> (x .@? "Key") <*>
-                (x .@? "Code")
-                <*> (x .@? "Message")
-
-instance Hashable S3ServiceError
-
-instance NFData S3ServiceError
-
--- | /See:/ 'storageClassAnalysis' smart constructor.
-newtype StorageClassAnalysis = StorageClassAnalysis'
-    { _scaDataExport :: Maybe StorageClassAnalysisDataExport
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'StorageClassAnalysis' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'scaDataExport' - A container used to describe how data related to the storage class analysis should be exported.
-storageClassAnalysis
-    :: StorageClassAnalysis
-storageClassAnalysis =
-    StorageClassAnalysis'
-    { _scaDataExport = Nothing
-    }
-
--- | A container used to describe how data related to the storage class analysis should be exported.
-scaDataExport :: Lens' StorageClassAnalysis (Maybe StorageClassAnalysisDataExport)
-scaDataExport = lens _scaDataExport (\ s a -> s{_scaDataExport = a});
-
-instance FromXML StorageClassAnalysis where
-        parseXML x
-          = StorageClassAnalysis' <$> (x .@? "DataExport")
-
-instance Hashable StorageClassAnalysis
-
-instance NFData StorageClassAnalysis
-
-instance ToXML StorageClassAnalysis where
-        toXML StorageClassAnalysis'{..}
-          = mconcat ["DataExport" @= _scaDataExport]
-
--- | /See:/ 'storageClassAnalysisDataExport' smart constructor.
-data StorageClassAnalysisDataExport = StorageClassAnalysisDataExport'
-    { _scadeOutputSchemaVersion :: !StorageClassAnalysisSchemaVersion
-    , _scadeDestination         :: !AnalyticsExportDestination
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'StorageClassAnalysisDataExport' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'scadeOutputSchemaVersion' - The version of the output schema to use when exporting data. Must be V_1.
---
--- * 'scadeDestination' - The place to store the data for an analysis.
-storageClassAnalysisDataExport
-    :: StorageClassAnalysisSchemaVersion -- ^ 'scadeOutputSchemaVersion'
-    -> AnalyticsExportDestination -- ^ 'scadeDestination'
-    -> StorageClassAnalysisDataExport
-storageClassAnalysisDataExport pOutputSchemaVersion_ pDestination_ =
-    StorageClassAnalysisDataExport'
-    { _scadeOutputSchemaVersion = pOutputSchemaVersion_
-    , _scadeDestination = pDestination_
-    }
-
--- | The version of the output schema to use when exporting data. Must be V_1.
-scadeOutputSchemaVersion :: Lens' StorageClassAnalysisDataExport StorageClassAnalysisSchemaVersion
-scadeOutputSchemaVersion = lens _scadeOutputSchemaVersion (\ s a -> s{_scadeOutputSchemaVersion = a});
-
--- | The place to store the data for an analysis.
-scadeDestination :: Lens' StorageClassAnalysisDataExport AnalyticsExportDestination
-scadeDestination = lens _scadeDestination (\ s a -> s{_scadeDestination = a});
-
-instance FromXML StorageClassAnalysisDataExport where
-        parseXML x
-          = StorageClassAnalysisDataExport' <$>
-              (x .@ "OutputSchemaVersion") <*> (x .@ "Destination")
-
-instance Hashable StorageClassAnalysisDataExport
-
-instance NFData StorageClassAnalysisDataExport
-
-instance ToXML StorageClassAnalysisDataExport where
-        toXML StorageClassAnalysisDataExport'{..}
-          = mconcat
-              ["OutputSchemaVersion" @= _scadeOutputSchemaVersion,
-               "Destination" @= _scadeDestination]
-
--- | /See:/ 'tag' smart constructor.
-data Tag = Tag'
-    { _tagKey   :: !ObjectKey
-    , _tagValue :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Tag' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tagKey' - Name of the tag.
---
--- * 'tagValue' - Value of the tag.
-tag
-    :: ObjectKey -- ^ 'tagKey'
-    -> Text -- ^ 'tagValue'
-    -> Tag
-tag pKey_ pValue_ =
-    Tag'
-    { _tagKey = pKey_
-    , _tagValue = pValue_
-    }
-
--- | Name of the tag.
-tagKey :: Lens' Tag ObjectKey
-tagKey = lens _tagKey (\ s a -> s{_tagKey = a});
-
--- | Value of the tag.
-tagValue :: Lens' Tag Text
-tagValue = lens _tagValue (\ s a -> s{_tagValue = a});
-
-instance FromXML Tag where
-        parseXML x = Tag' <$> (x .@ "Key") <*> (x .@ "Value")
-
-instance Hashable Tag
-
-instance NFData Tag
-
-instance ToXML Tag where
-        toXML Tag'{..}
-          = mconcat ["Key" @= _tagKey, "Value" @= _tagValue]
-
--- | /See:/ 'tagging' smart constructor.
-newtype Tagging = Tagging'
-    { _tTagSet :: [Tag]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Tagging' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tTagSet' - Undocumented member.
-tagging
-    :: Tagging
-tagging =
-    Tagging'
-    { _tTagSet = mempty
-    }
-
--- | Undocumented member.
-tTagSet :: Lens' Tagging [Tag]
-tTagSet = lens _tTagSet (\ s a -> s{_tTagSet = a}) . _Coerce;
-
-instance Hashable Tagging
-
-instance NFData Tagging
-
-instance ToXML Tagging where
-        toXML Tagging'{..}
-          = mconcat ["TagSet" @= toXMLList "Tag" _tTagSet]
-
--- | /See:/ 'targetGrant' smart constructor.
-data TargetGrant = TargetGrant'
-    { _tgPermission :: !(Maybe BucketLogsPermission)
-    , _tgGrantee    :: !(Maybe Grantee)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TargetGrant' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tgPermission' - Logging permissions assigned to the Grantee for the bucket.
---
--- * 'tgGrantee' - Undocumented member.
-targetGrant
-    :: TargetGrant
-targetGrant =
-    TargetGrant'
-    { _tgPermission = Nothing
-    , _tgGrantee = Nothing
-    }
-
--- | Logging permissions assigned to the Grantee for the bucket.
-tgPermission :: Lens' TargetGrant (Maybe BucketLogsPermission)
-tgPermission = lens _tgPermission (\ s a -> s{_tgPermission = a});
-
--- | Undocumented member.
-tgGrantee :: Lens' TargetGrant (Maybe Grantee)
-tgGrantee = lens _tgGrantee (\ s a -> s{_tgGrantee = a});
-
-instance FromXML TargetGrant where
-        parseXML x
-          = TargetGrant' <$>
-              (x .@? "Permission") <*> (x .@? "Grantee")
-
-instance Hashable TargetGrant
-
-instance NFData TargetGrant
-
-instance ToXML TargetGrant where
-        toXML TargetGrant'{..}
-          = mconcat
-              ["Permission" @= _tgPermission,
-               "Grantee" @= _tgGrantee]
-
--- | Container for specifying the configuration when you want Amazon S3 to publish events to an Amazon Simple Notification Service (Amazon SNS) topic.
---
--- /See:/ 'topicConfiguration' smart constructor.
-data TopicConfiguration = TopicConfiguration'
-    { _tcId       :: !(Maybe Text)
-    , _tcFilter   :: !(Maybe NotificationConfigurationFilter)
-    , _tcTopicARN :: !Text
-    , _tcEvents   :: ![Event]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TopicConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tcId' - Undocumented member.
---
--- * 'tcFilter' - Undocumented member.
---
--- * 'tcTopicARN' - Amazon SNS topic ARN to which Amazon S3 will publish a message when it detects events of specified type.
---
--- * 'tcEvents' - Undocumented member.
-topicConfiguration
-    :: Text -- ^ 'tcTopicARN'
-    -> TopicConfiguration
-topicConfiguration pTopicARN_ =
-    TopicConfiguration'
-    { _tcId = Nothing
-    , _tcFilter = Nothing
-    , _tcTopicARN = pTopicARN_
-    , _tcEvents = mempty
-    }
-
--- | Undocumented member.
-tcId :: Lens' TopicConfiguration (Maybe Text)
-tcId = lens _tcId (\ s a -> s{_tcId = a});
-
--- | Undocumented member.
-tcFilter :: Lens' TopicConfiguration (Maybe NotificationConfigurationFilter)
-tcFilter = lens _tcFilter (\ s a -> s{_tcFilter = a});
-
--- | Amazon SNS topic ARN to which Amazon S3 will publish a message when it detects events of specified type.
-tcTopicARN :: Lens' TopicConfiguration Text
-tcTopicARN = lens _tcTopicARN (\ s a -> s{_tcTopicARN = a});
-
--- | Undocumented member.
-tcEvents :: Lens' TopicConfiguration [Event]
-tcEvents = lens _tcEvents (\ s a -> s{_tcEvents = a}) . _Coerce;
-
-instance FromXML TopicConfiguration where
-        parseXML x
-          = TopicConfiguration' <$>
-              (x .@? "Id") <*> (x .@? "Filter") <*> (x .@ "Topic")
-                <*> (parseXMLList "Event" x)
-
-instance Hashable TopicConfiguration
-
-instance NFData TopicConfiguration
-
-instance ToXML TopicConfiguration where
-        toXML TopicConfiguration'{..}
-          = mconcat
-              ["Id" @= _tcId, "Filter" @= _tcFilter,
-               "Topic" @= _tcTopicARN, toXMLList "Event" _tcEvents]
-
--- | /See:/ 'transition' smart constructor.
-data Transition = Transition'
-    { _tDays         :: !(Maybe Int)
-    , _tDate         :: !(Maybe RFC822)
-    , _tStorageClass :: !(Maybe TransitionStorageClass)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Transition' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tDays' - Indicates the lifetime, in days, of the objects that are subject to the rule. The value must be a non-zero positive integer.
---
--- * 'tDate' - Indicates at what date the object is to be moved or deleted. Should be in GMT ISO 8601 Format.
---
--- * 'tStorageClass' - The class of storage used to store the object.
-transition
-    :: Transition
-transition =
-    Transition'
-    { _tDays = Nothing
-    , _tDate = Nothing
-    , _tStorageClass = Nothing
-    }
-
--- | Indicates the lifetime, in days, of the objects that are subject to the rule. The value must be a non-zero positive integer.
-tDays :: Lens' Transition (Maybe Int)
-tDays = lens _tDays (\ s a -> s{_tDays = a});
-
--- | Indicates at what date the object is to be moved or deleted. Should be in GMT ISO 8601 Format.
-tDate :: Lens' Transition (Maybe UTCTime)
-tDate = lens _tDate (\ s a -> s{_tDate = a}) . mapping _Time;
-
--- | The class of storage used to store the object.
-tStorageClass :: Lens' Transition (Maybe TransitionStorageClass)
-tStorageClass = lens _tStorageClass (\ s a -> s{_tStorageClass = a});
-
-instance FromXML Transition where
-        parseXML x
-          = Transition' <$>
-              (x .@? "Days") <*> (x .@? "Date") <*>
-                (x .@? "StorageClass")
-
-instance Hashable Transition
-
-instance NFData Transition
-
-instance ToXML Transition where
-        toXML Transition'{..}
-          = mconcat
-              ["Days" @= _tDays, "Date" @= _tDate,
-               "StorageClass" @= _tStorageClass]
-
--- | /See:/ 'versioningConfiguration' smart constructor.
-data VersioningConfiguration = VersioningConfiguration'
-    { _vcStatus    :: !(Maybe BucketVersioningStatus)
-    , _vcMFADelete :: !(Maybe MFADelete)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VersioningConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vcStatus' - The versioning state of the bucket.
---
--- * 'vcMFADelete' - Specifies whether MFA delete is enabled in the bucket versioning configuration. This element is only returned if the bucket has been configured with MFA delete. If the bucket has never been so configured, this element is not returned.
-versioningConfiguration
-    :: VersioningConfiguration
-versioningConfiguration =
-    VersioningConfiguration'
-    { _vcStatus = Nothing
-    , _vcMFADelete = Nothing
-    }
-
--- | The versioning state of the bucket.
-vcStatus :: Lens' VersioningConfiguration (Maybe BucketVersioningStatus)
-vcStatus = lens _vcStatus (\ s a -> s{_vcStatus = a});
-
--- | Specifies whether MFA delete is enabled in the bucket versioning configuration. This element is only returned if the bucket has been configured with MFA delete. If the bucket has never been so configured, this element is not returned.
-vcMFADelete :: Lens' VersioningConfiguration (Maybe MFADelete)
-vcMFADelete = lens _vcMFADelete (\ s a -> s{_vcMFADelete = a});
-
-instance Hashable VersioningConfiguration
-
-instance NFData VersioningConfiguration
-
-instance ToXML VersioningConfiguration where
-        toXML VersioningConfiguration'{..}
-          = mconcat
-              ["Status" @= _vcStatus, "MfaDelete" @= _vcMFADelete]
-
--- | /See:/ 'websiteConfiguration' smart constructor.
-data WebsiteConfiguration = WebsiteConfiguration'
-    { _wcRedirectAllRequestsTo :: !(Maybe RedirectAllRequestsTo)
-    , _wcErrorDocument         :: !(Maybe ErrorDocument)
-    , _wcIndexDocument         :: !(Maybe IndexDocument)
-    , _wcRoutingRules          :: !(Maybe [RoutingRule])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'WebsiteConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'wcRedirectAllRequestsTo' - Undocumented member.
---
--- * 'wcErrorDocument' - Undocumented member.
---
--- * 'wcIndexDocument' - Undocumented member.
---
--- * 'wcRoutingRules' - Undocumented member.
-websiteConfiguration
-    :: WebsiteConfiguration
-websiteConfiguration =
-    WebsiteConfiguration'
-    { _wcRedirectAllRequestsTo = Nothing
-    , _wcErrorDocument = Nothing
-    , _wcIndexDocument = Nothing
-    , _wcRoutingRules = Nothing
-    }
-
--- | Undocumented member.
-wcRedirectAllRequestsTo :: Lens' WebsiteConfiguration (Maybe RedirectAllRequestsTo)
-wcRedirectAllRequestsTo = lens _wcRedirectAllRequestsTo (\ s a -> s{_wcRedirectAllRequestsTo = a});
-
--- | Undocumented member.
-wcErrorDocument :: Lens' WebsiteConfiguration (Maybe ErrorDocument)
-wcErrorDocument = lens _wcErrorDocument (\ s a -> s{_wcErrorDocument = a});
-
--- | Undocumented member.
-wcIndexDocument :: Lens' WebsiteConfiguration (Maybe IndexDocument)
-wcIndexDocument = lens _wcIndexDocument (\ s a -> s{_wcIndexDocument = a});
-
--- | Undocumented member.
-wcRoutingRules :: Lens' WebsiteConfiguration [RoutingRule]
-wcRoutingRules = lens _wcRoutingRules (\ s a -> s{_wcRoutingRules = a}) . _Default . _Coerce;
-
-instance Hashable WebsiteConfiguration
-
-instance NFData WebsiteConfiguration
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.S3.Types.Product where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.S3.Internal
+import Network.AWS.S3.Types.Sum
+
+-- | Specifies the days since the initiation of an Incomplete Multipart Upload that Lifecycle will wait before permanently removing all parts of the upload.
+--
+-- /See:/ 'abortIncompleteMultipartUpload' smart constructor.
+newtype AbortIncompleteMultipartUpload = AbortIncompleteMultipartUpload'
+  { _aimuDaysAfterInitiation :: Maybe Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'AbortIncompleteMultipartUpload' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aimuDaysAfterInitiation' - Indicates the number of days that must pass since initiation for Lifecycle to abort an Incomplete Multipart Upload.
+abortIncompleteMultipartUpload
+    :: AbortIncompleteMultipartUpload
+abortIncompleteMultipartUpload =
+  AbortIncompleteMultipartUpload' {_aimuDaysAfterInitiation = Nothing}
+
+
+-- | Indicates the number of days that must pass since initiation for Lifecycle to abort an Incomplete Multipart Upload.
+aimuDaysAfterInitiation :: Lens' AbortIncompleteMultipartUpload (Maybe Int)
+aimuDaysAfterInitiation = lens _aimuDaysAfterInitiation (\ s a -> s{_aimuDaysAfterInitiation = a});
+
+instance FromXML AbortIncompleteMultipartUpload where
+        parseXML x
+          = AbortIncompleteMultipartUpload' <$>
+              (x .@? "DaysAfterInitiation")
+
+instance Hashable AbortIncompleteMultipartUpload
+         where
+
+instance NFData AbortIncompleteMultipartUpload where
+
+instance ToXML AbortIncompleteMultipartUpload where
+        toXML AbortIncompleteMultipartUpload'{..}
+          = mconcat
+              ["DaysAfterInitiation" @= _aimuDaysAfterInitiation]
+
+-- | /See:/ 'accelerateConfiguration' smart constructor.
+newtype AccelerateConfiguration = AccelerateConfiguration'
+  { _acStatus :: Maybe BucketAccelerateStatus
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'AccelerateConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'acStatus' - The accelerate configuration of the bucket.
+accelerateConfiguration
+    :: AccelerateConfiguration
+accelerateConfiguration = AccelerateConfiguration' {_acStatus = Nothing}
+
+
+-- | The accelerate configuration of the bucket.
+acStatus :: Lens' AccelerateConfiguration (Maybe BucketAccelerateStatus)
+acStatus = lens _acStatus (\ s a -> s{_acStatus = a});
+
+instance Hashable AccelerateConfiguration where
+
+instance NFData AccelerateConfiguration where
+
+instance ToXML AccelerateConfiguration where
+        toXML AccelerateConfiguration'{..}
+          = mconcat ["Status" @= _acStatus]
+
+-- | /See:/ 'accessControlPolicy' smart constructor.
+data AccessControlPolicy = AccessControlPolicy'
+  { _acpGrants :: !(Maybe [Grant])
+  , _acpOwner  :: !(Maybe Owner)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'AccessControlPolicy' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'acpGrants' - A list of grants.
+--
+-- * 'acpOwner' - Undocumented member.
+accessControlPolicy
+    :: AccessControlPolicy
+accessControlPolicy =
+  AccessControlPolicy' {_acpGrants = Nothing, _acpOwner = Nothing}
+
+
+-- | A list of grants.
+acpGrants :: Lens' AccessControlPolicy [Grant]
+acpGrants = lens _acpGrants (\ s a -> s{_acpGrants = a}) . _Default . _Coerce;
+
+-- | Undocumented member.
+acpOwner :: Lens' AccessControlPolicy (Maybe Owner)
+acpOwner = lens _acpOwner (\ s a -> s{_acpOwner = a});
+
+instance Hashable AccessControlPolicy where
+
+instance NFData AccessControlPolicy where
+
+instance ToXML AccessControlPolicy where
+        toXML AccessControlPolicy'{..}
+          = mconcat
+              ["AccessControlList" @=
+                 toXML (toXMLList "Grant" <$> _acpGrants),
+               "Owner" @= _acpOwner]
+
+-- | Container for information regarding the access control for replicas.
+--
+-- /See:/ 'accessControlTranslation' smart constructor.
+newtype AccessControlTranslation = AccessControlTranslation'
+  { _actOwner :: OwnerOverride
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'AccessControlTranslation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'actOwner' - The override value for the owner of the replica object.
+accessControlTranslation
+    :: OwnerOverride -- ^ 'actOwner'
+    -> AccessControlTranslation
+accessControlTranslation pOwner_ =
+  AccessControlTranslation' {_actOwner = pOwner_}
+
+
+-- | The override value for the owner of the replica object.
+actOwner :: Lens' AccessControlTranslation OwnerOverride
+actOwner = lens _actOwner (\ s a -> s{_actOwner = a});
+
+instance FromXML AccessControlTranslation where
+        parseXML x
+          = AccessControlTranslation' <$> (x .@ "Owner")
+
+instance Hashable AccessControlTranslation where
+
+instance NFData AccessControlTranslation where
+
+instance ToXML AccessControlTranslation where
+        toXML AccessControlTranslation'{..}
+          = mconcat ["Owner" @= _actOwner]
+
+-- | /See:/ 'analyticsAndOperator' smart constructor.
+data AnalyticsAndOperator = AnalyticsAndOperator'
+  { _aaoPrefix :: !(Maybe Text)
+  , _aaoTags   :: !(Maybe [Tag])
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'AnalyticsAndOperator' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aaoPrefix' - The prefix to use when evaluating an AND predicate.
+--
+-- * 'aaoTags' - The list of tags to use when evaluating an AND predicate.
+analyticsAndOperator
+    :: AnalyticsAndOperator
+analyticsAndOperator =
+  AnalyticsAndOperator' {_aaoPrefix = Nothing, _aaoTags = Nothing}
+
+
+-- | The prefix to use when evaluating an AND predicate.
+aaoPrefix :: Lens' AnalyticsAndOperator (Maybe Text)
+aaoPrefix = lens _aaoPrefix (\ s a -> s{_aaoPrefix = a});
+
+-- | The list of tags to use when evaluating an AND predicate.
+aaoTags :: Lens' AnalyticsAndOperator [Tag]
+aaoTags = lens _aaoTags (\ s a -> s{_aaoTags = a}) . _Default . _Coerce;
+
+instance FromXML AnalyticsAndOperator where
+        parseXML x
+          = AnalyticsAndOperator' <$>
+              (x .@? "Prefix") <*>
+                (x .@? "Tag" .!@ mempty >>= may (parseXMLList "Tag"))
+
+instance Hashable AnalyticsAndOperator where
+
+instance NFData AnalyticsAndOperator where
+
+instance ToXML AnalyticsAndOperator where
+        toXML AnalyticsAndOperator'{..}
+          = mconcat
+              ["Prefix" @= _aaoPrefix,
+               "Tag" @= toXML (toXMLList "Tag" <$> _aaoTags)]
+
+-- | /See:/ 'analyticsConfiguration' smart constructor.
+data AnalyticsConfiguration = AnalyticsConfiguration'
+  { _acFilter               :: !(Maybe AnalyticsFilter)
+  , _acId                   :: !Text
+  , _acStorageClassAnalysis :: !StorageClassAnalysis
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'AnalyticsConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'acFilter' - The filter used to describe a set of objects for analyses. A filter must have exactly one prefix, one tag, or one conjunction (AnalyticsAndOperator). If no filter is provided, all objects will be considered in any analysis.
+--
+-- * 'acId' - The identifier used to represent an analytics configuration.
+--
+-- * 'acStorageClassAnalysis' - If present, it indicates that data related to access patterns will be collected and made available to analyze the tradeoffs between different storage classes.
+analyticsConfiguration
+    :: Text -- ^ 'acId'
+    -> StorageClassAnalysis -- ^ 'acStorageClassAnalysis'
+    -> AnalyticsConfiguration
+analyticsConfiguration pId_ pStorageClassAnalysis_ =
+  AnalyticsConfiguration'
+  { _acFilter = Nothing
+  , _acId = pId_
+  , _acStorageClassAnalysis = pStorageClassAnalysis_
+  }
+
+
+-- | The filter used to describe a set of objects for analyses. A filter must have exactly one prefix, one tag, or one conjunction (AnalyticsAndOperator). If no filter is provided, all objects will be considered in any analysis.
+acFilter :: Lens' AnalyticsConfiguration (Maybe AnalyticsFilter)
+acFilter = lens _acFilter (\ s a -> s{_acFilter = a});
+
+-- | The identifier used to represent an analytics configuration.
+acId :: Lens' AnalyticsConfiguration Text
+acId = lens _acId (\ s a -> s{_acId = a});
+
+-- | If present, it indicates that data related to access patterns will be collected and made available to analyze the tradeoffs between different storage classes.
+acStorageClassAnalysis :: Lens' AnalyticsConfiguration StorageClassAnalysis
+acStorageClassAnalysis = lens _acStorageClassAnalysis (\ s a -> s{_acStorageClassAnalysis = a});
+
+instance FromXML AnalyticsConfiguration where
+        parseXML x
+          = AnalyticsConfiguration' <$>
+              (x .@? "Filter") <*> (x .@ "Id") <*>
+                (x .@ "StorageClassAnalysis")
+
+instance Hashable AnalyticsConfiguration where
+
+instance NFData AnalyticsConfiguration where
+
+instance ToXML AnalyticsConfiguration where
+        toXML AnalyticsConfiguration'{..}
+          = mconcat
+              ["Filter" @= _acFilter, "Id" @= _acId,
+               "StorageClassAnalysis" @= _acStorageClassAnalysis]
+
+-- | /See:/ 'analyticsExportDestination' smart constructor.
+newtype AnalyticsExportDestination = AnalyticsExportDestination'
+  { _aedS3BucketDestination :: AnalyticsS3BucketDestination
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'AnalyticsExportDestination' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aedS3BucketDestination' - A destination signifying output to an S3 bucket.
+analyticsExportDestination
+    :: AnalyticsS3BucketDestination -- ^ 'aedS3BucketDestination'
+    -> AnalyticsExportDestination
+analyticsExportDestination pS3BucketDestination_ =
+  AnalyticsExportDestination' {_aedS3BucketDestination = pS3BucketDestination_}
+
+
+-- | A destination signifying output to an S3 bucket.
+aedS3BucketDestination :: Lens' AnalyticsExportDestination AnalyticsS3BucketDestination
+aedS3BucketDestination = lens _aedS3BucketDestination (\ s a -> s{_aedS3BucketDestination = a});
+
+instance FromXML AnalyticsExportDestination where
+        parseXML x
+          = AnalyticsExportDestination' <$>
+              (x .@ "S3BucketDestination")
+
+instance Hashable AnalyticsExportDestination where
+
+instance NFData AnalyticsExportDestination where
+
+instance ToXML AnalyticsExportDestination where
+        toXML AnalyticsExportDestination'{..}
+          = mconcat
+              ["S3BucketDestination" @= _aedS3BucketDestination]
+
+-- | /See:/ 'analyticsFilter' smart constructor.
+data AnalyticsFilter = AnalyticsFilter'
+  { _afTag    :: !(Maybe Tag)
+  , _afPrefix :: !(Maybe Text)
+  , _afAnd    :: !(Maybe AnalyticsAndOperator)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'AnalyticsFilter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'afTag' - The tag to use when evaluating an analytics filter.
+--
+-- * 'afPrefix' - The prefix to use when evaluating an analytics filter.
+--
+-- * 'afAnd' - A conjunction (logical AND) of predicates, which is used in evaluating an analytics filter. The operator must have at least two predicates.
+analyticsFilter
+    :: AnalyticsFilter
+analyticsFilter =
+  AnalyticsFilter' {_afTag = Nothing, _afPrefix = Nothing, _afAnd = Nothing}
+
+
+-- | The tag to use when evaluating an analytics filter.
+afTag :: Lens' AnalyticsFilter (Maybe Tag)
+afTag = lens _afTag (\ s a -> s{_afTag = a});
+
+-- | The prefix to use when evaluating an analytics filter.
+afPrefix :: Lens' AnalyticsFilter (Maybe Text)
+afPrefix = lens _afPrefix (\ s a -> s{_afPrefix = a});
+
+-- | A conjunction (logical AND) of predicates, which is used in evaluating an analytics filter. The operator must have at least two predicates.
+afAnd :: Lens' AnalyticsFilter (Maybe AnalyticsAndOperator)
+afAnd = lens _afAnd (\ s a -> s{_afAnd = a});
+
+instance FromXML AnalyticsFilter where
+        parseXML x
+          = AnalyticsFilter' <$>
+              (x .@? "Tag") <*> (x .@? "Prefix") <*> (x .@? "And")
+
+instance Hashable AnalyticsFilter where
+
+instance NFData AnalyticsFilter where
+
+instance ToXML AnalyticsFilter where
+        toXML AnalyticsFilter'{..}
+          = mconcat
+              ["Tag" @= _afTag, "Prefix" @= _afPrefix,
+               "And" @= _afAnd]
+
+-- | /See:/ 'analyticsS3BucketDestination' smart constructor.
+data AnalyticsS3BucketDestination = AnalyticsS3BucketDestination'
+  { _asbdBucketAccountId :: !(Maybe Text)
+  , _asbdPrefix          :: !(Maybe Text)
+  , _asbdFormat          :: !AnalyticsS3ExportFileFormat
+  , _asbdBucket          :: !BucketName
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'AnalyticsS3BucketDestination' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'asbdBucketAccountId' - The account ID that owns the destination bucket. If no account ID is provided, the owner will not be validated prior to exporting data.
+--
+-- * 'asbdPrefix' - The prefix to use when exporting data. The exported data begins with this prefix.
+--
+-- * 'asbdFormat' - The file format used when exporting data to Amazon S3.
+--
+-- * 'asbdBucket' - The Amazon resource name (ARN) of the bucket to which data is exported.
+analyticsS3BucketDestination
+    :: AnalyticsS3ExportFileFormat -- ^ 'asbdFormat'
+    -> BucketName -- ^ 'asbdBucket'
+    -> AnalyticsS3BucketDestination
+analyticsS3BucketDestination pFormat_ pBucket_ =
+  AnalyticsS3BucketDestination'
+  { _asbdBucketAccountId = Nothing
+  , _asbdPrefix = Nothing
+  , _asbdFormat = pFormat_
+  , _asbdBucket = pBucket_
+  }
+
+
+-- | The account ID that owns the destination bucket. If no account ID is provided, the owner will not be validated prior to exporting data.
+asbdBucketAccountId :: Lens' AnalyticsS3BucketDestination (Maybe Text)
+asbdBucketAccountId = lens _asbdBucketAccountId (\ s a -> s{_asbdBucketAccountId = a});
+
+-- | The prefix to use when exporting data. The exported data begins with this prefix.
+asbdPrefix :: Lens' AnalyticsS3BucketDestination (Maybe Text)
+asbdPrefix = lens _asbdPrefix (\ s a -> s{_asbdPrefix = a});
+
+-- | The file format used when exporting data to Amazon S3.
+asbdFormat :: Lens' AnalyticsS3BucketDestination AnalyticsS3ExportFileFormat
+asbdFormat = lens _asbdFormat (\ s a -> s{_asbdFormat = a});
+
+-- | The Amazon resource name (ARN) of the bucket to which data is exported.
+asbdBucket :: Lens' AnalyticsS3BucketDestination BucketName
+asbdBucket = lens _asbdBucket (\ s a -> s{_asbdBucket = a});
+
+instance FromXML AnalyticsS3BucketDestination where
+        parseXML x
+          = AnalyticsS3BucketDestination' <$>
+              (x .@? "BucketAccountId") <*> (x .@? "Prefix") <*>
+                (x .@ "Format")
+                <*> (x .@ "Bucket")
+
+instance Hashable AnalyticsS3BucketDestination where
+
+instance NFData AnalyticsS3BucketDestination where
+
+instance ToXML AnalyticsS3BucketDestination where
+        toXML AnalyticsS3BucketDestination'{..}
+          = mconcat
+              ["BucketAccountId" @= _asbdBucketAccountId,
+               "Prefix" @= _asbdPrefix, "Format" @= _asbdFormat,
+               "Bucket" @= _asbdBucket]
+
+-- | /See:/ 'bucket' smart constructor.
+data Bucket = Bucket'
+  { _bCreationDate :: !RFC822
+  , _bName         :: !BucketName
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Bucket' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bCreationDate' - Date the bucket was created.
+--
+-- * 'bName' - The name of the bucket.
+bucket
+    :: UTCTime -- ^ 'bCreationDate'
+    -> BucketName -- ^ 'bName'
+    -> Bucket
+bucket pCreationDate_ pName_ =
+  Bucket' {_bCreationDate = _Time # pCreationDate_, _bName = pName_}
+
+
+-- | Date the bucket was created.
+bCreationDate :: Lens' Bucket UTCTime
+bCreationDate = lens _bCreationDate (\ s a -> s{_bCreationDate = a}) . _Time;
+
+-- | The name of the bucket.
+bName :: Lens' Bucket BucketName
+bName = lens _bName (\ s a -> s{_bName = a});
+
+instance FromXML Bucket where
+        parseXML x
+          = Bucket' <$> (x .@ "CreationDate") <*> (x .@ "Name")
+
+instance Hashable Bucket where
+
+instance NFData Bucket where
+
+-- | /See:/ 'bucketLifecycleConfiguration' smart constructor.
+newtype BucketLifecycleConfiguration = BucketLifecycleConfiguration'
+  { _blcRules :: [LifecycleRule]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'BucketLifecycleConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'blcRules' - Undocumented member.
+bucketLifecycleConfiguration
+    :: BucketLifecycleConfiguration
+bucketLifecycleConfiguration =
+  BucketLifecycleConfiguration' {_blcRules = mempty}
+
+
+-- | Undocumented member.
+blcRules :: Lens' BucketLifecycleConfiguration [LifecycleRule]
+blcRules = lens _blcRules (\ s a -> s{_blcRules = a}) . _Coerce;
+
+instance Hashable BucketLifecycleConfiguration where
+
+instance NFData BucketLifecycleConfiguration where
+
+instance ToXML BucketLifecycleConfiguration where
+        toXML BucketLifecycleConfiguration'{..}
+          = mconcat [toXMLList "Rule" _blcRules]
+
+-- | /See:/ 'bucketLoggingStatus' smart constructor.
+newtype BucketLoggingStatus = BucketLoggingStatus'
+  { _blsLoggingEnabled :: Maybe LoggingEnabled
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'BucketLoggingStatus' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'blsLoggingEnabled' - Undocumented member.
+bucketLoggingStatus
+    :: BucketLoggingStatus
+bucketLoggingStatus = BucketLoggingStatus' {_blsLoggingEnabled = Nothing}
+
+
+-- | Undocumented member.
+blsLoggingEnabled :: Lens' BucketLoggingStatus (Maybe LoggingEnabled)
+blsLoggingEnabled = lens _blsLoggingEnabled (\ s a -> s{_blsLoggingEnabled = a});
+
+instance Hashable BucketLoggingStatus where
+
+instance NFData BucketLoggingStatus where
+
+instance ToXML BucketLoggingStatus where
+        toXML BucketLoggingStatus'{..}
+          = mconcat ["LoggingEnabled" @= _blsLoggingEnabled]
+
+-- | /See:/ 'corsConfiguration' smart constructor.
+newtype CORSConfiguration = CORSConfiguration'
+  { _ccCORSRules :: [CORSRule]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CORSConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ccCORSRules' - Undocumented member.
+corsConfiguration
+    :: CORSConfiguration
+corsConfiguration = CORSConfiguration' {_ccCORSRules = mempty}
+
+
+-- | Undocumented member.
+ccCORSRules :: Lens' CORSConfiguration [CORSRule]
+ccCORSRules = lens _ccCORSRules (\ s a -> s{_ccCORSRules = a}) . _Coerce;
+
+instance Hashable CORSConfiguration where
+
+instance NFData CORSConfiguration where
+
+instance ToXML CORSConfiguration where
+        toXML CORSConfiguration'{..}
+          = mconcat [toXMLList "CORSRule" _ccCORSRules]
+
+-- | /See:/ 'corsRule' smart constructor.
+data CORSRule = CORSRule'
+  { _crMaxAgeSeconds  :: !(Maybe Int)
+  , _crAllowedHeaders :: !(Maybe [Text])
+  , _crExposeHeaders  :: !(Maybe [Text])
+  , _crAllowedMethods :: ![Text]
+  , _crAllowedOrigins :: ![Text]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CORSRule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'crMaxAgeSeconds' - The time in seconds that your browser is to cache the preflight response for the specified resource.
+--
+-- * 'crAllowedHeaders' - Specifies which headers are allowed in a pre-flight OPTIONS request.
+--
+-- * 'crExposeHeaders' - One or more headers in the response that you want customers to be able to access from their applications (for example, from a JavaScript XMLHttpRequest object).
+--
+-- * 'crAllowedMethods' - Identifies HTTP methods that the domain/origin specified in the rule is allowed to execute.
+--
+-- * 'crAllowedOrigins' - One or more origins you want customers to be able to access the bucket from.
+corsRule
+    :: CORSRule
+corsRule =
+  CORSRule'
+  { _crMaxAgeSeconds = Nothing
+  , _crAllowedHeaders = Nothing
+  , _crExposeHeaders = Nothing
+  , _crAllowedMethods = mempty
+  , _crAllowedOrigins = mempty
+  }
+
+
+-- | The time in seconds that your browser is to cache the preflight response for the specified resource.
+crMaxAgeSeconds :: Lens' CORSRule (Maybe Int)
+crMaxAgeSeconds = lens _crMaxAgeSeconds (\ s a -> s{_crMaxAgeSeconds = a});
+
+-- | Specifies which headers are allowed in a pre-flight OPTIONS request.
+crAllowedHeaders :: Lens' CORSRule [Text]
+crAllowedHeaders = lens _crAllowedHeaders (\ s a -> s{_crAllowedHeaders = a}) . _Default . _Coerce;
+
+-- | One or more headers in the response that you want customers to be able to access from their applications (for example, from a JavaScript XMLHttpRequest object).
+crExposeHeaders :: Lens' CORSRule [Text]
+crExposeHeaders = lens _crExposeHeaders (\ s a -> s{_crExposeHeaders = a}) . _Default . _Coerce;
+
+-- | Identifies HTTP methods that the domain/origin specified in the rule is allowed to execute.
+crAllowedMethods :: Lens' CORSRule [Text]
+crAllowedMethods = lens _crAllowedMethods (\ s a -> s{_crAllowedMethods = a}) . _Coerce;
+
+-- | One or more origins you want customers to be able to access the bucket from.
+crAllowedOrigins :: Lens' CORSRule [Text]
+crAllowedOrigins = lens _crAllowedOrigins (\ s a -> s{_crAllowedOrigins = a}) . _Coerce;
+
+instance FromXML CORSRule where
+        parseXML x
+          = CORSRule' <$>
+              (x .@? "MaxAgeSeconds") <*>
+                (may (parseXMLList "AllowedHeader") x)
+                <*> (may (parseXMLList "ExposeHeader") x)
+                <*> (parseXMLList "AllowedMethod" x)
+                <*> (parseXMLList "AllowedOrigin" x)
+
+instance Hashable CORSRule where
+
+instance NFData CORSRule where
+
+instance ToXML CORSRule where
+        toXML CORSRule'{..}
+          = mconcat
+              ["MaxAgeSeconds" @= _crMaxAgeSeconds,
+               toXML
+                 (toXMLList "AllowedHeader" <$> _crAllowedHeaders),
+               toXML
+                 (toXMLList "ExposeHeader" <$> _crExposeHeaders),
+               toXMLList "AllowedMethod" _crAllowedMethods,
+               toXMLList "AllowedOrigin" _crAllowedOrigins]
+
+-- | /See:/ 'commonPrefix' smart constructor.
+newtype CommonPrefix = CommonPrefix'
+  { _cpPrefix :: Maybe Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CommonPrefix' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cpPrefix' - Undocumented member.
+commonPrefix
+    :: CommonPrefix
+commonPrefix = CommonPrefix' {_cpPrefix = Nothing}
+
+
+-- | Undocumented member.
+cpPrefix :: Lens' CommonPrefix (Maybe Text)
+cpPrefix = lens _cpPrefix (\ s a -> s{_cpPrefix = a});
+
+instance FromXML CommonPrefix where
+        parseXML x = CommonPrefix' <$> (x .@? "Prefix")
+
+instance Hashable CommonPrefix where
+
+instance NFData CommonPrefix where
+
+-- | /See:/ 'completedMultipartUpload' smart constructor.
+newtype CompletedMultipartUpload = CompletedMultipartUpload'
+  { _cmuParts :: Maybe (List1 CompletedPart)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CompletedMultipartUpload' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cmuParts' - Undocumented member.
+completedMultipartUpload
+    :: CompletedMultipartUpload
+completedMultipartUpload = CompletedMultipartUpload' {_cmuParts = Nothing}
+
+
+-- | Undocumented member.
+cmuParts :: Lens' CompletedMultipartUpload (Maybe (NonEmpty CompletedPart))
+cmuParts = lens _cmuParts (\ s a -> s{_cmuParts = a}) . mapping _List1;
+
+instance Hashable CompletedMultipartUpload where
+
+instance NFData CompletedMultipartUpload where
+
+instance ToXML CompletedMultipartUpload where
+        toXML CompletedMultipartUpload'{..}
+          = mconcat [toXML (toXMLList "Part" <$> _cmuParts)]
+
+-- | /See:/ 'completedPart' smart constructor.
+data CompletedPart = CompletedPart'
+  { _cpPartNumber :: !Int
+  , _cpETag       :: !ETag
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CompletedPart' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cpPartNumber' - Part number that identifies the part. This is a positive integer between 1 and 10,000.
+--
+-- * 'cpETag' - Entity tag returned when the part was uploaded.
+completedPart
+    :: Int -- ^ 'cpPartNumber'
+    -> ETag -- ^ 'cpETag'
+    -> CompletedPart
+completedPart pPartNumber_ pETag_ =
+  CompletedPart' {_cpPartNumber = pPartNumber_, _cpETag = pETag_}
+
+
+-- | Part number that identifies the part. This is a positive integer between 1 and 10,000.
+cpPartNumber :: Lens' CompletedPart Int
+cpPartNumber = lens _cpPartNumber (\ s a -> s{_cpPartNumber = a});
+
+-- | Entity tag returned when the part was uploaded.
+cpETag :: Lens' CompletedPart ETag
+cpETag = lens _cpETag (\ s a -> s{_cpETag = a});
+
+instance Hashable CompletedPart where
+
+instance NFData CompletedPart where
+
+instance ToXML CompletedPart where
+        toXML CompletedPart'{..}
+          = mconcat
+              ["PartNumber" @= _cpPartNumber, "ETag" @= _cpETag]
+
+-- | /See:/ 'condition' smart constructor.
+data Condition = Condition'
+  { _cKeyPrefixEquals             :: !(Maybe Text)
+  , _cHTTPErrorCodeReturnedEquals :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Condition' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cKeyPrefixEquals' - The object key name prefix when the redirect is applied. For example, to redirect requests for ExamplePage.html, the key prefix will be ExamplePage.html. To redirect request for all pages with the prefix docs/, the key prefix will be /docs, which identifies all objects in the docs/ folder. Required when the parent element Condition is specified and sibling HttpErrorCodeReturnedEquals is not specified. If both conditions are specified, both must be true for the redirect to be applied.
+--
+-- * 'cHTTPErrorCodeReturnedEquals' - The HTTP error code when the redirect is applied. In the event of an error, if the error code equals this value, then the specified redirect is applied. Required when parent element Condition is specified and sibling KeyPrefixEquals is not specified. If both are specified, then both must be true for the redirect to be applied.
+condition
+    :: Condition
+condition =
+  Condition'
+  {_cKeyPrefixEquals = Nothing, _cHTTPErrorCodeReturnedEquals = Nothing}
+
+
+-- | The object key name prefix when the redirect is applied. For example, to redirect requests for ExamplePage.html, the key prefix will be ExamplePage.html. To redirect request for all pages with the prefix docs/, the key prefix will be /docs, which identifies all objects in the docs/ folder. Required when the parent element Condition is specified and sibling HttpErrorCodeReturnedEquals is not specified. If both conditions are specified, both must be true for the redirect to be applied.
+cKeyPrefixEquals :: Lens' Condition (Maybe Text)
+cKeyPrefixEquals = lens _cKeyPrefixEquals (\ s a -> s{_cKeyPrefixEquals = a});
+
+-- | The HTTP error code when the redirect is applied. In the event of an error, if the error code equals this value, then the specified redirect is applied. Required when parent element Condition is specified and sibling KeyPrefixEquals is not specified. If both are specified, then both must be true for the redirect to be applied.
+cHTTPErrorCodeReturnedEquals :: Lens' Condition (Maybe Text)
+cHTTPErrorCodeReturnedEquals = lens _cHTTPErrorCodeReturnedEquals (\ s a -> s{_cHTTPErrorCodeReturnedEquals = a});
+
+instance FromXML Condition where
+        parseXML x
+          = Condition' <$>
+              (x .@? "KeyPrefixEquals") <*>
+                (x .@? "HttpErrorCodeReturnedEquals")
+
+instance Hashable Condition where
+
+instance NFData Condition where
+
+instance ToXML Condition where
+        toXML Condition'{..}
+          = mconcat
+              ["KeyPrefixEquals" @= _cKeyPrefixEquals,
+               "HttpErrorCodeReturnedEquals" @=
+                 _cHTTPErrorCodeReturnedEquals]
+
+-- | /See:/ 'copyObjectResult' smart constructor.
+data CopyObjectResult = CopyObjectResult'
+  { _corETag         :: !(Maybe ETag)
+  , _corLastModified :: !(Maybe RFC822)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CopyObjectResult' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'corETag' - Undocumented member.
+--
+-- * 'corLastModified' - Undocumented member.
+copyObjectResult
+    :: CopyObjectResult
+copyObjectResult =
+  CopyObjectResult' {_corETag = Nothing, _corLastModified = Nothing}
+
+
+-- | Undocumented member.
+corETag :: Lens' CopyObjectResult (Maybe ETag)
+corETag = lens _corETag (\ s a -> s{_corETag = a});
+
+-- | Undocumented member.
+corLastModified :: Lens' CopyObjectResult (Maybe UTCTime)
+corLastModified = lens _corLastModified (\ s a -> s{_corLastModified = a}) . mapping _Time;
+
+instance FromXML CopyObjectResult where
+        parseXML x
+          = CopyObjectResult' <$>
+              (x .@? "ETag") <*> (x .@? "LastModified")
+
+instance Hashable CopyObjectResult where
+
+instance NFData CopyObjectResult where
+
+-- | /See:/ 'copyPartResult' smart constructor.
+data CopyPartResult = CopyPartResult'
+  { _cprETag         :: !(Maybe ETag)
+  , _cprLastModified :: !(Maybe RFC822)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CopyPartResult' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cprETag' - Entity tag of the object.
+--
+-- * 'cprLastModified' - Date and time at which the object was uploaded.
+copyPartResult
+    :: CopyPartResult
+copyPartResult =
+  CopyPartResult' {_cprETag = Nothing, _cprLastModified = Nothing}
+
+
+-- | Entity tag of the object.
+cprETag :: Lens' CopyPartResult (Maybe ETag)
+cprETag = lens _cprETag (\ s a -> s{_cprETag = a});
+
+-- | Date and time at which the object was uploaded.
+cprLastModified :: Lens' CopyPartResult (Maybe UTCTime)
+cprLastModified = lens _cprLastModified (\ s a -> s{_cprLastModified = a}) . mapping _Time;
+
+instance FromXML CopyPartResult where
+        parseXML x
+          = CopyPartResult' <$>
+              (x .@? "ETag") <*> (x .@? "LastModified")
+
+instance Hashable CopyPartResult where
+
+instance NFData CopyPartResult where
+
+-- | /See:/ 'createBucketConfiguration' smart constructor.
+newtype CreateBucketConfiguration = CreateBucketConfiguration'
+  { _cbcLocationConstraint :: Maybe LocationConstraint
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateBucketConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cbcLocationConstraint' - Specifies the region where the bucket will be created. If you don't specify a region, the bucket will be created in US Standard.
+createBucketConfiguration
+    :: CreateBucketConfiguration
+createBucketConfiguration =
+  CreateBucketConfiguration' {_cbcLocationConstraint = Nothing}
+
+
+-- | Specifies the region where the bucket will be created. If you don't specify a region, the bucket will be created in US Standard.
+cbcLocationConstraint :: Lens' CreateBucketConfiguration (Maybe LocationConstraint)
+cbcLocationConstraint = lens _cbcLocationConstraint (\ s a -> s{_cbcLocationConstraint = a});
+
+instance Hashable CreateBucketConfiguration where
+
+instance NFData CreateBucketConfiguration where
+
+instance ToXML CreateBucketConfiguration where
+        toXML CreateBucketConfiguration'{..}
+          = mconcat
+              ["LocationConstraint" @= _cbcLocationConstraint]
+
+-- | /See:/ 'delete'' smart constructor.
+data Delete = Delete'
+  { _dQuiet   :: !(Maybe Bool)
+  , _dObjects :: ![ObjectIdentifier]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Delete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dQuiet' - Element to enable quiet mode for the request. When you add this element, you must set its value to true.
+--
+-- * 'dObjects' - Undocumented member.
+delete'
+    :: Delete
+delete' = Delete' {_dQuiet = Nothing, _dObjects = mempty}
+
+
+-- | Element to enable quiet mode for the request. When you add this element, you must set its value to true.
+dQuiet :: Lens' Delete (Maybe Bool)
+dQuiet = lens _dQuiet (\ s a -> s{_dQuiet = a});
+
+-- | Undocumented member.
+dObjects :: Lens' Delete [ObjectIdentifier]
+dObjects = lens _dObjects (\ s a -> s{_dObjects = a}) . _Coerce;
+
+instance Hashable Delete where
+
+instance NFData Delete where
+
+instance ToXML Delete where
+        toXML Delete'{..}
+          = mconcat
+              ["Quiet" @= _dQuiet, toXMLList "Object" _dObjects]
+
+-- | /See:/ 'deleteMarkerEntry' smart constructor.
+data DeleteMarkerEntry = DeleteMarkerEntry'
+  { _dmeVersionId    :: !(Maybe ObjectVersionId)
+  , _dmeIsLatest     :: !(Maybe Bool)
+  , _dmeOwner        :: !(Maybe Owner)
+  , _dmeKey          :: !(Maybe ObjectKey)
+  , _dmeLastModified :: !(Maybe RFC822)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteMarkerEntry' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dmeVersionId' - Version ID of an object.
+--
+-- * 'dmeIsLatest' - Specifies whether the object is (true) or is not (false) the latest version of an object.
+--
+-- * 'dmeOwner' - Undocumented member.
+--
+-- * 'dmeKey' - The object key.
+--
+-- * 'dmeLastModified' - Date and time the object was last modified.
+deleteMarkerEntry
+    :: DeleteMarkerEntry
+deleteMarkerEntry =
+  DeleteMarkerEntry'
+  { _dmeVersionId = Nothing
+  , _dmeIsLatest = Nothing
+  , _dmeOwner = Nothing
+  , _dmeKey = Nothing
+  , _dmeLastModified = Nothing
+  }
+
+
+-- | Version ID of an object.
+dmeVersionId :: Lens' DeleteMarkerEntry (Maybe ObjectVersionId)
+dmeVersionId = lens _dmeVersionId (\ s a -> s{_dmeVersionId = a});
+
+-- | Specifies whether the object is (true) or is not (false) the latest version of an object.
+dmeIsLatest :: Lens' DeleteMarkerEntry (Maybe Bool)
+dmeIsLatest = lens _dmeIsLatest (\ s a -> s{_dmeIsLatest = a});
+
+-- | Undocumented member.
+dmeOwner :: Lens' DeleteMarkerEntry (Maybe Owner)
+dmeOwner = lens _dmeOwner (\ s a -> s{_dmeOwner = a});
+
+-- | The object key.
+dmeKey :: Lens' DeleteMarkerEntry (Maybe ObjectKey)
+dmeKey = lens _dmeKey (\ s a -> s{_dmeKey = a});
+
+-- | Date and time the object was last modified.
+dmeLastModified :: Lens' DeleteMarkerEntry (Maybe UTCTime)
+dmeLastModified = lens _dmeLastModified (\ s a -> s{_dmeLastModified = a}) . mapping _Time;
+
+instance FromXML DeleteMarkerEntry where
+        parseXML x
+          = DeleteMarkerEntry' <$>
+              (x .@? "VersionId") <*> (x .@? "IsLatest") <*>
+                (x .@? "Owner")
+                <*> (x .@? "Key")
+                <*> (x .@? "LastModified")
+
+instance Hashable DeleteMarkerEntry where
+
+instance NFData DeleteMarkerEntry where
+
+-- | /See:/ 'deletedObject' smart constructor.
+data DeletedObject = DeletedObject'
+  { _dVersionId             :: !(Maybe ObjectVersionId)
+  , _dDeleteMarker          :: !(Maybe Bool)
+  , _dDeleteMarkerVersionId :: !(Maybe Text)
+  , _dKey                   :: !(Maybe ObjectKey)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeletedObject' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dVersionId' - Undocumented member.
+--
+-- * 'dDeleteMarker' - Undocumented member.
+--
+-- * 'dDeleteMarkerVersionId' - Undocumented member.
+--
+-- * 'dKey' - Undocumented member.
+deletedObject
+    :: DeletedObject
+deletedObject =
+  DeletedObject'
+  { _dVersionId = Nothing
+  , _dDeleteMarker = Nothing
+  , _dDeleteMarkerVersionId = Nothing
+  , _dKey = Nothing
+  }
+
+
+-- | Undocumented member.
+dVersionId :: Lens' DeletedObject (Maybe ObjectVersionId)
+dVersionId = lens _dVersionId (\ s a -> s{_dVersionId = a});
+
+-- | Undocumented member.
+dDeleteMarker :: Lens' DeletedObject (Maybe Bool)
+dDeleteMarker = lens _dDeleteMarker (\ s a -> s{_dDeleteMarker = a});
+
+-- | Undocumented member.
+dDeleteMarkerVersionId :: Lens' DeletedObject (Maybe Text)
+dDeleteMarkerVersionId = lens _dDeleteMarkerVersionId (\ s a -> s{_dDeleteMarkerVersionId = a});
+
+-- | Undocumented member.
+dKey :: Lens' DeletedObject (Maybe ObjectKey)
+dKey = lens _dKey (\ s a -> s{_dKey = a});
+
+instance FromXML DeletedObject where
+        parseXML x
+          = DeletedObject' <$>
+              (x .@? "VersionId") <*> (x .@? "DeleteMarker") <*>
+                (x .@? "DeleteMarkerVersionId")
+                <*> (x .@? "Key")
+
+instance Hashable DeletedObject where
+
+instance NFData DeletedObject where
+
+-- | Container for replication destination information.
+--
+-- /See:/ 'destination' smart constructor.
+data Destination = Destination'
+  { _dAccessControlTranslation :: !(Maybe AccessControlTranslation)
+  , _dAccount                  :: !(Maybe Text)
+  , _dStorageClass             :: !(Maybe StorageClass)
+  , _dEncryptionConfiguration  :: !(Maybe EncryptionConfiguration)
+  , _dBucket                   :: !BucketName
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Destination' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dAccessControlTranslation' - Container for information regarding the access control for replicas.
+--
+-- * 'dAccount' - Account ID of the destination bucket. Currently this is only being verified if Access Control Translation is enabled
+--
+-- * 'dStorageClass' - The class of storage used to store the object.
+--
+-- * 'dEncryptionConfiguration' - Container for information regarding encryption based configuration for replicas.
+--
+-- * 'dBucket' - Amazon resource name (ARN) of the bucket where you want Amazon S3 to store replicas of the object identified by the rule.
+destination
+    :: BucketName -- ^ 'dBucket'
+    -> Destination
+destination pBucket_ =
+  Destination'
+  { _dAccessControlTranslation = Nothing
+  , _dAccount = Nothing
+  , _dStorageClass = Nothing
+  , _dEncryptionConfiguration = Nothing
+  , _dBucket = pBucket_
+  }
+
+
+-- | Container for information regarding the access control for replicas.
+dAccessControlTranslation :: Lens' Destination (Maybe AccessControlTranslation)
+dAccessControlTranslation = lens _dAccessControlTranslation (\ s a -> s{_dAccessControlTranslation = a});
+
+-- | Account ID of the destination bucket. Currently this is only being verified if Access Control Translation is enabled
+dAccount :: Lens' Destination (Maybe Text)
+dAccount = lens _dAccount (\ s a -> s{_dAccount = a});
+
+-- | The class of storage used to store the object.
+dStorageClass :: Lens' Destination (Maybe StorageClass)
+dStorageClass = lens _dStorageClass (\ s a -> s{_dStorageClass = a});
+
+-- | Container for information regarding encryption based configuration for replicas.
+dEncryptionConfiguration :: Lens' Destination (Maybe EncryptionConfiguration)
+dEncryptionConfiguration = lens _dEncryptionConfiguration (\ s a -> s{_dEncryptionConfiguration = a});
+
+-- | Amazon resource name (ARN) of the bucket where you want Amazon S3 to store replicas of the object identified by the rule.
+dBucket :: Lens' Destination BucketName
+dBucket = lens _dBucket (\ s a -> s{_dBucket = a});
+
+instance FromXML Destination where
+        parseXML x
+          = Destination' <$>
+              (x .@? "AccessControlTranslation") <*>
+                (x .@? "Account")
+                <*> (x .@? "StorageClass")
+                <*> (x .@? "EncryptionConfiguration")
+                <*> (x .@ "Bucket")
+
+instance Hashable Destination where
+
+instance NFData Destination where
+
+instance ToXML Destination where
+        toXML Destination'{..}
+          = mconcat
+              ["AccessControlTranslation" @=
+                 _dAccessControlTranslation,
+               "Account" @= _dAccount,
+               "StorageClass" @= _dStorageClass,
+               "EncryptionConfiguration" @=
+                 _dEncryptionConfiguration,
+               "Bucket" @= _dBucket]
+
+-- | Container for information regarding encryption based configuration for replicas.
+--
+-- /See:/ 'encryptionConfiguration' smart constructor.
+newtype EncryptionConfiguration = EncryptionConfiguration'
+  { _ecReplicaKMSKeyId :: Maybe Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'EncryptionConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ecReplicaKMSKeyId' - The id of the KMS key used to encrypt the replica object.
+encryptionConfiguration
+    :: EncryptionConfiguration
+encryptionConfiguration =
+  EncryptionConfiguration' {_ecReplicaKMSKeyId = Nothing}
+
+
+-- | The id of the KMS key used to encrypt the replica object.
+ecReplicaKMSKeyId :: Lens' EncryptionConfiguration (Maybe Text)
+ecReplicaKMSKeyId = lens _ecReplicaKMSKeyId (\ s a -> s{_ecReplicaKMSKeyId = a});
+
+instance FromXML EncryptionConfiguration where
+        parseXML x
+          = EncryptionConfiguration' <$>
+              (x .@? "ReplicaKmsKeyID")
+
+instance Hashable EncryptionConfiguration where
+
+instance NFData EncryptionConfiguration where
+
+instance ToXML EncryptionConfiguration where
+        toXML EncryptionConfiguration'{..}
+          = mconcat ["ReplicaKmsKeyID" @= _ecReplicaKMSKeyId]
+
+-- | /See:/ 'errorDocument' smart constructor.
+newtype ErrorDocument = ErrorDocument'
+  { _edKey :: ObjectKey
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ErrorDocument' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'edKey' - The object key name to use when a 4XX class error occurs.
+errorDocument
+    :: ObjectKey -- ^ 'edKey'
+    -> ErrorDocument
+errorDocument pKey_ = ErrorDocument' {_edKey = pKey_}
+
+
+-- | The object key name to use when a 4XX class error occurs.
+edKey :: Lens' ErrorDocument ObjectKey
+edKey = lens _edKey (\ s a -> s{_edKey = a});
+
+instance FromXML ErrorDocument where
+        parseXML x = ErrorDocument' <$> (x .@ "Key")
+
+instance Hashable ErrorDocument where
+
+instance NFData ErrorDocument where
+
+instance ToXML ErrorDocument where
+        toXML ErrorDocument'{..} = mconcat ["Key" @= _edKey]
+
+-- | Container for key value pair that defines the criteria for the filter rule.
+--
+-- /See:/ 'filterRule' smart constructor.
+data FilterRule = FilterRule'
+  { _frValue :: !(Maybe Text)
+  , _frName  :: !(Maybe FilterRuleName)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'FilterRule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'frValue' - Undocumented member.
+--
+-- * 'frName' - <http://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html Configuring Event Notifications>
+filterRule
+    :: FilterRule
+filterRule = FilterRule' {_frValue = Nothing, _frName = Nothing}
+
+
+-- | Undocumented member.
+frValue :: Lens' FilterRule (Maybe Text)
+frValue = lens _frValue (\ s a -> s{_frValue = a});
+
+-- | <http://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html Configuring Event Notifications>
+frName :: Lens' FilterRule (Maybe FilterRuleName)
+frName = lens _frName (\ s a -> s{_frName = a});
+
+instance FromXML FilterRule where
+        parseXML x
+          = FilterRule' <$> (x .@? "Value") <*> (x .@? "Name")
+
+instance Hashable FilterRule where
+
+instance NFData FilterRule where
+
+instance ToXML FilterRule where
+        toXML FilterRule'{..}
+          = mconcat ["Value" @= _frValue, "Name" @= _frName]
+
+-- | /See:/ 'glacierJobParameters' smart constructor.
+newtype GlacierJobParameters = GlacierJobParameters'
+  { _gjpTier :: Tier
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GlacierJobParameters' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gjpTier' - Glacier retrieval tier at which the restore will be processed.
+glacierJobParameters
+    :: Tier -- ^ 'gjpTier'
+    -> GlacierJobParameters
+glacierJobParameters pTier_ = GlacierJobParameters' {_gjpTier = pTier_}
+
+
+-- | Glacier retrieval tier at which the restore will be processed.
+gjpTier :: Lens' GlacierJobParameters Tier
+gjpTier = lens _gjpTier (\ s a -> s{_gjpTier = a});
+
+instance Hashable GlacierJobParameters where
+
+instance NFData GlacierJobParameters where
+
+instance ToXML GlacierJobParameters where
+        toXML GlacierJobParameters'{..}
+          = mconcat ["Tier" @= _gjpTier]
+
+-- | /See:/ 'grant' smart constructor.
+data Grant = Grant'
+  { _gPermission :: !(Maybe Permission)
+  , _gGrantee    :: !(Maybe Grantee)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Grant' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gPermission' - Specifies the permission given to the grantee.
+--
+-- * 'gGrantee' - Undocumented member.
+grant
+    :: Grant
+grant = Grant' {_gPermission = Nothing, _gGrantee = Nothing}
+
+
+-- | Specifies the permission given to the grantee.
+gPermission :: Lens' Grant (Maybe Permission)
+gPermission = lens _gPermission (\ s a -> s{_gPermission = a});
+
+-- | Undocumented member.
+gGrantee :: Lens' Grant (Maybe Grantee)
+gGrantee = lens _gGrantee (\ s a -> s{_gGrantee = a});
+
+instance FromXML Grant where
+        parseXML x
+          = Grant' <$>
+              (x .@? "Permission") <*> (x .@? "Grantee")
+
+instance Hashable Grant where
+
+instance NFData Grant where
+
+instance ToXML Grant where
+        toXML Grant'{..}
+          = mconcat
+              ["Permission" @= _gPermission,
+               "Grantee" @= _gGrantee]
+
+-- | /See:/ 'grantee' smart constructor.
+data Grantee = Grantee'
+  { _gURI          :: !(Maybe Text)
+  , _gEmailAddress :: !(Maybe Text)
+  , _gDisplayName  :: !(Maybe Text)
+  , _gId           :: !(Maybe Text)
+  , _gType         :: !Type
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Grantee' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gURI' - URI of the grantee group.
+--
+-- * 'gEmailAddress' - Email address of the grantee.
+--
+-- * 'gDisplayName' - Screen name of the grantee.
+--
+-- * 'gId' - The canonical user ID of the grantee.
+--
+-- * 'gType' - Type of grantee
+grantee
+    :: Type -- ^ 'gType'
+    -> Grantee
+grantee pType_ =
+  Grantee'
+  { _gURI = Nothing
+  , _gEmailAddress = Nothing
+  , _gDisplayName = Nothing
+  , _gId = Nothing
+  , _gType = pType_
+  }
+
+
+-- | URI of the grantee group.
+gURI :: Lens' Grantee (Maybe Text)
+gURI = lens _gURI (\ s a -> s{_gURI = a});
+
+-- | Email address of the grantee.
+gEmailAddress :: Lens' Grantee (Maybe Text)
+gEmailAddress = lens _gEmailAddress (\ s a -> s{_gEmailAddress = a});
+
+-- | Screen name of the grantee.
+gDisplayName :: Lens' Grantee (Maybe Text)
+gDisplayName = lens _gDisplayName (\ s a -> s{_gDisplayName = a});
+
+-- | The canonical user ID of the grantee.
+gId :: Lens' Grantee (Maybe Text)
+gId = lens _gId (\ s a -> s{_gId = a});
+
+-- | Type of grantee
+gType :: Lens' Grantee Type
+gType = lens _gType (\ s a -> s{_gType = a});
+
+instance FromXML Grantee where
+        parseXML x
+          = Grantee' <$>
+              (x .@? "URI") <*> (x .@? "EmailAddress") <*>
+                (x .@? "DisplayName")
+                <*> (x .@? "ID")
+                <*> (x .@ "xsi:type")
+
+instance Hashable Grantee where
+
+instance NFData Grantee where
+
+instance ToXML Grantee where
+        toXML Grantee'{..}
+          = mconcat
+              ["URI" @= _gURI, "EmailAddress" @= _gEmailAddress,
+               "DisplayName" @= _gDisplayName, "ID" @= _gId,
+               "xsi:type" @@= _gType]
+
+-- | /See:/ 'indexDocument' smart constructor.
+newtype IndexDocument = IndexDocument'
+  { _idSuffix :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'IndexDocument' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'idSuffix' - A suffix that is appended to a request that is for a directory on the website endpoint (e.g. if the suffix is index.html and you make a request to samplebucket/images/ the data that is returned will be for the object with the key name images/index.html) The suffix must not be empty and must not include a slash character.
+indexDocument
+    :: Text -- ^ 'idSuffix'
+    -> IndexDocument
+indexDocument pSuffix_ = IndexDocument' {_idSuffix = pSuffix_}
+
+
+-- | A suffix that is appended to a request that is for a directory on the website endpoint (e.g. if the suffix is index.html and you make a request to samplebucket/images/ the data that is returned will be for the object with the key name images/index.html) The suffix must not be empty and must not include a slash character.
+idSuffix :: Lens' IndexDocument Text
+idSuffix = lens _idSuffix (\ s a -> s{_idSuffix = a});
+
+instance FromXML IndexDocument where
+        parseXML x = IndexDocument' <$> (x .@ "Suffix")
+
+instance Hashable IndexDocument where
+
+instance NFData IndexDocument where
+
+instance ToXML IndexDocument where
+        toXML IndexDocument'{..}
+          = mconcat ["Suffix" @= _idSuffix]
+
+-- | /See:/ 'initiator' smart constructor.
+data Initiator = Initiator'
+  { _iDisplayName :: !(Maybe Text)
+  , _iId          :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Initiator' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'iDisplayName' - Name of the Principal.
+--
+-- * 'iId' - If the principal is an AWS account, it provides the Canonical User ID. If the principal is an IAM User, it provides a user ARN value.
+initiator
+    :: Initiator
+initiator = Initiator' {_iDisplayName = Nothing, _iId = Nothing}
+
+
+-- | Name of the Principal.
+iDisplayName :: Lens' Initiator (Maybe Text)
+iDisplayName = lens _iDisplayName (\ s a -> s{_iDisplayName = a});
+
+-- | If the principal is an AWS account, it provides the Canonical User ID. If the principal is an IAM User, it provides a user ARN value.
+iId :: Lens' Initiator (Maybe Text)
+iId = lens _iId (\ s a -> s{_iId = a});
+
+instance FromXML Initiator where
+        parseXML x
+          = Initiator' <$>
+              (x .@? "DisplayName") <*> (x .@? "ID")
+
+instance Hashable Initiator where
+
+instance NFData Initiator where
+
+-- | /See:/ 'inventoryConfiguration' smart constructor.
+data InventoryConfiguration = InventoryConfiguration'
+  { _icOptionalFields         :: !(Maybe [InventoryOptionalField])
+  , _icFilter                 :: !(Maybe InventoryFilter)
+  , _icDestination            :: !InventoryDestination
+  , _icIsEnabled              :: !Bool
+  , _icId                     :: !Text
+  , _icIncludedObjectVersions :: !InventoryIncludedObjectVersions
+  , _icSchedule               :: !InventorySchedule
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'InventoryConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'icOptionalFields' - Contains the optional fields that are included in the inventory results.
+--
+-- * 'icFilter' - Specifies an inventory filter. The inventory only includes objects that meet the filter's criteria.
+--
+-- * 'icDestination' - Contains information about where to publish the inventory results.
+--
+-- * 'icIsEnabled' - Specifies whether the inventory is enabled or disabled.
+--
+-- * 'icId' - The ID used to identify the inventory configuration.
+--
+-- * 'icIncludedObjectVersions' - Specifies which object version(s) to included in the inventory results.
+--
+-- * 'icSchedule' - Specifies the schedule for generating inventory results.
+inventoryConfiguration
+    :: InventoryDestination -- ^ 'icDestination'
+    -> Bool -- ^ 'icIsEnabled'
+    -> Text -- ^ 'icId'
+    -> InventoryIncludedObjectVersions -- ^ 'icIncludedObjectVersions'
+    -> InventorySchedule -- ^ 'icSchedule'
+    -> InventoryConfiguration
+inventoryConfiguration pDestination_ pIsEnabled_ pId_ pIncludedObjectVersions_ pSchedule_ =
+  InventoryConfiguration'
+  { _icOptionalFields = Nothing
+  , _icFilter = Nothing
+  , _icDestination = pDestination_
+  , _icIsEnabled = pIsEnabled_
+  , _icId = pId_
+  , _icIncludedObjectVersions = pIncludedObjectVersions_
+  , _icSchedule = pSchedule_
+  }
+
+
+-- | Contains the optional fields that are included in the inventory results.
+icOptionalFields :: Lens' InventoryConfiguration [InventoryOptionalField]
+icOptionalFields = lens _icOptionalFields (\ s a -> s{_icOptionalFields = a}) . _Default . _Coerce;
+
+-- | Specifies an inventory filter. The inventory only includes objects that meet the filter's criteria.
+icFilter :: Lens' InventoryConfiguration (Maybe InventoryFilter)
+icFilter = lens _icFilter (\ s a -> s{_icFilter = a});
+
+-- | Contains information about where to publish the inventory results.
+icDestination :: Lens' InventoryConfiguration InventoryDestination
+icDestination = lens _icDestination (\ s a -> s{_icDestination = a});
+
+-- | Specifies whether the inventory is enabled or disabled.
+icIsEnabled :: Lens' InventoryConfiguration Bool
+icIsEnabled = lens _icIsEnabled (\ s a -> s{_icIsEnabled = a});
+
+-- | The ID used to identify the inventory configuration.
+icId :: Lens' InventoryConfiguration Text
+icId = lens _icId (\ s a -> s{_icId = a});
+
+-- | Specifies which object version(s) to included in the inventory results.
+icIncludedObjectVersions :: Lens' InventoryConfiguration InventoryIncludedObjectVersions
+icIncludedObjectVersions = lens _icIncludedObjectVersions (\ s a -> s{_icIncludedObjectVersions = a});
+
+-- | Specifies the schedule for generating inventory results.
+icSchedule :: Lens' InventoryConfiguration InventorySchedule
+icSchedule = lens _icSchedule (\ s a -> s{_icSchedule = a});
+
+instance FromXML InventoryConfiguration where
+        parseXML x
+          = InventoryConfiguration' <$>
+              (x .@? "OptionalFields" .!@ mempty >>=
+                 may (parseXMLList "Field"))
+                <*> (x .@? "Filter")
+                <*> (x .@ "Destination")
+                <*> (x .@ "IsEnabled")
+                <*> (x .@ "Id")
+                <*> (x .@ "IncludedObjectVersions")
+                <*> (x .@ "Schedule")
+
+instance Hashable InventoryConfiguration where
+
+instance NFData InventoryConfiguration where
+
+instance ToXML InventoryConfiguration where
+        toXML InventoryConfiguration'{..}
+          = mconcat
+              ["OptionalFields" @=
+                 toXML (toXMLList "Field" <$> _icOptionalFields),
+               "Filter" @= _icFilter,
+               "Destination" @= _icDestination,
+               "IsEnabled" @= _icIsEnabled, "Id" @= _icId,
+               "IncludedObjectVersions" @=
+                 _icIncludedObjectVersions,
+               "Schedule" @= _icSchedule]
+
+-- | /See:/ 'inventoryDestination' smart constructor.
+newtype InventoryDestination = InventoryDestination'
+  { _idS3BucketDestination :: InventoryS3BucketDestination
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'InventoryDestination' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'idS3BucketDestination' - Contains the bucket name, file format, bucket owner (optional), and prefix (optional) where inventory results are published.
+inventoryDestination
+    :: InventoryS3BucketDestination -- ^ 'idS3BucketDestination'
+    -> InventoryDestination
+inventoryDestination pS3BucketDestination_ =
+  InventoryDestination' {_idS3BucketDestination = pS3BucketDestination_}
+
+
+-- | Contains the bucket name, file format, bucket owner (optional), and prefix (optional) where inventory results are published.
+idS3BucketDestination :: Lens' InventoryDestination InventoryS3BucketDestination
+idS3BucketDestination = lens _idS3BucketDestination (\ s a -> s{_idS3BucketDestination = a});
+
+instance FromXML InventoryDestination where
+        parseXML x
+          = InventoryDestination' <$>
+              (x .@ "S3BucketDestination")
+
+instance Hashable InventoryDestination where
+
+instance NFData InventoryDestination where
+
+instance ToXML InventoryDestination where
+        toXML InventoryDestination'{..}
+          = mconcat
+              ["S3BucketDestination" @= _idS3BucketDestination]
+
+-- | Contains the type of server-side encryption used to encrypt the inventory results.
+--
+-- /See:/ 'inventoryEncryption' smart constructor.
+data InventoryEncryption = InventoryEncryption'
+  { _ieSSES3  :: !(Maybe SSES3)
+  , _ieSSEKMS :: !(Maybe SSEKMS)
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'InventoryEncryption' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ieSSES3' - Specifies the use of SSE-S3 to encrypt delievered Inventory reports.
+--
+-- * 'ieSSEKMS' - Specifies the use of SSE-KMS to encrypt delievered Inventory reports.
+inventoryEncryption
+    :: InventoryEncryption
+inventoryEncryption =
+  InventoryEncryption' {_ieSSES3 = Nothing, _ieSSEKMS = Nothing}
+
+
+-- | Specifies the use of SSE-S3 to encrypt delievered Inventory reports.
+ieSSES3 :: Lens' InventoryEncryption (Maybe SSES3)
+ieSSES3 = lens _ieSSES3 (\ s a -> s{_ieSSES3 = a});
+
+-- | Specifies the use of SSE-KMS to encrypt delievered Inventory reports.
+ieSSEKMS :: Lens' InventoryEncryption (Maybe SSEKMS)
+ieSSEKMS = lens _ieSSEKMS (\ s a -> s{_ieSSEKMS = a});
+
+instance FromXML InventoryEncryption where
+        parseXML x
+          = InventoryEncryption' <$>
+              (x .@? "SSE-S3") <*> (x .@? "SSE-KMS")
+
+instance Hashable InventoryEncryption where
+
+instance NFData InventoryEncryption where
+
+instance ToXML InventoryEncryption where
+        toXML InventoryEncryption'{..}
+          = mconcat
+              ["SSE-S3" @= _ieSSES3, "SSE-KMS" @= _ieSSEKMS]
+
+-- | /See:/ 'inventoryFilter' smart constructor.
+newtype InventoryFilter = InventoryFilter'
+  { _ifPrefix :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'InventoryFilter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ifPrefix' - The prefix that an object must have to be included in the inventory results.
+inventoryFilter
+    :: Text -- ^ 'ifPrefix'
+    -> InventoryFilter
+inventoryFilter pPrefix_ = InventoryFilter' {_ifPrefix = pPrefix_}
+
+
+-- | The prefix that an object must have to be included in the inventory results.
+ifPrefix :: Lens' InventoryFilter Text
+ifPrefix = lens _ifPrefix (\ s a -> s{_ifPrefix = a});
+
+instance FromXML InventoryFilter where
+        parseXML x = InventoryFilter' <$> (x .@ "Prefix")
+
+instance Hashable InventoryFilter where
+
+instance NFData InventoryFilter where
+
+instance ToXML InventoryFilter where
+        toXML InventoryFilter'{..}
+          = mconcat ["Prefix" @= _ifPrefix]
+
+-- | /See:/ 'inventoryS3BucketDestination' smart constructor.
+data InventoryS3BucketDestination = InventoryS3BucketDestination'
+  { _isbdPrefix     :: !(Maybe Text)
+  , _isbdAccountId  :: !(Maybe Text)
+  , _isbdEncryption :: !(Maybe InventoryEncryption)
+  , _isbdBucket     :: !BucketName
+  , _isbdFormat     :: !InventoryFormat
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'InventoryS3BucketDestination' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'isbdPrefix' - The prefix that is prepended to all inventory results.
+--
+-- * 'isbdAccountId' - The ID of the account that owns the destination bucket.
+--
+-- * 'isbdEncryption' - Contains the type of server-side encryption used to encrypt the inventory results.
+--
+-- * 'isbdBucket' - The Amazon resource name (ARN) of the bucket where inventory results will be published.
+--
+-- * 'isbdFormat' - Specifies the output format of the inventory results.
+inventoryS3BucketDestination
+    :: BucketName -- ^ 'isbdBucket'
+    -> InventoryFormat -- ^ 'isbdFormat'
+    -> InventoryS3BucketDestination
+inventoryS3BucketDestination pBucket_ pFormat_ =
+  InventoryS3BucketDestination'
+  { _isbdPrefix = Nothing
+  , _isbdAccountId = Nothing
+  , _isbdEncryption = Nothing
+  , _isbdBucket = pBucket_
+  , _isbdFormat = pFormat_
+  }
+
+
+-- | The prefix that is prepended to all inventory results.
+isbdPrefix :: Lens' InventoryS3BucketDestination (Maybe Text)
+isbdPrefix = lens _isbdPrefix (\ s a -> s{_isbdPrefix = a});
+
+-- | The ID of the account that owns the destination bucket.
+isbdAccountId :: Lens' InventoryS3BucketDestination (Maybe Text)
+isbdAccountId = lens _isbdAccountId (\ s a -> s{_isbdAccountId = a});
+
+-- | Contains the type of server-side encryption used to encrypt the inventory results.
+isbdEncryption :: Lens' InventoryS3BucketDestination (Maybe InventoryEncryption)
+isbdEncryption = lens _isbdEncryption (\ s a -> s{_isbdEncryption = a});
+
+-- | The Amazon resource name (ARN) of the bucket where inventory results will be published.
+isbdBucket :: Lens' InventoryS3BucketDestination BucketName
+isbdBucket = lens _isbdBucket (\ s a -> s{_isbdBucket = a});
+
+-- | Specifies the output format of the inventory results.
+isbdFormat :: Lens' InventoryS3BucketDestination InventoryFormat
+isbdFormat = lens _isbdFormat (\ s a -> s{_isbdFormat = a});
+
+instance FromXML InventoryS3BucketDestination where
+        parseXML x
+          = InventoryS3BucketDestination' <$>
+              (x .@? "Prefix") <*> (x .@? "AccountId") <*>
+                (x .@? "Encryption")
+                <*> (x .@ "Bucket")
+                <*> (x .@ "Format")
+
+instance Hashable InventoryS3BucketDestination where
+
+instance NFData InventoryS3BucketDestination where
+
+instance ToXML InventoryS3BucketDestination where
+        toXML InventoryS3BucketDestination'{..}
+          = mconcat
+              ["Prefix" @= _isbdPrefix,
+               "AccountId" @= _isbdAccountId,
+               "Encryption" @= _isbdEncryption,
+               "Bucket" @= _isbdBucket, "Format" @= _isbdFormat]
+
+-- | /See:/ 'inventorySchedule' smart constructor.
+newtype InventorySchedule = InventorySchedule'
+  { _isFrequency :: InventoryFrequency
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'InventorySchedule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'isFrequency' - Specifies how frequently inventory results are produced.
+inventorySchedule
+    :: InventoryFrequency -- ^ 'isFrequency'
+    -> InventorySchedule
+inventorySchedule pFrequency_ = InventorySchedule' {_isFrequency = pFrequency_}
+
+
+-- | Specifies how frequently inventory results are produced.
+isFrequency :: Lens' InventorySchedule InventoryFrequency
+isFrequency = lens _isFrequency (\ s a -> s{_isFrequency = a});
+
+instance FromXML InventorySchedule where
+        parseXML x
+          = InventorySchedule' <$> (x .@ "Frequency")
+
+instance Hashable InventorySchedule where
+
+instance NFData InventorySchedule where
+
+instance ToXML InventorySchedule where
+        toXML InventorySchedule'{..}
+          = mconcat ["Frequency" @= _isFrequency]
+
+-- | Container for specifying the AWS Lambda notification configuration.
+--
+-- /See:/ 'lambdaFunctionConfiguration' smart constructor.
+data LambdaFunctionConfiguration = LambdaFunctionConfiguration'
+  { _lfcId                :: !(Maybe Text)
+  , _lfcFilter            :: !(Maybe NotificationConfigurationFilter)
+  , _lfcLambdaFunctionARN :: !Text
+  , _lfcEvents            :: ![Event]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'LambdaFunctionConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lfcId' - Undocumented member.
+--
+-- * 'lfcFilter' - Undocumented member.
+--
+-- * 'lfcLambdaFunctionARN' - Lambda cloud function ARN that Amazon S3 can invoke when it detects events of the specified type.
+--
+-- * 'lfcEvents' - Undocumented member.
+lambdaFunctionConfiguration
+    :: Text -- ^ 'lfcLambdaFunctionARN'
+    -> LambdaFunctionConfiguration
+lambdaFunctionConfiguration pLambdaFunctionARN_ =
+  LambdaFunctionConfiguration'
+  { _lfcId = Nothing
+  , _lfcFilter = Nothing
+  , _lfcLambdaFunctionARN = pLambdaFunctionARN_
+  , _lfcEvents = mempty
+  }
+
+
+-- | Undocumented member.
+lfcId :: Lens' LambdaFunctionConfiguration (Maybe Text)
+lfcId = lens _lfcId (\ s a -> s{_lfcId = a});
+
+-- | Undocumented member.
+lfcFilter :: Lens' LambdaFunctionConfiguration (Maybe NotificationConfigurationFilter)
+lfcFilter = lens _lfcFilter (\ s a -> s{_lfcFilter = a});
+
+-- | Lambda cloud function ARN that Amazon S3 can invoke when it detects events of the specified type.
+lfcLambdaFunctionARN :: Lens' LambdaFunctionConfiguration Text
+lfcLambdaFunctionARN = lens _lfcLambdaFunctionARN (\ s a -> s{_lfcLambdaFunctionARN = a});
+
+-- | Undocumented member.
+lfcEvents :: Lens' LambdaFunctionConfiguration [Event]
+lfcEvents = lens _lfcEvents (\ s a -> s{_lfcEvents = a}) . _Coerce;
+
+instance FromXML LambdaFunctionConfiguration where
+        parseXML x
+          = LambdaFunctionConfiguration' <$>
+              (x .@? "Id") <*> (x .@? "Filter") <*>
+                (x .@ "CloudFunction")
+                <*> (parseXMLList "Event" x)
+
+instance Hashable LambdaFunctionConfiguration where
+
+instance NFData LambdaFunctionConfiguration where
+
+instance ToXML LambdaFunctionConfiguration where
+        toXML LambdaFunctionConfiguration'{..}
+          = mconcat
+              ["Id" @= _lfcId, "Filter" @= _lfcFilter,
+               "CloudFunction" @= _lfcLambdaFunctionARN,
+               toXMLList "Event" _lfcEvents]
+
+-- | /See:/ 'lifecycleExpiration' smart constructor.
+data LifecycleExpiration = LifecycleExpiration'
+  { _leDays                      :: !(Maybe Int)
+  , _leDate                      :: !(Maybe RFC822)
+  , _leExpiredObjectDeleteMarker :: !(Maybe Bool)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'LifecycleExpiration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'leDays' - Indicates the lifetime, in days, of the objects that are subject to the rule. The value must be a non-zero positive integer.
+--
+-- * 'leDate' - Indicates at what date the object is to be moved or deleted. Should be in GMT ISO 8601 Format.
+--
+-- * 'leExpiredObjectDeleteMarker' - Indicates whether Amazon S3 will remove a delete marker with no noncurrent versions. If set to true, the delete marker will be expired; if set to false the policy takes no action. This cannot be specified with Days or Date in a Lifecycle Expiration Policy.
+lifecycleExpiration
+    :: LifecycleExpiration
+lifecycleExpiration =
+  LifecycleExpiration'
+  {_leDays = Nothing, _leDate = Nothing, _leExpiredObjectDeleteMarker = Nothing}
+
+
+-- | Indicates the lifetime, in days, of the objects that are subject to the rule. The value must be a non-zero positive integer.
+leDays :: Lens' LifecycleExpiration (Maybe Int)
+leDays = lens _leDays (\ s a -> s{_leDays = a});
+
+-- | Indicates at what date the object is to be moved or deleted. Should be in GMT ISO 8601 Format.
+leDate :: Lens' LifecycleExpiration (Maybe UTCTime)
+leDate = lens _leDate (\ s a -> s{_leDate = a}) . mapping _Time;
+
+-- | Indicates whether Amazon S3 will remove a delete marker with no noncurrent versions. If set to true, the delete marker will be expired; if set to false the policy takes no action. This cannot be specified with Days or Date in a Lifecycle Expiration Policy.
+leExpiredObjectDeleteMarker :: Lens' LifecycleExpiration (Maybe Bool)
+leExpiredObjectDeleteMarker = lens _leExpiredObjectDeleteMarker (\ s a -> s{_leExpiredObjectDeleteMarker = a});
+
+instance FromXML LifecycleExpiration where
+        parseXML x
+          = LifecycleExpiration' <$>
+              (x .@? "Days") <*> (x .@? "Date") <*>
+                (x .@? "ExpiredObjectDeleteMarker")
+
+instance Hashable LifecycleExpiration where
+
+instance NFData LifecycleExpiration where
+
+instance ToXML LifecycleExpiration where
+        toXML LifecycleExpiration'{..}
+          = mconcat
+              ["Days" @= _leDays, "Date" @= _leDate,
+               "ExpiredObjectDeleteMarker" @=
+                 _leExpiredObjectDeleteMarker]
+
+-- | /See:/ 'lifecycleRule' smart constructor.
+data LifecycleRule = LifecycleRule'
+  { _lrTransitions                    :: !(Maybe [Transition])
+  , _lrNoncurrentVersionExpiration    :: !(Maybe NoncurrentVersionExpiration)
+  , _lrPrefix                         :: !(Maybe Text)
+  , _lrNoncurrentVersionTransitions   :: !(Maybe [NoncurrentVersionTransition])
+  , _lrExpiration                     :: !(Maybe LifecycleExpiration)
+  , _lrId                             :: !(Maybe Text)
+  , _lrFilter                         :: !(Maybe LifecycleRuleFilter)
+  , _lrAbortIncompleteMultipartUpload :: !(Maybe AbortIncompleteMultipartUpload)
+  , _lrStatus                         :: !ExpirationStatus
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'LifecycleRule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lrTransitions' - Undocumented member.
+--
+-- * 'lrNoncurrentVersionExpiration' - Undocumented member.
+--
+-- * 'lrPrefix' - Prefix identifying one or more objects to which the rule applies. This is deprecated; use Filter instead.
+--
+-- * 'lrNoncurrentVersionTransitions' - Undocumented member.
+--
+-- * 'lrExpiration' - Undocumented member.
+--
+-- * 'lrId' - Unique identifier for the rule. The value cannot be longer than 255 characters.
+--
+-- * 'lrFilter' - Undocumented member.
+--
+-- * 'lrAbortIncompleteMultipartUpload' - Undocumented member.
+--
+-- * 'lrStatus' - If 'Enabled', the rule is currently being applied. If 'Disabled', the rule is not currently being applied.
+lifecycleRule
+    :: ExpirationStatus -- ^ 'lrStatus'
+    -> LifecycleRule
+lifecycleRule pStatus_ =
+  LifecycleRule'
+  { _lrTransitions = Nothing
+  , _lrNoncurrentVersionExpiration = Nothing
+  , _lrPrefix = Nothing
+  , _lrNoncurrentVersionTransitions = Nothing
+  , _lrExpiration = Nothing
+  , _lrId = Nothing
+  , _lrFilter = Nothing
+  , _lrAbortIncompleteMultipartUpload = Nothing
+  , _lrStatus = pStatus_
+  }
+
+
+-- | Undocumented member.
+lrTransitions :: Lens' LifecycleRule [Transition]
+lrTransitions = lens _lrTransitions (\ s a -> s{_lrTransitions = a}) . _Default . _Coerce;
+
+-- | Undocumented member.
+lrNoncurrentVersionExpiration :: Lens' LifecycleRule (Maybe NoncurrentVersionExpiration)
+lrNoncurrentVersionExpiration = lens _lrNoncurrentVersionExpiration (\ s a -> s{_lrNoncurrentVersionExpiration = a});
+
+-- | Prefix identifying one or more objects to which the rule applies. This is deprecated; use Filter instead.
+lrPrefix :: Lens' LifecycleRule (Maybe Text)
+lrPrefix = lens _lrPrefix (\ s a -> s{_lrPrefix = a});
+
+-- | Undocumented member.
+lrNoncurrentVersionTransitions :: Lens' LifecycleRule [NoncurrentVersionTransition]
+lrNoncurrentVersionTransitions = lens _lrNoncurrentVersionTransitions (\ s a -> s{_lrNoncurrentVersionTransitions = a}) . _Default . _Coerce;
+
+-- | Undocumented member.
+lrExpiration :: Lens' LifecycleRule (Maybe LifecycleExpiration)
+lrExpiration = lens _lrExpiration (\ s a -> s{_lrExpiration = a});
+
+-- | Unique identifier for the rule. The value cannot be longer than 255 characters.
+lrId :: Lens' LifecycleRule (Maybe Text)
+lrId = lens _lrId (\ s a -> s{_lrId = a});
+
+-- | Undocumented member.
+lrFilter :: Lens' LifecycleRule (Maybe LifecycleRuleFilter)
+lrFilter = lens _lrFilter (\ s a -> s{_lrFilter = a});
+
+-- | Undocumented member.
+lrAbortIncompleteMultipartUpload :: Lens' LifecycleRule (Maybe AbortIncompleteMultipartUpload)
+lrAbortIncompleteMultipartUpload = lens _lrAbortIncompleteMultipartUpload (\ s a -> s{_lrAbortIncompleteMultipartUpload = a});
+
+-- | If 'Enabled', the rule is currently being applied. If 'Disabled', the rule is not currently being applied.
+lrStatus :: Lens' LifecycleRule ExpirationStatus
+lrStatus = lens _lrStatus (\ s a -> s{_lrStatus = a});
+
+instance FromXML LifecycleRule where
+        parseXML x
+          = LifecycleRule' <$>
+              (may (parseXMLList "Transition") x) <*>
+                (x .@? "NoncurrentVersionExpiration")
+                <*> (x .@? "Prefix")
+                <*>
+                (may (parseXMLList "NoncurrentVersionTransition") x)
+                <*> (x .@? "Expiration")
+                <*> (x .@? "ID")
+                <*> (x .@? "Filter")
+                <*> (x .@? "AbortIncompleteMultipartUpload")
+                <*> (x .@ "Status")
+
+instance Hashable LifecycleRule where
+
+instance NFData LifecycleRule where
+
+instance ToXML LifecycleRule where
+        toXML LifecycleRule'{..}
+          = mconcat
+              [toXML (toXMLList "Transition" <$> _lrTransitions),
+               "NoncurrentVersionExpiration" @=
+                 _lrNoncurrentVersionExpiration,
+               "Prefix" @= _lrPrefix,
+               toXML
+                 (toXMLList "NoncurrentVersionTransition" <$>
+                    _lrNoncurrentVersionTransitions),
+               "Expiration" @= _lrExpiration, "ID" @= _lrId,
+               "Filter" @= _lrFilter,
+               "AbortIncompleteMultipartUpload" @=
+                 _lrAbortIncompleteMultipartUpload,
+               "Status" @= _lrStatus]
+
+-- | This is used in a Lifecycle Rule Filter to apply a logical AND to two or more predicates. The Lifecycle Rule will apply to any object matching all of the predicates configured inside the And operator.
+--
+-- /See:/ 'lifecycleRuleAndOperator' smart constructor.
+data LifecycleRuleAndOperator = LifecycleRuleAndOperator'
+  { _lraoPrefix :: !(Maybe Text)
+  , _lraoTags   :: !(Maybe [Tag])
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'LifecycleRuleAndOperator' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lraoPrefix' - Undocumented member.
+--
+-- * 'lraoTags' - All of these tags must exist in the object's tag set in order for the rule to apply.
+lifecycleRuleAndOperator
+    :: LifecycleRuleAndOperator
+lifecycleRuleAndOperator =
+  LifecycleRuleAndOperator' {_lraoPrefix = Nothing, _lraoTags = Nothing}
+
+
+-- | Undocumented member.
+lraoPrefix :: Lens' LifecycleRuleAndOperator (Maybe Text)
+lraoPrefix = lens _lraoPrefix (\ s a -> s{_lraoPrefix = a});
+
+-- | All of these tags must exist in the object's tag set in order for the rule to apply.
+lraoTags :: Lens' LifecycleRuleAndOperator [Tag]
+lraoTags = lens _lraoTags (\ s a -> s{_lraoTags = a}) . _Default . _Coerce;
+
+instance FromXML LifecycleRuleAndOperator where
+        parseXML x
+          = LifecycleRuleAndOperator' <$>
+              (x .@? "Prefix") <*>
+                (x .@? "Tag" .!@ mempty >>= may (parseXMLList "Tag"))
+
+instance Hashable LifecycleRuleAndOperator where
+
+instance NFData LifecycleRuleAndOperator where
+
+instance ToXML LifecycleRuleAndOperator where
+        toXML LifecycleRuleAndOperator'{..}
+          = mconcat
+              ["Prefix" @= _lraoPrefix,
+               "Tag" @= toXML (toXMLList "Tag" <$> _lraoTags)]
+
+-- | The Filter is used to identify objects that a Lifecycle Rule applies to. A Filter must have exactly one of Prefix, Tag, or And specified.
+--
+-- /See:/ 'lifecycleRuleFilter' smart constructor.
+data LifecycleRuleFilter = LifecycleRuleFilter'
+  { _lrfTag    :: !(Maybe Tag)
+  , _lrfPrefix :: !(Maybe Text)
+  , _lrfAnd    :: !(Maybe LifecycleRuleAndOperator)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'LifecycleRuleFilter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lrfTag' - This tag must exist in the object's tag set in order for the rule to apply.
+--
+-- * 'lrfPrefix' - Prefix identifying one or more objects to which the rule applies.
+--
+-- * 'lrfAnd' - Undocumented member.
+lifecycleRuleFilter
+    :: LifecycleRuleFilter
+lifecycleRuleFilter =
+  LifecycleRuleFilter'
+  {_lrfTag = Nothing, _lrfPrefix = Nothing, _lrfAnd = Nothing}
+
+
+-- | This tag must exist in the object's tag set in order for the rule to apply.
+lrfTag :: Lens' LifecycleRuleFilter (Maybe Tag)
+lrfTag = lens _lrfTag (\ s a -> s{_lrfTag = a});
+
+-- | Prefix identifying one or more objects to which the rule applies.
+lrfPrefix :: Lens' LifecycleRuleFilter (Maybe Text)
+lrfPrefix = lens _lrfPrefix (\ s a -> s{_lrfPrefix = a});
+
+-- | Undocumented member.
+lrfAnd :: Lens' LifecycleRuleFilter (Maybe LifecycleRuleAndOperator)
+lrfAnd = lens _lrfAnd (\ s a -> s{_lrfAnd = a});
+
+instance FromXML LifecycleRuleFilter where
+        parseXML x
+          = LifecycleRuleFilter' <$>
+              (x .@? "Tag") <*> (x .@? "Prefix") <*> (x .@? "And")
+
+instance Hashable LifecycleRuleFilter where
+
+instance NFData LifecycleRuleFilter where
+
+instance ToXML LifecycleRuleFilter where
+        toXML LifecycleRuleFilter'{..}
+          = mconcat
+              ["Tag" @= _lrfTag, "Prefix" @= _lrfPrefix,
+               "And" @= _lrfAnd]
+
+-- | /See:/ 'loggingEnabled' smart constructor.
+data LoggingEnabled = LoggingEnabled'
+  { _leTargetBucket :: !(Maybe Text)
+  , _leTargetGrants :: !(Maybe [TargetGrant])
+  , _leTargetPrefix :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'LoggingEnabled' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'leTargetBucket' - Specifies the bucket where you want Amazon S3 to store server access logs. You can have your logs delivered to any bucket that you own, including the same bucket that is being logged. You can also configure multiple buckets to deliver their logs to the same target bucket. In this case you should choose a different TargetPrefix for each source bucket so that the delivered log files can be distinguished by key.
+--
+-- * 'leTargetGrants' - Undocumented member.
+--
+-- * 'leTargetPrefix' - This element lets you specify a prefix for the keys that the log files will be stored under.
+loggingEnabled
+    :: LoggingEnabled
+loggingEnabled =
+  LoggingEnabled'
+  { _leTargetBucket = Nothing
+  , _leTargetGrants = Nothing
+  , _leTargetPrefix = Nothing
+  }
+
+
+-- | Specifies the bucket where you want Amazon S3 to store server access logs. You can have your logs delivered to any bucket that you own, including the same bucket that is being logged. You can also configure multiple buckets to deliver their logs to the same target bucket. In this case you should choose a different TargetPrefix for each source bucket so that the delivered log files can be distinguished by key.
+leTargetBucket :: Lens' LoggingEnabled (Maybe Text)
+leTargetBucket = lens _leTargetBucket (\ s a -> s{_leTargetBucket = a});
+
+-- | Undocumented member.
+leTargetGrants :: Lens' LoggingEnabled [TargetGrant]
+leTargetGrants = lens _leTargetGrants (\ s a -> s{_leTargetGrants = a}) . _Default . _Coerce;
+
+-- | This element lets you specify a prefix for the keys that the log files will be stored under.
+leTargetPrefix :: Lens' LoggingEnabled (Maybe Text)
+leTargetPrefix = lens _leTargetPrefix (\ s a -> s{_leTargetPrefix = a});
+
+instance FromXML LoggingEnabled where
+        parseXML x
+          = LoggingEnabled' <$>
+              (x .@? "TargetBucket") <*>
+                (x .@? "TargetGrants" .!@ mempty >>=
+                   may (parseXMLList "Grant"))
+                <*> (x .@? "TargetPrefix")
+
+instance Hashable LoggingEnabled where
+
+instance NFData LoggingEnabled where
+
+instance ToXML LoggingEnabled where
+        toXML LoggingEnabled'{..}
+          = mconcat
+              ["TargetBucket" @= _leTargetBucket,
+               "TargetGrants" @=
+                 toXML (toXMLList "Grant" <$> _leTargetGrants),
+               "TargetPrefix" @= _leTargetPrefix]
+
+-- | /See:/ 'metricsAndOperator' smart constructor.
+data MetricsAndOperator = MetricsAndOperator'
+  { _maoPrefix :: !(Maybe Text)
+  , _maoTags   :: !(Maybe [Tag])
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'MetricsAndOperator' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'maoPrefix' - The prefix used when evaluating an AND predicate.
+--
+-- * 'maoTags' - The list of tags used when evaluating an AND predicate.
+metricsAndOperator
+    :: MetricsAndOperator
+metricsAndOperator =
+  MetricsAndOperator' {_maoPrefix = Nothing, _maoTags = Nothing}
+
+
+-- | The prefix used when evaluating an AND predicate.
+maoPrefix :: Lens' MetricsAndOperator (Maybe Text)
+maoPrefix = lens _maoPrefix (\ s a -> s{_maoPrefix = a});
+
+-- | The list of tags used when evaluating an AND predicate.
+maoTags :: Lens' MetricsAndOperator [Tag]
+maoTags = lens _maoTags (\ s a -> s{_maoTags = a}) . _Default . _Coerce;
+
+instance FromXML MetricsAndOperator where
+        parseXML x
+          = MetricsAndOperator' <$>
+              (x .@? "Prefix") <*>
+                (x .@? "Tag" .!@ mempty >>= may (parseXMLList "Tag"))
+
+instance Hashable MetricsAndOperator where
+
+instance NFData MetricsAndOperator where
+
+instance ToXML MetricsAndOperator where
+        toXML MetricsAndOperator'{..}
+          = mconcat
+              ["Prefix" @= _maoPrefix,
+               "Tag" @= toXML (toXMLList "Tag" <$> _maoTags)]
+
+-- | /See:/ 'metricsConfiguration' smart constructor.
+data MetricsConfiguration = MetricsConfiguration'
+  { _mcFilter :: !(Maybe MetricsFilter)
+  , _mcId     :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'MetricsConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mcFilter' - Specifies a metrics configuration filter. The metrics configuration will only include objects that meet the filter's criteria. A filter must be a prefix, a tag, or a conjunction (MetricsAndOperator).
+--
+-- * 'mcId' - The ID used to identify the metrics configuration.
+metricsConfiguration
+    :: Text -- ^ 'mcId'
+    -> MetricsConfiguration
+metricsConfiguration pId_ =
+  MetricsConfiguration' {_mcFilter = Nothing, _mcId = pId_}
+
+
+-- | Specifies a metrics configuration filter. The metrics configuration will only include objects that meet the filter's criteria. A filter must be a prefix, a tag, or a conjunction (MetricsAndOperator).
+mcFilter :: Lens' MetricsConfiguration (Maybe MetricsFilter)
+mcFilter = lens _mcFilter (\ s a -> s{_mcFilter = a});
+
+-- | The ID used to identify the metrics configuration.
+mcId :: Lens' MetricsConfiguration Text
+mcId = lens _mcId (\ s a -> s{_mcId = a});
+
+instance FromXML MetricsConfiguration where
+        parseXML x
+          = MetricsConfiguration' <$>
+              (x .@? "Filter") <*> (x .@ "Id")
+
+instance Hashable MetricsConfiguration where
+
+instance NFData MetricsConfiguration where
+
+instance ToXML MetricsConfiguration where
+        toXML MetricsConfiguration'{..}
+          = mconcat ["Filter" @= _mcFilter, "Id" @= _mcId]
+
+-- | /See:/ 'metricsFilter' smart constructor.
+data MetricsFilter = MetricsFilter'
+  { _mfTag    :: !(Maybe Tag)
+  , _mfPrefix :: !(Maybe Text)
+  , _mfAnd    :: !(Maybe MetricsAndOperator)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'MetricsFilter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mfTag' - The tag used when evaluating a metrics filter.
+--
+-- * 'mfPrefix' - The prefix used when evaluating a metrics filter.
+--
+-- * 'mfAnd' - A conjunction (logical AND) of predicates, which is used in evaluating a metrics filter. The operator must have at least two predicates, and an object must match all of the predicates in order for the filter to apply.
+metricsFilter
+    :: MetricsFilter
+metricsFilter =
+  MetricsFilter' {_mfTag = Nothing, _mfPrefix = Nothing, _mfAnd = Nothing}
+
+
+-- | The tag used when evaluating a metrics filter.
+mfTag :: Lens' MetricsFilter (Maybe Tag)
+mfTag = lens _mfTag (\ s a -> s{_mfTag = a});
+
+-- | The prefix used when evaluating a metrics filter.
+mfPrefix :: Lens' MetricsFilter (Maybe Text)
+mfPrefix = lens _mfPrefix (\ s a -> s{_mfPrefix = a});
+
+-- | A conjunction (logical AND) of predicates, which is used in evaluating a metrics filter. The operator must have at least two predicates, and an object must match all of the predicates in order for the filter to apply.
+mfAnd :: Lens' MetricsFilter (Maybe MetricsAndOperator)
+mfAnd = lens _mfAnd (\ s a -> s{_mfAnd = a});
+
+instance FromXML MetricsFilter where
+        parseXML x
+          = MetricsFilter' <$>
+              (x .@? "Tag") <*> (x .@? "Prefix") <*> (x .@? "And")
+
+instance Hashable MetricsFilter where
+
+instance NFData MetricsFilter where
+
+instance ToXML MetricsFilter where
+        toXML MetricsFilter'{..}
+          = mconcat
+              ["Tag" @= _mfTag, "Prefix" @= _mfPrefix,
+               "And" @= _mfAnd]
+
+-- | /See:/ 'multipartUpload' smart constructor.
+data MultipartUpload = MultipartUpload'
+  { _muInitiated    :: !(Maybe RFC822)
+  , _muInitiator    :: !(Maybe Initiator)
+  , _muOwner        :: !(Maybe Owner)
+  , _muKey          :: !(Maybe ObjectKey)
+  , _muStorageClass :: !(Maybe StorageClass)
+  , _muUploadId     :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'MultipartUpload' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'muInitiated' - Date and time at which the multipart upload was initiated.
+--
+-- * 'muInitiator' - Identifies who initiated the multipart upload.
+--
+-- * 'muOwner' - Undocumented member.
+--
+-- * 'muKey' - Key of the object for which the multipart upload was initiated.
+--
+-- * 'muStorageClass' - The class of storage used to store the object.
+--
+-- * 'muUploadId' - Upload ID that identifies the multipart upload.
+multipartUpload
+    :: MultipartUpload
+multipartUpload =
+  MultipartUpload'
+  { _muInitiated = Nothing
+  , _muInitiator = Nothing
+  , _muOwner = Nothing
+  , _muKey = Nothing
+  , _muStorageClass = Nothing
+  , _muUploadId = Nothing
+  }
+
+
+-- | Date and time at which the multipart upload was initiated.
+muInitiated :: Lens' MultipartUpload (Maybe UTCTime)
+muInitiated = lens _muInitiated (\ s a -> s{_muInitiated = a}) . mapping _Time;
+
+-- | Identifies who initiated the multipart upload.
+muInitiator :: Lens' MultipartUpload (Maybe Initiator)
+muInitiator = lens _muInitiator (\ s a -> s{_muInitiator = a});
+
+-- | Undocumented member.
+muOwner :: Lens' MultipartUpload (Maybe Owner)
+muOwner = lens _muOwner (\ s a -> s{_muOwner = a});
+
+-- | Key of the object for which the multipart upload was initiated.
+muKey :: Lens' MultipartUpload (Maybe ObjectKey)
+muKey = lens _muKey (\ s a -> s{_muKey = a});
+
+-- | The class of storage used to store the object.
+muStorageClass :: Lens' MultipartUpload (Maybe StorageClass)
+muStorageClass = lens _muStorageClass (\ s a -> s{_muStorageClass = a});
+
+-- | Upload ID that identifies the multipart upload.
+muUploadId :: Lens' MultipartUpload (Maybe Text)
+muUploadId = lens _muUploadId (\ s a -> s{_muUploadId = a});
+
+instance FromXML MultipartUpload where
+        parseXML x
+          = MultipartUpload' <$>
+              (x .@? "Initiated") <*> (x .@? "Initiator") <*>
+                (x .@? "Owner")
+                <*> (x .@? "Key")
+                <*> (x .@? "StorageClass")
+                <*> (x .@? "UploadId")
+
+instance Hashable MultipartUpload where
+
+instance NFData MultipartUpload where
+
+-- | Specifies when noncurrent object versions expire. Upon expiration, Amazon S3 permanently deletes the noncurrent object versions. You set this lifecycle configuration action on a bucket that has versioning enabled (or suspended) to request that Amazon S3 delete noncurrent object versions at a specific period in the object's lifetime.
+--
+-- /See:/ 'noncurrentVersionExpiration' smart constructor.
+newtype NoncurrentVersionExpiration = NoncurrentVersionExpiration'
+  { _nveNoncurrentDays :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'NoncurrentVersionExpiration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'nveNoncurrentDays' - <http://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html How Amazon S3 Calculates When an Object Became Noncurrent>
+noncurrentVersionExpiration
+    :: Int -- ^ 'nveNoncurrentDays'
+    -> NoncurrentVersionExpiration
+noncurrentVersionExpiration pNoncurrentDays_ =
+  NoncurrentVersionExpiration' {_nveNoncurrentDays = pNoncurrentDays_}
+
+
+-- | <http://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html How Amazon S3 Calculates When an Object Became Noncurrent>
+nveNoncurrentDays :: Lens' NoncurrentVersionExpiration Int
+nveNoncurrentDays = lens _nveNoncurrentDays (\ s a -> s{_nveNoncurrentDays = a});
+
+instance FromXML NoncurrentVersionExpiration where
+        parseXML x
+          = NoncurrentVersionExpiration' <$>
+              (x .@ "NoncurrentDays")
+
+instance Hashable NoncurrentVersionExpiration where
+
+instance NFData NoncurrentVersionExpiration where
+
+instance ToXML NoncurrentVersionExpiration where
+        toXML NoncurrentVersionExpiration'{..}
+          = mconcat ["NoncurrentDays" @= _nveNoncurrentDays]
+
+-- | Container for the transition rule that describes when noncurrent objects transition to the STANDARD_IA or GLACIER storage class. If your bucket is versioning-enabled (or versioning is suspended), you can set this action to request that Amazon S3 transition noncurrent object versions to the STANDARD_IA or GLACIER storage class at a specific period in the object's lifetime.
+--
+-- /See:/ 'noncurrentVersionTransition' smart constructor.
+data NoncurrentVersionTransition = NoncurrentVersionTransition'
+  { _nvtNoncurrentDays :: !Int
+  , _nvtStorageClass   :: !TransitionStorageClass
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'NoncurrentVersionTransition' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'nvtNoncurrentDays' - <http://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html How Amazon S3 Calculates When an Object Became Noncurrent>
+--
+-- * 'nvtStorageClass' - The class of storage used to store the object.
+noncurrentVersionTransition
+    :: Int -- ^ 'nvtNoncurrentDays'
+    -> TransitionStorageClass -- ^ 'nvtStorageClass'
+    -> NoncurrentVersionTransition
+noncurrentVersionTransition pNoncurrentDays_ pStorageClass_ =
+  NoncurrentVersionTransition'
+  {_nvtNoncurrentDays = pNoncurrentDays_, _nvtStorageClass = pStorageClass_}
+
+
+-- | <http://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html How Amazon S3 Calculates When an Object Became Noncurrent>
+nvtNoncurrentDays :: Lens' NoncurrentVersionTransition Int
+nvtNoncurrentDays = lens _nvtNoncurrentDays (\ s a -> s{_nvtNoncurrentDays = a});
+
+-- | The class of storage used to store the object.
+nvtStorageClass :: Lens' NoncurrentVersionTransition TransitionStorageClass
+nvtStorageClass = lens _nvtStorageClass (\ s a -> s{_nvtStorageClass = a});
+
+instance FromXML NoncurrentVersionTransition where
+        parseXML x
+          = NoncurrentVersionTransition' <$>
+              (x .@ "NoncurrentDays") <*> (x .@ "StorageClass")
+
+instance Hashable NoncurrentVersionTransition where
+
+instance NFData NoncurrentVersionTransition where
+
+instance ToXML NoncurrentVersionTransition where
+        toXML NoncurrentVersionTransition'{..}
+          = mconcat
+              ["NoncurrentDays" @= _nvtNoncurrentDays,
+               "StorageClass" @= _nvtStorageClass]
+
+-- | Container for specifying the notification configuration of the bucket. If this element is empty, notifications are turned off on the bucket.
+--
+-- /See:/ 'notificationConfiguration' smart constructor.
+data NotificationConfiguration = NotificationConfiguration'
+  { _ncQueueConfigurations          :: !(Maybe [QueueConfiguration])
+  , _ncTopicConfigurations          :: !(Maybe [TopicConfiguration])
+  , _ncLambdaFunctionConfigurations :: !(Maybe [LambdaFunctionConfiguration])
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'NotificationConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ncQueueConfigurations' - Undocumented member.
+--
+-- * 'ncTopicConfigurations' - Undocumented member.
+--
+-- * 'ncLambdaFunctionConfigurations' - Undocumented member.
+notificationConfiguration
+    :: NotificationConfiguration
+notificationConfiguration =
+  NotificationConfiguration'
+  { _ncQueueConfigurations = Nothing
+  , _ncTopicConfigurations = Nothing
+  , _ncLambdaFunctionConfigurations = Nothing
+  }
+
+
+-- | Undocumented member.
+ncQueueConfigurations :: Lens' NotificationConfiguration [QueueConfiguration]
+ncQueueConfigurations = lens _ncQueueConfigurations (\ s a -> s{_ncQueueConfigurations = a}) . _Default . _Coerce;
+
+-- | Undocumented member.
+ncTopicConfigurations :: Lens' NotificationConfiguration [TopicConfiguration]
+ncTopicConfigurations = lens _ncTopicConfigurations (\ s a -> s{_ncTopicConfigurations = a}) . _Default . _Coerce;
+
+-- | Undocumented member.
+ncLambdaFunctionConfigurations :: Lens' NotificationConfiguration [LambdaFunctionConfiguration]
+ncLambdaFunctionConfigurations = lens _ncLambdaFunctionConfigurations (\ s a -> s{_ncLambdaFunctionConfigurations = a}) . _Default . _Coerce;
+
+instance FromXML NotificationConfiguration where
+        parseXML x
+          = NotificationConfiguration' <$>
+              (may (parseXMLList "QueueConfiguration") x) <*>
+                (may (parseXMLList "TopicConfiguration") x)
+                <*>
+                (may (parseXMLList "CloudFunctionConfiguration") x)
+
+instance Hashable NotificationConfiguration where
+
+instance NFData NotificationConfiguration where
+
+instance ToXML NotificationConfiguration where
+        toXML NotificationConfiguration'{..}
+          = mconcat
+              [toXML
+                 (toXMLList "QueueConfiguration" <$>
+                    _ncQueueConfigurations),
+               toXML
+                 (toXMLList "TopicConfiguration" <$>
+                    _ncTopicConfigurations),
+               toXML
+                 (toXMLList "CloudFunctionConfiguration" <$>
+                    _ncLambdaFunctionConfigurations)]
+
+-- | <http://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html Configuring Event Notifications>
+--
+-- /See:/ 'notificationConfigurationFilter' smart constructor.
+newtype NotificationConfigurationFilter = NotificationConfigurationFilter'
+  { _ncfKey :: Maybe S3KeyFilter
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'NotificationConfigurationFilter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ncfKey' - Undocumented member.
+notificationConfigurationFilter
+    :: NotificationConfigurationFilter
+notificationConfigurationFilter =
+  NotificationConfigurationFilter' {_ncfKey = Nothing}
+
+
+-- | Undocumented member.
+ncfKey :: Lens' NotificationConfigurationFilter (Maybe S3KeyFilter)
+ncfKey = lens _ncfKey (\ s a -> s{_ncfKey = a});
+
+instance FromXML NotificationConfigurationFilter
+         where
+        parseXML x
+          = NotificationConfigurationFilter' <$>
+              (x .@? "S3Key")
+
+instance Hashable NotificationConfigurationFilter
+         where
+
+instance NFData NotificationConfigurationFilter where
+
+instance ToXML NotificationConfigurationFilter where
+        toXML NotificationConfigurationFilter'{..}
+          = mconcat ["S3Key" @= _ncfKey]
+
+-- | /See:/ 'object'' smart constructor.
+data Object = Object'
+  { _oOwner        :: !(Maybe Owner)
+  , _oETag         :: !ETag
+  , _oSize         :: !Int
+  , _oKey          :: !ObjectKey
+  , _oStorageClass :: !ObjectStorageClass
+  , _oLastModified :: !RFC822
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Object' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oOwner' - Undocumented member.
+--
+-- * 'oETag' - Undocumented member.
+--
+-- * 'oSize' - Undocumented member.
+--
+-- * 'oKey' - Undocumented member.
+--
+-- * 'oStorageClass' - The class of storage used to store the object.
+--
+-- * 'oLastModified' - Undocumented member.
+object'
+    :: ETag -- ^ 'oETag'
+    -> Int -- ^ 'oSize'
+    -> ObjectKey -- ^ 'oKey'
+    -> ObjectStorageClass -- ^ 'oStorageClass'
+    -> UTCTime -- ^ 'oLastModified'
+    -> Object
+object' pETag_ pSize_ pKey_ pStorageClass_ pLastModified_ =
+  Object'
+  { _oOwner = Nothing
+  , _oETag = pETag_
+  , _oSize = pSize_
+  , _oKey = pKey_
+  , _oStorageClass = pStorageClass_
+  , _oLastModified = _Time # pLastModified_
+  }
+
+
+-- | Undocumented member.
+oOwner :: Lens' Object (Maybe Owner)
+oOwner = lens _oOwner (\ s a -> s{_oOwner = a});
+
+-- | Undocumented member.
+oETag :: Lens' Object ETag
+oETag = lens _oETag (\ s a -> s{_oETag = a});
+
+-- | Undocumented member.
+oSize :: Lens' Object Int
+oSize = lens _oSize (\ s a -> s{_oSize = a});
+
+-- | Undocumented member.
+oKey :: Lens' Object ObjectKey
+oKey = lens _oKey (\ s a -> s{_oKey = a});
+
+-- | The class of storage used to store the object.
+oStorageClass :: Lens' Object ObjectStorageClass
+oStorageClass = lens _oStorageClass (\ s a -> s{_oStorageClass = a});
+
+-- | Undocumented member.
+oLastModified :: Lens' Object UTCTime
+oLastModified = lens _oLastModified (\ s a -> s{_oLastModified = a}) . _Time;
+
+instance FromXML Object where
+        parseXML x
+          = Object' <$>
+              (x .@? "Owner") <*> (x .@ "ETag") <*> (x .@ "Size")
+                <*> (x .@ "Key")
+                <*> (x .@ "StorageClass")
+                <*> (x .@ "LastModified")
+
+instance Hashable Object where
+
+instance NFData Object where
+
+-- | /See:/ 'objectIdentifier' smart constructor.
+data ObjectIdentifier = ObjectIdentifier'
+  { _oiVersionId :: !(Maybe ObjectVersionId)
+  , _oiKey       :: !ObjectKey
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ObjectIdentifier' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oiVersionId' - VersionId for the specific version of the object to delete.
+--
+-- * 'oiKey' - Key name of the object to delete.
+objectIdentifier
+    :: ObjectKey -- ^ 'oiKey'
+    -> ObjectIdentifier
+objectIdentifier pKey_ =
+  ObjectIdentifier' {_oiVersionId = Nothing, _oiKey = pKey_}
+
+
+-- | VersionId for the specific version of the object to delete.
+oiVersionId :: Lens' ObjectIdentifier (Maybe ObjectVersionId)
+oiVersionId = lens _oiVersionId (\ s a -> s{_oiVersionId = a});
+
+-- | Key name of the object to delete.
+oiKey :: Lens' ObjectIdentifier ObjectKey
+oiKey = lens _oiKey (\ s a -> s{_oiKey = a});
+
+instance Hashable ObjectIdentifier where
+
+instance NFData ObjectIdentifier where
+
+instance ToXML ObjectIdentifier where
+        toXML ObjectIdentifier'{..}
+          = mconcat
+              ["VersionId" @= _oiVersionId, "Key" @= _oiKey]
+
+-- | /See:/ 'objectVersion' smart constructor.
+data ObjectVersion = ObjectVersion'
+  { _ovETag         :: !(Maybe ETag)
+  , _ovVersionId    :: !(Maybe ObjectVersionId)
+  , _ovSize         :: !(Maybe Int)
+  , _ovIsLatest     :: !(Maybe Bool)
+  , _ovOwner        :: !(Maybe Owner)
+  , _ovKey          :: !(Maybe ObjectKey)
+  , _ovStorageClass :: !(Maybe ObjectVersionStorageClass)
+  , _ovLastModified :: !(Maybe RFC822)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ObjectVersion' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ovETag' - Undocumented member.
+--
+-- * 'ovVersionId' - Version ID of an object.
+--
+-- * 'ovSize' - Size in bytes of the object.
+--
+-- * 'ovIsLatest' - Specifies whether the object is (true) or is not (false) the latest version of an object.
+--
+-- * 'ovOwner' - Undocumented member.
+--
+-- * 'ovKey' - The object key.
+--
+-- * 'ovStorageClass' - The class of storage used to store the object.
+--
+-- * 'ovLastModified' - Date and time the object was last modified.
+objectVersion
+    :: ObjectVersion
+objectVersion =
+  ObjectVersion'
+  { _ovETag = Nothing
+  , _ovVersionId = Nothing
+  , _ovSize = Nothing
+  , _ovIsLatest = Nothing
+  , _ovOwner = Nothing
+  , _ovKey = Nothing
+  , _ovStorageClass = Nothing
+  , _ovLastModified = Nothing
+  }
+
+
+-- | Undocumented member.
+ovETag :: Lens' ObjectVersion (Maybe ETag)
+ovETag = lens _ovETag (\ s a -> s{_ovETag = a});
+
+-- | Version ID of an object.
+ovVersionId :: Lens' ObjectVersion (Maybe ObjectVersionId)
+ovVersionId = lens _ovVersionId (\ s a -> s{_ovVersionId = a});
+
+-- | Size in bytes of the object.
+ovSize :: Lens' ObjectVersion (Maybe Int)
+ovSize = lens _ovSize (\ s a -> s{_ovSize = a});
+
+-- | Specifies whether the object is (true) or is not (false) the latest version of an object.
+ovIsLatest :: Lens' ObjectVersion (Maybe Bool)
+ovIsLatest = lens _ovIsLatest (\ s a -> s{_ovIsLatest = a});
+
+-- | Undocumented member.
+ovOwner :: Lens' ObjectVersion (Maybe Owner)
+ovOwner = lens _ovOwner (\ s a -> s{_ovOwner = a});
+
+-- | The object key.
+ovKey :: Lens' ObjectVersion (Maybe ObjectKey)
+ovKey = lens _ovKey (\ s a -> s{_ovKey = a});
+
+-- | The class of storage used to store the object.
+ovStorageClass :: Lens' ObjectVersion (Maybe ObjectVersionStorageClass)
+ovStorageClass = lens _ovStorageClass (\ s a -> s{_ovStorageClass = a});
+
+-- | Date and time the object was last modified.
+ovLastModified :: Lens' ObjectVersion (Maybe UTCTime)
+ovLastModified = lens _ovLastModified (\ s a -> s{_ovLastModified = a}) . mapping _Time;
+
+instance FromXML ObjectVersion where
+        parseXML x
+          = ObjectVersion' <$>
+              (x .@? "ETag") <*> (x .@? "VersionId") <*>
+                (x .@? "Size")
+                <*> (x .@? "IsLatest")
+                <*> (x .@? "Owner")
+                <*> (x .@? "Key")
+                <*> (x .@? "StorageClass")
+                <*> (x .@? "LastModified")
+
+instance Hashable ObjectVersion where
+
+instance NFData ObjectVersion where
+
+-- | /See:/ 'owner' smart constructor.
+data Owner = Owner'
+  { _oDisplayName :: !(Maybe Text)
+  , _oId          :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Owner' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oDisplayName' - Undocumented member.
+--
+-- * 'oId' - Undocumented member.
+owner
+    :: Owner
+owner = Owner' {_oDisplayName = Nothing, _oId = Nothing}
+
+
+-- | Undocumented member.
+oDisplayName :: Lens' Owner (Maybe Text)
+oDisplayName = lens _oDisplayName (\ s a -> s{_oDisplayName = a});
+
+-- | Undocumented member.
+oId :: Lens' Owner (Maybe Text)
+oId = lens _oId (\ s a -> s{_oId = a});
+
+instance FromXML Owner where
+        parseXML x
+          = Owner' <$> (x .@? "DisplayName") <*> (x .@? "ID")
+
+instance Hashable Owner where
+
+instance NFData Owner where
+
+instance ToXML Owner where
+        toXML Owner'{..}
+          = mconcat
+              ["DisplayName" @= _oDisplayName, "ID" @= _oId]
+
+-- | /See:/ 'part' smart constructor.
+data Part = Part'
+  { _pETag         :: !(Maybe ETag)
+  , _pSize         :: !(Maybe Int)
+  , _pPartNumber   :: !(Maybe Int)
+  , _pLastModified :: !(Maybe RFC822)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Part' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pETag' - Entity tag returned when the part was uploaded.
+--
+-- * 'pSize' - Size of the uploaded part data.
+--
+-- * 'pPartNumber' - Part number identifying the part. This is a positive integer between 1 and 10,000.
+--
+-- * 'pLastModified' - Date and time at which the part was uploaded.
+part
+    :: Part
+part =
+  Part'
+  { _pETag = Nothing
+  , _pSize = Nothing
+  , _pPartNumber = Nothing
+  , _pLastModified = Nothing
+  }
+
+
+-- | Entity tag returned when the part was uploaded.
+pETag :: Lens' Part (Maybe ETag)
+pETag = lens _pETag (\ s a -> s{_pETag = a});
+
+-- | Size of the uploaded part data.
+pSize :: Lens' Part (Maybe Int)
+pSize = lens _pSize (\ s a -> s{_pSize = a});
+
+-- | Part number identifying the part. This is a positive integer between 1 and 10,000.
+pPartNumber :: Lens' Part (Maybe Int)
+pPartNumber = lens _pPartNumber (\ s a -> s{_pPartNumber = a});
+
+-- | Date and time at which the part was uploaded.
+pLastModified :: Lens' Part (Maybe UTCTime)
+pLastModified = lens _pLastModified (\ s a -> s{_pLastModified = a}) . mapping _Time;
+
+instance FromXML Part where
+        parseXML x
+          = Part' <$>
+              (x .@? "ETag") <*> (x .@? "Size") <*>
+                (x .@? "PartNumber")
+                <*> (x .@? "LastModified")
+
+instance Hashable Part where
+
+instance NFData Part where
+
+-- | Container for specifying an configuration when you want Amazon S3 to publish events to an Amazon Simple Queue Service (Amazon SQS) queue.
+--
+-- /See:/ 'queueConfiguration' smart constructor.
+data QueueConfiguration = QueueConfiguration'
+  { _qcId       :: !(Maybe Text)
+  , _qcFilter   :: !(Maybe NotificationConfigurationFilter)
+  , _qcQueueARN :: !Text
+  , _qcEvents   :: ![Event]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'QueueConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'qcId' - Undocumented member.
+--
+-- * 'qcFilter' - Undocumented member.
+--
+-- * 'qcQueueARN' - Amazon SQS queue ARN to which Amazon S3 will publish a message when it detects events of specified type.
+--
+-- * 'qcEvents' - Undocumented member.
+queueConfiguration
+    :: Text -- ^ 'qcQueueARN'
+    -> QueueConfiguration
+queueConfiguration pQueueARN_ =
+  QueueConfiguration'
+  { _qcId = Nothing
+  , _qcFilter = Nothing
+  , _qcQueueARN = pQueueARN_
+  , _qcEvents = mempty
+  }
+
+
+-- | Undocumented member.
+qcId :: Lens' QueueConfiguration (Maybe Text)
+qcId = lens _qcId (\ s a -> s{_qcId = a});
+
+-- | Undocumented member.
+qcFilter :: Lens' QueueConfiguration (Maybe NotificationConfigurationFilter)
+qcFilter = lens _qcFilter (\ s a -> s{_qcFilter = a});
+
+-- | Amazon SQS queue ARN to which Amazon S3 will publish a message when it detects events of specified type.
+qcQueueARN :: Lens' QueueConfiguration Text
+qcQueueARN = lens _qcQueueARN (\ s a -> s{_qcQueueARN = a});
+
+-- | Undocumented member.
+qcEvents :: Lens' QueueConfiguration [Event]
+qcEvents = lens _qcEvents (\ s a -> s{_qcEvents = a}) . _Coerce;
+
+instance FromXML QueueConfiguration where
+        parseXML x
+          = QueueConfiguration' <$>
+              (x .@? "Id") <*> (x .@? "Filter") <*> (x .@ "Queue")
+                <*> (parseXMLList "Event" x)
+
+instance Hashable QueueConfiguration where
+
+instance NFData QueueConfiguration where
+
+instance ToXML QueueConfiguration where
+        toXML QueueConfiguration'{..}
+          = mconcat
+              ["Id" @= _qcId, "Filter" @= _qcFilter,
+               "Queue" @= _qcQueueARN, toXMLList "Event" _qcEvents]
+
+-- | /See:/ 'redirect' smart constructor.
+data Redirect = Redirect'
+  { _rHostName             :: !(Maybe Text)
+  , _rProtocol             :: !(Maybe Protocol)
+  , _rHTTPRedirectCode     :: !(Maybe Text)
+  , _rReplaceKeyWith       :: !(Maybe Text)
+  , _rReplaceKeyPrefixWith :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Redirect' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rHostName' - The host name to use in the redirect request.
+--
+-- * 'rProtocol' - Protocol to use (http, https) when redirecting requests. The default is the protocol that is used in the original request.
+--
+-- * 'rHTTPRedirectCode' - The HTTP redirect code to use on the response. Not required if one of the siblings is present.
+--
+-- * 'rReplaceKeyWith' - The specific object key to use in the redirect request. For example, redirect request to error.html. Not required if one of the sibling is present. Can be present only if ReplaceKeyPrefixWith is not provided.
+--
+-- * 'rReplaceKeyPrefixWith' - The object key prefix to use in the redirect request. For example, to redirect requests for all pages with prefix docs/ (objects in the docs/ folder) to documents/, you can set a condition block with KeyPrefixEquals set to docs/ and in the Redirect set ReplaceKeyPrefixWith to /documents. Not required if one of the siblings is present. Can be present only if ReplaceKeyWith is not provided.
+redirect
+    :: Redirect
+redirect =
+  Redirect'
+  { _rHostName = Nothing
+  , _rProtocol = Nothing
+  , _rHTTPRedirectCode = Nothing
+  , _rReplaceKeyWith = Nothing
+  , _rReplaceKeyPrefixWith = Nothing
+  }
+
+
+-- | The host name to use in the redirect request.
+rHostName :: Lens' Redirect (Maybe Text)
+rHostName = lens _rHostName (\ s a -> s{_rHostName = a});
+
+-- | Protocol to use (http, https) when redirecting requests. The default is the protocol that is used in the original request.
+rProtocol :: Lens' Redirect (Maybe Protocol)
+rProtocol = lens _rProtocol (\ s a -> s{_rProtocol = a});
+
+-- | The HTTP redirect code to use on the response. Not required if one of the siblings is present.
+rHTTPRedirectCode :: Lens' Redirect (Maybe Text)
+rHTTPRedirectCode = lens _rHTTPRedirectCode (\ s a -> s{_rHTTPRedirectCode = a});
+
+-- | The specific object key to use in the redirect request. For example, redirect request to error.html. Not required if one of the sibling is present. Can be present only if ReplaceKeyPrefixWith is not provided.
+rReplaceKeyWith :: Lens' Redirect (Maybe Text)
+rReplaceKeyWith = lens _rReplaceKeyWith (\ s a -> s{_rReplaceKeyWith = a});
+
+-- | The object key prefix to use in the redirect request. For example, to redirect requests for all pages with prefix docs/ (objects in the docs/ folder) to documents/, you can set a condition block with KeyPrefixEquals set to docs/ and in the Redirect set ReplaceKeyPrefixWith to /documents. Not required if one of the siblings is present. Can be present only if ReplaceKeyWith is not provided.
+rReplaceKeyPrefixWith :: Lens' Redirect (Maybe Text)
+rReplaceKeyPrefixWith = lens _rReplaceKeyPrefixWith (\ s a -> s{_rReplaceKeyPrefixWith = a});
+
+instance FromXML Redirect where
+        parseXML x
+          = Redirect' <$>
+              (x .@? "HostName") <*> (x .@? "Protocol") <*>
+                (x .@? "HttpRedirectCode")
+                <*> (x .@? "ReplaceKeyWith")
+                <*> (x .@? "ReplaceKeyPrefixWith")
+
+instance Hashable Redirect where
+
+instance NFData Redirect where
+
+instance ToXML Redirect where
+        toXML Redirect'{..}
+          = mconcat
+              ["HostName" @= _rHostName, "Protocol" @= _rProtocol,
+               "HttpRedirectCode" @= _rHTTPRedirectCode,
+               "ReplaceKeyWith" @= _rReplaceKeyWith,
+               "ReplaceKeyPrefixWith" @= _rReplaceKeyPrefixWith]
+
+-- | /See:/ 'redirectAllRequestsTo' smart constructor.
+data RedirectAllRequestsTo = RedirectAllRequestsTo'
+  { _rartProtocol :: !(Maybe Protocol)
+  , _rartHostName :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'RedirectAllRequestsTo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rartProtocol' - Protocol to use (http, https) when redirecting requests. The default is the protocol that is used in the original request.
+--
+-- * 'rartHostName' - Name of the host where requests will be redirected.
+redirectAllRequestsTo
+    :: Text -- ^ 'rartHostName'
+    -> RedirectAllRequestsTo
+redirectAllRequestsTo pHostName_ =
+  RedirectAllRequestsTo' {_rartProtocol = Nothing, _rartHostName = pHostName_}
+
+
+-- | Protocol to use (http, https) when redirecting requests. The default is the protocol that is used in the original request.
+rartProtocol :: Lens' RedirectAllRequestsTo (Maybe Protocol)
+rartProtocol = lens _rartProtocol (\ s a -> s{_rartProtocol = a});
+
+-- | Name of the host where requests will be redirected.
+rartHostName :: Lens' RedirectAllRequestsTo Text
+rartHostName = lens _rartHostName (\ s a -> s{_rartHostName = a});
+
+instance FromXML RedirectAllRequestsTo where
+        parseXML x
+          = RedirectAllRequestsTo' <$>
+              (x .@? "Protocol") <*> (x .@ "HostName")
+
+instance Hashable RedirectAllRequestsTo where
+
+instance NFData RedirectAllRequestsTo where
+
+instance ToXML RedirectAllRequestsTo where
+        toXML RedirectAllRequestsTo'{..}
+          = mconcat
+              ["Protocol" @= _rartProtocol,
+               "HostName" @= _rartHostName]
+
+-- | Container for replication rules. You can add as many as 1,000 rules. Total replication configuration size can be up to 2 MB.
+--
+-- /See:/ 'replicationConfiguration' smart constructor.
+data ReplicationConfiguration = ReplicationConfiguration'
+  { _rcRole  :: !Text
+  , _rcRules :: ![ReplicationRule]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ReplicationConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rcRole' - Amazon Resource Name (ARN) of an IAM role for Amazon S3 to assume when replicating the objects.
+--
+-- * 'rcRules' - Container for information about a particular replication rule. Replication configuration must have at least one rule and can contain up to 1,000 rules.
+replicationConfiguration
+    :: Text -- ^ 'rcRole'
+    -> ReplicationConfiguration
+replicationConfiguration pRole_ =
+  ReplicationConfiguration' {_rcRole = pRole_, _rcRules = mempty}
+
+
+-- | Amazon Resource Name (ARN) of an IAM role for Amazon S3 to assume when replicating the objects.
+rcRole :: Lens' ReplicationConfiguration Text
+rcRole = lens _rcRole (\ s a -> s{_rcRole = a});
+
+-- | Container for information about a particular replication rule. Replication configuration must have at least one rule and can contain up to 1,000 rules.
+rcRules :: Lens' ReplicationConfiguration [ReplicationRule]
+rcRules = lens _rcRules (\ s a -> s{_rcRules = a}) . _Coerce;
+
+instance FromXML ReplicationConfiguration where
+        parseXML x
+          = ReplicationConfiguration' <$>
+              (x .@ "Role") <*> (parseXMLList "Rule" x)
+
+instance Hashable ReplicationConfiguration where
+
+instance NFData ReplicationConfiguration where
+
+instance ToXML ReplicationConfiguration where
+        toXML ReplicationConfiguration'{..}
+          = mconcat
+              ["Role" @= _rcRole, toXMLList "Rule" _rcRules]
+
+-- | Container for information about a particular replication rule.
+--
+-- /See:/ 'replicationRule' smart constructor.
+data ReplicationRule = ReplicationRule'
+  { _rrId                      :: !(Maybe Text)
+  , _rrSourceSelectionCriteria :: !(Maybe SourceSelectionCriteria)
+  , _rrPrefix                  :: !Text
+  , _rrStatus                  :: !ReplicationRuleStatus
+  , _rrDestination             :: !Destination
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ReplicationRule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rrId' - Unique identifier for the rule. The value cannot be longer than 255 characters.
+--
+-- * 'rrSourceSelectionCriteria' - Container for filters that define which source objects should be replicated.
+--
+-- * 'rrPrefix' - Object keyname prefix identifying one or more objects to which the rule applies. Maximum prefix length can be up to 1,024 characters. Overlapping prefixes are not supported.
+--
+-- * 'rrStatus' - The rule is ignored if status is not Enabled.
+--
+-- * 'rrDestination' - Container for replication destination information.
+replicationRule
+    :: Text -- ^ 'rrPrefix'
+    -> ReplicationRuleStatus -- ^ 'rrStatus'
+    -> Destination -- ^ 'rrDestination'
+    -> ReplicationRule
+replicationRule pPrefix_ pStatus_ pDestination_ =
+  ReplicationRule'
+  { _rrId = Nothing
+  , _rrSourceSelectionCriteria = Nothing
+  , _rrPrefix = pPrefix_
+  , _rrStatus = pStatus_
+  , _rrDestination = pDestination_
+  }
+
+
+-- | Unique identifier for the rule. The value cannot be longer than 255 characters.
+rrId :: Lens' ReplicationRule (Maybe Text)
+rrId = lens _rrId (\ s a -> s{_rrId = a});
+
+-- | Container for filters that define which source objects should be replicated.
+rrSourceSelectionCriteria :: Lens' ReplicationRule (Maybe SourceSelectionCriteria)
+rrSourceSelectionCriteria = lens _rrSourceSelectionCriteria (\ s a -> s{_rrSourceSelectionCriteria = a});
+
+-- | Object keyname prefix identifying one or more objects to which the rule applies. Maximum prefix length can be up to 1,024 characters. Overlapping prefixes are not supported.
+rrPrefix :: Lens' ReplicationRule Text
+rrPrefix = lens _rrPrefix (\ s a -> s{_rrPrefix = a});
+
+-- | The rule is ignored if status is not Enabled.
+rrStatus :: Lens' ReplicationRule ReplicationRuleStatus
+rrStatus = lens _rrStatus (\ s a -> s{_rrStatus = a});
+
+-- | Container for replication destination information.
+rrDestination :: Lens' ReplicationRule Destination
+rrDestination = lens _rrDestination (\ s a -> s{_rrDestination = a});
+
+instance FromXML ReplicationRule where
+        parseXML x
+          = ReplicationRule' <$>
+              (x .@? "ID") <*> (x .@? "SourceSelectionCriteria")
+                <*> (x .@ "Prefix")
+                <*> (x .@ "Status")
+                <*> (x .@ "Destination")
+
+instance Hashable ReplicationRule where
+
+instance NFData ReplicationRule where
+
+instance ToXML ReplicationRule where
+        toXML ReplicationRule'{..}
+          = mconcat
+              ["ID" @= _rrId,
+               "SourceSelectionCriteria" @=
+                 _rrSourceSelectionCriteria,
+               "Prefix" @= _rrPrefix, "Status" @= _rrStatus,
+               "Destination" @= _rrDestination]
+
+-- | /See:/ 'requestPaymentConfiguration' smart constructor.
+newtype RequestPaymentConfiguration = RequestPaymentConfiguration'
+  { _rpcPayer :: Payer
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'RequestPaymentConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rpcPayer' - Specifies who pays for the download and request fees.
+requestPaymentConfiguration
+    :: Payer -- ^ 'rpcPayer'
+    -> RequestPaymentConfiguration
+requestPaymentConfiguration pPayer_ =
+  RequestPaymentConfiguration' {_rpcPayer = pPayer_}
+
+
+-- | Specifies who pays for the download and request fees.
+rpcPayer :: Lens' RequestPaymentConfiguration Payer
+rpcPayer = lens _rpcPayer (\ s a -> s{_rpcPayer = a});
+
+instance Hashable RequestPaymentConfiguration where
+
+instance NFData RequestPaymentConfiguration where
+
+instance ToXML RequestPaymentConfiguration where
+        toXML RequestPaymentConfiguration'{..}
+          = mconcat ["Payer" @= _rpcPayer]
+
+-- | /See:/ 'restoreRequest' smart constructor.
+data RestoreRequest = RestoreRequest'
+  { _rrGlacierJobParameters :: !(Maybe GlacierJobParameters)
+  , _rrDays                 :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'RestoreRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rrGlacierJobParameters' - Glacier related prameters pertaining to this job.
+--
+-- * 'rrDays' - Lifetime of the active copy in days
+restoreRequest
+    :: Int -- ^ 'rrDays'
+    -> RestoreRequest
+restoreRequest pDays_ =
+  RestoreRequest' {_rrGlacierJobParameters = Nothing, _rrDays = pDays_}
+
+
+-- | Glacier related prameters pertaining to this job.
+rrGlacierJobParameters :: Lens' RestoreRequest (Maybe GlacierJobParameters)
+rrGlacierJobParameters = lens _rrGlacierJobParameters (\ s a -> s{_rrGlacierJobParameters = a});
+
+-- | Lifetime of the active copy in days
+rrDays :: Lens' RestoreRequest Int
+rrDays = lens _rrDays (\ s a -> s{_rrDays = a});
+
+instance Hashable RestoreRequest where
+
+instance NFData RestoreRequest where
+
+instance ToXML RestoreRequest where
+        toXML RestoreRequest'{..}
+          = mconcat
+              ["GlacierJobParameters" @= _rrGlacierJobParameters,
+               "Days" @= _rrDays]
+
+-- | /See:/ 'routingRule' smart constructor.
+data RoutingRule = RoutingRule'
+  { _rrCondition :: !(Maybe Condition)
+  , _rrRedirect  :: !Redirect
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'RoutingRule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rrCondition' - A container for describing a condition that must be met for the specified redirect to apply. For example, 1. If request is for pages in the /docs folder, redirect to the /documents folder. 2. If request results in HTTP error 4xx, redirect request to another host where you might process the error.
+--
+-- * 'rrRedirect' - Container for redirect information. You can redirect requests to another host, to another page, or with another protocol. In the event of an error, you can can specify a different error code to return.
+routingRule
+    :: Redirect -- ^ 'rrRedirect'
+    -> RoutingRule
+routingRule pRedirect_ =
+  RoutingRule' {_rrCondition = Nothing, _rrRedirect = pRedirect_}
+
+
+-- | A container for describing a condition that must be met for the specified redirect to apply. For example, 1. If request is for pages in the /docs folder, redirect to the /documents folder. 2. If request results in HTTP error 4xx, redirect request to another host where you might process the error.
+rrCondition :: Lens' RoutingRule (Maybe Condition)
+rrCondition = lens _rrCondition (\ s a -> s{_rrCondition = a});
+
+-- | Container for redirect information. You can redirect requests to another host, to another page, or with another protocol. In the event of an error, you can can specify a different error code to return.
+rrRedirect :: Lens' RoutingRule Redirect
+rrRedirect = lens _rrRedirect (\ s a -> s{_rrRedirect = a});
+
+instance FromXML RoutingRule where
+        parseXML x
+          = RoutingRule' <$>
+              (x .@? "Condition") <*> (x .@ "Redirect")
+
+instance Hashable RoutingRule where
+
+instance NFData RoutingRule where
+
+instance ToXML RoutingRule where
+        toXML RoutingRule'{..}
+          = mconcat
+              ["Condition" @= _rrCondition,
+               "Redirect" @= _rrRedirect]
+
+-- | Container for object key name prefix and suffix filtering rules.
+--
+-- /See:/ 's3KeyFilter' smart constructor.
+newtype S3KeyFilter = S3KeyFilter'
+  { _skfFilterRules :: Maybe [FilterRule]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'S3KeyFilter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'skfFilterRules' - Undocumented member.
+s3KeyFilter
+    :: S3KeyFilter
+s3KeyFilter = S3KeyFilter' {_skfFilterRules = Nothing}
+
+
+-- | Undocumented member.
+skfFilterRules :: Lens' S3KeyFilter [FilterRule]
+skfFilterRules = lens _skfFilterRules (\ s a -> s{_skfFilterRules = a}) . _Default . _Coerce;
+
+instance FromXML S3KeyFilter where
+        parseXML x
+          = S3KeyFilter' <$>
+              (may (parseXMLList "FilterRule") x)
+
+instance Hashable S3KeyFilter where
+
+instance NFData S3KeyFilter where
+
+instance ToXML S3KeyFilter where
+        toXML S3KeyFilter'{..}
+          = mconcat
+              [toXML (toXMLList "FilterRule" <$> _skfFilterRules)]
+
+-- | /See:/ 's3ServiceError' smart constructor.
+data S3ServiceError = S3ServiceError'
+  { _sseVersionId :: !(Maybe ObjectVersionId)
+  , _sseKey       :: !(Maybe ObjectKey)
+  , _sseCode      :: !(Maybe Text)
+  , _sseMessage   :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'S3ServiceError' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sseVersionId' - Undocumented member.
+--
+-- * 'sseKey' - Undocumented member.
+--
+-- * 'sseCode' - Undocumented member.
+--
+-- * 'sseMessage' - Undocumented member.
+s3ServiceError
+    :: S3ServiceError
+s3ServiceError =
+  S3ServiceError'
+  { _sseVersionId = Nothing
+  , _sseKey = Nothing
+  , _sseCode = Nothing
+  , _sseMessage = Nothing
+  }
+
+
+-- | Undocumented member.
+sseVersionId :: Lens' S3ServiceError (Maybe ObjectVersionId)
+sseVersionId = lens _sseVersionId (\ s a -> s{_sseVersionId = a});
+
+-- | Undocumented member.
+sseKey :: Lens' S3ServiceError (Maybe ObjectKey)
+sseKey = lens _sseKey (\ s a -> s{_sseKey = a});
+
+-- | Undocumented member.
+sseCode :: Lens' S3ServiceError (Maybe Text)
+sseCode = lens _sseCode (\ s a -> s{_sseCode = a});
+
+-- | Undocumented member.
+sseMessage :: Lens' S3ServiceError (Maybe Text)
+sseMessage = lens _sseMessage (\ s a -> s{_sseMessage = a});
+
+instance FromXML S3ServiceError where
+        parseXML x
+          = S3ServiceError' <$>
+              (x .@? "VersionId") <*> (x .@? "Key") <*>
+                (x .@? "Code")
+                <*> (x .@? "Message")
+
+instance Hashable S3ServiceError where
+
+instance NFData S3ServiceError where
+
+-- | Specifies the use of SSE-KMS to encrypt delievered Inventory reports.
+--
+-- /See:/ 'sSEKMS' smart constructor.
+newtype SSEKMS = SSEKMS'
+  { _ssekKeyId :: Sensitive Text
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'SSEKMS' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ssekKeyId' - Specifies the ID of the AWS Key Management Service (KMS) master encryption key to use for encrypting Inventory reports.
+sSEKMS
+    :: Text -- ^ 'ssekKeyId'
+    -> SSEKMS
+sSEKMS pKeyId_ = SSEKMS' {_ssekKeyId = _Sensitive # pKeyId_}
+
+
+-- | Specifies the ID of the AWS Key Management Service (KMS) master encryption key to use for encrypting Inventory reports.
+ssekKeyId :: Lens' SSEKMS Text
+ssekKeyId = lens _ssekKeyId (\ s a -> s{_ssekKeyId = a}) . _Sensitive;
+
+instance FromXML SSEKMS where
+        parseXML x = SSEKMS' <$> (x .@ "KeyId")
+
+instance Hashable SSEKMS where
+
+instance NFData SSEKMS where
+
+instance ToXML SSEKMS where
+        toXML SSEKMS'{..} = mconcat ["KeyId" @= _ssekKeyId]
+
+-- | Specifies the use of SSE-S3 to encrypt delievered Inventory reports.
+--
+-- /See:/ 'sSES3' smart constructor.
+data SSES3 =
+  SSES3'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'SSES3' with the minimum fields required to make a request.
+--
+sSES3
+    :: SSES3
+sSES3 = SSES3'
+
+
+instance FromXML SSES3 where
+        parseXML = const (pure SSES3')
+
+instance Hashable SSES3 where
+
+instance NFData SSES3 where
+
+instance ToXML SSES3 where
+        toXML = const mempty
+
+-- | Describes the default server-side encryption to apply to new objects in the bucket. If Put Object request does not specify any server-side encryption, this default encryption will be applied.
+--
+-- /See:/ 'serverSideEncryptionByDefault' smart constructor.
+data ServerSideEncryptionByDefault = ServerSideEncryptionByDefault'
+  { _ssebdKMSMasterKeyId :: !(Maybe (Sensitive Text))
+  , _ssebdSSEAlgorithm   :: !ServerSideEncryption
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ServerSideEncryptionByDefault' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ssebdKMSMasterKeyId' - KMS master key ID to use for the default encryption. This parameter is allowed if SSEAlgorithm is aws:kms.
+--
+-- * 'ssebdSSEAlgorithm' - Server-side encryption algorithm to use for the default encryption.
+serverSideEncryptionByDefault
+    :: ServerSideEncryption -- ^ 'ssebdSSEAlgorithm'
+    -> ServerSideEncryptionByDefault
+serverSideEncryptionByDefault pSSEAlgorithm_ =
+  ServerSideEncryptionByDefault'
+  {_ssebdKMSMasterKeyId = Nothing, _ssebdSSEAlgorithm = pSSEAlgorithm_}
+
+
+-- | KMS master key ID to use for the default encryption. This parameter is allowed if SSEAlgorithm is aws:kms.
+ssebdKMSMasterKeyId :: Lens' ServerSideEncryptionByDefault (Maybe Text)
+ssebdKMSMasterKeyId = lens _ssebdKMSMasterKeyId (\ s a -> s{_ssebdKMSMasterKeyId = a}) . mapping _Sensitive;
+
+-- | Server-side encryption algorithm to use for the default encryption.
+ssebdSSEAlgorithm :: Lens' ServerSideEncryptionByDefault ServerSideEncryption
+ssebdSSEAlgorithm = lens _ssebdSSEAlgorithm (\ s a -> s{_ssebdSSEAlgorithm = a});
+
+instance FromXML ServerSideEncryptionByDefault where
+        parseXML x
+          = ServerSideEncryptionByDefault' <$>
+              (x .@? "KMSMasterKeyID") <*> (x .@ "SSEAlgorithm")
+
+instance Hashable ServerSideEncryptionByDefault where
+
+instance NFData ServerSideEncryptionByDefault where
+
+instance ToXML ServerSideEncryptionByDefault where
+        toXML ServerSideEncryptionByDefault'{..}
+          = mconcat
+              ["KMSMasterKeyID" @= _ssebdKMSMasterKeyId,
+               "SSEAlgorithm" @= _ssebdSSEAlgorithm]
+
+-- | Container for server-side encryption configuration rules. Currently S3 supports one rule only.
+--
+-- /See:/ 'serverSideEncryptionConfiguration' smart constructor.
+newtype ServerSideEncryptionConfiguration = ServerSideEncryptionConfiguration'
+  { _ssecRules :: [ServerSideEncryptionRule]
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ServerSideEncryptionConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ssecRules' - Container for information about a particular server-side encryption configuration rule.
+serverSideEncryptionConfiguration
+    :: ServerSideEncryptionConfiguration
+serverSideEncryptionConfiguration =
+  ServerSideEncryptionConfiguration' {_ssecRules = mempty}
+
+
+-- | Container for information about a particular server-side encryption configuration rule.
+ssecRules :: Lens' ServerSideEncryptionConfiguration [ServerSideEncryptionRule]
+ssecRules = lens _ssecRules (\ s a -> s{_ssecRules = a}) . _Coerce;
+
+instance FromXML ServerSideEncryptionConfiguration
+         where
+        parseXML x
+          = ServerSideEncryptionConfiguration' <$>
+              (parseXMLList "Rule" x)
+
+instance Hashable ServerSideEncryptionConfiguration
+         where
+
+instance NFData ServerSideEncryptionConfiguration
+         where
+
+instance ToXML ServerSideEncryptionConfiguration
+         where
+        toXML ServerSideEncryptionConfiguration'{..}
+          = mconcat [toXMLList "Rule" _ssecRules]
+
+-- | Container for information about a particular server-side encryption configuration rule.
+--
+-- /See:/ 'serverSideEncryptionRule' smart constructor.
+newtype ServerSideEncryptionRule = ServerSideEncryptionRule'
+  { _sserApplyServerSideEncryptionByDefault :: Maybe ServerSideEncryptionByDefault
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ServerSideEncryptionRule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sserApplyServerSideEncryptionByDefault' - Describes the default server-side encryption to apply to new objects in the bucket. If Put Object request does not specify any server-side encryption, this default encryption will be applied.
+serverSideEncryptionRule
+    :: ServerSideEncryptionRule
+serverSideEncryptionRule =
+  ServerSideEncryptionRule' {_sserApplyServerSideEncryptionByDefault = Nothing}
+
+
+-- | Describes the default server-side encryption to apply to new objects in the bucket. If Put Object request does not specify any server-side encryption, this default encryption will be applied.
+sserApplyServerSideEncryptionByDefault :: Lens' ServerSideEncryptionRule (Maybe ServerSideEncryptionByDefault)
+sserApplyServerSideEncryptionByDefault = lens _sserApplyServerSideEncryptionByDefault (\ s a -> s{_sserApplyServerSideEncryptionByDefault = a});
+
+instance FromXML ServerSideEncryptionRule where
+        parseXML x
+          = ServerSideEncryptionRule' <$>
+              (x .@? "ApplyServerSideEncryptionByDefault")
+
+instance Hashable ServerSideEncryptionRule where
+
+instance NFData ServerSideEncryptionRule where
+
+instance ToXML ServerSideEncryptionRule where
+        toXML ServerSideEncryptionRule'{..}
+          = mconcat
+              ["ApplyServerSideEncryptionByDefault" @=
+                 _sserApplyServerSideEncryptionByDefault]
+
+-- | Container for filters that define which source objects should be replicated.
+--
+-- /See:/ 'sourceSelectionCriteria' smart constructor.
+newtype SourceSelectionCriteria = SourceSelectionCriteria'
+  { _sscSseKMSEncryptedObjects :: Maybe SseKMSEncryptedObjects
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'SourceSelectionCriteria' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sscSseKMSEncryptedObjects' - Container for filter information of selection of KMS Encrypted S3 objects.
+sourceSelectionCriteria
+    :: SourceSelectionCriteria
+sourceSelectionCriteria =
+  SourceSelectionCriteria' {_sscSseKMSEncryptedObjects = Nothing}
+
+
+-- | Container for filter information of selection of KMS Encrypted S3 objects.
+sscSseKMSEncryptedObjects :: Lens' SourceSelectionCriteria (Maybe SseKMSEncryptedObjects)
+sscSseKMSEncryptedObjects = lens _sscSseKMSEncryptedObjects (\ s a -> s{_sscSseKMSEncryptedObjects = a});
+
+instance FromXML SourceSelectionCriteria where
+        parseXML x
+          = SourceSelectionCriteria' <$>
+              (x .@? "SseKmsEncryptedObjects")
+
+instance Hashable SourceSelectionCriteria where
+
+instance NFData SourceSelectionCriteria where
+
+instance ToXML SourceSelectionCriteria where
+        toXML SourceSelectionCriteria'{..}
+          = mconcat
+              ["SseKmsEncryptedObjects" @=
+                 _sscSseKMSEncryptedObjects]
+
+-- | Container for filter information of selection of KMS Encrypted S3 objects.
+--
+-- /See:/ 'sseKMSEncryptedObjects' smart constructor.
+newtype SseKMSEncryptedObjects = SseKMSEncryptedObjects'
+  { _skeoStatus :: SseKMSEncryptedObjectsStatus
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'SseKMSEncryptedObjects' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'skeoStatus' - The replication for KMS encrypted S3 objects is disabled if status is not Enabled.
+sseKMSEncryptedObjects
+    :: SseKMSEncryptedObjectsStatus -- ^ 'skeoStatus'
+    -> SseKMSEncryptedObjects
+sseKMSEncryptedObjects pStatus_ =
+  SseKMSEncryptedObjects' {_skeoStatus = pStatus_}
+
+
+-- | The replication for KMS encrypted S3 objects is disabled if status is not Enabled.
+skeoStatus :: Lens' SseKMSEncryptedObjects SseKMSEncryptedObjectsStatus
+skeoStatus = lens _skeoStatus (\ s a -> s{_skeoStatus = a});
+
+instance FromXML SseKMSEncryptedObjects where
+        parseXML x
+          = SseKMSEncryptedObjects' <$> (x .@ "Status")
+
+instance Hashable SseKMSEncryptedObjects where
+
+instance NFData SseKMSEncryptedObjects where
+
+instance ToXML SseKMSEncryptedObjects where
+        toXML SseKMSEncryptedObjects'{..}
+          = mconcat ["Status" @= _skeoStatus]
+
+-- | /See:/ 'storageClassAnalysis' smart constructor.
+newtype StorageClassAnalysis = StorageClassAnalysis'
+  { _scaDataExport :: Maybe StorageClassAnalysisDataExport
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'StorageClassAnalysis' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'scaDataExport' - A container used to describe how data related to the storage class analysis should be exported.
+storageClassAnalysis
+    :: StorageClassAnalysis
+storageClassAnalysis = StorageClassAnalysis' {_scaDataExport = Nothing}
+
+
+-- | A container used to describe how data related to the storage class analysis should be exported.
+scaDataExport :: Lens' StorageClassAnalysis (Maybe StorageClassAnalysisDataExport)
+scaDataExport = lens _scaDataExport (\ s a -> s{_scaDataExport = a});
+
+instance FromXML StorageClassAnalysis where
+        parseXML x
+          = StorageClassAnalysis' <$> (x .@? "DataExport")
+
+instance Hashable StorageClassAnalysis where
+
+instance NFData StorageClassAnalysis where
+
+instance ToXML StorageClassAnalysis where
+        toXML StorageClassAnalysis'{..}
+          = mconcat ["DataExport" @= _scaDataExport]
+
+-- | /See:/ 'storageClassAnalysisDataExport' smart constructor.
+data StorageClassAnalysisDataExport = StorageClassAnalysisDataExport'
+  { _scadeOutputSchemaVersion :: !StorageClassAnalysisSchemaVersion
+  , _scadeDestination         :: !AnalyticsExportDestination
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'StorageClassAnalysisDataExport' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'scadeOutputSchemaVersion' - The version of the output schema to use when exporting data. Must be V_1.
+--
+-- * 'scadeDestination' - The place to store the data for an analysis.
+storageClassAnalysisDataExport
+    :: StorageClassAnalysisSchemaVersion -- ^ 'scadeOutputSchemaVersion'
+    -> AnalyticsExportDestination -- ^ 'scadeDestination'
+    -> StorageClassAnalysisDataExport
+storageClassAnalysisDataExport pOutputSchemaVersion_ pDestination_ =
+  StorageClassAnalysisDataExport'
+  { _scadeOutputSchemaVersion = pOutputSchemaVersion_
+  , _scadeDestination = pDestination_
+  }
+
+
+-- | The version of the output schema to use when exporting data. Must be V_1.
+scadeOutputSchemaVersion :: Lens' StorageClassAnalysisDataExport StorageClassAnalysisSchemaVersion
+scadeOutputSchemaVersion = lens _scadeOutputSchemaVersion (\ s a -> s{_scadeOutputSchemaVersion = a});
+
+-- | The place to store the data for an analysis.
+scadeDestination :: Lens' StorageClassAnalysisDataExport AnalyticsExportDestination
+scadeDestination = lens _scadeDestination (\ s a -> s{_scadeDestination = a});
+
+instance FromXML StorageClassAnalysisDataExport where
+        parseXML x
+          = StorageClassAnalysisDataExport' <$>
+              (x .@ "OutputSchemaVersion") <*> (x .@ "Destination")
+
+instance Hashable StorageClassAnalysisDataExport
+         where
+
+instance NFData StorageClassAnalysisDataExport where
+
+instance ToXML StorageClassAnalysisDataExport where
+        toXML StorageClassAnalysisDataExport'{..}
+          = mconcat
+              ["OutputSchemaVersion" @= _scadeOutputSchemaVersion,
+               "Destination" @= _scadeDestination]
+
+-- | /See:/ 'tag' smart constructor.
+data Tag = Tag'
+  { _tagKey   :: !ObjectKey
+  , _tagValue :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Tag' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tagKey' - Name of the tag.
+--
+-- * 'tagValue' - Value of the tag.
+tag
+    :: ObjectKey -- ^ 'tagKey'
+    -> Text -- ^ 'tagValue'
+    -> Tag
+tag pKey_ pValue_ = Tag' {_tagKey = pKey_, _tagValue = pValue_}
+
+
+-- | Name of the tag.
+tagKey :: Lens' Tag ObjectKey
+tagKey = lens _tagKey (\ s a -> s{_tagKey = a});
+
+-- | Value of the tag.
+tagValue :: Lens' Tag Text
+tagValue = lens _tagValue (\ s a -> s{_tagValue = a});
+
+instance FromXML Tag where
+        parseXML x = Tag' <$> (x .@ "Key") <*> (x .@ "Value")
+
+instance Hashable Tag where
+
+instance NFData Tag where
+
+instance ToXML Tag where
+        toXML Tag'{..}
+          = mconcat ["Key" @= _tagKey, "Value" @= _tagValue]
+
+-- | /See:/ 'tagging' smart constructor.
+newtype Tagging = Tagging'
+  { _tTagSet :: [Tag]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Tagging' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tTagSet' - Undocumented member.
+tagging
+    :: Tagging
+tagging = Tagging' {_tTagSet = mempty}
+
+
+-- | Undocumented member.
+tTagSet :: Lens' Tagging [Tag]
+tTagSet = lens _tTagSet (\ s a -> s{_tTagSet = a}) . _Coerce;
+
+instance Hashable Tagging where
+
+instance NFData Tagging where
+
+instance ToXML Tagging where
+        toXML Tagging'{..}
+          = mconcat ["TagSet" @= toXMLList "Tag" _tTagSet]
+
+-- | /See:/ 'targetGrant' smart constructor.
+data TargetGrant = TargetGrant'
+  { _tgPermission :: !(Maybe BucketLogsPermission)
+  , _tgGrantee    :: !(Maybe Grantee)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'TargetGrant' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tgPermission' - Logging permissions assigned to the Grantee for the bucket.
+--
+-- * 'tgGrantee' - Undocumented member.
+targetGrant
+    :: TargetGrant
+targetGrant = TargetGrant' {_tgPermission = Nothing, _tgGrantee = Nothing}
+
+
+-- | Logging permissions assigned to the Grantee for the bucket.
+tgPermission :: Lens' TargetGrant (Maybe BucketLogsPermission)
+tgPermission = lens _tgPermission (\ s a -> s{_tgPermission = a});
+
+-- | Undocumented member.
+tgGrantee :: Lens' TargetGrant (Maybe Grantee)
+tgGrantee = lens _tgGrantee (\ s a -> s{_tgGrantee = a});
+
+instance FromXML TargetGrant where
+        parseXML x
+          = TargetGrant' <$>
+              (x .@? "Permission") <*> (x .@? "Grantee")
+
+instance Hashable TargetGrant where
+
+instance NFData TargetGrant where
+
+instance ToXML TargetGrant where
+        toXML TargetGrant'{..}
+          = mconcat
+              ["Permission" @= _tgPermission,
+               "Grantee" @= _tgGrantee]
+
+-- | Container for specifying the configuration when you want Amazon S3 to publish events to an Amazon Simple Notification Service (Amazon SNS) topic.
+--
+-- /See:/ 'topicConfiguration' smart constructor.
+data TopicConfiguration = TopicConfiguration'
+  { _tcId       :: !(Maybe Text)
+  , _tcFilter   :: !(Maybe NotificationConfigurationFilter)
+  , _tcTopicARN :: !Text
+  , _tcEvents   :: ![Event]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'TopicConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tcId' - Undocumented member.
+--
+-- * 'tcFilter' - Undocumented member.
+--
+-- * 'tcTopicARN' - Amazon SNS topic ARN to which Amazon S3 will publish a message when it detects events of specified type.
+--
+-- * 'tcEvents' - Undocumented member.
+topicConfiguration
+    :: Text -- ^ 'tcTopicARN'
+    -> TopicConfiguration
+topicConfiguration pTopicARN_ =
+  TopicConfiguration'
+  { _tcId = Nothing
+  , _tcFilter = Nothing
+  , _tcTopicARN = pTopicARN_
+  , _tcEvents = mempty
+  }
+
+
+-- | Undocumented member.
+tcId :: Lens' TopicConfiguration (Maybe Text)
+tcId = lens _tcId (\ s a -> s{_tcId = a});
+
+-- | Undocumented member.
+tcFilter :: Lens' TopicConfiguration (Maybe NotificationConfigurationFilter)
+tcFilter = lens _tcFilter (\ s a -> s{_tcFilter = a});
+
+-- | Amazon SNS topic ARN to which Amazon S3 will publish a message when it detects events of specified type.
+tcTopicARN :: Lens' TopicConfiguration Text
+tcTopicARN = lens _tcTopicARN (\ s a -> s{_tcTopicARN = a});
+
+-- | Undocumented member.
+tcEvents :: Lens' TopicConfiguration [Event]
+tcEvents = lens _tcEvents (\ s a -> s{_tcEvents = a}) . _Coerce;
+
+instance FromXML TopicConfiguration where
+        parseXML x
+          = TopicConfiguration' <$>
+              (x .@? "Id") <*> (x .@? "Filter") <*> (x .@ "Topic")
+                <*> (parseXMLList "Event" x)
+
+instance Hashable TopicConfiguration where
+
+instance NFData TopicConfiguration where
+
+instance ToXML TopicConfiguration where
+        toXML TopicConfiguration'{..}
+          = mconcat
+              ["Id" @= _tcId, "Filter" @= _tcFilter,
+               "Topic" @= _tcTopicARN, toXMLList "Event" _tcEvents]
+
+-- | /See:/ 'transition' smart constructor.
+data Transition = Transition'
+  { _tDays         :: !(Maybe Int)
+  , _tDate         :: !(Maybe RFC822)
+  , _tStorageClass :: !(Maybe TransitionStorageClass)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Transition' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tDays' - Indicates the lifetime, in days, of the objects that are subject to the rule. The value must be a non-zero positive integer.
+--
+-- * 'tDate' - Indicates at what date the object is to be moved or deleted. Should be in GMT ISO 8601 Format.
+--
+-- * 'tStorageClass' - The class of storage used to store the object.
+transition
+    :: Transition
+transition =
+  Transition' {_tDays = Nothing, _tDate = Nothing, _tStorageClass = Nothing}
+
+
+-- | Indicates the lifetime, in days, of the objects that are subject to the rule. The value must be a non-zero positive integer.
+tDays :: Lens' Transition (Maybe Int)
+tDays = lens _tDays (\ s a -> s{_tDays = a});
+
+-- | Indicates at what date the object is to be moved or deleted. Should be in GMT ISO 8601 Format.
+tDate :: Lens' Transition (Maybe UTCTime)
+tDate = lens _tDate (\ s a -> s{_tDate = a}) . mapping _Time;
+
+-- | The class of storage used to store the object.
+tStorageClass :: Lens' Transition (Maybe TransitionStorageClass)
+tStorageClass = lens _tStorageClass (\ s a -> s{_tStorageClass = a});
+
+instance FromXML Transition where
+        parseXML x
+          = Transition' <$>
+              (x .@? "Days") <*> (x .@? "Date") <*>
+                (x .@? "StorageClass")
+
+instance Hashable Transition where
+
+instance NFData Transition where
+
+instance ToXML Transition where
+        toXML Transition'{..}
+          = mconcat
+              ["Days" @= _tDays, "Date" @= _tDate,
+               "StorageClass" @= _tStorageClass]
+
+-- | /See:/ 'versioningConfiguration' smart constructor.
+data VersioningConfiguration = VersioningConfiguration'
+  { _vcStatus    :: !(Maybe BucketVersioningStatus)
+  , _vcMFADelete :: !(Maybe MFADelete)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'VersioningConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vcStatus' - The versioning state of the bucket.
+--
+-- * 'vcMFADelete' - Specifies whether MFA delete is enabled in the bucket versioning configuration. This element is only returned if the bucket has been configured with MFA delete. If the bucket has never been so configured, this element is not returned.
+versioningConfiguration
+    :: VersioningConfiguration
+versioningConfiguration =
+  VersioningConfiguration' {_vcStatus = Nothing, _vcMFADelete = Nothing}
+
+
+-- | The versioning state of the bucket.
+vcStatus :: Lens' VersioningConfiguration (Maybe BucketVersioningStatus)
+vcStatus = lens _vcStatus (\ s a -> s{_vcStatus = a});
+
+-- | Specifies whether MFA delete is enabled in the bucket versioning configuration. This element is only returned if the bucket has been configured with MFA delete. If the bucket has never been so configured, this element is not returned.
+vcMFADelete :: Lens' VersioningConfiguration (Maybe MFADelete)
+vcMFADelete = lens _vcMFADelete (\ s a -> s{_vcMFADelete = a});
+
+instance Hashable VersioningConfiguration where
+
+instance NFData VersioningConfiguration where
+
+instance ToXML VersioningConfiguration where
+        toXML VersioningConfiguration'{..}
+          = mconcat
+              ["Status" @= _vcStatus, "MfaDelete" @= _vcMFADelete]
+
+-- | /See:/ 'websiteConfiguration' smart constructor.
+data WebsiteConfiguration = WebsiteConfiguration'
+  { _wcRedirectAllRequestsTo :: !(Maybe RedirectAllRequestsTo)
+  , _wcErrorDocument         :: !(Maybe ErrorDocument)
+  , _wcIndexDocument         :: !(Maybe IndexDocument)
+  , _wcRoutingRules          :: !(Maybe [RoutingRule])
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'WebsiteConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'wcRedirectAllRequestsTo' - Undocumented member.
+--
+-- * 'wcErrorDocument' - Undocumented member.
+--
+-- * 'wcIndexDocument' - Undocumented member.
+--
+-- * 'wcRoutingRules' - Undocumented member.
+websiteConfiguration
+    :: WebsiteConfiguration
+websiteConfiguration =
+  WebsiteConfiguration'
+  { _wcRedirectAllRequestsTo = Nothing
+  , _wcErrorDocument = Nothing
+  , _wcIndexDocument = Nothing
+  , _wcRoutingRules = Nothing
+  }
+
+
+-- | Undocumented member.
+wcRedirectAllRequestsTo :: Lens' WebsiteConfiguration (Maybe RedirectAllRequestsTo)
+wcRedirectAllRequestsTo = lens _wcRedirectAllRequestsTo (\ s a -> s{_wcRedirectAllRequestsTo = a});
+
+-- | Undocumented member.
+wcErrorDocument :: Lens' WebsiteConfiguration (Maybe ErrorDocument)
+wcErrorDocument = lens _wcErrorDocument (\ s a -> s{_wcErrorDocument = a});
+
+-- | Undocumented member.
+wcIndexDocument :: Lens' WebsiteConfiguration (Maybe IndexDocument)
+wcIndexDocument = lens _wcIndexDocument (\ s a -> s{_wcIndexDocument = a});
+
+-- | Undocumented member.
+wcRoutingRules :: Lens' WebsiteConfiguration [RoutingRule]
+wcRoutingRules = lens _wcRoutingRules (\ s a -> s{_wcRoutingRules = a}) . _Default . _Coerce;
+
+instance Hashable WebsiteConfiguration where
+
+instance NFData WebsiteConfiguration where
 
 instance ToXML WebsiteConfiguration where
         toXML WebsiteConfiguration'{..}
diff --git a/gen/Network/AWS/S3/Types/Sum.hs b/gen/Network/AWS/S3/Types/Sum.hs
--- a/gen/Network/AWS/S3/Types/Sum.hs
+++ b/gen/Network/AWS/S3/Types/Sum.hs
@@ -9,21 +9,22 @@
 
 -- |
 -- Module      : Network.AWS.S3.Types.Sum
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 module Network.AWS.S3.Types.Sum where
 
-import           Network.AWS.Prelude
-import           Network.AWS.S3.Internal
+import Network.AWS.Prelude
+import Network.AWS.S3.Internal
 
 data AnalyticsS3ExportFileFormat =
-    CSV
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  CSV
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText AnalyticsS3ExportFileFormat where
     parser = takeLowerText >>= \case
         "csv" -> pure CSV
@@ -47,10 +48,11 @@
     toXML = toXMLText
 
 data BucketAccelerateStatus
-    = BASEnabled
-    | BASSuspended
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = BASEnabled
+  | BASSuspended
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText BucketAccelerateStatus where
     parser = takeLowerText >>= \case
         "enabled" -> pure BASEnabled
@@ -76,12 +78,13 @@
     toXML = toXMLText
 
 data BucketCannedACL
-    = BAuthenticatedRead
-    | BPrivate
-    | BPublicRead
-    | BPublicReadWrite
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = BAuthenticatedRead
+  | BPrivate
+  | BPublicRead
+  | BPublicReadWrite
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText BucketCannedACL where
     parser = takeLowerText >>= \case
         "authenticated-read" -> pure BAuthenticatedRead
@@ -108,11 +111,12 @@
     toXML = toXMLText
 
 data BucketLogsPermission
-    = FullControl
-    | Read
-    | Write
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = FullControl
+  | Read
+  | Write
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText BucketLogsPermission where
     parser = takeLowerText >>= \case
         "full_control" -> pure FullControl
@@ -140,10 +144,11 @@
     toXML = toXMLText
 
 data BucketVersioningStatus
-    = BVSEnabled
-    | BVSSuspended
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = BVSEnabled
+  | BVSSuspended
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText BucketVersioningStatus where
     parser = takeLowerText >>= \case
         "enabled" -> pure BVSEnabled
@@ -170,9 +175,10 @@
 
 -- | Requests Amazon S3 to encode the object keys in the response and specifies the encoding method to use. An object key may contain any Unicode character; however, XML 1.0 parser cannot parse some characters, such as characters with an ASCII value from 0 to 10. For characters that are not supported in XML 1.0, you can add this parameter to request that Amazon S3 encode the keys in the response.
 data EncodingType =
-    URL
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  URL
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText EncodingType where
     parser = takeLowerText >>= \case
         "url" -> pure URL
@@ -197,17 +203,18 @@
 
 -- | Bucket event for which to send notifications.
 data Event
-    = S3ObjectCreated
-    | S3ObjectCreatedCompleteMultipartUpload
-    | S3ObjectCreatedCopy
-    | S3ObjectCreatedPost
-    | S3ObjectCreatedPut
-    | S3ObjectRemoved
-    | S3ObjectRemovedDelete
-    | S3ObjectRemovedDeleteMarkerCreated
-    | S3ReducedRedundancyLostObject
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = S3ObjectCreated
+  | S3ObjectCreatedCompleteMultipartUpload
+  | S3ObjectCreatedCopy
+  | S3ObjectCreatedPost
+  | S3ObjectCreatedPut
+  | S3ObjectRemoved
+  | S3ObjectRemovedDelete
+  | S3ObjectRemovedDeleteMarkerCreated
+  | S3ReducedRedundancyLostObject
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText Event where
     parser = takeLowerText >>= \case
         "s3:objectcreated:*" -> pure S3ObjectCreated
@@ -247,10 +254,11 @@
     toXML = toXMLText
 
 data ExpirationStatus
-    = ESDisabled
-    | ESEnabled
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = ESDisabled
+  | ESEnabled
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText ExpirationStatus where
     parser = takeLowerText >>= \case
         "disabled" -> pure ESDisabled
@@ -276,10 +284,11 @@
     toXML = toXMLText
 
 data FilterRuleName
-    = Prefix
-    | Suffix
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = Prefix
+  | Suffix
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText FilterRuleName where
     parser = takeLowerText >>= \case
         "prefix" -> pure Prefix
@@ -305,9 +314,10 @@
     toXML = toXMLText
 
 data InventoryFormat =
-    IFCSV
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  IFCSV
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText InventoryFormat where
     parser = takeLowerText >>= \case
         "csv" -> pure IFCSV
@@ -331,10 +341,11 @@
     toXML = toXMLText
 
 data InventoryFrequency
-    = Daily
-    | Weekly
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = Daily
+  | Weekly
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText InventoryFrequency where
     parser = takeLowerText >>= \case
         "daily" -> pure Daily
@@ -360,10 +371,11 @@
     toXML = toXMLText
 
 data InventoryIncludedObjectVersions
-    = All
-    | Current
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = All
+  | Current
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText InventoryIncludedObjectVersions where
     parser = takeLowerText >>= \case
         "all" -> pure All
@@ -389,28 +401,32 @@
     toXML = toXMLText
 
 data InventoryOptionalField
-    = FieldETag
-    | FieldIsMultipartUploaded
-    | FieldLastModifiedDate
-    | FieldReplicationStatus
-    | FieldSize
-    | FieldStorageClass
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = FieldETag
+  | FieldEncryptionStatus
+  | FieldIsMultipartUploaded
+  | FieldLastModifiedDate
+  | FieldReplicationStatus
+  | FieldSize
+  | FieldStorageClass
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText InventoryOptionalField where
     parser = takeLowerText >>= \case
         "etag" -> pure FieldETag
+        "encryptionstatus" -> pure FieldEncryptionStatus
         "ismultipartuploaded" -> pure FieldIsMultipartUploaded
         "lastmodifieddate" -> pure FieldLastModifiedDate
         "replicationstatus" -> pure FieldReplicationStatus
         "size" -> pure FieldSize
         "storageclass" -> pure FieldStorageClass
         e -> fromTextError $ "Failure parsing InventoryOptionalField from value: '" <> e
-           <> "'. Accepted values: etag, ismultipartuploaded, lastmodifieddate, replicationstatus, size, storageclass"
+           <> "'. Accepted values: etag, encryptionstatus, ismultipartuploaded, lastmodifieddate, replicationstatus, size, storageclass"
 
 instance ToText InventoryOptionalField where
     toText = \case
         FieldETag -> "ETag"
+        FieldEncryptionStatus -> "EncryptionStatus"
         FieldIsMultipartUploaded -> "IsMultipartUploaded"
         FieldLastModifiedDate -> "LastModifiedDate"
         FieldReplicationStatus -> "ReplicationStatus"
@@ -430,10 +446,11 @@
     toXML = toXMLText
 
 data MFADelete
-    = MDDisabled
-    | MDEnabled
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = MDDisabled
+  | MDEnabled
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText MFADelete where
     parser = takeLowerText >>= \case
         "disabled" -> pure MDDisabled
@@ -456,10 +473,11 @@
     toXML = toXMLText
 
 data MFADeleteStatus
-    = MDSDisabled
-    | MDSEnabled
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = MDSDisabled
+  | MDSEnabled
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText MFADeleteStatus where
     parser = takeLowerText >>= \case
         "disabled" -> pure MDSDisabled
@@ -482,10 +500,11 @@
     parseXML = parseXMLText "MFADeleteStatus"
 
 data MetadataDirective
-    = MDCopy
-    | MDReplace
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = MDCopy
+  | MDReplace
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText MetadataDirective where
     parser = takeLowerText >>= \case
         "copy" -> pure MDCopy
@@ -508,15 +527,16 @@
     toXML = toXMLText
 
 data ObjectCannedACL
-    = OAWSExecRead
-    | OAuthenticatedRead
-    | OBucketOwnerFullControl
-    | OBucketOwnerRead
-    | OPrivate
-    | OPublicRead
-    | OPublicReadWrite
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = OAWSExecRead
+  | OAuthenticatedRead
+  | OBucketOwnerFullControl
+  | OBucketOwnerRead
+  | OPrivate
+  | OPublicRead
+  | OPublicReadWrite
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText ObjectCannedACL where
     parser = takeLowerText >>= \case
         "aws-exec-read" -> pure OAWSExecRead
@@ -549,12 +569,13 @@
     toXML = toXMLText
 
 data ObjectStorageClass
-    = OSCGlacier
-    | OSCReducedRedundancy
-    | OSCStandard
-    | OSCStandardIA
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = OSCGlacier
+  | OSCReducedRedundancy
+  | OSCStandard
+  | OSCStandardIA
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText ObjectStorageClass where
     parser = takeLowerText >>= \case
         "glacier" -> pure OSCGlacier
@@ -581,9 +602,10 @@
     parseXML = parseXMLText "ObjectStorageClass"
 
 data ObjectVersionStorageClass =
-    OVSCStandard
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  OVSCStandard
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText ObjectVersionStorageClass where
     parser = takeLowerText >>= \case
         "standard" -> pure OVSCStandard
@@ -603,11 +625,39 @@
 instance FromXML ObjectVersionStorageClass where
     parseXML = parseXMLText "ObjectVersionStorageClass"
 
+data OwnerOverride =
+  Destination
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText OwnerOverride where
+    parser = takeLowerText >>= \case
+        "destination" -> pure Destination
+        e -> fromTextError $ "Failure parsing OwnerOverride from value: '" <> e
+           <> "'. Accepted values: destination"
+
+instance ToText OwnerOverride where
+    toText = \case
+        Destination -> "Destination"
+
+instance Hashable     OwnerOverride
+instance NFData       OwnerOverride
+instance ToByteString OwnerOverride
+instance ToQuery      OwnerOverride
+instance ToHeader     OwnerOverride
+
+instance FromXML OwnerOverride where
+    parseXML = parseXMLText "OwnerOverride"
+
+instance ToXML OwnerOverride where
+    toXML = toXMLText
+
 data Payer
-    = BucketOwner
-    | Requester
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = BucketOwner
+  | Requester
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText Payer where
     parser = takeLowerText >>= \case
         "bucketowner" -> pure BucketOwner
@@ -633,13 +683,14 @@
     toXML = toXMLText
 
 data Permission
-    = PFullControl
-    | PRead
-    | PReadAcp
-    | PWrite
-    | PWriteAcp
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = PFullControl
+  | PRead
+  | PReadAcp
+  | PWrite
+  | PWriteAcp
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText Permission where
     parser = takeLowerText >>= \case
         "full_control" -> pure PFullControl
@@ -671,10 +722,11 @@
     toXML = toXMLText
 
 data Protocol
-    = HTTP
-    | HTTPS
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = HTTP
+  | HTTPS
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText Protocol where
     parser = takeLowerText >>= \case
         "http" -> pure HTTP
@@ -700,10 +752,11 @@
     toXML = toXMLText
 
 data ReplicationRuleStatus
-    = Disabled
-    | Enabled
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = Disabled
+  | Enabled
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText ReplicationRuleStatus where
     parser = takeLowerText >>= \case
         "disabled" -> pure Disabled
@@ -729,24 +782,25 @@
     toXML = toXMLText
 
 data ReplicationStatus
-    = Complete
-    | Failed
-    | Pending
-    | Replica
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = Completed
+  | Failed
+  | Pending
+  | Replica
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText ReplicationStatus where
     parser = takeLowerText >>= \case
-        "complete" -> pure Complete
+        "completed" -> pure Completed
         "failed" -> pure Failed
         "pending" -> pure Pending
         "replica" -> pure Replica
         e -> fromTextError $ "Failure parsing ReplicationStatus from value: '" <> e
-           <> "'. Accepted values: complete, failed, pending, replica"
+           <> "'. Accepted values: completed, failed, pending, replica"
 
 instance ToText ReplicationStatus where
     toText = \case
-        Complete -> "COMPLETE"
+        Completed -> "COMPLETED"
         Failed -> "FAILED"
         Pending -> "PENDING"
         Replica -> "REPLICA"
@@ -762,9 +816,10 @@
 
 -- | If present, indicates that the requester was successfully charged for the request.
 data RequestCharged =
-    RCRequester
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  RCRequester
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText RequestCharged where
     parser = takeLowerText >>= \case
         "requester" -> pure RCRequester
@@ -786,9 +841,10 @@
 
 -- | Confirms that the requester knows that she or he will be charged for the request. Bucket owners need not specify this parameter in their requests. Documentation on downloading objects from requester pays buckets can be found at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html
 data RequestPayer =
-    RPRequester
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  RPRequester
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText RequestPayer where
     parser = takeLowerText >>= \case
         "requester" -> pure RPRequester
@@ -809,10 +865,11 @@
     toXML = toXMLText
 
 data ServerSideEncryption
-    = AES256
-    | AWSKMS
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = AES256
+  | AWSKMS
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText ServerSideEncryption where
     parser = takeLowerText >>= \case
         "aes256" -> pure AES256
@@ -837,12 +894,43 @@
 instance ToXML ServerSideEncryption where
     toXML = toXMLText
 
+data SseKMSEncryptedObjectsStatus
+  = SKEOSDisabled
+  | SKEOSEnabled
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText SseKMSEncryptedObjectsStatus where
+    parser = takeLowerText >>= \case
+        "disabled" -> pure SKEOSDisabled
+        "enabled" -> pure SKEOSEnabled
+        e -> fromTextError $ "Failure parsing SseKMSEncryptedObjectsStatus from value: '" <> e
+           <> "'. Accepted values: disabled, enabled"
+
+instance ToText SseKMSEncryptedObjectsStatus where
+    toText = \case
+        SKEOSDisabled -> "Disabled"
+        SKEOSEnabled -> "Enabled"
+
+instance Hashable     SseKMSEncryptedObjectsStatus
+instance NFData       SseKMSEncryptedObjectsStatus
+instance ToByteString SseKMSEncryptedObjectsStatus
+instance ToQuery      SseKMSEncryptedObjectsStatus
+instance ToHeader     SseKMSEncryptedObjectsStatus
+
+instance FromXML SseKMSEncryptedObjectsStatus where
+    parseXML = parseXMLText "SseKMSEncryptedObjectsStatus"
+
+instance ToXML SseKMSEncryptedObjectsStatus where
+    toXML = toXMLText
+
 data StorageClass
-    = ReducedRedundancy
-    | Standard
-    | StandardIA
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = ReducedRedundancy
+  | Standard
+  | StandardIA
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText StorageClass where
     parser = takeLowerText >>= \case
         "reduced_redundancy" -> pure ReducedRedundancy
@@ -870,9 +958,10 @@
     toXML = toXMLText
 
 data StorageClassAnalysisSchemaVersion =
-    V1
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  V1
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText StorageClassAnalysisSchemaVersion where
     parser = takeLowerText >>= \case
         "v_1" -> pure V1
@@ -896,10 +985,11 @@
     toXML = toXMLText
 
 data TaggingDirective
-    = Copy
-    | Replace
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = Copy
+  | Replace
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText TaggingDirective where
     parser = takeLowerText >>= \case
         "copy" -> pure Copy
@@ -922,11 +1012,12 @@
     toXML = toXMLText
 
 data Tier
-    = TBulk
-    | TExpedited
-    | TStandard
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = TBulk
+  | TExpedited
+  | TStandard
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText Tier where
     parser = takeLowerText >>= \case
         "bulk" -> pure TBulk
@@ -951,10 +1042,11 @@
     toXML = toXMLText
 
 data TransitionStorageClass
-    = TSCGlacier
-    | TSCStandardIA
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = TSCGlacier
+  | TSCStandardIA
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
+
 instance FromText TransitionStorageClass where
     parser = takeLowerText >>= \case
         "glacier" -> pure TSCGlacier
@@ -980,10 +1072,11 @@
     toXML = toXMLText
 
 data Type
-    = AmazonCustomerByEmail
-    | CanonicalUser
-    | Group
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+  = AmazonCustomerByEmail
+  | CanonicalUser
+  | Group
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
 
 instance FromText Type where
     parser = takeLowerText >>= \case
diff --git a/gen/Network/AWS/S3/UploadPart.hs b/gen/Network/AWS/S3/UploadPart.hs
--- a/gen/Network/AWS/S3/UploadPart.hs
+++ b/gen/Network/AWS/S3/UploadPart.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.UploadPart
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -54,28 +54,29 @@
     , uprsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'uploadPart' smart constructor.
 data UploadPart = UploadPart'
-    { _upContentLength        :: !(Maybe Integer)
-    , _upSSECustomerAlgorithm :: !(Maybe Text)
-    , _upSSECustomerKey       :: !(Maybe (Sensitive Text))
-    , _upRequestPayer         :: !(Maybe RequestPayer)
-    , _upSSECustomerKeyMD5    :: !(Maybe Text)
-    , _upContentMD5           :: !(Maybe Text)
-    , _upBucket               :: !BucketName
-    , _upKey                  :: !ObjectKey
-    , _upPartNumber           :: !Int
-    , _upUploadId             :: !Text
-    , _upBody                 :: !RqBody
-    } deriving (Show,Generic)
+  { _upContentLength        :: !(Maybe Integer)
+  , _upSSECustomerAlgorithm :: !(Maybe Text)
+  , _upSSECustomerKey       :: !(Maybe (Sensitive Text))
+  , _upRequestPayer         :: !(Maybe RequestPayer)
+  , _upSSECustomerKeyMD5    :: !(Maybe Text)
+  , _upContentMD5           :: !(Maybe Text)
+  , _upBucket               :: !BucketName
+  , _upKey                  :: !ObjectKey
+  , _upPartNumber           :: !Int
+  , _upUploadId             :: !Text
+  , _upBody                 :: !RqBody
+  } deriving (Show, Generic)
 
+
 -- | Creates a value of 'UploadPart' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -109,20 +110,21 @@
     -> RqBody -- ^ 'upBody'
     -> UploadPart
 uploadPart pBucket_ pKey_ pPartNumber_ pUploadId_ pBody_ =
-    UploadPart'
-    { _upContentLength = Nothing
-    , _upSSECustomerAlgorithm = Nothing
-    , _upSSECustomerKey = Nothing
-    , _upRequestPayer = Nothing
-    , _upSSECustomerKeyMD5 = Nothing
-    , _upContentMD5 = Nothing
-    , _upBucket = pBucket_
-    , _upKey = pKey_
-    , _upPartNumber = pPartNumber_
-    , _upUploadId = pUploadId_
-    , _upBody = pBody_
-    }
+  UploadPart'
+  { _upContentLength = Nothing
+  , _upSSECustomerAlgorithm = Nothing
+  , _upSSECustomerKey = Nothing
+  , _upRequestPayer = Nothing
+  , _upSSECustomerKeyMD5 = Nothing
+  , _upContentMD5 = Nothing
+  , _upBucket = pBucket_
+  , _upKey = pKey_
+  , _upPartNumber = pPartNumber_
+  , _upUploadId = pUploadId_
+  , _upBody = pBody_
+  }
 
+
 -- | Size of the body in bytes. This parameter is useful when the size of the body cannot be determined automatically.
 upContentLength :: Lens' UploadPart (Maybe Integer)
 upContentLength = lens _upContentLength (\ s a -> s{_upContentLength = a});
@@ -214,15 +216,16 @@
 
 -- | /See:/ 'uploadPartResponse' smart constructor.
 data UploadPartResponse = UploadPartResponse'
-    { _uprsRequestCharged       :: !(Maybe RequestCharged)
-    , _uprsETag                 :: !(Maybe ETag)
-    , _uprsSSECustomerAlgorithm :: !(Maybe Text)
-    , _uprsSSECustomerKeyMD5    :: !(Maybe Text)
-    , _uprsSSEKMSKeyId          :: !(Maybe (Sensitive Text))
-    , _uprsServerSideEncryption :: !(Maybe ServerSideEncryption)
-    , _uprsResponseStatus       :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _uprsRequestCharged       :: !(Maybe RequestCharged)
+  , _uprsETag                 :: !(Maybe ETag)
+  , _uprsSSECustomerAlgorithm :: !(Maybe Text)
+  , _uprsSSECustomerKeyMD5    :: !(Maybe Text)
+  , _uprsSSEKMSKeyId          :: !(Maybe (Sensitive Text))
+  , _uprsServerSideEncryption :: !(Maybe ServerSideEncryption)
+  , _uprsResponseStatus       :: !Int
+  } deriving (Eq, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'UploadPartResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -244,16 +247,17 @@
     :: Int -- ^ 'uprsResponseStatus'
     -> UploadPartResponse
 uploadPartResponse pResponseStatus_ =
-    UploadPartResponse'
-    { _uprsRequestCharged = Nothing
-    , _uprsETag = Nothing
-    , _uprsSSECustomerAlgorithm = Nothing
-    , _uprsSSECustomerKeyMD5 = Nothing
-    , _uprsSSEKMSKeyId = Nothing
-    , _uprsServerSideEncryption = Nothing
-    , _uprsResponseStatus = pResponseStatus_
-    }
+  UploadPartResponse'
+  { _uprsRequestCharged = Nothing
+  , _uprsETag = Nothing
+  , _uprsSSECustomerAlgorithm = Nothing
+  , _uprsSSECustomerKeyMD5 = Nothing
+  , _uprsSSEKMSKeyId = Nothing
+  , _uprsServerSideEncryption = Nothing
+  , _uprsResponseStatus = pResponseStatus_
+  }
 
+
 -- | Undocumented member.
 uprsRequestCharged :: Lens' UploadPartResponse (Maybe RequestCharged)
 uprsRequestCharged = lens _uprsRequestCharged (\ s a -> s{_uprsRequestCharged = a});
@@ -282,4 +286,4 @@
 uprsResponseStatus :: Lens' UploadPartResponse Int
 uprsResponseStatus = lens _uprsResponseStatus (\ s a -> s{_uprsResponseStatus = a});
 
-instance NFData UploadPartResponse
+instance NFData UploadPartResponse where
diff --git a/gen/Network/AWS/S3/UploadPartCopy.hs b/gen/Network/AWS/S3/UploadPartCopy.hs
--- a/gen/Network/AWS/S3/UploadPartCopy.hs
+++ b/gen/Network/AWS/S3/UploadPartCopy.hs
@@ -12,9 +12,9 @@
 
 -- |
 -- Module      : Network.AWS.S3.UploadPartCopy
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
@@ -57,34 +57,35 @@
     , upcrsResponseStatus
     ) where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-import           Network.AWS.S3.Types
-import           Network.AWS.S3.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
 
 -- | /See:/ 'uploadPartCopy' smart constructor.
 data UploadPartCopy = UploadPartCopy'
-    { _upcCopySourceIfModifiedSince      :: !(Maybe RFC822)
-    , _upcCopySourceIfUnmodifiedSince    :: !(Maybe RFC822)
-    , _upcCopySourceRange                :: !(Maybe Text)
-    , _upcCopySourceSSECustomerKeyMD5    :: !(Maybe Text)
-    , _upcCopySourceIfNoneMatch          :: !(Maybe Text)
-    , _upcSSECustomerAlgorithm           :: !(Maybe Text)
-    , _upcSSECustomerKey                 :: !(Maybe (Sensitive Text))
-    , _upcRequestPayer                   :: !(Maybe RequestPayer)
-    , _upcCopySourceIfMatch              :: !(Maybe Text)
-    , _upcSSECustomerKeyMD5              :: !(Maybe Text)
-    , _upcCopySourceSSECustomerKey       :: !(Maybe (Sensitive Text))
-    , _upcCopySourceSSECustomerAlgorithm :: !(Maybe Text)
-    , _upcBucket                         :: !BucketName
-    , _upcCopySource                     :: !Text
-    , _upcKey                            :: !ObjectKey
-    , _upcPartNumber                     :: !Int
-    , _upcUploadId                       :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _upcCopySourceIfModifiedSince      :: !(Maybe RFC822)
+  , _upcCopySourceIfUnmodifiedSince    :: !(Maybe RFC822)
+  , _upcCopySourceRange                :: !(Maybe Text)
+  , _upcCopySourceSSECustomerKeyMD5    :: !(Maybe Text)
+  , _upcCopySourceIfNoneMatch          :: !(Maybe Text)
+  , _upcSSECustomerAlgorithm           :: !(Maybe Text)
+  , _upcSSECustomerKey                 :: !(Maybe (Sensitive Text))
+  , _upcRequestPayer                   :: !(Maybe RequestPayer)
+  , _upcCopySourceIfMatch              :: !(Maybe Text)
+  , _upcSSECustomerKeyMD5              :: !(Maybe Text)
+  , _upcCopySourceSSECustomerKey       :: !(Maybe (Sensitive Text))
+  , _upcCopySourceSSECustomerAlgorithm :: !(Maybe Text)
+  , _upcBucket                         :: !BucketName
+  , _upcCopySource                     :: !Text
+  , _upcKey                            :: !ObjectKey
+  , _upcPartNumber                     :: !Int
+  , _upcUploadId                       :: !Text
+  } deriving (Eq, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'UploadPartCopy' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -130,26 +131,27 @@
     -> Text -- ^ 'upcUploadId'
     -> UploadPartCopy
 uploadPartCopy pBucket_ pCopySource_ pKey_ pPartNumber_ pUploadId_ =
-    UploadPartCopy'
-    { _upcCopySourceIfModifiedSince = Nothing
-    , _upcCopySourceIfUnmodifiedSince = Nothing
-    , _upcCopySourceRange = Nothing
-    , _upcCopySourceSSECustomerKeyMD5 = Nothing
-    , _upcCopySourceIfNoneMatch = Nothing
-    , _upcSSECustomerAlgorithm = Nothing
-    , _upcSSECustomerKey = Nothing
-    , _upcRequestPayer = Nothing
-    , _upcCopySourceIfMatch = Nothing
-    , _upcSSECustomerKeyMD5 = Nothing
-    , _upcCopySourceSSECustomerKey = Nothing
-    , _upcCopySourceSSECustomerAlgorithm = Nothing
-    , _upcBucket = pBucket_
-    , _upcCopySource = pCopySource_
-    , _upcKey = pKey_
-    , _upcPartNumber = pPartNumber_
-    , _upcUploadId = pUploadId_
-    }
+  UploadPartCopy'
+  { _upcCopySourceIfModifiedSince = Nothing
+  , _upcCopySourceIfUnmodifiedSince = Nothing
+  , _upcCopySourceRange = Nothing
+  , _upcCopySourceSSECustomerKeyMD5 = Nothing
+  , _upcCopySourceIfNoneMatch = Nothing
+  , _upcSSECustomerAlgorithm = Nothing
+  , _upcSSECustomerKey = Nothing
+  , _upcRequestPayer = Nothing
+  , _upcCopySourceIfMatch = Nothing
+  , _upcSSECustomerKeyMD5 = Nothing
+  , _upcCopySourceSSECustomerKey = Nothing
+  , _upcCopySourceSSECustomerAlgorithm = Nothing
+  , _upcBucket = pBucket_
+  , _upcCopySource = pCopySource_
+  , _upcKey = pKey_
+  , _upcPartNumber = pPartNumber_
+  , _upcUploadId = pUploadId_
+  }
 
+
 -- | Copies the object if it has been modified since the specified time.
 upcCopySourceIfModifiedSince :: Lens' UploadPartCopy (Maybe UTCTime)
 upcCopySourceIfModifiedSince = lens _upcCopySourceIfModifiedSince (\ s a -> s{_upcCopySourceIfModifiedSince = a}) . mapping _Time;
@@ -237,9 +239,9 @@
                      <*> (h .#? "x-amz-server-side-encryption")
                      <*> (pure (fromEnum s)))
 
-instance Hashable UploadPartCopy
+instance Hashable UploadPartCopy where
 
-instance NFData UploadPartCopy
+instance NFData UploadPartCopy where
 
 instance ToHeaders UploadPartCopy where
         toHeaders UploadPartCopy'{..}
@@ -280,16 +282,17 @@
 
 -- | /See:/ 'uploadPartCopyResponse' smart constructor.
 data UploadPartCopyResponse = UploadPartCopyResponse'
-    { _upcrsRequestCharged       :: !(Maybe RequestCharged)
-    , _upcrsCopyPartResult       :: !(Maybe CopyPartResult)
-    , _upcrsSSECustomerAlgorithm :: !(Maybe Text)
-    , _upcrsCopySourceVersionId  :: !(Maybe Text)
-    , _upcrsSSECustomerKeyMD5    :: !(Maybe Text)
-    , _upcrsSSEKMSKeyId          :: !(Maybe (Sensitive Text))
-    , _upcrsServerSideEncryption :: !(Maybe ServerSideEncryption)
-    , _upcrsResponseStatus       :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+  { _upcrsRequestCharged       :: !(Maybe RequestCharged)
+  , _upcrsCopyPartResult       :: !(Maybe CopyPartResult)
+  , _upcrsSSECustomerAlgorithm :: !(Maybe Text)
+  , _upcrsCopySourceVersionId  :: !(Maybe Text)
+  , _upcrsSSECustomerKeyMD5    :: !(Maybe Text)
+  , _upcrsSSEKMSKeyId          :: !(Maybe (Sensitive Text))
+  , _upcrsServerSideEncryption :: !(Maybe ServerSideEncryption)
+  , _upcrsResponseStatus       :: !Int
+  } deriving (Eq, Show, Data, Typeable, Generic)
 
+
 -- | Creates a value of 'UploadPartCopyResponse' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
@@ -313,17 +316,18 @@
     :: Int -- ^ 'upcrsResponseStatus'
     -> UploadPartCopyResponse
 uploadPartCopyResponse pResponseStatus_ =
-    UploadPartCopyResponse'
-    { _upcrsRequestCharged = Nothing
-    , _upcrsCopyPartResult = Nothing
-    , _upcrsSSECustomerAlgorithm = Nothing
-    , _upcrsCopySourceVersionId = Nothing
-    , _upcrsSSECustomerKeyMD5 = Nothing
-    , _upcrsSSEKMSKeyId = Nothing
-    , _upcrsServerSideEncryption = Nothing
-    , _upcrsResponseStatus = pResponseStatus_
-    }
+  UploadPartCopyResponse'
+  { _upcrsRequestCharged = Nothing
+  , _upcrsCopyPartResult = Nothing
+  , _upcrsSSECustomerAlgorithm = Nothing
+  , _upcrsCopySourceVersionId = Nothing
+  , _upcrsSSECustomerKeyMD5 = Nothing
+  , _upcrsSSEKMSKeyId = Nothing
+  , _upcrsServerSideEncryption = Nothing
+  , _upcrsResponseStatus = pResponseStatus_
+  }
 
+
 -- | Undocumented member.
 upcrsRequestCharged :: Lens' UploadPartCopyResponse (Maybe RequestCharged)
 upcrsRequestCharged = lens _upcrsRequestCharged (\ s a -> s{_upcrsRequestCharged = a});
@@ -356,4 +360,4 @@
 upcrsResponseStatus :: Lens' UploadPartCopyResponse Int
 upcrsResponseStatus = lens _upcrsResponseStatus (\ s a -> s{_upcrsResponseStatus = a});
 
-instance NFData UploadPartCopyResponse
+instance NFData UploadPartCopyResponse where
diff --git a/gen/Network/AWS/S3/Waiters.hs b/gen/Network/AWS/S3/Waiters.hs
--- a/gen/Network/AWS/S3/Waiters.hs
+++ b/gen/Network/AWS/S3/Waiters.hs
@@ -7,61 +7,65 @@
 
 -- |
 -- Module      : Network.AWS.S3.Waiters
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 module Network.AWS.S3.Waiters where
 
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.S3.HeadBucket
-import           Network.AWS.S3.HeadBucket
-import           Network.AWS.S3.HeadObject
-import           Network.AWS.S3.HeadObject
-import           Network.AWS.S3.Types
-import           Network.AWS.Waiter
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.S3.HeadBucket
+import Network.AWS.S3.HeadBucket
+import Network.AWS.S3.HeadObject
+import Network.AWS.S3.HeadObject
+import Network.AWS.S3.Types
+import Network.AWS.Waiter
 
 -- | Polls 'Network.AWS.S3.HeadObject' every 5 seconds until a successful state is reached. An error is returned after 20 failed checks.
 objectNotExists :: Wait HeadObject
 objectNotExists =
-    Wait
-    { _waitName = "ObjectNotExists"
-    , _waitAttempts = 20
-    , _waitDelay = 5
-    , _waitAcceptors = [matchStatus 404 AcceptSuccess]
-    }
+  Wait
+  { _waitName = "ObjectNotExists"
+  , _waitAttempts = 20
+  , _waitDelay = 5
+  , _waitAcceptors = [matchStatus 404 AcceptSuccess]
+  }
 
+
 -- | Polls 'Network.AWS.S3.HeadBucket' every 5 seconds until a successful state is reached. An error is returned after 20 failed checks.
 bucketExists :: Wait HeadBucket
 bucketExists =
-    Wait
-    { _waitName = "BucketExists"
-    , _waitAttempts = 20
-    , _waitDelay = 5
-    , _waitAcceptors = [ matchStatus 200 AcceptSuccess
-                       , matchStatus 404 AcceptRetry]
-    }
+  Wait
+  { _waitName = "BucketExists"
+  , _waitAttempts = 20
+  , _waitDelay = 5
+  , _waitAcceptors =
+      [matchStatus 200 AcceptSuccess, matchStatus 404 AcceptRetry]
+  }
 
+
 -- | Polls 'Network.AWS.S3.HeadObject' every 5 seconds until a successful state is reached. An error is returned after 20 failed checks.
 objectExists :: Wait HeadObject
 objectExists =
-    Wait
-    { _waitName = "ObjectExists"
-    , _waitAttempts = 20
-    , _waitDelay = 5
-    , _waitAcceptors = [ matchStatus 200 AcceptSuccess
-                       , matchStatus 404 AcceptRetry]
-    }
+  Wait
+  { _waitName = "ObjectExists"
+  , _waitAttempts = 20
+  , _waitDelay = 5
+  , _waitAcceptors =
+      [matchStatus 200 AcceptSuccess, matchStatus 404 AcceptRetry]
+  }
 
+
 -- | Polls 'Network.AWS.S3.HeadBucket' every 5 seconds until a successful state is reached. An error is returned after 20 failed checks.
 bucketNotExists :: Wait HeadBucket
 bucketNotExists =
-    Wait
-    { _waitName = "BucketNotExists"
-    , _waitAttempts = 20
-    , _waitDelay = 5
-    , _waitAcceptors = [matchStatus 404 AcceptSuccess]
-    }
+  Wait
+  { _waitName = "BucketNotExists"
+  , _waitAttempts = 20
+  , _waitDelay = 5
+  , _waitAcceptors = [matchStatus 404 AcceptSuccess]
+  }
+
diff --git a/test/Main.hs b/test/Main.hs
--- a/test/Main.hs
+++ b/test/Main.hs
@@ -2,9 +2,9 @@
 
 -- |
 -- Module      : Main
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
diff --git a/test/Test/AWS/Gen/S3.hs b/test/Test/AWS/Gen/S3.hs
--- a/test/Test/AWS/Gen/S3.hs
+++ b/test/Test/AWS/Gen/S3.hs
@@ -5,20 +5,20 @@
 
 -- |
 -- Module      : Test.AWS.Gen.S3
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2017 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 module Test.AWS.Gen.S3 where
 
 import Data.Proxy
+import Network.AWS.S3
 import Test.AWS.Fixture
 import Test.AWS.Prelude
-import Test.Tasty
-import Network.AWS.S3
 import Test.AWS.S3.Internal
+import Test.Tasty
 
 -- Auto-generated: the actual test selection needs to be manually placed into
 -- the top-level so that real test data can be incrementally added.
@@ -154,6 +154,9 @@
 --         , requestDeleteBucketPolicy $
 --             deleteBucketPolicy
 --
+--         , requestGetBucketEncryption $
+--             getBucketEncryption
+--
 --         , requestAbortMultipartUpload $
 --             abortMultipartUpload
 --
@@ -208,6 +211,12 @@
 --         , requestGetBucketPolicy $
 --             getBucketPolicy
 --
+--         , requestPutBucketEncryption $
+--             putBucketEncryption
+--
+--         , requestDeleteBucketEncryption $
+--             deleteBucketEncryption
+--
 --         , requestGetBucketLogging $
 --             getBucketLogging
 --
@@ -367,6 +376,9 @@
 --         , responseDeleteBucketPolicy $
 --             deleteBucketPolicyResponse
 --
+--         , responseGetBucketEncryption $
+--             getBucketEncryptionResponse
+--
 --         , responseAbortMultipartUpload $
 --             abortMultipartUploadResponse
 --
@@ -421,6 +433,12 @@
 --         , responseGetBucketPolicy $
 --             getBucketPolicyResponse
 --
+--         , responsePutBucketEncryption $
+--             putBucketEncryptionResponse
+--
+--         , responseDeleteBucketEncryption $
+--             deleteBucketEncryptionResponse
+--
 --         , responseGetBucketLogging $
 --             getBucketLoggingResponse
 --
@@ -656,6 +674,11 @@
     "DeleteBucketPolicy"
     "fixture/DeleteBucketPolicy.yaml"
 
+requestGetBucketEncryption :: GetBucketEncryption -> TestTree
+requestGetBucketEncryption = req
+    "GetBucketEncryption"
+    "fixture/GetBucketEncryption.yaml"
+
 requestAbortMultipartUpload :: AbortMultipartUpload -> TestTree
 requestAbortMultipartUpload = req
     "AbortMultipartUpload"
@@ -746,6 +769,16 @@
     "GetBucketPolicy"
     "fixture/GetBucketPolicy.yaml"
 
+requestPutBucketEncryption :: PutBucketEncryption -> TestTree
+requestPutBucketEncryption = req
+    "PutBucketEncryption"
+    "fixture/PutBucketEncryption.yaml"
+
+requestDeleteBucketEncryption :: DeleteBucketEncryption -> TestTree
+requestDeleteBucketEncryption = req
+    "DeleteBucketEncryption"
+    "fixture/DeleteBucketEncryption.yaml"
+
 requestGetBucketLogging :: GetBucketLogging -> TestTree
 requestGetBucketLogging = req
     "GetBucketLogging"
@@ -1085,6 +1118,13 @@
     s3
     (Proxy :: Proxy DeleteBucketPolicy)
 
+responseGetBucketEncryption :: GetBucketEncryptionResponse -> TestTree
+responseGetBucketEncryption = res
+    "GetBucketEncryptionResponse"
+    "fixture/GetBucketEncryptionResponse.proto"
+    s3
+    (Proxy :: Proxy GetBucketEncryption)
+
 responseAbortMultipartUpload :: AbortMultipartUploadResponse -> TestTree
 responseAbortMultipartUpload = res
     "AbortMultipartUploadResponse"
@@ -1203,6 +1243,20 @@
     "fixture/GetBucketPolicyResponse.proto"
     s3
     (Proxy :: Proxy GetBucketPolicy)
+
+responsePutBucketEncryption :: PutBucketEncryptionResponse -> TestTree
+responsePutBucketEncryption = res
+    "PutBucketEncryptionResponse"
+    "fixture/PutBucketEncryptionResponse.proto"
+    s3
+    (Proxy :: Proxy PutBucketEncryption)
+
+responseDeleteBucketEncryption :: DeleteBucketEncryptionResponse -> TestTree
+responseDeleteBucketEncryption = res
+    "DeleteBucketEncryptionResponse"
+    "fixture/DeleteBucketEncryptionResponse.proto"
+    s3
+    (Proxy :: Proxy DeleteBucketEncryption)
 
 responseGetBucketLogging :: GetBucketLoggingResponse -> TestTree
 responseGetBucketLogging = res
diff --git a/test/Test/AWS/S3.hs b/test/Test/AWS/S3.hs
--- a/test/Test/AWS/S3.hs
+++ b/test/Test/AWS/S3.hs
@@ -14,12 +14,12 @@
     , fixtures
     ) where
 
-import           Data.Time
-import           Network.AWS.Prelude
-import           Network.AWS.S3
-import           Test.AWS.Gen.S3
-import           Test.AWS.Prelude
-import           Test.AWS.S3.Internal
+import Data.Time
+import Network.AWS.Prelude
+import Network.AWS.S3
+import Test.AWS.Gen.S3
+import Test.AWS.Prelude
+import Test.AWS.S3.Internal
 
 tests :: [TestTree]
 tests =
@@ -98,9 +98,19 @@
                            & pSize         ?~ 10485760
                     ]
 
-        -- FIXME: Has a JSON body, not XML, hence, serialiser error.
-        -- , requestGetBucketPolicyResponse $
-        --     getBucketPolicyResponse 200
-        --         & gbprPolicy ?~ "foo"
+        , responseGetBucketACL $
+            getBucketACLResponse 200
+                & gbarsOwner                  ?~
+                    (owner
+                      & oId                   ?~ "fedcba0987654321"
+                      & oDisplayName          ?~ "foo")
+                & gbarsGrants                 .~
+                    [ grant
+                        & gPermission         ?~ PFullControl
+                        & gGrantee            ?~
+                            (grantee CanonicalUser
+                               & gId          ?~ "1234567890abcdef"
+                               & gDisplayName ?~ "bar")
+                    ]
         ]
     ]
