cvat-ai / cvat

Annotate better with CVAT, the industry-leading data engine for machine learning. Used and trusted by teams at any scale, for data of any scale.
https://cvat.ai
MIT License
12.49k stars 2.99k forks source link

[SAM]: TypeError: Cannot read properties of undefined (reading 'length') #6189

Closed lll9p closed 1 year ago

lll9p commented 1 year ago

My actions before raising this issue

After upgrading to v2.4.4, I cannot use SAM for annotation, and CVAT prompts the following error: Interaction error occurred TypeError: Cannot read properties of undefined (reading 'length')

Checked the configuration and found no problems. Other models work fine, this error only appears on SAM, maybe it has something to do with #6019 .

There are also other users who have encountered this error, such as Korkoran in discord

Steps to Reproduce (for bugs)

  1. Open a job.
  2. Click AI Tools.
  3. Select SAM Model.
  4. Click interact.
  5. Click on anything I want to segment.
  6. Wait and the error triggered.

Your Environment

commit d5ef45a0e0a202811262316299b9b954c4b85144 (HEAD -> master, tag: v2.4.4, origin/master) Merge: 8a2c23f2c fa4a200c8 Author: Nikita Manovich nikita@cvat.ai Date: Thu May 18 21:40:40 2023 +0300

Release v2.4.4

### Added
- Introduced a new configuration option for controlling the invocation of Nuclio functions.
  (<https://github.com/opencv/cvat/pull/6146>)

### Changed
- Relocated SAM masks decoder to frontend operation.
  (<https://github.com/opencv/cvat/pull/6019>)
- Switched `person-reidentification-retail-0300` and `faster_rcnn_inception_v2_coco` Nuclio functions with `person-reidentification-retail-0277` and `faster_rcnn_inception_resnet_v2_atrous_coco` respectively.
  (<https://github.com/opencv/cvat/pull/6129>)
- Upgraded OpenVINO-based Nuclio functions to utilize the OpenVINO 2022.3 runtime.
  (<https://github.com/opencv/cvat/pull/6129>)

### Fixed
- Resolved issues with tracking multiple objects (30 and more) using the TransT tracker.
  (<https://github.com/opencv/cvat/pull/6073>)
- Addressed azure.core.exceptions.ResourceExistsError: The specified blob already exists.
  (<https://github.com/opencv/cvat/pull/6082>)
- Corrected image scaling issues when transitioning between images of different resolutions.
  (<https://github.com/opencv/cvat/pull/6081>)
- Fixed inaccurate reporting of completed job counts.

Client: Version: 24.0.0 API version: 1.43 Go version: go1.20.4 Git commit: 98fdcd769b Built: Thu May 18 09:55:36 2023 OS/Arch: linux/amd64 Context: default

Server: Engine: Version: 24.0.0 API version: 1.43 (minimum version 1.12) Go version: go1.20.4 Git commit: 1331b8c39a Built: Thu May 18 09:55:36 2023 OS/Arch: linux/amd64 Experimental: false containerd: Version: v1.7.1 GitCommit: 1677a17964311325ed1c31e2c0a3589ce6d5c30d.m runc: Version: 1.1.7 GitCommit: docker-init: Version: 0.19.0 GitCommit: de40ad0

nuclio logs.

nuclio | 23.05.24 02:36:58.790 dashboard.platform.docker (D) Container is healthy {"containerID": "8dd30231a652193e3d4696133447df2998356586d3c5a2484bc86d39ca0dbd37"} nuclio | 23.05.24 02:37:02.732 dashboard.platform.docker (D) Executing in container {"containerID": "nuclio-local-storage-reader", "execOptions": {"Command":"/bin/sh -c \"/bin/cat /etc/nuclio/store/functions/nuclio/pth-facebookresearch-sam-vit-gpu.json\"","Stdout":"","Stderr":"","Env":null}} nuclio | 23.05.24 02:37:02.732 rd.platform.docker.runner (D) Executing {"command": "docker exec nuclio-local-storage-reader /bin/sh -c \"/bin/cat /etc/nuclio/store/functions/nuclio/pth-facebookresearch-sam-vit-h.json\""} nuclio | 23.05.24 02:37:02.847 rd.platform.docker.runner (D) Command executed successfully {"output": "eyJtZXRhZGF0YSI6eyJuYW1lIjoicHRoLWZhY2Vib29rcmVzZWFyY2gtc2FtLXZpdC1ncHUiLCJuYW1lc3BhY2UiOiJudWNsaW8iLCJsYWJlbHMiOnsibnVjbGlvLmlvL3Byb2plY3QtbmFtZSI6ImN2YXQifSwiYW5ub3RhdGlvbnMiOnsiYW5pbWF0ZWRfZ2lmIjoiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL29wZW5jdi9jdmF0L2RldmVsb3Avc2l0ZS9jb250ZW50L2VuL2ltYWdlcy9ocm5ldF9leGFtcGxlLmdpZiIsImZyYW1ld29yayI6InB5dG9yY2giLCJoZWxwX21lc3NhZ2UiOiJUaGUgaW50ZXJhY3RvciBhbGxvd3MgdG8gZ2V0IGEgbWFzayBvZiBhbiBvYmplY3QgdXNpbmcgYXQgbGVhc3Qgb25lIHBvc2l0aXZlLCBhbmQgYW55IG5lZ2F0aXZlIHBvaW50cyBpbnNpZGUgaXQiLCJtaW5fbmVnX3BvaW50cyI6IjAiLCJtaW5fcG9zX3BvaW50cyI6IjEiLCJuYW1lIjoiU2VnbWVudCBBbnl0aGluZyBHUFUiLCJzcGVjIjoiIiwidHlwZSI6ImludGVyYWN0b3IiLCJ2ZXJzaW9uIjoiMiJ9fSwic3BlYyI6eyJkZXNjcmlwdGlvbiI6IkludGVyYWN0aXZlIG9iamVjdCBzZWdtZW50YXRpb24gd2l0aCBTZWdtZW50LUFueXRoaW5nIiwiaGFuZGxlciI6Im1haW46aGFuZGxlciIsInJ1bnRpbWUiOiJweXRob246My44IiwiZW52IjpbeyJuYW1lIjoiUFlUSE9OUEFUSCIsInZhbHVlIjoiL29wdC9udWNsaW8vc2FtIn1dLCJyZXNvdXJjZXMiOnsibGltaXRzIjp7Im52aWRpYS5jb20vZ3B1IjoiMSJ9LCJyZXF1ZXN0cyI6eyJjcHUiOiIyNW0iLCJtZW1vcnkiOiIxTWkifX0sImltYWdlIjoiY3ZhdC5wdGguZmFjZWJvb2tyZXNlYXJjaC5zYW0udml0LmdwdTpsYXRlc3QiLCJ0YXJnZXRDUFUiOjc1LCJ0cmlnZ2VycyI6eyJteUh0dHBUcmlnZ2VyIjp7ImNsYXNzIjoiIiwia2luZCI6Imh0dHAiLCJuYW1lIjoibXlIdHRwVHJpZ2dlciIsIm1heFdvcmtlcnMiOjEsIndvcmtlckF2YWlsYWJpbGl0eVRpbWVvdXRNaWxsaXNlY29uZHMiOjEwMDAwLCJhdHRyaWJ1dGVzIjp7Im1heFJlcXVlc3RCb2R5U2l6ZSI6MzM1NTQ0MzJ9fX0sInZvbHVtZXMiOlt7InZvbHVtZSI6eyJuYW1lIjoidm9sdW1lLTEiLCJob3N0UGF0aCI6eyJwYXRoIjoiL2hvbWUvbGFvL2RvY2tlci9jdmF0L3NlcnZlcmxlc3MvY29tbW9uIn19LCJ2b2x1bWVNb3VudCI6eyJuYW1lIjoidm9sdW1lLTEiLCJtb3VudFBhdGgiOiIvb3B0L251Y2xpby9jb21tb24ifX0seyJ2b2x1bWUiOnsibmFtZSI6InZvbHVtZS0yIiwiaG9zdFBhdGgiOnsicGF0aCI6Ii9ob21lL2xhby9jdmF0X3NlcnZlcmxlc3Mvc2FtL2RhdGEifX0sInZvbHVtZU1vdW50Ijp7Im5hbWUiOiJ2b2x1bWUtMiIsIm1vdW50UGF0aCI6Ii9vcHQvZGF0YSJ9fV0sImJ1aWxkIjp7ImZ1bmN0aW9uQ29uZmlnUGF0aCI6Ii9ob21lL2xhby9jdmF0X3NlcnZlcmxlc3Mvc2FtL251Y2xpby9mdW5jdGlvbi1ncHUueWFtbCIsImltYWdlIjoiY3ZhdC5wdGguZmFjZWJvb2tyZXNlYXJjaC5zYW0udml0LmdwdSIsImJhc2VJbWFnZSI6InVidW50dToyMi4wNCIsImRpcmVjdGl2ZXMiOnsicHJlQ29weSI6W3sia2luZCI6IkVOViIsInZhbHVlIjoiTlZJRElBX1ZJU0lCTEVfREVWSUNFUz1hbGwifSx7ImtpbmQiOiJFTlYiLCJ2YWx1ZSI6Ik5WSURJQV9EUklWRVJfQ0FQQUJJTElUSUVTPWNvbXB1dGUsdXRpbGl0eSJ9LHsia2luZCI6IkVOViIsInZhbHVlIjoiREVCSUFOX0ZST05URU5EPW5vbmludGVyYWN0aXZlIn0seyJraW5kIjoiV09SS0RJUiIsInZhbHVlIjoiL29wdC9udWNsaW8vc2FtIn0seyJraW5kIjoiUlVOIiwidmFsdWUiOiJlY2hvICdkZWIgaHR0cDovL21pcnJvcnMudHVuYS50c2luZ2h1YS5lZHUuY24vdWJ1bnR1LyBqYW1teSBtYWluIHJlc3RyaWN0ZWQgdW5pdmVyc2UgbXVsdGl2ZXJzZVxcbmRlYiBodHRwOi8vbWlycm9ycy50dW5hLnRzaW5naHVhLmVkdS5jbi91YnVudHUvIGphbW15LXVwZGF0ZXMgbWFpbiByZXN0cmljdGVkIHVuaXZlcnNlIG11bHRpdmVyc2VcXG5kZWIgaHR0cDovL21pcnJvcnMudHVuYS50c2luZ2h1YS5lZHUuY24vdWJ1bnR1LyBqYW1teS1iYWNrcG9ydHMgbWFpbiByZXN0cmljdGVkIHVuaXZlcnNlIG11bHRpdmVyc2VcXG5kZWIgaHR0cDovL21pcnJvcnMudHVuYS50c2luZ2h1YS5lZHUuY24vdWJ1bnR1LyBqYW1teS1zZWN1cml0eSBtYWluIHJlc3RyaWN0ZWQgdW5pdmVyc2UgbXVsdGl2ZXJzZScgXHUwMDNlIC9ldGMvYXB0L3NvdXJjZXMubGlzdCJ9LHsia2luZCI6IlJVTiIsInZhbHVlIjoiYXB0LWdldCB1cGRhdGUgXHUwMDI2XHUwMDI2IGFwdC1nZXQgLXkgaW5zdGFsbCBjdXJsIGdpdCBweXRob24zIHB5dGhvbjMtcGlwIGZmbXBlZyBsaWJzbTYgbGlieGV4dDYifSx7ImtpbmQiOiJSVU4iLCJ2YWx1ZSI6ImN1cmwgLU8gaHR0cDovLzE3Mi4xNy4wLjE6OTg5OC9wYWNrYWdlcy1zZWdtZW50LWFueXRoaW5nLnRhci5neiJ9LHsia2luZCI6IlJVTiIsInZhbHVlIjoidGFyIC14enZmIHBhY2thZ2VzLXNlZ21lbnQtYW55dGhpbmcudGFyLmd6IC1DIC9vcHQvbnVjbGlvL3NhbS8ifSx7ImtpbmQiOiJSVU4iLCJ2YWx1ZSI6InBpcDMgaW5zdGFsbCAtLW5vLWluZGV4IC0tZmluZC1saW5rcyAvb3B0L251Y2xpby9zYW0vcGFja2FnZXMvIC9vcHQvbnVjbGlvL3NhbS9wYWNrYWdlcy8qIn0seyJraW5kIjoiUlVOIiwidmFsdWUiOiJwaXAzIGluc3RhbGwgL29wdC9udWNsaW8vc2FtL3NlZ21lbnQtYW55dGhpbmcifSx7ImtpbmQiOiJSVU4iLCJ2YWx1ZSI6InJtIC1yZiAvb3B0L251Y2xpby9zYW0vcGFja2FnZXMtc2VnbWVudC1hbnl0aGluZy50YXIuZ3ogL29wdC9udWNsaW8vc2FtL3BhY2thZ2VzIC9vcHQvbnVjbGlvL3NhbS9zZWdtZW50LWFueXRoaW5nIn0seyJraW5kIjoiUlVOIiwidmFsdWUiOiJsbiAtcyAvdXNyL2Jpbi9waXAzIC91c3IvbG9jYWwvYmluL3BpcCBcdTAwMjZcdTAwMjYgbG4gLXMgL3Vzci9iaW4vcHl0aG9uMyAvdXNyL2Jpbi9weXRob24ifV19LCJjb2RlRW50cnlUeXBlIjoiaW1hZ2UiLCJ0aW1lc3RhbXAiOjE2ODQ4OTM4Mzd9LCJwbGF0Zm9ybSI6eyJhdHRyaWJ1dGVzIjp7Im1vdW50TW9kZSI6InZvbHVtZSIsInJlc3RhcnRQb2xpY3kiOnsibWF4aW11bVJldHJ5Q291bnQiOjMsIm5hbWUiOiJhbHdheXMifX19LCJyZWFkaW5lc3NUaW1lb3V0U2Vjb25kcyI6MTIwLCJzZWN1cml0eUNvbnRleHQiOnt9LCJldmVudFRpbWVvdXQiOiIzMHMifSwic3RhdHVzIjp7InN0YXRlIjoicmVhZHkiLCJodHRwUG9ydCI6MzI3NzMsImludGVybmFsSW52b2NhdGlvblVybHMiOlsiMTcyLjE3LjAuNjo4MDgwIl19fQ==\n", "stderr": "", "exitCode": 0} nuclio | 23.05.24 02:37:02.848 dashboard.server (D) Handled request {"requestID": "bcd0f7070ae4/Ow6s8VVxAh-000005", "requestMethod": "GET", "requestPath": "/api/functions/pth-facebookresearch-sam-vit-gpu", "requestHeaders": {"Accept":["*/*"],"Accept-Encoding":["gzip, deflate"],"Connection":["close"],"User-Agent":["CVAT/2.4.4 python-requests/2.26.0"],"X-Nuclio-Function-Namespace":["nuclio"],"X-Nuclio-Invoke-Via":["domain-name"],"X-Nuclio-Project-Name":["cvat"]}, "requestBody": "", "responseStatus": 200, "responseTime": "115.879874ms"}

Details

NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS cvat_clickhouse clickhouse/clickhouse-server:22.3-alpine "/entrypoint.sh" cvat_clickhouse About an hour ago Up About an hour 8123/tcp, 9000/tcp, 9009/tcp cvat_db postgres:15-alpine "docker-entrypoint.s…" cvat_db About an hour ago Up About an hour 5432/tcp cvat_grafana grafana/grafana-oss:9.3.6 "sh -euc 'mkdir -p /…" cvat_grafana About an hour ago Up About an hour 3000/tcp cvat_opa openpolicyagent/opa:0.45.0-rootless "/opa run --server -…" cvat_opa About an hour ago Up About an hour cvat_redis redis:7.0-alpine "docker-entrypoint.s…" cvat_redis About an hour ago Up About an hour 6379/tcp cvat_server cvat/server:latest "/usr/bin/supervisor…" cvat_server About an hour ago Up About an hour 8080/tcp cvat_ui cvat/ui:latest "/docker-entrypoint.…" cvat_ui About an hour ago Up About an hour 80/tcp cvat_utils cvat/server:latest "/usr/bin/supervisor…" cvat_utils About an hour ago Up About an hour 8080/tcp cvat_vector timberio/vector:0.26.0-alpine "/usr/local/bin/vect…" cvat_vector About an hour ago Up About an hour cvat_worker_annotation cvat/server:latest "/usr/bin/supervisor…" cvat_worker_annotation About an hour ago Up About an hour 8080/tcp cvat_worker_export cvat/server:latest "/usr/bin/supervisor…" cvat_worker_export About an hour ago Up About an hour 8080/tcp cvat_worker_import cvat/server:latest "/usr/bin/supervisor…" cvat_worker_import About an hour ago Up About an hour 8080/tcp cvat_worker_webhooks cvat/server:latest "/usr/bin/supervisor…" cvat_worker_webhooks About an hour ago Up About an hour 8080/tcp nuclio quay.io/nuclio/dashboard:1.8.14-amd64 "/docker-entrypoint.…" nuclio About an hour ago Up About an hour (healthy) 80/tcp, 0.0.0.0:8070->8070/tcp, :::8070->8070/tcp traefik traefik:v2.9 "/entrypoint.sh --pr…" traefik About an hour ago Up About an hour 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 80/tcp, 0.0.0.0:8090->8090/tcp, :::8090->8090/tcp

bsekachev commented 1 year ago

Upgrading manual is here: https://opencv.github.io/cvat/docs/administration/advanced/upgrade_guide/ Please, make an attention, that before upgrading you must pull the latest images manually, please, read here: https://opencv.github.io/cvat/docs/administration/basics/installation/#how-to-pullbuildupdate-cvat-images

lll9p commented 1 year ago

thanks for your quick reply @bsekachev I did the following checks as you suggested (I pulled the latest CVAT images and cleaned up all volumes. I tested both in the latest version of Chrome and MS Edge), but the problem still occurs, below is the result.

When I have time I'll try a fresh install and see if the same error occurs.

  1. The DevTools records. DevTools
  2. The response of SAM serverless. response
  3. SAM detector onnx. sam_detector onnx
  4. Version checking result. screenshot1
  5. Same error when annotating. error
bsekachev commented 1 year ago

@lll9p

What is response for "/functions" request?

Also can you submit the following code snipped run in Chrome console on opened CVAT tool returns SAM?

(async () => {
    const plugins = await window.cvat.plugins.list();
    console.log(plugins);
})()
image
lll9p commented 1 year ago

heres the result. @bsekachev screenshot

And I think I found the reason, I edited function-gpu.yaml and changed the name of the model to Segment Anything GPU, which caused the error. Although the problem is solved, I can no longer deploy different fine-tuned SAM models at the same time.

Now if I want to choose a different model, I have to modify model_handler.py so that it reads a configuration file, and then selects the corresponding model mounted in the volume according to the configuration file

like:

metadata:
  name: pth-facebookresearch-sam-vit-h
  namespace: cvat
  annotations:
    # Below line changed back and everything is fine.
    name: Segment Anything GPU
    version: 2
    type: interactor
    spec:
    framework: pytorch

After I change name back and re-deploy SAM, everything works fine.

Thank you for your help!

bsekachev commented 1 year ago

Yes, it was probably because you changed the model name.

I can no longer deploy different fine-tuned SAM models at the same time.

Yes, deploying several SAM models at the same time is not possible, because client part works only with one onnx decoder. And this decoder is different for different SAM weights.

But in general you can use other weights. Just do not change model name in yaml file or another option is to change client source code a little bit. In this file cvat-ui/plugins/sam_plugin/src/ts/index.tsx you can change modelID in line 242. After changing client you need to add -f docker-compose.dev.yaml up -d --build to docker compose command to build CVAT from source code.

lll9p commented 1 year ago

Yes, it was probably because you changed the model name.

I can no longer deploy different fine-tuned SAM models at the same time.

Yes, deploying several SAM models at the same time is not possible, because client part works only with one onnx decoder. And this decoder is different for different SAM weights.

But in general you can use other weights. Just do not change model name in yaml file or another option is to change client source code a little bit. In this file cvat-ui/plugins/sam_plugin/src/ts/index.tsx you can change modelID in line 242. After changing client you need to add -f docker-compose.dev.yaml up -d --build to docker compose command to build CVAT from source code.

Thanks for the suggestion, that's a great idea. I will try that later.😁

venuss920 commented 2 months ago

I am trying to integrate my own SAM model using hugging face transformers, now I have implemented my own model_handler, and main.py - However now I am getting an error like this in the cvat UI -

Interaction error occurred Cannot read properties of undefined (reading 'length'). Do I can get a path or a hint what I could do the next ? , in the context logger info I can see the images pixel values, shape of the image , masks.

Here is the output..

24.08.26 11:35:00.457 sor.http.w0.python.logger (I) Input Positive Points: [[1243.6044921875, 1077.935546875], [92.298828125, 2107.7958984375], [1879.98046875, 1039.0732421875], [2268.607421875, 1121.65625], [3322.7568359375, 1811.4677734375], [1933.4169921875, 2136.943359375], [1481.638671875, 1806.6103515625], [2822.400390625, 1568.576171875]] {"worker_id": "0"} 24.08.26 11:35:00.457 sor.http.w0.python.logger (I) Negative Negative Points: [] {"worker_id": "0"} 24.08.26 11:35:00.457 sor.http.w0.python.logger (I) Input Points: None {"worker_id": "0"} 24.08.26 11:35:00.457 sor.http.w0.python.logger (I) Input Boxes: None {"worker_id": "0"} (3040, 4032, 3) PRED_MASKS_RESHAPED_FOR 1024*1024 trained model : torch.Size([1, 1, 3040, 4032]) IOU SCORES: tensor([[[0.8349]]]) 24.08.26 11:35:02.543 sor.http.w0.python.logger (I) Mask shape after squeeze: (3040, 4032) {"worker_id": "0"} 24.08.26 11:35:02.577 sor.http.w0.python.logger (I) buffer: [137 80 78 ... 66 96 130] {"worker_id": "0"} 24.08.26 11:35:02.577 sor.http.w0.python.logger (I) SOCRES: [[[0.8349123001098633]]] {"worker_id": "0"}

24.08.26 11:35:02.578 sor.http.w0.python.logger (I) Response Data: {'blob': ['iVBORw0KGgoAAAANSUhEUgAAD8AAAAvgCAAAAADh5JbRAAAgAElEQVR4AezBC3YVBBYEwO79L7ongCiO5Pc4MVetqi5/1jxr+a55t+Wvmr/ZkuYXLa9pfmJ5s+anljdqfmZ5o+YZy9s0f7W8WfNTy9s0P7O8VfP/lrdqnre8QfMzy+uaN1p+1ADctbykedbyGZos/6d53JLmn2r5pvkcy/9rPsTyfk2WhzXJ8vdqXrW8pHmb5avm/Zafa95ieUnziuVtmp9YXte8aHle86rlBc3rlmc0b7A8r3nd8pzmVcvrmmctb9L81fK4Ls9rvlqe0/xg+Ysmy2OaHyzv1vxueUyTLPDP0iTLg5rvlvdq/rC8TfO85QfNf9GaX7E0v2B5QfOS5XfNAcvvmr/d8lcNr1ge0WS5qHmv5WeaN1v+0LzT8lPNGyxv0Xyz8M/T/Gh5l+b/La9rXrC8UfMzyxs1P7U8rMt7NX+2vF3zV8s7NH+xvFHzU8t7NH+yvE/zJ8tDmq+WRzXJ8ku6APzTNT9Y3qv5w/KI5jfLo5qF92n+ZHlE883ykOab5RHNj5Z3aZ6xvFHz3fJOzU8s79R8t/zbNW+1vK55zvKa5nnLGzVfLAD8zboAAPD3an5iAYAXdAEA4NM0Xy0A8LIuAAAAwHVdAAAAgOu6AAAAANd1AQAAAK7rAgAAAFzXBQAAALiuCwAAAHBdFwAAAOC6LgAAAMB1XQAAAIDrugAAAADXdQEAAACu6wIAAABc1wUAAAC4rgsAAABwXRcAAADgui4AAADAdV0AAACA67oAAAAA13UBAAAArusCAAAAXNcFAAAAuK4LAAAAcF0XAAAA4LouAAAAwHVdAAAAgOu6AAAAANd1AQAAAK7rAgAAAFzXBQAAALiuCwAAAHBdFwAAAOC6LgAAAMB1XQAAAIDrugAAAADXdQEAAACu6wIAAABc1wUAAAC4rgsAAABwXRcAAADgui4AAADAdV0AAACA67oAAAAA13UBAAAArusCAAAAXNcFAAAAuK4LAAAAcF0XAAAA4LouAAAAwHVdAAAAgOu6AAAAANd1AQAAAK7rAgAAAFzXBQAAALiuCwAAAHBdFwAAAOC6LgAAAMB1XQAAAIDrugAAAADXdQEAAACu6wIAAABc1wUAAAC4rgsAAABwXRcAAADgui4AAADAdV0AAACA67oAAAAA13UBAAAArusCAAAAXNcFAAAAuK4LAAAAcF0XAAAA4LouAAAAwHVdAAAAgOu6AAAAANd1AQAAAK7rAgAAAFzXBQAAALiuCwAAAHBdFwAAAOC6LgAAAMB1XQAAAIDrugAAAADXdQEAAACu6wIAAABc1wUAAAC4rgsAAABwXRcAAADgui4AAADAdV0AAACA67oAAAAA13UBAAAArusCAAAAXNcFAAAAuK4LAAAAcF0XAAAA4LouAAAAwHVdAAAAgOu6AAAAANd1AQAAAK7rAgAAAFzXBQAAALiuCwAAAHBdFwAAAOC6LgAAAMB1XQAAAIDrugAAAADXdQEAAACu6wIAAABc1wUAAAC4rgsAAABwXRcAAADgui4AAADAdV0AAACA67oAAAAA13UBAAAArusCAAAAXNcFAAAAuK4LAAAAcF0XAAAA4LouAAAAwHVdAAAAgOu6AAAAANd1AQAAAK7rAgAAAFzXBQAAALiuCwAAAHBdFwAAAOC6LgAAAMB1XQAAAIDrugAAAADXdQEAAACu6wIAAABc1wUAAAC4rgsAAABwXRcAAADgui4AAADAdV0AAACA67oAAAAA13UBAAAArusCAAAAXNcFAAAAuK4LAAAAcF0XAAAA4LouAAAAwHVdAAAAgOu6AAAAANd1AQAAAK7rAgAAAFzXBQAAALiuCwAAAHBdFwAAAOC6LgAAAMB1XQAAAIDrugAAAADXdQEAAACu6wIAAABc1wUAAAC4rgsAAABwXRcAAADgui4AAADAdV0AAACA67oAAAAA13UBAAAArusCAAAAXNcFAAAAuK4LAAAAcF0XAAAA4LouAAAAwHVdAAAAgOu6AAAAANd1AQAAAK7rAgAAAFzXBQAAALiuCwAAAHBdFwAAAOC6LgAAAMB1XQAAAIDrugAAAADXdQEAAACu6wIAAABc1wUAAAC4rgsAAABwXRcAAADgui4AAADAdV0AAACA65rlVzQLAAAA8MG6/JIuAAAAwEfrAgAAAFzXBQAAALiuCwAAAHBdFwAAAOC6LgAAAMB1XQAAAIDrugAAAADXdQEAAACu6wIAAABc1wUAAAC4rgsAAABwXRcAAADgui4AAADAdV0AAACA67oAAAAA13UBAAAArusCAAAAXNcFAAAAuK4LAAAAcF0XAAAA4LouAAAAwHVdAAAAgOu6AAAAANd1AQAAAK7rAgAAAFzXBQAAALiuCwAAAHBdFwAAAOC6LgAAAMB1XQAAAI...and so on