From fabrice.bacchella at orange.fr Thu Apr 6 14:35:00 2017 Content-Type: multipart/mixed; boundary="===============3059353803507687136==" MIME-Version: 1.0 From: Fabrice Bacchella To: users at ovirt.org Subject: Re: [ovirt-users] SKD4 Date: Thu, 06 Apr 2017 16:34:57 +0200 Message-ID: <7856F857-47A7-4B61-A3D8-DB0542778B5A@orange.fr> In-Reply-To: CAJgorsZ3n+WhSnmZ=n4PMLX8SPbxw9MubUtXy=WLLELKCHhTbQ@mail.gmail.com --===============3059353803507687136== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable --Apple-Mail=3D_A0BCE435-D932-45C3-A53D-79ED9D41DC62 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=3Dutf-8 > Le 6 avr. 2017 =3DC3=3DA0 16:12, Yaniv Kaul a =3DC3= =3DA9crit =3D : >=3D20 >=3D20 >=3D20 > On Thu, Apr 6, 2017 at 4:49 PM, Fabrice Bacchella =3D > =3D wrote: >=3D20 >> Le 6 avr. 2017 =3DC3=3DA0 15:32, Yaniv Kaul > a =3DC3=3DA9crit : >>=3D20 >>=3D20 >>=3D20 >> On Thu, Apr 6, 2017 at 3:58 PM, Fabrice Bacchella =3D > =3D wrote: >> Yes I'm starting to understand that thinking about migrating code is =3D pointless. >>=3D20 >> The old skd3 code is just good to be thrown away. There is no hope =3D thinking about "migrating code". And as it's just a thin layer around =3D REST calls, it's up to us to try to make something usable around that. =3D So I expect a lot of sweat and tears to adapt my existing code. >>=3D20 >> Well, yes and no. Yes, it's not smooth, but once you 'get' the idea =3D behind the v4 API philosophy, it's quite easy to write to (at least in =3D Python). >=3D20 > An example of code that I'm unhappy to write and that a good sdk =3D should have provided: >=3D20 > searchfilter =3D3D "%s=3D3D%s" % (type, value) > vm =3D3D vms_service.list(search=3D3D searchfilter)[0] >=3D20 > instead of : > vms_service.list(search=3D3D {type: value})[0] >=3D20 > or even better: > vms_service.get(**{type: value}) >=3D20 >=3D20 > Yes, I see what you mean. 100% more LoC are currently needed vs. your =3D idea ;-) It's not about the number of LoC, it's about legibility, having code =3D that says what's it's doing and doing what it says.=3D --Apple-Mail=3D_A0BCE435-D932-45C3-A53D-79ED9D41DC62 Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=3Dutf-8
Le 6 avr. 2017 =3DC3=3DA0 16:12, Yaniv Kaul <ykaul(a)redhat.com>= ; a =3D =3DC3=3DA9crit :



On Th= u, =3D Apr 6, 2017 at 4:49 PM, Fabrice Bacchella <fabrice.bacchella(a)orange.fr> =3D wrote:

Le = 6 =3D avr. 2017 =3DC3=3DA0 15:32, Yaniv Kaul <ykaul(a)redhat.com> a =3DC3=3DA9cr= it =3D :



On Th= u, =3D Apr 6, 2017 at 3:58 PM, Fabrice Bacchella <fabrice.bacchella(a)orange.fr> =3D wrote:
Yes I'm starting to understand that thinking about migrating = =3D code is pointless.

The=3D old skd3 code is just good to be thrown away. There is no hope thinking = =3D about "migrating code". And as it's just a thin layer around REST calls, = =3D it's up to us to try to make something usable around that. So I expect a = =3D lot of sweat and tears to adapt my existing =3D code.

Well, yes and no. Yes, it's not smooth, but once you 'get' =3D the idea behind the v4 API philosophy, it's quite easy to write to (at =3D least in Python).

An example of code that I'm =3D unhappy to write and that a good sdk should have provided:

searchfilter =3D3D "%= s=3D3D%s"=3D % (type, value)
vm =3D3D vms_service.list(search=3D3D = <=3D wbr class=3D3D"">searchfilter)[0]

instead of :
vms_service.list(search=3D3D = {=3D type: value})[0]

or even better:
vms_service.get(**{type: =3D value})


Yes,=3D I see what you mean. 100% more LoC are currently needed vs. your idea =3D ;-)

It's not about the number of LoC, it's about =3D legibility, having code that says what's it's doing and doing what it =3D says.
=3D --Apple-Mail=3D_A0BCE435-D932-45C3-A53D-79ED9D41DC62-- --===============3059353803507687136== Content-Type: multipart/alternative MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.bin" Ci0tQXBwbGUtTWFpbD1fQTBCQ0U0MzUtRDkzMi00NUMzLUE1M0QtNzlFRDlENDFEQzYyCkNvbnRl bnQtVHJhbnNmZXItRW5jb2Rpbmc6IHF1b3RlZC1wcmludGFibGUKQ29udGVudC1UeXBlOiB0ZXh0 L3BsYWluOwoJY2hhcnNldD11dGYtOAoKCj4gTGUgNiBhdnIuIDIwMTcgPUMzPUEwIDE2OjEyLCBZ YW5pdiBLYXVsIDx5a2F1bEByZWRoYXQuY29tPiBhID1DMz1BOWNyaXQgPQo6Cj49MjAKPj0yMAo+ PTIwCj4gT24gVGh1LCBBcHIgNiwgMjAxNyBhdCA0OjQ5IFBNLCBGYWJyaWNlIEJhY2NoZWxsYSA9 CjxmYWJyaWNlLmJhY2NoZWxsYUBvcmFuZ2UuZnIgPG1haWx0bzpmYWJyaWNlLmJhY2NoZWxsYUBv cmFuZ2UuZnI+PiA9Cndyb3RlOgo+PTIwCj4+IExlIDYgYXZyLiAyMDE3ID1DMz1BMCAxNTozMiwg WWFuaXYgS2F1bCA8eWthdWxAcmVkaGF0LmNvbSA9CjxtYWlsdG86eWthdWxAcmVkaGF0LmNvbT4+ IGEgPUMzPUE5Y3JpdCA6Cj4+PTIwCj4+PTIwCj4+PTIwCj4+IE9uIFRodSwgQXByIDYsIDIwMTcg YXQgMzo1OCBQTSwgRmFicmljZSBCYWNjaGVsbGEgPQo8ZmFicmljZS5iYWNjaGVsbGFAb3Jhbmdl LmZyIDxtYWlsdG86ZmFicmljZS5iYWNjaGVsbGFAb3JhbmdlLmZyPj4gPQp3cm90ZToKPj4gWWVz IEknbSBzdGFydGluZyB0byB1bmRlcnN0YW5kIHRoYXQgdGhpbmtpbmcgYWJvdXQgbWlncmF0aW5n IGNvZGUgaXMgPQpwb2ludGxlc3MuCj4+PTIwCj4+IFRoZSBvbGQgc2tkMyBjb2RlIGlzIGp1c3Qg Z29vZCB0byBiZSB0aHJvd24gYXdheS4gVGhlcmUgaXMgbm8gaG9wZSA9CnRoaW5raW5nIGFib3V0 ICJtaWdyYXRpbmcgY29kZSIuIEFuZCBhcyBpdCdzIGp1c3QgYSB0aGluIGxheWVyIGFyb3VuZCA9 ClJFU1QgY2FsbHMsIGl0J3MgdXAgdG8gdXMgdG8gdHJ5IHRvIG1ha2Ugc29tZXRoaW5nIHVzYWJs ZSBhcm91bmQgdGhhdC4gPQpTbyBJIGV4cGVjdCBhIGxvdCBvZiBzd2VhdCBhbmQgdGVhcnMgdG8g YWRhcHQgbXkgZXhpc3RpbmcgY29kZS4KPj49MjAKPj4gV2VsbCwgeWVzIGFuZCBuby4gWWVzLCBp dCdzIG5vdCBzbW9vdGgsIGJ1dCBvbmNlIHlvdSAnZ2V0JyB0aGUgaWRlYSA9CmJlaGluZCB0aGUg djQgQVBJIHBoaWxvc29waHksIGl0J3MgcXVpdGUgZWFzeSB0byB3cml0ZSB0byAoYXQgbGVhc3Qg aW4gPQpQeXRob24pLgo+PTIwCj4gQW4gZXhhbXBsZSBvZiBjb2RlIHRoYXQgSSdtIHVuaGFwcHkg dG8gd3JpdGUgYW5kIHRoYXQgYSBnb29kIHNkayA9CnNob3VsZCBoYXZlIHByb3ZpZGVkOgo+PTIw Cj4gc2VhcmNoZmlsdGVyID0zRCAiJXM9M0QlcyIgJSAodHlwZSwgdmFsdWUpCj4gdm0gPTNEIHZt c19zZXJ2aWNlLmxpc3Qoc2VhcmNoPTNEIHNlYXJjaGZpbHRlcilbMF0KPj0yMAo+IGluc3RlYWQg b2YgOgo+IHZtc19zZXJ2aWNlLmxpc3Qoc2VhcmNoPTNEIHt0eXBlOiB2YWx1ZX0pWzBdCj49MjAK PiBvciBldmVuIGJldHRlcjoKPiB2bXNfc2VydmljZS5nZXQoKip7dHlwZTogdmFsdWV9KQo+PTIw Cj49MjAKPiBZZXMsIEkgc2VlIHdoYXQgeW91IG1lYW4uIDEwMCUgbW9yZSBMb0MgYXJlIGN1cnJl bnRseSBuZWVkZWQgdnMuIHlvdXIgPQppZGVhIDstKQoKSXQncyBub3QgYWJvdXQgdGhlIG51bWJl ciBvZiBMb0MsIGl0J3MgYWJvdXQgbGVnaWJpbGl0eSwgaGF2aW5nIGNvZGUgPQp0aGF0IHNheXMg d2hhdCdzIGl0J3MgZG9pbmcgYW5kIGRvaW5nIHdoYXQgaXQgc2F5cy49CgotLUFwcGxlLU1haWw9 X0EwQkNFNDM1LUQ5MzItNDVDMy1BNTNELTc5RUQ5RDQxREM2MgpDb250ZW50LVRyYW5zZmVyLUVu Y29kaW5nOiBxdW90ZWQtcHJpbnRhYmxlCkNvbnRlbnQtVHlwZTogdGV4dC9odG1sOwoJY2hhcnNl dD11dGYtOAoKPGh0bWw+PGhlYWQ+PG1ldGEgaHR0cC1lcXVpdj0zRCJDb250ZW50LVR5cGUiIGNv bnRlbnQ9M0QidGV4dC9odG1sID0KY2hhcnNldD0zRHV0Zi04Ij48L2hlYWQ+PGJvZHkgc3R5bGU9 M0Qid29yZC13cmFwOiBicmVhay13b3JkOyA9Ci13ZWJraXQtbmJzcC1tb2RlOiBzcGFjZTsgLXdl YmtpdC1saW5lLWJyZWFrOiBhZnRlci13aGl0ZS1zcGFjZTsiID0KY2xhc3M9M0QiIj48YnIgY2xh c3M9M0QiIj48ZGl2PjxibG9ja3F1b3RlIHR5cGU9M0QiY2l0ZSIgY2xhc3M9M0QiIj48ZGl2ID0K Y2xhc3M9M0QiIj5MZSA2IGF2ci4gMjAxNyA9QzM9QTAgMTY6MTIsIFlhbml2IEthdWwgJmx0Ozxh ID0KaHJlZj0zRCJtYWlsdG86eWthdWxAcmVkaGF0LmNvbSIgY2xhc3M9M0QiIj55a2F1bEByZWRo YXQuY29tPC9hPiZndDsgYSA9Cj1DMz1BOWNyaXQgOjwvZGl2PjxiciBjbGFzcz0zRCJBcHBsZS1p bnRlcmNoYW5nZS1uZXdsaW5lIj48ZGl2ID0KY2xhc3M9M0QiIj48ZGl2IGRpcj0zRCJsdHIiIGNs YXNzPTNEIiI+PGJyIGNsYXNzPTNEIiI+PGRpdiA9CmNsYXNzPTNEImdtYWlsX2V4dHJhIj48YnIg Y2xhc3M9M0QiIj48ZGl2IGNsYXNzPTNEImdtYWlsX3F1b3RlIj5PbiBUaHUsID0KQXByIDYsIDIw MTcgYXQgNDo0OSBQTSwgRmFicmljZSBCYWNjaGVsbGEgPHNwYW4gZGlyPTNEImx0ciIgPQpjbGFz cz0zRCIiPiZsdDs8YSBocmVmPTNEIm1haWx0bzpmYWJyaWNlLmJhY2NoZWxsYUBvcmFuZ2UuZnIi ID0KdGFyZ2V0PTNEIl9ibGFuayIgY2xhc3M9M0QiIj5mYWJyaWNlLmJhY2NoZWxsYUBvcmFuZ2Uu ZnI8L2E+Jmd0Ozwvc3Bhbj4gPQp3cm90ZTo8YnIgY2xhc3M9M0QiIj48YmxvY2txdW90ZSBjbGFz cz0zRCJnbWFpbF9xdW90ZSIgc3R5bGU9M0QibWFyZ2luOjBweD0KIDBweCAwcHggMC44ZXg7Ym9y ZGVyLWxlZnQ6MXB4IHNvbGlkID0KcmdiKDIwNCwyMDQsMjA0KTtwYWRkaW5nLWxlZnQ6MWV4Ij48 ZGl2IHN0eWxlPTNEIndvcmQtd3JhcDpicmVhay13b3JkIiA9CmNsYXNzPTNEIiI+PHNwYW4gY2xh c3M9M0QiZ21haWwtIj48YnIgY2xhc3M9M0QiIj48ZGl2ID0KY2xhc3M9M0QiIj48YmxvY2txdW90 ZSB0eXBlPTNEImNpdGUiIGNsYXNzPTNEIiI+PGRpdiBjbGFzcz0zRCIiPkxlIDYgPQphdnIuIDIw MTcgPUMzPUEwIDE1OjMyLCBZYW5pdiBLYXVsICZsdDs8YSBocmVmPTNEIm1haWx0bzp5a2F1bEBy ZWRoYXQuY29tIj0KIHRhcmdldD0zRCJfYmxhbmsiIGNsYXNzPTNEIiI+eWthdWxAcmVkaGF0LmNv bTwvYT4mZ3Q7IGEgPUMzPUE5Y3JpdCA9Cjo8L2Rpdj48YnIgPQpjbGFzcz0zRCJnbWFpbC1tXy02 MDA3ODczODgzOTIzNTU0NzQyQXBwbGUtaW50ZXJjaGFuZ2UtbmV3bGluZSI+PGRpdiA9CmNsYXNz PTNEIiI+PGRpdiBkaXI9M0QibHRyIiBjbGFzcz0zRCIiPjxiciBjbGFzcz0zRCIiPjxkaXYgPQpj bGFzcz0zRCJnbWFpbF9leHRyYSI+PGJyIGNsYXNzPTNEIiI+PGRpdiBjbGFzcz0zRCJnbWFpbF9x dW90ZSI+T24gVGh1LCA9CkFwciA2LCAyMDE3IGF0IDM6NTggUE0sIEZhYnJpY2UgQmFjY2hlbGxh IDxzcGFuIGRpcj0zRCJsdHIiID0KY2xhc3M9M0QiIj4mbHQ7PGEgaHJlZj0zRCJtYWlsdG86ZmFi cmljZS5iYWNjaGVsbGFAb3JhbmdlLmZyIiA9CnRhcmdldD0zRCJfYmxhbmsiIGNsYXNzPTNEIiI+ ZmFicmljZS5iYWNjaGVsbGFAb3JhbmdlLmZyPC9hPiZndDs8L3NwYW4+ID0Kd3JvdGU6PGJyIGNs YXNzPTNEIiI+PGJsb2NrcXVvdGUgY2xhc3M9M0QiZ21haWxfcXVvdGUiIHN0eWxlPTNEIm1hcmdp bjowcHg9CiAwcHggMHB4IDAuOGV4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCA9CnJnYigyMDQsMjA0 LDIwNCk7cGFkZGluZy1sZWZ0OjFleCI+PGRpdiBzdHlsZT0zRCJ3b3JkLXdyYXA6YnJlYWstd29y ZCIgPQpjbGFzcz0zRCIiPlllcyBJJ20gc3RhcnRpbmcgdG8gdW5kZXJzdGFuZCB0aGF0IHRoaW5r aW5nIGFib3V0IG1pZ3JhdGluZyA9CmNvZGUgaXMgcG9pbnRsZXNzLjxkaXYgY2xhc3M9M0QiIj48 YnIgY2xhc3M9M0QiIj48L2Rpdj48ZGl2IGNsYXNzPTNEIiI+VGhlPQogb2xkIHNrZDMgY29kZSBp cyBqdXN0IGdvb2QgdG8gYmUgdGhyb3duIGF3YXkuIFRoZXJlIGlzIG5vIGhvcGUgdGhpbmtpbmcg PQphYm91dCAibWlncmF0aW5nIGNvZGUiLiBBbmQgYXMgaXQncyBqdXN0IGEgdGhpbiBsYXllciBh cm91bmQgUkVTVCBjYWxscywgPQppdCdzIHVwIHRvIHVzIHRvIHRyeSB0byBtYWtlIHNvbWV0aGlu ZyB1c2FibGUgYXJvdW5kIHRoYXQuIFNvIEkgZXhwZWN0IGEgPQpsb3Qgb2Ygc3dlYXQgYW5kIHRl YXJzIHRvIGFkYXB0IG15IGV4aXN0aW5nID0KY29kZS48L2Rpdj48L2Rpdj48L2Jsb2NrcXVvdGU+ PGRpdiBjbGFzcz0zRCIiPjxiciBjbGFzcz0zRCIiPjwvZGl2PjxkaXYgPQpjbGFzcz0zRCIiPldl bGwsIHllcyBhbmQgbm8uIFllcywgaXQncyBub3Qgc21vb3RoLCBidXQgb25jZSB5b3UgJ2dldCcg PQp0aGUgaWRlYSBiZWhpbmQgdGhlIHY0IEFQSSBwaGlsb3NvcGh5LCBpdCdzIHF1aXRlIGVhc3kg dG8gd3JpdGUgdG8gKGF0ID0KbGVhc3QgaW4gUHl0aG9uKS48L2Rpdj48L2Rpdj48L2Rpdj48L2Rp dj48L2Rpdj48L2Jsb2NrcXVvdGU+PGJyID0KY2xhc3M9M0QiIj48L2Rpdj48L3NwYW4+PGRpdiBj bGFzcz0zRCIiPkFuIGV4YW1wbGUgb2YgY29kZSB0aGF0IEknbSA9CnVuaGFwcHkgdG8gd3JpdGUg YW5kIHRoYXQgYSBnb29kIHNkayBzaG91bGQgaGF2ZSBwcm92aWRlZDo8L2Rpdj48ZGl2ID0KY2xh c3M9M0QiIj48YnIgY2xhc3M9M0QiIj48L2Rpdj48ZGl2IGNsYXNzPTNEIiI+c2VhcmNoZmlsdGVy ID0zRCAiJXM9M0QlcyI9CiAlICh0eXBlLCB2YWx1ZSk8L2Rpdj48ZGl2IGNsYXNzPTNEIiI+PHNw YW4gPQpzdHlsZT0zRCJjb2xvcjpyZ2IoMzYsNDEsNDYpO2ZvbnQtZmFtaWx5OnNmbW9uby1yZWd1 bGFyLGNvbnNvbGFzLCZxdW90O2xpYj0KZXJhdGlvbiA9Cm1vbm8mcXVvdDssbWVubG8sY291cmll cixtb25vc3BhY2U7d2hpdGUtc3BhY2U6cHJlLXdyYXA7YmFja2dyb3VuZC1jb2xvcjpyPQpnYigy NTUsMjU1LDI1NSkiIGNsYXNzPTNEIiI+dm0gPC9zcGFuPjxzcGFuID0KY2xhc3M9M0QiZ21haWwt bV8tNjAwNzg3Mzg4MzkyMzU1NDc0MnBsLWsiID0Kc3R5bGU9M0QiYm94LXNpemluZzpib3JkZXIt Ym94O2NvbG9yOnJnYigxNjcsMjksOTMpO2ZvbnQtZmFtaWx5OnNmbW9uby1yZWc9CnVsYXIsY29u c29sYXMsJnF1b3Q7bGliZXJhdGlvbiA9Cm1vbm8mcXVvdDssbWVubG8sY291cmllcixtb25vc3Bh Y2U7d2hpdGUtc3BhY2U6cHJlLXdyYXAiPj0zRDwvc3Bhbj48c3BhbiA9CnN0eWxlPTNEImNvbG9y OnJnYigzNiw0MSw0Nik7Zm9udC1mYW1pbHk6c2Ztb25vLXJlZ3VsYXIsY29uc29sYXMsJnF1b3Q7 bGliPQplcmF0aW9uID0KbW9ubyZxdW90OyxtZW5sbyxjb3VyaWVyLG1vbm9zcGFjZTt3aGl0ZS1z cGFjZTpwcmUtd3JhcDtiYWNrZ3JvdW5kLWNvbG9yOnI9CmdiKDI1NSwyNTUsMjU1KSIgY2xhc3M9 M0QiIj4gdm1zX3NlcnZpY2UubGlzdCg8L3NwYW4+PHNwYW4gPQpjbGFzcz0zRCJnbWFpbC1tXy02 MDA3ODczODgzOTIzNTU0NzQycGwtdiIgPQpzdHlsZT0zRCJib3gtc2l6aW5nOmJvcmRlci1ib3g7 Y29sb3I6cmdiKDIzNywxMDYsNjcpO2ZvbnQtZmFtaWx5OnNmbW9uby1yZT0KZ3VsYXIsY29uc29s YXMsJnF1b3Q7bGliZXJhdGlvbiA9Cm1vbm8mcXVvdDssbWVubG8sY291cmllcixtb25vc3BhY2U7 d2hpdGUtc3BhY2U6cHJlLXdyYXAiPnNlYXJjaDwvc3Bhbj48c3BhPQpuIGNsYXNzPTNEImdtYWls LW1fLTYwMDc4NzM4ODM5MjM1NTQ3NDJwbC1rIiA9CnN0eWxlPTNEImJveC1zaXppbmc6Ym9yZGVy LWJveDtjb2xvcjpyZ2IoMTY3LDI5LDkzKTtmb250LWZhbWlseTpzZm1vbm8tcmVnPQp1bGFyLGNv bnNvbGFzLCZxdW90O2xpYmVyYXRpb24gPQptb25vJnF1b3Q7LG1lbmxvLGNvdXJpZXIsbW9ub3Nw YWNlO3doaXRlLXNwYWNlOnByZS13cmFwIj49M0Q8L3NwYW4+Jm5ic3A7PD0Kd2JyIGNsYXNzPTNE IiI+c2VhcmNoZmlsdGVyPHNwYW4gPQpzdHlsZT0zRCJjb2xvcjpyZ2IoMzYsNDEsNDYpO2ZvbnQt ZmFtaWx5OnNmbW9uby1yZWd1bGFyLGNvbnNvbGFzLCZxdW90O2xpYj0KZXJhdGlvbiA9Cm1vbm8m cXVvdDssbWVubG8sY291cmllcixtb25vc3BhY2U7d2hpdGUtc3BhY2U6cHJlLXdyYXA7YmFja2dy b3VuZC1jb2xvcjpyPQpnYigyNTUsMjU1LDI1NSkiIGNsYXNzPTNEIiI+KVs8L3NwYW4+PHNwYW4g PQpjbGFzcz0zRCJnbWFpbC1tXy02MDA3ODczODgzOTIzNTU0NzQycGwtYzEiID0Kc3R5bGU9M0Qi Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnJnYigwLDEzNCwxNzkpO2ZvbnQtZmFtaWx5OnNm bW9uby1yZWc9CnVsYXIsY29uc29sYXMsJnF1b3Q7bGliZXJhdGlvbiA9Cm1vbm8mcXVvdDssbWVu bG8sY291cmllcixtb25vc3BhY2U7d2hpdGUtc3BhY2U6cHJlLXdyYXAiPjA8L3NwYW4+PHNwYW4g PQpzdHlsZT0zRCJjb2xvcjpyZ2IoMzYsNDEsNDYpO2ZvbnQtZmFtaWx5OnNmbW9uby1yZWd1bGFy LGNvbnNvbGFzLCZxdW90O2xpYj0KZXJhdGlvbiA9Cm1vbm8mcXVvdDssbWVubG8sY291cmllcixt b25vc3BhY2U7d2hpdGUtc3BhY2U6cHJlLXdyYXA7YmFja2dyb3VuZC1jb2xvcjpyPQpnYigyNTUs MjU1LDI1NSkiIGNsYXNzPTNEIiI+XTwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPTNEIiI+PHNwYW4g PQpzdHlsZT0zRCJjb2xvcjpyZ2IoMzYsNDEsNDYpO2ZvbnQtZmFtaWx5OnNmbW9uby1yZWd1bGFy LGNvbnNvbGFzLCZxdW90O2xpYj0KZXJhdGlvbiA9Cm1vbm8mcXVvdDssbWVubG8sY291cmllcixt b25vc3BhY2U7d2hpdGUtc3BhY2U6cHJlLXdyYXA7YmFja2dyb3VuZC1jb2xvcjpyPQpnYigyNTUs MjU1LDI1NSkiIGNsYXNzPTNEIiI+PGJyIGNsYXNzPTNEIiI+PC9zcGFuPjwvZGl2PjxkaXYgPQpj bGFzcz0zRCIiPjxzcGFuID0Kc3R5bGU9M0QiY29sb3I6cmdiKDM2LDQxLDQ2KTtmb250LWZhbWls eTpzZm1vbm8tcmVndWxhcixjb25zb2xhcywmcXVvdDtsaWI9CmVyYXRpb24gPQptb25vJnF1b3Q7 LG1lbmxvLGNvdXJpZXIsbW9ub3NwYWNlO3doaXRlLXNwYWNlOnByZS13cmFwO2JhY2tncm91bmQt Y29sb3I6cj0KZ2IoMjU1LDI1NSwyNTUpIiBjbGFzcz0zRCIiPmluc3RlYWQgb2YgOjwvc3Bhbj48 L2Rpdj48ZGl2IGNsYXNzPTNEIiI+PHNwYW49CiA9CnN0eWxlPTNEImNvbG9yOnJnYigzNiw0MSw0 Nik7Zm9udC1mYW1pbHk6c2Ztb25vLXJlZ3VsYXIsY29uc29sYXMsJnF1b3Q7bGliPQplcmF0aW9u ID0KbW9ubyZxdW90OyxtZW5sbyxjb3VyaWVyLG1vbm9zcGFjZTt3aGl0ZS1zcGFjZTpwcmUtd3Jh cDtiYWNrZ3JvdW5kLWNvbG9yOnI9CmdiKDI1NSwyNTUsMjU1KSIgY2xhc3M9M0QiIj52bXNfc2Vy dmljZS5saXN0KDwvc3Bhbj48c3BhbiA9CmNsYXNzPTNEImdtYWlsLW1fLTYwMDc4NzM4ODM5MjM1 NTQ3NDJwbC12IiA9CnN0eWxlPTNEImJveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjpyZ2IoMjM3 LDEwNiw2Nyk7Zm9udC1mYW1pbHk6c2Ztb25vLXJlPQpndWxhcixjb25zb2xhcywmcXVvdDtsaWJl cmF0aW9uID0KbW9ubyZxdW90OyxtZW5sbyxjb3VyaWVyLG1vbm9zcGFjZTt3aGl0ZS1zcGFjZTpw cmUtd3JhcCI+c2VhcmNoPC9zcGFuPjxzcGE9Cm4gY2xhc3M9M0QiZ21haWwtbV8tNjAwNzg3Mzg4 MzkyMzU1NDc0MnBsLWsiID0Kc3R5bGU9M0QiYm94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnJn YigxNjcsMjksOTMpO2ZvbnQtZmFtaWx5OnNmbW9uby1yZWc9CnVsYXIsY29uc29sYXMsJnF1b3Q7 bGliZXJhdGlvbiA9Cm1vbm8mcXVvdDssbWVubG8sY291cmllcixtb25vc3BhY2U7d2hpdGUtc3Bh Y2U6cHJlLXdyYXAiPj0zRDwvc3Bhbj4mbmJzcDt7PQo8d2JyIGNsYXNzPTNEIiI+dHlwZTogdmFs dWV9PHNwYW4gPQpzdHlsZT0zRCJjb2xvcjpyZ2IoMzYsNDEsNDYpO2ZvbnQtZmFtaWx5OnNmbW9u by1yZWd1bGFyLGNvbnNvbGFzLCZxdW90O2xpYj0KZXJhdGlvbiA9Cm1vbm8mcXVvdDssbWVubG8s Y291cmllcixtb25vc3BhY2U7d2hpdGUtc3BhY2U6cHJlLXdyYXA7YmFja2dyb3VuZC1jb2xvcjpy PQpnYigyNTUsMjU1LDI1NSkiIGNsYXNzPTNEIiI+KVs8L3NwYW4+PHNwYW4gPQpjbGFzcz0zRCJn bWFpbC1tXy02MDA3ODczODgzOTIzNTU0NzQycGwtYzEiID0Kc3R5bGU9M0QiYm94LXNpemluZzpi b3JkZXItYm94O2NvbG9yOnJnYigwLDEzNCwxNzkpO2ZvbnQtZmFtaWx5OnNmbW9uby1yZWc9CnVs YXIsY29uc29sYXMsJnF1b3Q7bGliZXJhdGlvbiA9Cm1vbm8mcXVvdDssbWVubG8sY291cmllcixt b25vc3BhY2U7d2hpdGUtc3BhY2U6cHJlLXdyYXAiPjA8L3NwYW4+PHNwYW4gPQpzdHlsZT0zRCJj b2xvcjpyZ2IoMzYsNDEsNDYpO2ZvbnQtZmFtaWx5OnNmbW9uby1yZWd1bGFyLGNvbnNvbGFzLCZx dW90O2xpYj0KZXJhdGlvbiA9Cm1vbm8mcXVvdDssbWVubG8sY291cmllcixtb25vc3BhY2U7d2hp dGUtc3BhY2U6cHJlLXdyYXA7YmFja2dyb3VuZC1jb2xvcjpyPQpnYigyNTUsMjU1LDI1NSkiIGNs YXNzPTNEIiI+XTwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPTNEIiI+PHNwYW4gPQpzdHlsZT0zRCJj b2xvcjpyZ2IoMzYsNDEsNDYpO2ZvbnQtZmFtaWx5OnNmbW9uby1yZWd1bGFyLGNvbnNvbGFzLCZx dW90O2xpYj0KZXJhdGlvbiA9Cm1vbm8mcXVvdDssbWVubG8sY291cmllcixtb25vc3BhY2U7d2hp dGUtc3BhY2U6cHJlLXdyYXA7YmFja2dyb3VuZC1jb2xvcjpyPQpnYigyNTUsMjU1LDI1NSkiIGNs YXNzPTNEIiI+PGJyIGNsYXNzPTNEIiI+PC9zcGFuPjwvZGl2PjxkaXYgPQpjbGFzcz0zRCIiPjxz cGFuID0Kc3R5bGU9M0QiY29sb3I6cmdiKDM2LDQxLDQ2KTtmb250LWZhbWlseTpzZm1vbm8tcmVn dWxhcixjb25zb2xhcywmcXVvdDtsaWI9CmVyYXRpb24gPQptb25vJnF1b3Q7LG1lbmxvLGNvdXJp ZXIsbW9ub3NwYWNlO3doaXRlLXNwYWNlOnByZS13cmFwO2JhY2tncm91bmQtY29sb3I6cj0KZ2Io MjU1LDI1NSwyNTUpIiBjbGFzcz0zRCIiPm9yIGV2ZW4gYmV0dGVyOjwvc3Bhbj48L2Rpdj48ZGl2 ID0KY2xhc3M9M0QiIj48c3BhbiA9CnN0eWxlPTNEImNvbG9yOnJnYigzNiw0MSw0Nik7Zm9udC1m YW1pbHk6c2Ztb25vLXJlZ3VsYXIsY29uc29sYXMsJnF1b3Q7bGliPQplcmF0aW9uID0KbW9ubyZx dW90OyxtZW5sbyxjb3VyaWVyLG1vbm9zcGFjZTt3aGl0ZS1zcGFjZTpwcmUtd3JhcDtiYWNrZ3Jv dW5kLWNvbG9yOnI9CmdiKDI1NSwyNTUsMjU1KSIgY2xhc3M9M0QiIj52bXNfc2VydmljZS5nZXQo Kip7dHlwZTogPQp2YWx1ZX0pPC9zcGFuPjwvZGl2PjwvZGl2PjwvYmxvY2txdW90ZT48ZGl2IGNs YXNzPTNEIiI+PGJyID0KY2xhc3M9M0QiIj48L2Rpdj48ZGl2IGNsYXNzPTNEIiI+PGJyIGNsYXNz PTNEIiI+PC9kaXY+PGRpdiBjbGFzcz0zRCIiPlllcyw9CiBJIHNlZSB3aGF0IHlvdSBtZWFuLiAx MDAlIG1vcmUgTG9DIGFyZSBjdXJyZW50bHkgbmVlZGVkIHZzLiB5b3VyIGlkZWEgPQo7LSk8L2Rp dj48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48L2Jsb2NrcXVvdGU+PGJyID0KY2xhc3M9M0QiIj48 L2Rpdj48ZGl2Pkl0J3Mgbm90IGFib3V0IHRoZSBudW1iZXIgb2YgTG9DLCBpdCdzIGFib3V0ID0K bGVnaWJpbGl0eSwgaGF2aW5nIGNvZGUgdGhhdCBzYXlzIHdoYXQncyBpdCdzIGRvaW5nIGFuZCBk b2luZyB3aGF0IGl0ID0Kc2F5cy48L2Rpdj48L2JvZHk+PC9odG1sPj0KCi0tQXBwbGUtTWFpbD1f QTBCQ0U0MzUtRDkzMi00NUMzLUE1M0QtNzlFRDlENDFEQzYyLS0K --===============3059353803507687136==--