# Mermaid Support for Envelope
## by Wolf McNally, Blockchain Commons
These examples compare a series of Gordian Envelopes output first in "envelope notation" and then in [Mermaid](https://mermaid-js.github.io/mermaid/#/) format.
### Plaintext
```
```
```mermaid
graph LR
1["886a0c85<br/>#quot;Hello.#quot;"]
style 1 stroke:blue,stroke-width:3.0px
```
* Leaf elements (elements having no children) have blue outlines.
* CBOR leaf elements (like strings, but they can be of any complexity) are represented by rectangles.
* The digests shown in each element are the first four bytes of the 32-byte digest associated with each element.
* Every element you see is *itself* an envelope that can be extracted and manipulated. If two digests match, the contents of the envelopes they represent also necessarily match.
### Signed Plaintext
```
"Hello." [
verifiedBy: Signature
]
```
```mermaid
graph LR
1(("c3915ed3<br/>NODE"))
2["886a0c85<br/>#quot;Hello.#quot;"]
3(["5f656bf5<br/>ASSERTION"])
4[/"d59f8c0f<br/>verifiedBy"/]
5["9f388294<br/>Signature"]
1 -->|subj| 2
1 --> 3
3 -->|pred| 4
3 -->|obj| 5
style 1 stroke:red,stroke-width:3.0px
style 2 stroke:blue,stroke-width:3.0px
style 3 stroke:red,stroke-width:3.0px
style 4 stroke:blue,stroke-width:3.0px
style 5 stroke:blue,stroke-width:3.0px
linkStyle 0 stroke:red,stroke-width:2.0px
linkStyle 1 stroke-width:2.0px
linkStyle 2 stroke:green,stroke-width:2.0px
linkStyle 3 stroke:blue,stroke-width:2.0px
```
* Internal elements (elements with children) are represented with red outlines.
* A `NODE` element appears when one or more assertions are present on a subject. They are represented by circles. They have one arm for the `subject` and an additional arm for each assertion.
* An `ASSERTION` element is represented by the Mermaid `stadium` shape, and has exactly two arms: `predicate` and `object`.
* Well-known predicates like `verifiedBy` are represented by trapezoids, and are encoded as short integers.
### Encrypted Subject
```
ENCRYPTED [
"knows": "Bob"
]
```
```mermaid
graph LR
1(("e54d6fd3<br/>NODE"))
2>"27840350<br/>ENCRYPTED"]
3(["55560bdf<br/>ASSERTION"])
4["7092d620<br/>#quot;knows#quot;"]
5["9a771715<br/>#quot;Bob#quot;"]
1 -->|subj| 2
1 --> 3
3 -->|pred| 4
3 -->|obj| 5
style 1 stroke:red,stroke-width:3.0px
style 2 stroke:blue,stroke-width:3.0px,stroke-dasharray:5.0 5.0
style 3 stroke:red,stroke-width:3.0px
style 4 stroke:blue,stroke-width:3.0px
style 5 stroke:blue,stroke-width:3.0px
linkStyle 0 stroke:red,stroke-width:2.0px
linkStyle 1 stroke-width:2.0px
linkStyle 2 stroke:green,stroke-width:2.0px
linkStyle 3 stroke:blue,stroke-width:2.0px
```
* `ENCRYPTED` and `ELIDED` elements appear with dotted outlines in the Mermaid output, to indicate that they may be replaced with their unencrypted/unelided counterparts without invalidating the digest tree.
* `ENCRYPTED` elements are represented by the Mermaid `asymmetric` shape.
### Elided Object
```
"Alice" [
"knows": ELIDED
]
```
```mermaid
graph LR
1(("e54d6fd3<br/>NODE"))
2["27840350<br/>#quot;Alice#quot;"]
3(["55560bdf<br/>ASSERTION"])
4["7092d620<br/>#quot;knows#quot;"]
5{{"9a771715<br/>ELIDED"}}
1 -->|subj| 2
1 --> 3
3 -->|pred| 4
3 -->|obj| 5
style 1 stroke:red,stroke-width:3.0px
style 2 stroke:blue,stroke-width:3.0px
style 3 stroke:red,stroke-width:3.0px
style 4 stroke:blue,stroke-width:3.0px
style 5 stroke:blue,stroke-width:3.0px,stroke-dasharray:5.0 5.0
linkStyle 0 stroke:red,stroke-width:2.0px
linkStyle 1 stroke-width:2.0px
linkStyle 2 stroke:green,stroke-width:2.0px
linkStyle 3 stroke:blue,stroke-width:2.0px
```
* `ELIDED` elements are represented by dotted hexagons.
* Note that the digest of the element "Bob" in the previous example matches the digest of the elided element above.
* Likewise, note that the digest of the subject "Alice" matches the encrypted version in the previous example.
* In fact, *all* the digests in this envelope match those in the previous example, indicating that the unencrypted/unelided form of this envelope has the exact same content.
### Top-Level Assertion
```
"knows": "Bob"
```
```mermaid
graph LR
1(["55560bdf<br/>ASSERTION"])
2["7092d620<br/>#quot;knows#quot;"]
3["9a771715<br/>#quot;Bob#quot;"]
1 -->|pred| 2
1 -->|obj| 3
style 1 stroke:red,stroke-width:3.0px
style 2 stroke:blue,stroke-width:3.0px
style 3 stroke:blue,stroke-width:3.0px
linkStyle 0 stroke:green,stroke-width:2.0px
linkStyle 1 stroke:blue,stroke-width:2.0px
```
* As mentioned previously, all of the element types are themselves envelopes, and can therefore stand alone. In this case, we have extracted a single assertion.
### Signed Subject
```
"Alice" [
"knows": "Bob"
"knows": "Carol"
verifiedBy: Signature
]
```
```mermaid
graph LR
1(("efed9563<br/>NODE"))
2["27840350<br/>#quot;Alice#quot;"]
3(["55560bdf<br/>ASSERTION"])
4["7092d620<br/>#quot;knows#quot;"]
5["9a771715<br/>#quot;Bob#quot;"]
6(["71a30690<br/>ASSERTION"])
7["7092d620<br/>#quot;knows#quot;"]
8["ad2c454b<br/>#quot;Carol#quot;"]
9(["dbb0ad16<br/>ASSERTION"])
10[/"d59f8c0f<br/>verifiedBy"/]
11["858d19e2<br/>Signature"]
1 -->|subj| 2
1 --> 3
3 -->|pred| 4
3 -->|obj| 5
1 --> 6
6 -->|pred| 7
6 -->|obj| 8
1 --> 9
9 -->|pred| 10
9 -->|obj| 11
style 1 stroke:red,stroke-width:3.0px
style 2 stroke:blue,stroke-width:3.0px
style 3 stroke:red,stroke-width:3.0px
style 4 stroke:blue,stroke-width:3.0px
style 5 stroke:blue,stroke-width:3.0px
style 6 stroke:red,stroke-width:3.0px
style 7 stroke:blue,stroke-width:3.0px
style 8 stroke:blue,stroke-width:3.0px
style 9 stroke:red,stroke-width:3.0px
style 10 stroke:blue,stroke-width:3.0px
style 11 stroke:blue,stroke-width:3.0px
linkStyle 0 stroke:red,stroke-width:2.0px
linkStyle 1 stroke-width:2.0px
linkStyle 2 stroke:green,stroke-width:2.0px
linkStyle 3 stroke:blue,stroke-width:2.0px
linkStyle 4 stroke-width:2.0px
linkStyle 5 stroke:green,stroke-width:2.0px
linkStyle 6 stroke:blue,stroke-width:2.0px
linkStyle 7 stroke-width:2.0px
linkStyle 8 stroke:green,stroke-width:2.0px
linkStyle 9 stroke:blue,stroke-width:2.0px
```
* A signature signs only the digest of the subject, in this case "Alice". So in this case, the "knows" assertions are not signed.
* Note that for every internal element, the children are displayed in the order that their digests are combined to form the parent's digest. In particular a `NODE`'s, `ASSERTION` elements are ordered by ascending digest value, so the order of the three assertion digests here: `3ed95464`, `55560bdf`, `71a30690` reflects that ascending order.
### Elided Assertions
```
"Alice" [
ELIDED (3)
]
```
```mermaid
graph LR
1(("efed9563<br/>NODE"))
2["27840350<br/>#quot;Alice#quot;"]
3{{"55560bdf<br/>ELIDED"}}
4{{"71a30690<br/>ELIDED"}}
5{{"dbb0ad16<br/>ELIDED"}}
1 -->|subj| 2
1 --> 3
1 --> 4
1 --> 5
style 1 stroke:red,stroke-width:3.0px
style 2 stroke:blue,stroke-width:3.0px
style 3 stroke:blue,stroke-width:3.0px,stroke-dasharray:5.0 5.0
style 4 stroke:blue,stroke-width:3.0px,stroke-dasharray:5.0 5.0
style 5 stroke:blue,stroke-width:3.0px,stroke-dasharray:5.0 5.0
linkStyle 0 stroke:red,stroke-width:2.0px
linkStyle 1 stroke-width:2.0px
linkStyle 2 stroke-width:2.0px
linkStyle 3 stroke-width:2.0px
```
* This is the same envelope from the previous example with its assertions elided. Note that the digests at every level still present are all the same.
### Wrapped Then Signed
```
{
"Alice" [
"knows": "Bob"
"knows": "Carol"
]
} [
verifiedBy: Signature
]
```
```mermaid
graph LR
1(("fde86f77<br/>NODE"))
2[/"3cc750a3<br/>WRAPPED"\]
3(("c733401e<br/>NODE"))
4["27840350<br/>#quot;Alice#quot;"]
5(["55560bdf<br/>ASSERTION"])
6["7092d620<br/>#quot;knows#quot;"]
7["9a771715<br/>#quot;Bob#quot;"]
8(["71a30690<br/>ASSERTION"])
9["7092d620<br/>#quot;knows#quot;"]
10["ad2c454b<br/>#quot;Carol#quot;"]
11(["ab430e79<br/>ASSERTION"])
12[/"d59f8c0f<br/>verifiedBy"/]
13["2a13e7f6<br/>Signature"]
1 -->|subj| 2
2 -->|subj| 3
3 -->|subj| 4
3 --> 5
5 -->|pred| 6
5 -->|obj| 7
3 --> 8
8 -->|pred| 9
8 -->|obj| 10
1 --> 11
11 -->|pred| 12
11 -->|obj| 13
style 1 stroke:red,stroke-width:3.0px
style 2 stroke:red,stroke-width:3.0px
style 3 stroke:red,stroke-width:3.0px
style 4 stroke:blue,stroke-width:3.0px
style 5 stroke:red,stroke-width:3.0px
style 6 stroke:blue,stroke-width:3.0px
style 7 stroke:blue,stroke-width:3.0px
style 8 stroke:red,stroke-width:3.0px
style 9 stroke:blue,stroke-width:3.0px
style 10 stroke:blue,stroke-width:3.0px
style 11 stroke:red,stroke-width:3.0px
style 12 stroke:blue,stroke-width:3.0px
style 13 stroke:blue,stroke-width:3.0px
linkStyle 0 stroke:red,stroke-width:2.0px
linkStyle 1 stroke:red,stroke-width:2.0px
linkStyle 2 stroke:red,stroke-width:2.0px
linkStyle 3 stroke-width:2.0px
linkStyle 4 stroke:green,stroke-width:2.0px
linkStyle 5 stroke:blue,stroke-width:2.0px
linkStyle 6 stroke-width:2.0px
linkStyle 7 stroke:green,stroke-width:2.0px
linkStyle 8 stroke:blue,stroke-width:2.0px
linkStyle 9 stroke-width:2.0px
linkStyle 10 stroke:green,stroke-width:2.0px
linkStyle 11 stroke:blue,stroke-width:2.0px
```
* In this case the signature still only signs the subject, but the subject is an entire envelope that's been wrapped.
* `WRAPPED` elements are represented by trapezoids. They have exactly one arm, which is the root of the wrapped envelope.
### Encrypt to Recipients
```
ENCRYPTED [
hasRecipient: SealedMessage
hasRecipient: SealedMessage
]
```
```mermaid
graph TB
1(("fd42b5f0<br/>NODE"))
2>"886a0c85<br/>ENCRYPTED"]
3(["6c23d690<br/>ASSERTION"])
4[/"f4af70d6<br/>hasRecipient"/]
5["b2aa6ce6<br/>SealedMessage"]
6(["f99f7424<br/>ASSERTION"])
7[/"f4af70d6<br/>hasRecipient"/]
8["93c8e2de<br/>SealedMessage"]
1 -->|subj| 2
1 --> 3
3 -->|pred| 4
3 -->|obj| 5
1 --> 6
6 -->|pred| 7
6 -->|obj| 8
style 1 stroke:red,stroke-width:3.0px
style 2 stroke:blue,stroke-width:3.0px,stroke-dasharray:5.0 5.0
style 3 stroke:red,stroke-width:3.0px
style 4 stroke:blue,stroke-width:3.0px
style 5 stroke:blue,stroke-width:3.0px
style 6 stroke:red,stroke-width:3.0px
style 7 stroke:blue,stroke-width:3.0px
style 8 stroke:blue,stroke-width:3.0px
linkStyle 0 stroke:red,stroke-width:2.0px
linkStyle 1 stroke-width:2.0px
linkStyle 2 stroke:green,stroke-width:2.0px
linkStyle 3 stroke:blue,stroke-width:2.0px
linkStyle 4 stroke-width:2.0px
linkStyle 5 stroke:green,stroke-width:2.0px
linkStyle 6 stroke:blue,stroke-width:2.0px
```
* Top-to-bottom layout is also supported.
### Complex Metadata
```
Digest(e8aa201d) [
"format": "EPUB"
"work": CID(7fb90a9d) [
"author": CID(9c747ace) [
dereferenceVia: "LibraryOfCongress"
hasName: "Ayn Rand"
]
"isbn": "9780451191144"
dereferenceVia: "LibraryOfCongress"
hasName: "Atlas Shrugged" [
language: "en"
]
hasName: "La rebelión de Atlas" [
language: "es"
]
isA: "novel"
]
dereferenceVia: "IPFS"
]
```
* **NOTE: Click the diagram to examine it in a larger window.**
[](https://mermaid.live/edit#pako:eNqdmOFu2zYQx1_F0L6kQNryjqRIekOBrsmAAEFSNNs-rN4HSqQcr46UyfLarO1T7RH2YpOoKKW8aNUtQAD7fPe_f-5HnpJ8TPLK-WSZrGt7e704f7MqF-0XHB2tEoWF81bL77L6-YuLy5PTVfLkSf85vl0lPmepkhLDxyebtd81R15biwzck1Xya5_Jj9pUBVJxn4uQ-vLq6vTNj2eXF23OvZx4-3yVFGAgT70NSc7Xvmi_y9z_vLGr5Pm9nGzVDDJnW72Q-M3v-6r59uz1D1f9q4fGadc4Ry1Tm7mpxqrNETrLwBVpJFdU9Y1tDgR119oWWZZJEeWevv7p-4NM07X21ipUCFOtgbVJ2lswmdGR3vuqfnegBwFHoZjzUvBHcEDHQ3GBkvl-LK_OTo5UkRlmTQQDAg0mTJa5NJ10Nh8HdDwyITUTUkY_xPkmq219d1m8qsp17Xe7w58o0IHCMM0YThrp8Didg0zTIlK3--a6qg8ldTekTEImucwfG5Jp1ThLrXQqfRiSyZVQNvdfhoRszpAQZg8J8f8NCQMtr4SAQuWTRgKtrIA09bI_6Nd2d2FvfOSgwySzTAAHHjl4eVcu3tjSHTYOdAz4XEvDJhurGY0DFGlyh8qYxxZJB8W0QEwqbOys2drd4uq63q_X_tAf7wmh496gn_LHAyEp0xyE7W_s1pbrvV1HBnnHRjCTSW3iyfjysGeAkQNDkzE12TPA0EYjl6KfyWb3MmoX9hdLU-d1HrUrqz_89rBjv8FAaenBTnacQYEHCkwA5u2BfYQC7yhIK9AxFu-2c7uofea3m7__KhfOLwKVA5siwLASBW_P1-SGnwNDdDCcw0K3A4ph_KtnfzOKjLFCTh4AIbp7Z6RDLUwkt9llh3RFxwW9dsK7uLNR3aWF9paDEIcLZ_H06YtPu33226cFRqEFvx9q-Py29u7TQsShqquQcUV6_8iKKlQcChU6rjD3T5qoAlgcCyUAwwMk8goYB9tnwvBsiLXEKNiLyXFdOqzyuE6Ngn3dYFzHJkwcbHfusHsjMYRRMIghjuv4sCrjOjEK9nVj85gOmy6uU6NgX6eHRRbTNnGwXUfDWorEOIyCQYyPJ8-HgxKb52IU7OvG5nk6LIi4To2CfZ0e7n9knps42F7f4RrHxxVGwSAmxuYFH65iXCdGwb7u3vyuudv69vTumrp655dt_nH_8un7jWuul_wZu_0Qp-KQmm33_iu5fL6sIMhKQm4634IiyGpCrplvARhBFwjUgIINCNyAAg4o5ICADijsQBOEDUEYGeEaAUWYQg8J9JBCDyn0kEAPKfSQQA8p9DiBHqfQ46SVSaDHKfQ4hR4n0OMUepxAj1PoCQI9QaEnKPQE5YlHoSfm0dtuyndXoWB6HPhY-jCR_8p5GET7V7EvZ4jyac-P5osZJiTVREo0oWaY0FQThmgCqPjm8AMyQKAShDkIgcwQqBC__D4wc356jm9D9Y2M6Btn3UMyR6RyxDkckcwRqRyRyBHncEQyR07lyOdw5PSFSuXI53DkZI6cypETOfI5HDmZo6ByFHM4CjJH8XWOyXFy4-sbu3HJMvnYCayS5tp3_z9cti-dL-x-26ySVfm5Td3fOtv4U7dpqjpZFna788eJ3TfV1V2ZPwT6rJONXdf25iF6a8tfqqp939T7_m2y_Jh8SJapemak4UwoBCZBw3FylyzZ5-Pkz5APn_8BeTlkaA)
### Verifiable Credential
```
{
CID(4676635a) [
"certificateNumber": "123-456-789"
"continuingEducationUnits": 1.5
"expirationDate": 2028-01-01
"firstName": "James"
"issueDate": 2020-01-01
"lastName": "Maxwell"
"photo": "This is James Maxwell's photo."
"professionalDevelopmentHours": 15
"subject": "RF and Microwave Engineering"
"topics": CBOR
controller: "Example Electrical Engineering Board"
isA: "Certificate of Completion"
issuer: "Example Electrical Engineering Board"
]
} [
note: "Signed by Example Electrical Engineering Board"
verifiedBy: Signature
]
```
* **NOTE: Click the diagram to examine it in a larger window.**
[](https://mermaid.live/edit#pako:eNqtVttu20YQ_RWCfagD2M7eL2oRIIlVNEXjBHaKAo36sOQubbYSqVJUYjfJv5dLitJSNR1OUUOApdlzZg93Zs7yU5yW1sWz-KYy69vo56tFETV_-ORkEYtESS2o_j6pnj67fHMxX8RPnnTr5P3TRWwTK5GT3fqvV8_fvp1fLOLF4vcOQ32ORHJkGM8eyMHeN8vWUiYta5dfvro4YUIKQbl5soh3afhJg0OcCpNZ1eKeX1_Pr969enPZYHa5RIMxUmOLUtlivvlrW9bfrW_Luuy-7vPJBqqdlEkiUQB9d5tvoubzk1m5TfTa3H10y-W3m6hNcX6UQ3lN2HKtUsHHNOkG4xJBFBU22GhpNvVls8lRSoy8Li0NciSE75Qco7FXQFmmMmnpmAJM_BFjh4nlKsiZbzZbd2Hqf2mgDZ5wjFNku4oRRNAZws3nAGLt1hYhK1g2ujX3HUIynThHOlRaFnVVLpeuWsRP-2S-cAxRnrAkfOr5nVmtly6aL11aV3lqltG8uMkL56q8uIlelKayx-Kl18WYpELr8SNRbTcJjjVlwYZ1uc7TzXFKX0IimHF9mV--eHO1Xyao3VFYkWbOjO1IsD8JpRWhnHXPmG-eH46A-CJhTBxJbRIoeumqOs-aR69dVGbRy9IfSJ2XxZFIQlsVRugsNaPPTdppE5Y7g3Cwiy9KXmybQ53bbbNXk_-XIq-PT4Jwf2zECEyFaOn4nB9WhZfAeTPnwpFRCdIfhOYsVZSL3UE0jRi0A1H_WzsQ7TUJLJRuJn1ME_VT50RKNB1Mnbtb51V7Gg-MCcX-LDV2zmDVj4k6GhNK_P4GEcksTkf39xMnSIoMES4sy6H4l9tV4qpjCb6cJkUJE9wEPEzoGePiTCp9zGh91LJMSGX0qB4_jymznBIankeWVw-6FvVummROW6rD5m1d9BjbuqZDSCIlxagCP3PIJVRRHQ7oZpv80RT_KCfz9UsQ1wnKSIC--iEyhY1e52lVfjQfXNguxylaK3VaJITZ0YNhfkpTlWIjbHgw66rM3GbTNIpZXrgPblmuV66ofyy31fHzM19rlGQi0bxzE3wYIda6KiPNHYfEqJew1lWbeydTKepc9UPzTFnu7Iv7wxgxX0WbZoZR1HXVdX5TmHpbucOGrV2azBGK09H-ZMpvKHCWCCO6Ahdl7YKtfLkylmQI4yw4F7-hs1FyH_0XK4_Ozp599hX_HJHdOAchuuuUIMSCUMR3Lw7t-rpy9nMkwlDpGTJkqN21HjB0GGoZGIUUjPubOCBhMgh2NDqgsf4WDWl8EOxoYkCT_SUX0tQg2NF0SCOov6kCGsGDYEsjZECj_dUS0tgg2NH4gCb66yCkyUGwo6kBTfeOHdAoGgRbGsUhjfaSSUijg2BHGzQH7SWH7UHFINjRBh1Ce8lhj1A9CLY0NugShnuTCWiMDIIdjQat37hB7wohjQ-CHU0MaLKf7ZCmBsGOthO-qe-bycTN_6r8080a_Gn39exjbuvbGT1H67sQSqZD6XQo66HJcuu-guXT0wpAWgnAqukSNCAtRhAwoGiYQBJTCJgBVHBIYkjtsASoUJDEkPIRBBgjDEkMKR8BjB2BzB2BlI8IgArI6BFI-YgGuBVk-CikfBTimZDho5DyUYBvUsjwUUj5KMA6KWT4GKR8DOCdDDJ8DFI-BvBOBhk-BikfA3gngwwfm1a-ZV78ed0Sxu2TPATHMDiBwftCPobZ1--mcq6YkPSRIj6IFxNESKgIBRShJ4g4vLlMVYExUMb-HeZREAXrYFAdfIoOAdYhoTrUFB0aqoMgoI79m8yjIALWQaE62BQdHKxDQHXIKToUWIcG6ti_zzwKwlAdlEB1THFSCrZSCvVSOsVMKdhNKdRO6RQ_ZWA_ZVA_ZVP8lIH9lEH9lE3xUwb2U_Z1P41P45WrVia38Sz-5BMs4vrWrdwinjVfrcvMdlkv4kXxpYFu19bUbm7zuqziWWaWG3cam21dXt8X6T7QoS5yc1OZ1T66NsVvZdn8rqtt9zOefYrv4hk6je_jGdb0XCnFpeCYcYkk_XIa_90S8Jd_AN_xZGo)
### Warranty
This is the same credential above that has been elided, had additional assertions added, and then been signed by the employer.
```
{
{
{
CID(4676635a) [
"expirationDate": 2028-01-01
"firstName": "James"
"lastName": "Maxwell"
"subject": "RF and Microwave Engineering"
isA: "Certificate of Completion"
issuer: "Example Electrical Engineering Board"
ELIDED (7)
]
} [
note: "Signed by Example Electrical Engineering Board"
verifiedBy: Signature
]
} [
"employeeHiredDate": 2022-01-01
"employeeStatus": "active"
]
} [
note: "Signed by Employer Corp."
verifiedBy: Signature
]
```
* **NOTE: Click the diagram to examine it in a larger window.**
[](https://mermaid.live/edit#pako:eNqtVu9v2zYQ_VcM7UsKJCnJO5KiNxRoGw_r0F9IBgxYvQ-USCVaHduT5TRZmv99pGQllGcn4pAgQazzu-Mj37ujbpN8YWwyTs4rvbwYvT-dzkfuhx4cTBObE0g1hZ-y6uWrj59OJtPkxYv2e_bl5TTRNGU2zbD5_vfT158_T06myXT6Z4sBX4MaK43JyY4a6GsQsNwIVeypwX0NaWhm5c4awtcwmZHESrWnhvQ1MsmJRl7sqJF-cV8bAyhNu5W3704OUEghgOsX02RTRt3eOrochC5M2uAm79-d-JXu7jaHRg6--B1zleaCN5DXZ2eT09_effroymyWo9SBbCZYCsI0oB_-Xi_qH2d6VX_Ul7Z9ul-WMgdXSmpiWQj_oK-_2dlsGw2eJWCRFtLAbpbYQAwhRmCxG8I9BFGCUGpPFeH3isKIvLB6716l1ydVKQOOLfty9XqavOzo-rOnlFmWmyzY3Ftb1WVR5rq2o0Uxeru4XM5sXS7m29ttREHtDJTr3URZIwrnTnth2T6ijHqiimOeAhcboqu1rR64Mi8EEuAZZqEQk2vt2Y0mM5vXleM8G03m5-Xc2qqcn4_eLHRltmgz8JwEFanKMrmXE3qjiJwp6Clvr5dlpf1pnLjz2S7NvZsVtdZ1Z5PECEuPCHW_DyDhj00TJtHQfPexSU_RYCFkqtVeil6_HA0HBiHFoqx2mpkpz66wyoAK9f7VQVdbWGiEs4RIkkqxjwH4biI2gxQUBhVX6-wvp8d2Ta9hRrjKSMEC9OnPIz03ow9lXi2-6SsbKrhdoukwq0TG0KidZwfomcu80FLJvfICb2YXV0Wak7YPr9yCRWnNm5sH24HwtuNMaSnbmXJWns91va7sA6dGLF1YBjTP9y6Y-gUFLTKhRXv680Vtg6W8OgVmBaG0CE7HL2jNKLsZ_Q-vYyMjUJI5uxX7uKGXsVDIrOU89LpbbnFj7VntdrztEGxGI1U2S3noPp3X5dW29bDpOa4IzZyj9vLwPUcBNZUEd_D4pays2dF26NuOYU4l5LxrO7bVdijaoxCkIGavTCgH-QJ967EMWa43I-S_vkDVzBlMM5bnsG9BTp7wBafNqPfOMHK3L9rjqdykrpbH20N6dHT06rtvyO8jtpkDQQg25gtCuKEfhPiGShASm1eAICQ3N34QSoPQSIUPlHTXdgNfOmW_u9u5F1z4EpT10qD3hL0n3nsS3V0ZLiB7wXaBHknaY8lId48FRRjtBZsirMeSQXfVhGnYC7ZpPcpM9J5kdxmERdJesC3Sowykm-BBGtBesEmDHmWAQGM3RLthGhbhvWBbRPTSZDcSw7S0F2zTVOA7N6W6aRWkIe0FmzRkvTTohkuYhr1gm8aDXnCDoBsIYZrsBdu0tJemurYO0jjpBZs0viG-qm_csKbuf7X4ascOf9h-PPpWmvpiDMdkeR1C2XAoDIficCgfDhXDoXI4NO2g2Wxtn8CqJ7BdyOjVha4qfTPmx2Tk_nrqkOHkKI1gR1kMGJ5lL_gsVfizVInwB5UxRxVjEfosHmERHmExHmExHmERLc8wpjCPAYtnOdGIkcBiBGcqAgwRukKMrhCjKzxL70PElIcYwUHEgCN0hRhdIUZXjNAVY3TFGF0x5oqO6VeMkQ8j5jDGzGGMkQ9VxDsIiSjMh8k3K-dfz5qE_dZgu-A0Ds7i4BAHxzg4j4OLOHjnlccw6QDMvTPOK2vnQyR5xB-7E-gAGveva4-CYAgIh4B49LZF7LaHKESHSESjNWKxGrEhGj28Lg3mAbE8hoh3_8L0KEhEk5WxZIeIx6LFg1jxYIh4MKTBHt6FBpPFWLJDxINo8SBWPBgiHkSLh7Hi4RDxMLrzMLbzcEjnYfTYxNixiUPG5sPLz2Ae6kkeyWFyaatLXZpknNz6AtOkvrCXdpqM3UdjC72e1dNkOr9z0PXS6NpOTFkvqmRc6NnKHiZ6XS_Obub5faBFnZT6vNKX99Glnv-xWLjnulq3j8n4NrlOxuQwuUnGVMFxmqZcCk6RSyLh7jD5p0mgd_8CMWyxKw)