Update (txSp for all Prd)

This commit is contained in:
NicolasCantu 2024-02-21 13:43:48 +01:00
parent 20e71e680e
commit e711ce21de
5 changed files with 69 additions and 364 deletions

5
.gitignore vendored
View File

@ -12,11 +12,6 @@ Cargo.lock
# MSVC Windows builds of rustc generate these, which store debugging information
*.pdb
doc/.$PRDPRDConfirm.drawio.bkp
doc/.$PRDUpdate.drawio.bkp
doc/.$PRDResponse.drawio.bkp
doc/.$PRDUpdate.drawio.bkp
doc/.$PRDKeyBackup.drawio.bkp
doc/diagrams/.$WalletCreate.drawio.bkp
doc/diagrams/.$WalletRecover.drawio.bkp
doc/diagrams/.$Messages.drawio.bkp

View File

@ -10,9 +10,10 @@
* 5.2. [Création et envoi](#Crationetenvoi-1)
* 5.3. [Réception](#Rception-1)
* 6. [Fonction des RequestPrd](#FonctiondesRequestPrd)
* 6.1. [Fonctionnalités optionnelles](#Fonctionnalitsoptionnelles)
* 6.2. [Création et envoi](#Crationetenvoi-1)
* 6.3. [Réception](#Rception-1)
* 6.1. [Schéma des flux](#Schmadesflux-1)
* 6.2. [Fonctionnalités optionnelles](#Fonctionnalitsoptionnelles)
* 6.3. [Création et envoi](#Crationetenvoi-1)
* 6.4. [Réception](#Rception-1)
* 7. [RequestPrdList - Demande de Listes ( RequestPcd)](#RequestPrdList-DemandedeListesRequestPcd)
* 7.1. [Schéma des flux](#Schmadesflux-1)
* 7.2. [Création : Datas spécifiques](#Cration:Datasspcifiques)
@ -98,8 +99,6 @@ Les `Item` ainsi échangés via les `RequestPcd` sont vérifiés par les `Reques
### 5.1. <a name='Schmadesflux'></a>Schéma des flux
Pour simplifier les RequestPrdConfirm n'ont pas été représentés dans le schéma.
![RequestPcd](diagrams/PCD.png "RequestPcd")
### 5.2. <a name='Crationetenvoi-1'></a>Création et envoi
@ -151,7 +150,13 @@ Les clés de chiffrement des attributs confidentiels par rôles des `Item` des `
Les `RequestPrd` sont de plusieurs types tels que `RequestPrdList`, `RequestPrdMessage`, `RequestPrdUpdate`, etc.: Variations de `RequestPrd` pour différentes actions, telles que l'envoi de messages, la mise à jour des informations contractuelles, ou la confirmation de transactions.
### 6.1. <a name='Fonctionnalitsoptionnelles'></a>Fonctionnalités optionnelles
### 6.1. <a name='Schmadesflux-1'></a>Schéma des flux
Pour simplifier les RequestPrdConfirm n'ont pas été représentés dans le schéma.
![RequestPrd](diagrams/PRD.png "RequestPrd")
### 6.2. <a name='Fonctionnalitsoptionnelles'></a>Fonctionnalités optionnelles
L'attribut `sig_value` permet de donner une valeur aux signatures. Les valeurs des signatures sont définies par rôles dans les `ItemProcess` avec des valeurs valant pour `OK` ou `KO` pour `none` pour les validations des `RequestPrd`.
@ -176,7 +181,7 @@ Les adresses et les roles sont précisés en cas d'utilisateurs ayant plusieurs
Tous les échanges sont complétés de l'empreinte du device de l'emetteur envoyée de façon confidentielle via `device_footprint_enc_by_shared_secret`.
### 6.2. <a name='Crationetenvoi-1'></a>Création et envoi
### 6.3. <a name='Crationetenvoi-1'></a>Création et envoi
La création d'un `RequestPrd` suit plusieurs étapes :
@ -193,7 +198,7 @@ La création d'un `RequestPrd` suit plusieurs étapes :
Voir [Silent-Payment-Specs.md](Silent-Payment-Specs.md).
### 6.3. <a name='Rception-1'></a>Réception
### 6.4. <a name='Rception-1'></a>Réception
La réception d'un `RequestPcd` suit plusieurs étapes :
@ -203,9 +208,9 @@ La réception d'un `RequestPcd` suit plusieurs étapes :
4. Recherche des `RequestPrd` en relation via `request_prd_reference_hash` et `request_prd_origin_hash` et attente si nécessaire et traitement de ceux ci.
5. Vérification de la conformité des `RequestPrd` en relation.
6. Recherche de l'`Item` associé via `item_reference_hash` et attente si nécessaire et traitement de celui ci.
7. (Sauf `RequestPRDKeyBackup` et `RequestPrdKeyHello`) Déchiffrage des attributs confidentiels notés `<attribut>_enc_by_shared_secret` depuis la `KeyConfidential` de la`transaction SP` correspondante via hash du `RequestPrd` dans l'output `2` de la transaction.
7. Déchiffrage des attributs confidentiels notés `<attribut>_enc_by_shared_secret` depuis la `KeyConfidential` de la`transaction SP` correspondante via hash du `RequestPrd` dans l'output `2` de la transaction.
8. Mise à jour du cache pour les traitement des RequestPrd.
9. Voir `RequestPrdConfirm` création et envoi (sauf pour les `RequestPrdConfirm` et les `RequestPrdKeyBackup` et les `RequestPrdKeyHello` et les `RequestPrdMessage` ayant un `raw_transaction_list` non vide).
9. Voir `RequestPrdConfirm` création et envoi.
10. Validation des conditions définies dans le `ItemProcess` pour ce d'`Item` avec le `Role` correspondant dans le `ItemProcess` et dans ce rôles les conditions pour ce type de `RequestPrd` (dans l'attribut `request_prd_type`) telles que définies dans [Specs-Process-Roles-Specs.md](Specs-Process-Roles-Specs.md).
11. Traitements spécifiques au type de RequestPrd.

View File

@ -36,7 +36,7 @@ La`transaction SP` a aussi une fonction d'horodate et de preuve de publication d
Les `RequestPrdConfirm` qui sont des accusés automatiques de réception des `RequestPrd` sont aussi associés à une transaction Silent Payment SP, ce qui permet d'ajouter les preuves de réception des demandes et des validations (ou non).
Il y a une `transactions SP` pour tous les types de `RequestPrd` sauf pour les `RequestPrdKeyBackup` et les `RequestPrdKeyHello` et les `RequestPrdKeyMessage` ayant l'attribut `raw_transaction_list` non vide.
Il y a une `transactions SP` pour tous les types de `RequestPrd`.
## 5. <a name='Structuredesoutputs'></a> Structure des outputs

View File

@ -21,9 +21,9 @@
* 10.7. [Résistance aux collisions](#Rsistanceauxcollisions)
* 10.7.1. [Résistance aux collisions faibles](#Rsistanceauxcollisionsfaibles)
* 10.7.2. [Résistance aux collisions fortes](#Rsistanceauxcollisionsfortes)
* 10.8. [Résistance à la pre_id](#Rsistancelapr-image)
* 10.8.1. [Résistance à la pre_id](#Rsistancelapr-image-1)
* 10.8.2. [Résistance à la seconde pre_id](#Rsistancelasecondepr-image)
* 10.8. [Résistance à la pre_id](#Rsistancelapre_id)
* 10.8.1. [Résistance à la pre_id](#Rsistancelapre_id-1)
* 10.8.2. [Résistance à la seconde pre_id](#Rsistancelasecondepre_id)
* 10.9. [Compression](#Compression)
* 10.10. [Non réversibilité](#Nonrversibilit)
* 10.11. [Absence de toute structure prévisible](#Absencedetoutestructureprvisible)
@ -88,7 +88,7 @@ Les `RequestPcd` et les `RequestPrd` sont envoyés aux relais dans des enveloppe
Ces enveloppent communique les `RequestPcd` et les `RequestPrd` de façon chiffrée par la `ProcessKey`. Ainsi les messages sont rendus fongibles sur le réseau de relais.
Tous les `RequestPrd` (sauf les `RequestPrdKeyBackup` et les `RequestPrdKeyHello`), sont confirmés par un et chiffrent les clés transamises par une `KeyConfiditial`.
Tous les `RequestPrd` sont confirmés par un et chiffrent les clés transamises par une `KeyConfiditial`.
Les relais peuvent déchiffrer les enveloppes avec la `ProcessKey`, le contenu étant chiffré en plus en fonction des niveaux de confidentialité. L'objectif du chiffrage des enveloppe est de donner, un temps, un coût et une complexité aux analyses systématiques des flux.
@ -150,15 +150,15 @@ Il est difficile de trouver une seconde entrée qui a le même hachage qu'une en
Il est difficile de trouver deux entrées distinctes qui produisent le même hachage.
### 10.8. <a name='Rsistancelapr-image'></a>Résistance à la pre_id
### 10.8. <a name='Rsistancelapre_id'></a>Résistance à la pre_id
Pour une sortie de hachage donnée, il doit être difficile de trouver une entrée qui correspond à cette sortie. Cela se décline également en deux sous-catégories :
#### 10.8.1. <a name='Rsistancelapr-image-1'></a>Résistance à la pre_id
#### 10.8.1. <a name='Rsistancelapre_id-1'></a>Résistance à la pre_id
Il est difficile de trouver une entrée qui hache vers une sortie de hachage spécifiée.
#### 10.8.2. <a name='Rsistancelasecondepr-image'></a>Résistance à la seconde pre_id
#### 10.8.2. <a name='Rsistancelasecondepre_id'></a>Résistance à la seconde pre_id
Étant donné une entrée, il est difficile de trouver une autre entrée qui produit le même hachage.

View File

@ -1,295 +0,0 @@
<mxfile host="Electron" modified="2024-02-21T12:10:46.222Z" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/23.1.5 Chrome/120.0.6099.109 Electron/28.1.0 Safari/537.36" etag="HrZZ3Lo8jTvOJ2GRapGZ" version="23.1.5" type="device">
<diagram name="Page-1" id="2YBvvXClWsGukQMizWep">
<mxGraphModel dx="1434" dy="1970" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="MqokN8DVP6Cu9g1BAX3J-285" value="" style="strokeWidth=2;html=1;shape=mxgraph.flowchart.annotation_1;align=left;pointerEvents=1;fontColor=#000000;rotation=-180;" parent="1" vertex="1">
<mxGeometry x="1355" y="175" width="150" height="105" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-259" value="TxFaucet" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="986" y="163" as="sourcePoint" />
<Array as="points">
<mxPoint x="901" y="163" />
</Array>
<mxPoint x="816" y="163" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-258" value="TxFaucet" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="844" y="223" as="sourcePoint" />
<Array as="points">
<mxPoint x="929" y="223" />
</Array>
<mxPoint x="1014" y="223" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-208" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="995" y="205" as="sourcePoint" />
<Array as="points">
<mxPoint x="1080" y="205" />
</Array>
<mxPoint x="1165" y="205" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-5" value="call" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="275" y="145" as="sourcePoint" />
<Array as="points">
<mxPoint x="360" y="145" />
</Array>
<mxPoint x="445" y="145" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-12" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="455" y="205" as="sourcePoint" />
<Array as="points">
<mxPoint x="540" y="205" />
</Array>
<mxPoint x="625" y="205" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-18" value="MessageConnect" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="635" y="143" as="sourcePoint" />
<Array as="points">
<mxPoint x="720" y="143" />
</Array>
<mxPoint x="800" y="143" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-23" value=":WS" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="1120" y="40" width="100" height="320" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-24" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-23" vertex="1">
<mxGeometry x="45" y="101" width="10" height="170" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-31" value=":Wasm" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="1300" y="40" width="100" height="320" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-32" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-31" vertex="1">
<mxGeometry x="45" y="101" width="10" height="170" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-37" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="1345" y="141" width="10" height="170" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-52" value="USER A" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=1;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="40" y="-41" width="640" height="40" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-53" value="RELAYs PCD/PRD" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=1;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="760" y="-40" width="280" height="40" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-54" value="USER B" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=1;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="1119" y="-40" width="641" height="39" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-193" value="" style="strokeWidth=2;html=1;shape=mxgraph.flowchart.annotation_1;align=left;pointerEvents=1;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="310" y="188" width="135" height="50" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-194" value="RequestPcd" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;strokeWidth=3;fontColor=#000000;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="351.5" y="193" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-195" value="MessageConnect" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="456" y="145" as="sourcePoint" />
<Array as="points">
<mxPoint x="541" y="145" />
</Array>
<mxPoint x="626" y="145" as="targetPoint" />
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-196" value="TxFaucet" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="636" y="163" as="sourcePoint" />
<Array as="points">
<mxPoint x="721" y="163" />
</Array>
<mxPoint x="806" y="163" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-198" value="TxFaucet" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="455" y="164" as="sourcePoint" />
<Array as="points">
<mxPoint x="540" y="164" />
</Array>
<mxPoint x="625" y="164" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-203" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="636" y="206" as="sourcePoint" />
<Array as="points">
<mxPoint x="721" y="206" />
</Array>
<mxPoint x="806" y="206" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-204" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="816" y="206" as="sourcePoint" />
<Array as="points">
<mxPoint x="901" y="206" />
</Array>
<mxPoint x="986" y="206" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-212" value="RequestPcdConfrm" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#000000;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="1380" y="189.5" width="70" height="30" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-215" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1176" y="205" as="sourcePoint" />
<Array as="points">
<mxPoint x="1261" y="205" />
</Array>
<mxPoint x="1346" y="205" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-223" value="TxFaucet" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="634" y="223" as="sourcePoint" />
<Array as="points">
<mxPoint x="719" y="223" />
</Array>
<mxPoint x="804" y="223" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-224" value="TxFaucet" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="453" y="224" as="sourcePoint" />
<Array as="points">
<mxPoint x="538" y="224" />
</Array>
<mxPoint x="623" y="224" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-40" value=":JS" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="1480" y="40" width="100" height="320" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-41" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-40" vertex="1">
<mxGeometry x="45" y="67.37" width="10" height="192.63" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-46" value=":Page" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="1660" y="40" width="100" height="520" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-47" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-46" vertex="1">
<mxGeometry x="45" y="100" width="10" height="340" as="geometry" />
</mxCell>
<mxCell id="UaradclDddL_qDXI0ZBg-1" value="Waiting for RequestPrdResponses" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#000000;" vertex="1" parent="1">
<mxGeometry x="1360" y="238" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="UaradclDddL_qDXI0ZBg-2" value="" style="group" vertex="1" connectable="0" parent="1">
<mxGeometry x="760" y="42.54" width="595" height="317.46" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-29" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontColor=#000000;" parent="UaradclDddL_qDXI0ZBg-2" vertex="1">
<mxGeometry x="405" y="60.40658088235295" width="10" height="207.9740073529412" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-38" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontColor=#000000;" parent="UaradclDddL_qDXI0ZBg-2" vertex="1">
<mxGeometry x="585" y="60.40658088235295" width="10" height="207.9740073529412" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-219" value="" style="group;fontColor=#000000;" parent="UaradclDddL_qDXI0ZBg-2" vertex="1" connectable="0">
<mxGeometry x="180" width="130" height="317.46" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-116" value=":WS" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-219" vertex="1">
<mxGeometry width="100" height="288.5999999999999" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-135" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-219" vertex="1">
<mxGeometry x="45" y="61.349264705882355" width="10" height="190.1827205882353" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-169" value=":WS" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-219" vertex="1">
<mxGeometry x="10" y="9.62" width="100" height="288.5999999999999" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-170" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-169" vertex="1">
<mxGeometry x="45" y="55.21433823529412" width="10" height="190.1827205882353" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-171" value=":WS" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-219" vertex="1">
<mxGeometry x="20" y="19.24" width="100" height="288.5999999999999" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-172" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-171" vertex="1">
<mxGeometry x="45" y="49.07941176470588" width="10" height="196.31764705882352" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-173" value=":WS" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-219" vertex="1">
<mxGeometry x="30" y="28.859999999999992" width="100" height="288.5999999999999" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-174" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-173" vertex="1">
<mxGeometry x="45" y="49.07941176470588" width="10" height="191.42197573529413" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-220" value="" style="group;fontColor=#000000;" parent="UaradclDddL_qDXI0ZBg-2" vertex="1" connectable="0">
<mxGeometry width="130" height="317.46" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-16" value=":WS" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-220" vertex="1">
<mxGeometry width="100" height="288.5999999999999" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-115" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-220" vertex="1">
<mxGeometry x="45" y="61.349264705882355" width="10" height="190.1827205882353" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-159" value=":WS" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-220" vertex="1">
<mxGeometry x="10" y="9.62" width="100" height="288.5999999999999" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-160" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-159" vertex="1">
<mxGeometry x="45" y="55.21433823529412" width="10" height="196.31764705882352" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-161" value=":WS" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-220" vertex="1">
<mxGeometry x="20" y="19.24" width="100" height="288.5999999999999" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-162" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-161" vertex="1">
<mxGeometry x="45" y="49.07941176470588" width="10" height="196.31764705882352" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-163" value=":WS" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-220" vertex="1">
<mxGeometry x="30" y="28.859999999999996" width="100" height="288.5999999999999" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-164" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-163" vertex="1">
<mxGeometry x="45" y="42.94448529411765" width="10" height="197.55690220588235" as="geometry" />
</mxCell>
<mxCell id="UaradclDddL_qDXI0ZBg-3" value="" style="group" vertex="1" connectable="0" parent="1">
<mxGeometry x="40" y="40" width="640" height="320" as="geometry" />
</mxCell>
<mxCell id="aM9ryv3xv72pqoxQDRHE-5" value=":JS" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontColor=#000000;" parent="UaradclDddL_qDXI0ZBg-3" vertex="1">
<mxGeometry x="180" width="100" height="320" as="geometry" />
</mxCell>
<mxCell id="aM9ryv3xv72pqoxQDRHE-6" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontColor=#000000;" parent="aM9ryv3xv72pqoxQDRHE-5" vertex="1">
<mxGeometry x="45" y="49.23076923076923" width="10" height="246.15384615384616" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-3" value=":Wasm" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontColor=#000000;" parent="UaradclDddL_qDXI0ZBg-3" vertex="1">
<mxGeometry x="360" y="2.119205298013246" width="100" height="317.88079470198676" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-4" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-3" vertex="1">
<mxGeometry x="45" y="47.38461538461539" width="10" height="248" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-10" value=":WS" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontColor=#000000;" parent="UaradclDddL_qDXI0ZBg-3" vertex="1">
<mxGeometry x="540" y="2.119205298013246" width="100" height="317.88079470198676" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-11" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-10" vertex="1">
<mxGeometry x="45" y="47.38461538461539" width="10" height="248" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-249" value="" style="group;fontColor=#000000;" parent="UaradclDddL_qDXI0ZBg-3" vertex="1" connectable="0">
<mxGeometry width="235" height="317.88079470198676" as="geometry" />
</mxCell>
<mxCell id="aM9ryv3xv72pqoxQDRHE-1" value=":Page" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-249" vertex="1">
<mxGeometry width="100" height="317.88079470198676" as="geometry" />
</mxCell>
<mxCell id="aM9ryv3xv72pqoxQDRHE-2" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontColor=#000000;" parent="aM9ryv3xv72pqoxQDRHE-1" vertex="1">
<mxGeometry x="45" y="49.23076923076923" width="10" height="246.15384615384616" as="geometry" />
</mxCell>
<mxCell id="aM9ryv3xv72pqoxQDRHE-3" value="dispatch" style="html=1;verticalAlign=bottom;startArrow=oval;endArrow=block;startSize=8;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fontColor=#000000;" parent="aM9ryv3xv72pqoxQDRHE-1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-15" y="63.19307182883341" as="sourcePoint" />
<mxPoint x="45" y="63.07692307692308" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="aM9ryv3xv72pqoxQDRHE-7" value="button" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fontColor=#000000;" parent="UaradclDddL_qDXI0ZBg-3" source="aM9ryv3xv72pqoxQDRHE-2" target="aM9ryv3xv72pqoxQDRHE-6" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="195" y="92.92307692307693" as="sourcePoint" />
<Array as="points">
<mxPoint x="180" y="86.76923076923077" />
</Array>
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>