{ "swagger": "2.0", "info": { "version": "2016-06-01", "title": "RecoveryServicesClient", "x-ms-code-generation-settings": { "internalConstructors": false } }, "host": "management.azure.com", "schemes": [ "https" ], "consumes": [ "application/json" ], "produces": [ "application/json" ], "paths": { "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.RecoveryServices/vaults/{vaultName}/privateLinkResources": { "get": { "tags": [ "ListPrivateLinkResources" ], "summary": "Returns the list of private link resources that need to be created for Backup and SiteRecovery", "operationId": "PrivateLinkResources_List", "produces": [ "application/json" ], "parameters": [ { "$ref": "#/parameters/SubscriptionId" }, { "$ref": "#/parameters/ResourceGroupName" }, { "$ref": "#/parameters/VaultName" }, { "$ref": "#/parameters/ApiVersion" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/PrivateLinkResources" } } }, "deprecated": false, "x-ms-pageable": { "nextLinkName": "nextLink", "itemName": "value" }, "x-ms-examples": { "List PrivateLinkResources": { "$ref": "./examples/ListPrivateLinkResources.json" } } } }, "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.RecoveryServices/vaults/{vaultName}/privateLinkResources/{privateLinkResourceName}": { "get": { "tags": [ "GetPrivateLinkResources" ], "summary": "Returns a specified private link resource that need to be created for Backup and SiteRecovery", "operationId": "PrivateLinkResources_Get", "produces": [ "application/json" ], "parameters": [ { "$ref": "#/parameters/SubscriptionId" }, { "$ref": "#/parameters/ResourceGroupName" }, { "$ref": "#/parameters/VaultName" }, { "$ref": "#/parameters/ApiVersion" }, { "name": "privateLinkResourceName", "in": "path", "required": true, "type": "string" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/PrivateLinkResource" } } }, "deprecated": false, "x-ms-examples": { "Get PrivateLinkResource": { "$ref": "./examples/GetPrivateLinkResources.json" } } } }, "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.RecoveryServices/locations/{location}/checkNameAvailability": { "post": { "tags": [ "RecoveryServices" ], "summary": "API to check for resource name availability.\r\nA name is available if no other resource exists that has the same SubscriptionId, Resource Name and Type\r\nor if one or more such resources exist, each of these must be GC'd and their time of deletion be more than 24 Hours Ago", "operationId": "RecoveryServices_CheckNameAvailability", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "$ref": "#/parameters/SubscriptionId" }, { "$ref": "#/parameters/ResourceGroupName" }, { "$ref": "#/parameters/ApiVersion" }, { "name": "location", "in": "path", "description": "Location of the resource", "required": true, "type": "string" }, { "name": "input", "in": "body", "description": "Contains information about Resource type and Resource name", "required": true, "schema": { "$ref": "#/definitions/CheckNameAvailabilityParameters" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/CheckNameAvailabilityResult" } } }, "x-ms-examples": { "Availability status of Resource Name when no resource with same name, type and subscription exists, nor has been deleted within last 24 hours": { "$ref": "./examples/CheckNameAvailability_Available.json" }, "Availability status of Resource Name when resource with same name, type and subscription exists": { "$ref": "./examples/CheckNameAvailability_NotAvailable.json" } } } }, "/subscriptions/{subscriptionId}/providers/Microsoft.RecoveryServices/vaults": { "get": { "tags": [ "Vaults" ], "description": "Fetches all the resources of the specified type in the subscription.", "operationId": "Vaults_ListBySubscriptionId", "produces": [ "application/json" ], "parameters": [ { "$ref": "#/parameters/SubscriptionId" }, { "$ref": "#/parameters/ApiVersion" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/VaultList" } } }, "deprecated": false, "x-ms-pageable": { "nextLinkName": "nextLink", "itemName": "value" }, "x-ms-examples": { "List of Recovery Services Resources in SubscriptionId": { "$ref": "./examples/ListBySubscriptionIds.json" } } } }, "/providers/Microsoft.RecoveryServices/operations": { "get": { "tags": [ "Operations" ], "description": "Returns the list of available operations.", "operationId": "Operations_List", "produces": [ "application/json" ], "parameters": [ { "$ref": "#/parameters/ApiVersion" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/ClientDiscoveryResponse" } } }, "deprecated": false, "x-ms-pageable": { "nextLinkName": "nextLink", "itemName": "value" }, "x-ms-examples": { "ListOperations": { "$ref": "./examples/ListOperations.json" } } } }, "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.RecoveryServices/vaults": { "get": { "tags": [ "Vaults" ], "description": "Retrieve a list of Vaults.", "operationId": "Vaults_ListByResourceGroup", "produces": [ "application/json" ], "parameters": [ { "$ref": "#/parameters/SubscriptionId" }, { "$ref": "#/parameters/ApiVersion" }, { "$ref": "#/parameters/ResourceGroupName" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/VaultList" } } }, "deprecated": false, "x-ms-pageable": { "nextLinkName": "nextLink", "itemName": "value" }, "x-ms-examples": { "List of Recovery Services Resources in ResourceGroup": { "$ref": "./examples/ListResources.json" } } } }, "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.RecoveryServices/vaults/{vaultName}": { "get": { "tags": [ "Vaults" ], "description": "Get the Vault details.", "operationId": "Vaults_Get", "produces": [ "application/json" ], "parameters": [ { "$ref": "#/parameters/SubscriptionId" }, { "$ref": "#/parameters/ApiVersion" }, { "$ref": "#/parameters/ResourceGroupName" }, { "$ref": "#/parameters/VaultName" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/Vault" } } }, "deprecated": false, "x-ms-examples": { "Get Recovery Services Resource": { "$ref": "./examples/GETVault.json" } } }, "put": { "tags": [ "Vaults" ], "description": "Creates or updates a Recovery Services vault.", "operationId": "Vaults_CreateOrUpdate", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "$ref": "#/parameters/SubscriptionId" }, { "$ref": "#/parameters/ApiVersion" }, { "$ref": "#/parameters/ResourceGroupName" }, { "$ref": "#/parameters/VaultName" }, { "name": "vault", "in": "body", "description": "Recovery Services Vault to be created.", "required": true, "schema": { "$ref": "#/definitions/Vault" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/Vault" } }, "201": { "description": "Created", "schema": { "$ref": "#/definitions/Vault" } } }, "deprecated": false, "x-ms-examples": { "Create of Update Recovery Services vault": { "$ref": "./examples/PUTVault.json" } } }, "delete": { "tags": [ "Vaults" ], "description": "Deletes a vault.", "operationId": "Vaults_Delete", "produces": [ "application/json" ], "parameters": [ { "$ref": "#/parameters/SubscriptionId" }, { "$ref": "#/parameters/ApiVersion" }, { "$ref": "#/parameters/ResourceGroupName" }, { "$ref": "#/parameters/VaultName" } ], "responses": { "200": { "description": "OK" } }, "deprecated": false, "x-ms-examples": { "Delete Recovery Services Vault": { "$ref": "./examples/DeleteVault.json" } } }, "patch": { "tags": [ "Vaults" ], "description": "Updates the vault.", "operationId": "Vaults_Update", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "$ref": "#/parameters/SubscriptionId" }, { "$ref": "#/parameters/ApiVersion" }, { "$ref": "#/parameters/ResourceGroupName" }, { "$ref": "#/parameters/VaultName" }, { "name": "vault", "in": "body", "description": "Recovery Services Vault to be created.", "required": true, "schema": { "$ref": "#/definitions/PatchVault" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/Vault" } }, "201": { "description": "Created", "schema": { "$ref": "#/definitions/Vault" } } }, "deprecated": false, "x-ms-examples": { "Update Resource": { "$ref": "./examples/PATCHVault.json" } } } }, "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.RecoveryServices/vaults/{vaultName}/extendedInformation/vaultExtendedInfo": { "get": { "tags": [ "VaultExtendedInfo" ], "description": "Get the vault extended info.", "operationId": "VaultExtendedInfo_Get", "produces": [ "application/json" ], "parameters": [ { "$ref": "#/parameters/SubscriptionId" }, { "$ref": "#/parameters/ApiVersion" }, { "$ref": "#/parameters/ResourceGroupName" }, { "$ref": "#/parameters/VaultName" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/VaultExtendedInfoResource" } } }, "deprecated": false, "x-ms-examples": { "Get ExtendedInfo of Resource": { "$ref": "./examples/GETVaultExtendedInfo.json" } } }, "put": { "tags": [ "VaultExtendedInfo" ], "description": "Create vault extended info.", "operationId": "VaultExtendedInfo_CreateOrUpdate", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "$ref": "#/parameters/SubscriptionId" }, { "$ref": "#/parameters/ResourceGroupName" }, { "$ref": "#/parameters/VaultName" }, { "$ref": "#/parameters/ApiVersion" }, { "name": "resourceResourceExtendedInfoDetails", "in": "body", "description": "Details of ResourceExtendedInfo", "required": true, "schema": { "$ref": "#/definitions/VaultExtendedInfoResource" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/VaultExtendedInfoResource" } } }, "deprecated": false, "x-ms-examples": { "Put ExtendedInfo of Resource": { "$ref": "./examples/UpdateVaultExtendedInfo.json" } } }, "patch": { "tags": [ "VaultExtendedInfo" ], "description": "Update vault extended info.", "operationId": "VaultExtendedInfo_Update", "consumes": [ "application/json" ], "produces": [ "application/json" ], "parameters": [ { "$ref": "#/parameters/SubscriptionId" }, { "$ref": "#/parameters/ResourceGroupName" }, { "$ref": "#/parameters/VaultName" }, { "$ref": "#/parameters/ApiVersion" }, { "name": "resourceResourceExtendedInfoDetails", "in": "body", "description": "Details of ResourceExtendedInfo", "required": true, "schema": { "$ref": "#/definitions/VaultExtendedInfoResource" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/VaultExtendedInfoResource" } } }, "deprecated": false, "x-ms-examples": { "PATCH ExtendedInfo of Resource": { "$ref": "./examples/UpdateVaultExtendedInfo.json" } } } } }, "definitions": { "CheckNameAvailabilityParameters": { "description": "Resource Name availability input parameters - Resource type and resource name", "type": "object", "properties": { "type": { "description": "Describes the Resource type: Microsoft.RecoveryServices/Vaults", "type": "string" }, "name": { "description": "Resource name for which availability needs to be checked", "type": "string" } } }, "CheckNameAvailabilityResult": { "description": "Response for check name availability API. Resource provider will set availability as true | false.", "type": "object", "properties": { "nameAvailable": { "type": "boolean" }, "reason": { "type": "string" }, "message": { "type": "string" } } }, "ClientDiscoveryDisplay": { "description": "Localized display information of an operation.", "type": "object", "properties": { "provider": { "description": "Name of the provider for display purposes", "type": "string" }, "resource": { "description": "ResourceType for which this Operation can be performed.", "type": "string" }, "operation": { "description": "Operations Name itself.", "type": "string" }, "description": { "description": "Description of the operation having details of what operation is about.", "type": "string" } } }, "ClientDiscoveryForLogSpecification": { "description": "Class to represent shoebox log specification in json client discovery.", "type": "object", "properties": { "name": { "description": "Name of the log.", "type": "string" }, "displayName": { "description": "Localized display name", "type": "string" }, "blobDuration": { "description": "Blobs created in customer storage account per hour", "type": "string" } } }, "ClientDiscoveryForProperties": { "description": "Class to represent shoebox properties in json client discovery.", "type": "object", "properties": { "serviceSpecification": { "$ref": "#/definitions/ClientDiscoveryForServiceSpecification", "description": "Operation properties." } } }, "ClientDiscoveryForServiceSpecification": { "description": "Class to represent shoebox service specification in json client discovery.", "type": "object", "properties": { "logSpecifications": { "description": "List of log specifications of this operation.", "type": "array", "items": { "$ref": "#/definitions/ClientDiscoveryForLogSpecification" } } } }, "ClientDiscoveryResponse": { "description": "Operations List response which contains list of available APIs.", "type": "object", "properties": { "value": { "description": "List of available operations.", "type": "array", "items": { "$ref": "#/definitions/ClientDiscoveryValueForSingleApi" } }, "nextLink": { "description": "Link to the next chunk of the response", "type": "string" } } }, "ClientDiscoveryValueForSingleApi": { "description": "Available operation details.", "type": "object", "properties": { "name": { "description": "Name of the Operation.", "type": "string" }, "display": { "$ref": "#/definitions/ClientDiscoveryDisplay", "description": "Contains the localized display information for this particular operation" }, "origin": { "description": "The intended executor of the operation;governs the display of the operation in the RBAC UX and the audit logs UX", "type": "string" }, "properties": { "$ref": "#/definitions/ClientDiscoveryForProperties", "description": "ShoeBox properties for the given operation." } } }, "Resource": { "description": "ARM Resource.", "type": "object", "properties": { "id": { "description": "Resource Id represents the complete path to the resource.", "type": "string", "readOnly": true }, "name": { "description": "Resource name associated with the resource.", "type": "string", "readOnly": true }, "type": { "description": "Resource type represents the complete path of the form Namespace/ResourceType/ResourceType/...", "type": "string", "readOnly": true }, "eTag": { "description": "Optional ETag.", "type": "string" } }, "x-ms-azure-resource": true }, "Sku": { "description": "Identifies the unique system identifier for each Azure resource.", "required": [ "name" ], "type": "object", "properties": { "name": { "description": "The Sku name.", "enum": [ "Standard", "RS0" ], "type": "string", "x-ms-enum": { "name": "SkuName", "modelAsString": true } } } }, "TrackedResource": { "description": "Tracked resource with location.", "type": "object", "required": [ "location" ], "allOf": [ { "$ref": "#/definitions/Resource" } ], "properties": { "location": { "description": "Resource location.", "type": "string" }, "tags": { "description": "Resource tags.", "type": "object", "additionalProperties": { "type": "string" } } } }, "PatchTrackedResource": { "description": "Tracked resource with location.", "type": "object", "allOf": [ { "$ref": "#/definitions/Resource" } ], "properties": { "location": { "description": "Resource location.", "type": "string" }, "tags": { "description": "Resource tags.", "type": "object", "additionalProperties": { "type": "string" } } } }, "UpgradeDetails": { "description": "Details for upgrading vault.", "type": "object", "properties": { "operationId": { "description": "ID of the vault upgrade operation.", "type": "string", "readOnly": true }, "startTimeUtc": { "description": "UTC time at which the upgrade operation has started.", "type": "string", "readOnly": true, "format": "date-time" }, "lastUpdatedTimeUtc": { "description": "UTC time at which the upgrade operation status was last updated.", "type": "string", "readOnly": true, "format": "date-time" }, "endTimeUtc": { "description": "UTC time at which the upgrade operation has ended.", "type": "string", "readOnly": true, "format": "date-time" }, "status": { "description": "Status of the vault upgrade operation.", "enum": [ "Unknown", "InProgress", "Upgraded", "Failed" ], "type": "string", "readOnly": true, "x-ms-enum": { "name": "VaultUpgradeState", "modelAsString": true } }, "message": { "description": "Message to the user containing information about the upgrade operation.", "type": "string", "readOnly": true }, "triggerType": { "description": "The way the vault upgrade was triggered.", "enum": [ "UserTriggered", "ForcedUpgrade" ], "type": "string", "readOnly": true, "x-ms-enum": { "name": "TriggerType", "modelAsString": true } }, "upgradedResourceId": { "description": "Resource ID of the upgraded vault.", "type": "string", "readOnly": true }, "previousResourceId": { "description": "Resource ID of the vault before the upgrade.", "type": "string", "readOnly": true } } }, "Vault": { "description": "Resource information, as returned by the resource provider.", "type": "object", "allOf": [ { "$ref": "#/definitions/TrackedResource" } ], "properties": { "identity": { "$ref": "#/definitions/IdentityData" }, "properties": { "$ref": "#/definitions/VaultProperties" }, "sku": { "$ref": "#/definitions/Sku" } } }, "PatchVault": { "description": "Patch Resource information, as returned by the resource provider.", "type": "object", "allOf": [ { "$ref": "#/definitions/PatchTrackedResource" } ], "properties": { "properties": { "$ref": "#/definitions/VaultProperties" }, "sku": { "$ref": "#/definitions/Sku" }, "identity": { "$ref": "#/definitions/IdentityData" } } }, "VaultExtendedInfo": { "description": "Vault extended information.", "type": "object", "properties": { "integrityKey": { "description": "Integrity key.", "type": "string" }, "encryptionKey": { "description": "Encryption key.", "type": "string" }, "encryptionKeyThumbprint": { "description": "Encryption key thumbprint.", "type": "string" }, "algorithm": { "description": "Algorithm for Vault ExtendedInfo", "type": "string" } } }, "VaultExtendedInfoResource": { "description": "Vault extended information.", "type": "object", "allOf": [ { "$ref": "#/definitions/Resource" } ], "properties": { "properties": { "$ref": "#/definitions/VaultExtendedInfo", "x-ms-client-flatten": true } } }, "VaultList": { "description": "The response model for a list of Vaults.", "type": "object", "properties": { "value": { "type": "array", "items": { "$ref": "#/definitions/Vault" } }, "nextLink": { "type": "string", "readOnly": true } } }, "VaultProperties": { "description": "Properties of the vault.", "type": "object", "properties": { "provisioningState": { "description": "Provisioning State.", "type": "string", "readOnly": true }, "upgradeDetails": { "$ref": "#/definitions/UpgradeDetails" }, "privateEndpointConnections": { "type": "array", "items": { "$ref": "#/definitions/PrivateEndpointConnectionVaultProperties" }, "description": "List of private endpoint connection.", "readOnly": true }, "privateEndpointStateForBackup": { "description": "Private endpoint state for backup.", "enum": [ "None", "Enabled" ], "type": "string", "readOnly": true, "x-ms-enum": { "name": "VaultPrivateEndpointState", "modelAsString": true } }, "privateEndpointStateForSiteRecovery": { "description": "Private endpoint state for site recovery.", "enum": [ "None", "Enabled" ], "type": "string", "readOnly": true, "x-ms-enum": { "name": "VaultPrivateEndpointState", "modelAsString": true } } } }, "IdentityData": { "required": [ "type" ], "type": "object", "description": "Identity for the resource.", "properties": { "principalId": { "readOnly": true, "type": "string", "description": "The principal ID of resource identity." }, "tenantId": { "readOnly": true, "type": "string", "description": "The tenant ID of resource." }, "type": { "type": "string", "description": "The identity type.", "enum": [ "SystemAssigned", "None" ], "x-ms-enum": { "name": "ResourceIdentityType", "modelAsString": true } } } }, "PrivateEndpointConnectionVaultProperties": { "description": "Information to be stored in Vault properties as an element of privateEndpointConnections List.", "readOnly": true, "type": "object", "properties": { "id": { "description": "Format of id subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.[Service]/{resource}/{resourceName}/privateEndpointConnections/{connectionName}.", "readOnly": true, "type": "string" }, "properties": { "$ref": "#/definitions/PrivateEndpointConnection" } } }, "PrivateEndpointConnection": { "description": "Private Endpoint Connection Response Properties.", "readOnly": true, "type": "object", "properties": { "provisioningState": { "description": "Gets or sets provisioning state of the private endpoint connection.", "readOnly": true, "enum": [ "Succeeded", "Deleting", "Failed", "Pending" ], "type": "string", "x-ms-enum": { "name": "ProvisioningState", "modelAsString": true } }, "privateEndpoint": { "$ref": "#/definitions/PrivateEndpoint" }, "privateLinkServiceConnectionState": { "$ref": "#/definitions/PrivateLinkServiceConnectionState" } } }, "PrivateEndpoint": { "description": "The Private Endpoint network resource that is linked to the Private Endpoint connection.", "readOnly": true, "type": "object", "properties": { "id": { "description": "Gets or sets id.", "readOnly": true, "type": "string" } } }, "PrivateLinkServiceConnectionState": { "description": "Gets or sets private link service connection state.", "readOnly": true, "type": "object", "properties": { "status": { "description": "Gets or sets the status.", "readOnly": true, "enum": [ "Pending", "Approved", "Rejected", "Disconnected" ], "type": "string", "x-ms-enum": { "name": "PrivateEndpointConnectionStatus", "modelAsString": true } }, "description": { "description": "Gets or sets description.", "readOnly": true, "type": "string" }, "actionsRequired": { "description": "Gets or sets actions required.", "readOnly": true, "type": "string" } } }, "PrivateLinkResources": { "description": "Class which represent the stamps associated with the vault.", "readOnly": true, "type": "object", "properties": { "value": { "description": "A collection of private link resources", "type": "array", "items": { "$ref": "#/definitions/PrivateLinkResource" } }, "nextLink": { "description": "Link to the next chunk of the response", "type": "string" } } }, "PrivateLinkResource": { "description": "Information of the private link resource.", "readOnly": true, "type": "object", "properties": { "properties": { "$ref": "#/definitions/PrivateLinkResourceProperties", "description": "Resource properties", "x-ms-client-flatten": true }, "id": { "description": "Fully qualified identifier of the resource.", "type": "string", "readOnly": true }, "name": { "description": "Name of the resource.", "type": "string", "readOnly": true }, "type": { "description": "e.g. Microsoft.RecoveryServices/vaults/privateLinkResources", "readOnly": true, "type": "string" } } }, "PrivateLinkResourceProperties": { "type": "object", "description": "Properties of the private link resource.", "properties": { "groupId": { "description": "e.g. f9ad6492-33d4-4690-9999-6bfd52a0d081 (Backup) or f9ad6492-33d4-4690-9999-6bfd52a0d082 (SiteRecovery)", "readOnly": true, "type": "string" }, "requiredMembers": { "description": "[backup-ecs1, backup-prot1, backup-prot1b, backup-prot1c, backup-id1]", "readOnly": true, "type": "array", "items": { "type": "string" } }, "requiredZoneNames": { "description": "The private link resource Private link DNS zone name.", "readOnly": true, "type": "array", "items": { "type": "string" } } } } }, "parameters": { "SubscriptionId": { "name": "subscriptionId", "in": "path", "description": "The subscription Id.", "required": true, "type": "string" }, "ResourceGroupName": { "name": "resourceGroupName", "in": "path", "description": "The name of the resource group where the recovery services vault is present.", "required": true, "x-ms-parameter-location": "method", "type": "string" }, "VaultName": { "name": "vaultName", "in": "path", "description": "The name of the recovery services vault.", "required": true, "x-ms-parameter-location": "method", "type": "string" }, "ApiVersion": { "name": "api-version", "in": "query", "description": "Client Api Version.", "required": true, "type": "string" } }, "securityDefinitions": { "azure_auth": { "type": "oauth2", "description": "Azure Active Directory OAuth2 Flow", "flow": "implicit", "authorizationUrl": "https://login.microsoftonline.com/common/oauth2/authorize", "scopes": { "user_impersonation": "impersonate your user account." } } }, "security": [ { "azure_auth": [ "user_impersonation" ] } ] }