{
  "openapi": "3.0.3",
  "info": {
    "title": "sondahub Azure Key Vault sandbox",
    "version": "0.14.2",
    "description": "An independent imitation of Azure Key Vault’s secrets API for testing, run by sondahub — not affiliated with or endorsed by Microsoft. No Azure subscription is involved.\n\nThe vault is the API host itself: https://api.sondahub.com/secrets…, because the SDKs read the vault from the host of each id they get back. A request without a token answers 401 with Key Vault’s challenge (WWW-Authenticate: Bearer authorization=\"…/9e3779b1-c302-605a-db25-3734c1b23920\", resource=\"…\"); any bearer token is then accepted. The SDKs get one from the sign-in at https://api.sondahub.com/sandbox/azure-key-vault/login/{tenant}.\n\nWrites live in the X-Sondahub-Session token each answer carries: send the newest one back as a header and the next request sees what you made; without it every request starts from the seed vault. More at https://sondahub.com/sandboxes/azure-key-vault/",
    "contact": {
      "name": "sondahub",
      "url": "https://sondahub.com/sandboxes/azure-key-vault/"
    }
  },
  "externalDocs": {
    "description": "The sandbox, in full",
    "url": "https://sondahub.com/sandboxes/azure-key-vault/"
  },
  "servers": [
    {
      "url": "https://api.sondahub.com"
    }
  ],
  "security": [
    {
      "bearer": []
    }
  ],
  "tags": [
    {
      "name": "Secrets",
      "description": "Set, read, update and list secrets and their versions."
    },
    {
      "name": "Deleted secrets",
      "description": "Soft delete: recover within 90 days, or purge."
    },
    {
      "name": "Backup",
      "description": "Every version of a secret in one opaque blob."
    },
    {
      "name": "Sign-in",
      "description": "Microsoft Entra ID, client credentials: the token the vault challenges for."
    }
  ],
  "paths": {
    "/secrets/{secret-name}": {
      "put": {
        "tags": [
          "Secrets"
        ],
        "summary": "Set a secret (a new version)",
        "operationId": "SetSecret",
        "description": "A new name makes the secret; an existing one gets a new version, which becomes the latest. A name deleted but still recoverable answers 409 ObjectIsDeletedButRecoverable.",
        "parameters": [
          {
            "name": "secret-name",
            "in": "path",
            "required": true,
            "description": "The secret’s name: letters, digits and dashes, up to 127.",
            "schema": {
              "type": "string"
            },
            "example": "my-api-key"
          },
          {
            "name": "api-version",
            "in": "query",
            "required": false,
            "description": "Required on every call: 2016-10-01, 7.0, 7.1, 7.2, 7.3, 7.4, 7.5, 7.6, 2025-07-01.",
            "schema": {
              "type": "string"
            },
            "example": "2025-07-01"
          }
        ],
        "responses": {
          "200": {
            "description": "The object.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          },
          "409": {
            "$ref": "#/components/responses/E409"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "value": {
                    "type": "string",
                    "description": "The value (up to 25 KB).",
                    "example": "s3cr3t-value"
                  },
                  "contentType": {
                    "type": "string",
                    "description": "What the value is.",
                    "example": "text/plain"
                  },
                  "tags": {
                    "type": "object",
                    "description": "Up to 15 name/value pairs.",
                    "example": {
                      "env": "dev"
                    }
                  },
                  "attributes": {
                    "type": "object",
                    "description": "enabled, nbf and exp (Unix seconds).",
                    "example": {
                      "enabled": true
                    }
                  }
                },
                "required": [
                  "value"
                ],
                "example": {
                  "value": "s3cr3t-value",
                  "contentType": "text/plain",
                  "tags": {
                    "env": "dev"
                  }
                }
              },
              "example": {
                "value": "s3cr3t-value",
                "contentType": "text/plain",
                "tags": {
                  "env": "dev"
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "Secrets"
        ],
        "summary": "Get the latest version",
        "operationId": "GetSecret",
        "description": "The value, its id (vault/secrets/name/version) and attributes. A disabled version answers 403 SecretDisabled.",
        "parameters": [
          {
            "name": "secret-name",
            "in": "path",
            "required": true,
            "description": "The secret’s name: letters, digits and dashes, up to 127.",
            "schema": {
              "type": "string"
            },
            "example": "orders-db-connection"
          },
          {
            "name": "api-version",
            "in": "query",
            "required": false,
            "description": "Required on every call: 2016-10-01, 7.0, 7.1, 7.2, 7.3, 7.4, 7.5, 7.6, 2025-07-01.",
            "schema": {
              "type": "string"
            },
            "example": "2025-07-01"
          }
        ],
        "responses": {
          "200": {
            "description": "The object.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "403": {
            "$ref": "#/components/responses/E403"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          }
        }
      },
      "delete": {
        "tags": [
          "Deleted secrets"
        ],
        "summary": "Delete a secret",
        "operationId": "DeleteSecret",
        "description": "It moves to /deletedsecrets, recoverable for 90 days; its name can’t be reused until it is recovered or purged.",
        "parameters": [
          {
            "name": "secret-name",
            "in": "path",
            "required": true,
            "description": "The secret’s name: letters, digits and dashes, up to 127.",
            "schema": {
              "type": "string"
            },
            "example": "sendgrid-api-key"
          },
          {
            "name": "api-version",
            "in": "query",
            "required": false,
            "description": "Required on every call: 2016-10-01, 7.0, 7.1, 7.2, 7.3, 7.4, 7.5, 7.6, 2025-07-01.",
            "schema": {
              "type": "string"
            },
            "example": "2025-07-01"
          }
        ],
        "responses": {
          "200": {
            "description": "The object.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          }
        }
      }
    },
    "/secrets/{secret-name}/{secret-version}": {
      "get": {
        "tags": [
          "Secrets"
        ],
        "summary": "Get one version",
        "operationId": "GetSecretVersion",
        "parameters": [
          {
            "name": "secret-name",
            "in": "path",
            "required": true,
            "description": "The secret’s name: letters, digits and dashes, up to 127.",
            "schema": {
              "type": "string"
            },
            "example": "stripe-api-key"
          },
          {
            "name": "secret-version",
            "in": "path",
            "required": true,
            "description": "A version id (32 hex digits) — leave empty for the latest.",
            "schema": {
              "type": "string"
            },
            "example": ""
          },
          {
            "name": "api-version",
            "in": "query",
            "required": false,
            "description": "Required on every call: 2016-10-01, 7.0, 7.1, 7.2, 7.3, 7.4, 7.5, 7.6, 2025-07-01.",
            "schema": {
              "type": "string"
            },
            "example": "2025-07-01"
          }
        ],
        "responses": {
          "200": {
            "description": "The object.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "403": {
            "$ref": "#/components/responses/E403"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          }
        }
      },
      "patch": {
        "tags": [
          "Secrets"
        ],
        "summary": "Update a version’s attributes",
        "operationId": "UpdateSecret",
        "description": "Not the value: set a new version for that. Answers without the value, as Key Vault does.",
        "parameters": [
          {
            "name": "secret-name",
            "in": "path",
            "required": true,
            "description": "The secret’s name: letters, digits and dashes, up to 127.",
            "schema": {
              "type": "string"
            },
            "example": "app-settings"
          },
          {
            "name": "secret-version",
            "in": "path",
            "required": true,
            "description": "A version id (32 hex digits) — leave empty for the latest.",
            "schema": {
              "type": "string"
            },
            "example": ""
          },
          {
            "name": "api-version",
            "in": "query",
            "required": false,
            "description": "Required on every call: 2016-10-01, 7.0, 7.1, 7.2, 7.3, 7.4, 7.5, 7.6, 2025-07-01.",
            "schema": {
              "type": "string"
            },
            "example": "2025-07-01"
          }
        ],
        "responses": {
          "200": {
            "description": "The object.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          }
        },
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "contentType": {
                    "type": "string",
                    "description": "A new content type."
                  },
                  "tags": {
                    "type": "object",
                    "description": "Replaces the tags."
                  },
                  "attributes": {
                    "type": "object",
                    "description": "enabled, nbf, exp."
                  }
                },
                "example": {
                  "attributes": {
                    "enabled": false
                  },
                  "tags": {
                    "env": "staging",
                    "owner": "web"
                  }
                }
              },
              "example": {
                "attributes": {
                  "enabled": false
                },
                "tags": {
                  "env": "staging",
                  "owner": "web"
                }
              }
            }
          }
        }
      }
    },
    "/secrets": {
      "get": {
        "tags": [
          "Secrets"
        ],
        "summary": "List secrets",
        "operationId": "GetSecrets",
        "description": "Each secret’s latest attributes, without values.",
        "parameters": [
          {
            "name": "api-version",
            "in": "query",
            "required": false,
            "description": "Required on every call: 2016-10-01, 7.0, 7.1, 7.2, 7.3, 7.4, 7.5, 7.6, 2025-07-01.",
            "schema": {
              "type": "string"
            },
            "example": "2025-07-01"
          },
          {
            "name": "maxresults",
            "in": "query",
            "required": false,
            "description": "Up to 25 per page; follow nextLink for more.",
            "schema": {
              "type": "integer"
            },
            "example": 25
          }
        ],
        "responses": {
          "200": {
            "description": "The object.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          }
        }
      }
    },
    "/secrets/{secret-name}/versions": {
      "get": {
        "tags": [
          "Secrets"
        ],
        "summary": "List a secret’s versions",
        "operationId": "GetSecretVersions",
        "parameters": [
          {
            "name": "secret-name",
            "in": "path",
            "required": true,
            "description": "The secret’s name: letters, digits and dashes, up to 127.",
            "schema": {
              "type": "string"
            },
            "example": "stripe-api-key"
          },
          {
            "name": "api-version",
            "in": "query",
            "required": false,
            "description": "Required on every call: 2016-10-01, 7.0, 7.1, 7.2, 7.3, 7.4, 7.5, 7.6, 2025-07-01.",
            "schema": {
              "type": "string"
            },
            "example": "2025-07-01"
          },
          {
            "name": "maxresults",
            "in": "query",
            "required": false,
            "description": "Up to 25 per page; follow nextLink for more.",
            "schema": {
              "type": "integer"
            },
            "example": 25
          }
        ],
        "responses": {
          "200": {
            "description": "The object.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          }
        }
      }
    },
    "/deletedsecrets": {
      "get": {
        "tags": [
          "Deleted secrets"
        ],
        "summary": "List deleted secrets",
        "operationId": "GetDeletedSecrets",
        "parameters": [
          {
            "name": "api-version",
            "in": "query",
            "required": false,
            "description": "Required on every call: 2016-10-01, 7.0, 7.1, 7.2, 7.3, 7.4, 7.5, 7.6, 2025-07-01.",
            "schema": {
              "type": "string"
            },
            "example": "2025-07-01"
          },
          {
            "name": "maxresults",
            "in": "query",
            "required": false,
            "description": "Up to 25 per page; follow nextLink for more.",
            "schema": {
              "type": "integer"
            },
            "example": 25
          }
        ],
        "responses": {
          "200": {
            "description": "The object.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          }
        }
      }
    },
    "/deletedsecrets/{secret-name}": {
      "get": {
        "tags": [
          "Deleted secrets"
        ],
        "summary": "Get a deleted secret",
        "operationId": "GetDeletedSecret",
        "parameters": [
          {
            "name": "secret-name",
            "in": "path",
            "required": true,
            "description": "The secret’s name: letters, digits and dashes, up to 127.",
            "schema": {
              "type": "string"
            },
            "example": "old-webhook-secret"
          },
          {
            "name": "api-version",
            "in": "query",
            "required": false,
            "description": "Required on every call: 2016-10-01, 7.0, 7.1, 7.2, 7.3, 7.4, 7.5, 7.6, 2025-07-01.",
            "schema": {
              "type": "string"
            },
            "example": "2025-07-01"
          }
        ],
        "responses": {
          "200": {
            "description": "The object.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          }
        }
      },
      "delete": {
        "tags": [
          "Deleted secrets"
        ],
        "summary": "Purge a deleted secret",
        "operationId": "PurgeDeletedSecret",
        "parameters": [
          {
            "name": "secret-name",
            "in": "path",
            "required": true,
            "description": "The secret’s name: letters, digits and dashes, up to 127.",
            "schema": {
              "type": "string"
            },
            "example": "old-webhook-secret"
          },
          {
            "name": "api-version",
            "in": "query",
            "required": false,
            "description": "Required on every call: 2016-10-01, 7.0, 7.1, 7.2, 7.3, 7.4, 7.5, 7.6, 2025-07-01.",
            "schema": {
              "type": "string"
            },
            "example": "2025-07-01"
          }
        ],
        "responses": {
          "204": {
            "description": "Gone for good."
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          }
        }
      }
    },
    "/deletedsecrets/{secret-name}/recover": {
      "post": {
        "tags": [
          "Deleted secrets"
        ],
        "summary": "Recover a deleted secret",
        "operationId": "RecoverDeletedSecret",
        "parameters": [
          {
            "name": "secret-name",
            "in": "path",
            "required": true,
            "description": "The secret’s name: letters, digits and dashes, up to 127.",
            "schema": {
              "type": "string"
            },
            "example": "old-webhook-secret"
          },
          {
            "name": "api-version",
            "in": "query",
            "required": false,
            "description": "Required on every call: 2016-10-01, 7.0, 7.1, 7.2, 7.3, 7.4, 7.5, 7.6, 2025-07-01.",
            "schema": {
              "type": "string"
            },
            "example": "2025-07-01"
          }
        ],
        "responses": {
          "200": {
            "description": "The object.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          }
        }
      }
    },
    "/secrets/{secret-name}/backup": {
      "post": {
        "tags": [
          "Backup"
        ],
        "summary": "Back up a secret",
        "operationId": "BackupSecret",
        "description": "value: a base64url blob, signed so a changed one is refused.",
        "parameters": [
          {
            "name": "secret-name",
            "in": "path",
            "required": true,
            "description": "The secret’s name: letters, digits and dashes, up to 127.",
            "schema": {
              "type": "string"
            },
            "example": "app-settings"
          },
          {
            "name": "api-version",
            "in": "query",
            "required": false,
            "description": "Required on every call: 2016-10-01, 7.0, 7.1, 7.2, 7.3, 7.4, 7.5, 7.6, 2025-07-01.",
            "schema": {
              "type": "string"
            },
            "example": "2025-07-01"
          }
        ],
        "responses": {
          "200": {
            "description": "The object.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          }
        }
      }
    },
    "/secrets/restore": {
      "post": {
        "tags": [
          "Backup"
        ],
        "summary": "Restore a backup",
        "operationId": "RestoreSecret",
        "description": "Only into a vault that does not have the name (purge it first).",
        "parameters": [
          {
            "name": "api-version",
            "in": "query",
            "required": false,
            "description": "Required on every call: 2016-10-01, 7.0, 7.1, 7.2, 7.3, 7.4, 7.5, 7.6, 2025-07-01.",
            "schema": {
              "type": "string"
            },
            "example": "2025-07-01"
          }
        ],
        "responses": {
          "200": {
            "description": "The object.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          },
          "409": {
            "$ref": "#/components/responses/E409"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "value": {
                    "type": "string",
                    "description": "The blob from backup."
                  }
                },
                "required": [
                  "value"
                ],
                "example": {
                  "value": "<the value from backup>"
                }
              },
              "example": {
                "value": "<the value from backup>"
              }
            }
          }
        }
      }
    },
    "/sandbox/azure-key-vault/login/{tenant}/oauth2/v2.0/token": {
      "post": {
        "tags": [
          "Sign-in"
        ],
        "summary": "Get an access token",
        "operationId": "Token",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "required": true,
            "description": "The tenant the vault’s challenge names (any tenant id works here).",
            "schema": {
              "type": "string"
            },
            "example": "9e3779b1-c302-605a-db25-3734c1b23920"
          }
        ],
        "responses": {
          "200": {
            "description": "The object.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          }
        },
        "security": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "grant_type": {
                    "type": "string",
                    "description": "client_credentials",
                    "example": "client_credentials"
                  },
                  "client_id": {
                    "type": "string",
                    "description": "Any app id; 9e3779b1-6169-8a45-9fb9-5cba1e342fb5 has its secret checked.",
                    "example": "9e3779b1-6169-8a45-9fb9-5cba1e342fb5"
                  },
                  "client_secret": {
                    "type": "string",
                    "description": "The app’s secret.",
                    "example": "sondahub~sandbox.client-secret"
                  },
                  "scope": {
                    "type": "string",
                    "description": "The resource and /.default.",
                    "example": "https://sondahub.com/.default"
                  }
                },
                "required": [
                  "grant_type",
                  "client_id",
                  "scope"
                ],
                "example": {
                  "grant_type": "client_credentials",
                  "client_id": "9e3779b1-6169-8a45-9fb9-5cba1e342fb5",
                  "client_secret": "sondahub~sandbox.client-secret",
                  "scope": "https://sondahub.com/.default"
                }
              },
              "example": {
                "grant_type": "client_credentials",
                "client_id": "9e3779b1-6169-8a45-9fb9-5cba1e342fb5",
                "client_secret": "sondahub~sandbox.client-secret",
                "scope": "https://sondahub.com/.default"
              }
            }
          }
        }
      }
    },
    "/sandbox/azure-key-vault/login/{tenant}/v2.0/.well-known/openid-configuration": {
      "get": {
        "tags": [
          "Sign-in"
        ],
        "summary": "OpenID configuration",
        "operationId": "OpenIdConfiguration",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "required": true,
            "description": "The tenant.",
            "schema": {
              "type": "string"
            },
            "example": "9e3779b1-c302-605a-db25-3734c1b23920"
          }
        ],
        "responses": {
          "200": {
            "description": "The object.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "security": []
      }
    }
  },
  "components": {
    "securitySchemes": {
      "bearer": {
        "type": "http",
        "scheme": "bearer",
        "description": "Any token — or one from /sandbox/azure-key-vault/login/9e3779b1-c302-605a-db25-3734c1b23920/oauth2/v2.0/token."
      }
    },
    "responses": {
      "E400": {
        "description": "BadParameter: a name, body or api-version Key Vault would refuse.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "error": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "string"
                    },
                    "message": {
                      "type": "string"
                    },
                    "innererror": {
                      "type": "object"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "E401": {
        "description": "Unauthorized, with the bearer challenge.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "error": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "string"
                    },
                    "message": {
                      "type": "string"
                    },
                    "innererror": {
                      "type": "object"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "E403": {
        "description": "Forbidden: the version is disabled.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "error": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "string"
                    },
                    "message": {
                      "type": "string"
                    },
                    "innererror": {
                      "type": "object"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "E404": {
        "description": "SecretNotFound.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "error": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "string"
                    },
                    "message": {
                      "type": "string"
                    },
                    "innererror": {
                      "type": "object"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "E409": {
        "description": "Conflict: the name is deleted but recoverable, or already in the vault.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "error": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "string"
                    },
                    "message": {
                      "type": "string"
                    },
                    "innererror": {
                      "type": "object"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}