From 65f0418c0a7333eaec4aee33cc51a4030e98e3a2 Mon Sep 17 00:00:00 2001 From: Orestis <orestis.malaspinas@pm.me> Date: Tue, 10 Jan 2023 16:06:26 +0100 Subject: [PATCH] added cours 12 --- slides/cours_11.md | 171 ------ slides/cours_12.md | 420 +++++++++++++ slides/figs/doubly_linked_list.svg | 929 +++++++++++++++++++++++++++++ 3 files changed, 1349 insertions(+), 171 deletions(-) create mode 100644 slides/cours_12.md create mode 100644 slides/figs/doubly_linked_list.svg diff --git a/slides/cours_11.md b/slides/cours_11.md index 5438b42..d1244d0 100644 --- a/slides/cours_11.md +++ b/slides/cours_11.md @@ -510,174 +510,3 @@ sorted_list sorted_list_push(sorted_list list, int val) { ``` -# L'extraction - -## Trois cas - -1. L'élément à extraire n'est **pas** le premier élément de la liste - -. . . - -{width=70%} - -. . . - -\footnotesize - -```C -sorted_list sorted_list_extract(sorted_list list, int val) { - element *prec = *crt = list; // needed to glue elements together - while (NULL != crt && val > crt->data) { - prec = crt; - crt = crt->next; - } - if (NULL != crt && prec != crt && crt->data == val) { // glue things together - prec->next = crt->next; - free(crt); - } - return list; -} -``` - - -# L'extraction - -2. L'élément à extraire est le premier élément de la liste - -. . . - -{width=70%} - -. . . - -\footnotesize - -```C -sorted_list sorted_list_extract(sorted_list list, int val) { - element *prec = *crt = list; // needed to glue elements together - while (NULL != crt && val > crt->data) { - prec = crt; - crt = crt->next; - } - if (NULL != crt && crt->data == val && prec == crt) { // glue things together - list = list->next; - free(crt); - } - return list; -} -``` - -# L'extraction - -3. L'élément à extraire n'est **pas** dans la liste. - * La liste est vide. - * La valeur est plus grande que le dernier élément de la liste. - * La valeur est plus petite que la valeur de `crt`. - -. . . - -On retourne la liste inchangée. - -. . . - -\footnotesize - -```C -sorted_list sorted_list_extract(sorted_list list, int val) { - element *prec = *crt = list; // needed to glue elements together - while (NULL != crt && val > crt->data) { - prec = crt; - crt = crt->next; - } - if (NULL == crt || crt->data != val) { // val not present - return list; - } -} -``` - -# La recherche - -```C -element* sorted_list_search(sorted_list list, int val); -``` - -* Retourne `NULL` si la valeur n'est pas présente (ou la liste vide). -* Retourne un pointeur vers l'élément si la valeur est présente. - -. . . - -```C -element* sorted_list_search(sorted_list list, int val) { - // search for element smaller than val - element* pos = sorted_list_position(list, val); - if (NULL == pos && val == list->data) { - return list; // first element contains val - } else if (NULL != pos->next && val == pos->next->data) { - return pos->next; // non-first element contains val - } else { - return NULL; // well... val's not here - } -} -``` - -# La recherche - -## La fonction `sorted_list_position` - -```C -element* sorted_list_position(sorted_list list, int val); -``` - - - -# La recherche - -## Exercice: implémenter - -```C -element* sorted_list_position(sorted_list list, int val); -``` - -. . . - -```C -element* sorted_list_position(sorted_list list, int val) { - element* pos = list; - if (sorted_list_is_empty(list) || val <= list->data) { - pos = NULL; - } else { - while (NULL != pos->next && val > pos->next>data) { - pos = pos->next; - } - } - return pos; -} -``` - -# Complexité de la liste chaînée triée - -## L'insertion? - -. . . - -$$ -\mathcal{O}(N). -$$ - -## L'extraction? - -. . . - -$$ -\mathcal{O}(N). -$$ - -## La recherche? - -. . . - -$$ -\mathcal{O}(N). -$$ - diff --git a/slides/cours_12.md b/slides/cours_12.md new file mode 100644 index 0000000..fd21805 --- /dev/null +++ b/slides/cours_12.md @@ -0,0 +1,420 @@ +--- +title: "Listes triées et listes doublement chaînées" +date: "2021-12-22" +patat: + eval: + tai: + command: fish + fragment: false + replace: true + ccc: + command: fish + fragment: false + replace: true + images: + backend: auto +--- + +# Les listes triées + +Une liste chaînée triée est: + +* une liste chaînée +* dont les éléments sont insérés dans l'ordre. + + + +. . . + +* L'insertion est faite telle que l'ordre est maintenu. + +## Quelle structure de données? + +```C + + + + + +``` + +# Les listes triées + +## Quel but? + +* Permet de retrouver rapidement un élément. +* Utile pour la recherche de plus court chemin dans des graphes. +* Ordonnancement de processus par degré de priorité. + +## Comment? + +* Les implémentations les plus efficaces se basent sur les tableaux. +* Possibles aussi avec des listes chaînées. + +# Les listes triées + +## Quelle structure de données dans notre cas? + + +Une liste chaînée bien sûr (oui c'est pour vous entraîner)! + +```C +typedef struct _element { // chaque élément + int data; + struct _element *next; +} element; +typedef element* sorted_list; // la liste +``` + +## Fonctionnalités + +```C +// insertion de val +sorted_list sorted_list_push(sorted_list list, int val); +// la liste est-elle vide? +bool is_empty(sorted_list list); // list == NULL +// extraction de val (il disparaît) +sorted_list sorted_list_extract(sorted_list list, int val); + // rechercher un élément et le retourner +element* sorted_list_search(sorted_list list, int val); +``` + +# L'insertion + +## Trois cas + +1. La liste est vide. + +. . . + +{width=30%} + +. . . + +```C +sorted_list sorted_list_push(sorted_list list, int val) { + if (sorted_list_is_empty(list)) { + list = malloc(sizeof(*list)); + list->data = val; + list->next = NULL; + return list; + } +} +``` + +# L'insertion + +2. L'insertion se fait en première position. + +. . . + +{width=80%} + +. . . + +```C +sorted_list sorted_list_push(sorted_list list, int val) { + if (list->data >= val) { + element *tmp = malloc(sizeof(*tmp)); + tmp->data = val; + tmp->next = list; + list = tmp; + return list; + } +} +``` + +# L'insertion + +3. L'insertion se fait sur une autre position que la première. + +. . . + +{width=70%} + +. . . + +\footnotesize + +```C +sorted_list sorted_list_push(sorted_list list, int val) { + element *tmp = malloc(sizeof(*tmp)); + tmp->data = val; + element *crt = list; + while (NULL != crt->next && val > crt->next->data) { + crt = crt->next; + } + tmp->next = crt->next; + crt->next = tmp; + return list; +} +``` + + +# L'extraction + +## Trois cas + +1. L'élément à extraire n'est **pas** le premier élément de la liste + +. . . + +{width=70%} + +. . . + +\footnotesize + +```C +sorted_list sorted_list_extract(sorted_list list, int val) { + element *prec = *crt = list; // needed to glue elements together + while (NULL != crt && val > crt->data) { + prec = crt; + crt = crt->next; + } + if (NULL != crt && prec != crt && crt->data == val) { // glue things together + prec->next = crt->next; + free(crt); + } + return list; +} +``` + + +# L'extraction + +2. L'élément à extraire est le premier élément de la liste + +. . . + +{width=70%} + +. . . + +\footnotesize + +```C +sorted_list sorted_list_extract(sorted_list list, int val) { + element *prec = *crt = list; // needed to glue elements together + while (NULL != crt && val > crt->data) { + prec = crt; + crt = crt->next; + } + if (NULL != crt && crt->data == val && prec == crt) { // glue things together + list = list->next; + free(crt); + } + return list; +} +``` + +# L'extraction + +3. L'élément à extraire n'est **pas** dans la liste. + * La liste est vide. + * La valeur est plus grande que le dernier élément de la liste. + * La valeur est plus petite que la valeur de `crt`. + +. . . + +On retourne la liste inchangée. + +. . . + +\footnotesize + +```C +sorted_list sorted_list_extract(sorted_list list, int val) { + element *prec = *crt = list; // needed to glue elements together + while (NULL != crt && val > crt->data) { + prec = crt; + crt = crt->next; + } + if (NULL == crt || crt->data != val) { // val not present + return list; + } +} +``` + +# La recherche + +```C +element* sorted_list_search(sorted_list list, int val); +``` + +* Retourne `NULL` si la valeur n'est pas présente (ou la liste vide). +* Retourne un pointeur vers l'élément si la valeur est présente. + +. . . + +```C +element* sorted_list_search(sorted_list list, int val) { + // search for element smaller than val + element* pos = sorted_list_position(list, val); + if (NULL == pos && val == list->data) { + return list; // first element contains val + } else if (NULL != pos->next && val == pos->next->data) { + return pos->next; // non-first element contains val + } else { + return NULL; // well... val's not here + } +} +``` + +# La recherche + +## La fonction `sorted_list_position` + +```C +element* sorted_list_position(sorted_list list, int val); +``` + + + +# La recherche + +## Exercice: implémenter + +```C +element* sorted_list_position(sorted_list list, int val); +``` + +. . . + +```C +element* sorted_list_position(sorted_list list, int val) { + element* pos = list; + if (sorted_list_is_empty(list) || val <= list->data) { + pos = NULL; + } else { + while (NULL != pos->next && val > pos->next>data) { + pos = pos->next; + } + } + return pos; +} +``` + +# Complexité de la liste chaînée triée + +## L'insertion? + +. . . + +$$ +\mathcal{O}(N). +$$ + +## L'extraction? + +. . . + +$$ +\mathcal{O}(N). +$$ + +## La recherche? + +. . . + +$$ +\mathcal{O}(N). +$$ + + +# Liste doublement chaînée + +## Application navigateur ou éditeur de texte + +* Avec une liste chaînée: + * Comment implémenter les fonctions `back` et `forward` d'un navigateur?? + * Comment implémenter les fonctions `undo` et `redo` d'un éditeur de text? + +. . . + +Pas possible. + +## Solution? + +. . . + +* Garder un pointeur supplémentaire sur l'élément précédent et pas seulement le + suivant. + +. . . + +* Cette structure de donnée est la **liste doublement chaînée** ou **doubly + linked list**. + +# Liste doublement chaînée + +## Exercices + +* Partir du dessin suivant et par **groupe de 5** + + + +1. Écrire les structures de données pour représenter la liste doublement + chaînée dont le type sera `dll` (pour + `doubly_linked_list`) + +# Liste doublement chaînée + +2. Écrire les fonctionnalités de création et consultation + +```C +// crée la liste doublement chaînée +dll dll_create(); +// retourne la valeur à la position actuelle dans la liste +int dll_value(dll list); +// la liste est-elle vide? +bool dll_is_empty(dll list); +// Est-ce que pos est le 1er élément? +bool dll_is_head(dll list); +// Est-ce que pos est le dernier élément? +bool dll_is_tail(dll list); +// data est-elle dans la liste? +bool dll_is_present(dll list, int data); +// affiche la liste +void dll_print(dll list); +``` + +# Liste doublement chaînée + +3. Écrire les fonctionnalités de manipulation + +```C +// déplace pos au début de la liste +dll dll_move_to_head(dll list); +// déplace pos à la position suivante dans la liste +dll dll_next(dll list); +// déplace pos à la position précédente dans la liste +dll dll_prev(dll list); +``` + +# Liste doublement chaînée + +4. Écrire les fonctionnalités d'insertion + +```C +// insertion de data dans l'élément *après* pos +dll dll_insert_after(dll list, int data); +// insertion de data en tête de liste +dll dll_push(dll list, int data); +``` + +5. Écrire les fonctionnalités d'extraction + +```C +// extraction de la valeur se trouvant dans l'élément *pos* +// l'élément *pos* est libéré +int dll_extract(dll *list); +// extrait la donnée en tête de liste +int dll_pop(dll *list); +// vide la liste +void dll_destroy(dll *list) +``` + diff --git a/slides/figs/doubly_linked_list.svg b/slides/figs/doubly_linked_list.svg new file mode 100644 index 0000000..b96a323 --- /dev/null +++ b/slides/figs/doubly_linked_list.svg @@ -0,0 +1,929 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + width="385.21741mm" + height="78.418839mm" + viewBox="0 0 385.21741 78.418839" + version="1.1" + id="svg5" + inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20, custom)" + sodipodi:docname="doubly_linked_list.svg" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <sodipodi:namedview + id="namedview7" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="0" + inkscape:document-units="mm" + showgrid="false" + inkscape:zoom="0.47433592" + inkscape:cx="952.91118" + inkscape:cy="365.77453" + inkscape:window-width="1920" + inkscape:window-height="1080" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" + inkscape:current-layer="layer1" + fit-margin-top="0" + fit-margin-left="0" + fit-margin-right="0" + fit-margin-bottom="0" /> + <defs + id="defs2"> + <linearGradient + id="linearGradient27181" + inkscape:swatch="solid"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop27179" /> + </linearGradient> + <marker + style="overflow:visible" + id="Arrow2Lend" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Lend" + inkscape:isstock="true"> + <path + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.625;stroke-linejoin:round" + id="path5453" /> + </marker> + <marker + style="overflow:visible" + id="Arrow2Lend-6" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Lend" + inkscape:isstock="true"> + <path + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.625;stroke-linejoin:round" + id="path5453-2" /> + </marker> + <marker + style="overflow:visible" + id="Arrow2Lend-1" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Lend" + inkscape:isstock="true"> + <path + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.625;stroke-linejoin:round" + id="path5453-27" /> + </marker> + <marker + style="overflow:visible" + id="Arrow2Lend-6-9" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Lend" + inkscape:isstock="true"> + <path + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.625;stroke-linejoin:round" + id="path5453-2-3" /> + </marker> + <marker + style="overflow:visible" + id="Arrow2Lend-6-9-0" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Lend" + inkscape:isstock="true"> + <path + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.625;stroke-linejoin:round" + id="path5453-2-3-6" /> + </marker> + <marker + style="overflow:visible" + id="Arrow2Lend-61" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Lend" + inkscape:isstock="true"> + <path + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.625;stroke-linejoin:round" + id="path5453-8" /> + </marker> + <marker + style="overflow:visible" + id="Arrow2Lend-9" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Lend" + inkscape:isstock="true"> + <path + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.625;stroke-linejoin:round" + id="path5453-20" /> + </marker> + <marker + style="overflow:visible" + id="Arrow2Lend-6-9-0-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Lend" + inkscape:isstock="true"> + <path + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.625;stroke-linejoin:round" + id="path5453-2-3-6-3" /> + </marker> + <marker + style="overflow:visible" + id="Arrow2Lend-93" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Lend" + inkscape:isstock="true"> + <path + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.625;stroke-linejoin:round" + id="path5453-1" /> + </marker> + <marker + style="overflow:visible" + id="Arrow2Lend-6-9-0-9" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Lend" + inkscape:isstock="true"> + <path + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.625;stroke-linejoin:round" + id="path5453-2-3-6-4" /> + </marker> + <marker + style="overflow:visible" + id="Arrow2Lend-5" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Lend" + inkscape:isstock="true"> + <path + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.625;stroke-linejoin:round" + id="path5453-5" /> + </marker> + <marker + style="overflow:visible" + id="Arrow2Lend-6-9-0-4" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Lend" + inkscape:isstock="true"> + <path + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.625;stroke-linejoin:round" + id="path5453-2-3-6-7" /> + </marker> + <marker + style="overflow:visible" + id="Arrow2Lend-3" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Lend" + inkscape:isstock="true"> + <path + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.625;stroke-linejoin:round" + id="path5453-0" /> + </marker> + <marker + style="overflow:visible" + id="Arrow2Lend-6-9-0-7" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Lend" + inkscape:isstock="true"> + <path + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.625;stroke-linejoin:round" + id="path5453-2-3-6-8" /> + </marker> + <marker + style="overflow:visible" + id="Arrow2Lend-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Lend" + inkscape:isstock="true"> + <path + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.625;stroke-linejoin:round" + id="path5453-6" /> + </marker> + <marker + style="overflow:visible" + id="Arrow2Lend-6-9-0-6" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Lend" + inkscape:isstock="true"> + <path + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.625;stroke-linejoin:round" + id="path5453-2-3-6-49" /> + </marker> + <marker + style="overflow:visible" + id="Arrow2Lend-15" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Lend" + inkscape:isstock="true"> + <path + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.625;stroke-linejoin:round" + id="path5453-9" /> + </marker> + <marker + style="overflow:visible" + id="Arrow2Lend-6-9-0-49" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Lend" + inkscape:isstock="true"> + <path + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.625;stroke-linejoin:round" + id="path5453-2-3-6-0" /> + </marker> + <marker + style="overflow:visible" + id="Arrow2Lend-63" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Lend" + inkscape:isstock="true"> + <path + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.625;stroke-linejoin:round" + id="path5453-94" /> + </marker> + <marker + style="overflow:visible" + id="Arrow2Lend-12" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Lend" + inkscape:isstock="true"> + <path + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.625;stroke-linejoin:round" + id="path5453-93" /> + </marker> + <marker + style="overflow:visible" + id="Arrow2Lend-63-9" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Lend" + inkscape:isstock="true"> + <path + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.625;stroke-linejoin:round" + id="path5453-94-0" /> + </marker> + <marker + style="overflow:visible" + id="Arrow2Lend-8" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Lend" + inkscape:isstock="true"> + <path + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.625;stroke-linejoin:round" + id="path5453-4" /> + </marker> + <marker + style="overflow:visible" + id="Arrow2Lend-63-8" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Lend" + inkscape:isstock="true"> + <path + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.625;stroke-linejoin:round" + id="path5453-94-1" /> + </marker> + <marker + style="overflow:visible" + id="Arrow2Lend-8-9" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Lend" + inkscape:isstock="true"> + <path + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.625;stroke-linejoin:round" + id="path5453-4-6" /> + </marker> + <marker + style="overflow:visible" + id="Arrow2Lend-63-8-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Lend" + inkscape:isstock="true"> + <path + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.625;stroke-linejoin:round" + id="path5453-94-1-1" /> + </marker> + <marker + style="overflow:visible" + id="Arrow2Lend-8-8" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Lend" + inkscape:isstock="true"> + <path + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.625;stroke-linejoin:round" + id="path5453-4-3" /> + </marker> + <marker + style="overflow:visible" + id="Arrow2Lend-63-8-1" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Lend" + inkscape:isstock="true"> + <path + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.625;stroke-linejoin:round" + id="path5453-94-1-8" /> + </marker> + <marker + style="overflow:visible" + id="Arrow2Lend-8-7" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Lend" + inkscape:isstock="true"> + <path + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.625;stroke-linejoin:round" + id="path5453-4-7" /> + </marker> + <marker + style="overflow:visible" + id="Arrow2Lend-63-8-6" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Lend" + inkscape:isstock="true"> + <path + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.625;stroke-linejoin:round" + id="path5453-94-1-4" /> + </marker> + <marker + style="overflow:visible" + id="Arrow2Lend-63-8-1-5" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Lend" + inkscape:isstock="true"> + <path + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.625;stroke-linejoin:round" + id="path5453-94-1-8-4" /> + </marker> + <marker + style="overflow:visible" + id="Arrow2Lend-63-8-1-1" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow2Lend" + inkscape:isstock="true"> + <path + transform="matrix(-1.1,0,0,-1.1,-1.1,0)" + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.625;stroke-linejoin:round" + id="path5453-94-1-8-2" /> + </marker> + </defs> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(8.5735273,-162.33534)"> + <g + id="g31034"> + <rect + style="fill:none;stroke:#000205;stroke-width:1;stroke-linecap:square" + id="rect43" + width="26.817299" + height="21.512512" + x="43.79332" + y="162.83534" /> + <rect + style="fill:none;stroke:#000205;stroke-width:1;stroke-linecap:square" + id="rect984-3" + width="19.720016" + height="21.512497" + x="70.592087" + y="162.83534" /> + <rect + style="fill:none;stroke:#000205;stroke-width:1;stroke-linecap:square" + id="rect984-3-5" + width="19.720016" + height="21.512497" + x="24.073303" + y="162.83536" /> + <text + xml:space="preserve" + style="font-size:7.05556px;line-height:0;font-family:sans-serif;letter-spacing:0px;stroke-width:0.264583" + x="49.381596" + y="170.55223" + id="text2533"><tspan + sodipodi:role="line" + id="tspan2531" + style="font-size:7.05556px;stroke-width:0.264583" + x="49.381596" + y="170.55223">data</tspan></text> + <text + xml:space="preserve" + style="font-size:7.05556px;line-height:0;font-family:sans-serif;letter-spacing:0px;stroke-width:0.264583" + x="72.400902" + y="176.01866" + id="text2533-6"><tspan + sodipodi:role="line" + id="tspan2531-7" + style="font-size:7.05556px;stroke-width:0.264583" + x="72.400902" + y="176.01866">next</tspan></text> + <text + xml:space="preserve" + style="font-size:7.05556px;line-height:0;font-family:sans-serif;letter-spacing:0px;stroke-width:0.264583" + x="25.847668" + y="174.83356" + id="text2533-5"><tspan + sodipodi:role="line" + id="tspan2531-3" + style="font-size:7.05556px;stroke-width:0.264583" + x="25.847668" + y="174.83356">prev</tspan></text> + <path + style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Lend)" + d="M 32.566534,179.81541 H 7.1177008" + id="path5430" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Lend-63)" + d="M 81.846967,167.73425 H 107.2958" + id="path5430-8" + sodipodi:nodetypes="cc" /> + <rect + style="fill:none;stroke:#000205;stroke-width:1;stroke-linecap:square" + id="rect43-0" + width="26.817299" + height="21.512512" + x="128.29239" + y="162.83534" /> + <rect + style="fill:none;stroke:#000205;stroke-width:1;stroke-linecap:square" + id="rect984-3-4" + width="19.720016" + height="21.512497" + x="155.09116" + y="162.83534" /> + <rect + style="fill:none;stroke:#000205;stroke-width:1;stroke-linecap:square" + id="rect984-3-5-4" + width="19.720016" + height="21.512497" + x="108.57237" + y="162.83536" /> + <text + xml:space="preserve" + style="font-size:7.05556px;line-height:0;font-family:sans-serif;letter-spacing:0px;stroke-width:0.264583" + x="133.88066" + y="170.55223" + id="text2533-4"><tspan + sodipodi:role="line" + id="tspan2531-4" + style="font-size:7.05556px;stroke-width:0.264583" + x="133.88066" + y="170.55223">data</tspan></text> + <text + xml:space="preserve" + style="font-size:7.05556px;line-height:0;font-family:sans-serif;letter-spacing:0px;stroke-width:0.264583" + x="156.89996" + y="176.01866" + id="text2533-6-7"><tspan + sodipodi:role="line" + id="tspan2531-7-6" + style="font-size:7.05556px;stroke-width:0.264583" + x="156.89996" + y="176.01866">next</tspan></text> + <text + xml:space="preserve" + style="font-size:7.05556px;line-height:0;font-family:sans-serif;letter-spacing:0px;stroke-width:0.264583" + x="110.34673" + y="174.83356" + id="text2533-5-3"><tspan + sodipodi:role="line" + id="tspan2531-3-1" + style="font-size:7.05556px;stroke-width:0.264583" + x="110.34673" + y="174.83356">prev</tspan></text> + <path + style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Lend-8)" + d="M 117.0656,179.81541 H 91.616768" + id="path5430-7" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Lend-63-8)" + d="m 166.34603,167.73425 h 25.44884" + id="path5430-8-5" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Lend-8-7)" + d="M 112.23011,218.63392 60.009485,185.36325" + id="path5430-7-4" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Lend-63-8-6)" + d="m 141.44144,218.73827 72.28584,-33.4172" + id="path5430-8-5-6" + sodipodi:nodetypes="cc" /> + <rect + style="fill:none;stroke:#000205;stroke-width:1;stroke-linecap:square" + id="rect43-0-5" + width="26.817299" + height="21.512512" + x="212.85204" + y="162.83534" /> + <rect + style="fill:none;stroke:#000205;stroke-width:1;stroke-linecap:square" + id="rect984-3-4-7" + width="19.720016" + height="21.512497" + x="239.6508" + y="162.83534" /> + <rect + style="fill:none;stroke:#000205;stroke-width:1;stroke-linecap:square" + id="rect984-3-5-4-4" + width="19.720016" + height="21.512497" + x="193.13202" + y="162.83536" /> + <text + xml:space="preserve" + style="font-size:7.05556px;line-height:0;font-family:sans-serif;letter-spacing:0px;stroke-width:0.264583" + x="218.44032" + y="170.55223" + id="text2533-4-1"><tspan + sodipodi:role="line" + id="tspan2531-4-8" + style="font-size:7.05556px;stroke-width:0.264583" + x="218.44032" + y="170.55223">data</tspan></text> + <text + xml:space="preserve" + style="font-size:7.05556px;line-height:0;font-family:sans-serif;letter-spacing:0px;stroke-width:0.264583" + x="241.45963" + y="176.01866" + id="text2533-6-7-5"><tspan + sodipodi:role="line" + id="tspan2531-7-6-9" + style="font-size:7.05556px;stroke-width:0.264583" + x="241.45963" + y="176.01866">next</tspan></text> + <text + xml:space="preserve" + style="font-size:7.05556px;line-height:0;font-family:sans-serif;letter-spacing:0px;stroke-width:0.264583" + x="194.90639" + y="174.83356" + id="text2533-5-3-7"><tspan + sodipodi:role="line" + id="tspan2531-3-1-5" + style="font-size:7.05556px;stroke-width:0.264583" + x="194.90639" + y="174.83356">prev</tspan></text> + <path + style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Lend-8-9)" + d="M 201.62525,179.81541 H 176.17642" + id="path5430-7-3" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Lend-63-8-2)" + d="m 250.90569,167.73425 h 25.44883" + id="path5430-8-5-8" + sodipodi:nodetypes="cc" /> + <rect + style="fill:none;stroke:#000205;stroke-width:1;stroke-linecap:square" + id="rect43-0-4" + width="26.817299" + height="21.512512" + x="297.36826" + y="162.83534" /> + <rect + style="fill:none;stroke:#000205;stroke-width:1;stroke-linecap:square" + id="rect984-3-4-3" + width="19.720016" + height="21.512497" + x="324.16702" + y="162.83534" /> + <rect + style="fill:none;stroke:#000205;stroke-width:1;stroke-linecap:square" + id="rect984-3-5-4-3" + width="19.720016" + height="21.512497" + x="277.64822" + y="162.83536" /> + <text + xml:space="preserve" + style="font-size:7.05556px;line-height:0;font-family:sans-serif;letter-spacing:0px;stroke-width:0.264583" + x="302.95651" + y="170.55223" + id="text2533-4-3"><tspan + sodipodi:role="line" + id="tspan2531-4-86" + style="font-size:7.05556px;stroke-width:0.264583" + x="302.95651" + y="170.55223">data</tspan></text> + <text + xml:space="preserve" + style="font-size:7.05556px;line-height:0;font-family:sans-serif;letter-spacing:0px;stroke-width:0.264583" + x="325.97583" + y="176.01866" + id="text2533-6-7-0"><tspan + sodipodi:role="line" + id="tspan2531-7-6-4" + style="font-size:7.05556px;stroke-width:0.264583" + x="325.97583" + y="176.01866">next</tspan></text> + <text + xml:space="preserve" + style="font-size:7.05556px;line-height:0;font-family:sans-serif;letter-spacing:0px;stroke-width:0.264583" + x="279.42261" + y="174.83356" + id="text2533-5-3-8"><tspan + sodipodi:role="line" + id="tspan2531-3-1-8" + style="font-size:7.05556px;stroke-width:0.264583" + x="279.42261" + y="174.83356">prev</tspan></text> + <path + style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Lend-8-8)" + d="M 286.14146,179.81541 H 260.69263" + id="path5430-7-8" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Lend-63-8-1)" + d="m 335.4219,167.73425 h 25.44883" + id="path5430-8-5-9" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Lend-63-8-1-1)" + d="M 38.063478,229.50673 H 96.051494" + id="path5430-8-5-9-8" + sodipodi:nodetypes="cc" /> + <rect + style="fill:none;stroke:#000205;stroke-width:1;stroke-linecap:square" + id="rect984-3-4-0" + width="30.466314" + height="21.512512" + x="127.86939" + y="218.74167" /> + <rect + style="fill:none;stroke:#000205;stroke-width:1;stroke-linecap:square" + id="rect984-3-4-0-2" + width="30.466314" + height="21.512512" + x="97.403076" + y="218.74167" /> + <text + xml:space="preserve" + style="font-size:7.05556px;line-height:0;font-family:sans-serif;letter-spacing:0px;stroke-width:0.264583" + x="136.71878" + y="232.0807" + id="text19798"><tspan + sodipodi:role="line" + id="tspan19796" + style="font-size:7.05556px;stroke-width:0.264583" + x="136.71878" + y="232.0807">pos</tspan></text> + <text + xml:space="preserve" + style="font-size:7.05556px;line-height:0;font-family:sans-serif;letter-spacing:0px;stroke-width:0.264583" + x="103.82884" + y="232.12825" + id="text21012"><tspan + sodipodi:role="line" + id="tspan21010" + style="font-size:7.05556px;stroke-width:0.264583" + x="103.82884" + y="232.12825">head</tspan></text> + <g + id="g23095" + transform="translate(0.63181235,-8.3387299)"> + <rect + style="fill:none;stroke:#000205;stroke-width:1;stroke-linecap:square" + id="rect984-3-4-0-2-2" + width="30.466314" + height="21.512512" + x="6.8544922" + y="227.0804" /> + <text + xml:space="preserve" + style="font-size:7.05556px;line-height:0;font-family:sans-serif;letter-spacing:0px;stroke-width:0.264583" + x="16.658175" + y="240.46698" + id="text22622"><tspan + sodipodi:role="line" + id="tspan22620" + style="font-size:7.05556px;stroke-width:0.264583" + x="16.658175" + y="240.46698">list</tspan></text> + </g> + <g + id="g27724"> + <rect + style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000205;stroke-width:1;stroke-linecap:square" + id="rect984-3-4-0-9" + width="13.974364" + height="21.512512" + x="-8.0735273" + y="162.83534" /> + <path + style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000205;stroke-width:0.704282;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none" + d="M -28.32387,656.10754 V 617.5349 H -4.0995075 20.124855 v 38.57264 38.57264 H -4.0995075 -28.32387 Z" + id="path27327" + transform="scale(0.26458333)" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M -7.7213419,184.34785 5.8332385,176.52211" + id="path27399" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 5.9008369,162.83534 -13.6897772,7.9038" + id="path27401" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 5.9008369,167.3846 -13.6897772,7.9038" + id="path27401-3" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 5.9008369,171.93383 -13.6897772,7.9038" + id="path27401-6" /> + </g> + <g + id="g27724-8" + transform="translate(370.24303)"> + <rect + style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000205;stroke-width:1;stroke-linecap:square" + id="rect984-3-4-0-9-0" + width="13.974364" + height="21.512512" + x="-8.0735273" + y="162.83534" /> + <path + style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000205;stroke-width:0.704282;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none" + d="M -28.32387,656.10754 V 617.5349 H -4.0995075 20.124855 v 38.57264 38.57264 H -4.0995075 -28.32387 Z" + id="path27327-2" + transform="scale(0.26458333)" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M -7.7213419,184.34785 5.8332385,176.52211" + id="path27399-1" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 5.9008369,162.83534 -13.6897772,7.9038" + id="path27401-0" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 5.9008369,167.3846 -13.6897772,7.9038" + id="path27401-3-5" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 5.9008369,171.93383 -13.6897772,7.9038" + id="path27401-6-1" /> + </g> + <text + xml:space="preserve" + style="font-size:7.05556px;line-height:0;font-family:sans-serif;letter-spacing:0px;stroke-width:0.264583" + x="54.971268" + y="180.15842" + id="text2533-46"><tspan + sodipodi:role="line" + id="tspan2531-2" + style="font-size:7.05556px;stroke-width:0.264583" + x="54.971268" + y="180.15842">3</tspan></text> + <text + xml:space="preserve" + style="font-size:7.05556px;line-height:0;font-family:sans-serif;letter-spacing:0px;stroke-width:0.264583" + x="137.17761" + y="180.20837" + id="text2533-46-5"><tspan + sodipodi:role="line" + id="tspan2531-2-8" + style="font-size:7.05556px;stroke-width:0.264583" + x="137.17761" + y="180.20837">12</tspan></text> + <text + xml:space="preserve" + style="font-size:7.05556px;line-height:0;font-family:sans-serif;letter-spacing:0px;stroke-width:0.264583" + x="224.03" + y="180.15842" + id="text2533-46-6"><tspan + sodipodi:role="line" + id="tspan2531-2-2" + style="font-size:7.05556px;stroke-width:0.264583" + x="224.03" + y="180.15842">3</tspan></text> + <text + xml:space="preserve" + style="font-size:7.05556px;line-height:0;font-family:sans-serif;letter-spacing:0px;stroke-width:0.264583" + x="308.5083" + y="180.15842" + id="text2533-46-8"><tspan + sodipodi:role="line" + id="tspan2531-2-4" + style="font-size:7.05556px;stroke-width:0.264583" + x="308.5083" + y="180.15842">6</tspan></text> + </g> + </g> +</svg> -- GitLab