all: autogenerated update (2018-07-11)

Add:
- cloudprofiler/v2

Update:
- adexchangebuyer2/v2beta1
- androidmanagement/v1
- container/v1beta1
- content/v2
- content/v2sandbox
- drive/v2
- drive/v3
- pubsub/v1
- pubsub/v1beta2
- servicecontrol/v1
- slides/v1
diff --git a/adexchangebuyer2/v2beta1/adexchangebuyer2-api.json b/adexchangebuyer2/v2beta1/adexchangebuyer2-api.json
index 1ff9e56..9c00dd6 100644
--- a/adexchangebuyer2/v2beta1/adexchangebuyer2-api.json
+++ b/adexchangebuyer2/v2beta1/adexchangebuyer2-api.json
@@ -1936,7 +1936,7 @@
       }
     }
   },
-  "revision": "20180614",
+  "revision": "20180709",
   "rootUrl": "https://adexchangebuyer.googleapis.com/",
   "schemas": {
     "AbsoluteDateRange": {
@@ -3643,8 +3643,12 @@
           },
           "type": "array"
         },
+        "disapproval": {
+          "$ref": "Disapproval",
+          "description": "Disapproval bound to this restriction.\nOnly present if status=DISAPPROVED.\nCan be used to filter the response of the\ncreatives.list\nmethod."
+        },
         "disapprovalReasons": {
-          "description": "Any disapprovals bound to this restriction.\nOnly present if status=DISAPPROVED.\nCan be used to filter the response of the\ncreatives.list\nmethod.",
+          "description": "Any disapprovals bound to this restriction.\nOnly present if status=DISAPPROVED.\nCan be used to filter the response of the\ncreatives.list\nmethod.\nDeprecated; please use\ndisapproval\nfield instead.",
           "items": {
             "$ref": "Disapproval"
           },
diff --git a/adexchangebuyer2/v2beta1/adexchangebuyer2-gen.go b/adexchangebuyer2/v2beta1/adexchangebuyer2-gen.go
index b2d5b2f..868a7df 100644
--- a/adexchangebuyer2/v2beta1/adexchangebuyer2-gen.go
+++ b/adexchangebuyer2/v2beta1/adexchangebuyer2-gen.go
@@ -3276,11 +3276,22 @@
 	// Contexts: The contexts for the restriction.
 	Contexts []*ServingContext `json:"contexts,omitempty"`
 
-	// DisapprovalReasons: Any disapprovals bound to this restriction.
+	// Disapproval: Disapproval bound to this restriction.
 	// Only present if status=DISAPPROVED.
 	// Can be used to filter the response of the
 	// creatives.list
 	// method.
+	Disapproval *Disapproval `json:"disapproval,omitempty"`
+
+	// DisapprovalReasons: Any disapprovals bound to this restriction.
+	// Only present if status=DISAPPROVED.
+	// Can be used to filter the response of
+	// the
+	// creatives.list
+	// method.
+	// Deprecated; please use
+	// disapproval
+	// field instead.
 	DisapprovalReasons []*Disapproval `json:"disapprovalReasons,omitempty"`
 
 	// Status: The status of the creative in this context (for example, it
diff --git a/androidmanagement/v1/androidmanagement-api.json b/androidmanagement/v1/androidmanagement-api.json
index 22fd357..824376d 100644
--- a/androidmanagement/v1/androidmanagement-api.json
+++ b/androidmanagement/v1/androidmanagement-api.json
@@ -252,6 +252,17 @@
                   "pattern": "^enterprises/[^/]+/devices/[^/]+$",
                   "required": true,
                   "type": "string"
+                },
+                "wipeDataFlags": {
+                  "description": "Optional flags that control the device wiping behavior.",
+                  "enum": [
+                    "WIPE_DATA_FLAG_UNSPECIFIED",
+                    "PRESERVE_RESET_PROTECTION_DATA",
+                    "WIPE_EXTERNAL_STORAGE"
+                  ],
+                  "location": "query",
+                  "repeated": true,
+                  "type": "string"
                 }
               },
               "path": "v1/{+name}",
@@ -755,7 +766,7 @@
       }
     }
   },
-  "revision": "20180604",
+  "revision": "20180706",
   "rootUrl": "https://androidmanagement.googleapis.com/",
   "schemas": {
     "AlwaysOnVpnPackage": {
@@ -1158,6 +1169,13 @@
         "nonComplianceDetailCondition": {
           "$ref": "NonComplianceDetailCondition",
           "description": "A condition which is satisfied if there exists any matching NonComplianceDetail for the device."
+        },
+        "packageNamesToDisable": {
+          "description": "If set, the rule includes a mitigating action to disable apps specified in the list, but app data is preserved.",
+          "items": {
+            "type": "string"
+          },
+          "type": "array"
         }
       },
       "type": "object"
@@ -1259,6 +1277,20 @@
           "format": "google-datetime",
           "type": "string"
         },
+        "managementMode": {
+          "description": "The type of management mode Android Device Policy takes on the device. This influences which policy settings are supported.",
+          "enum": [
+            "MANAGEMENT_MODE_UNSPECIFIED",
+            "DEVICE_OWNER",
+            "PROFILE_OWNER"
+          ],
+          "enumDescriptions": [
+            "This value is disallowed.",
+            "Device owner. Android Device Policy has full control over the device.",
+            "Profile owner. Android Device Policy has control over a managed profile on the device."
+          ],
+          "type": "string"
+        },
         "memoryEvents": {
           "description": "Events related to memory and storage measurements in chronological order. This information is only available if memoryInfoEnabled is true in the device's policy.",
           "items": {
@@ -1471,6 +1503,10 @@
           "description": "The name of the enrollment token, which is generated by the server during creation, in the form enterprises/{enterpriseId}/enrollmentTokens/{enrollmentTokenId}.",
           "type": "string"
         },
+        "oneTimeOnly": {
+          "description": "Whether the enrollment token is for one time use only. If the flag is set to true, only one device can use it for registration.",
+          "type": "boolean"
+        },
         "policyName": {
           "description": "The name of the policy initially applied to the enrolled device, in the form enterprises/{enterpriseId}/policies/{policyId}. If not specified, the policy_name for the device’s user is applied. If user_name is also not specified, enterprises/{enterpriseId}/policies/default is applied by default. When updating this field, you can specify only the policyId as long as the policyId doesn’t contain any slashes. The rest of the policy name will be inferred.",
           "type": "string"
@@ -2523,6 +2559,13 @@
           "$ref": "PasswordRequirements",
           "description": "Password requirements."
         },
+        "permissionGrants": {
+          "description": "Explicit permission or group grants or denials for all apps. These values override the default_permission_policy.",
+          "items": {
+            "$ref": "PermissionGrant"
+          },
+          "type": "array"
+        },
         "permittedInputMethods": {
           "$ref": "PackageNameList",
           "description": "If present, only the input methods provided by packages in this list are permitted. If this field is present, but the list is empty, then only system input methods are permitted."
@@ -2770,6 +2813,10 @@
           "description": "Kernel version, for example, 2.6.32.9-g103d848.",
           "type": "string"
         },
+        "primaryLanguageCode": {
+          "description": "An IETF BCP 47 language code for the primary locale on the device.",
+          "type": "string"
+        },
         "securityPatchLevel": {
           "description": "Security patch level, e.g. 2016-05-01.",
           "type": "string"
diff --git a/androidmanagement/v1/androidmanagement-gen.go b/androidmanagement/v1/androidmanagement-gen.go
index 62dc9d5..b8c6218 100644
--- a/androidmanagement/v1/androidmanagement-gen.go
+++ b/androidmanagement/v1/androidmanagement-gen.go
@@ -690,6 +690,10 @@
 	// exists any matching NonComplianceDetail for the device.
 	NonComplianceDetailCondition *NonComplianceDetailCondition `json:"nonComplianceDetailCondition,omitempty"`
 
+	// PackageNamesToDisable: If set, the rule includes a mitigating action
+	// to disable apps specified in the list, but app data is preserved.
+	PackageNamesToDisable []string `json:"packageNamesToDisable,omitempty"`
+
 	// ForceSendFields is a list of field names (e.g. "ApiLevelCondition")
 	// to unconditionally include in API requests. By default, fields with
 	// empty values are omitted from API requests. However, any non-pointer,
@@ -795,6 +799,18 @@
 	// LastStatusReportTime: The last time the device sent a status report.
 	LastStatusReportTime string `json:"lastStatusReportTime,omitempty"`
 
+	// ManagementMode: The type of management mode Android Device Policy
+	// takes on the device. This influences which policy settings are
+	// supported.
+	//
+	// Possible values:
+	//   "MANAGEMENT_MODE_UNSPECIFIED" - This value is disallowed.
+	//   "DEVICE_OWNER" - Device owner. Android Device Policy has full
+	// control over the device.
+	//   "PROFILE_OWNER" - Profile owner. Android Device Policy has control
+	// over a managed profile on the device.
+	ManagementMode string `json:"managementMode,omitempty"`
+
 	// MemoryEvents: Events related to memory and storage measurements in
 	// chronological order. This information is only available if
 	// memoryInfoEnabled is true in the device's policy.
@@ -1052,6 +1068,11 @@
 	// enterprises/{enterpriseId}/enrollmentTokens/{enrollmentTokenId}.
 	Name string `json:"name,omitempty"`
 
+	// OneTimeOnly: Whether the enrollment token is for one time use only.
+	// If the flag is set to true, only one device can use it for
+	// registration.
+	OneTimeOnly bool `json:"oneTimeOnly,omitempty"`
+
 	// PolicyName: The name of the policy initially applied to the enrolled
 	// device, in the form enterprises/{enterpriseId}/policies/{policyId}.
 	// If not specified, the policy_name for the device’s user is applied.
@@ -2378,6 +2399,10 @@
 	// PasswordRequirements: Password requirements.
 	PasswordRequirements *PasswordRequirements `json:"passwordRequirements,omitempty"`
 
+	// PermissionGrants: Explicit permission or group grants or denials for
+	// all apps. These values override the default_permission_policy.
+	PermissionGrants []*PermissionGrant `json:"permissionGrants,omitempty"`
+
 	// PermittedInputMethods: If present, only the input methods provided by
 	// packages in this list are permitted. If this field is present, but
 	// the list is empty, then only system input methods are permitted.
@@ -2691,6 +2716,10 @@
 	// DeviceKernelVersion: Kernel version, for example, 2.6.32.9-g103d848.
 	DeviceKernelVersion string `json:"deviceKernelVersion,omitempty"`
 
+	// PrimaryLanguageCode: An IETF BCP 47 language code for the primary
+	// locale on the device.
+	PrimaryLanguageCode string `json:"primaryLanguageCode,omitempty"`
+
 	// SecurityPatchLevel: Security patch level, e.g. 2016-05-01.
 	SecurityPatchLevel string `json:"securityPatchLevel,omitempty"`
 
@@ -3643,6 +3672,18 @@
 	return c
 }
 
+// WipeDataFlags sets the optional parameter "wipeDataFlags": Optional
+// flags that control the device wiping behavior.
+//
+// Possible values:
+//   "WIPE_DATA_FLAG_UNSPECIFIED"
+//   "PRESERVE_RESET_PROTECTION_DATA"
+//   "WIPE_EXTERNAL_STORAGE"
+func (c *EnterprisesDevicesDeleteCall) WipeDataFlags(wipeDataFlags ...string) *EnterprisesDevicesDeleteCall {
+	c.urlParams_.SetMulti("wipeDataFlags", append([]string{}, wipeDataFlags...))
+	return c
+}
+
 // Fields allows partial responses to be retrieved. See
 // https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
 // for more information.
@@ -3738,6 +3779,17 @@
 	//       "pattern": "^enterprises/[^/]+/devices/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
+	//     },
+	//     "wipeDataFlags": {
+	//       "description": "Optional flags that control the device wiping behavior.",
+	//       "enum": [
+	//         "WIPE_DATA_FLAG_UNSPECIFIED",
+	//         "PRESERVE_RESET_PROTECTION_DATA",
+	//         "WIPE_EXTERNAL_STORAGE"
+	//       ],
+	//       "location": "query",
+	//       "repeated": true,
+	//       "type": "string"
 	//     }
 	//   },
 	//   "path": "v1/{+name}",
diff --git a/api-list.json b/api-list.json
index 0eb0ade..3299774 100644
--- a/api-list.json
+++ b/api-list.json
@@ -789,6 +789,21 @@
   },
   {
    "kind": "discovery#directoryItem",
+   "id": "cloudprofiler:v2",
+   "name": "cloudprofiler",
+   "version": "v2",
+   "title": "Stackdriver Profiler API",
+   "description": "Allows Google services manage the continuous profiling information.",
+   "discoveryRestUrl": "https://cloudprofiler.googleapis.com/$discovery/rest?version=v2",
+   "icons": {
+    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+   },
+   "documentationLink": "https://cloud.google.com/",
+   "preferred": true
+  },
+  {
+   "kind": "discovery#directoryItem",
    "id": "cloudresourcemanager:v1",
    "name": "cloudresourcemanager",
    "version": "v1",
@@ -1701,7 +1716,7 @@
     "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
     "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
    },
-   "documentationLink": "https://developers.google.com/identity/protocols/OAuth2ServiceAccount",
+   "documentationLink": "https://cloud.google.com/iam/docs/creating-short-lived-service-account-credentials",
    "preferred": true
   },
   {
@@ -2143,7 +2158,7 @@
    "id": "proximitybeacon:v1beta1",
    "name": "proximitybeacon",
    "version": "v1beta1",
-   "title": "Google Proximity Beacon API",
+   "title": "Proximity Beacon API",
    "description": "Registers, manages, indexes, and searches beacons.",
    "discoveryRestUrl": "https://proximitybeacon.googleapis.com/$discovery/rest?version=v1beta1",
    "icons": {
@@ -2321,7 +2336,7 @@
    "name": "script",
    "version": "v1",
    "title": "Apps Script API",
-   "description": "An API for managing and executing Google Apps Script projects. Note: In order to use this API in your apps, you must  enable it for use. To allow other apps to manage your scripts, you must  grant them access.",
+   "description": "An API for managing and executing Google Apps Script projects.",
    "discoveryRestUrl": "https://script.googleapis.com/$discovery/rest?version=v1",
    "icons": {
     "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
diff --git a/cloudprofiler/v2/cloudprofiler-api.json b/cloudprofiler/v2/cloudprofiler-api.json
new file mode 100644
index 0000000..8c9bc35
--- /dev/null
+++ b/cloudprofiler/v2/cloudprofiler-api.json
@@ -0,0 +1,342 @@
+{
+  "auth": {
+    "oauth2": {
+      "scopes": {
+        "https://www.googleapis.com/auth/cloud-platform": {
+          "description": "View and manage your data across Google Cloud Platform services"
+        },
+        "https://www.googleapis.com/auth/monitoring": {
+          "description": "View and write monitoring data for all of your Google and third-party Cloud and API projects"
+        },
+        "https://www.googleapis.com/auth/monitoring.write": {
+          "description": "Publish metric data to your Google Cloud projects"
+        }
+      }
+    }
+  },
+  "basePath": "",
+  "baseUrl": "https://cloudprofiler.googleapis.com/",
+  "batchPath": "batch",
+  "canonicalName": "Cloud Profiler",
+  "description": "Allows Google services manage the continuous profiling information.",
+  "discoveryVersion": "v1",
+  "documentationLink": "https://cloud.google.com/",
+  "fullyEncodeReservedExpansion": true,
+  "icons": {
+    "x16": "http://www.google.com/images/icons/product/search-16.gif",
+    "x32": "http://www.google.com/images/icons/product/search-32.gif"
+  },
+  "id": "cloudprofiler:v2",
+  "kind": "discovery#restDescription",
+  "name": "cloudprofiler",
+  "ownerDomain": "google.com",
+  "ownerName": "Google",
+  "parameters": {
+    "$.xgafv": {
+      "description": "V1 error format.",
+      "enum": [
+        "1",
+        "2"
+      ],
+      "enumDescriptions": [
+        "v1 error format",
+        "v2 error format"
+      ],
+      "location": "query",
+      "type": "string"
+    },
+    "access_token": {
+      "description": "OAuth access token.",
+      "location": "query",
+      "type": "string"
+    },
+    "alt": {
+      "default": "json",
+      "description": "Data format for response.",
+      "enum": [
+        "json",
+        "media",
+        "proto"
+      ],
+      "enumDescriptions": [
+        "Responses with Content-Type of application/json",
+        "Media download with context-dependent Content-Type",
+        "Responses with Content-Type of application/x-protobuf"
+      ],
+      "location": "query",
+      "type": "string"
+    },
+    "callback": {
+      "description": "JSONP",
+      "location": "query",
+      "type": "string"
+    },
+    "fields": {
+      "description": "Selector specifying which fields to include in a partial response.",
+      "location": "query",
+      "type": "string"
+    },
+    "key": {
+      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+      "location": "query",
+      "type": "string"
+    },
+    "oauth_token": {
+      "description": "OAuth 2.0 token for the current user.",
+      "location": "query",
+      "type": "string"
+    },
+    "prettyPrint": {
+      "default": "true",
+      "description": "Returns response with indentations and line breaks.",
+      "location": "query",
+      "type": "boolean"
+    },
+    "quotaUser": {
+      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+      "location": "query",
+      "type": "string"
+    },
+    "uploadType": {
+      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+      "location": "query",
+      "type": "string"
+    },
+    "upload_protocol": {
+      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+      "location": "query",
+      "type": "string"
+    }
+  },
+  "protocol": "rest",
+  "resources": {
+    "projects": {
+      "resources": {
+        "profiles": {
+          "methods": {
+            "create": {
+              "description": "CreateProfile creates a new profile resource in the online mode.\n\nThe server ensures that the new profiles are created at a constant rate per\ndeployment, so the creation request may hang for some time until the next\nprofile session is available.\n\nThe request may fail with ABORTED error if the creation is not available\nwithin ~1m, the response will indicate the duration of the backoff the\nclient should take before attempting creating a profile again. The backoff\nduration is returned in google.rpc.RetryInfo extension on the response\nstatus. To a gRPC client, the extension will be return as a\nbinary-serialized proto in the trailing metadata item named\n\"google.rpc.retryinfo-bin\".",
+              "flatPath": "v2/projects/{projectsId}/profiles",
+              "httpMethod": "POST",
+              "id": "cloudprofiler.projects.profiles.create",
+              "parameterOrder": [
+                "parent"
+              ],
+              "parameters": {
+                "parent": {
+                  "description": "Parent project to create the profile in.",
+                  "location": "path",
+                  "pattern": "^projects/[^/]+$",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "path": "v2/{+parent}/profiles",
+              "request": {
+                "$ref": "CreateProfileRequest"
+              },
+              "response": {
+                "$ref": "Profile"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/monitoring",
+                "https://www.googleapis.com/auth/monitoring.write"
+              ]
+            },
+            "createOffline": {
+              "description": "CreateOfflineProfile creates a new profile resource in the offline mode.\nThe client provides the profile to create along with the profile bytes, the\nserver records it.",
+              "flatPath": "v2/projects/{projectsId}/profiles:createOffline",
+              "httpMethod": "POST",
+              "id": "cloudprofiler.projects.profiles.createOffline",
+              "parameterOrder": [
+                "parent"
+              ],
+              "parameters": {
+                "parent": {
+                  "description": "Parent project to create the profile in.",
+                  "location": "path",
+                  "pattern": "^projects/[^/]+$",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "path": "v2/{+parent}/profiles:createOffline",
+              "request": {
+                "$ref": "Profile"
+              },
+              "response": {
+                "$ref": "Profile"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/monitoring",
+                "https://www.googleapis.com/auth/monitoring.write"
+              ]
+            },
+            "patch": {
+              "description": "UpdateProfile updates the profile bytes and labels on the profile resource\ncreated in the online mode. Updating the bytes for profiles created in the\noffline mode is currently not supported: the profile content must be\nprovided at the time of the profile creation.",
+              "flatPath": "v2/projects/{projectsId}/profiles/{profilesId}",
+              "httpMethod": "PATCH",
+              "id": "cloudprofiler.projects.profiles.patch",
+              "parameterOrder": [
+                "name"
+              ],
+              "parameters": {
+                "name": {
+                  "description": "Output only. Opaque, server-assigned, unique ID for this profile.",
+                  "location": "path",
+                  "pattern": "^projects/[^/]+/profiles/[^/]+$",
+                  "required": true,
+                  "type": "string"
+                },
+                "updateMask": {
+                  "description": "Field mask used to specify the fields to be overwritten. Currently only\nprofile_bytes and labels fields are supported by UpdateProfile, so only\nthose fields can be specified in the mask. When no mask is provided, all\nfields are overwritten.",
+                  "format": "google-fieldmask",
+                  "location": "query",
+                  "type": "string"
+                }
+              },
+              "path": "v2/{+name}",
+              "request": {
+                "$ref": "Profile"
+              },
+              "response": {
+                "$ref": "Profile"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/monitoring",
+                "https://www.googleapis.com/auth/monitoring.write"
+              ]
+            }
+          }
+        }
+      }
+    }
+  },
+  "revision": "20180625",
+  "rootUrl": "https://cloudprofiler.googleapis.com/",
+  "schemas": {
+    "CreateProfileRequest": {
+      "description": "CreateProfileRequest describes a profile resource online creation request.\nThe deployment field must be populated. The profile_type specifies the list\nof profile types supported by the agent. The creation call will hang until a\nprofile of one of these types needs to be collected.",
+      "id": "CreateProfileRequest",
+      "properties": {
+        "deployment": {
+          "$ref": "Deployment",
+          "description": "Deployment details."
+        },
+        "profile": {
+          "$ref": "Profile",
+          "description": "DEPRECATED: When the profile field is set and the profile type field is not\nset, the creation is done in the offline mode as documented for the\nCreateOfflineProfile method above. This behavior is temporarily kept\nto smoothly migrate the clients that use the old model of when the single\nCreateProfile method was used for both creation modes."
+        },
+        "profileType": {
+          "description": "One or more profile types that the agent is capable of providing.",
+          "enumDescriptions": [
+            "Unspecified profile type.",
+            "Thread CPU time sampling.",
+            "Wallclock time sampling. More expensive as stops all threads.",
+            "Heap allocation sampling.",
+            "Single-shot collection of all thread stacks.",
+            "Synchronization contention profile.",
+            "Peak heap profile."
+          ],
+          "items": {
+            "enum": [
+              "PROFILE_TYPE_UNSPECIFIED",
+              "CPU",
+              "WALL",
+              "HEAP",
+              "THREADS",
+              "CONTENTION",
+              "PEAK_HEAP"
+            ],
+            "type": "string"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "Deployment": {
+      "description": "Deployment contains the deployment identification information.",
+      "id": "Deployment",
+      "properties": {
+        "labels": {
+          "additionalProperties": {
+            "type": "string"
+          },
+          "description": "Labels identify the deployment within the user universe and same target.\nValidation regex for label names: `^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$`.\nValue for an individual label must be \u003c= 512 bytes, the total\nsize of all label names and values must be \u003c= 1024 bytes.\n\nLabel named \"language\" can be used to record the programming language of\nthe profiled deployment. The standard choices for the value include \"java\",\n\"go\", \"python\", \"ruby\", \"nodejs\", \"php\", \"dotnet\".\n\nFor deployments running on Google Cloud Platform, \"zone\" or \"region\" label\nshould be present describing the deployment location. An example of a zone\nis \"us-central1-a\", an example of a region is \"us-central1\" or\n\"us-central\".",
+          "type": "object"
+        },
+        "projectId": {
+          "description": "Project ID is the ID of a cloud project.\nValidation regex: `^a-z{4,61}[a-z0-9]$`.",
+          "type": "string"
+        },
+        "target": {
+          "description": "Target is the service name used to group related deployments:\n* Service name for GAE Flex / Standard.\n* Cluster and container name for GKE.\n* User-specified string for direct GCE profiling (e.g. Java).\n* Job name for Dataflow.\nValidation regex: `^[a-z]([-a-z0-9_.]{0,253}[a-z0-9])?$`.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "Profile": {
+      "description": "Profile resource.",
+      "id": "Profile",
+      "properties": {
+        "deployment": {
+          "$ref": "Deployment",
+          "description": "Deployment this profile corresponds to."
+        },
+        "duration": {
+          "description": "Duration of the profiling session.\nInput (for the offline mode) or output (for the online mode).\nThe field represents requested profiling duration. It may slightly differ\nfrom the effective profiling duration, which is recorded in the profile\ndata, in case the profiling can't be stopped immediately (e.g. in case\nstopping the profiling is handled asynchronously).",
+          "format": "google-duration",
+          "type": "string"
+        },
+        "labels": {
+          "additionalProperties": {
+            "type": "string"
+          },
+          "description": "Input only. Labels associated to this specific profile. These labels will\nget merged with the deployment labels for the final data set.  See\ndocumentation on deployment labels for validation rules and limits.",
+          "type": "object"
+        },
+        "name": {
+          "description": "Output only. Opaque, server-assigned, unique ID for this profile.",
+          "type": "string"
+        },
+        "profileBytes": {
+          "description": "Input only. Profile bytes, as a gzip compressed serialized proto, the\nformat is https://github.com/google/pprof/blob/master/proto/profile.proto.",
+          "format": "byte",
+          "type": "string"
+        },
+        "profileType": {
+          "description": "Type of profile.\nFor offline mode, this must be specified when creating the profile. For\nonline mode it is assigned and returned by the server.",
+          "enum": [
+            "PROFILE_TYPE_UNSPECIFIED",
+            "CPU",
+            "WALL",
+            "HEAP",
+            "THREADS",
+            "CONTENTION",
+            "PEAK_HEAP"
+          ],
+          "enumDescriptions": [
+            "Unspecified profile type.",
+            "Thread CPU time sampling.",
+            "Wallclock time sampling. More expensive as stops all threads.",
+            "Heap allocation sampling.",
+            "Single-shot collection of all thread stacks.",
+            "Synchronization contention profile.",
+            "Peak heap profile."
+          ],
+          "type": "string"
+        }
+      },
+      "type": "object"
+    }
+  },
+  "servicePath": "",
+  "title": "Stackdriver Profiler API",
+  "version": "v2",
+  "version_module": true
+}
\ No newline at end of file
diff --git a/cloudprofiler/v2/cloudprofiler-gen.go b/cloudprofiler/v2/cloudprofiler-gen.go
new file mode 100644
index 0000000..c47b6f5
--- /dev/null
+++ b/cloudprofiler/v2/cloudprofiler-gen.go
@@ -0,0 +1,760 @@
+// Package cloudprofiler provides access to the Stackdriver Profiler API.
+//
+// See https://cloud.google.com/
+//
+// Usage example:
+//
+//   import "google.golang.org/api/cloudprofiler/v2"
+//   ...
+//   cloudprofilerService, err := cloudprofiler.New(oauthHttpClient)
+package cloudprofiler // import "google.golang.org/api/cloudprofiler/v2"
+
+import (
+	"bytes"
+	"encoding/json"
+	"errors"
+	"fmt"
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
+	"io"
+	"net/http"
+	"net/url"
+	"strconv"
+	"strings"
+)
+
+// Always reference these packages, just in case the auto-generated code
+// below doesn't.
+var _ = bytes.NewBuffer
+var _ = strconv.Itoa
+var _ = fmt.Sprintf
+var _ = json.NewDecoder
+var _ = io.Copy
+var _ = url.Parse
+var _ = gensupport.MarshalJSON
+var _ = googleapi.Version
+var _ = errors.New
+var _ = strings.Replace
+var _ = context.Canceled
+var _ = ctxhttp.Do
+
+const apiId = "cloudprofiler:v2"
+const apiName = "cloudprofiler"
+const apiVersion = "v2"
+const basePath = "https://cloudprofiler.googleapis.com/"
+
+// OAuth2 scopes used by this API.
+const (
+	// View and manage your data across Google Cloud Platform services
+	CloudPlatformScope = "https://www.googleapis.com/auth/cloud-platform"
+
+	// View and write monitoring data for all of your Google and third-party
+	// Cloud and API projects
+	MonitoringScope = "https://www.googleapis.com/auth/monitoring"
+
+	// Publish metric data to your Google Cloud projects
+	MonitoringWriteScope = "https://www.googleapis.com/auth/monitoring.write"
+)
+
+func New(client *http.Client) (*Service, error) {
+	if client == nil {
+		return nil, errors.New("client is nil")
+	}
+	s := &Service{client: client, BasePath: basePath}
+	s.Projects = NewProjectsService(s)
+	return s, nil
+}
+
+type Service struct {
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
+
+	Projects *ProjectsService
+}
+
+func (s *Service) userAgent() string {
+	if s.UserAgent == "" {
+		return googleapi.UserAgent
+	}
+	return googleapi.UserAgent + " " + s.UserAgent
+}
+
+func NewProjectsService(s *Service) *ProjectsService {
+	rs := &ProjectsService{s: s}
+	rs.Profiles = NewProjectsProfilesService(s)
+	return rs
+}
+
+type ProjectsService struct {
+	s *Service
+
+	Profiles *ProjectsProfilesService
+}
+
+func NewProjectsProfilesService(s *Service) *ProjectsProfilesService {
+	rs := &ProjectsProfilesService{s: s}
+	return rs
+}
+
+type ProjectsProfilesService struct {
+	s *Service
+}
+
+// CreateProfileRequest: CreateProfileRequest describes a profile
+// resource online creation request.
+// The deployment field must be populated. The profile_type specifies
+// the list
+// of profile types supported by the agent. The creation call will hang
+// until a
+// profile of one of these types needs to be collected.
+type CreateProfileRequest struct {
+	// Deployment: Deployment details.
+	Deployment *Deployment `json:"deployment,omitempty"`
+
+	// Profile: DEPRECATED: When the profile field is set and the profile
+	// type field is not
+	// set, the creation is done in the offline mode as documented for
+	// the
+	// CreateOfflineProfile method above. This behavior is temporarily
+	// kept
+	// to smoothly migrate the clients that use the old model of when the
+	// single
+	// CreateProfile method was used for both creation modes.
+	Profile *Profile `json:"profile,omitempty"`
+
+	// ProfileType: One or more profile types that the agent is capable of
+	// providing.
+	//
+	// Possible values:
+	//   "PROFILE_TYPE_UNSPECIFIED" - Unspecified profile type.
+	//   "CPU" - Thread CPU time sampling.
+	//   "WALL" - Wallclock time sampling. More expensive as stops all
+	// threads.
+	//   "HEAP" - Heap allocation sampling.
+	//   "THREADS" - Single-shot collection of all thread stacks.
+	//   "CONTENTION" - Synchronization contention profile.
+	//   "PEAK_HEAP" - Peak heap profile.
+	ProfileType []string `json:"profileType,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Deployment") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Deployment") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *CreateProfileRequest) MarshalJSON() ([]byte, error) {
+	type NoMethod CreateProfileRequest
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Deployment: Deployment contains the deployment identification
+// information.
+type Deployment struct {
+	// Labels: Labels identify the deployment within the user universe and
+	// same target.
+	// Validation regex for label names:
+	// `^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$`.
+	// Value for an individual label must be <= 512 bytes, the total
+	// size of all label names and values must be <= 1024 bytes.
+	//
+	// Label named "language" can be used to record the programming language
+	// of
+	// the profiled deployment. The standard choices for the value include
+	// "java",
+	// "go", "python", "ruby", "nodejs", "php", "dotnet".
+	//
+	// For deployments running on Google Cloud Platform, "zone" or "region"
+	// label
+	// should be present describing the deployment location. An example of a
+	// zone
+	// is "us-central1-a", an example of a region is "us-central1"
+	// or
+	// "us-central".
+	Labels map[string]string `json:"labels,omitempty"`
+
+	// ProjectId: Project ID is the ID of a cloud project.
+	// Validation regex: `^a-z{4,61}[a-z0-9]$`.
+	ProjectId string `json:"projectId,omitempty"`
+
+	// Target: Target is the service name used to group related
+	// deployments:
+	// * Service name for GAE Flex / Standard.
+	// * Cluster and container name for GKE.
+	// * User-specified string for direct GCE profiling (e.g. Java).
+	// * Job name for Dataflow.
+	// Validation regex: `^[a-z]([-a-z0-9_.]{0,253}[a-z0-9])?$`.
+	Target string `json:"target,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Labels") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Labels") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *Deployment) MarshalJSON() ([]byte, error) {
+	type NoMethod Deployment
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Profile: Profile resource.
+type Profile struct {
+	// Deployment: Deployment this profile corresponds to.
+	Deployment *Deployment `json:"deployment,omitempty"`
+
+	// Duration: Duration of the profiling session.
+	// Input (for the offline mode) or output (for the online mode).
+	// The field represents requested profiling duration. It may slightly
+	// differ
+	// from the effective profiling duration, which is recorded in the
+	// profile
+	// data, in case the profiling can't be stopped immediately (e.g. in
+	// case
+	// stopping the profiling is handled asynchronously).
+	Duration string `json:"duration,omitempty"`
+
+	// Labels: Input only. Labels associated to this specific profile. These
+	// labels will
+	// get merged with the deployment labels for the final data set.
+	// See
+	// documentation on deployment labels for validation rules and limits.
+	Labels map[string]string `json:"labels,omitempty"`
+
+	// Name: Output only. Opaque, server-assigned, unique ID for this
+	// profile.
+	Name string `json:"name,omitempty"`
+
+	// ProfileBytes: Input only. Profile bytes, as a gzip compressed
+	// serialized proto, the
+	// format is
+	// https://github.com/google/pprof/blob/master/proto/profile.proto.
+	ProfileBytes string `json:"profileBytes,omitempty"`
+
+	// ProfileType: Type of profile.
+	// For offline mode, this must be specified when creating the profile.
+	// For
+	// online mode it is assigned and returned by the server.
+	//
+	// Possible values:
+	//   "PROFILE_TYPE_UNSPECIFIED" - Unspecified profile type.
+	//   "CPU" - Thread CPU time sampling.
+	//   "WALL" - Wallclock time sampling. More expensive as stops all
+	// threads.
+	//   "HEAP" - Heap allocation sampling.
+	//   "THREADS" - Single-shot collection of all thread stacks.
+	//   "CONTENTION" - Synchronization contention profile.
+	//   "PEAK_HEAP" - Peak heap profile.
+	ProfileType string `json:"profileType,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Deployment") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Deployment") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *Profile) MarshalJSON() ([]byte, error) {
+	type NoMethod Profile
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// method id "cloudprofiler.projects.profiles.create":
+
+type ProjectsProfilesCreateCall struct {
+	s                    *Service
+	parent               string
+	createprofilerequest *CreateProfileRequest
+	urlParams_           gensupport.URLParams
+	ctx_                 context.Context
+	header_              http.Header
+}
+
+// Create: CreateProfile creates a new profile resource in the online
+// mode.
+//
+// The server ensures that the new profiles are created at a constant
+// rate per
+// deployment, so the creation request may hang for some time until the
+// next
+// profile session is available.
+//
+// The request may fail with ABORTED error if the creation is not
+// available
+// within ~1m, the response will indicate the duration of the backoff
+// the
+// client should take before attempting creating a profile again. The
+// backoff
+// duration is returned in google.rpc.RetryInfo extension on the
+// response
+// status. To a gRPC client, the extension will be return as
+// a
+// binary-serialized proto in the trailing metadata item
+// named
+// "google.rpc.retryinfo-bin".
+func (r *ProjectsProfilesService) Create(parent string, createprofilerequest *CreateProfileRequest) *ProjectsProfilesCreateCall {
+	c := &ProjectsProfilesCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.parent = parent
+	c.createprofilerequest = createprofilerequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsProfilesCreateCall) Fields(s ...googleapi.Field) *ProjectsProfilesCreateCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsProfilesCreateCall) Context(ctx context.Context) *ProjectsProfilesCreateCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsProfilesCreateCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsProfilesCreateCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.createprofilerequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+parent}/profiles")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"parent": c.parent,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudprofiler.projects.profiles.create" call.
+// Exactly one of *Profile or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Profile.ServerResponse.Header or (if a response was returned at all)
+// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
+// check whether the returned error was because http.StatusNotModified
+// was returned.
+func (c *ProjectsProfilesCreateCall) Do(opts ...googleapi.CallOption) (*Profile, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Profile{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "CreateProfile creates a new profile resource in the online mode.\n\nThe server ensures that the new profiles are created at a constant rate per\ndeployment, so the creation request may hang for some time until the next\nprofile session is available.\n\nThe request may fail with ABORTED error if the creation is not available\nwithin ~1m, the response will indicate the duration of the backoff the\nclient should take before attempting creating a profile again. The backoff\nduration is returned in google.rpc.RetryInfo extension on the response\nstatus. To a gRPC client, the extension will be return as a\nbinary-serialized proto in the trailing metadata item named\n\"google.rpc.retryinfo-bin\".",
+	//   "flatPath": "v2/projects/{projectsId}/profiles",
+	//   "httpMethod": "POST",
+	//   "id": "cloudprofiler.projects.profiles.create",
+	//   "parameterOrder": [
+	//     "parent"
+	//   ],
+	//   "parameters": {
+	//     "parent": {
+	//       "description": "Parent project to create the profile in.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v2/{+parent}/profiles",
+	//   "request": {
+	//     "$ref": "CreateProfileRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Profile"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/monitoring",
+	//     "https://www.googleapis.com/auth/monitoring.write"
+	//   ]
+	// }
+
+}
+
+// method id "cloudprofiler.projects.profiles.createOffline":
+
+type ProjectsProfilesCreateOfflineCall struct {
+	s          *Service
+	parent     string
+	profile    *Profile
+	urlParams_ gensupport.URLParams
+	ctx_       context.Context
+	header_    http.Header
+}
+
+// CreateOffline: CreateOfflineProfile creates a new profile resource in
+// the offline mode.
+// The client provides the profile to create along with the profile
+// bytes, the
+// server records it.
+func (r *ProjectsProfilesService) CreateOffline(parent string, profile *Profile) *ProjectsProfilesCreateOfflineCall {
+	c := &ProjectsProfilesCreateOfflineCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.parent = parent
+	c.profile = profile
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsProfilesCreateOfflineCall) Fields(s ...googleapi.Field) *ProjectsProfilesCreateOfflineCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsProfilesCreateOfflineCall) Context(ctx context.Context) *ProjectsProfilesCreateOfflineCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsProfilesCreateOfflineCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsProfilesCreateOfflineCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.profile)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+parent}/profiles:createOffline")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"parent": c.parent,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudprofiler.projects.profiles.createOffline" call.
+// Exactly one of *Profile or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Profile.ServerResponse.Header or (if a response was returned at all)
+// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
+// check whether the returned error was because http.StatusNotModified
+// was returned.
+func (c *ProjectsProfilesCreateOfflineCall) Do(opts ...googleapi.CallOption) (*Profile, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Profile{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "CreateOfflineProfile creates a new profile resource in the offline mode.\nThe client provides the profile to create along with the profile bytes, the\nserver records it.",
+	//   "flatPath": "v2/projects/{projectsId}/profiles:createOffline",
+	//   "httpMethod": "POST",
+	//   "id": "cloudprofiler.projects.profiles.createOffline",
+	//   "parameterOrder": [
+	//     "parent"
+	//   ],
+	//   "parameters": {
+	//     "parent": {
+	//       "description": "Parent project to create the profile in.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v2/{+parent}/profiles:createOffline",
+	//   "request": {
+	//     "$ref": "Profile"
+	//   },
+	//   "response": {
+	//     "$ref": "Profile"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/monitoring",
+	//     "https://www.googleapis.com/auth/monitoring.write"
+	//   ]
+	// }
+
+}
+
+// method id "cloudprofiler.projects.profiles.patch":
+
+type ProjectsProfilesPatchCall struct {
+	s          *Service
+	name       string
+	profile    *Profile
+	urlParams_ gensupport.URLParams
+	ctx_       context.Context
+	header_    http.Header
+}
+
+// Patch: UpdateProfile updates the profile bytes and labels on the
+// profile resource
+// created in the online mode. Updating the bytes for profiles created
+// in the
+// offline mode is currently not supported: the profile content must
+// be
+// provided at the time of the profile creation.
+func (r *ProjectsProfilesService) Patch(name string, profile *Profile) *ProjectsProfilesPatchCall {
+	c := &ProjectsProfilesPatchCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	c.profile = profile
+	return c
+}
+
+// UpdateMask sets the optional parameter "updateMask": Field mask used
+// to specify the fields to be overwritten. Currently only
+// profile_bytes and labels fields are supported by UpdateProfile, so
+// only
+// those fields can be specified in the mask. When no mask is provided,
+// all
+// fields are overwritten.
+func (c *ProjectsProfilesPatchCall) UpdateMask(updateMask string) *ProjectsProfilesPatchCall {
+	c.urlParams_.Set("updateMask", updateMask)
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsProfilesPatchCall) Fields(s ...googleapi.Field) *ProjectsProfilesPatchCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsProfilesPatchCall) Context(ctx context.Context) *ProjectsProfilesPatchCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsProfilesPatchCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsProfilesPatchCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.profile)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("PATCH", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudprofiler.projects.profiles.patch" call.
+// Exactly one of *Profile or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Profile.ServerResponse.Header or (if a response was returned at all)
+// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
+// check whether the returned error was because http.StatusNotModified
+// was returned.
+func (c *ProjectsProfilesPatchCall) Do(opts ...googleapi.CallOption) (*Profile, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Profile{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "UpdateProfile updates the profile bytes and labels on the profile resource\ncreated in the online mode. Updating the bytes for profiles created in the\noffline mode is currently not supported: the profile content must be\nprovided at the time of the profile creation.",
+	//   "flatPath": "v2/projects/{projectsId}/profiles/{profilesId}",
+	//   "httpMethod": "PATCH",
+	//   "id": "cloudprofiler.projects.profiles.patch",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "Output only. Opaque, server-assigned, unique ID for this profile.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/profiles/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "updateMask": {
+	//       "description": "Field mask used to specify the fields to be overwritten. Currently only\nprofile_bytes and labels fields are supported by UpdateProfile, so only\nthose fields can be specified in the mask. When no mask is provided, all\nfields are overwritten.",
+	//       "format": "google-fieldmask",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v2/{+name}",
+	//   "request": {
+	//     "$ref": "Profile"
+	//   },
+	//   "response": {
+	//     "$ref": "Profile"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/monitoring",
+	//     "https://www.googleapis.com/auth/monitoring.write"
+	//   ]
+	// }
+
+}
diff --git a/container/v1beta1/container-api.json b/container/v1beta1/container-api.json
index d94a018..1192a60 100644
--- a/container/v1beta1/container-api.json
+++ b/container/v1beta1/container-api.json
@@ -105,92 +105,6 @@
   "protocol": "rest",
   "resources": {
     "projects": {
-      "methods": {
-        "getIamPolicy": {
-          "description": "Gets the access control policy for a resource. Returns NOT_FOUND error if\nthe resource does not exist. Returns an empty policy if the resource exists\nbut does not have a policy set.\n\nAuthorization requires the Google IAM permission\n`container.clusters.getIamPolicy` on the specified resource.",
-          "flatPath": "v1beta1/projects/{projectsId}:getIamPolicy",
-          "httpMethod": "POST",
-          "id": "container.projects.getIamPolicy",
-          "parameterOrder": [
-            "resource"
-          ],
-          "parameters": {
-            "resource": {
-              "description": "REQUIRED: The resource for which the policy is being requested.\nSee the operation documentation for the appropriate value for this field.",
-              "location": "path",
-              "pattern": "^projects/.+$",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "path": "v1beta1/{+resource}:getIamPolicy",
-          "request": {
-            "$ref": "GoogleIamV1GetIamPolicyRequest"
-          },
-          "response": {
-            "$ref": "GoogleIamV1Policy"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ]
-        },
-        "setIamPolicy": {
-          "description": "Sets the access control policy for a resource. Replaces any existing\npolicy.\n\nAuthorization requires the Google IAM permission\n'container.clusters.setIamPolicy' on the specified resource.",
-          "flatPath": "v1beta1/projects/{projectsId}:setIamPolicy",
-          "httpMethod": "POST",
-          "id": "container.projects.setIamPolicy",
-          "parameterOrder": [
-            "resource"
-          ],
-          "parameters": {
-            "resource": {
-              "description": "REQUIRED: The resource for which the policy is being specified.\nSee the operation documentation for the appropriate value for this field.",
-              "location": "path",
-              "pattern": "^projects/.+$",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "path": "v1beta1/{+resource}:setIamPolicy",
-          "request": {
-            "$ref": "GoogleIamV1SetIamPolicyRequest"
-          },
-          "response": {
-            "$ref": "GoogleIamV1Policy"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ]
-        },
-        "testIamPermissions": {
-          "description": "Returns permissions that a caller has on the specified resource.\nIf the resource does not exist, this will return an empty set of\npermissions, not a NOT_FOUND error.\n\nThere is no permission required to make this API call.",
-          "flatPath": "v1beta1/projects/{projectsId}:testIamPermissions",
-          "httpMethod": "POST",
-          "id": "container.projects.testIamPermissions",
-          "parameterOrder": [
-            "resource"
-          ],
-          "parameters": {
-            "resource": {
-              "description": "REQUIRED: The resource for which the policy detail is being requested.\nSee the operation documentation for the appropriate value for this field.",
-              "location": "path",
-              "pattern": "^projects/.+$",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "path": "v1beta1/{+resource}:testIamPermissions",
-          "request": {
-            "$ref": "GoogleIamV1TestIamPermissionsRequest"
-          },
-          "response": {
-            "$ref": "GoogleIamV1TestIamPermissionsResponse"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ]
-        }
-      },
       "resources": {
         "aggregated": {
           "resources": {
@@ -288,7 +202,7 @@
               ],
               "parameters": {
                 "parent": {
-                  "description": "Contains the name of the resource requested.\nSpecified in the format 'projects/*'.",
+                  "description": "Contains the name of the resource requested.\nSpecific in the format 'projects/*/locations'.",
                   "location": "path",
                   "pattern": "^projects/[^/]+$",
                   "required": true,
@@ -828,7 +742,7 @@
                       ],
                       "parameters": {
                         "parent": {
-                          "description": "The parent (project, location, cluster id) where the node pool will be\ncreated. Specified in the format\n'projects/*/locations/*/clusters/*'.",
+                          "description": "The parent (project, location, cluster id) where the node pool will be\ncreated. Specified in the format\n'projects/*/locations/*/clusters/*/nodePools/*'.",
                           "location": "path",
                           "pattern": "^projects/[^/]+/locations/[^/]+/clusters/[^/]+$",
                           "required": true,
@@ -2521,7 +2435,7 @@
       }
     }
   },
-  "revision": "20180616",
+  "revision": "20180607",
   "rootUrl": "https://container.googleapis.com/",
   "schemas": {
     "AcceleratorConfig": {
@@ -2679,10 +2593,6 @@
           "description": "Kubernetes alpha features are enabled on this cluster. This includes alpha\nAPI groups (e.g. v1beta1) and features that may not be production ready in\nthe kubernetes version of the master and nodes.\nThe cluster has no SLA for uptime and master/node upgrades are disabled.\nAlpha enabled clusters are automatically deleted thirty days after\ncreation.",
           "type": "boolean"
         },
-        "enableTpu": {
-          "description": "Enable the ability to use Cloud TPUs in this cluster.",
-          "type": "boolean"
-        },
         "endpoint": {
           "description": "[Output only] The IP address of this cluster's master endpoint.\nThe endpoint can be accessed from the internet at\n`https://username:password@endpoint/`.\n\nSee the `masterAuth` property of this resource for username and\npassword information.",
           "type": "string"
@@ -2839,10 +2749,6 @@
           "description": "The name of the Google Compute Engine\n[subnetwork](/compute/docs/subnetworks) to which the\ncluster is connected. On output this shows the subnetwork ID instead of\nthe name.",
           "type": "string"
         },
-        "tpuIpv4CidrBlock": {
-          "description": "[Output only] The IP address range of the Cloud TPUs in this cluster, in\n[CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing)\nnotation (e.g. `1.2.3.4/29`).",
-          "type": "string"
-        },
         "zone": {
           "description": "[Output only] The name of the Google Compute Engine\n[zone](/compute/docs/zones#available) in which the cluster\nresides.\nThis field is deprecated, use location instead.",
           "type": "string"
@@ -2963,7 +2869,7 @@
           "description": "The node pool to create."
         },
         "parent": {
-          "description": "The parent (project, location, cluster id) where the node pool will be\ncreated. Specified in the format\n'projects/*/locations/*/clusters/*'.",
+          "description": "The parent (project, location, cluster id) where the node pool will be\ncreated. Specified in the format\n'projects/*/locations/*/clusters/*/nodePools/*'.",
           "type": "string"
         },
         "projectId": {
@@ -2998,93 +2904,6 @@
       "properties": {},
       "type": "object"
     },
-    "GoogleIamV1Binding": {
-      "description": "Associates `members` with a `role`.",
-      "id": "GoogleIamV1Binding",
-      "properties": {
-        "members": {
-          "description": "Specifies the identities requesting access for a Cloud Platform resource.\n`members` can have the following values:\n\n* `allUsers`: A special identifier that represents anyone who is\n   on the internet; with or without a Google account.\n\n* `allAuthenticatedUsers`: A special identifier that represents anyone\n   who is authenticated with a Google account or a service account.\n\n* `user:{emailid}`: An email address that represents a specific Google\n   account. For example, `alice@gmail.com` .\n\n\n* `serviceAccount:{emailid}`: An email address that represents a service\n   account. For example, `my-other-app@appspot.gserviceaccount.com`.\n\n* `group:{emailid}`: An email address that represents a Google group.\n   For example, `admins@example.com`.\n\n\n* `domain:{domain}`: A Google Apps domain name that represents all the\n   users of that domain. For example, `google.com` or `example.com`.\n\n",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        },
-        "role": {
-          "description": "Role that is assigned to `members`.\nFor example, `roles/viewer`, `roles/editor`, or `roles/owner`.\nRequired",
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
-    "GoogleIamV1GetIamPolicyRequest": {
-      "description": "Request message for `GetIamPolicy` method.",
-      "id": "GoogleIamV1GetIamPolicyRequest",
-      "properties": {},
-      "type": "object"
-    },
-    "GoogleIamV1Policy": {
-      "description": "Defines an Identity and Access Management (IAM) policy. It is used to\nspecify access control policies for Cloud Platform resources.\n\n\nA `Policy` consists of a list of `bindings`. A `binding` binds a list of\n`members` to a `role`, where the members can be user accounts, Google groups,\nGoogle domains, and service accounts. A `role` is a named list of permissions\ndefined by IAM.\n\n**JSON Example**\n\n    {\n      \"bindings\": [\n        {\n          \"role\": \"roles/owner\",\n          \"members\": [\n            \"user:mike@example.com\",\n            \"group:admins@example.com\",\n            \"domain:google.com\",\n            \"serviceAccount:my-other-app@appspot.gserviceaccount.com\"\n          ]\n        },\n        {\n          \"role\": \"roles/viewer\",\n          \"members\": [\"user:sean@example.com\"]\n        }\n      ]\n    }\n\n**YAML Example**\n\n    bindings:\n    - members:\n      - user:mike@example.com\n      - group:admins@example.com\n      - domain:google.com\n      - serviceAccount:my-other-app@appspot.gserviceaccount.com\n      role: roles/owner\n    - members:\n      - user:sean@example.com\n      role: roles/viewer\n\n\nFor a description of IAM and its features, see the\n[IAM developer's guide](https://cloud.google.com/iam/docs).",
-      "id": "GoogleIamV1Policy",
-      "properties": {
-        "bindings": {
-          "description": "Associates a list of `members` to a `role`.\n`bindings` with no members will result in an error.",
-          "items": {
-            "$ref": "GoogleIamV1Binding"
-          },
-          "type": "array"
-        },
-        "etag": {
-          "description": "`etag` is used for optimistic concurrency control as a way to help\nprevent simultaneous updates of a policy from overwriting each other.\nIt is strongly suggested that systems make use of the `etag` in the\nread-modify-write cycle to perform policy updates in order to avoid race\nconditions: An `etag` is returned in the response to `getIamPolicy`, and\nsystems are expected to put that etag in the request to `setIamPolicy` to\nensure that their change will be applied to the same version of the policy.\n\nIf no `etag` is provided in the call to `setIamPolicy`, then the existing\npolicy is overwritten blindly.",
-          "format": "byte",
-          "type": "string"
-        },
-        "version": {
-          "description": "Deprecated.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "type": "object"
-    },
-    "GoogleIamV1SetIamPolicyRequest": {
-      "description": "Request message for `SetIamPolicy` method.",
-      "id": "GoogleIamV1SetIamPolicyRequest",
-      "properties": {
-        "policy": {
-          "$ref": "GoogleIamV1Policy",
-          "description": "REQUIRED: The complete policy to be applied to the `resource`. The size of\nthe policy is limited to a few 10s of KB. An empty policy is a\nvalid policy but certain Cloud Platform services (such as Projects)\nmight reject them."
-        }
-      },
-      "type": "object"
-    },
-    "GoogleIamV1TestIamPermissionsRequest": {
-      "description": "Request message for `TestIamPermissions` method.",
-      "id": "GoogleIamV1TestIamPermissionsRequest",
-      "properties": {
-        "permissions": {
-          "description": "The set of permissions to check for the `resource`. Permissions with\nwildcards (such as '*' or 'storage.*') are not allowed. For more\ninformation see\n[IAM Overview](https://cloud.google.com/iam/docs/overview#permissions).",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        }
-      },
-      "type": "object"
-    },
-    "GoogleIamV1TestIamPermissionsResponse": {
-      "description": "Response message for `TestIamPermissions` method.",
-      "id": "GoogleIamV1TestIamPermissionsResponse",
-      "properties": {
-        "permissions": {
-          "description": "A subset of `TestPermissionsRequest.permissions` that the caller is\nallowed.",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        }
-      },
-      "type": "object"
-    },
     "HorizontalPodAutoscaling": {
       "description": "Configuration options for the horizontal pod autoscaling feature, which\nincreases or decreases the number of replica pods a replication controller\nhas based on the resource usage of the existing pods.",
       "id": "HorizontalPodAutoscaling",
@@ -3155,10 +2974,6 @@
           "description": "A custom subnetwork name to be used if `create_subnetwork` is true.  If\nthis field is empty, then an automatic name will be chosen for the new\nsubnetwork.",
           "type": "string"
         },
-        "tpuIpv4CidrBlock": {
-          "description": "The IP address range of the Cloud TPUs in this cluster. If unspecified, a\nrange will be automatically chosen with the default size.\n\nThis field is only applicable when `use_ip_aliases` is true.\n\nIf unspecified, the range will use the default size.\n\nSet to /netmask (e.g. `/14`) to have a range chosen with a specific\nnetmask.\n\nSet to a\n[CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing)\nnotation (e.g. `10.96.0.0/14`) from the RFC-1918 private networks (e.g.\n`10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`) to pick a specific range\nto use.",
-          "type": "string"
-        },
         "useIpAliases": {
           "description": "Whether alias IPs will be used for pod IPs in the cluster.",
           "type": "boolean"
@@ -3285,7 +3100,7 @@
       "id": "Location",
       "properties": {
         "name": {
-          "description": "Contains the name of the resource requested.\nSpecified in the format 'projects/*/locations/*'.",
+          "description": "Contains the name of the resource requested.\nSpecific in the format 'projects/*/locations/*'.",
           "type": "string"
         },
         "recommended": {
diff --git a/container/v1beta1/container-gen.go b/container/v1beta1/container-gen.go
index 2aae3fc..461104f 100644
--- a/container/v1beta1/container-gen.go
+++ b/container/v1beta1/container-gen.go
@@ -529,9 +529,6 @@
 	// creation.
 	EnableKubernetesAlpha bool `json:"enableKubernetesAlpha,omitempty"`
 
-	// EnableTpu: Enable the ability to use Cloud TPUs in this cluster.
-	EnableTpu bool `json:"enableTpu,omitempty"`
-
 	// Endpoint: [Output only] The IP address of this cluster's master
 	// endpoint.
 	// The endpoint can be accessed from the internet
@@ -773,14 +770,6 @@
 	// the name.
 	Subnetwork string `json:"subnetwork,omitempty"`
 
-	// TpuIpv4CidrBlock: [Output only] The IP address range of the Cloud
-	// TPUs in this cluster,
-	// in
-	// [CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing)
-	//
-	// notation (e.g. `1.2.3.4/29`).
-	TpuIpv4CidrBlock string `json:"tpuIpv4CidrBlock,omitempty"`
-
 	// Zone: [Output only] The name of the Google Compute
 	// Engine
 	// [zone](/compute/docs/zones#available) in which the
@@ -1049,8 +1038,9 @@
 
 	// Parent: The parent (project, location, cluster id) where the node
 	// pool will be
-	// created. Specified in the format
-	// 'projects/*/locations/*/clusters/*'.
+	// created. Specified in the
+	// format
+	// 'projects/*/locations/*/clusters/*/nodePools/*'.
 	Parent string `json:"parent,omitempty"`
 
 	// ProjectId: Deprecated. The Google Developers Console [project ID or
@@ -1146,286 +1136,6 @@
 	googleapi.ServerResponse `json:"-"`
 }
 
-// GoogleIamV1Binding: Associates `members` with a `role`.
-type GoogleIamV1Binding struct {
-	// Members: Specifies the identities requesting access for a Cloud
-	// Platform resource.
-	// `members` can have the following values:
-	//
-	// * `allUsers`: A special identifier that represents anyone who is
-	//    on the internet; with or without a Google account.
-	//
-	// * `allAuthenticatedUsers`: A special identifier that represents
-	// anyone
-	//    who is authenticated with a Google account or a service
-	// account.
-	//
-	// * `user:{emailid}`: An email address that represents a specific
-	// Google
-	//    account. For example, `alice@gmail.com` .
-	//
-	//
-	// * `serviceAccount:{emailid}`: An email address that represents a
-	// service
-	//    account. For example,
-	// `my-other-app@appspot.gserviceaccount.com`.
-	//
-	// * `group:{emailid}`: An email address that represents a Google
-	// group.
-	//    For example, `admins@example.com`.
-	//
-	//
-	// * `domain:{domain}`: A Google Apps domain name that represents all
-	// the
-	//    users of that domain. For example, `google.com` or
-	// `example.com`.
-	//
-	//
-	Members []string `json:"members,omitempty"`
-
-	// Role: Role that is assigned to `members`.
-	// For example, `roles/viewer`, `roles/editor`, or
-	// `roles/owner`.
-	// Required
-	Role string `json:"role,omitempty"`
-
-	// ForceSendFields is a list of field names (e.g. "Members") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "Members") to include in
-	// API requests with the JSON null value. By default, fields with empty
-	// values are omitted from API requests. However, any field with an
-	// empty value appearing in NullFields will be sent to the server as
-	// null. It is an error if a field in this list has a non-empty value.
-	// This may be used to include null fields in Patch requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *GoogleIamV1Binding) MarshalJSON() ([]byte, error) {
-	type NoMethod GoogleIamV1Binding
-	raw := NoMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
-// GoogleIamV1GetIamPolicyRequest: Request message for `GetIamPolicy`
-// method.
-type GoogleIamV1GetIamPolicyRequest struct {
-}
-
-// GoogleIamV1Policy: Defines an Identity and Access Management (IAM)
-// policy. It is used to
-// specify access control policies for Cloud Platform resources.
-//
-//
-// A `Policy` consists of a list of `bindings`. A `binding` binds a list
-// of
-// `members` to a `role`, where the members can be user accounts, Google
-// groups,
-// Google domains, and service accounts. A `role` is a named list of
-// permissions
-// defined by IAM.
-//
-// **JSON Example**
-//
-//     {
-//       "bindings": [
-//         {
-//           "role": "roles/owner",
-//           "members": [
-//             "user:mike@example.com",
-//             "group:admins@example.com",
-//             "domain:google.com",
-//
-// "serviceAccount:my-other-app@appspot.gserviceaccount.com"
-//           ]
-//         },
-//         {
-//           "role": "roles/viewer",
-//           "members": ["user:sean@example.com"]
-//         }
-//       ]
-//     }
-//
-// **YAML Example**
-//
-//     bindings:
-//     - members:
-//       - user:mike@example.com
-//       - group:admins@example.com
-//       - domain:google.com
-//       - serviceAccount:my-other-app@appspot.gserviceaccount.com
-//       role: roles/owner
-//     - members:
-//       - user:sean@example.com
-//       role: roles/viewer
-//
-//
-// For a description of IAM and its features, see the
-// [IAM developer's guide](https://cloud.google.com/iam/docs).
-type GoogleIamV1Policy struct {
-	// Bindings: Associates a list of `members` to a `role`.
-	// `bindings` with no members will result in an error.
-	Bindings []*GoogleIamV1Binding `json:"bindings,omitempty"`
-
-	// Etag: `etag` is used for optimistic concurrency control as a way to
-	// help
-	// prevent simultaneous updates of a policy from overwriting each
-	// other.
-	// It is strongly suggested that systems make use of the `etag` in
-	// the
-	// read-modify-write cycle to perform policy updates in order to avoid
-	// race
-	// conditions: An `etag` is returned in the response to `getIamPolicy`,
-	// and
-	// systems are expected to put that etag in the request to
-	// `setIamPolicy` to
-	// ensure that their change will be applied to the same version of the
-	// policy.
-	//
-	// If no `etag` is provided in the call to `setIamPolicy`, then the
-	// existing
-	// policy is overwritten blindly.
-	Etag string `json:"etag,omitempty"`
-
-	// Version: Deprecated.
-	Version int64 `json:"version,omitempty"`
-
-	// ServerResponse contains the HTTP response code and headers from the
-	// server.
-	googleapi.ServerResponse `json:"-"`
-
-	// ForceSendFields is a list of field names (e.g. "Bindings") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "Bindings") to include in
-	// API requests with the JSON null value. By default, fields with empty
-	// values are omitted from API requests. However, any field with an
-	// empty value appearing in NullFields will be sent to the server as
-	// null. It is an error if a field in this list has a non-empty value.
-	// This may be used to include null fields in Patch requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *GoogleIamV1Policy) MarshalJSON() ([]byte, error) {
-	type NoMethod GoogleIamV1Policy
-	raw := NoMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
-// GoogleIamV1SetIamPolicyRequest: Request message for `SetIamPolicy`
-// method.
-type GoogleIamV1SetIamPolicyRequest struct {
-	// Policy: REQUIRED: The complete policy to be applied to the
-	// `resource`. The size of
-	// the policy is limited to a few 10s of KB. An empty policy is a
-	// valid policy but certain Cloud Platform services (such as
-	// Projects)
-	// might reject them.
-	Policy *GoogleIamV1Policy `json:"policy,omitempty"`
-
-	// ForceSendFields is a list of field names (e.g. "Policy") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "Policy") to include in API
-	// requests with the JSON null value. By default, fields with empty
-	// values are omitted from API requests. However, any field with an
-	// empty value appearing in NullFields will be sent to the server as
-	// null. It is an error if a field in this list has a non-empty value.
-	// This may be used to include null fields in Patch requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *GoogleIamV1SetIamPolicyRequest) MarshalJSON() ([]byte, error) {
-	type NoMethod GoogleIamV1SetIamPolicyRequest
-	raw := NoMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
-// GoogleIamV1TestIamPermissionsRequest: Request message for
-// `TestIamPermissions` method.
-type GoogleIamV1TestIamPermissionsRequest struct {
-	// Permissions: The set of permissions to check for the `resource`.
-	// Permissions with
-	// wildcards (such as '*' or 'storage.*') are not allowed. For
-	// more
-	// information see
-	// [IAM
-	// Overview](https://cloud.google.com/iam/docs/overview#permissions).
-	Permissions []string `json:"permissions,omitempty"`
-
-	// ForceSendFields is a list of field names (e.g. "Permissions") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "Permissions") to include
-	// in API requests with the JSON null value. By default, fields with
-	// empty values are omitted from API requests. However, any field with
-	// an empty value appearing in NullFields will be sent to the server as
-	// null. It is an error if a field in this list has a non-empty value.
-	// This may be used to include null fields in Patch requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *GoogleIamV1TestIamPermissionsRequest) MarshalJSON() ([]byte, error) {
-	type NoMethod GoogleIamV1TestIamPermissionsRequest
-	raw := NoMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
-// GoogleIamV1TestIamPermissionsResponse: Response message for
-// `TestIamPermissions` method.
-type GoogleIamV1TestIamPermissionsResponse struct {
-	// Permissions: A subset of `TestPermissionsRequest.permissions` that
-	// the caller is
-	// allowed.
-	Permissions []string `json:"permissions,omitempty"`
-
-	// ServerResponse contains the HTTP response code and headers from the
-	// server.
-	googleapi.ServerResponse `json:"-"`
-
-	// ForceSendFields is a list of field names (e.g. "Permissions") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "Permissions") to include
-	// in API requests with the JSON null value. By default, fields with
-	// empty values are omitted from API requests. However, any field with
-	// an empty value appearing in NullFields will be sent to the server as
-	// null. It is an error if a field in this list has a non-empty value.
-	// This may be used to include null fields in Patch requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *GoogleIamV1TestIamPermissionsResponse) MarshalJSON() ([]byte, error) {
-	type NoMethod GoogleIamV1TestIamPermissionsResponse
-	raw := NoMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
 // HorizontalPodAutoscaling: Configuration options for the horizontal
 // pod autoscaling feature, which
 // increases or decreases the number of replica pods a replication
@@ -1634,29 +1344,6 @@
 	// subnetwork.
 	SubnetworkName string `json:"subnetworkName,omitempty"`
 
-	// TpuIpv4CidrBlock: The IP address range of the Cloud TPUs in this
-	// cluster. If unspecified, a
-	// range will be automatically chosen with the default size.
-	//
-	// This field is only applicable when `use_ip_aliases` is true.
-	//
-	// If unspecified, the range will use the default size.
-	//
-	// Set to /netmask (e.g. `/14`) to have a range chosen with a
-	// specific
-	// netmask.
-	//
-	// Set to
-	// a
-	// [CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing)
-	//
-	// notation (e.g. `10.96.0.0/14`) from the RFC-1918 private networks
-	// (e.g.
-	// `10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`) to pick a specific
-	// range
-	// to use.
-	TpuIpv4CidrBlock string `json:"tpuIpv4CidrBlock,omitempty"`
-
 	// UseIpAliases: Whether alias IPs will be used for pod IPs in the
 	// cluster.
 	UseIpAliases bool `json:"useIpAliases,omitempty"`
@@ -1955,7 +1642,7 @@
 // for GKE cluster scheduling.
 type Location struct {
 	// Name: Contains the name of the resource requested.
-	// Specified in the format 'projects/*/locations/*'.
+	// Specific in the format 'projects/*/locations/*'.
 	Name string `json:"name,omitempty"`
 
 	// Recommended: Recommended is a bool combining the drain state of the
@@ -4089,432 +3776,6 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
-// method id "container.projects.getIamPolicy":
-
-type ProjectsGetIamPolicyCall struct {
-	s                              *Service
-	resource                       string
-	googleiamv1getiampolicyrequest *GoogleIamV1GetIamPolicyRequest
-	urlParams_                     gensupport.URLParams
-	ctx_                           context.Context
-	header_                        http.Header
-}
-
-// GetIamPolicy: Gets the access control policy for a resource. Returns
-// NOT_FOUND error if
-// the resource does not exist. Returns an empty policy if the resource
-// exists
-// but does not have a policy set.
-//
-// Authorization requires the Google IAM
-// permission
-// `container.clusters.getIamPolicy` on the specified resource.
-func (r *ProjectsService) GetIamPolicy(resource string, googleiamv1getiampolicyrequest *GoogleIamV1GetIamPolicyRequest) *ProjectsGetIamPolicyCall {
-	c := &ProjectsGetIamPolicyCall{s: r.s, urlParams_: make(gensupport.URLParams)}
-	c.resource = resource
-	c.googleiamv1getiampolicyrequest = googleiamv1getiampolicyrequest
-	return c
-}
-
-// Fields allows partial responses to be retrieved. See
-// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
-// for more information.
-func (c *ProjectsGetIamPolicyCall) Fields(s ...googleapi.Field) *ProjectsGetIamPolicyCall {
-	c.urlParams_.Set("fields", googleapi.CombineFields(s))
-	return c
-}
-
-// Context sets the context to be used in this call's Do method. Any
-// pending HTTP request will be aborted if the provided context is
-// canceled.
-func (c *ProjectsGetIamPolicyCall) Context(ctx context.Context) *ProjectsGetIamPolicyCall {
-	c.ctx_ = ctx
-	return c
-}
-
-// Header returns an http.Header that can be modified by the caller to
-// add HTTP headers to the request.
-func (c *ProjectsGetIamPolicyCall) Header() http.Header {
-	if c.header_ == nil {
-		c.header_ = make(http.Header)
-	}
-	return c.header_
-}
-
-func (c *ProjectsGetIamPolicyCall) doRequest(alt string) (*http.Response, error) {
-	reqHeaders := make(http.Header)
-	for k, v := range c.header_ {
-		reqHeaders[k] = v
-	}
-	reqHeaders.Set("User-Agent", c.s.userAgent())
-	var body io.Reader = nil
-	body, err := googleapi.WithoutDataWrapper.JSONReader(c.googleiamv1getiampolicyrequest)
-	if err != nil {
-		return nil, err
-	}
-	reqHeaders.Set("Content-Type", "application/json")
-	c.urlParams_.Set("alt", alt)
-	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta1/{+resource}:getIamPolicy")
-	urls += "?" + c.urlParams_.Encode()
-	req, _ := http.NewRequest("POST", urls, body)
-	req.Header = reqHeaders
-	googleapi.Expand(req.URL, map[string]string{
-		"resource": c.resource,
-	})
-	return gensupport.SendRequest(c.ctx_, c.s.client, req)
-}
-
-// Do executes the "container.projects.getIamPolicy" call.
-// Exactly one of *GoogleIamV1Policy or error will be non-nil. Any
-// non-2xx status code is an error. Response headers are in either
-// *GoogleIamV1Policy.ServerResponse.Header or (if a response was
-// returned at all) in error.(*googleapi.Error).Header. Use
-// googleapi.IsNotModified to check whether the returned error was
-// because http.StatusNotModified was returned.
-func (c *ProjectsGetIamPolicyCall) Do(opts ...googleapi.CallOption) (*GoogleIamV1Policy, error) {
-	gensupport.SetOptions(c.urlParams_, opts...)
-	res, err := c.doRequest("json")
-	if res != nil && res.StatusCode == http.StatusNotModified {
-		if res.Body != nil {
-			res.Body.Close()
-		}
-		return nil, &googleapi.Error{
-			Code:   res.StatusCode,
-			Header: res.Header,
-		}
-	}
-	if err != nil {
-		return nil, err
-	}
-	defer googleapi.CloseBody(res)
-	if err := googleapi.CheckResponse(res); err != nil {
-		return nil, err
-	}
-	ret := &GoogleIamV1Policy{
-		ServerResponse: googleapi.ServerResponse{
-			Header:         res.Header,
-			HTTPStatusCode: res.StatusCode,
-		},
-	}
-	target := &ret
-	if err := gensupport.DecodeResponse(target, res); err != nil {
-		return nil, err
-	}
-	return ret, nil
-	// {
-	//   "description": "Gets the access control policy for a resource. Returns NOT_FOUND error if\nthe resource does not exist. Returns an empty policy if the resource exists\nbut does not have a policy set.\n\nAuthorization requires the Google IAM permission\n`container.clusters.getIamPolicy` on the specified resource.",
-	//   "flatPath": "v1beta1/projects/{projectsId}:getIamPolicy",
-	//   "httpMethod": "POST",
-	//   "id": "container.projects.getIamPolicy",
-	//   "parameterOrder": [
-	//     "resource"
-	//   ],
-	//   "parameters": {
-	//     "resource": {
-	//       "description": "REQUIRED: The resource for which the policy is being requested.\nSee the operation documentation for the appropriate value for this field.",
-	//       "location": "path",
-	//       "pattern": "^projects/.+$",
-	//       "required": true,
-	//       "type": "string"
-	//     }
-	//   },
-	//   "path": "v1beta1/{+resource}:getIamPolicy",
-	//   "request": {
-	//     "$ref": "GoogleIamV1GetIamPolicyRequest"
-	//   },
-	//   "response": {
-	//     "$ref": "GoogleIamV1Policy"
-	//   },
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/cloud-platform"
-	//   ]
-	// }
-
-}
-
-// method id "container.projects.setIamPolicy":
-
-type ProjectsSetIamPolicyCall struct {
-	s                              *Service
-	resource                       string
-	googleiamv1setiampolicyrequest *GoogleIamV1SetIamPolicyRequest
-	urlParams_                     gensupport.URLParams
-	ctx_                           context.Context
-	header_                        http.Header
-}
-
-// SetIamPolicy: Sets the access control policy for a resource. Replaces
-// any existing
-// policy.
-//
-// Authorization requires the Google IAM
-// permission
-// 'container.clusters.setIamPolicy' on the specified resource.
-func (r *ProjectsService) SetIamPolicy(resource string, googleiamv1setiampolicyrequest *GoogleIamV1SetIamPolicyRequest) *ProjectsSetIamPolicyCall {
-	c := &ProjectsSetIamPolicyCall{s: r.s, urlParams_: make(gensupport.URLParams)}
-	c.resource = resource
-	c.googleiamv1setiampolicyrequest = googleiamv1setiampolicyrequest
-	return c
-}
-
-// Fields allows partial responses to be retrieved. See
-// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
-// for more information.
-func (c *ProjectsSetIamPolicyCall) Fields(s ...googleapi.Field) *ProjectsSetIamPolicyCall {
-	c.urlParams_.Set("fields", googleapi.CombineFields(s))
-	return c
-}
-
-// Context sets the context to be used in this call's Do method. Any
-// pending HTTP request will be aborted if the provided context is
-// canceled.
-func (c *ProjectsSetIamPolicyCall) Context(ctx context.Context) *ProjectsSetIamPolicyCall {
-	c.ctx_ = ctx
-	return c
-}
-
-// Header returns an http.Header that can be modified by the caller to
-// add HTTP headers to the request.
-func (c *ProjectsSetIamPolicyCall) Header() http.Header {
-	if c.header_ == nil {
-		c.header_ = make(http.Header)
-	}
-	return c.header_
-}
-
-func (c *ProjectsSetIamPolicyCall) doRequest(alt string) (*http.Response, error) {
-	reqHeaders := make(http.Header)
-	for k, v := range c.header_ {
-		reqHeaders[k] = v
-	}
-	reqHeaders.Set("User-Agent", c.s.userAgent())
-	var body io.Reader = nil
-	body, err := googleapi.WithoutDataWrapper.JSONReader(c.googleiamv1setiampolicyrequest)
-	if err != nil {
-		return nil, err
-	}
-	reqHeaders.Set("Content-Type", "application/json")
-	c.urlParams_.Set("alt", alt)
-	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta1/{+resource}:setIamPolicy")
-	urls += "?" + c.urlParams_.Encode()
-	req, _ := http.NewRequest("POST", urls, body)
-	req.Header = reqHeaders
-	googleapi.Expand(req.URL, map[string]string{
-		"resource": c.resource,
-	})
-	return gensupport.SendRequest(c.ctx_, c.s.client, req)
-}
-
-// Do executes the "container.projects.setIamPolicy" call.
-// Exactly one of *GoogleIamV1Policy or error will be non-nil. Any
-// non-2xx status code is an error. Response headers are in either
-// *GoogleIamV1Policy.ServerResponse.Header or (if a response was
-// returned at all) in error.(*googleapi.Error).Header. Use
-// googleapi.IsNotModified to check whether the returned error was
-// because http.StatusNotModified was returned.
-func (c *ProjectsSetIamPolicyCall) Do(opts ...googleapi.CallOption) (*GoogleIamV1Policy, error) {
-	gensupport.SetOptions(c.urlParams_, opts...)
-	res, err := c.doRequest("json")
-	if res != nil && res.StatusCode == http.StatusNotModified {
-		if res.Body != nil {
-			res.Body.Close()
-		}
-		return nil, &googleapi.Error{
-			Code:   res.StatusCode,
-			Header: res.Header,
-		}
-	}
-	if err != nil {
-		return nil, err
-	}
-	defer googleapi.CloseBody(res)
-	if err := googleapi.CheckResponse(res); err != nil {
-		return nil, err
-	}
-	ret := &GoogleIamV1Policy{
-		ServerResponse: googleapi.ServerResponse{
-			Header:         res.Header,
-			HTTPStatusCode: res.StatusCode,
-		},
-	}
-	target := &ret
-	if err := gensupport.DecodeResponse(target, res); err != nil {
-		return nil, err
-	}
-	return ret, nil
-	// {
-	//   "description": "Sets the access control policy for a resource. Replaces any existing\npolicy.\n\nAuthorization requires the Google IAM permission\n'container.clusters.setIamPolicy' on the specified resource.",
-	//   "flatPath": "v1beta1/projects/{projectsId}:setIamPolicy",
-	//   "httpMethod": "POST",
-	//   "id": "container.projects.setIamPolicy",
-	//   "parameterOrder": [
-	//     "resource"
-	//   ],
-	//   "parameters": {
-	//     "resource": {
-	//       "description": "REQUIRED: The resource for which the policy is being specified.\nSee the operation documentation for the appropriate value for this field.",
-	//       "location": "path",
-	//       "pattern": "^projects/.+$",
-	//       "required": true,
-	//       "type": "string"
-	//     }
-	//   },
-	//   "path": "v1beta1/{+resource}:setIamPolicy",
-	//   "request": {
-	//     "$ref": "GoogleIamV1SetIamPolicyRequest"
-	//   },
-	//   "response": {
-	//     "$ref": "GoogleIamV1Policy"
-	//   },
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/cloud-platform"
-	//   ]
-	// }
-
-}
-
-// method id "container.projects.testIamPermissions":
-
-type ProjectsTestIamPermissionsCall struct {
-	s                                    *Service
-	resource                             string
-	googleiamv1testiampermissionsrequest *GoogleIamV1TestIamPermissionsRequest
-	urlParams_                           gensupport.URLParams
-	ctx_                                 context.Context
-	header_                              http.Header
-}
-
-// TestIamPermissions: Returns permissions that a caller has on the
-// specified resource.
-// If the resource does not exist, this will return an empty set
-// of
-// permissions, not a NOT_FOUND error.
-//
-// There is no permission required to make this API call.
-func (r *ProjectsService) TestIamPermissions(resource string, googleiamv1testiampermissionsrequest *GoogleIamV1TestIamPermissionsRequest) *ProjectsTestIamPermissionsCall {
-	c := &ProjectsTestIamPermissionsCall{s: r.s, urlParams_: make(gensupport.URLParams)}
-	c.resource = resource
-	c.googleiamv1testiampermissionsrequest = googleiamv1testiampermissionsrequest
-	return c
-}
-
-// Fields allows partial responses to be retrieved. See
-// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
-// for more information.
-func (c *ProjectsTestIamPermissionsCall) Fields(s ...googleapi.Field) *ProjectsTestIamPermissionsCall {
-	c.urlParams_.Set("fields", googleapi.CombineFields(s))
-	return c
-}
-
-// Context sets the context to be used in this call's Do method. Any
-// pending HTTP request will be aborted if the provided context is
-// canceled.
-func (c *ProjectsTestIamPermissionsCall) Context(ctx context.Context) *ProjectsTestIamPermissionsCall {
-	c.ctx_ = ctx
-	return c
-}
-
-// Header returns an http.Header that can be modified by the caller to
-// add HTTP headers to the request.
-func (c *ProjectsTestIamPermissionsCall) Header() http.Header {
-	if c.header_ == nil {
-		c.header_ = make(http.Header)
-	}
-	return c.header_
-}
-
-func (c *ProjectsTestIamPermissionsCall) doRequest(alt string) (*http.Response, error) {
-	reqHeaders := make(http.Header)
-	for k, v := range c.header_ {
-		reqHeaders[k] = v
-	}
-	reqHeaders.Set("User-Agent", c.s.userAgent())
-	var body io.Reader = nil
-	body, err := googleapi.WithoutDataWrapper.JSONReader(c.googleiamv1testiampermissionsrequest)
-	if err != nil {
-		return nil, err
-	}
-	reqHeaders.Set("Content-Type", "application/json")
-	c.urlParams_.Set("alt", alt)
-	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta1/{+resource}:testIamPermissions")
-	urls += "?" + c.urlParams_.Encode()
-	req, _ := http.NewRequest("POST", urls, body)
-	req.Header = reqHeaders
-	googleapi.Expand(req.URL, map[string]string{
-		"resource": c.resource,
-	})
-	return gensupport.SendRequest(c.ctx_, c.s.client, req)
-}
-
-// Do executes the "container.projects.testIamPermissions" call.
-// Exactly one of *GoogleIamV1TestIamPermissionsResponse or error will
-// be non-nil. Any non-2xx status code is an error. Response headers are
-// in either
-// *GoogleIamV1TestIamPermissionsResponse.ServerResponse.Header or (if a
-// response was returned at all) in error.(*googleapi.Error).Header. Use
-// googleapi.IsNotModified to check whether the returned error was
-// because http.StatusNotModified was returned.
-func (c *ProjectsTestIamPermissionsCall) Do(opts ...googleapi.CallOption) (*GoogleIamV1TestIamPermissionsResponse, error) {
-	gensupport.SetOptions(c.urlParams_, opts...)
-	res, err := c.doRequest("json")
-	if res != nil && res.StatusCode == http.StatusNotModified {
-		if res.Body != nil {
-			res.Body.Close()
-		}
-		return nil, &googleapi.Error{
-			Code:   res.StatusCode,
-			Header: res.Header,
-		}
-	}
-	if err != nil {
-		return nil, err
-	}
-	defer googleapi.CloseBody(res)
-	if err := googleapi.CheckResponse(res); err != nil {
-		return nil, err
-	}
-	ret := &GoogleIamV1TestIamPermissionsResponse{
-		ServerResponse: googleapi.ServerResponse{
-			Header:         res.Header,
-			HTTPStatusCode: res.StatusCode,
-		},
-	}
-	target := &ret
-	if err := gensupport.DecodeResponse(target, res); err != nil {
-		return nil, err
-	}
-	return ret, nil
-	// {
-	//   "description": "Returns permissions that a caller has on the specified resource.\nIf the resource does not exist, this will return an empty set of\npermissions, not a NOT_FOUND error.\n\nThere is no permission required to make this API call.",
-	//   "flatPath": "v1beta1/projects/{projectsId}:testIamPermissions",
-	//   "httpMethod": "POST",
-	//   "id": "container.projects.testIamPermissions",
-	//   "parameterOrder": [
-	//     "resource"
-	//   ],
-	//   "parameters": {
-	//     "resource": {
-	//       "description": "REQUIRED: The resource for which the policy detail is being requested.\nSee the operation documentation for the appropriate value for this field.",
-	//       "location": "path",
-	//       "pattern": "^projects/.+$",
-	//       "required": true,
-	//       "type": "string"
-	//     }
-	//   },
-	//   "path": "v1beta1/{+resource}:testIamPermissions",
-	//   "request": {
-	//     "$ref": "GoogleIamV1TestIamPermissionsRequest"
-	//   },
-	//   "response": {
-	//     "$ref": "GoogleIamV1TestIamPermissionsResponse"
-	//   },
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/cloud-platform"
-	//   ]
-	// }
-
-}
-
 // method id "container.projects.aggregated.usableSubnetworks.list":
 
 type ProjectsAggregatedUsableSubnetworksListCall struct {
@@ -5015,7 +4276,7 @@
 	//   ],
 	//   "parameters": {
 	//     "parent": {
-	//       "description": "Contains the name of the resource requested.\nSpecified in the format 'projects/*'.",
+	//       "description": "Contains the name of the resource requested.\nSpecific in the format 'projects/*/locations'.",
 	//       "location": "path",
 	//       "pattern": "^projects/[^/]+$",
 	//       "required": true,
@@ -7595,7 +6856,7 @@
 	//   ],
 	//   "parameters": {
 	//     "parent": {
-	//       "description": "The parent (project, location, cluster id) where the node pool will be\ncreated. Specified in the format\n'projects/*/locations/*/clusters/*'.",
+	//       "description": "The parent (project, location, cluster id) where the node pool will be\ncreated. Specified in the format\n'projects/*/locations/*/clusters/*/nodePools/*'.",
 	//       "location": "path",
 	//       "pattern": "^projects/[^/]+/locations/[^/]+/clusters/[^/]+$",
 	//       "required": true,
diff --git a/content/v2/content-api.json b/content/v2/content-api.json
index 99340d9..57f3be3 100644
--- a/content/v2/content-api.json
+++ b/content/v2/content-api.json
@@ -15,7 +15,7 @@
   "description": "Manages product items, inventory, and Merchant Center accounts for Google Shopping.",
   "discoveryVersion": "v1",
   "documentationLink": "https://developers.google.com/shopping-content",
-  "etag": "\"Zkyw9ACJZUvcYmlFaKGChzhmtnE/MzgF60zzzOG-2sW0R7344_YxT7w\"",
+  "etag": "\"J3WqvAcMk4eQjJXvfSI4Yr8VouA/A-IxAkYBoHCgmwdviWG6unsoj34\"",
   "icons": {
     "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
     "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
@@ -4992,15 +4992,15 @@
         },
         "customerBalance": {
           "$ref": "Amount",
-          "description": "[required] Customer balance on this invoice. A positive amount means the customer is paying, a negative one means the customer is receiving money. Note that it must always be true that merchant_balance + customer_balance + google_balance = 0."
+          "description": "[required] Customer balance on this invoice. A positive amount means the customer is paying, a negative one means the customer is receiving money. Note: the sum of merchant_balance, customer_balance and google_balance must always be zero."
         },
         "googleBalance": {
           "$ref": "Amount",
-          "description": "[required] Google balance on this invoice. A positive amount means Google is paying, a negative one means Google is receiving money. Note that it must always be true that merchant_balance + customer_balance + google_balance = 0."
+          "description": "[required] Google balance on this invoice. A positive amount means Google is paying, a negative one means Google is receiving money. Note: the sum of merchant_balance, customer_balance and google_balance must always be zero."
         },
         "merchantBalance": {
           "$ref": "Amount",
-          "description": "[required] Merchant balance on this invoice. A positive amount means the merchant is paying, a negative one means the merchant is receiving money. Note that it must always be true that merchant_balance + customer_balance + google_balance = 0."
+          "description": "[required] Merchant balance on this invoice. A positive amount means the merchant is paying, a negative one means the merchant is receiving money. Note: the sum of merchant_balance, customer_balance and google_balance must always be zero."
         },
         "productTotal": {
           "$ref": "Amount",
@@ -6912,7 +6912,7 @@
           "type": "string"
         },
         "deliveryDate": {
-          "description": "Date on which the shipment has been delivered, in ISO 8601 format. Optional and can be provided only if",
+          "description": "Date on which the shipment has been delivered, in ISO 8601 format. Optional and can be provided only if status is delivered.",
           "type": "string"
         },
         "shipmentId": {
@@ -7444,7 +7444,7 @@
           "type": "string"
         },
         "deliveryDate": {
-          "description": "Date on which the shipment has been delivered, in ISO 8601 format. Optional and can be provided only if",
+          "description": "Date on which the shipment has been delivered, in ISO 8601 format. Optional and can be provided only if status is delivered.",
           "type": "string"
         },
         "operationId": {
diff --git a/content/v2/content-gen.go b/content/v2/content-gen.go
index ee103a8..6e8ce75 100644
--- a/content/v2/content-gen.go
+++ b/content/v2/content-gen.go
@@ -3116,20 +3116,20 @@
 
 	// CustomerBalance: [required] Customer balance on this invoice. A
 	// positive amount means the customer is paying, a negative one means
-	// the customer is receiving money. Note that it must always be true
-	// that merchant_balance + customer_balance + google_balance = 0.
+	// the customer is receiving money. Note: the sum of merchant_balance,
+	// customer_balance and google_balance must always be zero.
 	CustomerBalance *Amount `json:"customerBalance,omitempty"`
 
 	// GoogleBalance: [required] Google balance on this invoice. A positive
 	// amount means Google is paying, a negative one means Google is
-	// receiving money. Note that it must always be true that
-	// merchant_balance + customer_balance + google_balance = 0.
+	// receiving money. Note: the sum of merchant_balance, customer_balance
+	// and google_balance must always be zero.
 	GoogleBalance *Amount `json:"googleBalance,omitempty"`
 
 	// MerchantBalance: [required] Merchant balance on this invoice. A
 	// positive amount means the merchant is paying, a negative one means
-	// the merchant is receiving money. Note that it must always be true
-	// that merchant_balance + customer_balance + google_balance = 0.
+	// the merchant is receiving money. Note: the sum of merchant_balance,
+	// customer_balance and google_balance must always be zero.
 	MerchantBalance *Amount `json:"merchantBalance,omitempty"`
 
 	// ProductTotal: [required] Total price for the product.
@@ -6228,7 +6228,8 @@
 	Carrier string `json:"carrier,omitempty"`
 
 	// DeliveryDate: Date on which the shipment has been delivered, in ISO
-	// 8601 format. Optional and can be provided only if
+	// 8601 format. Optional and can be provided only if status is
+	// delivered.
 	DeliveryDate string `json:"deliveryDate,omitempty"`
 
 	// ShipmentId: The ID of the shipment.
@@ -7190,7 +7191,8 @@
 	Carrier string `json:"carrier,omitempty"`
 
 	// DeliveryDate: Date on which the shipment has been delivered, in ISO
-	// 8601 format. Optional and can be provided only if
+	// 8601 format. Optional and can be provided only if status is
+	// delivered.
 	DeliveryDate string `json:"deliveryDate,omitempty"`
 
 	// OperationId: The ID of the operation. Unique across all operations
diff --git a/content/v2sandbox/content-api.json b/content/v2sandbox/content-api.json
index 3ba64ad..ec1960d 100644
--- a/content/v2sandbox/content-api.json
+++ b/content/v2sandbox/content-api.json
@@ -15,7 +15,7 @@
   "description": "Manages product items, inventory, and Merchant Center accounts for Google Shopping.",
   "discoveryVersion": "v1",
   "documentationLink": "https://developers.google.com/shopping-content",
-  "etag": "\"Zkyw9ACJZUvcYmlFaKGChzhmtnE/gnDDjEACpAKukHVLbaUNFL-Vlz0\"",
+  "etag": "\"J3WqvAcMk4eQjJXvfSI4Yr8VouA/kCPv4u6Uhzo97uC-UVSXFV5eBQ4\"",
   "icons": {
     "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
     "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
@@ -1074,15 +1074,15 @@
         },
         "customerBalance": {
           "$ref": "Amount",
-          "description": "[required] Customer balance on this invoice. A positive amount means the customer is paying, a negative one means the customer is receiving money. Note that it must always be true that merchant_balance + customer_balance + google_balance = 0."
+          "description": "[required] Customer balance on this invoice. A positive amount means the customer is paying, a negative one means the customer is receiving money. Note: the sum of merchant_balance, customer_balance and google_balance must always be zero."
         },
         "googleBalance": {
           "$ref": "Amount",
-          "description": "[required] Google balance on this invoice. A positive amount means Google is paying, a negative one means Google is receiving money. Note that it must always be true that merchant_balance + customer_balance + google_balance = 0."
+          "description": "[required] Google balance on this invoice. A positive amount means Google is paying, a negative one means Google is receiving money. Note: the sum of merchant_balance, customer_balance and google_balance must always be zero."
         },
         "merchantBalance": {
           "$ref": "Amount",
-          "description": "[required] Merchant balance on this invoice. A positive amount means the merchant is paying, a negative one means the merchant is receiving money. Note that it must always be true that merchant_balance + customer_balance + google_balance = 0."
+          "description": "[required] Merchant balance on this invoice. A positive amount means the merchant is paying, a negative one means the merchant is receiving money. Note: the sum of merchant_balance, customer_balance and google_balance must always be zero."
         },
         "productTotal": {
           "$ref": "Amount",
@@ -2609,7 +2609,7 @@
           "type": "string"
         },
         "deliveryDate": {
-          "description": "Date on which the shipment has been delivered, in ISO 8601 format. Optional and can be provided only if",
+          "description": "Date on which the shipment has been delivered, in ISO 8601 format. Optional and can be provided only if status is delivered.",
           "type": "string"
         },
         "shipmentId": {
@@ -3141,7 +3141,7 @@
           "type": "string"
         },
         "deliveryDate": {
-          "description": "Date on which the shipment has been delivered, in ISO 8601 format. Optional and can be provided only if",
+          "description": "Date on which the shipment has been delivered, in ISO 8601 format. Optional and can be provided only if status is delivered.",
           "type": "string"
         },
         "operationId": {
diff --git a/content/v2sandbox/content-gen.go b/content/v2sandbox/content-gen.go
index d600c19..8314622 100644
--- a/content/v2sandbox/content-gen.go
+++ b/content/v2sandbox/content-gen.go
@@ -213,20 +213,20 @@
 
 	// CustomerBalance: [required] Customer balance on this invoice. A
 	// positive amount means the customer is paying, a negative one means
-	// the customer is receiving money. Note that it must always be true
-	// that merchant_balance + customer_balance + google_balance = 0.
+	// the customer is receiving money. Note: the sum of merchant_balance,
+	// customer_balance and google_balance must always be zero.
 	CustomerBalance *Amount `json:"customerBalance,omitempty"`
 
 	// GoogleBalance: [required] Google balance on this invoice. A positive
 	// amount means Google is paying, a negative one means Google is
-	// receiving money. Note that it must always be true that
-	// merchant_balance + customer_balance + google_balance = 0.
+	// receiving money. Note: the sum of merchant_balance, customer_balance
+	// and google_balance must always be zero.
 	GoogleBalance *Amount `json:"googleBalance,omitempty"`
 
 	// MerchantBalance: [required] Merchant balance on this invoice. A
 	// positive amount means the merchant is paying, a negative one means
-	// the merchant is receiving money. Note that it must always be true
-	// that merchant_balance + customer_balance + google_balance = 0.
+	// the merchant is receiving money. Note: the sum of merchant_balance,
+	// customer_balance and google_balance must always be zero.
 	MerchantBalance *Amount `json:"merchantBalance,omitempty"`
 
 	// ProductTotal: [required] Total price for the product.
@@ -2618,7 +2618,8 @@
 	Carrier string `json:"carrier,omitempty"`
 
 	// DeliveryDate: Date on which the shipment has been delivered, in ISO
-	// 8601 format. Optional and can be provided only if
+	// 8601 format. Optional and can be provided only if status is
+	// delivered.
 	DeliveryDate string `json:"deliveryDate,omitempty"`
 
 	// ShipmentId: The ID of the shipment.
@@ -3580,7 +3581,8 @@
 	Carrier string `json:"carrier,omitempty"`
 
 	// DeliveryDate: Date on which the shipment has been delivered, in ISO
-	// 8601 format. Optional and can be provided only if
+	// 8601 format. Optional and can be provided only if status is
+	// delivered.
 	DeliveryDate string `json:"deliveryDate,omitempty"`
 
 	// OperationId: The ID of the operation. Unique across all operations
diff --git a/drive/v2/drive-api.json b/drive/v2/drive-api.json
index 824e780..fbb4f63 100644
--- a/drive/v2/drive-api.json
+++ b/drive/v2/drive-api.json
@@ -38,7 +38,7 @@
   "description": "Manages files in Drive including uploading, downloading, searching, detecting changes, and updating sharing permissions.",
   "discoveryVersion": "v1",
   "documentationLink": "https://developers.google.com/drive/",
-  "etag": "\"Zkyw9ACJZUvcYmlFaKGChzhmtnE/f5YU4B1YgiNFEadOJN80qPxEFqA\"",
+  "etag": "\"J3WqvAcMk4eQjJXvfSI4Yr8VouA/Y4eIZg2GvfAVWMaSdAHecXZoCtk\"",
   "icons": {
     "x16": "https://ssl.gstatic.com/docs/doclist/images/drive_icon_16.png",
     "x32": "https://ssl.gstatic.com/docs/doclist/images/drive_icon_32.png"
@@ -1883,7 +1883,7 @@
             },
             "useDomainAdminAccess": {
               "default": "false",
-              "description": "Whether the request should be treated as if it was issued by a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the item belongs.",
+              "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the item belongs.",
               "location": "query",
               "type": "boolean"
             }
@@ -1923,7 +1923,7 @@
             },
             "useDomainAdminAccess": {
               "default": "false",
-              "description": "Whether the request should be treated as if it was issued by a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the item belongs.",
+              "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the item belongs.",
               "location": "query",
               "type": "boolean"
             }
@@ -2004,7 +2004,7 @@
             },
             "useDomainAdminAccess": {
               "default": "false",
-              "description": "Whether the request should be treated as if it was issued by a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the item belongs.",
+              "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the item belongs.",
               "location": "query",
               "type": "boolean"
             }
@@ -2056,7 +2056,7 @@
             },
             "useDomainAdminAccess": {
               "default": "false",
-              "description": "Whether the request should be treated as if it was issued by a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the item belongs.",
+              "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the item belongs.",
               "location": "query",
               "type": "boolean"
             }
@@ -2115,7 +2115,7 @@
             },
             "useDomainAdminAccess": {
               "default": "false",
-              "description": "Whether the request should be treated as if it was issued by a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the item belongs.",
+              "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the item belongs.",
               "location": "query",
               "type": "boolean"
             }
@@ -2173,7 +2173,7 @@
             },
             "useDomainAdminAccess": {
               "default": "false",
-              "description": "Whether the request should be treated as if it was issued by a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the item belongs.",
+              "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the item belongs.",
               "location": "query",
               "type": "boolean"
             }
@@ -2965,7 +2965,7 @@
             },
             "useDomainAdminAccess": {
               "default": "false",
-              "description": "Whether the request should be treated as if it was issued by a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the Team Drive belongs.",
+              "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the Team Drive belongs.",
               "location": "query",
               "type": "boolean"
             }
@@ -3031,7 +3031,7 @@
             },
             "useDomainAdminAccess": {
               "default": "false",
-              "description": "Whether the request should be treated as if it was issued by a domain administrator; if set to true, then all Team Drives of the domain in which the requester is an administrator are returned.",
+              "description": "Issue the request as a domain administrator; if set to true, then all Team Drives of the domain in which the requester is an administrator are returned.",
               "location": "query",
               "type": "boolean"
             }
@@ -3058,6 +3058,12 @@
               "location": "path",
               "required": true,
               "type": "string"
+            },
+            "useDomainAdminAccess": {
+              "default": "false",
+              "description": "Issue the request as a domain administrator; if set to true, then all Team Drives of the domain in which the requester is an administrator are returned.",
+              "location": "query",
+              "type": "boolean"
             }
           },
           "path": "teamdrives/{teamDriveId}",
@@ -3074,7 +3080,6 @@
       }
     }
   },
-  "revision": "20180413",
   "rootUrl": "https://www.googleapis.com/",
   "schemas": {
     "About": {
@@ -3928,8 +3933,12 @@
               "description": "Whether the current user can add children to this folder. This is always false when the item is not a folder.",
               "type": "boolean"
             },
+            "canChangeCopyRequiresWriterPermission": {
+              "description": "Whether the current user can change the copyRequiresWriterPermission restriction of this file.",
+              "type": "boolean"
+            },
             "canChangeRestrictedDownload": {
-              "description": "Whether the current user can change the restricted download label of this file.",
+              "description": "Deprecated",
               "type": "boolean"
             },
             "canComment": {
@@ -3995,6 +4004,10 @@
           },
           "type": "object"
         },
+        "copyRequiresWriterPermission": {
+          "description": "Whether the options to copy, print, or download this file, should be disabled for readers and commenters.",
+          "type": "boolean"
+        },
         "copyable": {
           "description": "Deprecated: use capabilities/canCopy.",
           "type": "boolean"
@@ -4224,7 +4237,7 @@
               "type": "boolean"
             },
             "restricted": {
-              "description": "Whether viewers and commenters are prevented from downloading, printing, and copying this file.",
+              "description": "Deprecated - use copyRequiresWriterPermission instead.",
               "type": "boolean"
             },
             "starred": {
@@ -4977,10 +4990,22 @@
               "description": "Whether the current user can add children to folders in this Team Drive.",
               "type": "boolean"
             },
+            "canChangeCopyRequiresWriterPermissionRestriction": {
+              "description": "Whether the current user can change the copyRequiresWriterPermission restriction of this Team Drive.",
+              "type": "boolean"
+            },
+            "canChangeDomainUsersOnlyRestriction": {
+              "description": "Whether the current user can change the domainUsersOnly restriction of this Team Drive.",
+              "type": "boolean"
+            },
             "canChangeTeamDriveBackground": {
               "description": "Whether the current user can change the background of this Team Drive.",
               "type": "boolean"
             },
+            "canChangeTeamMembersOnlyRestriction": {
+              "description": "Whether the current user can change the teamMembersOnly restriction of this Team Drive.",
+              "type": "boolean"
+            },
             "canComment": {
               "description": "Whether the current user can comment on files in this Team Drive.",
               "type": "boolean"
@@ -5042,7 +5067,7 @@
           "type": "string"
         },
         "id": {
-          "description": "The ID of this Team Drive which is also the ID of the top level folder for this Team Drive.",
+          "description": "The ID of this Team Drive which is also the ID of the top level folder of this Team Drive.",
           "type": "string"
         },
         "kind": {
@@ -5059,6 +5084,28 @@
           "description": "The name of this Team Drive.",
           "type": "string"
         },
+        "restrictions": {
+          "description": "A set of restrictions that apply to this Team Drive or items inside this Team Drive.",
+          "properties": {
+            "adminManagedRestrictions": {
+              "description": "Whether administrative privileges on this Team Drive are required to modify restrictions.",
+              "type": "boolean"
+            },
+            "copyRequiresWriterPermission": {
+              "description": "Whether the options to copy, print, or download files inside this Team Drive, should be disabled for readers and commenters. When this restriction is set to true, it will override the similarly named field to true for any file inside this Team Drive.",
+              "type": "boolean"
+            },
+            "domainUsersOnly": {
+              "description": "Whether access to this Team Drive and items inside this Team Drive is restricted to users of the domain to which this Team Drive belongs. This restriction may be overridden by other sharing policies controlled outside of this Team Drive.",
+              "type": "boolean"
+            },
+            "teamMembersOnly": {
+              "description": "Whether access to items inside this Team Drive is restricted to members of this Team Drive.",
+              "type": "boolean"
+            }
+          },
+          "type": "object"
+        },
         "themeId": {
           "description": "The ID of the theme from which the background image and color will be set. The set of possible teamDriveThemes can be retrieved from a drive.about.get response. When not specified on a drive.teamdrives.insert request, a random theme is chosen from which the background image and color are set. This is a write-only field; it can only be set on requests that don't set colorRgb or backgroundImageFile.",
           "type": "string"
diff --git a/drive/v2/drive-gen.go b/drive/v2/drive-gen.go
index f6875ee..6071add 100644
--- a/drive/v2/drive-gen.go
+++ b/drive/v2/drive-gen.go
@@ -1432,6 +1432,10 @@
 	// capability corresponds to a fine-grained action that a user may take.
 	Capabilities *FileCapabilities `json:"capabilities,omitempty"`
 
+	// CopyRequiresWriterPermission: Whether the options to copy, print, or
+	// download this file, should be disabled for readers and commenters.
+	CopyRequiresWriterPermission bool `json:"copyRequiresWriterPermission,omitempty"`
+
 	// Copyable: Deprecated: use capabilities/canCopy.
 	Copyable bool `json:"copyable,omitempty"`
 
@@ -1722,8 +1726,11 @@
 	// folder. This is always false when the item is not a folder.
 	CanAddChildren bool `json:"canAddChildren,omitempty"`
 
-	// CanChangeRestrictedDownload: Whether the current user can change the
-	// restricted download label of this file.
+	// CanChangeCopyRequiresWriterPermission: Whether the current user can
+	// change the copyRequiresWriterPermission restriction of this file.
+	CanChangeCopyRequiresWriterPermission bool `json:"canChangeCopyRequiresWriterPermission,omitempty"`
+
+	// CanChangeRestrictedDownload: Deprecated
 	CanChangeRestrictedDownload bool `json:"canChangeRestrictedDownload,omitempty"`
 
 	// CanComment: Whether the current user can comment on this file.
@@ -2015,8 +2022,7 @@
 	// Modified: Whether the file has been modified by this user.
 	Modified bool `json:"modified,omitempty"`
 
-	// Restricted: Whether viewers and commenters are prevented from
-	// downloading, printing, and copying this file.
+	// Restricted: Deprecated - use copyRequiresWriterPermission instead.
 	Restricted bool `json:"restricted,omitempty"`
 
 	// Starred: Whether this file is starred by the user.
@@ -2862,7 +2868,7 @@
 	CreatedDate string `json:"createdDate,omitempty"`
 
 	// Id: The ID of this Team Drive which is also the ID of the top level
-	// folder for this Team Drive.
+	// folder of this Team Drive.
 	Id string `json:"id,omitempty"`
 
 	// Kind: This is always drive#teamDrive
@@ -2871,6 +2877,10 @@
 	// Name: The name of this Team Drive.
 	Name string `json:"name,omitempty"`
 
+	// Restrictions: A set of restrictions that apply to this Team Drive or
+	// items inside this Team Drive.
+	Restrictions *TeamDriveRestrictions `json:"restrictions,omitempty"`
+
 	// ThemeId: The ID of the theme from which the background image and
 	// color will be set. The set of possible teamDriveThemes can be
 	// retrieved from a drive.about.get response. When not specified on a
@@ -2986,10 +2996,23 @@
 	// in this Team Drive.
 	CanAddChildren bool `json:"canAddChildren,omitempty"`
 
+	// CanChangeCopyRequiresWriterPermissionRestriction: Whether the current
+	// user can change the copyRequiresWriterPermission restriction of this
+	// Team Drive.
+	CanChangeCopyRequiresWriterPermissionRestriction bool `json:"canChangeCopyRequiresWriterPermissionRestriction,omitempty"`
+
+	// CanChangeDomainUsersOnlyRestriction: Whether the current user can
+	// change the domainUsersOnly restriction of this Team Drive.
+	CanChangeDomainUsersOnlyRestriction bool `json:"canChangeDomainUsersOnlyRestriction,omitempty"`
+
 	// CanChangeTeamDriveBackground: Whether the current user can change the
 	// background of this Team Drive.
 	CanChangeTeamDriveBackground bool `json:"canChangeTeamDriveBackground,omitempty"`
 
+	// CanChangeTeamMembersOnlyRestriction: Whether the current user can
+	// change the teamMembersOnly restriction of this Team Drive.
+	CanChangeTeamMembersOnlyRestriction bool `json:"canChangeTeamMembersOnlyRestriction,omitempty"`
+
 	// CanComment: Whether the current user can comment on files in this
 	// Team Drive.
 	CanComment bool `json:"canComment,omitempty"`
@@ -3061,6 +3084,55 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// TeamDriveRestrictions: A set of restrictions that apply to this Team
+// Drive or items inside this Team Drive.
+type TeamDriveRestrictions struct {
+	// AdminManagedRestrictions: Whether administrative privileges on this
+	// Team Drive are required to modify restrictions.
+	AdminManagedRestrictions bool `json:"adminManagedRestrictions,omitempty"`
+
+	// CopyRequiresWriterPermission: Whether the options to copy, print, or
+	// download files inside this Team Drive, should be disabled for readers
+	// and commenters. When this restriction is set to true, it will
+	// override the similarly named field to true for any file inside this
+	// Team Drive.
+	CopyRequiresWriterPermission bool `json:"copyRequiresWriterPermission,omitempty"`
+
+	// DomainUsersOnly: Whether access to this Team Drive and items inside
+	// this Team Drive is restricted to users of the domain to which this
+	// Team Drive belongs. This restriction may be overridden by other
+	// sharing policies controlled outside of this Team Drive.
+	DomainUsersOnly bool `json:"domainUsersOnly,omitempty"`
+
+	// TeamMembersOnly: Whether access to items inside this Team Drive is
+	// restricted to members of this Team Drive.
+	TeamMembersOnly bool `json:"teamMembersOnly,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g.
+	// "AdminManagedRestrictions") to unconditionally include in API
+	// requests. By default, fields with empty values are omitted from API
+	// requests. However, any non-pointer, non-interface field appearing in
+	// ForceSendFields will be sent to the server regardless of whether the
+	// field is empty or not. This may be used to include empty fields in
+	// Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "AdminManagedRestrictions")
+	// to include in API requests with the JSON null value. By default,
+	// fields with empty values are omitted from API requests. However, any
+	// field with an empty value appearing in NullFields will be sent to the
+	// server as null. It is an error if a field in this list has a
+	// non-empty value. This may be used to include null fields in Patch
+	// requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *TeamDriveRestrictions) MarshalJSON() ([]byte, error) {
+	type NoMethod TeamDriveRestrictions
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // TeamDriveList: A list of Team Drives.
 type TeamDriveList struct {
 	// Items: The list of Team Drives.
@@ -9853,10 +9925,9 @@
 }
 
 // UseDomainAdminAccess sets the optional parameter
-// "useDomainAdminAccess": Whether the request should be treated as if
-// it was issued by a domain administrator; if set to true, then the
-// requester will be granted access if they are an administrator of the
-// domain to which the item belongs.
+// "useDomainAdminAccess": Issue the request as a domain administrator;
+// if set to true, then the requester will be granted access if they are
+// an administrator of the domain to which the item belongs.
 func (c *PermissionsDeleteCall) UseDomainAdminAccess(useDomainAdminAccess bool) *PermissionsDeleteCall {
 	c.urlParams_.Set("useDomainAdminAccess", fmt.Sprint(useDomainAdminAccess))
 	return c
@@ -9947,7 +10018,7 @@
 	//     },
 	//     "useDomainAdminAccess": {
 	//       "default": "false",
-	//       "description": "Whether the request should be treated as if it was issued by a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the item belongs.",
+	//       "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the item belongs.",
 	//       "location": "query",
 	//       "type": "boolean"
 	//     }
@@ -9989,10 +10060,9 @@
 }
 
 // UseDomainAdminAccess sets the optional parameter
-// "useDomainAdminAccess": Whether the request should be treated as if
-// it was issued by a domain administrator; if set to true, then the
-// requester will be granted access if they are an administrator of the
-// domain to which the item belongs.
+// "useDomainAdminAccess": Issue the request as a domain administrator;
+// if set to true, then the requester will be granted access if they are
+// an administrator of the domain to which the item belongs.
 func (c *PermissionsGetCall) UseDomainAdminAccess(useDomainAdminAccess bool) *PermissionsGetCall {
 	c.urlParams_.Set("useDomainAdminAccess", fmt.Sprint(useDomainAdminAccess))
 	return c
@@ -10121,7 +10191,7 @@
 	//     },
 	//     "useDomainAdminAccess": {
 	//       "default": "false",
-	//       "description": "Whether the request should be treated as if it was issued by a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the item belongs.",
+	//       "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the item belongs.",
 	//       "location": "query",
 	//       "type": "boolean"
 	//     }
@@ -10329,10 +10399,9 @@
 }
 
 // UseDomainAdminAccess sets the optional parameter
-// "useDomainAdminAccess": Whether the request should be treated as if
-// it was issued by a domain administrator; if set to true, then the
-// requester will be granted access if they are an administrator of the
-// domain to which the item belongs.
+// "useDomainAdminAccess": Issue the request as a domain administrator;
+// if set to true, then the requester will be granted access if they are
+// an administrator of the domain to which the item belongs.
 func (c *PermissionsInsertCall) UseDomainAdminAccess(useDomainAdminAccess bool) *PermissionsInsertCall {
 	c.urlParams_.Set("useDomainAdminAccess", fmt.Sprint(useDomainAdminAccess))
 	return c
@@ -10456,7 +10525,7 @@
 	//     },
 	//     "useDomainAdminAccess": {
 	//       "default": "false",
-	//       "description": "Whether the request should be treated as if it was issued by a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the item belongs.",
+	//       "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the item belongs.",
 	//       "location": "query",
 	//       "type": "boolean"
 	//     }
@@ -10519,10 +10588,9 @@
 }
 
 // UseDomainAdminAccess sets the optional parameter
-// "useDomainAdminAccess": Whether the request should be treated as if
-// it was issued by a domain administrator; if set to true, then the
-// requester will be granted access if they are an administrator of the
-// domain to which the item belongs.
+// "useDomainAdminAccess": Issue the request as a domain administrator;
+// if set to true, then the requester will be granted access if they are
+// an administrator of the domain to which the item belongs.
 func (c *PermissionsListCall) UseDomainAdminAccess(useDomainAdminAccess bool) *PermissionsListCall {
 	c.urlParams_.Set("useDomainAdminAccess", fmt.Sprint(useDomainAdminAccess))
 	return c
@@ -10656,7 +10724,7 @@
 	//     },
 	//     "useDomainAdminAccess": {
 	//       "default": "false",
-	//       "description": "Whether the request should be treated as if it was issued by a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the item belongs.",
+	//       "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the item belongs.",
 	//       "location": "query",
 	//       "type": "boolean"
 	//     }
@@ -10742,10 +10810,9 @@
 }
 
 // UseDomainAdminAccess sets the optional parameter
-// "useDomainAdminAccess": Whether the request should be treated as if
-// it was issued by a domain administrator; if set to true, then the
-// requester will be granted access if they are an administrator of the
-// domain to which the item belongs.
+// "useDomainAdminAccess": Issue the request as a domain administrator;
+// if set to true, then the requester will be granted access if they are
+// an administrator of the domain to which the item belongs.
 func (c *PermissionsPatchCall) UseDomainAdminAccess(useDomainAdminAccess bool) *PermissionsPatchCall {
 	c.urlParams_.Set("useDomainAdminAccess", fmt.Sprint(useDomainAdminAccess))
 	return c
@@ -10878,7 +10945,7 @@
 	//     },
 	//     "useDomainAdminAccess": {
 	//       "default": "false",
-	//       "description": "Whether the request should be treated as if it was issued by a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the item belongs.",
+	//       "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the item belongs.",
 	//       "location": "query",
 	//       "type": "boolean"
 	//     }
@@ -10942,10 +11009,9 @@
 }
 
 // UseDomainAdminAccess sets the optional parameter
-// "useDomainAdminAccess": Whether the request should be treated as if
-// it was issued by a domain administrator; if set to true, then the
-// requester will be granted access if they are an administrator of the
-// domain to which the item belongs.
+// "useDomainAdminAccess": Issue the request as a domain administrator;
+// if set to true, then the requester will be granted access if they are
+// an administrator of the domain to which the item belongs.
 func (c *PermissionsUpdateCall) UseDomainAdminAccess(useDomainAdminAccess bool) *PermissionsUpdateCall {
 	c.urlParams_.Set("useDomainAdminAccess", fmt.Sprint(useDomainAdminAccess))
 	return c
@@ -11078,7 +11144,7 @@
 	//     },
 	//     "useDomainAdminAccess": {
 	//       "default": "false",
-	//       "description": "Whether the request should be treated as if it was issued by a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the item belongs.",
+	//       "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the item belongs.",
 	//       "location": "query",
 	//       "type": "boolean"
 	//     }
@@ -14141,10 +14207,9 @@
 }
 
 // UseDomainAdminAccess sets the optional parameter
-// "useDomainAdminAccess": Whether the request should be treated as if
-// it was issued by a domain administrator; if set to true, then the
-// requester will be granted access if they are an administrator of the
-// domain to which the Team Drive belongs.
+// "useDomainAdminAccess": Issue the request as a domain administrator;
+// if set to true, then the requester will be granted access if they are
+// an administrator of the domain to which the Team Drive belongs.
 func (c *TeamdrivesGetCall) UseDomainAdminAccess(useDomainAdminAccess bool) *TeamdrivesGetCall {
 	c.urlParams_.Set("useDomainAdminAccess", fmt.Sprint(useDomainAdminAccess))
 	return c
@@ -14259,7 +14324,7 @@
 	//     },
 	//     "useDomainAdminAccess": {
 	//       "default": "false",
-	//       "description": "Whether the request should be treated as if it was issued by a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the Team Drive belongs.",
+	//       "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the Team Drive belongs.",
 	//       "location": "query",
 	//       "type": "boolean"
 	//     }
@@ -14443,10 +14508,9 @@
 }
 
 // UseDomainAdminAccess sets the optional parameter
-// "useDomainAdminAccess": Whether the request should be treated as if
-// it was issued by a domain administrator; if set to true, then all
-// Team Drives of the domain in which the requester is an administrator
-// are returned.
+// "useDomainAdminAccess": Issue the request as a domain administrator;
+// if set to true, then all Team Drives of the domain in which the
+// requester is an administrator are returned.
 func (c *TeamdrivesListCall) UseDomainAdminAccess(useDomainAdminAccess bool) *TeamdrivesListCall {
 	c.urlParams_.Set("useDomainAdminAccess", fmt.Sprint(useDomainAdminAccess))
 	return c
@@ -14568,7 +14632,7 @@
 	//     },
 	//     "useDomainAdminAccess": {
 	//       "default": "false",
-	//       "description": "Whether the request should be treated as if it was issued by a domain administrator; if set to true, then all Team Drives of the domain in which the requester is an administrator are returned.",
+	//       "description": "Issue the request as a domain administrator; if set to true, then all Team Drives of the domain in which the requester is an administrator are returned.",
 	//       "location": "query",
 	//       "type": "boolean"
 	//     }
@@ -14625,6 +14689,15 @@
 	return c
 }
 
+// UseDomainAdminAccess sets the optional parameter
+// "useDomainAdminAccess": Issue the request as a domain administrator;
+// if set to true, then all Team Drives of the domain in which the
+// requester is an administrator are returned.
+func (c *TeamdrivesUpdateCall) UseDomainAdminAccess(useDomainAdminAccess bool) *TeamdrivesUpdateCall {
+	c.urlParams_.Set("useDomainAdminAccess", fmt.Sprint(useDomainAdminAccess))
+	return c
+}
+
 // Fields allows partial responses to be retrieved. See
 // https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
 // for more information.
@@ -14723,6 +14796,12 @@
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
+	//     },
+	//     "useDomainAdminAccess": {
+	//       "default": "false",
+	//       "description": "Issue the request as a domain administrator; if set to true, then all Team Drives of the domain in which the requester is an administrator are returned.",
+	//       "location": "query",
+	//       "type": "boolean"
 	//     }
 	//   },
 	//   "path": "teamdrives/{teamDriveId}",
diff --git a/drive/v3/drive-api.json b/drive/v3/drive-api.json
index b173bf0..b9afdeb 100644
--- a/drive/v3/drive-api.json
+++ b/drive/v3/drive-api.json
@@ -35,7 +35,7 @@
   "description": "Manages files in Drive including uploading, downloading, searching, detecting changes, and updating sharing permissions.",
   "discoveryVersion": "v1",
   "documentationLink": "https://developers.google.com/drive/",
-  "etag": "\"Zkyw9ACJZUvcYmlFaKGChzhmtnE/60h7ViKsodHGCzKStsqADfQgTZ0\"",
+  "etag": "\"J3WqvAcMk4eQjJXvfSI4Yr8VouA/iiy-ozrQzjedL49jGEceCdzqV5k\"",
   "icons": {
     "x16": "https://ssl.gstatic.com/docs/doclist/images/drive_icon_16.png",
     "x32": "https://ssl.gstatic.com/docs/doclist/images/drive_icon_32.png"
@@ -1034,7 +1034,7 @@
             },
             "useDomainAdminAccess": {
               "default": "false",
-              "description": "Whether the request should be treated as if it was issued by a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the item belongs.",
+              "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the item belongs.",
               "location": "query",
               "type": "boolean"
             }
@@ -1080,7 +1080,7 @@
             },
             "useDomainAdminAccess": {
               "default": "false",
-              "description": "Whether the request should be treated as if it was issued by a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the item belongs.",
+              "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the item belongs.",
               "location": "query",
               "type": "boolean"
             }
@@ -1120,7 +1120,7 @@
             },
             "useDomainAdminAccess": {
               "default": "false",
-              "description": "Whether the request should be treated as if it was issued by a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the item belongs.",
+              "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the item belongs.",
               "location": "query",
               "type": "boolean"
             }
@@ -1173,7 +1173,7 @@
             },
             "useDomainAdminAccess": {
               "default": "false",
-              "description": "Whether the request should be treated as if it was issued by a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the item belongs.",
+              "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the item belongs.",
               "location": "query",
               "type": "boolean"
             }
@@ -1232,7 +1232,7 @@
             },
             "useDomainAdminAccess": {
               "default": "false",
-              "description": "Whether the request should be treated as if it was issued by a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the item belongs.",
+              "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the item belongs.",
               "location": "query",
               "type": "boolean"
             }
@@ -1681,7 +1681,7 @@
             },
             "useDomainAdminAccess": {
               "default": "false",
-              "description": "Whether the request should be treated as if it was issued by a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the Team Drive belongs.",
+              "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the Team Drive belongs.",
               "location": "query",
               "type": "boolean"
             }
@@ -1721,7 +1721,7 @@
             },
             "useDomainAdminAccess": {
               "default": "false",
-              "description": "Whether the request should be treated as if it was issued by a domain administrator; if set to true, then all Team Drives of the domain in which the requester is an administrator are returned.",
+              "description": "Issue the request as a domain administrator; if set to true, then all Team Drives of the domain in which the requester is an administrator are returned.",
               "location": "query",
               "type": "boolean"
             }
@@ -1748,6 +1748,12 @@
               "location": "path",
               "required": true,
               "type": "string"
+            },
+            "useDomainAdminAccess": {
+              "default": "false",
+              "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the Team Drive belongs.",
+              "location": "query",
+              "type": "boolean"
             }
           },
           "path": "teamdrives/{teamDriveId}",
@@ -1764,7 +1770,6 @@
       }
     }
   },
-  "revision": "20180413",
   "rootUrl": "https://www.googleapis.com/",
   "schemas": {
     "About": {
@@ -2117,8 +2122,12 @@
               "description": "Whether the current user can add children to this folder. This is always false when the item is not a folder.",
               "type": "boolean"
             },
+            "canChangeCopyRequiresWriterPermission": {
+              "description": "Whether the current user can change the copyRequiresWriterPermission restriction of this file.",
+              "type": "boolean"
+            },
             "canChangeViewersCanCopyContent": {
-              "description": "Whether the current user can change whether viewers can copy the contents of this file.",
+              "description": "Deprecated",
               "type": "boolean"
             },
             "canComment": {
@@ -2209,6 +2218,10 @@
           },
           "type": "object"
         },
+        "copyRequiresWriterPermission": {
+          "description": "Whether the options to copy, print, or download this file, should be disabled for readers and commenters.",
+          "type": "boolean"
+        },
         "createdTime": {
           "description": "The time at which the file was created (RFC 3339 date-time).",
           "format": "date-time",
@@ -2549,7 +2562,7 @@
           "type": "string"
         },
         "viewersCanCopyContent": {
-          "description": "Whether users with only reader or commenter permission can copy the file's content. This affects copy, download, and print operations.",
+          "description": "Deprecated - use copyRequiresWriterPermission instead.",
           "type": "boolean"
         },
         "webContentLink": {
@@ -2938,10 +2951,22 @@
               "description": "Whether the current user can add children to folders in this Team Drive.",
               "type": "boolean"
             },
+            "canChangeCopyRequiresWriterPermissionRestriction": {
+              "description": "Whether the current user can change the copyRequiresWriterPermission restriction of this Team Drive.",
+              "type": "boolean"
+            },
+            "canChangeDomainUsersOnlyRestriction": {
+              "description": "Whether the current user can change the domainUsersOnly restriction of this Team Drive.",
+              "type": "boolean"
+            },
             "canChangeTeamDriveBackground": {
               "description": "Whether the current user can change the background of this Team Drive.",
               "type": "boolean"
             },
+            "canChangeTeamMembersOnlyRestriction": {
+              "description": "Whether the current user can change the teamMembersOnly restriction of this Team Drive.",
+              "type": "boolean"
+            },
             "canComment": {
               "description": "Whether the current user can comment on files in this Team Drive.",
               "type": "boolean"
@@ -3003,7 +3028,7 @@
           "type": "string"
         },
         "id": {
-          "description": "The ID of this Team Drive which is also the ID of the top level folder for this Team Drive.",
+          "description": "The ID of this Team Drive which is also the ID of the top level folder of this Team Drive.",
           "type": "string"
         },
         "kind": {
@@ -3015,6 +3040,28 @@
           "description": "The name of this Team Drive.",
           "type": "string"
         },
+        "restrictions": {
+          "description": "A set of restrictions that apply to this Team Drive or items inside this Team Drive.",
+          "properties": {
+            "adminManagedRestrictions": {
+              "description": "Whether administrative privileges on this Team Drive are required to modify restrictions.",
+              "type": "boolean"
+            },
+            "copyRequiresWriterPermission": {
+              "description": "Whether the options to copy, print, or download files inside this Team Drive, should be disabled for readers and commenters. When this restriction is set to true, it will override the similarly named field to true for any file inside this Team Drive.",
+              "type": "boolean"
+            },
+            "domainUsersOnly": {
+              "description": "Whether access to this Team Drive and items inside this Team Drive is restricted to users of the domain to which this Team Drive belongs. This restriction may be overridden by other sharing policies controlled outside of this Team Drive.",
+              "type": "boolean"
+            },
+            "teamMembersOnly": {
+              "description": "Whether access to items inside this Team Drive is restricted to members of this Team Drive.",
+              "type": "boolean"
+            }
+          },
+          "type": "object"
+        },
         "themeId": {
           "description": "The ID of the theme from which the background image and color will be set. The set of possible teamDriveThemes can be retrieved from a drive.about.get response. When not specified on a drive.teamdrives.create request, a random theme is chosen from which the background image and color are set. This is a write-only field; it can only be set on requests that don't set colorRgb or backgroundImageFile.",
           "type": "string"
diff --git a/drive/v3/drive-gen.go b/drive/v3/drive-gen.go
index 78989bd..01fd948 100644
--- a/drive/v3/drive-gen.go
+++ b/drive/v3/drive-gen.go
@@ -682,6 +682,10 @@
 	// These fields are never populated in responses.
 	ContentHints *FileContentHints `json:"contentHints,omitempty"`
 
+	// CopyRequiresWriterPermission: Whether the options to copy, print, or
+	// download this file, should be disabled for readers and commenters.
+	CopyRequiresWriterPermission bool `json:"copyRequiresWriterPermission,omitempty"`
+
 	// CreatedTime: The time at which the file was created (RFC 3339
 	// date-time).
 	CreatedTime string `json:"createdTime,omitempty"`
@@ -883,9 +887,8 @@
 	// 3339 date-time).
 	ViewedByMeTime string `json:"viewedByMeTime,omitempty"`
 
-	// ViewersCanCopyContent: Whether users with only reader or commenter
-	// permission can copy the file's content. This affects copy, download,
-	// and print operations.
+	// ViewersCanCopyContent: Deprecated - use copyRequiresWriterPermission
+	// instead.
 	ViewersCanCopyContent bool `json:"viewersCanCopyContent,omitempty"`
 
 	// WebContentLink: A link for downloading the content of the file in a
@@ -936,8 +939,11 @@
 	// folder. This is always false when the item is not a folder.
 	CanAddChildren bool `json:"canAddChildren,omitempty"`
 
-	// CanChangeViewersCanCopyContent: Whether the current user can change
-	// whether viewers can copy the contents of this file.
+	// CanChangeCopyRequiresWriterPermission: Whether the current user can
+	// change the copyRequiresWriterPermission restriction of this file.
+	CanChangeCopyRequiresWriterPermission bool `json:"canChangeCopyRequiresWriterPermission,omitempty"`
+
+	// CanChangeViewersCanCopyContent: Deprecated
 	CanChangeViewersCanCopyContent bool `json:"canChangeViewersCanCopyContent,omitempty"`
 
 	// CanComment: Whether the current user can comment on this file.
@@ -1862,7 +1868,7 @@
 	CreatedTime string `json:"createdTime,omitempty"`
 
 	// Id: The ID of this Team Drive which is also the ID of the top level
-	// folder for this Team Drive.
+	// folder of this Team Drive.
 	Id string `json:"id,omitempty"`
 
 	// Kind: Identifies what kind of resource this is. Value: the fixed
@@ -1872,6 +1878,10 @@
 	// Name: The name of this Team Drive.
 	Name string `json:"name,omitempty"`
 
+	// Restrictions: A set of restrictions that apply to this Team Drive or
+	// items inside this Team Drive.
+	Restrictions *TeamDriveRestrictions `json:"restrictions,omitempty"`
+
 	// ThemeId: The ID of the theme from which the background image and
 	// color will be set. The set of possible teamDriveThemes can be
 	// retrieved from a drive.about.get response. When not specified on a
@@ -1987,10 +1997,23 @@
 	// in this Team Drive.
 	CanAddChildren bool `json:"canAddChildren,omitempty"`
 
+	// CanChangeCopyRequiresWriterPermissionRestriction: Whether the current
+	// user can change the copyRequiresWriterPermission restriction of this
+	// Team Drive.
+	CanChangeCopyRequiresWriterPermissionRestriction bool `json:"canChangeCopyRequiresWriterPermissionRestriction,omitempty"`
+
+	// CanChangeDomainUsersOnlyRestriction: Whether the current user can
+	// change the domainUsersOnly restriction of this Team Drive.
+	CanChangeDomainUsersOnlyRestriction bool `json:"canChangeDomainUsersOnlyRestriction,omitempty"`
+
 	// CanChangeTeamDriveBackground: Whether the current user can change the
 	// background of this Team Drive.
 	CanChangeTeamDriveBackground bool `json:"canChangeTeamDriveBackground,omitempty"`
 
+	// CanChangeTeamMembersOnlyRestriction: Whether the current user can
+	// change the teamMembersOnly restriction of this Team Drive.
+	CanChangeTeamMembersOnlyRestriction bool `json:"canChangeTeamMembersOnlyRestriction,omitempty"`
+
 	// CanComment: Whether the current user can comment on files in this
 	// Team Drive.
 	CanComment bool `json:"canComment,omitempty"`
@@ -2062,6 +2085,55 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// TeamDriveRestrictions: A set of restrictions that apply to this Team
+// Drive or items inside this Team Drive.
+type TeamDriveRestrictions struct {
+	// AdminManagedRestrictions: Whether administrative privileges on this
+	// Team Drive are required to modify restrictions.
+	AdminManagedRestrictions bool `json:"adminManagedRestrictions,omitempty"`
+
+	// CopyRequiresWriterPermission: Whether the options to copy, print, or
+	// download files inside this Team Drive, should be disabled for readers
+	// and commenters. When this restriction is set to true, it will
+	// override the similarly named field to true for any file inside this
+	// Team Drive.
+	CopyRequiresWriterPermission bool `json:"copyRequiresWriterPermission,omitempty"`
+
+	// DomainUsersOnly: Whether access to this Team Drive and items inside
+	// this Team Drive is restricted to users of the domain to which this
+	// Team Drive belongs. This restriction may be overridden by other
+	// sharing policies controlled outside of this Team Drive.
+	DomainUsersOnly bool `json:"domainUsersOnly,omitempty"`
+
+	// TeamMembersOnly: Whether access to items inside this Team Drive is
+	// restricted to members of this Team Drive.
+	TeamMembersOnly bool `json:"teamMembersOnly,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g.
+	// "AdminManagedRestrictions") to unconditionally include in API
+	// requests. By default, fields with empty values are omitted from API
+	// requests. However, any non-pointer, non-interface field appearing in
+	// ForceSendFields will be sent to the server regardless of whether the
+	// field is empty or not. This may be used to include empty fields in
+	// Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "AdminManagedRestrictions")
+	// to include in API requests with the JSON null value. By default,
+	// fields with empty values are omitted from API requests. However, any
+	// field with an empty value appearing in NullFields will be sent to the
+	// server as null. It is an error if a field in this list has a
+	// non-empty value. This may be used to include null fields in Patch
+	// requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *TeamDriveRestrictions) MarshalJSON() ([]byte, error) {
+	type NoMethod TeamDriveRestrictions
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // TeamDriveList: A list of Team Drives.
 type TeamDriveList struct {
 	// Kind: Identifies what kind of resource this is. Value: the fixed
@@ -5799,10 +5871,9 @@
 }
 
 // UseDomainAdminAccess sets the optional parameter
-// "useDomainAdminAccess": Whether the request should be treated as if
-// it was issued by a domain administrator; if set to true, then the
-// requester will be granted access if they are an administrator of the
-// domain to which the item belongs.
+// "useDomainAdminAccess": Issue the request as a domain administrator;
+// if set to true, then the requester will be granted access if they are
+// an administrator of the domain to which the item belongs.
 func (c *PermissionsCreateCall) UseDomainAdminAccess(useDomainAdminAccess bool) *PermissionsCreateCall {
 	c.urlParams_.Set("useDomainAdminAccess", fmt.Sprint(useDomainAdminAccess))
 	return c
@@ -5931,7 +6002,7 @@
 	//     },
 	//     "useDomainAdminAccess": {
 	//       "default": "false",
-	//       "description": "Whether the request should be treated as if it was issued by a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the item belongs.",
+	//       "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the item belongs.",
 	//       "location": "query",
 	//       "type": "boolean"
 	//     }
@@ -5978,10 +6049,9 @@
 }
 
 // UseDomainAdminAccess sets the optional parameter
-// "useDomainAdminAccess": Whether the request should be treated as if
-// it was issued by a domain administrator; if set to true, then the
-// requester will be granted access if they are an administrator of the
-// domain to which the item belongs.
+// "useDomainAdminAccess": Issue the request as a domain administrator;
+// if set to true, then the requester will be granted access if they are
+// an administrator of the domain to which the item belongs.
 func (c *PermissionsDeleteCall) UseDomainAdminAccess(useDomainAdminAccess bool) *PermissionsDeleteCall {
 	c.urlParams_.Set("useDomainAdminAccess", fmt.Sprint(useDomainAdminAccess))
 	return c
@@ -6072,7 +6142,7 @@
 	//     },
 	//     "useDomainAdminAccess": {
 	//       "default": "false",
-	//       "description": "Whether the request should be treated as if it was issued by a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the item belongs.",
+	//       "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the item belongs.",
 	//       "location": "query",
 	//       "type": "boolean"
 	//     }
@@ -6114,10 +6184,9 @@
 }
 
 // UseDomainAdminAccess sets the optional parameter
-// "useDomainAdminAccess": Whether the request should be treated as if
-// it was issued by a domain administrator; if set to true, then the
-// requester will be granted access if they are an administrator of the
-// domain to which the item belongs.
+// "useDomainAdminAccess": Issue the request as a domain administrator;
+// if set to true, then the requester will be granted access if they are
+// an administrator of the domain to which the item belongs.
 func (c *PermissionsGetCall) UseDomainAdminAccess(useDomainAdminAccess bool) *PermissionsGetCall {
 	c.urlParams_.Set("useDomainAdminAccess", fmt.Sprint(useDomainAdminAccess))
 	return c
@@ -6246,7 +6315,7 @@
 	//     },
 	//     "useDomainAdminAccess": {
 	//       "default": "false",
-	//       "description": "Whether the request should be treated as if it was issued by a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the item belongs.",
+	//       "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the item belongs.",
 	//       "location": "query",
 	//       "type": "boolean"
 	//     }
@@ -6310,10 +6379,9 @@
 }
 
 // UseDomainAdminAccess sets the optional parameter
-// "useDomainAdminAccess": Whether the request should be treated as if
-// it was issued by a domain administrator; if set to true, then the
-// requester will be granted access if they are an administrator of the
-// domain to which the item belongs.
+// "useDomainAdminAccess": Issue the request as a domain administrator;
+// if set to true, then the requester will be granted access if they are
+// an administrator of the domain to which the item belongs.
 func (c *PermissionsListCall) UseDomainAdminAccess(useDomainAdminAccess bool) *PermissionsListCall {
 	c.urlParams_.Set("useDomainAdminAccess", fmt.Sprint(useDomainAdminAccess))
 	return c
@@ -6447,7 +6515,7 @@
 	//     },
 	//     "useDomainAdminAccess": {
 	//       "default": "false",
-	//       "description": "Whether the request should be treated as if it was issued by a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the item belongs.",
+	//       "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the item belongs.",
 	//       "location": "query",
 	//       "type": "boolean"
 	//     }
@@ -6534,10 +6602,9 @@
 }
 
 // UseDomainAdminAccess sets the optional parameter
-// "useDomainAdminAccess": Whether the request should be treated as if
-// it was issued by a domain administrator; if set to true, then the
-// requester will be granted access if they are an administrator of the
-// domain to which the item belongs.
+// "useDomainAdminAccess": Issue the request as a domain administrator;
+// if set to true, then the requester will be granted access if they are
+// an administrator of the domain to which the item belongs.
 func (c *PermissionsUpdateCall) UseDomainAdminAccess(useDomainAdminAccess bool) *PermissionsUpdateCall {
 	c.urlParams_.Set("useDomainAdminAccess", fmt.Sprint(useDomainAdminAccess))
 	return c
@@ -6670,7 +6737,7 @@
 	//     },
 	//     "useDomainAdminAccess": {
 	//       "default": "false",
-	//       "description": "Whether the request should be treated as if it was issued by a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the item belongs.",
+	//       "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the item belongs.",
 	//       "location": "query",
 	//       "type": "boolean"
 	//     }
@@ -8366,10 +8433,9 @@
 }
 
 // UseDomainAdminAccess sets the optional parameter
-// "useDomainAdminAccess": Whether the request should be treated as if
-// it was issued by a domain administrator; if set to true, then the
-// requester will be granted access if they are an administrator of the
-// domain to which the Team Drive belongs.
+// "useDomainAdminAccess": Issue the request as a domain administrator;
+// if set to true, then the requester will be granted access if they are
+// an administrator of the domain to which the Team Drive belongs.
 func (c *TeamdrivesGetCall) UseDomainAdminAccess(useDomainAdminAccess bool) *TeamdrivesGetCall {
 	c.urlParams_.Set("useDomainAdminAccess", fmt.Sprint(useDomainAdminAccess))
 	return c
@@ -8484,7 +8550,7 @@
 	//     },
 	//     "useDomainAdminAccess": {
 	//       "default": "false",
-	//       "description": "Whether the request should be treated as if it was issued by a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the Team Drive belongs.",
+	//       "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the Team Drive belongs.",
 	//       "location": "query",
 	//       "type": "boolean"
 	//     }
@@ -8539,10 +8605,9 @@
 }
 
 // UseDomainAdminAccess sets the optional parameter
-// "useDomainAdminAccess": Whether the request should be treated as if
-// it was issued by a domain administrator; if set to true, then all
-// Team Drives of the domain in which the requester is an administrator
-// are returned.
+// "useDomainAdminAccess": Issue the request as a domain administrator;
+// if set to true, then all Team Drives of the domain in which the
+// requester is an administrator are returned.
 func (c *TeamdrivesListCall) UseDomainAdminAccess(useDomainAdminAccess bool) *TeamdrivesListCall {
 	c.urlParams_.Set("useDomainAdminAccess", fmt.Sprint(useDomainAdminAccess))
 	return c
@@ -8664,7 +8729,7 @@
 	//     },
 	//     "useDomainAdminAccess": {
 	//       "default": "false",
-	//       "description": "Whether the request should be treated as if it was issued by a domain administrator; if set to true, then all Team Drives of the domain in which the requester is an administrator are returned.",
+	//       "description": "Issue the request as a domain administrator; if set to true, then all Team Drives of the domain in which the requester is an administrator are returned.",
 	//       "location": "query",
 	//       "type": "boolean"
 	//     }
@@ -8721,6 +8786,15 @@
 	return c
 }
 
+// UseDomainAdminAccess sets the optional parameter
+// "useDomainAdminAccess": Issue the request as a domain administrator;
+// if set to true, then the requester will be granted access if they are
+// an administrator of the domain to which the Team Drive belongs.
+func (c *TeamdrivesUpdateCall) UseDomainAdminAccess(useDomainAdminAccess bool) *TeamdrivesUpdateCall {
+	c.urlParams_.Set("useDomainAdminAccess", fmt.Sprint(useDomainAdminAccess))
+	return c
+}
+
 // Fields allows partial responses to be retrieved. See
 // https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
 // for more information.
@@ -8819,6 +8893,12 @@
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
+	//     },
+	//     "useDomainAdminAccess": {
+	//       "default": "false",
+	//       "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the Team Drive belongs.",
+	//       "location": "query",
+	//       "type": "boolean"
 	//     }
 	//   },
 	//   "path": "teamdrives/{teamDriveId}",
diff --git a/pubsub/v1/pubsub-api.json b/pubsub/v1/pubsub-api.json
index 78c1ccc..60f4957 100644
--- a/pubsub/v1/pubsub-api.json
+++ b/pubsub/v1/pubsub-api.json
@@ -1074,7 +1074,7 @@
       }
     }
   },
-  "revision": "20180626",
+  "revision": "20180702",
   "rootUrl": "https://pubsub.googleapis.com/",
   "schemas": {
     "AcknowledgeRequest": {
@@ -1103,7 +1103,7 @@
           "type": "array"
         },
         "role": {
-          "description": "Role that is assigned to `members`.\nFor example, `roles/viewer`, `roles/editor`, or `roles/owner`.\nRequired",
+          "description": "Role that is assigned to `members`.\nFor example, `roles/viewer`, `roles/editor`, or `roles/owner`.",
           "type": "string"
         }
       },
@@ -1117,7 +1117,7 @@
           "additionalProperties": {
             "type": "string"
           },
-          "description": "User labels.",
+          "description": "See \u003ca href=\"/pubsub/docs/labels\"\u003e Creating and managing labels\u003c/a\u003e.",
           "type": "object"
         },
         "subscription": {
@@ -1441,7 +1441,7 @@
           "additionalProperties": {
             "type": "string"
           },
-          "description": "User labels.",
+          "description": "See \u003ca href=\"/pubsub/docs/labels\"\u003e Creating and managing labels\u003c/a\u003e.",
           "type": "object"
         },
         "name": {
@@ -1468,7 +1468,7 @@
           "additionalProperties": {
             "type": "string"
           },
-          "description": "User labels.",
+          "description": "See \u003ca href=\"/pubsub/docs/labels\"\u003e Creating and managing labels\u003c/a\u003e.",
           "type": "object"
         },
         "messageRetentionDuration": {
@@ -1531,7 +1531,7 @@
           "additionalProperties": {
             "type": "string"
           },
-          "description": "User labels.",
+          "description": "See \u003ca href=\"/pubsub/docs/labels\"\u003e Creating and managing labels\u003c/a\u003e.",
           "type": "object"
         },
         "name": {
diff --git a/pubsub/v1/pubsub-gen.go b/pubsub/v1/pubsub-gen.go
index a6f2050..439debf 100644
--- a/pubsub/v1/pubsub-gen.go
+++ b/pubsub/v1/pubsub-gen.go
@@ -215,9 +215,7 @@
 	Members []string `json:"members,omitempty"`
 
 	// Role: Role that is assigned to `members`.
-	// For example, `roles/viewer`, `roles/editor`, or
-	// `roles/owner`.
-	// Required
+	// For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
 	Role string `json:"role,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "Members") to
@@ -251,7 +249,8 @@
 // use.
 // It is not subject to any SLA or deprecation policy.
 type CreateSnapshotRequest struct {
-	// Labels: User labels.
+	// Labels: See <a href="/pubsub/docs/labels"> Creating and managing
+	// labels</a>.
 	Labels map[string]string `json:"labels,omitempty"`
 
 	// Subscription: The subscription whose backlog the snapshot
@@ -1108,7 +1107,8 @@
 	// snapshot that would expire in less than 1 hour after creation.
 	ExpireTime string `json:"expireTime,omitempty"`
 
-	// Labels: User labels.
+	// Labels: See <a href="/pubsub/docs/labels"> Creating and managing
+	// labels</a>.
 	Labels map[string]string `json:"labels,omitempty"`
 
 	// Name: The name of the snapshot.
@@ -1179,7 +1179,8 @@
 	// system will eventually redeliver the message.
 	AckDeadlineSeconds int64 `json:"ackDeadlineSeconds,omitempty"`
 
-	// Labels: User labels.
+	// Labels: See <a href="/pubsub/docs/labels"> Creating and managing
+	// labels</a>.
 	Labels map[string]string `json:"labels,omitempty"`
 
 	// MessageRetentionDuration: How long to retain unacknowledged messages
@@ -1341,7 +1342,8 @@
 
 // Topic: A topic resource.
 type Topic struct {
-	// Labels: User labels.
+	// Labels: See <a href="/pubsub/docs/labels"> Creating and managing
+	// labels</a>.
 	Labels map[string]string `json:"labels,omitempty"`
 
 	// Name: The name of the topic. It must have the
diff --git a/pubsub/v1beta2/pubsub-api.json b/pubsub/v1beta2/pubsub-api.json
index d814aa4..34f8fe5 100644
--- a/pubsub/v1beta2/pubsub-api.json
+++ b/pubsub/v1beta2/pubsub-api.json
@@ -711,7 +711,7 @@
       }
     }
   },
-  "revision": "20180611",
+  "revision": "20180702",
   "rootUrl": "https://pubsub.googleapis.com/",
   "schemas": {
     "AcknowledgeRequest": {
@@ -740,7 +740,7 @@
           "type": "array"
         },
         "role": {
-          "description": "Role that is assigned to `members`.\nFor example, `roles/viewer`, `roles/editor`, or `roles/owner`.\nRequired",
+          "description": "Role that is assigned to `members`.\nFor example, `roles/viewer`, `roles/editor`, or `roles/owner`.",
           "type": "string"
         }
       },
diff --git a/pubsub/v1beta2/pubsub-gen.go b/pubsub/v1beta2/pubsub-gen.go
index bbc0986..e4f3550 100644
--- a/pubsub/v1beta2/pubsub-gen.go
+++ b/pubsub/v1beta2/pubsub-gen.go
@@ -191,9 +191,7 @@
 	Members []string `json:"members,omitempty"`
 
 	// Role: Role that is assigned to `members`.
-	// For example, `roles/viewer`, `roles/editor`, or
-	// `roles/owner`.
-	// Required
+	// For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
 	Role string `json:"role,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "Members") to
diff --git a/script/v1/script-api.json b/script/v1/script-api.json
index be57932..846bd44 100644
--- a/script/v1/script-api.json
+++ b/script/v1/script-api.json
@@ -45,7 +45,7 @@
   "baseUrl": "https://script.googleapis.com/",
   "batchPath": "batch",
   "canonicalName": "Script",
-  "description": "An API for managing and executing Google Apps Script projects. \u003caside class=\"note\"\u003e\u003cb\u003eNote\u003c/b\u003e: In order to use this API in your apps, you must \u003ca href=\"/apps-script/api/how-tos/enable#using_the_apps_script_api_in_your_app\"\u003e enable it for use\u003c/a\u003e. To allow other apps to manage your scripts, you must \u003ca href=\"/apps-script/api/how-tos/enable#granting_third-party_applications_access_to_your_script_projects\"\u003e grant them access\u003c/a\u003e.\u003c/aside\u003e\n",
+  "description": "An API for managing and executing Google Apps Script projects.\n",
   "discoveryVersion": "v1",
   "documentationLink": "https://developers.google.com/apps-script/api/",
   "fullyEncodeReservedExpansion": true,
@@ -750,7 +750,7 @@
       }
     }
   },
-  "revision": "20180601",
+  "revision": "20180707",
   "rootUrl": "https://script.googleapis.com/",
   "schemas": {
     "Content": {
diff --git a/servicecontrol/v1/servicecontrol-api.json b/servicecontrol/v1/servicecontrol-api.json
index 646bc24..e4a8d44 100644
--- a/servicecontrol/v1/servicecontrol-api.json
+++ b/servicecontrol/v1/servicecontrol-api.json
@@ -280,7 +280,7 @@
       }
     }
   },
-  "revision": "20180610",
+  "revision": "20180707",
   "rootUrl": "https://servicecontrol.googleapis.com/",
   "schemas": {
     "AllocateInfo": {
@@ -1471,6 +1471,10 @@
           "description": "The identifier of the parent of this resource instance.\nMust be in one of the following formats:\n    - “projects/\u003cproject-id or project-number\u003e”\n    - “folders/\u003cfolder-id\u003e”\n    - “organizations/\u003corganization-id\u003e”",
           "type": "string"
         },
+        "resourceLocation": {
+          "description": "The location of the resource. If not empty, the resource will be checked\nagainst location policy. The value must be a valid zone, region or\nmultiregion. For example: \"europe-west4\" or \"northamerica-northeast1-a\"",
+          "type": "string"
+        },
         "resourceName": {
           "description": "Name of the resource. This is used for auditing purposes.",
           "type": "string"
diff --git a/servicecontrol/v1/servicecontrol-gen.go b/servicecontrol/v1/servicecontrol-gen.go
index a70533e..82538bc 100644
--- a/servicecontrol/v1/servicecontrol-gen.go
+++ b/servicecontrol/v1/servicecontrol-gen.go
@@ -2409,6 +2409,14 @@
 	//     - “organizations/<organization-id>”
 	ResourceContainer string `json:"resourceContainer,omitempty"`
 
+	// ResourceLocation: The location of the resource. If not empty, the
+	// resource will be checked
+	// against location policy. The value must be a valid zone, region
+	// or
+	// multiregion. For example: "europe-west4" or
+	// "northamerica-northeast1-a"
+	ResourceLocation string `json:"resourceLocation,omitempty"`
+
 	// ResourceName: Name of the resource. This is used for auditing
 	// purposes.
 	ResourceName string `json:"resourceName,omitempty"`
diff --git a/slides/v1/slides-api.json b/slides/v1/slides-api.json
index 93b837d..e4d01e3 100644
--- a/slides/v1/slides-api.json
+++ b/slides/v1/slides-api.json
@@ -300,7 +300,7 @@
       }
     }
   },
-  "revision": "20180621",
+  "revision": "20180703",
   "rootUrl": "https://slides.googleapis.com/",
   "schemas": {
     "AffineTransform": {
@@ -3627,7 +3627,7 @@
       "type": "object"
     },
     "TableRange": {
-      "description": "A table range represents a reference to a subset of a table.\n\nIt's important to note that the cells specified by a table range do not\nnecessarily form a rectangle. For example, let's say we have a 3 x 3 table\nwhere all the cells of the last row are merged together. The table looks\nlike this:\n\n           \n  [             ]\n\nA table range with location = (0, 0), row span = 3 and column span = 2\nspecifies the following cells:\n\n   x     x \n  [      x      ]",
+      "description": "A table range represents a reference to a subset of a table.\n\nIt's important to note that the cells specified by a table range do not\nnecessarily form a rectangle. For example, let's say we have a 3 x 3 table\nwhere all the cells of the last row are merged together. The table looks\nlike this:\n\n              \n     [             ]\n\nA table range with location = (0, 0), row span = 3 and column span = 2\nspecifies the following cells:\n\n      x     x \n     [      x      ]",
       "id": "TableRange",
       "properties": {
         "columnSpan": {
diff --git a/slides/v1/slides-gen.go b/slides/v1/slides-gen.go
index 8a670c9..d454735 100644
--- a/slides/v1/slides-gen.go
+++ b/slides/v1/slides-gen.go
@@ -6116,14 +6116,14 @@
 // like this:
 //
 //
-//   [             ]
+//      [             ]
 //
 // A table range with location = (0, 0), row span = 3 and column span =
 // 2
 // specifies the following cells:
 //
-//    x     x
-//   [      x      ]
+//       x     x
+//      [      x      ]
 type TableRange struct {
 	// ColumnSpan: The column span of the table range.
 	ColumnSpan int64 `json:"columnSpan,omitempty"`