Api-Roll 51: 2017-07-10

R=vegorov@google.com

Review-Url: https://codereview.chromium.org//2973303002 .
diff --git a/generated/googleapis/lib/adexperiencereport/v1.dart b/generated/googleapis/lib/adexperiencereport/v1.dart
new file mode 100644
index 0000000..e3a0703
--- /dev/null
+++ b/generated/googleapis/lib/adexperiencereport/v1.dart
@@ -0,0 +1,289 @@
+// This is a generated file (see the discoveryapis_generator project).
+
+library googleapis.adexperiencereport.v1;
+
+import 'dart:core' as core;
+import 'dart:async' as async;
+import 'dart:convert' as convert;
+
+import 'package:_discoveryapis_commons/_discoveryapis_commons.dart' as commons;
+import 'package:http/http.dart' as http;
+
+export 'package:_discoveryapis_commons/_discoveryapis_commons.dart' show
+    ApiRequestError, DetailedApiRequestError;
+
+const core.String USER_AGENT = 'dart-api-client adexperiencereport/v1';
+
+/**
+ * View Ad Experience Report data, and get a list of sites that have a
+ * significant number of annoying ads.
+ */
+class AdexperiencereportApi {
+  /** Test scope for access to the Zoo service */
+  static const XapiZooScope = "https://www.googleapis.com/auth/xapi.zoo";
+
+
+  final commons.ApiRequester _requester;
+
+  SitesResourceApi get sites => new SitesResourceApi(_requester);
+  ViolatingSitesResourceApi get violatingSites => new ViolatingSitesResourceApi(_requester);
+
+  AdexperiencereportApi(http.Client client, {core.String rootUrl: "https://adexperiencereport.googleapis.com/", core.String servicePath: ""}) :
+      _requester = new commons.ApiRequester(client, rootUrl, servicePath, USER_AGENT);
+}
+
+
+class SitesResourceApi {
+  final commons.ApiRequester _requester;
+
+  SitesResourceApi(commons.ApiRequester client) : 
+      _requester = client;
+
+  /**
+   * Gets a summary of the ads rating of a site.
+   *
+   * Request parameters:
+   *
+   * [name] - The required site name. It should be a site property registered in
+   * Search
+   * Console. The server will return an error of BAD_REQUEST if this field is
+   * not filled in.
+   * Value must have pattern "^sites/[^/]+$".
+   *
+   * Completes with a [SiteSummaryResponse].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<SiteSummaryResponse> get(core.String name) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (name == null) {
+      throw new core.ArgumentError("Parameter name is required.");
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name');
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new SiteSummaryResponse.fromJson(data));
+  }
+
+}
+
+
+class ViolatingSitesResourceApi {
+  final commons.ApiRequester _requester;
+
+  ViolatingSitesResourceApi(commons.ApiRequester client) : 
+      _requester = client;
+
+  /**
+   * Lists sites with Ad Experience Report statuses of "Failing" or "Warning".
+   *
+   * Request parameters:
+   *
+   * Completes with a [ViolatingSitesResponse].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<ViolatingSitesResponse> list() {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+
+    _url = 'v1/violatingSites';
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new ViolatingSitesResponse.fromJson(data));
+  }
+
+}
+
+
+
+/** Summary of the ads rating of a site for a specific platform. */
+class PlatformSummary {
+  /**
+   * The status of the site reviewed for the Better Ads Standards.
+   * Possible string values are:
+   * - "UNKNOWN" : Not reviewed.
+   * - "PASSING" : Passing.
+   * - "WARNING" : Warning.
+   * - "FAILING" : Failing.
+   */
+  core.String betterAdsStatus;
+  /**
+   * The status of the site reviewed for egregious ads.
+   * Possible string values are:
+   * - "UNKNOWN" : Not reviewed.
+   * - "PASSING" : Passing.
+   * - "FAILING" : Failing.
+   */
+  core.String egregiousStatus;
+  /** The date on which ad filtering begins. */
+  core.String enforcementTime;
+  /**
+   * The ad filtering status of the site.
+   * Possible string values are:
+   * - "UNKNOWN" : N/A.
+   * - "ON" : Ad filtering is on.
+   * - "OFF" : Ad filtering is off.
+   * - "PAUSED" : Ad filtering is paused.
+   * - "PENDING" : Ad filtering is pending.
+   */
+  core.String filterStatus;
+  /** The last time that the site changed status. */
+  core.String lastChangeTime;
+  /** The assigned regions for the site and platform. */
+  core.List<core.String> region;
+  /** A link that leads to a full ad experience report. */
+  core.String reportUrl;
+  /** Whether the site is currently under review. */
+  core.bool underReview;
+
+  PlatformSummary();
+
+  PlatformSummary.fromJson(core.Map _json) {
+    if (_json.containsKey("betterAdsStatus")) {
+      betterAdsStatus = _json["betterAdsStatus"];
+    }
+    if (_json.containsKey("egregiousStatus")) {
+      egregiousStatus = _json["egregiousStatus"];
+    }
+    if (_json.containsKey("enforcementTime")) {
+      enforcementTime = _json["enforcementTime"];
+    }
+    if (_json.containsKey("filterStatus")) {
+      filterStatus = _json["filterStatus"];
+    }
+    if (_json.containsKey("lastChangeTime")) {
+      lastChangeTime = _json["lastChangeTime"];
+    }
+    if (_json.containsKey("region")) {
+      region = _json["region"];
+    }
+    if (_json.containsKey("reportUrl")) {
+      reportUrl = _json["reportUrl"];
+    }
+    if (_json.containsKey("underReview")) {
+      underReview = _json["underReview"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (betterAdsStatus != null) {
+      _json["betterAdsStatus"] = betterAdsStatus;
+    }
+    if (egregiousStatus != null) {
+      _json["egregiousStatus"] = egregiousStatus;
+    }
+    if (enforcementTime != null) {
+      _json["enforcementTime"] = enforcementTime;
+    }
+    if (filterStatus != null) {
+      _json["filterStatus"] = filterStatus;
+    }
+    if (lastChangeTime != null) {
+      _json["lastChangeTime"] = lastChangeTime;
+    }
+    if (region != null) {
+      _json["region"] = region;
+    }
+    if (reportUrl != null) {
+      _json["reportUrl"] = reportUrl;
+    }
+    if (underReview != null) {
+      _json["underReview"] = underReview;
+    }
+    return _json;
+  }
+}
+
+/** Response message for GetSiteSummary. */
+class SiteSummaryResponse {
+  /** Summary for the desktop review of the site. */
+  PlatformSummary desktopSummary;
+  /** Summary for the mobile review of the site. */
+  PlatformSummary mobileSummary;
+  /** The name of the site reviewed. */
+  core.String reviewedSite;
+
+  SiteSummaryResponse();
+
+  SiteSummaryResponse.fromJson(core.Map _json) {
+    if (_json.containsKey("desktopSummary")) {
+      desktopSummary = new PlatformSummary.fromJson(_json["desktopSummary"]);
+    }
+    if (_json.containsKey("mobileSummary")) {
+      mobileSummary = new PlatformSummary.fromJson(_json["mobileSummary"]);
+    }
+    if (_json.containsKey("reviewedSite")) {
+      reviewedSite = _json["reviewedSite"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (desktopSummary != null) {
+      _json["desktopSummary"] = (desktopSummary).toJson();
+    }
+    if (mobileSummary != null) {
+      _json["mobileSummary"] = (mobileSummary).toJson();
+    }
+    if (reviewedSite != null) {
+      _json["reviewedSite"] = reviewedSite;
+    }
+    return _json;
+  }
+}
+
+/** Response message for ListViolatingSites. */
+class ViolatingSitesResponse {
+  /** A list of summaries of violating sites. */
+  core.List<SiteSummaryResponse> violatingSites;
+
+  ViolatingSitesResponse();
+
+  ViolatingSitesResponse.fromJson(core.Map _json) {
+    if (_json.containsKey("violatingSites")) {
+      violatingSites = _json["violatingSites"].map((value) => new SiteSummaryResponse.fromJson(value)).toList();
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (violatingSites != null) {
+      _json["violatingSites"] = violatingSites.map((value) => (value).toJson()).toList();
+    }
+    return _json;
+  }
+}
diff --git a/generated/googleapis/lib/admin/directory_v1.dart b/generated/googleapis/lib/admin/directory_v1.dart
index a5427b6..8190043 100644
--- a/generated/googleapis/lib/admin/directory_v1.dart
+++ b/generated/googleapis/lib/admin/directory_v1.dart
@@ -445,6 +445,8 @@
    * - "status" : Chromebook status.
    * - "supportEndDate" : Chromebook support end date.
    *
+   * [orgUnitPath] - Full path of the organization unit or its Id
+   *
    * [pageToken] - Token to specify next page in the list
    *
    * [projection] - Restrict information returned to a set of selected fields.
@@ -470,7 +472,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ChromeOsDevices> list(core.String customerId, {core.int maxResults, core.String orderBy, core.String pageToken, core.String projection, core.String query, core.String sortOrder}) {
+  async.Future<ChromeOsDevices> list(core.String customerId, {core.int maxResults, core.String orderBy, core.String orgUnitPath, core.String pageToken, core.String projection, core.String query, core.String sortOrder}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -487,6 +489,9 @@
     if (orderBy != null) {
       _queryParams["orderBy"] = [orderBy];
     }
+    if (orgUnitPath != null) {
+      _queryParams["orgUnitPath"] = [orgUnitPath];
+    }
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
@@ -8001,6 +8006,13 @@
   core.bool isMailboxSetup;
   /** Kind of resource this is. */
   core.String kind;
+  /**
+   *
+   *
+   * The values for Object must be JSON objects. It can consist of `num`,
+   * `String`, `bool` and `null` as well as `Map` and `List` values.
+   */
+  core.Object languages;
   /** User's last login time. (Read-only) */
   core.DateTime lastLoginTime;
   /**
@@ -8147,6 +8159,9 @@
     if (_json.containsKey("kind")) {
       kind = _json["kind"];
     }
+    if (_json.containsKey("languages")) {
+      languages = _json["languages"];
+    }
     if (_json.containsKey("lastLoginTime")) {
       lastLoginTime = core.DateTime.parse(_json["lastLoginTime"]);
     }
@@ -8271,6 +8286,9 @@
     if (kind != null) {
       _json["kind"] = kind;
     }
+    if (languages != null) {
+      _json["languages"] = languages;
+    }
     if (lastLoginTime != null) {
       _json["lastLoginTime"] = (lastLoginTime).toIso8601String();
     }
@@ -8698,11 +8716,48 @@
   }
 }
 
+/** JSON template for a language entry. */
+class UserLanguage {
+  /**
+   * Other language. User can provide own language name if there is no
+   * corresponding Google III language code. If this is set LanguageCode can't
+   * be set
+   */
+  core.String customLanguage;
+  /**
+   * Language Code. Should be used for storing Google III LanguageCode string
+   * representation for language. Illegal values cause SchemaException.
+   */
+  core.String languageCode;
+
+  UserLanguage();
+
+  UserLanguage.fromJson(core.Map _json) {
+    if (_json.containsKey("customLanguage")) {
+      customLanguage = _json["customLanguage"];
+    }
+    if (_json.containsKey("languageCode")) {
+      languageCode = _json["languageCode"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (customLanguage != null) {
+      _json["customLanguage"] = customLanguage;
+    }
+    if (languageCode != null) {
+      _json["languageCode"] = languageCode;
+    }
+    return _json;
+  }
+}
+
 /** JSON template for a location entry. */
 class UserLocation {
   /**
    * Textual location. This is most useful for display purposes to concisely
-   * describe the location. E.g. "Mountain View, CA", "Near Seattle",
+   * describe the location. For example, "Mountain View, CA", "Near Seattle",
    * "US-NYC-9TH 9A209A".
    */
   core.String area;
@@ -8715,9 +8770,9 @@
   /** Floor name/number. */
   core.String floorName;
   /**
-   * Floor Section. More specific location within the floor. E.g. if a floor is
-   * divided into sections "A", "B", and "C", this field would identify one of
-   * those values.
+   * Floor section. More specific location within the floor. For example, if a
+   * floor is divided into sections "A", "B", and "C", this field would identify
+   * one of those values.
    */
   core.String floorSection;
   /**
@@ -8857,6 +8912,10 @@
   /** The domain to which the organization belongs to. */
   core.String domain;
   /**
+   * The full-time equivalent percent within the organization (100000 = 100%).
+   */
+  core.int fullTimeEquivalent;
+  /**
    * Location of the organization. This need not be fully qualified address.
    */
   core.String location;
@@ -8895,6 +8954,9 @@
     if (_json.containsKey("domain")) {
       domain = _json["domain"];
     }
+    if (_json.containsKey("fullTimeEquivalent")) {
+      fullTimeEquivalent = _json["fullTimeEquivalent"];
+    }
     if (_json.containsKey("location")) {
       location = _json["location"];
     }
@@ -8932,6 +8994,9 @@
     if (domain != null) {
       _json["domain"] = domain;
     }
+    if (fullTimeEquivalent != null) {
+      _json["fullTimeEquivalent"] = fullTimeEquivalent;
+    }
     if (location != null) {
       _json["location"] = location;
     }
diff --git a/generated/googleapis/lib/admin/reports_v1.dart b/generated/googleapis/lib/admin/reports_v1.dart
index a49417d..60aae5c 100644
--- a/generated/googleapis/lib/admin/reports_v1.dart
+++ b/generated/googleapis/lib/admin/reports_v1.dart
@@ -56,7 +56,7 @@
    * [applicationName] - Application name for which the events are to be
    * retrieved.
    * Value must have pattern
-   * "(admin)|(calendar)|(drive)|(login)|(mobile)|(token)|(groups)|(saml)|(chat)".
+   * "(admin)|(calendar)|(drive)|(login)|(mobile)|(token)|(groups)|(saml)|(chat)|(gplus)|(rules)".
    *
    * [actorIpAddress] - IP Address of host where the event was performed.
    * Supports both IPv4 and IPv6 addresses.
@@ -157,7 +157,7 @@
    * [applicationName] - Application name for which the events are to be
    * retrieved.
    * Value must have pattern
-   * "(admin)|(calendar)|(drive)|(login)|(mobile)|(token)|(groups)|(saml)|(chat)".
+   * "(admin)|(calendar)|(drive)|(login)|(mobile)|(token)|(groups)|(saml)|(chat)|(gplus)|(rules)".
    *
    * [actorIpAddress] - IP Address of host where the event was performed.
    * Supports both IPv4 and IPv6 addresses.
@@ -322,7 +322,7 @@
    * [parameters] - Represents the application name, parameter name pairs to
    * fetch in csv as app_name1:param_name1, app_name2:param_name2.
    * Value must have pattern
-   * "(((accounts)|(classroom)|(cros)|(gmail)|(calendar)|(docs)|(gplus)|(sites)|(device_management)|(drive)):[^,]+,)*(((accounts)|(classroom)|(cros)|(gmail)|(calendar)|(docs)|(gplus)|(sites)|(device_management)|(drive)):[^,]+)".
+   * "(((accounts)|(app_maker)|(apps_scripts)|(classroom)|(cros)|(gmail)|(calendar)|(docs)|(gplus)|(sites)|(device_management)|(drive)):[^,]+,)*(((accounts)|(app_maker)|(apps_scripts)|(classroom)|(cros)|(gmail)|(calendar)|(docs)|(gplus)|(sites)|(device_management)|(drive)):[^,]+)".
    *
    * Completes with a [UsageReports].
    *
diff --git a/generated/googleapis/lib/appengine/v1.dart b/generated/googleapis/lib/appengine/v1.dart
index 078f510..c987edb 100644
--- a/generated/googleapis/lib/appengine/v1.dart
+++ b/generated/googleapis/lib/appengine/v1.dart
@@ -623,8 +623,6 @@
    *
    * [servicesId] - Part of `name`. See documentation of `appsId`.
    *
-   * [updateMask] - Standard field mask for the set of fields to be updated.
-   *
    * [migrateTraffic] - Set to true to gradually shift traffic to one or more
    * versions that you specify. By default, traffic is shifted immediately. For
    * gradual traffic migration, the target versions must be located within
@@ -639,6 +637,8 @@
    * Splitting Traffic
    * (https://cloud.google.com/appengine/docs/admin-api/migrating-splitting-traffic).
    *
+   * [updateMask] - Standard field mask for the set of fields to be updated.
+   *
    * Completes with a [Operation].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -647,7 +647,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<Operation> patch(Service request, core.String appsId, core.String servicesId, {core.String updateMask, core.bool migrateTraffic}) {
+  async.Future<Operation> patch(Service request, core.String appsId, core.String servicesId, {core.bool migrateTraffic, core.String updateMask}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -664,12 +664,12 @@
     if (servicesId == null) {
       throw new core.ArgumentError("Parameter servicesId is required.");
     }
-    if (updateMask != null) {
-      _queryParams["updateMask"] = [updateMask];
-    }
     if (migrateTraffic != null) {
       _queryParams["migrateTraffic"] = ["${migrateTraffic}"];
     }
+    if (updateMask != null) {
+      _queryParams["updateMask"] = [updateMask];
+    }
 
     _url = 'v1/apps/' + commons.Escaper.ecapeVariable('$appsId') + '/services/' + commons.Escaper.ecapeVariable('$servicesId');
 
@@ -1191,10 +1191,10 @@
    *
    * [versionsId] - Part of `parent`. See documentation of `appsId`.
    *
-   * [pageToken] - Continuation token for fetching the next page of results.
-   *
    * [pageSize] - Maximum results to return per page.
    *
+   * [pageToken] - Continuation token for fetching the next page of results.
+   *
    * Completes with a [ListInstancesResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -1203,7 +1203,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListInstancesResponse> list(core.String appsId, core.String servicesId, core.String versionsId, {core.String pageToken, core.int pageSize}) {
+  async.Future<ListInstancesResponse> list(core.String appsId, core.String servicesId, core.String versionsId, {core.int pageSize, core.String pageToken}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -1220,12 +1220,12 @@
     if (versionsId == null) {
       throw new core.ArgumentError("Parameter versionsId is required.");
     }
-    if (pageToken != null) {
-      _queryParams["pageToken"] = [pageToken];
-    }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
 
     _url = 'v1/apps/' + commons.Escaper.ecapeVariable('$appsId') + '/services/' + commons.Escaper.ecapeVariable('$servicesId') + '/versions/' + commons.Escaper.ecapeVariable('$versionsId') + '/instances';
 
diff --git a/generated/googleapis/lib/bigquery/v2.dart b/generated/googleapis/lib/bigquery/v2.dart
index 9c92f22..f879413 100644
--- a/generated/googleapis/lib/bigquery/v2.dart
+++ b/generated/googleapis/lib/bigquery/v2.dart
@@ -5050,6 +5050,8 @@
   core.Map<core.String, core.String> labels;
   /** A reference uniquely identifying the table. */
   TableReference tableReference;
+  /** [Experimental] The time-based partitioning for this table. */
+  TimePartitioning timePartitioning;
   /** The type of table. Possible values are: TABLE, VIEW. */
   core.String type;
   /** Additional details for a view. */
@@ -5073,6 +5075,9 @@
     if (_json.containsKey("tableReference")) {
       tableReference = new TableReference.fromJson(_json["tableReference"]);
     }
+    if (_json.containsKey("timePartitioning")) {
+      timePartitioning = new TimePartitioning.fromJson(_json["timePartitioning"]);
+    }
     if (_json.containsKey("type")) {
       type = _json["type"];
     }
@@ -5098,6 +5103,9 @@
     if (tableReference != null) {
       _json["tableReference"] = (tableReference).toJson();
     }
+    if (timePartitioning != null) {
+      _json["timePartitioning"] = (timePartitioning).toJson();
+    }
     if (type != null) {
       _json["type"] = type;
     }
diff --git a/generated/googleapis/lib/bigquerydatatransfer/v1.dart b/generated/googleapis/lib/bigquerydatatransfer/v1.dart
index 1528ade..e53ddd6 100644
--- a/generated/googleapis/lib/bigquerydatatransfer/v1.dart
+++ b/generated/googleapis/lib/bigquerydatatransfer/v1.dart
@@ -22,6 +22,12 @@
   /** View and manage your data in Google BigQuery */
   static const BigqueryScope = "https://www.googleapis.com/auth/bigquery";
 
+  /** View and manage your data across Google Cloud Platform services */
+  static const CloudPlatformScope = "https://www.googleapis.com/auth/cloud-platform";
+
+  /** View your data across Google Cloud Platform services */
+  static const CloudPlatformReadOnlyScope = "https://www.googleapis.com/auth/cloud-platform.read-only";
+
 
   final commons.ApiRequester _requester;
 
@@ -582,6 +588,11 @@
    *
    * [parent] - The BigQuery project id where the transfer configuration should
    * be created.
+   * Must be in the format /projects/{project_id}/locations/{location_id}
+   * or
+   * /projects/{project_id}/locations/-
+   * In case when '-' is specified as location_id, location is infered from
+   * the destination dataset region.
    * Value must have pattern "^projects/[^/]+/locations/[^/]+$".
    *
    * [authorizationCode] - Optional OAuth2 authorization code to use with this
@@ -736,6 +747,9 @@
    * should be returned: `projects/{project_id}`.
    * Value must have pattern "^projects/[^/]+/locations/[^/]+$".
    *
+   * [dataSourceIds] - When specified, only configurations of requested data
+   * sources are returned.
+   *
    * [pageToken] - Pagination token, which can be used to request a specific
    * page
    * of `ListTransfersRequest` list results. For multiple-page
@@ -746,9 +760,6 @@
    * [pageSize] - Page size. The default page size is the maximum value of 1000
    * results.
    *
-   * [dataSourceIds] - When specified, only configurations of requested data
-   * sources are returned.
-   *
    * Completes with a [ListTransferConfigsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -757,7 +768,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListTransferConfigsResponse> list(core.String parent, {core.String pageToken, core.int pageSize, core.List<core.String> dataSourceIds}) {
+  async.Future<ListTransferConfigsResponse> list(core.String parent, {core.List<core.String> dataSourceIds, core.String pageToken, core.int pageSize}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -768,15 +779,15 @@
     if (parent == null) {
       throw new core.ArgumentError("Parameter parent is required.");
     }
+    if (dataSourceIds != null) {
+      _queryParams["dataSourceIds"] = dataSourceIds;
+    }
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
-    if (dataSourceIds != null) {
-      _queryParams["dataSourceIds"] = dataSourceIds;
-    }
 
     _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$parent') + '/transferConfigs';
 
@@ -1033,12 +1044,12 @@
    * a `next_page` token, which can be used as the
    * `page_token` value to request the next page of list results.
    *
-   * [statuses] - When specified, only transfer runs with requested statuses are
-   * returned.
-   *
    * [pageSize] - Page size. The default page size is the maximum value of 1000
    * results.
    *
+   * [statuses] - When specified, only transfer runs with requested statuses are
+   * returned.
+   *
    * [runAttempt] - Indicates how run attempts are to be pulled.
    * Possible string values are:
    * - "RUN_ATTEMPT_UNSPECIFIED" : A RUN_ATTEMPT_UNSPECIFIED.
@@ -1052,7 +1063,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListTransferRunsResponse> list(core.String parent, {core.String pageToken, core.List<core.String> statuses, core.int pageSize, core.String runAttempt}) {
+  async.Future<ListTransferRunsResponse> list(core.String parent, {core.String pageToken, core.int pageSize, core.List<core.String> statuses, core.String runAttempt}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -1066,12 +1077,12 @@
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
-    if (statuses != null) {
-      _queryParams["statuses"] = statuses;
-    }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
+    if (statuses != null) {
+      _queryParams["statuses"] = statuses;
+    }
     if (runAttempt != null) {
       _queryParams["runAttempt"] = [runAttempt];
     }
@@ -1107,6 +1118,10 @@
    * Value must have pattern
    * "^projects/[^/]+/locations/[^/]+/transferConfigs/[^/]+/runs/[^/]+$".
    *
+   * [messageTypes] - Message types to return. If not populated - INFO, WARNING
+   * and ERROR
+   * messages are returned.
+   *
    * [pageToken] - Pagination token, which can be used to request a specific
    * page
    * of `ListTransferLogsRequest` list results. For multiple-page
@@ -1117,10 +1132,6 @@
    * [pageSize] - Page size. The default page size is the maximum value of 1000
    * results.
    *
-   * [messageTypes] - Message types to return. If not populated - INFO, WARNING
-   * and ERROR
-   * messages are returned.
-   *
    * Completes with a [ListTransferLogsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -1129,7 +1140,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListTransferLogsResponse> list(core.String parent, {core.String pageToken, core.int pageSize, core.List<core.String> messageTypes}) {
+  async.Future<ListTransferLogsResponse> list(core.String parent, {core.List<core.String> messageTypes, core.String pageToken, core.int pageSize}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -1140,15 +1151,15 @@
     if (parent == null) {
       throw new core.ArgumentError("Parameter parent is required.");
     }
+    if (messageTypes != null) {
+      _queryParams["messageTypes"] = messageTypes;
+    }
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
-    if (messageTypes != null) {
-      _queryParams["messageTypes"] = messageTypes;
-    }
 
     _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$parent') + '/transferLogs';
 
@@ -1182,6 +1193,11 @@
    *
    * [parent] - The BigQuery project id where the transfer configuration should
    * be created.
+   * Must be in the format /projects/{project_id}/locations/{location_id}
+   * or
+   * /projects/{project_id}/locations/-
+   * In case when '-' is specified as location_id, location is infered from
+   * the destination dataset region.
    * Value must have pattern "^projects/[^/]+$".
    *
    * [authorizationCode] - Optional OAuth2 authorization code to use with this
@@ -1334,6 +1350,9 @@
    * should be returned: `projects/{project_id}`.
    * Value must have pattern "^projects/[^/]+$".
    *
+   * [dataSourceIds] - When specified, only configurations of requested data
+   * sources are returned.
+   *
    * [pageToken] - Pagination token, which can be used to request a specific
    * page
    * of `ListTransfersRequest` list results. For multiple-page
@@ -1344,9 +1363,6 @@
    * [pageSize] - Page size. The default page size is the maximum value of 1000
    * results.
    *
-   * [dataSourceIds] - When specified, only configurations of requested data
-   * sources are returned.
-   *
    * Completes with a [ListTransferConfigsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -1355,7 +1371,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListTransferConfigsResponse> list(core.String parent, {core.String pageToken, core.int pageSize, core.List<core.String> dataSourceIds}) {
+  async.Future<ListTransferConfigsResponse> list(core.String parent, {core.List<core.String> dataSourceIds, core.String pageToken, core.int pageSize}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -1366,15 +1382,15 @@
     if (parent == null) {
       throw new core.ArgumentError("Parameter parent is required.");
     }
+    if (dataSourceIds != null) {
+      _queryParams["dataSourceIds"] = dataSourceIds;
+    }
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
-    if (dataSourceIds != null) {
-      _queryParams["dataSourceIds"] = dataSourceIds;
-    }
 
     _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$parent') + '/transferConfigs';
 
@@ -1403,8 +1419,6 @@
    * guaranteed or required. The name is ignored when creating a transfer run.
    * Value must have pattern "^projects/[^/]+/transferConfigs/[^/]+$".
    *
-   * [updateMask] - Required list of fields to be updated in this request.
-   *
    * [authorizationCode] - Optional OAuth2 authorization code to use with this
    * transfer configuration.
    * If it is provided, the transfer configuration will be associated with the
@@ -1423,6 +1437,8 @@
    *   returned in the title bar of the browser, with the page text prompting
    *   the user to copy the code and paste it in the application.
    *
+   * [updateMask] - Required list of fields to be updated in this request.
+   *
    * Completes with a [TransferConfig].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -1431,7 +1447,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<TransferConfig> patch(TransferConfig request, core.String name, {core.String updateMask, core.String authorizationCode}) {
+  async.Future<TransferConfig> patch(TransferConfig request, core.String name, {core.String authorizationCode, core.String updateMask}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -1445,12 +1461,12 @@
     if (name == null) {
       throw new core.ArgumentError("Parameter name is required.");
     }
-    if (updateMask != null) {
-      _queryParams["updateMask"] = [updateMask];
-    }
     if (authorizationCode != null) {
       _queryParams["authorizationCode"] = [authorizationCode];
     }
+    if (updateMask != null) {
+      _queryParams["updateMask"] = [updateMask];
+    }
 
     _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name');
 
@@ -1621,6 +1637,11 @@
    * `projects/{project_id}/transferConfigs/{config_id}`.
    * Value must have pattern "^projects/[^/]+/transferConfigs/[^/]+$".
    *
+   * [runAttempt] - Indicates how run attempts are to be pulled.
+   * Possible string values are:
+   * - "RUN_ATTEMPT_UNSPECIFIED" : A RUN_ATTEMPT_UNSPECIFIED.
+   * - "LATEST" : A LATEST.
+   *
    * [pageToken] - Pagination token, which can be used to request a specific
    * page
    * of `ListTransferRunsRequest` list results. For multiple-page
@@ -1628,16 +1649,11 @@
    * a `next_page` token, which can be used as the
    * `page_token` value to request the next page of list results.
    *
-   * [statuses] - When specified, only transfer runs with requested statuses are
-   * returned.
-   *
    * [pageSize] - Page size. The default page size is the maximum value of 1000
    * results.
    *
-   * [runAttempt] - Indicates how run attempts are to be pulled.
-   * Possible string values are:
-   * - "RUN_ATTEMPT_UNSPECIFIED" : A RUN_ATTEMPT_UNSPECIFIED.
-   * - "LATEST" : A LATEST.
+   * [statuses] - When specified, only transfer runs with requested statuses are
+   * returned.
    *
    * Completes with a [ListTransferRunsResponse].
    *
@@ -1647,7 +1663,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListTransferRunsResponse> list(core.String parent, {core.String pageToken, core.List<core.String> statuses, core.int pageSize, core.String runAttempt}) {
+  async.Future<ListTransferRunsResponse> list(core.String parent, {core.String runAttempt, core.String pageToken, core.int pageSize, core.List<core.String> statuses}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -1658,17 +1674,17 @@
     if (parent == null) {
       throw new core.ArgumentError("Parameter parent is required.");
     }
+    if (runAttempt != null) {
+      _queryParams["runAttempt"] = [runAttempt];
+    }
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
-    if (statuses != null) {
-      _queryParams["statuses"] = statuses;
-    }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
-    if (runAttempt != null) {
-      _queryParams["runAttempt"] = [runAttempt];
+    if (statuses != null) {
+      _queryParams["statuses"] = statuses;
     }
 
     _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$parent') + '/runs';
@@ -2491,6 +2507,12 @@
   core.int dataRefreshWindowDays;
   /** Data source id. Cannot be changed once data transfer is created. */
   core.String dataSourceId;
+  /**
+   * Region in which BigQuery dataset is located. Currently possible values are:
+   * "US" and "EU".
+   * @OutputOnly
+   */
+  core.String datasetRegion;
   /** The BigQuery target dataset id. */
   core.String destinationDatasetId;
   /**
@@ -2552,6 +2574,13 @@
    * @OutputOnly
    */
   core.String updateTime;
+  /**
+   * GaiaID of the user on whose behalf transfer is done. Applicable only
+   * to data sources that do not support service accounts. When set to 0,
+   * the data source service account credentials are used.
+   * @OutputOnly
+   */
+  core.String userId;
 
   TransferConfig();
 
@@ -2562,6 +2591,9 @@
     if (_json.containsKey("dataSourceId")) {
       dataSourceId = _json["dataSourceId"];
     }
+    if (_json.containsKey("datasetRegion")) {
+      datasetRegion = _json["datasetRegion"];
+    }
     if (_json.containsKey("destinationDatasetId")) {
       destinationDatasetId = _json["destinationDatasetId"];
     }
@@ -2589,6 +2621,9 @@
     if (_json.containsKey("updateTime")) {
       updateTime = _json["updateTime"];
     }
+    if (_json.containsKey("userId")) {
+      userId = _json["userId"];
+    }
   }
 
   core.Map<core.String, core.Object> toJson() {
@@ -2599,6 +2634,9 @@
     if (dataSourceId != null) {
       _json["dataSourceId"] = dataSourceId;
     }
+    if (datasetRegion != null) {
+      _json["datasetRegion"] = datasetRegion;
+    }
     if (destinationDatasetId != null) {
       _json["destinationDatasetId"] = destinationDatasetId;
     }
@@ -2626,6 +2664,9 @@
     if (updateTime != null) {
       _json["updateTime"] = updateTime;
     }
+    if (userId != null) {
+      _json["userId"] = userId;
+    }
     return _json;
   }
 }
@@ -2682,6 +2723,12 @@
    * @OutputOnly
    */
   core.String dataSourceId;
+  /**
+   * Region in which BigQuery dataset is located. Currently possible values are:
+   * "US" and "EU".
+   * @OutputOnly
+   */
+  core.String datasetRegion;
   /** The BigQuery target dataset id. */
   core.String destinationDatasetId;
   /**
@@ -2693,7 +2740,7 @@
   /**
    * The resource name of the transfer run.
    * Transfer run names have the form
-   * `projects/{project_id}/transferConfigs/{config_id}/runs/{run_id}`.
+   * `projects/{project_id}/locations/{location}/transferConfigs/{config_id}/runs/{run_id}`.
    * The name is ignored when creating a transfer run.
    */
   core.String name;
@@ -2745,6 +2792,11 @@
    * @OutputOnly
    */
   core.String updateTime;
+  /**
+   * The user id for this transfer run.
+   * @OutputOnly
+   */
+  core.String userId;
 
   TransferRun();
 
@@ -2752,6 +2804,9 @@
     if (_json.containsKey("dataSourceId")) {
       dataSourceId = _json["dataSourceId"];
     }
+    if (_json.containsKey("datasetRegion")) {
+      datasetRegion = _json["datasetRegion"];
+    }
     if (_json.containsKey("destinationDatasetId")) {
       destinationDatasetId = _json["destinationDatasetId"];
     }
@@ -2782,6 +2837,9 @@
     if (_json.containsKey("updateTime")) {
       updateTime = _json["updateTime"];
     }
+    if (_json.containsKey("userId")) {
+      userId = _json["userId"];
+    }
   }
 
   core.Map<core.String, core.Object> toJson() {
@@ -2789,6 +2847,9 @@
     if (dataSourceId != null) {
       _json["dataSourceId"] = dataSourceId;
     }
+    if (datasetRegion != null) {
+      _json["datasetRegion"] = datasetRegion;
+    }
     if (destinationDatasetId != null) {
       _json["destinationDatasetId"] = destinationDatasetId;
     }
@@ -2819,6 +2880,9 @@
     if (updateTime != null) {
       _json["updateTime"] = updateTime;
     }
+    if (userId != null) {
+      _json["userId"] = userId;
+    }
     return _json;
   }
 }
diff --git a/generated/googleapis/lib/classroom/v1.dart b/generated/googleapis/lib/classroom/v1.dart
index 119940f..03c3eeb 100644
--- a/generated/googleapis/lib/classroom/v1.dart
+++ b/generated/googleapis/lib/classroom/v1.dart
@@ -254,6 +254,24 @@
    *
    * Request parameters:
    *
+   * [pageSize] - Maximum number of items to return. Zero or unspecified
+   * indicates that the
+   * server may assign a maximum.
+   *
+   * The server may return fewer than the specified number of results.
+   *
+   * [courseStates] - Restricts returned courses to those in one of the
+   * specified states
+   * The default value is ACTIVE, ARCHIVED, PROVISIONED, DECLINED.
+   *
+   * [teacherId] - Restricts returned courses to those having a teacher with the
+   * specified
+   * identifier. The identifier can be one of the following:
+   *
+   * * the numeric identifier for the user
+   * * the email address of the user
+   * * the string literal `"me"`, indicating the requesting user
+   *
    * [studentId] - Restricts returned courses to those having a student with the
    * specified
    * identifier. The identifier can be one of the following:
@@ -270,24 +288,6 @@
    * The list request must be
    * otherwise identical to the one that resulted in this token.
    *
-   * [pageSize] - Maximum number of items to return. Zero or unspecified
-   * indicates that the
-   * server may assign a maximum.
-   *
-   * The server may return fewer than the specified number of results.
-   *
-   * [teacherId] - Restricts returned courses to those having a teacher with the
-   * specified
-   * identifier. The identifier can be one of the following:
-   *
-   * * the numeric identifier for the user
-   * * the email address of the user
-   * * the string literal `"me"`, indicating the requesting user
-   *
-   * [courseStates] - Restricts returned courses to those in one of the
-   * specified states
-   * The default value is ACTIVE, ARCHIVED, PROVISIONED, DECLINED.
-   *
    * Completes with a [ListCoursesResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -296,7 +296,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListCoursesResponse> list({core.String studentId, core.String pageToken, core.int pageSize, core.String teacherId, core.List<core.String> courseStates}) {
+  async.Future<ListCoursesResponse> list({core.int pageSize, core.List<core.String> courseStates, core.String teacherId, core.String studentId, core.String pageToken}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -304,21 +304,21 @@
     var _downloadOptions = commons.DownloadOptions.Metadata;
     var _body = null;
 
+    if (pageSize != null) {
+      _queryParams["pageSize"] = ["${pageSize}"];
+    }
+    if (courseStates != null) {
+      _queryParams["courseStates"] = courseStates;
+    }
+    if (teacherId != null) {
+      _queryParams["teacherId"] = [teacherId];
+    }
     if (studentId != null) {
       _queryParams["studentId"] = [studentId];
     }
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
-    if (pageSize != null) {
-      _queryParams["pageSize"] = ["${pageSize}"];
-    }
-    if (teacherId != null) {
-      _queryParams["teacherId"] = [teacherId];
-    }
-    if (courseStates != null) {
-      _queryParams["courseStates"] = courseStates;
-    }
 
     _url = 'v1/courses';
 
@@ -854,6 +854,21 @@
    * This identifier can be either the Classroom-assigned identifier or an
    * alias.
    *
+   * [pageToken] - nextPageToken
+   * value returned from a previous
+   * list call,
+   * indicating that the subsequent page of results should be returned.
+   *
+   * The list request
+   * must be otherwise identical to the one that resulted in this token.
+   *
+   * [orderBy] - Optional sort ordering for results. A comma-separated list of
+   * fields with
+   * an optional sort direction keyword. Supported fields are `updateTime`
+   * and `dueDate`. Supported direction keywords are `asc` and `desc`.
+   * If not specified, `updateTime desc` is the default behavior.
+   * Examples: `dueDate asc,updateTime desc`, `updateTime,dueDate desc`
+   *
    * [pageSize] - Maximum number of items to return. Zero or unspecified
    * indicates that the
    * server may assign a maximum.
@@ -865,21 +880,6 @@
    * is returned. If unspecified, items with a work status of `PUBLISHED`
    * is returned.
    *
-   * [orderBy] - Optional sort ordering for results. A comma-separated list of
-   * fields with
-   * an optional sort direction keyword. Supported fields are `updateTime`
-   * and `dueDate`. Supported direction keywords are `asc` and `desc`.
-   * If not specified, `updateTime desc` is the default behavior.
-   * Examples: `dueDate asc,updateTime desc`, `updateTime,dueDate desc`
-   *
-   * [pageToken] - nextPageToken
-   * value returned from a previous
-   * list call,
-   * indicating that the subsequent page of results should be returned.
-   *
-   * The list request
-   * must be otherwise identical to the one that resulted in this token.
-   *
    * Completes with a [ListCourseWorkResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -888,7 +888,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListCourseWorkResponse> list(core.String courseId, {core.int pageSize, core.List<core.String> courseWorkStates, core.String orderBy, core.String pageToken}) {
+  async.Future<ListCourseWorkResponse> list(core.String courseId, {core.String pageToken, core.String orderBy, core.int pageSize, core.List<core.String> courseWorkStates}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -899,18 +899,18 @@
     if (courseId == null) {
       throw new core.ArgumentError("Parameter courseId is required.");
     }
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
+    if (orderBy != null) {
+      _queryParams["orderBy"] = [orderBy];
+    }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
     if (courseWorkStates != null) {
       _queryParams["courseWorkStates"] = courseWorkStates;
     }
-    if (orderBy != null) {
-      _queryParams["orderBy"] = [orderBy];
-    }
-    if (pageToken != null) {
-      _queryParams["pageToken"] = [pageToken];
-    }
 
     _url = 'v1/courses/' + commons.Escaper.ecapeVariable('$courseId') + '/courseWork';
 
@@ -972,6 +972,7 @@
    * * `due_date`
    * * `due_time`
    * * `max_points`
+   * * `scheduled_time`
    * * `submission_modification_mode`
    *
    * Completes with a [CourseWork].
@@ -1108,15 +1109,6 @@
    * This may be set to the string literal `"-"` to request student work for
    * all course work in the specified course.
    *
-   * [late] - Requested lateness value. If specified, returned student
-   * submissions are
-   * restricted by the requested value.
-   * If unspecified, submissions are returned regardless of `late` value.
-   * Possible string values are:
-   * - "LATE_VALUES_UNSPECIFIED" : A LATE_VALUES_UNSPECIFIED.
-   * - "LATE_ONLY" : A LATE_ONLY.
-   * - "NOT_LATE_ONLY" : A NOT_LATE_ONLY.
-   *
    * [pageToken] - nextPageToken
    * value returned from a previous
    * list call,
@@ -1144,6 +1136,15 @@
    * * the email address of the user
    * * the string literal `"me"`, indicating the requesting user
    *
+   * [late] - Requested lateness value. If specified, returned student
+   * submissions are
+   * restricted by the requested value.
+   * If unspecified, submissions are returned regardless of `late` value.
+   * Possible string values are:
+   * - "LATE_VALUES_UNSPECIFIED" : A LATE_VALUES_UNSPECIFIED.
+   * - "LATE_ONLY" : A LATE_ONLY.
+   * - "NOT_LATE_ONLY" : A NOT_LATE_ONLY.
+   *
    * Completes with a [ListStudentSubmissionsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -1152,7 +1153,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListStudentSubmissionsResponse> list(core.String courseId, core.String courseWorkId, {core.String late, core.String pageToken, core.int pageSize, core.List<core.String> states, core.String userId}) {
+  async.Future<ListStudentSubmissionsResponse> list(core.String courseId, core.String courseWorkId, {core.String pageToken, core.int pageSize, core.List<core.String> states, core.String userId, core.String late}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -1166,9 +1167,6 @@
     if (courseWorkId == null) {
       throw new core.ArgumentError("Parameter courseWorkId is required.");
     }
-    if (late != null) {
-      _queryParams["late"] = [late];
-    }
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
@@ -1181,6 +1179,9 @@
     if (userId != null) {
       _queryParams["userId"] = [userId];
     }
+    if (late != null) {
+      _queryParams["late"] = [late];
+    }
 
     _url = 'v1/courses/' + commons.Escaper.ecapeVariable('$courseId') + '/courseWork/' + commons.Escaper.ecapeVariable('$courseWorkId') + '/studentSubmissions';
 
@@ -1789,10 +1790,6 @@
    * This identifier can be either the Classroom-assigned identifier or an
    * alias.
    *
-   * [pageSize] - Maximum number of items to return. Zero means no maximum.
-   *
-   * The server may return fewer than the specified number of results.
-   *
    * [pageToken] - nextPageToken
    * value returned from a previous
    * list call, indicating that
@@ -1801,6 +1798,10 @@
    * The list request must be
    * otherwise identical to the one that resulted in this token.
    *
+   * [pageSize] - Maximum number of items to return. Zero means no maximum.
+   *
+   * The server may return fewer than the specified number of results.
+   *
    * Completes with a [ListStudentsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -1809,7 +1810,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListStudentsResponse> list(core.String courseId, {core.int pageSize, core.String pageToken}) {
+  async.Future<ListStudentsResponse> list(core.String courseId, {core.String pageToken, core.int pageSize}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -1820,12 +1821,12 @@
     if (courseId == null) {
       throw new core.ArgumentError("Parameter courseId is required.");
     }
-    if (pageSize != null) {
-      _queryParams["pageSize"] = ["${pageSize}"];
-    }
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
+    if (pageSize != null) {
+      _queryParams["pageSize"] = ["${pageSize}"];
+    }
 
     _url = 'v1/courses/' + commons.Escaper.ecapeVariable('$courseId') + '/students';
 
@@ -2307,14 +2308,6 @@
    *
    * Request parameters:
    *
-   * [userId] - Restricts returned invitations to those for a specific user. The
-   * identifier
-   * can be one of the following:
-   *
-   * * the numeric identifier for the user
-   * * the email address of the user
-   * * the string literal `"me"`, indicating the requesting user
-   *
    * [pageToken] - nextPageToken
    * value returned from a previous
    * list call, indicating
@@ -2323,6 +2316,14 @@
    * The list request must be
    * otherwise identical to the one that resulted in this token.
    *
+   * [userId] - Restricts returned invitations to those for a specific user. The
+   * identifier
+   * can be one of the following:
+   *
+   * * the numeric identifier for the user
+   * * the email address of the user
+   * * the string literal `"me"`, indicating the requesting user
+   *
    * [pageSize] - Maximum number of items to return. Zero means no maximum.
    *
    * The server may return fewer than the specified number of results.
@@ -2339,7 +2340,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListInvitationsResponse> list({core.String userId, core.String pageToken, core.int pageSize, core.String courseId}) {
+  async.Future<ListInvitationsResponse> list({core.String pageToken, core.String userId, core.int pageSize, core.String courseId}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -2347,12 +2348,12 @@
     var _downloadOptions = commons.DownloadOptions.Metadata;
     var _body = null;
 
-    if (userId != null) {
-      _queryParams["userId"] = [userId];
-    }
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
+    if (userId != null) {
+      _queryParams["userId"] = [userId];
+    }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
@@ -2615,20 +2616,20 @@
    * The list request
    * must be otherwise identical to the one that resulted in this token.
    *
-   * [invitedEmailAddress] - If specified, only results with the specified
-   * `invited_email_address`
-   * will be returned.
-   *
-   * [states] - If specified, only results with the specified `state` values
-   * will be
-   * returned. Otherwise, results with a `state` of `PENDING` will be returned.
-   *
    * [pageSize] - Maximum number of items to return. Zero or unspecified
    * indicates that the
    * server may assign a maximum.
    *
    * The server may return fewer than the specified number of results.
    *
+   * [states] - If specified, only results with the specified `state` values
+   * will be
+   * returned. Otherwise, results with a `state` of `PENDING` will be returned.
+   *
+   * [invitedEmailAddress] - If specified, only results with the specified
+   * `invited_email_address`
+   * will be returned.
+   *
    * Completes with a [ListGuardianInvitationsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -2637,7 +2638,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListGuardianInvitationsResponse> list(core.String studentId, {core.String pageToken, core.String invitedEmailAddress, core.List<core.String> states, core.int pageSize}) {
+  async.Future<ListGuardianInvitationsResponse> list(core.String studentId, {core.String pageToken, core.int pageSize, core.List<core.String> states, core.String invitedEmailAddress}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -2651,14 +2652,14 @@
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
-    if (invitedEmailAddress != null) {
-      _queryParams["invitedEmailAddress"] = [invitedEmailAddress];
+    if (pageSize != null) {
+      _queryParams["pageSize"] = ["${pageSize}"];
     }
     if (states != null) {
       _queryParams["states"] = states;
     }
-    if (pageSize != null) {
-      _queryParams["pageSize"] = ["${pageSize}"];
+    if (invitedEmailAddress != null) {
+      _queryParams["invitedEmailAddress"] = [invitedEmailAddress];
     }
 
     _url = 'v1/userProfiles/' + commons.Escaper.ecapeVariable('$studentId') + '/guardianInvitations';
@@ -2932,17 +2933,17 @@
    * The list request
    * must be otherwise identical to the one that resulted in this token.
    *
-   * [invitedEmailAddress] - Filter results by the email address that the
-   * original invitation was sent
-   * to, resulting in this guardian link.
-   * This filter can only be used by domain administrators.
-   *
    * [pageSize] - Maximum number of items to return. Zero or unspecified
    * indicates that the
    * server may assign a maximum.
    *
    * The server may return fewer than the specified number of results.
    *
+   * [invitedEmailAddress] - Filter results by the email address that the
+   * original invitation was sent
+   * to, resulting in this guardian link.
+   * This filter can only be used by domain administrators.
+   *
    * Completes with a [ListGuardiansResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -2951,7 +2952,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListGuardiansResponse> list(core.String studentId, {core.String pageToken, core.String invitedEmailAddress, core.int pageSize}) {
+  async.Future<ListGuardiansResponse> list(core.String studentId, {core.String pageToken, core.int pageSize, core.String invitedEmailAddress}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -2965,12 +2966,12 @@
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
-    if (invitedEmailAddress != null) {
-      _queryParams["invitedEmailAddress"] = [invitedEmailAddress];
-    }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
+    if (invitedEmailAddress != null) {
+      _queryParams["invitedEmailAddress"] = [invitedEmailAddress];
+    }
 
     _url = 'v1/userProfiles/' + commons.Escaper.ecapeVariable('$studentId') + '/guardians';
 
@@ -5292,7 +5293,9 @@
    */
   core.String photoUrl;
   /**
-   * Whether or not the user is a verified teacher
+   * Represents whether a G Suite for Education user's domain administrator has
+   * explicitly verified them as being a teacher. If the user is not a member of
+   * a G Suite for Education domain, than this field will always be false.
    *
    * Read-only
    */
diff --git a/generated/googleapis/lib/cloudbuild/v1.dart b/generated/googleapis/lib/cloudbuild/v1.dart
index 2192951..7a0d4ed 100644
--- a/generated/googleapis/lib/cloudbuild/v1.dart
+++ b/generated/googleapis/lib/cloudbuild/v1.dart
@@ -370,12 +370,12 @@
    *
    * [projectId] - ID of the project.
    *
-   * [filter] - The raw filter text to constrain the results.
-   *
    * [pageToken] - Token to provide to skip to a particular spot in the list.
    *
    * [pageSize] - Number of results to return in the list.
    *
+   * [filter] - The raw filter text to constrain the results.
+   *
    * Completes with a [ListBuildsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -384,7 +384,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListBuildsResponse> list(core.String projectId, {core.String filter, core.String pageToken, core.int pageSize}) {
+  async.Future<ListBuildsResponse> list(core.String projectId, {core.String pageToken, core.int pageSize, core.String filter}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -395,15 +395,15 @@
     if (projectId == null) {
       throw new core.ArgumentError("Parameter projectId is required.");
     }
-    if (filter != null) {
-      _queryParams["filter"] = [filter];
-    }
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
+    if (filter != null) {
+      _queryParams["filter"] = [filter];
+    }
 
     _url = 'v1/projects/' + commons.Escaper.ecapeVariable('$projectId') + '/builds';
 
@@ -943,6 +943,15 @@
   core.String requestedVerifyOption;
   /** Requested hash for SourceProvenance. */
   core.List<core.String> sourceProvenanceHash;
+  /**
+   * SubstitutionOption to allow unmatch substitutions.
+   * Possible string values are:
+   * - "MUST_MATCH" : Fails the build if error in substitutions checks, like
+   * missing
+   * a substitution in the template or in the map.
+   * - "ALLOW_LOOSE" : Do not fail the build if error in substitutions checks.
+   */
+  core.String substitutionOption;
 
   BuildOptions();
 
@@ -953,6 +962,9 @@
     if (_json.containsKey("sourceProvenanceHash")) {
       sourceProvenanceHash = _json["sourceProvenanceHash"];
     }
+    if (_json.containsKey("substitutionOption")) {
+      substitutionOption = _json["substitutionOption"];
+    }
   }
 
   core.Map<core.String, core.Object> toJson() {
@@ -963,6 +975,9 @@
     if (sourceProvenanceHash != null) {
       _json["sourceProvenanceHash"] = sourceProvenanceHash;
     }
+    if (substitutionOption != null) {
+      _json["substitutionOption"] = substitutionOption;
+    }
     return _json;
   }
 }
@@ -1744,8 +1759,8 @@
   /** The status code, which should be an enum value of google.rpc.Code. */
   core.int code;
   /**
-   * A list of messages that carry the error details.  There will be a
-   * common set of message types for APIs to use.
+   * A list of messages that carry the error details.  There is a common set of
+   * message types for APIs to use.
    *
    * The values for Object must be JSON objects. It can consist of `num`,
    * `String`, `bool` and `null` as well as `Map` and `List` values.
diff --git a/generated/googleapis/lib/clouddebugger/v2.dart b/generated/googleapis/lib/clouddebugger/v2.dart
index 1900b61..5d23d33 100644
--- a/generated/googleapis/lib/clouddebugger/v2.dart
+++ b/generated/googleapis/lib/clouddebugger/v2.dart
@@ -130,11 +130,6 @@
    *
    * [debuggeeId] - Identifies the debuggee.
    *
-   * [waitToken] - A wait token that, if specified, blocks the method call until
-   * the list
-   * of active breakpoints has changed, or a server selected timeout has
-   * expired.  The value should be set from the last returned response.
-   *
    * [successOnTimeout] - If set to `true`, returns `google.rpc.Code.OK` status
    * and sets the
    * `wait_expired` response field to `true` when the server-selected timeout
@@ -143,6 +138,11 @@
    * If set to `false`, returns `google.rpc.Code.ABORTED` status when the
    * server-selected timeout has expired (deprecated).
    *
+   * [waitToken] - A wait token that, if specified, blocks the method call until
+   * the list
+   * of active breakpoints has changed, or a server selected timeout has
+   * expired.  The value should be set from the last returned response.
+   *
    * Completes with a [ListActiveBreakpointsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -151,7 +151,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListActiveBreakpointsResponse> list(core.String debuggeeId, {core.String waitToken, core.bool successOnTimeout}) {
+  async.Future<ListActiveBreakpointsResponse> list(core.String debuggeeId, {core.bool successOnTimeout, core.String waitToken}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -162,12 +162,12 @@
     if (debuggeeId == null) {
       throw new core.ArgumentError("Parameter debuggeeId is required.");
     }
-    if (waitToken != null) {
-      _queryParams["waitToken"] = [waitToken];
-    }
     if (successOnTimeout != null) {
       _queryParams["successOnTimeout"] = ["${successOnTimeout}"];
     }
+    if (waitToken != null) {
+      _queryParams["waitToken"] = [waitToken];
+    }
 
     _url = 'v2/controller/debuggees/' + commons.Escaper.ecapeVariable('$debuggeeId') + '/breakpoints';
 
@@ -428,6 +428,10 @@
    *
    * [debuggeeId] - ID of the debuggee whose breakpoints to list.
    *
+   * [stripResults] - This field is deprecated. The following fields are always
+   * stripped out of
+   * the result: `stack_frames`, `evaluated_expressions` and `variable_table`.
+   *
    * [waitToken] - A wait token that, if specified, blocks the call until the
    * breakpoints
    * list has changed, or a server selected timeout has expired.  The value
@@ -435,26 +439,22 @@
    * `google.rpc.Code.ABORTED` (RPC) is returned on wait timeout, which
    * should be called again with the same `wait_token`.
    *
+   * [clientVersion] - The client version making the call.
+   * Following: `domain/type/version` (e.g., `google.com/intellij/v1`).
+   *
    * [action_value] - Only breakpoints with the specified action will pass the
    * filter.
    * Possible string values are:
    * - "CAPTURE" : A CAPTURE.
    * - "LOG" : A LOG.
    *
-   * [clientVersion] - The client version making the call.
-   * Following: `domain/type/version` (e.g., `google.com/intellij/v1`).
-   *
-   * [includeInactive] - When set to `true`, the response includes active and
-   * inactive
-   * breakpoints. Otherwise, it includes only active breakpoints.
-   *
    * [includeAllUsers] - When set to `true`, the response includes the list of
    * breakpoints set by
    * any user. Otherwise, it includes only breakpoints set by the caller.
    *
-   * [stripResults] - This field is deprecated. The following fields are always
-   * stripped out of
-   * the result: `stack_frames`, `evaluated_expressions` and `variable_table`.
+   * [includeInactive] - When set to `true`, the response includes active and
+   * inactive
+   * breakpoints. Otherwise, it includes only active breakpoints.
    *
    * Completes with a [ListBreakpointsResponse].
    *
@@ -464,7 +464,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListBreakpointsResponse> list(core.String debuggeeId, {core.String waitToken, core.String action_value, core.String clientVersion, core.bool includeInactive, core.bool includeAllUsers, core.bool stripResults}) {
+  async.Future<ListBreakpointsResponse> list(core.String debuggeeId, {core.bool stripResults, core.String waitToken, core.String clientVersion, core.String action_value, core.bool includeAllUsers, core.bool includeInactive}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -475,23 +475,23 @@
     if (debuggeeId == null) {
       throw new core.ArgumentError("Parameter debuggeeId is required.");
     }
+    if (stripResults != null) {
+      _queryParams["stripResults"] = ["${stripResults}"];
+    }
     if (waitToken != null) {
       _queryParams["waitToken"] = [waitToken];
     }
-    if (action_value != null) {
-      _queryParams["action.value"] = [action_value];
-    }
     if (clientVersion != null) {
       _queryParams["clientVersion"] = [clientVersion];
     }
-    if (includeInactive != null) {
-      _queryParams["includeInactive"] = ["${includeInactive}"];
+    if (action_value != null) {
+      _queryParams["action.value"] = [action_value];
     }
     if (includeAllUsers != null) {
       _queryParams["includeAllUsers"] = ["${includeAllUsers}"];
     }
-    if (stripResults != null) {
-      _queryParams["stripResults"] = ["${stripResults}"];
+    if (includeInactive != null) {
+      _queryParams["includeInactive"] = ["${includeInactive}"];
     }
 
     _url = 'v2/debugger/debuggees/' + commons.Escaper.ecapeVariable('$debuggeeId') + '/breakpoints';
diff --git a/generated/googleapis/lib/cloudkms/v1.dart b/generated/googleapis/lib/cloudkms/v1.dart
index 6717b89..73be975 100644
--- a/generated/googleapis/lib/cloudkms/v1.dart
+++ b/generated/googleapis/lib/cloudkms/v1.dart
@@ -98,12 +98,12 @@
    * [name] - The resource that owns the locations collection, if applicable.
    * Value must have pattern "^projects/[^/]+$".
    *
-   * [pageSize] - The standard list page size.
-   *
    * [filter] - The standard list filter.
    *
    * [pageToken] - The standard list page token.
    *
+   * [pageSize] - The standard list page size.
+   *
    * Completes with a [ListLocationsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -112,7 +112,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListLocationsResponse> list(core.String name, {core.int pageSize, core.String filter, core.String pageToken}) {
+  async.Future<ListLocationsResponse> list(core.String name, {core.String filter, core.String pageToken, core.int pageSize}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -123,15 +123,15 @@
     if (name == null) {
       throw new core.ArgumentError("Parameter name is required.");
     }
-    if (pageSize != null) {
-      _queryParams["pageSize"] = ["${pageSize}"];
-    }
     if (filter != null) {
       _queryParams["filter"] = [filter];
     }
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
+    if (pageSize != null) {
+      _queryParams["pageSize"] = ["${pageSize}"];
+    }
 
     _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name') + '/locations';
 
@@ -710,14 +710,14 @@
    * `projects / * /locations / * /keyRings / * `.
    * Value must have pattern "^projects/[^/]+/locations/[^/]+/keyRings/[^/]+$".
    *
+   * [pageToken] - Optional pagination token, returned earlier via
+   * ListCryptoKeysResponse.next_page_token.
+   *
    * [pageSize] - Optional limit on the number of CryptoKeys to include in the
    * response.  Further CryptoKeys can subsequently be obtained by
    * including the ListCryptoKeysResponse.next_page_token in a subsequent
    * request.  If unspecified, the server will pick an appropriate default.
    *
-   * [pageToken] - Optional pagination token, returned earlier via
-   * ListCryptoKeysResponse.next_page_token.
-   *
    * Completes with a [ListCryptoKeysResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -726,7 +726,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListCryptoKeysResponse> list(core.String parent, {core.int pageSize, core.String pageToken}) {
+  async.Future<ListCryptoKeysResponse> list(core.String parent, {core.String pageToken, core.int pageSize}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -737,12 +737,12 @@
     if (parent == null) {
       throw new core.ArgumentError("Parameter parent is required.");
     }
-    if (pageSize != null) {
-      _queryParams["pageSize"] = ["${pageSize}"];
-    }
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
+    if (pageSize != null) {
+      _queryParams["pageSize"] = ["${pageSize}"];
+    }
 
     _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$parent') + '/cryptoKeys';
 
@@ -2082,7 +2082,7 @@
   core.String description;
   /**
    * Textual representation of an expression in
-   * [Common Expression Language](http://go/api-expr) syntax.
+   * Common Expression Language syntax.
    *
    * The application context of the containing message determines which
    * well-known feature set of CEL is supported.
@@ -2384,7 +2384,31 @@
   }
 }
 
-/** Specifies what kind of log the caller must write */
+/**
+ * Specifies what kind of log the caller must write
+ * Increment a streamz counter with the specified metric and field names.
+ *
+ * Metric names should start with a '/', generally be lowercase-only,
+ * and end in "_count". Field names should not contain an initial slash.
+ * The actual exported metric names will have "/iam/policy" prepended.
+ *
+ * Field names correspond to IAM request parameters and field values are
+ * their respective values.
+ *
+ * At present the only supported field names are
+ *    - "iam_principal", corresponding to IAMContext.principal;
+ *    - "" (empty string), resulting in one aggretated counter with no field.
+ *
+ * Examples:
+ *   counter { metric: "/debug_access_count"  field: "iam_principal" }
+ *   ==> increment counter /iam/policy/backend_debug_access_count
+ *                         {iam_principal=[value of IAMContext.principal]}
+ *
+ * At this time we do not support:
+ * * multiple field names (though this may be supported in the future)
+ * * decrementing the counter
+ * * incrementing it by anything other than 1
+ */
 class LogConfig {
   /** Cloud audit options. */
   CloudAuditOptions cloudAudit;
diff --git a/generated/googleapis/lib/cloudresourcemanager/v1.dart b/generated/googleapis/lib/cloudresourcemanager/v1.dart
index 6b434ac..696a3b4 100644
--- a/generated/googleapis/lib/cloudresourcemanager/v1.dart
+++ b/generated/googleapis/lib/cloudresourcemanager/v1.dart
@@ -434,15 +434,15 @@
    *
    * Request parameters:
    *
-   * [pageToken] - The `next_page_token` value returned from a previous List
-   * request, if any.
-   *
    * [pageSize] - The maximum number of items to return. This is a suggestion
    * for the server.
    *
    * [parent] - The name of the resource to list all attached Liens.
    * For example, `projects/1234`.
    *
+   * [pageToken] - The `next_page_token` value returned from a previous List
+   * request, if any.
+   *
    * Completes with a [ListLiensResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -451,7 +451,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListLiensResponse> list({core.String pageToken, core.int pageSize, core.String parent}) {
+  async.Future<ListLiensResponse> list({core.int pageSize, core.String parent, core.String pageToken}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -459,15 +459,15 @@
     var _downloadOptions = commons.DownloadOptions.Metadata;
     var _body = null;
 
-    if (pageToken != null) {
-      _queryParams["pageToken"] = [pageToken];
-    }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
     if (parent != null) {
       _queryParams["parent"] = [parent];
     }
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
 
     _url = 'v1/liens';
 
@@ -680,6 +680,9 @@
    * if no such policy or resource exists. The `resource` field should be the
    * organization's resource name, e.g. "organizations/123".
    *
+   * Authorization requires the Google IAM permission
+   * `resourcemanager.organizations.getIamPolicy` on the specified organization
+   *
    * [request] - The metadata request object.
    *
    * Request parameters:
@@ -870,6 +873,9 @@
    * order. New Organizations do not necessarily appear at the end of the
    * results.
    *
+   * Search will only return organizations on which the user has the permission
+   * `resourcemanager.organizations.get`
+   *
    * [request] - The metadata request object.
    *
    * Request parameters:
@@ -911,6 +917,9 @@
    * existing policy. The `resource` field should be the organization's resource
    * name, e.g. "organizations/123".
    *
+   * Authorization requires the Google IAM permission
+   * `resourcemanager.organizations.setIamPolicy` on the specified organization
+   *
    * [request] - The metadata request object.
    *
    * Request parameters:
@@ -1009,6 +1018,8 @@
    * The `resource` field should be the organization's resource name,
    * e.g. "organizations/123".
    *
+   * There are no permissions required for making this API call.
+   *
    * [request] - The metadata request object.
    *
    * Request parameters:
@@ -1117,6 +1128,10 @@
    * latency. 95th percentile latency is around 11 seconds. We recommend
    * polling at the 5th second with an exponential backoff.
    *
+   * Authorization requires the Google IAM permission
+   * `resourcemanager.projects.create` on the specified parent for the new
+   * project.
+   *
    * [request] - The metadata request object.
    *
    * Request parameters:
@@ -1362,6 +1377,9 @@
    * Returns the IAM access control policy for the specified Project.
    * Permission is denied if the policy or the resource does not exist.
    *
+   * Authorization requires the Google IAM permission
+   * `resourcemanager.projects.getIamPolicy` on the project
+   *
    * [request] - The metadata request object.
    *
    * Request parameters:
@@ -1462,12 +1480,6 @@
    *
    * Request parameters:
    *
-   * [pageToken] - A pagination token returned from a previous call to
-   * ListProjects
-   * that indicates from where listing should continue.
-   *
-   * Optional.
-   *
    * [pageSize] - The maximum number of Projects to return in the response.
    * The server can return fewer Projects than requested.
    * If unspecified, server picks an appropriate default.
@@ -1495,6 +1507,21 @@
    * |labels.color:red&nbsp;labels.size:big|The project's label `color` has the
    * value `red` and its label `size` has the value `big`.
    *
+   * If you specify a filter that has both `parent.type` and `parent.id`, then
+   * the `resourcemanager.projects.list` permission is checked on the parent.
+   * If the user has this permission, all projects under the parent will be
+   * returned after remaining filters have been applied. If the user lacks this
+   * permission, then all projects for which the user has the
+   * `resourcemanager.projects.get` permission will be returned after remaining
+   * filters have been applied. If no filter is specified, the call will return
+   * projects for which the user has `resourcemanager.projects.get` permissions.
+   *
+   * Optional.
+   *
+   * [pageToken] - A pagination token returned from a previous call to
+   * ListProjects
+   * that indicates from where listing should continue.
+   *
    * Optional.
    *
    * Completes with a [ListProjectsResponse].
@@ -1505,7 +1532,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListProjectsResponse> list({core.String pageToken, core.int pageSize, core.String filter}) {
+  async.Future<ListProjectsResponse> list({core.int pageSize, core.String filter, core.String pageToken}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -1513,15 +1540,15 @@
     var _downloadOptions = commons.DownloadOptions.Metadata;
     var _body = null;
 
-    if (pageToken != null) {
-      _queryParams["pageToken"] = [pageToken];
-    }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
     if (filter != null) {
       _queryParams["filter"] = [filter];
     }
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
 
     _url = 'v1/projects';
 
@@ -1666,6 +1693,9 @@
    * how the service account is being used before removing or updating its
    * roles.
    *
+   * Authorization requires the Google IAM permission
+   * `resourcemanager.projects.setIamPolicy` on the project
+   *
    * [request] - The metadata request object.
    *
    * Request parameters:
@@ -1761,6 +1791,8 @@
   /**
    * Returns permissions that a caller has on the specified Project.
    *
+   * There are no permissions required for making this API call.
+   *
    * [request] - The metadata request object.
    *
    * Request parameters:
diff --git a/generated/googleapis/lib/cloudresourcemanager/v2beta1.dart b/generated/googleapis/lib/cloudresourcemanager/v2beta1.dart
new file mode 100644
index 0000000..bad4faf
--- /dev/null
+++ b/generated/googleapis/lib/cloudresourcemanager/v2beta1.dart
@@ -0,0 +1,1663 @@
+// This is a generated file (see the discoveryapis_generator project).
+
+library googleapis.cloudresourcemanager.v2beta1;
+
+import 'dart:core' as core;
+import 'dart:async' as async;
+import 'dart:convert' as convert;
+
+import 'package:_discoveryapis_commons/_discoveryapis_commons.dart' as commons;
+import 'package:http/http.dart' as http;
+
+export 'package:_discoveryapis_commons/_discoveryapis_commons.dart' show
+    ApiRequestError, DetailedApiRequestError;
+
+const core.String USER_AGENT = 'dart-api-client cloudresourcemanager/v2beta1';
+
+/**
+ * The Google Cloud Resource Manager API provides methods for creating, reading,
+ * and updating project metadata.
+ */
+class CloudresourcemanagerApi {
+  /** View and manage your data across Google Cloud Platform services */
+  static const CloudPlatformScope = "https://www.googleapis.com/auth/cloud-platform";
+
+  /** View your data across Google Cloud Platform services */
+  static const CloudPlatformReadOnlyScope = "https://www.googleapis.com/auth/cloud-platform.read-only";
+
+
+  final commons.ApiRequester _requester;
+
+  FoldersResourceApi get folders => new FoldersResourceApi(_requester);
+
+  CloudresourcemanagerApi(http.Client client, {core.String rootUrl: "https://cloudresourcemanager.googleapis.com/", core.String servicePath: ""}) :
+      _requester = new commons.ApiRequester(client, rootUrl, servicePath, USER_AGENT);
+}
+
+
+class FoldersResourceApi {
+  final commons.ApiRequester _requester;
+
+  FoldersResourceApi(commons.ApiRequester client) : 
+      _requester = client;
+
+  /**
+   * Creates a Folder in the resource hierarchy.
+   * Returns an Operation which can be used to track the progress of the
+   * folder creation workflow.
+   * Upon success the Operation.response field will be populated with the
+   * created Folder.
+   *
+   * In order to succeed, the addition of this new Folder must not violate
+   * the Folder naming, height or fanout constraints.
+   * + The Folder's display_name must be distinct from all other Folder's that
+   * share its parent.
+   * + The addition of the Folder must not cause the active Folder hierarchy
+   * to exceed a height of 4. Note, the full active + deleted Folder hierarchy
+   * is allowed to reach a height of 8; this provides additional headroom when
+   * moving folders that contain deleted folders.
+   * + The addition of the Folder must not cause the total number of Folders
+   * under its parent to exceed 100.
+   *
+   * If the operation fails due to a folder constraint violation,
+   * a PreconditionFailure explaining the violation will be returned.
+   * If the failure occurs synchronously then the PreconditionFailure
+   * will be returned via the Status.details field and if it occurs
+   * asynchronously then the PreconditionFailure will be returned
+   * via the the Operation.error field.
+   *
+   * The caller must have `resourcemanager.folders.create` permission on the
+   * identified parent.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [parent] - The resource name of the new Folder's parent.
+   * Must be of the form `folders/{folder_id}` or `organizations/{org_id}`.
+   *
+   * Completes with a [Operation].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Operation> create(Folder request, {core.String parent}) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (parent != null) {
+      _queryParams["parent"] = [parent];
+    }
+
+    _url = 'v2beta1/folders';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Operation.fromJson(data));
+  }
+
+  /**
+   * Requests deletion of a Folder. The Folder is moved into the
+   * [DELETE_REQUESTED] state immediately, and is deleted approximately 30 days
+   * later. This method may only be called on an empty Folder in the [ACTIVE]
+   * state, where a Folder is empty if it doesn't contain any Folders or
+   * Projects in the [ACTIVE] state.
+   * The caller must have `resourcemanager.folders.delete` permission on the
+   * identified folder.
+   *
+   * Request parameters:
+   *
+   * [name] - the resource name of the Folder to be deleted.
+   * Must be of the form `folders/{folder_id}`.
+   * Value must have pattern "^folders/[^/]+$".
+   *
+   * Completes with a [Folder].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Folder> delete(core.String name) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (name == null) {
+      throw new core.ArgumentError("Parameter name is required.");
+    }
+
+    _url = 'v2beta1/' + commons.Escaper.ecapeVariableReserved('$name');
+
+    var _response = _requester.request(_url,
+                                       "DELETE",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Folder.fromJson(data));
+  }
+
+  /**
+   * Retrieves a Folder identified by the supplied resource name.
+   * Valid Folder resource names have the format `folders/{folder_id}`
+   * (for example, `folders/1234`).
+   * The caller must have `resourcemanager.folders.get` permission on the
+   * identified folder.
+   *
+   * Request parameters:
+   *
+   * [name] - The resource name of the Folder to retrieve.
+   * Must be of the form `folders/{folder_id}`.
+   * Value must have pattern "^folders/[^/]+$".
+   *
+   * Completes with a [Folder].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Folder> get(core.String name) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (name == null) {
+      throw new core.ArgumentError("Parameter name is required.");
+    }
+
+    _url = 'v2beta1/' + commons.Escaper.ecapeVariableReserved('$name');
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Folder.fromJson(data));
+  }
+
+  /**
+   * Gets the access control policy for a Folder. The returned policy may be
+   * empty if no such policy or resource exists. The `resource` field should
+   * be the Folder's resource name, e.g. "folders/1234".
+   * The caller must have `resourcemanager.folders.getIamPolicy` permission
+   * on the identified folder.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [resource] - REQUIRED: The resource for which the policy is being
+   * requested.
+   * See the operation documentation for the appropriate value for this field.
+   * Value must have pattern "^folders/[^/]+$".
+   *
+   * Completes with a [Policy].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Policy> getIamPolicy(GetIamPolicyRequest request, core.String resource) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (resource == null) {
+      throw new core.ArgumentError("Parameter resource is required.");
+    }
+
+    _url = 'v2beta1/' + commons.Escaper.ecapeVariableReserved('$resource') + ':getIamPolicy';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Policy.fromJson(data));
+  }
+
+  /**
+   * Lists the Folders that are direct descendants of supplied parent resource.
+   * List provides a strongly consistent view of the Folders underneath
+   * the specified parent resource.
+   * List returns Folders sorted based upon the (ascending) lexical ordering
+   * of their display_name.
+   * The caller must have `resourcemanager.folders.list` permission on the
+   * identified parent.
+   *
+   * Request parameters:
+   *
+   * [showDeleted] - Controls whether Folders in the [DELETE_REQUESTED} state
+   * should
+   * be returned.
+   *
+   * [pageToken] - A pagination token returned from a previous call to
+   * `ListFolders`
+   * that indicates where this listing should continue from.
+   * This field is optional.
+   *
+   * [pageSize] - The maximum number of Folders to return in the response.
+   * This field is optional.
+   *
+   * [parent] - The resource name of the Organization or Folder whose Folders
+   * are
+   * being listed.
+   * Must be of the form `folders/{folder_id}` or `organizations/{org_id}`.
+   * Access to this method is controlled by checking the
+   * `resourcemanager.folders.list` permission on the `parent`.
+   *
+   * Completes with a [ListFoldersResponse].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<ListFoldersResponse> list({core.bool showDeleted, core.String pageToken, core.int pageSize, core.String parent}) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (showDeleted != null) {
+      _queryParams["showDeleted"] = ["${showDeleted}"];
+    }
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
+    if (pageSize != null) {
+      _queryParams["pageSize"] = ["${pageSize}"];
+    }
+    if (parent != null) {
+      _queryParams["parent"] = [parent];
+    }
+
+    _url = 'v2beta1/folders';
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new ListFoldersResponse.fromJson(data));
+  }
+
+  /**
+   * Moves a Folder under a new resource parent.
+   * Returns an Operation which can be used to track the progress of the
+   * folder move workflow.
+   * Upon success the Operation.response field will be populated with the
+   * moved Folder.
+   * Upon failure, a FolderOperationError categorizing the failure cause will
+   * be returned - if the failure occurs synchronously then the
+   * FolderOperationError will be returned via the Status.details field
+   * and if it occurs asynchronously then the FolderOperation will be returned
+   * via the the Operation.error field.
+   * In addition, the Operation.metadata field will be populated with a
+   * FolderOperation message as an aid to stateless clients.
+   * Folder moves will be rejected if they violate either the naming, height
+   * or fanout constraints described in the [CreateFolder] documentation.
+   * The caller must have `resourcemanager.folders.move` permission on the
+   * folder's current and proposed new parent.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [name] - The resource name of the Folder to move.
+   * Must be of the form folders/{folder_id}
+   * Value must have pattern "^folders/[^/]+$".
+   *
+   * Completes with a [Operation].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Operation> move(MoveFolderRequest request, core.String name) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (name == null) {
+      throw new core.ArgumentError("Parameter name is required.");
+    }
+
+    _url = 'v2beta1/' + commons.Escaper.ecapeVariableReserved('$name') + ':move';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Operation.fromJson(data));
+  }
+
+  /**
+   * Updates a Folder, changing its display_name.
+   * Changes to the folder display_name will be rejected if they violate either
+   * the display_name formatting rules or naming constraints described in
+   * the [CreateFolder] documentation.
+   * + The Folder's display name must start and end with a letter or digit,
+   * may contain letters, digits, spaces, hyphens and underscores and can be
+   * no longer than 30 characters. This is captured by the regular expression:
+   * [\p{L}\p{N}]({\p{L}\p{N}_- ]{0,28}[\p{L}\p{N}])?.
+   * The caller must have `resourcemanager.folders.update` permission on the
+   * identified folder.
+   *
+   * If the update fails due to the unique name constraint then a
+   * PreconditionFailure explaining this violation will be returned
+   * in the Status.details field.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [name] - Output only. The resource name of the Folder.
+   * Its format is `folders/{folder_id}`, for example: "folders/1234".
+   * Value must have pattern "^folders/[^/]+$".
+   *
+   * [updateMask] - Fields to be updated.
+   * Only the `display_name` can be updated.
+   *
+   * Completes with a [Folder].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Folder> patch(Folder request, core.String name, {core.String updateMask}) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (name == null) {
+      throw new core.ArgumentError("Parameter name is required.");
+    }
+    if (updateMask != null) {
+      _queryParams["updateMask"] = [updateMask];
+    }
+
+    _url = 'v2beta1/' + commons.Escaper.ecapeVariableReserved('$name');
+
+    var _response = _requester.request(_url,
+                                       "PATCH",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Folder.fromJson(data));
+  }
+
+  /**
+   * Search for folders that match specific filter criteria.
+   * Search provides an eventually consistent view of the folders a user has
+   * access to which meet the specified filter criteria.
+   *
+   * This will only return folders on which the caller has the
+   * permission `resourcemanager.folders.get`.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * Completes with a [SearchFoldersResponse].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<SearchFoldersResponse> search(SearchFoldersRequest request) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+
+    _url = 'v2beta1/folders:search';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new SearchFoldersResponse.fromJson(data));
+  }
+
+  /**
+   * Sets the access control policy on a Folder, replacing any existing policy.
+   * The `resource` field should be the Folder's resource name, e.g.
+   * "folders/1234".
+   * The caller must have `resourcemanager.folders.setIamPolicy` permission
+   * on the identified folder.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [resource] - REQUIRED: The resource for which the policy is being
+   * specified.
+   * See the operation documentation for the appropriate value for this field.
+   * Value must have pattern "^folders/[^/]+$".
+   *
+   * Completes with a [Policy].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Policy> setIamPolicy(SetIamPolicyRequest request, core.String resource) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (resource == null) {
+      throw new core.ArgumentError("Parameter resource is required.");
+    }
+
+    _url = 'v2beta1/' + commons.Escaper.ecapeVariableReserved('$resource') + ':setIamPolicy';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Policy.fromJson(data));
+  }
+
+  /**
+   * Returns permissions that a caller has on the specified Folder.
+   * The `resource` field should be the Folder's resource name,
+   * e.g. "folders/1234".
+   *
+   * There are no permissions required for making this API call.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [resource] - REQUIRED: The resource for which the policy detail is being
+   * requested.
+   * See the operation documentation for the appropriate value for this field.
+   * Value must have pattern "^folders/[^/]+$".
+   *
+   * Completes with a [TestIamPermissionsResponse].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<TestIamPermissionsResponse> testIamPermissions(TestIamPermissionsRequest request, core.String resource) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (resource == null) {
+      throw new core.ArgumentError("Parameter resource is required.");
+    }
+
+    _url = 'v2beta1/' + commons.Escaper.ecapeVariableReserved('$resource') + ':testIamPermissions';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new TestIamPermissionsResponse.fromJson(data));
+  }
+
+  /**
+   * Cancels the deletion request for a Folder. This method may only be
+   * called on a Folder in the [DELETE_REQUESTED] state.
+   * In order to succeed, the Folder's parent must be in the [ACTIVE] state.
+   * In addition, reintroducing the folder into the tree must not violate
+   * folder naming, height and fanout constraints described in the
+   * [CreateFolder] documentation.
+   * The caller must have `resourcemanager.folders.undelete` permission on the
+   * identified folder.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [name] - The resource name of the Folder to undelete.
+   * Must be of the form `folders/{folder_id}`.
+   * Value must have pattern "^folders/[^/]+$".
+   *
+   * Completes with a [Folder].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Folder> undelete(UndeleteFolderRequest request, core.String name) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (name == null) {
+      throw new core.ArgumentError("Parameter name is required.");
+    }
+
+    _url = 'v2beta1/' + commons.Escaper.ecapeVariableReserved('$name') + ':undelete';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Folder.fromJson(data));
+  }
+
+}
+
+
+
+/**
+ * Specifies the audit configuration for a service.
+ * The configuration determines which permission types are logged, and what
+ * identities, if any, are exempted from logging.
+ * An AuditConfig must have one or more AuditLogConfigs.
+ *
+ * If there are AuditConfigs for both `allServices` and a specific service,
+ * the union of the two AuditConfigs is used for that service: the log_types
+ * specified in each AuditConfig are enabled, and the exempted_members in each
+ * AuditConfig are exempted.
+ *
+ * Example Policy with multiple AuditConfigs:
+ *
+ *     {
+ *       "audit_configs": [
+ *         {
+ *           "service": "allServices"
+ *           "audit_log_configs": [
+ *             {
+ *               "log_type": "DATA_READ",
+ *               "exempted_members": [
+ *                 "user:foo@gmail.com"
+ *               ]
+ *             },
+ *             {
+ *               "log_type": "DATA_WRITE",
+ *             },
+ *             {
+ *               "log_type": "ADMIN_READ",
+ *             }
+ *           ]
+ *         },
+ *         {
+ *           "service": "fooservice.googleapis.com"
+ *           "audit_log_configs": [
+ *             {
+ *               "log_type": "DATA_READ",
+ *             },
+ *             {
+ *               "log_type": "DATA_WRITE",
+ *               "exempted_members": [
+ *                 "user:bar@gmail.com"
+ *               ]
+ *             }
+ *           ]
+ *         }
+ *       ]
+ *     }
+ *
+ * For fooservice, this policy enables DATA_READ, DATA_WRITE and ADMIN_READ
+ * logging. It also exempts foo@gmail.com from DATA_READ logging, and
+ * bar@gmail.com from DATA_WRITE logging.
+ */
+class AuditConfig {
+  /**
+   * The configuration for logging of each type of permission.
+   * Next ID: 4
+   */
+  core.List<AuditLogConfig> auditLogConfigs;
+  /**
+   * Specifies a service that will be enabled for audit logging.
+   * For example, `storage.googleapis.com`, `cloudsql.googleapis.com`.
+   * `allServices` is a special value that covers all services.
+   */
+  core.String service;
+
+  AuditConfig();
+
+  AuditConfig.fromJson(core.Map _json) {
+    if (_json.containsKey("auditLogConfigs")) {
+      auditLogConfigs = _json["auditLogConfigs"].map((value) => new AuditLogConfig.fromJson(value)).toList();
+    }
+    if (_json.containsKey("service")) {
+      service = _json["service"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (auditLogConfigs != null) {
+      _json["auditLogConfigs"] = auditLogConfigs.map((value) => (value).toJson()).toList();
+    }
+    if (service != null) {
+      _json["service"] = service;
+    }
+    return _json;
+  }
+}
+
+/**
+ * Provides the configuration for logging a type of permissions.
+ * Example:
+ *
+ *     {
+ *       "audit_log_configs": [
+ *         {
+ *           "log_type": "DATA_READ",
+ *           "exempted_members": [
+ *             "user:foo@gmail.com"
+ *           ]
+ *         },
+ *         {
+ *           "log_type": "DATA_WRITE",
+ *         }
+ *       ]
+ *     }
+ *
+ * This enables 'DATA_READ' and 'DATA_WRITE' logging, while exempting
+ * foo@gmail.com from DATA_READ logging.
+ */
+class AuditLogConfig {
+  /**
+   * Specifies the identities that do not cause logging for this type of
+   * permission.
+   * Follows the same format of Binding.members.
+   */
+  core.List<core.String> exemptedMembers;
+  /**
+   * The log type that this config enables.
+   * Possible string values are:
+   * - "LOG_TYPE_UNSPECIFIED" : Default case. Should never be this.
+   * - "ADMIN_READ" : Admin reads. Example: CloudIAM getIamPolicy
+   * - "DATA_WRITE" : Data writes. Example: CloudSQL Users create
+   * - "DATA_READ" : Data reads. Example: CloudSQL Users list
+   */
+  core.String logType;
+
+  AuditLogConfig();
+
+  AuditLogConfig.fromJson(core.Map _json) {
+    if (_json.containsKey("exemptedMembers")) {
+      exemptedMembers = _json["exemptedMembers"];
+    }
+    if (_json.containsKey("logType")) {
+      logType = _json["logType"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (exemptedMembers != null) {
+      _json["exemptedMembers"] = exemptedMembers;
+    }
+    if (logType != null) {
+      _json["logType"] = logType;
+    }
+    return _json;
+  }
+}
+
+/** Associates `members` with a `role`. */
+class Binding {
+  /**
+   * 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` or `joe@example.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`.
+   */
+  core.List<core.String> members;
+  /**
+   * Role that is assigned to `members`.
+   * For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
+   * Required
+   */
+  core.String role;
+
+  Binding();
+
+  Binding.fromJson(core.Map _json) {
+    if (_json.containsKey("members")) {
+      members = _json["members"];
+    }
+    if (_json.containsKey("role")) {
+      role = _json["role"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (members != null) {
+      _json["members"] = members;
+    }
+    if (role != null) {
+      _json["role"] = role;
+    }
+    return _json;
+  }
+}
+
+/**
+ * A Folder in an Organization's resource hierarchy, used to
+ * organize that Organization's resources.
+ */
+class Folder {
+  /**
+   * Output only. Timestamp when the Folder was created. Assigned by the server.
+   */
+  core.String createTime;
+  /**
+   * The folder’s display name.
+   * A folder’s display name must be unique amongst its siblings, e.g.
+   * no two folders with the same parent can share the same display name.
+   * The display name must start and end with a letter or digit, may contain
+   * letters, digits, spaces, hyphens and underscores and can be no longer
+   * than 30 characters. This is captured by the regular expression:
+   * [\p{L}\p{N}]({\p{L}\p{N}_- ]{0,28}[\p{L}\p{N}])?.
+   */
+  core.String displayName;
+  /**
+   * Output only.  The lifecycle state of the folder.
+   * Updates to the lifecycle_state must be performed via
+   * [DeleteFolder] and [UndeleteFolder].
+   * Possible string values are:
+   * - "LIFECYCLE_STATE_UNSPECIFIED" : Unspecified state.
+   * - "ACTIVE" : The normal and active state.
+   * - "DELETE_REQUESTED" : The folder has been marked for deletion by the user.
+   */
+  core.String lifecycleState;
+  /**
+   * Output only. The resource name of the Folder.
+   * Its format is `folders/{folder_id}`, for example: "folders/1234".
+   */
+  core.String name;
+  /**
+   * The Folder’s parent's resource name.
+   * Updates to the folder's parent must be performed via [MoveFolders].
+   */
+  core.String parent;
+
+  Folder();
+
+  Folder.fromJson(core.Map _json) {
+    if (_json.containsKey("createTime")) {
+      createTime = _json["createTime"];
+    }
+    if (_json.containsKey("displayName")) {
+      displayName = _json["displayName"];
+    }
+    if (_json.containsKey("lifecycleState")) {
+      lifecycleState = _json["lifecycleState"];
+    }
+    if (_json.containsKey("name")) {
+      name = _json["name"];
+    }
+    if (_json.containsKey("parent")) {
+      parent = _json["parent"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (createTime != null) {
+      _json["createTime"] = createTime;
+    }
+    if (displayName != null) {
+      _json["displayName"] = displayName;
+    }
+    if (lifecycleState != null) {
+      _json["lifecycleState"] = lifecycleState;
+    }
+    if (name != null) {
+      _json["name"] = name;
+    }
+    if (parent != null) {
+      _json["parent"] = parent;
+    }
+    return _json;
+  }
+}
+
+/** Metadata describing a long running folder operation */
+class FolderOperation {
+  /**
+   * The resource name of the folder or organization we are either creating
+   * the folder under or moving the folder to.
+   */
+  core.String destinationParent;
+  /** The display name of the folder. */
+  core.String displayName;
+  /**
+   * The type of this operation.
+   * Possible string values are:
+   * - "OPERATION_TYPE_UNSPECIFIED" : Operation type not specified.
+   * - "CREATE" : A create folder operation.
+   * - "MOVE" : A move folder operation.
+   */
+  core.String operationType;
+  /**
+   * The resource name of the folder's parent.
+   * Only applicable when the operation_type is MOVE.
+   */
+  core.String sourceParent;
+
+  FolderOperation();
+
+  FolderOperation.fromJson(core.Map _json) {
+    if (_json.containsKey("destinationParent")) {
+      destinationParent = _json["destinationParent"];
+    }
+    if (_json.containsKey("displayName")) {
+      displayName = _json["displayName"];
+    }
+    if (_json.containsKey("operationType")) {
+      operationType = _json["operationType"];
+    }
+    if (_json.containsKey("sourceParent")) {
+      sourceParent = _json["sourceParent"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (destinationParent != null) {
+      _json["destinationParent"] = destinationParent;
+    }
+    if (displayName != null) {
+      _json["displayName"] = displayName;
+    }
+    if (operationType != null) {
+      _json["operationType"] = operationType;
+    }
+    if (sourceParent != null) {
+      _json["sourceParent"] = sourceParent;
+    }
+    return _json;
+  }
+}
+
+/** A classification of the Folder Operation error. */
+class FolderOperationError {
+  /**
+   * The type of operation error experienced.
+   * Possible string values are:
+   * - "ERROR_TYPE_UNSPECIFIED" : The error type was unrecognized or
+   * unspecified.
+   * - "ACTIVE_FOLDER_HEIGHT_VIOLATION" : The attempted action would violate the
+   * max folder depth constraint.
+   * - "MAX_CHILD_FOLDERS_VIOLATION" : The attempted action would violate the
+   * max child folders constraint.
+   * - "FOLDER_NAME_UNIQUENESS_VIOLATION" : The attempted action would violate
+   * the locally-unique folder
+   * display_name constraint.
+   * - "RESOURCE_DELETED_VIOLATION" : The resource being moved has been deleted.
+   * - "PARENT_DELETED_VIOLATION" : The resource a folder was being added to has
+   * been deleted.
+   * - "CYCLE_INTRODUCED_VIOLATION" : The attempted action would introduce cycle
+   * in resource path.
+   * - "FOLDER_BEING_MOVED_VIOLATION" : The attempted action would move a folder
+   * that is already being moved.
+   * - "FOLDER_TO_DELETE_NON_EMPTY_VIOLATION" : The folder the caller is trying
+   * to delete contains active resources.
+   * - "DELETED_FOLDER_HEIGHT_VIOLATION" : The attempted action would violate
+   * the max deleted folder depth
+   * constraint.
+   */
+  core.String errorMessageId;
+
+  FolderOperationError();
+
+  FolderOperationError.fromJson(core.Map _json) {
+    if (_json.containsKey("errorMessageId")) {
+      errorMessageId = _json["errorMessageId"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (errorMessageId != null) {
+      _json["errorMessageId"] = errorMessageId;
+    }
+    return _json;
+  }
+}
+
+/** Request message for `GetIamPolicy` method. */
+class GetIamPolicyRequest {
+
+  GetIamPolicyRequest();
+
+  GetIamPolicyRequest.fromJson(core.Map _json) {
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    return _json;
+  }
+}
+
+/** The ListFolders response message. */
+class ListFoldersResponse {
+  /**
+   * A possibly paginated list of Folders that are direct descendants of
+   * the specified parent resource.
+   */
+  core.List<Folder> folders;
+  /**
+   * A pagination token returned from a previous call to `ListFolders`
+   * that indicates from where listing should continue.
+   * This field is optional.
+   */
+  core.String nextPageToken;
+
+  ListFoldersResponse();
+
+  ListFoldersResponse.fromJson(core.Map _json) {
+    if (_json.containsKey("folders")) {
+      folders = _json["folders"].map((value) => new Folder.fromJson(value)).toList();
+    }
+    if (_json.containsKey("nextPageToken")) {
+      nextPageToken = _json["nextPageToken"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (folders != null) {
+      _json["folders"] = folders.map((value) => (value).toJson()).toList();
+    }
+    if (nextPageToken != null) {
+      _json["nextPageToken"] = nextPageToken;
+    }
+    return _json;
+  }
+}
+
+/** The MoveFolder request message. */
+class MoveFolderRequest {
+  /**
+   * The resource name of the Folder or Organization to reparent
+   * the folder under.
+   * Must be of the form `folders/{folder_id}` or `organizations/{org_id}`.
+   */
+  core.String destinationParent;
+
+  MoveFolderRequest();
+
+  MoveFolderRequest.fromJson(core.Map _json) {
+    if (_json.containsKey("destinationParent")) {
+      destinationParent = _json["destinationParent"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (destinationParent != null) {
+      _json["destinationParent"] = destinationParent;
+    }
+    return _json;
+  }
+}
+
+/**
+ * This resource represents a long-running operation that is the result of a
+ * network API call.
+ */
+class Operation {
+  /**
+   * If the value is `false`, it means the operation is still in progress.
+   * If true, the operation is completed, and either `error` or `response` is
+   * available.
+   */
+  core.bool done;
+  /** The error result of the operation in case of failure or cancellation. */
+  Status error;
+  /**
+   * Service-specific metadata associated with the operation.  It typically
+   * contains progress information and common metadata such as create time.
+   * Some services might not provide such metadata.  Any method that returns a
+   * long-running operation should document the metadata type, if any.
+   *
+   * The values for Object must be JSON objects. It can consist of `num`,
+   * `String`, `bool` and `null` as well as `Map` and `List` values.
+   */
+  core.Map<core.String, core.Object> metadata;
+  /**
+   * The server-assigned name, which is only unique within the same service that
+   * originally returns it. If you use the default HTTP mapping, the
+   * `name` should have the format of `operations/some/unique/name`.
+   */
+  core.String name;
+  /**
+   * The normal response of the operation in case of success.  If the original
+   * method returns no data on success, such as `Delete`, the response is
+   * `google.protobuf.Empty`.  If the original method is standard
+   * `Get`/`Create`/`Update`, the response should be the resource.  For other
+   * methods, the response should have the type `XxxResponse`, where `Xxx`
+   * is the original method name.  For example, if the original method name
+   * is `TakeSnapshot()`, the inferred response type is
+   * `TakeSnapshotResponse`.
+   *
+   * The values for Object must be JSON objects. It can consist of `num`,
+   * `String`, `bool` and `null` as well as `Map` and `List` values.
+   */
+  core.Map<core.String, core.Object> response;
+
+  Operation();
+
+  Operation.fromJson(core.Map _json) {
+    if (_json.containsKey("done")) {
+      done = _json["done"];
+    }
+    if (_json.containsKey("error")) {
+      error = new Status.fromJson(_json["error"]);
+    }
+    if (_json.containsKey("metadata")) {
+      metadata = _json["metadata"];
+    }
+    if (_json.containsKey("name")) {
+      name = _json["name"];
+    }
+    if (_json.containsKey("response")) {
+      response = _json["response"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (done != null) {
+      _json["done"] = done;
+    }
+    if (error != null) {
+      _json["error"] = (error).toJson();
+    }
+    if (metadata != null) {
+      _json["metadata"] = metadata;
+    }
+    if (name != null) {
+      _json["name"] = name;
+    }
+    if (response != null) {
+      _json["response"] = response;
+    }
+    return _json;
+  }
+}
+
+/**
+ * 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.
+ *
+ * **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"]
+ *         }
+ *       ]
+ *     }
+ *
+ * For a description of IAM and its features, see the
+ * [IAM developer's guide](https://cloud.google.com/iam).
+ */
+class Policy {
+  /** Specifies cloud audit logging configuration for this policy. */
+  core.List<AuditConfig> auditConfigs;
+  /**
+   * Associates a list of `members` to a `role`.
+   * `bindings` with no members will result in an error.
+   */
+  core.List<Binding> bindings;
+  /**
+   * `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.
+   */
+  core.String etag;
+  core.List<core.int> get etagAsBytes {
+    return convert.BASE64.decode(etag);
+  }
+
+  void set etagAsBytes(core.List<core.int> _bytes) {
+    etag = convert.BASE64.encode(_bytes).replaceAll("/", "_").replaceAll("+", "-");
+  }
+  /** Version of the `Policy`. The default version is 0. */
+  core.int version;
+
+  Policy();
+
+  Policy.fromJson(core.Map _json) {
+    if (_json.containsKey("auditConfigs")) {
+      auditConfigs = _json["auditConfigs"].map((value) => new AuditConfig.fromJson(value)).toList();
+    }
+    if (_json.containsKey("bindings")) {
+      bindings = _json["bindings"].map((value) => new Binding.fromJson(value)).toList();
+    }
+    if (_json.containsKey("etag")) {
+      etag = _json["etag"];
+    }
+    if (_json.containsKey("version")) {
+      version = _json["version"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (auditConfigs != null) {
+      _json["auditConfigs"] = auditConfigs.map((value) => (value).toJson()).toList();
+    }
+    if (bindings != null) {
+      _json["bindings"] = bindings.map((value) => (value).toJson()).toList();
+    }
+    if (etag != null) {
+      _json["etag"] = etag;
+    }
+    if (version != null) {
+      _json["version"] = version;
+    }
+    return _json;
+  }
+}
+
+/**
+ * A status object which is used as the `metadata` field for the Operation
+ * returned by CreateProject. It provides insight for when significant phases of
+ * Project creation have completed.
+ */
+class ProjectCreationStatus {
+  /** Creation time of the project creation workflow. */
+  core.String createTime;
+  /**
+   * True if the project can be retrieved using GetProject. No other operations
+   * on the project are guaranteed to work until the project creation is
+   * complete.
+   */
+  core.bool gettable;
+  /** True if the project creation process is complete. */
+  core.bool ready;
+
+  ProjectCreationStatus();
+
+  ProjectCreationStatus.fromJson(core.Map _json) {
+    if (_json.containsKey("createTime")) {
+      createTime = _json["createTime"];
+    }
+    if (_json.containsKey("gettable")) {
+      gettable = _json["gettable"];
+    }
+    if (_json.containsKey("ready")) {
+      ready = _json["ready"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (createTime != null) {
+      _json["createTime"] = createTime;
+    }
+    if (gettable != null) {
+      _json["gettable"] = gettable;
+    }
+    if (ready != null) {
+      _json["ready"] = ready;
+    }
+    return _json;
+  }
+}
+
+/** The request message for searching folders. */
+class SearchFoldersRequest {
+  /**
+   * The maximum number of folders to return in the response.
+   * This field is optional.
+   */
+  core.int pageSize;
+  /**
+   * A pagination token returned from a previous call to `SearchFolders`
+   * that indicates from where search should continue.
+   * This field is optional.
+   */
+  core.String pageToken;
+  /**
+   * Search criteria used to select the Folders to return.
+   * If no search criteria is specified then all accessible folders will be
+   * returned.
+   *
+   * Query expressions can be used to restrict results based upon displayName,
+   * lifecycleState and parent, where the operators `=`, `NOT`, `AND` and `OR`
+   * can be used along with the suffix wildcard symbol `*`.
+   *
+   * Some example queries are:
+   * |Query|Description|
+   * |------|-----------|
+   * |displayName=Test*|Folders whose display name starts with "Test".|
+   * |lifecycleState=ACTIVE|Folders whose lifecycleState is ACTIVE.|
+   * |parent=folders/123|Folders whose parent is "folders/123".|
+   * |parent=folders/123 AND lifecycleState=ACTIVE|Active folders whose
+   * parent is "folders/123".|
+   */
+  core.String query;
+
+  SearchFoldersRequest();
+
+  SearchFoldersRequest.fromJson(core.Map _json) {
+    if (_json.containsKey("pageSize")) {
+      pageSize = _json["pageSize"];
+    }
+    if (_json.containsKey("pageToken")) {
+      pageToken = _json["pageToken"];
+    }
+    if (_json.containsKey("query")) {
+      query = _json["query"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (pageSize != null) {
+      _json["pageSize"] = pageSize;
+    }
+    if (pageToken != null) {
+      _json["pageToken"] = pageToken;
+    }
+    if (query != null) {
+      _json["query"] = query;
+    }
+    return _json;
+  }
+}
+
+/** The response message for searching folders. */
+class SearchFoldersResponse {
+  /**
+   * A possibly paginated folder search results.
+   * the specified parent resource.
+   */
+  core.List<Folder> folders;
+  /**
+   * A pagination token returned from a previous call to `SearchFolders`
+   * that indicates from where searching should continue.
+   * This field is optional.
+   */
+  core.String nextPageToken;
+
+  SearchFoldersResponse();
+
+  SearchFoldersResponse.fromJson(core.Map _json) {
+    if (_json.containsKey("folders")) {
+      folders = _json["folders"].map((value) => new Folder.fromJson(value)).toList();
+    }
+    if (_json.containsKey("nextPageToken")) {
+      nextPageToken = _json["nextPageToken"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (folders != null) {
+      _json["folders"] = folders.map((value) => (value).toJson()).toList();
+    }
+    if (nextPageToken != null) {
+      _json["nextPageToken"] = nextPageToken;
+    }
+    return _json;
+  }
+}
+
+/** Request message for `SetIamPolicy` method. */
+class SetIamPolicyRequest {
+  /**
+   * 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 policy;
+  /**
+   * OPTIONAL: A FieldMask specifying which fields of the policy to modify. Only
+   * the fields in the mask will be modified. If no mask is provided, the
+   * following default mask is used:
+   * paths: "bindings, etag"
+   * This field is only used by Cloud IAM.
+   */
+  core.String updateMask;
+
+  SetIamPolicyRequest();
+
+  SetIamPolicyRequest.fromJson(core.Map _json) {
+    if (_json.containsKey("policy")) {
+      policy = new Policy.fromJson(_json["policy"]);
+    }
+    if (_json.containsKey("updateMask")) {
+      updateMask = _json["updateMask"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (policy != null) {
+      _json["policy"] = (policy).toJson();
+    }
+    if (updateMask != null) {
+      _json["updateMask"] = updateMask;
+    }
+    return _json;
+  }
+}
+
+/**
+ * The `Status` type defines a logical error model that is suitable for
+ * different
+ * programming environments, including REST APIs and RPC APIs. It is used by
+ * [gRPC](https://github.com/grpc). The error model is designed to be:
+ *
+ * - Simple to use and understand for most users
+ * - Flexible enough to meet unexpected needs
+ *
+ * # Overview
+ *
+ * The `Status` message contains three pieces of data: error code, error
+ * message,
+ * and error details. The error code should be an enum value of
+ * google.rpc.Code, but it may accept additional error codes if needed.  The
+ * error message should be a developer-facing English message that helps
+ * developers *understand* and *resolve* the error. If a localized user-facing
+ * error message is needed, put the localized message in the error details or
+ * localize it in the client. The optional error details may contain arbitrary
+ * information about the error. There is a predefined set of error detail types
+ * in the package `google.rpc` that can be used for common error conditions.
+ *
+ * # Language mapping
+ *
+ * The `Status` message is the logical representation of the error model, but it
+ * is not necessarily the actual wire format. When the `Status` message is
+ * exposed in different client libraries and different wire protocols, it can be
+ * mapped differently. For example, it will likely be mapped to some exceptions
+ * in Java, but more likely mapped to some error codes in C.
+ *
+ * # Other uses
+ *
+ * The error model and the `Status` message can be used in a variety of
+ * environments, either with or without APIs, to provide a
+ * consistent developer experience across different environments.
+ *
+ * Example uses of this error model include:
+ *
+ * - Partial errors. If a service needs to return partial errors to the client,
+ *     it may embed the `Status` in the normal response to indicate the partial
+ *     errors.
+ *
+ * - Workflow errors. A typical workflow has multiple steps. Each step may
+ *     have a `Status` message for error reporting.
+ *
+ * - Batch operations. If a client uses batch request and batch response, the
+ *     `Status` message should be used directly inside batch response, one for
+ *     each error sub-response.
+ *
+ * - Asynchronous operations. If an API call embeds asynchronous operation
+ *     results in its response, the status of those operations should be
+ *     represented directly using the `Status` message.
+ *
+ * - Logging. If some API errors are stored in logs, the message `Status` could
+ * be used directly after any stripping needed for security/privacy reasons.
+ */
+class Status {
+  /** The status code, which should be an enum value of google.rpc.Code. */
+  core.int code;
+  /**
+   * A list of messages that carry the error details.  There will be a
+   * common set of message types for APIs to use.
+   *
+   * The values for Object must be JSON objects. It can consist of `num`,
+   * `String`, `bool` and `null` as well as `Map` and `List` values.
+   */
+  core.List<core.Map<core.String, core.Object>> details;
+  /**
+   * A developer-facing error message, which should be in English. Any
+   * user-facing error message should be localized and sent in the
+   * google.rpc.Status.details field, or localized by the client.
+   */
+  core.String message;
+
+  Status();
+
+  Status.fromJson(core.Map _json) {
+    if (_json.containsKey("code")) {
+      code = _json["code"];
+    }
+    if (_json.containsKey("details")) {
+      details = _json["details"];
+    }
+    if (_json.containsKey("message")) {
+      message = _json["message"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (code != null) {
+      _json["code"] = code;
+    }
+    if (details != null) {
+      _json["details"] = details;
+    }
+    if (message != null) {
+      _json["message"] = message;
+    }
+    return _json;
+  }
+}
+
+/** Request message for `TestIamPermissions` method. */
+class TestIamPermissionsRequest {
+  /**
+   * 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).
+   */
+  core.List<core.String> permissions;
+
+  TestIamPermissionsRequest();
+
+  TestIamPermissionsRequest.fromJson(core.Map _json) {
+    if (_json.containsKey("permissions")) {
+      permissions = _json["permissions"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (permissions != null) {
+      _json["permissions"] = permissions;
+    }
+    return _json;
+  }
+}
+
+/** Response message for `TestIamPermissions` method. */
+class TestIamPermissionsResponse {
+  /**
+   * A subset of `TestPermissionsRequest.permissions` that the caller is
+   * allowed.
+   */
+  core.List<core.String> permissions;
+
+  TestIamPermissionsResponse();
+
+  TestIamPermissionsResponse.fromJson(core.Map _json) {
+    if (_json.containsKey("permissions")) {
+      permissions = _json["permissions"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (permissions != null) {
+      _json["permissions"] = permissions;
+    }
+    return _json;
+  }
+}
+
+/** The UndeleteFolder request message. */
+class UndeleteFolderRequest {
+
+  UndeleteFolderRequest();
+
+  UndeleteFolderRequest.fromJson(core.Map _json) {
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    return _json;
+  }
+}
diff --git a/generated/googleapis/lib/cloudtrace/v2.dart b/generated/googleapis/lib/cloudtrace/v2.dart
new file mode 100644
index 0000000..901b4a0
--- /dev/null
+++ b/generated/googleapis/lib/cloudtrace/v2.dart
@@ -0,0 +1,1321 @@
+// This is a generated file (see the discoveryapis_generator project).
+
+library googleapis.cloudtrace.v2;
+
+import 'dart:core' as core;
+import 'dart:async' as async;
+import 'dart:convert' as convert;
+
+import 'package:_discoveryapis_commons/_discoveryapis_commons.dart' as commons;
+import 'package:http/http.dart' as http;
+
+export 'package:_discoveryapis_commons/_discoveryapis_commons.dart' show
+    ApiRequestError, DetailedApiRequestError;
+
+const core.String USER_AGENT = 'dart-api-client cloudtrace/v2';
+
+/**
+ * Send and retrieve trace data from Stackdriver Trace. Data is generated and
+ * available by default for all App Engine applications. Data from other
+ * applications can be written to Stackdriver Trace for display, reporting, and
+ * analysis.
+ */
+class CloudtraceApi {
+  /** View and manage your data across Google Cloud Platform services */
+  static const CloudPlatformScope = "https://www.googleapis.com/auth/cloud-platform";
+
+  /** Write Trace data for a project or application */
+  static const TraceAppendScope = "https://www.googleapis.com/auth/trace.append";
+
+  /** Read Trace data for a project or application */
+  static const TraceReadonlyScope = "https://www.googleapis.com/auth/trace.readonly";
+
+
+  final commons.ApiRequester _requester;
+
+  ProjectsResourceApi get projects => new ProjectsResourceApi(_requester);
+
+  CloudtraceApi(http.Client client, {core.String rootUrl: "https://cloudtrace.googleapis.com/", core.String servicePath: ""}) :
+      _requester = new commons.ApiRequester(client, rootUrl, servicePath, USER_AGENT);
+}
+
+
+class ProjectsResourceApi {
+  final commons.ApiRequester _requester;
+
+  ProjectsTracesResourceApi get traces => new ProjectsTracesResourceApi(_requester);
+
+  ProjectsResourceApi(commons.ApiRequester client) : 
+      _requester = client;
+}
+
+
+class ProjectsTracesResourceApi {
+  final commons.ApiRequester _requester;
+
+  ProjectsTracesSpansResourceApi get spans => new ProjectsTracesSpansResourceApi(_requester);
+
+  ProjectsTracesResourceApi(commons.ApiRequester client) : 
+      _requester = client;
+
+  /**
+   * Sends new spans to Stackdriver Trace or updates existing traces. If the
+   * name of a trace that you send matches that of an existing trace, new spans
+   * are added to the existing trace. Attempt to update existing spans results
+   * undefined behavior. If the name does not match, a new trace is created
+   * with given set of spans.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [name] - Required. Name of the project where the spans belong. The format
+   * is
+   * `projects/PROJECT_ID`.
+   * Value must have pattern "^projects/[^/]+$".
+   *
+   * Completes with a [Empty].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Empty> batchWrite(BatchWriteSpansRequest request, core.String name) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (name == null) {
+      throw new core.ArgumentError("Parameter name is required.");
+    }
+
+    _url = 'v2/' + commons.Escaper.ecapeVariableReserved('$name') + '/traces:batchWrite';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Empty.fromJson(data));
+  }
+
+  /**
+   * Returns of a list of traces that match the specified filter conditions.
+   *
+   * Request parameters:
+   *
+   * [parent] - Required. The project where the trace data is stored. The format
+   * is `projects/PROJECT_ID`.
+   * Value must have pattern "^projects/[^/]+$".
+   *
+   * [pageSize] - Optional. The maximum number of results to return from this
+   * request.
+   * Non-positive values are ignored. The presence of `next_page_token` in the
+   * response indicates that more results might be available, even if fewer than
+   * the maximum number of results is returned by this request.
+   *
+   * [orderBy] - Optional. A single field used to sort the returned traces.
+   * Only the following field names can be used:
+   *
+   * *   `trace_id`: the trace's ID field
+   * *   `name`:  the root span's resource name
+   * *   `duration`: the difference between the root span's start time and end
+   * time
+   * *   `start`:  the start time of the root span
+   *
+   * Sorting is in ascending order unless `desc` is appended to the sort field
+   * name.
+   * Example: `"name desc"`).
+   *
+   * [filter] - Opional. Return only traces that match this
+   * [trace filter](/trace/docs/trace-filters). Example:
+   *
+   *     "label:/http/url root:/_ah/background my_label:17"
+   *
+   * [endTime] - Optional. Do not return traces whose start time is later than
+   * this time.
+   *
+   * [pageToken] - Optional. If present, then retrieve the next batch of results
+   * from the
+   * preceding call to this method.  `page_token` must be the value of
+   * `next_page_token` from the previous response.  The values of other method
+   * parameters should be identical to those in the previous call.
+   *
+   * [startTime] - Optional. Do not return traces whose end time is earlier than
+   * this time.
+   *
+   * Completes with a [ListTracesResponse].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<ListTracesResponse> list(core.String parent, {core.int pageSize, core.String orderBy, core.String filter, core.String endTime, core.String pageToken, core.String startTime}) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (parent == null) {
+      throw new core.ArgumentError("Parameter parent is required.");
+    }
+    if (pageSize != null) {
+      _queryParams["pageSize"] = ["${pageSize}"];
+    }
+    if (orderBy != null) {
+      _queryParams["orderBy"] = [orderBy];
+    }
+    if (filter != null) {
+      _queryParams["filter"] = [filter];
+    }
+    if (endTime != null) {
+      _queryParams["endTime"] = [endTime];
+    }
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
+    if (startTime != null) {
+      _queryParams["startTime"] = [startTime];
+    }
+
+    _url = 'v2/' + commons.Escaper.ecapeVariableReserved('$parent') + '/traces';
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new ListTracesResponse.fromJson(data));
+  }
+
+  /**
+   * Returns a list of spans within a trace.
+   *
+   * Request parameters:
+   *
+   * [parent] - Required: The resource name of the trace containing the spans to
+   * list.
+   * The format is `projects/PROJECT_ID/traces/TRACE_ID`.
+   * Value must have pattern "^projects/[^/]+/traces/[^/]+$".
+   *
+   * [pageToken] - Optional. If present, then retrieve the next batch of results
+   * from the
+   * preceding call to this method. `page_token` must be the value of
+   * `next_page_token` from the previous response. The values of other method
+   * parameters should be identical to those in the previous call.
+   *
+   * Completes with a [ListSpansResponse].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<ListSpansResponse> listSpans(core.String parent, {core.String pageToken}) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (parent == null) {
+      throw new core.ArgumentError("Parameter parent is required.");
+    }
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
+
+    _url = 'v2/' + commons.Escaper.ecapeVariableReserved('$parent') + ':listSpans';
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new ListSpansResponse.fromJson(data));
+  }
+
+}
+
+
+class ProjectsTracesSpansResourceApi {
+  final commons.ApiRequester _requester;
+
+  ProjectsTracesSpansResourceApi(commons.ApiRequester client) : 
+      _requester = client;
+
+  /**
+   * Creates a new Span.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [name] - The resource name of the span in the following format:
+   *
+   * projects/[PROJECT_ID]traces/[TRACE_ID]/spans/SPAN_ID is a unique identifier
+   * for a trace within a project.
+   * [SPAN_ID] is a unique identifier for a span within a trace,
+   * assigned when the span is created.
+   * Value must have pattern "^projects/[^/]+/traces/[^/]+/spans/[^/]+$".
+   *
+   * Completes with a [Span].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Span> create(Span request, core.String name) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (name == null) {
+      throw new core.ArgumentError("Parameter name is required.");
+    }
+
+    _url = 'v2/' + commons.Escaper.ecapeVariableReserved('$name');
+
+    var _response = _requester.request(_url,
+                                       "PUT",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Span.fromJson(data));
+  }
+
+}
+
+
+
+/** Text annotation with a set of attributes. */
+class Annotation {
+  /**
+   * A set of attributes on the annotation. There is a limit of 4 attributes
+   * per Annotation.
+   */
+  Attributes attributes;
+  /**
+   * A user-supplied message describing the event. The maximum length for
+   * the description is 256 bytes.
+   */
+  TruncatableString description;
+
+  Annotation();
+
+  Annotation.fromJson(core.Map _json) {
+    if (_json.containsKey("attributes")) {
+      attributes = new Attributes.fromJson(_json["attributes"]);
+    }
+    if (_json.containsKey("description")) {
+      description = new TruncatableString.fromJson(_json["description"]);
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (attributes != null) {
+      _json["attributes"] = (attributes).toJson();
+    }
+    if (description != null) {
+      _json["description"] = (description).toJson();
+    }
+    return _json;
+  }
+}
+
+/** The allowed types for [VALUE] in a `[KEY]:[VALUE]` attribute. */
+class AttributeValue {
+  /** A Boolean value represented by `true` or `false`. */
+  core.bool boolValue;
+  /** A 64-bit signed integer. */
+  core.String intValue;
+  /** A string up to 256 bytes long. */
+  TruncatableString stringValue;
+
+  AttributeValue();
+
+  AttributeValue.fromJson(core.Map _json) {
+    if (_json.containsKey("boolValue")) {
+      boolValue = _json["boolValue"];
+    }
+    if (_json.containsKey("intValue")) {
+      intValue = _json["intValue"];
+    }
+    if (_json.containsKey("stringValue")) {
+      stringValue = new TruncatableString.fromJson(_json["stringValue"]);
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (boolValue != null) {
+      _json["boolValue"] = boolValue;
+    }
+    if (intValue != null) {
+      _json["intValue"] = intValue;
+    }
+    if (stringValue != null) {
+      _json["stringValue"] = (stringValue).toJson();
+    }
+    return _json;
+  }
+}
+
+/** A set of attributes, each in the format `[KEY]:[VALUE]`. */
+class Attributes {
+  /**
+   * The set of attributes. Each attribute's key can be up to 128 bytes
+   * long. The value can be a string up to 256 bytes, an integer, or the
+   * Boolean values `true` and `false`. For example:
+   *
+   *     "/instance_id": "my-instance"
+   *     "/http/user_agent": ""
+   *     "/http/request_bytes": 300
+   *     "abc.com/myattribute": true
+   */
+  core.Map<core.String, AttributeValue> attributeMap;
+  /**
+   * The number of attributes that were discarded. Attributes can be discarded
+   * because their keys are too long or because there are too many attributes.
+   * If this value is 0 then all attributes are valid.
+   */
+  core.int droppedAttributesCount;
+
+  Attributes();
+
+  Attributes.fromJson(core.Map _json) {
+    if (_json.containsKey("attributeMap")) {
+      attributeMap = commons.mapMap<core.Map<core.String, core.Object>, AttributeValue>(_json["attributeMap"], (core.Map<core.String, core.Object> item) => new AttributeValue.fromJson(item));
+    }
+    if (_json.containsKey("droppedAttributesCount")) {
+      droppedAttributesCount = _json["droppedAttributesCount"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (attributeMap != null) {
+      _json["attributeMap"] = commons.mapMap<AttributeValue, core.Map<core.String, core.Object>>(attributeMap, (AttributeValue item) => (item).toJson());
+    }
+    if (droppedAttributesCount != null) {
+      _json["droppedAttributesCount"] = droppedAttributesCount;
+    }
+    return _json;
+  }
+}
+
+/** The request message for the `BatchWriteSpans` method. */
+class BatchWriteSpansRequest {
+  /** A collection of spans. */
+  core.List<Span> spans;
+
+  BatchWriteSpansRequest();
+
+  BatchWriteSpansRequest.fromJson(core.Map _json) {
+    if (_json.containsKey("spans")) {
+      spans = _json["spans"].map((value) => new Span.fromJson(value)).toList();
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (spans != null) {
+      _json["spans"] = spans.map((value) => (value).toJson()).toList();
+    }
+    return _json;
+  }
+}
+
+/**
+ * A generic empty message that you can re-use to avoid defining duplicated
+ * empty messages in your APIs. A typical example is to use it as the request
+ * or the response type of an API method. For instance:
+ *
+ *     service Foo {
+ *       rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
+ *     }
+ *
+ * The JSON representation for `Empty` is empty JSON object `{}`.
+ */
+class Empty {
+
+  Empty();
+
+  Empty.fromJson(core.Map _json) {
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    return _json;
+  }
+}
+
+/**
+ * A pointer from the current span to another span in the same trace or in a
+ * different trace. For example, this can be used in batching operations,
+ * where a single batch handler processes multiple requests from different
+ * traces or when the handler receives a request from a different project.
+ */
+class Link {
+  /**
+   * A set of attributes on the link. There is a limit of 32 attributes per
+   * link.
+   */
+  Attributes attributes;
+  /** `SPAN_ID` identifies a span within a trace. */
+  core.String spanId;
+  /** `TRACE_ID` identifies a trace within a project. */
+  core.String traceId;
+  /**
+   * The relationship of the current span relative to the linked span.
+   * Possible string values are:
+   * - "TYPE_UNSPECIFIED" : The relationship of the two spans is unknown.
+   * - "CHILD_LINKED_SPAN" : The linked span is a child of the current span.
+   * - "PARENT_LINKED_SPAN" : The linked span is a parent of the current span.
+   */
+  core.String type;
+
+  Link();
+
+  Link.fromJson(core.Map _json) {
+    if (_json.containsKey("attributes")) {
+      attributes = new Attributes.fromJson(_json["attributes"]);
+    }
+    if (_json.containsKey("spanId")) {
+      spanId = _json["spanId"];
+    }
+    if (_json.containsKey("traceId")) {
+      traceId = _json["traceId"];
+    }
+    if (_json.containsKey("type")) {
+      type = _json["type"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (attributes != null) {
+      _json["attributes"] = (attributes).toJson();
+    }
+    if (spanId != null) {
+      _json["spanId"] = spanId;
+    }
+    if (traceId != null) {
+      _json["traceId"] = traceId;
+    }
+    if (type != null) {
+      _json["type"] = type;
+    }
+    return _json;
+  }
+}
+
+/**
+ * A collection of links, which are references from this span to a span
+ * in the same or different trace.
+ */
+class Links {
+  /**
+   * The number of dropped links after the maximum size was enforced. If
+   * this value is 0, then no links were dropped.
+   */
+  core.int droppedLinksCount;
+  /** A collection of links. */
+  core.List<Link> link;
+
+  Links();
+
+  Links.fromJson(core.Map _json) {
+    if (_json.containsKey("droppedLinksCount")) {
+      droppedLinksCount = _json["droppedLinksCount"];
+    }
+    if (_json.containsKey("link")) {
+      link = _json["link"].map((value) => new Link.fromJson(value)).toList();
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (droppedLinksCount != null) {
+      _json["droppedLinksCount"] = droppedLinksCount;
+    }
+    if (link != null) {
+      _json["link"] = link.map((value) => (value).toJson()).toList();
+    }
+    return _json;
+  }
+}
+
+/** The response message for the `ListSpans` method. */
+class ListSpansResponse {
+  /**
+   * If defined, indicates that there might be more spans that match the
+   * request. Pass this as the value of `pageToken` in a subsequent request to
+   * retrieve additional spans.
+   */
+  core.String nextPageToken;
+  /** The requested spans, if there are any in the specified trace. */
+  core.List<Span> spans;
+
+  ListSpansResponse();
+
+  ListSpansResponse.fromJson(core.Map _json) {
+    if (_json.containsKey("nextPageToken")) {
+      nextPageToken = _json["nextPageToken"];
+    }
+    if (_json.containsKey("spans")) {
+      spans = _json["spans"].map((value) => new Span.fromJson(value)).toList();
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (nextPageToken != null) {
+      _json["nextPageToken"] = nextPageToken;
+    }
+    if (spans != null) {
+      _json["spans"] = spans.map((value) => (value).toJson()).toList();
+    }
+    return _json;
+  }
+}
+
+/** The response message for the `ListTraces` method. */
+class ListTracesResponse {
+  /**
+   * If there might be more results than those appearing in this response, then
+   * `next_page_token` is included.  To get the next set of results, call this
+   * method again using the value of `next_page_token` as `page_token`.
+   */
+  core.String nextPageToken;
+  /** List of trace records returned. */
+  core.List<Trace> traces;
+
+  ListTracesResponse();
+
+  ListTracesResponse.fromJson(core.Map _json) {
+    if (_json.containsKey("nextPageToken")) {
+      nextPageToken = _json["nextPageToken"];
+    }
+    if (_json.containsKey("traces")) {
+      traces = _json["traces"].map((value) => new Trace.fromJson(value)).toList();
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (nextPageToken != null) {
+      _json["nextPageToken"] = nextPageToken;
+    }
+    if (traces != null) {
+      _json["traces"] = traces.map((value) => (value).toJson()).toList();
+    }
+    return _json;
+  }
+}
+
+/** Binary module. */
+class Module {
+  /**
+   * A unique identifier for the module, usually a hash of its
+   * contents (up to 128 bytes).
+   */
+  TruncatableString buildId;
+  /**
+   * For example: main binary, kernel modules, and dynamic libraries
+   * such as libc.so, sharedlib.so (up to 256 bytes).
+   */
+  TruncatableString module;
+
+  Module();
+
+  Module.fromJson(core.Map _json) {
+    if (_json.containsKey("buildId")) {
+      buildId = new TruncatableString.fromJson(_json["buildId"]);
+    }
+    if (_json.containsKey("module")) {
+      module = new TruncatableString.fromJson(_json["module"]);
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (buildId != null) {
+      _json["buildId"] = (buildId).toJson();
+    }
+    if (module != null) {
+      _json["module"] = (module).toJson();
+    }
+    return _json;
+  }
+}
+
+/** An event describing an RPC message sent or received on the network. */
+class NetworkEvent {
+  /** An identifier for the message, which must be unique in this span. */
+  core.String messageId;
+  /** The number of bytes sent or received. */
+  core.String messageSize;
+  /**
+   * For sent messages, this is the time at which the first bit was sent.
+   * For received messages, this is the time at which the last bit was
+   * received.
+   */
+  core.String time;
+  /**
+   * Type of NetworkEvent. Indicates whether the RPC message was sent or
+   * received.
+   * Possible string values are:
+   * - "TYPE_UNSPECIFIED" : Unknown event type.
+   * - "SENT" : Indicates a sent RPC message.
+   * - "RECV" : Indicates a received RPC message.
+   */
+  core.String type;
+
+  NetworkEvent();
+
+  NetworkEvent.fromJson(core.Map _json) {
+    if (_json.containsKey("messageId")) {
+      messageId = _json["messageId"];
+    }
+    if (_json.containsKey("messageSize")) {
+      messageSize = _json["messageSize"];
+    }
+    if (_json.containsKey("time")) {
+      time = _json["time"];
+    }
+    if (_json.containsKey("type")) {
+      type = _json["type"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (messageId != null) {
+      _json["messageId"] = messageId;
+    }
+    if (messageSize != null) {
+      _json["messageSize"] = messageSize;
+    }
+    if (time != null) {
+      _json["time"] = time;
+    }
+    if (type != null) {
+      _json["type"] = type;
+    }
+    return _json;
+  }
+}
+
+/**
+ * A span represents a single operation within a trace. Spans can be
+ * nested to form a trace tree. Often, a trace contains a root span
+ * that describes the end-to-end latency, and one or more subspans for
+ * its sub-operations. A trace can also contain multiple root spans,
+ * or none at all. Spans do not need to be contiguous&mdash;there may be
+ * gaps or overlaps between spans in a trace.
+ */
+class Span {
+  /**
+   * A set of attributes on the span. There is a limit of 32 attributes per
+   * span.
+   */
+  Attributes attributes;
+  /**
+   * An optional number of child spans that were generated while this span
+   * was active. If set, allows implementation to detect missing child spans.
+   */
+  core.int childSpanCount;
+  /**
+   * A description of the span's operation (up to 128 bytes).
+   * Stackdriver Trace displays the description in the
+   * {% dynamic print site_values.console_name %}.
+   * For example, the display name can be a qualified method name or a file name
+   * and a line number where the operation is called. A best practice is to use
+   * the same display name within an application and at the same call point.
+   * This makes it easier to correlate spans in different traces.
+   */
+  TruncatableString displayName;
+  /**
+   * The end time of the span. On the client side, this is the time kept by
+   * the local machine where the span execution ends. On the server side, this
+   * is the time when the server application handler stops running.
+   */
+  core.String endTime;
+  /** A maximum of 128 links are allowed per Span. */
+  Links links;
+  /**
+   * The resource name of the span in the following format:
+   *
+   * projects/[PROJECT_ID]traces/[TRACE_ID]/spans/SPAN_ID is a unique identifier
+   * for a trace within a project.
+   * [SPAN_ID] is a unique identifier for a span within a trace,
+   * assigned when the span is created.
+   */
+  core.String name;
+  /**
+   * The [SPAN_ID] of this span's parent span. If this is a root span,
+   * then this field must be empty.
+   */
+  core.String parentSpanId;
+  /**
+   * A highly recommended but not required flag that identifies when a trace
+   * crosses a process boundary. True when the parent_span belongs to the
+   * same process as the current span.
+   */
+  core.bool sameProcessAsParentSpan;
+  /** The [SPAN_ID] portion of the span's resource name. */
+  core.String spanId;
+  /** Stack trace captured at the start of the span. */
+  StackTrace stackTrace;
+  /**
+   * The start time of the span. On the client side, this is the time kept by
+   * the local machine where the span execution starts. On the server side, this
+   * is the time when the server's application handler starts running.
+   */
+  core.String startTime;
+  /** An optional final status for this span. */
+  Status status;
+  /**
+   * The included time events. There can be up to 32 annotations and 128 network
+   * events per span.
+   */
+  TimeEvents timeEvents;
+
+  Span();
+
+  Span.fromJson(core.Map _json) {
+    if (_json.containsKey("attributes")) {
+      attributes = new Attributes.fromJson(_json["attributes"]);
+    }
+    if (_json.containsKey("childSpanCount")) {
+      childSpanCount = _json["childSpanCount"];
+    }
+    if (_json.containsKey("displayName")) {
+      displayName = new TruncatableString.fromJson(_json["displayName"]);
+    }
+    if (_json.containsKey("endTime")) {
+      endTime = _json["endTime"];
+    }
+    if (_json.containsKey("links")) {
+      links = new Links.fromJson(_json["links"]);
+    }
+    if (_json.containsKey("name")) {
+      name = _json["name"];
+    }
+    if (_json.containsKey("parentSpanId")) {
+      parentSpanId = _json["parentSpanId"];
+    }
+    if (_json.containsKey("sameProcessAsParentSpan")) {
+      sameProcessAsParentSpan = _json["sameProcessAsParentSpan"];
+    }
+    if (_json.containsKey("spanId")) {
+      spanId = _json["spanId"];
+    }
+    if (_json.containsKey("stackTrace")) {
+      stackTrace = new StackTrace.fromJson(_json["stackTrace"]);
+    }
+    if (_json.containsKey("startTime")) {
+      startTime = _json["startTime"];
+    }
+    if (_json.containsKey("status")) {
+      status = new Status.fromJson(_json["status"]);
+    }
+    if (_json.containsKey("timeEvents")) {
+      timeEvents = new TimeEvents.fromJson(_json["timeEvents"]);
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (attributes != null) {
+      _json["attributes"] = (attributes).toJson();
+    }
+    if (childSpanCount != null) {
+      _json["childSpanCount"] = childSpanCount;
+    }
+    if (displayName != null) {
+      _json["displayName"] = (displayName).toJson();
+    }
+    if (endTime != null) {
+      _json["endTime"] = endTime;
+    }
+    if (links != null) {
+      _json["links"] = (links).toJson();
+    }
+    if (name != null) {
+      _json["name"] = name;
+    }
+    if (parentSpanId != null) {
+      _json["parentSpanId"] = parentSpanId;
+    }
+    if (sameProcessAsParentSpan != null) {
+      _json["sameProcessAsParentSpan"] = sameProcessAsParentSpan;
+    }
+    if (spanId != null) {
+      _json["spanId"] = spanId;
+    }
+    if (stackTrace != null) {
+      _json["stackTrace"] = (stackTrace).toJson();
+    }
+    if (startTime != null) {
+      _json["startTime"] = startTime;
+    }
+    if (status != null) {
+      _json["status"] = (status).toJson();
+    }
+    if (timeEvents != null) {
+      _json["timeEvents"] = (timeEvents).toJson();
+    }
+    return _json;
+  }
+}
+
+/** Represents a single stack frame in a stack trace. */
+class StackFrame {
+  /**
+   * The column number where the function call appears, if available.
+   * This is important in JavaScript because of its anonymous functions.
+   */
+  core.String columnNumber;
+  /**
+   * The name of the source file where the function call appears (up to 256
+   * bytes).
+   */
+  TruncatableString fileName;
+  /**
+   * The fully-qualified name that uniquely identifies the function or
+   * method that is active in this frame (up to 1024 bytes).
+   */
+  TruncatableString functionName;
+  /** The line number in `file_name` where the function call appears. */
+  core.String lineNumber;
+  /** The binary module from where the code was loaded. */
+  Module loadModule;
+  /**
+   * An un-mangled function name, if `function_name` is
+   * [mangled](http://www.avabodh.com/cxxin/namemangling.html). The name can
+   * be fully-qualified (up to 1024 bytes).
+   */
+  TruncatableString originalFunctionName;
+  /** The version of the deployed source code (up to 128 bytes). */
+  TruncatableString sourceVersion;
+
+  StackFrame();
+
+  StackFrame.fromJson(core.Map _json) {
+    if (_json.containsKey("columnNumber")) {
+      columnNumber = _json["columnNumber"];
+    }
+    if (_json.containsKey("fileName")) {
+      fileName = new TruncatableString.fromJson(_json["fileName"]);
+    }
+    if (_json.containsKey("functionName")) {
+      functionName = new TruncatableString.fromJson(_json["functionName"]);
+    }
+    if (_json.containsKey("lineNumber")) {
+      lineNumber = _json["lineNumber"];
+    }
+    if (_json.containsKey("loadModule")) {
+      loadModule = new Module.fromJson(_json["loadModule"]);
+    }
+    if (_json.containsKey("originalFunctionName")) {
+      originalFunctionName = new TruncatableString.fromJson(_json["originalFunctionName"]);
+    }
+    if (_json.containsKey("sourceVersion")) {
+      sourceVersion = new TruncatableString.fromJson(_json["sourceVersion"]);
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (columnNumber != null) {
+      _json["columnNumber"] = columnNumber;
+    }
+    if (fileName != null) {
+      _json["fileName"] = (fileName).toJson();
+    }
+    if (functionName != null) {
+      _json["functionName"] = (functionName).toJson();
+    }
+    if (lineNumber != null) {
+      _json["lineNumber"] = lineNumber;
+    }
+    if (loadModule != null) {
+      _json["loadModule"] = (loadModule).toJson();
+    }
+    if (originalFunctionName != null) {
+      _json["originalFunctionName"] = (originalFunctionName).toJson();
+    }
+    if (sourceVersion != null) {
+      _json["sourceVersion"] = (sourceVersion).toJson();
+    }
+    return _json;
+  }
+}
+
+/** A collection of stack frames, which can be truncated. */
+class StackFrames {
+  /**
+   * The number of stack frames that were dropped because there
+   * were too many stack frames.
+   * If this value is 0, then no stack frames were dropped.
+   */
+  core.int droppedFramesCount;
+  /** Stack frames in this call stack. */
+  core.List<StackFrame> frame;
+
+  StackFrames();
+
+  StackFrames.fromJson(core.Map _json) {
+    if (_json.containsKey("droppedFramesCount")) {
+      droppedFramesCount = _json["droppedFramesCount"];
+    }
+    if (_json.containsKey("frame")) {
+      frame = _json["frame"].map((value) => new StackFrame.fromJson(value)).toList();
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (droppedFramesCount != null) {
+      _json["droppedFramesCount"] = droppedFramesCount;
+    }
+    if (frame != null) {
+      _json["frame"] = frame.map((value) => (value).toJson()).toList();
+    }
+    return _json;
+  }
+}
+
+/** A call stack appearing in a trace. */
+class StackTrace {
+  /** Stack frames in this stack trace. A maximum of 128 frames are allowed. */
+  StackFrames stackFrames;
+  /**
+   * The hash ID is used to conserve network bandwidth for duplicate
+   * stack traces within a single trace.
+   *
+   * Often multiple spans will have identical stack traces.
+   * The first occurrence of a stack trace should contain both the
+   * `stackFrame` content and a value in `stackTraceHashId`.
+   *
+   * Subsequent spans within the same request can refer
+   * to that stack trace by only setting `stackTraceHashId`.
+   */
+  core.String stackTraceHashId;
+
+  StackTrace();
+
+  StackTrace.fromJson(core.Map _json) {
+    if (_json.containsKey("stackFrames")) {
+      stackFrames = new StackFrames.fromJson(_json["stackFrames"]);
+    }
+    if (_json.containsKey("stackTraceHashId")) {
+      stackTraceHashId = _json["stackTraceHashId"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (stackFrames != null) {
+      _json["stackFrames"] = (stackFrames).toJson();
+    }
+    if (stackTraceHashId != null) {
+      _json["stackTraceHashId"] = stackTraceHashId;
+    }
+    return _json;
+  }
+}
+
+/**
+ * The `Status` type defines a logical error model that is suitable for
+ * different
+ * programming environments, including REST APIs and RPC APIs. It is used by
+ * [gRPC](https://github.com/grpc). The error model is designed to be:
+ *
+ * - Simple to use and understand for most users
+ * - Flexible enough to meet unexpected needs
+ *
+ * # Overview
+ *
+ * The `Status` message contains three pieces of data: error code, error
+ * message,
+ * and error details. The error code should be an enum value of
+ * google.rpc.Code, but it may accept additional error codes if needed.  The
+ * error message should be a developer-facing English message that helps
+ * developers *understand* and *resolve* the error. If a localized user-facing
+ * error message is needed, put the localized message in the error details or
+ * localize it in the client. The optional error details may contain arbitrary
+ * information about the error. There is a predefined set of error detail types
+ * in the package `google.rpc` that can be used for common error conditions.
+ *
+ * # Language mapping
+ *
+ * The `Status` message is the logical representation of the error model, but it
+ * is not necessarily the actual wire format. When the `Status` message is
+ * exposed in different client libraries and different wire protocols, it can be
+ * mapped differently. For example, it will likely be mapped to some exceptions
+ * in Java, but more likely mapped to some error codes in C.
+ *
+ * # Other uses
+ *
+ * The error model and the `Status` message can be used in a variety of
+ * environments, either with or without APIs, to provide a
+ * consistent developer experience across different environments.
+ *
+ * Example uses of this error model include:
+ *
+ * - Partial errors. If a service needs to return partial errors to the client,
+ *     it may embed the `Status` in the normal response to indicate the partial
+ *     errors.
+ *
+ * - Workflow errors. A typical workflow has multiple steps. Each step may
+ *     have a `Status` message for error reporting.
+ *
+ * - Batch operations. If a client uses batch request and batch response, the
+ *     `Status` message should be used directly inside batch response, one for
+ *     each error sub-response.
+ *
+ * - Asynchronous operations. If an API call embeds asynchronous operation
+ *     results in its response, the status of those operations should be
+ *     represented directly using the `Status` message.
+ *
+ * - Logging. If some API errors are stored in logs, the message `Status` could
+ * be used directly after any stripping needed for security/privacy reasons.
+ */
+class Status {
+  /** The status code, which should be an enum value of google.rpc.Code. */
+  core.int code;
+  /**
+   * A list of messages that carry the error details.  There will be a
+   * common set of message types for APIs to use.
+   *
+   * The values for Object must be JSON objects. It can consist of `num`,
+   * `String`, `bool` and `null` as well as `Map` and `List` values.
+   */
+  core.List<core.Map<core.String, core.Object>> details;
+  /**
+   * A developer-facing error message, which should be in English. Any
+   * user-facing error message should be localized and sent in the
+   * google.rpc.Status.details field, or localized by the client.
+   */
+  core.String message;
+
+  Status();
+
+  Status.fromJson(core.Map _json) {
+    if (_json.containsKey("code")) {
+      code = _json["code"];
+    }
+    if (_json.containsKey("details")) {
+      details = _json["details"];
+    }
+    if (_json.containsKey("message")) {
+      message = _json["message"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (code != null) {
+      _json["code"] = code;
+    }
+    if (details != null) {
+      _json["details"] = details;
+    }
+    if (message != null) {
+      _json["message"] = message;
+    }
+    return _json;
+  }
+}
+
+/** A time-stamped annotation or network event in the Span. */
+class TimeEvent {
+  /** One or more key:value pairs. */
+  Annotation annotation;
+  /** An event describing an RPC message sent/received on the network. */
+  NetworkEvent networkEvent;
+  /** The timestamp indicating the time the event occurred. */
+  core.String time;
+
+  TimeEvent();
+
+  TimeEvent.fromJson(core.Map _json) {
+    if (_json.containsKey("annotation")) {
+      annotation = new Annotation.fromJson(_json["annotation"]);
+    }
+    if (_json.containsKey("networkEvent")) {
+      networkEvent = new NetworkEvent.fromJson(_json["networkEvent"]);
+    }
+    if (_json.containsKey("time")) {
+      time = _json["time"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (annotation != null) {
+      _json["annotation"] = (annotation).toJson();
+    }
+    if (networkEvent != null) {
+      _json["networkEvent"] = (networkEvent).toJson();
+    }
+    if (time != null) {
+      _json["time"] = time;
+    }
+    return _json;
+  }
+}
+
+/**
+ * A collection of `TimeEvent`s. A `TimeEvent` is a time-stamped annotation
+ * on the span, consisting of either user-supplied key:value pairs, or
+ * details of an RPC message sent/received on the network.
+ */
+class TimeEvents {
+  /**
+   * The number of dropped annotations in all the included time events.
+   * If the value is 0, then no annotations were dropped.
+   */
+  core.int droppedAnnotationsCount;
+  /**
+   * The number of dropped network events in all the included time events.
+   * If the value is 0, then no network events were dropped.
+   */
+  core.int droppedNetworkEventsCount;
+  /** A collection of `TimeEvent`s. */
+  core.List<TimeEvent> timeEvent;
+
+  TimeEvents();
+
+  TimeEvents.fromJson(core.Map _json) {
+    if (_json.containsKey("droppedAnnotationsCount")) {
+      droppedAnnotationsCount = _json["droppedAnnotationsCount"];
+    }
+    if (_json.containsKey("droppedNetworkEventsCount")) {
+      droppedNetworkEventsCount = _json["droppedNetworkEventsCount"];
+    }
+    if (_json.containsKey("timeEvent")) {
+      timeEvent = _json["timeEvent"].map((value) => new TimeEvent.fromJson(value)).toList();
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (droppedAnnotationsCount != null) {
+      _json["droppedAnnotationsCount"] = droppedAnnotationsCount;
+    }
+    if (droppedNetworkEventsCount != null) {
+      _json["droppedNetworkEventsCount"] = droppedNetworkEventsCount;
+    }
+    if (timeEvent != null) {
+      _json["timeEvent"] = timeEvent.map((value) => (value).toJson()).toList();
+    }
+    return _json;
+  }
+}
+
+/**
+ * A trace describes how long it takes for an application to perform some
+ * operations. It consists of a set of spans, each representing
+ * an operation and including time information and operation details.
+ */
+class Trace {
+  /**
+   * The resource name of the trace in the following format:
+   *
+   * projects/[PROJECT_ID]/traces/TRACE_ID is a unique identifier for a trace
+   * within a project.
+   * The ID is assigned when the trace is created.
+   */
+  core.String name;
+
+  Trace();
+
+  Trace.fromJson(core.Map _json) {
+    if (_json.containsKey("name")) {
+      name = _json["name"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (name != null) {
+      _json["name"] = name;
+    }
+    return _json;
+  }
+}
+
+/** Represents a string that might be shortened to a specified length. */
+class TruncatableString {
+  /**
+   * The number of bytes removed from the original string. If this
+   * value is 0, then the string was not shortened.
+   */
+  core.int truncatedByteCount;
+  /**
+   * The shortened string. For example, if the original string was 500
+   * bytes long and the limit of the string was 128 bytes, then this
+   * value contains the first 128 bytes of the 500-byte string. Note that
+   * truncation always happens on the character boundary, to ensure that
+   * truncated string is still valid UTF8. In case of multi-byte characters,
+   * size of truncated string can be less than truncation limit.
+   */
+  core.String value;
+
+  TruncatableString();
+
+  TruncatableString.fromJson(core.Map _json) {
+    if (_json.containsKey("truncatedByteCount")) {
+      truncatedByteCount = _json["truncatedByteCount"];
+    }
+    if (_json.containsKey("value")) {
+      value = _json["value"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (truncatedByteCount != null) {
+      _json["truncatedByteCount"] = truncatedByteCount;
+    }
+    if (value != null) {
+      _json["value"] = value;
+    }
+    return _json;
+  }
+}
diff --git a/generated/googleapis/lib/compute/v1.dart b/generated/googleapis/lib/compute/v1.dart
index 5fc0327..c748a61 100644
--- a/generated/googleapis/lib/compute/v1.dart
+++ b/generated/googleapis/lib/compute/v1.dart
@@ -37,6 +37,7 @@
 
   final commons.ApiRequester _requester;
 
+  AcceleratorTypesResourceApi get acceleratorTypes => new AcceleratorTypesResourceApi(_requester);
   AddressesResourceApi get addresses => new AddressesResourceApi(_requester);
   AutoscalersResourceApi get autoscalers => new AutoscalersResourceApi(_requester);
   BackendBucketsResourceApi get backendBuckets => new BackendBucketsResourceApi(_requester);
@@ -62,6 +63,7 @@
   ProjectsResourceApi get projects => new ProjectsResourceApi(_requester);
   RegionAutoscalersResourceApi get regionAutoscalers => new RegionAutoscalersResourceApi(_requester);
   RegionBackendServicesResourceApi get regionBackendServices => new RegionBackendServicesResourceApi(_requester);
+  RegionCommitmentsResourceApi get regionCommitments => new RegionCommitmentsResourceApi(_requester);
   RegionInstanceGroupManagersResourceApi get regionInstanceGroupManagers => new RegionInstanceGroupManagersResourceApi(_requester);
   RegionInstanceGroupsResourceApi get regionInstanceGroups => new RegionInstanceGroupsResourceApi(_requester);
   RegionOperationsResourceApi get regionOperations => new RegionOperationsResourceApi(_requester);
@@ -88,6 +90,273 @@
 }
 
 
+class AcceleratorTypesResourceApi {
+  final commons.ApiRequester _requester;
+
+  AcceleratorTypesResourceApi(commons.ApiRequester client) : 
+      _requester = client;
+
+  /**
+   * Retrieves an aggregated list of accelerator types.
+   *
+   * Request parameters:
+   *
+   * [project] - Project ID for this request.
+   * Value must have pattern
+   * "(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?))".
+   *
+   * [filter] - Sets a filter {expression} for filtering listed resources. Your
+   * {expression} must be in the format: field_name comparison_string
+   * literal_string.
+   *
+   * The field_name is the name of the field you want to compare. Only atomic
+   * field types are supported (string, number, boolean). The comparison_string
+   * must be either eq (equals) or ne (not equals). The literal_string is the
+   * string value to filter to. The literal value must be valid for the type of
+   * field you are filtering by (string, number, boolean). For string fields,
+   * the literal value is interpreted as a regular expression using RE2 syntax.
+   * The literal value must match the entire field.
+   *
+   * For example, to filter for instances that do not have a name of
+   * example-instance, you would use name ne example-instance.
+   *
+   * You can filter on nested fields. For example, you could filter on instances
+   * that have set the scheduling.automaticRestart field to true. Use filtering
+   * on nested fields to take advantage of labels to organize and search for
+   * results based on label values.
+   *
+   * To filter on multiple expressions, provide each separate expression within
+   * parentheses. For example, (scheduling.automaticRestart eq true) (zone eq
+   * us-central1-f). Multiple expressions are treated as AND expressions,
+   * meaning that resources must match all expressions to pass the filters.
+   *
+   * [maxResults] - The maximum number of results per page that should be
+   * returned. If the number of available results is larger than maxResults,
+   * Compute Engine returns a nextPageToken that can be used to get the next
+   * page of results in subsequent list requests. Acceptable values are 0 to
+   * 500, inclusive. (Default: 500)
+   *
+   * [orderBy] - Sorts list results by a certain order. By default, results are
+   * returned in alphanumerical order based on the resource name.
+   *
+   * You can also sort results in descending order based on the creation
+   * timestamp using orderBy="creationTimestamp desc". This sorts results based
+   * on the creationTimestamp field in reverse chronological order (newest
+   * result first). Use this to sort resources like operations so that the
+   * newest operation is returned first.
+   *
+   * Currently, only sorting by name or creationTimestamp desc is supported.
+   *
+   * [pageToken] - Specifies a page token to use. Set pageToken to the
+   * nextPageToken returned by a previous list request to get the next page of
+   * results.
+   *
+   * Completes with a [AcceleratorTypeAggregatedList].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<AcceleratorTypeAggregatedList> aggregatedList(core.String project, {core.String filter, core.int maxResults, core.String orderBy, core.String pageToken}) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (project == null) {
+      throw new core.ArgumentError("Parameter project is required.");
+    }
+    if (filter != null) {
+      _queryParams["filter"] = [filter];
+    }
+    if (maxResults != null) {
+      _queryParams["maxResults"] = ["${maxResults}"];
+    }
+    if (orderBy != null) {
+      _queryParams["orderBy"] = [orderBy];
+    }
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
+
+    _url = commons.Escaper.ecapeVariable('$project') + '/aggregated/acceleratorTypes';
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new AcceleratorTypeAggregatedList.fromJson(data));
+  }
+
+  /**
+   * Returns the specified accelerator type. Get a list of available accelerator
+   * types by making a list() request.
+   *
+   * Request parameters:
+   *
+   * [project] - Project ID for this request.
+   * Value must have pattern
+   * "(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?))".
+   *
+   * [zone] - The name of the zone for this request.
+   * Value must have pattern "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?".
+   *
+   * [acceleratorType] - Name of the accelerator type to return.
+   * Value must have pattern "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?".
+   *
+   * Completes with a [AcceleratorType].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<AcceleratorType> get(core.String project, core.String zone, core.String acceleratorType) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (project == null) {
+      throw new core.ArgumentError("Parameter project is required.");
+    }
+    if (zone == null) {
+      throw new core.ArgumentError("Parameter zone is required.");
+    }
+    if (acceleratorType == null) {
+      throw new core.ArgumentError("Parameter acceleratorType is required.");
+    }
+
+    _url = commons.Escaper.ecapeVariable('$project') + '/zones/' + commons.Escaper.ecapeVariable('$zone') + '/acceleratorTypes/' + commons.Escaper.ecapeVariable('$acceleratorType');
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new AcceleratorType.fromJson(data));
+  }
+
+  /**
+   * Retrieves a list of accelerator types available to the specified project.
+   *
+   * Request parameters:
+   *
+   * [project] - Project ID for this request.
+   * Value must have pattern
+   * "(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?))".
+   *
+   * [zone] - The name of the zone for this request.
+   * Value must have pattern "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?".
+   *
+   * [filter] - Sets a filter {expression} for filtering listed resources. Your
+   * {expression} must be in the format: field_name comparison_string
+   * literal_string.
+   *
+   * The field_name is the name of the field you want to compare. Only atomic
+   * field types are supported (string, number, boolean). The comparison_string
+   * must be either eq (equals) or ne (not equals). The literal_string is the
+   * string value to filter to. The literal value must be valid for the type of
+   * field you are filtering by (string, number, boolean). For string fields,
+   * the literal value is interpreted as a regular expression using RE2 syntax.
+   * The literal value must match the entire field.
+   *
+   * For example, to filter for instances that do not have a name of
+   * example-instance, you would use name ne example-instance.
+   *
+   * You can filter on nested fields. For example, you could filter on instances
+   * that have set the scheduling.automaticRestart field to true. Use filtering
+   * on nested fields to take advantage of labels to organize and search for
+   * results based on label values.
+   *
+   * To filter on multiple expressions, provide each separate expression within
+   * parentheses. For example, (scheduling.automaticRestart eq true) (zone eq
+   * us-central1-f). Multiple expressions are treated as AND expressions,
+   * meaning that resources must match all expressions to pass the filters.
+   *
+   * [maxResults] - The maximum number of results per page that should be
+   * returned. If the number of available results is larger than maxResults,
+   * Compute Engine returns a nextPageToken that can be used to get the next
+   * page of results in subsequent list requests. Acceptable values are 0 to
+   * 500, inclusive. (Default: 500)
+   *
+   * [orderBy] - Sorts list results by a certain order. By default, results are
+   * returned in alphanumerical order based on the resource name.
+   *
+   * You can also sort results in descending order based on the creation
+   * timestamp using orderBy="creationTimestamp desc". This sorts results based
+   * on the creationTimestamp field in reverse chronological order (newest
+   * result first). Use this to sort resources like operations so that the
+   * newest operation is returned first.
+   *
+   * Currently, only sorting by name or creationTimestamp desc is supported.
+   *
+   * [pageToken] - Specifies a page token to use. Set pageToken to the
+   * nextPageToken returned by a previous list request to get the next page of
+   * results.
+   *
+   * Completes with a [AcceleratorTypeList].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<AcceleratorTypeList> list(core.String project, core.String zone, {core.String filter, core.int maxResults, core.String orderBy, core.String pageToken}) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (project == null) {
+      throw new core.ArgumentError("Parameter project is required.");
+    }
+    if (zone == null) {
+      throw new core.ArgumentError("Parameter zone is required.");
+    }
+    if (filter != null) {
+      _queryParams["filter"] = [filter];
+    }
+    if (maxResults != null) {
+      _queryParams["maxResults"] = ["${maxResults}"];
+    }
+    if (orderBy != null) {
+      _queryParams["orderBy"] = [orderBy];
+    }
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
+
+    _url = commons.Escaper.ecapeVariable('$project') + '/zones/' + commons.Escaper.ecapeVariable('$zone') + '/acceleratorTypes';
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new AcceleratorTypeList.fromJson(data));
+  }
+
+}
+
+
 class AddressesResourceApi {
   final commons.ApiRequester _requester;
 
@@ -832,7 +1101,8 @@
 
   /**
    * Updates an autoscaler in the specified project using the data included in
-   * the request. This method supports patch semantics.
+   * the request. This method supports PATCH semantics and uses the JSON merge
+   * patch format and processing rules.
    *
    * [request] - The metadata request object.
    *
@@ -1201,7 +1471,8 @@
 
   /**
    * Updates the specified BackendBucket resource with the data included in the
-   * request. This method supports patch semantics.
+   * request. This method supports PATCH semantics and uses the JSON merge patch
+   * format and processing rules.
    *
    * [request] - The metadata request object.
    *
@@ -1715,7 +1986,8 @@
    * Patches the specified BackendService resource with the data included in the
    * request. There are several restrictions and guidelines to keep in mind when
    * updating a backend service. Read  Restrictions and Guidelines for more
-   * information. This method supports patch semantics.
+   * information. This method supports PATCH semantics and uses the JSON merge
+   * patch format and processing rules.
    *
    * [request] - The metadata request object.
    *
@@ -4553,7 +4825,8 @@
 
   /**
    * Updates a HealthCheck resource in the specified project using the data
-   * included in the request. This method supports patch semantics.
+   * included in the request. This method supports PATCH semantics and uses the
+   * JSON merge patch format and processing rules.
    *
    * [request] - The metadata request object.
    *
@@ -4910,7 +5183,8 @@
 
   /**
    * Updates a HttpHealthCheck resource in the specified project using the data
-   * included in the request. This method supports patch semantics.
+   * included in the request. This method supports PATCH semantics and uses the
+   * JSON merge patch format and processing rules.
    *
    * [request] - The metadata request object.
    *
@@ -5267,7 +5541,8 @@
 
   /**
    * Updates a HttpsHealthCheck resource in the specified project using the data
-   * included in the request. This method supports patch semantics.
+   * included in the request. This method supports PATCH semantics and uses the
+   * JSON merge patch format and processing rules.
    *
    * [request] - The metadata request object.
    *
@@ -5589,6 +5864,8 @@
    * Value must have pattern
    * "(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?))".
    *
+   * [forceCreate] - Force image creation if true.
+   *
    * Completes with a [Operation].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -5597,7 +5874,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<Operation> insert(Image request, core.String project) {
+  async.Future<Operation> insert(Image request, core.String project, {core.bool forceCreate}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -5611,6 +5888,9 @@
     if (project == null) {
       throw new core.ArgumentError("Parameter project is required.");
     }
+    if (forceCreate != null) {
+      _queryParams["forceCreate"] = ["${forceCreate}"];
+    }
 
     _url = commons.Escaper.ecapeVariable('$project') + '/global/images';
 
@@ -8417,6 +8697,65 @@
   }
 
   /**
+   * Changes the number and/or type of accelerator for a stopped instance to the
+   * values specified in the request.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [project] - Project ID for this request.
+   * Value must have pattern
+   * "(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?))".
+   *
+   * [zone] - The name of the zone for this request.
+   * Value must have pattern "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?".
+   *
+   * [instance] - Name of the instance scoping this request.
+   * Value must have pattern "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?".
+   *
+   * Completes with a [Operation].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Operation> setMachineResources(InstancesSetMachineResourcesRequest request, core.String project, core.String zone, core.String instance) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (project == null) {
+      throw new core.ArgumentError("Parameter project is required.");
+    }
+    if (zone == null) {
+      throw new core.ArgumentError("Parameter zone is required.");
+    }
+    if (instance == null) {
+      throw new core.ArgumentError("Parameter instance is required.");
+    }
+
+    _url = commons.Escaper.ecapeVariable('$project') + '/zones/' + commons.Escaper.ecapeVariable('$zone') + '/instances/' + commons.Escaper.ecapeVariable('$instance') + '/setMachineResources';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Operation.fromJson(data));
+  }
+
+  /**
    * Changes the machine type for a stopped instance to the machine type
    * specified in the request.
    *
@@ -8890,8 +9229,7 @@
       _requester = client;
 
   /**
-   * Returns the specified License resource. Get a list of available licenses by
-   * making a list() request.
+   * Returns the specified License resource.
    *
    * Request parameters:
    *
@@ -10463,7 +10801,8 @@
 
   /**
    * Updates an autoscaler in the specified project using the data included in
-   * the request. This method supports patch semantics.
+   * the request. This method supports PATCH semantics and uses the JSON merge
+   * patch format and processing rules.
    *
    * [request] - The metadata request object.
    *
@@ -10918,7 +11257,8 @@
    * Updates the specified regional BackendService resource with the data
    * included in the request. There are several restrictions and guidelines to
    * keep in mind when updating a backend service. Read  Restrictions and
-   * Guidelines for more information. This method supports patch semantics.
+   * Guidelines for more information. This method supports PATCH semantics and
+   * uses the JSON merge patch format and processing rules.
    *
    * [request] - The metadata request object.
    *
@@ -11039,6 +11379,326 @@
 }
 
 
+class RegionCommitmentsResourceApi {
+  final commons.ApiRequester _requester;
+
+  RegionCommitmentsResourceApi(commons.ApiRequester client) : 
+      _requester = client;
+
+  /**
+   * Retrieves an aggregated list of commitments.
+   *
+   * Request parameters:
+   *
+   * [project] - Project ID for this request.
+   * Value must have pattern
+   * "(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?))".
+   *
+   * [filter] - Sets a filter {expression} for filtering listed resources. Your
+   * {expression} must be in the format: field_name comparison_string
+   * literal_string.
+   *
+   * The field_name is the name of the field you want to compare. Only atomic
+   * field types are supported (string, number, boolean). The comparison_string
+   * must be either eq (equals) or ne (not equals). The literal_string is the
+   * string value to filter to. The literal value must be valid for the type of
+   * field you are filtering by (string, number, boolean). For string fields,
+   * the literal value is interpreted as a regular expression using RE2 syntax.
+   * The literal value must match the entire field.
+   *
+   * For example, to filter for instances that do not have a name of
+   * example-instance, you would use name ne example-instance.
+   *
+   * You can filter on nested fields. For example, you could filter on instances
+   * that have set the scheduling.automaticRestart field to true. Use filtering
+   * on nested fields to take advantage of labels to organize and search for
+   * results based on label values.
+   *
+   * To filter on multiple expressions, provide each separate expression within
+   * parentheses. For example, (scheduling.automaticRestart eq true) (zone eq
+   * us-central1-f). Multiple expressions are treated as AND expressions,
+   * meaning that resources must match all expressions to pass the filters.
+   *
+   * [maxResults] - The maximum number of results per page that should be
+   * returned. If the number of available results is larger than maxResults,
+   * Compute Engine returns a nextPageToken that can be used to get the next
+   * page of results in subsequent list requests. Acceptable values are 0 to
+   * 500, inclusive. (Default: 500)
+   *
+   * [orderBy] - Sorts list results by a certain order. By default, results are
+   * returned in alphanumerical order based on the resource name.
+   *
+   * You can also sort results in descending order based on the creation
+   * timestamp using orderBy="creationTimestamp desc". This sorts results based
+   * on the creationTimestamp field in reverse chronological order (newest
+   * result first). Use this to sort resources like operations so that the
+   * newest operation is returned first.
+   *
+   * Currently, only sorting by name or creationTimestamp desc is supported.
+   *
+   * [pageToken] - Specifies a page token to use. Set pageToken to the
+   * nextPageToken returned by a previous list request to get the next page of
+   * results.
+   *
+   * Completes with a [CommitmentAggregatedList].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<CommitmentAggregatedList> aggregatedList(core.String project, {core.String filter, core.int maxResults, core.String orderBy, core.String pageToken}) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (project == null) {
+      throw new core.ArgumentError("Parameter project is required.");
+    }
+    if (filter != null) {
+      _queryParams["filter"] = [filter];
+    }
+    if (maxResults != null) {
+      _queryParams["maxResults"] = ["${maxResults}"];
+    }
+    if (orderBy != null) {
+      _queryParams["orderBy"] = [orderBy];
+    }
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
+
+    _url = commons.Escaper.ecapeVariable('$project') + '/aggregated/commitments';
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new CommitmentAggregatedList.fromJson(data));
+  }
+
+  /**
+   * Returns the specified commitment resource. Get a list of available
+   * commitments by making a list() request.
+   *
+   * Request parameters:
+   *
+   * [project] - Project ID for this request.
+   * Value must have pattern
+   * "(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?))".
+   *
+   * [region] - Name of the region for this request.
+   * Value must have pattern "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?".
+   *
+   * [commitment] - Name of the commitment to return.
+   * Value must have pattern "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?".
+   *
+   * Completes with a [Commitment].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Commitment> get(core.String project, core.String region, core.String commitment) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (project == null) {
+      throw new core.ArgumentError("Parameter project is required.");
+    }
+    if (region == null) {
+      throw new core.ArgumentError("Parameter region is required.");
+    }
+    if (commitment == null) {
+      throw new core.ArgumentError("Parameter commitment is required.");
+    }
+
+    _url = commons.Escaper.ecapeVariable('$project') + '/regions/' + commons.Escaper.ecapeVariable('$region') + '/commitments/' + commons.Escaper.ecapeVariable('$commitment');
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Commitment.fromJson(data));
+  }
+
+  /**
+   * Creates a commitment in the specified project using the data included in
+   * the request.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [project] - Project ID for this request.
+   * Value must have pattern
+   * "(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?))".
+   *
+   * [region] - Name of the region for this request.
+   * Value must have pattern "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?".
+   *
+   * Completes with a [Operation].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Operation> insert(Commitment request, core.String project, core.String region) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (project == null) {
+      throw new core.ArgumentError("Parameter project is required.");
+    }
+    if (region == null) {
+      throw new core.ArgumentError("Parameter region is required.");
+    }
+
+    _url = commons.Escaper.ecapeVariable('$project') + '/regions/' + commons.Escaper.ecapeVariable('$region') + '/commitments';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Operation.fromJson(data));
+  }
+
+  /**
+   * Retrieves a list of commitments contained within the specified region.
+   *
+   * Request parameters:
+   *
+   * [project] - Project ID for this request.
+   * Value must have pattern
+   * "(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?))".
+   *
+   * [region] - Name of the region for this request.
+   * Value must have pattern "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?".
+   *
+   * [filter] - Sets a filter {expression} for filtering listed resources. Your
+   * {expression} must be in the format: field_name comparison_string
+   * literal_string.
+   *
+   * The field_name is the name of the field you want to compare. Only atomic
+   * field types are supported (string, number, boolean). The comparison_string
+   * must be either eq (equals) or ne (not equals). The literal_string is the
+   * string value to filter to. The literal value must be valid for the type of
+   * field you are filtering by (string, number, boolean). For string fields,
+   * the literal value is interpreted as a regular expression using RE2 syntax.
+   * The literal value must match the entire field.
+   *
+   * For example, to filter for instances that do not have a name of
+   * example-instance, you would use name ne example-instance.
+   *
+   * You can filter on nested fields. For example, you could filter on instances
+   * that have set the scheduling.automaticRestart field to true. Use filtering
+   * on nested fields to take advantage of labels to organize and search for
+   * results based on label values.
+   *
+   * To filter on multiple expressions, provide each separate expression within
+   * parentheses. For example, (scheduling.automaticRestart eq true) (zone eq
+   * us-central1-f). Multiple expressions are treated as AND expressions,
+   * meaning that resources must match all expressions to pass the filters.
+   *
+   * [maxResults] - The maximum number of results per page that should be
+   * returned. If the number of available results is larger than maxResults,
+   * Compute Engine returns a nextPageToken that can be used to get the next
+   * page of results in subsequent list requests. Acceptable values are 0 to
+   * 500, inclusive. (Default: 500)
+   *
+   * [orderBy] - Sorts list results by a certain order. By default, results are
+   * returned in alphanumerical order based on the resource name.
+   *
+   * You can also sort results in descending order based on the creation
+   * timestamp using orderBy="creationTimestamp desc". This sorts results based
+   * on the creationTimestamp field in reverse chronological order (newest
+   * result first). Use this to sort resources like operations so that the
+   * newest operation is returned first.
+   *
+   * Currently, only sorting by name or creationTimestamp desc is supported.
+   *
+   * [pageToken] - Specifies a page token to use. Set pageToken to the
+   * nextPageToken returned by a previous list request to get the next page of
+   * results.
+   *
+   * Completes with a [CommitmentList].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<CommitmentList> list(core.String project, core.String region, {core.String filter, core.int maxResults, core.String orderBy, core.String pageToken}) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (project == null) {
+      throw new core.ArgumentError("Parameter project is required.");
+    }
+    if (region == null) {
+      throw new core.ArgumentError("Parameter region is required.");
+    }
+    if (filter != null) {
+      _queryParams["filter"] = [filter];
+    }
+    if (maxResults != null) {
+      _queryParams["maxResults"] = ["${maxResults}"];
+    }
+    if (orderBy != null) {
+      _queryParams["orderBy"] = [orderBy];
+    }
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
+
+    _url = commons.Escaper.ecapeVariable('$project') + '/regions/' + commons.Escaper.ecapeVariable('$region') + '/commitments';
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new CommitmentList.fromJson(data));
+  }
+
+}
+
+
 class RegionInstanceGroupManagersResourceApi {
   final commons.ApiRequester _requester;
 
@@ -17552,7 +18212,8 @@
 
   /**
    * Patches the specified UrlMap resource with the data included in the
-   * request. This method supports patch semantics.
+   * request. This method supports PATCH semantics and uses the JSON merge patch
+   * format and processing rules.
    *
    * [request] - The metadata request object.
    *
@@ -18466,6 +19127,399 @@
 
 
 /**
+ * A specification of the type and number of accelerator cards attached to the
+ * instance.
+ */
+class AcceleratorConfig {
+  /** The number of the guest accelerator cards exposed to this instance. */
+  core.int acceleratorCount;
+  /**
+   * Full or partial URL of the accelerator type resource to expose to this
+   * instance.
+   */
+  core.String acceleratorType;
+
+  AcceleratorConfig();
+
+  AcceleratorConfig.fromJson(core.Map _json) {
+    if (_json.containsKey("acceleratorCount")) {
+      acceleratorCount = _json["acceleratorCount"];
+    }
+    if (_json.containsKey("acceleratorType")) {
+      acceleratorType = _json["acceleratorType"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (acceleratorCount != null) {
+      _json["acceleratorCount"] = acceleratorCount;
+    }
+    if (acceleratorType != null) {
+      _json["acceleratorType"] = acceleratorType;
+    }
+    return _json;
+  }
+}
+
+/** An Accelerator Type resource. */
+class AcceleratorType {
+  /** [Output Only] Creation timestamp in RFC3339 text format. */
+  core.String creationTimestamp;
+  /**
+   * [Output Only] The deprecation status associated with this accelerator type.
+   */
+  DeprecationStatus deprecated;
+  /** [Output Only] An optional textual description of the resource. */
+  core.String description;
+  /**
+   * [Output Only] The unique identifier for the resource. This identifier is
+   * defined by the server.
+   */
+  core.String id;
+  /**
+   * [Output Only] The type of the resource. Always compute#acceleratorType for
+   * accelerator types.
+   */
+  core.String kind;
+  /** [Output Only] Maximum accelerator cards allowed per instance. */
+  core.int maximumCardsPerInstance;
+  /** [Output Only] Name of the resource. */
+  core.String name;
+  /** [Output Only] Server-defined fully-qualified URL for this resource. */
+  core.String selfLink;
+  /**
+   * [Output Only] The name of the zone where the accelerator type resides, such
+   * as us-central1-a.
+   */
+  core.String zone;
+
+  AcceleratorType();
+
+  AcceleratorType.fromJson(core.Map _json) {
+    if (_json.containsKey("creationTimestamp")) {
+      creationTimestamp = _json["creationTimestamp"];
+    }
+    if (_json.containsKey("deprecated")) {
+      deprecated = new DeprecationStatus.fromJson(_json["deprecated"]);
+    }
+    if (_json.containsKey("description")) {
+      description = _json["description"];
+    }
+    if (_json.containsKey("id")) {
+      id = _json["id"];
+    }
+    if (_json.containsKey("kind")) {
+      kind = _json["kind"];
+    }
+    if (_json.containsKey("maximumCardsPerInstance")) {
+      maximumCardsPerInstance = _json["maximumCardsPerInstance"];
+    }
+    if (_json.containsKey("name")) {
+      name = _json["name"];
+    }
+    if (_json.containsKey("selfLink")) {
+      selfLink = _json["selfLink"];
+    }
+    if (_json.containsKey("zone")) {
+      zone = _json["zone"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (creationTimestamp != null) {
+      _json["creationTimestamp"] = creationTimestamp;
+    }
+    if (deprecated != null) {
+      _json["deprecated"] = (deprecated).toJson();
+    }
+    if (description != null) {
+      _json["description"] = description;
+    }
+    if (id != null) {
+      _json["id"] = id;
+    }
+    if (kind != null) {
+      _json["kind"] = kind;
+    }
+    if (maximumCardsPerInstance != null) {
+      _json["maximumCardsPerInstance"] = maximumCardsPerInstance;
+    }
+    if (name != null) {
+      _json["name"] = name;
+    }
+    if (selfLink != null) {
+      _json["selfLink"] = selfLink;
+    }
+    if (zone != null) {
+      _json["zone"] = zone;
+    }
+    return _json;
+  }
+}
+
+class AcceleratorTypeAggregatedList {
+  /**
+   * [Output Only] The unique identifier for the resource. This identifier is
+   * defined by the server.
+   */
+  core.String id;
+  /** [Output Only] A map of scoped accelerator type lists. */
+  core.Map<core.String, AcceleratorTypesScopedList> items;
+  /**
+   * [Output Only] Type of resource. Always
+   * compute#acceleratorTypeAggregatedList for aggregated lists of accelerator
+   * types.
+   */
+  core.String kind;
+  /**
+   * [Output Only] This token allows you to get the next page of results for
+   * list requests. If the number of results is larger than maxResults, use the
+   * nextPageToken as a value for the query parameter pageToken in the next list
+   * request. Subsequent list requests will have their own nextPageToken to
+   * continue paging through the results.
+   */
+  core.String nextPageToken;
+  /** [Output Only] Server-defined URL for this resource. */
+  core.String selfLink;
+
+  AcceleratorTypeAggregatedList();
+
+  AcceleratorTypeAggregatedList.fromJson(core.Map _json) {
+    if (_json.containsKey("id")) {
+      id = _json["id"];
+    }
+    if (_json.containsKey("items")) {
+      items = commons.mapMap<core.Map<core.String, core.Object>, AcceleratorTypesScopedList>(_json["items"], (core.Map<core.String, core.Object> item) => new AcceleratorTypesScopedList.fromJson(item));
+    }
+    if (_json.containsKey("kind")) {
+      kind = _json["kind"];
+    }
+    if (_json.containsKey("nextPageToken")) {
+      nextPageToken = _json["nextPageToken"];
+    }
+    if (_json.containsKey("selfLink")) {
+      selfLink = _json["selfLink"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (id != null) {
+      _json["id"] = id;
+    }
+    if (items != null) {
+      _json["items"] = commons.mapMap<AcceleratorTypesScopedList, core.Map<core.String, core.Object>>(items, (AcceleratorTypesScopedList item) => (item).toJson());
+    }
+    if (kind != null) {
+      _json["kind"] = kind;
+    }
+    if (nextPageToken != null) {
+      _json["nextPageToken"] = nextPageToken;
+    }
+    if (selfLink != null) {
+      _json["selfLink"] = selfLink;
+    }
+    return _json;
+  }
+}
+
+/** Contains a list of accelerator types. */
+class AcceleratorTypeList {
+  /**
+   * [Output Only] Unique identifier for the resource; defined by the server.
+   */
+  core.String id;
+  /** A list of AcceleratorType resources. */
+  core.List<AcceleratorType> items;
+  /**
+   * [Output Only] Type of resource. Always compute#acceleratorTypeList for
+   * lists of accelerator types.
+   */
+  core.String kind;
+  /** [Output Only] A token used to continue a truncated list request. */
+  core.String nextPageToken;
+  /** [Output Only] Server-defined URL for this resource. */
+  core.String selfLink;
+
+  AcceleratorTypeList();
+
+  AcceleratorTypeList.fromJson(core.Map _json) {
+    if (_json.containsKey("id")) {
+      id = _json["id"];
+    }
+    if (_json.containsKey("items")) {
+      items = _json["items"].map((value) => new AcceleratorType.fromJson(value)).toList();
+    }
+    if (_json.containsKey("kind")) {
+      kind = _json["kind"];
+    }
+    if (_json.containsKey("nextPageToken")) {
+      nextPageToken = _json["nextPageToken"];
+    }
+    if (_json.containsKey("selfLink")) {
+      selfLink = _json["selfLink"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (id != null) {
+      _json["id"] = id;
+    }
+    if (items != null) {
+      _json["items"] = items.map((value) => (value).toJson()).toList();
+    }
+    if (kind != null) {
+      _json["kind"] = kind;
+    }
+    if (nextPageToken != null) {
+      _json["nextPageToken"] = nextPageToken;
+    }
+    if (selfLink != null) {
+      _json["selfLink"] = selfLink;
+    }
+    return _json;
+  }
+}
+
+class AcceleratorTypesScopedListWarningData {
+  /**
+   * [Output Only] A key that provides more detail on the warning being
+   * returned. For example, for warnings where there are no results in a list
+   * request for a particular zone, this key might be scope and the key value
+   * might be the zone name. Other examples might be a key indicating a
+   * deprecated resource and a suggested replacement, or a warning about invalid
+   * network settings (for example, if an instance attempts to perform IP
+   * forwarding but is not enabled for IP forwarding).
+   */
+  core.String key;
+  /** [Output Only] A warning data value corresponding to the key. */
+  core.String value;
+
+  AcceleratorTypesScopedListWarningData();
+
+  AcceleratorTypesScopedListWarningData.fromJson(core.Map _json) {
+    if (_json.containsKey("key")) {
+      key = _json["key"];
+    }
+    if (_json.containsKey("value")) {
+      value = _json["value"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (key != null) {
+      _json["key"] = key;
+    }
+    if (value != null) {
+      _json["value"] = value;
+    }
+    return _json;
+  }
+}
+
+/**
+ * [Output Only] An informational warning that appears when the accelerator
+ * types list is empty.
+ */
+class AcceleratorTypesScopedListWarning {
+  /**
+   * [Output Only] A warning code, if applicable. For example, Compute Engine
+   * returns NO_RESULTS_ON_PAGE if there are no results in the response.
+   * Possible string values are:
+   * - "CLEANUP_FAILED"
+   * - "DEPRECATED_RESOURCE_USED"
+   * - "DISK_SIZE_LARGER_THAN_IMAGE_SIZE"
+   * - "FIELD_VALUE_OVERRIDEN"
+   * - "INJECTED_KERNELS_DEPRECATED"
+   * - "NEXT_HOP_ADDRESS_NOT_ASSIGNED"
+   * - "NEXT_HOP_CANNOT_IP_FORWARD"
+   * - "NEXT_HOP_INSTANCE_NOT_FOUND"
+   * - "NEXT_HOP_INSTANCE_NOT_ON_NETWORK"
+   * - "NEXT_HOP_NOT_RUNNING"
+   * - "NOT_CRITICAL_ERROR"
+   * - "NO_RESULTS_ON_PAGE"
+   * - "REQUIRED_TOS_AGREEMENT"
+   * - "RESOURCE_IN_USE_BY_OTHER_RESOURCE_WARNING"
+   * - "RESOURCE_NOT_DELETED"
+   * - "SINGLE_INSTANCE_PROPERTY_TEMPLATE"
+   * - "UNREACHABLE"
+   */
+  core.String code;
+  /**
+   * [Output Only] Metadata about this warning in key: value format. For
+   * example:
+   * "data": [ { "key": "scope", "value": "zones/us-east1-d" }
+   */
+  core.List<AcceleratorTypesScopedListWarningData> data;
+  /** [Output Only] A human-readable description of the warning code. */
+  core.String message;
+
+  AcceleratorTypesScopedListWarning();
+
+  AcceleratorTypesScopedListWarning.fromJson(core.Map _json) {
+    if (_json.containsKey("code")) {
+      code = _json["code"];
+    }
+    if (_json.containsKey("data")) {
+      data = _json["data"].map((value) => new AcceleratorTypesScopedListWarningData.fromJson(value)).toList();
+    }
+    if (_json.containsKey("message")) {
+      message = _json["message"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (code != null) {
+      _json["code"] = code;
+    }
+    if (data != null) {
+      _json["data"] = data.map((value) => (value).toJson()).toList();
+    }
+    if (message != null) {
+      _json["message"] = message;
+    }
+    return _json;
+  }
+}
+
+class AcceleratorTypesScopedList {
+  /** [Output Only] List of accelerator types contained in this scope. */
+  core.List<AcceleratorType> acceleratorTypes;
+  /**
+   * [Output Only] An informational warning that appears when the accelerator
+   * types list is empty.
+   */
+  AcceleratorTypesScopedListWarning warning;
+
+  AcceleratorTypesScopedList();
+
+  AcceleratorTypesScopedList.fromJson(core.Map _json) {
+    if (_json.containsKey("acceleratorTypes")) {
+      acceleratorTypes = _json["acceleratorTypes"].map((value) => new AcceleratorType.fromJson(value)).toList();
+    }
+    if (_json.containsKey("warning")) {
+      warning = new AcceleratorTypesScopedListWarning.fromJson(_json["warning"]);
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (acceleratorTypes != null) {
+      _json["acceleratorTypes"] = acceleratorTypes.map((value) => (value).toJson()).toList();
+    }
+    if (warning != null) {
+      _json["warning"] = (warning).toJson();
+    }
+    return _json;
+  }
+}
+
+/**
  * An access configuration attached to an instance's network interface. Only one
  * access config per instance is supported.
  */
@@ -19283,6 +20337,21 @@
   core.String region;
   /** [Output Only] Server-defined URL for the resource. */
   core.String selfLink;
+  /**
+   * [Output Only] The status of the autoscaler configuration.
+   * Possible string values are:
+   * - "ACTIVE"
+   * - "DELETING"
+   * - "ERROR"
+   * - "PENDING"
+   */
+  core.String status;
+  /**
+   * [Output Only] Human-readable details about the current state of the
+   * autoscaler. Read the documentation for Commonly returned status messages
+   * for examples of status messages you might encounter.
+   */
+  core.List<AutoscalerStatusDetails> statusDetails;
   /** URL of the managed instance group that this autoscaler will scale. */
   core.String target;
   /**
@@ -19318,6 +20387,12 @@
     if (_json.containsKey("selfLink")) {
       selfLink = _json["selfLink"];
     }
+    if (_json.containsKey("status")) {
+      status = _json["status"];
+    }
+    if (_json.containsKey("statusDetails")) {
+      statusDetails = _json["statusDetails"].map((value) => new AutoscalerStatusDetails.fromJson(value)).toList();
+    }
     if (_json.containsKey("target")) {
       target = _json["target"];
     }
@@ -19352,6 +20427,12 @@
     if (selfLink != null) {
       _json["selfLink"] = selfLink;
     }
+    if (status != null) {
+      _json["status"] = status;
+    }
+    if (statusDetails != null) {
+      _json["statusDetails"] = statusDetails.map((value) => (value).toJson()).toList();
+    }
     if (target != null) {
       _json["target"] = target;
     }
@@ -19493,6 +20574,53 @@
   }
 }
 
+class AutoscalerStatusDetails {
+  /** The status message. */
+  core.String message;
+  /**
+   * The type of error returned.
+   * Possible string values are:
+   * - "ALL_INSTANCES_UNHEALTHY"
+   * - "BACKEND_SERVICE_DOES_NOT_EXIST"
+   * - "CAPPED_AT_MAX_NUM_REPLICAS"
+   * - "CUSTOM_METRIC_DATA_POINTS_TOO_SPARSE"
+   * - "CUSTOM_METRIC_INVALID"
+   * - "MIN_EQUALS_MAX"
+   * - "MISSING_CUSTOM_METRIC_DATA_POINTS"
+   * - "MISSING_LOAD_BALANCING_DATA_POINTS"
+   * - "MORE_THAN_ONE_BACKEND_SERVICE"
+   * - "NOT_ENOUGH_QUOTA_AVAILABLE"
+   * - "REGION_RESOURCE_STOCKOUT"
+   * - "SCALING_TARGET_DOES_NOT_EXIST"
+   * - "UNKNOWN"
+   * - "UNSUPPORTED_MAX_RATE_LOAD_BALANCING_CONFIGURATION"
+   * - "ZONE_RESOURCE_STOCKOUT"
+   */
+  core.String type;
+
+  AutoscalerStatusDetails();
+
+  AutoscalerStatusDetails.fromJson(core.Map _json) {
+    if (_json.containsKey("message")) {
+      message = _json["message"];
+    }
+    if (_json.containsKey("type")) {
+      type = _json["type"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (message != null) {
+      _json["message"] = message;
+    }
+    if (type != null) {
+      _json["type"] = type;
+    }
+    return _json;
+  }
+}
+
 class AutoscalersScopedListWarningData {
   /**
    * [Output Only] A key that provides more detail on the warning being
@@ -20178,7 +21306,9 @@
   /**
    * The list of URLs to the HttpHealthCheck or HttpsHealthCheck resource for
    * health checking this BackendService. Currently at most one health check can
-   * be specified, and a health check is required.
+   * be specified, and a health check is required for GCE backend services. A
+   * health check must not be specified for GAE app backend and Cloud Function
+   * backend.
    *
    * For internal load balancing, a URL to a HealthCheck resource must be
    * specified instead.
@@ -20868,6 +21998,438 @@
   }
 }
 
+/**
+ * Represents a Commitment resource. Creating a Commitment resource means that
+ * you are purchasing a committed use contract with an explicit start and end
+ * time. You can create commitments based on vCPUs and memory usage and receive
+ * discounted rates. For full details, read Signing Up for Committed Use
+ * Discounts.
+ *
+ * Committed use discounts are subject to Google Cloud Platform's Service
+ * Specific Terms. By purchasing a committed use discount, you agree to these
+ * terms. Committed use discounts will not renew, so you must purchase a new
+ * commitment to continue receiving discounts.
+ */
+class Commitment {
+  /** [Output Only] Creation timestamp in RFC3339 text format. */
+  core.String creationTimestamp;
+  /**
+   * An optional description of this resource. Provide this property when you
+   * create the resource.
+   */
+  core.String description;
+  /** [Output Only] Commitment end time in RFC3339 text format. */
+  core.String endTimestamp;
+  /**
+   * [Output Only] The unique identifier for the resource. This identifier is
+   * defined by the server.
+   */
+  core.String id;
+  /**
+   * [Output Only] Type of the resource. Always compute#commitment for
+   * commitments.
+   */
+  core.String kind;
+  /**
+   * Name of the resource. Provided by the client when the resource is created.
+   * The name must be 1-63 characters long, and comply with RFC1035.
+   * Specifically, the name must be 1-63 characters long and match the regular
+   * expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must
+   * be a lowercase letter, and all following characters must be a dash,
+   * lowercase letter, or digit, except the last character, which cannot be a
+   * dash.
+   */
+  core.String name;
+  /**
+   * The plan for this commitment, which determines duration and discount rate.
+   * The currently supported plans are TWELVE_MONTH (1 year), and
+   * THIRTY_SIX_MONTH (3 years).
+   * Possible string values are:
+   * - "INVALID"
+   * - "THIRTY_SIX_MONTH"
+   * - "TWELVE_MONTH"
+   */
+  core.String plan;
+  /** [Output Only] URL of the region where this commitment may be used. */
+  core.String region;
+  /**
+   * List of commitment amounts for particular resources. Note that VCPU and
+   * MEMORY resource commitments must occur together.
+   */
+  core.List<ResourceCommitment> resources;
+  /** [Output Only] Server-defined URL for the resource. */
+  core.String selfLink;
+  /** [Output Only] Commitment start time in RFC3339 text format. */
+  core.String startTimestamp;
+  /**
+   * [Output Only] Status of the commitment with regards to eventual expiration
+   * (each commitment has an end date defined). One of the following values:
+   * NOT_YET_ACTIVE, ACTIVE, EXPIRED.
+   * Possible string values are:
+   * - "ACTIVE"
+   * - "CREATING"
+   * - "EXPIRED"
+   * - "NOT_YET_ACTIVE"
+   */
+  core.String status;
+  /** [Output Only] An optional, human-readable explanation of the status. */
+  core.String statusMessage;
+
+  Commitment();
+
+  Commitment.fromJson(core.Map _json) {
+    if (_json.containsKey("creationTimestamp")) {
+      creationTimestamp = _json["creationTimestamp"];
+    }
+    if (_json.containsKey("description")) {
+      description = _json["description"];
+    }
+    if (_json.containsKey("endTimestamp")) {
+      endTimestamp = _json["endTimestamp"];
+    }
+    if (_json.containsKey("id")) {
+      id = _json["id"];
+    }
+    if (_json.containsKey("kind")) {
+      kind = _json["kind"];
+    }
+    if (_json.containsKey("name")) {
+      name = _json["name"];
+    }
+    if (_json.containsKey("plan")) {
+      plan = _json["plan"];
+    }
+    if (_json.containsKey("region")) {
+      region = _json["region"];
+    }
+    if (_json.containsKey("resources")) {
+      resources = _json["resources"].map((value) => new ResourceCommitment.fromJson(value)).toList();
+    }
+    if (_json.containsKey("selfLink")) {
+      selfLink = _json["selfLink"];
+    }
+    if (_json.containsKey("startTimestamp")) {
+      startTimestamp = _json["startTimestamp"];
+    }
+    if (_json.containsKey("status")) {
+      status = _json["status"];
+    }
+    if (_json.containsKey("statusMessage")) {
+      statusMessage = _json["statusMessage"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (creationTimestamp != null) {
+      _json["creationTimestamp"] = creationTimestamp;
+    }
+    if (description != null) {
+      _json["description"] = description;
+    }
+    if (endTimestamp != null) {
+      _json["endTimestamp"] = endTimestamp;
+    }
+    if (id != null) {
+      _json["id"] = id;
+    }
+    if (kind != null) {
+      _json["kind"] = kind;
+    }
+    if (name != null) {
+      _json["name"] = name;
+    }
+    if (plan != null) {
+      _json["plan"] = plan;
+    }
+    if (region != null) {
+      _json["region"] = region;
+    }
+    if (resources != null) {
+      _json["resources"] = resources.map((value) => (value).toJson()).toList();
+    }
+    if (selfLink != null) {
+      _json["selfLink"] = selfLink;
+    }
+    if (startTimestamp != null) {
+      _json["startTimestamp"] = startTimestamp;
+    }
+    if (status != null) {
+      _json["status"] = status;
+    }
+    if (statusMessage != null) {
+      _json["statusMessage"] = statusMessage;
+    }
+    return _json;
+  }
+}
+
+class CommitmentAggregatedList {
+  /**
+   * [Output Only] The unique identifier for the resource. This identifier is
+   * defined by the server.
+   */
+  core.String id;
+  /** Commitments by scope. */
+  core.Map<core.String, CommitmentsScopedList> items;
+  /**
+   * [Output Only] Type of resource. Always compute#commitmentAggregatedList for
+   * aggregated lists of commitments.
+   */
+  core.String kind;
+  /**
+   * [Output Only] This token allows you to get the next page of results for
+   * list requests. If the number of results is larger than maxResults, use the
+   * nextPageToken as a value for the query parameter pageToken in the next list
+   * request. Subsequent list requests will have their own nextPageToken to
+   * continue paging through the results.
+   */
+  core.String nextPageToken;
+  /** [Output Only] Server-defined URL for this resource. */
+  core.String selfLink;
+
+  CommitmentAggregatedList();
+
+  CommitmentAggregatedList.fromJson(core.Map _json) {
+    if (_json.containsKey("id")) {
+      id = _json["id"];
+    }
+    if (_json.containsKey("items")) {
+      items = commons.mapMap<core.Map<core.String, core.Object>, CommitmentsScopedList>(_json["items"], (core.Map<core.String, core.Object> item) => new CommitmentsScopedList.fromJson(item));
+    }
+    if (_json.containsKey("kind")) {
+      kind = _json["kind"];
+    }
+    if (_json.containsKey("nextPageToken")) {
+      nextPageToken = _json["nextPageToken"];
+    }
+    if (_json.containsKey("selfLink")) {
+      selfLink = _json["selfLink"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (id != null) {
+      _json["id"] = id;
+    }
+    if (items != null) {
+      _json["items"] = commons.mapMap<CommitmentsScopedList, core.Map<core.String, core.Object>>(items, (CommitmentsScopedList item) => (item).toJson());
+    }
+    if (kind != null) {
+      _json["kind"] = kind;
+    }
+    if (nextPageToken != null) {
+      _json["nextPageToken"] = nextPageToken;
+    }
+    if (selfLink != null) {
+      _json["selfLink"] = selfLink;
+    }
+    return _json;
+  }
+}
+
+/** Contains a list of Commitment resources. */
+class CommitmentList {
+  /**
+   * [Output Only] The unique identifier for the resource. This identifier is
+   * defined by the server.
+   */
+  core.String id;
+  /** A list of Commitment resources. */
+  core.List<Commitment> items;
+  /**
+   * [Output Only] Type of resource. Always compute#commitmentList for lists of
+   * commitments.
+   */
+  core.String kind;
+  /**
+   * [Output Only] This token allows you to get the next page of results for
+   * list requests. If the number of results is larger than maxResults, use the
+   * nextPageToken as a value for the query parameter pageToken in the next list
+   * request. Subsequent list requests will have their own nextPageToken to
+   * continue paging through the results.
+   */
+  core.String nextPageToken;
+  /** [Output Only] Server-defined URL for this resource. */
+  core.String selfLink;
+
+  CommitmentList();
+
+  CommitmentList.fromJson(core.Map _json) {
+    if (_json.containsKey("id")) {
+      id = _json["id"];
+    }
+    if (_json.containsKey("items")) {
+      items = _json["items"].map((value) => new Commitment.fromJson(value)).toList();
+    }
+    if (_json.containsKey("kind")) {
+      kind = _json["kind"];
+    }
+    if (_json.containsKey("nextPageToken")) {
+      nextPageToken = _json["nextPageToken"];
+    }
+    if (_json.containsKey("selfLink")) {
+      selfLink = _json["selfLink"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (id != null) {
+      _json["id"] = id;
+    }
+    if (items != null) {
+      _json["items"] = items.map((value) => (value).toJson()).toList();
+    }
+    if (kind != null) {
+      _json["kind"] = kind;
+    }
+    if (nextPageToken != null) {
+      _json["nextPageToken"] = nextPageToken;
+    }
+    if (selfLink != null) {
+      _json["selfLink"] = selfLink;
+    }
+    return _json;
+  }
+}
+
+class CommitmentsScopedListWarningData {
+  /**
+   * [Output Only] A key that provides more detail on the warning being
+   * returned. For example, for warnings where there are no results in a list
+   * request for a particular zone, this key might be scope and the key value
+   * might be the zone name. Other examples might be a key indicating a
+   * deprecated resource and a suggested replacement, or a warning about invalid
+   * network settings (for example, if an instance attempts to perform IP
+   * forwarding but is not enabled for IP forwarding).
+   */
+  core.String key;
+  /** [Output Only] A warning data value corresponding to the key. */
+  core.String value;
+
+  CommitmentsScopedListWarningData();
+
+  CommitmentsScopedListWarningData.fromJson(core.Map _json) {
+    if (_json.containsKey("key")) {
+      key = _json["key"];
+    }
+    if (_json.containsKey("value")) {
+      value = _json["value"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (key != null) {
+      _json["key"] = key;
+    }
+    if (value != null) {
+      _json["value"] = value;
+    }
+    return _json;
+  }
+}
+
+/**
+ * [Output Only] Informational warning which replaces the list of commitments
+ * when the list is empty.
+ */
+class CommitmentsScopedListWarning {
+  /**
+   * [Output Only] A warning code, if applicable. For example, Compute Engine
+   * returns NO_RESULTS_ON_PAGE if there are no results in the response.
+   * Possible string values are:
+   * - "CLEANUP_FAILED"
+   * - "DEPRECATED_RESOURCE_USED"
+   * - "DISK_SIZE_LARGER_THAN_IMAGE_SIZE"
+   * - "FIELD_VALUE_OVERRIDEN"
+   * - "INJECTED_KERNELS_DEPRECATED"
+   * - "NEXT_HOP_ADDRESS_NOT_ASSIGNED"
+   * - "NEXT_HOP_CANNOT_IP_FORWARD"
+   * - "NEXT_HOP_INSTANCE_NOT_FOUND"
+   * - "NEXT_HOP_INSTANCE_NOT_ON_NETWORK"
+   * - "NEXT_HOP_NOT_RUNNING"
+   * - "NOT_CRITICAL_ERROR"
+   * - "NO_RESULTS_ON_PAGE"
+   * - "REQUIRED_TOS_AGREEMENT"
+   * - "RESOURCE_IN_USE_BY_OTHER_RESOURCE_WARNING"
+   * - "RESOURCE_NOT_DELETED"
+   * - "SINGLE_INSTANCE_PROPERTY_TEMPLATE"
+   * - "UNREACHABLE"
+   */
+  core.String code;
+  /**
+   * [Output Only] Metadata about this warning in key: value format. For
+   * example:
+   * "data": [ { "key": "scope", "value": "zones/us-east1-d" }
+   */
+  core.List<CommitmentsScopedListWarningData> data;
+  /** [Output Only] A human-readable description of the warning code. */
+  core.String message;
+
+  CommitmentsScopedListWarning();
+
+  CommitmentsScopedListWarning.fromJson(core.Map _json) {
+    if (_json.containsKey("code")) {
+      code = _json["code"];
+    }
+    if (_json.containsKey("data")) {
+      data = _json["data"].map((value) => new CommitmentsScopedListWarningData.fromJson(value)).toList();
+    }
+    if (_json.containsKey("message")) {
+      message = _json["message"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (code != null) {
+      _json["code"] = code;
+    }
+    if (data != null) {
+      _json["data"] = data.map((value) => (value).toJson()).toList();
+    }
+    if (message != null) {
+      _json["message"] = message;
+    }
+    return _json;
+  }
+}
+
+class CommitmentsScopedList {
+  /** [Output Only] List of commitments contained in this scope. */
+  core.List<Commitment> commitments;
+  /**
+   * [Output Only] Informational warning which replaces the list of commitments
+   * when the list is empty.
+   */
+  CommitmentsScopedListWarning warning;
+
+  CommitmentsScopedList();
+
+  CommitmentsScopedList.fromJson(core.Map _json) {
+    if (_json.containsKey("commitments")) {
+      commitments = _json["commitments"].map((value) => new Commitment.fromJson(value)).toList();
+    }
+    if (_json.containsKey("warning")) {
+      warning = new CommitmentsScopedListWarning.fromJson(_json["warning"]);
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (commitments != null) {
+      _json["commitments"] = commitments.map((value) => (value).toJson()).toList();
+    }
+    if (warning != null) {
+      _json["warning"] = (warning).toJson();
+    }
+    return _json;
+  }
+}
+
 /** Message containing connection draining configuration. */
 class ConnectionDraining {
   /**
@@ -22906,7 +24468,7 @@
 /** Guest OS features. */
 class GuestOsFeature {
   /**
-   * The type of supported feature. Currenty only VIRTIO_SCSI_MULTIQUEUE is
+   * The type of supported feature. Currently only VIRTIO_SCSI_MULTIQUEUE is
    * supported. For newer Windows images, the server might also populate this
    * property with the value WINDOWS to indicate that this is a Windows image.
    * This value is purely informational and does not enable or disable any
@@ -24294,6 +25856,10 @@
    */
   core.List<AttachedDisk> disks;
   /**
+   * List of the type and count of accelerator cards attached to the instance.
+   */
+  core.List<AcceleratorConfig> guestAccelerators;
+  /**
    * [Output Only] The unique identifier for the resource. This identifier is
    * defined by the server.
    */
@@ -24430,6 +25996,9 @@
     if (_json.containsKey("disks")) {
       disks = _json["disks"].map((value) => new AttachedDisk.fromJson(value)).toList();
     }
+    if (_json.containsKey("guestAccelerators")) {
+      guestAccelerators = _json["guestAccelerators"].map((value) => new AcceleratorConfig.fromJson(value)).toList();
+    }
     if (_json.containsKey("id")) {
       id = _json["id"];
     }
@@ -24497,6 +26066,9 @@
     if (disks != null) {
       _json["disks"] = disks.map((value) => (value).toJson()).toList();
     }
+    if (guestAccelerators != null) {
+      _json["guestAccelerators"] = guestAccelerators.map((value) => (value).toJson()).toList();
+    }
     if (id != null) {
       _json["id"] = id;
     }
@@ -26117,6 +27689,11 @@
    * from this template.
    */
   core.List<AttachedDisk> disks;
+  /**
+   * A list of guest accelerator cards' type and count to use for instances
+   * created from the instance template.
+   */
+  core.List<AcceleratorConfig> guestAccelerators;
   /** Labels to apply to instances that are created from this template. */
   core.Map<core.String, core.String> labels;
   /**
@@ -26163,6 +27740,9 @@
     if (_json.containsKey("disks")) {
       disks = _json["disks"].map((value) => new AttachedDisk.fromJson(value)).toList();
     }
+    if (_json.containsKey("guestAccelerators")) {
+      guestAccelerators = _json["guestAccelerators"].map((value) => new AcceleratorConfig.fromJson(value)).toList();
+    }
     if (_json.containsKey("labels")) {
       labels = _json["labels"];
     }
@@ -26197,6 +27777,9 @@
     if (disks != null) {
       _json["disks"] = disks.map((value) => (value).toJson()).toList();
     }
+    if (guestAccelerators != null) {
+      _json["guestAccelerators"] = guestAccelerators.map((value) => (value).toJson()).toList();
+    }
     if (labels != null) {
       _json["labels"] = labels;
     }
@@ -26627,6 +28210,29 @@
   }
 }
 
+class InstancesSetMachineResourcesRequest {
+  /**
+   * List of the type and count of accelerator cards attached to the instance.
+   */
+  core.List<AcceleratorConfig> guestAccelerators;
+
+  InstancesSetMachineResourcesRequest();
+
+  InstancesSetMachineResourcesRequest.fromJson(core.Map _json) {
+    if (_json.containsKey("guestAccelerators")) {
+      guestAccelerators = _json["guestAccelerators"].map((value) => new AcceleratorConfig.fromJson(value)).toList();
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (guestAccelerators != null) {
+      _json["guestAccelerators"] = guestAccelerators.map((value) => (value).toJson()).toList();
+    }
+    return _json;
+  }
+}
+
 class InstancesSetMachineTypeRequest {
   /**
    * Full or partial URL of the machine type resource. See Machine Types for a
@@ -29037,6 +30643,7 @@
    * - "AUTOSCALERS"
    * - "BACKEND_BUCKETS"
    * - "BACKEND_SERVICES"
+   * - "COMMITMENTS"
    * - "CPUS"
    * - "CPUS_ALL_REGIONS"
    * - "DISKS_TOTAL_GB"
@@ -29769,6 +31376,51 @@
   }
 }
 
+/**
+ * Commitment for a particular resource (a Commitment is composed of one or more
+ * of these).
+ */
+class ResourceCommitment {
+  /**
+   * The amount of the resource purchased (in a type-dependent unit, such as
+   * bytes). For vCPUs, this can just be an integer. For memory, this must be
+   * provided in MB. Memory must be a multiple of 256 MB, with up to 6.5GB of
+   * memory per every vCPU.
+   */
+  core.String amount;
+  /**
+   * Type of resource for which this commitment applies. Possible values are
+   * VCPU and MEMORY
+   * Possible string values are:
+   * - "MEMORY"
+   * - "UNSPECIFIED"
+   * - "VCPU"
+   */
+  core.String type;
+
+  ResourceCommitment();
+
+  ResourceCommitment.fromJson(core.Map _json) {
+    if (_json.containsKey("amount")) {
+      amount = _json["amount"];
+    }
+    if (_json.containsKey("type")) {
+      type = _json["type"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (amount != null) {
+      _json["amount"] = amount;
+    }
+    if (type != null) {
+      _json["type"] = type;
+    }
+    return _json;
+  }
+}
+
 class ResourceGroupReference {
   /**
    * A URI referencing one of the instance groups listed in the backend service.
diff --git a/generated/googleapis/lib/container/v1.dart b/generated/googleapis/lib/container/v1.dart
index f7b7a68..4271316 100644
--- a/generated/googleapis/lib/container/v1.dart
+++ b/generated/googleapis/lib/container/v1.dart
@@ -110,6 +110,63 @@
       _requester = client;
 
   /**
+   * Sets the addons of a specific cluster.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [projectId] - The Google Developers Console [project ID or project
+   * number](https://support.google.com/cloud/answer/6158840).
+   *
+   * [zone] - The name of the Google Compute Engine
+   * [zone](/compute/docs/zones#available) in which the cluster
+   * resides.
+   *
+   * [clusterId] - The name of the cluster to upgrade.
+   *
+   * Completes with a [Operation].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Operation> addons(SetAddonsConfigRequest request, core.String projectId, core.String zone, core.String clusterId) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (projectId == null) {
+      throw new core.ArgumentError("Parameter projectId is required.");
+    }
+    if (zone == null) {
+      throw new core.ArgumentError("Parameter zone is required.");
+    }
+    if (clusterId == null) {
+      throw new core.ArgumentError("Parameter clusterId is required.");
+    }
+
+    _url = 'v1/projects/' + commons.Escaper.ecapeVariable('$projectId') + '/zones/' + commons.Escaper.ecapeVariable('$zone') + '/clusters/' + commons.Escaper.ecapeVariable('$clusterId') + '/addons';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Operation.fromJson(data));
+  }
+
+  /**
    * Completes master IP rotation.
    *
    * [request] - The metadata request object.
@@ -448,6 +505,234 @@
   }
 
   /**
+   * Sets the locations of a specific cluster.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [projectId] - The Google Developers Console [project ID or project
+   * number](https://support.google.com/cloud/answer/6158840).
+   *
+   * [zone] - The name of the Google Compute Engine
+   * [zone](/compute/docs/zones#available) in which the cluster
+   * resides.
+   *
+   * [clusterId] - The name of the cluster to upgrade.
+   *
+   * Completes with a [Operation].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Operation> locations(SetLocationsRequest request, core.String projectId, core.String zone, core.String clusterId) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (projectId == null) {
+      throw new core.ArgumentError("Parameter projectId is required.");
+    }
+    if (zone == null) {
+      throw new core.ArgumentError("Parameter zone is required.");
+    }
+    if (clusterId == null) {
+      throw new core.ArgumentError("Parameter clusterId is required.");
+    }
+
+    _url = 'v1/projects/' + commons.Escaper.ecapeVariable('$projectId') + '/zones/' + commons.Escaper.ecapeVariable('$zone') + '/clusters/' + commons.Escaper.ecapeVariable('$clusterId') + '/locations';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Operation.fromJson(data));
+  }
+
+  /**
+   * Sets the logging service of a specific cluster.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [projectId] - The Google Developers Console [project ID or project
+   * number](https://support.google.com/cloud/answer/6158840).
+   *
+   * [zone] - The name of the Google Compute Engine
+   * [zone](/compute/docs/zones#available) in which the cluster
+   * resides.
+   *
+   * [clusterId] - The name of the cluster to upgrade.
+   *
+   * Completes with a [Operation].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Operation> logging(SetLoggingServiceRequest request, core.String projectId, core.String zone, core.String clusterId) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (projectId == null) {
+      throw new core.ArgumentError("Parameter projectId is required.");
+    }
+    if (zone == null) {
+      throw new core.ArgumentError("Parameter zone is required.");
+    }
+    if (clusterId == null) {
+      throw new core.ArgumentError("Parameter clusterId is required.");
+    }
+
+    _url = 'v1/projects/' + commons.Escaper.ecapeVariable('$projectId') + '/zones/' + commons.Escaper.ecapeVariable('$zone') + '/clusters/' + commons.Escaper.ecapeVariable('$clusterId') + '/logging';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Operation.fromJson(data));
+  }
+
+  /**
+   * Updates the master of a specific cluster.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [projectId] - The Google Developers Console [project ID or project
+   * number](https://support.google.com/cloud/answer/6158840).
+   *
+   * [zone] - The name of the Google Compute Engine
+   * [zone](/compute/docs/zones#available) in which the cluster
+   * resides.
+   *
+   * [clusterId] - The name of the cluster to upgrade.
+   *
+   * Completes with a [Operation].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Operation> master(UpdateMasterRequest request, core.String projectId, core.String zone, core.String clusterId) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (projectId == null) {
+      throw new core.ArgumentError("Parameter projectId is required.");
+    }
+    if (zone == null) {
+      throw new core.ArgumentError("Parameter zone is required.");
+    }
+    if (clusterId == null) {
+      throw new core.ArgumentError("Parameter clusterId is required.");
+    }
+
+    _url = 'v1/projects/' + commons.Escaper.ecapeVariable('$projectId') + '/zones/' + commons.Escaper.ecapeVariable('$zone') + '/clusters/' + commons.Escaper.ecapeVariable('$clusterId') + '/master';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Operation.fromJson(data));
+  }
+
+  /**
+   * Sets the monitoring service of a specific cluster.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [projectId] - The Google Developers Console [project ID or project
+   * number](https://support.google.com/cloud/answer/6158840).
+   *
+   * [zone] - The name of the Google Compute Engine
+   * [zone](/compute/docs/zones#available) in which the cluster
+   * resides.
+   *
+   * [clusterId] - The name of the cluster to upgrade.
+   *
+   * Completes with a [Operation].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Operation> monitoring(SetMonitoringServiceRequest request, core.String projectId, core.String zone, core.String clusterId) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (projectId == null) {
+      throw new core.ArgumentError("Parameter projectId is required.");
+    }
+    if (zone == null) {
+      throw new core.ArgumentError("Parameter zone is required.");
+    }
+    if (clusterId == null) {
+      throw new core.ArgumentError("Parameter clusterId is required.");
+    }
+
+    _url = 'v1/projects/' + commons.Escaper.ecapeVariable('$projectId') + '/zones/' + commons.Escaper.ecapeVariable('$zone') + '/clusters/' + commons.Escaper.ecapeVariable('$clusterId') + '/monitoring';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Operation.fromJson(data));
+  }
+
+  /**
    * Sets labels on a cluster.
    *
    * [request] - The metadata request object.
@@ -564,6 +849,63 @@
   }
 
   /**
+   * Enables/Disables Network Policy for a cluster.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [projectId] - The Google Developers Console [project ID or project
+   * number](https://developers.google.com/console/help/new/#projectnumber).
+   *
+   * [zone] - The name of the Google Compute Engine
+   * [zone](/compute/docs/zones#available) in which the cluster
+   * resides.
+   *
+   * [clusterId] - The name of the cluster.
+   *
+   * Completes with a [Operation].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Operation> setNetworkPolicy(SetNetworkPolicyRequest request, core.String projectId, core.String zone, core.String clusterId) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (projectId == null) {
+      throw new core.ArgumentError("Parameter projectId is required.");
+    }
+    if (zone == null) {
+      throw new core.ArgumentError("Parameter zone is required.");
+    }
+    if (clusterId == null) {
+      throw new core.ArgumentError("Parameter clusterId is required.");
+    }
+
+    _url = 'v1/projects/' + commons.Escaper.ecapeVariable('$projectId') + '/zones/' + commons.Escaper.ecapeVariable('$zone') + '/clusters/' + commons.Escaper.ecapeVariable('$clusterId') + ':setNetworkPolicy';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Operation.fromJson(data));
+  }
+
+  /**
    * Start master IP rotation.
    *
    * [request] - The metadata request object.
@@ -687,6 +1029,68 @@
       _requester = client;
 
   /**
+   * Sets the autoscaling settings of a specific node pool.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [projectId] - The Google Developers Console [project ID or project
+   * number](https://support.google.com/cloud/answer/6158840).
+   *
+   * [zone] - The name of the Google Compute Engine
+   * [zone](/compute/docs/zones#available) in which the cluster
+   * resides.
+   *
+   * [clusterId] - The name of the cluster to upgrade.
+   *
+   * [nodePoolId] - The name of the node pool to upgrade.
+   *
+   * Completes with a [Operation].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Operation> autoscaling(SetNodePoolAutoscalingRequest request, core.String projectId, core.String zone, core.String clusterId, core.String nodePoolId) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (projectId == null) {
+      throw new core.ArgumentError("Parameter projectId is required.");
+    }
+    if (zone == null) {
+      throw new core.ArgumentError("Parameter zone is required.");
+    }
+    if (clusterId == null) {
+      throw new core.ArgumentError("Parameter clusterId is required.");
+    }
+    if (nodePoolId == null) {
+      throw new core.ArgumentError("Parameter nodePoolId is required.");
+    }
+
+    _url = 'v1/projects/' + commons.Escaper.ecapeVariable('$projectId') + '/zones/' + commons.Escaper.ecapeVariable('$zone') + '/clusters/' + commons.Escaper.ecapeVariable('$clusterId') + '/nodePools/' + commons.Escaper.ecapeVariable('$nodePoolId') + '/autoscaling';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Operation.fromJson(data));
+  }
+
+  /**
    * Creates a node pool for a cluster.
    *
    * [request] - The metadata request object.
@@ -1034,6 +1438,130 @@
     return _response.then((data) => new Operation.fromJson(data));
   }
 
+  /**
+   * Sets the size of a specific node pool.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [projectId] - The Google Developers Console [project ID or project
+   * number](https://support.google.com/cloud/answer/6158840).
+   *
+   * [zone] - The name of the Google Compute Engine
+   * [zone](/compute/docs/zones#available) in which the cluster
+   * resides.
+   *
+   * [clusterId] - The name of the cluster to update.
+   *
+   * [nodePoolId] - The name of the node pool to update.
+   *
+   * Completes with a [Operation].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Operation> setSize(SetNodePoolSizeRequest request, core.String projectId, core.String zone, core.String clusterId, core.String nodePoolId) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (projectId == null) {
+      throw new core.ArgumentError("Parameter projectId is required.");
+    }
+    if (zone == null) {
+      throw new core.ArgumentError("Parameter zone is required.");
+    }
+    if (clusterId == null) {
+      throw new core.ArgumentError("Parameter clusterId is required.");
+    }
+    if (nodePoolId == null) {
+      throw new core.ArgumentError("Parameter nodePoolId is required.");
+    }
+
+    _url = 'v1/projects/' + commons.Escaper.ecapeVariable('$projectId') + '/zones/' + commons.Escaper.ecapeVariable('$zone') + '/clusters/' + commons.Escaper.ecapeVariable('$clusterId') + '/nodePools/' + commons.Escaper.ecapeVariable('$nodePoolId') + '/setSize';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Operation.fromJson(data));
+  }
+
+  /**
+   * Updates the version and/or image type of a specific node pool.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [projectId] - The Google Developers Console [project ID or project
+   * number](https://support.google.com/cloud/answer/6158840).
+   *
+   * [zone] - The name of the Google Compute Engine
+   * [zone](/compute/docs/zones#available) in which the cluster
+   * resides.
+   *
+   * [clusterId] - The name of the cluster to upgrade.
+   *
+   * [nodePoolId] - The name of the node pool to upgrade.
+   *
+   * Completes with a [Operation].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Operation> update(UpdateNodePoolRequest request, core.String projectId, core.String zone, core.String clusterId, core.String nodePoolId) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (projectId == null) {
+      throw new core.ArgumentError("Parameter projectId is required.");
+    }
+    if (zone == null) {
+      throw new core.ArgumentError("Parameter zone is required.");
+    }
+    if (clusterId == null) {
+      throw new core.ArgumentError("Parameter clusterId is required.");
+    }
+    if (nodePoolId == null) {
+      throw new core.ArgumentError("Parameter nodePoolId is required.");
+    }
+
+    _url = 'v1/projects/' + commons.Escaper.ecapeVariable('$projectId') + '/zones/' + commons.Escaper.ecapeVariable('$zone') + '/clusters/' + commons.Escaper.ecapeVariable('$clusterId') + '/nodePools/' + commons.Escaper.ecapeVariable('$nodePoolId') + '/update';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Operation.fromJson(data));
+  }
+
 }
 
 
@@ -1296,6 +1824,28 @@
   }
 }
 
+/** Configuration for client certificates on the cluster. */
+class ClientCertificateConfig {
+  /** Issue a client certificate. */
+  core.bool issueClientCertificate;
+
+  ClientCertificateConfig();
+
+  ClientCertificateConfig.fromJson(core.Map _json) {
+    if (_json.containsKey("issueClientCertificate")) {
+      issueClientCertificate = _json["issueClientCertificate"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (issueClientCertificate != null) {
+      _json["issueClientCertificate"] = issueClientCertificate;
+    }
+    return _json;
+  }
+}
+
 /** A Google Container Engine cluster. */
 class Cluster {
   /** Configurations for the various addons available to run in the cluster. */
@@ -1371,6 +1921,8 @@
    * cluster.
    */
   core.List<core.String> instanceGroupUrls;
+  /** Configuration for cluster IP allocation. */
+  IPAllocationPolicy ipAllocationPolicy;
   /** The fingerprint of the set of labels for this cluster. */
   core.String labelFingerprint;
   /** Configuration for the legacy ABAC authorization mode. */
@@ -1417,6 +1969,8 @@
    * will be used.
    */
   core.String network;
+  /** Configuration options for the NetworkPolicy feature. */
+  NetworkPolicy networkPolicy;
   /**
    * Parameters used in creating the cluster's nodes.
    * See `nodeConfig` for the description of its properties.
@@ -1535,6 +2089,9 @@
     if (_json.containsKey("instanceGroupUrls")) {
       instanceGroupUrls = _json["instanceGroupUrls"];
     }
+    if (_json.containsKey("ipAllocationPolicy")) {
+      ipAllocationPolicy = new IPAllocationPolicy.fromJson(_json["ipAllocationPolicy"]);
+    }
     if (_json.containsKey("labelFingerprint")) {
       labelFingerprint = _json["labelFingerprint"];
     }
@@ -1559,6 +2116,9 @@
     if (_json.containsKey("network")) {
       network = _json["network"];
     }
+    if (_json.containsKey("networkPolicy")) {
+      networkPolicy = new NetworkPolicy.fromJson(_json["networkPolicy"]);
+    }
     if (_json.containsKey("nodeConfig")) {
       nodeConfig = new NodeConfig.fromJson(_json["nodeConfig"]);
     }
@@ -1632,6 +2192,9 @@
     if (instanceGroupUrls != null) {
       _json["instanceGroupUrls"] = instanceGroupUrls;
     }
+    if (ipAllocationPolicy != null) {
+      _json["ipAllocationPolicy"] = (ipAllocationPolicy).toJson();
+    }
     if (labelFingerprint != null) {
       _json["labelFingerprint"] = labelFingerprint;
     }
@@ -1656,6 +2219,9 @@
     if (network != null) {
       _json["network"] = network;
     }
+    if (networkPolicy != null) {
+      _json["networkPolicy"] = (networkPolicy).toJson();
+    }
     if (nodeConfig != null) {
       _json["nodeConfig"] = (nodeConfig).toJson();
     }
@@ -1953,6 +2519,123 @@
   }
 }
 
+/** Configuration for controlling how IPs are allocated in the cluster. */
+class IPAllocationPolicy {
+  /**
+   * The IP address range for the cluster pod IPs. If this field is set, then
+   * `cluster.cluster_ipv4_cidr` must be left blank.
+   *
+   * This field is only applicable when `use_ip_aliases` is true.
+   *
+   * Set to blank to have a range will be chosen with the default size.
+   *
+   * Set to /netmask (e.g. `/14`) to have a range be 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.
+   */
+  core.String clusterIpv4Cidr;
+  /**
+   * Whether a new subnetwork will be created automatically for the cluster.
+   *
+   * This field is only applicable when `use_ip_aliases` is true.
+   */
+  core.bool createSubnetwork;
+  /**
+   * The IP address range of the instance IPs in this cluster.
+   *
+   * This is applicable only if `create_subnetwork` is true.
+   *
+   * Set to blank to have a range will be chosen with the default size.
+   *
+   * Set to /netmask (e.g. `/14`) to have a range be 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.
+   */
+  core.String nodeIpv4Cidr;
+  /**
+   * The IP address range of the services IPs in this cluster. If blank, a range
+   * will be automatically chosen with the default size.
+   *
+   * This field is only applicable when `use_ip_aliases` is true.
+   *
+   * Set to blank to have a range will be chosen with the default size.
+   *
+   * Set to /netmask (e.g. `/14`) to have a range be 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.
+   */
+  core.String servicesIpv4Cidr;
+  /**
+   * A custom subnetwork name to be used if `create_subnetwork` is true.  If
+   * this field is empty, then an automatic name will choosen for the new
+   * subnetwork.
+   */
+  core.String subnetworkName;
+  /** Whether alias IPs will be used for pod IPs in the cluster. */
+  core.bool useIpAliases;
+
+  IPAllocationPolicy();
+
+  IPAllocationPolicy.fromJson(core.Map _json) {
+    if (_json.containsKey("clusterIpv4Cidr")) {
+      clusterIpv4Cidr = _json["clusterIpv4Cidr"];
+    }
+    if (_json.containsKey("createSubnetwork")) {
+      createSubnetwork = _json["createSubnetwork"];
+    }
+    if (_json.containsKey("nodeIpv4Cidr")) {
+      nodeIpv4Cidr = _json["nodeIpv4Cidr"];
+    }
+    if (_json.containsKey("servicesIpv4Cidr")) {
+      servicesIpv4Cidr = _json["servicesIpv4Cidr"];
+    }
+    if (_json.containsKey("subnetworkName")) {
+      subnetworkName = _json["subnetworkName"];
+    }
+    if (_json.containsKey("useIpAliases")) {
+      useIpAliases = _json["useIpAliases"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (clusterIpv4Cidr != null) {
+      _json["clusterIpv4Cidr"] = clusterIpv4Cidr;
+    }
+    if (createSubnetwork != null) {
+      _json["createSubnetwork"] = createSubnetwork;
+    }
+    if (nodeIpv4Cidr != null) {
+      _json["nodeIpv4Cidr"] = nodeIpv4Cidr;
+    }
+    if (servicesIpv4Cidr != null) {
+      _json["servicesIpv4Cidr"] = servicesIpv4Cidr;
+    }
+    if (subnetworkName != null) {
+      _json["subnetworkName"] = subnetworkName;
+    }
+    if (useIpAliases != null) {
+      _json["useIpAliases"] = useIpAliases;
+    }
+    return _json;
+  }
+}
+
 /**
  * Configuration for the legacy Attribute Based Access Control authorization
  * mode.
@@ -2086,6 +2769,11 @@
    */
   core.String clientCertificate;
   /**
+   * Configuration for client certificate authentication on the cluster.  If no
+   * configuration is specified, a client certificate is issued.
+   */
+  ClientCertificateConfig clientCertificateConfig;
+  /**
    * [Output only] Base64-encoded private key used by clients to authenticate
    * to the cluster endpoint.
    */
@@ -2115,6 +2803,9 @@
     if (_json.containsKey("clientCertificate")) {
       clientCertificate = _json["clientCertificate"];
     }
+    if (_json.containsKey("clientCertificateConfig")) {
+      clientCertificateConfig = new ClientCertificateConfig.fromJson(_json["clientCertificateConfig"]);
+    }
     if (_json.containsKey("clientKey")) {
       clientKey = _json["clientKey"];
     }
@@ -2134,6 +2825,9 @@
     if (clientCertificate != null) {
       _json["clientCertificate"] = clientCertificate;
     }
+    if (clientCertificateConfig != null) {
+      _json["clientCertificateConfig"] = (clientCertificateConfig).toJson();
+    }
     if (clientKey != null) {
       _json["clientKey"] = clientKey;
     }
@@ -2150,6 +2844,44 @@
   }
 }
 
+/**
+ * Configuration options for the NetworkPolicy feature.
+ * https://kubernetes.io/docs/concepts/services-networking/networkpolicies/
+ */
+class NetworkPolicy {
+  /** Whether network policy is enabled on the cluster. */
+  core.bool enabled;
+  /**
+   * The selected network policy provider.
+   * Possible string values are:
+   * - "UNKNOWN" : Not set
+   * - "CALICO" : Tigera (Calico Felix).
+   */
+  core.String provider;
+
+  NetworkPolicy();
+
+  NetworkPolicy.fromJson(core.Map _json) {
+    if (_json.containsKey("enabled")) {
+      enabled = _json["enabled"];
+    }
+    if (_json.containsKey("provider")) {
+      provider = _json["provider"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (enabled != null) {
+      _json["enabled"] = enabled;
+    }
+    if (provider != null) {
+      _json["provider"] = provider;
+    }
+    return _json;
+  }
+}
+
 /** Parameters that describe the nodes in a cluster. */
 class NodeConfig {
   /**
@@ -2576,6 +3308,8 @@
    * - "AUTO_UPGRADE_NODES" : Automatic node upgrade.
    * - "SET_LABELS" : Set labels.
    * - "SET_MASTER_AUTH" : Set/generate master auth materials
+   * - "SET_NODE_POOL_SIZE" : Set node pool size.
+   * - "SET_NETWORK_POLICY" : Updates network policy for a cluster.
    */
   core.String operationType;
   /** Server-defined URL for the resource. */
@@ -2732,6 +3466,31 @@
   }
 }
 
+/** SetAddonsConfigRequest sets the addons associated with the cluster. */
+class SetAddonsConfigRequest {
+  /**
+   * The desired configurations for the various addons available to run in the
+   * cluster.
+   */
+  AddonsConfig addonsConfig;
+
+  SetAddonsConfigRequest();
+
+  SetAddonsConfigRequest.fromJson(core.Map _json) {
+    if (_json.containsKey("addonsConfig")) {
+      addonsConfig = new AddonsConfig.fromJson(_json["addonsConfig"]);
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (addonsConfig != null) {
+      _json["addonsConfig"] = (addonsConfig).toJson();
+    }
+    return _json;
+  }
+}
+
 /**
  * SetLabelsRequest sets the Google Cloud Platform labels on a Google Container
  * Engine cluster, which will in turn set them for Google Compute Engine
@@ -2798,6 +3557,64 @@
   }
 }
 
+/** SetLocationsRequest sets the locations of the cluster. */
+class SetLocationsRequest {
+  /**
+   * The desired list of Google Compute Engine
+   * [locations](/compute/docs/zones#available) in which the cluster's nodes
+   * should be located. Changing the locations a cluster is in will result
+   * in nodes being either created or removed from the cluster, depending on
+   * whether locations are being added or removed.
+   *
+   * This list must always include the cluster's primary zone.
+   */
+  core.List<core.String> locations;
+
+  SetLocationsRequest();
+
+  SetLocationsRequest.fromJson(core.Map _json) {
+    if (_json.containsKey("locations")) {
+      locations = _json["locations"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (locations != null) {
+      _json["locations"] = locations;
+    }
+    return _json;
+  }
+}
+
+/** SetLoggingServiceRequest sets the logging service of a cluster. */
+class SetLoggingServiceRequest {
+  /**
+   * The logging service the cluster should use to write metrics.
+   * Currently available options:
+   *
+   * * "logging.googleapis.com" - the Google Cloud Logging service
+   * * "none" - no metrics will be exported from the cluster
+   */
+  core.String loggingService;
+
+  SetLoggingServiceRequest();
+
+  SetLoggingServiceRequest.fromJson(core.Map _json) {
+    if (_json.containsKey("loggingService")) {
+      loggingService = _json["loggingService"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (loggingService != null) {
+      _json["loggingService"] = loggingService;
+    }
+    return _json;
+  }
+}
+
 /** SetMasterAuthRequest updates the admin password of a cluster. */
 class SetMasterAuthRequest {
   /**
@@ -2834,6 +3651,80 @@
   }
 }
 
+/** SetMonitoringServiceRequest sets the monitoring service of a cluster. */
+class SetMonitoringServiceRequest {
+  /**
+   * The monitoring service the cluster should use to write metrics.
+   * Currently available options:
+   *
+   * * "monitoring.googleapis.com" - the Google Cloud Monitoring service
+   * * "none" - no metrics will be exported from the cluster
+   */
+  core.String monitoringService;
+
+  SetMonitoringServiceRequest();
+
+  SetMonitoringServiceRequest.fromJson(core.Map _json) {
+    if (_json.containsKey("monitoringService")) {
+      monitoringService = _json["monitoringService"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (monitoringService != null) {
+      _json["monitoringService"] = monitoringService;
+    }
+    return _json;
+  }
+}
+
+/** SetNetworkPolicyRequest enables/disables network policy for a cluster. */
+class SetNetworkPolicyRequest {
+  /** Configuration options for the NetworkPolicy feature. */
+  NetworkPolicy networkPolicy;
+
+  SetNetworkPolicyRequest();
+
+  SetNetworkPolicyRequest.fromJson(core.Map _json) {
+    if (_json.containsKey("networkPolicy")) {
+      networkPolicy = new NetworkPolicy.fromJson(_json["networkPolicy"]);
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (networkPolicy != null) {
+      _json["networkPolicy"] = (networkPolicy).toJson();
+    }
+    return _json;
+  }
+}
+
+/**
+ * SetNodePoolAutoscalingRequest sets the autoscaler settings of a node pool.
+ */
+class SetNodePoolAutoscalingRequest {
+  /** Autoscaling configuration for the node pool. */
+  NodePoolAutoscaling autoscaling;
+
+  SetNodePoolAutoscalingRequest();
+
+  SetNodePoolAutoscalingRequest.fromJson(core.Map _json) {
+    if (_json.containsKey("autoscaling")) {
+      autoscaling = new NodePoolAutoscaling.fromJson(_json["autoscaling"]);
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (autoscaling != null) {
+      _json["autoscaling"] = (autoscaling).toJson();
+    }
+    return _json;
+  }
+}
+
 /**
  * SetNodePoolManagementRequest sets the node management properties of a node
  * pool.
@@ -2860,6 +3751,31 @@
 }
 
 /**
+ * SetNodePoolSizeRequest sets the size a node
+ * pool.
+ */
+class SetNodePoolSizeRequest {
+  /** The desired node count for the pool. */
+  core.int nodeCount;
+
+  SetNodePoolSizeRequest();
+
+  SetNodePoolSizeRequest.fromJson(core.Map _json) {
+    if (_json.containsKey("nodeCount")) {
+      nodeCount = _json["nodeCount"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (nodeCount != null) {
+      _json["nodeCount"] = nodeCount;
+    }
+    return _json;
+  }
+}
+
+/**
  * StartIPRotationRequest creates a new IP for the cluster and then performs
  * a node upgrade on each node pool to point to the new IP.
  */
@@ -2897,3 +3813,63 @@
     return _json;
   }
 }
+
+/** UpdateMasterRequest updates the master of the cluster. */
+class UpdateMasterRequest {
+  /**
+   * The Kubernetes version to change the master to. The only valid value is the
+   * latest supported version. Use "-" to have the server automatically select
+   * the latest version.
+   */
+  core.String masterVersion;
+
+  UpdateMasterRequest();
+
+  UpdateMasterRequest.fromJson(core.Map _json) {
+    if (_json.containsKey("masterVersion")) {
+      masterVersion = _json["masterVersion"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (masterVersion != null) {
+      _json["masterVersion"] = masterVersion;
+    }
+    return _json;
+  }
+}
+
+/** UpdateNodePoolRequests update a node pool's image and/or version. */
+class UpdateNodePoolRequest {
+  /** The desired image type for the node pool. */
+  core.String imageType;
+  /**
+   * The Kubernetes version to change the nodes to (typically an
+   * upgrade). Use `-` to upgrade to the latest version supported by
+   * the server.
+   */
+  core.String nodeVersion;
+
+  UpdateNodePoolRequest();
+
+  UpdateNodePoolRequest.fromJson(core.Map _json) {
+    if (_json.containsKey("imageType")) {
+      imageType = _json["imageType"];
+    }
+    if (_json.containsKey("nodeVersion")) {
+      nodeVersion = _json["nodeVersion"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (imageType != null) {
+      _json["imageType"] = imageType;
+    }
+    if (nodeVersion != null) {
+      _json["nodeVersion"] = nodeVersion;
+    }
+    return _json;
+  }
+}
diff --git a/generated/googleapis/lib/content/v2.dart b/generated/googleapis/lib/content/v2.dart
index c8ad091..4149a9a 100644
--- a/generated/googleapis/lib/content/v2.dart
+++ b/generated/googleapis/lib/content/v2.dart
@@ -83,7 +83,9 @@
 
   /**
    * Claims the website of a Merchant Center sub-account. This method can only
-   * be called for multi-client accounts.
+   * be called for accounts to which the managing account has access: either the
+   * managing account itself or sub-accounts if the managing account is a
+   * multi-client account.
    *
    * Request parameters:
    *
diff --git a/generated/googleapis/lib/dataproc/v1.dart b/generated/googleapis/lib/dataproc/v1.dart
index 59c9c3e..d376dc8 100644
--- a/generated/googleapis/lib/dataproc/v1.dart
+++ b/generated/googleapis/lib/dataproc/v1.dart
@@ -278,6 +278,10 @@
    * [region] - Required. The Cloud Dataproc region in which to handle the
    * request.
    *
+   * [pageToken] - Optional. The standard List page token.
+   *
+   * [pageSize] - Optional. The standard List page size.
+   *
    * [filter] - Optional. A filter constraining the clusters to list. Filters
    * are case-sensitive and have the following syntax:field = value AND field =
    * value ...where field is one of status.state, clusterName, or labels.[KEY],
@@ -290,10 +294,6 @@
    * implicit AND operator.Example filter:status.state = ACTIVE AND clusterName
    * = mycluster AND labels.env = staging AND labels.starred = *
    *
-   * [pageToken] - Optional. The standard List page token.
-   *
-   * [pageSize] - Optional. The standard List page size.
-   *
    * Completes with a [ListClustersResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -302,7 +302,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListClustersResponse> list(core.String projectId, core.String region, {core.String filter, core.String pageToken, core.int pageSize}) {
+  async.Future<ListClustersResponse> list(core.String projectId, core.String region, {core.String pageToken, core.int pageSize, core.String filter}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -316,15 +316,15 @@
     if (region == null) {
       throw new core.ArgumentError("Parameter region is required.");
     }
-    if (filter != null) {
-      _queryParams["filter"] = [filter];
-    }
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
+    if (filter != null) {
+      _queryParams["filter"] = [filter];
+    }
 
     _url = 'v1/projects/' + commons.Escaper.ecapeVariable('$projectId') + '/regions/' + commons.Escaper.ecapeVariable('$region') + '/clusters';
 
@@ -609,6 +609,11 @@
    * [region] - Required. The Cloud Dataproc region in which to handle the
    * request.
    *
+   * [pageSize] - Optional. The number of results to return in each response.
+   *
+   * [clusterName] - Optional. If set, the returned jobs list includes only jobs
+   * that were submitted to the named cluster.
+   *
    * [filter] - Optional. A filter constraining the jobs to list. Filters are
    * case-sensitive and have the following syntax:field = value AND field =
    * value ...where field is status.state or labels.[KEY], and [KEY] is a label
@@ -628,11 +633,6 @@
    * [pageToken] - Optional. The page token, returned by a previous call, to
    * request the next page of results.
    *
-   * [pageSize] - Optional. The number of results to return in each response.
-   *
-   * [clusterName] - Optional. If set, the returned jobs list includes only jobs
-   * that were submitted to the named cluster.
-   *
    * Completes with a [ListJobsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -641,7 +641,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListJobsResponse> list(core.String projectId, core.String region, {core.String filter, core.String jobStateMatcher, core.String pageToken, core.int pageSize, core.String clusterName}) {
+  async.Future<ListJobsResponse> list(core.String projectId, core.String region, {core.int pageSize, core.String clusterName, core.String filter, core.String jobStateMatcher, core.String pageToken}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -655,6 +655,12 @@
     if (region == null) {
       throw new core.ArgumentError("Parameter region is required.");
     }
+    if (pageSize != null) {
+      _queryParams["pageSize"] = ["${pageSize}"];
+    }
+    if (clusterName != null) {
+      _queryParams["clusterName"] = [clusterName];
+    }
     if (filter != null) {
       _queryParams["filter"] = [filter];
     }
@@ -664,12 +670,6 @@
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
-    if (pageSize != null) {
-      _queryParams["pageSize"] = ["${pageSize}"];
-    }
-    if (clusterName != null) {
-      _queryParams["clusterName"] = [clusterName];
-    }
 
     _url = 'v1/projects/' + commons.Escaper.ecapeVariable('$projectId') + '/regions/' + commons.Escaper.ecapeVariable('$region') + '/jobs';
 
@@ -958,12 +958,12 @@
    * [name] - The name of the operation's parent resource.
    * Value must have pattern "^projects/[^/]+/regions/[^/]+/operations$".
    *
+   * [filter] - The standard list filter.
+   *
    * [pageToken] - The standard list page token.
    *
    * [pageSize] - The standard list page size.
    *
-   * [filter] - The standard list filter.
-   *
    * Completes with a [ListOperationsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -972,7 +972,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListOperationsResponse> list(core.String name, {core.String pageToken, core.int pageSize, core.String filter}) {
+  async.Future<ListOperationsResponse> list(core.String name, {core.String filter, core.String pageToken, core.int pageSize}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -983,15 +983,15 @@
     if (name == null) {
       throw new core.ArgumentError("Parameter name is required.");
     }
+    if (filter != null) {
+      _queryParams["filter"] = [filter];
+    }
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
-    if (filter != null) {
-      _queryParams["filter"] = [filter];
-    }
 
     _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name');
 
@@ -1019,9 +1019,12 @@
    */
   core.int acceleratorCount;
   /**
-   * Full or partial URI of the accelerator type resource to expose to this
-   * instance. See Google Compute Engine AcceleratorTypes(
-   * /compute/docs/reference/beta/acceleratorTypes)
+   * Full URL, partial URI, or short name of the accelerator type resource to
+   * expose to this instance. See Google Compute Engine AcceleratorTypes(
+   * /compute/docs/reference/beta/acceleratorTypes)Examples *
+   * https://www.googleapis.com/compute/beta/projects/[project_id]/zones/us-east1-a/acceleratorTypes/nvidia-tesla-k80
+   * * projects/[project_id]/zones/us-east1-a/acceleratorTypes/nvidia-tesla-k80
+   * * nvidia-tesla-k80
    */
   core.String acceleratorTypeUri;
 
@@ -1621,8 +1624,11 @@
    * communications. Cannot be specified with subnetwork_uri. If neither
    * network_uri nor subnetwork_uri is specified, the "default" network of the
    * project is used, if it exists. Cannot be a "Custom Subnet Network" (see
-   * Using Subnetworks for more information). Example:
-   * https://www.googleapis.com/compute/v1/projects/[project_id]/regions/global/default.
+   * Using Subnetworks for more information).A full URL, partial URI, or short
+   * name are valid. Examples:
+   * https://www.googleapis.com/compute/v1/projects/[project_id]/regions/global/default
+   * projects/[project_id]/regions/global/default
+   * default
    */
   core.String networkUri;
   /**
@@ -1652,8 +1658,11 @@
   core.List<core.String> serviceAccountScopes;
   /**
    * Optional. The Google Compute Engine subnetwork to be used for machine
-   * communications. Cannot be specified with network_uri. Example:
-   * https://www.googleapis.com/compute/v1/projects/[project_id]/regions/us-east1/sub0.
+   * communications. Cannot be specified with network_uri.A full URL, partial
+   * URI, or short name are valid. Examples:
+   * https://www.googleapis.com/compute/v1/projects/[project_id]/regions/us-east1/sub0
+   * projects/[project_id]/regions/us-east1/sub0
+   * sub0
    */
   core.String subnetworkUri;
   /**
@@ -1662,9 +1671,14 @@
    */
   core.List<core.String> tags;
   /**
-   * Required. The zone where the Google Compute Engine cluster will be located.
-   * Example:
-   * https://www.googleapis.com/compute/v1/projects/[project_id]/zones/[zone].
+   * Optional. The zone where the Google Compute Engine cluster will be located.
+   * On a create request, it is required in the "global" region. If omitted in a
+   * non-global Cloud Dataproc region, the service will pick a zone in the
+   * corresponding GCE region. On a get request, zone will always be present.A
+   * full URL, partial URI, or short name are valid. Examples:
+   * https://www.googleapis.com/compute/v1/projects/[project_id]/zones/[zone]
+   * projects/[project_id]/zones/[zone]
+   * us-central1-f
    */
   core.String zoneUri;
 
@@ -1948,9 +1962,11 @@
    */
   core.bool isPreemptible;
   /**
-   * Required. The Google Compute Engine machine type used for cluster
-   * instances. Example:
-   * https://www.googleapis.com/compute/v1/projects/[project_id]/zones/us-east1-a/machineTypes/n1-standard-2.
+   * Optional. The Google Compute Engine machine type used for cluster
+   * instances.A full URL, partial URI, or short name are valid. Examples:
+   * https://www.googleapis.com/compute/v1/projects/[project_id]/zones/us-east1-a/machineTypes/n1-standard-2
+   * projects/[project_id]/zones/us-east1-a/machineTypes/n1-standard-2
+   * n1-standard-2
    */
   core.String machineTypeUri;
   /**
@@ -1959,7 +1975,7 @@
    */
   ManagedGroupConfig managedGroupConfig;
   /**
-   * Required. The number of VM instances in the instance group. For master
+   * Optional. The number of VM instances in the instance group. For master
    * instance groups, must be set to 1.
    */
   core.int numInstances;
diff --git a/generated/googleapis/lib/dataproc/v1beta2.dart b/generated/googleapis/lib/dataproc/v1beta2.dart
new file mode 100644
index 0000000..b5d6dfe
--- /dev/null
+++ b/generated/googleapis/lib/dataproc/v1beta2.dart
@@ -0,0 +1,3260 @@
+// This is a generated file (see the discoveryapis_generator project).
+
+library googleapis.dataproc.v1beta2;
+
+import 'dart:core' as core;
+import 'dart:async' as async;
+import 'dart:convert' as convert;
+
+import 'package:_discoveryapis_commons/_discoveryapis_commons.dart' as commons;
+import 'package:http/http.dart' as http;
+
+export 'package:_discoveryapis_commons/_discoveryapis_commons.dart' show
+    ApiRequestError, DetailedApiRequestError;
+
+const core.String USER_AGENT = 'dart-api-client dataproc/v1beta2';
+
+/** Manages Hadoop-based clusters and jobs on Google Cloud Platform. */
+class DataprocApi {
+  /** View and manage your data across Google Cloud Platform services */
+  static const CloudPlatformScope = "https://www.googleapis.com/auth/cloud-platform";
+
+
+  final commons.ApiRequester _requester;
+
+  ProjectsResourceApi get projects => new ProjectsResourceApi(_requester);
+
+  DataprocApi(http.Client client, {core.String rootUrl: "https://dataproc.googleapis.com/", core.String servicePath: ""}) :
+      _requester = new commons.ApiRequester(client, rootUrl, servicePath, USER_AGENT);
+}
+
+
+class ProjectsResourceApi {
+  final commons.ApiRequester _requester;
+
+  ProjectsRegionsResourceApi get regions => new ProjectsRegionsResourceApi(_requester);
+
+  ProjectsResourceApi(commons.ApiRequester client) : 
+      _requester = client;
+}
+
+
+class ProjectsRegionsResourceApi {
+  final commons.ApiRequester _requester;
+
+  ProjectsRegionsClustersResourceApi get clusters => new ProjectsRegionsClustersResourceApi(_requester);
+  ProjectsRegionsJobsResourceApi get jobs => new ProjectsRegionsJobsResourceApi(_requester);
+  ProjectsRegionsOperationsResourceApi get operations => new ProjectsRegionsOperationsResourceApi(_requester);
+
+  ProjectsRegionsResourceApi(commons.ApiRequester client) : 
+      _requester = client;
+}
+
+
+class ProjectsRegionsClustersResourceApi {
+  final commons.ApiRequester _requester;
+
+  ProjectsRegionsClustersResourceApi(commons.ApiRequester client) : 
+      _requester = client;
+
+  /**
+   * Creates a cluster in a project.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [projectId] - Required. The ID of the Google Cloud Platform project that
+   * the cluster belongs to.
+   *
+   * [region] - Required. The Cloud Dataproc region in which to handle the
+   * request.
+   *
+   * Completes with a [Operation].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Operation> create(Cluster request, core.String projectId, core.String region) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (projectId == null) {
+      throw new core.ArgumentError("Parameter projectId is required.");
+    }
+    if (region == null) {
+      throw new core.ArgumentError("Parameter region is required.");
+    }
+
+    _url = 'v1beta2/projects/' + commons.Escaper.ecapeVariable('$projectId') + '/regions/' + commons.Escaper.ecapeVariable('$region') + '/clusters';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Operation.fromJson(data));
+  }
+
+  /**
+   * Deletes a cluster in a project.
+   *
+   * Request parameters:
+   *
+   * [projectId] - Required. The ID of the Google Cloud Platform project that
+   * the cluster belongs to.
+   *
+   * [region] - Required. The Cloud Dataproc region in which to handle the
+   * request.
+   *
+   * [clusterName] - Required. The cluster name.
+   *
+   * Completes with a [Operation].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Operation> delete(core.String projectId, core.String region, core.String clusterName) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (projectId == null) {
+      throw new core.ArgumentError("Parameter projectId is required.");
+    }
+    if (region == null) {
+      throw new core.ArgumentError("Parameter region is required.");
+    }
+    if (clusterName == null) {
+      throw new core.ArgumentError("Parameter clusterName is required.");
+    }
+
+    _url = 'v1beta2/projects/' + commons.Escaper.ecapeVariable('$projectId') + '/regions/' + commons.Escaper.ecapeVariable('$region') + '/clusters/' + commons.Escaper.ecapeVariable('$clusterName');
+
+    var _response = _requester.request(_url,
+                                       "DELETE",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Operation.fromJson(data));
+  }
+
+  /**
+   * Gets cluster diagnostic information. After the operation completes, the
+   * Operation.response field contains DiagnoseClusterOutputLocation.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [projectId] - Required. The ID of the Google Cloud Platform project that
+   * the cluster belongs to.
+   *
+   * [region] - Required. The Cloud Dataproc region in which to handle the
+   * request.
+   *
+   * [clusterName] - Required. The cluster name.
+   *
+   * Completes with a [Operation].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Operation> diagnose(DiagnoseClusterRequest request, core.String projectId, core.String region, core.String clusterName) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (projectId == null) {
+      throw new core.ArgumentError("Parameter projectId is required.");
+    }
+    if (region == null) {
+      throw new core.ArgumentError("Parameter region is required.");
+    }
+    if (clusterName == null) {
+      throw new core.ArgumentError("Parameter clusterName is required.");
+    }
+
+    _url = 'v1beta2/projects/' + commons.Escaper.ecapeVariable('$projectId') + '/regions/' + commons.Escaper.ecapeVariable('$region') + '/clusters/' + commons.Escaper.ecapeVariable('$clusterName') + ':diagnose';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Operation.fromJson(data));
+  }
+
+  /**
+   * Gets the resource representation for a cluster in a project.
+   *
+   * Request parameters:
+   *
+   * [projectId] - Required. The ID of the Google Cloud Platform project that
+   * the cluster belongs to.
+   *
+   * [region] - Required. The Cloud Dataproc region in which to handle the
+   * request.
+   *
+   * [clusterName] - Required. The cluster name.
+   *
+   * Completes with a [Cluster].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Cluster> get(core.String projectId, core.String region, core.String clusterName) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (projectId == null) {
+      throw new core.ArgumentError("Parameter projectId is required.");
+    }
+    if (region == null) {
+      throw new core.ArgumentError("Parameter region is required.");
+    }
+    if (clusterName == null) {
+      throw new core.ArgumentError("Parameter clusterName is required.");
+    }
+
+    _url = 'v1beta2/projects/' + commons.Escaper.ecapeVariable('$projectId') + '/regions/' + commons.Escaper.ecapeVariable('$region') + '/clusters/' + commons.Escaper.ecapeVariable('$clusterName');
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Cluster.fromJson(data));
+  }
+
+  /**
+   * Lists all regions/{region}/clusters in a project.
+   *
+   * Request parameters:
+   *
+   * [projectId] - Required. The ID of the Google Cloud Platform project that
+   * the cluster belongs to.
+   *
+   * [region] - Required. The Cloud Dataproc region in which to handle the
+   * request.
+   *
+   * [filter] - Optional. A filter constraining the clusters to list. Filters
+   * are case-sensitive and have the following syntax:field = value AND field =
+   * value ...where field is one of status.state, clusterName, or labels.[KEY],
+   * and [KEY] is a label key. value can be * to match all values. status.state
+   * can be one of the following: ACTIVE, INACTIVE, CREATING, RUNNING, ERROR,
+   * DELETING, or UPDATING. ACTIVE contains the CREATING, UPDATING, and RUNNING
+   * states. INACTIVE contains the DELETING and ERROR states. clusterName is the
+   * name of the cluster provided at creation time. Only the logical AND
+   * operator is supported; space-separated items are treated as having an
+   * implicit AND operator.Example filter:status.state = ACTIVE AND clusterName
+   * = mycluster AND labels.env = staging AND labels.starred = *
+   *
+   * [pageToken] - Optional. The standard List page token.
+   *
+   * [pageSize] - Optional. The standard List page size.
+   *
+   * Completes with a [ListClustersResponse].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<ListClustersResponse> list(core.String projectId, core.String region, {core.String filter, core.String pageToken, core.int pageSize}) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (projectId == null) {
+      throw new core.ArgumentError("Parameter projectId is required.");
+    }
+    if (region == null) {
+      throw new core.ArgumentError("Parameter region is required.");
+    }
+    if (filter != null) {
+      _queryParams["filter"] = [filter];
+    }
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
+    if (pageSize != null) {
+      _queryParams["pageSize"] = ["${pageSize}"];
+    }
+
+    _url = 'v1beta2/projects/' + commons.Escaper.ecapeVariable('$projectId') + '/regions/' + commons.Escaper.ecapeVariable('$region') + '/clusters';
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new ListClustersResponse.fromJson(data));
+  }
+
+  /**
+   * Updates a cluster in a project.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [projectId] - Required. The ID of the Google Cloud Platform project the
+   * cluster belongs to.
+   *
+   * [region] - Required. The Cloud Dataproc region in which to handle the
+   * request.
+   *
+   * [clusterName] - Required. The cluster name.
+   *
+   * [updateMask] - Required. Specifies the path, relative to
+   * <code>Cluster</code>, of the field to update. For example, to change the
+   * number of workers in a cluster to 5, the <code>update_mask</code> parameter
+   * would be specified as <code>config.worker_config.num_instances</code>, and
+   * the PATCH request body would specify the new value, as follows:
+   * {
+   *   "config":{
+   *     "workerConfig":{
+   *       "numInstances":"5"
+   *     }
+   *   }
+   * }
+   * Similarly, to change the number of preemptible workers in a cluster to 5,
+   * the <code>update_mask</code> parameter would be
+   * <code>config.secondary_worker_config.num_instances</code>, and the PATCH
+   * request body would be set as follows:
+   * {
+   *   "config":{
+   *     "secondaryWorkerConfig":{
+   *       "numInstances":"5"
+   *     }
+   *   }
+   * }
+   * <strong>Note:</strong> currently only some fields can be updated:
+   * |Mask|Purpose| |labels|Updates labels|
+   * |config.worker_config.num_instances|Resize primary worker group|
+   * |config.secondary_worker_config.num_instances|Resize secondary worker
+   * group|
+   *
+   * Completes with a [Operation].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Operation> patch(Cluster request, core.String projectId, core.String region, core.String clusterName, {core.String updateMask}) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (projectId == null) {
+      throw new core.ArgumentError("Parameter projectId is required.");
+    }
+    if (region == null) {
+      throw new core.ArgumentError("Parameter region is required.");
+    }
+    if (clusterName == null) {
+      throw new core.ArgumentError("Parameter clusterName is required.");
+    }
+    if (updateMask != null) {
+      _queryParams["updateMask"] = [updateMask];
+    }
+
+    _url = 'v1beta2/projects/' + commons.Escaper.ecapeVariable('$projectId') + '/regions/' + commons.Escaper.ecapeVariable('$region') + '/clusters/' + commons.Escaper.ecapeVariable('$clusterName');
+
+    var _response = _requester.request(_url,
+                                       "PATCH",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Operation.fromJson(data));
+  }
+
+}
+
+
+class ProjectsRegionsJobsResourceApi {
+  final commons.ApiRequester _requester;
+
+  ProjectsRegionsJobsResourceApi(commons.ApiRequester client) : 
+      _requester = client;
+
+  /**
+   * Starts a job cancellation request. To access the job resource after
+   * cancellation, call regions/{region}/jobs.list or regions/{region}/jobs.get.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [projectId] - Required. The ID of the Google Cloud Platform project that
+   * the job belongs to.
+   *
+   * [region] - Required. The Cloud Dataproc region in which to handle the
+   * request.
+   *
+   * [jobId] - Required. The job ID.
+   *
+   * Completes with a [Job].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Job> cancel(CancelJobRequest request, core.String projectId, core.String region, core.String jobId) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (projectId == null) {
+      throw new core.ArgumentError("Parameter projectId is required.");
+    }
+    if (region == null) {
+      throw new core.ArgumentError("Parameter region is required.");
+    }
+    if (jobId == null) {
+      throw new core.ArgumentError("Parameter jobId is required.");
+    }
+
+    _url = 'v1beta2/projects/' + commons.Escaper.ecapeVariable('$projectId') + '/regions/' + commons.Escaper.ecapeVariable('$region') + '/jobs/' + commons.Escaper.ecapeVariable('$jobId') + ':cancel';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Job.fromJson(data));
+  }
+
+  /**
+   * Deletes the job from the project. If the job is active, the delete fails,
+   * and the response returns FAILED_PRECONDITION.
+   *
+   * Request parameters:
+   *
+   * [projectId] - Required. The ID of the Google Cloud Platform project that
+   * the job belongs to.
+   *
+   * [region] - Required. The Cloud Dataproc region in which to handle the
+   * request.
+   *
+   * [jobId] - Required. The job ID.
+   *
+   * Completes with a [Empty].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Empty> delete(core.String projectId, core.String region, core.String jobId) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (projectId == null) {
+      throw new core.ArgumentError("Parameter projectId is required.");
+    }
+    if (region == null) {
+      throw new core.ArgumentError("Parameter region is required.");
+    }
+    if (jobId == null) {
+      throw new core.ArgumentError("Parameter jobId is required.");
+    }
+
+    _url = 'v1beta2/projects/' + commons.Escaper.ecapeVariable('$projectId') + '/regions/' + commons.Escaper.ecapeVariable('$region') + '/jobs/' + commons.Escaper.ecapeVariable('$jobId');
+
+    var _response = _requester.request(_url,
+                                       "DELETE",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Empty.fromJson(data));
+  }
+
+  /**
+   * Gets the resource representation for a job in a project.
+   *
+   * Request parameters:
+   *
+   * [projectId] - Required. The ID of the Google Cloud Platform project that
+   * the job belongs to.
+   *
+   * [region] - Required. The Cloud Dataproc region in which to handle the
+   * request.
+   *
+   * [jobId] - Required. The job ID.
+   *
+   * Completes with a [Job].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Job> get(core.String projectId, core.String region, core.String jobId) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (projectId == null) {
+      throw new core.ArgumentError("Parameter projectId is required.");
+    }
+    if (region == null) {
+      throw new core.ArgumentError("Parameter region is required.");
+    }
+    if (jobId == null) {
+      throw new core.ArgumentError("Parameter jobId is required.");
+    }
+
+    _url = 'v1beta2/projects/' + commons.Escaper.ecapeVariable('$projectId') + '/regions/' + commons.Escaper.ecapeVariable('$region') + '/jobs/' + commons.Escaper.ecapeVariable('$jobId');
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Job.fromJson(data));
+  }
+
+  /**
+   * Lists regions/{region}/jobs in a project.
+   *
+   * Request parameters:
+   *
+   * [projectId] - Required. The ID of the Google Cloud Platform project that
+   * the job belongs to.
+   *
+   * [region] - Required. The Cloud Dataproc region in which to handle the
+   * request.
+   *
+   * [filter] - Optional. A filter constraining the jobs to list. Filters are
+   * case-sensitive and have the following syntax:field = value AND field =
+   * value ...where field is status.state or labels.[KEY], and [KEY] is a label
+   * key. value can be * to match all values. status.state can be either ACTIVE
+   * or INACTIVE. Only the logical AND operator is supported; space-separated
+   * items are treated as having an implicit AND operator.Example
+   * filter:status.state = ACTIVE AND labels.env = staging AND labels.starred =
+   * *
+   *
+   * [jobStateMatcher] - Optional. Specifies enumerated categories of jobs to
+   * list (default = match ALL jobs).
+   * Possible string values are:
+   * - "ALL" : A ALL.
+   * - "ACTIVE" : A ACTIVE.
+   * - "NON_ACTIVE" : A NON_ACTIVE.
+   *
+   * [pageToken] - Optional. The page token, returned by a previous call, to
+   * request the next page of results.
+   *
+   * [pageSize] - Optional. The number of results to return in each response.
+   *
+   * [clusterName] - Optional. If set, the returned jobs list includes only jobs
+   * that were submitted to the named cluster.
+   *
+   * Completes with a [ListJobsResponse].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<ListJobsResponse> list(core.String projectId, core.String region, {core.String filter, core.String jobStateMatcher, core.String pageToken, core.int pageSize, core.String clusterName}) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (projectId == null) {
+      throw new core.ArgumentError("Parameter projectId is required.");
+    }
+    if (region == null) {
+      throw new core.ArgumentError("Parameter region is required.");
+    }
+    if (filter != null) {
+      _queryParams["filter"] = [filter];
+    }
+    if (jobStateMatcher != null) {
+      _queryParams["jobStateMatcher"] = [jobStateMatcher];
+    }
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
+    if (pageSize != null) {
+      _queryParams["pageSize"] = ["${pageSize}"];
+    }
+    if (clusterName != null) {
+      _queryParams["clusterName"] = [clusterName];
+    }
+
+    _url = 'v1beta2/projects/' + commons.Escaper.ecapeVariable('$projectId') + '/regions/' + commons.Escaper.ecapeVariable('$region') + '/jobs';
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new ListJobsResponse.fromJson(data));
+  }
+
+  /**
+   * Updates a job in a project.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [projectId] - Required. The ID of the Google Cloud Platform project that
+   * the job belongs to.
+   *
+   * [region] - Required. The Cloud Dataproc region in which to handle the
+   * request.
+   *
+   * [jobId] - Required. The job ID.
+   *
+   * [updateMask] - Required. Specifies the path, relative to <code>Job</code>,
+   * of the field to update. For example, to update the labels of a Job the
+   * <code>update_mask</code> parameter would be specified as
+   * <code>labels</code>, and the PATCH request body would specify the new
+   * value. <strong>Note:</strong> Currently, <code>labels</code> is the only
+   * field that can be updated.
+   *
+   * Completes with a [Job].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Job> patch(Job request, core.String projectId, core.String region, core.String jobId, {core.String updateMask}) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (projectId == null) {
+      throw new core.ArgumentError("Parameter projectId is required.");
+    }
+    if (region == null) {
+      throw new core.ArgumentError("Parameter region is required.");
+    }
+    if (jobId == null) {
+      throw new core.ArgumentError("Parameter jobId is required.");
+    }
+    if (updateMask != null) {
+      _queryParams["updateMask"] = [updateMask];
+    }
+
+    _url = 'v1beta2/projects/' + commons.Escaper.ecapeVariable('$projectId') + '/regions/' + commons.Escaper.ecapeVariable('$region') + '/jobs/' + commons.Escaper.ecapeVariable('$jobId');
+
+    var _response = _requester.request(_url,
+                                       "PATCH",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Job.fromJson(data));
+  }
+
+  /**
+   * Submits a job to a cluster.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [projectId] - Required. The ID of the Google Cloud Platform project that
+   * the job belongs to.
+   *
+   * [region] - Required. The Cloud Dataproc region in which to handle the
+   * request.
+   *
+   * Completes with a [Job].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Job> submit(SubmitJobRequest request, core.String projectId, core.String region) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (projectId == null) {
+      throw new core.ArgumentError("Parameter projectId is required.");
+    }
+    if (region == null) {
+      throw new core.ArgumentError("Parameter region is required.");
+    }
+
+    _url = 'v1beta2/projects/' + commons.Escaper.ecapeVariable('$projectId') + '/regions/' + commons.Escaper.ecapeVariable('$region') + '/jobs:submit';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Job.fromJson(data));
+  }
+
+}
+
+
+class ProjectsRegionsOperationsResourceApi {
+  final commons.ApiRequester _requester;
+
+  ProjectsRegionsOperationsResourceApi(commons.ApiRequester client) : 
+      _requester = client;
+
+  /**
+   * Starts asynchronous cancellation on a long-running operation. The server
+   * makes a best effort to cancel the operation, but success is not guaranteed.
+   * If the server doesn't support this method, it returns
+   * google.rpc.Code.UNIMPLEMENTED. Clients can use Operations.GetOperation or
+   * other methods to check whether the cancellation succeeded or whether the
+   * operation completed despite cancellation. On successful cancellation, the
+   * operation is not deleted; instead, it becomes an operation with an
+   * Operation.error value with a google.rpc.Status.code of 1, corresponding to
+   * Code.CANCELLED.
+   *
+   * Request parameters:
+   *
+   * [name] - The name of the operation resource to be cancelled.
+   * Value must have pattern "^projects/[^/]+/regions/[^/]+/operations/[^/]+$".
+   *
+   * Completes with a [Empty].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Empty> cancel(core.String name) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (name == null) {
+      throw new core.ArgumentError("Parameter name is required.");
+    }
+
+    _url = 'v1beta2/' + commons.Escaper.ecapeVariableReserved('$name') + ':cancel';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Empty.fromJson(data));
+  }
+
+  /**
+   * Deletes a long-running operation. This method indicates that the client is
+   * no longer interested in the operation result. It does not cancel the
+   * operation. If the server doesn't support this method, it returns
+   * google.rpc.Code.UNIMPLEMENTED.
+   *
+   * Request parameters:
+   *
+   * [name] - The name of the operation resource to be deleted.
+   * Value must have pattern "^projects/[^/]+/regions/[^/]+/operations/[^/]+$".
+   *
+   * Completes with a [Empty].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Empty> delete(core.String name) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (name == null) {
+      throw new core.ArgumentError("Parameter name is required.");
+    }
+
+    _url = 'v1beta2/' + commons.Escaper.ecapeVariableReserved('$name');
+
+    var _response = _requester.request(_url,
+                                       "DELETE",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Empty.fromJson(data));
+  }
+
+  /**
+   * Gets the latest state of a long-running operation. Clients can use this
+   * method to poll the operation result at intervals as recommended by the API
+   * service.
+   *
+   * Request parameters:
+   *
+   * [name] - The name of the operation resource.
+   * Value must have pattern "^projects/[^/]+/regions/[^/]+/operations/[^/]+$".
+   *
+   * Completes with a [Operation].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Operation> get(core.String name) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (name == null) {
+      throw new core.ArgumentError("Parameter name is required.");
+    }
+
+    _url = 'v1beta2/' + commons.Escaper.ecapeVariableReserved('$name');
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Operation.fromJson(data));
+  }
+
+  /**
+   * Lists operations that match the specified filter in the request. If the
+   * server doesn't support this method, it returns UNIMPLEMENTED.NOTE: the name
+   * binding allows API services to override the binding to use different
+   * resource name schemes, such as users / * /operations. To override the
+   * binding, API services can add a binding such as "/v1/{name=users / *
+   * }/operations" to their service configuration. For backwards compatibility,
+   * the default name includes the operations collection id, however overriding
+   * users must ensure the name binding is the parent resource, without the
+   * operations collection id.
+   *
+   * Request parameters:
+   *
+   * [name] - The name of the operation's parent resource.
+   * Value must have pattern "^projects/[^/]+/regions/[^/]+/operations$".
+   *
+   * [pageSize] - The standard list page size.
+   *
+   * [filter] - The standard list filter.
+   *
+   * [pageToken] - The standard list page token.
+   *
+   * Completes with a [ListOperationsResponse].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<ListOperationsResponse> list(core.String name, {core.int pageSize, core.String filter, core.String pageToken}) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (name == null) {
+      throw new core.ArgumentError("Parameter name is required.");
+    }
+    if (pageSize != null) {
+      _queryParams["pageSize"] = ["${pageSize}"];
+    }
+    if (filter != null) {
+      _queryParams["filter"] = [filter];
+    }
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
+
+    _url = 'v1beta2/' + commons.Escaper.ecapeVariableReserved('$name');
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new ListOperationsResponse.fromJson(data));
+  }
+
+}
+
+
+
+/**
+ * Specifies the type and number of accelerator cards attached to the instances
+ * of an instance group (see GPUs on Compute Engine).
+ */
+class AcceleratorConfig {
+  /**
+   * The number of the accelerator cards of this type exposed to this instance.
+   */
+  core.int acceleratorCount;
+  /**
+   * Full URL, partial URI, or short name of the accelerator type resource to
+   * expose to this instance. See Google Compute Engine AcceleratorTypes(
+   * /compute/docs/reference/beta/acceleratorTypes)Examples *
+   * https://www.googleapis.com/compute/beta/projects/[project_id]/zones/us-east1-a/acceleratorTypes/nvidia-tesla-k80
+   * * projects/[project_id]/zones/us-east1-a/acceleratorTypes/nvidia-tesla-k80
+   * * nvidia-tesla-k80
+   */
+  core.String acceleratorTypeUri;
+
+  AcceleratorConfig();
+
+  AcceleratorConfig.fromJson(core.Map _json) {
+    if (_json.containsKey("acceleratorCount")) {
+      acceleratorCount = _json["acceleratorCount"];
+    }
+    if (_json.containsKey("acceleratorTypeUri")) {
+      acceleratorTypeUri = _json["acceleratorTypeUri"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (acceleratorCount != null) {
+      _json["acceleratorCount"] = acceleratorCount;
+    }
+    if (acceleratorTypeUri != null) {
+      _json["acceleratorTypeUri"] = acceleratorTypeUri;
+    }
+    return _json;
+  }
+}
+
+/** A request to cancel a job. */
+class CancelJobRequest {
+
+  CancelJobRequest();
+
+  CancelJobRequest.fromJson(core.Map _json) {
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    return _json;
+  }
+}
+
+/**
+ * Describes the identifying information, config, and status of a cluster of
+ * Google Compute Engine instances.
+ */
+class Cluster {
+  /**
+   * Required. The cluster name. Cluster names within a project must be unique.
+   * Names of deleted clusters can be reused.
+   */
+  core.String clusterName;
+  /**
+   * Output-only. A cluster UUID (Unique Universal Identifier). Cloud Dataproc
+   * generates this value when it creates the cluster.
+   */
+  core.String clusterUuid;
+  /**
+   * Required. The cluster config. Note that Cloud Dataproc may set default
+   * values, and values may change when clusters are updated.
+   */
+  ClusterConfig config;
+  /**
+   * Optional. The labels to associate with this cluster. Label keys must
+   * contain 1 to 63 characters, and must conform to RFC 1035
+   * (https://www.ietf.org/rfc/rfc1035.txt). Label values may be empty, but, if
+   * present, must contain 1 to 63 characters, and must conform to RFC 1035
+   * (https://www.ietf.org/rfc/rfc1035.txt). No more than 32 labels can be
+   * associated with a cluster.
+   */
+  core.Map<core.String, core.String> labels;
+  /**
+   * Contains cluster daemon metrics such as HDFS and YARN stats.Beta Feature:
+   * This report is available for testing purposes only. It may be changed
+   * before final release.
+   */
+  ClusterMetrics metrics;
+  /**
+   * Required. The Google Cloud Platform project ID that the cluster belongs to.
+   */
+  core.String projectId;
+  /** Output-only. Cluster status. */
+  ClusterStatus status;
+  /** Output-only. The previous cluster status. */
+  core.List<ClusterStatus> statusHistory;
+
+  Cluster();
+
+  Cluster.fromJson(core.Map _json) {
+    if (_json.containsKey("clusterName")) {
+      clusterName = _json["clusterName"];
+    }
+    if (_json.containsKey("clusterUuid")) {
+      clusterUuid = _json["clusterUuid"];
+    }
+    if (_json.containsKey("config")) {
+      config = new ClusterConfig.fromJson(_json["config"]);
+    }
+    if (_json.containsKey("labels")) {
+      labels = _json["labels"];
+    }
+    if (_json.containsKey("metrics")) {
+      metrics = new ClusterMetrics.fromJson(_json["metrics"]);
+    }
+    if (_json.containsKey("projectId")) {
+      projectId = _json["projectId"];
+    }
+    if (_json.containsKey("status")) {
+      status = new ClusterStatus.fromJson(_json["status"]);
+    }
+    if (_json.containsKey("statusHistory")) {
+      statusHistory = _json["statusHistory"].map((value) => new ClusterStatus.fromJson(value)).toList();
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (clusterName != null) {
+      _json["clusterName"] = clusterName;
+    }
+    if (clusterUuid != null) {
+      _json["clusterUuid"] = clusterUuid;
+    }
+    if (config != null) {
+      _json["config"] = (config).toJson();
+    }
+    if (labels != null) {
+      _json["labels"] = labels;
+    }
+    if (metrics != null) {
+      _json["metrics"] = (metrics).toJson();
+    }
+    if (projectId != null) {
+      _json["projectId"] = projectId;
+    }
+    if (status != null) {
+      _json["status"] = (status).toJson();
+    }
+    if (statusHistory != null) {
+      _json["statusHistory"] = statusHistory.map((value) => (value).toJson()).toList();
+    }
+    return _json;
+  }
+}
+
+/** The cluster config. */
+class ClusterConfig {
+  /**
+   * Optional. A Google Cloud Storage staging bucket used for sharing generated
+   * SSH keys and config. If you do not specify a staging bucket, Cloud Dataproc
+   * will determine an appropriate Cloud Storage location (US, ASIA, or EU) for
+   * your cluster's staging bucket according to the Google Compute Engine zone
+   * where your cluster is deployed, and then it will create and manage this
+   * project-level, per-location bucket for you.
+   */
+  core.String configBucket;
+  /**
+   * Required. The shared Google Compute Engine config settings for all
+   * instances in a cluster.
+   */
+  GceClusterConfig gceClusterConfig;
+  /**
+   * Optional. Commands to execute on each node after config is completed. By
+   * default, executables are run on master and all worker nodes. You can test a
+   * node's <code>role</code> metadata to run an executable on a master or
+   * worker node, as shown below using curl (you can also use wget):
+   * ROLE=$(curl -H Metadata-Flavor:Google
+   * http://metadata/computeMetadata/v1beta2/instance/attributes/dataproc-role)
+   * if [[ "${ROLE}" == 'Master' ]]; then
+   *   ... master specific actions ...
+   * else
+   *   ... worker specific actions ...
+   * fi
+   */
+  core.List<NodeInitializationAction> initializationActions;
+  /**
+   * Optional. The Google Compute Engine config settings for the master instance
+   * in a cluster.
+   */
+  InstanceGroupConfig masterConfig;
+  /**
+   * Optional. The Google Compute Engine config settings for additional worker
+   * instances in a cluster.
+   */
+  InstanceGroupConfig secondaryWorkerConfig;
+  /** Optional. The config settings for software inside the cluster. */
+  SoftwareConfig softwareConfig;
+  /**
+   * Optional. The Google Compute Engine config settings for worker instances in
+   * a cluster.
+   */
+  InstanceGroupConfig workerConfig;
+
+  ClusterConfig();
+
+  ClusterConfig.fromJson(core.Map _json) {
+    if (_json.containsKey("configBucket")) {
+      configBucket = _json["configBucket"];
+    }
+    if (_json.containsKey("gceClusterConfig")) {
+      gceClusterConfig = new GceClusterConfig.fromJson(_json["gceClusterConfig"]);
+    }
+    if (_json.containsKey("initializationActions")) {
+      initializationActions = _json["initializationActions"].map((value) => new NodeInitializationAction.fromJson(value)).toList();
+    }
+    if (_json.containsKey("masterConfig")) {
+      masterConfig = new InstanceGroupConfig.fromJson(_json["masterConfig"]);
+    }
+    if (_json.containsKey("secondaryWorkerConfig")) {
+      secondaryWorkerConfig = new InstanceGroupConfig.fromJson(_json["secondaryWorkerConfig"]);
+    }
+    if (_json.containsKey("softwareConfig")) {
+      softwareConfig = new SoftwareConfig.fromJson(_json["softwareConfig"]);
+    }
+    if (_json.containsKey("workerConfig")) {
+      workerConfig = new InstanceGroupConfig.fromJson(_json["workerConfig"]);
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (configBucket != null) {
+      _json["configBucket"] = configBucket;
+    }
+    if (gceClusterConfig != null) {
+      _json["gceClusterConfig"] = (gceClusterConfig).toJson();
+    }
+    if (initializationActions != null) {
+      _json["initializationActions"] = initializationActions.map((value) => (value).toJson()).toList();
+    }
+    if (masterConfig != null) {
+      _json["masterConfig"] = (masterConfig).toJson();
+    }
+    if (secondaryWorkerConfig != null) {
+      _json["secondaryWorkerConfig"] = (secondaryWorkerConfig).toJson();
+    }
+    if (softwareConfig != null) {
+      _json["softwareConfig"] = (softwareConfig).toJson();
+    }
+    if (workerConfig != null) {
+      _json["workerConfig"] = (workerConfig).toJson();
+    }
+    return _json;
+  }
+}
+
+/**
+ * Contains cluster daemon metrics, such as HDFS and YARN stats.Beta Feature:
+ * This report is available for testing purposes only. It may be changed before
+ * final release.
+ */
+class ClusterMetrics {
+  /** The HDFS metrics. */
+  core.Map<core.String, core.String> hdfsMetrics;
+  /** The YARN metrics. */
+  core.Map<core.String, core.String> yarnMetrics;
+
+  ClusterMetrics();
+
+  ClusterMetrics.fromJson(core.Map _json) {
+    if (_json.containsKey("hdfsMetrics")) {
+      hdfsMetrics = _json["hdfsMetrics"];
+    }
+    if (_json.containsKey("yarnMetrics")) {
+      yarnMetrics = _json["yarnMetrics"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (hdfsMetrics != null) {
+      _json["hdfsMetrics"] = hdfsMetrics;
+    }
+    if (yarnMetrics != null) {
+      _json["yarnMetrics"] = yarnMetrics;
+    }
+    return _json;
+  }
+}
+
+/** Metadata describing the operation. */
+class ClusterOperationMetadata {
+  /** Output-only. Name of the cluster for the operation. */
+  core.String clusterName;
+  /** Output-only. Cluster UUID for the operation. */
+  core.String clusterUuid;
+  /** Output-only. Short description of operation. */
+  core.String description;
+  /** Output-only. Labels associated with the operation */
+  core.Map<core.String, core.String> labels;
+  /** Output-only. The operation type. */
+  core.String operationType;
+  /** Output-only. Current operation status. */
+  ClusterOperationStatus status;
+  /** Output-only. The previous operation status. */
+  core.List<ClusterOperationStatus> statusHistory;
+  /** Output-only. Errors encountered during operation execution. */
+  core.List<core.String> warnings;
+
+  ClusterOperationMetadata();
+
+  ClusterOperationMetadata.fromJson(core.Map _json) {
+    if (_json.containsKey("clusterName")) {
+      clusterName = _json["clusterName"];
+    }
+    if (_json.containsKey("clusterUuid")) {
+      clusterUuid = _json["clusterUuid"];
+    }
+    if (_json.containsKey("description")) {
+      description = _json["description"];
+    }
+    if (_json.containsKey("labels")) {
+      labels = _json["labels"];
+    }
+    if (_json.containsKey("operationType")) {
+      operationType = _json["operationType"];
+    }
+    if (_json.containsKey("status")) {
+      status = new ClusterOperationStatus.fromJson(_json["status"]);
+    }
+    if (_json.containsKey("statusHistory")) {
+      statusHistory = _json["statusHistory"].map((value) => new ClusterOperationStatus.fromJson(value)).toList();
+    }
+    if (_json.containsKey("warnings")) {
+      warnings = _json["warnings"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (clusterName != null) {
+      _json["clusterName"] = clusterName;
+    }
+    if (clusterUuid != null) {
+      _json["clusterUuid"] = clusterUuid;
+    }
+    if (description != null) {
+      _json["description"] = description;
+    }
+    if (labels != null) {
+      _json["labels"] = labels;
+    }
+    if (operationType != null) {
+      _json["operationType"] = operationType;
+    }
+    if (status != null) {
+      _json["status"] = (status).toJson();
+    }
+    if (statusHistory != null) {
+      _json["statusHistory"] = statusHistory.map((value) => (value).toJson()).toList();
+    }
+    if (warnings != null) {
+      _json["warnings"] = warnings;
+    }
+    return _json;
+  }
+}
+
+/** The status of the operation. */
+class ClusterOperationStatus {
+  /** Output-only.A message containing any operation metadata details. */
+  core.String details;
+  /** Output-only. A message containing the detailed operation state. */
+  core.String innerState;
+  /**
+   * Output-only. A message containing the operation state.
+   * Possible string values are:
+   * - "UNKNOWN" : Unused.
+   * - "PENDING" : The operation has been created.
+   * - "RUNNING" : The operation is running.
+   * - "DONE" : The operation is done; either cancelled or completed.
+   */
+  core.String state;
+  /** Output-only. The time this state was entered. */
+  core.String stateStartTime;
+
+  ClusterOperationStatus();
+
+  ClusterOperationStatus.fromJson(core.Map _json) {
+    if (_json.containsKey("details")) {
+      details = _json["details"];
+    }
+    if (_json.containsKey("innerState")) {
+      innerState = _json["innerState"];
+    }
+    if (_json.containsKey("state")) {
+      state = _json["state"];
+    }
+    if (_json.containsKey("stateStartTime")) {
+      stateStartTime = _json["stateStartTime"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (details != null) {
+      _json["details"] = details;
+    }
+    if (innerState != null) {
+      _json["innerState"] = innerState;
+    }
+    if (state != null) {
+      _json["state"] = state;
+    }
+    if (stateStartTime != null) {
+      _json["stateStartTime"] = stateStartTime;
+    }
+    return _json;
+  }
+}
+
+/** The status of a cluster and its instances. */
+class ClusterStatus {
+  /** Output-only. Optional details of cluster's state. */
+  core.String detail;
+  /**
+   * Output-only. The cluster's state.
+   * Possible string values are:
+   * - "UNKNOWN" : The cluster state is unknown.
+   * - "CREATING" : The cluster is being created and set up. It is not ready for
+   * use.
+   * - "RUNNING" : The cluster is currently running and healthy. It is ready for
+   * use.
+   * - "ERROR" : The cluster encountered an error. It is not ready for use.
+   * - "DELETING" : The cluster is being deleted. It cannot be used.
+   * - "UPDATING" : The cluster is being updated. It continues to accept and
+   * process jobs.
+   */
+  core.String state;
+  /** Output-only. Time when this state was entered. */
+  core.String stateStartTime;
+  /**
+   * Output-only. Additional state information that includes status reported by
+   * the agent.
+   * Possible string values are:
+   * - "UNSPECIFIED"
+   * - "UNHEALTHY" : The cluster is known to be in an unhealthy state (for
+   * example, critical daemons are not running or HDFS capacity is
+   * exhausted).Applies to RUNNING state.
+   * - "STALE_STATUS" : The agent-reported status is out of date (may occur if
+   * Cloud Dataproc loses communication with Agent).Applies to RUNNING state.
+   */
+  core.String substate;
+
+  ClusterStatus();
+
+  ClusterStatus.fromJson(core.Map _json) {
+    if (_json.containsKey("detail")) {
+      detail = _json["detail"];
+    }
+    if (_json.containsKey("state")) {
+      state = _json["state"];
+    }
+    if (_json.containsKey("stateStartTime")) {
+      stateStartTime = _json["stateStartTime"];
+    }
+    if (_json.containsKey("substate")) {
+      substate = _json["substate"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (detail != null) {
+      _json["detail"] = detail;
+    }
+    if (state != null) {
+      _json["state"] = state;
+    }
+    if (stateStartTime != null) {
+      _json["stateStartTime"] = stateStartTime;
+    }
+    if (substate != null) {
+      _json["substate"] = substate;
+    }
+    return _json;
+  }
+}
+
+/** A request to collect cluster diagnostic information. */
+class DiagnoseClusterRequest {
+
+  DiagnoseClusterRequest();
+
+  DiagnoseClusterRequest.fromJson(core.Map _json) {
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    return _json;
+  }
+}
+
+/** Specifies the config of disk options for a group of VM instances. */
+class DiskConfig {
+  /** Optional. Size in GB of the boot disk (default is 500GB). */
+  core.int bootDiskSizeGb;
+  /**
+   * Optional. Number of attached SSDs, from 0 to 4 (default is 0). If SSDs are
+   * not attached, the boot disk is used to store runtime logs and HDFS
+   * (https://hadoop.apache.org/docs/r1.2.1/hdfs_user_guide.html) data. If one
+   * or more SSDs are attached, this runtime bulk data is spread across them,
+   * and the boot disk contains only basic config and installed binaries.
+   */
+  core.int numLocalSsds;
+
+  DiskConfig();
+
+  DiskConfig.fromJson(core.Map _json) {
+    if (_json.containsKey("bootDiskSizeGb")) {
+      bootDiskSizeGb = _json["bootDiskSizeGb"];
+    }
+    if (_json.containsKey("numLocalSsds")) {
+      numLocalSsds = _json["numLocalSsds"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (bootDiskSizeGb != null) {
+      _json["bootDiskSizeGb"] = bootDiskSizeGb;
+    }
+    if (numLocalSsds != null) {
+      _json["numLocalSsds"] = numLocalSsds;
+    }
+    return _json;
+  }
+}
+
+/**
+ * A generic empty message that you can re-use to avoid defining duplicated
+ * empty messages in your APIs. A typical example is to use it as the request or
+ * the response type of an API method. For instance:
+ * service Foo {
+ *   rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
+ * }
+ * The JSON representation for Empty is empty JSON object {}.
+ */
+class Empty {
+
+  Empty();
+
+  Empty.fromJson(core.Map _json) {
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    return _json;
+  }
+}
+
+/**
+ * Common config settings for resources of Google Compute Engine cluster
+ * instances, applicable to all instances in the cluster.
+ */
+class GceClusterConfig {
+  /**
+   * Optional. If true, all instances in the cluster will only have internal IP
+   * addresses. By default, clusters are not restricted to internal IP
+   * addresses, and will have ephemeral external IP addresses assigned to each
+   * instance. This internal_ip_only restriction can only be enabled for
+   * subnetwork enabled networks, and all off-cluster dependencies must be
+   * configured to be accessible without external IP addresses.
+   */
+  core.bool internalIpOnly;
+  /**
+   * The Google Compute Engine metadata entries to add to all instances (see
+   * Project and instance metadata
+   * (https://cloud.google.com/compute/docs/storing-retrieving-metadata#project_and_instance_metadata)).
+   */
+  core.Map<core.String, core.String> metadata;
+  /**
+   * Optional. The Google Compute Engine network to be used for machine
+   * communications. Cannot be specified with subnetwork_uri. If neither
+   * network_uri nor subnetwork_uri is specified, the "default" network of the
+   * project is used, if it exists. Cannot be a "Custom Subnet Network" (see
+   * Using Subnetworks for more information).A full URL, partial URI, or short
+   * name are valid. Examples:
+   * https://www.googleapis.com/compute/v1/projects/[project_id]/regions/global/default
+   * projects/[project_id]/regions/global/default
+   * default
+   */
+  core.String networkUri;
+  /**
+   * Optional. The service account of the instances. Defaults to the default
+   * Google Compute Engine service account. Custom service accounts need
+   * permissions equivalent to the folloing IAM roles:
+   * roles/logging.logWriter
+   * roles/storage.objectAdmin(see
+   * https://cloud.google.com/compute/docs/access/service-accounts#custom_service_accounts
+   * for more information). Example:
+   * [account_id]@[project_id].iam.gserviceaccount.com
+   */
+  core.String serviceAccount;
+  /**
+   * Optional. The URIs of service account scopes to be included in Google
+   * Compute Engine instances. The following base set of scopes is always
+   * included:
+   * https://www.googleapis.com/auth/cloud.useraccounts.readonly
+   * https://www.googleapis.com/auth/devstorage.read_write
+   * https://www.googleapis.com/auth/logging.writeIf no scopes are specified,
+   * the following defaults are also provided:
+   * https://www.googleapis.com/auth/bigquery
+   * https://www.googleapis.com/auth/bigtable.admin.table
+   * https://www.googleapis.com/auth/bigtable.data
+   * https://www.googleapis.com/auth/devstorage.full_control
+   */
+  core.List<core.String> serviceAccountScopes;
+  /**
+   * Optional. The Google Compute Engine subnetwork to be used for machine
+   * communications. Cannot be specified with network_uri.A full URL, partial
+   * URI, or short name are valid. Examples:
+   * https://www.googleapis.com/compute/v1/projects/[project_id]/regions/us-east1/sub0
+   * projects/[project_id]/regions/us-east1/sub0
+   * sub0
+   */
+  core.String subnetworkUri;
+  /**
+   * The Google Compute Engine tags to add to all instances (see Tagging
+   * instances).
+   */
+  core.List<core.String> tags;
+  /**
+   * Optional. The zone where the Google Compute Engine cluster will be located.
+   * On a create request, it is required in the "global" region. If omitted in a
+   * non-global Cloud Dataproc region, the service will pick a zone in the
+   * corresponding GCE region. On a get request, zone will always be present.A
+   * full URL, partial URI, or short name are valid. Examples:
+   * https://www.googleapis.com/compute/v1/projects/[project_id]/zones/[zone]
+   * projects/[project_id]/zones/[zone]
+   * us-central1-f
+   */
+  core.String zoneUri;
+
+  GceClusterConfig();
+
+  GceClusterConfig.fromJson(core.Map _json) {
+    if (_json.containsKey("internalIpOnly")) {
+      internalIpOnly = _json["internalIpOnly"];
+    }
+    if (_json.containsKey("metadata")) {
+      metadata = _json["metadata"];
+    }
+    if (_json.containsKey("networkUri")) {
+      networkUri = _json["networkUri"];
+    }
+    if (_json.containsKey("serviceAccount")) {
+      serviceAccount = _json["serviceAccount"];
+    }
+    if (_json.containsKey("serviceAccountScopes")) {
+      serviceAccountScopes = _json["serviceAccountScopes"];
+    }
+    if (_json.containsKey("subnetworkUri")) {
+      subnetworkUri = _json["subnetworkUri"];
+    }
+    if (_json.containsKey("tags")) {
+      tags = _json["tags"];
+    }
+    if (_json.containsKey("zoneUri")) {
+      zoneUri = _json["zoneUri"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (internalIpOnly != null) {
+      _json["internalIpOnly"] = internalIpOnly;
+    }
+    if (metadata != null) {
+      _json["metadata"] = metadata;
+    }
+    if (networkUri != null) {
+      _json["networkUri"] = networkUri;
+    }
+    if (serviceAccount != null) {
+      _json["serviceAccount"] = serviceAccount;
+    }
+    if (serviceAccountScopes != null) {
+      _json["serviceAccountScopes"] = serviceAccountScopes;
+    }
+    if (subnetworkUri != null) {
+      _json["subnetworkUri"] = subnetworkUri;
+    }
+    if (tags != null) {
+      _json["tags"] = tags;
+    }
+    if (zoneUri != null) {
+      _json["zoneUri"] = zoneUri;
+    }
+    return _json;
+  }
+}
+
+/**
+ * A Cloud Dataproc job for running Apache Hadoop MapReduce
+ * (https://hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html)
+ * jobs on Apache Hadoop YARN
+ * (https://hadoop.apache.org/docs/r2.7.1/hadoop-yarn/hadoop-yarn-site/YARN.html).
+ */
+class HadoopJob {
+  /**
+   * Optional. HCFS URIs of archives to be extracted in the working directory of
+   * Hadoop drivers and tasks. Supported file types: .jar, .tar, .tar.gz, .tgz,
+   * or .zip.
+   */
+  core.List<core.String> archiveUris;
+  /**
+   * Optional. The arguments to pass to the driver. Do not include arguments,
+   * such as -libjars or -Dfoo=bar, that can be set as job properties, since a
+   * collision may occur that causes an incorrect job submission.
+   */
+  core.List<core.String> args;
+  /**
+   * Optional. HCFS (Hadoop Compatible Filesystem) URIs of files to be copied to
+   * the working directory of Hadoop drivers and distributed tasks. Useful for
+   * naively parallel tasks.
+   */
+  core.List<core.String> fileUris;
+  /**
+   * Optional. Jar file URIs to add to the CLASSPATHs of the Hadoop driver and
+   * tasks.
+   */
+  core.List<core.String> jarFileUris;
+  /** Optional. The runtime log config for job execution. */
+  LoggingConfig loggingConfig;
+  /**
+   * The name of the driver's main class. The jar file containing the class must
+   * be in the default CLASSPATH or specified in jar_file_uris.
+   */
+  core.String mainClass;
+  /**
+   * The HCFS URI of the jar file containing the main class. Examples:
+   * 'gs://foo-bucket/analytics-binaries/extract-useful-metrics-mr.jar'
+   * 'hdfs:/tmp/test-samples/custom-wordcount.jar'
+   * 'file:///home/usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar'
+   */
+  core.String mainJarFileUri;
+  /**
+   * Optional. A mapping of property names to values, used to configure Hadoop.
+   * Properties that conflict with values set by the Cloud Dataproc API may be
+   * overwritten. Can include properties set in /etc/hadoop/conf / * -site and
+   * classes in user code.
+   */
+  core.Map<core.String, core.String> properties;
+
+  HadoopJob();
+
+  HadoopJob.fromJson(core.Map _json) {
+    if (_json.containsKey("archiveUris")) {
+      archiveUris = _json["archiveUris"];
+    }
+    if (_json.containsKey("args")) {
+      args = _json["args"];
+    }
+    if (_json.containsKey("fileUris")) {
+      fileUris = _json["fileUris"];
+    }
+    if (_json.containsKey("jarFileUris")) {
+      jarFileUris = _json["jarFileUris"];
+    }
+    if (_json.containsKey("loggingConfig")) {
+      loggingConfig = new LoggingConfig.fromJson(_json["loggingConfig"]);
+    }
+    if (_json.containsKey("mainClass")) {
+      mainClass = _json["mainClass"];
+    }
+    if (_json.containsKey("mainJarFileUri")) {
+      mainJarFileUri = _json["mainJarFileUri"];
+    }
+    if (_json.containsKey("properties")) {
+      properties = _json["properties"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (archiveUris != null) {
+      _json["archiveUris"] = archiveUris;
+    }
+    if (args != null) {
+      _json["args"] = args;
+    }
+    if (fileUris != null) {
+      _json["fileUris"] = fileUris;
+    }
+    if (jarFileUris != null) {
+      _json["jarFileUris"] = jarFileUris;
+    }
+    if (loggingConfig != null) {
+      _json["loggingConfig"] = (loggingConfig).toJson();
+    }
+    if (mainClass != null) {
+      _json["mainClass"] = mainClass;
+    }
+    if (mainJarFileUri != null) {
+      _json["mainJarFileUri"] = mainJarFileUri;
+    }
+    if (properties != null) {
+      _json["properties"] = properties;
+    }
+    return _json;
+  }
+}
+
+/**
+ * A Cloud Dataproc job for running Apache Hive (https://hive.apache.org/)
+ * queries on YARN.
+ */
+class HiveJob {
+  /**
+   * Optional. Whether to continue executing queries if a query fails. The
+   * default value is false. Setting to true can be useful when executing
+   * independent parallel queries.
+   */
+  core.bool continueOnFailure;
+  /**
+   * Optional. HCFS URIs of jar files to add to the CLASSPATH of the Hive server
+   * and Hadoop MapReduce (MR) tasks. Can contain Hive SerDes and UDFs.
+   */
+  core.List<core.String> jarFileUris;
+  /**
+   * Optional. A mapping of property names and values, used to configure Hive.
+   * Properties that conflict with values set by the Cloud Dataproc API may be
+   * overwritten. Can include properties set in /etc/hadoop/conf / * -site.xml,
+   * /etc/hive/conf/hive-site.xml, and classes in user code.
+   */
+  core.Map<core.String, core.String> properties;
+  /** The HCFS URI of the script that contains Hive queries. */
+  core.String queryFileUri;
+  /** A list of queries. */
+  QueryList queryList;
+  /**
+   * Optional. Mapping of query variable names to values (equivalent to the Hive
+   * command: SET name="value";).
+   */
+  core.Map<core.String, core.String> scriptVariables;
+
+  HiveJob();
+
+  HiveJob.fromJson(core.Map _json) {
+    if (_json.containsKey("continueOnFailure")) {
+      continueOnFailure = _json["continueOnFailure"];
+    }
+    if (_json.containsKey("jarFileUris")) {
+      jarFileUris = _json["jarFileUris"];
+    }
+    if (_json.containsKey("properties")) {
+      properties = _json["properties"];
+    }
+    if (_json.containsKey("queryFileUri")) {
+      queryFileUri = _json["queryFileUri"];
+    }
+    if (_json.containsKey("queryList")) {
+      queryList = new QueryList.fromJson(_json["queryList"]);
+    }
+    if (_json.containsKey("scriptVariables")) {
+      scriptVariables = _json["scriptVariables"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (continueOnFailure != null) {
+      _json["continueOnFailure"] = continueOnFailure;
+    }
+    if (jarFileUris != null) {
+      _json["jarFileUris"] = jarFileUris;
+    }
+    if (properties != null) {
+      _json["properties"] = properties;
+    }
+    if (queryFileUri != null) {
+      _json["queryFileUri"] = queryFileUri;
+    }
+    if (queryList != null) {
+      _json["queryList"] = (queryList).toJson();
+    }
+    if (scriptVariables != null) {
+      _json["scriptVariables"] = scriptVariables;
+    }
+    return _json;
+  }
+}
+
+/**
+ * Optional. The config settings for Google Compute Engine resources in an
+ * instance group, such as a master or worker group.
+ */
+class InstanceGroupConfig {
+  /**
+   * Optional. The Google Compute Engine accelerator configuration for these
+   * instances.Beta Feature: This feature is still under development. It may be
+   * changed before final release.
+   */
+  core.List<AcceleratorConfig> accelerators;
+  /** Optional. Disk option config settings. */
+  DiskConfig diskConfig;
+  /**
+   * Output-only. The Google Compute Engine image resource used for cluster
+   * instances. Inferred from SoftwareConfig.image_version.
+   */
+  core.String imageUri;
+  /**
+   * Optional. The list of instance names. Cloud Dataproc derives the names from
+   * cluster_name, num_instances, and the instance group if not set by user
+   * (recommended practice is to let Cloud Dataproc derive the name).
+   */
+  core.List<core.String> instanceNames;
+  /**
+   * Optional. Specifies that this instance group contains preemptible
+   * instances.
+   */
+  core.bool isPreemptible;
+  /**
+   * Optional. The Google Compute Engine machine type used for cluster
+   * instances.A full URL, partial URI, or short name are valid. Examples:
+   * https://www.googleapis.com/compute/v1/projects/[project_id]/zones/us-east1-a/machineTypes/n1-standard-2
+   * projects/[project_id]/zones/us-east1-a/machineTypes/n1-standard-2
+   * n1-standard-2
+   */
+  core.String machineTypeUri;
+  /**
+   * Output-only. The config for Google Compute Engine Instance Group Manager
+   * that manages this group. This is only used for preemptible instance groups.
+   */
+  ManagedGroupConfig managedGroupConfig;
+  /**
+   * Optional. The number of VM instances in the instance group. For master
+   * instance groups, must be set to 1.
+   */
+  core.int numInstances;
+
+  InstanceGroupConfig();
+
+  InstanceGroupConfig.fromJson(core.Map _json) {
+    if (_json.containsKey("accelerators")) {
+      accelerators = _json["accelerators"].map((value) => new AcceleratorConfig.fromJson(value)).toList();
+    }
+    if (_json.containsKey("diskConfig")) {
+      diskConfig = new DiskConfig.fromJson(_json["diskConfig"]);
+    }
+    if (_json.containsKey("imageUri")) {
+      imageUri = _json["imageUri"];
+    }
+    if (_json.containsKey("instanceNames")) {
+      instanceNames = _json["instanceNames"];
+    }
+    if (_json.containsKey("isPreemptible")) {
+      isPreemptible = _json["isPreemptible"];
+    }
+    if (_json.containsKey("machineTypeUri")) {
+      machineTypeUri = _json["machineTypeUri"];
+    }
+    if (_json.containsKey("managedGroupConfig")) {
+      managedGroupConfig = new ManagedGroupConfig.fromJson(_json["managedGroupConfig"]);
+    }
+    if (_json.containsKey("numInstances")) {
+      numInstances = _json["numInstances"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (accelerators != null) {
+      _json["accelerators"] = accelerators.map((value) => (value).toJson()).toList();
+    }
+    if (diskConfig != null) {
+      _json["diskConfig"] = (diskConfig).toJson();
+    }
+    if (imageUri != null) {
+      _json["imageUri"] = imageUri;
+    }
+    if (instanceNames != null) {
+      _json["instanceNames"] = instanceNames;
+    }
+    if (isPreemptible != null) {
+      _json["isPreemptible"] = isPreemptible;
+    }
+    if (machineTypeUri != null) {
+      _json["machineTypeUri"] = machineTypeUri;
+    }
+    if (managedGroupConfig != null) {
+      _json["managedGroupConfig"] = (managedGroupConfig).toJson();
+    }
+    if (numInstances != null) {
+      _json["numInstances"] = numInstances;
+    }
+    return _json;
+  }
+}
+
+/** A Cloud Dataproc job resource. */
+class Job {
+  /**
+   * Output-only. If present, the location of miscellaneous control files which
+   * may be used as part of job setup and handling. If not present, control
+   * files may be placed in the same location as driver_output_uri.
+   */
+  core.String driverControlFilesUri;
+  /**
+   * Output-only. A URI pointing to the location of the stdout of the job's
+   * driver program.
+   */
+  core.String driverOutputResourceUri;
+  /** Job is a Hadoop job. */
+  HadoopJob hadoopJob;
+  /** Job is a Hive job. */
+  HiveJob hiveJob;
+  /**
+   * Optional. The labels to associate with this job. Label keys must contain 1
+   * to 63 characters, and must conform to RFC 1035
+   * (https://www.ietf.org/rfc/rfc1035.txt). Label values may be empty, but, if
+   * present, must contain 1 to 63 characters, and must conform to RFC 1035
+   * (https://www.ietf.org/rfc/rfc1035.txt). No more than 32 labels can be
+   * associated with a job.
+   */
+  core.Map<core.String, core.String> labels;
+  /** Job is a Pig job. */
+  PigJob pigJob;
+  /**
+   * Required. Job information, including how, when, and where to run the job.
+   */
+  JobPlacement placement;
+  /** Job is a Pyspark job. */
+  PySparkJob pysparkJob;
+  /**
+   * Optional. The fully qualified reference to the job, which can be used to
+   * obtain the equivalent REST path of the job resource. If this property is
+   * not specified when a job is created, the server generates a
+   * <code>job_id</code>.
+   */
+  JobReference reference;
+  /** Optional. Job scheduling configuration. */
+  JobScheduling scheduling;
+  /** Job is a Spark job. */
+  SparkJob sparkJob;
+  /** Job is a SparkSql job. */
+  SparkSqlJob sparkSqlJob;
+  /**
+   * Output-only. The job status. Additional application-specific status
+   * information may be contained in the <code>type_job</code> and
+   * <code>yarn_applications</code> fields.
+   */
+  JobStatus status;
+  /** Output-only. The previous job status. */
+  core.List<JobStatus> statusHistory;
+  /**
+   * Output-only. The collection of YARN applications spun up by this job.Beta
+   * Feature: This report is available for testing purposes only. It may be
+   * changed before final release.
+   */
+  core.List<YarnApplication> yarnApplications;
+
+  Job();
+
+  Job.fromJson(core.Map _json) {
+    if (_json.containsKey("driverControlFilesUri")) {
+      driverControlFilesUri = _json["driverControlFilesUri"];
+    }
+    if (_json.containsKey("driverOutputResourceUri")) {
+      driverOutputResourceUri = _json["driverOutputResourceUri"];
+    }
+    if (_json.containsKey("hadoopJob")) {
+      hadoopJob = new HadoopJob.fromJson(_json["hadoopJob"]);
+    }
+    if (_json.containsKey("hiveJob")) {
+      hiveJob = new HiveJob.fromJson(_json["hiveJob"]);
+    }
+    if (_json.containsKey("labels")) {
+      labels = _json["labels"];
+    }
+    if (_json.containsKey("pigJob")) {
+      pigJob = new PigJob.fromJson(_json["pigJob"]);
+    }
+    if (_json.containsKey("placement")) {
+      placement = new JobPlacement.fromJson(_json["placement"]);
+    }
+    if (_json.containsKey("pysparkJob")) {
+      pysparkJob = new PySparkJob.fromJson(_json["pysparkJob"]);
+    }
+    if (_json.containsKey("reference")) {
+      reference = new JobReference.fromJson(_json["reference"]);
+    }
+    if (_json.containsKey("scheduling")) {
+      scheduling = new JobScheduling.fromJson(_json["scheduling"]);
+    }
+    if (_json.containsKey("sparkJob")) {
+      sparkJob = new SparkJob.fromJson(_json["sparkJob"]);
+    }
+    if (_json.containsKey("sparkSqlJob")) {
+      sparkSqlJob = new SparkSqlJob.fromJson(_json["sparkSqlJob"]);
+    }
+    if (_json.containsKey("status")) {
+      status = new JobStatus.fromJson(_json["status"]);
+    }
+    if (_json.containsKey("statusHistory")) {
+      statusHistory = _json["statusHistory"].map((value) => new JobStatus.fromJson(value)).toList();
+    }
+    if (_json.containsKey("yarnApplications")) {
+      yarnApplications = _json["yarnApplications"].map((value) => new YarnApplication.fromJson(value)).toList();
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (driverControlFilesUri != null) {
+      _json["driverControlFilesUri"] = driverControlFilesUri;
+    }
+    if (driverOutputResourceUri != null) {
+      _json["driverOutputResourceUri"] = driverOutputResourceUri;
+    }
+    if (hadoopJob != null) {
+      _json["hadoopJob"] = (hadoopJob).toJson();
+    }
+    if (hiveJob != null) {
+      _json["hiveJob"] = (hiveJob).toJson();
+    }
+    if (labels != null) {
+      _json["labels"] = labels;
+    }
+    if (pigJob != null) {
+      _json["pigJob"] = (pigJob).toJson();
+    }
+    if (placement != null) {
+      _json["placement"] = (placement).toJson();
+    }
+    if (pysparkJob != null) {
+      _json["pysparkJob"] = (pysparkJob).toJson();
+    }
+    if (reference != null) {
+      _json["reference"] = (reference).toJson();
+    }
+    if (scheduling != null) {
+      _json["scheduling"] = (scheduling).toJson();
+    }
+    if (sparkJob != null) {
+      _json["sparkJob"] = (sparkJob).toJson();
+    }
+    if (sparkSqlJob != null) {
+      _json["sparkSqlJob"] = (sparkSqlJob).toJson();
+    }
+    if (status != null) {
+      _json["status"] = (status).toJson();
+    }
+    if (statusHistory != null) {
+      _json["statusHistory"] = statusHistory.map((value) => (value).toJson()).toList();
+    }
+    if (yarnApplications != null) {
+      _json["yarnApplications"] = yarnApplications.map((value) => (value).toJson()).toList();
+    }
+    return _json;
+  }
+}
+
+/** Cloud Dataproc job config. */
+class JobPlacement {
+  /** Required. The name of the cluster where the job will be submitted. */
+  core.String clusterName;
+  /**
+   * Output-only. A cluster UUID generated by the Cloud Dataproc service when
+   * the job is submitted.
+   */
+  core.String clusterUuid;
+
+  JobPlacement();
+
+  JobPlacement.fromJson(core.Map _json) {
+    if (_json.containsKey("clusterName")) {
+      clusterName = _json["clusterName"];
+    }
+    if (_json.containsKey("clusterUuid")) {
+      clusterUuid = _json["clusterUuid"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (clusterName != null) {
+      _json["clusterName"] = clusterName;
+    }
+    if (clusterUuid != null) {
+      _json["clusterUuid"] = clusterUuid;
+    }
+    return _json;
+  }
+}
+
+/** Encapsulates the full scoping used to reference a job. */
+class JobReference {
+  /**
+   * Optional. The job ID, which must be unique within the project. The job ID
+   * is generated by the server upon job submission or provided by the user as a
+   * means to perform retries without creating duplicate jobs. The ID must
+   * contain only letters (a-z, A-Z), numbers (0-9), underscores (_), or hyphens
+   * (-). The maximum length is 100 characters.
+   */
+  core.String jobId;
+  /**
+   * Required. The ID of the Google Cloud Platform project that the job belongs
+   * to.
+   */
+  core.String projectId;
+
+  JobReference();
+
+  JobReference.fromJson(core.Map _json) {
+    if (_json.containsKey("jobId")) {
+      jobId = _json["jobId"];
+    }
+    if (_json.containsKey("projectId")) {
+      projectId = _json["projectId"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (jobId != null) {
+      _json["jobId"] = jobId;
+    }
+    if (projectId != null) {
+      _json["projectId"] = projectId;
+    }
+    return _json;
+  }
+}
+
+/**
+ * Job scheduling options.Beta Feature: These options are available for testing
+ * purposes only. They may be changed before final release.
+ */
+class JobScheduling {
+  /**
+   * Optional. Maximum number of times per hour a driver may be restarted as a
+   * result of driver terminating with non-zero code before job is reported
+   * failed.A job may be reported as thrashing if driver exits with non-zero
+   * code 4 times within 10 minute window.Maximum value is 10.
+   */
+  core.int maxFailuresPerHour;
+
+  JobScheduling();
+
+  JobScheduling.fromJson(core.Map _json) {
+    if (_json.containsKey("maxFailuresPerHour")) {
+      maxFailuresPerHour = _json["maxFailuresPerHour"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (maxFailuresPerHour != null) {
+      _json["maxFailuresPerHour"] = maxFailuresPerHour;
+    }
+    return _json;
+  }
+}
+
+/** Cloud Dataproc job status. */
+class JobStatus {
+  /**
+   * Output-only. Optional job state details, such as an error description if
+   * the state is <code>ERROR</code>.
+   */
+  core.String details;
+  /**
+   * Output-only. A state message specifying the overall job state.
+   * Possible string values are:
+   * - "STATE_UNSPECIFIED" : The job state is unknown.
+   * - "PENDING" : The job is pending; it has been submitted, but is not yet
+   * running.
+   * - "SETUP_DONE" : Job has been received by the service and completed initial
+   * setup; it will soon be submitted to the cluster.
+   * - "RUNNING" : The job is running on the cluster.
+   * - "CANCEL_PENDING" : A CancelJob request has been received, but is pending.
+   * - "CANCEL_STARTED" : Transient in-flight resources have been canceled, and
+   * the request to cancel the running job has been issued to the cluster.
+   * - "CANCELLED" : The job cancellation was successful.
+   * - "DONE" : The job has completed successfully.
+   * - "ERROR" : The job has completed, but encountered an error.
+   * - "ATTEMPT_FAILURE" : Job attempt has failed. The detail field contains
+   * failure details for this attempt.Applies to restartable jobs only.
+   */
+  core.String state;
+  /** Output-only. The time when this state was entered. */
+  core.String stateStartTime;
+  /**
+   * Output-only. Additional state information, which includes status reported
+   * by the agent.
+   * Possible string values are:
+   * - "UNSPECIFIED"
+   * - "SUBMITTED" : The Job is submitted to the agent.Applies to RUNNING state.
+   * - "QUEUED" : The Job has been received and is awaiting execution (it may be
+   * waiting for a condition to be met). See the "details" field for the reason
+   * for the delay.Applies to RUNNING state.
+   * - "STALE_STATUS" : The agent-reported status is out of date, which may be
+   * caused by a loss of communication between the agent and Cloud Dataproc. If
+   * the agent does not send a timely update, the job will fail.Applies to
+   * RUNNING state.
+   */
+  core.String substate;
+
+  JobStatus();
+
+  JobStatus.fromJson(core.Map _json) {
+    if (_json.containsKey("details")) {
+      details = _json["details"];
+    }
+    if (_json.containsKey("state")) {
+      state = _json["state"];
+    }
+    if (_json.containsKey("stateStartTime")) {
+      stateStartTime = _json["stateStartTime"];
+    }
+    if (_json.containsKey("substate")) {
+      substate = _json["substate"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (details != null) {
+      _json["details"] = details;
+    }
+    if (state != null) {
+      _json["state"] = state;
+    }
+    if (stateStartTime != null) {
+      _json["stateStartTime"] = stateStartTime;
+    }
+    if (substate != null) {
+      _json["substate"] = substate;
+    }
+    return _json;
+  }
+}
+
+/** The list of all clusters in a project. */
+class ListClustersResponse {
+  /** Output-only. The clusters in the project. */
+  core.List<Cluster> clusters;
+  /**
+   * Output-only. This token is included in the response if there are more
+   * results to fetch. To fetch additional results, provide this value as the
+   * page_token in a subsequent <code>ListClustersRequest</code>.
+   */
+  core.String nextPageToken;
+
+  ListClustersResponse();
+
+  ListClustersResponse.fromJson(core.Map _json) {
+    if (_json.containsKey("clusters")) {
+      clusters = _json["clusters"].map((value) => new Cluster.fromJson(value)).toList();
+    }
+    if (_json.containsKey("nextPageToken")) {
+      nextPageToken = _json["nextPageToken"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (clusters != null) {
+      _json["clusters"] = clusters.map((value) => (value).toJson()).toList();
+    }
+    if (nextPageToken != null) {
+      _json["nextPageToken"] = nextPageToken;
+    }
+    return _json;
+  }
+}
+
+/** A list of jobs in a project. */
+class ListJobsResponse {
+  /** Output-only. Jobs list. */
+  core.List<Job> jobs;
+  /**
+   * Optional. This token is included in the response if there are more results
+   * to fetch. To fetch additional results, provide this value as the page_token
+   * in a subsequent <code>ListJobsRequest</code>.
+   */
+  core.String nextPageToken;
+
+  ListJobsResponse();
+
+  ListJobsResponse.fromJson(core.Map _json) {
+    if (_json.containsKey("jobs")) {
+      jobs = _json["jobs"].map((value) => new Job.fromJson(value)).toList();
+    }
+    if (_json.containsKey("nextPageToken")) {
+      nextPageToken = _json["nextPageToken"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (jobs != null) {
+      _json["jobs"] = jobs.map((value) => (value).toJson()).toList();
+    }
+    if (nextPageToken != null) {
+      _json["nextPageToken"] = nextPageToken;
+    }
+    return _json;
+  }
+}
+
+/** The response message for Operations.ListOperations. */
+class ListOperationsResponse {
+  /** The standard List next-page token. */
+  core.String nextPageToken;
+  /** A list of operations that matches the specified filter in the request. */
+  core.List<Operation> operations;
+
+  ListOperationsResponse();
+
+  ListOperationsResponse.fromJson(core.Map _json) {
+    if (_json.containsKey("nextPageToken")) {
+      nextPageToken = _json["nextPageToken"];
+    }
+    if (_json.containsKey("operations")) {
+      operations = _json["operations"].map((value) => new Operation.fromJson(value)).toList();
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (nextPageToken != null) {
+      _json["nextPageToken"] = nextPageToken;
+    }
+    if (operations != null) {
+      _json["operations"] = operations.map((value) => (value).toJson()).toList();
+    }
+    return _json;
+  }
+}
+
+/** The runtime logging config of the job. */
+class LoggingConfig {
+  /**
+   * The per-package log levels for the driver. This may include "root" package
+   * name to configure rootLogger. Examples:  'com.google = FATAL', 'root =
+   * INFO', 'org.apache = DEBUG'
+   */
+  core.Map<core.String, core.String> driverLogLevels;
+
+  LoggingConfig();
+
+  LoggingConfig.fromJson(core.Map _json) {
+    if (_json.containsKey("driverLogLevels")) {
+      driverLogLevels = _json["driverLogLevels"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (driverLogLevels != null) {
+      _json["driverLogLevels"] = driverLogLevels;
+    }
+    return _json;
+  }
+}
+
+/** Specifies the resources used to actively manage an instance group. */
+class ManagedGroupConfig {
+  /** Output-only. The name of the Instance Group Manager for this group. */
+  core.String instanceGroupManagerName;
+  /**
+   * Output-only. The name of the Instance Template used for the Managed
+   * Instance Group.
+   */
+  core.String instanceTemplateName;
+
+  ManagedGroupConfig();
+
+  ManagedGroupConfig.fromJson(core.Map _json) {
+    if (_json.containsKey("instanceGroupManagerName")) {
+      instanceGroupManagerName = _json["instanceGroupManagerName"];
+    }
+    if (_json.containsKey("instanceTemplateName")) {
+      instanceTemplateName = _json["instanceTemplateName"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (instanceGroupManagerName != null) {
+      _json["instanceGroupManagerName"] = instanceGroupManagerName;
+    }
+    if (instanceTemplateName != null) {
+      _json["instanceTemplateName"] = instanceTemplateName;
+    }
+    return _json;
+  }
+}
+
+/**
+ * Specifies an executable to run on a fully configured node and a timeout
+ * period for executable completion.
+ */
+class NodeInitializationAction {
+  /** Required. Google Cloud Storage URI of executable file. */
+  core.String executableFile;
+  /**
+   * Optional. Amount of time executable has to complete. Default is 10 minutes.
+   * Cluster creation fails with an explanatory error message (the name of the
+   * executable that caused the error and the exceeded timeout period) if the
+   * executable is not completed at end of the timeout period.
+   */
+  core.String executionTimeout;
+
+  NodeInitializationAction();
+
+  NodeInitializationAction.fromJson(core.Map _json) {
+    if (_json.containsKey("executableFile")) {
+      executableFile = _json["executableFile"];
+    }
+    if (_json.containsKey("executionTimeout")) {
+      executionTimeout = _json["executionTimeout"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (executableFile != null) {
+      _json["executableFile"] = executableFile;
+    }
+    if (executionTimeout != null) {
+      _json["executionTimeout"] = executionTimeout;
+    }
+    return _json;
+  }
+}
+
+/**
+ * This resource represents a long-running operation that is the result of a
+ * network API call.
+ */
+class Operation {
+  /**
+   * If the value is false, it means the operation is still in progress. If
+   * true, the operation is completed, and either error or response is
+   * available.
+   */
+  core.bool done;
+  /** The error result of the operation in case of failure or cancellation. */
+  Status error;
+  /**
+   * Service-specific metadata associated with the operation. It typically
+   * contains progress information and common metadata such as create time. Some
+   * services might not provide such metadata. Any method that returns a
+   * long-running operation should document the metadata type, if any.
+   *
+   * The values for Object must be JSON objects. It can consist of `num`,
+   * `String`, `bool` and `null` as well as `Map` and `List` values.
+   */
+  core.Map<core.String, core.Object> metadata;
+  /**
+   * The server-assigned name, which is only unique within the same service that
+   * originally returns it. If you use the default HTTP mapping, the name should
+   * have the format of operations/some/unique/name.
+   */
+  core.String name;
+  /**
+   * The normal response of the operation in case of success. If the original
+   * method returns no data on success, such as Delete, the response is
+   * google.protobuf.Empty. If the original method is standard
+   * Get/Create/Update, the response should be the resource. For other methods,
+   * the response should have the type XxxResponse, where Xxx is the original
+   * method name. For example, if the original method name is TakeSnapshot(),
+   * the inferred response type is TakeSnapshotResponse.
+   *
+   * The values for Object must be JSON objects. It can consist of `num`,
+   * `String`, `bool` and `null` as well as `Map` and `List` values.
+   */
+  core.Map<core.String, core.Object> response;
+
+  Operation();
+
+  Operation.fromJson(core.Map _json) {
+    if (_json.containsKey("done")) {
+      done = _json["done"];
+    }
+    if (_json.containsKey("error")) {
+      error = new Status.fromJson(_json["error"]);
+    }
+    if (_json.containsKey("metadata")) {
+      metadata = _json["metadata"];
+    }
+    if (_json.containsKey("name")) {
+      name = _json["name"];
+    }
+    if (_json.containsKey("response")) {
+      response = _json["response"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (done != null) {
+      _json["done"] = done;
+    }
+    if (error != null) {
+      _json["error"] = (error).toJson();
+    }
+    if (metadata != null) {
+      _json["metadata"] = metadata;
+    }
+    if (name != null) {
+      _json["name"] = name;
+    }
+    if (response != null) {
+      _json["response"] = response;
+    }
+    return _json;
+  }
+}
+
+/**
+ * A Cloud Dataproc job for running Apache Pig (https://pig.apache.org/) queries
+ * on YARN.
+ */
+class PigJob {
+  /**
+   * Optional. Whether to continue executing queries if a query fails. The
+   * default value is false. Setting to true can be useful when executing
+   * independent parallel queries.
+   */
+  core.bool continueOnFailure;
+  /**
+   * Optional. HCFS URIs of jar files to add to the CLASSPATH of the Pig Client
+   * and Hadoop MapReduce (MR) tasks. Can contain Pig UDFs.
+   */
+  core.List<core.String> jarFileUris;
+  /** Optional. The runtime log config for job execution. */
+  LoggingConfig loggingConfig;
+  /**
+   * Optional. A mapping of property names to values, used to configure Pig.
+   * Properties that conflict with values set by the Cloud Dataproc API may be
+   * overwritten. Can include properties set in /etc/hadoop/conf / * -site.xml,
+   * /etc/pig/conf/pig.properties, and classes in user code.
+   */
+  core.Map<core.String, core.String> properties;
+  /** The HCFS URI of the script that contains the Pig queries. */
+  core.String queryFileUri;
+  /** A list of queries. */
+  QueryList queryList;
+  /**
+   * Optional. Mapping of query variable names to values (equivalent to the Pig
+   * command: name=[value]).
+   */
+  core.Map<core.String, core.String> scriptVariables;
+
+  PigJob();
+
+  PigJob.fromJson(core.Map _json) {
+    if (_json.containsKey("continueOnFailure")) {
+      continueOnFailure = _json["continueOnFailure"];
+    }
+    if (_json.containsKey("jarFileUris")) {
+      jarFileUris = _json["jarFileUris"];
+    }
+    if (_json.containsKey("loggingConfig")) {
+      loggingConfig = new LoggingConfig.fromJson(_json["loggingConfig"]);
+    }
+    if (_json.containsKey("properties")) {
+      properties = _json["properties"];
+    }
+    if (_json.containsKey("queryFileUri")) {
+      queryFileUri = _json["queryFileUri"];
+    }
+    if (_json.containsKey("queryList")) {
+      queryList = new QueryList.fromJson(_json["queryList"]);
+    }
+    if (_json.containsKey("scriptVariables")) {
+      scriptVariables = _json["scriptVariables"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (continueOnFailure != null) {
+      _json["continueOnFailure"] = continueOnFailure;
+    }
+    if (jarFileUris != null) {
+      _json["jarFileUris"] = jarFileUris;
+    }
+    if (loggingConfig != null) {
+      _json["loggingConfig"] = (loggingConfig).toJson();
+    }
+    if (properties != null) {
+      _json["properties"] = properties;
+    }
+    if (queryFileUri != null) {
+      _json["queryFileUri"] = queryFileUri;
+    }
+    if (queryList != null) {
+      _json["queryList"] = (queryList).toJson();
+    }
+    if (scriptVariables != null) {
+      _json["scriptVariables"] = scriptVariables;
+    }
+    return _json;
+  }
+}
+
+/**
+ * A Cloud Dataproc job for running Apache PySpark
+ * (https://spark.apache.org/docs/0.9.0/python-programming-guide.html)
+ * applications on YARN.
+ */
+class PySparkJob {
+  /**
+   * Optional. HCFS URIs of archives to be extracted in the working directory of
+   * .jar, .tar, .tar.gz, .tgz, and .zip.
+   */
+  core.List<core.String> archiveUris;
+  /**
+   * Optional. The arguments to pass to the driver. Do not include arguments,
+   * such as --conf, that can be set as job properties, since a collision may
+   * occur that causes an incorrect job submission.
+   */
+  core.List<core.String> args;
+  /**
+   * Optional. HCFS URIs of files to be copied to the working directory of
+   * Python drivers and distributed tasks. Useful for naively parallel tasks.
+   */
+  core.List<core.String> fileUris;
+  /**
+   * Optional. HCFS URIs of jar files to add to the CLASSPATHs of the Python
+   * driver and tasks.
+   */
+  core.List<core.String> jarFileUris;
+  /** Optional. The runtime log config for job execution. */
+  LoggingConfig loggingConfig;
+  /**
+   * Required. The HCFS URI of the main Python file to use as the driver. Must
+   * be a .py file.
+   */
+  core.String mainPythonFileUri;
+  /**
+   * Optional. A mapping of property names to values, used to configure PySpark.
+   * Properties that conflict with values set by the Cloud Dataproc API may be
+   * overwritten. Can include properties set in
+   * /etc/spark/conf/spark-defaults.conf and classes in user code.
+   */
+  core.Map<core.String, core.String> properties;
+  /**
+   * Optional. HCFS file URIs of Python files to pass to the PySpark framework.
+   * Supported file types: .py, .egg, and .zip.
+   */
+  core.List<core.String> pythonFileUris;
+
+  PySparkJob();
+
+  PySparkJob.fromJson(core.Map _json) {
+    if (_json.containsKey("archiveUris")) {
+      archiveUris = _json["archiveUris"];
+    }
+    if (_json.containsKey("args")) {
+      args = _json["args"];
+    }
+    if (_json.containsKey("fileUris")) {
+      fileUris = _json["fileUris"];
+    }
+    if (_json.containsKey("jarFileUris")) {
+      jarFileUris = _json["jarFileUris"];
+    }
+    if (_json.containsKey("loggingConfig")) {
+      loggingConfig = new LoggingConfig.fromJson(_json["loggingConfig"]);
+    }
+    if (_json.containsKey("mainPythonFileUri")) {
+      mainPythonFileUri = _json["mainPythonFileUri"];
+    }
+    if (_json.containsKey("properties")) {
+      properties = _json["properties"];
+    }
+    if (_json.containsKey("pythonFileUris")) {
+      pythonFileUris = _json["pythonFileUris"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (archiveUris != null) {
+      _json["archiveUris"] = archiveUris;
+    }
+    if (args != null) {
+      _json["args"] = args;
+    }
+    if (fileUris != null) {
+      _json["fileUris"] = fileUris;
+    }
+    if (jarFileUris != null) {
+      _json["jarFileUris"] = jarFileUris;
+    }
+    if (loggingConfig != null) {
+      _json["loggingConfig"] = (loggingConfig).toJson();
+    }
+    if (mainPythonFileUri != null) {
+      _json["mainPythonFileUri"] = mainPythonFileUri;
+    }
+    if (properties != null) {
+      _json["properties"] = properties;
+    }
+    if (pythonFileUris != null) {
+      _json["pythonFileUris"] = pythonFileUris;
+    }
+    return _json;
+  }
+}
+
+/** A list of queries to run on a cluster. */
+class QueryList {
+  /**
+   * Required. The queries to execute. You do not need to terminate a query with
+   * a semicolon. Multiple queries can be specified in one string by separating
+   * each with a semicolon. Here is an example of an Cloud Dataproc API snippet
+   * that uses a QueryList to specify a HiveJob:
+   * "hiveJob": {
+   *   "queryList": {
+   *     "queries": [
+   *       "query1",
+   *       "query2",
+   *       "query3;query4",
+   *     ]
+   *   }
+   * }
+   */
+  core.List<core.String> queries;
+
+  QueryList();
+
+  QueryList.fromJson(core.Map _json) {
+    if (_json.containsKey("queries")) {
+      queries = _json["queries"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (queries != null) {
+      _json["queries"] = queries;
+    }
+    return _json;
+  }
+}
+
+/** Specifies the selection and config of software inside the cluster. */
+class SoftwareConfig {
+  /**
+   * Optional. The version of software inside the cluster. It must match the
+   * regular expression [0-9]+\.[0-9]+. If unspecified, it defaults to the
+   * latest version (see Cloud Dataproc Versioning).
+   */
+  core.String imageVersion;
+  /**
+   * Optional. The properties to set on daemon config files.Property keys are
+   * specified in prefix:property format, such as core:fs.defaultFS. The
+   * following are supported prefixes and their mappings:
+   * capacity-scheduler: capacity-scheduler.xml
+   * core: core-site.xml
+   * distcp: distcp-default.xml
+   * hdfs: hdfs-site.xml
+   * hive: hive-site.xml
+   * mapred: mapred-site.xml
+   * pig: pig.properties
+   * spark: spark-defaults.conf
+   * yarn: yarn-site.xml
+   */
+  core.Map<core.String, core.String> properties;
+
+  SoftwareConfig();
+
+  SoftwareConfig.fromJson(core.Map _json) {
+    if (_json.containsKey("imageVersion")) {
+      imageVersion = _json["imageVersion"];
+    }
+    if (_json.containsKey("properties")) {
+      properties = _json["properties"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (imageVersion != null) {
+      _json["imageVersion"] = imageVersion;
+    }
+    if (properties != null) {
+      _json["properties"] = properties;
+    }
+    return _json;
+  }
+}
+
+/**
+ * A Cloud Dataproc job for running Apache Spark (http://spark.apache.org/)
+ * applications on YARN.
+ */
+class SparkJob {
+  /**
+   * Optional. HCFS URIs of archives to be extracted in the working directory of
+   * Spark drivers and tasks. Supported file types: .jar, .tar, .tar.gz, .tgz,
+   * and .zip.
+   */
+  core.List<core.String> archiveUris;
+  /**
+   * Optional. The arguments to pass to the driver. Do not include arguments,
+   * such as --conf, that can be set as job properties, since a collision may
+   * occur that causes an incorrect job submission.
+   */
+  core.List<core.String> args;
+  /**
+   * Optional. HCFS URIs of files to be copied to the working directory of Spark
+   * drivers and distributed tasks. Useful for naively parallel tasks.
+   */
+  core.List<core.String> fileUris;
+  /**
+   * Optional. HCFS URIs of jar files to add to the CLASSPATHs of the Spark
+   * driver and tasks.
+   */
+  core.List<core.String> jarFileUris;
+  /** Optional. The runtime log config for job execution. */
+  LoggingConfig loggingConfig;
+  /**
+   * The name of the driver's main class. The jar file that contains the class
+   * must be in the default CLASSPATH or specified in jar_file_uris.
+   */
+  core.String mainClass;
+  /** The HCFS URI of the jar file that contains the main class. */
+  core.String mainJarFileUri;
+  /**
+   * Optional. A mapping of property names to values, used to configure Spark.
+   * Properties that conflict with values set by the Cloud Dataproc API may be
+   * overwritten. Can include properties set in
+   * /etc/spark/conf/spark-defaults.conf and classes in user code.
+   */
+  core.Map<core.String, core.String> properties;
+
+  SparkJob();
+
+  SparkJob.fromJson(core.Map _json) {
+    if (_json.containsKey("archiveUris")) {
+      archiveUris = _json["archiveUris"];
+    }
+    if (_json.containsKey("args")) {
+      args = _json["args"];
+    }
+    if (_json.containsKey("fileUris")) {
+      fileUris = _json["fileUris"];
+    }
+    if (_json.containsKey("jarFileUris")) {
+      jarFileUris = _json["jarFileUris"];
+    }
+    if (_json.containsKey("loggingConfig")) {
+      loggingConfig = new LoggingConfig.fromJson(_json["loggingConfig"]);
+    }
+    if (_json.containsKey("mainClass")) {
+      mainClass = _json["mainClass"];
+    }
+    if (_json.containsKey("mainJarFileUri")) {
+      mainJarFileUri = _json["mainJarFileUri"];
+    }
+    if (_json.containsKey("properties")) {
+      properties = _json["properties"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (archiveUris != null) {
+      _json["archiveUris"] = archiveUris;
+    }
+    if (args != null) {
+      _json["args"] = args;
+    }
+    if (fileUris != null) {
+      _json["fileUris"] = fileUris;
+    }
+    if (jarFileUris != null) {
+      _json["jarFileUris"] = jarFileUris;
+    }
+    if (loggingConfig != null) {
+      _json["loggingConfig"] = (loggingConfig).toJson();
+    }
+    if (mainClass != null) {
+      _json["mainClass"] = mainClass;
+    }
+    if (mainJarFileUri != null) {
+      _json["mainJarFileUri"] = mainJarFileUri;
+    }
+    if (properties != null) {
+      _json["properties"] = properties;
+    }
+    return _json;
+  }
+}
+
+/**
+ * A Cloud Dataproc job for running Apache Spark SQL
+ * (http://spark.apache.org/sql/) queries.
+ */
+class SparkSqlJob {
+  /** Optional. HCFS URIs of jar files to be added to the Spark CLASSPATH. */
+  core.List<core.String> jarFileUris;
+  /** Optional. The runtime log config for job execution. */
+  LoggingConfig loggingConfig;
+  /**
+   * Optional. A mapping of property names to values, used to configure Spark
+   * SQL's SparkConf. Properties that conflict with values set by the Cloud
+   * Dataproc API may be overwritten.
+   */
+  core.Map<core.String, core.String> properties;
+  /** The HCFS URI of the script that contains SQL queries. */
+  core.String queryFileUri;
+  /** A list of queries. */
+  QueryList queryList;
+  /**
+   * Optional. Mapping of query variable names to values (equivalent to the
+   * Spark SQL command: SET name="value";).
+   */
+  core.Map<core.String, core.String> scriptVariables;
+
+  SparkSqlJob();
+
+  SparkSqlJob.fromJson(core.Map _json) {
+    if (_json.containsKey("jarFileUris")) {
+      jarFileUris = _json["jarFileUris"];
+    }
+    if (_json.containsKey("loggingConfig")) {
+      loggingConfig = new LoggingConfig.fromJson(_json["loggingConfig"]);
+    }
+    if (_json.containsKey("properties")) {
+      properties = _json["properties"];
+    }
+    if (_json.containsKey("queryFileUri")) {
+      queryFileUri = _json["queryFileUri"];
+    }
+    if (_json.containsKey("queryList")) {
+      queryList = new QueryList.fromJson(_json["queryList"]);
+    }
+    if (_json.containsKey("scriptVariables")) {
+      scriptVariables = _json["scriptVariables"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (jarFileUris != null) {
+      _json["jarFileUris"] = jarFileUris;
+    }
+    if (loggingConfig != null) {
+      _json["loggingConfig"] = (loggingConfig).toJson();
+    }
+    if (properties != null) {
+      _json["properties"] = properties;
+    }
+    if (queryFileUri != null) {
+      _json["queryFileUri"] = queryFileUri;
+    }
+    if (queryList != null) {
+      _json["queryList"] = (queryList).toJson();
+    }
+    if (scriptVariables != null) {
+      _json["scriptVariables"] = scriptVariables;
+    }
+    return _json;
+  }
+}
+
+/**
+ * The Status type defines a logical error model that is suitable for different
+ * programming environments, including REST APIs and RPC APIs. It is used by
+ * gRPC (https://github.com/grpc). The error model is designed to be:
+ * Simple to use and understand for most users
+ * Flexible enough to meet unexpected needsOverviewThe Status message contains
+ * three pieces of data: error code, error message, and error details. The error
+ * code should be an enum value of google.rpc.Code, but it may accept additional
+ * error codes if needed. The error message should be a developer-facing English
+ * message that helps developers understand and resolve the error. If a
+ * localized user-facing error message is needed, put the localized message in
+ * the error details or localize it in the client. The optional error details
+ * may contain arbitrary information about the error. There is a predefined set
+ * of error detail types in the package google.rpc that can be used for common
+ * error conditions.Language mappingThe Status message is the logical
+ * representation of the error model, but it is not necessarily the actual wire
+ * format. When the Status message is exposed in different client libraries and
+ * different wire protocols, it can be mapped differently. For example, it will
+ * likely be mapped to some exceptions in Java, but more likely mapped to some
+ * error codes in C.Other usesThe error model and the Status message can be used
+ * in a variety of environments, either with or without APIs, to provide a
+ * consistent developer experience across different environments.Example uses of
+ * this error model include:
+ * Partial errors. If a service needs to return partial errors to the client, it
+ * may embed the Status in the normal response to indicate the partial errors.
+ * Workflow errors. A typical workflow has multiple steps. Each step may have a
+ * Status message for error reporting.
+ * Batch operations. If a client uses batch request and batch response, the
+ * Status message should be used directly inside batch response, one for each
+ * error sub-response.
+ * Asynchronous operations. If an API call embeds asynchronous operation results
+ * in its response, the status of those operations should be represented
+ * directly using the Status message.
+ * Logging. If some API errors are stored in logs, the message Status could be
+ * used directly after any stripping needed for security/privacy reasons.
+ */
+class Status {
+  /** The status code, which should be an enum value of google.rpc.Code. */
+  core.int code;
+  /**
+   * A list of messages that carry the error details. There will be a common set
+   * of message types for APIs to use.
+   *
+   * The values for Object must be JSON objects. It can consist of `num`,
+   * `String`, `bool` and `null` as well as `Map` and `List` values.
+   */
+  core.List<core.Map<core.String, core.Object>> details;
+  /**
+   * A developer-facing error message, which should be in English. Any
+   * user-facing error message should be localized and sent in the
+   * google.rpc.Status.details field, or localized by the client.
+   */
+  core.String message;
+
+  Status();
+
+  Status.fromJson(core.Map _json) {
+    if (_json.containsKey("code")) {
+      code = _json["code"];
+    }
+    if (_json.containsKey("details")) {
+      details = _json["details"];
+    }
+    if (_json.containsKey("message")) {
+      message = _json["message"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (code != null) {
+      _json["code"] = code;
+    }
+    if (details != null) {
+      _json["details"] = details;
+    }
+    if (message != null) {
+      _json["message"] = message;
+    }
+    return _json;
+  }
+}
+
+/** A request to submit a job. */
+class SubmitJobRequest {
+  /** Required. The job resource. */
+  Job job;
+
+  SubmitJobRequest();
+
+  SubmitJobRequest.fromJson(core.Map _json) {
+    if (_json.containsKey("job")) {
+      job = new Job.fromJson(_json["job"]);
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (job != null) {
+      _json["job"] = (job).toJson();
+    }
+    return _json;
+  }
+}
+
+/**
+ * A YARN application created by a job. Application information is a subset of
+ * <code>org.apache.hadoop.yarn.proto.YarnProtos.ApplicationReportProto</code>.Beta
+ * Feature: This report is available for testing purposes only. It may be
+ * changed before final release.
+ */
+class YarnApplication {
+  /** Required. The application name. */
+  core.String name;
+  /** Required. The numerical progress of the application, from 1 to 100. */
+  core.double progress;
+  /**
+   * Required. The application state.
+   * Possible string values are:
+   * - "STATE_UNSPECIFIED" : Status is unspecified.
+   * - "NEW" : Status is NEW.
+   * - "NEW_SAVING" : Status is NEW_SAVING.
+   * - "SUBMITTED" : Status is SUBMITTED.
+   * - "ACCEPTED" : Status is ACCEPTED.
+   * - "RUNNING" : Status is RUNNING.
+   * - "FINISHED" : Status is FINISHED.
+   * - "FAILED" : Status is FAILED.
+   * - "KILLED" : Status is KILLED.
+   */
+  core.String state;
+  /**
+   * Optional. The HTTP URL of the ApplicationMaster, HistoryServer, or
+   * TimelineServer that provides application-specific information. The URL uses
+   * the internal hostname, and requires a proxy server for resolution and,
+   * possibly, access.
+   */
+  core.String trackingUrl;
+
+  YarnApplication();
+
+  YarnApplication.fromJson(core.Map _json) {
+    if (_json.containsKey("name")) {
+      name = _json["name"];
+    }
+    if (_json.containsKey("progress")) {
+      progress = _json["progress"];
+    }
+    if (_json.containsKey("state")) {
+      state = _json["state"];
+    }
+    if (_json.containsKey("trackingUrl")) {
+      trackingUrl = _json["trackingUrl"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (name != null) {
+      _json["name"] = name;
+    }
+    if (progress != null) {
+      _json["progress"] = progress;
+    }
+    if (state != null) {
+      _json["state"] = state;
+    }
+    if (trackingUrl != null) {
+      _json["trackingUrl"] = trackingUrl;
+    }
+    return _json;
+  }
+}
diff --git a/generated/googleapis/lib/deploymentmanager/v2.dart b/generated/googleapis/lib/deploymentmanager/v2.dart
index c85ffeb..97e762d 100644
--- a/generated/googleapis/lib/deploymentmanager/v2.dart
+++ b/generated/googleapis/lib/deploymentmanager/v2.dart
@@ -326,9 +326,9 @@
    * Value must have pattern
    * "(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))".
    *
-   * [filter] - Sets a filter expression for filtering listed resources, in the
-   * form filter={expression}. Your {expression} must be in the format:
-   * field_name comparison_string literal_string.
+   * [filter] - Sets a filter {expression} for filtering listed resources. Your
+   * {expression} must be in the format: field_name comparison_string
+   * literal_string.
    *
    * The field_name is the name of the field you want to compare. Only atomic
    * field types are supported (string, number, boolean). The comparison_string
@@ -339,7 +339,7 @@
    * The literal value must match the entire field.
    *
    * For example, to filter for instances that do not have a name of
-   * example-instance, you would use filter=name ne example-instance.
+   * example-instance, you would use name ne example-instance.
    *
    * You can filter on nested fields. For example, you could filter on instances
    * that have set the scheduling.automaticRestart field to true. Use filtering
@@ -814,9 +814,9 @@
    * [deployment] - The name of the deployment for this request.
    * Value must have pattern "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?".
    *
-   * [filter] - Sets a filter expression for filtering listed resources, in the
-   * form filter={expression}. Your {expression} must be in the format:
-   * field_name comparison_string literal_string.
+   * [filter] - Sets a filter {expression} for filtering listed resources. Your
+   * {expression} must be in the format: field_name comparison_string
+   * literal_string.
    *
    * The field_name is the name of the field you want to compare. Only atomic
    * field types are supported (string, number, boolean). The comparison_string
@@ -827,7 +827,7 @@
    * The literal value must match the entire field.
    *
    * For example, to filter for instances that do not have a name of
-   * example-instance, you would use filter=name ne example-instance.
+   * example-instance, you would use name ne example-instance.
    *
    * You can filter on nested fields. For example, you could filter on instances
    * that have set the scheduling.automaticRestart field to true. Use filtering
@@ -971,9 +971,9 @@
    * Value must have pattern
    * "(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))".
    *
-   * [filter] - Sets a filter expression for filtering listed resources, in the
-   * form filter={expression}. Your {expression} must be in the format:
-   * field_name comparison_string literal_string.
+   * [filter] - Sets a filter {expression} for filtering listed resources. Your
+   * {expression} must be in the format: field_name comparison_string
+   * literal_string.
    *
    * The field_name is the name of the field you want to compare. Only atomic
    * field types are supported (string, number, boolean). The comparison_string
@@ -984,7 +984,7 @@
    * The literal value must match the entire field.
    *
    * For example, to filter for instances that do not have a name of
-   * example-instance, you would use filter=name ne example-instance.
+   * example-instance, you would use name ne example-instance.
    *
    * You can filter on nested fields. For example, you could filter on instances
    * that have set the scheduling.automaticRestart field to true. Use filtering
@@ -1134,9 +1134,9 @@
    * [deployment] - The name of the deployment for this request.
    * Value must have pattern "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?".
    *
-   * [filter] - Sets a filter expression for filtering listed resources, in the
-   * form filter={expression}. Your {expression} must be in the format:
-   * field_name comparison_string literal_string.
+   * [filter] - Sets a filter {expression} for filtering listed resources. Your
+   * {expression} must be in the format: field_name comparison_string
+   * literal_string.
    *
    * The field_name is the name of the field you want to compare. Only atomic
    * field types are supported (string, number, boolean). The comparison_string
@@ -1147,7 +1147,7 @@
    * The literal value must match the entire field.
    *
    * For example, to filter for instances that do not have a name of
-   * example-instance, you would use filter=name ne example-instance.
+   * example-instance, you would use name ne example-instance.
    *
    * You can filter on nested fields. For example, you could filter on instances
    * that have set the scheduling.automaticRestart field to true. Use filtering
@@ -1245,9 +1245,9 @@
    * Value must have pattern
    * "(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))".
    *
-   * [filter] - Sets a filter expression for filtering listed resources, in the
-   * form filter={expression}. Your {expression} must be in the format:
-   * field_name comparison_string literal_string.
+   * [filter] - Sets a filter {expression} for filtering listed resources. Your
+   * {expression} must be in the format: field_name comparison_string
+   * literal_string.
    *
    * The field_name is the name of the field you want to compare. Only atomic
    * field types are supported (string, number, boolean). The comparison_string
@@ -1258,7 +1258,7 @@
    * The literal value must match the entire field.
    *
    * For example, to filter for instances that do not have a name of
-   * example-instance, you would use filter=name ne example-instance.
+   * example-instance, you would use name ne example-instance.
    *
    * You can filter on nested fields. For example, you could filter on instances
    * that have set the scheduling.automaticRestart field to true. Use filtering
@@ -1446,6 +1446,13 @@
 /** Associates `members` with a `role`. */
 class Binding {
   /**
+   * The condition that is associated with this binding. NOTE: an unsatisfied
+   * condition will not allow user access via current binding. Different
+   * bindings, including their conditions, are examined independently. This
+   * field is GOOGLE_INTERNAL.
+   */
+  Expr condition;
+  /**
    * Specifies the identities requesting access for a Cloud Platform resource.
    * `members` can have the following values:
    *
@@ -1466,6 +1473,8 @@
    * * `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`.
    */
@@ -1479,6 +1488,9 @@
   Binding();
 
   Binding.fromJson(core.Map _json) {
+    if (_json.containsKey("condition")) {
+      condition = new Expr.fromJson(_json["condition"]);
+    }
     if (_json.containsKey("members")) {
       members = _json["members"];
     }
@@ -1489,6 +1501,9 @@
 
   core.Map<core.String, core.Object> toJson() {
     final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (condition != null) {
+      _json["condition"] = (condition).toJson();
+    }
     if (members != null) {
       _json["members"] = members;
     }
@@ -1950,6 +1965,72 @@
   }
 }
 
+/**
+ * Represents an expression text. Example:
+ *
+ * title: "User account presence" description: "Determines whether the request
+ * has a user account" expression: "size(request.user) > 0"
+ */
+class Expr {
+  /**
+   * An optional description of the expression. This is a longer text which
+   * describes the expression, e.g. when hovered over it in a UI.
+   */
+  core.String description;
+  /**
+   * Textual representation of an expression in Common Expression Language
+   * syntax.
+   *
+   * The application context of the containing message determines which
+   * well-known feature set of CEL is supported.
+   */
+  core.String expression;
+  /**
+   * An optional string indicating the location of the expression for error
+   * reporting, e.g. a file name and a position in the file.
+   */
+  core.String location;
+  /**
+   * An optional title for the expression, i.e. a short string describing its
+   * purpose. This can be used e.g. in UIs which allow to enter the expression.
+   */
+  core.String title;
+
+  Expr();
+
+  Expr.fromJson(core.Map _json) {
+    if (_json.containsKey("description")) {
+      description = _json["description"];
+    }
+    if (_json.containsKey("expression")) {
+      expression = _json["expression"];
+    }
+    if (_json.containsKey("location")) {
+      location = _json["location"];
+    }
+    if (_json.containsKey("title")) {
+      title = _json["title"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (description != null) {
+      _json["description"] = description;
+    }
+    if (expression != null) {
+      _json["expression"] = expression;
+    }
+    if (location != null) {
+      _json["location"] = location;
+    }
+    if (title != null) {
+      _json["title"] = title;
+    }
+    return _json;
+  }
+}
+
 class ImportFile {
   /** The contents of the file. */
   core.String content;
@@ -1981,12 +2062,17 @@
 
 /** Specifies what kind of log the caller must write */
 class LogConfig {
+  /** Cloud audit options. */
+  LogConfigCloudAuditOptions cloudAudit;
   /** Counter options. */
   LogConfigCounterOptions counter;
 
   LogConfig();
 
   LogConfig.fromJson(core.Map _json) {
+    if (_json.containsKey("cloudAudit")) {
+      cloudAudit = new LogConfigCloudAuditOptions.fromJson(_json["cloudAudit"]);
+    }
     if (_json.containsKey("counter")) {
       counter = new LogConfigCounterOptions.fromJson(_json["counter"]);
     }
@@ -1994,6 +2080,9 @@
 
   core.Map<core.String, core.Object> toJson() {
     final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (cloudAudit != null) {
+      _json["cloudAudit"] = (cloudAudit).toJson();
+    }
     if (counter != null) {
       _json["counter"] = (counter).toJson();
     }
@@ -2001,6 +2090,28 @@
   }
 }
 
+/** Write a Cloud Audit log */
+class LogConfigCloudAuditOptions {
+  /** The log_name to populate in the Cloud Audit Record. */
+  core.String logName;
+
+  LogConfigCloudAuditOptions();
+
+  LogConfigCloudAuditOptions.fromJson(core.Map _json) {
+    if (_json.containsKey("logName")) {
+      logName = _json["logName"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (logName != null) {
+      _json["logName"] = logName;
+    }
+    return _json;
+  }
+}
+
 /** Options for counters */
 class LogConfigCounterOptions {
   /** The field value to attribute. */
@@ -2616,9 +2727,8 @@
   /** Specifies cloud audit logging configuration for this policy. */
   core.List<AuditConfig> auditConfigs;
   /**
-   * Associates a list of `members` to a `role`. Multiple `bindings` must not be
-   * specified for the same `role`. `bindings` with no members will result in an
-   * error.
+   * Associates a list of `members` to a `role`. `bindings` with no members will
+   * result in an error.
    */
   core.List<Binding> bindings;
   /**
diff --git a/generated/googleapis/lib/doubleclickbidmanager/v1.dart b/generated/googleapis/lib/doubleclickbidmanager/v1.dart
index 440de1f..488c378 100644
--- a/generated/googleapis/lib/doubleclickbidmanager/v1.dart
+++ b/generated/googleapis/lib/doubleclickbidmanager/v1.dart
@@ -487,8 +487,8 @@
 /** Download line items response. */
 class DownloadLineItemsResponse {
   /**
-   * Retrieved line items in CSV format. Refer to  Entity Write File Format or
-   * Structured Data File Format for more information on file formats.
+   * Retrieved line items in CSV format. For more information about file
+   * formats, see  Entity Write File Format.
    */
   core.String lineItems;
 
diff --git a/generated/googleapis/lib/drive/v2.dart b/generated/googleapis/lib/drive/v2.dart
index 51a3651..329af8a 100644
--- a/generated/googleapis/lib/drive/v2.dart
+++ b/generated/googleapis/lib/drive/v2.dart
@@ -1304,7 +1304,7 @@
 
   /**
    * Exports a Google Doc to the requested MIME type and returns the exported
-   * content.
+   * content. Please note that the exported content is limited to 10MB.
    *
    * Request parameters:
    *
diff --git a/generated/googleapis/lib/drive/v3.dart b/generated/googleapis/lib/drive/v3.dart
index 476e6f8..7664997 100644
--- a/generated/googleapis/lib/drive/v3.dart
+++ b/generated/googleapis/lib/drive/v3.dart
@@ -920,7 +920,7 @@
 
   /**
    * Exports a Google Doc to the requested MIME type and returns the exported
-   * content.
+   * content. Please note that the exported content is limited to 10MB.
    *
    * Request parameters:
    *
diff --git a/generated/googleapis/lib/firebaserules/v1.dart b/generated/googleapis/lib/firebaserules/v1.dart
index 12b9724..2201def 100644
--- a/generated/googleapis/lib/firebaserules/v1.dart
+++ b/generated/googleapis/lib/firebaserules/v1.dart
@@ -292,14 +292,6 @@
    * Format: `projects/{project_id}`
    * Value must have pattern "^projects/[^/]+$".
    *
-   * [pageToken] - Next page token for the next batch of `Release` instances.
-   *
-   * [pageSize] - Page size to load. Maximum of 100. Defaults to 10.
-   * Note: `page_size` is just a hint and the service may choose to load fewer
-   * than `page_size` results due to the size of the output. To traverse all of
-   * the releases, the caller should iterate until the `page_token` on the
-   * response is empty.
-   *
    * [filter] - `Release` filter. The list method supports filters with
    * restrictions on the
    * `Release.name`, `Release.ruleset_name`, and `Release.test_suite_name`.
@@ -326,6 +318,14 @@
    * relative to the project. Fully qualified prefixed may also be used. e.g.
    * `test_suite_name=projects/foo/testsuites/uuid1`
    *
+   * [pageToken] - Next page token for the next batch of `Release` instances.
+   *
+   * [pageSize] - Page size to load. Maximum of 100. Defaults to 10.
+   * Note: `page_size` is just a hint and the service may choose to load fewer
+   * than `page_size` results due to the size of the output. To traverse all of
+   * the releases, the caller should iterate until the `page_token` on the
+   * response is empty.
+   *
    * Completes with a [ListReleasesResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -334,7 +334,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListReleasesResponse> list(core.String name, {core.String pageToken, core.int pageSize, core.String filter}) {
+  async.Future<ListReleasesResponse> list(core.String name, {core.String filter, core.String pageToken, core.int pageSize}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -345,15 +345,15 @@
     if (name == null) {
       throw new core.ArgumentError("Parameter name is required.");
     }
+    if (filter != null) {
+      _queryParams["filter"] = [filter];
+    }
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
-    if (filter != null) {
-      _queryParams["filter"] = [filter];
-    }
 
     _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name') + '/releases';
 
@@ -600,14 +600,6 @@
    * Format: `projects/{project_id}`
    * Value must have pattern "^projects/[^/]+$".
    *
-   * [pageToken] - Next page token for loading the next batch of `Ruleset`
-   * instances.
-   *
-   * [pageSize] - Page size to load. Maximum of 100. Defaults to 10.
-   * Note: `page_size` is just a hint and the service may choose to load less
-   * than `page_size` due to the size of the output. To traverse all of the
-   * releases, caller should iterate until the `page_token` is empty.
-   *
    * [filter] - `Ruleset` filter. The list method supports filters with
    * restrictions on
    * `Ruleset.name`.
@@ -617,6 +609,14 @@
    *
    * Example: `create_time > date("2017-01-01") AND name=UUID-*`
    *
+   * [pageToken] - Next page token for loading the next batch of `Ruleset`
+   * instances.
+   *
+   * [pageSize] - Page size to load. Maximum of 100. Defaults to 10.
+   * Note: `page_size` is just a hint and the service may choose to load less
+   * than `page_size` due to the size of the output. To traverse all of the
+   * releases, caller should iterate until the `page_token` is empty.
+   *
    * Completes with a [ListRulesetsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -625,7 +625,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListRulesetsResponse> list(core.String name, {core.String pageToken, core.int pageSize, core.String filter}) {
+  async.Future<ListRulesetsResponse> list(core.String name, {core.String filter, core.String pageToken, core.int pageSize}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -636,15 +636,15 @@
     if (name == null) {
       throw new core.ArgumentError("Parameter name is required.");
     }
+    if (filter != null) {
+      _queryParams["filter"] = [filter];
+    }
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
-    if (filter != null) {
-      _queryParams["filter"] = [filter];
-    }
 
     _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name') + '/rulesets';
 
diff --git a/generated/googleapis/lib/genomics/v1.dart b/generated/googleapis/lib/genomics/v1.dart
index 26b7531..886cefa 100644
--- a/generated/googleapis/lib/genomics/v1.dart
+++ b/generated/googleapis/lib/genomics/v1.dart
@@ -1036,17 +1036,17 @@
    *
    * Request parameters:
    *
+   * [pageToken] - The continuation token, which is used to page through large
+   * result sets.
+   * To get the next page of results, set this parameter to the value of
+   * `nextPageToken` from the previous response.
+   *
    * [pageSize] - The maximum number of results to return in a single page. If
    * unspecified,
    * defaults to 50. The maximum value is 1024.
    *
    * [projectId] - Required. The Google Cloud project ID to list datasets for.
    *
-   * [pageToken] - The continuation token, which is used to page through large
-   * result sets.
-   * To get the next page of results, set this parameter to the value of
-   * `nextPageToken` from the previous response.
-   *
    * Completes with a [ListDatasetsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -1055,7 +1055,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListDatasetsResponse> list({core.int pageSize, core.String projectId, core.String pageToken}) {
+  async.Future<ListDatasetsResponse> list({core.String pageToken, core.int pageSize, core.String projectId}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -1063,15 +1063,15 @@
     var _downloadOptions = commons.DownloadOptions.Metadata;
     var _body = null;
 
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
     if (projectId != null) {
       _queryParams["projectId"] = [projectId];
     }
-    if (pageToken != null) {
-      _queryParams["pageToken"] = [pageToken];
-    }
 
     _url = 'v1/datasets';
 
@@ -1410,6 +1410,12 @@
    * [name] - The name of the operation's parent resource.
    * Value must have pattern "^operations$".
    *
+   * [pageToken] - The standard list page token.
+   *
+   * [pageSize] - The maximum number of results to return. If unspecified,
+   * defaults to
+   * 256. The maximum value is 2048.
+   *
    * [filter] - A string for filtering Operations.
    * The following filter fields are supported&#58;
    *
@@ -1430,12 +1436,6 @@
    * * `projectId = my-project AND labels.color = *`
    * * `projectId = my-project AND labels.color = red`
    *
-   * [pageToken] - The standard list page token.
-   *
-   * [pageSize] - The maximum number of results to return. If unspecified,
-   * defaults to
-   * 256. The maximum value is 2048.
-   *
    * Completes with a [ListOperationsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -1444,7 +1444,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListOperationsResponse> list(core.String name, {core.String filter, core.String pageToken, core.int pageSize}) {
+  async.Future<ListOperationsResponse> list(core.String name, {core.String pageToken, core.int pageSize, core.String filter}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -1455,15 +1455,15 @@
     if (name == null) {
       throw new core.ArgumentError("Parameter name is required.");
     }
-    if (filter != null) {
-      _queryParams["filter"] = [filter];
-    }
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
+    if (filter != null) {
+      _queryParams["filter"] = [filter];
+    }
 
     _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name');
 
@@ -1826,6 +1826,10 @@
    * [readGroupSetId] - Required. The ID of the read group set over which
    * coverage is requested.
    *
+   * [referenceName] - The name of the reference to query, within the reference
+   * set associated
+   * with this query. Optional.
+   *
    * [end] - The end position of the range on the reference, 0-based exclusive.
    * If
    * specified, `referenceName` must also be specified. If unset or 0, defaults
@@ -1853,10 +1857,6 @@
    * `bucketWidth` is currently 2048 base pairs; this is subject to
    * change.
    *
-   * [referenceName] - The name of the reference to query, within the reference
-   * set associated
-   * with this query. Optional.
-   *
    * Completes with a [ListCoverageBucketsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -1865,7 +1865,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListCoverageBucketsResponse> list(core.String readGroupSetId, {core.String end, core.String pageToken, core.int pageSize, core.String start, core.String targetBucketWidth, core.String referenceName}) {
+  async.Future<ListCoverageBucketsResponse> list(core.String readGroupSetId, {core.String referenceName, core.String end, core.String pageToken, core.int pageSize, core.String start, core.String targetBucketWidth}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -1876,6 +1876,9 @@
     if (readGroupSetId == null) {
       throw new core.ArgumentError("Parameter readGroupSetId is required.");
     }
+    if (referenceName != null) {
+      _queryParams["referenceName"] = [referenceName];
+    }
     if (end != null) {
       _queryParams["end"] = [end];
     }
@@ -1891,9 +1894,6 @@
     if (targetBucketWidth != null) {
       _queryParams["targetBucketWidth"] = [targetBucketWidth];
     }
-    if (referenceName != null) {
-      _queryParams["referenceName"] = [referenceName];
-    }
 
     _url = 'v1/readgroupsets/' + commons.Escaper.ecapeVariable('$readGroupSetId') + '/coveragebuckets';
 
@@ -2104,6 +2104,11 @@
    *
    * [referenceId] - The ID of the reference.
    *
+   * [pageToken] - The continuation token, which is used to page through large
+   * result sets.
+   * To get the next page of results, set this parameter to the value of
+   * `nextPageToken` from the previous response.
+   *
    * [pageSize] - The maximum number of bases to return in a single page. If
    * unspecified,
    * defaults to 200Kbp (kilo base pairs). The maximum value is 10Mbp (mega base
@@ -2115,11 +2120,6 @@
    * the length
    * of this reference.
    *
-   * [pageToken] - The continuation token, which is used to page through large
-   * result sets.
-   * To get the next page of results, set this parameter to the value of
-   * `nextPageToken` from the previous response.
-   *
    * Completes with a [ListBasesResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -2128,7 +2128,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListBasesResponse> list(core.String referenceId, {core.int pageSize, core.String start, core.String end, core.String pageToken}) {
+  async.Future<ListBasesResponse> list(core.String referenceId, {core.String pageToken, core.int pageSize, core.String start, core.String end}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -2139,6 +2139,9 @@
     if (referenceId == null) {
       throw new core.ArgumentError("Parameter referenceId is required.");
     }
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
@@ -2148,9 +2151,6 @@
     if (end != null) {
       _queryParams["end"] = [end];
     }
-    if (pageToken != null) {
-      _queryParams["pageToken"] = [pageToken];
-    }
 
     _url = 'v1/references/' + commons.Escaper.ecapeVariable('$referenceId') + '/bases';
 
@@ -6910,8 +6910,8 @@
   /** The status code, which should be an enum value of google.rpc.Code. */
   core.int code;
   /**
-   * A list of messages that carry the error details.  There will be a
-   * common set of message types for APIs to use.
+   * A list of messages that carry the error details.  There is a common set of
+   * message types for APIs to use.
    *
    * The values for Object must be JSON objects. It can consist of `num`,
    * `String`, `bool` and `null` as well as `Map` and `List` values.
diff --git a/generated/googleapis/lib/iam/v1.dart b/generated/googleapis/lib/iam/v1.dart
index 8111990..e923a7b 100644
--- a/generated/googleapis/lib/iam/v1.dart
+++ b/generated/googleapis/lib/iam/v1.dart
@@ -1162,7 +1162,6 @@
 class Policy {
   /**
    * Associates a list of `members` to a `role`.
-   * Multiple `bindings` must not be specified for the same `role`.
    * `bindings` with no members will result in an error.
    */
   core.List<Binding> bindings;
@@ -1515,7 +1514,8 @@
   core.String name;
   /**
    * The private key data. Only provided in `CreateServiceAccountKey`
-   * responses.
+   * responses. Make sure to keep the private key data secure because it
+   * allows for the assertion of the service account identity.
    */
   core.String privateKeyData;
   core.List<core.int> get privateKeyDataAsBytes {
diff --git a/generated/googleapis/lib/kgsearch/v1.dart b/generated/googleapis/lib/kgsearch/v1.dart
index ce51ade..5ba8ef2 100644
--- a/generated/googleapis/lib/kgsearch/v1.dart
+++ b/generated/googleapis/lib/kgsearch/v1.dart
@@ -39,16 +39,6 @@
    *
    * Request parameters:
    *
-   * [types] - Restricts returned entities with these types, e.g. Person
-   * (as defined in http://schema.org/Person). If multiple types are specified,
-   * returned entities will contain one or more of these types.
-   *
-   * [indent] - Enables indenting of json results.
-   *
-   * [languages] - The list of language codes (defined in ISO 693) to run the
-   * query with,
-   * e.g. 'en'.
-   *
    * [ids] - The list of entity id to be used for search instead of query
    * string.
    * To specify multiple ids in the HTTP request, repeat the parameter in the
@@ -60,6 +50,16 @@
    *
    * [query] - The literal query string for search.
    *
+   * [types] - Restricts returned entities with these types, e.g. Person
+   * (as defined in http://schema.org/Person). If multiple types are specified,
+   * returned entities will contain one or more of these types.
+   *
+   * [indent] - Enables indenting of json results.
+   *
+   * [languages] - The list of language codes (defined in ISO 693) to run the
+   * query with,
+   * e.g. 'en'.
+   *
    * Completes with a [SearchResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -68,7 +68,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<SearchResponse> search({core.List<core.String> types, core.bool indent, core.List<core.String> languages, core.List<core.String> ids, core.int limit, core.bool prefix, core.String query}) {
+  async.Future<SearchResponse> search({core.List<core.String> ids, core.int limit, core.bool prefix, core.String query, core.List<core.String> types, core.bool indent, core.List<core.String> languages}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -76,15 +76,6 @@
     var _downloadOptions = commons.DownloadOptions.Metadata;
     var _body = null;
 
-    if (types != null) {
-      _queryParams["types"] = types;
-    }
-    if (indent != null) {
-      _queryParams["indent"] = ["${indent}"];
-    }
-    if (languages != null) {
-      _queryParams["languages"] = languages;
-    }
     if (ids != null) {
       _queryParams["ids"] = ids;
     }
@@ -97,6 +88,15 @@
     if (query != null) {
       _queryParams["query"] = [query];
     }
+    if (types != null) {
+      _queryParams["types"] = types;
+    }
+    if (indent != null) {
+      _queryParams["indent"] = ["${indent}"];
+    }
+    if (languages != null) {
+      _queryParams["languages"] = languages;
+    }
 
     _url = 'v1/entities:search';
 
diff --git a/generated/googleapis/lib/logging/v2.dart b/generated/googleapis/lib/logging/v2.dart
index 7365d67..3ae50ea 100644
--- a/generated/googleapis/lib/logging/v2.dart
+++ b/generated/googleapis/lib/logging/v2.dart
@@ -1363,15 +1363,15 @@
    *
    * Value must have pattern "^organizations/[^/]+$".
    *
-   * [pageSize] - Optional. The maximum number of results to return from this
-   * request. Non-positive values are ignored. The presence of nextPageToken in
-   * the response indicates that more results might be available.
-   *
    * [pageToken] - Optional. If present, then retrieve the next batch of results
    * from the preceding call to this method. pageToken must be the value of
    * nextPageToken from the previous response. The values of other method
    * parameters should be identical to those in the previous call.
    *
+   * [pageSize] - Optional. The maximum number of results to return from this
+   * request. Non-positive values are ignored. The presence of nextPageToken in
+   * the response indicates that more results might be available.
+   *
    * Completes with a [ListSinksResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -1380,7 +1380,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListSinksResponse> list(core.String parent, {core.int pageSize, core.String pageToken}) {
+  async.Future<ListSinksResponse> list(core.String parent, {core.String pageToken, core.int pageSize}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -1391,12 +1391,12 @@
     if (parent == null) {
       throw new core.ArgumentError("Parameter parent is required.");
     }
-    if (pageSize != null) {
-      _queryParams["pageSize"] = ["${pageSize}"];
-    }
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
+    if (pageSize != null) {
+      _queryParams["pageSize"] = ["${pageSize}"];
+    }
 
     _url = 'v2/' + commons.Escaper.ecapeVariableReserved('$parent') + '/sinks';
 
@@ -1762,15 +1762,15 @@
    *
    * Value must have pattern "^projects/[^/]+$".
    *
+   * [pageSize] - Optional. The maximum number of results to return from this
+   * request. Non-positive values are ignored. The presence of nextPageToken in
+   * the response indicates that more results might be available.
+   *
    * [pageToken] - Optional. If present, then retrieve the next batch of results
    * from the preceding call to this method. pageToken must be the value of
    * nextPageToken from the previous response. The values of other method
    * parameters should be identical to those in the previous call.
    *
-   * [pageSize] - Optional. The maximum number of results to return from this
-   * request. Non-positive values are ignored. The presence of nextPageToken in
-   * the response indicates that more results might be available.
-   *
    * Completes with a [ListLogMetricsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -1779,7 +1779,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListLogMetricsResponse> list(core.String parent, {core.String pageToken, core.int pageSize}) {
+  async.Future<ListLogMetricsResponse> list(core.String parent, {core.int pageSize, core.String pageToken}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -1790,12 +1790,12 @@
     if (parent == null) {
       throw new core.ArgumentError("Parameter parent is required.");
     }
-    if (pageToken != null) {
-      _queryParams["pageToken"] = [pageToken];
-    }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
 
     _url = 'v2/' + commons.Escaper.ecapeVariableReserved('$parent') + '/metrics';
 
diff --git a/generated/googleapis/lib/manufacturers/v1.dart b/generated/googleapis/lib/manufacturers/v1.dart
index 110e355..98dc14f 100644
--- a/generated/googleapis/lib/manufacturers/v1.dart
+++ b/generated/googleapis/lib/manufacturers/v1.dart
@@ -46,9 +46,71 @@
       _requester = client;
 
   /**
+   * Deletes the product from a Manufacturer Center account.
+   *
+   * Request parameters:
+   *
+   * [parent] - Parent ID in the format `accounts/{account_id}`.
+   *
+   * `account_id` - The ID of the Manufacturer Center account.
+   * Value must have pattern "^accounts/[^/]+$".
+   *
+   * [name] - Name in the format
+   * `{target_country}:{content_language}:{product_id}`.
+   *
+   * `target_country`   - The target country of the product as a CLDR territory
+   *                      code (for example, US).
+   *
+   * `content_language` - The content language of the product as a two-letter
+   *                      ISO 639-1 language code (for example, en).
+   *
+   * `product_id`     -   The ID of the product. For more information, see
+   * https://support.google.com/manufacturers/answer/6124116#id.
+   * Value must have pattern "^[^/]+$".
+   *
+   * Completes with a [Empty].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Empty> delete(core.String parent, core.String name) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (parent == null) {
+      throw new core.ArgumentError("Parameter parent is required.");
+    }
+    if (name == null) {
+      throw new core.ArgumentError("Parameter name is required.");
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$parent') + '/products/' + commons.Escaper.ecapeVariableReserved('$name');
+
+    var _response = _requester.request(_url,
+                                       "DELETE",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Empty.fromJson(data));
+  }
+
+  /**
    * Gets the product from a Manufacturer Center account, including product
    * issues.
    *
+   * A recently updated product takes some time to be processed before any
+   * changes are visible. While some issues may be available once the product
+   * has been processed, other issues may take days to appear.
+   *
    * Request parameters:
    *
    * [parent] - Parent ID in the format `accounts/{account_id}`.
@@ -158,6 +220,80 @@
     return _response.then((data) => new ListProductsResponse.fromJson(data));
   }
 
+  /**
+   * Inserts or updates the product in a Manufacturer Center account.
+   *
+   * The checks at upload time are minimal. All required attributes need to be
+   * present for a product to be valid. Issues may show up later
+   * after the API has accepted an update for a product and it is possible to
+   * overwrite an existing valid product with an invalid product. To detect
+   * this, you should retrieve the product and check it for issues once the
+   * updated version is available.
+   *
+   * Inserted or updated products first need to be processed before they can be
+   * retrieved. Until then, new products will be unavailable, and retrieval
+   * of updated products will return the original state of the product.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [parent] - Parent ID in the format `accounts/{account_id}`.
+   *
+   * `account_id` - The ID of the Manufacturer Center account.
+   * Value must have pattern "^accounts/[^/]+$".
+   *
+   * [name] - Name in the format
+   * `{target_country}:{content_language}:{product_id}`.
+   *
+   * `target_country`   - The target country of the product as a CLDR territory
+   *                      code (for example, US).
+   *
+   * `content_language` - The content language of the product as a two-letter
+   *                      ISO 639-1 language code (for example, en).
+   *
+   * `product_id`     -   The ID of the product. For more information, see
+   * https://support.google.com/manufacturers/answer/6124116#id.
+   * Value must have pattern "^[^/]+$".
+   *
+   * Completes with a [Product].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Product> update(Product request, core.String parent, core.String name) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (parent == null) {
+      throw new core.ArgumentError("Parameter parent is required.");
+    }
+    if (name == null) {
+      throw new core.ArgumentError("Parameter name is required.");
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$parent') + '/products/' + commons.Escaper.ecapeVariableReserved('$name');
+
+    var _response = _requester.request(_url,
+                                       "PUT",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Product.fromJson(data));
+  }
+
 }
 
 
@@ -599,6 +735,30 @@
 }
 
 /**
+ * A generic empty message that you can re-use to avoid defining duplicated
+ * empty messages in your APIs. A typical example is to use it as the request
+ * or the response type of an API method. For instance:
+ *
+ *     service Foo {
+ *       rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
+ *     }
+ *
+ * The JSON representation for `Empty` is empty JSON object `{}`.
+ */
+class Empty {
+
+  Empty();
+
+  Empty.fromJson(core.Map _json) {
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    return _json;
+  }
+}
+
+/**
  * A feature description of the product. For more information, see
  * https://support.google.com/manufacturers/answer/6124116#featuredesc.
  */
diff --git a/generated/googleapis/lib/ml/v1.dart b/generated/googleapis/lib/ml/v1.dart
index ea6b7f1..2cabb42 100644
--- a/generated/googleapis/lib/ml/v1.dart
+++ b/generated/googleapis/lib/ml/v1.dart
@@ -48,8 +48,6 @@
    * Request parameters:
    *
    * [name] - Required. The project name.
-   *
-   * Authorization: requires `Viewer` role on the specified project.
    * Value must have pattern "^projects/[^/]+$".
    *
    * Completes with a [GoogleCloudMlV1GetConfigResponse].
@@ -95,7 +93,7 @@
    *
    * [name] - Required. The resource name of a model or a version.
    *
-   * Authorization: requires `Viewer` role on the parent project.
+   * Authorization: requires the `predict` permission on the specified resource.
    * Value must have pattern "^projects/.+$".
    *
    * Completes with a [GoogleApiHttpBody].
@@ -150,8 +148,6 @@
    * Request parameters:
    *
    * [name] - Required. The name of the job to cancel.
-   *
-   * Authorization: requires `Editor` role on the parent project.
    * Value must have pattern "^projects/[^/]+/jobs/[^/]+$".
    *
    * Completes with a [GoogleProtobufEmpty].
@@ -197,8 +193,6 @@
    * Request parameters:
    *
    * [parent] - Required. The project name.
-   *
-   * Authorization: requires `Editor` role on the specified project.
    * Value must have pattern "^projects/[^/]+$".
    *
    * Completes with a [GoogleCloudMlV1Job].
@@ -242,8 +236,6 @@
    * Request parameters:
    *
    * [name] - Required. The name of the job to get the description of.
-   *
-   * Authorization: requires `Viewer` role on the parent project.
    * Value must have pattern "^projects/[^/]+/jobs/[^/]+$".
    *
    * Completes with a [GoogleCloudMlV1Job].
@@ -284,12 +276,8 @@
    * Request parameters:
    *
    * [parent] - Required. The name of the project for which to list jobs.
-   *
-   * Authorization: requires `Viewer` role on the specified project.
    * Value must have pattern "^projects/[^/]+$".
    *
-   * [filter] - Optional. Specifies the subset of jobs to retrieve.
-   *
    * [pageToken] - Optional. A page token to request the next page of results.
    *
    * You get the token from the `next_page_token` field of the response from
@@ -302,6 +290,8 @@
    *
    * The default value is 20, and the maximum page size is 100.
    *
+   * [filter] - Optional. Specifies the subset of jobs to retrieve.
+   *
    * Completes with a [GoogleCloudMlV1ListJobsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -310,7 +300,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<GoogleCloudMlV1ListJobsResponse> list(core.String parent, {core.String filter, core.String pageToken, core.int pageSize}) {
+  async.Future<GoogleCloudMlV1ListJobsResponse> list(core.String parent, {core.String pageToken, core.int pageSize, core.String filter}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -321,15 +311,15 @@
     if (parent == null) {
       throw new core.ArgumentError("Parameter parent is required.");
     }
-    if (filter != null) {
-      _queryParams["filter"] = [filter];
-    }
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
+    if (filter != null) {
+      _queryParams["filter"] = [filter];
+    }
 
     _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$parent') + '/jobs';
 
@@ -366,8 +356,6 @@
    * Request parameters:
    *
    * [parent] - Required. The project name.
-   *
-   * Authorization: requires `Editor` role on the specified project.
    * Value must have pattern "^projects/[^/]+$".
    *
    * Completes with a [GoogleCloudMlV1Model].
@@ -415,8 +403,6 @@
    * Request parameters:
    *
    * [name] - Required. The name of the model.
-   *
-   * Authorization: requires `Editor` role on the parent project.
    * Value must have pattern "^projects/[^/]+/models/[^/]+$".
    *
    * Completes with a [GoogleLongrunningOperation].
@@ -459,8 +445,6 @@
    * Request parameters:
    *
    * [name] - Required. The name of the model.
-   *
-   * Authorization: requires `Viewer` role on the parent project.
    * Value must have pattern "^projects/[^/]+/models/[^/]+$".
    *
    * Completes with a [GoogleCloudMlV1Model].
@@ -496,6 +480,50 @@
   }
 
   /**
+   * Gets the access control policy for a resource.
+   * Returns an empty policy if the resource exists and does not have a policy
+   * set.
+   *
+   * Request parameters:
+   *
+   * [resource] - REQUIRED: The resource for which the policy is being
+   * requested.
+   * See the operation documentation for the appropriate value for this field.
+   * Value must have pattern "^projects/[^/]+/models/[^/]+$".
+   *
+   * Completes with a [GoogleIamV1Policy].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<GoogleIamV1Policy> getIamPolicy(core.String resource) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (resource == null) {
+      throw new core.ArgumentError("Parameter resource is required.");
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$resource') + ':getIamPolicy';
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new GoogleIamV1Policy.fromJson(data));
+  }
+
+  /**
    * Lists the models in a project.
    *
    * Each project can contain multiple models, and each model can have multiple
@@ -504,8 +532,6 @@
    * Request parameters:
    *
    * [parent] - Required. The name of the project whose models are to be listed.
-   *
-   * Authorization: requires `Viewer` role on the specified project.
    * Value must have pattern "^projects/[^/]+$".
    *
    * [pageToken] - Optional. A page token to request the next page of results.
@@ -558,6 +584,107 @@
     return _response.then((data) => new GoogleCloudMlV1ListModelsResponse.fromJson(data));
   }
 
+  /**
+   * Sets the access control policy on the specified resource. Replaces any
+   * existing policy.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [resource] - REQUIRED: The resource for which the policy is being
+   * specified.
+   * See the operation documentation for the appropriate value for this field.
+   * Value must have pattern "^projects/[^/]+/models/[^/]+$".
+   *
+   * Completes with a [GoogleIamV1Policy].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<GoogleIamV1Policy> setIamPolicy(GoogleIamV1SetIamPolicyRequest request, core.String resource) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (resource == null) {
+      throw new core.ArgumentError("Parameter resource is required.");
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$resource') + ':setIamPolicy';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new GoogleIamV1Policy.fromJson(data));
+  }
+
+  /**
+   * 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.
+   *
+   * Note: This operation is designed to be used for building permission-aware
+   * UIs and command-line tools, not for authorization checking. This operation
+   * may "fail open" without warning.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [resource] - REQUIRED: The resource for which the policy detail is being
+   * requested.
+   * See the operation documentation for the appropriate value for this field.
+   * Value must have pattern "^projects/[^/]+/models/[^/]+$".
+   *
+   * Completes with a [GoogleIamV1TestIamPermissionsResponse].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<GoogleIamV1TestIamPermissionsResponse> testIamPermissions(GoogleIamV1TestIamPermissionsRequest request, core.String resource) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (resource == null) {
+      throw new core.ArgumentError("Parameter resource is required.");
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$resource') + ':testIamPermissions';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new GoogleIamV1TestIamPermissionsResponse.fromJson(data));
+  }
+
 }
 
 
@@ -582,8 +709,6 @@
    * Request parameters:
    *
    * [parent] - Required. The name of the model.
-   *
-   * Authorization: requires `Editor` role on the parent project.
    * Value must have pattern "^projects/[^/]+/models/[^/]+$".
    *
    * Completes with a [GoogleLongrunningOperation].
@@ -636,8 +761,6 @@
    * the
    * versions of a model by calling
    * [projects.models.versions.list](/ml-engine/reference/rest/v1/projects.models.versions/list).
-   *
-   * Authorization: requires `Editor` role on the parent project.
    * Value must have pattern "^projects/[^/]+/models/[^/]+/versions/[^/]+$".
    *
    * Completes with a [GoogleLongrunningOperation].
@@ -683,8 +806,6 @@
    * Request parameters:
    *
    * [name] - Required. The name of the version.
-   *
-   * Authorization: requires `Viewer` role on the parent project.
    * Value must have pattern "^projects/[^/]+/models/[^/]+/versions/[^/]+$".
    *
    * Completes with a [GoogleCloudMlV1Version].
@@ -729,8 +850,6 @@
    * Request parameters:
    *
    * [parent] - Required. The name of the model for which to list the version.
-   *
-   * Authorization: requires `Viewer` role on the parent project.
    * Value must have pattern "^projects/[^/]+/models/[^/]+$".
    *
    * [pageToken] - Optional. A page token to request the next page of results.
@@ -802,7 +921,8 @@
    * can get the names of all the versions of a model by calling
    * [projects.models.versions.list](/ml-engine/reference/rest/v1/projects.models.versions/list).
    *
-   * Authorization: requires `Editor` role on the parent project.
+   * Authorization: `ml.models.update` permission is required on the parent
+   * model.
    * Value must have pattern "^projects/[^/]+/models/[^/]+/versions/[^/]+$".
    *
    * Completes with a [GoogleCloudMlV1Version].
@@ -2638,6 +2758,8 @@
    * Optional. The description specified for the version when it was created.
    */
   core.String description;
+  /** Output only. The details of a failure or a cancellation. */
+  core.String errorMessage;
   /**
    * Output only. If true, this version will be used to handle prediction
    * requests that do not specify a version.
@@ -2668,6 +2790,16 @@
    * If not set, Google Cloud ML will choose a version.
    */
   core.String runtimeVersion;
+  /**
+   * Output only. The state of a version.
+   * Possible string values are:
+   * - "UNKNOWN" : The version state is unspecified.
+   * - "READY" : The version is ready for prediction.
+   * - "CREATING" : The version is still in the process of creation.
+   * - "FAILED" : The version failed to be created, possibly cancelled.
+   * `error_message` should contain the details of the failure.
+   */
+  core.String state;
 
   GoogleCloudMlV1Version();
 
@@ -2684,6 +2816,9 @@
     if (_json.containsKey("description")) {
       description = _json["description"];
     }
+    if (_json.containsKey("errorMessage")) {
+      errorMessage = _json["errorMessage"];
+    }
     if (_json.containsKey("isDefault")) {
       isDefault = _json["isDefault"];
     }
@@ -2699,6 +2834,9 @@
     if (_json.containsKey("runtimeVersion")) {
       runtimeVersion = _json["runtimeVersion"];
     }
+    if (_json.containsKey("state")) {
+      state = _json["state"];
+    }
   }
 
   core.Map<core.String, core.Object> toJson() {
@@ -2715,6 +2853,9 @@
     if (description != null) {
       _json["description"] = description;
     }
+    if (errorMessage != null) {
+      _json["errorMessage"] = errorMessage;
+    }
     if (isDefault != null) {
       _json["isDefault"] = isDefault;
     }
@@ -2730,6 +2871,9 @@
     if (runtimeVersion != null) {
       _json["runtimeVersion"] = runtimeVersion;
     }
+    if (state != null) {
+      _json["state"] = state;
+    }
     return _json;
   }
 }
@@ -2916,6 +3060,8 @@
    * Optional. The description specified for the version when it was created.
    */
   core.String description;
+  /** Output only. The details of a failure or a cancellation. */
+  core.String errorMessage;
   /**
    * Output only. If true, this version will be used to handle prediction
    * requests that do not specify a version.
@@ -2946,6 +3092,16 @@
    * If not set, Google Cloud ML will choose a version.
    */
   core.String runtimeVersion;
+  /**
+   * Output only. The state of a version.
+   * Possible string values are:
+   * - "UNKNOWN" : / The version state is unspecified.
+   * - "READY" : The version is ready for prediction.
+   * - "CREATING" : The version is still in the process of creation.
+   * - "FAILED" : The version failed to be created, possibly cancelled.
+   * `error_message` should contain the details of the failure.
+   */
+  core.String state;
 
   GoogleCloudMlV1beta1Version();
 
@@ -2962,6 +3118,9 @@
     if (_json.containsKey("description")) {
       description = _json["description"];
     }
+    if (_json.containsKey("errorMessage")) {
+      errorMessage = _json["errorMessage"];
+    }
     if (_json.containsKey("isDefault")) {
       isDefault = _json["isDefault"];
     }
@@ -2977,6 +3136,9 @@
     if (_json.containsKey("runtimeVersion")) {
       runtimeVersion = _json["runtimeVersion"];
     }
+    if (_json.containsKey("state")) {
+      state = _json["state"];
+    }
   }
 
   core.Map<core.String, core.Object> toJson() {
@@ -2993,6 +3155,9 @@
     if (description != null) {
       _json["description"] = description;
     }
+    if (errorMessage != null) {
+      _json["errorMessage"] = errorMessage;
+    }
     if (isDefault != null) {
       _json["isDefault"] = isDefault;
     }
@@ -3008,6 +3173,795 @@
     if (runtimeVersion != null) {
       _json["runtimeVersion"] = runtimeVersion;
     }
+    if (state != null) {
+      _json["state"] = state;
+    }
+    return _json;
+  }
+}
+
+/** Write a Cloud Audit log */
+class GoogleIamV1LogConfigCloudAuditOptions {
+  /**
+   * The log_name to populate in the Cloud Audit Record.
+   * Possible string values are:
+   * - "UNSPECIFIED_LOG_NAME" : Default. Should not be used.
+   * - "ADMIN_ACTIVITY" : Corresponds to "cloudaudit.googleapis.com/activity"
+   * - "DATA_ACCESS" : Corresponds to "cloudaudit.googleapis.com/data_access"
+   */
+  core.String logName;
+
+  GoogleIamV1LogConfigCloudAuditOptions();
+
+  GoogleIamV1LogConfigCloudAuditOptions.fromJson(core.Map _json) {
+    if (_json.containsKey("logName")) {
+      logName = _json["logName"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (logName != null) {
+      _json["logName"] = logName;
+    }
+    return _json;
+  }
+}
+
+/** Options for counters */
+class GoogleIamV1LogConfigCounterOptions {
+  /** The field value to attribute. */
+  core.String field;
+  /** The metric to update. */
+  core.String metric;
+
+  GoogleIamV1LogConfigCounterOptions();
+
+  GoogleIamV1LogConfigCounterOptions.fromJson(core.Map _json) {
+    if (_json.containsKey("field")) {
+      field = _json["field"];
+    }
+    if (_json.containsKey("metric")) {
+      metric = _json["metric"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (field != null) {
+      _json["field"] = field;
+    }
+    if (metric != null) {
+      _json["metric"] = metric;
+    }
+    return _json;
+  }
+}
+
+/** Write a Data Access (Gin) log */
+class GoogleIamV1LogConfigDataAccessOptions {
+
+  GoogleIamV1LogConfigDataAccessOptions();
+
+  GoogleIamV1LogConfigDataAccessOptions.fromJson(core.Map _json) {
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    return _json;
+  }
+}
+
+/**
+ * Specifies the audit configuration for a service.
+ * The configuration determines which permission types are logged, and what
+ * identities, if any, are exempted from logging.
+ * An AuditConfig must have one or more AuditLogConfigs.
+ *
+ * If there are AuditConfigs for both `allServices` and a specific service,
+ * the union of the two AuditConfigs is used for that service: the log_types
+ * specified in each AuditConfig are enabled, and the exempted_members in each
+ * AuditConfig are exempted.
+ *
+ * Example Policy with multiple AuditConfigs:
+ *
+ *     {
+ *       "audit_configs": [
+ *         {
+ *           "service": "allServices"
+ *           "audit_log_configs": [
+ *             {
+ *               "log_type": "DATA_READ",
+ *               "exempted_members": [
+ *                 "user:foo@gmail.com"
+ *               ]
+ *             },
+ *             {
+ *               "log_type": "DATA_WRITE",
+ *             },
+ *             {
+ *               "log_type": "ADMIN_READ",
+ *             }
+ *           ]
+ *         },
+ *         {
+ *           "service": "fooservice.googleapis.com"
+ *           "audit_log_configs": [
+ *             {
+ *               "log_type": "DATA_READ",
+ *             },
+ *             {
+ *               "log_type": "DATA_WRITE",
+ *               "exempted_members": [
+ *                 "user:bar@gmail.com"
+ *               ]
+ *             }
+ *           ]
+ *         }
+ *       ]
+ *     }
+ *
+ * For fooservice, this policy enables DATA_READ, DATA_WRITE and ADMIN_READ
+ * logging. It also exempts foo@gmail.com from DATA_READ logging, and
+ * bar@gmail.com from DATA_WRITE logging.
+ */
+class GoogleIamV1AuditConfig {
+  /**
+   * The configuration for logging of each type of permission.
+   * Next ID: 4
+   */
+  core.List<GoogleIamV1AuditLogConfig> auditLogConfigs;
+  core.List<core.String> exemptedMembers;
+  /**
+   * Specifies a service that will be enabled for audit logging.
+   * For example, `storage.googleapis.com`, `cloudsql.googleapis.com`.
+   * `allServices` is a special value that covers all services.
+   */
+  core.String service;
+
+  GoogleIamV1AuditConfig();
+
+  GoogleIamV1AuditConfig.fromJson(core.Map _json) {
+    if (_json.containsKey("auditLogConfigs")) {
+      auditLogConfigs = _json["auditLogConfigs"].map((value) => new GoogleIamV1AuditLogConfig.fromJson(value)).toList();
+    }
+    if (_json.containsKey("exemptedMembers")) {
+      exemptedMembers = _json["exemptedMembers"];
+    }
+    if (_json.containsKey("service")) {
+      service = _json["service"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (auditLogConfigs != null) {
+      _json["auditLogConfigs"] = auditLogConfigs.map((value) => (value).toJson()).toList();
+    }
+    if (exemptedMembers != null) {
+      _json["exemptedMembers"] = exemptedMembers;
+    }
+    if (service != null) {
+      _json["service"] = service;
+    }
+    return _json;
+  }
+}
+
+/**
+ * Provides the configuration for logging a type of permissions.
+ * Example:
+ *
+ *     {
+ *       "audit_log_configs": [
+ *         {
+ *           "log_type": "DATA_READ",
+ *           "exempted_members": [
+ *             "user:foo@gmail.com"
+ *           ]
+ *         },
+ *         {
+ *           "log_type": "DATA_WRITE",
+ *         }
+ *       ]
+ *     }
+ *
+ * This enables 'DATA_READ' and 'DATA_WRITE' logging, while exempting
+ * foo@gmail.com from DATA_READ logging.
+ */
+class GoogleIamV1AuditLogConfig {
+  /**
+   * Specifies the identities that do not cause logging for this type of
+   * permission.
+   * Follows the same format of Binding.members.
+   */
+  core.List<core.String> exemptedMembers;
+  /**
+   * The log type that this config enables.
+   * Possible string values are:
+   * - "LOG_TYPE_UNSPECIFIED" : Default case. Should never be this.
+   * - "ADMIN_READ" : Admin reads. Example: CloudIAM getIamPolicy
+   * - "DATA_WRITE" : Data writes. Example: CloudSQL Users create
+   * - "DATA_READ" : Data reads. Example: CloudSQL Users list
+   */
+  core.String logType;
+
+  GoogleIamV1AuditLogConfig();
+
+  GoogleIamV1AuditLogConfig.fromJson(core.Map _json) {
+    if (_json.containsKey("exemptedMembers")) {
+      exemptedMembers = _json["exemptedMembers"];
+    }
+    if (_json.containsKey("logType")) {
+      logType = _json["logType"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (exemptedMembers != null) {
+      _json["exemptedMembers"] = exemptedMembers;
+    }
+    if (logType != null) {
+      _json["logType"] = logType;
+    }
+    return _json;
+  }
+}
+
+/** Associates `members` with a `role`. */
+class GoogleIamV1Binding {
+  /**
+   * The condition that is associated with this binding.
+   * NOTE: an unsatisfied condition will not allow user access via current
+   * binding. Different bindings, including their conditions, are examined
+   * independently.
+   * This field is GOOGLE_INTERNAL.
+   */
+  GoogleTypeExpr condition;
+  /**
+   * 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` or `joe@example.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`.
+   */
+  core.List<core.String> members;
+  /**
+   * Role that is assigned to `members`.
+   * For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
+   * Required
+   */
+  core.String role;
+
+  GoogleIamV1Binding();
+
+  GoogleIamV1Binding.fromJson(core.Map _json) {
+    if (_json.containsKey("condition")) {
+      condition = new GoogleTypeExpr.fromJson(_json["condition"]);
+    }
+    if (_json.containsKey("members")) {
+      members = _json["members"];
+    }
+    if (_json.containsKey("role")) {
+      role = _json["role"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (condition != null) {
+      _json["condition"] = (condition).toJson();
+    }
+    if (members != null) {
+      _json["members"] = members;
+    }
+    if (role != null) {
+      _json["role"] = role;
+    }
+    return _json;
+  }
+}
+
+/** A condition to be met. */
+class GoogleIamV1Condition {
+  /**
+   * Trusted attributes supplied by the IAM system.
+   * Possible string values are:
+   * - "NO_ATTR" : Default non-attribute.
+   * - "AUTHORITY" : Either principal or (if present) authority selector.
+   * - "ATTRIBUTION" : The principal (even if an authority selector is present),
+   * which
+   * must only be used for attribution, not authorization.
+   * - "APPROVER" : An approver (distinct from the requester) that has
+   * authorized this
+   * request.
+   * When used with IN, the condition indicates that one of the approvers
+   * associated with the request matches the specified principal, or is a
+   * member of the specified group. Approvers can only grant additional
+   * access, and are thus only used in a strictly positive context
+   * (e.g. ALLOW/IN or DENY/NOT_IN).
+   * - "JUSTIFICATION_TYPE" : What types of justifications have been supplied
+   * with this request.
+   * String values should match enum names from tech.iam.JustificationType,
+   * e.g. "MANUAL_STRING". It is not permitted to grant access based on
+   * the *absence* of a justification, so justification conditions can only
+   * be used in a "positive" context (e.g., ALLOW/IN or DENY/NOT_IN).
+   *
+   * Multiple justifications, e.g., a Buganizer ID and a manually-entered
+   * reason, are normal and supported.
+   */
+  core.String iam;
+  /**
+   * An operator to apply the subject with.
+   * Possible string values are:
+   * - "NO_OP" : Default no-op.
+   * - "EQUALS" : DEPRECATED. Use IN instead.
+   * - "NOT_EQUALS" : DEPRECATED. Use NOT_IN instead.
+   * - "IN" : The condition is true if the subject (or any element of it if it
+   * is
+   * a set) matches any of the supplied values.
+   * - "NOT_IN" : The condition is true if the subject (or every element of it
+   * if it is
+   * a set) matches none of the supplied values.
+   * - "DISCHARGED" : Subject is discharged
+   */
+  core.String op;
+  /** Trusted attributes discharged by the service. */
+  core.String svc;
+  /**
+   * Trusted attributes supplied by any service that owns resources and uses
+   * the IAM system for access control.
+   * Possible string values are:
+   * - "NO_ATTR" : Default non-attribute type
+   * - "REGION" : Region of the resource
+   * - "SERVICE" : Service name
+   * - "NAME" : Resource name
+   * - "IP" : IP address of the caller
+   */
+  core.String sys;
+  /** DEPRECATED. Use 'values' instead. */
+  core.String value;
+  /** The objects of the condition. This is mutually exclusive with 'value'. */
+  core.List<core.String> values;
+
+  GoogleIamV1Condition();
+
+  GoogleIamV1Condition.fromJson(core.Map _json) {
+    if (_json.containsKey("iam")) {
+      iam = _json["iam"];
+    }
+    if (_json.containsKey("op")) {
+      op = _json["op"];
+    }
+    if (_json.containsKey("svc")) {
+      svc = _json["svc"];
+    }
+    if (_json.containsKey("sys")) {
+      sys = _json["sys"];
+    }
+    if (_json.containsKey("value")) {
+      value = _json["value"];
+    }
+    if (_json.containsKey("values")) {
+      values = _json["values"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (iam != null) {
+      _json["iam"] = iam;
+    }
+    if (op != null) {
+      _json["op"] = op;
+    }
+    if (svc != null) {
+      _json["svc"] = svc;
+    }
+    if (sys != null) {
+      _json["sys"] = sys;
+    }
+    if (value != null) {
+      _json["value"] = value;
+    }
+    if (values != null) {
+      _json["values"] = values;
+    }
+    return _json;
+  }
+}
+
+/**
+ * Specifies what kind of log the caller must write
+ * Increment a streamz counter with the specified metric and field names.
+ *
+ * Metric names should start with a '/', generally be lowercase-only,
+ * and end in "_count". Field names should not contain an initial slash.
+ * The actual exported metric names will have "/iam/policy" prepended.
+ *
+ * Field names correspond to IAM request parameters and field values are
+ * their respective values.
+ *
+ * At present the only supported field names are
+ *    - "iam_principal", corresponding to IAMContext.principal;
+ *    - "" (empty string), resulting in one aggretated counter with no field.
+ *
+ * Examples:
+ *   counter { metric: "/debug_access_count"  field: "iam_principal" }
+ *   ==> increment counter /iam/policy/backend_debug_access_count
+ *                         {iam_principal=[value of IAMContext.principal]}
+ *
+ * At this time we do not support:
+ * * multiple field names (though this may be supported in the future)
+ * * decrementing the counter
+ * * incrementing it by anything other than 1
+ */
+class GoogleIamV1LogConfig {
+  /** Cloud audit options. */
+  GoogleIamV1LogConfigCloudAuditOptions cloudAudit;
+  /** Counter options. */
+  GoogleIamV1LogConfigCounterOptions counter;
+  /** Data access options. */
+  GoogleIamV1LogConfigDataAccessOptions dataAccess;
+
+  GoogleIamV1LogConfig();
+
+  GoogleIamV1LogConfig.fromJson(core.Map _json) {
+    if (_json.containsKey("cloudAudit")) {
+      cloudAudit = new GoogleIamV1LogConfigCloudAuditOptions.fromJson(_json["cloudAudit"]);
+    }
+    if (_json.containsKey("counter")) {
+      counter = new GoogleIamV1LogConfigCounterOptions.fromJson(_json["counter"]);
+    }
+    if (_json.containsKey("dataAccess")) {
+      dataAccess = new GoogleIamV1LogConfigDataAccessOptions.fromJson(_json["dataAccess"]);
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (cloudAudit != null) {
+      _json["cloudAudit"] = (cloudAudit).toJson();
+    }
+    if (counter != null) {
+      _json["counter"] = (counter).toJson();
+    }
+    if (dataAccess != null) {
+      _json["dataAccess"] = (dataAccess).toJson();
+    }
+    return _json;
+  }
+}
+
+/**
+ * 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.
+ *
+ * **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"]
+ *         }
+ *       ]
+ *     }
+ *
+ * For a description of IAM and its features, see the
+ * [IAM developer's guide](https://cloud.google.com/iam).
+ */
+class GoogleIamV1Policy {
+  /** Specifies cloud audit logging configuration for this policy. */
+  core.List<GoogleIamV1AuditConfig> auditConfigs;
+  /**
+   * Associates a list of `members` to a `role`.
+   * `bindings` with no members will result in an error.
+   */
+  core.List<GoogleIamV1Binding> bindings;
+  /**
+   * `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.
+   */
+  core.String etag;
+  core.List<core.int> get etagAsBytes {
+    return convert.BASE64.decode(etag);
+  }
+
+  void set etagAsBytes(core.List<core.int> _bytes) {
+    etag = convert.BASE64.encode(_bytes).replaceAll("/", "_").replaceAll("+", "-");
+  }
+  core.bool iamOwned;
+  /**
+   * If more than one rule is specified, the rules are applied in the following
+   * manner:
+   * - All matching LOG rules are always applied.
+   * - If any DENY/DENY_WITH_LOG rule matches, permission is denied.
+   *   Logging will be applied if one or more matching rule requires logging.
+   * - Otherwise, if any ALLOW/ALLOW_WITH_LOG rule matches, permission is
+   *   granted.
+   *   Logging will be applied if one or more matching rule requires logging.
+   * - Otherwise, if no rule applies, permission is denied.
+   */
+  core.List<GoogleIamV1Rule> rules;
+  /** Version of the `Policy`. The default version is 0. */
+  core.int version;
+
+  GoogleIamV1Policy();
+
+  GoogleIamV1Policy.fromJson(core.Map _json) {
+    if (_json.containsKey("auditConfigs")) {
+      auditConfigs = _json["auditConfigs"].map((value) => new GoogleIamV1AuditConfig.fromJson(value)).toList();
+    }
+    if (_json.containsKey("bindings")) {
+      bindings = _json["bindings"].map((value) => new GoogleIamV1Binding.fromJson(value)).toList();
+    }
+    if (_json.containsKey("etag")) {
+      etag = _json["etag"];
+    }
+    if (_json.containsKey("iamOwned")) {
+      iamOwned = _json["iamOwned"];
+    }
+    if (_json.containsKey("rules")) {
+      rules = _json["rules"].map((value) => new GoogleIamV1Rule.fromJson(value)).toList();
+    }
+    if (_json.containsKey("version")) {
+      version = _json["version"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (auditConfigs != null) {
+      _json["auditConfigs"] = auditConfigs.map((value) => (value).toJson()).toList();
+    }
+    if (bindings != null) {
+      _json["bindings"] = bindings.map((value) => (value).toJson()).toList();
+    }
+    if (etag != null) {
+      _json["etag"] = etag;
+    }
+    if (iamOwned != null) {
+      _json["iamOwned"] = iamOwned;
+    }
+    if (rules != null) {
+      _json["rules"] = rules.map((value) => (value).toJson()).toList();
+    }
+    if (version != null) {
+      _json["version"] = version;
+    }
+    return _json;
+  }
+}
+
+/** A rule to be applied in a Policy. */
+class GoogleIamV1Rule {
+  /**
+   * Required
+   * Possible string values are:
+   * - "NO_ACTION" : Default no action.
+   * - "ALLOW" : Matching 'Entries' grant access.
+   * - "ALLOW_WITH_LOG" : Matching 'Entries' grant access and the caller
+   * promises to log
+   * the request per the returned log_configs.
+   * - "DENY" : Matching 'Entries' deny access.
+   * - "DENY_WITH_LOG" : Matching 'Entries' deny access and the caller promises
+   * to log
+   * the request per the returned log_configs.
+   * - "LOG" : Matching 'Entries' tell IAM.Check callers to generate logs.
+   */
+  core.String action;
+  /** Additional restrictions that must be met */
+  core.List<GoogleIamV1Condition> conditions;
+  /** Human-readable description of the rule. */
+  core.String description;
+  /**
+   * If one or more 'in' clauses are specified, the rule matches if
+   * the PRINCIPAL/AUTHORITY_SELECTOR is in at least one of these entries.
+   */
+  core.List<core.String> in_;
+  /**
+   * The config returned to callers of tech.iam.IAM.CheckPolicy for any entries
+   * that match the LOG action.
+   */
+  core.List<GoogleIamV1LogConfig> logConfig;
+  /**
+   * If one or more 'not_in' clauses are specified, the rule matches
+   * if the PRINCIPAL/AUTHORITY_SELECTOR is in none of the entries.
+   * The format for in and not_in entries is the same as for members in a
+   * Binding (see google/iam/v1/policy.proto).
+   */
+  core.List<core.String> notIn;
+  /**
+   * A permission is a string of form '<service>.<resource type>.<verb>'
+   * (e.g., 'storage.buckets.list'). A value of '*' matches all permissions,
+   * and a verb part of '*' (e.g., 'storage.buckets.*') matches all verbs.
+   */
+  core.List<core.String> permissions;
+
+  GoogleIamV1Rule();
+
+  GoogleIamV1Rule.fromJson(core.Map _json) {
+    if (_json.containsKey("action")) {
+      action = _json["action"];
+    }
+    if (_json.containsKey("conditions")) {
+      conditions = _json["conditions"].map((value) => new GoogleIamV1Condition.fromJson(value)).toList();
+    }
+    if (_json.containsKey("description")) {
+      description = _json["description"];
+    }
+    if (_json.containsKey("in")) {
+      in_ = _json["in"];
+    }
+    if (_json.containsKey("logConfig")) {
+      logConfig = _json["logConfig"].map((value) => new GoogleIamV1LogConfig.fromJson(value)).toList();
+    }
+    if (_json.containsKey("notIn")) {
+      notIn = _json["notIn"];
+    }
+    if (_json.containsKey("permissions")) {
+      permissions = _json["permissions"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (action != null) {
+      _json["action"] = action;
+    }
+    if (conditions != null) {
+      _json["conditions"] = conditions.map((value) => (value).toJson()).toList();
+    }
+    if (description != null) {
+      _json["description"] = description;
+    }
+    if (in_ != null) {
+      _json["in"] = in_;
+    }
+    if (logConfig != null) {
+      _json["logConfig"] = logConfig.map((value) => (value).toJson()).toList();
+    }
+    if (notIn != null) {
+      _json["notIn"] = notIn;
+    }
+    if (permissions != null) {
+      _json["permissions"] = permissions;
+    }
+    return _json;
+  }
+}
+
+/** Request message for `SetIamPolicy` method. */
+class GoogleIamV1SetIamPolicyRequest {
+  /**
+   * 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.
+   */
+  GoogleIamV1Policy policy;
+  /**
+   * OPTIONAL: A FieldMask specifying which fields of the policy to modify. Only
+   * the fields in the mask will be modified. If no mask is provided, the
+   * following default mask is used:
+   * paths: "bindings, etag"
+   * This field is only used by Cloud IAM.
+   */
+  core.String updateMask;
+
+  GoogleIamV1SetIamPolicyRequest();
+
+  GoogleIamV1SetIamPolicyRequest.fromJson(core.Map _json) {
+    if (_json.containsKey("policy")) {
+      policy = new GoogleIamV1Policy.fromJson(_json["policy"]);
+    }
+    if (_json.containsKey("updateMask")) {
+      updateMask = _json["updateMask"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (policy != null) {
+      _json["policy"] = (policy).toJson();
+    }
+    if (updateMask != null) {
+      _json["updateMask"] = updateMask;
+    }
+    return _json;
+  }
+}
+
+/** Request message for `TestIamPermissions` method. */
+class GoogleIamV1TestIamPermissionsRequest {
+  /**
+   * 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).
+   */
+  core.List<core.String> permissions;
+
+  GoogleIamV1TestIamPermissionsRequest();
+
+  GoogleIamV1TestIamPermissionsRequest.fromJson(core.Map _json) {
+    if (_json.containsKey("permissions")) {
+      permissions = _json["permissions"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (permissions != null) {
+      _json["permissions"] = permissions;
+    }
+    return _json;
+  }
+}
+
+/** Response message for `TestIamPermissions` method. */
+class GoogleIamV1TestIamPermissionsResponse {
+  /**
+   * A subset of `TestPermissionsRequest.permissions` that the caller is
+   * allowed.
+   */
+  core.List<core.String> permissions;
+
+  GoogleIamV1TestIamPermissionsResponse();
+
+  GoogleIamV1TestIamPermissionsResponse.fromJson(core.Map _json) {
+    if (_json.containsKey("permissions")) {
+      permissions = _json["permissions"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (permissions != null) {
+      _json["permissions"] = permissions;
+    }
     return _json;
   }
 }
@@ -3253,3 +4207,71 @@
     return _json;
   }
 }
+
+/**
+ * Represents an expression text. Example:
+ *
+ *     title: "User account presence"
+ *     description: "Determines whether the request has a user account"
+ *     expression: "size(request.user) > 0"
+ */
+class GoogleTypeExpr {
+  /**
+   * An optional description of the expression. This is a longer text which
+   * describes the expression, e.g. when hovered over it in a UI.
+   */
+  core.String description;
+  /**
+   * Textual representation of an expression in
+   * Common Expression Language syntax.
+   *
+   * The application context of the containing message determines which
+   * well-known feature set of CEL is supported.
+   */
+  core.String expression;
+  /**
+   * An optional string indicating the location of the expression for error
+   * reporting, e.g. a file name and a position in the file.
+   */
+  core.String location;
+  /**
+   * An optional title for the expression, i.e. a short string describing
+   * its purpose. This can be used e.g. in UIs which allow to enter the
+   * expression.
+   */
+  core.String title;
+
+  GoogleTypeExpr();
+
+  GoogleTypeExpr.fromJson(core.Map _json) {
+    if (_json.containsKey("description")) {
+      description = _json["description"];
+    }
+    if (_json.containsKey("expression")) {
+      expression = _json["expression"];
+    }
+    if (_json.containsKey("location")) {
+      location = _json["location"];
+    }
+    if (_json.containsKey("title")) {
+      title = _json["title"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (description != null) {
+      _json["description"] = description;
+    }
+    if (expression != null) {
+      _json["expression"] = expression;
+    }
+    if (location != null) {
+      _json["location"] = location;
+    }
+    if (title != null) {
+      _json["title"] = title;
+    }
+    return _json;
+  }
+}
diff --git a/generated/googleapis/lib/monitoring/v3.dart b/generated/googleapis/lib/monitoring/v3.dart
index 2303347..62c146e 100644
--- a/generated/googleapis/lib/monitoring/v3.dart
+++ b/generated/googleapis/lib/monitoring/v3.dart
@@ -415,13 +415,6 @@
    * "projects/{project_id_or_number}/groups/{group_id}".
    * Value must have pattern "^projects/[^/]+/groups/[^/]+$".
    *
-   * [pageSize] - A positive number that is the maximum number of results to
-   * return.
-   *
-   * [interval_startTime] - Optional. The beginning of the time interval. The
-   * default value for the start time is the end time. The start time must not
-   * be later than the end time.
-   *
    * [interval_endTime] - Required. The end of the time interval.
    *
    * [filter] - An optional list filter describing the members to be returned.
@@ -435,6 +428,13 @@
    * field causes the method to return additional results from the previous
    * method call.
    *
+   * [pageSize] - A positive number that is the maximum number of results to
+   * return.
+   *
+   * [interval_startTime] - Optional. The beginning of the time interval. The
+   * default value for the start time is the end time. The start time must not
+   * be later than the end time.
+   *
    * Completes with a [ListGroupMembersResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -443,7 +443,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListGroupMembersResponse> list(core.String name, {core.int pageSize, core.String interval_startTime, core.String interval_endTime, core.String filter, core.String pageToken}) {
+  async.Future<ListGroupMembersResponse> list(core.String name, {core.String interval_endTime, core.String filter, core.String pageToken, core.int pageSize, core.String interval_startTime}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -454,12 +454,6 @@
     if (name == null) {
       throw new core.ArgumentError("Parameter name is required.");
     }
-    if (pageSize != null) {
-      _queryParams["pageSize"] = ["${pageSize}"];
-    }
-    if (interval_startTime != null) {
-      _queryParams["interval.startTime"] = [interval_startTime];
-    }
     if (interval_endTime != null) {
       _queryParams["interval.endTime"] = [interval_endTime];
     }
@@ -469,6 +463,12 @@
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
+    if (pageSize != null) {
+      _queryParams["pageSize"] = ["${pageSize}"];
+    }
+    if (interval_startTime != null) {
+      _queryParams["interval.startTime"] = [interval_startTime];
+    }
 
     _url = 'v3/' + commons.Escaper.ecapeVariableReserved('$name') + '/members';
 
@@ -635,12 +635,6 @@
    * "projects/{project_id_or_number}".
    * Value must have pattern "^projects/[^/]+$".
    *
-   * [filter] - If this field is empty, all custom and system-defined metric
-   * descriptors are returned. Otherwise, the filter specifies which metric
-   * descriptors are to be returned. For example, the following filter matches
-   * all custom metrics:
-   * metric.type = starts_with("custom.googleapis.com/")
-   *
    * [pageToken] - If this field is not empty then it must contain the
    * nextPageToken value returned by a previous call to this method. Using this
    * field causes the method to return additional results from the previous
@@ -649,6 +643,12 @@
    * [pageSize] - A positive number that is the maximum number of results to
    * return.
    *
+   * [filter] - If this field is empty, all custom and system-defined metric
+   * descriptors are returned. Otherwise, the filter specifies which metric
+   * descriptors are to be returned. For example, the following filter matches
+   * all custom metrics:
+   * metric.type = starts_with("custom.googleapis.com/")
+   *
    * Completes with a [ListMetricDescriptorsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -657,7 +657,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListMetricDescriptorsResponse> list(core.String name, {core.String filter, core.String pageToken, core.int pageSize}) {
+  async.Future<ListMetricDescriptorsResponse> list(core.String name, {core.String pageToken, core.int pageSize, core.String filter}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -668,15 +668,15 @@
     if (name == null) {
       throw new core.ArgumentError("Parameter name is required.");
     }
-    if (filter != null) {
-      _queryParams["filter"] = [filter];
-    }
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
+    if (filter != null) {
+      _queryParams["filter"] = [filter];
+    }
 
     _url = 'v3/' + commons.Escaper.ecapeVariableReserved('$name') + '/metricDescriptors';
 
@@ -876,6 +876,29 @@
    * "projects/{project_id_or_number}".
    * Value must have pattern "^projects/[^/]+$".
    *
+   * [aggregation_groupByFields] - The set of fields to preserve when
+   * crossSeriesReducer is specified. The groupByFields determine how the time
+   * series are partitioned into subsets prior to applying the aggregation
+   * function. Each subset contains time series that have the same value for
+   * each of the grouping fields. Each individual time series is a member of
+   * exactly one subset. The crossSeriesReducer is applied to each subset of
+   * time series. It is not possible to reduce across different resource types,
+   * so this field implicitly contains resource.type. Fields not specified in
+   * groupByFields are aggregated away. If groupByFields is not specified and
+   * all the time series have the same resource type, then the time series are
+   * aggregated into a single output time series. If crossSeriesReducer is not
+   * defined, this field is ignored.
+   *
+   * [interval_endTime] - Required. The end of the time interval.
+   *
+   * [aggregation_alignmentPeriod] - The alignment period for per-time series
+   * alignment. If present, alignmentPeriod must be at least 60 seconds. After
+   * per-time series alignment, each time series will contain data points only
+   * on the period boundaries. If perSeriesAligner is not specified or equals
+   * ALIGN_NONE, then this field is ignored. If perSeriesAligner is specified
+   * and does not equal ALIGN_NONE, then this field must be defined; otherwise
+   * an error is returned.
+   *
    * [pageSize] - A positive number that is the maximum number of results to
    * return. When view field sets to FULL, it limits the number of Points server
    * will return; if view field is HEADERS, it limits the number of TimeSeries
@@ -955,29 +978,6 @@
    * - "FULL" : A FULL.
    * - "HEADERS" : A HEADERS.
    *
-   * [aggregation_groupByFields] - The set of fields to preserve when
-   * crossSeriesReducer is specified. The groupByFields determine how the time
-   * series are partitioned into subsets prior to applying the aggregation
-   * function. Each subset contains time series that have the same value for
-   * each of the grouping fields. Each individual time series is a member of
-   * exactly one subset. The crossSeriesReducer is applied to each subset of
-   * time series. It is not possible to reduce across different resource types,
-   * so this field implicitly contains resource.type. Fields not specified in
-   * groupByFields are aggregated away. If groupByFields is not specified and
-   * all the time series have the same resource type, then the time series are
-   * aggregated into a single output time series. If crossSeriesReducer is not
-   * defined, this field is ignored.
-   *
-   * [interval_endTime] - Required. The end of the time interval.
-   *
-   * [aggregation_alignmentPeriod] - The alignment period for per-time series
-   * alignment. If present, alignmentPeriod must be at least 60 seconds. After
-   * per-time series alignment, each time series will contain data points only
-   * on the period boundaries. If perSeriesAligner is not specified or equals
-   * ALIGN_NONE, then this field is ignored. If perSeriesAligner is specified
-   * and does not equal ALIGN_NONE, then this field must be defined; otherwise
-   * an error is returned.
-   *
    * Completes with a [ListTimeSeriesResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -986,7 +986,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListTimeSeriesResponse> list(core.String name, {core.int pageSize, core.String orderBy, core.String aggregation_crossSeriesReducer, core.String filter, core.String pageToken, core.String aggregation_perSeriesAligner, core.String interval_startTime, core.String view, core.List<core.String> aggregation_groupByFields, core.String interval_endTime, core.String aggregation_alignmentPeriod}) {
+  async.Future<ListTimeSeriesResponse> list(core.String name, {core.List<core.String> aggregation_groupByFields, core.String interval_endTime, core.String aggregation_alignmentPeriod, core.int pageSize, core.String orderBy, core.String aggregation_crossSeriesReducer, core.String filter, core.String pageToken, core.String aggregation_perSeriesAligner, core.String interval_startTime, core.String view}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -997,6 +997,15 @@
     if (name == null) {
       throw new core.ArgumentError("Parameter name is required.");
     }
+    if (aggregation_groupByFields != null) {
+      _queryParams["aggregation.groupByFields"] = aggregation_groupByFields;
+    }
+    if (interval_endTime != null) {
+      _queryParams["interval.endTime"] = [interval_endTime];
+    }
+    if (aggregation_alignmentPeriod != null) {
+      _queryParams["aggregation.alignmentPeriod"] = [aggregation_alignmentPeriod];
+    }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
@@ -1021,15 +1030,6 @@
     if (view != null) {
       _queryParams["view"] = [view];
     }
-    if (aggregation_groupByFields != null) {
-      _queryParams["aggregation.groupByFields"] = aggregation_groupByFields;
-    }
-    if (interval_endTime != null) {
-      _queryParams["interval.endTime"] = [interval_endTime];
-    }
-    if (aggregation_alignmentPeriod != null) {
-      _queryParams["aggregation.alignmentPeriod"] = [aggregation_alignmentPeriod];
-    }
 
     _url = 'v3/' + commons.Escaper.ecapeVariableReserved('$name') + '/timeSeries';
 
diff --git a/generated/googleapis/lib/partners/v2.dart b/generated/googleapis/lib/partners/v2.dart
index 8cadb8a..df3855e 100644
--- a/generated/googleapis/lib/partners/v2.dart
+++ b/generated/googleapis/lib/partners/v2.dart
@@ -241,24 +241,24 @@
    * An identifier has multiple letters created by a team which redirected the
    * traffic to us.
    *
+   * [requestMetadata_partnersSessionId] - Google Partners session ID.
+   *
    * [requestMetadata_userOverrides_userId] - Logged-in user ID to impersonate
    * instead of the user's ID.
    *
-   * [requestMetadata_partnersSessionId] - Google Partners session ID.
-   *
    * [view] - The view of `Company` resource to be returned. This must not be
    * `COMPANY_VIEW_UNSPECIFIED`.
    * Possible string values are:
    * - "COMPANY_VIEW_UNSPECIFIED" : A COMPANY_VIEW_UNSPECIFIED.
    * - "CV_GOOGLE_PARTNER_SEARCH" : A CV_GOOGLE_PARTNER_SEARCH.
    *
-   * [requestMetadata_locale] - Locale to use for the current request.
-   *
    * [address] - The address to use for sorting the company's addresses by
    * proximity.
    * If not given, the geo-located address of the request is used.
    * Used when order_by is set.
    *
+   * [requestMetadata_locale] - Locale to use for the current request.
+   *
    * Completes with a [GetCompanyResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -267,7 +267,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<GetCompanyResponse> get(core.String companyId, {core.String requestMetadata_trafficSource_trafficSourceId, core.String requestMetadata_userOverrides_ipAddress, core.List<core.String> requestMetadata_experimentIds, core.String currencyCode, core.String orderBy, core.String requestMetadata_trafficSource_trafficSubId, core.String requestMetadata_userOverrides_userId, core.String requestMetadata_partnersSessionId, core.String view, core.String requestMetadata_locale, core.String address}) {
+  async.Future<GetCompanyResponse> get(core.String companyId, {core.String requestMetadata_trafficSource_trafficSourceId, core.String requestMetadata_userOverrides_ipAddress, core.List<core.String> requestMetadata_experimentIds, core.String currencyCode, core.String orderBy, core.String requestMetadata_trafficSource_trafficSubId, core.String requestMetadata_partnersSessionId, core.String requestMetadata_userOverrides_userId, core.String view, core.String address, core.String requestMetadata_locale}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -296,21 +296,21 @@
     if (requestMetadata_trafficSource_trafficSubId != null) {
       _queryParams["requestMetadata.trafficSource.trafficSubId"] = [requestMetadata_trafficSource_trafficSubId];
     }
-    if (requestMetadata_userOverrides_userId != null) {
-      _queryParams["requestMetadata.userOverrides.userId"] = [requestMetadata_userOverrides_userId];
-    }
     if (requestMetadata_partnersSessionId != null) {
       _queryParams["requestMetadata.partnersSessionId"] = [requestMetadata_partnersSessionId];
     }
+    if (requestMetadata_userOverrides_userId != null) {
+      _queryParams["requestMetadata.userOverrides.userId"] = [requestMetadata_userOverrides_userId];
+    }
     if (view != null) {
       _queryParams["view"] = [view];
     }
-    if (requestMetadata_locale != null) {
-      _queryParams["requestMetadata.locale"] = [requestMetadata_locale];
-    }
     if (address != null) {
       _queryParams["address"] = [address];
     }
+    if (requestMetadata_locale != null) {
+      _queryParams["requestMetadata.locale"] = [requestMetadata_locale];
+    }
 
     _url = 'v2/companies/' + commons.Escaper.ecapeVariable('$companyId');
 
@@ -329,6 +329,39 @@
    *
    * Request parameters:
    *
+   * [requestMetadata_userOverrides_userId] - Logged-in user ID to impersonate
+   * instead of the user's ID.
+   *
+   * [minMonthlyBudget_currencyCode] - The 3-letter currency code defined in ISO
+   * 4217.
+   *
+   * [view] - The view of the `Company` resource to be returned. This must not
+   * be
+   * `COMPANY_VIEW_UNSPECIFIED`.
+   * Possible string values are:
+   * - "COMPANY_VIEW_UNSPECIFIED" : A COMPANY_VIEW_UNSPECIFIED.
+   * - "CV_GOOGLE_PARTNER_SEARCH" : A CV_GOOGLE_PARTNER_SEARCH.
+   *
+   * [requestMetadata_locale] - Locale to use for the current request.
+   *
+   * [address] - The address to use when searching for companies.
+   * If not given, the geo-located address of the request is used.
+   *
+   * [minMonthlyBudget_units] - The whole units of the amount.
+   * For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
+   *
+   * [maxMonthlyBudget_nanos] - Number of nano (10^-9) units of the amount.
+   * The value must be between -999,999,999 and +999,999,999 inclusive.
+   * If `units` is positive, `nanos` must be positive or zero.
+   * If `units` is zero, `nanos` can be positive, zero, or negative.
+   * If `units` is negative, `nanos` must be negative or zero.
+   * For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
+   *
+   * [services] - List of services that the returned agencies should provide. If
+   * this is
+   * not empty, any returned agency must have at least one of these services,
+   * or one of the specializations in the "specializations" field.
+   *
    * [requestMetadata_trafficSource_trafficSourceId] - Identifier to indicate
    * where the traffic comes from.
    * An identifier has multiple letters created by a team which redirected the
@@ -397,39 +430,6 @@
    * [maxMonthlyBudget_currencyCode] - The 3-letter currency code defined in ISO
    * 4217.
    *
-   * [requestMetadata_userOverrides_userId] - Logged-in user ID to impersonate
-   * instead of the user's ID.
-   *
-   * [minMonthlyBudget_currencyCode] - The 3-letter currency code defined in ISO
-   * 4217.
-   *
-   * [view] - The view of the `Company` resource to be returned. This must not
-   * be
-   * `COMPANY_VIEW_UNSPECIFIED`.
-   * Possible string values are:
-   * - "COMPANY_VIEW_UNSPECIFIED" : A COMPANY_VIEW_UNSPECIFIED.
-   * - "CV_GOOGLE_PARTNER_SEARCH" : A CV_GOOGLE_PARTNER_SEARCH.
-   *
-   * [address] - The address to use when searching for companies.
-   * If not given, the geo-located address of the request is used.
-   *
-   * [requestMetadata_locale] - Locale to use for the current request.
-   *
-   * [minMonthlyBudget_units] - The whole units of the amount.
-   * For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
-   *
-   * [maxMonthlyBudget_nanos] - Number of nano (10^-9) units of the amount.
-   * The value must be between -999,999,999 and +999,999,999 inclusive.
-   * If `units` is positive, `nanos` must be positive or zero.
-   * If `units` is zero, `nanos` can be positive, zero, or negative.
-   * If `units` is negative, `nanos` must be negative or zero.
-   * For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
-   *
-   * [services] - List of services that the returned agencies should provide. If
-   * this is
-   * not empty, any returned agency must have at least one of these services,
-   * or one of the specializations in the "specializations" field.
-   *
    * Completes with a [ListCompaniesResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -438,7 +438,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListCompaniesResponse> list({core.String requestMetadata_trafficSource_trafficSourceId, core.String maxMonthlyBudget_units, core.String requestMetadata_trafficSource_trafficSubId, core.int minMonthlyBudget_nanos, core.String requestMetadata_partnersSessionId, core.String companyName, core.String pageToken, core.List<core.String> industries, core.String websiteUrl, core.List<core.String> gpsMotivations, core.List<core.String> languageCodes, core.int pageSize, core.String requestMetadata_userOverrides_ipAddress, core.List<core.String> requestMetadata_experimentIds, core.String orderBy, core.List<core.String> specializations, core.String maxMonthlyBudget_currencyCode, core.String requestMetadata_userOverrides_userId, core.String minMonthlyBudget_currencyCode, core.String view, core.String address, core.String requestMetadata_locale, core.String minMonthlyBudget_units, core.int maxMonthlyBudget_nanos, core.List<core.String> services}) {
+  async.Future<ListCompaniesResponse> list({core.String requestMetadata_userOverrides_userId, core.String minMonthlyBudget_currencyCode, core.String view, core.String requestMetadata_locale, core.String address, core.String minMonthlyBudget_units, core.int maxMonthlyBudget_nanos, core.List<core.String> services, core.String requestMetadata_trafficSource_trafficSourceId, core.String maxMonthlyBudget_units, core.String requestMetadata_trafficSource_trafficSubId, core.int minMonthlyBudget_nanos, core.String requestMetadata_partnersSessionId, core.String companyName, core.String pageToken, core.List<core.String> industries, core.String websiteUrl, core.List<core.String> gpsMotivations, core.List<core.String> languageCodes, core.int pageSize, core.String requestMetadata_userOverrides_ipAddress, core.List<core.String> requestMetadata_experimentIds, core.String orderBy, core.List<core.String> specializations, core.String maxMonthlyBudget_currencyCode}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -446,6 +446,30 @@
     var _downloadOptions = commons.DownloadOptions.Metadata;
     var _body = null;
 
+    if (requestMetadata_userOverrides_userId != null) {
+      _queryParams["requestMetadata.userOverrides.userId"] = [requestMetadata_userOverrides_userId];
+    }
+    if (minMonthlyBudget_currencyCode != null) {
+      _queryParams["minMonthlyBudget.currencyCode"] = [minMonthlyBudget_currencyCode];
+    }
+    if (view != null) {
+      _queryParams["view"] = [view];
+    }
+    if (requestMetadata_locale != null) {
+      _queryParams["requestMetadata.locale"] = [requestMetadata_locale];
+    }
+    if (address != null) {
+      _queryParams["address"] = [address];
+    }
+    if (minMonthlyBudget_units != null) {
+      _queryParams["minMonthlyBudget.units"] = [minMonthlyBudget_units];
+    }
+    if (maxMonthlyBudget_nanos != null) {
+      _queryParams["maxMonthlyBudget.nanos"] = ["${maxMonthlyBudget_nanos}"];
+    }
+    if (services != null) {
+      _queryParams["services"] = services;
+    }
     if (requestMetadata_trafficSource_trafficSourceId != null) {
       _queryParams["requestMetadata.trafficSource.trafficSourceId"] = [requestMetadata_trafficSource_trafficSourceId];
     }
@@ -497,30 +521,6 @@
     if (maxMonthlyBudget_currencyCode != null) {
       _queryParams["maxMonthlyBudget.currencyCode"] = [maxMonthlyBudget_currencyCode];
     }
-    if (requestMetadata_userOverrides_userId != null) {
-      _queryParams["requestMetadata.userOverrides.userId"] = [requestMetadata_userOverrides_userId];
-    }
-    if (minMonthlyBudget_currencyCode != null) {
-      _queryParams["minMonthlyBudget.currencyCode"] = [minMonthlyBudget_currencyCode];
-    }
-    if (view != null) {
-      _queryParams["view"] = [view];
-    }
-    if (address != null) {
-      _queryParams["address"] = [address];
-    }
-    if (requestMetadata_locale != null) {
-      _queryParams["requestMetadata.locale"] = [requestMetadata_locale];
-    }
-    if (minMonthlyBudget_units != null) {
-      _queryParams["minMonthlyBudget.units"] = [minMonthlyBudget_units];
-    }
-    if (maxMonthlyBudget_nanos != null) {
-      _queryParams["maxMonthlyBudget.nanos"] = ["${maxMonthlyBudget_nanos}"];
-    }
-    if (services != null) {
-      _queryParams["services"] = services;
-    }
 
     _url = 'v2/companies';
 
@@ -616,11 +616,6 @@
    * - "CET_DIGITAL_SALES" : A CET_DIGITAL_SALES.
    * - "CET_MOBILE_SITES" : A CET_MOBILE_SITES.
    *
-   * [requestMetadata_trafficSource_trafficSubId] - Second level identifier to
-   * indicate where the traffic comes from.
-   * An identifier has multiple letters created by a team which redirected the
-   * traffic to us.
-   *
    * [requestMetadata_userOverrides_userId] - Logged-in user ID to impersonate
    * instead of the user's ID.
    *
@@ -639,6 +634,11 @@
    * [requestMetadata_experimentIds] - Experiment IDs the current request
    * belongs to.
    *
+   * [requestMetadata_trafficSource_trafficSubId] - Second level identifier to
+   * indicate where the traffic comes from.
+   * An identifier has multiple letters created by a team which redirected the
+   * traffic to us.
+   *
    * Completes with a [ExamToken].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -647,7 +647,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ExamToken> getToken(core.String examType, {core.String requestMetadata_trafficSource_trafficSubId, core.String requestMetadata_userOverrides_userId, core.String requestMetadata_partnersSessionId, core.String requestMetadata_trafficSource_trafficSourceId, core.String requestMetadata_locale, core.String requestMetadata_userOverrides_ipAddress, core.List<core.String> requestMetadata_experimentIds}) {
+  async.Future<ExamToken> getToken(core.String examType, {core.String requestMetadata_userOverrides_userId, core.String requestMetadata_partnersSessionId, core.String requestMetadata_trafficSource_trafficSourceId, core.String requestMetadata_locale, core.String requestMetadata_userOverrides_ipAddress, core.List<core.String> requestMetadata_experimentIds, core.String requestMetadata_trafficSource_trafficSubId}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -658,9 +658,6 @@
     if (examType == null) {
       throw new core.ArgumentError("Parameter examType is required.");
     }
-    if (requestMetadata_trafficSource_trafficSubId != null) {
-      _queryParams["requestMetadata.trafficSource.trafficSubId"] = [requestMetadata_trafficSource_trafficSubId];
-    }
     if (requestMetadata_userOverrides_userId != null) {
       _queryParams["requestMetadata.userOverrides.userId"] = [requestMetadata_userOverrides_userId];
     }
@@ -679,6 +676,9 @@
     if (requestMetadata_experimentIds != null) {
       _queryParams["requestMetadata.experimentIds"] = requestMetadata_experimentIds;
     }
+    if (requestMetadata_trafficSource_trafficSubId != null) {
+      _queryParams["requestMetadata.trafficSource.trafficSubId"] = [requestMetadata_trafficSource_trafficSubId];
+    }
 
     _url = 'v2/exams/' + commons.Escaper.ecapeVariable('$examType') + '/token';
 
@@ -707,6 +707,17 @@
    *
    * Request parameters:
    *
+   * [requestMetadata_userOverrides_userId] - Logged-in user ID to impersonate
+   * instead of the user's ID.
+   *
+   * [requestMetadata_partnersSessionId] - Google Partners session ID.
+   *
+   * [pageToken] - A token identifying a page of results that the server
+   * returns.
+   * Typically, this is the value of `ListLeadsResponse.next_page_token`
+   * returned from the previous call to
+   * ListLeads.
+   *
    * [pageSize] - Requested page size. Server may return fewer leads than
    * requested.
    * If unspecified, server picks an appropriate default.
@@ -732,17 +743,6 @@
    * An identifier has multiple letters created by a team which redirected the
    * traffic to us.
    *
-   * [requestMetadata_userOverrides_userId] - Logged-in user ID to impersonate
-   * instead of the user's ID.
-   *
-   * [requestMetadata_partnersSessionId] - Google Partners session ID.
-   *
-   * [pageToken] - A token identifying a page of results that the server
-   * returns.
-   * Typically, this is the value of `ListLeadsResponse.next_page_token`
-   * returned from the previous call to
-   * ListLeads.
-   *
    * Completes with a [ListLeadsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -751,7 +751,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListLeadsResponse> list({core.int pageSize, core.String requestMetadata_trafficSource_trafficSourceId, core.String requestMetadata_locale, core.String requestMetadata_userOverrides_ipAddress, core.List<core.String> requestMetadata_experimentIds, core.String orderBy, core.String requestMetadata_trafficSource_trafficSubId, core.String requestMetadata_userOverrides_userId, core.String requestMetadata_partnersSessionId, core.String pageToken}) {
+  async.Future<ListLeadsResponse> list({core.String requestMetadata_userOverrides_userId, core.String requestMetadata_partnersSessionId, core.String pageToken, core.int pageSize, core.String requestMetadata_trafficSource_trafficSourceId, core.String requestMetadata_locale, core.String requestMetadata_userOverrides_ipAddress, core.List<core.String> requestMetadata_experimentIds, core.String orderBy, core.String requestMetadata_trafficSource_trafficSubId}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -759,6 +759,15 @@
     var _downloadOptions = commons.DownloadOptions.Metadata;
     var _body = null;
 
+    if (requestMetadata_userOverrides_userId != null) {
+      _queryParams["requestMetadata.userOverrides.userId"] = [requestMetadata_userOverrides_userId];
+    }
+    if (requestMetadata_partnersSessionId != null) {
+      _queryParams["requestMetadata.partnersSessionId"] = [requestMetadata_partnersSessionId];
+    }
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
@@ -780,15 +789,6 @@
     if (requestMetadata_trafficSource_trafficSubId != null) {
       _queryParams["requestMetadata.trafficSource.trafficSubId"] = [requestMetadata_trafficSource_trafficSubId];
     }
-    if (requestMetadata_userOverrides_userId != null) {
-      _queryParams["requestMetadata.userOverrides.userId"] = [requestMetadata_userOverrides_userId];
-    }
-    if (requestMetadata_partnersSessionId != null) {
-      _queryParams["requestMetadata.partnersSessionId"] = [requestMetadata_partnersSessionId];
-    }
-    if (pageToken != null) {
-      _queryParams["pageToken"] = [pageToken];
-    }
 
     _url = 'v2/leads';
 
@@ -818,11 +818,6 @@
    *
    * Request parameters:
    *
-   * [requestMetadata_userOverrides_userId] - Logged-in user ID to impersonate
-   * instead of the user's ID.
-   *
-   * [requestMetadata_partnersSessionId] - Google Partners session ID.
-   *
    * [requestMetadata_trafficSource_trafficSourceId] - Identifier to indicate
    * where the traffic comes from.
    * An identifier has multiple letters created by a team which redirected the
@@ -841,6 +836,11 @@
    * An identifier has multiple letters created by a team which redirected the
    * traffic to us.
    *
+   * [requestMetadata_partnersSessionId] - Google Partners session ID.
+   *
+   * [requestMetadata_userOverrides_userId] - Logged-in user ID to impersonate
+   * instead of the user's ID.
+   *
    * Completes with a [ListOffersResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -849,7 +849,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListOffersResponse> list({core.String requestMetadata_userOverrides_userId, core.String requestMetadata_partnersSessionId, core.String requestMetadata_trafficSource_trafficSourceId, core.String requestMetadata_locale, core.String requestMetadata_userOverrides_ipAddress, core.List<core.String> requestMetadata_experimentIds, core.String requestMetadata_trafficSource_trafficSubId}) {
+  async.Future<ListOffersResponse> list({core.String requestMetadata_trafficSource_trafficSourceId, core.String requestMetadata_locale, core.String requestMetadata_userOverrides_ipAddress, core.List<core.String> requestMetadata_experimentIds, core.String requestMetadata_trafficSource_trafficSubId, core.String requestMetadata_partnersSessionId, core.String requestMetadata_userOverrides_userId}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -857,12 +857,6 @@
     var _downloadOptions = commons.DownloadOptions.Metadata;
     var _body = null;
 
-    if (requestMetadata_userOverrides_userId != null) {
-      _queryParams["requestMetadata.userOverrides.userId"] = [requestMetadata_userOverrides_userId];
-    }
-    if (requestMetadata_partnersSessionId != null) {
-      _queryParams["requestMetadata.partnersSessionId"] = [requestMetadata_partnersSessionId];
-    }
     if (requestMetadata_trafficSource_trafficSourceId != null) {
       _queryParams["requestMetadata.trafficSource.trafficSourceId"] = [requestMetadata_trafficSource_trafficSourceId];
     }
@@ -878,6 +872,12 @@
     if (requestMetadata_trafficSource_trafficSubId != null) {
       _queryParams["requestMetadata.trafficSource.trafficSubId"] = [requestMetadata_trafficSource_trafficSubId];
     }
+    if (requestMetadata_partnersSessionId != null) {
+      _queryParams["requestMetadata.partnersSessionId"] = [requestMetadata_partnersSessionId];
+    }
+    if (requestMetadata_userOverrides_userId != null) {
+      _queryParams["requestMetadata.userOverrides.userId"] = [requestMetadata_userOverrides_userId];
+    }
 
     _url = 'v2/offers';
 
@@ -905,11 +905,11 @@
    *
    * Request parameters:
    *
-   * [requestMetadata_partnersSessionId] - Google Partners session ID.
-   *
    * [requestMetadata_userOverrides_userId] - Logged-in user ID to impersonate
    * instead of the user's ID.
    *
+   * [requestMetadata_partnersSessionId] - Google Partners session ID.
+   *
    * [pageToken] - Token to retrieve a specific page.
    *
    * [pageSize] - Maximum number of rows to return per page.
@@ -930,6 +930,11 @@
    * [requestMetadata_experimentIds] - Experiment IDs the current request
    * belongs to.
    *
+   * [requestMetadata_trafficSource_trafficSubId] - Second level identifier to
+   * indicate where the traffic comes from.
+   * An identifier has multiple letters created by a team which redirected the
+   * traffic to us.
+   *
    * [orderBy] - Comma-separated list of fields to order by, e.g.:
    * "foo,bar,baz".
    * Use "foo desc" to sort descending.
@@ -937,11 +942,6 @@
    *     last_modified_time, sender_name, creation_time, country_code,
    *     offer_type.
    *
-   * [requestMetadata_trafficSource_trafficSubId] - Second level identifier to
-   * indicate where the traffic comes from.
-   * An identifier has multiple letters created by a team which redirected the
-   * traffic to us.
-   *
    * Completes with a [ListOffersHistoryResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -950,7 +950,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListOffersHistoryResponse> list({core.String requestMetadata_partnersSessionId, core.String requestMetadata_userOverrides_userId, core.String pageToken, core.int pageSize, core.String requestMetadata_trafficSource_trafficSourceId, core.String requestMetadata_locale, core.String requestMetadata_userOverrides_ipAddress, core.bool entireCompany, core.List<core.String> requestMetadata_experimentIds, core.String orderBy, core.String requestMetadata_trafficSource_trafficSubId}) {
+  async.Future<ListOffersHistoryResponse> list({core.String requestMetadata_userOverrides_userId, core.String requestMetadata_partnersSessionId, core.String pageToken, core.int pageSize, core.String requestMetadata_trafficSource_trafficSourceId, core.String requestMetadata_locale, core.String requestMetadata_userOverrides_ipAddress, core.bool entireCompany, core.List<core.String> requestMetadata_experimentIds, core.String requestMetadata_trafficSource_trafficSubId, core.String orderBy}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -958,12 +958,12 @@
     var _downloadOptions = commons.DownloadOptions.Metadata;
     var _body = null;
 
-    if (requestMetadata_partnersSessionId != null) {
-      _queryParams["requestMetadata.partnersSessionId"] = [requestMetadata_partnersSessionId];
-    }
     if (requestMetadata_userOverrides_userId != null) {
       _queryParams["requestMetadata.userOverrides.userId"] = [requestMetadata_userOverrides_userId];
     }
+    if (requestMetadata_partnersSessionId != null) {
+      _queryParams["requestMetadata.partnersSessionId"] = [requestMetadata_partnersSessionId];
+    }
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
@@ -985,12 +985,12 @@
     if (requestMetadata_experimentIds != null) {
       _queryParams["requestMetadata.experimentIds"] = requestMetadata_experimentIds;
     }
-    if (orderBy != null) {
-      _queryParams["orderBy"] = [orderBy];
-    }
     if (requestMetadata_trafficSource_trafficSubId != null) {
       _queryParams["requestMetadata.trafficSource.trafficSubId"] = [requestMetadata_trafficSource_trafficSubId];
     }
+    if (orderBy != null) {
+      _queryParams["orderBy"] = [orderBy];
+    }
 
     _url = 'v2/offers/history';
 
@@ -1066,8 +1066,6 @@
    *
    * Request parameters:
    *
-   * [requestMetadata_locale] - Locale to use for the current request.
-   *
    * [requestMetadata_userOverrides_ipAddress] - IP address to use instead of
    * the user's geo-located IP address.
    *
@@ -1079,16 +1077,18 @@
    * An identifier has multiple letters created by a team which redirected the
    * traffic to us.
    *
-   * [requestMetadata_partnersSessionId] - Google Partners session ID.
-   *
    * [requestMetadata_userOverrides_userId] - Logged-in user ID to impersonate
    * instead of the user's ID.
    *
+   * [requestMetadata_partnersSessionId] - Google Partners session ID.
+   *
    * [requestMetadata_trafficSource_trafficSourceId] - Identifier to indicate
    * where the traffic comes from.
    * An identifier has multiple letters created by a team which redirected the
    * traffic to us.
    *
+   * [requestMetadata_locale] - Locale to use for the current request.
+   *
    * Completes with a [ListUserStatesResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -1097,7 +1097,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListUserStatesResponse> list({core.String requestMetadata_locale, core.String requestMetadata_userOverrides_ipAddress, core.List<core.String> requestMetadata_experimentIds, core.String requestMetadata_trafficSource_trafficSubId, core.String requestMetadata_partnersSessionId, core.String requestMetadata_userOverrides_userId, core.String requestMetadata_trafficSource_trafficSourceId}) {
+  async.Future<ListUserStatesResponse> list({core.String requestMetadata_userOverrides_ipAddress, core.List<core.String> requestMetadata_experimentIds, core.String requestMetadata_trafficSource_trafficSubId, core.String requestMetadata_userOverrides_userId, core.String requestMetadata_partnersSessionId, core.String requestMetadata_trafficSource_trafficSourceId, core.String requestMetadata_locale}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -1105,9 +1105,6 @@
     var _downloadOptions = commons.DownloadOptions.Metadata;
     var _body = null;
 
-    if (requestMetadata_locale != null) {
-      _queryParams["requestMetadata.locale"] = [requestMetadata_locale];
-    }
     if (requestMetadata_userOverrides_ipAddress != null) {
       _queryParams["requestMetadata.userOverrides.ipAddress"] = [requestMetadata_userOverrides_ipAddress];
     }
@@ -1117,15 +1114,18 @@
     if (requestMetadata_trafficSource_trafficSubId != null) {
       _queryParams["requestMetadata.trafficSource.trafficSubId"] = [requestMetadata_trafficSource_trafficSubId];
     }
-    if (requestMetadata_partnersSessionId != null) {
-      _queryParams["requestMetadata.partnersSessionId"] = [requestMetadata_partnersSessionId];
-    }
     if (requestMetadata_userOverrides_userId != null) {
       _queryParams["requestMetadata.userOverrides.userId"] = [requestMetadata_userOverrides_userId];
     }
+    if (requestMetadata_partnersSessionId != null) {
+      _queryParams["requestMetadata.partnersSessionId"] = [requestMetadata_partnersSessionId];
+    }
     if (requestMetadata_trafficSource_trafficSourceId != null) {
       _queryParams["requestMetadata.trafficSource.trafficSourceId"] = [requestMetadata_trafficSource_trafficSourceId];
     }
+    if (requestMetadata_locale != null) {
+      _queryParams["requestMetadata.locale"] = [requestMetadata_locale];
+    }
 
     _url = 'v2/userStates';
 
@@ -1158,6 +1158,14 @@
    * [userId] - The ID of the user. Can be set to <code>me</code> to mean
    * the currently authenticated user.
    *
+   * [requestMetadata_experimentIds] - Experiment IDs the current request
+   * belongs to.
+   *
+   * [requestMetadata_trafficSource_trafficSubId] - Second level identifier to
+   * indicate where the traffic comes from.
+   * An identifier has multiple letters created by a team which redirected the
+   * traffic to us.
+   *
    * [requestMetadata_userOverrides_userId] - Logged-in user ID to impersonate
    * instead of the user's ID.
    *
@@ -1173,14 +1181,6 @@
    * [requestMetadata_userOverrides_ipAddress] - IP address to use instead of
    * the user's geo-located IP address.
    *
-   * [requestMetadata_experimentIds] - Experiment IDs the current request
-   * belongs to.
-   *
-   * [requestMetadata_trafficSource_trafficSubId] - Second level identifier to
-   * indicate where the traffic comes from.
-   * An identifier has multiple letters created by a team which redirected the
-   * traffic to us.
-   *
    * Completes with a [CompanyRelation].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -1189,7 +1189,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<CompanyRelation> createCompanyRelation(CompanyRelation request, core.String userId, {core.String requestMetadata_userOverrides_userId, core.String requestMetadata_partnersSessionId, core.String requestMetadata_trafficSource_trafficSourceId, core.String requestMetadata_locale, core.String requestMetadata_userOverrides_ipAddress, core.List<core.String> requestMetadata_experimentIds, core.String requestMetadata_trafficSource_trafficSubId}) {
+  async.Future<CompanyRelation> createCompanyRelation(CompanyRelation request, core.String userId, {core.List<core.String> requestMetadata_experimentIds, core.String requestMetadata_trafficSource_trafficSubId, core.String requestMetadata_userOverrides_userId, core.String requestMetadata_partnersSessionId, core.String requestMetadata_trafficSource_trafficSourceId, core.String requestMetadata_locale, core.String requestMetadata_userOverrides_ipAddress}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -1203,6 +1203,12 @@
     if (userId == null) {
       throw new core.ArgumentError("Parameter userId is required.");
     }
+    if (requestMetadata_experimentIds != null) {
+      _queryParams["requestMetadata.experimentIds"] = requestMetadata_experimentIds;
+    }
+    if (requestMetadata_trafficSource_trafficSubId != null) {
+      _queryParams["requestMetadata.trafficSource.trafficSubId"] = [requestMetadata_trafficSource_trafficSubId];
+    }
     if (requestMetadata_userOverrides_userId != null) {
       _queryParams["requestMetadata.userOverrides.userId"] = [requestMetadata_userOverrides_userId];
     }
@@ -1218,12 +1224,6 @@
     if (requestMetadata_userOverrides_ipAddress != null) {
       _queryParams["requestMetadata.userOverrides.ipAddress"] = [requestMetadata_userOverrides_ipAddress];
     }
-    if (requestMetadata_experimentIds != null) {
-      _queryParams["requestMetadata.experimentIds"] = requestMetadata_experimentIds;
-    }
-    if (requestMetadata_trafficSource_trafficSubId != null) {
-      _queryParams["requestMetadata.trafficSource.trafficSubId"] = [requestMetadata_trafficSource_trafficSubId];
-    }
 
     _url = 'v2/users/' + commons.Escaper.ecapeVariable('$userId') + '/companyRelation';
 
@@ -1253,11 +1253,11 @@
    * An identifier has multiple letters created by a team which redirected the
    * traffic to us.
    *
-   * [requestMetadata_partnersSessionId] - Google Partners session ID.
-   *
    * [requestMetadata_userOverrides_userId] - Logged-in user ID to impersonate
    * instead of the user's ID.
    *
+   * [requestMetadata_partnersSessionId] - Google Partners session ID.
+   *
    * [requestMetadata_trafficSource_trafficSourceId] - Identifier to indicate
    * where the traffic comes from.
    * An identifier has multiple letters created by a team which redirected the
@@ -1276,7 +1276,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<Empty> deleteCompanyRelation(core.String userId, {core.List<core.String> requestMetadata_experimentIds, core.String requestMetadata_trafficSource_trafficSubId, core.String requestMetadata_partnersSessionId, core.String requestMetadata_userOverrides_userId, core.String requestMetadata_trafficSource_trafficSourceId, core.String requestMetadata_locale, core.String requestMetadata_userOverrides_ipAddress}) {
+  async.Future<Empty> deleteCompanyRelation(core.String userId, {core.List<core.String> requestMetadata_experimentIds, core.String requestMetadata_trafficSource_trafficSubId, core.String requestMetadata_userOverrides_userId, core.String requestMetadata_partnersSessionId, core.String requestMetadata_trafficSource_trafficSourceId, core.String requestMetadata_locale, core.String requestMetadata_userOverrides_ipAddress}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -1293,12 +1293,12 @@
     if (requestMetadata_trafficSource_trafficSubId != null) {
       _queryParams["requestMetadata.trafficSource.trafficSubId"] = [requestMetadata_trafficSource_trafficSubId];
     }
-    if (requestMetadata_partnersSessionId != null) {
-      _queryParams["requestMetadata.partnersSessionId"] = [requestMetadata_partnersSessionId];
-    }
     if (requestMetadata_userOverrides_userId != null) {
       _queryParams["requestMetadata.userOverrides.userId"] = [requestMetadata_userOverrides_userId];
     }
+    if (requestMetadata_partnersSessionId != null) {
+      _queryParams["requestMetadata.partnersSessionId"] = [requestMetadata_partnersSessionId];
+    }
     if (requestMetadata_trafficSource_trafficSourceId != null) {
       _queryParams["requestMetadata.trafficSource.trafficSourceId"] = [requestMetadata_trafficSource_trafficSourceId];
     }
@@ -1330,6 +1330,17 @@
    * the currently
    * authenticated user.
    *
+   * [requestMetadata_userOverrides_userId] - Logged-in user ID to impersonate
+   * instead of the user's ID.
+   *
+   * [requestMetadata_partnersSessionId] - Google Partners session ID.
+   *
+   * [userView] - Specifies what parts of the user information to return.
+   * Possible string values are:
+   * - "BASIC" : A BASIC.
+   * - "PROFILE" : A PROFILE.
+   * - "PUBLIC_PROFILE" : A PUBLIC_PROFILE.
+   *
    * [requestMetadata_trafficSource_trafficSourceId] - Identifier to indicate
    * where the traffic comes from.
    * An identifier has multiple letters created by a team which redirected the
@@ -1348,17 +1359,6 @@
    * An identifier has multiple letters created by a team which redirected the
    * traffic to us.
    *
-   * [requestMetadata_partnersSessionId] - Google Partners session ID.
-   *
-   * [requestMetadata_userOverrides_userId] - Logged-in user ID to impersonate
-   * instead of the user's ID.
-   *
-   * [userView] - Specifies what parts of the user information to return.
-   * Possible string values are:
-   * - "BASIC" : A BASIC.
-   * - "PROFILE" : A PROFILE.
-   * - "PUBLIC_PROFILE" : A PUBLIC_PROFILE.
-   *
    * Completes with a [User].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -1367,7 +1367,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<User> get(core.String userId, {core.String requestMetadata_trafficSource_trafficSourceId, core.String requestMetadata_locale, core.String requestMetadata_userOverrides_ipAddress, core.List<core.String> requestMetadata_experimentIds, core.String requestMetadata_trafficSource_trafficSubId, core.String requestMetadata_partnersSessionId, core.String requestMetadata_userOverrides_userId, core.String userView}) {
+  async.Future<User> get(core.String userId, {core.String requestMetadata_userOverrides_userId, core.String requestMetadata_partnersSessionId, core.String userView, core.String requestMetadata_trafficSource_trafficSourceId, core.String requestMetadata_locale, core.String requestMetadata_userOverrides_ipAddress, core.List<core.String> requestMetadata_experimentIds, core.String requestMetadata_trafficSource_trafficSubId}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -1378,6 +1378,15 @@
     if (userId == null) {
       throw new core.ArgumentError("Parameter userId is required.");
     }
+    if (requestMetadata_userOverrides_userId != null) {
+      _queryParams["requestMetadata.userOverrides.userId"] = [requestMetadata_userOverrides_userId];
+    }
+    if (requestMetadata_partnersSessionId != null) {
+      _queryParams["requestMetadata.partnersSessionId"] = [requestMetadata_partnersSessionId];
+    }
+    if (userView != null) {
+      _queryParams["userView"] = [userView];
+    }
     if (requestMetadata_trafficSource_trafficSourceId != null) {
       _queryParams["requestMetadata.trafficSource.trafficSourceId"] = [requestMetadata_trafficSource_trafficSourceId];
     }
@@ -1393,15 +1402,6 @@
     if (requestMetadata_trafficSource_trafficSubId != null) {
       _queryParams["requestMetadata.trafficSource.trafficSubId"] = [requestMetadata_trafficSource_trafficSubId];
     }
-    if (requestMetadata_partnersSessionId != null) {
-      _queryParams["requestMetadata.partnersSessionId"] = [requestMetadata_partnersSessionId];
-    }
-    if (requestMetadata_userOverrides_userId != null) {
-      _queryParams["requestMetadata.userOverrides.userId"] = [requestMetadata_userOverrides_userId];
-    }
-    if (userView != null) {
-      _queryParams["userView"] = [userView];
-    }
 
     _url = 'v2/users/' + commons.Escaper.ecapeVariable('$userId');
 
@@ -1423,11 +1423,6 @@
    *
    * Request parameters:
    *
-   * [requestMetadata_trafficSource_trafficSubId] - Second level identifier to
-   * indicate where the traffic comes from.
-   * An identifier has multiple letters created by a team which redirected the
-   * traffic to us.
-   *
    * [requestMetadata_partnersSessionId] - Google Partners session ID.
    *
    * [requestMetadata_userOverrides_userId] - Logged-in user ID to impersonate
@@ -1446,6 +1441,11 @@
    * [requestMetadata_experimentIds] - Experiment IDs the current request
    * belongs to.
    *
+   * [requestMetadata_trafficSource_trafficSubId] - Second level identifier to
+   * indicate where the traffic comes from.
+   * An identifier has multiple letters created by a team which redirected the
+   * traffic to us.
+   *
    * Completes with a [UserProfile].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -1454,7 +1454,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<UserProfile> updateProfile(UserProfile request, {core.String requestMetadata_trafficSource_trafficSubId, core.String requestMetadata_partnersSessionId, core.String requestMetadata_userOverrides_userId, core.String requestMetadata_trafficSource_trafficSourceId, core.String requestMetadata_locale, core.String requestMetadata_userOverrides_ipAddress, core.List<core.String> requestMetadata_experimentIds}) {
+  async.Future<UserProfile> updateProfile(UserProfile request, {core.String requestMetadata_partnersSessionId, core.String requestMetadata_userOverrides_userId, core.String requestMetadata_trafficSource_trafficSourceId, core.String requestMetadata_locale, core.String requestMetadata_userOverrides_ipAddress, core.List<core.String> requestMetadata_experimentIds, core.String requestMetadata_trafficSource_trafficSubId}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -1465,9 +1465,6 @@
     if (request != null) {
       _body = convert.JSON.encode((request).toJson());
     }
-    if (requestMetadata_trafficSource_trafficSubId != null) {
-      _queryParams["requestMetadata.trafficSource.trafficSubId"] = [requestMetadata_trafficSource_trafficSubId];
-    }
     if (requestMetadata_partnersSessionId != null) {
       _queryParams["requestMetadata.partnersSessionId"] = [requestMetadata_partnersSessionId];
     }
@@ -1486,6 +1483,9 @@
     if (requestMetadata_experimentIds != null) {
       _queryParams["requestMetadata.experimentIds"] = requestMetadata_experimentIds;
     }
+    if (requestMetadata_trafficSource_trafficSubId != null) {
+      _queryParams["requestMetadata.trafficSource.trafficSubId"] = [requestMetadata_trafficSource_trafficSubId];
+    }
 
     _url = 'v2/users/profile';
 
@@ -1514,6 +1514,11 @@
    *
    * Request parameters:
    *
+   * [requestMetadata_userOverrides_userId] - Logged-in user ID to impersonate
+   * instead of the user's ID.
+   *
+   * [requestMetadata_partnersSessionId] - Google Partners session ID.
+   *
    * [requestMetadata_trafficSource_trafficSourceId] - Identifier to indicate
    * where the traffic comes from.
    * An identifier has multiple letters created by a team which redirected the
@@ -1532,11 +1537,6 @@
    * An identifier has multiple letters created by a team which redirected the
    * traffic to us.
    *
-   * [requestMetadata_partnersSessionId] - Google Partners session ID.
-   *
-   * [requestMetadata_userOverrides_userId] - Logged-in user ID to impersonate
-   * instead of the user's ID.
-   *
    * Completes with a [GetPartnersStatusResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -1545,7 +1545,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<GetPartnersStatusResponse> getPartnersstatus({core.String requestMetadata_trafficSource_trafficSourceId, core.String requestMetadata_locale, core.String requestMetadata_userOverrides_ipAddress, core.List<core.String> requestMetadata_experimentIds, core.String requestMetadata_trafficSource_trafficSubId, core.String requestMetadata_partnersSessionId, core.String requestMetadata_userOverrides_userId}) {
+  async.Future<GetPartnersStatusResponse> getPartnersstatus({core.String requestMetadata_userOverrides_userId, core.String requestMetadata_partnersSessionId, core.String requestMetadata_trafficSource_trafficSourceId, core.String requestMetadata_locale, core.String requestMetadata_userOverrides_ipAddress, core.List<core.String> requestMetadata_experimentIds, core.String requestMetadata_trafficSource_trafficSubId}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -1553,6 +1553,12 @@
     var _downloadOptions = commons.DownloadOptions.Metadata;
     var _body = null;
 
+    if (requestMetadata_userOverrides_userId != null) {
+      _queryParams["requestMetadata.userOverrides.userId"] = [requestMetadata_userOverrides_userId];
+    }
+    if (requestMetadata_partnersSessionId != null) {
+      _queryParams["requestMetadata.partnersSessionId"] = [requestMetadata_partnersSessionId];
+    }
     if (requestMetadata_trafficSource_trafficSourceId != null) {
       _queryParams["requestMetadata.trafficSource.trafficSourceId"] = [requestMetadata_trafficSource_trafficSourceId];
     }
@@ -1568,12 +1574,6 @@
     if (requestMetadata_trafficSource_trafficSubId != null) {
       _queryParams["requestMetadata.trafficSource.trafficSubId"] = [requestMetadata_trafficSource_trafficSubId];
     }
-    if (requestMetadata_partnersSessionId != null) {
-      _queryParams["requestMetadata.partnersSessionId"] = [requestMetadata_partnersSessionId];
-    }
-    if (requestMetadata_userOverrides_userId != null) {
-      _queryParams["requestMetadata.userOverrides.userId"] = [requestMetadata_userOverrides_userId];
-    }
 
     _url = 'v2/partnersstatus';
 
@@ -1595,6 +1595,18 @@
    *
    * Request parameters:
    *
+   * [requestMetadata_userOverrides_userId] - Logged-in user ID to impersonate
+   * instead of the user's ID.
+   *
+   * [requestMetadata_partnersSessionId] - Google Partners session ID.
+   *
+   * [requestMetadata_trafficSource_trafficSourceId] - Identifier to indicate
+   * where the traffic comes from.
+   * An identifier has multiple letters created by a team which redirected the
+   * traffic to us.
+   *
+   * [requestMetadata_locale] - Locale to use for the current request.
+   *
    * [requestMetadata_userOverrides_ipAddress] - IP address to use instead of
    * the user's geo-located IP address.
    *
@@ -1609,18 +1621,6 @@
    * An identifier has multiple letters created by a team which redirected the
    * traffic to us.
    *
-   * [requestMetadata_userOverrides_userId] - Logged-in user ID to impersonate
-   * instead of the user's ID.
-   *
-   * [requestMetadata_partnersSessionId] - Google Partners session ID.
-   *
-   * [requestMetadata_trafficSource_trafficSourceId] - Identifier to indicate
-   * where the traffic comes from.
-   * An identifier has multiple letters created by a team which redirected the
-   * traffic to us.
-   *
-   * [requestMetadata_locale] - Locale to use for the current request.
-   *
    * Completes with a [Company].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -1629,7 +1629,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<Company> updateCompanies(Company request, {core.String requestMetadata_userOverrides_ipAddress, core.String updateMask, core.List<core.String> requestMetadata_experimentIds, core.String requestMetadata_trafficSource_trafficSubId, core.String requestMetadata_userOverrides_userId, core.String requestMetadata_partnersSessionId, core.String requestMetadata_trafficSource_trafficSourceId, core.String requestMetadata_locale}) {
+  async.Future<Company> updateCompanies(Company request, {core.String requestMetadata_userOverrides_userId, core.String requestMetadata_partnersSessionId, core.String requestMetadata_trafficSource_trafficSourceId, core.String requestMetadata_locale, core.String requestMetadata_userOverrides_ipAddress, core.String updateMask, core.List<core.String> requestMetadata_experimentIds, core.String requestMetadata_trafficSource_trafficSubId}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -1640,18 +1640,6 @@
     if (request != null) {
       _body = convert.JSON.encode((request).toJson());
     }
-    if (requestMetadata_userOverrides_ipAddress != null) {
-      _queryParams["requestMetadata.userOverrides.ipAddress"] = [requestMetadata_userOverrides_ipAddress];
-    }
-    if (updateMask != null) {
-      _queryParams["updateMask"] = [updateMask];
-    }
-    if (requestMetadata_experimentIds != null) {
-      _queryParams["requestMetadata.experimentIds"] = requestMetadata_experimentIds;
-    }
-    if (requestMetadata_trafficSource_trafficSubId != null) {
-      _queryParams["requestMetadata.trafficSource.trafficSubId"] = [requestMetadata_trafficSource_trafficSubId];
-    }
     if (requestMetadata_userOverrides_userId != null) {
       _queryParams["requestMetadata.userOverrides.userId"] = [requestMetadata_userOverrides_userId];
     }
@@ -1664,6 +1652,18 @@
     if (requestMetadata_locale != null) {
       _queryParams["requestMetadata.locale"] = [requestMetadata_locale];
     }
+    if (requestMetadata_userOverrides_ipAddress != null) {
+      _queryParams["requestMetadata.userOverrides.ipAddress"] = [requestMetadata_userOverrides_ipAddress];
+    }
+    if (updateMask != null) {
+      _queryParams["updateMask"] = [updateMask];
+    }
+    if (requestMetadata_experimentIds != null) {
+      _queryParams["requestMetadata.experimentIds"] = requestMetadata_experimentIds;
+    }
+    if (requestMetadata_trafficSource_trafficSubId != null) {
+      _queryParams["requestMetadata.trafficSource.trafficSubId"] = [requestMetadata_trafficSource_trafficSubId];
+    }
 
     _url = 'v2/companies';
 
@@ -1684,13 +1684,6 @@
    *
    * Request parameters:
    *
-   * [requestMetadata_trafficSource_trafficSourceId] - Identifier to indicate
-   * where the traffic comes from.
-   * An identifier has multiple letters created by a team which redirected the
-   * traffic to us.
-   *
-   * [requestMetadata_locale] - Locale to use for the current request.
-   *
    * [requestMetadata_userOverrides_ipAddress] - IP address to use instead of
    * the user's geo-located IP address.
    *
@@ -1706,11 +1699,18 @@
    * An identifier has multiple letters created by a team which redirected the
    * traffic to us.
    *
-   * [requestMetadata_partnersSessionId] - Google Partners session ID.
-   *
    * [requestMetadata_userOverrides_userId] - Logged-in user ID to impersonate
    * instead of the user's ID.
    *
+   * [requestMetadata_partnersSessionId] - Google Partners session ID.
+   *
+   * [requestMetadata_trafficSource_trafficSourceId] - Identifier to indicate
+   * where the traffic comes from.
+   * An identifier has multiple letters created by a team which redirected the
+   * traffic to us.
+   *
+   * [requestMetadata_locale] - Locale to use for the current request.
+   *
    * Completes with a [Lead].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -1719,7 +1719,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<Lead> updateLeads(Lead request, {core.String requestMetadata_trafficSource_trafficSourceId, core.String requestMetadata_locale, core.String requestMetadata_userOverrides_ipAddress, core.String updateMask, core.List<core.String> requestMetadata_experimentIds, core.String requestMetadata_trafficSource_trafficSubId, core.String requestMetadata_partnersSessionId, core.String requestMetadata_userOverrides_userId}) {
+  async.Future<Lead> updateLeads(Lead request, {core.String requestMetadata_userOverrides_ipAddress, core.String updateMask, core.List<core.String> requestMetadata_experimentIds, core.String requestMetadata_trafficSource_trafficSubId, core.String requestMetadata_userOverrides_userId, core.String requestMetadata_partnersSessionId, core.String requestMetadata_trafficSource_trafficSourceId, core.String requestMetadata_locale}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -1730,12 +1730,6 @@
     if (request != null) {
       _body = convert.JSON.encode((request).toJson());
     }
-    if (requestMetadata_trafficSource_trafficSourceId != null) {
-      _queryParams["requestMetadata.trafficSource.trafficSourceId"] = [requestMetadata_trafficSource_trafficSourceId];
-    }
-    if (requestMetadata_locale != null) {
-      _queryParams["requestMetadata.locale"] = [requestMetadata_locale];
-    }
     if (requestMetadata_userOverrides_ipAddress != null) {
       _queryParams["requestMetadata.userOverrides.ipAddress"] = [requestMetadata_userOverrides_ipAddress];
     }
@@ -1748,11 +1742,17 @@
     if (requestMetadata_trafficSource_trafficSubId != null) {
       _queryParams["requestMetadata.trafficSource.trafficSubId"] = [requestMetadata_trafficSource_trafficSubId];
     }
+    if (requestMetadata_userOverrides_userId != null) {
+      _queryParams["requestMetadata.userOverrides.userId"] = [requestMetadata_userOverrides_userId];
+    }
     if (requestMetadata_partnersSessionId != null) {
       _queryParams["requestMetadata.partnersSessionId"] = [requestMetadata_partnersSessionId];
     }
-    if (requestMetadata_userOverrides_userId != null) {
-      _queryParams["requestMetadata.userOverrides.userId"] = [requestMetadata_userOverrides_userId];
+    if (requestMetadata_trafficSource_trafficSourceId != null) {
+      _queryParams["requestMetadata.trafficSource.trafficSourceId"] = [requestMetadata_trafficSource_trafficSourceId];
+    }
+    if (requestMetadata_locale != null) {
+      _queryParams["requestMetadata.locale"] = [requestMetadata_locale];
     }
 
     _url = 'v2/leads';
diff --git a/generated/googleapis/lib/people/v1.dart b/generated/googleapis/lib/people/v1.dart
index 99ceee7..08d4d40 100644
--- a/generated/googleapis/lib/people/v1.dart
+++ b/generated/googleapis/lib/people/v1.dart
@@ -46,6 +46,7 @@
 
   final commons.ApiRequester _requester;
 
+  ContactGroupsResourceApi get contactGroups => new ContactGroupsResourceApi(_requester);
   PeopleResourceApi get people => new PeopleResourceApi(_requester);
 
   PeopleApi(http.Client client, {core.String rootUrl: "https://people.googleapis.com/", core.String servicePath: ""}) :
@@ -53,6 +54,351 @@
 }
 
 
+class ContactGroupsResourceApi {
+  final commons.ApiRequester _requester;
+
+  ContactGroupsMembersResourceApi get members => new ContactGroupsMembersResourceApi(_requester);
+
+  ContactGroupsResourceApi(commons.ApiRequester client) : 
+      _requester = client;
+
+  /**
+   * Get a list of contact groups owned by the authenticated user by specifying
+   * a list of contact group resource names.
+   *
+   * Request parameters:
+   *
+   * [maxMembers] - Specifies the maximum number of members to return for each
+   * group.
+   *
+   * [resourceNames] - The resource names of the contact groups to get.
+   *
+   * Completes with a [BatchGetContactGroupsResponse].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<BatchGetContactGroupsResponse> batchGet({core.int maxMembers, core.List<core.String> resourceNames}) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (maxMembers != null) {
+      _queryParams["maxMembers"] = ["${maxMembers}"];
+    }
+    if (resourceNames != null) {
+      _queryParams["resourceNames"] = resourceNames;
+    }
+
+    _url = 'v1/contactGroups:batchGet';
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new BatchGetContactGroupsResponse.fromJson(data));
+  }
+
+  /**
+   * Create a new contact group owned by the authenticated user.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * Completes with a [ContactGroup].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<ContactGroup> create(CreateContactGroupRequest request) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+
+    _url = 'v1/contactGroups';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new ContactGroup.fromJson(data));
+  }
+
+  /**
+   * Delete an existing contact group owned by the authenticated user by
+   * specifying a contact group resource name.
+   *
+   * Request parameters:
+   *
+   * [resourceName] - The resource name of the contact group to delete.
+   * Value must have pattern "^contactGroups/[^/]+$".
+   *
+   * [deleteContacts] - Set to true to also delete the contacts in the specified
+   * group.
+   *
+   * Completes with a [Empty].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Empty> delete(core.String resourceName, {core.bool deleteContacts}) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (resourceName == null) {
+      throw new core.ArgumentError("Parameter resourceName is required.");
+    }
+    if (deleteContacts != null) {
+      _queryParams["deleteContacts"] = ["${deleteContacts}"];
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$resourceName');
+
+    var _response = _requester.request(_url,
+                                       "DELETE",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Empty.fromJson(data));
+  }
+
+  /**
+   * Get a specific contact group owned by the authenticated user by specifying
+   * a contact group resource name.
+   *
+   * Request parameters:
+   *
+   * [resourceName] - The resource name of the contact group to get.
+   * Value must have pattern "^contactGroups/[^/]+$".
+   *
+   * [maxMembers] - Specifies the maximum number of members to return.
+   *
+   * Completes with a [ContactGroup].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<ContactGroup> get(core.String resourceName, {core.int maxMembers}) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (resourceName == null) {
+      throw new core.ArgumentError("Parameter resourceName is required.");
+    }
+    if (maxMembers != null) {
+      _queryParams["maxMembers"] = ["${maxMembers}"];
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$resourceName');
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new ContactGroup.fromJson(data));
+  }
+
+  /**
+   * List all contact groups owned by the authenticated user. Members of the
+   * contact groups are not populated.
+   *
+   * Request parameters:
+   *
+   * [syncToken] - A sync token, returned by a previous call to
+   * `contactgroups.list`.
+   * Only resources changed since the sync token was created will be returned.
+   *
+   * [pageToken] - The next_page_token value returned from a previous call to
+   * [ListContactGroups](/people/api/rest/v1/contactgroups/list).
+   * Requests the next page of resources.
+   *
+   * [pageSize] - The maximum number of resources to return.
+   *
+   * Completes with a [ListContactGroupsResponse].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<ListContactGroupsResponse> list({core.String syncToken, core.String pageToken, core.int pageSize}) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (syncToken != null) {
+      _queryParams["syncToken"] = [syncToken];
+    }
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
+    if (pageSize != null) {
+      _queryParams["pageSize"] = ["${pageSize}"];
+    }
+
+    _url = 'v1/contactGroups';
+
+    var _response = _requester.request(_url,
+                                       "GET",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new ListContactGroupsResponse.fromJson(data));
+  }
+
+  /**
+   * Update the name of an existing contact group owned by the authenticated
+   * user.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [resourceName] - The resource name for the contact group, assigned by the
+   * server. An ASCII
+   * string, in the form of `contactGroups/<contact_group_id>`.
+   * Value must have pattern "^contactGroups/[^/]+$".
+   *
+   * Completes with a [ContactGroup].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<ContactGroup> update(UpdateContactGroupRequest request, core.String resourceName) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (resourceName == null) {
+      throw new core.ArgumentError("Parameter resourceName is required.");
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$resourceName');
+
+    var _response = _requester.request(_url,
+                                       "PUT",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new ContactGroup.fromJson(data));
+  }
+
+}
+
+
+class ContactGroupsMembersResourceApi {
+  final commons.ApiRequester _requester;
+
+  ContactGroupsMembersResourceApi(commons.ApiRequester client) : 
+      _requester = client;
+
+  /**
+   * Modify the members of a contact group owned by the authenticated user.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [resourceName] - The resource name of the contact group to modify.
+   * Value must have pattern "^contactGroups/[^/]+$".
+   *
+   * Completes with a [ModifyContactGroupMembersResponse].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<ModifyContactGroupMembersResponse> modify(ModifyContactGroupMembersRequest request, core.String resourceName) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (resourceName == null) {
+      throw new core.ArgumentError("Parameter resourceName is required.");
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$resourceName') + '/members:modify';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new ModifyContactGroupMembersResponse.fromJson(data));
+  }
+
+}
+
+
 class PeopleResourceApi {
   final commons.ApiRequester _requester;
 
@@ -62,8 +408,94 @@
       _requester = client;
 
   /**
+   * Create a new contact and return the person resource for that contact.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [parent] - The resource name of the owning person resource.
+   *
+   * Completes with a [Person].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Person> createContact(Person request, {core.String parent}) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (parent != null) {
+      _queryParams["parent"] = [parent];
+    }
+
+    _url = 'v1/people:createContact';
+
+    var _response = _requester.request(_url,
+                                       "POST",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Person.fromJson(data));
+  }
+
+  /**
+   * Delete a contact person. Any non-contact data will not be deleted.
+   *
+   * Request parameters:
+   *
+   * [resourceName] - The resource name of the contact to delete.
+   * Value must have pattern "^people/[^/]+$".
+   *
+   * Completes with a [Empty].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Empty> deleteContact(core.String resourceName) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (resourceName == null) {
+      throw new core.ArgumentError("Parameter resourceName is required.");
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$resourceName') + ':deleteContact';
+
+    var _response = _requester.request(_url,
+                                       "DELETE",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Empty.fromJson(data));
+  }
+
+  /**
    * Provides information about a person by specifying a resource name. Use
    * `people/me` to indicate the authenticated user.
+   * <br>
+   * The request throws a 400 error if 'personFields' is not specified.
    *
    * Request parameters:
    *
@@ -71,12 +503,45 @@
    * about.
    *
    * - To get information about the authenticated user, specify `people/me`.
-   * - To get information about any user, specify the resource name that
-   *   identifies the user, such as the resource names returned by
+   * - To get information about a google account, specify `people/<account_id>`.
+   * - To get information about a contact, specify the resource name that
+   *   identifies the contact as returned by
    * [`people.connections.list`](/people/api/rest/v1/people.connections/list).
    * Value must have pattern "^people/[^/]+$".
    *
-   * [requestMask_includeField] - Required. Comma-separated list of person
+   * [personFields] - **Required.** A field mask to restrict which fields on the
+   * person are
+   * returned. Valid values are:
+   *
+   * * addresses
+   * * ageRanges
+   * * biographies
+   * * birthdays
+   * * braggingRights
+   * * coverPhotos
+   * * emailAddresses
+   * * events
+   * * genders
+   * * imClients
+   * * interests
+   * * locales
+   * * memberships
+   * * metadata
+   * * names
+   * * nicknames
+   * * occupations
+   * * organizations
+   * * phoneNumbers
+   * * photos
+   * * relations
+   * * relationshipInterests
+   * * relationshipStatuses
+   * * residences
+   * * skills
+   * * taglines
+   * * urls
+   *
+   * [requestMask_includeField] - **Required.** Comma-separated list of person
    * fields to be included in the
    * response. Each path should start with `person.`: for example,
    * `person.names` or `person.photos`.
@@ -89,7 +554,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<Person> get(core.String resourceName, {core.String requestMask_includeField}) {
+  async.Future<Person> get(core.String resourceName, {core.String personFields, core.String requestMask_includeField}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -100,6 +565,9 @@
     if (resourceName == null) {
       throw new core.ArgumentError("Parameter resourceName is required.");
     }
+    if (personFields != null) {
+      _queryParams["personFields"] = [personFields];
+    }
     if (requestMask_includeField != null) {
       _queryParams["requestMask.includeField"] = [requestMask_includeField];
     }
@@ -120,10 +588,12 @@
    * Provides information about a list of specific people by specifying a list
    * of requested resource names. Use `people/me` to indicate the authenticated
    * user.
+   * <br>
+   * The request throws a 400 error if 'personFields' is not specified.
    *
    * Request parameters:
    *
-   * [requestMask_includeField] - Required. Comma-separated list of person
+   * [requestMask_includeField] - **Required.** Comma-separated list of person
    * fields to be included in the
    * response. Each path should start with `person.`: for example,
    * `person.names` or `person.photos`.
@@ -133,6 +603,38 @@
    * of one of the people to provide information about. You can include this
    * parameter up to 50 times in one request.
    *
+   * [personFields] - **Required.** A field mask to restrict which fields on
+   * each person are
+   * returned. Valid values are:
+   *
+   * * addresses
+   * * ageRanges
+   * * biographies
+   * * birthdays
+   * * braggingRights
+   * * coverPhotos
+   * * emailAddresses
+   * * events
+   * * genders
+   * * imClients
+   * * interests
+   * * locales
+   * * memberships
+   * * metadata
+   * * names
+   * * nicknames
+   * * occupations
+   * * organizations
+   * * phoneNumbers
+   * * photos
+   * * relations
+   * * relationshipInterests
+   * * relationshipStatuses
+   * * residences
+   * * skills
+   * * taglines
+   * * urls
+   *
    * Completes with a [GetPeopleResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -141,7 +643,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<GetPeopleResponse> getBatchGet({core.String requestMask_includeField, core.List<core.String> resourceNames}) {
+  async.Future<GetPeopleResponse> getBatchGet({core.String requestMask_includeField, core.List<core.String> resourceNames, core.String personFields}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -155,6 +657,9 @@
     if (resourceNames != null) {
       _queryParams["resourceNames"] = resourceNames;
     }
+    if (personFields != null) {
+      _queryParams["personFields"] = [personFields];
+    }
 
     _url = 'v1/people:batchGet';
 
@@ -168,6 +673,91 @@
     return _response.then((data) => new GetPeopleResponse.fromJson(data));
   }
 
+  /**
+   * Update contact data for an existing contact person. Any non-contact data
+   * will not be modified.
+   *
+   * The request throws a 400 error if `updatePersonFields` is not specified.
+   * <br>
+   * The request throws a 400 error if `person.metadata.sources` is not
+   * specified for the contact to be updated.
+   * <br>
+   * The request throws a 412 error if `person.metadata.sources.etag` is
+   * different than the contact's etag, which indicates the contact has changed
+   * since its data was read. Clients should get the latest person and re-apply
+   * their updates to the latest person.
+   *
+   * [request] - The metadata request object.
+   *
+   * Request parameters:
+   *
+   * [resourceName] - The resource name for the person, assigned by the server.
+   * An ASCII string
+   * with a max length of 27 characters, in the form of `people/<person_id>`.
+   * Value must have pattern "^people/[^/]+$".
+   *
+   * [updatePersonFields] - **Required.** A field mask to restrict which fields
+   * on the person are
+   * updated. Valid values are:
+   *
+   * * addresses
+   * * biographies
+   * * birthdays
+   * * braggingRights
+   * * emailAddresses
+   * * events
+   * * genders
+   * * imClients
+   * * interests
+   * * locales
+   * * names
+   * * nicknames
+   * * occupations
+   * * organizations
+   * * phoneNumbers
+   * * relations
+   * * residences
+   * * skills
+   * * urls
+   *
+   * Completes with a [Person].
+   *
+   * Completes with a [commons.ApiRequestError] if the API endpoint returned an
+   * error.
+   *
+   * If the used [http.Client] completes with an error when making a REST call,
+   * this method will complete with the same error.
+   */
+  async.Future<Person> updateContact(Person request, core.String resourceName, {core.String updatePersonFields}) {
+    var _url = null;
+    var _queryParams = new core.Map();
+    var _uploadMedia = null;
+    var _uploadOptions = null;
+    var _downloadOptions = commons.DownloadOptions.Metadata;
+    var _body = null;
+
+    if (request != null) {
+      _body = convert.JSON.encode((request).toJson());
+    }
+    if (resourceName == null) {
+      throw new core.ArgumentError("Parameter resourceName is required.");
+    }
+    if (updatePersonFields != null) {
+      _queryParams["updatePersonFields"] = [updatePersonFields];
+    }
+
+    _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$resourceName') + ':updateContact';
+
+    var _response = _requester.request(_url,
+                                       "PATCH",
+                                       body: _body,
+                                       queryParams: _queryParams,
+                                       uploadOptions: _uploadOptions,
+                                       uploadMedia: _uploadMedia,
+                                       downloadOptions: _downloadOptions);
+    return _response.then((data) => new Person.fromJson(data));
+  }
+
 }
 
 
@@ -179,7 +769,9 @@
 
   /**
    * Provides a list of the authenticated user's contacts merged with any
-   * linked profiles.
+   * connected profiles.
+   * <br>
+   * The request throws a 400 error if 'personFields' is not specified.
    *
    * Request parameters:
    *
@@ -187,19 +779,42 @@
    * `people/me` is valid.
    * Value must have pattern "^people/[^/]+$".
    *
-   * [requestMask_includeField] - Required. Comma-separated list of person
-   * fields to be included in the
-   * response. Each path should start with `person.`: for example,
-   * `person.names` or `person.photos`.
-   *
-   * [pageSize] - The number of connections to include in the response. Valid
-   * values are
-   * between 1 and 2000, inclusive. Defaults to 100.
-   *
    * [syncToken] - A sync token, returned by a previous call to
    * `people.connections.list`.
    * Only resources changed since the sync token was created will be returned.
    *
+   * [personFields] - **Required.** A field mask to restrict which fields on
+   * each person are
+   * returned. Valid values are:
+   *
+   * * addresses
+   * * ageRanges
+   * * biographies
+   * * birthdays
+   * * braggingRights
+   * * coverPhotos
+   * * emailAddresses
+   * * events
+   * * genders
+   * * imClients
+   * * interests
+   * * locales
+   * * memberships
+   * * metadata
+   * * names
+   * * nicknames
+   * * occupations
+   * * organizations
+   * * phoneNumbers
+   * * photos
+   * * relations
+   * * relationshipInterests
+   * * relationshipStatuses
+   * * residences
+   * * skills
+   * * taglines
+   * * urls
+   *
    * [sortOrder] - The order in which the connections should be sorted. Defaults
    * to
    * `LAST_MODIFIED_ASCENDING`.
@@ -214,6 +829,15 @@
    *
    * [pageToken] - The token of the page to be returned.
    *
+   * [pageSize] - The number of connections to include in the response. Valid
+   * values are
+   * between 1 and 2000, inclusive. Defaults to 100.
+   *
+   * [requestMask_includeField] - **Required.** Comma-separated list of person
+   * fields to be included in the
+   * response. Each path should start with `person.`: for example,
+   * `person.names` or `person.photos`.
+   *
    * Completes with a [ListConnectionsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -222,7 +846,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListConnectionsResponse> list(core.String resourceName, {core.String requestMask_includeField, core.int pageSize, core.String syncToken, core.String sortOrder, core.bool requestSyncToken, core.String pageToken}) {
+  async.Future<ListConnectionsResponse> list(core.String resourceName, {core.String syncToken, core.String personFields, core.String sortOrder, core.bool requestSyncToken, core.String pageToken, core.int pageSize, core.String requestMask_includeField}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -233,15 +857,12 @@
     if (resourceName == null) {
       throw new core.ArgumentError("Parameter resourceName is required.");
     }
-    if (requestMask_includeField != null) {
-      _queryParams["requestMask.includeField"] = [requestMask_includeField];
-    }
-    if (pageSize != null) {
-      _queryParams["pageSize"] = ["${pageSize}"];
-    }
     if (syncToken != null) {
       _queryParams["syncToken"] = [syncToken];
     }
+    if (personFields != null) {
+      _queryParams["personFields"] = [personFields];
+    }
     if (sortOrder != null) {
       _queryParams["sortOrder"] = [sortOrder];
     }
@@ -251,6 +872,12 @@
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
+    if (pageSize != null) {
+      _queryParams["pageSize"] = ["${pageSize}"];
+    }
+    if (requestMask_includeField != null) {
+      _queryParams["requestMask.includeField"] = [requestMask_includeField];
+    }
 
     _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$resourceName') + '/connections';
 
@@ -436,6 +1063,28 @@
   }
 }
 
+/** The response to a batch get contact groups request. */
+class BatchGetContactGroupsResponse {
+  /** The list of responses for each requested contact group resource. */
+  core.List<ContactGroupResponse> responses;
+
+  BatchGetContactGroupsResponse();
+
+  BatchGetContactGroupsResponse.fromJson(core.Map _json) {
+    if (_json.containsKey("responses")) {
+      responses = _json["responses"].map((value) => new ContactGroupResponse.fromJson(value)).toList();
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (responses != null) {
+      _json["responses"] = responses.map((value) => (value).toJson()).toList();
+    }
+    return _json;
+  }
+}
+
 /** A person's short biography. */
 class Biography {
   /**
@@ -552,6 +1201,111 @@
   }
 }
 
+/** A contact group. */
+class ContactGroup {
+  /**
+   * The [HTTP entity tag](https://en.wikipedia.org/wiki/HTTP_ETag) of the
+   * resource. Used for web cache validation.
+   */
+  core.String etag;
+  /**
+   * The read-only name translated and formatted in the viewer's account locale
+   * or the `Accept-Language` HTTP header locale for system groups names.
+   * Group names set by the owner are the same as name.
+   */
+  core.String formattedName;
+  /**
+   * The read-only contact group type.
+   * Possible string values are:
+   * - "GROUP_TYPE_UNSPECIFIED" : Unspecified.
+   * - "USER_CONTACT_GROUP" : User defined contact group.
+   * - "SYSTEM_CONTACT_GROUP" : System defined contact group.
+   */
+  core.String groupType;
+  /**
+   * The total number of contacts in the group irrespective of max members in
+   * specified in the request.
+   */
+  core.int memberCount;
+  /**
+   * The list of contact person resource names that are members of the contact
+   * group. The field is not populated for LIST requests and can only be updated
+   * through the
+   * [ModifyContactGroupMembers](/people/api/rest/v1/contactgroups/members/modify).
+   */
+  core.List<core.String> memberResourceNames;
+  /** Metadata about the contact group. */
+  ContactGroupMetadata metadata;
+  /**
+   * The contact group name set by the group owner or a system provided name
+   * for system groups.
+   */
+  core.String name;
+  /**
+   * The resource name for the contact group, assigned by the server. An ASCII
+   * string, in the form of `contactGroups/<contact_group_id>`.
+   */
+  core.String resourceName;
+
+  ContactGroup();
+
+  ContactGroup.fromJson(core.Map _json) {
+    if (_json.containsKey("etag")) {
+      etag = _json["etag"];
+    }
+    if (_json.containsKey("formattedName")) {
+      formattedName = _json["formattedName"];
+    }
+    if (_json.containsKey("groupType")) {
+      groupType = _json["groupType"];
+    }
+    if (_json.containsKey("memberCount")) {
+      memberCount = _json["memberCount"];
+    }
+    if (_json.containsKey("memberResourceNames")) {
+      memberResourceNames = _json["memberResourceNames"];
+    }
+    if (_json.containsKey("metadata")) {
+      metadata = new ContactGroupMetadata.fromJson(_json["metadata"]);
+    }
+    if (_json.containsKey("name")) {
+      name = _json["name"];
+    }
+    if (_json.containsKey("resourceName")) {
+      resourceName = _json["resourceName"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (etag != null) {
+      _json["etag"] = etag;
+    }
+    if (formattedName != null) {
+      _json["formattedName"] = formattedName;
+    }
+    if (groupType != null) {
+      _json["groupType"] = groupType;
+    }
+    if (memberCount != null) {
+      _json["memberCount"] = memberCount;
+    }
+    if (memberResourceNames != null) {
+      _json["memberResourceNames"] = memberResourceNames;
+    }
+    if (metadata != null) {
+      _json["metadata"] = (metadata).toJson();
+    }
+    if (name != null) {
+      _json["name"] = name;
+    }
+    if (resourceName != null) {
+      _json["resourceName"] = resourceName;
+    }
+    return _json;
+  }
+}
+
 /** A Google contact group membership. */
 class ContactGroupMembership {
   /**
@@ -582,6 +1336,78 @@
   }
 }
 
+/** The read-only metadata about a contact group. */
+class ContactGroupMetadata {
+  /**
+   * True if the contact group resource has been deleted. Populated only for
+   * [`ListContactGroups`](/people/api/rest/v1/contactgroups/list) requests
+   * that include a sync token.
+   */
+  core.bool deleted;
+  /** The time the group was last updated. */
+  core.String updateTime;
+
+  ContactGroupMetadata();
+
+  ContactGroupMetadata.fromJson(core.Map _json) {
+    if (_json.containsKey("deleted")) {
+      deleted = _json["deleted"];
+    }
+    if (_json.containsKey("updateTime")) {
+      updateTime = _json["updateTime"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (deleted != null) {
+      _json["deleted"] = deleted;
+    }
+    if (updateTime != null) {
+      _json["updateTime"] = updateTime;
+    }
+    return _json;
+  }
+}
+
+/** The response for a specific contact group. */
+class ContactGroupResponse {
+  /** The contact group. */
+  ContactGroup contactGroup;
+  /** The original requested resource name. */
+  core.String requestedResourceName;
+  /** The status of the response. */
+  Status status;
+
+  ContactGroupResponse();
+
+  ContactGroupResponse.fromJson(core.Map _json) {
+    if (_json.containsKey("contactGroup")) {
+      contactGroup = new ContactGroup.fromJson(_json["contactGroup"]);
+    }
+    if (_json.containsKey("requestedResourceName")) {
+      requestedResourceName = _json["requestedResourceName"];
+    }
+    if (_json.containsKey("status")) {
+      status = new Status.fromJson(_json["status"]);
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (contactGroup != null) {
+      _json["contactGroup"] = (contactGroup).toJson();
+    }
+    if (requestedResourceName != null) {
+      _json["requestedResourceName"] = requestedResourceName;
+    }
+    if (status != null) {
+      _json["status"] = (status).toJson();
+    }
+    return _json;
+  }
+}
+
 /**
  * A person's read-only cover photo. A large image shown on the person's
  * profile page that represents who they are or what they care about.
@@ -626,6 +1452,28 @@
   }
 }
 
+/** A request to create a new contact group. */
+class CreateContactGroupRequest {
+  /** The contact group to create. */
+  ContactGroup contactGroup;
+
+  CreateContactGroupRequest();
+
+  CreateContactGroupRequest.fromJson(core.Map _json) {
+    if (_json.containsKey("contactGroup")) {
+      contactGroup = new ContactGroup.fromJson(_json["contactGroup"]);
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (contactGroup != null) {
+      _json["contactGroup"] = (contactGroup).toJson();
+    }
+    return _json;
+  }
+}
+
 /**
  * Represents a whole calendar date, for example a date of birth. The time
  * of day and time zone are either specified elsewhere or are not
@@ -765,6 +1613,30 @@
   }
 }
 
+/**
+ * A generic empty message that you can re-use to avoid defining duplicated
+ * empty messages in your APIs. A typical example is to use it as the request
+ * or the response type of an API method. For instance:
+ *
+ *     service Foo {
+ *       rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
+ *     }
+ *
+ * The JSON representation for `Empty` is empty JSON object `{}`.
+ */
+class Empty {
+
+  Empty();
+
+  Empty.fromJson(core.Map _json) {
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    return _json;
+  }
+}
+
 /** An event related to the person. */
 class Event {
   /** The date of the event. */
@@ -1064,8 +1936,8 @@
   /** The total number of items in the list without pagination. */
   core.int totalItems;
   /**
-   * DEPRECATED(Please use total_items). The total number of people in the list
-   * without pagination.
+   * **DEPRECATED** (Please use totalItems)
+   * The total number of people in the list without pagination.
    */
   core.int totalPeople;
 
@@ -1110,6 +1982,55 @@
   }
 }
 
+/** The response to a list contact groups request. */
+class ListContactGroupsResponse {
+  /**
+   * The list of contact groups. Members of the contact groups are not
+   * populated.
+   */
+  core.List<ContactGroup> contactGroups;
+  /** The token that can be used to retrieve the next page of results. */
+  core.String nextPageToken;
+  /** The token that can be used to retrieve changes since the last request. */
+  core.String nextSyncToken;
+  /** The total number of items in the list without pagination. */
+  core.int totalItems;
+
+  ListContactGroupsResponse();
+
+  ListContactGroupsResponse.fromJson(core.Map _json) {
+    if (_json.containsKey("contactGroups")) {
+      contactGroups = _json["contactGroups"].map((value) => new ContactGroup.fromJson(value)).toList();
+    }
+    if (_json.containsKey("nextPageToken")) {
+      nextPageToken = _json["nextPageToken"];
+    }
+    if (_json.containsKey("nextSyncToken")) {
+      nextSyncToken = _json["nextSyncToken"];
+    }
+    if (_json.containsKey("totalItems")) {
+      totalItems = _json["totalItems"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (contactGroups != null) {
+      _json["contactGroups"] = contactGroups.map((value) => (value).toJson()).toList();
+    }
+    if (nextPageToken != null) {
+      _json["nextPageToken"] = nextPageToken;
+    }
+    if (nextSyncToken != null) {
+      _json["nextSyncToken"] = nextSyncToken;
+    }
+    if (totalItems != null) {
+      _json["totalItems"] = totalItems;
+    }
+    return _json;
+  }
+}
+
 /** A person's locale preference. */
 class Locale {
   /** Metadata about the locale. */
@@ -1181,6 +2102,64 @@
   }
 }
 
+/** A request to modify an existing contact group's members. */
+class ModifyContactGroupMembersRequest {
+  /**
+   * The resource names of the contact people to add in the form of in the form
+   * `people/<person_id>`.
+   */
+  core.List<core.String> resourceNamesToAdd;
+  /**
+   * The resource names of the contact people to remove in the form of in the
+   * form of `people/<person_id>`.
+   */
+  core.List<core.String> resourceNamesToRemove;
+
+  ModifyContactGroupMembersRequest();
+
+  ModifyContactGroupMembersRequest.fromJson(core.Map _json) {
+    if (_json.containsKey("resourceNamesToAdd")) {
+      resourceNamesToAdd = _json["resourceNamesToAdd"];
+    }
+    if (_json.containsKey("resourceNamesToRemove")) {
+      resourceNamesToRemove = _json["resourceNamesToRemove"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (resourceNamesToAdd != null) {
+      _json["resourceNamesToAdd"] = resourceNamesToAdd;
+    }
+    if (resourceNamesToRemove != null) {
+      _json["resourceNamesToRemove"] = resourceNamesToRemove;
+    }
+    return _json;
+  }
+}
+
+/** The response to a modify contact group members request. */
+class ModifyContactGroupMembersResponse {
+  /** The contact people resource names that were not found. */
+  core.List<core.String> notFoundResourceNames;
+
+  ModifyContactGroupMembersResponse();
+
+  ModifyContactGroupMembersResponse.fromJson(core.Map _json) {
+    if (_json.containsKey("notFoundResourceNames")) {
+      notFoundResourceNames = _json["notFoundResourceNames"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (notFoundResourceNames != null) {
+      _json["notFoundResourceNames"] = notFoundResourceNames;
+    }
+    return _json;
+  }
+}
+
 /** A person's name. If the name is a mononym, the family name is empty. */
 class Name {
   /**
@@ -1552,7 +2531,9 @@
   /** The person's street addresses. */
   core.List<Address> addresses;
   /**
-   * DEPRECATED(Please read person.age_ranges instead). The person's age range.
+   * **DEPRECATED** (Please use `person.ageRanges` instead)**
+   *
+   * The person's read-only age range.
    * Possible string values are:
    * - "AGE_RANGE_UNSPECIFIED" : Unspecified.
    * - "LESS_THAN_EIGHTEEN" : Younger than eighteen.
@@ -1560,7 +2541,7 @@
    * - "TWENTY_ONE_OR_OLDER" : Twenty-one and older.
    */
   core.String ageRange;
-  /** The person's age ranges. */
+  /** The person's read-only age ranges. */
   core.List<AgeRangeType> ageRanges;
   /** The person's biographies. */
   core.List<Biography> biographies;
@@ -1568,7 +2549,7 @@
   core.List<Birthday> birthdays;
   /** The person's bragging rights. */
   core.List<BraggingRights> braggingRights;
-  /** The person's cover photos. */
+  /** The person's read-only cover photos. */
   core.List<CoverPhoto> coverPhotos;
   /** The person's email addresses. */
   core.List<EmailAddress> emailAddresses;
@@ -1587,9 +2568,9 @@
   core.List<Interest> interests;
   /** The person's locale preferences. */
   core.List<Locale> locales;
-  /** The person's group memberships. */
+  /** The person's read-only group memberships. */
   core.List<Membership> memberships;
-  /** Metadata about the person. */
+  /** Read-only metadata about the person. */
   PersonMetadata metadata;
   /** The person's names. */
   core.List<Name> names;
@@ -1601,13 +2582,13 @@
   core.List<Organization> organizations;
   /** The person's phone numbers. */
   core.List<PhoneNumber> phoneNumbers;
-  /** The person's photos. */
+  /** The person's read-only photos. */
   core.List<Photo> photos;
   /** The person's relations. */
   core.List<Relation> relations;
-  /** The kind of relationship the person is looking for. */
+  /** The person's read-only relationship interests. */
   core.List<RelationshipInterest> relationshipInterests;
-  /** The person's relationship statuses. */
+  /** The person's read-only relationship statuses. */
   core.List<RelationshipStatus> relationshipStatuses;
   /** The person's residences. */
   core.List<Residence> residences;
@@ -1618,7 +2599,7 @@
   core.String resourceName;
   /** The person's skills. */
   core.List<Skill> skills;
-  /** The person's taglines. */
+  /** The person's read-only taglines. */
   core.List<Tagline> taglines;
   /** The person's associated URLs. */
   core.List<Url> urls;
@@ -1825,7 +2806,9 @@
   /** Resource names of people linked to this resource. */
   core.List<core.String> linkedPeopleResourceNames;
   /**
-   * DEPRECATED(Please read person.metadata.sources.profile_metadata instead).
+   * **DEPRECATED** (Please use
+   * `person.metadata.sources.profileMetadata.objectType` instead)
+   *
    * The type of the person object.
    * Possible string values are:
    * - "OBJECT_TYPE_UNSPECIFIED" : Unspecified.
@@ -1890,9 +2873,10 @@
 /** The response for a single person */
 class PersonResponse {
   /**
-   * DEPRECATED(Please use status instead).
-   * [HTTP 1.1 status
-   * code](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html).
+   * **DEPRECATED** (Please use status instead)
+   *
+   * [HTTP 1.1 status code]
+   * (http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html).
    */
   core.int httpStatusCode;
   /** The person. */
@@ -1954,7 +2938,7 @@
   core.String canonicalForm;
   /**
    * The read-only type of the phone number translated and formatted in the
-   * viewer's account locale or the the `Accept-Language` HTTP header locale.
+   * viewer's account locale or the `Accept-Language` HTTP header locale.
    */
   core.String formattedType;
   /** Metadata about the phone number. */
@@ -2068,6 +3052,8 @@
    * - "PAGE" : [Google+ Page.](http://www.google.com/+/brands/)
    */
   core.String objectType;
+  /** The user types. */
+  core.List<core.String> userTypes;
 
   ProfileMetadata();
 
@@ -2075,6 +3061,9 @@
     if (_json.containsKey("objectType")) {
       objectType = _json["objectType"];
     }
+    if (_json.containsKey("userTypes")) {
+      userTypes = _json["userTypes"];
+    }
   }
 
   core.Map<core.String, core.Object> toJson() {
@@ -2082,6 +3071,9 @@
     if (objectType != null) {
       _json["objectType"] = objectType;
     }
+    if (userTypes != null) {
+      _json["userTypes"] = userTypes;
+    }
     return _json;
   }
 }
@@ -2349,16 +3341,18 @@
    * - "ACCOUNT" : [Google Account](https://accounts.google.com).
    * - "PROFILE" : [Google profile](https://profiles.google.com). You can view
    * the
-   * profile at https://profiles.google.com/<id> where <id> is the source
-   * id.
+   * profile at https://profiles.google.com/<var>id</var> where
+   * <var>id</var> is the source id.
    * - "DOMAIN_PROFILE" : [Google Apps domain
    * profile](https://admin.google.com).
    * - "CONTACT" : [Google contact](https://contacts.google.com). You can view
    * the
-   * contact at https://contact.google.com/<id> where <id> is the source
-   * id.
+   * contact at https://contact.google.com/<var>id</var> where <var>id</var>
+   * is the source id.
    */
   core.String type;
+  /** Last update timestamp of this source. */
+  core.String updateTime;
 
   Source();
 
@@ -2375,6 +3369,9 @@
     if (_json.containsKey("type")) {
       type = _json["type"];
     }
+    if (_json.containsKey("updateTime")) {
+      updateTime = _json["updateTime"];
+    }
   }
 
   core.Map<core.String, core.Object> toJson() {
@@ -2391,6 +3388,9 @@
     if (type != null) {
       _json["type"] = type;
     }
+    if (updateTime != null) {
+      _json["updateTime"] = updateTime;
+    }
     return _json;
   }
 }
@@ -2455,8 +3455,8 @@
   /** The status code, which should be an enum value of google.rpc.Code. */
   core.int code;
   /**
-   * A list of messages that carry the error details.  There will be a
-   * common set of message types for APIs to use.
+   * A list of messages that carry the error details.  There is a common set of
+   * message types for APIs to use.
    *
    * The values for Object must be JSON objects. It can consist of `num`,
    * `String`, `bool` and `null` as well as `Map` and `List` values.
@@ -2528,6 +3528,30 @@
   }
 }
 
+/**
+ * A request to update an existing contact group. Only the name can be updated.
+ */
+class UpdateContactGroupRequest {
+  /** The contact group to update. */
+  ContactGroup contactGroup;
+
+  UpdateContactGroupRequest();
+
+  UpdateContactGroupRequest.fromJson(core.Map _json) {
+    if (_json.containsKey("contactGroup")) {
+      contactGroup = new ContactGroup.fromJson(_json["contactGroup"]);
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (contactGroup != null) {
+      _json["contactGroup"] = (contactGroup).toJson();
+    }
+    return _json;
+  }
+}
+
 /** A person's associated URLs. */
 class Url {
   /**
diff --git a/generated/googleapis/lib/playmoviespartner/v1.dart b/generated/googleapis/lib/playmoviespartner/v1.dart
index 4fb19aa..f24bf7c 100644
--- a/generated/googleapis/lib/playmoviespartner/v1.dart
+++ b/generated/googleapis/lib/playmoviespartner/v1.dart
@@ -103,8 +103,6 @@
    * [accountId] - REQUIRED. See _General rules_ for more information about this
    * field.
    *
-   * [pphNames] - See _List methods rules_ for info about this field.
-   *
    * [altId] - Filter Avails that match a case-insensitive, partner-specific
    * custom id.
    * NOTE: this field is deprecated and will be removed on V2; `alt_ids`
@@ -130,6 +128,8 @@
    * [altIds] - Filter Avails that match (case-insensitive) any of the given
    * partner-specific custom ids.
    *
+   * [pphNames] - See _List methods rules_ for info about this field.
+   *
    * Completes with a [ListAvailsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -138,7 +138,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListAvailsResponse> list(core.String accountId, {core.List<core.String> pphNames, core.String altId, core.List<core.String> studioNames, core.List<core.String> territories, core.String title, core.String pageToken, core.List<core.String> videoIds, core.int pageSize, core.List<core.String> altIds}) {
+  async.Future<ListAvailsResponse> list(core.String accountId, {core.String altId, core.List<core.String> studioNames, core.List<core.String> territories, core.String title, core.String pageToken, core.List<core.String> videoIds, core.int pageSize, core.List<core.String> altIds, core.List<core.String> pphNames}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -149,9 +149,6 @@
     if (accountId == null) {
       throw new core.ArgumentError("Parameter accountId is required.");
     }
-    if (pphNames != null) {
-      _queryParams["pphNames"] = pphNames;
-    }
     if (altId != null) {
       _queryParams["altId"] = [altId];
     }
@@ -176,6 +173,9 @@
     if (altIds != null) {
       _queryParams["altIds"] = altIds;
     }
+    if (pphNames != null) {
+      _queryParams["pphNames"] = pphNames;
+    }
 
     _url = 'v1/accounts/' + commons.Escaper.ecapeVariable('$accountId') + '/avails';
 
@@ -257,25 +257,25 @@
    * [accountId] - REQUIRED. See _General rules_ for more information about this
    * field.
    *
-   * [videoIds] - Filter Orders that match any of the given `video_id`s.
-   *
-   * [pageToken] - See _List methods rules_ for info about this field.
-   *
-   * [customId] - Filter Orders that match a case-insensitive, partner-specific
-   * custom id.
-   *
-   * [pageSize] - See _List methods rules_ for info about this field.
-   *
    * [pphNames] - See _List methods rules_ for info about this field.
    *
    * [status] - Filter Orders that match one of the given status.
    *
-   * [studioNames] - See _List methods rules_ for info about this field.
-   *
    * [name] - Filter that matches Orders with a `name`, `show`, `season` or
    * `episode`
    * that contains the given case-insensitive name.
    *
+   * [studioNames] - See _List methods rules_ for info about this field.
+   *
+   * [videoIds] - Filter Orders that match any of the given `video_id`s.
+   *
+   * [customId] - Filter Orders that match a case-insensitive, partner-specific
+   * custom id.
+   *
+   * [pageToken] - See _List methods rules_ for info about this field.
+   *
+   * [pageSize] - See _List methods rules_ for info about this field.
+   *
    * Completes with a [ListOrdersResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -284,7 +284,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListOrdersResponse> list(core.String accountId, {core.List<core.String> videoIds, core.String pageToken, core.String customId, core.int pageSize, core.List<core.String> pphNames, core.List<core.String> status, core.List<core.String> studioNames, core.String name}) {
+  async.Future<ListOrdersResponse> list(core.String accountId, {core.List<core.String> pphNames, core.List<core.String> status, core.String name, core.List<core.String> studioNames, core.List<core.String> videoIds, core.String customId, core.String pageToken, core.int pageSize}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -295,29 +295,29 @@
     if (accountId == null) {
       throw new core.ArgumentError("Parameter accountId is required.");
     }
-    if (videoIds != null) {
-      _queryParams["videoIds"] = videoIds;
-    }
-    if (pageToken != null) {
-      _queryParams["pageToken"] = [pageToken];
-    }
-    if (customId != null) {
-      _queryParams["customId"] = [customId];
-    }
-    if (pageSize != null) {
-      _queryParams["pageSize"] = ["${pageSize}"];
-    }
     if (pphNames != null) {
       _queryParams["pphNames"] = pphNames;
     }
     if (status != null) {
       _queryParams["status"] = status;
     }
+    if (name != null) {
+      _queryParams["name"] = [name];
+    }
     if (studioNames != null) {
       _queryParams["studioNames"] = studioNames;
     }
-    if (name != null) {
-      _queryParams["name"] = [name];
+    if (videoIds != null) {
+      _queryParams["videoIds"] = videoIds;
+    }
+    if (customId != null) {
+      _queryParams["customId"] = [customId];
+    }
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
+    if (pageSize != null) {
+      _queryParams["pageSize"] = ["${pageSize}"];
     }
 
     _url = 'v1/accounts/' + commons.Escaper.ecapeVariable('$accountId') + '/orders';
@@ -354,15 +354,20 @@
    * [accountId] - REQUIRED. See _General rules_ for more information about this
    * field.
    *
+   * [studioNames] - See _List methods rules_ for info about this field.
+   *
+   * [name] - Filter that matches StoreInfos with a `name` or `show_name`
+   * that contains the given case-insensitive name.
+   *
    * [seasonIds] - Filter StoreInfos that match any of the given `season_id`s.
    *
-   * [videoIds] - Filter StoreInfos that match any of the given `video_id`s.
+   * [pageToken] - See _List methods rules_ for info about this field.
    *
    * [videoId] - Filter StoreInfos that match a given `video_id`.
    * NOTE: this field is deprecated and will be removed on V2; `video_ids`
    * should be used instead.
    *
-   * [pageToken] - See _List methods rules_ for info about this field.
+   * [videoIds] - Filter StoreInfos that match any of the given `video_id`s.
    *
    * [pageSize] - See _List methods rules_ for info about this field.
    *
@@ -374,11 +379,6 @@
    * given country
    * codes, using the "ISO 3166-1 alpha-2" format (examples: "US", "us", "Us").
    *
-   * [studioNames] - See _List methods rules_ for info about this field.
-   *
-   * [name] - Filter that matches StoreInfos with a `name` or `show_name`
-   * that contains the given case-insensitive name.
-   *
    * Completes with a [ListStoreInfosResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -387,7 +387,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListStoreInfosResponse> list(core.String accountId, {core.List<core.String> seasonIds, core.List<core.String> videoIds, core.String videoId, core.String pageToken, core.int pageSize, core.List<core.String> mids, core.List<core.String> pphNames, core.List<core.String> countries, core.List<core.String> studioNames, core.String name}) {
+  async.Future<ListStoreInfosResponse> list(core.String accountId, {core.List<core.String> studioNames, core.String name, core.List<core.String> seasonIds, core.String pageToken, core.String videoId, core.List<core.String> videoIds, core.int pageSize, core.List<core.String> mids, core.List<core.String> pphNames, core.List<core.String> countries}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -398,17 +398,23 @@
     if (accountId == null) {
       throw new core.ArgumentError("Parameter accountId is required.");
     }
+    if (studioNames != null) {
+      _queryParams["studioNames"] = studioNames;
+    }
+    if (name != null) {
+      _queryParams["name"] = [name];
+    }
     if (seasonIds != null) {
       _queryParams["seasonIds"] = seasonIds;
     }
-    if (videoIds != null) {
-      _queryParams["videoIds"] = videoIds;
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
     }
     if (videoId != null) {
       _queryParams["videoId"] = [videoId];
     }
-    if (pageToken != null) {
-      _queryParams["pageToken"] = [pageToken];
+    if (videoIds != null) {
+      _queryParams["videoIds"] = videoIds;
     }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
@@ -422,12 +428,6 @@
     if (countries != null) {
       _queryParams["countries"] = countries;
     }
-    if (studioNames != null) {
-      _queryParams["studioNames"] = studioNames;
-    }
-    if (name != null) {
-      _queryParams["name"] = [name];
-    }
 
     _url = 'v1/accounts/' + commons.Escaper.ecapeVariable('$accountId') + '/storeInfos';
 
diff --git a/generated/googleapis/lib/pubsub/v1.dart b/generated/googleapis/lib/pubsub/v1.dart
index 18db1e5..4447763 100644
--- a/generated/googleapis/lib/pubsub/v1.dart
+++ b/generated/googleapis/lib/pubsub/v1.dart
@@ -1261,6 +1261,7 @@
    * * `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`.
    */
@@ -1523,7 +1524,6 @@
 class Policy {
   /**
    * Associates a list of `members` to a `role`.
-   * Multiple `bindings` must not be specified for the same `role`.
    * `bindings` with no members will result in an error.
    */
   core.List<Binding> bindings;
diff --git a/generated/googleapis/lib/safebrowsing/v4.dart b/generated/googleapis/lib/safebrowsing/v4.dart
index 53c741b..0f635f0 100644
--- a/generated/googleapis/lib/safebrowsing/v4.dart
+++ b/generated/googleapis/lib/safebrowsing/v4.dart
@@ -105,12 +105,12 @@
    *
    * [encodedRequest] - A serialized FetchThreatListUpdatesRequest proto.
    *
-   * [clientVersion] - The version of the client implementation.
-   *
    * [clientId] - A client ID that uniquely identifies the client implementation
    * of the Safe
    * Browsing API.
    *
+   * [clientVersion] - The version of the client implementation.
+   *
    * Completes with a [FetchThreatListUpdatesResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -119,7 +119,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<FetchThreatListUpdatesResponse> get(core.String encodedRequest, {core.String clientVersion, core.String clientId}) {
+  async.Future<FetchThreatListUpdatesResponse> get(core.String encodedRequest, {core.String clientId, core.String clientVersion}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -130,12 +130,12 @@
     if (encodedRequest == null) {
       throw new core.ArgumentError("Parameter encodedRequest is required.");
     }
-    if (clientVersion != null) {
-      _queryParams["clientVersion"] = [clientVersion];
-    }
     if (clientId != null) {
       _queryParams["clientId"] = [clientId];
     }
+    if (clientVersion != null) {
+      _queryParams["clientVersion"] = [clientVersion];
+    }
 
     _url = 'v4/encodedUpdates/' + commons.Escaper.ecapeVariable('$encodedRequest');
 
diff --git a/generated/googleapis/lib/servicemanagement/v1.dart b/generated/googleapis/lib/servicemanagement/v1.dart
index 9e7711a..db2603c 100644
--- a/generated/googleapis/lib/servicemanagement/v1.dart
+++ b/generated/googleapis/lib/servicemanagement/v1.dart
@@ -96,10 +96,10 @@
    *
    * Request parameters:
    *
-   * [name] - Not used.
-   *
    * [pageToken] - The standard list page token.
    *
+   * [name] - Not used.
+   *
    * [pageSize] - The maximum number of operations to return. If unspecified,
    * defaults to
    * 50. The maximum value is 100.
@@ -134,7 +134,7 @@
    * If the used [http_1.Client] completes with an error when making a REST
    * call, this method will complete with the same error.
    */
-  async.Future<ListOperationsResponse> list({core.String name, core.String pageToken, core.int pageSize, core.String filter}) {
+  async.Future<ListOperationsResponse> list({core.String pageToken, core.String name, core.int pageSize, core.String filter}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -142,12 +142,12 @@
     var _downloadOptions = commons.DownloadOptions.Metadata;
     var _body = null;
 
-    if (name != null) {
-      _queryParams["name"] = [name];
-    }
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
+    if (name != null) {
+      _queryParams["name"] = [name];
+    }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
@@ -469,8 +469,6 @@
    * [overview](/service-management/overview)
    * for naming requirements.  For example: `example.googleapis.com`.
    *
-   * [configId] - The id of the service configuration resource.
-   *
    * [view] - Specifies which parts of the Service Config should be returned in
    * the
    * response.
@@ -478,6 +476,8 @@
    * - "BASIC" : A BASIC.
    * - "FULL" : A FULL.
    *
+   * [configId] - The id of the service configuration resource.
+   *
    * Completes with a [Service].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -486,7 +486,7 @@
    * If the used [http_1.Client] completes with an error when making a REST
    * call, this method will complete with the same error.
    */
-  async.Future<Service> getConfig(core.String serviceName, {core.String configId, core.String view}) {
+  async.Future<Service> getConfig(core.String serviceName, {core.String view, core.String configId}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -497,12 +497,12 @@
     if (serviceName == null) {
       throw new core.ArgumentError("Parameter serviceName is required.");
     }
-    if (configId != null) {
-      _queryParams["configId"] = [configId];
-    }
     if (view != null) {
       _queryParams["view"] = [view];
     }
+    if (configId != null) {
+      _queryParams["configId"] = [configId];
+    }
 
     _url = 'v1/services/' + commons.Escaper.ecapeVariable('$serviceName') + '/config';
 
@@ -3320,7 +3320,7 @@
   core.String description;
   /**
    * Textual representation of an expression in
-   * [Common Expression Language](http://go/api-expr) syntax.
+   * Common Expression Language syntax.
    *
    * The application context of the containing message determines which
    * well-known feature set of CEL is supported.
@@ -4325,7 +4325,31 @@
   }
 }
 
-/** Specifies what kind of log the caller must write */
+/**
+ * Specifies what kind of log the caller must write
+ * Increment a streamz counter with the specified metric and field names.
+ *
+ * Metric names should start with a '/', generally be lowercase-only,
+ * and end in "_count". Field names should not contain an initial slash.
+ * The actual exported metric names will have "/iam/policy" prepended.
+ *
+ * Field names correspond to IAM request parameters and field values are
+ * their respective values.
+ *
+ * At present the only supported field names are
+ *    - "iam_principal", corresponding to IAMContext.principal;
+ *    - "" (empty string), resulting in one aggretated counter with no field.
+ *
+ * Examples:
+ *   counter { metric: "/debug_access_count"  field: "iam_principal" }
+ *   ==> increment counter /iam/policy/backend_debug_access_count
+ *                         {iam_principal=[value of IAMContext.principal]}
+ *
+ * At this time we do not support:
+ * * multiple field names (though this may be supported in the future)
+ * * decrementing the counter
+ * * incrementing it by anything other than 1
+ */
 class LogConfig {
   /** Cloud audit options. */
   CloudAuditOptions cloudAudit;
@@ -7333,6 +7357,11 @@
    * Refer to selector for syntax details.
    */
   core.String selector;
+  /**
+   * True, if the method should skip service control. If so, no control plane
+   * feature (like quota and billing) will be enabled.
+   */
+  core.bool skipServiceControl;
 
   UsageRule();
 
@@ -7343,6 +7372,9 @@
     if (_json.containsKey("selector")) {
       selector = _json["selector"];
     }
+    if (_json.containsKey("skipServiceControl")) {
+      skipServiceControl = _json["skipServiceControl"];
+    }
   }
 
   core.Map<core.String, core.Object> toJson() {
@@ -7353,6 +7385,9 @@
     if (selector != null) {
       _json["selector"] = selector;
     }
+    if (skipServiceControl != null) {
+      _json["skipServiceControl"] = skipServiceControl;
+    }
     return _json;
   }
 }
diff --git a/generated/googleapis/lib/serviceuser/v1.dart b/generated/googleapis/lib/serviceuser/v1.dart
index d67f257..b5d00dc 100644
--- a/generated/googleapis/lib/serviceuser/v1.dart
+++ b/generated/googleapis/lib/serviceuser/v1.dart
@@ -4583,6 +4583,11 @@
    * Refer to selector for syntax details.
    */
   core.String selector;
+  /**
+   * True, if the method should skip service control. If so, no control plane
+   * feature (like quota and billing) will be enabled.
+   */
+  core.bool skipServiceControl;
 
   UsageRule();
 
@@ -4593,6 +4598,9 @@
     if (_json.containsKey("selector")) {
       selector = _json["selector"];
     }
+    if (_json.containsKey("skipServiceControl")) {
+      skipServiceControl = _json["skipServiceControl"];
+    }
   }
 
   core.Map<core.String, core.Object> toJson() {
@@ -4603,6 +4611,9 @@
     if (selector != null) {
       _json["selector"] = selector;
     }
+    if (skipServiceControl != null) {
+      _json["skipServiceControl"] = skipServiceControl;
+    }
     return _json;
   }
 }
diff --git a/generated/googleapis/lib/sheets/v4.dart b/generated/googleapis/lib/sheets/v4.dart
index 4627c81..01acbb6 100644
--- a/generated/googleapis/lib/sheets/v4.dart
+++ b/generated/googleapis/lib/sheets/v4.dart
@@ -181,11 +181,11 @@
    *
    * [spreadsheetId] - The spreadsheet to request.
    *
-   * [ranges] - The ranges to retrieve from the spreadsheet.
-   *
    * [includeGridData] - True if grid data should be returned.
    * This parameter is ignored if a field mask was set in the request.
    *
+   * [ranges] - The ranges to retrieve from the spreadsheet.
+   *
    * Completes with a [Spreadsheet].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -194,7 +194,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<Spreadsheet> get(core.String spreadsheetId, {core.List<core.String> ranges, core.bool includeGridData}) {
+  async.Future<Spreadsheet> get(core.String spreadsheetId, {core.bool includeGridData, core.List<core.String> ranges}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -205,12 +205,12 @@
     if (spreadsheetId == null) {
       throw new core.ArgumentError("Parameter spreadsheetId is required.");
     }
-    if (ranges != null) {
-      _queryParams["ranges"] = ranges;
-    }
     if (includeGridData != null) {
       _queryParams["includeGridData"] = ["${includeGridData}"];
     }
+    if (ranges != null) {
+      _queryParams["ranges"] = ranges;
+    }
 
     _url = 'v4/spreadsheets/' + commons.Escaper.ecapeVariable('$spreadsheetId');
 
@@ -317,6 +317,20 @@
    * [range] - The A1 notation of a range to search for a logical table of data.
    * Values will be appended after the last row of the table.
    *
+   * [responseDateTimeRenderOption] - Determines how dates, times, and durations
+   * in the response should be
+   * rendered. This is ignored if response_value_render_option is
+   * FORMATTED_VALUE.
+   * The default dateTime render option is [DateTimeRenderOption.SERIAL_NUMBER].
+   * Possible string values are:
+   * - "SERIAL_NUMBER" : A SERIAL_NUMBER.
+   * - "FORMATTED_STRING" : A FORMATTED_STRING.
+   *
+   * [includeValuesInResponse] - Determines if the update response should
+   * include the values
+   * of the cells that were appended. By default, responses
+   * do not include the updated values.
+   *
    * [responseValueRenderOption] - Determines how values in the response should
    * be rendered.
    * The default render option is ValueRenderOption.FORMATTED_VALUE.
@@ -336,20 +350,6 @@
    * - "RAW" : A RAW.
    * - "USER_ENTERED" : A USER_ENTERED.
    *
-   * [responseDateTimeRenderOption] - Determines how dates, times, and durations
-   * in the response should be
-   * rendered. This is ignored if response_value_render_option is
-   * FORMATTED_VALUE.
-   * The default dateTime render option is [DateTimeRenderOption.SERIAL_NUMBER].
-   * Possible string values are:
-   * - "SERIAL_NUMBER" : A SERIAL_NUMBER.
-   * - "FORMATTED_STRING" : A FORMATTED_STRING.
-   *
-   * [includeValuesInResponse] - Determines if the update response should
-   * include the values
-   * of the cells that were appended. By default, responses
-   * do not include the updated values.
-   *
    * Completes with a [AppendValuesResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -358,7 +358,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<AppendValuesResponse> append(ValueRange request, core.String spreadsheetId, core.String range, {core.String responseValueRenderOption, core.String insertDataOption, core.String valueInputOption, core.String responseDateTimeRenderOption, core.bool includeValuesInResponse}) {
+  async.Future<AppendValuesResponse> append(ValueRange request, core.String spreadsheetId, core.String range, {core.String responseDateTimeRenderOption, core.bool includeValuesInResponse, core.String responseValueRenderOption, core.String insertDataOption, core.String valueInputOption}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -375,6 +375,12 @@
     if (range == null) {
       throw new core.ArgumentError("Parameter range is required.");
     }
+    if (responseDateTimeRenderOption != null) {
+      _queryParams["responseDateTimeRenderOption"] = [responseDateTimeRenderOption];
+    }
+    if (includeValuesInResponse != null) {
+      _queryParams["includeValuesInResponse"] = ["${includeValuesInResponse}"];
+    }
     if (responseValueRenderOption != null) {
       _queryParams["responseValueRenderOption"] = [responseValueRenderOption];
     }
@@ -384,12 +390,6 @@
     if (valueInputOption != null) {
       _queryParams["valueInputOption"] = [valueInputOption];
     }
-    if (responseDateTimeRenderOption != null) {
-      _queryParams["responseDateTimeRenderOption"] = [responseDateTimeRenderOption];
-    }
-    if (includeValuesInResponse != null) {
-      _queryParams["includeValuesInResponse"] = ["${includeValuesInResponse}"];
-    }
 
     _url = 'v4/spreadsheets/' + commons.Escaper.ecapeVariable('$spreadsheetId') + '/values/' + commons.Escaper.ecapeVariable('$range') + ':append';
 
@@ -458,13 +458,6 @@
    *
    * [spreadsheetId] - The ID of the spreadsheet to retrieve data from.
    *
-   * [valueRenderOption] - How values should be represented in the output.
-   * The default render option is ValueRenderOption.FORMATTED_VALUE.
-   * Possible string values are:
-   * - "FORMATTED_VALUE" : A FORMATTED_VALUE.
-   * - "UNFORMATTED_VALUE" : A UNFORMATTED_VALUE.
-   * - "FORMULA" : A FORMULA.
-   *
    * [dateTimeRenderOption] - How dates, times, and durations should be
    * represented in the output.
    * This is ignored if value_render_option is
@@ -474,7 +467,12 @@
    * - "SERIAL_NUMBER" : A SERIAL_NUMBER.
    * - "FORMATTED_STRING" : A FORMATTED_STRING.
    *
-   * [ranges] - The A1 notation of the values to retrieve.
+   * [valueRenderOption] - How values should be represented in the output.
+   * The default render option is ValueRenderOption.FORMATTED_VALUE.
+   * Possible string values are:
+   * - "FORMATTED_VALUE" : A FORMATTED_VALUE.
+   * - "UNFORMATTED_VALUE" : A UNFORMATTED_VALUE.
+   * - "FORMULA" : A FORMULA.
    *
    * [majorDimension] - The major dimension that results should use.
    *
@@ -488,6 +486,8 @@
    * - "ROWS" : A ROWS.
    * - "COLUMNS" : A COLUMNS.
    *
+   * [ranges] - The A1 notation of the values to retrieve.
+   *
    * Completes with a [BatchGetValuesResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -496,7 +496,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<BatchGetValuesResponse> batchGet(core.String spreadsheetId, {core.String valueRenderOption, core.String dateTimeRenderOption, core.List<core.String> ranges, core.String majorDimension}) {
+  async.Future<BatchGetValuesResponse> batchGet(core.String spreadsheetId, {core.String dateTimeRenderOption, core.String valueRenderOption, core.String majorDimension, core.List<core.String> ranges}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -507,18 +507,18 @@
     if (spreadsheetId == null) {
       throw new core.ArgumentError("Parameter spreadsheetId is required.");
     }
-    if (valueRenderOption != null) {
-      _queryParams["valueRenderOption"] = [valueRenderOption];
-    }
     if (dateTimeRenderOption != null) {
       _queryParams["dateTimeRenderOption"] = [dateTimeRenderOption];
     }
-    if (ranges != null) {
-      _queryParams["ranges"] = ranges;
+    if (valueRenderOption != null) {
+      _queryParams["valueRenderOption"] = [valueRenderOption];
     }
     if (majorDimension != null) {
       _queryParams["majorDimension"] = [majorDimension];
     }
+    if (ranges != null) {
+      _queryParams["ranges"] = ranges;
+    }
 
     _url = 'v4/spreadsheets/' + commons.Escaper.ecapeVariable('$spreadsheetId') + '/values:batchGet';
 
@@ -641,22 +641,6 @@
    *
    * [range] - The A1 notation of the values to retrieve.
    *
-   * [valueRenderOption] - How values should be represented in the output.
-   * The default render option is ValueRenderOption.FORMATTED_VALUE.
-   * Possible string values are:
-   * - "FORMATTED_VALUE" : A FORMATTED_VALUE.
-   * - "UNFORMATTED_VALUE" : A UNFORMATTED_VALUE.
-   * - "FORMULA" : A FORMULA.
-   *
-   * [dateTimeRenderOption] - How dates, times, and durations should be
-   * represented in the output.
-   * This is ignored if value_render_option is
-   * FORMATTED_VALUE.
-   * The default dateTime render option is [DateTimeRenderOption.SERIAL_NUMBER].
-   * Possible string values are:
-   * - "SERIAL_NUMBER" : A SERIAL_NUMBER.
-   * - "FORMATTED_STRING" : A FORMATTED_STRING.
-   *
    * [majorDimension] - The major dimension that results should use.
    *
    * For example, if the spreadsheet data is: `A1=1,B1=2,A2=3,B2=4`,
@@ -669,6 +653,22 @@
    * - "ROWS" : A ROWS.
    * - "COLUMNS" : A COLUMNS.
    *
+   * [dateTimeRenderOption] - How dates, times, and durations should be
+   * represented in the output.
+   * This is ignored if value_render_option is
+   * FORMATTED_VALUE.
+   * The default dateTime render option is [DateTimeRenderOption.SERIAL_NUMBER].
+   * Possible string values are:
+   * - "SERIAL_NUMBER" : A SERIAL_NUMBER.
+   * - "FORMATTED_STRING" : A FORMATTED_STRING.
+   *
+   * [valueRenderOption] - How values should be represented in the output.
+   * The default render option is ValueRenderOption.FORMATTED_VALUE.
+   * Possible string values are:
+   * - "FORMATTED_VALUE" : A FORMATTED_VALUE.
+   * - "UNFORMATTED_VALUE" : A UNFORMATTED_VALUE.
+   * - "FORMULA" : A FORMULA.
+   *
    * Completes with a [ValueRange].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -677,7 +677,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ValueRange> get(core.String spreadsheetId, core.String range, {core.String valueRenderOption, core.String dateTimeRenderOption, core.String majorDimension}) {
+  async.Future<ValueRange> get(core.String spreadsheetId, core.String range, {core.String majorDimension, core.String dateTimeRenderOption, core.String valueRenderOption}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -691,14 +691,14 @@
     if (range == null) {
       throw new core.ArgumentError("Parameter range is required.");
     }
-    if (valueRenderOption != null) {
-      _queryParams["valueRenderOption"] = [valueRenderOption];
+    if (majorDimension != null) {
+      _queryParams["majorDimension"] = [majorDimension];
     }
     if (dateTimeRenderOption != null) {
       _queryParams["dateTimeRenderOption"] = [dateTimeRenderOption];
     }
-    if (majorDimension != null) {
-      _queryParams["majorDimension"] = [majorDimension];
+    if (valueRenderOption != null) {
+      _queryParams["valueRenderOption"] = [valueRenderOption];
     }
 
     _url = 'v4/spreadsheets/' + commons.Escaper.ecapeVariable('$spreadsheetId') + '/values/' + commons.Escaper.ecapeVariable('$range');
@@ -2695,8 +2695,8 @@
   core.List<CandlestickData> data;
   /**
    * The domain data (horizontal axis) for the candlestick chart.  String data
-   * will be treated as discrete labels, other data will be treated as continous
-   * values.
+   * will be treated as discrete labels, other data will be treated as
+   * continuous values.
    */
   CandlestickDomain domain;
 
@@ -6397,6 +6397,28 @@
   }
 }
 
+/** Randomizes the order of the rows in a range. */
+class RandomizeRangeRequest {
+  /** The range to randomize. */
+  GridRange range;
+
+  RandomizeRangeRequest();
+
+  RandomizeRangeRequest.fromJson(core.Map _json) {
+    if (_json.containsKey("range")) {
+      range = new GridRange.fromJson(_json["range"]);
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (range != null) {
+      _json["range"] = (range).toJson();
+    }
+    return _json;
+  }
+}
+
 /**
  * Updates all cells in the range to the values in the given Cell object.
  * Only the fields listed in the fields field are updated; others are
@@ -6520,6 +6542,8 @@
   MoveDimensionRequest moveDimension;
   /** Pastes data (HTML or delimited) into a sheet. */
   PasteDataRequest pasteData;
+  /** Randomizes the order of the rows in a range. */
+  RandomizeRangeRequest randomizeRange;
   /** Repeats a single cell across a range. */
   RepeatCellRequest repeatCell;
   /** Sets the basic filter on a sheet. */
@@ -6653,6 +6677,9 @@
     if (_json.containsKey("pasteData")) {
       pasteData = new PasteDataRequest.fromJson(_json["pasteData"]);
     }
+    if (_json.containsKey("randomizeRange")) {
+      randomizeRange = new RandomizeRangeRequest.fromJson(_json["randomizeRange"]);
+    }
     if (_json.containsKey("repeatCell")) {
       repeatCell = new RepeatCellRequest.fromJson(_json["repeatCell"]);
     }
@@ -6804,6 +6831,9 @@
     if (pasteData != null) {
       _json["pasteData"] = (pasteData).toJson();
     }
+    if (randomizeRange != null) {
+      _json["randomizeRange"] = (randomizeRange).toJson();
+    }
     if (repeatCell != null) {
       _json["repeatCell"] = (repeatCell).toJson();
     }
diff --git a/generated/googleapis/lib/slides/v1.dart b/generated/googleapis/lib/slides/v1.dart
index 1843e3b..e8238a9 100644
--- a/generated/googleapis/lib/slides/v1.dart
+++ b/generated/googleapis/lib/slides/v1.dart
@@ -260,13 +260,6 @@
    *
    * [pageObjectId] - The object ID of the page whose thumbnail to retrieve.
    *
-   * [thumbnailProperties_mimeType] - The optional mime type of the thumbnail
-   * image.
-   *
-   * If you don't specify the mime type, the default mime type will be PNG.
-   * Possible string values are:
-   * - "PNG" : A PNG.
-   *
    * [thumbnailProperties_thumbnailSize] - The optional thumbnail image size.
    *
    * If you don't specify the size, the server chooses a default size of the
@@ -275,6 +268,13 @@
    * - "THUMBNAIL_SIZE_UNSPECIFIED" : A THUMBNAIL_SIZE_UNSPECIFIED.
    * - "LARGE" : A LARGE.
    *
+   * [thumbnailProperties_mimeType] - The optional mime type of the thumbnail
+   * image.
+   *
+   * If you don't specify the mime type, the default mime type will be PNG.
+   * Possible string values are:
+   * - "PNG" : A PNG.
+   *
    * Completes with a [Thumbnail].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -283,7 +283,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<Thumbnail> getThumbnail(core.String presentationId, core.String pageObjectId, {core.String thumbnailProperties_mimeType, core.String thumbnailProperties_thumbnailSize}) {
+  async.Future<Thumbnail> getThumbnail(core.String presentationId, core.String pageObjectId, {core.String thumbnailProperties_thumbnailSize, core.String thumbnailProperties_mimeType}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -297,12 +297,12 @@
     if (pageObjectId == null) {
       throw new core.ArgumentError("Parameter pageObjectId is required.");
     }
-    if (thumbnailProperties_mimeType != null) {
-      _queryParams["thumbnailProperties.mimeType"] = [thumbnailProperties_mimeType];
-    }
     if (thumbnailProperties_thumbnailSize != null) {
       _queryParams["thumbnailProperties.thumbnailSize"] = [thumbnailProperties_thumbnailSize];
     }
+    if (thumbnailProperties_mimeType != null) {
+      _queryParams["thumbnailProperties.mimeType"] = [thumbnailProperties_mimeType];
+    }
 
     _url = 'v1/presentations/' + commons.Escaper.ecapeVariable('$presentationId') + '/pages/' + commons.Escaper.ecapeVariable('$pageObjectId') + '/thumbnail';
 
@@ -2524,7 +2524,7 @@
  * relevant for pages with page_type LAYOUT.
  */
 class LayoutProperties {
-  /** The human readable name of the layout in the presentation's locale. */
+  /** The human-readable name of the layout. */
   core.String displayName;
   /** The object ID of the master that this layout is based on. */
   core.String masterObjectId;
diff --git a/generated/googleapis/lib/spanner/v1.dart b/generated/googleapis/lib/spanner/v1.dart
index fadcaf2..340b45a 100644
--- a/generated/googleapis/lib/spanner/v1.dart
+++ b/generated/googleapis/lib/spanner/v1.dart
@@ -22,6 +22,12 @@
   /** View and manage your data across Google Cloud Platform services */
   static const CloudPlatformScope = "https://www.googleapis.com/auth/cloud-platform";
 
+  /** Administer your Spanner databases */
+  static const SpannerAdminScope = "https://www.googleapis.com/auth/spanner.admin";
+
+  /** View and manage the contents of your Spanner databases */
+  static const SpannerDataScope = "https://www.googleapis.com/auth/spanner.data";
+
 
   final commons.ApiRequester _requester;
 
@@ -1262,21 +1268,26 @@
    * Lists operations that match the specified filter in the request. If the
    * server doesn't support this method, it returns `UNIMPLEMENTED`.
    *
-   * NOTE: the `name` binding below allows API services to override the binding
-   * to use different resource name schemes, such as `users / * /operations`.
+   * NOTE: the `name` binding allows API services to override the binding
+   * to use different resource name schemes, such as `users / * /operations`. To
+   * override the binding, API services can add a binding such as
+   * `"/v1/{name=users / * }/operations"` to their service configuration.
+   * For backwards compatibility, the default name includes the operations
+   * collection id, however overriding users must ensure the name binding
+   * is the parent resource, without the operations collection id.
    *
    * Request parameters:
    *
-   * [name] - The name of the operation collection.
+   * [name] - The name of the operation's parent resource.
    * Value must have pattern
    * "^projects/[^/]+/instances/[^/]+/databases/[^/]+/operations$".
    *
-   * [filter] - The standard list filter.
-   *
    * [pageToken] - The standard list page token.
    *
    * [pageSize] - The standard list page size.
    *
+   * [filter] - The standard list filter.
+   *
    * Completes with a [ListOperationsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -1285,7 +1296,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListOperationsResponse> list(core.String name, {core.String filter, core.String pageToken, core.int pageSize}) {
+  async.Future<ListOperationsResponse> list(core.String name, {core.String pageToken, core.int pageSize, core.String filter}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -1296,15 +1307,15 @@
     if (name == null) {
       throw new core.ArgumentError("Parameter name is required.");
     }
-    if (filter != null) {
-      _queryParams["filter"] = [filter];
-    }
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
+    if (filter != null) {
+      _queryParams["filter"] = [filter];
+    }
 
     _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name');
 
@@ -1992,20 +2003,25 @@
    * Lists operations that match the specified filter in the request. If the
    * server doesn't support this method, it returns `UNIMPLEMENTED`.
    *
-   * NOTE: the `name` binding below allows API services to override the binding
-   * to use different resource name schemes, such as `users / * /operations`.
+   * NOTE: the `name` binding allows API services to override the binding
+   * to use different resource name schemes, such as `users / * /operations`. To
+   * override the binding, API services can add a binding such as
+   * `"/v1/{name=users / * }/operations"` to their service configuration.
+   * For backwards compatibility, the default name includes the operations
+   * collection id, however overriding users must ensure the name binding
+   * is the parent resource, without the operations collection id.
    *
    * Request parameters:
    *
-   * [name] - The name of the operation collection.
+   * [name] - The name of the operation's parent resource.
    * Value must have pattern "^projects/[^/]+/instances/[^/]+/operations$".
    *
-   * [pageSize] - The standard list page size.
-   *
    * [filter] - The standard list filter.
    *
    * [pageToken] - The standard list page token.
    *
+   * [pageSize] - The standard list page size.
+   *
    * Completes with a [ListOperationsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -2014,7 +2030,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListOperationsResponse> list(core.String name, {core.int pageSize, core.String filter, core.String pageToken}) {
+  async.Future<ListOperationsResponse> list(core.String name, {core.String filter, core.String pageToken, core.int pageSize}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -2025,15 +2041,15 @@
     if (name == null) {
       throw new core.ArgumentError("Parameter name is required.");
     }
-    if (pageSize != null) {
-      _queryParams["pageSize"] = ["${pageSize}"];
-    }
     if (filter != null) {
       _queryParams["filter"] = [filter];
     }
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
+    if (pageSize != null) {
+      _queryParams["pageSize"] = ["${pageSize}"];
+    }
 
     _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name');
 
@@ -2233,6 +2249,14 @@
 /** Associates `members` with a `role`. */
 class Binding {
   /**
+   * The condition that is associated with this binding.
+   * NOTE: an unsatisfied condition will not allow user access via current
+   * binding. Different bindings, including their conditions, are examined
+   * independently.
+   * This field is GOOGLE_INTERNAL.
+   */
+  Expr condition;
+  /**
    * Specifies the identities requesting access for a Cloud Platform resource.
    * `members` can have the following values:
    *
@@ -2252,6 +2276,7 @@
    * * `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`.
    */
@@ -2266,6 +2291,9 @@
   Binding();
 
   Binding.fromJson(core.Map _json) {
+    if (_json.containsKey("condition")) {
+      condition = new Expr.fromJson(_json["condition"]);
+    }
     if (_json.containsKey("members")) {
       members = _json["members"];
     }
@@ -2276,6 +2304,9 @@
 
   core.Map<core.String, core.Object> toJson() {
     final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (condition != null) {
+      _json["condition"] = (condition).toJson();
+    }
     if (members != null) {
       _json["members"] = members;
     }
@@ -2343,14 +2374,28 @@
 
 /** Write a Cloud Audit log */
 class CloudAuditOptions {
+  /**
+   * The log_name to populate in the Cloud Audit Record.
+   * Possible string values are:
+   * - "UNSPECIFIED_LOG_NAME" : Default. Should not be used.
+   * - "ADMIN_ACTIVITY" : Corresponds to "cloudaudit.googleapis.com/activity"
+   * - "DATA_ACCESS" : Corresponds to "cloudaudit.googleapis.com/data_access"
+   */
+  core.String logName;
 
   CloudAuditOptions();
 
   CloudAuditOptions.fromJson(core.Map _json) {
+    if (_json.containsKey("logName")) {
+      logName = _json["logName"];
+    }
   }
 
   core.Map<core.String, core.Object> toJson() {
     final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (logName != null) {
+      _json["logName"] = logName;
+    }
     return _json;
   }
 }
@@ -2461,7 +2506,6 @@
    * member of the specified group. Approvers can only grant additional
    * access, and are thus only used in a strictly positive context
    * (e.g. ALLOW/IN or DENY/NOT_IN).
-   * See: go/rpc-security-policy-dynamicauth.
    * - "JUSTIFICATION_TYPE" : What types of justifications have been supplied
    * with this request.
    * String values should match enum names from tech.iam.JustificationType,
@@ -2977,6 +3021,74 @@
   }
 }
 
+/**
+ * Represents an expression text. Example:
+ *
+ *     title: "User account presence"
+ *     description: "Determines whether the request has a user account"
+ *     expression: "size(request.user) > 0"
+ */
+class Expr {
+  /**
+   * An optional description of the expression. This is a longer text which
+   * describes the expression, e.g. when hovered over it in a UI.
+   */
+  core.String description;
+  /**
+   * Textual representation of an expression in
+   * [Common Expression Language](http://go/api-expr) syntax.
+   *
+   * The application context of the containing message determines which
+   * well-known feature set of CEL is supported.
+   */
+  core.String expression;
+  /**
+   * An optional string indicating the location of the expression for error
+   * reporting, e.g. a file name and a position in the file.
+   */
+  core.String location;
+  /**
+   * An optional title for the expression, i.e. a short string describing
+   * its purpose. This can be used e.g. in UIs which allow to enter the
+   * expression.
+   */
+  core.String title;
+
+  Expr();
+
+  Expr.fromJson(core.Map _json) {
+    if (_json.containsKey("description")) {
+      description = _json["description"];
+    }
+    if (_json.containsKey("expression")) {
+      expression = _json["expression"];
+    }
+    if (_json.containsKey("location")) {
+      location = _json["location"];
+    }
+    if (_json.containsKey("title")) {
+      title = _json["title"];
+    }
+  }
+
+  core.Map<core.String, core.Object> toJson() {
+    final core.Map<core.String, core.Object> _json = new core.Map<core.String, core.Object>();
+    if (description != null) {
+      _json["description"] = description;
+    }
+    if (expression != null) {
+      _json["expression"] = expression;
+    }
+    if (location != null) {
+      _json["location"] = location;
+    }
+    if (title != null) {
+      _json["title"] = title;
+    }
+    return _json;
+  }
+}
+
 /** Message representing a single field of a struct. */
 class Field {
   /**
@@ -4060,7 +4172,6 @@
   core.List<AuditConfig> auditConfigs;
   /**
    * Associates a list of `members` to a `role`.
-   * Multiple `bindings` must not be specified for the same `role`.
    * `bindings` with no members will result in an error.
    */
   core.List<Binding> bindings;
@@ -4173,7 +4284,7 @@
   }
 }
 
-/** Options for read-only transactions. */
+/** Message type to initiate a read-only transaction. */
 class ReadOnly {
   /**
    * Executes all reads at a timestamp that is `exact_staleness`
@@ -4396,7 +4507,10 @@
   }
 }
 
-/** Options for read-write transactions. */
+/**
+ * Message type to initiate a read-write transaction. Currently this
+ * transaction type has no options.
+ */
 class ReadWrite {
 
   ReadWrite();
@@ -4799,7 +4913,7 @@
  * error message is needed, put the localized message in the error details or
  * localize it in the client. The optional error details may contain arbitrary
  * information about the error. There is a predefined set of error detail types
- * in the package `google.rpc` which can be used for common error conditions.
+ * in the package `google.rpc` that can be used for common error conditions.
  *
  * # Language mapping
  *
@@ -4822,7 +4936,7 @@
  *     errors.
  *
  * - Workflow errors. A typical workflow has multiple steps. Each step may
- *     have a `Status` message for error reporting purpose.
+ *     have a `Status` message for error reporting.
  *
  * - Batch operations. If a client uses batch request and batch response, the
  *     `Status` message should be used directly inside batch response, one for
diff --git a/generated/googleapis/lib/speech/v1.dart b/generated/googleapis/lib/speech/v1.dart
index b2169f5..e99fcf4 100644
--- a/generated/googleapis/lib/speech/v1.dart
+++ b/generated/googleapis/lib/speech/v1.dart
@@ -189,13 +189,13 @@
    *
    * Request parameters:
    *
-   * [name] - The name of the operation's parent resource.
+   * [filter] - The standard list filter.
    *
    * [pageToken] - The standard list page token.
    *
-   * [pageSize] - The standard list page size.
+   * [name] - The name of the operation's parent resource.
    *
-   * [filter] - The standard list filter.
+   * [pageSize] - The standard list page size.
    *
    * Completes with a [ListOperationsResponse].
    *
@@ -205,7 +205,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListOperationsResponse> list({core.String name, core.String pageToken, core.int pageSize, core.String filter}) {
+  async.Future<ListOperationsResponse> list({core.String filter, core.String pageToken, core.String name, core.int pageSize}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -213,18 +213,18 @@
     var _downloadOptions = commons.DownloadOptions.Metadata;
     var _body = null;
 
-    if (name != null) {
-      _queryParams["name"] = [name];
+    if (filter != null) {
+      _queryParams["filter"] = [filter];
     }
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
+    if (name != null) {
+      _queryParams["name"] = [name];
+    }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
-    if (filter != null) {
-      _queryParams["filter"] = [filter];
-    }
 
     _url = 'v1/operations';
 
@@ -804,8 +804,7 @@
    * indicates an estimated greater likelihood that the recognized words are
    * correct. This field is typically provided only for the top hypothesis, and
    * only for `is_final=true` results. Clients should not rely on the
-   * `confidence` field as it is not guaranteed to be accurate, or even set, in
-   * any of the results.
+   * `confidence` field as it is not guaranteed to be accurate or consistent.
    * The default of 0.0 is a sentinel value indicating `confidence` was not set.
    */
   core.double confidence;
diff --git a/generated/googleapis/lib/storagetransfer/v1.dart b/generated/googleapis/lib/storagetransfer/v1.dart
index e3f750c..722f6dd 100644
--- a/generated/googleapis/lib/storagetransfer/v1.dart
+++ b/generated/googleapis/lib/storagetransfer/v1.dart
@@ -439,8 +439,6 @@
    * [name] - The value `transferOperations`.
    * Value must have pattern "^transferOperations$".
    *
-   * [pageSize] - The list page size. The max allowed value is 256.
-   *
    * [filter] - A list of query parameters specified as JSON text in the form of
    * {\"project_id\" : \"my_project_id\", \"job_names\" : [\"jobid1\",
    * \"jobid2\",...], \"operation_names\" : [\"opid1\", \"opid2\",...],
@@ -451,6 +449,8 @@
    *
    * [pageToken] - The list page token.
    *
+   * [pageSize] - The list page size. The max allowed value is 256.
+   *
    * Completes with a [ListOperationsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -459,7 +459,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListOperationsResponse> list(core.String name, {core.int pageSize, core.String filter, core.String pageToken}) {
+  async.Future<ListOperationsResponse> list(core.String name, {core.String filter, core.String pageToken, core.int pageSize}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -470,15 +470,15 @@
     if (name == null) {
       throw new core.ArgumentError("Parameter name is required.");
     }
-    if (pageSize != null) {
-      _queryParams["pageSize"] = ["${pageSize}"];
-    }
     if (filter != null) {
       _queryParams["filter"] = [filter];
     }
     if (pageToken != null) {
       _queryParams["pageToken"] = [pageToken];
     }
+    if (pageSize != null) {
+      _queryParams["pageSize"] = ["${pageSize}"];
+    }
 
     _url = 'v1/' + commons.Escaper.ecapeVariableReserved('$name');
 
@@ -1954,10 +1954,15 @@
 class TransferOptions {
   /**
    * Whether objects should be deleted from the source after they are
-   * transferred to the sink.
+   * transferred to the sink.  Note that this option and
+   * `deleteObjectsUniqueInSink` are mutually exclusive.
    */
   core.bool deleteObjectsFromSourceAfterTransfer;
-  /** Whether objects that exist only in the sink should be deleted. */
+  /**
+   * Whether objects that exist only in the sink should be deleted.  Note that
+   * this option and `deleteObjectsFromSourceAfterTransfer` are mutually
+   * exclusive.
+   */
   core.bool deleteObjectsUniqueInSink;
   /** Whether overwriting objects that already exist in the sink is allowed. */
   core.bool overwriteObjectsAlreadyExistingInSink;
diff --git a/generated/googleapis/lib/translate/v2.dart b/generated/googleapis/lib/translate/v2.dart
index 35663b5..e5cd8a5 100644
--- a/generated/googleapis/lib/translate/v2.dart
+++ b/generated/googleapis/lib/translate/v2.dart
@@ -138,12 +138,12 @@
    *
    * Request parameters:
    *
+   * [model] - The model type for which supported languages should be returned.
+   *
    * [target] - The language to use to return localized, human readable names of
    * supported
    * languages.
    *
-   * [model] - The model type for which supported languages should be returned.
-   *
    * Completes with a [LanguagesListResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -152,7 +152,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<LanguagesListResponse> list({core.String target, core.String model}) {
+  async.Future<LanguagesListResponse> list({core.String model, core.String target}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -160,12 +160,12 @@
     var _downloadOptions = commons.DownloadOptions.Metadata;
     var _body = null;
 
-    if (target != null) {
-      _queryParams["target"] = [target];
-    }
     if (model != null) {
       _queryParams["model"] = [model];
     }
+    if (target != null) {
+      _queryParams["target"] = [target];
+    }
 
     _url = 'v2/languages';
 
@@ -201,6 +201,9 @@
    * one of the
    * language codes listed in Language Support.
    *
+   * [model] - The `model` type requested for this translation. Valid values are
+   * listed in public documentation.
+   *
    * [source] - The language of the source text, set to one of the language
    * codes listed in
    * Language Support. If the source language is not specified, the API will
@@ -216,9 +219,6 @@
    * - "html" : Specifies the input is in HTML
    * - "text" : Specifies the input is in plain textual format
    *
-   * [model] - The `model` type requested for this translation. Valid values are
-   * listed in public documentation.
-   *
    * Completes with a [TranslationsListResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -227,7 +227,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<TranslationsListResponse> list(core.List<core.String> q, core.String target, {core.String source, core.List<core.String> cid, core.String format, core.String model}) {
+  async.Future<TranslationsListResponse> list(core.List<core.String> q, core.String target, {core.String model, core.String source, core.List<core.String> cid, core.String format}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -243,6 +243,9 @@
       throw new core.ArgumentError("Parameter target is required.");
     }
     _queryParams["target"] = [target];
+    if (model != null) {
+      _queryParams["model"] = [model];
+    }
     if (source != null) {
       _queryParams["source"] = [source];
     }
@@ -252,9 +255,6 @@
     if (format != null) {
       _queryParams["format"] = [format];
     }
-    if (model != null) {
-      _queryParams["model"] = [model];
-    }
 
     _url = 'v2';
 
diff --git a/generated/googleapis/lib/vision/v1.dart b/generated/googleapis/lib/vision/v1.dart
index 5111e2d..5c5df61 100644
--- a/generated/googleapis/lib/vision/v1.dart
+++ b/generated/googleapis/lib/vision/v1.dart
@@ -23,6 +23,9 @@
   /** View and manage your data across Google Cloud Platform services */
   static const CloudPlatformScope = "https://www.googleapis.com/auth/cloud-platform";
 
+  /** Apply machine learning models to understand and label images */
+  static const CloudVisionScope = "https://www.googleapis.com/auth/cloud-vision";
+
 
   final commons.ApiRequester _requester;
 
diff --git a/generated/googleapis/lib/youtubereporting/v1.dart b/generated/googleapis/lib/youtubereporting/v1.dart
index fc1a545..0cf211e 100644
--- a/generated/googleapis/lib/youtubereporting/v1.dart
+++ b/generated/googleapis/lib/youtubereporting/v1.dart
@@ -193,25 +193,25 @@
    *
    * Request parameters:
    *
-   * [pageToken] - A token identifying a page of results the server should
-   * return. Typically,
-   * this is the value of
-   * ListReportTypesResponse.next_page_token
-   * returned in response to the previous call to the `ListJobs` method.
+   * [onBehalfOfContentOwner] - The content owner's external ID on which behalf
+   * the user is acting on. If
+   * not set, the user is acting for himself (his own channel).
    *
    * [includeSystemManaged] - If set to true, also system-managed jobs will be
    * returned; otherwise only
    * user-created jobs will be returned. System-managed jobs can neither be
    * modified nor deleted.
    *
+   * [pageToken] - A token identifying a page of results the server should
+   * return. Typically,
+   * this is the value of
+   * ListReportTypesResponse.next_page_token
+   * returned in response to the previous call to the `ListJobs` method.
+   *
    * [pageSize] - Requested page size. Server may return fewer jobs than
    * requested.
    * If unspecified, server will pick an appropriate default.
    *
-   * [onBehalfOfContentOwner] - The content owner's external ID on which behalf
-   * the user is acting on. If
-   * not set, the user is acting for himself (his own channel).
-   *
    * Completes with a [ListJobsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -220,7 +220,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListJobsResponse> list({core.String pageToken, core.bool includeSystemManaged, core.int pageSize, core.String onBehalfOfContentOwner}) {
+  async.Future<ListJobsResponse> list({core.String onBehalfOfContentOwner, core.bool includeSystemManaged, core.String pageToken, core.int pageSize}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -228,18 +228,18 @@
     var _downloadOptions = commons.DownloadOptions.Metadata;
     var _body = null;
 
-    if (pageToken != null) {
-      _queryParams["pageToken"] = [pageToken];
+    if (onBehalfOfContentOwner != null) {
+      _queryParams["onBehalfOfContentOwner"] = [onBehalfOfContentOwner];
     }
     if (includeSystemManaged != null) {
       _queryParams["includeSystemManaged"] = ["${includeSystemManaged}"];
     }
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }
-    if (onBehalfOfContentOwner != null) {
-      _queryParams["onBehalfOfContentOwner"] = [onBehalfOfContentOwner];
-    }
 
     _url = 'v1/jobs';
 
@@ -321,10 +321,6 @@
    *
    * [jobId] - The ID of the job.
    *
-   * [startTimeBefore] - If set, only reports whose start time is smaller than
-   * the specified
-   * date/time are returned.
-   *
    * [createdAfter] - If set, only reports created after the specified date/time
    * are returned.
    *
@@ -346,6 +342,10 @@
    * the user is acting on. If
    * not set, the user is acting for himself (his own channel).
    *
+   * [startTimeBefore] - If set, only reports whose start time is smaller than
+   * the specified
+   * date/time are returned.
+   *
    * Completes with a [ListReportsResponse].
    *
    * Completes with a [commons.ApiRequestError] if the API endpoint returned an
@@ -354,7 +354,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListReportsResponse> list(core.String jobId, {core.String startTimeBefore, core.String createdAfter, core.String startTimeAtOrAfter, core.String pageToken, core.int pageSize, core.String onBehalfOfContentOwner}) {
+  async.Future<ListReportsResponse> list(core.String jobId, {core.String createdAfter, core.String startTimeAtOrAfter, core.String pageToken, core.int pageSize, core.String onBehalfOfContentOwner, core.String startTimeBefore}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -365,9 +365,6 @@
     if (jobId == null) {
       throw new core.ArgumentError("Parameter jobId is required.");
     }
-    if (startTimeBefore != null) {
-      _queryParams["startTimeBefore"] = [startTimeBefore];
-    }
     if (createdAfter != null) {
       _queryParams["createdAfter"] = [createdAfter];
     }
@@ -383,6 +380,9 @@
     if (onBehalfOfContentOwner != null) {
       _queryParams["onBehalfOfContentOwner"] = [onBehalfOfContentOwner];
     }
+    if (startTimeBefore != null) {
+      _queryParams["startTimeBefore"] = [startTimeBefore];
+    }
 
     _url = 'v1/jobs/' + commons.Escaper.ecapeVariable('$jobId') + '/reports';
 
@@ -476,17 +476,17 @@
    *
    * Request parameters:
    *
+   * [includeSystemManaged] - If set to true, also system-managed report types
+   * will be returned;
+   * otherwise only the report types that can be used to create new reporting
+   * jobs will be returned.
+   *
    * [pageToken] - A token identifying a page of results the server should
    * return. Typically,
    * this is the value of
    * ListReportTypesResponse.next_page_token
    * returned in response to the previous call to the `ListReportTypes` method.
    *
-   * [includeSystemManaged] - If set to true, also system-managed report types
-   * will be returned;
-   * otherwise only the report types that can be used to create new reporting
-   * jobs will be returned.
-   *
    * [pageSize] - Requested page size. Server may return fewer report types than
    * requested.
    * If unspecified, server will pick an appropriate default.
@@ -503,7 +503,7 @@
    * If the used [http.Client] completes with an error when making a REST call,
    * this method will complete with the same error.
    */
-  async.Future<ListReportTypesResponse> list({core.String pageToken, core.bool includeSystemManaged, core.int pageSize, core.String onBehalfOfContentOwner}) {
+  async.Future<ListReportTypesResponse> list({core.bool includeSystemManaged, core.String pageToken, core.int pageSize, core.String onBehalfOfContentOwner}) {
     var _url = null;
     var _queryParams = new core.Map();
     var _uploadMedia = null;
@@ -511,12 +511,12 @@
     var _downloadOptions = commons.DownloadOptions.Metadata;
     var _body = null;
 
-    if (pageToken != null) {
-      _queryParams["pageToken"] = [pageToken];
-    }
     if (includeSystemManaged != null) {
       _queryParams["includeSystemManaged"] = ["${includeSystemManaged}"];
     }
+    if (pageToken != null) {
+      _queryParams["pageToken"] = [pageToken];
+    }
     if (pageSize != null) {
       _queryParams["pageSize"] = ["${pageSize}"];
     }