Re: Un comportement que je n'arrive pas à expliquer...

Sowebio - Développement (via ada-france Mailing List) <[email protected]> Wed, 13 Sep 2023 20:48:39 +0200
Newsgroups gmane.comp.lang.ada.france
Organization Sowebio
Message-ID <[email protected]>
This is a multi-part message in MIME format.
--------------Iv7Uz1W0NeyUsRLWpgtrbWTK
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit

Bonsoir Jean-Pierre,

> Je ne peux pas répondre très précisément (à part Tucker Taft et Randy 
> Bruckardt, je ne sais pas trop qui pourrait...)

;)


> mais en gros la difficulté pour résoudre les surcharges est de savoir 
> si le contexte externe détermine le type de ce
.../...
> each/dependent_/expressionof theconditional_expressionis expected to 
> be of type/T".
> /

/Merci pour ton analyse./

/
/

> //
> Ca vaut le coup de poser la question à AdaCore ou d'essayer avec un 
> autre compilateur...

Pas d'autre compilo ici et j'hésite à embêter AdaCore sur ça :)

> NB: c'est une mauvaise idée que d'appeler un type utilisateur 
> "String", ou de n'importe quel autre nom défini dans Standard. Comme 
> Standard est implicitement le parent de toutes les autres unités, les 
> types y sont toujours directement visibles, et préférés aux types 
> synonymes que l'on pourrait croire directement visibles par une clause 
> "use". Ca crée souvent des confusions, et ça peut jouer dans ton cas.

Oui, tu as raison bien sûr.

L'idée de Pascal (Blady) est de rendre Gnoga compatible UTF-8 (avec 
UXString) sans reprendre toutes les sources. Je trouve que le résultat 
est si efficace que j'ai adopté sa technique pour notre nouveau 
framework v22, qui utilise Gnoga. Le portage v20 > v22 avec cette astuce 
a profondément simplifié le code et sa mise en œuvre.

Je sais bien que ton conseil est le bon. Voici ma justification foireuse 
: en pratique on ne manipule plus qu'un unique type String, UTF-8, 
Unbounded, avec une API standard et ça règle une fois pour toute le pb 
des strings dans Ada. Le framework v22 masque tout. L'utilisateur est 
dans le confort.

C'est non conforme aux bonnes pratiques et sous-optimal du coté de la 
mémoire. En pratique, ça impacte peu coté ram (v22 implémente des 
goodies Gnatcoll qui permettent de regarder ça de près) et je n'ai pas 
constaté d'effet de bord, hormis le cas qui fait l'objet de ce message.

Aurais-je du utiliser le type de base UXString ? Certainement. Mais avec 
Gnoga utilisant ce subtype String, je reste uniforme. Et je ne voulais 
pas non plus forker Gnoga pour remettre partout le type UXString. C'est 
typiquement un compromis...

-- 
Sowebio Développement
[email protected]
Sowebio <http://www.soweb.io>
www.soweb.io <http://www.soweb.io>
[email protected]
+33 (0) 5 46 85 58 40


_______________________________________________
Ada-france mailing list
[email protected]

--------------Iv7Uz1W0NeyUsRLWpgtrbWTK
Content-Type: multipart/related;
 boundary="------------oFrqe0ruB4O9OTfW6e9yUMrd"

--------------oFrqe0ruB4O9OTfW6e9yUMrd
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 8bit

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>Bonsoir Jean-Pierre,<br>
    </p>
    <blockquote type="cite"
      cite="mid:[email protected]">
      <div class="moz-signature">Je ne peux pas répondre très
        précisément (à part Tucker Taft et Randy Bruckardt, je ne sais
        pas trop qui pourrait...)</div>
    </blockquote>
    <p>;)</p>
    <p><br>
    </p>
    <blockquote type="cite"
      cite="mid:[email protected]">
      <div class="moz-signature"> mais en gros la difficulté pour
        résoudre les surcharges est de savoir si le contexte externe
        détermine le type de ce </div>
    </blockquote>
    .../...<br>
    <blockquote type="cite"
      cite="mid:[email protected]">
      <div class="moz-signature"><span style="color: rgb(0, 0, 0);
          font-family: &quot;Times New Roman&quot;, Times, serif;
          font-size: medium; font-style: normal; font-variant-ligatures:
          normal; font-variant-caps: normal; font-weight: 400;
          letter-spacing: normal; orphans: 2; text-align: start;
          text-indent: 0px; text-transform: none; widows: 2;
          word-spacing: 0px; -webkit-text-stroke-width: 0px;
          white-space: normal; background-color: rgb(255, 255, 240);
          text-decoration-thickness: initial; text-decoration-style:
          initial; text-decoration-color: initial; display: inline
          !important; float: none;">each<span> </span></span><i
          style="color: rgb(0, 0, 0); font-family: &quot;Times New
          Roman&quot;, Times, serif; font-size: medium;
          font-variant-ligatures: normal; font-variant-caps: normal;
          font-weight: 400; letter-spacing: normal; orphans: 2;
          text-align: start; text-indent: 0px; text-transform: none;
          widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px;
          white-space: normal; background-color: rgb(255, 255, 240);
          text-decoration-thickness: initial; text-decoration-style:
          initial; text-decoration-color: initial;">dependent_</i><span
          class="swiss" style="font-family: Arial, Helvetica,
          sans-serif; font-size: 14.72px; color: rgb(0, 0, 0);
          font-style: normal; font-variant-ligatures: normal;
          font-variant-caps: normal; font-weight: 400; letter-spacing:
          normal; orphans: 2; text-align: start; text-indent: 0px;
          text-transform: none; widows: 2; word-spacing: 0px;
          -webkit-text-stroke-width: 0px; white-space: normal;
          background-color: rgb(255, 255, 240);
          text-decoration-thickness: initial; text-decoration-style:
          initial; text-decoration-color: initial;"><a
            moz-do-not-send="true">expression</a></span><span
          style="color: rgb(0, 0, 0); font-family: &quot;Times New
          Roman&quot;, Times, serif; font-size: medium; font-style:
          normal; font-variant-ligatures: normal; font-variant-caps:
          normal; font-weight: 400; letter-spacing: normal; orphans: 2;
          text-align: start; text-indent: 0px; text-transform: none;
          widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px;
          white-space: normal; background-color: rgb(255, 255, 240);
          text-decoration-thickness: initial; text-decoration-style:
          initial; text-decoration-color: initial; display: inline
          !important; float: none;"><span> </span>of the<span> </span></span><span
          class="swiss" style="font-family: Arial, Helvetica,
          sans-serif; font-size: 14.72px; color: rgb(0, 0, 0);
          font-style: normal; font-variant-ligatures: normal;
          font-variant-caps: normal; font-weight: 400; letter-spacing:
          normal; orphans: 2; text-align: start; text-indent: 0px;
          text-transform: none; widows: 2; word-spacing: 0px;
          -webkit-text-stroke-width: 0px; white-space: normal;
          background-color: rgb(255, 255, 240);
          text-decoration-thickness: initial; text-decoration-style:
          initial; text-decoration-color: initial;"><a
            moz-do-not-send="true">conditional_expression</a></span><span
          style="color: rgb(0, 0, 0); font-family: &quot;Times New
          Roman&quot;, Times, serif; font-size: medium; font-style:
          normal; font-variant-ligatures: normal; font-variant-caps:
          normal; font-weight: 400; letter-spacing: normal; orphans: 2;
          text-align: start; text-indent: 0px; text-transform: none;
          widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px;
          white-space: normal; background-color: rgb(255, 255, 240);
          text-decoration-thickness: initial; text-decoration-style:
          initial; text-decoration-color: initial; display: inline
          !important; float: none;"><span> </span>is expected to be of
          type<span> </span></span><i style="color: rgb(0, 0, 0);
          font-family: &quot;Times New Roman&quot;, Times, serif;
          font-size: medium; font-variant-ligatures: normal;
          font-variant-caps: normal; font-weight: 400; letter-spacing:
          normal; orphans: 2; text-align: start; text-indent: 0px;
          text-transform: none; widows: 2; word-spacing: 0px;
          -webkit-text-stroke-width: 0px; white-space: normal;
          background-color: rgb(255, 255, 240);
          text-decoration-thickness: initial; text-decoration-style:
          initial; text-decoration-color: initial;">T". <br>
        </i></div>
    </blockquote>
    <p><i>Merci pour ton analyse.</i></p>
    <p><i><br>
      </i></p>
    <blockquote type="cite"
      cite="mid:[email protected]">
      <div class="moz-signature"><i style="color: rgb(0, 0, 0);
          font-family: &quot;Times New Roman&quot;, Times, serif;
          font-size: medium; font-variant-ligatures: normal;
          font-variant-caps: normal; font-weight: 400; letter-spacing:
          normal; orphans: 2; text-align: start; text-indent: 0px;
          text-transform: none; widows: 2; word-spacing: 0px;
          -webkit-text-stroke-width: 0px; white-space: normal;
          background-color: rgb(255, 255, 240);
          text-decoration-thickness: initial; text-decoration-style:
          initial; text-decoration-color: initial;"> </i></div>
      <div class="moz-signature">Ca vaut le coup de poser la question à
        AdaCore ou d'essayer avec un autre compilateur...</div>
    </blockquote>
    <p>Pas d'autre compilo ici et j'hésite à embêter AdaCore sur ça :)</p>
    <blockquote type="cite"
      cite="mid:[email protected]">
      <div class="moz-signature">NB: c'est une mauvaise idée que
        d'appeler un type utilisateur "String", ou de n'importe quel
        autre nom défini dans Standard. Comme Standard est implicitement
        le parent de toutes les autres unités, les types y sont toujours
        directement visibles, et préférés aux types synonymes que l'on
        pourrait croire directement visibles par une clause "use". Ca
        crée souvent des confusions, et ça peut jouer dans ton cas.<br>
      </div>
    </blockquote>
    <p>Oui, tu as raison bien sûr. <br>
    </p>
    <p>L'idée de Pascal (Blady) est de rendre Gnoga compatible UTF-8
      (avec UXString) sans reprendre toutes les sources. Je trouve que
      le résultat est si efficace que j'ai adopté sa technique pour
      notre nouveau framework v22, qui utilise Gnoga. Le portage v20
      &gt; v22 avec cette astuce a profondément simplifié le code et sa
      mise en œuvre.</p>
    <p>Je sais bien que ton conseil est le bon. Voici ma justification
      foireuse : en pratique on ne manipule plus qu'un unique type
      String, UTF-8, Unbounded, avec une API standard et ça règle une
      fois pour toute le pb des strings dans Ada. Le framework v22
      masque tout. L'utilisateur est dans le confort.</p>
    <p>C'est non conforme aux bonnes pratiques et sous-optimal du coté
      de la mémoire. En pratique, ça impacte peu coté ram (v22
      implémente des goodies Gnatcoll qui permettent de regarder ça de
      près) et je n'ai pas constaté d'effet de bord, hormis le cas qui
      fait l'objet de ce message.<br>
    </p>
    <p>Aurais-je du utiliser le type de base UXString ? Certainement.
      Mais avec Gnoga utilisant ce subtype String, je reste uniforme. Et
      je ne voulais pas non plus forker Gnoga pour remettre partout le
      type UXString. C'est typiquement un compromis...</p>
    <div class="moz-signature">-- <br>
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <table width="160" height="148" cellspacing="2" cellpadding="2"
        border="0">
        <tbody>
          <tr>
            <td valign="top"> <font size="-2" face="Helvetica, Arial,
                sans-serif"> Sowebio Développement<br>
                <a href="mailto:[email protected]"
                  class="moz-txt-link-freetext">[email protected]</a><br>
              </font> </td>
          </tr>
          <tr>
            <td valign="top"><a href="http://www.soweb.io"><img
                  title="Cliquer pour accéder au site Web" alt="Sowebio"
                  src="cid:[email protected]" width="150"
                  height="30" border="0"></a></td>
          </tr>
          <tr>
            <td valign="top"> <font size="-2" face="Helvetica, Arial,
                sans-serif"> <a href="http://www.soweb.io">www.soweb.io</a><br>
                <a href="mailto:[email protected]"
                  class="moz-txt-link-freetext">[email protected]</a><br>
                +33 (0) 5 46 85 58 40 </font> </td>
          </tr>
        </tbody>
      </table>
      <br>
    </div>
  <div style="background: transparent; border: none; clear: both; display: block; float: none; position: static"><br/>_______________________________________________<br/>Ada-france mailing list<br/>[email protected]</div></body>
</html>

--------------oFrqe0ruB4O9OTfW6e9yUMrd
Content-Type: image/png; name="QWX0BLgDJN1KSJVV.png"
Content-Disposition: inline; filename="QWX0BLgDJN1KSJVV.png"
Content-Id: <[email protected]>
Content-Transfer-Encoding: base64

iVBORw0KGgoAAAANSUhEUgAAAJYAAAAeCAIAAABBgHAAAAAAFHRFWHRDcmVh
dGlvbiBUaW1lAAfhBRYKNrmBbTwAAAAHdElNRQfhBRYOAhyA9/ZzAAAACXBI
WXMAAArwAAAK8AFCrDSYAAAXKUlEQVR42u1aCXQcxZmu6p5TtzS679OSbcmX
bPmWLduEJWzACRBCFhLDQkJibEx2WQSxwQbyEvCyIQlJOMIjYA4/INkYkI2N
b/AhG2NbtiTbug/rPmZ0jmamu/erqpnWaHyQkLwN+zaleaOZnqrqv/7vP76/
qqmmaeTS5r1I2T/KvuOPavgT11R+RaKaRKhCNKpSolJNxifeWyUSOkgaukn4
752TquxFZDHjP9rfqhkuf5npWiWa0e8SMAREDECOCUNRpWiSwJdqHFqGuYSr
fIBMdAPwAv8P9P727QoQMu+hDA+vyjX+YgBySBhIDBOOlURZb8L6cnAFgMxb
WReNSsw1mftKVxdFxAPv6P8L7UsiMNUDqS6Q+KBxEAAjHEjlEZJ/lZk/sXjK
RzHxxTBFYxMYJDZMZQGWwaZy/+TX2BCfPfiWjAEi8PpkEPfUBORCEl2ev7um
/JtXYKEnFor+AtnEovw/qKrwhS+4RkPA1Lo2ufYV4hkiql0ibpbSZJMqJ6jE
iMQnUa++EU2JxB1SGyGeQaK4MEolwZIcTmgwPJTNwybjbk28UThAF87R0ZaW
lp6eHiwiOSkpPj7eYDL629aXCj+f6MTtcp0+fToiMiI7J+cvAsB/aTp+X7iN
Q6gbAiaVGOuA5hTPcNNg7YcmpUUiBhqaYpn8HUqiqSSrTApN9oZHRUW8HGsc
qXlPGu32EM0VlG/L/SoxmjGNRhTmUcTr1P7ZUPhye1vbb37zm48++qi3txcX
k5OTb7jhhrvvvjskLFR3xC8bhJS7Tn1Dw7p16xITE99+550/P8n7W+Rfjx+5
NBeKSXmEMOBuhqAEE5ys5bjmGXYZw+WIqcb4xYSGaIybqAqhMp9BIgPO8x/S
uv+mmoNaEsKnLSeyjU8EdGUD922VeigLkAaqJ1iNtF28uHbt2jNnzsTGxhYX
F+Mi7PrXv/413p9/8QWz2RwQc74kTVCD4aEhj8djt9v/IvH8E0RjY+Mf//jH
hQsXzp07V1yRJOnPnOcyEI6OjrpcLpGQLFarwWSSUSYYIoKziu3tnwR5umXF
5akpM4anKqb0oWEXAqPEbilbQ4x04KyneZ9Zsbslgxwz1xAzWaUmSZXBZlxj
ziH3iKQZAGJwaJDBYPDhx+zklVdeqaysnDp16ubNm4EiLlZVVW3atOno0aOn
Tp0qKirSl/33Ri2wSX+FJ+n9gd9LL71UUVGRl5cXERHxBfAj/hB2dXVeOH9+
bGwUE6WnZ06eUqCxVI34OcWaWkxqm6nLTvvPeDrK2zVH1bluohBJkSSLYV5R
Mm3ZY3Q1g5G6zTEhmdcTcyKlMgoT59hYxenP+uw9iKZGk7l4SbFR5vhxJqAo
yo6dHwYFB697YF1GVqZY1rz58368fv2OHTuys7P1Jem+SPwI1/gHwYl4WUM5
AyPCzPmMmjruIj4a5m06476SG/mTO98V7wekEgrxJg70JyZsIJeF6phNrMDR
Yc7sOfv27itevDg4OHj8XtwXhUiB9kG9K0BH3YbGIUxOTmpvax0ZdrgVT2tT
Q3SULSYxnkmqhlqyrhvsrzJ1fSK5e1qrjzVpYyNjYZLGnMykDnR+uivGddyo
DnsMNnPaCsk2QyPB0B94bGNzfWdnm9szZjZZ87LyLCaL/xqGhoeQ/5BLciZN
YuL5AFu4aCFe/iSNZ17Ny58pJ0hYJ5V8qmfUVgAIcVl1yrTgDXfepWp8DqJR
P0vXCbWuU11fnC2zJC+EIL7oJ9TH/ovbUlEQkwBi71M9nQD7RPwg/5JiWHWx
xq1BICcG6u9iqgDf9bO9iRBifE5Ojr2/d3TEM+Icrmu4EBUbhcpdkozEmm7K
WOGy16hOZ/+IZZgaFZb/BoNod6TWEj5UYVU7CTHR8CxT2nWUBuFHMK2BQcfF
iy3IFgi2kZFRycmpKDIkadweLWYLXmNOJ4CMj4snQsVMUlFTjqcNMURRle6u
rtbW1o6ODlyw2Wxp6emxMTGygedXyuCDbk5+dtI1NjZ/wQLiSzlCm+VHjxiM
xpkzZ8i+YI4Obrf7xIkTFouloKBAlmXdDxSP0tHeDp7c19cHFcTGx6WmpuKO
kiQJp/d3DvR3uV2dnZ319fWDjgFJlpJTUmCaUVFRsiRTonlRpERfO7ceMjg4
iJQxNT8/ITHBK6o3ipDh4aH2jo6GhobRkRGTyZyWlpqUlBQaFkZ8lJPIciCE
aJGRkSmpabU1FxTF093V2dXREZuc6mH2EmKMm+OMPd1zsXXQHa+QYCMdjZCb
UsmZKNpsJkMqcStynCm5mITmEWLkRb/W2FDvcNihWaPBnJ2dAznGK0MuLthK
0Zw5Bw4cePP1N37yk594ryvcfi8xXERdJM5t27bV1dU5nU5cMRqNmZmZN954
4+233x4cEiJU5BgY2PjYYxcvXtx/4EBYWKhuAf39/WvWrAEGL7/8ckJSIkMC
91LV5samBx98MC4u7re//W10dLQQbGRk5Llf/mr37t2AEBjjoslkmjJlym23
3XbjypVI52xfESyceHcie3t6kNJ27f4I/Vnc0rSgoCD0v/XWW7/xjW9cieqg
2/HjxyHVHXfcUfrIw0IkwiP/hZqa559//sjhwyi0xBLCw8MLCwvv+d73CmfN
orLsnzXljRs3+seV8PCwltZWj0dR3Z6RoZGw8PDgYIvMtlhCNEN8JdKgFuah
xmitJYucjCO1ZrVfkd0sAtgWGCffIZniNFVmqmluqq6uUlUPTDIjIys9PUuS
DXoo1xeVmpLy8ccfHy8vP37sWL/d3tXVhdSIxtYjjW87dHd3lz5UumXLlqGh
ofz8/AULFuAdNl5dXX3w4MHDhw8vKynBKGAIXR85crTy7NnsrKzJkydT7vQw
iw8++AD5FcMRaabmT/Upkbz//vvby7YjAV933XWCatVcqLn3+9/ftWsXhITW
5s+fn5ubC0hAm/fu3VtbU7Ns2TKD0QAJ4abby8qAMSbZt28fZAW3LCycPTk3
F6Kfq67+cOdO+NnswkKTyaiHU7/ETDFnWVkZsn5JSQmLDdz7saJ77r4btA4E
Z9GiRbNmzcrIyBgeHj575swf/vCHmJgYyCNz/VzGCzG92WzNyZlUVXnWo3oc
9oGzJ09PnpIXGhrqHB6pr3E4PDY3JWYyEkWbIkizRMYUtl0jjdL4lr4oubYn
Li3KJFs72tsuXDgHV8aUJqM5IyNTNhgDIrhYRH5BwWOPPvrsL36BaHa0vBxM
OCEh4Zvf/CbsF3Wh6AWfg4vs2bMnKyvr/vvvnz17NkwS1+ErJ0+efPbZZ7G2
n/30p49t2hQWHoZgCDg/2rlz//791173TzAI6AVkG76OkI74g+s33XQT4euH
9nEdF0uWLDUbTdApnPXpp56CZYAM379uXW5ebkhwMPxtYHDgwP79v3ruObha
zksvfv/eexEDhMbgKD29vdD16jX3gVgiNeCO/X19+/bufe65597euhWmds/3
7kEM54mcSr4y15+q6Am5qrr6ySefhKi33HLLqlWrEJBxI4/iQUx89+23X331
1f965pnomJhrVqzQK5OAupDljJSUNGDQ3dWhKoqjf+DE8U+DQyxDww6EMkWF
A6vhWmu0VGsidklDzWgCc3Goqe1qorOutaGt1ySZR4aH3B4XxJNlQ2ZmVmho
uJcFSOPJXVAJaLxk2bK8KVP2w8Dr6qA7xJaf//zn7e3t6zdsEEv77MSJbX/a
hnT1s6eemlZQ4GWhkgTDQikJBf3bj34Ep1m+YsVX//l6/DpjxgzUJ6gsu7t7
UqxWBD04N+wduoDWPvnkk6Hh4ZDQEHyuq6s9f/485gEAgrB88P77SE4pKSnP
PPNMXEK8UDFyDu6y8utfR0wqfeihLVteX7JkST6XBJPgvSA///EnHk9KTpY4
R4XU0PLNt9xii46+b/Xqt958E042KTcXASngVEjz21HBPB635+Xf/a65uXnl
ypWlpaUhyA48p2BgUnLSD374Q8QJmMVLL74IC4O9ioHSJRASs9mSk5MHDqnK
Hjd1OV3Ovt5elIxjyhihqpUMx9PGKHqRah72UuQRmtilpI3QaLeijgyODtjt
Ho9LJP1oWwxCKNujYSbDzzYmLoDxF1lKSIj/9u23b3h0w5tvvfXCiy9GRkXB
3Lb96U+qoiIxAL+hwcFVd64qKMgX4DFWyReGD+ACq++7D9XLO+++A+NFB/AI
rBDpELlEpJzDR44gSyEAzps3D5ENjqjyjHvo0GEwKdhBGKcJ6IpIBRgeeOCB
2DhkBA3d2EtlYkBWsH8o197XV/ZBmSCAopU+/DC4hqgEiNjexReDYdmKFegP
8vXhjh0+tnLFhl9ramqOHTuGoO2Pn8AJtm6xWn54332Z2Vnnzp8rLz+qD7zk
pAJsR9NstpiEpOS6pnOaCqXAeGQVdTo0JkvREVHxUhTpARqSTGRVDqHJJWp/
pjaAQKGCiUJ4hfNgi9malpputQQJnhlYFvkBKWSlvEhYWrL0B10/eHzjJmgT
ykXMrK6qQp6bPWeOIPf6QNXrjnTBwoVIJEjhwAPEBDwXA5GfECRvuuVmsNuD
Bw5AqhUrVgC/I0eO7N+3b/mK5ciae/fuMRmNcBGhX8RbKBEkq+L06eamJrFL
JaKF7i59vX34d66qijmgysoXZKzpM2dInB8KnqmnC4xfuHgx0nBlZSUnxVfb
AcBY2BkkRAIGryR0QtoRB3rQ/+LiYjCy8xcufOXaa8UPhsvOBY1k50xqaW9x
O0cJUKQGwmEwGy2ZebNCiTRoP2Zxd3s0SY3IDZn6tdAWEz1XS91OAzuzEJUp
iYmJjUtMENFfZWeLgamQeaGPoYuFC/NdumTJa+npCHHITFjMgMNhtVi8jjKx
8hVfIyLCg4KscEFgIHg51gkgobjmpmb0QHxGHEb0Q0TFhIixvT29YASnT56K
i40FX1AZ66ZIrmNoTufvX3llQooSWccnPno6nWMeRRHFHIi+yWiaoGtev0rc
LMIjImATAwMDl9098Msp7H1oaBDpGcSY+N2OEO8BgfgKOoOe/hMGbnPr9oNs
kZuTe6G6yq26VN7bQOWklLTI2ATYvSnpBG3cphjNhpyb5eCs7OyQi80dgwNO
FG88d0ggJrlT8g1GsyAOkjgZFiW6fnjEAwv1xQq9JsNY5J62tjZoE9dh5s2t
rXa73T/m6AvAO5AeGR6x2aLhrHxGEhltg2uCgIDrok9XZ+eSpUsRn81Wy8zC
WXt37/n0+HFHvx3ZYdbs2anpaQKt4NAQa5AVlRzSWLTNRrx789oEvTAhtaKi
uSaDMTgoCPnV3t+PeUxmM99zYL31I29g3N/bCzqG5Vx6rqerQkE9y10dZmo2
mXq6uqhuPt7THRYa+bkf6WzvQPyJDI/wHcte8ciXzZiSnNLW3GL39IPXYMIg
swWuCWfWaJQ5o8Te32Cwhljji3BrI7x2Umbl2UHXiIvwwJ2cnBIWFh4QOvgR
oirQQgNRhj8h9OvgCbGGh4bB8pAMgCWCVf60adXnzx86dAikI+AESsxzcP8B
SJiZmQGwZZ7dcXH58mWfHDwIFAlPWkuXLkUOxb0WL16856Pdu3ftgr+BHZQs
K9EtGJ6aN3ny+epzoCcoNy9NXP7HJhAsPiEhOjYWfPhYeTksRjLI3v00zYsN
ihnEcLDAqVOncj/WJmrD2yTfx5SUVDCmUxUVSJ9x8fHU59C+u7NTOegB/At1
ha6uy++rCvZrDQrOmpQjSVCLbDSaMrOygqxBAEilZho1TU35mpS9ksg2dlxB
aFJSapQtBkUnhoPKp2dkaORqKkAo+E/eHHYHf6iDb8qoKvz1yJHDyAoo25EI
Mcny5ctRub/7zrv1dfUa2/FiS0MYBMWAjlCbo+SH0Vx77bVIb/qNEB4RkcA/
Pz50KMpmm1U4S9wd4RSd9x88COYJDlIwbZr/Ydb111/v9nheeOGFfn7+EHDU
JQpqoVOJU2LkV3wGRYQvsk0JRrrHT7Q//fRTUGWbzba0pCTgfFuswt8p0bDk
goICFK8QAEkBBYDQDD/oYRtJW7duraurQ5k4c+ZMXatX2Rpn94tPSEpKTgWK
UVG2tPQMdgSv8SNekM3clcFxSzRqZcRCVQ0GS3b2ZIPFDLSzc3JC9dM+/xl9
foMPcAIQ/ddf2/LkE0+0t7VpcHRVdbncb7z++tNPPQ0b/+6q70axDS26aPHi
G264wWG333XnnTs/3ImMxXZCFVXxeMAt7733XnAQdLjmmq/ougBIWOe06dNd
bjduNH3GDNSUInUlJyfPnTsXoW/U6SyaNxf0xz8mg0AuWLigtrb2X++6q/zo
URTagpTC/Le+9dZXrrnmheef11WP/qhf582fX37s2Nq1a1GkIhiwiKVpA46B
rW9tXbNmDT6vuvNOVCC4AfLCe++9h5IJZQO5JDUCKqPJCHadkJj4xhtvPLph
Q1Njo8bIsAoFwy9REW7evBnBds3atUgK+m6O4coQsrsYDcbM7Ozunp60jEyz
xerNmAwYSaOcarINZoU9WEG1iMjI5JQMFIXxCYnUWwP655EJ+8iwzQf//d8f
WPcACFtFRcWcwkKw8Pr6euAK/G677TZkL5GNZIMMnAYHBrZv375+/fosvu0C
DwRpBGEBoghi/1FaGhYaKp6BEFYCs4PD8U0WUsKiqKy7EaoLcHf0AReF4/o9
q0AQiksfKnWPucrLyyEb4hVMAXZQV1tbVVXFLM85JtiHoNlIchs3bkQRcuKz
z1avXj1t2rT4+HgwncrKsw31DVjId1atuvVb3xL7cCh8H3/8cXBOe78dH/Sb
Ut8JLf5Pyp30xJNPPPxQaVlZGZwYNS5EwhpPnTrV2tqKRPDIjx9BQvHuOgl9
apdr6oSmNNTXOp0j+ndNdaPY0PhmoAbnUUT15FYUt90x0N7epqoebz2lqleZ
HzZ+7Gj57d/+l+zMrJyMzMz0DLwWzJv/6iu/HxoY1Ieznooy6Bj41S9+Oa9o
blZGZhbvjPeZ02dsfurp7s4ujVWQ6oTJFaW2pnbxQqx3EbyKbUv4rp89exZ3
KZw5a5DfxV8q/Apm29HWvv6RH8+YNl2IJO5YvGjxlldfY4Ip+uK8q2hqbEL/
/ClT9f4ZaenLS5ZteW2LyznGqlv+qjpbWTR7Dkxw06ZNLIq4PTvKtmPtj214
FFFB4e6r8Abw7rrzrtycSWI2vOdkZt180827d++GeGItutjjBnhp3iJ+RJH4
Nsh5baDyp0OZJWjUw46uNL4rwZ53ovpG/uc+tsTVxiygoaEBakUSio2NnVtU
xA7rZWnCQNg8rzWRIdCzkRdtqAdQQlmtVv4o5HjJqMdqzFxxusKteNBN3xcW
P8HJjOzUYmbAUx3j2lC1fnt/xZkznZ2dCMtpaWnTp0/Xz6upz931YVCpw+H4
7MSJvr4+6CMvLy8nJyfgqQNo79y5c1gsuBX8CRLDvUC4ZhfN0XfY9Xfg1NHe
fvp0BVKjxWzOz89Py0gXNX6AYj8HwstWM2KLReL7LSp7FFjip6sq8VV3E0L8
1SHkSR4WqStFEvUjDTzN0etrhrp4gtVXTun0OgBCwnkjf2ZZ0q3KPx/roTUQ
P2E0ZLybP6+5rE7Y9g3ldsa7AQDo2h/p8XdeKOuToKdXBt+kupDjdYW+6yMF
CnM1CIlvH9bf3LwfJEk8n8goJPNJSTxryB+okfSzcfYYlSTRq25JTNjqnXC8
Fwhh4HnsFXrqc+qmqoqdDT978p/qsi7oZY9UDzwT4grx217Q7VTTHxXwQ53w
zSOVz+Z/XEv8y3bhoPpaJl4PuKm/tJ8DYcDFyz3rQLzPdxP2LD7/qmreTTIx
hHxuGze3ifolV/XdK0kY8NP4zLpadVB5TA4IoYFSqZq+P+l/r8sI7Bt2qTya
94Cfeef4sxT6XkHAcxj+j+VOfIb2Siu9GoR/hvrF6ImifOmeUfp/0QxfcBy9
wud/tP/19j8VAwRWwrBNxgAAAABJRU5ErkJggg==

--------------oFrqe0ruB4O9OTfW6e9yUMrd--

--------------Iv7Uz1W0NeyUsRLWpgtrbWTK--