# LitmusEdgeManager 2.31.x API Documentation/Edge Lifecycle Management/Edge Devices - LE, LEM, LUNS API Docs

## Licenses Expiring in x Days

**GET** `{{LEM_URL}}/api/v1/device-licenses-monitor/expiring?expiryDays=10&projectId={{project_id}}`

# Licenses Expiring in x Days

Returns devices whose licenses will expire within `expiryDays` days. Used for proactive renewal alerts.
## Endpoint

```http
GET {{LEM_URL}}/api/v1/device-licenses-monitor/expiring?expiryDays=10&projectId={{project_id}}
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.
## Parameters

| Parameter      | Type    | Required | Description                                              |
|----------------|---------|----------|----------------------------------------------------------|
| `expiryDays`   | integer | Yes      | Days until expiry threshold.                              |
| `projectId`    | string  | Yes      | Project UUID.                                            |

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
[
    {
        "projectId": "string",
        "deviceId": "string",
        "deviceDescription": "string",
        "lastUpdate": "2019-08-24T14:15:22Z",
        "license": {
            "version": "PREMIUM",
            "defaultLicenseValidity": 0,
            "trialLength": 0,
            "allowVm": true,
            "numberOfSlots": 0,
            "customFields": {
                "property1": "string",
                "property2": "string"
            },
            "keys": {
                "property1": true,
                "property2": true
            }
        },
        "licenseStatus": "UNKNOWN",
        "prettyName": "string"
    }
]
```

---

## Expired Licenses

**GET** `{{LEM_URL}}/api/v1/device-licenses-monitor/expired?projectId={{project_id}}`

# Expired Licenses

Returns devices whose licenses have already expired in the project.
## Endpoint

```http
GET {{LEM_URL}}/api/v1/device-licenses-monitor/expired?projectId={{project_id}}
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.
## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
[
    {
        "projectId": "string",
        "deviceId": "string",
        "deviceDescription": "string",
        "lastUpdate": "2019-08-24T14:15:22Z",
        "license": {
            "version": "PREMIUM",
            "defaultLicenseValidity": 0,
            "trialLength": 0,
            "allowVm": true,
            "numberOfSlots": 0,
            "customFields": {
                "property1": "string",
                "property2": "string"
            },
            "keys": {
                "property1": true,
                "property2": true
            }
        },
        "licenseStatus": "UNKNOWN",
        "prettyName": "string"
    }
]
```

---

## Device Tags

**GET** `{{LEM_URL}}/api/v1/device/tags?projectId={{project_id}}`

# Device Tags

Returns the set of operator-assigned tag strings across every device in the project. Use as the source for a tag-filter picker in the LEM UI.
## Endpoint

```http
GET {{LEM_URL}}/api/v1/device/tags?projectId={{project_id}}
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.
## Response

`200 OK` -- `application/json`. Array of strings.

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
[
    "string"
]
```

---

## Device Version

**GET** `{{LEM_URL}}/api/v1/device/versions?projectId={{project_id}}`

# Device Version

Returns version distribution: each entry is one LE firmware version with the count of devices running it.
## Endpoint

```http
GET {{LEM_URL}}/api/v1/device/versions?projectId={{project_id}}
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.
## Response

`200 OK` -- `application/json`. Array of `{version, cnt}` objects.

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
[
    {
        "version": "3.8.0",
        "cnt": 1
    }
]
```

---

## Devices

**GET** `{{LEM_URL}}/api/v1/device?deviceStatus=ACTIVE&filter=&limit=10&order=CREATEDON_DESC&projectId={{project_id}}`

# Devices

Paginated and filterable device list for one project. Filters: status (`ACTIVE` / `INACTIVE`), text filter, sort order. The LEM UI's main device table uses this endpoint.
## Endpoint

```http
GET {{LEM_URL}}/api/v1/device?deviceStatus=ACTIVE&filter=&limit=10&order=CREATEDON_DESC&projectId={{project_id}}
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.
## Parameters

| Parameter        | Type    | Required | Description                                              |
|------------------|---------|----------|----------------------------------------------------------|
| `projectId`      | string  | Yes      | Project UUID.                                            |
| `deviceStatus`   | string  | No       | `ACTIVE` / `INACTIVE` / `ALL`.                            |
| `filter`         | string  | No       | Free-text filter.                                        |
| `limit`          | integer | No       | Page size.                                                |
| `order`          | string  | No       | Sort, e.g. `CREATEDON_DESC`, `NAME_ASC`.                  |

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
{
    "pageNum": 0,
    "pagesCount": 1,
    "size": 1,
    "totalSize": 1,
    "elements": [
        {
            "projectId": "462j1mq70mph31wa100t1yuxa",
            "deviceId": "1a5wiavluwxuhwai5leb1v0hc",
            "status": "ACTIVE",
            "statusTimestamp": 1691104169000,
            "properties": {
                "Firmware Version": {
                    "name": "Firmware Version",
                    "value": "3.8.0",
                    "datatype": "String",
                    "allowUpdateFromDevice": true
                },
                "Manufacturer": {
                    "name": "Manufacturer",
                    "value": "Intel Corporation",
                    "datatype": "String",
                    "allowUpdateFromDevice": true
                },
                "Latitude": {
                    "name": "Latitude",
                    "value": "37.3746029",
                    "datatype": "String",
                    "allowUpdateFromDevice": true
                },
                "Model Number": {
                    "name": "Model Number",
                    "value": "NUC7i5BNH",
                    "datatype": "String",
                    "allowUpdateFromDevice": true
                },
                "Longitude": {
                    "name": "Longitude",
                    "value": "-121.9223647",
                    "datatype": "String",
                    "allowUpdateFromDevice": true
                },
                "Serial Number": {
                    "name": "Serial Number",
                    "value": "G6BN80900DC7",
                    "datatype": "String",
                    "allowUpdateFromDevice": true
                },
                "modelName": {
                    "name": "modelName",
                    "value": "LoopEdge",
                    "datatype": "string",
                    "allowUpdateFromDevice": false
                },
                "virtualization": {
                    "name": "virtualization",
                    "value": null,
                    "datatype": "String",
                    "allowUpdateFromDevice": false
                }
            },
            "tags": [],
            "type": "LOOPEDGE",
            "objects": [
                {
                    "id": 4,
                    "instance": "null",
                    "resource": 3,
                    "objectDescription": "Connectivity Monitoring",
                    "resourceDescription": "Link Quality",
                    "mode": [
                        "READ"
                    ],
                    "observeStatus": false,
                    "modeAsInts": [
                        1
                    ]
                }
            ],
            "prettyName": "Litmus Edge (94:c6:91:1b:9c:77)- SJ office sensor",
            "description": null,
            "config": {
                "mqttHostName": "10.17.3.103",
                "mqttSslPort": "8883",
                "mqttServerCA": "-----BEGIN CERTIFICATE-----\nMIIDSzCCAjOgAwIBAgIUWBhOM2+MjE3RTvyUJBXhciF+UQgwDQYJKoZIhvcNAQELBQAwLTErMCkGA1UEAxMiTGl0bXVzIEVkZ2UgTWFuYWdlciBDQSAyMzA3MjAyMjAyNzAeFw0yMzA3MjEyMDI2MzJaFw00MzA3MTYyMDI3MDJaMC0xKzApBgNVBAMTIkxpdG11cyBFZGdlIE1hbmFnZXIgQ0EgMjMwNzIwMjIwMjcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzGo0BV+jkd2GVMC+pkEmOJzEgI4laAjfCXpKR8F2b5CVjwwf17/ordr3Ovc3mf4cBbRmwyw/EKYLeTTPTR/WYlX0P05Q+gCb8VWKwRFy3tn+l62RRt5ucHvGGS9m2ISjOqWWKNodkI7IQahUrHYIFcXEYAJPhzAkav+oj0T9gz88XrZiLidx6czvWo/hRidx/vI/0Fp1x4FiW6S0FTUKIpSZ0BRD/Es4Zfau6bql84j1hDVrbVnjSnjTfmyg7sIFkWrqashHITJmKOnC3SF424sejiopCYoVCSUaJzjRymbkACFruIK6TYIUXkKW+QntlC6Q0+HB5rVh+45onfOHpAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRFEAElhG/8N7UTMscJjL9YerjlrTAfBgNVHSMEGDAWgBRFEAElhG/8N7UTMscJjL9YerjlrTANBgkqhkiG9w0BAQsFAAOCAQEAk92foXaLi5l6RrSOwuwdk8yTnKn3Jdh4r2mSj8Pp1ywY8KsZqP/DbnZ9YaDAd3m56bEPWrgnIByRZQRjBLM6g3RJVZjzG/ZCDkGGHho5WcoJ8v8+ebnO4P2U83A883cwA6/0HhrSyb3mRMWaaUHMS5KMHlNphR/2G5RUcocXjMbzrH4bwZmoE/PlWyTEpquWI1kobOynbeJhVPngUCgddNr3sVAAywK1oTeCoLucmRI8SlnKSqSD10Chp6JVqSPL/E1uwBC1o5Doju2iYBYGayD8WQMZ8MR8zRO1/FORTT6Jp4FDlv4HDM8QUHChx2qjb0+sjjbMfxyDVorLjHegQA==\n-----END CERTIFICATE-----",
                "mqttUserName": "1a5wiavluwxuhwai5leb1v0hc",
                "mqttPassword": "r4vobd6cin9i85aq9fdljt4epb",
                "mqttClientId": "1a5wiavluwxuhwai5leb1v0hc",
                "mqttReqTopicName": "loop/req/1a5wiavluwxuhwai5leb1v0hc/462j1mq70mph31wa100t1yuxa/json",
                "mqttRespTopicName": "loop/resp/1a5wiavluwxuhwai5leb1v0hc/462j1mq70mph31wa100t1yuxa/json",
                "mqttDataTopicName": "loop/data/1a5wiavluwxuhwai5leb1v0hc/462j1mq70mph31wa100t1yuxa/json",
                "mqttEventsTopicName": "loop/events/1a5wiavluwxuhwai5leb1v0hc/462j1mq70mph31wa100t1yuxa/json",
                "mqttDhTopicName": "loop/dh/1a5wiavluwxuhwai5leb1v0hc/462j1mq70mph31wa100t1yuxa/json",
                "mgmtReqTopic": "mgmt/1a5wiavluwxuhwai5leb1v0hc/req",
                "mgmtRespTopic": "mgmt/1a5wiavluwxuhwai5leb1v0hc/resp",
                "lwm2mHostName": "",
                "lwm2mPortDtls": "",
                "lwm2mEndpoint": "%LWM2M_ENDPOINT%",
                "lwm2mPSKIdentity": "%LWM2M_PSK_IDENITY%",
                "lwm2mPSKValue": "%LWM2M_PSK_VALUE%",
                "lwm2mPSKValueHex": "%LWM2M_PSK_VALUE_HEX%",
                "remoteNetwork": null,
                "deviceId": "1a5wiavluwxuhwai5leb1v0hc",
                "registryUrlExternal": "10.17.3.103",
                "registryUserName": "dev-1a5wiavluwxuhwai5leb1v0hc",
                "registryPassword": "170iyf84k7lbsu55yrqdu1f8e",
                "licensingHostId": "epnzlne5ego1ttsvbruye6f61"
            },
            "modelId": "6vuut3v2qm36fv7smna42ckj3",
            "createdAt": 1691103970000,
            "hasParent": false,
            "hasChildren": true,
            "parentId": null,
            "runtimeStatus": {
                "lwm2m_last_update": null,
                "wg_online": "true",
                "wg_client_address": "192.168.127.4/32",
                "mqtt_client_address": null,
                "poll_status": null,
                "lwm2m_client_address": null,
                "wg_registration_date": "1695406968000",
                "wg_last_seen_date": "1697135563000",
                "lwm2m_registration_date": null
            },
            "activationCode": "V9ZUA-DY6FX-CFC7V-JJY7D-V3OVF",
            "remoteId": "19a0049b29",
            "remoteAccessStatus": null,
            "remoteAccessUrls": null,
            "deleted": false,
            "nextPollTime": null,
            "lastPollTime": null,
            "entryID": 33,
            "instanceId": 0,
            "imageURL": null,
            "imagePreviewURL": null,
            "hostname": "litmus-edge-94c6911b9c77",
            "hasImage": false,
            "lastKnownIpData": null,
            "lastSeenDateData": null,
            "lastKnownIpCtl": "192.168.127.4/32",
            "lastSeenDateCtl": 1697135563000,
            "activationStatus": {
                "status": "ACTIVATED",
                "details": "Device is activated",
                "activationCode": "V9ZUA-DY6FX-CFC7V-JJY7D-V3OVF",
                "unactivated": false,
                "deactivated": false,
                "activated": true
            },
            "passwordPolicyId": "default_password_policy",
            "capabilities": {
                "EVENTS": {
                    "name": "EVENTS",
                    "available": true,
                    "unavailabilityReason": "Capability is available"
                },
                "SERVICES": {
                    "name": "SERVICES",
                    "available": true,
                    "unavailabilityReason": "Capability is available"
                },
                "REMOTE_UI": {
                    "name": "REMOTE_UI",
                    "available": true,
                    "unavailabilityReason": "Capability is available"
                },
                "ACTIVATION_V1": {
                    "name": "ACTIVATION_V1",
                    "available": false,
                    "unavailabilityReason": "Activation 1.0 is not available for versions greater or equal to 3.0.0"
                },
                "METRICS": {
                    "name": "METRICS",
                    "available": true,
                    "unavailabilityReason": "Capability is available"
                },
                "MARKETPLACE": {
                    "name": "MARKETPLACE",
                    "available": true,
                    "unavailabilityReason": "Capability is available"
                },
                "DM_V2_API": {
                    "name": "DM_V2_API",
                    "available": true,
                    "unavailabilityReason": "Capability is available"
                },
                "LWM2M": {
                    "name": "LWM2M",
                    "available": false,
                    "unavailabilityReason": "LwM2M is not available"
                },
                "MARKETPLACE_SYNC": {
                    "name": "MARKETPLACE_SYNC",
                    "available": true,
                    "unavailabilityReason": "Capability is available"
                },
                "FLOATING_LICENSING": {
                    "name": "FLOATING_LICENSING",
                    "available": true,
                    "unavailabilityReason": "Capability is available"
                },
                "BACKUP": {
                    "name": "BACKUP",
                    "available": true,
                    "unavailabilityReason": "Capability is available"
                },
                "LICENSE_VERSION_V1": {
                    "name": "LICENSE_VERSION_V1",
                    "available": false,
                    "unavailabilityReason": "License API V1 is not available for versions equal to or greater than 3.2.0"
                },
                "MP_APP_CONTAINER_LOGS": {
                    "name": "MP_APP_CONTAINER_LOGS",
                    "available": true,
                    "unavailabilityReason": "Capability is available"
                },
                "LICENSE_VERSION_V2": {
                    "name": "LICENSE_VERSION_V2",
                    "available": true,
                    "unavailabilityReason": "Capability is available"
                },
                "PASSWORD_POLICY": {
                    "name": "PASSWORD_POLICY",
                    "available": true,
                    "unavailabilityReason": "Capability is available"
                },
                "TEMPLATE_EXPORT": {
                    "name": "TEMPLATE_EXPORT",
                    "available": true,
                    "unavailabilityReason": "Capability is available"
                },
                "WG_REMOTE": {
                    "name": "WG_REMOTE",
                    "available": true,
                    "unavailabilityReason": "Capability is available"
                },
                "TEMPLATE_APPLY": {
                    "name": "TEMPLATE_APPLY",
                    "available": true,
                    "unavailabilityReason": "Capability is available"
                }
            },
            "metaDeviceId": null,
            "apiKeyPresent": true,
            "metricsEnabled": true,
            "projectName": "parth",
            "ctrlLastUpdate": 1697135563000,
            "runningInDocker": false,
            "ctrlRegistrationDate": 1695406968000,
            "ctrlClientAddress": "192.168.127.4/32",
            "ctrlInterfaceType": "WG",
            "online": true
        }
    ]
}
```

---

## Apps List for All Devices

**GET** `{{LEM_URL}}/api/v1/marketplace/app/plain?projectId={{project_id}}`

# Apps List for All Devices

Returns the installed catalog apps across **every device** in the project, with current status (`RUNNING` / `STOPPED` / ...), image, and installation parameters.
## Endpoint

```http
GET {{LEM_URL}}/api/v1/marketplace/app/plain?projectId={{project_id}}
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.
## Response

`200 OK` -- `application/json`. Array of app records.

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
[
    {
        "id": "ca877b46-1a8c-11ed-8791-94c6911b9c77",
        "name": "MySQL",
        "status": "RUNNING",
        "statusChangedAt": 1697749299000,
        "parameters": {
            "stack_description": "MySQL is an open-source relational database management system (RDBMS).",
            "MYSQL_DATABASE": "sample",
            "MYSQL_PASSWORD": "loopedge-s3cr3t!",
            "MYSQL_PORT": "3306",
            "MYSQL_ROOT_PASSWORD": "loopedge-s3cr3t!",
            "MYSQL_USER": "user",
            "RESTART": "always",
            "stack_name": "MySQL"
        },
        "catalogId": "c93dbe1b-1a8c-11ed-8d9d-94c6911b9c77",
        "catalogApplicationId": "0aa40818-2553-4f1c-8221-dbf19804efe4",
        "releaseName": "8.0.23",
        "deviceId": "1a5wiavluwxuhwai5leb1v0hc",
        "prettyName": "Litmus Edge (94:c6:91:1b:9c:77)- SJ office sensor",
        "firmwareVersion": "3.8.0",
        "tags": [],
        "deviceOnline": true,
        "updatedOn": 1697750028703
    }
]
```

---

## Current Device Details

**GET** `{{LEM_URL}}/api/v1/device/{{project_id}}/{{edge_device_id}}`

# Current Device Details

Returns the full record for one device: status, timestamps, device properties (firmware version, manufacturer, GPS coordinates, tags, etc.).
## Endpoint

```http
GET {{LEM_URL}}/api/v1/device/{{project_id}}/{{edge_device_id}}
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.
## Response

`200 OK` -- `application/json`. Single device record.

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
{
    "projectId": "462j1mq70mph31wa100t1yuxa",
    "deviceId": "1a5wiavluwxuhwai5leb1v0hc",
    "status": "ACTIVE",
    "statusTimestamp": 1691104169000,
    "properties": {
        "Firmware Version": {
            "name": "Firmware Version",
            "value": "3.8.0",
            "datatype": "String",
            "allowUpdateFromDevice": true
        },
        "Manufacturer": {
            "name": "Manufacturer",
            "value": "Intel Corporation",
            "datatype": "String",
            "allowUpdateFromDevice": true
        },
        "Latitude": {
            "name": "Latitude",
            "value": "37.3746029",
            "datatype": "String",
            "allowUpdateFromDevice": true
        },
        "Model Number": {
            "name": "Model Number",
            "value": "NUC7i5BNH",
            "datatype": "String",
            "allowUpdateFromDevice": true
        },
        "Longitude": {
            "name": "Longitude",
            "value": "-121.9223647",
            "datatype": "String",
            "allowUpdateFromDevice": true
        },
        "Serial Number": {
            "name": "Serial Number",
            "value": "G6BN80900DC7",
            "datatype": "String",
            "allowUpdateFromDevice": true
        },
        "modelName": {
            "name": "modelName",
            "value": "LoopEdge",
            "datatype": "string",
            "allowUpdateFromDevice": false
        },
        "virtualization": {
            "name": "virtualization",
            "value": null,
            "datatype": "String",
            "allowUpdateFromDevice": false
        }
    },
    "tags": [],
    "type": "LOOPEDGE",
    "objects": [
        {
            "id": 4,
            "instance": "null",
            "resource": 3,
            "objectDescription": "Connectivity Monitoring",
            "resourceDescription": "Link Quality",
            "mode": [
                "READ"
            ],
            "observeStatus": false,
            "modeAsInts": [
                1
            ]
        }
    ],
    "prettyName": "Litmus Edge (94:c6:91:1b:9c:77)- SJ office sensor",
    "description": null,
    "config": {
        "mqttHostName": "10.17.3.103",
        "mqttSslPort": "8883",
        "mqttServerCA": "-----BEGIN CERTIFICATE-----\nMIIDSzCCAjOgAwIBAgIUWBhOM2+MjE3RTvyUJBXhciF+UQgwDQYJKoZIhvcNAQELBQAwLTErMCkGA1UEAxMiTGl0bXVzIEVkZ2UgTWFuYWdlciBDQSAyMzA3MjAyMjAyNzAeFw0yMzA3MjEyMDI2MzJaFw00MzA3MTYyMDI3MDJaMC0xKzApBgNVBAMTIkxpdG11cyBFZGdlIE1hbmFnZXIgQ0EgMjMwNzIwMjIwMjcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzGo0BV+jkd2GVMC+pkEmOJzEgI4laAjfCXpKR8F2b5CVjwwf17/ordr3Ovc3mf4cBbRmwyw/EKYLeTTPTR/WYlX0P05Q+gCb8VWKwRFy3tn+l62RRt5ucHvGGS9m2ISjOqWWKNodkI7IQahUrHYIFcXEYAJPhzAkav+oj0T9gz88XrZiLidx6czvWo/hRidx/vI/0Fp1x4FiW6S0FTUKIpSZ0BRD/Es4Zfau6bql84j1hDVrbVnjSnjTfmyg7sIFkWrqashHITJmKOnC3SF424sejiopCYoVCSUaJzjRymbkACFruIK6TYIUXkKW+QntlC6Q0+HB5rVh+45onfOHpAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRFEAElhG/8N7UTMscJjL9YerjlrTAfBgNVHSMEGDAWgBRFEAElhG/8N7UTMscJjL9YerjlrTANBgkqhkiG9w0BAQsFAAOCAQEAk92foXaLi5l6RrSOwuwdk8yTnKn3Jdh4r2mSj8Pp1ywY8KsZqP/DbnZ9YaDAd3m56bEPWrgnIByRZQRjBLM6g3RJVZjzG/ZCDkGGHho5WcoJ8v8+ebnO4P2U83A883cwA6/0HhrSyb3mRMWaaUHMS5KMHlNphR/2G5RUcocXjMbzrH4bwZmoE/PlWyTEpquWI1kobOynbeJhVPngUCgddNr3sVAAywK1oTeCoLucmRI8SlnKSqSD10Chp6JVqSPL/E1uwBC1o5Doju2iYBYGayD8WQMZ8MR8zRO1/FORTT6Jp4FDlv4HDM8QUHChx2qjb0+sjjbMfxyDVorLjHegQA==\n-----END CERTIFICATE-----",
        "mqttUserName": "1a5wiavluwxuhwai5leb1v0hc",
        "mqttPassword": "r4vobd6cin9i85aq9fdljt4epb",
        "mqttClientId": "1a5wiavluwxuhwai5leb1v0hc",
        "mqttReqTopicName": "loop/req/1a5wiavluwxuhwai5leb1v0hc/462j1mq70mph31wa100t1yuxa/json",
        "mqttRespTopicName": "loop/resp/1a5wiavluwxuhwai5leb1v0hc/462j1mq70mph31wa100t1yuxa/json",
        "mqttDataTopicName": "loop/data/1a5wiavluwxuhwai5leb1v0hc/462j1mq70mph31wa100t1yuxa/json",
        "mqttEventsTopicName": "loop/events/1a5wiavluwxuhwai5leb1v0hc/462j1mq70mph31wa100t1yuxa/json",
        "mqttDhTopicName": "loop/dh/1a5wiavluwxuhwai5leb1v0hc/462j1mq70mph31wa100t1yuxa/json",
        "mgmtReqTopic": "mgmt/1a5wiavluwxuhwai5leb1v0hc/req",
        "mgmtRespTopic": "mgmt/1a5wiavluwxuhwai5leb1v0hc/resp",
        "lwm2mHostName": "",
        "lwm2mPortDtls": "",
        "lwm2mEndpoint": "%LWM2M_ENDPOINT%",
        "lwm2mPSKIdentity": "%LWM2M_PSK_IDENITY%",
        "lwm2mPSKValue": "%LWM2M_PSK_VALUE%",
        "lwm2mPSKValueHex": "%LWM2M_PSK_VALUE_HEX%",
        "remoteNetwork": null,
        "deviceId": "1a5wiavluwxuhwai5leb1v0hc",
        "registryUrlExternal": "10.17.3.103",
        "registryUserName": "dev-1a5wiavluwxuhwai5leb1v0hc",
        "registryPassword": "170iyf84k7lbsu55yrqdu1f8e",
        "licensingHostId": "epnzlne5ego1ttsvbruye6f61"
    },
    "modelId": "6vuut3v2qm36fv7smna42ckj3",
    "createdAt": 1691103970000,
    "hasParent": false,
    "hasChildren": true,
    "parentId": null,
    "runtimeStatus": {
        "lwm2m_last_update": null,
        "wg_online": "true",
        "wg_client_address": "192.168.127.4/32",
        "mqtt_client_address": null,
        "poll_status": null,
        "lwm2m_client_address": null,
        "wg_registration_date": "1695406968000",
        "wg_last_seen_date": "1697746758000",
        "lwm2m_registration_date": null
    },
    "activationCode": "V9ZUA-DY6FX-CFC7V-JJY7D-V3OVF",
    "remoteId": "19a0049b29",
    "remoteAccessStatus": null,
    "remoteAccessUrls": null,
    "deleted": false,
    "nextPollTime": null,
    "lastPollTime": null,
    "entryID": 33,
    "instanceId": 0,
    "imageURL": null,
    "imagePreviewURL": null,
    "hostname": "litmus-edge-94c6911b9c77",
    "hasImage": false,
    "lastKnownIpData": null,
    "lastSeenDateData": null,
    "lastKnownIpCtl": "192.168.127.4/32",
    "lastSeenDateCtl": 1697746758000,
    "activationStatus": {
        "status": "ACTIVATED",
        "details": "Device is activated",
        "activationCode": "V9ZUA-DY6FX-CFC7V-JJY7D-V3OVF",
        "unactivated": false,
        "deactivated": false,
        "activated": true
    },
    "passwordPolicyId": "default_password_policy",
    "capabilities": {
        "EVENTS": {
            "name": "EVENTS",
            "available": true,
            "unavailabilityReason": "Capability is available"
        },
        "SERVICES": {
            "name": "SERVICES",
            "available": true,
            "unavailabilityReason": "Capability is available"
        },
        "REMOTE_UI": {
            "name": "REMOTE_UI",
            "available": true,
            "unavailabilityReason": "Capability is available"
        },
        "ACTIVATION_V1": {
            "name": "ACTIVATION_V1",
            "available": false,
            "unavailabilityReason": "Activation 1.0 is not available for versions greater or equal to 3.0.0"
        },
        "METRICS": {
            "name": "METRICS",
            "available": true,
            "unavailabilityReason": "Capability is available"
        },
        "MARKETPLACE": {
            "name": "MARKETPLACE",
            "available": true,
            "unavailabilityReason": "Capability is available"
        },
        "DM_V2_API": {
            "name": "DM_V2_API",
            "available": true,
            "unavailabilityReason": "Capability is available"
        },
        "LWM2M": {
            "name": "LWM2M",
            "available": false,
            "unavailabilityReason": "LwM2M is not available"
        },
        "MARKETPLACE_SYNC": {
            "name": "MARKETPLACE_SYNC",
            "available": true,
            "unavailabilityReason": "Capability is available"
        },
        "FLOATING_LICENSING": {
            "name": "FLOATING_LICENSING",
            "available": true,
            "unavailabilityReason": "Capability is available"
        },
        "BACKUP": {
            "name": "BACKUP",
            "available": true,
            "unavailabilityReason": "Capability is available"
        },
        "LICENSE_VERSION_V1": {
            "name": "LICENSE_VERSION_V1",
            "available": false,
            "unavailabilityReason": "License API V1 is not available for versions equal to or greater than 3.2.0"
        },
        "MP_APP_CONTAINER_LOGS": {
            "name": "MP_APP_CONTAINER_LOGS",
            "available": true,
            "unavailabilityReason": "Capability is available"
        },
        "LICENSE_VERSION_V2": {
            "name": "LICENSE_VERSION_V2",
            "available": true,
            "unavailabilityReason": "Capability is available"
        },
        "PASSWORD_POLICY": {
            "name": "PASSWORD_POLICY",
            "available": true,
            "unavailabilityReason": "Capability is available"
        },
        "TEMPLATE_EXPORT": {
            "name": "TEMPLATE_EXPORT",
            "available": true,
            "unavailabilityReason": "Capability is available"
        },
        "WG_REMOTE": {
            "name": "WG_REMOTE",
            "available": true,
            "unavailabilityReason": "Capability is available"
        },
        "TEMPLATE_APPLY": {
            "name": "TEMPLATE_APPLY",
            "available": true,
            "unavailabilityReason": "Capability is available"
        }
    },
    "metaDeviceId": null,
    "apiKeyPresent": true,
    "metricsEnabled": true,
    "ctrlLastUpdate": 1697746758000,
    "runningInDocker": false,
    "ctrlRegistrationDate": 1695406968000,
    "ctrlClientAddress": "192.168.127.4/32",
    "ctrlInterfaceType": "WG",
    "online": true
}
```

---

## Device Metrics

**POST** `{{LEM_URL}}/api/v1/device/metrics/{{project_id}}`

# Device Metrics

Returns host-level runtime metrics for the device. Same payload as `Dashboard > LE Devices Metrics` but scoped to one device (pass `[]` body to receive all devices; pass `[deviceId]` to scope down).
## Endpoint

```http
POST {{LEM_URL}}/api/v1/device/metrics/{{project_id}}
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.
## Request body

```json
[]
```

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Request Body

```json
[]
```

### Response

**Status**: 200 OK

```json
[
    {
        "projectId": "462j1mq70mph31wa100t1yuxa",
        "deviceId": "1a5wiavluwxuhwai5leb1v0hc",
        "hostname": "litmus-edge-94c6911b9c77",
        "friendlyName": "Litmus Edge (94:c6:91:1b:9c:77)- SJ office sensor",
        "node": {
            "cpuIdle": 89.14849,
            "cpuSystem": 4.3094497,
            "cpuUser": 6.542056,
            "memoryUsed": 29.231947,
            "natsInMsgs": 78418628,
            "storageAvailable": 122822930432,
            "storageSize": 237605920768,
            "storageUsed": 113514635264,
            "networkReceiveRate": 7030.036,
            "networkTransmitRate": 11453.437
        },
        "dh": {
            "devicesCount": 8,
            "devices": [
                {
                    "id": "41FBD12E-C6CD-4539-AD50-336D278B207C",
                    "name": "Rack_2b_M258",
                    "status": 1,
                    "tagsCount": 1,
                    "tagsProcessedRate": 65.454544,
                    "tagsFailedRate": 0
                },
                {
                    "id": "474E42B0-C7B8-42DE-8DE2-FFED7030A563",
                    "name": "DTA_windows_tia",
                    "status": 1,
                    "tagsCount": 0,
                    "tagsProcessedRate": 0,
                    "tagsFailedRate": 0
                },
                {
                    "id": "4C4B9CCC-F5E4-4C2E-A4C0-EAF5C32B0D1A",
                    "name": "AB_CLX_API_testing",
                    "status": 0,
                    "tagsCount": 1,
                    "tagsProcessedRate": 0,
                    "tagsFailedRate": 56.727272
                },
                {
                    "id": "779F42F3-54FC-4A87-B9A6-CD39CFA4A97D",
                    "name": "Simulator2",
                    "status": 1,
                    "tagsCount": 4,
                    "tagsProcessedRate": 261.81818,
                    "tagsFailedRate": 0
                },
                {
                    "id": "89C52E9A-0901-4D8D-B842-7B533F64E1B7",
                    "name": "ClassificationSimulator",
                    "status": 1,
                    "tagsCount": 8,
                    "tagsProcessedRate": 523.63635,
                    "tagsFailedRate": 0
                },
                {
                    "id": "BAFD349E-21B6-408A-AE2F-B9C682912571",
                    "name": "Boiler",
                    "status": 0,
                    "tagsCount": 0,
                    "tagsProcessedRate": 0,
                    "tagsFailedRate": 0
                },
                {
                    "id": "CDC283FB-72E2-42DF-A587-4D6299D70C9A",
                    "name": "sim1",
                    "status": 1,
                    "tagsCount": 2,
                    "tagsProcessedRate": 130.90909,
                    "tagsFailedRate": 0
                },
                {
                    "id": "EEF5EE7F-54C7-415A-B1C7-4F9386112DEB",
                    "name": "D14_Boiler_Power_PAC4200",
                    "status": 0,
                    "tagsCount": 0,
                    "tagsProcessedRate": 0,
                    "tagsFailedRate": 0
                }
            ]
        },
        "cc": {
            "connectorsCount": 3,
            "connectors": [
                {
                    "id": "51370ca3-dc8f-497f-bf91-3b1fba694b4f",
                    "name": "ClarifyIOssl",
                    "status": 1,
                    "rate": 65.454544,
                    "bufferSize": 26214400
                },
                {
                    "id": "aab5e88a-8f02-4ac6-992b-29ca6dc7e1f4",
                    "name": "default-ssl",
                    "status": 0,
                    "rate": 0,
                    "bufferSize": 0
                },
                {
                    "id": "b191617a-8cb8-454f-9091-1e5e31448fb7",
                    "name": "data-rate-test",
                    "status": 0,
                    "rate": 0,
                    "bufferSize": 0
                }
            ]
        }
    }
]
```

---

## Metrics Pulling Start

**POST** `{{LEM_URL}}/api/v1/device/metrics?projectId={{project_id}}&deviceId={{device_id}}&enabled=true`

# Metrics Pulling Start

Enables periodic metrics polling for one device. LEM begins pulling host-level metrics on its configured interval (see `Settings > Settings - Edge Device Metrics Sync Interval`).
## Endpoint

```http
POST {{LEM_URL}}/api/v1/device/metrics?projectId={{project_id}}&deviceId={{device_id}}&enabled=true
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.
## Response

```json
{ "code": "S", "message": null, "messageDetails": null }
```

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
{
    "code": "S",
    "message": null,
    "messageDetails": null
}
```

---

## Metrics Pulling Stop

**POST** `{{LEM_URL}}/api/v1/device/metrics?projectId={{project_id}}&deviceId={{device_id}}&enabled=false`

# Metrics Pulling Stop

Disables periodic metrics polling for one device. Inverse of `Metrics Pulling Start`.
## Endpoint

```http
POST {{LEM_URL}}/api/v1/device/metrics?projectId={{project_id}}&deviceId={{device_id}}&enabled=false
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.
## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
{
    "code": "S",
    "message": null,
    "messageDetails": null
}
```

---

## Services

**GET** `{{LEM_URL}}/api/v1/loopedge-dm/service?deviceId={{device_id}}&projectId={{project_id}}`

# Services

Returns the system services running on the device with their current status (`STARTED` / `STOPPED`) and the `restartable` flag.
## Endpoint

```http
GET {{LEM_URL}}/api/v1/loopedge-dm/service?deviceId={{device_id}}&projectId={{project_id}}
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.
## Response

`200 OK` -- `application/json`. Array of `{name, desc, restartable, status}` entries.

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
[
    {
        "name": "zerotier",
        "desc": "Remote Access",
        "restartable": false,
        "status": "STARTED"
    },
    {
        "name": "ssh",
        "desc": "SSH",
        "restartable": false,
        "status": "STARTED"
    }
]
```

---

## Start Service

**POST** `{{LEM_URL}}/api/v1/loopedge-dm/service/start/{{device_service}}?projectId={{project_id}}&deviceId={{device_id}}`

# Start Service

Starts a system service on the device (e.g. `ssh`, `zerotier`).
## Endpoint

```http
POST {{LEM_URL}}/api/v1/loopedge-dm/service/start/{{device_service}}?projectId={{project_id}}&deviceId={{device_id}}
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.
## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
{
    "code": "S",
    "message": null,
    "messageDetails": null
}
```

---

## Stop Service

**POST** `{{LEM_URL}}/api/v1/loopedge-dm/service/stop/{{device_service}}?projectId={{project_id}}&deviceId={{device_id}}`

# Stop Service

Stops a system service on the device.
## Endpoint

```http
POST {{LEM_URL}}/api/v1/loopedge-dm/service/stop/{{device_service}}?projectId={{project_id}}&deviceId={{device_id}}
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.
## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
{
    "code": "S",
    "message": null,
    "messageDetails": null
}
```

---

## Get Current API key (masked)

**GET** `{{LEM_URL}}/api/v1/device/api-key/{{project_id}}/{{edge_device_id}}/masked`

# Get Current API key (masked)

Returns the device's currently-bound LE API key with most of the value masked (only the last 4 characters are shown). Use to confirm the key in use without exposing the secret.
## Endpoint

```http
GET {{LEM_URL}}/api/v1/device/api-key/{{project_id}}/{{edge_device_id}}/masked
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.
## Response

```json
{ "value": "****************************sf6r" }
```

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
{
    "value": "****************************sf6r"
}
```

---

## Save API token for Edge Device

**POST** `{{LEM_URL}}/api/v1/device/api-key/{{project_id}}/{{edge_device_id}}`

# Save API token for Edge Device

Stores an LE API token that LEM will use when calling the device's local API. Pass the **full clear-text** token in the body. After saving, the token is referenced internally and only the masked form is returned by `Get Current API key (masked)`.
## Endpoint

```http
POST {{LEM_URL}}/api/v1/device/api-key/{{project_id}}/{{edge_device_id}}
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.
## Request body

```json
{ "value": "ww9vg9dknwruvafxetr0x11c6kq3sf6r" }
```

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Request Body

```json
{
    "value": "ww9vg9dknwruvafxetr0x11c6kq3sf6r"
}
```

### Response

**Status**: 200 OK

```json
{
    "code": "S",
    "message": null,
    "messageDetails": null
}
```

---

## Create Support Bundle

**GET** `{{LEM_URL}}/api/v1/loopedge-dm/supportbundle/generate?projectId={{project_id}}&deviceId={{device_id}}`

# Create Support Bundle

Triggers generation of a support bundle on the target device and downloads it through LEM. The bundle contains LE service logs, configuration, and diagnostic snapshots.
## Endpoint

```http
GET {{LEM_URL}}/api/v1/loopedge-dm/supportbundle/generate?projectId={{project_id}}&deviceId={{device_id}}
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.
## Response

`200 OK` -- streams a `.tar.gz`. Use Postman's **Send and Download** to save to disk.

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


---

## Reboot Device

**POST** `{{LEM_URL}}/api/v1/loopedge-dm/reboot?projectId={{project_id}}&deviceId={{device_id}}`

# Reboot Device

Reboots the target device. LE services stop, the host reboots, and the device reconnects to LEM after recovery (~1-2 minutes).
## Endpoint

```http
POST {{LEM_URL}}/api/v1/loopedge-dm/reboot?projectId={{project_id}}&deviceId={{device_id}}
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.
> **Operational note**: full blast radius. Reserve for maintenance windows or unrecoverable states.
## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
{
    "code": "S",
    "message": null,
    "messageDetails": null
}
```

---

## Raw Data

**GET** `{{LEM_URL}}/api/v1/device/raw-native/{{project_id}}/{{edge_device_id}}?from=1697698800000&limit=10&to=1697785199867`

# Raw Data

Returns the device's **raw native payload** stream (the OMA/LWM2M-encoded messages flowing through LEM) for a time window. Use for low-level diagnostics.
## Endpoint

```http
GET {{LEM_URL}}/api/v1/device/raw-native/{{project_id}}/{{edge_device_id}}?from=1697698800000&limit=10&to=1697785199867
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.
## Parameters

| Parameter | Type    | Required | Description                                              |
|-----------|---------|----------|----------------------------------------------------------|
| `from`    | integer | Yes      | Unix epoch ms (window start).                             |
| `to`      | integer | Yes      | Unix epoch ms (window end).                               |
| `limit`   | integer | No       | Max messages.                                            |

## Response

`200 OK` -- `application/json`. `elements[]` of `{timestamp, message}` pairs.

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
{
    "elements": [
        {
            "timestamp": 1697748900000,
            "message": "{\"timestamp\":1697748892337,\"generatedAt\":0,\"sentAt\":0,\"values\":[{\"objectId\":4,\"instanceId\":\"null\",\"resourceId\":3,\"datatype\":\"int\",\"value\":\"1\",\"meta\":null}],\"httpResponses\":null}"
        },
        {
            "timestamp": 1697748840000,
            "message": "{\"timestamp\":1697748832429,\"generatedAt\":0,\"sentAt\":0,\"values\":[{\"objectId\":4,\"instanceId\":\"null\",\"resourceId\":3,\"datatype\":\"int\",\"value\":\"0\",\"meta\":null}],\"httpResponses\":null}"
        }
    ],
    "nextPage": null
}
```

---

## Apps List for Device

**GET** `{{LEM_URL}}/api/v1/marketplace/app/plain?projectId={{project_id}}&deviceId={{device_id}}`

# Apps List for Device

Returns the catalog apps installed on **one** device with status and parameters. Scoped form of `Edge Devices > General Devices Page > Apps List for All Devices`.
## Endpoint

```http
GET {{LEM_URL}}/api/v1/marketplace/app/plain?projectId={{project_id}}&deviceId={{device_id}}
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.
## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
[
    {
        "id": "ca877b46-1a8c-11ed-8791-94c6911b9c77",
        "name": "MySQL",
        "status": "RUNNING",
        "statusChangedAt": 1697749299000,
        "parameters": {
            "stack_description": "MySQL is an open-source relational database management system (RDBMS).",
            "MYSQL_DATABASE": "sample",
            "MYSQL_PORT": "3306",
            "MYSQL_PASSWORD": "loopedge-s3cr3t!",
            "MYSQL_ROOT_PASSWORD": "loopedge-s3cr3t!",
            "MYSQL_USER": "user",
            "RESTART": "always",
            "stack_name": "MySQL"
        },
        "catalogId": "c93dbe1b-1a8c-11ed-8d9d-94c6911b9c77",
        "catalogApplicationId": "0aa40818-2553-4f1c-8221-dbf19804efe4",
        "releaseName": "8.0.23",
        "deviceId": "1a5wiavluwxuhwai5leb1v0hc",
        "prettyName": "Litmus Edge (94:c6:91:1b:9c:77)- SJ office sensor",
        "firmwareVersion": "3.8.0",
        "tags": [],
        "deviceOnline": true,
        "updatedOn": 1697750748701
    }
]
```

---

## Start Application

**POST** `{{LEM_URL}}/api/v1/marketplace/app/start?projectId={{project_id}}&deviceId={{device_id}}&applicationId={{device_app_id}}`

# Start Application

Starts a stopped catalog app on the device.
## Endpoint

```http
POST {{LEM_URL}}/api/v1/marketplace/app/start?projectId={{project_id}}&deviceId={{device_id}}&applicationId={{device_app_id}}
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.
## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

---

## Stop Application

**POST** `{{LEM_URL}}/api/v1/marketplace/app/stop?projectId={{project_id}}&deviceId={{device_id}}&applicationId={{device_app_id}}`

# Stop Application

Stops a running catalog app on the device.
## Endpoint

```http
POST {{LEM_URL}}/api/v1/marketplace/app/stop?projectId={{project_id}}&deviceId={{device_id}}&applicationId={{device_app_id}}
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.
## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

---

## App Logs

**GET** `{{LEM_URL}}/api/v1/marketplace/app/log?projectId={{project_id}}&deviceId={{device_id}}&applicationId={{device_app_id}}`

# App Logs

Returns base64-encoded combined logs of all components of one catalog app on the device. Decode `log` client-side.
## Endpoint

```http
GET {{LEM_URL}}/api/v1/marketplace/app/log?projectId={{project_id}}&deviceId={{device_id}}&applicationId={{device_app_id}}
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.
## Response

`200 OK` -- `application/json` with a single `log` (base64) field.

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
{
    "log": "bXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjItMDgtMTIgMjI6MTk6NTIrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAQAAAAAAAFMyMDIyLTA4LTEyIDIyOjE5OjUyKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IFN3aXRjaGluZyB0byBkZWRpY2F0ZWQgdXNlciAnbXlzcWwnCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIyLTA4LTEyIDIyOjE5OjUyKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAEAAAAAAABLMjAyMi0wOC0xMiAyMjoxOTo1MiswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBJbml0aWFsaXppbmcgZGF0YWJhc2UgZmlsZXMKbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0wOC0xMlQyMjoxOTo1Mi43ODg0MzJaIDAgW1N5c3RlbV0gW01ZLTAxMzE2OV0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZCAobXlzcWxkIDguMC4yMykgaW5pdGlhbGl6aW5nIG9mIHNlcnZlciBpbiBwcm9ncmVzcyBhcyBwcm9jZXNzIDQxCm15c3FsLW15c3FsCXwgAgAAAAAAAF8yMDIyLTA4LTEyVDIyOjE5OjUyLjc5MjYzMVogMSBbU3lzdGVtXSBbTVktMDEzNTc2XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAF0yMDIyLTA4LTEyVDIyOjE5OjU3LjY3NjUzN1ogMSBbU3lzdGVtXSBbTVktMDEzNTc3XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIGVuZGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTA4LTEyVDIyOjIwOjAzLjcxMTEwMFogNiBbV2FybmluZ10gW01ZLTAxMDQ1M10gW1NlcnZlcl0gcm9vdEBsb2NhbGhvc3QgaXMgY3JlYXRlZCB3aXRoIGFuIGVtcHR5IHBhc3N3b3JkICEgUGxlYXNlIGNvbnNpZGVyIHN3aXRjaGluZyBvZmYgdGhlIC0taW5pdGlhbGl6ZS1pbnNlY3VyZSBvcHRpb24uCm15c3FsLW15c3FsCXwgAQAAAAAAAEoyMDIyLTA4LTEyIDIyOjIwOjE1KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IERhdGFiYXNlIGZpbGVzIGluaXRpYWxpemVkCm15c3FsLW15c3FsCXwgAQAAAAAAAEkyMDIyLTA4LTEyIDIyOjIwOjE1KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IFN0YXJ0aW5nIHRlbXBvcmFyeSBzZXJ2ZXIKbXlzcWwtbXlzcWwJfCACAAAAAAAAdDIwMjItMDgtMTJUMjI6MjA6MTUuOTk3MTYxWiAwIFtTeXN0ZW1dIFtNWS0wMTAxMTZdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQgKG15c3FsZCA4LjAuMjMpIHN0YXJ0aW5nIGFzIHByb2Nlc3MgODYKbXlzcWwtbXlzcWwJfCACAAAAAAAAXzIwMjItMDgtMTJUMjI6MjA6MTYuMDE3NzgwWiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzZdIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAXTIwMjItMDgtMTJUMjI6MjA6MTcuMDg2NDQ0WiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzddIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgZW5kZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMDgtMTJUMjI6MjA6MTcuMjAxNzk5WiAwIFtTeXN0ZW1dIFtNWS0wMTEzMjNdIFtTZXJ2ZXJdIFggUGx1Z2luIHJlYWR5IGZvciBjb25uZWN0aW9ucy4gU29ja2V0OiAvdmFyL3J1bi9teXNxbGQvbXlzcWx4LnNvY2sKbXlzcWwtbXlzcWwJfCACAAAAAAAAYzIwMjItMDgtMTJUMjI6MjA6MTcuMzkwMjkyWiAwIFtXYXJuaW5nXSBbTVktMDEwMDY4XSBbU2VydmVyXSBDQSBjZXJ0aWZpY2F0ZSBjYS5wZW0gaXMgc2VsZiBzaWduZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMDgtMTJUMjI6MjA6MTcuMzkwNzAwWiAwIFtTeXN0ZW1dIFtNWS0wMTM2MDJdIFtTZXJ2ZXJdIENoYW5uZWwgbXlzcWxfbWFpbiBjb25maWd1cmVkIHRvIHN1cHBvcnQgVExTLiBFbmNyeXB0ZWQgY29ubmVjdGlvbnMgYXJlIG5vdyBzdXBwb3J0ZWQgZm9yIHRoaXMgY2hhbm5lbC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0wOC0xMlQyMjoyMDoxNy4zOTk2MDRaIDAgW1dhcm5pbmddIFtNWS0wMTE4MTBdIFtTZXJ2ZXJdIEluc2VjdXJlIGNvbmZpZ3VyYXRpb24gZm9yIC0tcGlkLWZpbGU6IExvY2F0aW9uICcvdmFyL3J1bi9teXNxbGQnIGluIHRoZSBwYXRoIGlzIGFjY2Vzc2libGUgdG8gYWxsIE9TIHVzZXJzLiBDb25zaWRlciBjaG9vc2luZyBhIGRpZmZlcmVudCBkaXJlY3RvcnkuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMDgtMTJUMjI6MjA6MTcuNDM3NTIxWiAwIFtTeXN0ZW1dIFtNWS0wMTA5MzFdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IHJlYWR5IGZvciBjb25uZWN0aW9ucy4gVmVyc2lvbjogJzguMC4yMycgIHNvY2tldDogJy92YXIvcnVuL215c3FsZC9teXNxbGQuc29jaycgIHBvcnQ6IDAgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAQAAAAAAAEkyMDIyLTA4LTEyIDIyOjIwOjE3KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IFRlbXBvcmFyeSBzZXJ2ZXIgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAVVdhcm5pbmc6IFVuYWJsZSB0byBsb2FkICcvdXNyL3NoYXJlL3pvbmVpbmZvL2lzbzMxNjYudGFiJyBhcyB0aW1lIHpvbmUuIFNraXBwaW5nIGl0LgpteXNxbC1teXNxbAl8IAIAAAAAAABbV2FybmluZzogVW5hYmxlIHRvIGxvYWQgJy91c3Ivc2hhcmUvem9uZWluZm8vbGVhcC1zZWNvbmRzLmxpc3QnIGFzIHRpbWUgem9uZS4gU2tpcHBpbmcgaXQuCm15c3FsLW15c3FsCXwgAgAAAAAAAFJXYXJuaW5nOiBVbmFibGUgdG8gbG9hZCAnL3Vzci9zaGFyZS96b25laW5mby96b25lLnRhYicgYXMgdGltZSB6b25lLiBTa2lwcGluZyBpdC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAVldhcm5pbmc6IFVuYWJsZSB0byBsb2FkICcvdXNyL3NoYXJlL3pvbmVpbmZvL3pvbmUxOTcwLnRhYicgYXMgdGltZSB6b25lLiBTa2lwcGluZyBpdC4KbXlzcWwtbXlzcWwJfCABAAAAAAAASDIwMjItMDgtMTIgMjI6MjA6MTkrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogQ3JlYXRpbmcgZGF0YWJhc2Ugc2FtcGxlCm15c3FsLW15c3FsCXwgAQAAAAAAAEIyMDIyLTA4LTEyIDIyOjIwOjE5KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IENyZWF0aW5nIHVzZXIgdXNlcgpteXNxbC1teXNxbAl8IAEAAAAAAABYMjAyMi0wOC0xMiAyMjoyMDoxOSswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBHaXZpbmcgdXNlciB1c2VyIGFjY2VzcyB0byBzY2hlbWEgc2FtcGxlCm15c3FsLW15c3FsCXwgAQAAAAAAAAEKbXlzcWwtbXlzcWwJfCABAAAAAAAASTIwMjItMDgtMTIgMjI6MjA6MTkrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogU3RvcHBpbmcgdGVtcG9yYXJ5IHNlcnZlcgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTA4LTEyVDIyOjIwOjE5Ljg4OTcwOFogMTMgW1N5c3RlbV0gW01ZLTAxMzE3Ml0gW1NlcnZlcl0gUmVjZWl2ZWQgU0hVVERPV04gZnJvbSB1c2VyIHJvb3QuIFNodXR0aW5nIGRvd24gbXlzcWxkIChWZXJzaW9uOiA4LjAuMjMpLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTA4LTEyVDIyOjIwOjIzLjI4MzM3N1ogMCBbU3lzdGVtXSBbTVktMDEwOTEwXSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkOiBTaHV0ZG93biBjb21wbGV0ZSAobXlzcWxkIDguMC4yMykgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAQAAAAAAAEgyMDIyLTA4LTEyIDIyOjIwOjIzKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IFRlbXBvcmFyeSBzZXJ2ZXIgc3RvcHBlZApteXNxbC1teXNxbAl8IAEAAAAAAAABCm15c3FsLW15c3FsCXwgAQAAAAAAAFwyMDIyLTA4LTEyIDIyOjIwOjIzKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IE15U1FMIGluaXQgcHJvY2VzcyBkb25lLiBSZWFkeSBmb3Igc3RhcnQgdXAuCm15c3FsLW15c3FsCXwgAQAAAAAAAAEKbXlzcWwtbXlzcWwJfCACAAAAAAAAczIwMjItMDgtMTJUMjI6MjA6MjQuMTQ2MzUwWiAwIFtTeXN0ZW1dIFtNWS0wMTAxMTZdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQgKG15c3FsZCA4LjAuMjMpIHN0YXJ0aW5nIGFzIHByb2Nlc3MgMQpteXNxbC1teXNxbAl8IAIAAAAAAABfMjAyMi0wOC0xMlQyMjoyMDoyNC4xNTM1MTVaIDEgW1N5c3RlbV0gW01ZLTAxMzU3Nl0gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABdMjAyMi0wOC0xMlQyMjoyMDoyNC42NDQzMDFaIDEgW1N5c3RlbV0gW01ZLTAxMzU3N10gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBlbmRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0wOC0xMlQyMjoyMDoyNC43Mzk2NjRaIDAgW1N5c3RlbV0gW01ZLTAxMTMyM10gW1NlcnZlcl0gWCBQbHVnaW4gcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBCaW5kLWFkZHJlc3M6ICc6OicgcG9ydDogMzMwNjAsIHNvY2tldDogL3Zhci9ydW4vbXlzcWxkL215c3FseC5zb2NrCm15c3FsLW15c3FsCXwgAgAAAAAAAGMyMDIyLTA4LTEyVDIyOjIwOjI0Ljg1NDQ0N1ogMCBbV2FybmluZ10gW01ZLTAxMDA2OF0gW1NlcnZlcl0gQ0EgY2VydGlmaWNhdGUgY2EucGVtIGlzIHNlbGYgc2lnbmVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTA4LTEyVDIyOjIwOjI0Ljg1NDcyNlogMCBbU3lzdGVtXSBbTVktMDEzNjAyXSBbU2VydmVyXSBDaGFubmVsIG15c3FsX21haW4gY29uZmlndXJlZCB0byBzdXBwb3J0IFRMUy4gRW5jcnlwdGVkIGNvbm5lY3Rpb25zIGFyZSBub3cgc3VwcG9ydGVkIGZvciB0aGlzIGNoYW5uZWwuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMDgtMTJUMjI6MjA6MjQuODYzOTE2WiAwIFtXYXJuaW5nXSBbTVktMDExODEwXSBbU2VydmVyXSBJbnNlY3VyZSBjb25maWd1cmF0aW9uIGZvciAtLXBpZC1maWxlOiBMb2NhdGlvbiAnL3Zhci9ydW4vbXlzcWxkJyBpbiB0aGUgcGF0aCBpcyBhY2Nlc3NpYmxlIHRvIGFsbCBPUyB1c2Vycy4gQ29uc2lkZXIgY2hvb3NpbmcgYSBkaWZmZXJlbnQgZGlyZWN0b3J5LgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTA4LTEyVDIyOjIwOjI0Ljg5MTk5NFogMCBbU3lzdGVtXSBbTVktMDEwOTMxXSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkOiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIFZlcnNpb246ICc4LjAuMjMnICBzb2NrZXQ6ICcvdmFyL3J1bi9teXNxbGQvbXlzcWxkLnNvY2snICBwb3J0OiAzMzA2ICBNeVNRTCBDb21tdW5pdHkgU2VydmVyIC0gR1BMLgpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMi0wOS0zMCAyMjoyMTo1MyswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAUzIwMjItMDktMzAgMjI6MjE6NTUrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogU3dpdGNoaW5nIHRvIGRlZGljYXRlZCB1c2VyICdteXNxbCcKbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjItMDktMzAgMjI6MjE6NTUrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAHMyMDIyLTA5LTMwVDIyOjIxOjU1LjUyMTE1OVogMCBbU3lzdGVtXSBbTVktMDEwMTE2XSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkIChteXNxbGQgOC4wLjIzKSBzdGFydGluZyBhcyBwcm9jZXNzIDEKbXlzcWwtbXlzcWwJfCACAAAAAAAAXzIwMjItMDktMzBUMjI6MjE6NTUuNTczODgyWiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzZdIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAXTIwMjItMDktMzBUMjI6MjE6NTcuMjgyOTgxWiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzddIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgZW5kZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMDktMzBUMjI6MjE6NTcuODg5NjUxWiAwIFtTeXN0ZW1dIFtNWS0wMTEzMjNdIFtTZXJ2ZXJdIFggUGx1Z2luIHJlYWR5IGZvciBjb25uZWN0aW9ucy4gQmluZC1hZGRyZXNzOiAnOjonIHBvcnQ6IDMzMDYwLCBzb2NrZXQ6IC92YXIvcnVuL215c3FsZC9teXNxbHguc29jawpteXNxbC1teXNxbAl8IAIAAAAAAABaMjAyMi0wOS0zMFQyMjoyMTo1Ny45Nzk5MDZaIDAgW1N5c3RlbV0gW01ZLTAxMDIyOV0gW1NlcnZlcl0gU3RhcnRpbmcgWEEgY3Jhc2ggcmVjb3ZlcnkuLi4KbXlzcWwtbXlzcWwJfCACAAAAAAAAWDIwMjItMDktMzBUMjI6MjE6NTguMDAzMTI0WiAwIFtTeXN0ZW1dIFtNWS0wMTAyMzJdIFtTZXJ2ZXJdIFhBIGNyYXNoIHJlY292ZXJ5IGZpbmlzaGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABjMjAyMi0wOS0zMFQyMjoyMTo1OC4xNDk1MDFaIDAgW1dhcm5pbmddIFtNWS0wMTAwNjhdIFtTZXJ2ZXJdIENBIGNlcnRpZmljYXRlIGNhLnBlbSBpcyBzZWxmIHNpZ25lZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0wOS0zMFQyMjoyMTo1OC4xNTAwNDBaIDAgW1N5c3RlbV0gW01ZLTAxMzYwMl0gW1NlcnZlcl0gQ2hhbm5lbCBteXNxbF9tYWluIGNvbmZpZ3VyZWQgdG8gc3VwcG9ydCBUTFMuIEVuY3J5cHRlZCBjb25uZWN0aW9ucyBhcmUgbm93IHN1cHBvcnRlZCBmb3IgdGhpcyBjaGFubmVsLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTA5LTMwVDIyOjIxOjU4LjE2ODUyOFogMCBbV2FybmluZ10gW01ZLTAxMTgxMF0gW1NlcnZlcl0gSW5zZWN1cmUgY29uZmlndXJhdGlvbiBmb3IgLS1waWQtZmlsZTogTG9jYXRpb24gJy92YXIvcnVuL215c3FsZCcgaW4gdGhlIHBhdGggaXMgYWNjZXNzaWJsZSB0byBhbGwgT1MgdXNlcnMuIENvbnNpZGVyIGNob29zaW5nIGEgZGlmZmVyZW50IGRpcmVjdG9yeS4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0wOS0zMFQyMjoyMTo1OC4zNzA4NTVaIDAgW1N5c3RlbV0gW01ZLTAxMDkzMV0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZDogcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBWZXJzaW9uOiAnOC4wLjIzJyAgc29ja2V0OiAnL3Zhci9ydW4vbXlzcWxkL215c3FsZC5zb2NrJyAgcG9ydDogMzMwNiAgTXlTUUwgQ29tbXVuaXR5IFNlcnZlciAtIEdQTC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjItMTAtMDggMDA6NTg6MTIrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAQAAAAAAAFMyMDIyLTEwLTA4IDAwOjU4OjEyKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IFN3aXRjaGluZyB0byBkZWRpY2F0ZWQgdXNlciAnbXlzcWwnCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIyLTEwLTA4IDAwOjU4OjEyKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABzMjAyMi0xMC0wOFQwMDo1ODoxMy4wNzAwNTRaIDAgW1N5c3RlbV0gW01ZLTAxMDExNl0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZCAobXlzcWxkIDguMC4yMykgc3RhcnRpbmcgYXMgcHJvY2VzcyAxCm15c3FsLW15c3FsCXwgAgAAAAAAAF8yMDIyLTEwLTA4VDAwOjU4OjEzLjA4MDI1OFogMSBbU3lzdGVtXSBbTVktMDEzNTc2XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAF0yMDIyLTEwLTA4VDAwOjU4OjEzLjkwMDM3MVogMSBbU3lzdGVtXSBbTVktMDEzNTc3XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIGVuZGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTEwLTA4VDAwOjU4OjE0LjA0ODYxMlogMCBbU3lzdGVtXSBbTVktMDExMzIzXSBbU2VydmVyXSBYIFBsdWdpbiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIEJpbmQtYWRkcmVzczogJzo6JyBwb3J0OiAzMzA2MCwgc29ja2V0OiAvdmFyL3J1bi9teXNxbGQvbXlzcWx4LnNvY2sKbXlzcWwtbXlzcWwJfCACAAAAAAAAWjIwMjItMTAtMDhUMDA6NTg6MTQuMDc5OTg1WiAwIFtTeXN0ZW1dIFtNWS0wMTAyMjldIFtTZXJ2ZXJdIFN0YXJ0aW5nIFhBIGNyYXNoIHJlY292ZXJ5Li4uCm15c3FsLW15c3FsCXwgAgAAAAAAAFgyMDIyLTEwLTA4VDAwOjU4OjE0LjA4NzY4MFogMCBbU3lzdGVtXSBbTVktMDEwMjMyXSBbU2VydmVyXSBYQSBjcmFzaCByZWNvdmVyeSBmaW5pc2hlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAYzIwMjItMTAtMDhUMDA6NTg6MTQuMTM2ODU4WiAwIFtXYXJuaW5nXSBbTVktMDEwMDY4XSBbU2VydmVyXSBDQSBjZXJ0aWZpY2F0ZSBjYS5wZW0gaXMgc2VsZiBzaWduZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMDhUMDA6NTg6MTQuMTM3MDI2WiAwIFtTeXN0ZW1dIFtNWS0wMTM2MDJdIFtTZXJ2ZXJdIENoYW5uZWwgbXlzcWxfbWFpbiBjb25maWd1cmVkIHRvIHN1cHBvcnQgVExTLiBFbmNyeXB0ZWQgY29ubmVjdGlvbnMgYXJlIG5vdyBzdXBwb3J0ZWQgZm9yIHRoaXMgY2hhbm5lbC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0xMC0wOFQwMDo1ODoxNC4xNTUwMzFaIDAgW1dhcm5pbmddIFtNWS0wMTE4MTBdIFtTZXJ2ZXJdIEluc2VjdXJlIGNvbmZpZ3VyYXRpb24gZm9yIC0tcGlkLWZpbGU6IExvY2F0aW9uICcvdmFyL3J1bi9teXNxbGQnIGluIHRoZSBwYXRoIGlzIGFjY2Vzc2libGUgdG8gYWxsIE9TIHVzZXJzLiBDb25zaWRlciBjaG9vc2luZyBhIGRpZmZlcmVudCBkaXJlY3RvcnkuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMDhUMDA6NTg6MTQuMjMwMDIzWiAwIFtTeXN0ZW1dIFtNWS0wMTA5MzFdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IHJlYWR5IGZvciBjb25uZWN0aW9ucy4gVmVyc2lvbjogJzguMC4yMycgIHNvY2tldDogJy92YXIvcnVuL215c3FsZC9teXNxbGQuc29jaycgIHBvcnQ6IDMzMDYgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMTNUMDY6NTY6MDIuMTM3NjQxWiAwIFtTeXN0ZW1dIFtNWS0wMTMxNzJdIFtTZXJ2ZXJdIFJlY2VpdmVkIFNIVVRET1dOIGZyb20gdXNlciA8dmlhIHVzZXIgc2lnbmFsPi4gU2h1dHRpbmcgZG93biBteXNxbGQgKFZlcnNpb246IDguMC4yMykuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMTNUMDY6NTY6MDMuMTMxMzI5WiAwIFtTeXN0ZW1dIFtNWS0wMTA5MTBdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IFNodXRkb3duIGNvbXBsZXRlIChteXNxbGQgOC4wLjIzKSAgTXlTUUwgQ29tbXVuaXR5IFNlcnZlciAtIEdQTC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjItMTAtMTMgMDY6NTg6MzYrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAQAAAAAAAFMyMDIyLTEwLTEzIDA2OjU4OjM3KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IFN3aXRjaGluZyB0byBkZWRpY2F0ZWQgdXNlciAnbXlzcWwnCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIyLTEwLTEzIDA2OjU4OjM3KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABzMjAyMi0xMC0xM1QwNjo1ODozNy40OTkwNjJaIDAgW1N5c3RlbV0gW01ZLTAxMDExNl0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZCAobXlzcWxkIDguMC4yMykgc3RhcnRpbmcgYXMgcHJvY2VzcyAxCm15c3FsLW15c3FsCXwgAgAAAAAAAF8yMDIyLTEwLTEzVDA2OjU4OjM3LjUyMzA4OFogMSBbU3lzdGVtXSBbTVktMDEzNTc2XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAF0yMDIyLTEwLTEzVDA2OjU4OjM4LjE2NTg1M1ogMSBbU3lzdGVtXSBbTVktMDEzNTc3XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIGVuZGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTEwLTEzVDA2OjU4OjM4LjMwNTUxMFogMCBbU3lzdGVtXSBbTVktMDExMzIzXSBbU2VydmVyXSBYIFBsdWdpbiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIEJpbmQtYWRkcmVzczogJzo6JyBwb3J0OiAzMzA2MCwgc29ja2V0OiAvdmFyL3J1bi9teXNxbGQvbXlzcWx4LnNvY2sKbXlzcWwtbXlzcWwJfCACAAAAAAAAYzIwMjItMTAtMTNUMDY6NTg6MzguNDE4OTk3WiAwIFtXYXJuaW5nXSBbTVktMDEwMDY4XSBbU2VydmVyXSBDQSBjZXJ0aWZpY2F0ZSBjYS5wZW0gaXMgc2VsZiBzaWduZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMTNUMDY6NTg6MzguNDE5Mzc1WiAwIFtTeXN0ZW1dIFtNWS0wMTM2MDJdIFtTZXJ2ZXJdIENoYW5uZWwgbXlzcWxfbWFpbiBjb25maWd1cmVkIHRvIHN1cHBvcnQgVExTLiBFbmNyeXB0ZWQgY29ubmVjdGlvbnMgYXJlIG5vdyBzdXBwb3J0ZWQgZm9yIHRoaXMgY2hhbm5lbC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0xMC0xM1QwNjo1ODozOC40MzU0MDdaIDAgW1dhcm5pbmddIFtNWS0wMTE4MTBdIFtTZXJ2ZXJdIEluc2VjdXJlIGNvbmZpZ3VyYXRpb24gZm9yIC0tcGlkLWZpbGU6IExvY2F0aW9uICcvdmFyL3J1bi9teXNxbGQnIGluIHRoZSBwYXRoIGlzIGFjY2Vzc2libGUgdG8gYWxsIE9TIHVzZXJzLiBDb25zaWRlciBjaG9vc2luZyBhIGRpZmZlcmVudCBkaXJlY3RvcnkuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMTNUMDY6NTg6MzguNDk2NjMzWiAwIFtTeXN0ZW1dIFtNWS0wMTA5MzFdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IHJlYWR5IGZvciBjb25uZWN0aW9ucy4gVmVyc2lvbjogJzguMC4yMycgIHNvY2tldDogJy92YXIvcnVuL215c3FsZC9teXNxbGQuc29jaycgIHBvcnQ6IDMzMDYgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIyLTEwLTE4IDE3OjA3OjE4KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAEAAAAAAABTMjAyMi0xMC0xOCAxNzowNzoxOCswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBTd2l0Y2hpbmcgdG8gZGVkaWNhdGVkIHVzZXIgJ215c3FsJwpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMi0xMC0xOCAxNzowNzoxOCswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAczIwMjItMTAtMThUMTc6MDc6MTguOTQ1MTYzWiAwIFtTeXN0ZW1dIFtNWS0wMTAxMTZdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQgKG15c3FsZCA4LjAuMjMpIHN0YXJ0aW5nIGFzIHByb2Nlc3MgMQpteXNxbC1teXNxbAl8IAIAAAAAAABfMjAyMi0xMC0xOFQxNzowNzoxOS4wMDQyNDlaIDEgW1N5c3RlbV0gW01ZLTAxMzU3Nl0gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABdMjAyMi0xMC0xOFQxNzowNzoxOS43MDg3NTBaIDEgW1N5c3RlbV0gW01ZLTAxMzU3N10gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBlbmRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0xMC0xOFQxNzowNzoxOS44OTQ2MTBaIDAgW1N5c3RlbV0gW01ZLTAxMTMyM10gW1NlcnZlcl0gWCBQbHVnaW4gcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBCaW5kLWFkZHJlc3M6ICc6OicgcG9ydDogMzMwNjAsIHNvY2tldDogL3Zhci9ydW4vbXlzcWxkL215c3FseC5zb2NrCm15c3FsLW15c3FsCXwgAgAAAAAAAFoyMDIyLTEwLTE4VDE3OjA3OjE5Ljk0MTI2NVogMCBbU3lzdGVtXSBbTVktMDEwMjI5XSBbU2VydmVyXSBTdGFydGluZyBYQSBjcmFzaCByZWNvdmVyeS4uLgpteXNxbC1teXNxbAl8IAIAAAAAAABYMjAyMi0xMC0xOFQxNzowNzoxOS45NjI0NDhaIDAgW1N5c3RlbV0gW01ZLTAxMDIzMl0gW1NlcnZlcl0gWEEgY3Jhc2ggcmVjb3ZlcnkgZmluaXNoZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAGMyMDIyLTEwLTE4VDE3OjA3OjIwLjAyNzI1MlogMCBbV2FybmluZ10gW01ZLTAxMDA2OF0gW1NlcnZlcl0gQ0EgY2VydGlmaWNhdGUgY2EucGVtIGlzIHNlbGYgc2lnbmVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTEwLTE4VDE3OjA3OjIwLjAyNzU1MlogMCBbU3lzdGVtXSBbTVktMDEzNjAyXSBbU2VydmVyXSBDaGFubmVsIG15c3FsX21haW4gY29uZmlndXJlZCB0byBzdXBwb3J0IFRMUy4gRW5jcnlwdGVkIGNvbm5lY3Rpb25zIGFyZSBub3cgc3VwcG9ydGVkIGZvciB0aGlzIGNoYW5uZWwuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMThUMTc6MDc6MjAuMDQzMzI2WiAwIFtXYXJuaW5nXSBbTVktMDExODEwXSBbU2VydmVyXSBJbnNlY3VyZSBjb25maWd1cmF0aW9uIGZvciAtLXBpZC1maWxlOiBMb2NhdGlvbiAnL3Zhci9ydW4vbXlzcWxkJyBpbiB0aGUgcGF0aCBpcyBhY2Nlc3NpYmxlIHRvIGFsbCBPUyB1c2Vycy4gQ29uc2lkZXIgY2hvb3NpbmcgYSBkaWZmZXJlbnQgZGlyZWN0b3J5LgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTEwLTE4VDE3OjA3OjIwLjA3NjAzNlogMCBbU3lzdGVtXSBbTVktMDEwOTMxXSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkOiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIFZlcnNpb246ICc4LjAuMjMnICBzb2NrZXQ6ICcvdmFyL3J1bi9teXNxbGQvbXlzcWxkLnNvY2snICBwb3J0OiAzMzA2ICBNeVNRTCBDb21tdW5pdHkgU2VydmVyIC0gR1BMLgpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMi0xMC0xOSAxNTo0Mjo0OCswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAUzIwMjItMTAtMTkgMTU6NDI6NDgrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogU3dpdGNoaW5nIHRvIGRlZGljYXRlZCB1c2VyICdteXNxbCcKbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjItMTAtMTkgMTU6NDI6NDgrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAHMyMDIyLTEwLTE5VDE1OjQyOjQ4LjkwMDQzMVogMCBbU3lzdGVtXSBbTVktMDEwMTE2XSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkIChteXNxbGQgOC4wLjIzKSBzdGFydGluZyBhcyBwcm9jZXNzIDEKbXlzcWwtbXlzcWwJfCACAAAAAAAAXzIwMjItMTAtMTlUMTU6NDI6NDguOTA5ODgzWiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzZdIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAXTIwMjItMTAtMTlUMTU6NDI6NDkuOTM3NzM0WiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzddIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgZW5kZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMTlUMTU6NDI6NTAuMDg3NTgxWiAwIFtTeXN0ZW1dIFtNWS0wMTEzMjNdIFtTZXJ2ZXJdIFggUGx1Z2luIHJlYWR5IGZvciBjb25uZWN0aW9ucy4gQmluZC1hZGRyZXNzOiAnOjonIHBvcnQ6IDMzMDYwLCBzb2NrZXQ6IC92YXIvcnVuL215c3FsZC9teXNxbHguc29jawpteXNxbC1teXNxbAl8IAIAAAAAAABaMjAyMi0xMC0xOVQxNTo0Mjo1MC4xMjU3MzFaIDAgW1N5c3RlbV0gW01ZLTAxMDIyOV0gW1NlcnZlcl0gU3RhcnRpbmcgWEEgY3Jhc2ggcmVjb3ZlcnkuLi4KbXlzcWwtbXlzcWwJfCACAAAAAAAAWDIwMjItMTAtMTlUMTU6NDI6NTAuMTMzNDM0WiAwIFtTeXN0ZW1dIFtNWS0wMTAyMzJdIFtTZXJ2ZXJdIFhBIGNyYXNoIHJlY292ZXJ5IGZpbmlzaGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABjMjAyMi0xMC0xOVQxNTo0Mjo1MC4yMjk3MDdaIDAgW1dhcm5pbmddIFtNWS0wMTAwNjhdIFtTZXJ2ZXJdIENBIGNlcnRpZmljYXRlIGNhLnBlbSBpcyBzZWxmIHNpZ25lZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0xMC0xOVQxNTo0Mjo1MC4yMzAzNjRaIDAgW1N5c3RlbV0gW01ZLTAxMzYwMl0gW1NlcnZlcl0gQ2hhbm5lbCBteXNxbF9tYWluIGNvbmZpZ3VyZWQgdG8gc3VwcG9ydCBUTFMuIEVuY3J5cHRlZCBjb25uZWN0aW9ucyBhcmUgbm93IHN1cHBvcnRlZCBmb3IgdGhpcyBjaGFubmVsLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTEwLTE5VDE1OjQyOjUwLjI0NjY2MlogMCBbV2FybmluZ10gW01ZLTAxMTgxMF0gW1NlcnZlcl0gSW5zZWN1cmUgY29uZmlndXJhdGlvbiBmb3IgLS1waWQtZmlsZTogTG9jYXRpb24gJy92YXIvcnVuL215c3FsZCcgaW4gdGhlIHBhdGggaXMgYWNjZXNzaWJsZSB0byBhbGwgT1MgdXNlcnMuIENvbnNpZGVyIGNob29zaW5nIGEgZGlmZmVyZW50IGRpcmVjdG9yeS4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0xMC0xOVQxNTo0Mjo1MC40MDU2ODNaIDAgW1N5c3RlbV0gW01ZLTAxMDkzMV0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZDogcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBWZXJzaW9uOiAnOC4wLjIzJyAgc29ja2V0OiAnL3Zhci9ydW4vbXlzcWxkL215c3FsZC5zb2NrJyAgcG9ydDogMzMwNiAgTXlTUUwgQ29tbXVuaXR5IFNlcnZlciAtIEdQTC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjItMTAtMjAgMjA6MTY6MzkrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAQAAAAAAAFMyMDIyLTEwLTIwIDIwOjE2OjM5KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IFN3aXRjaGluZyB0byBkZWRpY2F0ZWQgdXNlciAnbXlzcWwnCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIyLTEwLTIwIDIwOjE2OjM5KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABzMjAyMi0xMC0yMFQyMDoxNjo0MC4wMTAzNDhaIDAgW1N5c3RlbV0gW01ZLTAxMDExNl0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZCAobXlzcWxkIDguMC4yMykgc3RhcnRpbmcgYXMgcHJvY2VzcyAxCm15c3FsLW15c3FsCXwgAgAAAAAAAF8yMDIyLTEwLTIwVDIwOjE2OjQwLjAyMTAzNVogMSBbU3lzdGVtXSBbTVktMDEzNTc2XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAF0yMDIyLTEwLTIwVDIwOjE2OjQwLjg0MzU2M1ogMSBbU3lzdGVtXSBbTVktMDEzNTc3XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIGVuZGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTEwLTIwVDIwOjE2OjQwLjk5MzcwMlogMCBbU3lzdGVtXSBbTVktMDExMzIzXSBbU2VydmVyXSBYIFBsdWdpbiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIEJpbmQtYWRkcmVzczogJzo6JyBwb3J0OiAzMzA2MCwgc29ja2V0OiAvdmFyL3J1bi9teXNxbGQvbXlzcWx4LnNvY2sKbXlzcWwtbXlzcWwJfCACAAAAAAAAWjIwMjItMTAtMjBUMjA6MTY6NDEuMDI2Njk5WiAwIFtTeXN0ZW1dIFtNWS0wMTAyMjldIFtTZXJ2ZXJdIFN0YXJ0aW5nIFhBIGNyYXNoIHJlY292ZXJ5Li4uCm15c3FsLW15c3FsCXwgAgAAAAAAAFgyMDIyLTEwLTIwVDIwOjE2OjQxLjA1MTUzNlogMCBbU3lzdGVtXSBbTVktMDEwMjMyXSBbU2VydmVyXSBYQSBjcmFzaCByZWNvdmVyeSBmaW5pc2hlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAYzIwMjItMTAtMjBUMjA6MTY6NDEuMTM5ODAzWiAwIFtXYXJuaW5nXSBbTVktMDEwMDY4XSBbU2VydmVyXSBDQSBjZXJ0aWZpY2F0ZSBjYS5wZW0gaXMgc2VsZiBzaWduZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMjBUMjA6MTY6NDEuMTQwNjk3WiAwIFtTeXN0ZW1dIFtNWS0wMTM2MDJdIFtTZXJ2ZXJdIENoYW5uZWwgbXlzcWxfbWFpbiBjb25maWd1cmVkIHRvIHN1cHBvcnQgVExTLiBFbmNyeXB0ZWQgY29ubmVjdGlvbnMgYXJlIG5vdyBzdXBwb3J0ZWQgZm9yIHRoaXMgY2hhbm5lbC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0xMC0yMFQyMDoxNjo0MS4xNTU0OTFaIDAgW1dhcm5pbmddIFtNWS0wMTE4MTBdIFtTZXJ2ZXJdIEluc2VjdXJlIGNvbmZpZ3VyYXRpb24gZm9yIC0tcGlkLWZpbGU6IExvY2F0aW9uICcvdmFyL3J1bi9teXNxbGQnIGluIHRoZSBwYXRoIGlzIGFjY2Vzc2libGUgdG8gYWxsIE9TIHVzZXJzLiBDb25zaWRlciBjaG9vc2luZyBhIGRpZmZlcmVudCBkaXJlY3RvcnkuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMjBUMjA6MTY6NDEuMTk4MTE3WiAwIFtTeXN0ZW1dIFtNWS0wMTA5MzFdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IHJlYWR5IGZvciBjb25uZWN0aW9ucy4gVmVyc2lvbjogJzguMC4yMycgIHNvY2tldDogJy92YXIvcnVuL215c3FsZC9teXNxbGQuc29jaycgIHBvcnQ6IDMzMDYgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIyLTEwLTIxIDE0OjQ0OjU2KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAEAAAAAAABTMjAyMi0xMC0yMSAxNDo0NDo1NyswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBTd2l0Y2hpbmcgdG8gZGVkaWNhdGVkIHVzZXIgJ215c3FsJwpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMi0xMC0yMSAxNDo0NDo1NyswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAczIwMjItMTAtMjFUMTQ6NDQ6NTcuNjc5MDYxWiAwIFtTeXN0ZW1dIFtNWS0wMTAxMTZdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQgKG15c3FsZCA4LjAuMjMpIHN0YXJ0aW5nIGFzIHByb2Nlc3MgMQpteXNxbC1teXNxbAl8IAIAAAAAAABfMjAyMi0xMC0yMVQxNDo0NDo1Ny42OTM3MzNaIDEgW1N5c3RlbV0gW01ZLTAxMzU3Nl0gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABdMjAyMi0xMC0yMVQxNDo0NDo1OC40OTkzMTFaIDEgW1N5c3RlbV0gW01ZLTAxMzU3N10gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBlbmRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0xMC0yMVQxNDo0NDo1OC42NTUwOTRaIDAgW1N5c3RlbV0gW01ZLTAxMTMyM10gW1NlcnZlcl0gWCBQbHVnaW4gcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBCaW5kLWFkZHJlc3M6ICc6OicgcG9ydDogMzMwNjAsIHNvY2tldDogL3Zhci9ydW4vbXlzcWxkL215c3FseC5zb2NrCm15c3FsLW15c3FsCXwgAgAAAAAAAFoyMDIyLTEwLTIxVDE0OjQ0OjU4LjcwMTU2NFogMCBbU3lzdGVtXSBbTVktMDEwMjI5XSBbU2VydmVyXSBTdGFydGluZyBYQSBjcmFzaCByZWNvdmVyeS4uLgpteXNxbC1teXNxbAl8IAIAAAAAAABYMjAyMi0xMC0yMVQxNDo0NDo1OC43MjY5NzhaIDAgW1N5c3RlbV0gW01ZLTAxMDIzMl0gW1NlcnZlcl0gWEEgY3Jhc2ggcmVjb3ZlcnkgZmluaXNoZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAGMyMDIyLTEwLTIxVDE0OjQ0OjU4LjgwMTg4MFogMCBbV2FybmluZ10gW01ZLTAxMDA2OF0gW1NlcnZlcl0gQ0EgY2VydGlmaWNhdGUgY2EucGVtIGlzIHNlbGYgc2lnbmVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTEwLTIxVDE0OjQ0OjU4LjgwMjMxNFogMCBbU3lzdGVtXSBbTVktMDEzNjAyXSBbU2VydmVyXSBDaGFubmVsIG15c3FsX21haW4gY29uZmlndXJlZCB0byBzdXBwb3J0IFRMUy4gRW5jcnlwdGVkIGNvbm5lY3Rpb25zIGFyZSBub3cgc3VwcG9ydGVkIGZvciB0aGlzIGNoYW5uZWwuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMjFUMTQ6NDQ6NTguODEzNDc2WiAwIFtXYXJuaW5nXSBbTVktMDExODEwXSBbU2VydmVyXSBJbnNlY3VyZSBjb25maWd1cmF0aW9uIGZvciAtLXBpZC1maWxlOiBMb2NhdGlvbiAnL3Zhci9ydW4vbXlzcWxkJyBpbiB0aGUgcGF0aCBpcyBhY2Nlc3NpYmxlIHRvIGFsbCBPUyB1c2Vycy4gQ29uc2lkZXIgY2hvb3NpbmcgYSBkaWZmZXJlbnQgZGlyZWN0b3J5LgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTEwLTIxVDE0OjQ0OjU4Ljg2ODU2OFogMCBbU3lzdGVtXSBbTVktMDEwOTMxXSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkOiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIFZlcnNpb246ICc4LjAuMjMnICBzb2NrZXQ6ICcvdmFyL3J1bi9teXNxbGQvbXlzcWxkLnNvY2snICBwb3J0OiAzMzA2ICBNeVNRTCBDb21tdW5pdHkgU2VydmVyIC0gR1BMLgpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMi0xMC0yNCAyMToyMToxNyswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAUzIwMjItMTAtMjQgMjE6MjE6MTgrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogU3dpdGNoaW5nIHRvIGRlZGljYXRlZCB1c2VyICdteXNxbCcKbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjItMTAtMjQgMjE6MjE6MTgrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAHMyMDIyLTEwLTI0VDIxOjIxOjE4LjQxMzI4N1ogMCBbU3lzdGVtXSBbTVktMDEwMTE2XSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkIChteXNxbGQgOC4wLjIzKSBzdGFydGluZyBhcyBwcm9jZXNzIDEKbXlzcWwtbXlzcWwJfCACAAAAAAAAXzIwMjItMTAtMjRUMjE6MjE6MTguNDIzMTg4WiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzZdIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAXTIwMjItMTAtMjRUMjE6MjE6MTkuMTYxMTg2WiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzddIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgZW5kZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMjRUMjE6MjE6MTkuMjk4MTkxWiAwIFtTeXN0ZW1dIFtNWS0wMTEzMjNdIFtTZXJ2ZXJdIFggUGx1Z2luIHJlYWR5IGZvciBjb25uZWN0aW9ucy4gQmluZC1hZGRyZXNzOiAnOjonIHBvcnQ6IDMzMDYwLCBzb2NrZXQ6IC92YXIvcnVuL215c3FsZC9teXNxbHguc29jawpteXNxbC1teXNxbAl8IAIAAAAAAABaMjAyMi0xMC0yNFQyMToyMToxOS4zNjIxMjVaIDAgW1N5c3RlbV0gW01ZLTAxMDIyOV0gW1NlcnZlcl0gU3RhcnRpbmcgWEEgY3Jhc2ggcmVjb3ZlcnkuLi4KbXlzcWwtbXlzcWwJfCACAAAAAAAAWDIwMjItMTAtMjRUMjE6MjE6MTkuMzcwMTU2WiAwIFtTeXN0ZW1dIFtNWS0wMTAyMzJdIFtTZXJ2ZXJdIFhBIGNyYXNoIHJlY292ZXJ5IGZpbmlzaGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABjMjAyMi0xMC0yNFQyMToyMToxOS40NDc0NjVaIDAgW1dhcm5pbmddIFtNWS0wMTAwNjhdIFtTZXJ2ZXJdIENBIGNlcnRpZmljYXRlIGNhLnBlbSBpcyBzZWxmIHNpZ25lZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0xMC0yNFQyMToyMToxOS40NDgwMzRaIDAgW1N5c3RlbV0gW01ZLTAxMzYwMl0gW1NlcnZlcl0gQ2hhbm5lbCBteXNxbF9tYWluIGNvbmZpZ3VyZWQgdG8gc3VwcG9ydCBUTFMuIEVuY3J5cHRlZCBjb25uZWN0aW9ucyBhcmUgbm93IHN1cHBvcnRlZCBmb3IgdGhpcyBjaGFubmVsLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTEwLTI0VDIxOjIxOjE5LjQ1OTYyNlogMCBbV2FybmluZ10gW01ZLTAxMTgxMF0gW1NlcnZlcl0gSW5zZWN1cmUgY29uZmlndXJhdGlvbiBmb3IgLS1waWQtZmlsZTogTG9jYXRpb24gJy92YXIvcnVuL215c3FsZCcgaW4gdGhlIHBhdGggaXMgYWNjZXNzaWJsZSB0byBhbGwgT1MgdXNlcnMuIENvbnNpZGVyIGNob29zaW5nIGEgZGlmZmVyZW50IGRpcmVjdG9yeS4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0xMC0yNFQyMToyMToxOS41MTY3NThaIDAgW1N5c3RlbV0gW01ZLTAxMDkzMV0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZDogcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBWZXJzaW9uOiAnOC4wLjIzJyAgc29ja2V0OiAnL3Zhci9ydW4vbXlzcWxkL215c3FsZC5zb2NrJyAgcG9ydDogMzMwNiAgTXlTUUwgQ29tbXVuaXR5IFNlcnZlciAtIEdQTC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjItMTAtMjUgMTY6MDA6NTErMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAQAAAAAAAFMyMDIyLTEwLTI1IDE2OjAwOjUxKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IFN3aXRjaGluZyB0byBkZWRpY2F0ZWQgdXNlciAnbXlzcWwnCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIyLTEwLTI1IDE2OjAwOjUxKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABzMjAyMi0xMC0yNVQxNjowMDo1MS42OTg0NDdaIDAgW1N5c3RlbV0gW01ZLTAxMDExNl0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZCAobXlzcWxkIDguMC4yMykgc3RhcnRpbmcgYXMgcHJvY2VzcyAxCm15c3FsLW15c3FsCXwgAgAAAAAAAF8yMDIyLTEwLTI1VDE2OjAwOjUxLjcyMDEzN1ogMSBbU3lzdGVtXSBbTVktMDEzNTc2XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAF0yMDIyLTEwLTI1VDE2OjAwOjUyLjQ3MTY3NFogMSBbU3lzdGVtXSBbTVktMDEzNTc3XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIGVuZGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTEwLTI1VDE2OjAwOjUyLjYyMDI5N1ogMCBbU3lzdGVtXSBbTVktMDExMzIzXSBbU2VydmVyXSBYIFBsdWdpbiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIEJpbmQtYWRkcmVzczogJzo6JyBwb3J0OiAzMzA2MCwgc29ja2V0OiAvdmFyL3J1bi9teXNxbGQvbXlzcWx4LnNvY2sKbXlzcWwtbXlzcWwJfCACAAAAAAAAWjIwMjItMTAtMjVUMTY6MDA6NTIuNjcwNTk5WiAwIFtTeXN0ZW1dIFtNWS0wMTAyMjldIFtTZXJ2ZXJdIFN0YXJ0aW5nIFhBIGNyYXNoIHJlY292ZXJ5Li4uCm15c3FsLW15c3FsCXwgAgAAAAAAAFgyMDIyLTEwLTI1VDE2OjAwOjUyLjY5NjkyMFogMCBbU3lzdGVtXSBbTVktMDEwMjMyXSBbU2VydmVyXSBYQSBjcmFzaCByZWNvdmVyeSBmaW5pc2hlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAYzIwMjItMTAtMjVUMTY6MDA6NTIuNzYwMTQwWiAwIFtXYXJuaW5nXSBbTVktMDEwMDY4XSBbU2VydmVyXSBDQSBjZXJ0aWZpY2F0ZSBjYS5wZW0gaXMgc2VsZiBzaWduZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMjVUMTY6MDA6NTIuNzYwNjExWiAwIFtTeXN0ZW1dIFtNWS0wMTM2MDJdIFtTZXJ2ZXJdIENoYW5uZWwgbXlzcWxfbWFpbiBjb25maWd1cmVkIHRvIHN1cHBvcnQgVExTLiBFbmNyeXB0ZWQgY29ubmVjdGlvbnMgYXJlIG5vdyBzdXBwb3J0ZWQgZm9yIHRoaXMgY2hhbm5lbC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0xMC0yNVQxNjowMDo1Mi43NzE0ODhaIDAgW1dhcm5pbmddIFtNWS0wMTE4MTBdIFtTZXJ2ZXJdIEluc2VjdXJlIGNvbmZpZ3VyYXRpb24gZm9yIC0tcGlkLWZpbGU6IExvY2F0aW9uICcvdmFyL3J1bi9teXNxbGQnIGluIHRoZSBwYXRoIGlzIGFjY2Vzc2libGUgdG8gYWxsIE9TIHVzZXJzLiBDb25zaWRlciBjaG9vc2luZyBhIGRpZmZlcmVudCBkaXJlY3RvcnkuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMjVUMTY6MDA6NTIuODY0MTUyWiAwIFtTeXN0ZW1dIFtNWS0wMTA5MzFdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IHJlYWR5IGZvciBjb25uZWN0aW9ucy4gVmVyc2lvbjogJzguMC4yMycgIHNvY2tldDogJy92YXIvcnVuL215c3FsZC9teXNxbGQuc29jaycgIHBvcnQ6IDMzMDYgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIyLTEwLTI1IDIwOjUwOjM0KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAEAAAAAAABTMjAyMi0xMC0yNSAyMDo1MDozNCswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBTd2l0Y2hpbmcgdG8gZGVkaWNhdGVkIHVzZXIgJ215c3FsJwpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMi0xMC0yNSAyMDo1MDozNCswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAczIwMjItMTAtMjVUMjA6NTA6MzQuODM5Njc1WiAwIFtTeXN0ZW1dIFtNWS0wMTAxMTZdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQgKG15c3FsZCA4LjAuMjMpIHN0YXJ0aW5nIGFzIHByb2Nlc3MgMQpteXNxbC1teXNxbAl8IAIAAAAAAABfMjAyMi0xMC0yNVQyMDo1MDozNC44NDk0NjFaIDEgW1N5c3RlbV0gW01ZLTAxMzU3Nl0gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABdMjAyMi0xMC0yNVQyMDo1MDozNS42MTE5NjNaIDEgW1N5c3RlbV0gW01ZLTAxMzU3N10gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBlbmRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0xMC0yNVQyMDo1MDozNS43NTk3MzFaIDAgW1N5c3RlbV0gW01ZLTAxMTMyM10gW1NlcnZlcl0gWCBQbHVnaW4gcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBCaW5kLWFkZHJlc3M6ICc6OicgcG9ydDogMzMwNjAsIHNvY2tldDogL3Zhci9ydW4vbXlzcWxkL215c3FseC5zb2NrCm15c3FsLW15c3FsCXwgAgAAAAAAAFoyMDIyLTEwLTI1VDIwOjUwOjM1LjgxMTYxM1ogMCBbU3lzdGVtXSBbTVktMDEwMjI5XSBbU2VydmVyXSBTdGFydGluZyBYQSBjcmFzaCByZWNvdmVyeS4uLgpteXNxbC1teXNxbAl8IAIAAAAAAABYMjAyMi0xMC0yNVQyMDo1MDozNS44MjA3OTJaIDAgW1N5c3RlbV0gW01ZLTAxMDIzMl0gW1NlcnZlcl0gWEEgY3Jhc2ggcmVjb3ZlcnkgZmluaXNoZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAGMyMDIyLTEwLTI1VDIwOjUwOjM1Ljg3NzI2M1ogMCBbV2FybmluZ10gW01ZLTAxMDA2OF0gW1NlcnZlcl0gQ0EgY2VydGlmaWNhdGUgY2EucGVtIGlzIHNlbGYgc2lnbmVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTEwLTI1VDIwOjUwOjM1Ljg3NzY3NVogMCBbU3lzdGVtXSBbTVktMDEzNjAyXSBbU2VydmVyXSBDaGFubmVsIG15c3FsX21haW4gY29uZmlndXJlZCB0byBzdXBwb3J0IFRMUy4gRW5jcnlwdGVkIGNvbm5lY3Rpb25zIGFyZSBub3cgc3VwcG9ydGVkIGZvciB0aGlzIGNoYW5uZWwuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMjVUMjA6NTA6MzUuODg4NDkzWiAwIFtXYXJuaW5nXSBbTVktMDExODEwXSBbU2VydmVyXSBJbnNlY3VyZSBjb25maWd1cmF0aW9uIGZvciAtLXBpZC1maWxlOiBMb2NhdGlvbiAnL3Zhci9ydW4vbXlzcWxkJyBpbiB0aGUgcGF0aCBpcyBhY2Nlc3NpYmxlIHRvIGFsbCBPUyB1c2Vycy4gQ29uc2lkZXIgY2hvb3NpbmcgYSBkaWZmZXJlbnQgZGlyZWN0b3J5LgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTEwLTI1VDIwOjUwOjM1Ljk0MTQ4NlogMCBbU3lzdGVtXSBbTVktMDEwOTMxXSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkOiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIFZlcnNpb246ICc4LjAuMjMnICBzb2NrZXQ6ICcvdmFyL3J1bi9teXNxbGQvbXlzcWxkLnNvY2snICBwb3J0OiAzMzA2ICBNeVNRTCBDb21tdW5pdHkgU2VydmVyIC0gR1BMLgpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMi0xMC0yNSAyMjo1MDo1OSswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAUzIwMjItMTAtMjUgMjI6NTE6MDArMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogU3dpdGNoaW5nIHRvIGRlZGljYXRlZCB1c2VyICdteXNxbCcKbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjItMTAtMjUgMjI6NTE6MDArMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAHMyMDIyLTEwLTI1VDIyOjUxOjAwLjYxNTk1NVogMCBbU3lzdGVtXSBbTVktMDEwMTE2XSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkIChteXNxbGQgOC4wLjIzKSBzdGFydGluZyBhcyBwcm9jZXNzIDEKbXlzcWwtbXlzcWwJfCACAAAAAAAAXzIwMjItMTAtMjVUMjI6NTE6MDAuNjI1MTQxWiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzZdIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAXTIwMjItMTAtMjVUMjI6NTE6MDEuMzcxMTExWiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzddIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgZW5kZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMjVUMjI6NTE6MDEuNTIyNjc0WiAwIFtTeXN0ZW1dIFtNWS0wMTEzMjNdIFtTZXJ2ZXJdIFggUGx1Z2luIHJlYWR5IGZvciBjb25uZWN0aW9ucy4gQmluZC1hZGRyZXNzOiAnOjonIHBvcnQ6IDMzMDYwLCBzb2NrZXQ6IC92YXIvcnVuL215c3FsZC9teXNxbHguc29jawpteXNxbC1teXNxbAl8IAIAAAAAAABaMjAyMi0xMC0yNVQyMjo1MTowMS41NjkxOTZaIDAgW1N5c3RlbV0gW01ZLTAxMDIyOV0gW1NlcnZlcl0gU3RhcnRpbmcgWEEgY3Jhc2ggcmVjb3ZlcnkuLi4KbXlzcWwtbXlzcWwJfCACAAAAAAAAWDIwMjItMTAtMjVUMjI6NTE6MDEuNTkwMzQ5WiAwIFtTeXN0ZW1dIFtNWS0wMTAyMzJdIFtTZXJ2ZXJdIFhBIGNyYXNoIHJlY292ZXJ5IGZpbmlzaGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABjMjAyMi0xMC0yNVQyMjo1MTowMS42ODkwMzlaIDAgW1dhcm5pbmddIFtNWS0wMTAwNjhdIFtTZXJ2ZXJdIENBIGNlcnRpZmljYXRlIGNhLnBlbSBpcyBzZWxmIHNpZ25lZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0xMC0yNVQyMjo1MTowMS42ODk3OTBaIDAgW1N5c3RlbV0gW01ZLTAxMzYwMl0gW1NlcnZlcl0gQ2hhbm5lbCBteXNxbF9tYWluIGNvbmZpZ3VyZWQgdG8gc3VwcG9ydCBUTFMuIEVuY3J5cHRlZCBjb25uZWN0aW9ucyBhcmUgbm93IHN1cHBvcnRlZCBmb3IgdGhpcyBjaGFubmVsLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTEwLTI1VDIyOjUxOjAxLjcwMjYwNVogMCBbV2FybmluZ10gW01ZLTAxMTgxMF0gW1NlcnZlcl0gSW5zZWN1cmUgY29uZmlndXJhdGlvbiBmb3IgLS1waWQtZmlsZTogTG9jYXRpb24gJy92YXIvcnVuL215c3FsZCcgaW4gdGhlIHBhdGggaXMgYWNjZXNzaWJsZSB0byBhbGwgT1MgdXNlcnMuIENvbnNpZGVyIGNob29zaW5nIGEgZGlmZmVyZW50IGRpcmVjdG9yeS4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0xMC0yNVQyMjo1MTowMS43NTU3NjVaIDAgW1N5c3RlbV0gW01ZLTAxMDkzMV0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZDogcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBWZXJzaW9uOiAnOC4wLjIzJyAgc29ja2V0OiAnL3Zhci9ydW4vbXlzcWxkL215c3FsZC5zb2NrJyAgcG9ydDogMzMwNiAgTXlTUUwgQ29tbXVuaXR5IFNlcnZlciAtIEdQTC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjItMTAtMzEgMjA6MDI6MTIrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAQAAAAAAAFMyMDIyLTEwLTMxIDIwOjAyOjEzKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IFN3aXRjaGluZyB0byBkZWRpY2F0ZWQgdXNlciAnbXlzcWwnCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIyLTEwLTMxIDIwOjAyOjEzKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABzMjAyMi0xMC0zMVQyMDowMjoxMy45MzIwNjZaIDAgW1N5c3RlbV0gW01ZLTAxMDExNl0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZCAobXlzcWxkIDguMC4yMykgc3RhcnRpbmcgYXMgcHJvY2VzcyAxCm15c3FsLW15c3FsCXwgAgAAAAAAAF8yMDIyLTEwLTMxVDIwOjAyOjEzLjk2MjI2NFogMSBbU3lzdGVtXSBbTVktMDEzNTc2XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAF0yMDIyLTEwLTMxVDIwOjAyOjE1LjEyMTYwNlogMSBbU3lzdGVtXSBbTVktMDEzNTc3XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIGVuZGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTEwLTMxVDIwOjAyOjE1LjY0NTI2NVogMCBbU3lzdGVtXSBbTVktMDExMzIzXSBbU2VydmVyXSBYIFBsdWdpbiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIEJpbmQtYWRkcmVzczogJzo6JyBwb3J0OiAzMzA2MCwgc29ja2V0OiAvdmFyL3J1bi9teXNxbGQvbXlzcWx4LnNvY2sKbXlzcWwtbXlzcWwJfCACAAAAAAAAWjIwMjItMTAtMzFUMjA6MDI6MTUuNzQ1MTg1WiAwIFtTeXN0ZW1dIFtNWS0wMTAyMjldIFtTZXJ2ZXJdIFN0YXJ0aW5nIFhBIGNyYXNoIHJlY292ZXJ5Li4uCm15c3FsLW15c3FsCXwgAgAAAAAAAFgyMDIyLTEwLTMxVDIwOjAyOjE1Ljc2NjYwNlogMCBbU3lzdGVtXSBbTVktMDEwMjMyXSBbU2VydmVyXSBYQSBjcmFzaCByZWNvdmVyeSBmaW5pc2hlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAYzIwMjItMTAtMzFUMjA6MDI6MTUuODk2ODUzWiAwIFtXYXJuaW5nXSBbTVktMDEwMDY4XSBbU2VydmVyXSBDQSBjZXJ0aWZpY2F0ZSBjYS5wZW0gaXMgc2VsZiBzaWduZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMzFUMjA6MDI6MTUuODk3Mzc5WiAwIFtTeXN0ZW1dIFtNWS0wMTM2MDJdIFtTZXJ2ZXJdIENoYW5uZWwgbXlzcWxfbWFpbiBjb25maWd1cmVkIHRvIHN1cHBvcnQgVExTLiBFbmNyeXB0ZWQgY29ubmVjdGlvbnMgYXJlIG5vdyBzdXBwb3J0ZWQgZm9yIHRoaXMgY2hhbm5lbC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0xMC0zMVQyMDowMjoxNS45MjE0NjNaIDAgW1dhcm5pbmddIFtNWS0wMTE4MTBdIFtTZXJ2ZXJdIEluc2VjdXJlIGNvbmZpZ3VyYXRpb24gZm9yIC0tcGlkLWZpbGU6IExvY2F0aW9uICcvdmFyL3J1bi9teXNxbGQnIGluIHRoZSBwYXRoIGlzIGFjY2Vzc2libGUgdG8gYWxsIE9TIHVzZXJzLiBDb25zaWRlciBjaG9vc2luZyBhIGRpZmZlcmVudCBkaXJlY3RvcnkuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMzFUMjA6MDI6MTYuMTAwOTY0WiAwIFtTeXN0ZW1dIFtNWS0wMTA5MzFdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IHJlYWR5IGZvciBjb25uZWN0aW9ucy4gVmVyc2lvbjogJzguMC4yMycgIHNvY2tldDogJy92YXIvcnVuL215c3FsZC9teXNxbGQuc29jaycgIHBvcnQ6IDMzMDYgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMzFUMjM6MDQ6MjUuOTE5ODI4WiAwIFtTeXN0ZW1dIFtNWS0wMTMxNzJdIFtTZXJ2ZXJdIFJlY2VpdmVkIFNIVVRET1dOIGZyb20gdXNlciA8dmlhIHVzZXIgc2lnbmFsPi4gU2h1dHRpbmcgZG93biBteXNxbGQgKFZlcnNpb246IDguMC4yMykuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMzFUMjM6MDQ6MjYuODIyMDI4WiAwIFtTeXN0ZW1dIFtNWS0wMTA5MTBdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IFNodXRkb3duIGNvbXBsZXRlIChteXNxbGQgOC4wLjIzKSAgTXlTUUwgQ29tbXVuaXR5IFNlcnZlciAtIEdQTC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjItMTAtMzEgMjM6MDc6MDArMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAQAAAAAAAFMyMDIyLTEwLTMxIDIzOjA3OjAxKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IFN3aXRjaGluZyB0byBkZWRpY2F0ZWQgdXNlciAnbXlzcWwnCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIyLTEwLTMxIDIzOjA3OjAxKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABzMjAyMi0xMC0zMVQyMzowNzowMS41ODYwNDRaIDAgW1N5c3RlbV0gW01ZLTAxMDExNl0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZCAobXlzcWxkIDguMC4yMykgc3RhcnRpbmcgYXMgcHJvY2VzcyAxCm15c3FsLW15c3FsCXwgAgAAAAAAAF8yMDIyLTEwLTMxVDIzOjA3OjAxLjU5OTA1MlogMSBbU3lzdGVtXSBbTVktMDEzNTc2XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAF0yMDIyLTEwLTMxVDIzOjA3OjAyLjM4NDAyOVogMSBbU3lzdGVtXSBbTVktMDEzNTc3XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIGVuZGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTEwLTMxVDIzOjA3OjAyLjUyNTY3NlogMCBbU3lzdGVtXSBbTVktMDExMzIzXSBbU2VydmVyXSBYIFBsdWdpbiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIEJpbmQtYWRkcmVzczogJzo6JyBwb3J0OiAzMzA2MCwgc29ja2V0OiAvdmFyL3J1bi9teXNxbGQvbXlzcWx4LnNvY2sKbXlzcWwtbXlzcWwJfCACAAAAAAAAYzIwMjItMTAtMzFUMjM6MDc6MDIuNjQ0NzI0WiAwIFtXYXJuaW5nXSBbTVktMDEwMDY4XSBbU2VydmVyXSBDQSBjZXJ0aWZpY2F0ZSBjYS5wZW0gaXMgc2VsZiBzaWduZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMzFUMjM6MDc6MDIuNjQ1MDE1WiAwIFtTeXN0ZW1dIFtNWS0wMTM2MDJdIFtTZXJ2ZXJdIENoYW5uZWwgbXlzcWxfbWFpbiBjb25maWd1cmVkIHRvIHN1cHBvcnQgVExTLiBFbmNyeXB0ZWQgY29ubmVjdGlvbnMgYXJlIG5vdyBzdXBwb3J0ZWQgZm9yIHRoaXMgY2hhbm5lbC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0xMC0zMVQyMzowNzowMi42NTQ0MjFaIDAgW1dhcm5pbmddIFtNWS0wMTE4MTBdIFtTZXJ2ZXJdIEluc2VjdXJlIGNvbmZpZ3VyYXRpb24gZm9yIC0tcGlkLWZpbGU6IExvY2F0aW9uICcvdmFyL3J1bi9teXNxbGQnIGluIHRoZSBwYXRoIGlzIGFjY2Vzc2libGUgdG8gYWxsIE9TIHVzZXJzLiBDb25zaWRlciBjaG9vc2luZyBhIGRpZmZlcmVudCBkaXJlY3RvcnkuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMzFUMjM6MDc6MDIuNzA1MDM5WiAwIFtTeXN0ZW1dIFtNWS0wMTA5MzFdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IHJlYWR5IGZvciBjb25uZWN0aW9ucy4gVmVyc2lvbjogJzguMC4yMycgIHNvY2tldDogJy92YXIvcnVuL215c3FsZC9teXNxbGQuc29jaycgIHBvcnQ6IDMzMDYgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMzFUMjM6MTk6NDQuMTE0MDM3WiAwIFtTeXN0ZW1dIFtNWS0wMTMxNzJdIFtTZXJ2ZXJdIFJlY2VpdmVkIFNIVVRET1dOIGZyb20gdXNlciA8dmlhIHVzZXIgc2lnbmFsPi4gU2h1dHRpbmcgZG93biBteXNxbGQgKFZlcnNpb246IDguMC4yMykuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMzFUMjM6MTk6NDQuODE3NTIwWiAwIFtTeXN0ZW1dIFtNWS0wMTA5MTBdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IFNodXRkb3duIGNvbXBsZXRlIChteXNxbGQgOC4wLjIzKSAgTXlTUUwgQ29tbXVuaXR5IFNlcnZlciAtIEdQTC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjItMTAtMzEgMjM6MjI6MzArMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAQAAAAAAAFMyMDIyLTEwLTMxIDIzOjIyOjMxKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IFN3aXRjaGluZyB0byBkZWRpY2F0ZWQgdXNlciAnbXlzcWwnCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIyLTEwLTMxIDIzOjIyOjMxKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABzMjAyMi0xMC0zMVQyMzoyMjozMS40MTc1OTNaIDAgW1N5c3RlbV0gW01ZLTAxMDExNl0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZCAobXlzcWxkIDguMC4yMykgc3RhcnRpbmcgYXMgcHJvY2VzcyAxCm15c3FsLW15c3FsCXwgAgAAAAAAAF8yMDIyLTEwLTMxVDIzOjIyOjMxLjQyOTQ3MlogMSBbU3lzdGVtXSBbTVktMDEzNTc2XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAF0yMDIyLTEwLTMxVDIzOjIyOjMxLjY1NjczNVogMSBbU3lzdGVtXSBbTVktMDEzNTc3XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIGVuZGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTEwLTMxVDIzOjIyOjMxLjc4MDA5MFogMCBbU3lzdGVtXSBbTVktMDExMzIzXSBbU2VydmVyXSBYIFBsdWdpbiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIEJpbmQtYWRkcmVzczogJzo6JyBwb3J0OiAzMzA2MCwgc29ja2V0OiAvdmFyL3J1bi9teXNxbGQvbXlzcWx4LnNvY2sKbXlzcWwtbXlzcWwJfCACAAAAAAAAYzIwMjItMTAtMzFUMjM6MjI6MzEuODQyNDAyWiAwIFtXYXJuaW5nXSBbTVktMDEwMDY4XSBbU2VydmVyXSBDQSBjZXJ0aWZpY2F0ZSBjYS5wZW0gaXMgc2VsZiBzaWduZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMzFUMjM6MjI6MzEuODQyNTU1WiAwIFtTeXN0ZW1dIFtNWS0wMTM2MDJdIFtTZXJ2ZXJdIENoYW5uZWwgbXlzcWxfbWFpbiBjb25maWd1cmVkIHRvIHN1cHBvcnQgVExTLiBFbmNyeXB0ZWQgY29ubmVjdGlvbnMgYXJlIG5vdyBzdXBwb3J0ZWQgZm9yIHRoaXMgY2hhbm5lbC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0xMC0zMVQyMzoyMjozMS44NDU2MzdaIDAgW1dhcm5pbmddIFtNWS0wMTE4MTBdIFtTZXJ2ZXJdIEluc2VjdXJlIGNvbmZpZ3VyYXRpb24gZm9yIC0tcGlkLWZpbGU6IExvY2F0aW9uICcvdmFyL3J1bi9teXNxbGQnIGluIHRoZSBwYXRoIGlzIGFjY2Vzc2libGUgdG8gYWxsIE9TIHVzZXJzLiBDb25zaWRlciBjaG9vc2luZyBhIGRpZmZlcmVudCBkaXJlY3RvcnkuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMzFUMjM6MjI6MzEuODY4MjM2WiAwIFtTeXN0ZW1dIFtNWS0wMTA5MzFdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IHJlYWR5IGZvciBjb25uZWN0aW9ucy4gVmVyc2lvbjogJzguMC4yMycgIHNvY2tldDogJy92YXIvcnVuL215c3FsZC9teXNxbGQuc29jaycgIHBvcnQ6IDMzMDYgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMzFUMjM6MzE6MzkuODE5NzM2WiAwIFtTeXN0ZW1dIFtNWS0wMTMxNzJdIFtTZXJ2ZXJdIFJlY2VpdmVkIFNIVVRET1dOIGZyb20gdXNlciA8dmlhIHVzZXIgc2lnbmFsPi4gU2h1dHRpbmcgZG93biBteXNxbGQgKFZlcnNpb246IDguMC4yMykuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMzFUMjM6MzE6NDEuMDU3NzI2WiAwIFtTeXN0ZW1dIFtNWS0wMTA5MTBdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IFNodXRkb3duIGNvbXBsZXRlIChteXNxbGQgOC4wLjIzKSAgTXlTUUwgQ29tbXVuaXR5IFNlcnZlciAtIEdQTC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjItMTAtMzEgMjM6MzQ6MjErMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAQAAAAAAAFMyMDIyLTEwLTMxIDIzOjM0OjIxKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IFN3aXRjaGluZyB0byBkZWRpY2F0ZWQgdXNlciAnbXlzcWwnCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIyLTEwLTMxIDIzOjM0OjIxKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABzMjAyMi0xMC0zMVQyMzozNDoyMS42NDE5MTFaIDAgW1N5c3RlbV0gW01ZLTAxMDExNl0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZCAobXlzcWxkIDguMC4yMykgc3RhcnRpbmcgYXMgcHJvY2VzcyAxCm15c3FsLW15c3FsCXwgAgAAAAAAAF8yMDIyLTEwLTMxVDIzOjM0OjIxLjY1MzYyOVogMSBbU3lzdGVtXSBbTVktMDEzNTc2XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAF0yMDIyLTEwLTMxVDIzOjM0OjIxLjg3MDMzOVogMSBbU3lzdGVtXSBbTVktMDEzNTc3XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIGVuZGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTEwLTMxVDIzOjM0OjIxLjk4MTE5OFogMCBbU3lzdGVtXSBbTVktMDExMzIzXSBbU2VydmVyXSBYIFBsdWdpbiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIEJpbmQtYWRkcmVzczogJzo6JyBwb3J0OiAzMzA2MCwgc29ja2V0OiAvdmFyL3J1bi9teXNxbGQvbXlzcWx4LnNvY2sKbXlzcWwtbXlzcWwJfCACAAAAAAAAYzIwMjItMTAtMzFUMjM6MzQ6MjIuMDI3ODEzWiAwIFtXYXJuaW5nXSBbTVktMDEwMDY4XSBbU2VydmVyXSBDQSBjZXJ0aWZpY2F0ZSBjYS5wZW0gaXMgc2VsZiBzaWduZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMzFUMjM6MzQ6MjIuMDI3OTQ3WiAwIFtTeXN0ZW1dIFtNWS0wMTM2MDJdIFtTZXJ2ZXJdIENoYW5uZWwgbXlzcWxfbWFpbiBjb25maWd1cmVkIHRvIHN1cHBvcnQgVExTLiBFbmNyeXB0ZWQgY29ubmVjdGlvbnMgYXJlIG5vdyBzdXBwb3J0ZWQgZm9yIHRoaXMgY2hhbm5lbC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0xMC0zMVQyMzozNDoyMi4wMzEwNTlaIDAgW1dhcm5pbmddIFtNWS0wMTE4MTBdIFtTZXJ2ZXJdIEluc2VjdXJlIGNvbmZpZ3VyYXRpb24gZm9yIC0tcGlkLWZpbGU6IExvY2F0aW9uICcvdmFyL3J1bi9teXNxbGQnIGluIHRoZSBwYXRoIGlzIGFjY2Vzc2libGUgdG8gYWxsIE9TIHVzZXJzLiBDb25zaWRlciBjaG9vc2luZyBhIGRpZmZlcmVudCBkaXJlY3RvcnkuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTAtMzFUMjM6MzQ6MjIuMDU2MTUwWiAwIFtTeXN0ZW1dIFtNWS0wMTA5MzFdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IHJlYWR5IGZvciBjb25uZWN0aW9ucy4gVmVyc2lvbjogJzguMC4yMycgIHNvY2tldDogJy92YXIvcnVuL215c3FsZC9teXNxbGQuc29jaycgIHBvcnQ6IDMzMDYgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIyLTExLTA5IDAwOjQwOjU2KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAEAAAAAAABTMjAyMi0xMS0wOSAwMDo0MDo1NiswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBTd2l0Y2hpbmcgdG8gZGVkaWNhdGVkIHVzZXIgJ215c3FsJwpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMi0xMS0wOSAwMDo0MDo1NiswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAczIwMjItMTEtMDlUMDA6NDA6NTcuMjExNjk5WiAwIFtTeXN0ZW1dIFtNWS0wMTAxMTZdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQgKG15c3FsZCA4LjAuMjMpIHN0YXJ0aW5nIGFzIHByb2Nlc3MgMQpteXNxbC1teXNxbAl8IAIAAAAAAABfMjAyMi0xMS0wOVQwMDo0MDo1Ny4yMjEyMThaIDEgW1N5c3RlbV0gW01ZLTAxMzU3Nl0gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABdMjAyMi0xMS0wOVQwMDo0MDo1Ny45ODA0OTBaIDEgW1N5c3RlbV0gW01ZLTAxMzU3N10gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBlbmRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0xMS0wOVQwMDo0MDo1OC4xNDI2ODZaIDAgW1N5c3RlbV0gW01ZLTAxMTMyM10gW1NlcnZlcl0gWCBQbHVnaW4gcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBCaW5kLWFkZHJlc3M6ICc6OicgcG9ydDogMzMwNjAsIHNvY2tldDogL3Zhci9ydW4vbXlzcWxkL215c3FseC5zb2NrCm15c3FsLW15c3FsCXwgAgAAAAAAAFoyMDIyLTExLTA5VDAwOjQwOjU4LjIyNjU5N1ogMCBbU3lzdGVtXSBbTVktMDEwMjI5XSBbU2VydmVyXSBTdGFydGluZyBYQSBjcmFzaCByZWNvdmVyeS4uLgpteXNxbC1teXNxbAl8IAIAAAAAAABYMjAyMi0xMS0wOVQwMDo0MDo1OC4yNDI3ODNaIDAgW1N5c3RlbV0gW01ZLTAxMDIzMl0gW1NlcnZlcl0gWEEgY3Jhc2ggcmVjb3ZlcnkgZmluaXNoZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAGMyMDIyLTExLTA5VDAwOjQwOjU4LjQ0MTQ0MFogMCBbV2FybmluZ10gW01ZLTAxMDA2OF0gW1NlcnZlcl0gQ0EgY2VydGlmaWNhdGUgY2EucGVtIGlzIHNlbGYgc2lnbmVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTExLTA5VDAwOjQwOjU4LjQ0MTg2N1ogMCBbU3lzdGVtXSBbTVktMDEzNjAyXSBbU2VydmVyXSBDaGFubmVsIG15c3FsX21haW4gY29uZmlndXJlZCB0byBzdXBwb3J0IFRMUy4gRW5jcnlwdGVkIGNvbm5lY3Rpb25zIGFyZSBub3cgc3VwcG9ydGVkIGZvciB0aGlzIGNoYW5uZWwuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTEtMDlUMDA6NDA6NTguNDUyODA1WiAwIFtXYXJuaW5nXSBbTVktMDExODEwXSBbU2VydmVyXSBJbnNlY3VyZSBjb25maWd1cmF0aW9uIGZvciAtLXBpZC1maWxlOiBMb2NhdGlvbiAnL3Zhci9ydW4vbXlzcWxkJyBpbiB0aGUgcGF0aCBpcyBhY2Nlc3NpYmxlIHRvIGFsbCBPUyB1c2Vycy4gQ29uc2lkZXIgY2hvb3NpbmcgYSBkaWZmZXJlbnQgZGlyZWN0b3J5LgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTExLTA5VDAwOjQwOjU4LjUxMzMwNFogMCBbU3lzdGVtXSBbTVktMDEwOTMxXSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkOiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIFZlcnNpb246ICc4LjAuMjMnICBzb2NrZXQ6ICcvdmFyL3J1bi9teXNxbGQvbXlzcWxkLnNvY2snICBwb3J0OiAzMzA2ICBNeVNRTCBDb21tdW5pdHkgU2VydmVyIC0gR1BMLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTExLTA5VDAwOjQ5OjQyLjE2Nzk3OFogMCBbU3lzdGVtXSBbTVktMDEzMTcyXSBbU2VydmVyXSBSZWNlaXZlZCBTSFVURE9XTiBmcm9tIHVzZXIgPHZpYSB1c2VyIHNpZ25hbD4uIFNodXR0aW5nIGRvd24gbXlzcWxkIChWZXJzaW9uOiA4LjAuMjMpLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTExLTA5VDAwOjQ5OjQzLjQwMTQwNVogMCBbU3lzdGVtXSBbTVktMDEwOTEwXSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkOiBTaHV0ZG93biBjb21wbGV0ZSAobXlzcWxkIDguMC4yMykgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIyLTExLTA5IDAwOjUyOjE3KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAEAAAAAAABTMjAyMi0xMS0wOSAwMDo1MjoxNyswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBTd2l0Y2hpbmcgdG8gZGVkaWNhdGVkIHVzZXIgJ215c3FsJwpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMi0xMS0wOSAwMDo1MjoxNyswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAczIwMjItMTEtMDlUMDA6NTI6MTcuOTY3NjI0WiAwIFtTeXN0ZW1dIFtNWS0wMTAxMTZdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQgKG15c3FsZCA4LjAuMjMpIHN0YXJ0aW5nIGFzIHByb2Nlc3MgMQpteXNxbC1teXNxbAl8IAIAAAAAAABfMjAyMi0xMS0wOVQwMDo1MjoxNy45ODQ3MDdaIDEgW1N5c3RlbV0gW01ZLTAxMzU3Nl0gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABdMjAyMi0xMS0wOVQwMDo1MjoxOC42MDY5NjBaIDEgW1N5c3RlbV0gW01ZLTAxMzU3N10gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBlbmRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMi0xMS0wOVQwMDo1MjoxOC43NTQ4MzhaIDAgW1N5c3RlbV0gW01ZLTAxMTMyM10gW1NlcnZlcl0gWCBQbHVnaW4gcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBCaW5kLWFkZHJlc3M6ICc6OicgcG9ydDogMzMwNjAsIHNvY2tldDogL3Zhci9ydW4vbXlzcWxkL215c3FseC5zb2NrCm15c3FsLW15c3FsCXwgAgAAAAAAAGMyMDIyLTExLTA5VDAwOjUyOjE4Ljg2MTI2OFogMCBbV2FybmluZ10gW01ZLTAxMDA2OF0gW1NlcnZlcl0gQ0EgY2VydGlmaWNhdGUgY2EucGVtIGlzIHNlbGYgc2lnbmVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTExLTA5VDAwOjUyOjE4Ljg2MTcwOFogMCBbU3lzdGVtXSBbTVktMDEzNjAyXSBbU2VydmVyXSBDaGFubmVsIG15c3FsX21haW4gY29uZmlndXJlZCB0byBzdXBwb3J0IFRMUy4gRW5jcnlwdGVkIGNvbm5lY3Rpb25zIGFyZSBub3cgc3VwcG9ydGVkIGZvciB0aGlzIGNoYW5uZWwuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjItMTEtMDlUMDA6NTI6MTguODcyMDIzWiAwIFtXYXJuaW5nXSBbTVktMDExODEwXSBbU2VydmVyXSBJbnNlY3VyZSBjb25maWd1cmF0aW9uIGZvciAtLXBpZC1maWxlOiBMb2NhdGlvbiAnL3Zhci9ydW4vbXlzcWxkJyBpbiB0aGUgcGF0aCBpcyBhY2Nlc3NpYmxlIHRvIGFsbCBPUyB1c2Vycy4gQ29uc2lkZXIgY2hvb3NpbmcgYSBkaWZmZXJlbnQgZGlyZWN0b3J5LgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIyLTExLTA5VDAwOjUyOjE4LjkyMjYzNVogMCBbU3lzdGVtXSBbTVktMDEwOTMxXSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkOiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIFZlcnNpb246ICc4LjAuMjMnICBzb2NrZXQ6ICcvdmFyL3J1bi9teXNxbGQvbXlzcWxkLnNvY2snICBwb3J0OiAzMzA2ICBNeVNRTCBDb21tdW5pdHkgU2VydmVyIC0gR1BMLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTAzLTAyVDE5OjE1OjQ2LjE0NzAyOVogMCBbU3lzdGVtXSBbTVktMDEzMTcyXSBbU2VydmVyXSBSZWNlaXZlZCBTSFVURE9XTiBmcm9tIHVzZXIgPHZpYSB1c2VyIHNpZ25hbD4uIFNodXR0aW5nIGRvd24gbXlzcWxkIChWZXJzaW9uOiA4LjAuMjMpLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTAzLTAyVDE5OjE1OjQ3LjUzMDEzOFogMCBbU3lzdGVtXSBbTVktMDEwOTEwXSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkOiBTaHV0ZG93biBjb21wbGV0ZSAobXlzcWxkIDguMC4yMykgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIzLTAzLTAyIDE5OjE4OjQwKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAEAAAAAAABTMjAyMy0wMy0wMiAxOToxODo0MCswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBTd2l0Y2hpbmcgdG8gZGVkaWNhdGVkIHVzZXIgJ215c3FsJwpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMy0wMy0wMiAxOToxODo0MCswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAczIwMjMtMDMtMDJUMTk6MTg6NDEuMDA4MDU0WiAwIFtTeXN0ZW1dIFtNWS0wMTAxMTZdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQgKG15c3FsZCA4LjAuMjMpIHN0YXJ0aW5nIGFzIHByb2Nlc3MgMQpteXNxbC1teXNxbAl8IAIAAAAAAABfMjAyMy0wMy0wMlQxOToxODo0MS4wMTgxNzdaIDEgW1N5c3RlbV0gW01ZLTAxMzU3Nl0gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABdMjAyMy0wMy0wMlQxOToxODo0MS4zMDM1NDRaIDEgW1N5c3RlbV0gW01ZLTAxMzU3N10gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBlbmRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wMy0wMlQxOToxODo0MS40NDA0NTRaIDAgW1N5c3RlbV0gW01ZLTAxMTMyM10gW1NlcnZlcl0gWCBQbHVnaW4gcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBCaW5kLWFkZHJlc3M6ICc6OicgcG9ydDogMzMwNjAsIHNvY2tldDogL3Zhci9ydW4vbXlzcWxkL215c3FseC5zb2NrCm15c3FsLW15c3FsCXwgAgAAAAAAAGMyMDIzLTAzLTAyVDE5OjE4OjQxLjUzNjE5NFogMCBbV2FybmluZ10gW01ZLTAxMDA2OF0gW1NlcnZlcl0gQ0EgY2VydGlmaWNhdGUgY2EucGVtIGlzIHNlbGYgc2lnbmVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTAzLTAyVDE5OjE4OjQxLjUzNjYyMFogMCBbU3lzdGVtXSBbTVktMDEzNjAyXSBbU2VydmVyXSBDaGFubmVsIG15c3FsX21haW4gY29uZmlndXJlZCB0byBzdXBwb3J0IFRMUy4gRW5jcnlwdGVkIGNvbm5lY3Rpb25zIGFyZSBub3cgc3VwcG9ydGVkIGZvciB0aGlzIGNoYW5uZWwuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDMtMDJUMTk6MTg6NDEuNTQyNzMzWiAwIFtXYXJuaW5nXSBbTVktMDExODEwXSBbU2VydmVyXSBJbnNlY3VyZSBjb25maWd1cmF0aW9uIGZvciAtLXBpZC1maWxlOiBMb2NhdGlvbiAnL3Zhci9ydW4vbXlzcWxkJyBpbiB0aGUgcGF0aCBpcyBhY2Nlc3NpYmxlIHRvIGFsbCBPUyB1c2Vycy4gQ29uc2lkZXIgY2hvb3NpbmcgYSBkaWZmZXJlbnQgZGlyZWN0b3J5LgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTAzLTAyVDE5OjE4OjQxLjU4MTk1NFogMCBbU3lzdGVtXSBbTVktMDEwOTMxXSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkOiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIFZlcnNpb246ICc4LjAuMjMnICBzb2NrZXQ6ICcvdmFyL3J1bi9teXNxbGQvbXlzcWxkLnNvY2snICBwb3J0OiAzMzA2ICBNeVNRTCBDb21tdW5pdHkgU2VydmVyIC0gR1BMLgpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMy0wMy0wMiAyMDozMjoyOCswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAUzIwMjMtMDMtMDIgMjA6MzI6MjkrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogU3dpdGNoaW5nIHRvIGRlZGljYXRlZCB1c2VyICdteXNxbCcKbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjMtMDMtMDIgMjA6MzI6MjkrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAHMyMDIzLTAzLTAyVDIwOjMyOjI5LjM2OTY4MFogMCBbU3lzdGVtXSBbTVktMDEwMTE2XSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkIChteXNxbGQgOC4wLjIzKSBzdGFydGluZyBhcyBwcm9jZXNzIDEKbXlzcWwtbXlzcWwJfCACAAAAAAAAXzIwMjMtMDMtMDJUMjA6MzI6MjkuMzc5NzM3WiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzZdIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAXTIwMjMtMDMtMDJUMjA6MzI6MjkuODA5MjQ1WiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzddIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgZW5kZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDMtMDJUMjA6MzI6MjkuOTQzMjE0WiAwIFtTeXN0ZW1dIFtNWS0wMTEzMjNdIFtTZXJ2ZXJdIFggUGx1Z2luIHJlYWR5IGZvciBjb25uZWN0aW9ucy4gQmluZC1hZGRyZXNzOiAnOjonIHBvcnQ6IDMzMDYwLCBzb2NrZXQ6IC92YXIvcnVuL215c3FsZC9teXNxbHguc29jawpteXNxbC1teXNxbAl8IAIAAAAAAABaMjAyMy0wMy0wMlQyMDozMjoyOS45NzM3MjNaIDAgW1N5c3RlbV0gW01ZLTAxMDIyOV0gW1NlcnZlcl0gU3RhcnRpbmcgWEEgY3Jhc2ggcmVjb3ZlcnkuLi4KbXlzcWwtbXlzcWwJfCACAAAAAAAAWDIwMjMtMDMtMDJUMjA6MzI6MjkuOTgyOTc4WiAwIFtTeXN0ZW1dIFtNWS0wMTAyMzJdIFtTZXJ2ZXJdIFhBIGNyYXNoIHJlY292ZXJ5IGZpbmlzaGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABjMjAyMy0wMy0wMlQyMDozMjozMC4wMTI3NjZaIDAgW1dhcm5pbmddIFtNWS0wMTAwNjhdIFtTZXJ2ZXJdIENBIGNlcnRpZmljYXRlIGNhLnBlbSBpcyBzZWxmIHNpZ25lZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wMy0wMlQyMDozMjozMC4wMTI5NDFaIDAgW1N5c3RlbV0gW01ZLTAxMzYwMl0gW1NlcnZlcl0gQ2hhbm5lbCBteXNxbF9tYWluIGNvbmZpZ3VyZWQgdG8gc3VwcG9ydCBUTFMuIEVuY3J5cHRlZCBjb25uZWN0aW9ucyBhcmUgbm93IHN1cHBvcnRlZCBmb3IgdGhpcyBjaGFubmVsLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTAzLTAyVDIwOjMyOjMwLjAxNjU4OVogMCBbV2FybmluZ10gW01ZLTAxMTgxMF0gW1NlcnZlcl0gSW5zZWN1cmUgY29uZmlndXJhdGlvbiBmb3IgLS1waWQtZmlsZTogTG9jYXRpb24gJy92YXIvcnVuL215c3FsZCcgaW4gdGhlIHBhdGggaXMgYWNjZXNzaWJsZSB0byBhbGwgT1MgdXNlcnMuIENvbnNpZGVyIGNob29zaW5nIGEgZGlmZmVyZW50IGRpcmVjdG9yeS4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wMy0wMlQyMDozMjozMC4wNDgwMTdaIDAgW1N5c3RlbV0gW01ZLTAxMDkzMV0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZDogcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBWZXJzaW9uOiAnOC4wLjIzJyAgc29ja2V0OiAnL3Zhci9ydW4vbXlzcWxkL215c3FsZC5zb2NrJyAgcG9ydDogMzMwNiAgTXlTUUwgQ29tbXVuaXR5IFNlcnZlciAtIEdQTC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjMtMDQtMjUgMTk6NDM6NDYrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAQAAAAAAAFMyMDIzLTA0LTI1IDE5OjQzOjQ3KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IFN3aXRjaGluZyB0byBkZWRpY2F0ZWQgdXNlciAnbXlzcWwnCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIzLTA0LTI1IDE5OjQzOjQ3KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABzMjAyMy0wNC0yNVQxOTo0Mzo0Ny41OTU1MjVaIDAgW1N5c3RlbV0gW01ZLTAxMDExNl0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZCAobXlzcWxkIDguMC4yMykgc3RhcnRpbmcgYXMgcHJvY2VzcyAxCm15c3FsLW15c3FsCXwgAgAAAAAAAF8yMDIzLTA0LTI1VDE5OjQzOjQ3LjYwNzM5MFogMSBbU3lzdGVtXSBbTVktMDEzNTc2XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAF0yMDIzLTA0LTI1VDE5OjQzOjQ4LjA3NjQ0NFogMSBbU3lzdGVtXSBbTVktMDEzNTc3XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIGVuZGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA0LTI1VDE5OjQzOjQ4LjIwNjI1N1ogMCBbU3lzdGVtXSBbTVktMDExMzIzXSBbU2VydmVyXSBYIFBsdWdpbiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIEJpbmQtYWRkcmVzczogJzo6JyBwb3J0OiAzMzA2MCwgc29ja2V0OiAvdmFyL3J1bi9teXNxbGQvbXlzcWx4LnNvY2sKbXlzcWwtbXlzcWwJfCACAAAAAAAAWjIwMjMtMDQtMjVUMTk6NDM6NDguMjI2OTA4WiAwIFtTeXN0ZW1dIFtNWS0wMTAyMjldIFtTZXJ2ZXJdIFN0YXJ0aW5nIFhBIGNyYXNoIHJlY292ZXJ5Li4uCm15c3FsLW15c3FsCXwgAgAAAAAAAFgyMDIzLTA0LTI1VDE5OjQzOjQ4LjIzNjU5N1ogMCBbU3lzdGVtXSBbTVktMDEwMjMyXSBbU2VydmVyXSBYQSBjcmFzaCByZWNvdmVyeSBmaW5pc2hlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAYzIwMjMtMDQtMjVUMTk6NDM6NDguMjk3Nzg1WiAwIFtXYXJuaW5nXSBbTVktMDEwMDY4XSBbU2VydmVyXSBDQSBjZXJ0aWZpY2F0ZSBjYS5wZW0gaXMgc2VsZiBzaWduZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDQtMjVUMTk6NDM6NDguMjk4Mzk5WiAwIFtTeXN0ZW1dIFtNWS0wMTM2MDJdIFtTZXJ2ZXJdIENoYW5uZWwgbXlzcWxfbWFpbiBjb25maWd1cmVkIHRvIHN1cHBvcnQgVExTLiBFbmNyeXB0ZWQgY29ubmVjdGlvbnMgYXJlIG5vdyBzdXBwb3J0ZWQgZm9yIHRoaXMgY2hhbm5lbC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wNC0yNVQxOTo0Mzo0OC4zMDYzMjVaIDAgW1dhcm5pbmddIFtNWS0wMTE4MTBdIFtTZXJ2ZXJdIEluc2VjdXJlIGNvbmZpZ3VyYXRpb24gZm9yIC0tcGlkLWZpbGU6IExvY2F0aW9uICcvdmFyL3J1bi9teXNxbGQnIGluIHRoZSBwYXRoIGlzIGFjY2Vzc2libGUgdG8gYWxsIE9TIHVzZXJzLiBDb25zaWRlciBjaG9vc2luZyBhIGRpZmZlcmVudCBkaXJlY3RvcnkuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDQtMjVUMTk6NDM6NDguMzc2MDU5WiAwIFtTeXN0ZW1dIFtNWS0wMTA5MzFdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IHJlYWR5IGZvciBjb25uZWN0aW9ucy4gVmVyc2lvbjogJzguMC4yMycgIHNvY2tldDogJy92YXIvcnVuL215c3FsZC9teXNxbGQuc29jaycgIHBvcnQ6IDMzMDYgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIzLTA0LTI5IDAzOjMwOjU3KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAEAAAAAAABTMjAyMy0wNC0yOSAwMzozMDo1NyswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBTd2l0Y2hpbmcgdG8gZGVkaWNhdGVkIHVzZXIgJ215c3FsJwpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMy0wNC0yOSAwMzozMDo1NyswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAczIwMjMtMDQtMjlUMDM6MzA6NTguMjE0NjE0WiAwIFtTeXN0ZW1dIFtNWS0wMTAxMTZdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQgKG15c3FsZCA4LjAuMjMpIHN0YXJ0aW5nIGFzIHByb2Nlc3MgMQpteXNxbC1teXNxbAl8IAIAAAAAAABfMjAyMy0wNC0yOVQwMzozMDo1OC4yMjg5NzJaIDEgW1N5c3RlbV0gW01ZLTAxMzU3Nl0gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABdMjAyMy0wNC0yOVQwMzozMDo1OC43MzgyMjNaIDEgW1N5c3RlbV0gW01ZLTAxMzU3N10gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBlbmRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wNC0yOVQwMzozMDo1OC44NjA0NTNaIDAgW1N5c3RlbV0gW01ZLTAxMTMyM10gW1NlcnZlcl0gWCBQbHVnaW4gcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBCaW5kLWFkZHJlc3M6ICc6OicgcG9ydDogMzMwNjAsIHNvY2tldDogL3Zhci9ydW4vbXlzcWxkL215c3FseC5zb2NrCm15c3FsLW15c3FsCXwgAgAAAAAAAFoyMDIzLTA0LTI5VDAzOjMwOjU4Ljg4MDY3MVogMCBbU3lzdGVtXSBbTVktMDEwMjI5XSBbU2VydmVyXSBTdGFydGluZyBYQSBjcmFzaCByZWNvdmVyeS4uLgpteXNxbC1teXNxbAl8IAIAAAAAAABYMjAyMy0wNC0yOVQwMzozMDo1OC44ODk1MjhaIDAgW1N5c3RlbV0gW01ZLTAxMDIzMl0gW1NlcnZlcl0gWEEgY3Jhc2ggcmVjb3ZlcnkgZmluaXNoZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAGMyMDIzLTA0LTI5VDAzOjMwOjU4Ljk4NzQ2M1ogMCBbV2FybmluZ10gW01ZLTAxMDA2OF0gW1NlcnZlcl0gQ0EgY2VydGlmaWNhdGUgY2EucGVtIGlzIHNlbGYgc2lnbmVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA0LTI5VDAzOjMwOjU4Ljk4Nzk1MlogMCBbU3lzdGVtXSBbTVktMDEzNjAyXSBbU2VydmVyXSBDaGFubmVsIG15c3FsX21haW4gY29uZmlndXJlZCB0byBzdXBwb3J0IFRMUy4gRW5jcnlwdGVkIGNvbm5lY3Rpb25zIGFyZSBub3cgc3VwcG9ydGVkIGZvciB0aGlzIGNoYW5uZWwuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDQtMjlUMDM6MzA6NTguOTk3NzM1WiAwIFtXYXJuaW5nXSBbTVktMDExODEwXSBbU2VydmVyXSBJbnNlY3VyZSBjb25maWd1cmF0aW9uIGZvciAtLXBpZC1maWxlOiBMb2NhdGlvbiAnL3Zhci9ydW4vbXlzcWxkJyBpbiB0aGUgcGF0aCBpcyBhY2Nlc3NpYmxlIHRvIGFsbCBPUyB1c2Vycy4gQ29uc2lkZXIgY2hvb3NpbmcgYSBkaWZmZXJlbnQgZGlyZWN0b3J5LgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA0LTI5VDAzOjMwOjU5LjA2MTY2OFogMCBbU3lzdGVtXSBbTVktMDEwOTMxXSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkOiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIFZlcnNpb246ICc4LjAuMjMnICBzb2NrZXQ6ICcvdmFyL3J1bi9teXNxbGQvbXlzcWxkLnNvY2snICBwb3J0OiAzMzA2ICBNeVNRTCBDb21tdW5pdHkgU2VydmVyIC0gR1BMLgpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMy0wNS0wMiAwNjo0OToxNyswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAUzIwMjMtMDUtMDIgMDY6NDk6MTgrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogU3dpdGNoaW5nIHRvIGRlZGljYXRlZCB1c2VyICdteXNxbCcKbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjMtMDUtMDIgMDY6NDk6MTgrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAHMyMDIzLTA1LTAyVDA2OjQ5OjE4LjMxNDU2NlogMCBbU3lzdGVtXSBbTVktMDEwMTE2XSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkIChteXNxbGQgOC4wLjIzKSBzdGFydGluZyBhcyBwcm9jZXNzIDEKbXlzcWwtbXlzcWwJfCACAAAAAAAAXzIwMjMtMDUtMDJUMDY6NDk6MTguMzI2MDgyWiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzZdIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAXTIwMjMtMDUtMDJUMDY6NDk6MTguNzAyODg2WiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzddIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgZW5kZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDUtMDJUMDY6NDk6MTguODI3ODA0WiAwIFtTeXN0ZW1dIFtNWS0wMTEzMjNdIFtTZXJ2ZXJdIFggUGx1Z2luIHJlYWR5IGZvciBjb25uZWN0aW9ucy4gQmluZC1hZGRyZXNzOiAnOjonIHBvcnQ6IDMzMDYwLCBzb2NrZXQ6IC92YXIvcnVuL215c3FsZC9teXNxbHguc29jawpteXNxbC1teXNxbAl8IAIAAAAAAABaMjAyMy0wNS0wMlQwNjo0OToxOC44NzI2MDFaIDAgW1N5c3RlbV0gW01ZLTAxMDIyOV0gW1NlcnZlcl0gU3RhcnRpbmcgWEEgY3Jhc2ggcmVjb3ZlcnkuLi4KbXlzcWwtbXlzcWwJfCACAAAAAAAAWDIwMjMtMDUtMDJUMDY6NDk6MTguODg4NDM2WiAwIFtTeXN0ZW1dIFtNWS0wMTAyMzJdIFtTZXJ2ZXJdIFhBIGNyYXNoIHJlY292ZXJ5IGZpbmlzaGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABjMjAyMy0wNS0wMlQwNjo0OToxOC45Mjc2NzRaIDAgW1dhcm5pbmddIFtNWS0wMTAwNjhdIFtTZXJ2ZXJdIENBIGNlcnRpZmljYXRlIGNhLnBlbSBpcyBzZWxmIHNpZ25lZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wNS0wMlQwNjo0OToxOC45Mjc4MjVaIDAgW1N5c3RlbV0gW01ZLTAxMzYwMl0gW1NlcnZlcl0gQ2hhbm5lbCBteXNxbF9tYWluIGNvbmZpZ3VyZWQgdG8gc3VwcG9ydCBUTFMuIEVuY3J5cHRlZCBjb25uZWN0aW9ucyBhcmUgbm93IHN1cHBvcnRlZCBmb3IgdGhpcyBjaGFubmVsLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA1LTAyVDA2OjQ5OjE4LjkzMTUwNlogMCBbV2FybmluZ10gW01ZLTAxMTgxMF0gW1NlcnZlcl0gSW5zZWN1cmUgY29uZmlndXJhdGlvbiBmb3IgLS1waWQtZmlsZTogTG9jYXRpb24gJy92YXIvcnVuL215c3FsZCcgaW4gdGhlIHBhdGggaXMgYWNjZXNzaWJsZSB0byBhbGwgT1MgdXNlcnMuIENvbnNpZGVyIGNob29zaW5nIGEgZGlmZmVyZW50IGRpcmVjdG9yeS4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wNS0wMlQwNjo0OToxOC45NTY1OTRaIDAgW1N5c3RlbV0gW01ZLTAxMDkzMV0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZDogcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBWZXJzaW9uOiAnOC4wLjIzJyAgc29ja2V0OiAnL3Zhci9ydW4vbXlzcWxkL215c3FsZC5zb2NrJyAgcG9ydDogMzMwNiAgTXlTUUwgQ29tbXVuaXR5IFNlcnZlciAtIEdQTC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjMtMDUtMzEgMTc6NDk6MTArMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAQAAAAAAAFMyMDIzLTA1LTMxIDE3OjQ5OjEwKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IFN3aXRjaGluZyB0byBkZWRpY2F0ZWQgdXNlciAnbXlzcWwnCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIzLTA1LTMxIDE3OjQ5OjEwKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABzMjAyMy0wNS0zMVQxNzo0OToxMS4wNzQ0NzVaIDAgW1N5c3RlbV0gW01ZLTAxMDExNl0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZCAobXlzcWxkIDguMC4yMykgc3RhcnRpbmcgYXMgcHJvY2VzcyAxCm15c3FsLW15c3FsCXwgAgAAAAAAAF8yMDIzLTA1LTMxVDE3OjQ5OjExLjA4NDMyNlogMSBbU3lzdGVtXSBbTVktMDEzNTc2XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAF0yMDIzLTA1LTMxVDE3OjQ5OjExLjQ5NDk2NVogMSBbU3lzdGVtXSBbTVktMDEzNTc3XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIGVuZGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA1LTMxVDE3OjQ5OjExLjU5OTQzNlogMCBbU3lzdGVtXSBbTVktMDExMzIzXSBbU2VydmVyXSBYIFBsdWdpbiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIEJpbmQtYWRkcmVzczogJzo6JyBwb3J0OiAzMzA2MCwgc29ja2V0OiAvdmFyL3J1bi9teXNxbGQvbXlzcWx4LnNvY2sKbXlzcWwtbXlzcWwJfCACAAAAAAAAWjIwMjMtMDUtMzFUMTc6NDk6MTEuNjI0MDE2WiAwIFtTeXN0ZW1dIFtNWS0wMTAyMjldIFtTZXJ2ZXJdIFN0YXJ0aW5nIFhBIGNyYXNoIHJlY292ZXJ5Li4uCm15c3FsLW15c3FsCXwgAgAAAAAAAFgyMDIzLTA1LTMxVDE3OjQ5OjExLjYzMjkyOVogMCBbU3lzdGVtXSBbTVktMDEwMjMyXSBbU2VydmVyXSBYQSBjcmFzaCByZWNvdmVyeSBmaW5pc2hlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAYzIwMjMtMDUtMzFUMTc6NDk6MTEuNjc0MTg0WiAwIFtXYXJuaW5nXSBbTVktMDEwMDY4XSBbU2VydmVyXSBDQSBjZXJ0aWZpY2F0ZSBjYS5wZW0gaXMgc2VsZiBzaWduZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDUtMzFUMTc6NDk6MTEuNjc0MzM4WiAwIFtTeXN0ZW1dIFtNWS0wMTM2MDJdIFtTZXJ2ZXJdIENoYW5uZWwgbXlzcWxfbWFpbiBjb25maWd1cmVkIHRvIHN1cHBvcnQgVExTLiBFbmNyeXB0ZWQgY29ubmVjdGlvbnMgYXJlIG5vdyBzdXBwb3J0ZWQgZm9yIHRoaXMgY2hhbm5lbC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wNS0zMVQxNzo0OToxMS42NzgwMzRaIDAgW1dhcm5pbmddIFtNWS0wMTE4MTBdIFtTZXJ2ZXJdIEluc2VjdXJlIGNvbmZpZ3VyYXRpb24gZm9yIC0tcGlkLWZpbGU6IExvY2F0aW9uICcvdmFyL3J1bi9teXNxbGQnIGluIHRoZSBwYXRoIGlzIGFjY2Vzc2libGUgdG8gYWxsIE9TIHVzZXJzLiBDb25zaWRlciBjaG9vc2luZyBhIGRpZmZlcmVudCBkaXJlY3RvcnkuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDUtMzFUMTc6NDk6MTEuNzA0NDcyWiAwIFtTeXN0ZW1dIFtNWS0wMTA5MzFdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IHJlYWR5IGZvciBjb25uZWN0aW9ucy4gVmVyc2lvbjogJzguMC4yMycgIHNvY2tldDogJy92YXIvcnVuL215c3FsZC9teXNxbGQuc29jaycgIHBvcnQ6IDMzMDYgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIzLTA1LTMxIDIxOjUyOjA0KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAEAAAAAAABTMjAyMy0wNS0zMSAyMTo1MjowNSswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBTd2l0Y2hpbmcgdG8gZGVkaWNhdGVkIHVzZXIgJ215c3FsJwpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMy0wNS0zMSAyMTo1MjowNSswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAczIwMjMtMDUtMzFUMjE6NTI6MDUuOTYyNTI0WiAwIFtTeXN0ZW1dIFtNWS0wMTAxMTZdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQgKG15c3FsZCA4LjAuMjMpIHN0YXJ0aW5nIGFzIHByb2Nlc3MgMQpteXNxbC1teXNxbAl8IAIAAAAAAABfMjAyMy0wNS0zMVQyMTo1MjowNS45OTMyMTVaIDEgW1N5c3RlbV0gW01ZLTAxMzU3Nl0gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABdMjAyMy0wNS0zMVQyMTo1MjowNi44MjE3OTJaIDEgW1N5c3RlbV0gW01ZLTAxMzU3N10gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBlbmRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wNS0zMVQyMTo1MjowNy4xMDE0ODNaIDAgW1N5c3RlbV0gW01ZLTAxMTMyM10gW1NlcnZlcl0gWCBQbHVnaW4gcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBCaW5kLWFkZHJlc3M6ICc6OicgcG9ydDogMzMwNjAsIHNvY2tldDogL3Zhci9ydW4vbXlzcWxkL215c3FseC5zb2NrCm15c3FsLW15c3FsCXwgAgAAAAAAAFoyMDIzLTA1LTMxVDIxOjUyOjA3LjE3NTM1N1ogMCBbU3lzdGVtXSBbTVktMDEwMjI5XSBbU2VydmVyXSBTdGFydGluZyBYQSBjcmFzaCByZWNvdmVyeS4uLgpteXNxbC1teXNxbAl8IAIAAAAAAABYMjAyMy0wNS0zMVQyMTo1MjowNy4yMDQ3NzhaIDAgW1N5c3RlbV0gW01ZLTAxMDIzMl0gW1NlcnZlcl0gWEEgY3Jhc2ggcmVjb3ZlcnkgZmluaXNoZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAGMyMDIzLTA1LTMxVDIxOjUyOjA3LjI5NTAzMFogMCBbV2FybmluZ10gW01ZLTAxMDA2OF0gW1NlcnZlcl0gQ0EgY2VydGlmaWNhdGUgY2EucGVtIGlzIHNlbGYgc2lnbmVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA1LTMxVDIxOjUyOjA3LjI5NTUzN1ogMCBbU3lzdGVtXSBbTVktMDEzNjAyXSBbU2VydmVyXSBDaGFubmVsIG15c3FsX21haW4gY29uZmlndXJlZCB0byBzdXBwb3J0IFRMUy4gRW5jcnlwdGVkIGNvbm5lY3Rpb25zIGFyZSBub3cgc3VwcG9ydGVkIGZvciB0aGlzIGNoYW5uZWwuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDUtMzFUMjE6NTI6MDcuMzE1ODUwWiAwIFtXYXJuaW5nXSBbTVktMDExODEwXSBbU2VydmVyXSBJbnNlY3VyZSBjb25maWd1cmF0aW9uIGZvciAtLXBpZC1maWxlOiBMb2NhdGlvbiAnL3Zhci9ydW4vbXlzcWxkJyBpbiB0aGUgcGF0aCBpcyBhY2Nlc3NpYmxlIHRvIGFsbCBPUyB1c2Vycy4gQ29uc2lkZXIgY2hvb3NpbmcgYSBkaWZmZXJlbnQgZGlyZWN0b3J5LgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA1LTMxVDIxOjUyOjA3LjM3NzIyNVogMCBbU3lzdGVtXSBbTVktMDEwOTMxXSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkOiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIFZlcnNpb246ICc4LjAuMjMnICBzb2NrZXQ6ICcvdmFyL3J1bi9teXNxbGQvbXlzcWxkLnNvY2snICBwb3J0OiAzMzA2ICBNeVNRTCBDb21tdW5pdHkgU2VydmVyIC0gR1BMLgpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMy0wNy0wOCAxNTozMDozMCswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAUzIwMjMtMDctMDggMTU6MzA6MzArMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogU3dpdGNoaW5nIHRvIGRlZGljYXRlZCB1c2VyICdteXNxbCcKbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjMtMDctMDggMTU6MzA6MzArMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAHMyMDIzLTA3LTA4VDE1OjMwOjMxLjA0OTc2MFogMCBbU3lzdGVtXSBbTVktMDEwMTE2XSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkIChteXNxbGQgOC4wLjIzKSBzdGFydGluZyBhcyBwcm9jZXNzIDEKbXlzcWwtbXlzcWwJfCACAAAAAAAAXzIwMjMtMDctMDhUMTU6MzA6MzEuMDU5MjYxWiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzZdIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAXTIwMjMtMDctMDhUMTU6MzA6MzEuODY1NjQyWiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzddIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgZW5kZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDctMDhUMTU6MzA6MzIuMjE2Mjk1WiAwIFtTeXN0ZW1dIFtNWS0wMTEzMjNdIFtTZXJ2ZXJdIFggUGx1Z2luIHJlYWR5IGZvciBjb25uZWN0aW9ucy4gQmluZC1hZGRyZXNzOiAnOjonIHBvcnQ6IDMzMDYwLCBzb2NrZXQ6IC92YXIvcnVuL215c3FsZC9teXNxbHguc29jawpteXNxbC1teXNxbAl8IAIAAAAAAABaMjAyMy0wNy0wOFQxNTozMDozMi4yNDcxNDZaIDAgW1N5c3RlbV0gW01ZLTAxMDIyOV0gW1NlcnZlcl0gU3RhcnRpbmcgWEEgY3Jhc2ggcmVjb3ZlcnkuLi4KbXlzcWwtbXlzcWwJfCACAAAAAAAAWDIwMjMtMDctMDhUMTU6MzA6MzIuMjU2NTgzWiAwIFtTeXN0ZW1dIFtNWS0wMTAyMzJdIFtTZXJ2ZXJdIFhBIGNyYXNoIHJlY292ZXJ5IGZpbmlzaGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABjMjAyMy0wNy0wOFQxNTozMDozMi4zODUyODNaIDAgW1dhcm5pbmddIFtNWS0wMTAwNjhdIFtTZXJ2ZXJdIENBIGNlcnRpZmljYXRlIGNhLnBlbSBpcyBzZWxmIHNpZ25lZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wNy0wOFQxNTozMDozMi4zODU3OTdaIDAgW1N5c3RlbV0gW01ZLTAxMzYwMl0gW1NlcnZlcl0gQ2hhbm5lbCBteXNxbF9tYWluIGNvbmZpZ3VyZWQgdG8gc3VwcG9ydCBUTFMuIEVuY3J5cHRlZCBjb25uZWN0aW9ucyBhcmUgbm93IHN1cHBvcnRlZCBmb3IgdGhpcyBjaGFubmVsLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA3LTA4VDE1OjMwOjMyLjM5ODU3M1ogMCBbV2FybmluZ10gW01ZLTAxMTgxMF0gW1NlcnZlcl0gSW5zZWN1cmUgY29uZmlndXJhdGlvbiBmb3IgLS1waWQtZmlsZTogTG9jYXRpb24gJy92YXIvcnVuL215c3FsZCcgaW4gdGhlIHBhdGggaXMgYWNjZXNzaWJsZSB0byBhbGwgT1MgdXNlcnMuIENvbnNpZGVyIGNob29zaW5nIGEgZGlmZmVyZW50IGRpcmVjdG9yeS4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wNy0wOFQxNTozMDozMi40NTc5NDRaIDAgW1N5c3RlbV0gW01ZLTAxMDkzMV0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZDogcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBWZXJzaW9uOiAnOC4wLjIzJyAgc29ja2V0OiAnL3Zhci9ydW4vbXlzcWxkL215c3FsZC5zb2NrJyAgcG9ydDogMzMwNiAgTXlTUUwgQ29tbXVuaXR5IFNlcnZlciAtIEdQTC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOC0wMlQxOToxMTo0Mi4xMDcwNzVaIDAgW1N5c3RlbV0gW01ZLTAxMzE3Ml0gW1NlcnZlcl0gUmVjZWl2ZWQgU0hVVERPV04gZnJvbSB1c2VyIDx2aWEgdXNlciBzaWduYWw+LiBTaHV0dGluZyBkb3duIG15c3FsZCAoVmVyc2lvbjogOC4wLjIzKS4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOC0wMlQxOToxMTo0My44MDU0NDFaIDAgW1N5c3RlbV0gW01ZLTAxMDkxMF0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZDogU2h1dGRvd24gY29tcGxldGUgKG15c3FsZCA4LjAuMjMpICBNeVNRTCBDb21tdW5pdHkgU2VydmVyIC0gR1BMLgpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMy0wOC0wMiAxOToxMjowMSswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAUzIwMjMtMDgtMDIgMTk6MTI6MDErMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogU3dpdGNoaW5nIHRvIGRlZGljYXRlZCB1c2VyICdteXNxbCcKbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjMtMDgtMDIgMTk6MTI6MDErMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAHMyMDIzLTA4LTAyVDE5OjEyOjAyLjEzMjk0NlogMCBbU3lzdGVtXSBbTVktMDEwMTE2XSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkIChteXNxbGQgOC4wLjIzKSBzdGFydGluZyBhcyBwcm9jZXNzIDEKbXlzcWwtbXlzcWwJfCACAAAAAAAAXzIwMjMtMDgtMDJUMTk6MTI6MDIuMTQxMTE4WiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzZdIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAXTIwMjMtMDgtMDJUMTk6MTI6MDIuOTExMTUxWiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzddIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgZW5kZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDgtMDJUMTk6MTI6MDMuMDYyMzQ4WiAwIFtTeXN0ZW1dIFtNWS0wMTEzMjNdIFtTZXJ2ZXJdIFggUGx1Z2luIHJlYWR5IGZvciBjb25uZWN0aW9ucy4gQmluZC1hZGRyZXNzOiAnOjonIHBvcnQ6IDMzMDYwLCBzb2NrZXQ6IC92YXIvcnVuL215c3FsZC9teXNxbHguc29jawpteXNxbC1teXNxbAl8IAIAAAAAAABjMjAyMy0wOC0wMlQxOToxMjowMy4yNTM0OTRaIDAgW1dhcm5pbmddIFtNWS0wMTAwNjhdIFtTZXJ2ZXJdIENBIGNlcnRpZmljYXRlIGNhLnBlbSBpcyBzZWxmIHNpZ25lZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOC0wMlQxOToxMjowMy4yNTM3MTFaIDAgW1N5c3RlbV0gW01ZLTAxMzYwMl0gW1NlcnZlcl0gQ2hhbm5lbCBteXNxbF9tYWluIGNvbmZpZ3VyZWQgdG8gc3VwcG9ydCBUTFMuIEVuY3J5cHRlZCBjb25uZWN0aW9ucyBhcmUgbm93IHN1cHBvcnRlZCBmb3IgdGhpcyBjaGFubmVsLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA4LTAyVDE5OjEyOjAzLjI2MjI0NlogMCBbV2FybmluZ10gW01ZLTAxMTgxMF0gW1NlcnZlcl0gSW5zZWN1cmUgY29uZmlndXJhdGlvbiBmb3IgLS1waWQtZmlsZTogTG9jYXRpb24gJy92YXIvcnVuL215c3FsZCcgaW4gdGhlIHBhdGggaXMgYWNjZXNzaWJsZSB0byBhbGwgT1MgdXNlcnMuIENvbnNpZGVyIGNob29zaW5nIGEgZGlmZmVyZW50IGRpcmVjdG9yeS4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOC0wMlQxOToxMjowMy4yOTc2MTJaIDAgW1N5c3RlbV0gW01ZLTAxMDkzMV0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZDogcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBWZXJzaW9uOiAnOC4wLjIzJyAgc29ja2V0OiAnL3Zhci9ydW4vbXlzcWxkL215c3FsZC5zb2NrJyAgcG9ydDogMzMwNiAgTXlTUUwgQ29tbXVuaXR5IFNlcnZlciAtIEdQTC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOC0wMlQxOToxMzowNi4yMzEyMDZaIDAgW1N5c3RlbV0gW01ZLTAxMzE3Ml0gW1NlcnZlcl0gUmVjZWl2ZWQgU0hVVERPV04gZnJvbSB1c2VyIDx2aWEgdXNlciBzaWduYWw+LiBTaHV0dGluZyBkb3duIG15c3FsZCAoVmVyc2lvbjogOC4wLjIzKS4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOC0wMlQxOToxMzowNy42MjM3NDZaIDAgW1N5c3RlbV0gW01ZLTAxMDkxMF0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZDogU2h1dGRvd24gY29tcGxldGUgKG15c3FsZCA4LjAuMjMpICBNeVNRTCBDb21tdW5pdHkgU2VydmVyIC0gR1BMLgpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMy0wOC0wMiAxOToxMzo0NSswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAUzIwMjMtMDgtMDIgMTk6MTM6NDUrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogU3dpdGNoaW5nIHRvIGRlZGljYXRlZCB1c2VyICdteXNxbCcKbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjMtMDgtMDIgMTk6MTM6NDUrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAHMyMDIzLTA4LTAyVDE5OjEzOjQ2LjE2MTk3OVogMCBbU3lzdGVtXSBbTVktMDEwMTE2XSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkIChteXNxbGQgOC4wLjIzKSBzdGFydGluZyBhcyBwcm9jZXNzIDEKbXlzcWwtbXlzcWwJfCACAAAAAAAAXzIwMjMtMDgtMDJUMTk6MTM6NDYuMTY5NTcwWiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzZdIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAXTIwMjMtMDgtMDJUMTk6MTM6NDYuNjg1NDAzWiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzddIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgZW5kZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDgtMDJUMTk6MTM6NDYuNzgzMDg2WiAwIFtTeXN0ZW1dIFtNWS0wMTEzMjNdIFtTZXJ2ZXJdIFggUGx1Z2luIHJlYWR5IGZvciBjb25uZWN0aW9ucy4gQmluZC1hZGRyZXNzOiAnOjonIHBvcnQ6IDMzMDYwLCBzb2NrZXQ6IC92YXIvcnVuL215c3FsZC9teXNxbHguc29jawpteXNxbC1teXNxbAl8IAIAAAAAAABjMjAyMy0wOC0wMlQxOToxMzo0Ni45NDk1NTFaIDAgW1dhcm5pbmddIFtNWS0wMTAwNjhdIFtTZXJ2ZXJdIENBIGNlcnRpZmljYXRlIGNhLnBlbSBpcyBzZWxmIHNpZ25lZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOC0wMlQxOToxMzo0Ni45NTAxMjFaIDAgW1N5c3RlbV0gW01ZLTAxMzYwMl0gW1NlcnZlcl0gQ2hhbm5lbCBteXNxbF9tYWluIGNvbmZpZ3VyZWQgdG8gc3VwcG9ydCBUTFMuIEVuY3J5cHRlZCBjb25uZWN0aW9ucyBhcmUgbm93IHN1cHBvcnRlZCBmb3IgdGhpcyBjaGFubmVsLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA4LTAyVDE5OjEzOjQ2Ljk2MDkwMFogMCBbV2FybmluZ10gW01ZLTAxMTgxMF0gW1NlcnZlcl0gSW5zZWN1cmUgY29uZmlndXJhdGlvbiBmb3IgLS1waWQtZmlsZTogTG9jYXRpb24gJy92YXIvcnVuL215c3FsZCcgaW4gdGhlIHBhdGggaXMgYWNjZXNzaWJsZSB0byBhbGwgT1MgdXNlcnMuIENvbnNpZGVyIGNob29zaW5nIGEgZGlmZmVyZW50IGRpcmVjdG9yeS4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOC0wMlQxOToxMzo0Ny4wMDA0NTBaIDAgW1N5c3RlbV0gW01ZLTAxMDkzMV0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZDogcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBWZXJzaW9uOiAnOC4wLjIzJyAgc29ja2V0OiAnL3Zhci9ydW4vbXlzcWxkL215c3FsZC5zb2NrJyAgcG9ydDogMzMwNiAgTXlTUUwgQ29tbXVuaXR5IFNlcnZlciAtIEdQTC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjMtMDgtMDQgMDA6MDE6MTYrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAQAAAAAAAFMyMDIzLTA4LTA0IDAwOjAxOjE3KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IFN3aXRjaGluZyB0byBkZWRpY2F0ZWQgdXNlciAnbXlzcWwnCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIzLTA4LTA0IDAwOjAxOjE3KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABzMjAyMy0wOC0wNFQwMDowMToxNy40MzY4MjRaIDAgW1N5c3RlbV0gW01ZLTAxMDExNl0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZCAobXlzcWxkIDguMC4yMykgc3RhcnRpbmcgYXMgcHJvY2VzcyAxCm15c3FsLW15c3FsCXwgAgAAAAAAAF8yMDIzLTA4LTA0VDAwOjAxOjE3LjU0NzExMlogMSBbU3lzdGVtXSBbTVktMDEzNTc2XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAF0yMDIzLTA4LTA0VDAwOjAxOjE5LjI2MDA1MVogMSBbU3lzdGVtXSBbTVktMDEzNTc3XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIGVuZGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA4LTA0VDAwOjAxOjE5LjU3MTk5N1ogMCBbU3lzdGVtXSBbTVktMDExMzIzXSBbU2VydmVyXSBYIFBsdWdpbiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIEJpbmQtYWRkcmVzczogJzo6JyBwb3J0OiAzMzA2MCwgc29ja2V0OiAvdmFyL3J1bi9teXNxbGQvbXlzcWx4LnNvY2sKbXlzcWwtbXlzcWwJfCACAAAAAAAAWjIwMjMtMDgtMDRUMDA6MDE6MTkuNjA1NDg1WiAwIFtTeXN0ZW1dIFtNWS0wMTAyMjldIFtTZXJ2ZXJdIFN0YXJ0aW5nIFhBIGNyYXNoIHJlY292ZXJ5Li4uCm15c3FsLW15c3FsCXwgAgAAAAAAAFgyMDIzLTA4LTA0VDAwOjAxOjE5LjYxODE2MlogMCBbU3lzdGVtXSBbTVktMDEwMjMyXSBbU2VydmVyXSBYQSBjcmFzaCByZWNvdmVyeSBmaW5pc2hlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAYzIwMjMtMDgtMDRUMDA6MDE6MTkuOTM5NjE4WiAwIFtXYXJuaW5nXSBbTVktMDEwMDY4XSBbU2VydmVyXSBDQSBjZXJ0aWZpY2F0ZSBjYS5wZW0gaXMgc2VsZiBzaWduZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDgtMDRUMDA6MDE6MTkuOTQwMDg2WiAwIFtTeXN0ZW1dIFtNWS0wMTM2MDJdIFtTZXJ2ZXJdIENoYW5uZWwgbXlzcWxfbWFpbiBjb25maWd1cmVkIHRvIHN1cHBvcnQgVExTLiBFbmNyeXB0ZWQgY29ubmVjdGlvbnMgYXJlIG5vdyBzdXBwb3J0ZWQgZm9yIHRoaXMgY2hhbm5lbC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOC0wNFQwMDowMToxOS45NTUyMTJaIDAgW1dhcm5pbmddIFtNWS0wMTE4MTBdIFtTZXJ2ZXJdIEluc2VjdXJlIGNvbmZpZ3VyYXRpb24gZm9yIC0tcGlkLWZpbGU6IExvY2F0aW9uICcvdmFyL3J1bi9teXNxbGQnIGluIHRoZSBwYXRoIGlzIGFjY2Vzc2libGUgdG8gYWxsIE9TIHVzZXJzLiBDb25zaWRlciBjaG9vc2luZyBhIGRpZmZlcmVudCBkaXJlY3RvcnkuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDgtMDRUMDA6MDE6MjAuMDI4NjMxWiAwIFtTeXN0ZW1dIFtNWS0wMTA5MzFdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IHJlYWR5IGZvciBjb25uZWN0aW9ucy4gVmVyc2lvbjogJzguMC4yMycgIHNvY2tldDogJy92YXIvcnVuL215c3FsZC9teXNxbGQuc29jaycgIHBvcnQ6IDMzMDYgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMTFUMjA6MDk6MjAuMjkzNDgxWiAwIFtTeXN0ZW1dIFtNWS0wMTMxNzJdIFtTZXJ2ZXJdIFJlY2VpdmVkIFNIVVRET1dOIGZyb20gdXNlciA8dmlhIHVzZXIgc2lnbmFsPi4gU2h1dHRpbmcgZG93biBteXNxbGQgKFZlcnNpb246IDguMC4yMykuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMTFUMjA6MDk6MjEuNzg0NjQ0WiAwIFtTeXN0ZW1dIFtNWS0wMTA5MTBdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IFNodXRkb3duIGNvbXBsZXRlIChteXNxbGQgOC4wLjIzKSAgTXlTUUwgQ29tbXVuaXR5IFNlcnZlciAtIEdQTC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjMtMDktMTEgMjA6MDk6MzkrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAQAAAAAAAFMyMDIzLTA5LTExIDIwOjA5OjM5KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IFN3aXRjaGluZyB0byBkZWRpY2F0ZWQgdXNlciAnbXlzcWwnCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIzLTA5LTExIDIwOjA5OjM5KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABzMjAyMy0wOS0xMVQyMDowOTozOS42OTczMzRaIDAgW1N5c3RlbV0gW01ZLTAxMDExNl0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZCAobXlzcWxkIDguMC4yMykgc3RhcnRpbmcgYXMgcHJvY2VzcyAxCm15c3FsLW15c3FsCXwgAgAAAAAAAF8yMDIzLTA5LTExVDIwOjA5OjM5LjcwNjE5MFogMSBbU3lzdGVtXSBbTVktMDEzNTc2XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAF0yMDIzLTA5LTExVDIwOjA5OjQwLjUyNzQ2NFogMSBbU3lzdGVtXSBbTVktMDEzNTc3XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIGVuZGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTExVDIwOjA5OjQwLjc1NjQ5NFogMCBbU3lzdGVtXSBbTVktMDExMzIzXSBbU2VydmVyXSBYIFBsdWdpbiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIEJpbmQtYWRkcmVzczogJzo6JyBwb3J0OiAzMzA2MCwgc29ja2V0OiAvdmFyL3J1bi9teXNxbGQvbXlzcWx4LnNvY2sKbXlzcWwtbXlzcWwJfCACAAAAAAAAYzIwMjMtMDktMTFUMjA6MDk6NDAuOTc3MjIxWiAwIFtXYXJuaW5nXSBbTVktMDEwMDY4XSBbU2VydmVyXSBDQSBjZXJ0aWZpY2F0ZSBjYS5wZW0gaXMgc2VsZiBzaWduZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMTFUMjA6MDk6NDAuOTc3NDE2WiAwIFtTeXN0ZW1dIFtNWS0wMTM2MDJdIFtTZXJ2ZXJdIENoYW5uZWwgbXlzcWxfbWFpbiBjb25maWd1cmVkIHRvIHN1cHBvcnQgVExTLiBFbmNyeXB0ZWQgY29ubmVjdGlvbnMgYXJlIG5vdyBzdXBwb3J0ZWQgZm9yIHRoaXMgY2hhbm5lbC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOS0xMVQyMDowOTo0MC45ODU4OTlaIDAgW1dhcm5pbmddIFtNWS0wMTE4MTBdIFtTZXJ2ZXJdIEluc2VjdXJlIGNvbmZpZ3VyYXRpb24gZm9yIC0tcGlkLWZpbGU6IExvY2F0aW9uICcvdmFyL3J1bi9teXNxbGQnIGluIHRoZSBwYXRoIGlzIGFjY2Vzc2libGUgdG8gYWxsIE9TIHVzZXJzLiBDb25zaWRlciBjaG9vc2luZyBhIGRpZmZlcmVudCBkaXJlY3RvcnkuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMTFUMjA6MDk6NDEuMDI5Njc3WiAwIFtTeXN0ZW1dIFtNWS0wMTA5MzFdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IHJlYWR5IGZvciBjb25uZWN0aW9ucy4gVmVyc2lvbjogJzguMC4yMycgIHNvY2tldDogJy92YXIvcnVuL215c3FsZC9teXNxbGQuc29jaycgIHBvcnQ6IDMzMDYgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMTFUMjA6MTM6NTMuODA5Njc1WiAwIFtTeXN0ZW1dIFtNWS0wMTMxNzJdIFtTZXJ2ZXJdIFJlY2VpdmVkIFNIVVRET1dOIGZyb20gdXNlciA8dmlhIHVzZXIgc2lnbmFsPi4gU2h1dHRpbmcgZG93biBteXNxbGQgKFZlcnNpb246IDguMC4yMykuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMTFUMjA6MTM6NTUuMzMxMzMwWiAwIFtTeXN0ZW1dIFtNWS0wMTA5MTBdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IFNodXRkb3duIGNvbXBsZXRlIChteXNxbGQgOC4wLjIzKSAgTXlTUUwgQ29tbXVuaXR5IFNlcnZlciAtIEdQTC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjMtMDktMTEgMjA6MTQ6MDMrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAQAAAAAAAFMyMDIzLTA5LTExIDIwOjE0OjAzKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IFN3aXRjaGluZyB0byBkZWRpY2F0ZWQgdXNlciAnbXlzcWwnCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIzLTA5LTExIDIwOjE0OjAzKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABzMjAyMy0wOS0xMVQyMDoxNDowMy40ODI4NDVaIDAgW1N5c3RlbV0gW01ZLTAxMDExNl0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZCAobXlzcWxkIDguMC4yMykgc3RhcnRpbmcgYXMgcHJvY2VzcyAxCm15c3FsLW15c3FsCXwgAgAAAAAAAF8yMDIzLTA5LTExVDIwOjE0OjAzLjUwMzI1OVogMSBbU3lzdGVtXSBbTVktMDEzNTc2XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAF0yMDIzLTA5LTExVDIwOjE0OjA0LjA3NzQ0OFogMSBbU3lzdGVtXSBbTVktMDEzNTc3XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIGVuZGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTExVDIwOjE0OjA0LjIzNzI0NVogMCBbU3lzdGVtXSBbTVktMDExMzIzXSBbU2VydmVyXSBYIFBsdWdpbiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIEJpbmQtYWRkcmVzczogJzo6JyBwb3J0OiAzMzA2MCwgc29ja2V0OiAvdmFyL3J1bi9teXNxbGQvbXlzcWx4LnNvY2sKbXlzcWwtbXlzcWwJfCACAAAAAAAAYzIwMjMtMDktMTFUMjA6MTQ6MDQuMzM4MTQwWiAwIFtXYXJuaW5nXSBbTVktMDEwMDY4XSBbU2VydmVyXSBDQSBjZXJ0aWZpY2F0ZSBjYS5wZW0gaXMgc2VsZiBzaWduZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMTFUMjA6MTQ6MDQuMzM4NTEwWiAwIFtTeXN0ZW1dIFtNWS0wMTM2MDJdIFtTZXJ2ZXJdIENoYW5uZWwgbXlzcWxfbWFpbiBjb25maWd1cmVkIHRvIHN1cHBvcnQgVExTLiBFbmNyeXB0ZWQgY29ubmVjdGlvbnMgYXJlIG5vdyBzdXBwb3J0ZWQgZm9yIHRoaXMgY2hhbm5lbC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOS0xMVQyMDoxNDowNC4zNDc3MDBaIDAgW1dhcm5pbmddIFtNWS0wMTE4MTBdIFtTZXJ2ZXJdIEluc2VjdXJlIGNvbmZpZ3VyYXRpb24gZm9yIC0tcGlkLWZpbGU6IExvY2F0aW9uICcvdmFyL3J1bi9teXNxbGQnIGluIHRoZSBwYXRoIGlzIGFjY2Vzc2libGUgdG8gYWxsIE9TIHVzZXJzLiBDb25zaWRlciBjaG9vc2luZyBhIGRpZmZlcmVudCBkaXJlY3RvcnkuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMTFUMjA6MTQ6MDQuMzk0NDM2WiAwIFtTeXN0ZW1dIFtNWS0wMTA5MzFdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IHJlYWR5IGZvciBjb25uZWN0aW9ucy4gVmVyc2lvbjogJzguMC4yMycgIHNvY2tldDogJy92YXIvcnVuL215c3FsZC9teXNxbGQuc29jaycgIHBvcnQ6IDMzMDYgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIzLTA5LTExIDIwOjI0OjUzKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAEAAAAAAABTMjAyMy0wOS0xMSAyMDoyNDo1MyswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBTd2l0Y2hpbmcgdG8gZGVkaWNhdGVkIHVzZXIgJ215c3FsJwpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMy0wOS0xMSAyMDoyNDo1MyswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAczIwMjMtMDktMTFUMjA6MjQ6NTQuMDY1MzgwWiAwIFtTeXN0ZW1dIFtNWS0wMTAxMTZdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQgKG15c3FsZCA4LjAuMjMpIHN0YXJ0aW5nIGFzIHByb2Nlc3MgMQpteXNxbC1teXNxbAl8IAIAAAAAAABfMjAyMy0wOS0xMVQyMDoyNDo1NC4wNzc4MTBaIDEgW1N5c3RlbV0gW01ZLTAxMzU3Nl0gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABdMjAyMy0wOS0xMVQyMDoyNDo1NC40NDk0NTFaIDEgW1N5c3RlbV0gW01ZLTAxMzU3N10gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBlbmRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOS0xMVQyMDoyNDo1NC42MDI0MDBaIDAgW1N5c3RlbV0gW01ZLTAxMTMyM10gW1NlcnZlcl0gWCBQbHVnaW4gcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBCaW5kLWFkZHJlc3M6ICc6OicgcG9ydDogMzMwNjAsIHNvY2tldDogL3Zhci9ydW4vbXlzcWxkL215c3FseC5zb2NrCm15c3FsLW15c3FsCXwgAgAAAAAAAFoyMDIzLTA5LTExVDIwOjI0OjU0LjYyOTM1NFogMCBbU3lzdGVtXSBbTVktMDEwMjI5XSBbU2VydmVyXSBTdGFydGluZyBYQSBjcmFzaCByZWNvdmVyeS4uLgpteXNxbC1teXNxbAl8IAIAAAAAAABYMjAyMy0wOS0xMVQyMDoyNDo1NC42MzkxNDFaIDAgW1N5c3RlbV0gW01ZLTAxMDIzMl0gW1NlcnZlcl0gWEEgY3Jhc2ggcmVjb3ZlcnkgZmluaXNoZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAGMyMDIzLTA5LTExVDIwOjI0OjU0LjcyNzI1MVogMCBbV2FybmluZ10gW01ZLTAxMDA2OF0gW1NlcnZlcl0gQ0EgY2VydGlmaWNhdGUgY2EucGVtIGlzIHNlbGYgc2lnbmVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTExVDIwOjI0OjU0LjcyNzUyM1ogMCBbU3lzdGVtXSBbTVktMDEzNjAyXSBbU2VydmVyXSBDaGFubmVsIG15c3FsX21haW4gY29uZmlndXJlZCB0byBzdXBwb3J0IFRMUy4gRW5jcnlwdGVkIGNvbm5lY3Rpb25zIGFyZSBub3cgc3VwcG9ydGVkIGZvciB0aGlzIGNoYW5uZWwuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMTFUMjA6MjQ6NTQuNzM0MzA2WiAwIFtXYXJuaW5nXSBbTVktMDExODEwXSBbU2VydmVyXSBJbnNlY3VyZSBjb25maWd1cmF0aW9uIGZvciAtLXBpZC1maWxlOiBMb2NhdGlvbiAnL3Zhci9ydW4vbXlzcWxkJyBpbiB0aGUgcGF0aCBpcyBhY2Nlc3NpYmxlIHRvIGFsbCBPUyB1c2Vycy4gQ29uc2lkZXIgY2hvb3NpbmcgYSBkaWZmZXJlbnQgZGlyZWN0b3J5LgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTExVDIwOjI0OjU0Ljc5MTg0M1ogMCBbU3lzdGVtXSBbTVktMDEwOTMxXSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkOiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIFZlcnNpb246ICc4LjAuMjMnICBzb2NrZXQ6ICcvdmFyL3J1bi9teXNxbGQvbXlzcWxkLnNvY2snICBwb3J0OiAzMzA2ICBNeVNRTCBDb21tdW5pdHkgU2VydmVyIC0gR1BMLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTE0VDIxOjA1OjIwLjkyMjc2NlogMCBbU3lzdGVtXSBbTVktMDEzMTcyXSBbU2VydmVyXSBSZWNlaXZlZCBTSFVURE9XTiBmcm9tIHVzZXIgPHZpYSB1c2VyIHNpZ25hbD4uIFNodXR0aW5nIGRvd24gbXlzcWxkIChWZXJzaW9uOiA4LjAuMjMpLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTE0VDIxOjA1OjIyLjEyMTQ0MFogMCBbU3lzdGVtXSBbTVktMDEwOTEwXSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkOiBTaHV0ZG93biBjb21wbGV0ZSAobXlzcWxkIDguMC4yMykgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIzLTA5LTE0IDIxOjA1OjM5KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAEAAAAAAABTMjAyMy0wOS0xNCAyMTowNTozOSswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBTd2l0Y2hpbmcgdG8gZGVkaWNhdGVkIHVzZXIgJ215c3FsJwpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMy0wOS0xNCAyMTowNTozOSswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAczIwMjMtMDktMTRUMjE6MDU6MzkuODA2Nzg2WiAwIFtTeXN0ZW1dIFtNWS0wMTAxMTZdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQgKG15c3FsZCA4LjAuMjMpIHN0YXJ0aW5nIGFzIHByb2Nlc3MgMQpteXNxbC1teXNxbAl8IAIAAAAAAABfMjAyMy0wOS0xNFQyMTowNTozOS44MTQ4MDVaIDEgW1N5c3RlbV0gW01ZLTAxMzU3Nl0gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABdMjAyMy0wOS0xNFQyMTowNTo0MC40MTgzMDFaIDEgW1N5c3RlbV0gW01ZLTAxMzU3N10gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBlbmRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOS0xNFQyMTowNTo0MC41MzkyMzBaIDAgW1N5c3RlbV0gW01ZLTAxMTMyM10gW1NlcnZlcl0gWCBQbHVnaW4gcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBCaW5kLWFkZHJlc3M6ICc6OicgcG9ydDogMzMwNjAsIHNvY2tldDogL3Zhci9ydW4vbXlzcWxkL215c3FseC5zb2NrCm15c3FsLW15c3FsCXwgAgAAAAAAAGMyMDIzLTA5LTE0VDIxOjA1OjQwLjY0NTk0NFogMCBbV2FybmluZ10gW01ZLTAxMDA2OF0gW1NlcnZlcl0gQ0EgY2VydGlmaWNhdGUgY2EucGVtIGlzIHNlbGYgc2lnbmVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTE0VDIxOjA1OjQwLjY0NjA3OVogMCBbU3lzdGVtXSBbTVktMDEzNjAyXSBbU2VydmVyXSBDaGFubmVsIG15c3FsX21haW4gY29uZmlndXJlZCB0byBzdXBwb3J0IFRMUy4gRW5jcnlwdGVkIGNvbm5lY3Rpb25zIGFyZSBub3cgc3VwcG9ydGVkIGZvciB0aGlzIGNoYW5uZWwuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMTRUMjE6MDU6NDAuNjUxNjU4WiAwIFtXYXJuaW5nXSBbTVktMDExODEwXSBbU2VydmVyXSBJbnNlY3VyZSBjb25maWd1cmF0aW9uIGZvciAtLXBpZC1maWxlOiBMb2NhdGlvbiAnL3Zhci9ydW4vbXlzcWxkJyBpbiB0aGUgcGF0aCBpcyBhY2Nlc3NpYmxlIHRvIGFsbCBPUyB1c2Vycy4gQ29uc2lkZXIgY2hvb3NpbmcgYSBkaWZmZXJlbnQgZGlyZWN0b3J5LgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTE0VDIxOjA1OjQwLjY3MzczOVogMCBbU3lzdGVtXSBbTVktMDEwOTMxXSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkOiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIFZlcnNpb246ICc4LjAuMjMnICBzb2NrZXQ6ICcvdmFyL3J1bi9teXNxbGQvbXlzcWxkLnNvY2snICBwb3J0OiAzMzA2ICBNeVNRTCBDb21tdW5pdHkgU2VydmVyIC0gR1BMLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTE0VDIxOjA2OjQ1LjI5Mzk3NlogMCBbU3lzdGVtXSBbTVktMDEzMTcyXSBbU2VydmVyXSBSZWNlaXZlZCBTSFVURE9XTiBmcm9tIHVzZXIgPHZpYSB1c2VyIHNpZ25hbD4uIFNodXR0aW5nIGRvd24gbXlzcWxkIChWZXJzaW9uOiA4LjAuMjMpLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTE0VDIxOjA2OjQ2LjA4ODU1M1ogMCBbU3lzdGVtXSBbTVktMDEwOTEwXSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkOiBTaHV0ZG93biBjb21wbGV0ZSAobXlzcWxkIDguMC4yMykgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIzLTA5LTE0IDIxOjA2OjU0KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAEAAAAAAABTMjAyMy0wOS0xNCAyMTowNjo1NCswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBTd2l0Y2hpbmcgdG8gZGVkaWNhdGVkIHVzZXIgJ215c3FsJwpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMy0wOS0xNCAyMTowNjo1NCswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAczIwMjMtMDktMTRUMjE6MDY6NTQuNzgyMjUwWiAwIFtTeXN0ZW1dIFtNWS0wMTAxMTZdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQgKG15c3FsZCA4LjAuMjMpIHN0YXJ0aW5nIGFzIHByb2Nlc3MgMQpteXNxbC1teXNxbAl8IAIAAAAAAABfMjAyMy0wOS0xNFQyMTowNjo1NC43OTAzNzdaIDEgW1N5c3RlbV0gW01ZLTAxMzU3Nl0gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABdMjAyMy0wOS0xNFQyMTowNjo1NS4yNDE5NTBaIDEgW1N5c3RlbV0gW01ZLTAxMzU3N10gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBlbmRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOS0xNFQyMTowNjo1NS4zNTk3ODhaIDAgW1N5c3RlbV0gW01ZLTAxMTMyM10gW1NlcnZlcl0gWCBQbHVnaW4gcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBCaW5kLWFkZHJlc3M6ICc6OicgcG9ydDogMzMwNjAsIHNvY2tldDogL3Zhci9ydW4vbXlzcWxkL215c3FseC5zb2NrCm15c3FsLW15c3FsCXwgAgAAAAAAAGMyMDIzLTA5LTE0VDIxOjA2OjU1LjQ0OTIzOFogMCBbV2FybmluZ10gW01ZLTAxMDA2OF0gW1NlcnZlcl0gQ0EgY2VydGlmaWNhdGUgY2EucGVtIGlzIHNlbGYgc2lnbmVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTE0VDIxOjA2OjU1LjQ0OTU3MlogMCBbU3lzdGVtXSBbTVktMDEzNjAyXSBbU2VydmVyXSBDaGFubmVsIG15c3FsX21haW4gY29uZmlndXJlZCB0byBzdXBwb3J0IFRMUy4gRW5jcnlwdGVkIGNvbm5lY3Rpb25zIGFyZSBub3cgc3VwcG9ydGVkIGZvciB0aGlzIGNoYW5uZWwuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMTRUMjE6MDY6NTUuNDU4NzE5WiAwIFtXYXJuaW5nXSBbTVktMDExODEwXSBbU2VydmVyXSBJbnNlY3VyZSBjb25maWd1cmF0aW9uIGZvciAtLXBpZC1maWxlOiBMb2NhdGlvbiAnL3Zhci9ydW4vbXlzcWxkJyBpbiB0aGUgcGF0aCBpcyBhY2Nlc3NpYmxlIHRvIGFsbCBPUyB1c2Vycy4gQ29uc2lkZXIgY2hvb3NpbmcgYSBkaWZmZXJlbnQgZGlyZWN0b3J5LgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTE0VDIxOjA2OjU1LjQ5MTIwMFogMCBbU3lzdGVtXSBbTVktMDEwOTMxXSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkOiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIFZlcnNpb246ICc4LjAuMjMnICBzb2NrZXQ6ICcvdmFyL3J1bi9teXNxbGQvbXlzcWxkLnNvY2snICBwb3J0OiAzMzA2ICBNeVNRTCBDb21tdW5pdHkgU2VydmVyIC0gR1BMLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTE0VDIxOjEzOjE1LjE5Mjg5MVogMCBbU3lzdGVtXSBbTVktMDEzMTcyXSBbU2VydmVyXSBSZWNlaXZlZCBTSFVURE9XTiBmcm9tIHVzZXIgPHZpYSB1c2VyIHNpZ25hbD4uIFNodXR0aW5nIGRvd24gbXlzcWxkIChWZXJzaW9uOiA4LjAuMjMpLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTE0VDIxOjEzOjE1LjkzODM4MlogMCBbU3lzdGVtXSBbTVktMDEwOTEwXSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkOiBTaHV0ZG93biBjb21wbGV0ZSAobXlzcWxkIDguMC4yMykgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIzLTA5LTE0IDIxOjEzOjI0KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAEAAAAAAABTMjAyMy0wOS0xNCAyMToxMzoyNCswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBTd2l0Y2hpbmcgdG8gZGVkaWNhdGVkIHVzZXIgJ215c3FsJwpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMy0wOS0xNCAyMToxMzoyNCswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAczIwMjMtMDktMTRUMjE6MTM6MjQuNTM4MjQ1WiAwIFtTeXN0ZW1dIFtNWS0wMTAxMTZdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQgKG15c3FsZCA4LjAuMjMpIHN0YXJ0aW5nIGFzIHByb2Nlc3MgMQpteXNxbC1teXNxbAl8IAIAAAAAAABfMjAyMy0wOS0xNFQyMToxMzoyNC41NDU1NTdaIDEgW1N5c3RlbV0gW01ZLTAxMzU3Nl0gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABdMjAyMy0wOS0xNFQyMToxMzoyNC45NzI3NjVaIDEgW1N5c3RlbV0gW01ZLTAxMzU3N10gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBlbmRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOS0xNFQyMToxMzoyNS4wNjIwODhaIDAgW1N5c3RlbV0gW01ZLTAxMTMyM10gW1NlcnZlcl0gWCBQbHVnaW4gcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBCaW5kLWFkZHJlc3M6ICc6OicgcG9ydDogMzMwNjAsIHNvY2tldDogL3Zhci9ydW4vbXlzcWxkL215c3FseC5zb2NrCm15c3FsLW15c3FsCXwgAgAAAAAAAGMyMDIzLTA5LTE0VDIxOjEzOjI1LjEzODM3MVogMCBbV2FybmluZ10gW01ZLTAxMDA2OF0gW1NlcnZlcl0gQ0EgY2VydGlmaWNhdGUgY2EucGVtIGlzIHNlbGYgc2lnbmVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTE0VDIxOjEzOjI1LjEzODU0NlogMCBbU3lzdGVtXSBbTVktMDEzNjAyXSBbU2VydmVyXSBDaGFubmVsIG15c3FsX21haW4gY29uZmlndXJlZCB0byBzdXBwb3J0IFRMUy4gRW5jcnlwdGVkIGNvbm5lY3Rpb25zIGFyZSBub3cgc3VwcG9ydGVkIGZvciB0aGlzIGNoYW5uZWwuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMTRUMjE6MTM6MjUuMTQ0NjA5WiAwIFtXYXJuaW5nXSBbTVktMDExODEwXSBbU2VydmVyXSBJbnNlY3VyZSBjb25maWd1cmF0aW9uIGZvciAtLXBpZC1maWxlOiBMb2NhdGlvbiAnL3Zhci9ydW4vbXlzcWxkJyBpbiB0aGUgcGF0aCBpcyBhY2Nlc3NpYmxlIHRvIGFsbCBPUyB1c2Vycy4gQ29uc2lkZXIgY2hvb3NpbmcgYSBkaWZmZXJlbnQgZGlyZWN0b3J5LgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTE0VDIxOjEzOjI1LjE3MTg0OFogMCBbU3lzdGVtXSBbTVktMDEwOTMxXSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkOiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIFZlcnNpb246ICc4LjAuMjMnICBzb2NrZXQ6ICcvdmFyL3J1bi9teXNxbGQvbXlzcWxkLnNvY2snICBwb3J0OiAzMzA2ICBNeVNRTCBDb21tdW5pdHkgU2VydmVyIC0gR1BMLgpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMy0wOS0xNCAyMTozNDozNSswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAUzIwMjMtMDktMTQgMjE6MzQ6NDcrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogU3dpdGNoaW5nIHRvIGRlZGljYXRlZCB1c2VyICdteXNxbCcKbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjMtMDktMTQgMjE6MzQ6NDcrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAHMyMDIzLTA5LTE0VDIxOjM0OjQ3Ljk0MTY3OFogMCBbU3lzdGVtXSBbTVktMDEwMTE2XSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkIChteXNxbGQgOC4wLjIzKSBzdGFydGluZyBhcyBwcm9jZXNzIDEKbXlzcWwtbXlzcWwJfCACAAAAAAAAXzIwMjMtMDktMTRUMjE6MzQ6NDcuOTU3ODExWiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzZdIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAXTIwMjMtMDktMTRUMjE6MzQ6NTAuODY2Nzg0WiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzddIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgZW5kZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMTRUMjE6MzQ6NTEuMjE3ODgyWiAwIFtTeXN0ZW1dIFtNWS0wMTEzMjNdIFtTZXJ2ZXJdIFggUGx1Z2luIHJlYWR5IGZvciBjb25uZWN0aW9ucy4gQmluZC1hZGRyZXNzOiAnOjonIHBvcnQ6IDMzMDYwLCBzb2NrZXQ6IC92YXIvcnVuL215c3FsZC9teXNxbHguc29jawpteXNxbC1teXNxbAl8IAIAAAAAAABaMjAyMy0wOS0xNFQyMTozNDo1MS4yNzQxOTlaIDAgW1N5c3RlbV0gW01ZLTAxMDIyOV0gW1NlcnZlcl0gU3RhcnRpbmcgWEEgY3Jhc2ggcmVjb3ZlcnkuLi4KbXlzcWwtbXlzcWwJfCACAAAAAAAAWDIwMjMtMDktMTRUMjE6MzQ6NTEuMjgzODAwWiAwIFtTeXN0ZW1dIFtNWS0wMTAyMzJdIFtTZXJ2ZXJdIFhBIGNyYXNoIHJlY292ZXJ5IGZpbmlzaGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABjMjAyMy0wOS0xNFQyMTozNDo1MS40Njc5NDhaIDAgW1dhcm5pbmddIFtNWS0wMTAwNjhdIFtTZXJ2ZXJdIENBIGNlcnRpZmljYXRlIGNhLnBlbSBpcyBzZWxmIHNpZ25lZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOS0xNFQyMTozNDo1MS40NjgzMDZaIDAgW1N5c3RlbV0gW01ZLTAxMzYwMl0gW1NlcnZlcl0gQ2hhbm5lbCBteXNxbF9tYWluIGNvbmZpZ3VyZWQgdG8gc3VwcG9ydCBUTFMuIEVuY3J5cHRlZCBjb25uZWN0aW9ucyBhcmUgbm93IHN1cHBvcnRlZCBmb3IgdGhpcyBjaGFubmVsLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTE0VDIxOjM0OjUxLjQ3ODgxNlogMCBbV2FybmluZ10gW01ZLTAxMTgxMF0gW1NlcnZlcl0gSW5zZWN1cmUgY29uZmlndXJhdGlvbiBmb3IgLS1waWQtZmlsZTogTG9jYXRpb24gJy92YXIvcnVuL215c3FsZCcgaW4gdGhlIHBhdGggaXMgYWNjZXNzaWJsZSB0byBhbGwgT1MgdXNlcnMuIENvbnNpZGVyIGNob29zaW5nIGEgZGlmZmVyZW50IGRpcmVjdG9yeS4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOS0xNFQyMTozNDo1MS41OTgwMTZaIDAgW1N5c3RlbV0gW01ZLTAxMDkzMV0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZDogcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBWZXJzaW9uOiAnOC4wLjIzJyAgc29ja2V0OiAnL3Zhci9ydW4vbXlzcWxkL215c3FsZC5zb2NrJyAgcG9ydDogMzMwNiAgTXlTUUwgQ29tbXVuaXR5IFNlcnZlciAtIEdQTC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjMtMDktMjEgMTk6MDY6MTcrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAQAAAAAAAFMyMDIzLTA5LTIxIDE5OjA2OjMwKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IFN3aXRjaGluZyB0byBkZWRpY2F0ZWQgdXNlciAnbXlzcWwnCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIzLTA5LTIxIDE5OjA2OjMwKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABzMjAyMy0wOS0yMVQxOTowNjozMi40Njc5ODdaIDAgW1N5c3RlbV0gW01ZLTAxMDExNl0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZCAobXlzcWxkIDguMC4yMykgc3RhcnRpbmcgYXMgcHJvY2VzcyAxCm15c3FsLW15c3FsCXwgAgAAAAAAAF8yMDIzLTA5LTIxVDE5OjA2OjM1LjA3OTkzM1ogMSBbU3lzdGVtXSBbTVktMDEzNTc2XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAF0yMDIzLTA5LTIxVDE5OjA3OjE3LjQ3NDYzNlogMSBbU3lzdGVtXSBbTVktMDEzNTc3XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIGVuZGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTIxVDE5OjA3OjE5LjUzMzk0NlogMCBbU3lzdGVtXSBbTVktMDExMzIzXSBbU2VydmVyXSBYIFBsdWdpbiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIEJpbmQtYWRkcmVzczogJzo6JyBwb3J0OiAzMzA2MCwgc29ja2V0OiAvdmFyL3J1bi9teXNxbGQvbXlzcWx4LnNvY2sKbXlzcWwtbXlzcWwJfCACAAAAAAAAWjIwMjMtMDktMjFUMTk6MDc6MjAuMTA1NjQ0WiAwIFtTeXN0ZW1dIFtNWS0wMTAyMjldIFtTZXJ2ZXJdIFN0YXJ0aW5nIFhBIGNyYXNoIHJlY292ZXJ5Li4uCm15c3FsLW15c3FsCXwgAgAAAAAAAFgyMDIzLTA5LTIxVDE5OjA3OjIwLjE0OTA2MVogMCBbU3lzdGVtXSBbTVktMDEwMjMyXSBbU2VydmVyXSBYQSBjcmFzaCByZWNvdmVyeSBmaW5pc2hlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAYzIwMjMtMDktMjFUMTk6MDc6MjAuMjk0OTY3WiAwIFtXYXJuaW5nXSBbTVktMDEwMDY4XSBbU2VydmVyXSBDQSBjZXJ0aWZpY2F0ZSBjYS5wZW0gaXMgc2VsZiBzaWduZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMjFUMTk6MDc6MjAuMjk1MjU0WiAwIFtTeXN0ZW1dIFtNWS0wMTM2MDJdIFtTZXJ2ZXJdIENoYW5uZWwgbXlzcWxfbWFpbiBjb25maWd1cmVkIHRvIHN1cHBvcnQgVExTLiBFbmNyeXB0ZWQgY29ubmVjdGlvbnMgYXJlIG5vdyBzdXBwb3J0ZWQgZm9yIHRoaXMgY2hhbm5lbC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOS0yMVQxOTowNzoyMC4zMDU1ODVaIDAgW1dhcm5pbmddIFtNWS0wMTE4MTBdIFtTZXJ2ZXJdIEluc2VjdXJlIGNvbmZpZ3VyYXRpb24gZm9yIC0tcGlkLWZpbGU6IExvY2F0aW9uICcvdmFyL3J1bi9teXNxbGQnIGluIHRoZSBwYXRoIGlzIGFjY2Vzc2libGUgdG8gYWxsIE9TIHVzZXJzLiBDb25zaWRlciBjaG9vc2luZyBhIGRpZmZlcmVudCBkaXJlY3RvcnkuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMjFUMTk6MDc6MjAuMzc5NDg1WiAwIFtTeXN0ZW1dIFtNWS0wMTA5MzFdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IHJlYWR5IGZvciBjb25uZWN0aW9ucy4gVmVyc2lvbjogJzguMC4yMycgIHNvY2tldDogJy92YXIvcnVuL215c3FsZC9teXNxbGQuc29jaycgIHBvcnQ6IDMzMDYgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMjFUMTk6MDc6MjAuMzc5NTMxWiAwIFtTeXN0ZW1dIFtNWS0wMTMxNzJdIFtTZXJ2ZXJdIFJlY2VpdmVkIFNIVVRET1dOIGZyb20gdXNlciA8dmlhIHVzZXIgc2lnbmFsPi4gU2h1dHRpbmcgZG93biBteXNxbGQgKFZlcnNpb246IDguMC4yMykuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMjFUMTk6MDc6MjIuODQwNjM1WiAwIFtTeXN0ZW1dIFtNWS0wMTA5MTBdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IFNodXRkb3duIGNvbXBsZXRlIChteXNxbGQgOC4wLjIzKSAgTXlTUUwgQ29tbXVuaXR5IFNlcnZlciAtIEdQTC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjMtMDktMjEgMTk6MDc6MzIrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAQAAAAAAAFMyMDIzLTA5LTIxIDE5OjA3OjMyKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IFN3aXRjaGluZyB0byBkZWRpY2F0ZWQgdXNlciAnbXlzcWwnCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIzLTA5LTIxIDE5OjA3OjMyKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABzMjAyMy0wOS0yMVQxOTowNzozMy4yOTI0NjFaIDAgW1N5c3RlbV0gW01ZLTAxMDExNl0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZCAobXlzcWxkIDguMC4yMykgc3RhcnRpbmcgYXMgcHJvY2VzcyAxCm15c3FsLW15c3FsCXwgAgAAAAAAAF8yMDIzLTA5LTIxVDE5OjA3OjMzLjMxNTE4NFogMSBbU3lzdGVtXSBbTVktMDEzNTc2XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAF0yMDIzLTA5LTIxVDE5OjA3OjMzLjg0NTE2NFogMSBbU3lzdGVtXSBbTVktMDEzNTc3XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIGVuZGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTIxVDE5OjA3OjM0LjAyMjIzM1ogMCBbU3lzdGVtXSBbTVktMDExMzIzXSBbU2VydmVyXSBYIFBsdWdpbiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIEJpbmQtYWRkcmVzczogJzo6JyBwb3J0OiAzMzA2MCwgc29ja2V0OiAvdmFyL3J1bi9teXNxbGQvbXlzcWx4LnNvY2sKbXlzcWwtbXlzcWwJfCACAAAAAAAAYzIwMjMtMDktMjFUMTk6MDc6MzQuMTM4MjE5WiAwIFtXYXJuaW5nXSBbTVktMDEwMDY4XSBbU2VydmVyXSBDQSBjZXJ0aWZpY2F0ZSBjYS5wZW0gaXMgc2VsZiBzaWduZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMjFUMTk6MDc6MzQuMTM4NDQ1WiAwIFtTeXN0ZW1dIFtNWS0wMTM2MDJdIFtTZXJ2ZXJdIENoYW5uZWwgbXlzcWxfbWFpbiBjb25maWd1cmVkIHRvIHN1cHBvcnQgVExTLiBFbmNyeXB0ZWQgY29ubmVjdGlvbnMgYXJlIG5vdyBzdXBwb3J0ZWQgZm9yIHRoaXMgY2hhbm5lbC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOS0yMVQxOTowNzozNC4xNDY0MjJaIDAgW1dhcm5pbmddIFtNWS0wMTE4MTBdIFtTZXJ2ZXJdIEluc2VjdXJlIGNvbmZpZ3VyYXRpb24gZm9yIC0tcGlkLWZpbGU6IExvY2F0aW9uICcvdmFyL3J1bi9teXNxbGQnIGluIHRoZSBwYXRoIGlzIGFjY2Vzc2libGUgdG8gYWxsIE9TIHVzZXJzLiBDb25zaWRlciBjaG9vc2luZyBhIGRpZmZlcmVudCBkaXJlY3RvcnkuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMjFUMTk6MDc6MzQuMTY1NTc3WiAwIFtTeXN0ZW1dIFtNWS0wMTA5MzFdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IHJlYWR5IGZvciBjb25uZWN0aW9ucy4gVmVyc2lvbjogJzguMC4yMycgIHNvY2tldDogJy92YXIvcnVuL215c3FsZC9teXNxbGQuc29jaycgIHBvcnQ6IDMzMDYgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIzLTA5LTIxIDE5OjE3OjM5KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAEAAAAAAABTMjAyMy0wOS0yMSAxOToxNzozOSswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBTd2l0Y2hpbmcgdG8gZGVkaWNhdGVkIHVzZXIgJ215c3FsJwpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMy0wOS0yMSAxOToxNzozOSswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAczIwMjMtMDktMjFUMTk6MTc6MzkuNjgyMDA0WiAwIFtTeXN0ZW1dIFtNWS0wMTAxMTZdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQgKG15c3FsZCA4LjAuMjMpIHN0YXJ0aW5nIGFzIHByb2Nlc3MgMQpteXNxbC1teXNxbAl8IAIAAAAAAABfMjAyMy0wOS0yMVQxOToxNzozOS42OTQ3NjBaIDEgW1N5c3RlbV0gW01ZLTAxMzU3Nl0gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABdMjAyMy0wOS0yMVQxOToxNzo0MC4wMzg0NDZaIDEgW1N5c3RlbV0gW01ZLTAxMzU3N10gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBlbmRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOS0yMVQxOToxNzo0MC4xOTY4ODRaIDAgW1N5c3RlbV0gW01ZLTAxMTMyM10gW1NlcnZlcl0gWCBQbHVnaW4gcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBCaW5kLWFkZHJlc3M6ICc6OicgcG9ydDogMzMwNjAsIHNvY2tldDogL3Zhci9ydW4vbXlzcWxkL215c3FseC5zb2NrCm15c3FsLW15c3FsCXwgAgAAAAAAAFoyMDIzLTA5LTIxVDE5OjE3OjQwLjIxODE0N1ogMCBbU3lzdGVtXSBbTVktMDEwMjI5XSBbU2VydmVyXSBTdGFydGluZyBYQSBjcmFzaCByZWNvdmVyeS4uLgpteXNxbC1teXNxbAl8IAIAAAAAAABYMjAyMy0wOS0yMVQxOToxNzo0MC4yMjcxMzhaIDAgW1N5c3RlbV0gW01ZLTAxMDIzMl0gW1NlcnZlcl0gWEEgY3Jhc2ggcmVjb3ZlcnkgZmluaXNoZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAGMyMDIzLTA5LTIxVDE5OjE3OjQwLjI2NDA4M1ogMCBbV2FybmluZ10gW01ZLTAxMDA2OF0gW1NlcnZlcl0gQ0EgY2VydGlmaWNhdGUgY2EucGVtIGlzIHNlbGYgc2lnbmVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTIxVDE5OjE3OjQwLjI2NDIzMlogMCBbU3lzdGVtXSBbTVktMDEzNjAyXSBbU2VydmVyXSBDaGFubmVsIG15c3FsX21haW4gY29uZmlndXJlZCB0byBzdXBwb3J0IFRMUy4gRW5jcnlwdGVkIGNvbm5lY3Rpb25zIGFyZSBub3cgc3VwcG9ydGVkIGZvciB0aGlzIGNoYW5uZWwuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMjFUMTk6MTc6NDAuMjczNTIyWiAwIFtXYXJuaW5nXSBbTVktMDExODEwXSBbU2VydmVyXSBJbnNlY3VyZSBjb25maWd1cmF0aW9uIGZvciAtLXBpZC1maWxlOiBMb2NhdGlvbiAnL3Zhci9ydW4vbXlzcWxkJyBpbiB0aGUgcGF0aCBpcyBhY2Nlc3NpYmxlIHRvIGFsbCBPUyB1c2Vycy4gQ29uc2lkZXIgY2hvb3NpbmcgYSBkaWZmZXJlbnQgZGlyZWN0b3J5LgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTIxVDE5OjE3OjQwLjMwMDg0N1ogMCBbU3lzdGVtXSBbTVktMDEwOTMxXSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkOiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIFZlcnNpb246ICc4LjAuMjMnICBzb2NrZXQ6ICcvdmFyL3J1bi9teXNxbGQvbXlzcWxkLnNvY2snICBwb3J0OiAzMzA2ICBNeVNRTCBDb21tdW5pdHkgU2VydmVyIC0gR1BMLgpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMy0wOS0yMSAyMDowNTo1OSswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAUzIwMjMtMDktMjEgMjA6MDU6NTkrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogU3dpdGNoaW5nIHRvIGRlZGljYXRlZCB1c2VyICdteXNxbCcKbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjMtMDktMjEgMjA6MDU6NTkrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAHMyMDIzLTA5LTIxVDIwOjA1OjU5Ljg5MTI2MFogMCBbU3lzdGVtXSBbTVktMDEwMTE2XSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkIChteXNxbGQgOC4wLjIzKSBzdGFydGluZyBhcyBwcm9jZXNzIDEKbXlzcWwtbXlzcWwJfCACAAAAAAAAXzIwMjMtMDktMjFUMjA6MDU6NTkuOTAwODAzWiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzZdIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAXTIwMjMtMDktMjFUMjA6MDY6MDAuMzg4MTA5WiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzddIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgZW5kZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMjFUMjA6MDY6MDAuNTE4NjY1WiAwIFtTeXN0ZW1dIFtNWS0wMTEzMjNdIFtTZXJ2ZXJdIFggUGx1Z2luIHJlYWR5IGZvciBjb25uZWN0aW9ucy4gQmluZC1hZGRyZXNzOiAnOjonIHBvcnQ6IDMzMDYwLCBzb2NrZXQ6IC92YXIvcnVuL215c3FsZC9teXNxbHguc29jawpteXNxbC1teXNxbAl8IAIAAAAAAABaMjAyMy0wOS0yMVQyMDowNjowMC41NDMxODJaIDAgW1N5c3RlbV0gW01ZLTAxMDIyOV0gW1NlcnZlcl0gU3RhcnRpbmcgWEEgY3Jhc2ggcmVjb3ZlcnkuLi4KbXlzcWwtbXlzcWwJfCACAAAAAAAAWDIwMjMtMDktMjFUMjA6MDY6MDAuNTU0NzA4WiAwIFtTeXN0ZW1dIFtNWS0wMTAyMzJdIFtTZXJ2ZXJdIFhBIGNyYXNoIHJlY292ZXJ5IGZpbmlzaGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABjMjAyMy0wOS0yMVQyMDowNjowMC41ODY5NDRaIDAgW1dhcm5pbmddIFtNWS0wMTAwNjhdIFtTZXJ2ZXJdIENBIGNlcnRpZmljYXRlIGNhLnBlbSBpcyBzZWxmIHNpZ25lZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOS0yMVQyMDowNjowMC41ODcxOTRaIDAgW1N5c3RlbV0gW01ZLTAxMzYwMl0gW1NlcnZlcl0gQ2hhbm5lbCBteXNxbF9tYWluIGNvbmZpZ3VyZWQgdG8gc3VwcG9ydCBUTFMuIEVuY3J5cHRlZCBjb25uZWN0aW9ucyBhcmUgbm93IHN1cHBvcnRlZCBmb3IgdGhpcyBjaGFubmVsLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTIxVDIwOjA2OjAwLjU5MjM2MlogMCBbV2FybmluZ10gW01ZLTAxMTgxMF0gW1NlcnZlcl0gSW5zZWN1cmUgY29uZmlndXJhdGlvbiBmb3IgLS1waWQtZmlsZTogTG9jYXRpb24gJy92YXIvcnVuL215c3FsZCcgaW4gdGhlIHBhdGggaXMgYWNjZXNzaWJsZSB0byBhbGwgT1MgdXNlcnMuIENvbnNpZGVyIGNob29zaW5nIGEgZGlmZmVyZW50IGRpcmVjdG9yeS4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOS0yMVQyMDowNjowMC42MjMxNjRaIDAgW1N5c3RlbV0gW01ZLTAxMDkzMV0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZDogcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBWZXJzaW9uOiAnOC4wLjIzJyAgc29ja2V0OiAnL3Zhci9ydW4vbXlzcWxkL215c3FsZC5zb2NrJyAgcG9ydDogMzMwNiAgTXlTUUwgQ29tbXVuaXR5IFNlcnZlciAtIEdQTC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOS0yMVQyMDowNzoxNC40NzAzNTRaIDAgW1N5c3RlbV0gW01ZLTAxMzE3Ml0gW1NlcnZlcl0gUmVjZWl2ZWQgU0hVVERPV04gZnJvbSB1c2VyIDx2aWEgdXNlciBzaWduYWw+LiBTaHV0dGluZyBkb3duIG15c3FsZCAoVmVyc2lvbjogOC4wLjIzKS4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOS0yMVQyMDowNzoxNS4wNzk5OTRaIDAgW1N5c3RlbV0gW01ZLTAxMDkxMF0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZDogU2h1dGRvd24gY29tcGxldGUgKG15c3FsZCA4LjAuMjMpICBNeVNRTCBDb21tdW5pdHkgU2VydmVyIC0gR1BMLgpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMy0wOS0yMSAyMDowNzoyMyswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAUzIwMjMtMDktMjEgMjA6MDc6MjMrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogU3dpdGNoaW5nIHRvIGRlZGljYXRlZCB1c2VyICdteXNxbCcKbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjMtMDktMjEgMjA6MDc6MjMrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAHMyMDIzLTA5LTIxVDIwOjA3OjIzLjYwNTQ5MlogMCBbU3lzdGVtXSBbTVktMDEwMTE2XSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkIChteXNxbGQgOC4wLjIzKSBzdGFydGluZyBhcyBwcm9jZXNzIDEKbXlzcWwtbXlzcWwJfCACAAAAAAAAXzIwMjMtMDktMjFUMjA6MDc6MjMuNjEyNzU2WiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzZdIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAXTIwMjMtMDktMjFUMjA6MDc6MjQuMDg2MjcxWiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzddIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgZW5kZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMjFUMjA6MDc6MjQuMjE0OTYwWiAwIFtTeXN0ZW1dIFtNWS0wMTEzMjNdIFtTZXJ2ZXJdIFggUGx1Z2luIHJlYWR5IGZvciBjb25uZWN0aW9ucy4gQmluZC1hZGRyZXNzOiAnOjonIHBvcnQ6IDMzMDYwLCBzb2NrZXQ6IC92YXIvcnVuL215c3FsZC9teXNxbHguc29jawpteXNxbC1teXNxbAl8IAIAAAAAAABjMjAyMy0wOS0yMVQyMDowNzoyNC4yOTk3OTlaIDAgW1dhcm5pbmddIFtNWS0wMTAwNjhdIFtTZXJ2ZXJdIENBIGNlcnRpZmljYXRlIGNhLnBlbSBpcyBzZWxmIHNpZ25lZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOS0yMVQyMDowNzoyNC4zMDAxNzdaIDAgW1N5c3RlbV0gW01ZLTAxMzYwMl0gW1NlcnZlcl0gQ2hhbm5lbCBteXNxbF9tYWluIGNvbmZpZ3VyZWQgdG8gc3VwcG9ydCBUTFMuIEVuY3J5cHRlZCBjb25uZWN0aW9ucyBhcmUgbm93IHN1cHBvcnRlZCBmb3IgdGhpcyBjaGFubmVsLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTIxVDIwOjA3OjI0LjMxMDI1OVogMCBbV2FybmluZ10gW01ZLTAxMTgxMF0gW1NlcnZlcl0gSW5zZWN1cmUgY29uZmlndXJhdGlvbiBmb3IgLS1waWQtZmlsZTogTG9jYXRpb24gJy92YXIvcnVuL215c3FsZCcgaW4gdGhlIHBhdGggaXMgYWNjZXNzaWJsZSB0byBhbGwgT1MgdXNlcnMuIENvbnNpZGVyIGNob29zaW5nIGEgZGlmZmVyZW50IGRpcmVjdG9yeS4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOS0yMVQyMDowNzoyNC4zNDc2NTRaIDAgW1N5c3RlbV0gW01ZLTAxMDkzMV0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZDogcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBWZXJzaW9uOiAnOC4wLjIzJyAgc29ja2V0OiAnL3Zhci9ydW4vbXlzcWxkL215c3FsZC5zb2NrJyAgcG9ydDogMzMwNiAgTXlTUUwgQ29tbXVuaXR5IFNlcnZlciAtIEdQTC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjMtMDktMjEgMjA6MTM6NDYrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAQAAAAAAAFMyMDIzLTA5LTIxIDIwOjEzOjQ2KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IFN3aXRjaGluZyB0byBkZWRpY2F0ZWQgdXNlciAnbXlzcWwnCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIzLTA5LTIxIDIwOjEzOjQ2KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABzMjAyMy0wOS0yMVQyMDoxMzo0Ny4yOTM4NDhaIDAgW1N5c3RlbV0gW01ZLTAxMDExNl0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZCAobXlzcWxkIDguMC4yMykgc3RhcnRpbmcgYXMgcHJvY2VzcyAxCm15c3FsLW15c3FsCXwgAgAAAAAAAF8yMDIzLTA5LTIxVDIwOjEzOjQ3LjMwMzM1OFogMSBbU3lzdGVtXSBbTVktMDEzNTc2XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAF0yMDIzLTA5LTIxVDIwOjEzOjQ3LjYzNzQ5NFogMSBbU3lzdGVtXSBbTVktMDEzNTc3XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIGVuZGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTIxVDIwOjEzOjQ3Ljc3ODEzNFogMCBbU3lzdGVtXSBbTVktMDExMzIzXSBbU2VydmVyXSBYIFBsdWdpbiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIEJpbmQtYWRkcmVzczogJzo6JyBwb3J0OiAzMzA2MCwgc29ja2V0OiAvdmFyL3J1bi9teXNxbGQvbXlzcWx4LnNvY2sKbXlzcWwtbXlzcWwJfCACAAAAAAAAWjIwMjMtMDktMjFUMjA6MTM6NDcuODAwMDc1WiAwIFtTeXN0ZW1dIFtNWS0wMTAyMjldIFtTZXJ2ZXJdIFN0YXJ0aW5nIFhBIGNyYXNoIHJlY292ZXJ5Li4uCm15c3FsLW15c3FsCXwgAgAAAAAAAFgyMDIzLTA5LTIxVDIwOjEzOjQ3LjgxMDY5N1ogMCBbU3lzdGVtXSBbTVktMDEwMjMyXSBbU2VydmVyXSBYQSBjcmFzaCByZWNvdmVyeSBmaW5pc2hlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAYzIwMjMtMDktMjFUMjA6MTM6NDcuODQwMDQwWiAwIFtXYXJuaW5nXSBbTVktMDEwMDY4XSBbU2VydmVyXSBDQSBjZXJ0aWZpY2F0ZSBjYS5wZW0gaXMgc2VsZiBzaWduZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMjFUMjA6MTM6NDcuODQwMzMzWiAwIFtTeXN0ZW1dIFtNWS0wMTM2MDJdIFtTZXJ2ZXJdIENoYW5uZWwgbXlzcWxfbWFpbiBjb25maWd1cmVkIHRvIHN1cHBvcnQgVExTLiBFbmNyeXB0ZWQgY29ubmVjdGlvbnMgYXJlIG5vdyBzdXBwb3J0ZWQgZm9yIHRoaXMgY2hhbm5lbC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOS0yMVQyMDoxMzo0Ny44NDM4MDlaIDAgW1dhcm5pbmddIFtNWS0wMTE4MTBdIFtTZXJ2ZXJdIEluc2VjdXJlIGNvbmZpZ3VyYXRpb24gZm9yIC0tcGlkLWZpbGU6IExvY2F0aW9uICcvdmFyL3J1bi9teXNxbGQnIGluIHRoZSBwYXRoIGlzIGFjY2Vzc2libGUgdG8gYWxsIE9TIHVzZXJzLiBDb25zaWRlciBjaG9vc2luZyBhIGRpZmZlcmVudCBkaXJlY3RvcnkuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMjFUMjA6MTM6NDcuODY4MjA4WiAwIFtTeXN0ZW1dIFtNWS0wMTA5MzFdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IHJlYWR5IGZvciBjb25uZWN0aW9ucy4gVmVyc2lvbjogJzguMC4yMycgIHNvY2tldDogJy92YXIvcnVuL215c3FsZC9teXNxbGQuc29jaycgIHBvcnQ6IDMzMDYgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMjVUMjM6MjE6NDUuNTgzMTA4WiAwIFtTeXN0ZW1dIFtNWS0wMTMxNzJdIFtTZXJ2ZXJdIFJlY2VpdmVkIFNIVVRET1dOIGZyb20gdXNlciA8dmlhIHVzZXIgc2lnbmFsPi4gU2h1dHRpbmcgZG93biBteXNxbGQgKFZlcnNpb246IDguMC4yMykuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMjVUMjM6MjE6NDcuMTUxMzMxWiAwIFtTeXN0ZW1dIFtNWS0wMTA5MTBdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IFNodXRkb3duIGNvbXBsZXRlIChteXNxbGQgOC4wLjIzKSAgTXlTUUwgQ29tbXVuaXR5IFNlcnZlciAtIEdQTC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjMtMDktMjUgMjM6MjI6MDMrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAQAAAAAAAFMyMDIzLTA5LTI1IDIzOjIyOjAzKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IFN3aXRjaGluZyB0byBkZWRpY2F0ZWQgdXNlciAnbXlzcWwnCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIzLTA5LTI1IDIzOjIyOjAzKzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABzMjAyMy0wOS0yNVQyMzoyMjowNC4xMTE5MDBaIDAgW1N5c3RlbV0gW01ZLTAxMDExNl0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZCAobXlzcWxkIDguMC4yMykgc3RhcnRpbmcgYXMgcHJvY2VzcyAxCm15c3FsLW15c3FsCXwgAgAAAAAAAF8yMDIzLTA5LTI1VDIzOjIyOjA0LjEyMTM5N1ogMSBbU3lzdGVtXSBbTVktMDEzNTc2XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAF0yMDIzLTA5LTI1VDIzOjIyOjA0LjQzMzQzNVogMSBbU3lzdGVtXSBbTVktMDEzNTc3XSBbSW5ub0RCXSBJbm5vREIgaW5pdGlhbGl6YXRpb24gaGFzIGVuZGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTI1VDIzOjIyOjA0LjYyMTgzMVogMCBbU3lzdGVtXSBbTVktMDExMzIzXSBbU2VydmVyXSBYIFBsdWdpbiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIEJpbmQtYWRkcmVzczogJzo6JyBwb3J0OiAzMzA2MCwgc29ja2V0OiAvdmFyL3J1bi9teXNxbGQvbXlzcWx4LnNvY2sKbXlzcWwtbXlzcWwJfCACAAAAAAAAYzIwMjMtMDktMjVUMjM6MjI6MDQuNjczMTY5WiAwIFtXYXJuaW5nXSBbTVktMDEwMDY4XSBbU2VydmVyXSBDQSBjZXJ0aWZpY2F0ZSBjYS5wZW0gaXMgc2VsZiBzaWduZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMjVUMjM6MjI6MDQuNjczMzE3WiAwIFtTeXN0ZW1dIFtNWS0wMTM2MDJdIFtTZXJ2ZXJdIENoYW5uZWwgbXlzcWxfbWFpbiBjb25maWd1cmVkIHRvIHN1cHBvcnQgVExTLiBFbmNyeXB0ZWQgY29ubmVjdGlvbnMgYXJlIG5vdyBzdXBwb3J0ZWQgZm9yIHRoaXMgY2hhbm5lbC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOS0yNVQyMzoyMjowNC42NzY3MzlaIDAgW1dhcm5pbmddIFtNWS0wMTE4MTBdIFtTZXJ2ZXJdIEluc2VjdXJlIGNvbmZpZ3VyYXRpb24gZm9yIC0tcGlkLWZpbGU6IExvY2F0aW9uICcvdmFyL3J1bi9teXNxbGQnIGluIHRoZSBwYXRoIGlzIGFjY2Vzc2libGUgdG8gYWxsIE9TIHVzZXJzLiBDb25zaWRlciBjaG9vc2luZyBhIGRpZmZlcmVudCBkaXJlY3RvcnkuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMjVUMjM6MjI6MDQuNzA0MTYwWiAwIFtTeXN0ZW1dIFtNWS0wMTA5MzFdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQ6IHJlYWR5IGZvciBjb25uZWN0aW9ucy4gVmVyc2lvbjogJzguMC4yMycgIHNvY2tldDogJy92YXIvcnVuL215c3FsZC9teXNxbGQuc29jaycgIHBvcnQ6IDMzMDYgIE15U1FMIENvbW11bml0eSBTZXJ2ZXIgLSBHUEwuCm15c3FsLW15c3FsCXwgAQAAAAAAAGwyMDIzLTA5LTI1IDIzOjI5OjM5KzAwOjAwIFtOb3RlXSBbRW50cnlwb2ludF06IEVudHJ5cG9pbnQgc2NyaXB0IGZvciBNeVNRTCBTZXJ2ZXIgOC4wLjIzLTFkZWJpYW4xMCBzdGFydGVkLgpteXNxbC1teXNxbAl8IAEAAAAAAABTMjAyMy0wOS0yNSAyMzoyOTo0MCswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBTd2l0Y2hpbmcgdG8gZGVkaWNhdGVkIHVzZXIgJ215c3FsJwpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMy0wOS0yNSAyMzoyOTo0MCswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAczIwMjMtMDktMjVUMjM6Mjk6NDAuNDY4MTI3WiAwIFtTeXN0ZW1dIFtNWS0wMTAxMTZdIFtTZXJ2ZXJdIC91c3Ivc2Jpbi9teXNxbGQgKG15c3FsZCA4LjAuMjMpIHN0YXJ0aW5nIGFzIHByb2Nlc3MgMQpteXNxbC1teXNxbAl8IAIAAAAAAABfMjAyMy0wOS0yNVQyMzoyOTo0MC40OTUyOTJaIDEgW1N5c3RlbV0gW01ZLTAxMzU3Nl0gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBzdGFydGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABdMjAyMy0wOS0yNVQyMzoyOTo0MS4yNTUzMzFaIDEgW1N5c3RlbV0gW01ZLTAxMzU3N10gW0lubm9EQl0gSW5ub0RCIGluaXRpYWxpemF0aW9uIGhhcyBlbmRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0wOS0yNVQyMzoyOTo0MS41NDUyMjRaIDAgW1N5c3RlbV0gW01ZLTAxMTMyM10gW1NlcnZlcl0gWCBQbHVnaW4gcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBCaW5kLWFkZHJlc3M6ICc6OicgcG9ydDogMzMwNjAsIHNvY2tldDogL3Zhci9ydW4vbXlzcWxkL215c3FseC5zb2NrCm15c3FsLW15c3FsCXwgAgAAAAAAAFoyMDIzLTA5LTI1VDIzOjI5OjQxLjU5MDM5NVogMCBbU3lzdGVtXSBbTVktMDEwMjI5XSBbU2VydmVyXSBTdGFydGluZyBYQSBjcmFzaCByZWNvdmVyeS4uLgpteXNxbC1teXNxbAl8IAIAAAAAAABYMjAyMy0wOS0yNVQyMzoyOTo0MS41OTkyNTVaIDAgW1N5c3RlbV0gW01ZLTAxMDIzMl0gW1NlcnZlcl0gWEEgY3Jhc2ggcmVjb3ZlcnkgZmluaXNoZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAGMyMDIzLTA5LTI1VDIzOjI5OjQxLjY3OTgxOFogMCBbV2FybmluZ10gW01ZLTAxMDA2OF0gW1NlcnZlcl0gQ0EgY2VydGlmaWNhdGUgY2EucGVtIGlzIHNlbGYgc2lnbmVkLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTI1VDIzOjI5OjQxLjY4MDIzNVogMCBbU3lzdGVtXSBbTVktMDEzNjAyXSBbU2VydmVyXSBDaGFubmVsIG15c3FsX21haW4gY29uZmlndXJlZCB0byBzdXBwb3J0IFRMUy4gRW5jcnlwdGVkIGNvbm5lY3Rpb25zIGFyZSBub3cgc3VwcG9ydGVkIGZvciB0aGlzIGNoYW5uZWwuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMDktMjVUMjM6Mjk6NDEuNzEzMDg1WiAwIFtXYXJuaW5nXSBbTVktMDExODEwXSBbU2VydmVyXSBJbnNlY3VyZSBjb25maWd1cmF0aW9uIGZvciAtLXBpZC1maWxlOiBMb2NhdGlvbiAnL3Zhci9ydW4vbXlzcWxkJyBpbiB0aGUgcGF0aCBpcyBhY2Nlc3NpYmxlIHRvIGFsbCBPUyB1c2Vycy4gQ29uc2lkZXIgY2hvb3NpbmcgYSBkaWZmZXJlbnQgZGlyZWN0b3J5LgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTA5LTI1VDIzOjI5OjQxLjc1MDkzNVogMCBbU3lzdGVtXSBbTVktMDEwOTMxXSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkOiByZWFkeSBmb3IgY29ubmVjdGlvbnMuIFZlcnNpb246ICc4LjAuMjMnICBzb2NrZXQ6ICcvdmFyL3J1bi9teXNxbGQvbXlzcWxkLnNvY2snICBwb3J0OiAzMzA2ICBNeVNRTCBDb21tdW5pdHkgU2VydmVyIC0gR1BMLgpteXNxbC1teXNxbAl8IAEAAAAAAABsMjAyMy0xMC0xOSAyMDo1NjowNSswMDowMCBbTm90ZV0gW0VudHJ5cG9pbnRdOiBFbnRyeXBvaW50IHNjcmlwdCBmb3IgTXlTUUwgU2VydmVyIDguMC4yMy0xZGViaWFuMTAgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCABAAAAAAAAUzIwMjMtMTAtMTkgMjA6NTY6MjMrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogU3dpdGNoaW5nIHRvIGRlZGljYXRlZCB1c2VyICdteXNxbCcKbXlzcWwtbXlzcWwJfCABAAAAAAAAbDIwMjMtMTAtMTkgMjA6NTY6MjMrMDA6MDAgW05vdGVdIFtFbnRyeXBvaW50XTogRW50cnlwb2ludCBzY3JpcHQgZm9yIE15U1FMIFNlcnZlciA4LjAuMjMtMWRlYmlhbjEwIHN0YXJ0ZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAAHMyMDIzLTEwLTE5VDIwOjU2OjIzLjg1NzA1NFogMCBbU3lzdGVtXSBbTVktMDEwMTE2XSBbU2VydmVyXSAvdXNyL3NiaW4vbXlzcWxkIChteXNxbGQgOC4wLjIzKSBzdGFydGluZyBhcyBwcm9jZXNzIDEKbXlzcWwtbXlzcWwJfCACAAAAAAAAXzIwMjMtMTAtMTlUMjA6NTY6MjQuNzk0OTIwWiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzZdIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgc3RhcnRlZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAXTIwMjMtMTAtMTlUMjA6NTY6MzEuNjQ0ODQ0WiAxIFtTeXN0ZW1dIFtNWS0wMTM1NzddIFtJbm5vREJdIElubm9EQiBpbml0aWFsaXphdGlvbiBoYXMgZW5kZWQuCm15c3FsLW15c3FsCXwgAgAAAAAAADIwMjMtMTAtMTlUMjA6NTY6MzYuNjA5Mjg3WiAwIFtTeXN0ZW1dIFtNWS0wMTEzMjNdIFtTZXJ2ZXJdIFggUGx1Z2luIHJlYWR5IGZvciBjb25uZWN0aW9ucy4gQmluZC1hZGRyZXNzOiAnOjonIHBvcnQ6IDMzMDYwLCBzb2NrZXQ6IC92YXIvcnVuL215c3FsZC9teXNxbHguc29jawpteXNxbC1teXNxbAl8IAIAAAAAAABaMjAyMy0xMC0xOVQyMDo1NjozOC41NjM2NzJaIDAgW1N5c3RlbV0gW01ZLTAxMDIyOV0gW1NlcnZlcl0gU3RhcnRpbmcgWEEgY3Jhc2ggcmVjb3ZlcnkuLi4KbXlzcWwtbXlzcWwJfCACAAAAAAAAWDIwMjMtMTAtMTlUMjA6NTY6MzguNTk4NjA3WiAwIFtTeXN0ZW1dIFtNWS0wMTAyMzJdIFtTZXJ2ZXJdIFhBIGNyYXNoIHJlY292ZXJ5IGZpbmlzaGVkLgpteXNxbC1teXNxbAl8IAIAAAAAAABjMjAyMy0xMC0xOVQyMDo1Njo0MS4xNDA4NDhaIDAgW1dhcm5pbmddIFtNWS0wMTAwNjhdIFtTZXJ2ZXJdIENBIGNlcnRpZmljYXRlIGNhLnBlbSBpcyBzZWxmIHNpZ25lZC4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0xMC0xOVQyMDo1Njo0MS4xNDE0MDRaIDAgW1N5c3RlbV0gW01ZLTAxMzYwMl0gW1NlcnZlcl0gQ2hhbm5lbCBteXNxbF9tYWluIGNvbmZpZ3VyZWQgdG8gc3VwcG9ydCBUTFMuIEVuY3J5cHRlZCBjb25uZWN0aW9ucyBhcmUgbm93IHN1cHBvcnRlZCBmb3IgdGhpcyBjaGFubmVsLgpteXNxbC1teXNxbAl8IAIAAAAAAAAyMDIzLTEwLTE5VDIwOjU2OjQxLjE1NzkzMVogMCBbV2FybmluZ10gW01ZLTAxMTgxMF0gW1NlcnZlcl0gSW5zZWN1cmUgY29uZmlndXJhdGlvbiBmb3IgLS1waWQtZmlsZTogTG9jYXRpb24gJy92YXIvcnVuL215c3FsZCcgaW4gdGhlIHBhdGggaXMgYWNjZXNzaWJsZSB0byBhbGwgT1MgdXNlcnMuIENvbnNpZGVyIGNob29zaW5nIGEgZGlmZmVyZW50IGRpcmVjdG9yeS4KbXlzcWwtbXlzcWwJfCACAAAAAAAAMjAyMy0xMC0xOVQyMDo1Njo0NC42ODMwNzZaIDAgW1N5c3RlbV0gW01ZLTAxMDkzMV0gW1NlcnZlcl0gL3Vzci9zYmluL215c3FsZDogcmVhZHkgZm9yIGNvbm5lY3Rpb25zLiBWZXJzaW9uOiAnOC4wLjIzJyAgc29ja2V0OiAnL3Zhci9ydW4vbXlzcWxkL215c3FsZC5zb2NrJyAgcG9ydDogMzMwNiAgTXlTUUwgQ29tbXVuaXR5IFNlcnZlciAtIEdQTC4K"
}
```

---

## App Components

**GET** `{{LEM_URL}}/api/v1/marketplace/app/components?projectId={{project_id}}&deviceId={{device_id}}&applicationId={{device_app_id}}`

# App Components

Returns the individual container components making up a catalog app -- container ID and name pairs.
## Endpoint

```http
GET {{LEM_URL}}/api/v1/marketplace/app/components?projectId={{project_id}}&deviceId={{device_id}}&applicationId={{device_app_id}}
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.
## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
[
    {
        "id": "7ef631d041c5d4f8d412255edd6bf914f6c13694a8e24daadd4877259501cc19",
        "name": "mysql-mysql"
    }
]
```

---

## Delete Application

**DELETE** `{{LEM_URL}}/api/v1/marketplace/app?projectId={{project_id}}&deviceId={{device_id}}&applicationId={{device_app_id}}`

# Delete Application

Uninstalls a catalog app from the device. Containers are removed; named volumes are preserved.
## Endpoint

```http
DELETE {{LEM_URL}}/api/v1/marketplace/app?projectId={{project_id}}&deviceId={{device_id}}&applicationId={{device_app_id}}
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.
## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


---

## Password Policy By DeviceID

**GET** `{{LEM_URL}}/api/v1/password-policy?deviceId={{device_id}}`

# Password Policy By DeviceID

Returns the password policy currently bound to one device. Same shape as `Companies > Get Password Policy`.
## Endpoint

```http
GET {{LEM_URL}}/api/v1/password-policy?deviceId={{device_id}}
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.
## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
[
    {
        "id": "default_password_policy",
        "name": "Default password policy",
        "description": "Default password policy",
        "updated": 1689673006000,
        "defaultPolicy": true,
        "minPasswordLen": 8,
        "maxPasswordLen": 256,
        "autoGeneratedPasswordLen": 12,
        "minUppercaseChars": 1,
        "minLowercaseChars": 1,
        "minDigits": 1,
        "minSpecialChars": 1,
        "specialChars": "~!@#$%^&*()_-{}[]|;:,.<>?/"
    }
]
```

---

## License Type

**GET** `{{LEM_URL}}/api/v1/device-licenses/type?projectId={{project_id}}&deviceId={{device_id}}`

# License Type

Returns the licensing model used on this device: `NODE_LOCKED` (per-device) or other (license-server-based, etc.).
## Endpoint

```http
GET {{LEM_URL}}/api/v1/device-licenses/type?projectId={{project_id}}&deviceId={{device_id}}
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.
## Response

```json
{ "licenseType": "NODE_LOCKED" }
```

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
{
    "licenseType": "NODE_LOCKED"
}
```

---

## List Device Licenses

**GET** `{{LEM_URL}}/api/v1/device-licenses?projectId={{project_id}}&deviceId={{device_id}}`

# List Device Licenses

Returns the licenses applied to one device, with key (masked), expiry, status, and `isCore` / `isTrial` flags.
## Endpoint

```http
GET {{LEM_URL}}/api/v1/device-licenses?projectId={{project_id}}&deviceId={{device_id}}
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.
## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
[
    {
        "name": "litmusedge-scale-nl",
        "desc": null,
        "expiryDate": "2024-04-25T00:00:00Z",
        "expiryDays": 190,
        "features": null,
        "key": {
            "value": "0000-1111-2222-3333"
        },
        "status": "OK",
        "isCore": true,
        "isTrial": false
    }
]
```

---

## Add License (Online)

**PUT** `{{LEM_URL}}/api/v1/device-licenses?projectId={{project_id}}&deviceId={{device_id}}`

# Add License (Online)

Activates an online license key for the device. The `used` flag should be set to `true` when reserving against the pool.
## Endpoint

```http
PUT {{LEM_URL}}/api/v1/device-licenses?projectId={{project_id}}&deviceId={{device_id}}
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.
## Request body

```json
{
  "value": "4E216-7C5C4-34CBA-AED7A-B5B85",
  "reservedUntil": 1651122127000,
  "used": true
}
```

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Request Body

```json
{
    "value": "4E216-7C5C4-34CBA-AED7A-B5B85",
    "reservedUntil": 1651122127000,
    "used": true
}
```

---

## Offline Activation Info

**GET** `{{LEM_URL}}/api/v1/device-licenses/offline?projectId={{project_id}}&deviceId={{device_id}}`

# Offline Activation Info

Returns the **activation URL** and **host ID** needed to generate an offline license against the device. Use this when the device cannot reach the LE licensing portal directly.
## Endpoint

```http
GET {{LEM_URL}}/api/v1/device-licenses/offline?projectId={{project_id}}&deviceId={{device_id}}
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.
## Response

```json
{
  "activationURL": "https://litmus.activate.id",
  "hostID": "94c6911b9c77"
}
```

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
{
    "activationURL": "https://litmus.activate.id",
    "hostID": "94c6911b9c77"
}
```

---

## License Entitlements

**GET** `{{LEM_URL}}/api/v1/device-licenses/entitlement/features?projectId={{project_id}}&deviceId={{device_id}}`

# License Entitlements

Returns the **feature entitlements** the device's licenses currently unlock (`marketplace`, `opcua`, `updates`, `tags`, `backup`, `dt`, `core`, ...).
## Endpoint

```http
GET {{LEM_URL}}/api/v1/device-licenses/entitlement/features?projectId={{project_id}}&deviceId={{device_id}}
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.
## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
[
    {
        "name": "marketplace",
        "desc": "marketplace",
        "enabled": true
    },
    {
        "name": "opcua",
        "desc": "opcua",
        "enabled": true
    },
    {
        "name": "updates",
        "desc": "updates",
        "enabled": true
    },
    {
        "name": "tags",
        "desc": "tags",
        "enabled": true
    },
    {
        "name": "backup",
        "desc": "backup",
        "enabled": true
    },
    {
        "name": "dt",
        "desc": "dt",
        "enabled": true
    },
    {
        "name": "core",
        "desc": "core",
        "enabled": true
    },
    {
        "name": "analytics",
        "desc": "analytics",
        "enabled": true
    },
    {
        "name": "devices",
        "desc": "devices",
        "enabled": true
    }
]
```

---

## Performance Entitlements

**GET** `{{LEM_URL}}/api/v1/device-licenses/entitlement/performance?projectId={{project_id}}&deviceId={{device_id}}`

# Performance Entitlements

Returns the **numeric** entitlements granted by the device's licenses: max number of devices, max number of tags, etc.
## Endpoint

```http
GET {{LEM_URL}}/api/v1/device-licenses/entitlement/performance?projectId={{project_id}}&deviceId={{device_id}}
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.
## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
[
    {
        "name": "devices",
        "desc": "Max number of devices",
        "count": 0
    },
    {
        "name": "tags",
        "desc": "Max number of tags",
        "count": 0
    }
]
```

---

## List Backups

**GET** `{{LEM_URL}}/api/v1/backup/list?projectId={{project_id}}&deviceId={{device_id}}&limit=10`

# List Backups

Returns the paginated list of backups stored for the device. Each entry has `backupType` (`MASTER`, ...), `timestamp`, `objectSize`, and `objectName` (S3 object path).
## Endpoint

```http
GET {{LEM_URL}}/api/v1/backup/list?projectId={{project_id}}&deviceId={{device_id}}&limit=10
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.
## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
{
    "pageNum": 0,
    "pagesCount": 1,
    "size": 3,
    "totalSize": 3,
    "elements": [
        {
            "projectId": "462j1mq70mph31wa100t1yuxa",
            "deviceId": "1a5wiavluwxuhwai5leb1v0hc",
            "backupType": "MASTER",
            "timestamp": 1697498885385,
            "objectSize": 1704104,
            "objectName": "462j1mq70mph31wa100t1yuxa/1a5wiavluwxuhwai5leb1v0hc/MASTER/1697498885385.dat"
        },
        {
            "projectId": "462j1mq70mph31wa100t1yuxa",
            "deviceId": "1a5wiavluwxuhwai5leb1v0hc",
            "backupType": "MASTER",
            "timestamp": 1697153285369,
            "objectSize": 1705096,
            "objectName": "462j1mq70mph31wa100t1yuxa/1a5wiavluwxuhwai5leb1v0hc/MASTER/1697153285369.dat"
        },
        {
            "projectId": "462j1mq70mph31wa100t1yuxa",
            "deviceId": "1a5wiavluwxuhwai5leb1v0hc",
            "backupType": "MASTER",
            "timestamp": 1697066885382,
            "objectSize": 1704044,
            "objectName": "462j1mq70mph31wa100t1yuxa/1a5wiavluwxuhwai5leb1v0hc/MASTER/1697066885382.dat"
        }
    ]
}
```

---

## Make Device Backup

**POST** `{{LEM_URL}}/api/v1/backup/init-backup?projectId={{project_id}}&deviceId={{device_id}}`

# Make Device Backup

Triggers a new backup on the target device. Asynchronous -- the response confirms acceptance; the new backup appears in `List Backups` once complete.
## Endpoint

```http
POST {{LEM_URL}}/api/v1/backup/init-backup?projectId={{project_id}}&deviceId={{device_id}}
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.
## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
{
    "code": "200",
    "content": null
}
```

---

## Delete Backup

**DELETE** `{{LEM_URL}}/api/v1/backup/list?projectId={{project_id}}&deviceId={{device_id}}&backupType=MASTER&timestamp=1697755168885`

# Delete Backup

Removes a backup by `(backupType, timestamp)`. The response is the updated `List Backups` page.
## Endpoint

```http
DELETE {{LEM_URL}}/api/v1/backup/list?projectId={{project_id}}&deviceId={{device_id}}&backupType=MASTER&timestamp=1697755168885
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.
## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
{
    "pageNum": 0,
    "pagesCount": 1,
    "size": 3,
    "totalSize": 3,
    "elements": [
        {
            "projectId": "462j1mq70mph31wa100t1yuxa",
            "deviceId": "1a5wiavluwxuhwai5leb1v0hc",
            "backupType": "MASTER",
            "timestamp": 1697755168885,
            "objectSize": 1704184,
            "objectName": "462j1mq70mph31wa100t1yuxa/1a5wiavluwxuhwai5leb1v0hc/MASTER/1697755168885.dat"
        },
        {
            "projectId": "462j1mq70mph31wa100t1yuxa",
            "deviceId": "1a5wiavluwxuhwai5leb1v0hc",
            "backupType": "MASTER",
            "timestamp": 1697498885385,
            "objectSize": 1704104,
            "objectName": "462j1mq70mph31wa100t1yuxa/1a5wiavluwxuhwai5leb1v0hc/MASTER/1697498885385.dat"
        },
        {
            "projectId": "462j1mq70mph31wa100t1yuxa",
            "deviceId": "1a5wiavluwxuhwai5leb1v0hc",
            "backupType": "MASTER",
            "timestamp": 1697153285369,
            "objectSize": 1705096,
            "objectName": "462j1mq70mph31wa100t1yuxa/1a5wiavluwxuhwai5leb1v0hc/MASTER/1697153285369.dat"
        }
    ]
}
```

---

## Get Pre-signed S3 URL to Backup

**POST** `{{LEM_URL}}/api/v1/backup/get?projectId={{project_id}}&deviceId={{device_id}}&backupType=MASTER&timestamp=1697498885385`

# Get Pre-signed S3 URL to Backup

Returns a **pre-signed S3 URL** that can be used to download the backup binary directly from LEM's object storage. URL has limited TTL (7 days by default).
## Endpoint

```http
POST {{LEM_URL}}/api/v1/backup/get?projectId={{project_id}}&deviceId={{device_id}}&backupType=MASTER&timestamp=1697498885385
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.
## Response

`201 Created` -- `text/plain` URL.

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 201 Created

```plain
https://10.17.3.103/loop-cloud.backups/462j1mq70mph31wa100t1yuxa/1a5wiavluwxuhwai5leb1v0hc/MASTER/1697498885385.dat?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ZBE3Hey7R88GtiYw%2F20231019%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20231019T224519Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=ea8fac0742797adf8e381f306629ce98ddec3423386d66d66bfd6598233bd4e5
```

---

## Save Backup to Pre-signed S3 URL

**POST** `{{LEM_URL}}/api/v1/backup/put?projectId={{project_id}}&deviceId={{device_id}}&backupType=MASTER&timestamp=1697498885385`

# Save Backup to Pre-signed S3 URL

Returns a pre-signed S3 **PUT** URL for uploading a backup binary into LEM's object storage. The companion of `Get Pre-signed S3 URL to Backup`.
## Endpoint

```http
POST {{LEM_URL}}/api/v1/backup/put?projectId={{project_id}}&deviceId={{device_id}}&backupType=MASTER&timestamp=1697498885385
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.
## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 201 Created

```plain
https://10.17.3.103/loop-cloud.backups/462j1mq70mph31wa100t1yuxa/1a5wiavluwxuhwai5leb1v0hc/MASTER/1697498885385.dat?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ZBE3Hey7R88GtiYw%2F20231019%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20231019T224519Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=ea8fac0742797adf8e381f306629ce98ddec3423386d66d66bfd6598233bd4e5
```

---

## Restore from Backup

**POST** `{{LEM_URL}}/api/v1/backup/init-restore?projectId={{project_id}}&deviceId={{device_id}}`

# Restore from Backup

Restores the device from a backup identified by its S3 object path. Pass the path as a plain string in the request body.
## Endpoint

```http
POST {{LEM_URL}}/api/v1/backup/init-restore?projectId={{project_id}}&deviceId={{device_id}}
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.
## Request body

```text
462j1mq70mph31wa100t1yuxa/1a5wiavluwxuhwai5leb1v0hc/MASTER/1697755391627.dat
```

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Request Body

```json
462j1mq70mph31wa100t1yuxa/1a5wiavluwxuhwai5leb1v0hc/MASTER/1697755391627.dat
```

---

## Forwarding State

**GET** `{{LEM_URL}}/api/v1/loopedge-events/forwarding/?projectId={{project_id}}&deviceId={{device_id}}`

# Forwarding State

Returns whether LE event forwarding from this device to LEM is enabled.
## Endpoint

```http
GET {{LEM_URL}}/api/v1/loopedge-events/forwarding/?projectId={{project_id}}&deviceId={{device_id}}
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.
## Response

```json
{ "enabled": true }
```

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
{
    "enabled": true
}
```

---

## Enable Forwarding

**GET** `{{LEM_URL}}/api/v1/loopedge-events/forwarding/?projectId={{project_id}}&deviceId={{device_id}}&enable=true`

# Enable Forwarding

Toggles LE event forwarding for the device. Despite the name, the `enable` query parameter accepts both `true` and `false` (the same URL with `enable=false` disables).
## Endpoint

```http
GET {{LEM_URL}}/api/v1/loopedge-events/forwarding/?projectId={{project_id}}&deviceId={{device_id}}&enable=true
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.
## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
{
    "enabled": true
}
```

---

## Events Registry

**GET** `{{LEM_URL}}/api/v1/loopedge-events/registry/?projectId={{project_id}}&deviceId={{device_id}}`

# Events Registry

Returns the **event registry** for this device -- the catalog of LE events the device knows how to emit, grouped by component (`cc`, `dh`, `dm`, ...). Use to render an event-type picker when configuring triggers.
## Endpoint

```http
GET {{LEM_URL}}/api/v1/loopedge-events/registry/?projectId={{project_id}}&deviceId={{device_id}}
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.
## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
{
    "cc": {
        "id": "cc",
        "name": "Integrations",
        "config": "events-cc.yaml",
        "events": {
            "tags.removed": {
                "id": "tags.removed",
                "msg": "Tags removed.",
                "attrs": {
                    "connector": {
                        "name": "connector",
                        "type": "string",
                        "required": true
                    },
                    "name": {
                        "name": "name",
                        "type": "string",
                        "required": true
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": false
                    },
                    "tags": {
                        "name": "tags",
                        "type": "ArrayOf(string)",
                        "required": true
                    }
                }
            },
            "conn.created": {
                "id": "conn.created",
                "msg": "Connector created.",
                "attrs": {
                    "connector": {
                        "name": "connector",
                        "type": "string",
                        "required": true
                    },
                    "name": {
                        "name": "name",
                        "type": "string",
                        "required": true
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": false
                    }
                }
            },
            "conn.removed": {
                "id": "conn.removed",
                "msg": "Connector removed.",
                "attrs": {
                    "connector": {
                        "name": "connector",
                        "type": "string",
                        "required": true
                    },
                    "name": {
                        "name": "name",
                        "type": "string",
                        "required": true
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": false
                    }
                }
            },
            "tags.disabled": {
                "id": "tags.disabled",
                "msg": "Tags disabled.",
                "attrs": {
                    "connector": {
                        "name": "connector",
                        "type": "string",
                        "required": true
                    },
                    "name": {
                        "name": "name",
                        "type": "string",
                        "required": true
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": false
                    },
                    "tags": {
                        "name": "tags",
                        "type": "ArrayOf(string)",
                        "required": true
                    }
                }
            },
            "conn.disconnected": {
                "id": "conn.disconnected",
                "msg": "Disconnected.",
                "attrs": {
                    "connector": {
                        "name": "connector",
                        "type": "string",
                        "required": true
                    },
                    "name": {
                        "name": "name",
                        "type": "string",
                        "required": true
                    }
                }
            },
            "tags.added": {
                "id": "tags.added",
                "msg": "Tags added.",
                "attrs": {
                    "connector": {
                        "name": "connector",
                        "type": "string",
                        "required": true
                    },
                    "name": {
                        "name": "name",
                        "type": "string",
                        "required": true
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": false
                    },
                    "tags": {
                        "name": "tags",
                        "type": "ArrayOf(string)",
                        "required": true
                    }
                }
            },
            "conn.enabled": {
                "id": "conn.enabled",
                "msg": "Connector enabled.",
                "attrs": {
                    "connector": {
                        "name": "connector",
                        "type": "string",
                        "required": true
                    },
                    "name": {
                        "name": "name",
                        "type": "string",
                        "required": true
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": false
                    }
                }
            },
            "conn.create.failed": {
                "id": "conn.create.failed",
                "msg": "Failed to create a connector.",
                "attrs": {
                    "reason": {
                        "name": "reason",
                        "type": "string",
                        "required": true
                    },
                    "connector": {
                        "name": "connector",
                        "type": "string",
                        "required": true
                    },
                    "name": {
                        "name": "name",
                        "type": "string",
                        "required": true
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": false
                    }
                }
            },
            "conn.disabled": {
                "id": "conn.disabled",
                "msg": "Connector disabled.",
                "attrs": {
                    "connector": {
                        "name": "connector",
                        "type": "string",
                        "required": true
                    },
                    "name": {
                        "name": "name",
                        "type": "string",
                        "required": true
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": false
                    }
                }
            },
            "conn.remove.failed": {
                "id": "conn.remove.failed",
                "msg": "Failed to remove the connector.",
                "attrs": {
                    "reason": {
                        "name": "reason",
                        "type": "string",
                        "required": true
                    },
                    "connector": {
                        "name": "connector",
                        "type": "string",
                        "required": true
                    },
                    "name": {
                        "name": "name",
                        "type": "string",
                        "required": true
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": false
                    }
                }
            },
            "tags.enabled": {
                "id": "tags.enabled",
                "msg": "Tags enabled.",
                "attrs": {
                    "connector": {
                        "name": "connector",
                        "type": "string",
                        "required": true
                    },
                    "name": {
                        "name": "name",
                        "type": "string",
                        "required": true
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": false
                    },
                    "tags": {
                        "name": "tags",
                        "type": "ArrayOf(string)",
                        "required": true
                    }
                }
            },
            "conn.connected": {
                "id": "conn.connected",
                "msg": "Connected.",
                "attrs": {
                    "connector": {
                        "name": "connector",
                        "type": "string",
                        "required": true
                    },
                    "name": {
                        "name": "name",
                        "type": "string",
                        "required": true
                    }
                }
            }
        }
    },
    "mp": {
        "id": "mp",
        "name": "Marketplace",
        "config": "events-mp.yaml",
        "events": {
            "app.download.failed": {
                "id": "app.download.failed",
                "msg": "Application download failed.",
                "attrs": {
                    "reason": {
                        "name": "reason",
                        "type": "string",
                        "required": true
                    },
                    "name": {
                        "name": "name",
                        "type": "string",
                        "required": true
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": false
                    }
                }
            },
            "app.created": {
                "id": "app.created",
                "msg": "Application created.",
                "attrs": {
                    "name": {
                        "name": "name",
                        "type": "string",
                        "required": true
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": false
                    }
                }
            },
            "app.deleted": {
                "id": "app.deleted",
                "msg": "Application stopped.",
                "attrs": {
                    "name": {
                        "name": "name",
                        "type": "string",
                        "required": true
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": false
                    }
                }
            },
            "app.exited": {
                "id": "app.exited",
                "msg": "Application exited.",
                "attrs": {
                    "reason": {
                        "name": "reason",
                        "type": "string",
                        "required": false
                    },
                    "name": {
                        "name": "name",
                        "type": "string",
                        "required": true
                    }
                }
            },
            "app.download.completed": {
                "id": "app.download.completed",
                "msg": "Application download completed.",
                "attrs": {
                    "name": {
                        "name": "name",
                        "type": "string",
                        "required": true
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": false
                    }
                }
            },
            "app.failed": {
                "id": "app.failed",
                "msg": "Application restarted.",
                "attrs": {
                    "reason": {
                        "name": "reason",
                        "type": "string",
                        "required": true
                    },
                    "name": {
                        "name": "name",
                        "type": "string",
                        "required": true
                    }
                }
            },
            "app.create.failed": {
                "id": "app.create.failed",
                "msg": "Failed to create an application.",
                "attrs": {
                    "reason": {
                        "name": "reason",
                        "type": "string",
                        "required": true
                    },
                    "name": {
                        "name": "name",
                        "type": "string",
                        "required": true
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": false
                    }
                }
            },
            "app.restarted": {
                "id": "app.restarted",
                "msg": "Application restarted.",
                "attrs": {
                    "reason": {
                        "name": "reason",
                        "type": "string",
                        "required": true
                    },
                    "name": {
                        "name": "name",
                        "type": "string",
                        "required": true
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": false
                    }
                }
            },
            "app.download.started": {
                "id": "app.download.started",
                "msg": "Application download started.",
                "attrs": {
                    "name": {
                        "name": "name",
                        "type": "string",
                        "required": true
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": false
                    }
                }
            },
            "app.delete.failed": {
                "id": "app.delete.failed",
                "msg": "Failed to delete the application.",
                "attrs": {
                    "reason": {
                        "name": "reason",
                        "type": "string",
                        "required": true
                    },
                    "name": {
                        "name": "name",
                        "type": "string",
                        "required": true
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": false
                    }
                }
            },
            "app.started": {
                "id": "app.started",
                "msg": "Application started.",
                "attrs": {
                    "name": {
                        "name": "name",
                        "type": "string",
                        "required": true
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": false
                    }
                }
            },
            "app.stopped": {
                "id": "app.stopped",
                "msg": "Application stopped.",
                "attrs": {
                    "name": {
                        "name": "name",
                        "type": "string",
                        "required": true
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": false
                    }
                }
            }
        }
    },
    "dh": {
        "id": "dh",
        "name": "Device Hub",
        "config": "events-dh.yaml",
        "events": {
            "device.disabled": {
                "id": "device.disabled",
                "msg": "Device disabled.",
                "attrs": {
                    "driver": {
                        "name": "driver",
                        "type": "string",
                        "required": true
                    },
                    "name": {
                        "name": "name",
                        "type": "string",
                        "required": true
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": false
                    }
                }
            },
            "device.remove.failed": {
                "id": "device.remove.failed",
                "msg": "Failed to remove device.",
                "attrs": {
                    "reason": {
                        "name": "reason",
                        "type": "string",
                        "required": true
                    },
                    "driver": {
                        "name": "driver",
                        "type": "string",
                        "required": true
                    },
                    "name": {
                        "name": "name",
                        "type": "string",
                        "required": true
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": false
                    }
                }
            },
            "tags.remove.failed": {
                "id": "tags.remove.failed",
                "msg": "Failed to remove tags.",
                "attrs": {
                    "reason": {
                        "name": "reason",
                        "type": "string",
                        "required": true
                    },
                    "driver": {
                        "name": "driver",
                        "type": "string",
                        "required": true
                    },
                    "name": {
                        "name": "name",
                        "type": "string",
                        "required": true
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": false
                    },
                    "tags": {
                        "name": "tags",
                        "type": "ArrayOf(string)",
                        "required": true
                    }
                }
            },
            "device.updated": {
                "id": "device.updated",
                "msg": "Device updated.",
                "attrs": {
                    "driver": {
                        "name": "driver",
                        "type": "string",
                        "required": true
                    },
                    "name": {
                        "name": "name",
                        "type": "string",
                        "required": true
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": false
                    }
                }
            },
            "device.create.failed": {
                "id": "device.create.failed",
                "msg": "Failed to create device.",
                "attrs": {
                    "reason": {
                        "name": "reason",
                        "type": "string",
                        "required": true
                    },
                    "driver": {
                        "name": "driver",
                        "type": "string",
                        "required": true
                    },
                    "name": {
                        "name": "name",
                        "type": "string",
                        "required": true
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": false
                    }
                }
            },
            "tags.created": {
                "id": "tags.created",
                "msg": "Tags added.",
                "attrs": {
                    "driver": {
                        "name": "driver",
                        "type": "string",
                        "required": true
                    },
                    "name": {
                        "name": "name",
                        "type": "string",
                        "required": true
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": false
                    },
                    "tags": {
                        "name": "tags",
                        "type": "ArrayOf(string)",
                        "required": true
                    }
                }
            },
            "device.update.failed": {
                "id": "device.update.failed",
                "msg": "Failed to update device.",
                "attrs": {
                    "reason": {
                        "name": "reason",
                        "type": "string",
                        "required": true
                    },
                    "driver": {
                        "name": "driver",
                        "type": "string",
                        "required": true
                    },
                    "name": {
                        "name": "name",
                        "type": "string",
                        "required": true
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": false
                    }
                }
            },
            "tags.updated": {
                "id": "tags.updated",
                "msg": "Tags updated.",
                "attrs": {
                    "tagsAdded": {
                        "name": "tagsAdded",
                        "type": "ArrayOf(string)",
                        "required": true
                    },
                    "driver": {
                        "name": "driver",
                        "type": "string",
                        "required": true
                    },
                    "tagsRemoved": {
                        "name": "tagsRemoved",
                        "type": "ArrayOf(string)",
                        "required": true
                    },
                    "name": {
                        "name": "name",
                        "type": "string",
                        "required": true
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": false
                    }
                }
            },
            "device.connected": {
                "id": "device.connected",
                "msg": "Device connected.",
                "attrs": {
                    "driver": {
                        "name": "driver",
                        "type": "string",
                        "required": true
                    },
                    "name": {
                        "name": "name",
                        "type": "string",
                        "required": true
                    }
                }
            },
            "tags.create.failed": {
                "id": "tags.create.failed",
                "msg": "Failed to create tags.",
                "attrs": {
                    "reason": {
                        "name": "reason",
                        "type": "string",
                        "required": true
                    },
                    "driver": {
                        "name": "driver",
                        "type": "string",
                        "required": true
                    },
                    "name": {
                        "name": "name",
                        "type": "string",
                        "required": true
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": false
                    },
                    "tags": {
                        "name": "tags",
                        "type": "ArrayOf(string)",
                        "required": true
                    }
                }
            },
            "tags.removed": {
                "id": "tags.removed",
                "msg": "Tags removed.",
                "attrs": {
                    "driver": {
                        "name": "driver",
                        "type": "string",
                        "required": true
                    },
                    "name": {
                        "name": "name",
                        "type": "string",
                        "required": true
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": false
                    },
                    "tags": {
                        "name": "tags",
                        "type": "ArrayOf(string)",
                        "required": true
                    }
                }
            },
            "device.enabled": {
                "id": "device.enabled",
                "msg": "Device enabled.",
                "attrs": {
                    "driver": {
                        "name": "driver",
                        "type": "string",
                        "required": true
                    },
                    "name": {
                        "name": "name",
                        "type": "string",
                        "required": true
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": false
                    }
                }
            },
            "device.removed": {
                "id": "device.removed",
                "msg": "Device removed.",
                "attrs": {
                    "driver": {
                        "name": "driver",
                        "type": "string",
                        "required": true
                    },
                    "name": {
                        "name": "name",
                        "type": "string",
                        "required": true
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": false
                    }
                }
            },
            "device.created": {
                "id": "device.created",
                "msg": "Device created.",
                "attrs": {
                    "driver": {
                        "name": "driver",
                        "type": "string",
                        "required": true
                    },
                    "name": {
                        "name": "name",
                        "type": "string",
                        "required": true
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": false
                    }
                }
            },
            "device.disconnected": {
                "id": "device.disconnected",
                "msg": "Device disconnected.",
                "attrs": {
                    "driver": {
                        "name": "driver",
                        "type": "string",
                        "required": true
                    },
                    "name": {
                        "name": "name",
                        "type": "string",
                        "required": true
                    }
                }
            }
        }
    },
    "auth": {
        "id": "auth",
        "name": "Auth",
        "config": "events-auth.yaml",
        "events": {
            "user.created": {
                "id": "user.created",
                "msg": "User created.",
                "attrs": {
                    "admin": {
                        "name": "admin",
                        "type": "string",
                        "required": true
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": true
                    }
                }
            },
            "role.create.failed": {
                "id": "role.create.failed",
                "msg": "Failed to create role.",
                "attrs": {
                    "reason": {
                        "name": "reason",
                        "type": "string",
                        "required": true
                    },
                    "role": {
                        "name": "role",
                        "type": "string",
                        "required": true
                    },
                    "admin": {
                        "name": "admin",
                        "type": "string",
                        "required": true
                    }
                }
            },
            "role.deleted": {
                "id": "role.deleted",
                "msg": "Role deleted.",
                "attrs": {
                    "role": {
                        "name": "role",
                        "type": "string",
                        "required": true
                    },
                    "admin": {
                        "name": "admin",
                        "type": "string",
                        "required": true
                    }
                }
            },
            "user.delete.failed": {
                "id": "user.delete.failed",
                "msg": "Failed to delete user.",
                "attrs": {
                    "reason": {
                        "name": "reason",
                        "type": "string",
                        "required": true
                    },
                    "admin": {
                        "name": "admin",
                        "type": "string",
                        "required": true
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": true
                    }
                }
            },
            "role.assign.failed": {
                "id": "role.assign.failed",
                "msg": "Failed to assign role to the user.",
                "attrs": {
                    "reason": {
                        "name": "reason",
                        "type": "string",
                        "required": true
                    },
                    "role": {
                        "name": "role",
                        "type": "string",
                        "required": true
                    },
                    "admin": {
                        "name": "admin",
                        "type": "string",
                        "required": true
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": true
                    }
                }
            },
            "login.lockdown": {
                "id": "login.lockdown",
                "msg": "Login lockdown initiated.",
                "attrs": {
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": true
                    }
                }
            },
            "role.unasign.failed": {
                "id": "role.unasign.failed",
                "msg": "Failed to unassign role from the user.",
                "attrs": {
                    "reason": {
                        "name": "reason",
                        "type": "string",
                        "required": true
                    },
                    "role": {
                        "name": "role",
                        "type": "string",
                        "required": true
                    },
                    "admin": {
                        "name": "admin",
                        "type": "string",
                        "required": true
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": true
                    }
                }
            },
            "login.succeded": {
                "id": "login.succeded",
                "msg": "User logged in.",
                "attrs": {
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": true
                    }
                }
            },
            "role.delete.failed": {
                "id": "role.delete.failed",
                "msg": "Failed to delete role.",
                "attrs": {
                    "reason": {
                        "name": "reason",
                        "type": "string",
                        "required": true
                    },
                    "role": {
                        "name": "role",
                        "type": "string",
                        "required": true
                    },
                    "admin": {
                        "name": "admin",
                        "type": "string",
                        "required": true
                    }
                }
            },
            "role.assigned": {
                "id": "role.assigned",
                "msg": "Role assigned to the user.",
                "attrs": {
                    "role": {
                        "name": "role",
                        "type": "string",
                        "required": true
                    },
                    "admin": {
                        "name": "admin",
                        "type": "string",
                        "required": true
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": true
                    }
                }
            },
            "role.created": {
                "id": "role.created",
                "msg": "Role created.",
                "attrs": {
                    "role": {
                        "name": "role",
                        "type": "string",
                        "required": true
                    },
                    "admin": {
                        "name": "admin",
                        "type": "string",
                        "required": true
                    }
                }
            },
            "user.create.failed": {
                "id": "user.create.failed",
                "msg": "Failed to create user.",
                "attrs": {
                    "reason": {
                        "name": "reason",
                        "type": "string",
                        "required": true
                    },
                    "admin": {
                        "name": "admin",
                        "type": "string",
                        "required": true
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": true
                    }
                }
            },
            "user.deleted": {
                "id": "user.deleted",
                "msg": "User deleted.",
                "attrs": {
                    "admin": {
                        "name": "admin",
                        "type": "string",
                        "required": true
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": true
                    }
                }
            },
            "role.unassigned": {
                "id": "role.unassigned",
                "msg": "Role unassigned from the user.",
                "attrs": {
                    "role": {
                        "name": "role",
                        "type": "string",
                        "required": true
                    },
                    "admin": {
                        "name": "admin",
                        "type": "string",
                        "required": true
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": true
                    }
                }
            }
        }
    },
    "dm": {
        "id": "dm",
        "name": "Device Management",
        "config": "events-dm.yaml",
        "events": {
            "backup.restore.warning": {
                "id": "backup.restore.warning",
                "msg": "Backup restore failed.",
                "attrs": {
                    "reason": {
                        "name": "reason",
                        "type": "string",
                        "required": true
                    },
                    "fileName": {
                        "name": "fileName",
                        "type": "string",
                        "required": false
                    },
                    "srcHostname": {
                        "name": "srcHostname",
                        "type": "string",
                        "required": false
                    },
                    "curOsVersion": {
                        "name": "curOsVersion",
                        "type": "string",
                        "required": false
                    },
                    "curOsVariant": {
                        "name": "curOsVariant",
                        "type": "string",
                        "required": false
                    },
                    "srcTs": {
                        "name": "srcTs",
                        "type": "string",
                        "required": false
                    },
                    "srcOsVariant": {
                        "name": "srcOsVariant",
                        "type": "string",
                        "required": false
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": true
                    },
                    "srcOsVersion": {
                        "name": "srcOsVersion",
                        "type": "string",
                        "required": false
                    }
                }
            },
            "deactivation.succeeded": {
                "id": "deactivation.succeeded",
                "msg": "Deactivation completed.",
                "attrs": {
                    "autoProvision": {
                        "name": "autoProvision",
                        "type": "bool",
                        "required": true
                    },
                    "version": {
                        "name": "version",
                        "type": "int",
                        "required": true
                    },
                    "remoteHostId": {
                        "name": "remoteHostId",
                        "type": "string",
                        "required": true
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": true
                    },
                    "url": {
                        "name": "url",
                        "type": "string",
                        "required": true
                    }
                }
            },
            "swupdate.failed": {
                "id": "swupdate.failed",
                "msg": "Software update failed.",
                "attrs": {
                    "reason": {
                        "name": "reason",
                        "type": "string",
                        "required": true
                    },
                    "curVersion": {
                        "name": "curVersion",
                        "type": "string",
                        "required": true
                    },
                    "targetVersion": {
                        "name": "targetVersion",
                        "type": "string",
                        "required": true
                    }
                }
            },
            "device.rebooted": {
                "id": "device.rebooted",
                "msg": "Device rebooted.",
                "attrs": {
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": false
                    }
                }
            },
            "deactivation.failed": {
                "id": "deactivation.failed",
                "msg": "Deactivation failed.",
                "attrs": {
                    "reason": {
                        "name": "reason",
                        "type": "string",
                        "required": true
                    },
                    "autoProvision": {
                        "name": "autoProvision",
                        "type": "bool",
                        "required": true
                    },
                    "version": {
                        "name": "version",
                        "type": "int",
                        "required": true
                    },
                    "remoteHostId": {
                        "name": "remoteHostId",
                        "type": "string",
                        "required": true
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": true
                    },
                    "url": {
                        "name": "url",
                        "type": "string",
                        "required": true
                    }
                }
            },
            "swupdate.applied": {
                "id": "swupdate.applied",
                "msg": "Software update applied. Confirmation is pending a reboot.",
                "attrs": {
                    "curVersion": {
                        "name": "curVersion",
                        "type": "string",
                        "required": true
                    },
                    "targetVersion": {
                        "name": "targetVersion",
                        "type": "string",
                        "required": true
                    }
                }
            },
            "diskspace.limit.exceeded.system": {
                "id": "diskspace.limit.exceeded.system",
                "msg": "Low disk space. System level exceeded.",
                "attrs": {
                    "limitMiB": {
                        "name": "limitMiB",
                        "type": "int",
                        "required": true
                    },
                    "freeMiB": {
                        "name": "freeMiB",
                        "type": "int",
                        "required": true
                    },
                    "action": {
                        "name": "action",
                        "type": "string",
                        "required": true
                    }
                }
            },
            "template.applied": {
                "id": "template.applied",
                "msg": "Template applied.",
                "attrs": {
                    "fileName": {
                        "name": "fileName",
                        "type": "string",
                        "required": true
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": false
                    }
                }
            },
            "activation.failed": {
                "id": "activation.failed",
                "msg": "Activation failed.",
                "attrs": {
                    "reason": {
                        "name": "reason",
                        "type": "string",
                        "required": true
                    },
                    "autoProvision": {
                        "name": "autoProvision",
                        "type": "bool",
                        "required": true
                    },
                    "version": {
                        "name": "version",
                        "type": "int",
                        "required": true
                    },
                    "remoteHostId": {
                        "name": "remoteHostId",
                        "type": "string",
                        "required": true
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": true
                    },
                    "url": {
                        "name": "url",
                        "type": "string",
                        "required": true
                    }
                }
            },
            "backup.restored": {
                "id": "backup.restored",
                "msg": "Backup restored succesfully.",
                "attrs": {
                    "fileName": {
                        "name": "fileName",
                        "type": "string",
                        "required": false
                    },
                    "srcHostname": {
                        "name": "srcHostname",
                        "type": "string",
                        "required": false
                    },
                    "curOsVersion": {
                        "name": "curOsVersion",
                        "type": "string",
                        "required": false
                    },
                    "curOsVariant": {
                        "name": "curOsVariant",
                        "type": "string",
                        "required": false
                    },
                    "srcTs": {
                        "name": "srcTs",
                        "type": "string",
                        "required": false
                    },
                    "srcOsVariant": {
                        "name": "srcOsVariant",
                        "type": "string",
                        "required": false
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": true
                    },
                    "srcOsVersion": {
                        "name": "srcOsVersion",
                        "type": "string",
                        "required": false
                    }
                }
            },
            "backup.restore.failed": {
                "id": "backup.restore.failed",
                "msg": "Backup restore failed.",
                "attrs": {
                    "reason": {
                        "name": "reason",
                        "type": "string",
                        "required": true
                    },
                    "fileName": {
                        "name": "fileName",
                        "type": "string",
                        "required": false
                    },
                    "srcHostname": {
                        "name": "srcHostname",
                        "type": "string",
                        "required": false
                    },
                    "curOsVersion": {
                        "name": "curOsVersion",
                        "type": "string",
                        "required": false
                    },
                    "curOsVariant": {
                        "name": "curOsVariant",
                        "type": "string",
                        "required": false
                    },
                    "srcTs": {
                        "name": "srcTs",
                        "type": "string",
                        "required": false
                    },
                    "srcOsVariant": {
                        "name": "srcOsVariant",
                        "type": "string",
                        "required": false
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": true
                    },
                    "srcOsVersion": {
                        "name": "srcOsVersion",
                        "type": "string",
                        "required": false
                    }
                }
            },
            "diskspace.limit.exceeded.user": {
                "id": "diskspace.limit.exceeded.user",
                "msg": "Low disk space. User-defined level exceeded.",
                "attrs": {
                    "limitMiB": {
                        "name": "limitMiB",
                        "type": "int",
                        "required": true
                    },
                    "freeMiB": {
                        "name": "freeMiB",
                        "type": "int",
                        "required": true
                    },
                    "action": {
                        "name": "action",
                        "type": "string",
                        "required": true
                    }
                }
            },
            "activation.succeeded": {
                "id": "activation.succeeded",
                "msg": "Activation completed.",
                "attrs": {
                    "autoProvision": {
                        "name": "autoProvision",
                        "type": "bool",
                        "required": true
                    },
                    "version": {
                        "name": "version",
                        "type": "int",
                        "required": true
                    },
                    "remoteHostId": {
                        "name": "remoteHostId",
                        "type": "string",
                        "required": true
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": true
                    },
                    "url": {
                        "name": "url",
                        "type": "string",
                        "required": true
                    }
                }
            },
            "template.apply.failed": {
                "id": "template.apply.failed",
                "msg": "Failed to apply thetemplate.",
                "attrs": {
                    "reason": {
                        "name": "reason",
                        "type": "string",
                        "required": true
                    },
                    "fileName": {
                        "name": "fileName",
                        "type": "string",
                        "required": true
                    },
                    "user": {
                        "name": "user",
                        "type": "string",
                        "required": false
                    }
                }
            }
        }
    }
}
```

---

## Event IDs

**GET** `{{LEM_URL}}/api/v1/loopedge-events/registry/ids/?component=cc`

# Event IDs

Returns the event IDs supported by one component (e.g. `cc` for Integrations). Use to narrow down picker contents after a component is chosen.
## Endpoint

```http
GET {{LEM_URL}}/api/v1/loopedge-events/registry/ids/?component=cc
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.
## Parameters

| Parameter   | Type   | Required | Description                                              |
|-------------|--------|----------|----------------------------------------------------------|
| `component` | string | Yes      | Component slug (`cc`, `dh`, `dm`, `auth`, `mp`).          |

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
[
    "conn.connected",
    "conn.create.failed",
    "conn.created",
    "conn.disabled",
    "conn.disconnected",
    "conn.enabled",
    "conn.remove.failed",
    "conn.removed",
    "tags.added",
    "tags.disabled",
    "tags.enabled",
    "tags.removed"
]
```

---

## Event Components

**GET** `{{LEM_URL}}/api/v1/loopedge-events/registry/components`

# Event Components

Returns the set of component slugs that emit LE events. Used by the LEM UI's event-component dropdown.
## Endpoint

```http
GET {{LEM_URL}}/api/v1/loopedge-events/registry/components
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.
## Response

```json
["auth", "cc", "dh", "dm", "mp"]
```

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
[
    "auth",
    "cc",
    "dh",
    "dm",
    "mp"
]
```

---

## Get Events

**GET** `{{LEM_URL}}/api/v1/loopedge-events/list/{{project_id}}`

# Get Events

Returns the LE event stream for the project. Each event has a timestamp, originating device, component, severity, event ID, message, and attrs.
## Endpoint

```http
GET {{LEM_URL}}/api/v1/loopedge-events/list/{{project_id}}
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.
## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
[
    {
        "timeStamp": "2019-08-24T14:15:22Z",
        "deviceId": "string",
        "component": "string",
        "severity": "string",
        "eventId": "string",
        "msg": "string",
        "attrs": "string"
    }
]
```

---

