Reservoir API (except upload) (v1)

getServiceInfo

Get reservoir service information

Responses

Response samples

Content type
application/json
{
  • "name": "mod-reservoir",
  • "version": "1.0.0-SNAPSHOT",
  • "revision": "63f789c9628788d727d4afdd969c2419d779535e",
  • "links": [
    ]
}

getOaiConfig

Get OAI configuration

header Parameters
X-Okapi-Tenant
string

Okapi Tenant

X-Okapi-Token
string

Okapi Token

X-Okapi-Url
string

Okapi URL

Responses

Response samples

Content type
application/json
{
  • "transformer": "string",
  • "repositoryName": "string",
  • "baseURL": "string",
  • "adminEmail": "string"
}

putOaiConfig

Update OAI configuration.

header Parameters
X-Okapi-Tenant
string

Okapi Tenant

X-Okapi-Token
string

Okapi Token

X-Okapi-Url
string

Okapi URL

Request Body schema: application/json
transformer
string

OAI server response transformer invocation: 'moduleId<::function>' where <::function> is optional

repositoryName
string

OAI repository name

baseURL
string

OAI repository base URL

adminEmail
string

OAI repository admin email

Responses

Request samples

Content type
application/json
{
  • "transformer": "string",
  • "repositoryName": "string",
  • "baseURL": "string",
  • "adminEmail": "string"
}

Response samples

Content type
No sample

deleteOaiConfig

Update OAI configuration.

header Parameters
X-Okapi-Tenant
string

Okapi Tenant

X-Okapi-Token
string

Okapi Token

X-Okapi-Url
string

Okapi URL

Responses

Response samples

Content type
No sample

postPool

Create a pool

header Parameters
X-Okapi-Tenant
string

Okapi Tenant

X-Okapi-Token
string

Okapi Token

X-Okapi-Url
string

Okapi URL

Request Body schema: application/json
id
required
string

identifier

matcher
required
string

Comma-separated matcher module invocations. Each invocation has the form moduleId<::function>, where the ::function suffix is optional. Keys returned by all configured matchers are combined for clustering.

args
string
Enum: "full" "payload"

how arguments are passed to matcher, "full": full record, "payload": only record payload; if omitted, "payload" is used

cql
object

CQL query mapping from index name to module invocation string: moduleId<::function> (the ::function suffix is optional). For example: { "isbn": "module1::get_isbn", "issn": "module2::get_issn" }. A string which decodes to a JSON object is passed to the matcher for each field and term in a CQL query. The object has property "term" with the term value, and property "field" with the field name. The function should return a list with exactly one string value, which is the result of transforming the input object.

update
string
Enum: "ingest" "manual"

"ingest": update when records are ingested, "manual": update only when initialize is called

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "matcher": "string",
  • "args": "full",
  • "cql": { },
  • "update": "ingest"
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "matcher": "string",
  • "args": "full",
  • "cql": { },
  • "update": "ingest"
}

getPools

Get pool configurations

query Parameters
count
string
Default: "none"
Enum: "exact" "none"

control of counting in queries

limit
integer >= 0
Default: 10

Limit the number of elements returned in the response

query
string

CQL query

offset
integer >= 0
Default: 0

Skip over number of elements (default is first element)

header Parameters
X-Okapi-Tenant
string

Okapi Tenant

X-Okapi-Token
string

Okapi Token

X-Okapi-Url
string

Okapi URL

Responses

Response samples

Content type
application/json
{
  • "pools": [
    ],
  • "resultInfo": {
    }
}

getPool

Get pool configuration

path Parameters
id
required
string

Pool identifier

header Parameters
X-Okapi-Tenant
string

Okapi Tenant

X-Okapi-Token
string

Okapi Token

X-Okapi-Url
string

Okapi URL

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "matcher": "string",
  • "args": "full",
  • "cql": { },
  • "update": "ingest"
}

deletePool

Delete pool configuration

path Parameters
id
required
string

Pool identifier

header Parameters
X-Okapi-Tenant
string

Okapi Tenant

X-Okapi-Token
string

Okapi Token

X-Okapi-Url
string

Okapi URL

Responses

Response samples

Content type
No sample

putPool

Update pool configuration

path Parameters
id
required
string

Pool identifier

header Parameters
X-Okapi-Tenant
string

Okapi Tenant

X-Okapi-Token
string

Okapi Token

X-Okapi-Url
string

Okapi URL

Request Body schema: application/json
id
required
string

identifier

matcher
required
string

Comma-separated matcher module invocations. Each invocation has the form moduleId<::function>, where the ::function suffix is optional. Keys returned by all configured matchers are combined for clustering.

args
string
Enum: "full" "payload"

how arguments are passed to matcher, "full": full record, "payload": only record payload; if omitted, "payload" is used

cql
object

CQL query mapping from index name to module invocation string: moduleId<::function> (the ::function suffix is optional). For example: { "isbn": "module1::get_isbn", "issn": "module2::get_issn" }. A string which decodes to a JSON object is passed to the matcher for each field and term in a CQL query. The object has property "term" with the term value, and property "field" with the field name. The function should return a list with exactly one string value, which is the result of transforming the input object.

update
string
Enum: "ingest" "manual"

"ingest": update when records are ingested, "manual": update only when initialize is called

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "matcher": "string",
  • "args": "full",
  • "cql": { },
  • "update": "ingest"
}

Response samples

Content type
No sample

initializePool

Recalculate clusters in the pool across all records

path Parameters
id
required
string

Pool identifier

header Parameters
X-Okapi-Tenant
string

Okapi Tenant

X-Okapi-Token
string

Okapi Token

X-Okapi-Url
string

Okapi URL

Responses

Response samples

Content type
application/json
{
  • "totalRecords": 0
}

statsPool

Get pool statistics

path Parameters
id
required
string

Pool identifier

header Parameters
X-Okapi-Tenant
string

Okapi Tenant

X-Okapi-Token
string

Okapi Token

X-Okapi-Url
string

Okapi URL

Responses

Response samples

Content type
application/json
{
  • "recordsTotal": 0,
  • "clustersTotal": 0,
  • "matchValuesPerCluster": { },
  • "recordsPerCluster": { },
  • "recordsPerClusterSample": { }
}

postConfigMatchKey Deprecated

Deprecated; create a pool using /reservoir/config/pools

header Parameters
X-Okapi-Tenant
string

Okapi Tenant

X-Okapi-Token
string

Okapi Token

X-Okapi-Url
string

Okapi URL

Request Body schema: application/json
id
required
string

identifier

matcher
required
string

Comma-separated matcher module invocations. Each invocation has the form moduleId<::function>, where the ::function suffix is optional. Keys returned by all configured matchers are combined for clustering.

args
string
Enum: "full" "payload"

how arguments are passed to matcher, "full": full record, "payload": only record payload; if omitted , "payload" is used

cql
object

CQL query mapping from index name to module invocation string: moduleId<::function> (the ::function suffix is optional). For example: { "isbn": "module1::get_isbn", "issn": "module2::get_issn" }. A string which decodes to a JSON object is passed to the matcher for each field and term in a CQL query. The object has property "term" with the term value, and property "field" with the field name. The function should return a list with exactly one string value, which is the result of transforming the input object.

update
string
Enum: "ingest" "manual"

"ingest": update when records are ingested, "manual": update only when initialize is called

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "matcher": "string",
  • "args": "full",
  • "cql": { },
  • "update": "ingest"
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "matcher": "string",
  • "args": "full",
  • "cql": { },
  • "update": "ingest"
}

getConfigMatchKeys Deprecated

Deprecated; get pool configurations using /reservoir/config/pools

query Parameters
count
string
Default: "none"
Enum: "exact" "none"

control of counting in queries

limit
integer >= 0
Default: 10

Limit the number of elements returned in the response

query
string

CQL query

offset
integer >= 0
Default: 0

Skip over number of elements (default is first element)

header Parameters
X-Okapi-Tenant
string

Okapi Tenant

X-Okapi-Token
string

Okapi Token

X-Okapi-Url
string

Okapi URL

Responses

Response samples

Content type
application/json
{
  • "matchKeys": [
    ],
  • "resultInfo": {
    }
}

getConfigMatchKey Deprecated

Deprecated; get the pool using /reservoir/config/pools/{id}

path Parameters
id
required
string

Pool identifier used by the deprecated endpoint

header Parameters
X-Okapi-Tenant
string

Okapi Tenant

X-Okapi-Token
string

Okapi Token

X-Okapi-Url
string

Okapi URL

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "matcher": "string",
  • "args": "full",
  • "cql": { },
  • "update": "ingest"
}

deleteConfigMatchKey Deprecated

Deprecated; delete the pool using /reservoir/config/pools/{id}

path Parameters
id
required
string

Pool identifier used by the deprecated endpoint

header Parameters
X-Okapi-Tenant
string

Okapi Tenant

X-Okapi-Token
string

Okapi Token

X-Okapi-Url
string

Okapi URL

Responses

Response samples

Content type
No sample

putConfigMatchKey Deprecated

Deprecated; update the pool using /reservoir/config/pools/{id}

path Parameters
id
required
string

Pool identifier used by the deprecated endpoint

header Parameters
X-Okapi-Tenant
string

Okapi Tenant

X-Okapi-Token
string

Okapi Token

X-Okapi-Url
string

Okapi URL

Request Body schema: application/json
id
required
string

identifier

matcher
required
string

Comma-separated matcher module invocations. Each invocation has the form moduleId<::function>, where the ::function suffix is optional. Keys returned by all configured matchers are combined for clustering.

args
string
Enum: "full" "payload"

how arguments are passed to matcher, "full": full record, "payload": only record payload; if omitted , "payload" is used

cql
object

CQL query mapping from index name to module invocation string: moduleId<::function> (the ::function suffix is optional). For example: { "isbn": "module1::get_isbn", "issn": "module2::get_issn" }. A string which decodes to a JSON object is passed to the matcher for each field and term in a CQL query. The object has property "term" with the term value, and property "field" with the field name. The function should return a list with exactly one string value, which is the result of transforming the input object.

update
string
Enum: "ingest" "manual"

"ingest": update when records are ingested, "manual": update only when initialize is called

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "matcher": "string",
  • "args": "full",
  • "cql": { },
  • "update": "ingest"
}

Response samples

Content type
No sample

initializeMatchKey Deprecated

Deprecated; initialize the pool using /reservoir/config/pools/{id}/initialize

path Parameters
id
required
string

Pool identifier used by the deprecated endpoint

header Parameters
X-Okapi-Tenant
string

Okapi Tenant

X-Okapi-Token
string

Okapi Token

X-Okapi-Url
string

Okapi URL

Responses

Response samples

Content type
application/json
{
  • "totalRecords": 0
}

statsMatchKey Deprecated

Deprecated; get pool statistics using /reservoir/config/pools/{id}/stats

path Parameters
id
required
string

Pool identifier used by the deprecated endpoint

header Parameters
X-Okapi-Tenant
string

Okapi Tenant

X-Okapi-Token
string

Okapi Token

X-Okapi-Url
string

Okapi URL

Responses

Response samples

Content type
application/json
{
  • "recordsTotal": 0,
  • "clustersTotal": 0,
  • "matchValuesPerCluster": { },
  • "recordsPerCluster": { },
  • "recordsPerClusterSample": { }
}

postCodeModule

Create a new code module

header Parameters
X-Okapi-Tenant
string

Okapi Tenant

X-Okapi-Token
string

Okapi Token

X-Okapi-Url
string

Okapi URL

Request Body schema: application/json
id
required
string

local identifier of the module, name

type
string
Enum: "jsonpath" "javascript"

type of the module'

url
string

HTTP URL of the module e.g GitHub url, required if no 'script' specified

function
string
Deprecated

DEPRECATED: do not use, specify function during invocation

script
string

inline contents of the code module

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "type": "jsonpath",
  • "url": "string",
  • "function": "string",
  • "script": "string"
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "type": "jsonpath",
  • "url": "string",
  • "function": "string",
  • "script": "string"
}

getCodeModules

Retrieve all code modules

query Parameters
count
string
Default: "none"
Enum: "exact" "none"

control of counting in queries

limit
integer >= 0
Default: 10

Limit the number of elements returned in the response

query
string

CQL query

offset
integer >= 0
Default: 0

Skip over number of elements (default is first element)

header Parameters
X-Okapi-Tenant
string

Okapi Tenant

X-Okapi-Token
string

Okapi Token

X-Okapi-Url
string

Okapi URL

Responses

Response samples

Content type
application/json
{
  • "modules": [
    ],
  • "resultInfo": {
    }
}

getCodeModule

Retrieve a code module by id

path Parameters
id
required
string

code module identifier

header Parameters
X-Okapi-Tenant
string

Okapi Tenant

X-Okapi-Token
string

Okapi Token

X-Okapi-Url
string

Okapi URL

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "type": "jsonpath",
  • "url": "string",
  • "function": "string",
  • "script": "string"
}

putCodeModule

Update code module by id

path Parameters
id
required
string

code module identifier

header Parameters
X-Okapi-Tenant
string

Okapi Tenant

X-Okapi-Token
string

Okapi Token

X-Okapi-Url
string

Okapi URL

Request Body schema: application/json
id
required
string

local identifier of the module, name

type
string
Enum: "jsonpath" "javascript"

type of the module'

url
string

HTTP URL of the module e.g GitHub url, required if no 'script' specified

function
string
Deprecated

DEPRECATED: do not use, specify function during invocation

script
string

inline contents of the code module

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "type": "jsonpath",
  • "url": "string",
  • "function": "string",
  • "script": "string"
}

Response samples

Content type
No sample

deleteCodeModule

Delete code module by id

path Parameters
id
required
string

code module identifier

header Parameters
X-Okapi-Tenant
string

Okapi Tenant

X-Okapi-Token
string

Okapi Token

X-Okapi-Url
string

Okapi URL

Responses

Response samples

Content type
No sample

reloadCodeModule

Force module to be reloaded

path Parameters
id
required
string

code module identifier

header Parameters
X-Okapi-Tenant
string

Okapi Tenant

X-Okapi-Token
string

Okapi Token

X-Okapi-Url
string

Okapi URL

Responses

Response samples

Content type
No sample

getGlobalRecords

Get records that satisfy CQL query with fields localId, sourceId, globalId.

query Parameters
count
string
Default: "none"
Enum: "exact" "none"

control of counting in queries

limit
integer >= 0
Default: 10

Limit the number of elements returned in the response

query
string

CQL query

offset
integer >= 0
Default: 0

Skip over number of elements (default is first element)

header Parameters
X-Okapi-Tenant
string

Okapi Tenant

X-Okapi-Token
string

Okapi Token

X-Okapi-Url
string

Okapi URL

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "resultInfo": {
    }
}

putGlobalRecords

Create or update records.

header Parameters
X-Okapi-Tenant
string

Okapi Tenant

X-Okapi-Token
string

Okapi Token

X-Okapi-Url
string

Okapi URL

Request Body schema: application/json
sourceId
required
string

Source identifier

sourceVersion
integer

Source version

required
Array of objects (ingestRecordChunk)

Ingest job records chunk

Array
localId
required
string

Local identifier

delete
boolean

If true, record is deleted. Default: false

payload
object

Payload in JSON

Responses

Request samples

Content type
application/json
{
  • "sourceId": "string",
  • "sourceVersion": 0,
  • "records": [
    ]
}

Response samples

Content type
application/json
[
  • {
    }
]

deleteGlobalRecords

Delete global records.

query Parameters
query
string

CQL query

header Parameters
X-Okapi-Tenant
string

Okapi Tenant

X-Okapi-Token
string

Okapi Token

X-Okapi-Url
string

Okapi URL

Responses

Response samples

Content type
No sample

getGlobalRecord

Get record with global identifier.

path Parameters
globalId
required
string <uuid>

global identifier

header Parameters
X-Okapi-Tenant
string

Okapi Tenant

X-Okapi-Token
string

Okapi Token

X-Okapi-Url
string

Okapi URL

Responses

Response samples

Content type
application/json
{
  • "globalId": "acafdba6-01a5-49f1-8345-02e5e658483c",
  • "localId": "string",
  • "sourceId": "string",
  • "sourceVersion": 0,
  • "payload": { }
}

getClusters

Get clusters in a pool selected by poolId. The deprecated matchkeyid parameter is also accepted. Query is CQL with the following fields supported: matchValue, clusterId, globalId, localId, sourceId, sourceVersion.

query Parameters
count
string
Default: "none"
Enum: "exact" "none"

control of counting in queries

limit
integer >= 0
Default: 10

Limit the number of elements returned in the response

poolId
string

Pool identifier

matchkeyid
string
Deprecated

Deprecated pool identifier; use poolId instead

query
string

CQL query

offset
integer >= 0
Default: 0

Skip over number of elements (default is first element)

header Parameters
X-Okapi-Tenant
string

Okapi Tenant

X-Okapi-Token
string

Okapi Token

X-Okapi-Url
string

Okapi URL

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "resultInfo": {
    }
}

touchClusters

Update cluster timestamps. CQL must specify at least poolId and sourceId. The deprecated matchkeyId field is also accepted. The sourceVersion and clusterId are optional.

query Parameters
query
string

CQL query

header Parameters
X-Okapi-Tenant
string

Okapi Tenant

X-Okapi-Token
string

Okapi Token

X-Okapi-Url
string

Okapi URL

Responses

Response samples

Content type
application/json
{
  • "count": 0
}

getCluster

Get cluster by identifier

path Parameters
clusterId
required
string <uuid>

cluster identifier

header Parameters
X-Okapi-Tenant
string

Okapi Tenant

X-Okapi-Token
string

Okapi Token

X-Okapi-Url
string

Okapi URL

Responses

Response samples

Content type
application/json
{
  • "clusterId": "a3d24843-7014-4490-bdd3-b7cb39b400c8",
  • "datestamp": "2019-08-24T14:15:22Z",
  • "records": [
    ],
  • "matchValues": [
    ]
}

postOaiPmhClient

Create OAI PMH client job

header Parameters
X-Okapi-Tenant
string

Okapi Tenant

X-Okapi-Token
string

Okapi Token

X-Okapi-Url
string

Okapi URL

Request Body schema: application/json
from
string

OAI PMH from date

id
required
string

OAI PMH Client identifier

headers
object

Additional HTTP headers to be used against OAI server with keys and string values

metadataPrefix
string

OAI PMH metadata prefix

params
object

Additional query parameters with keys and string values

resumptionToken
string

OAI PMH resumption token

numberRetries
integer

Number of retries for temporary errors before giving up (default 3)

waitRetries
integer

Number of seconds to wait between retries (default 10)

set
string

OAI PMH set as returned in verb=ListSets

sourceId
required
string

Source identifier used for storing records

sourceVersion
integer

Source version used for storing records

until
string

OAI PMH until date

url
required
string

OAI PMH server prefix so that PREFIX?verb=.. works

xmlFixing
boolean

Attempt to fix malformed server response by removing invalid chars

Responses

Request samples

Content type
application/json
{
  • "from": "string",
  • "id": "string",
  • "headers": { },
  • "metadataPrefix": "string",
  • "params": { },
  • "resumptionToken": "string",
  • "numberRetries": 0,
  • "waitRetries": 0,
  • "set": "string",
  • "sourceId": "string",
  • "sourceVersion": 0,
  • "until": "string",
  • "url": "string",
  • "xmlFixing": true
}

Response samples

Content type
application/json
{
  • "from": "string",
  • "id": "string",
  • "headers": { },
  • "metadataPrefix": "string",
  • "params": { },
  • "resumptionToken": "string",
  • "numberRetries": 0,
  • "waitRetries": 0,
  • "set": "string",
  • "sourceId": "string",
  • "sourceVersion": 0,
  • "until": "string",
  • "url": "string",
  • "xmlFixing": true
}

getCollectionOaiPmhClient

Get all OAI PMH client jobs

header Parameters
X-Okapi-Tenant
string

Okapi Tenant

X-Okapi-Token
string

Okapi Token

X-Okapi-Url
string

Okapi URL

Responses

Response samples

Content type
application/json
{
  • "from": "string",
  • "id": "string",
  • "headers": { },
  • "metadataPrefix": "string",
  • "params": { },
  • "resumptionToken": "string",
  • "numberRetries": 0,
  • "waitRetries": 0,
  • "set": "string",
  • "sourceId": "string",
  • "sourceVersion": 0,
  • "until": "string",
  • "url": "string",
  • "xmlFixing": true
}

getOaiPmhClient

Get OAI-PMH client

path Parameters
id
required
string

OAI-PMH client identifier

header Parameters
X-Okapi-Tenant
string

Okapi Tenant

X-Okapi-Token
string

Okapi Token

X-Okapi-Url
string

Okapi URL

Responses

Response samples

Content type
application/json
{
  • "from": "string",
  • "id": "string",
  • "headers": { },
  • "metadataPrefix": "string",
  • "params": { },
  • "resumptionToken": "string",
  • "numberRetries": 0,
  • "waitRetries": 0,
  • "set": "string",
  • "sourceId": "string",
  • "sourceVersion": 0,
  • "until": "string",
  • "url": "string",
  • "xmlFixing": true
}

putOaiPmhClient

Update OAI-PMH client

path Parameters
id
required
string

OAI-PMH client identifier

header Parameters
X-Okapi-Tenant
string

Okapi Tenant

X-Okapi-Token
string

Okapi Token

X-Okapi-Url
string

Okapi URL

Request Body schema: application/json
from
string

OAI PMH from date

id
required
string

OAI PMH Client identifier

headers
object

Additional HTTP headers to be used against OAI server with keys and string values

metadataPrefix
string

OAI PMH metadata prefix

params
object

Additional query parameters with keys and string values

resumptionToken
string

OAI PMH resumption token

numberRetries
integer

Number of retries for temporary errors before giving up (default 3)

waitRetries
integer

Number of seconds to wait between retries (default 10)

set
string

OAI PMH set as returned in verb=ListSets

sourceId
required
string

Source identifier used for storing records

sourceVersion
integer

Source version used for storing records

until
string

OAI PMH until date

url
required
string

OAI PMH server prefix so that PREFIX?verb=.. works

xmlFixing
boolean

Attempt to fix malformed server response by removing invalid chars

Responses

Request samples

Content type
application/json
{
  • "from": "string",
  • "id": "string",
  • "headers": { },
  • "metadataPrefix": "string",
  • "params": { },
  • "resumptionToken": "string",
  • "numberRetries": 0,
  • "waitRetries": 0,
  • "set": "string",
  • "sourceId": "string",
  • "sourceVersion": 0,
  • "until": "string",
  • "url": "string",
  • "xmlFixing": true
}

Response samples

Content type
No sample

deleteOaiPmhClient

Delete OAI-PMH client

path Parameters
id
required
string

OAI-PMH client identifier

header Parameters
X-Okapi-Tenant
string

Okapi Tenant

X-Okapi-Token
string

Okapi Token

X-Okapi-Url
string

Okapi URL

Responses

Response samples

Content type
No sample

startOaiPmhClient

Start OAI PMH client job

path Parameters
id
required
string

OAI-PMH client identifier; "_all" for all clients

header Parameters
X-Okapi-Tenant
string

Okapi Tenant

X-Okapi-Token
string

Okapi Token

X-Okapi-Url
string

Okapi URL

Responses

Response samples

Content type
No sample

stopOaiPmhClient

Stop OAI PMH client job

path Parameters
id
required
string

OAI-PMH client identifier; "_all" for all clients

header Parameters
X-Okapi-Tenant
string

Okapi Tenant

X-Okapi-Token
string

Okapi Token

X-Okapi-Url
string

Okapi URL

Responses

Response samples

Content type
No sample

statusOaiPmhClient

Get OAI PMH client status

path Parameters
id
required
string

OAI-PMH client identifier; "_all" for all clients

header Parameters
X-Okapi-Tenant
string

Okapi Tenant

X-Okapi-Token
string

Okapi Token

X-Okapi-Url
string

Okapi URL

Responses

Response samples

Content type
application/json
{
  • "items": [
    ]
}