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

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

[
    {
        "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

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

[
    {
        "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

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

[
    "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

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

[
    {
        "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

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

{
    "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

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

[
    {
        "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

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

{
    "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

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

[]

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

[]

Response

Status: 200 OK

[
    {
        "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

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

{ "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

{
    "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

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

{
    "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

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

[
    {
        "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

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

{
    "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

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

{
    "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

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

{ "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

{
    "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

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

{ "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

{
    "value": "ww9vg9dknwruvafxetr0x11c6kq3sf6r"
}

Response

Status: 200 OK

{
    "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

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

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

{
    "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

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

{
    "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

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

[
    {
        "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

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

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

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

{
    "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

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

[
    {
        "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

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

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

[
    {
        "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

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

{ "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

{
    "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

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

[
    {
        "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

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

{
  "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

{
    "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

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

{
  "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

{
    "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

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

[
    {
        "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

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

[
    {
        "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

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

{
    "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

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

{
    "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

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

{
    "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

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

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

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

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

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

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

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

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

{ "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

{
    "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

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

{
    "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

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

{
    "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

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

[
    "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

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

["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

[
    "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

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

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

View this page as Markdown