From omachace at redhat.com Thu Oct 29 10:56:24 2015 Content-Type: multipart/mixed; boundary="===============8785779194192217920==" MIME-Version: 1.0 From: Ondra Machacek To: users at ovirt.org Subject: Re: [ovirt-users] api access with poweruser role Date: Thu, 29 Oct 2015 15:56:20 +0100 Message-ID: <56323394.8050800@redhat.com> In-Reply-To: 5630A36D.6000202@netbulae.eu --===============8785779194192217920== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable This is a multi-part message in MIME format. --------------010300080002000006010702 Content-Type: text/plain; charset=3Dwindows-1252; format=3Dflowed Content-Transfer-Encoding: 7bit On 10/28/2015 11:29 AM, Jorick Astrego wrote: > > > On 10/26/2015 03:14 PM, Jorick Astrego wrote: >> >> >> On 10/26/2015 02:57 PM, Ondra Machacek wrote: >>> >>> >>> On 10/26/2015 02:53 PM, Jorick Astrego wrote: >>>> Hi, >>>> >>>> Currently I'm trying to add an ovirt compute resource in forman = >>>> that is limited to the VM's of the user. >>>> >>>> When I give this user the PowerUser role, I cannot access the api: >>>> >>>> query execution failed due to insufficient permissions >>>> >>> >>> Are you sending header 'Filter: true' with the request ? >>> If your user is not admin(PowerUserRole is not admin role), >>> you have to use this header. >>> >>> >> > > Hmm, not much response on foreman-users.. > > I checked the code of fog in my foreman install ( = > /opt/rh/ruby193/root/usr/share/gems/gems/fog-1.32.0/lib/fog/ovirt/compute= .rb = > ) and it appears to have the correct option merged: > > connection_opts[:filtered_api] =3D > options[:ovirt_filtered_api] > > > But I don't know what url the foreman actually generates, is there any = > way to capture the login string? I tried setting some DEBUG logging = > but don't get the output I'm looking for. > > > > > category=3D"org.ovirt.engine.core.bll.aaa.LoginUserCommand"> > > > category=3D"org.ovirt.engine.api.restapi.resource.AbstractBackendReso= urce"> > > > > It depends what url foreman client access. But you can set: And then you will see what commands was queried with or without the = filtered API. 2015-10-29 15:45:45,436 TRACE [org.ovirt.engine.core.bll.GetAllVmsQuery] = (ajp-/127.0.0.1:8702-1) [] START, = GetAllVmsQuery(VdcQueryParametersBase:{refresh=3D'true', = filtered=3D'true'}), log id: 53b3c8b9 ^^ This is example of running 'Filter: true' on /api/vms (you can see = filtered=3D'true'). > > > > > > > Met vriendelijke groet, With kind regards, > > Jorick Astrego > * > Netbulae Virtualization Experts * > ------------------------------------------------------------------------ > Tel: 053 20 30 270 info(a)netbulae.eu Staalsteden 4-3A KvK 08198180 > Fax: 053 20 30 271 www.netbulae.eu 7547 TA Enschede BTW NL821234584B01 > > > ------------------------------------------------------------------------ > > > > _______________________________________________ > Users mailing list > Users(a)ovirt.org > http://lists.ovirt.org/mailman/listinfo/users --------------010300080002000006010702 Content-Type: text/html; charset=3Dwindows-1252 Content-Transfer-Encoding: 8bit

On 10/28/2015 11:29 AM, Jorick Astrego wrote:


On 10/26/2015 03:14 PM, Jorick Astrego wrote:


On 10/26/2015 02:57 PM, Ondra Machacek wrote:


On 10/26/2015 02:53 PM, Jorick Astrego wrote:
Hi,

Currently I'm trying to add an ovirt compute resource in forman that is limited to the VM's of the user.

When I give this user the PowerUser role, I cannot access the api:

query execution failed due to insufficient permissions

Are you sending header 'Filter: true' with the request ?
If your user is not admin(PowerUserRole is not admin role),
you have to use this header.




Hmm, not much response on foreman-users..

I checked the code of fog in my foreman install ( /opt/rh/ruby193/root/usr/share/gems/gems/fog-1.32.0/lib/fog/ovirt/com= pute.rb ) and it appears to have the correct option merged:

=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 co= nnection_opts[:filtered_api]=C2=A0 =3D options[:ovirt_filtered_api]


But I don't know what url the foreman actually generates, is there any way to capture the login string? I tried setting some DEBUG logging but don't get the output I'm looking for.

=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <logger category=3D"org.ovirt.engine.core.bll.SearchQuery">
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 <level name=3D"DEBUG"/>
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 </logger>
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <logger category=3D"org.ovirt.engine.core.bll.aaa.LoginUserCommand">
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 <level name=3D"DEBUG"/>
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 </logger>
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 <logger category=3D"org.ovirt.engine.api.restapi.resource.AbstractBackendResource"&= gt;
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 <level name=3D"DEBUG"/>
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 </logger>



It depends what url foreman client access. But you can set:

<logger category=3D"org.ovirt.engine.core.bll">
=C2=A0=C2=A0=C2=A0 <level name=3D"ALL"/>
</logger>

And then you will see what commands was queried with or without the filtered API.

2015-10-29 15:45:45,436 TRACE [org.ovirt.engine.core.bll.GetAllVmsQuery] (ajp-/127.0.0.1:8702-1) [] START, GetAllVmsQuery(VdcQueryParametersBase:{refresh=3D'true', filtered=3D'true'}), log id: 53b3c8b9

^^ This is example of running 'Filter: true' on /api/vms (you can see filtered=3D'true').







Met vriendelijke groet, With kind regards,

Jorick Astrego

Netbulae Virtualization Experts


Tel: 053 20 30 270 info(a)netbulae.eu= Staalsteden 4-3A KvK 08198180
Fax: 053 20 30 271 www.netbulae.eu 7547 TA Enschede BTW NL821234584B01





_______________________________________________
Users mailing list
Use=
rs(a)ovirt.org
http://lists.ovirt.org/mailman/listinfo/users

--------------010300080002000006010702-- --===============8785779194192217920== Content-Type: multipart/alternative MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.bin" VGhpcyBpcyBhIG11bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC4KLS0tLS0tLS0tLS0t LS0wMTAzMDAwODAwMDIwMDAwMDYwMTA3MDIKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFy c2V0PXdpbmRvd3MtMTI1MjsgZm9ybWF0PWZsb3dlZApDb250ZW50LVRyYW5zZmVyLUVuY29kaW5n OiA3Yml0CgoKCk9uIDEwLzI4LzIwMTUgMTE6MjkgQU0sIEpvcmljayBBc3RyZWdvIHdyb3RlOgo+ Cj4KPiBPbiAxMC8yNi8yMDE1IDAzOjE0IFBNLCBKb3JpY2sgQXN0cmVnbyB3cm90ZToKPj4KPj4K Pj4gT24gMTAvMjYvMjAxNSAwMjo1NyBQTSwgT25kcmEgTWFjaGFjZWsgd3JvdGU6Cj4+Pgo+Pj4K Pj4+IE9uIDEwLzI2LzIwMTUgMDI6NTMgUE0sIEpvcmljayBBc3RyZWdvIHdyb3RlOgo+Pj4+IEhp LAo+Pj4+Cj4+Pj4gQ3VycmVudGx5IEknbSB0cnlpbmcgdG8gYWRkIGFuIG92aXJ0IGNvbXB1dGUg cmVzb3VyY2UgaW4gZm9ybWFuIAo+Pj4+IHRoYXQgaXMgbGltaXRlZCB0byB0aGUgVk0ncyBvZiB0 aGUgdXNlci4KPj4+Pgo+Pj4+IFdoZW4gSSBnaXZlIHRoaXMgdXNlciB0aGUgUG93ZXJVc2VyIHJv bGUsIEkgY2Fubm90IGFjY2VzcyB0aGUgYXBpOgo+Pj4+Cj4+Pj4gICAgIHF1ZXJ5IGV4ZWN1dGlv biBmYWlsZWQgZHVlIHRvIGluc3VmZmljaWVudCBwZXJtaXNzaW9ucwo+Pj4+Cj4+Pgo+Pj4gQXJl IHlvdSBzZW5kaW5nIGhlYWRlciAnRmlsdGVyOiB0cnVlJyB3aXRoIHRoZSByZXF1ZXN0ID8KPj4+ IElmIHlvdXIgdXNlciBpcyBub3QgYWRtaW4oUG93ZXJVc2VyUm9sZSBpcyBub3QgYWRtaW4gcm9s ZSksCj4+PiB5b3UgaGF2ZSB0byB1c2UgdGhpcyBoZWFkZXIuCj4+Pgo+Pj4KPj4KPgo+IEhtbSwg bm90IG11Y2ggcmVzcG9uc2Ugb24gZm9yZW1hbi11c2Vycy4uCj4KPiBJIGNoZWNrZWQgdGhlIGNv ZGUgb2YgZm9nIGluIG15IGZvcmVtYW4gaW5zdGFsbCAoIAo+IC9vcHQvcmgvcnVieTE5My9yb290 L3Vzci9zaGFyZS9nZW1zL2dlbXMvZm9nLTEuMzIuMC9saWIvZm9nL292aXJ0L2NvbXB1dGUucmIg Cj4gKSBhbmQgaXQgYXBwZWFycyB0byBoYXZlIHRoZSBjb3JyZWN0IG9wdGlvbiBtZXJnZWQ6Cj4K PiAgICAgICAgICAgICAgIGNvbm5lY3Rpb25fb3B0c1s6ZmlsdGVyZWRfYXBpXSAgPQo+ICAgICBv cHRpb25zWzpvdmlydF9maWx0ZXJlZF9hcGldCj4KPgo+IEJ1dCBJIGRvbid0IGtub3cgd2hhdCB1 cmwgdGhlIGZvcmVtYW4gYWN0dWFsbHkgZ2VuZXJhdGVzLCBpcyB0aGVyZSBhbnkgCj4gd2F5IHRv IGNhcHR1cmUgdGhlIGxvZ2luIHN0cmluZz8gSSB0cmllZCBzZXR0aW5nIHNvbWUgREVCVUcgbG9n Z2luZyAKPiBidXQgZG9uJ3QgZ2V0IHRoZSBvdXRwdXQgSSdtIGxvb2tpbmcgZm9yLgo+Cj4gICAg ICAgICAgICAgPGxvZ2dlciBjYXRlZ29yeT0ib3JnLm92aXJ0LmVuZ2luZS5jb3JlLmJsbC5TZWFy Y2hRdWVyeSI+Cj4gICAgICAgICAgICAgICAgICAgICA8bGV2ZWwgbmFtZT0iREVCVUciLz4KPiAg ICAgICAgICAgICA8L2xvZ2dlcj4KPiAgICAgICAgICAgICA8bG9nZ2VyCj4gICAgIGNhdGVnb3J5 PSJvcmcub3ZpcnQuZW5naW5lLmNvcmUuYmxsLmFhYS5Mb2dpblVzZXJDb21tYW5kIj4KPiAgICAg ICAgICAgICAgICAgICAgIDxsZXZlbCBuYW1lPSJERUJVRyIvPgo+ICAgICAgICAgICAgIDwvbG9n Z2VyPgo+ICAgICAgICAgICAgIDxsb2dnZXIKPiAgICAgY2F0ZWdvcnk9Im9yZy5vdmlydC5lbmdp bmUuYXBpLnJlc3RhcGkucmVzb3VyY2UuQWJzdHJhY3RCYWNrZW5kUmVzb3VyY2UiPgo+ICAgICAg ICAgICAgICAgICAgICAgPGxldmVsIG5hbWU9IkRFQlVHIi8+Cj4gICAgICAgICAgICAgPC9sb2dn ZXI+Cj4KPgoKSXQgZGVwZW5kcyB3aGF0IHVybCBmb3JlbWFuIGNsaWVudCBhY2Nlc3MuIEJ1dCB5 b3UgY2FuIHNldDoKCjxsb2dnZXIgY2F0ZWdvcnk9Im9yZy5vdmlydC5lbmdpbmUuY29yZS5ibGwi PgogICAgIDxsZXZlbCBuYW1lPSJBTEwiLz4KPC9sb2dnZXI+CgpBbmQgdGhlbiB5b3Ugd2lsbCBz ZWUgd2hhdCBjb21tYW5kcyB3YXMgcXVlcmllZCB3aXRoIG9yIHdpdGhvdXQgdGhlIApmaWx0ZXJl ZCBBUEkuCgoyMDE1LTEwLTI5IDE1OjQ1OjQ1LDQzNiBUUkFDRSBbb3JnLm92aXJ0LmVuZ2luZS5j b3JlLmJsbC5HZXRBbGxWbXNRdWVyeV0gCihhanAtLzEyNy4wLjAuMTo4NzAyLTEpIFtdIFNUQVJU LCAKR2V0QWxsVm1zUXVlcnkoVmRjUXVlcnlQYXJhbWV0ZXJzQmFzZTp7cmVmcmVzaD0ndHJ1ZScs IApmaWx0ZXJlZD0ndHJ1ZSd9KSwgbG9nIGlkOiA1M2IzYzhiOQoKXl4gVGhpcyBpcyBleGFtcGxl IG9mIHJ1bm5pbmcgJ0ZpbHRlcjogdHJ1ZScgb24gL2FwaS92bXMgKHlvdSBjYW4gc2VlIApmaWx0 ZXJlZD0ndHJ1ZScpLgoKPgo+Cj4KPgo+Cj4KPiBNZXQgdnJpZW5kZWxpamtlIGdyb2V0LCBXaXRo IGtpbmQgcmVnYXJkcywKPgo+IEpvcmljayBBc3RyZWdvCj4gKgo+IE5ldGJ1bGFlIFZpcnR1YWxp emF0aW9uIEV4cGVydHMgKgo+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+IFRlbDogMDUzIDIwIDMwIDI3MCAJ aW5mb0BuZXRidWxhZS5ldSAJU3RhYWxzdGVkZW4gNC0zQSAJS3ZLIDA4MTk4MTgwCj4gRmF4OiAw NTMgMjAgMzAgMjcxIAl3d3cubmV0YnVsYWUuZXUgCTc1NDcgVEEgRW5zY2hlZGUgCUJUVyBOTDgy MTIzNDU4NEIwMQo+Cj4KPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPgo+Cj4KPiBfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IFVzZXJzIG1haWxpbmcgbGlzdAo+IFVz ZXJzQG92aXJ0Lm9yZwo+IGh0dHA6Ly9saXN0cy5vdmlydC5vcmcvbWFpbG1hbi9saXN0aW5mby91 c2VycwoKCi0tLS0tLS0tLS0tLS0tMDEwMzAwMDgwMDAyMDAwMDA2MDEwNzAyCkNvbnRlbnQtVHlw ZTogdGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MgpDb250ZW50LVRyYW5zZmVyLUVuY29k aW5nOiA4Yml0Cgo8aHRtbD4KICA8aGVhZD4KICAgIDxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsg Y2hhcnNldD13aW5kb3dzLTEyNTIiCiAgICAgIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSI+CiAg PC9oZWFkPgogIDxib2R5IGJnY29sb3I9IiNGRkZGRkYiIHRleHQ9IiMwMDAwMDAiPgogICAgPGJy PgogICAgPGJyPgogICAgPGRpdiBjbGFzcz0ibW96LWNpdGUtcHJlZml4Ij5PbiAxMC8yOC8yMDE1 IDExOjI5IEFNLCBKb3JpY2sgQXN0cmVnbwogICAgICB3cm90ZTo8YnI+CiAgICA8L2Rpdj4KICAg IDxibG9ja3F1b3RlIGNpdGU9Im1pZDo1NjMwQTM2RC42MDAwMjAyQG5ldGJ1bGFlLmV1IiB0eXBl PSJjaXRlIj4KICAgICAgPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3Mt MTI1MiIKICAgICAgICBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiPgogICAgICA8YnI+CiAgICAg IDxicj4KICAgICAgPGRpdiBjbGFzcz0ibW96LWNpdGUtcHJlZml4Ij5PbiAxMC8yNi8yMDE1IDAz OjE0IFBNLCBKb3JpY2sKICAgICAgICBBc3RyZWdvIHdyb3RlOjxicj4KICAgICAgPC9kaXY+CiAg ICAgIDxibG9ja3F1b3RlIGNpdGU9Im1pZDo1NjJFMzU1RC40MDMwMjAxQG5ldGJ1bGFlLmV1IiB0 eXBlPSJjaXRlIj4KICAgICAgICA8bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2lu ZG93cy0xMjUyIgogICAgICAgICAgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIj4KICAgICAgICA8 YnI+CiAgICAgICAgPGJyPgogICAgICAgIDxkaXYgY2xhc3M9Im1vei1jaXRlLXByZWZpeCI+T24g MTAvMjYvMjAxNSAwMjo1NyBQTSwgT25kcmEKICAgICAgICAgIE1hY2hhY2VrIHdyb3RlOjxicj4K ICAgICAgICA8L2Rpdj4KICAgICAgICA8YmxvY2txdW90ZSBjaXRlPSJtaWQ6NTYyRTMxNDMuNDAx MDYwMEByZWRoYXQuY29tIiB0eXBlPSJjaXRlIj4KICAgICAgICAgIDxtZXRhIGNvbnRlbnQ9InRl eHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiCiAgICAgICAgICAgIGh0dHAtZXF1aXY9IkNv bnRlbnQtVHlwZSI+CiAgICAgICAgICA8YnI+CiAgICAgICAgICA8YnI+CiAgICAgICAgICA8ZGl2 IGNsYXNzPSJtb3otY2l0ZS1wcmVmaXgiPk9uIDEwLzI2LzIwMTUgMDI6NTMgUE0sIEpvcmljawog ICAgICAgICAgICBBc3RyZWdvIHdyb3RlOjxicj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAg PGJsb2NrcXVvdGUgY2l0ZT0ibWlkOjU2MkUzMDc1LjUwNTAyMDNAbmV0YnVsYWUuZXUiCiAgICAg ICAgICAgIHR5cGU9ImNpdGUiPgogICAgICAgICAgICA8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50 LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsKICAgICAgICAgICAgICBjaGFyc2V0PXdpbmRvd3Mt MTI1MiI+CiAgICAgICAgICAgIEhpLDxicj4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICBD dXJyZW50bHkgSSdtIHRyeWluZyB0byBhZGQgYW4gb3ZpcnQgY29tcHV0ZSByZXNvdXJjZSBpbgog ICAgICAgICAgICBmb3JtYW4gdGhhdCBpcyBsaW1pdGVkIHRvIHRoZSBWTSdzIG9mIHRoZSB1c2Vy LiA8YnI+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgV2hlbiBJIGdpdmUgdGhpcyB1c2Vy IHRoZSBQb3dlclVzZXIgcm9sZSwgSSBjYW5ub3QgYWNjZXNzCiAgICAgICAgICAgIHRoZSBhcGk6 PGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIDxibG9ja3F1b3RlPnF1ZXJ5IGV4ZWN1 dGlvbiBmYWlsZWQgZHVlIHRvIGluc3VmZmljaWVudAogICAgICAgICAgICAgIHBlcm1pc3Npb25z PGJyPgogICAgICAgICAgICA8L2Jsb2NrcXVvdGU+CiAgICAgICAgICA8L2Jsb2NrcXVvdGU+CiAg ICAgICAgICA8YnI+CiAgICAgICAgICBBcmUgeW91IHNlbmRpbmcgaGVhZGVyICdGaWx0ZXI6IHRy dWUnIHdpdGggdGhlIHJlcXVlc3QgPzxicj4KICAgICAgICAgIElmIHlvdXIgdXNlciBpcyBub3Qg YWRtaW4oUG93ZXJVc2VyUm9sZSBpcyBub3QgYWRtaW4gcm9sZSksPGJyPgogICAgICAgICAgeW91 IGhhdmUgdG8gdXNlIHRoaXMgaGVhZGVyLjxicj4KICAgICAgICAgIDxicj4KICAgICAgICAgIDxi cj4KICAgICAgICA8L2Jsb2NrcXVvdGU+CiAgICAgICAgPGJyPgogICAgICA8L2Jsb2NrcXVvdGU+ CiAgICAgIDxicj4KICAgICAgSG1tLCBub3QgbXVjaCByZXNwb25zZSBvbiBmb3JlbWFuLXVzZXJz Li4gPGJyPgogICAgICA8YnI+CiAgICAgIEkgY2hlY2tlZCB0aGUgY29kZSBvZiBmb2cgaW4gbXkg Zm9yZW1hbiBpbnN0YWxsICgKICAgICAgL29wdC9yaC9ydWJ5MTkzL3Jvb3QvdXNyL3NoYXJlL2dl bXMvZ2Vtcy9mb2ctMS4zMi4wL2xpYi9mb2cvb3ZpcnQvY29tcHV0ZS5yYgoKICAgICAgKSBhbmQg aXQgYXBwZWFycyB0byBoYXZlIHRoZSBjb3JyZWN0IG9wdGlvbiBtZXJnZWQ6PGJyPgogICAgICA8 YnI+CiAgICAgIDxibG9ja3F1b3RlPqCgoKCgoKCgoCBjb25uZWN0aW9uX29wdHNbOmZpbHRlcmVk X2FwaV2gID0KICAgICAgICBvcHRpb25zWzpvdmlydF9maWx0ZXJlZF9hcGldPGJyPgogICAgICAg IDxicj4KICAgICAgICA8YnI+CiAgICAgIDwvYmxvY2txdW90ZT4KICAgICAgQnV0IEkgZG9uJ3Qg a25vdyB3aGF0IHVybCB0aGUgZm9yZW1hbiBhY3R1YWxseSBnZW5lcmF0ZXMsIGlzIHRoZXJlCiAg ICAgIGFueSB3YXkgdG8gY2FwdHVyZSB0aGUgbG9naW4gc3RyaW5nPyBJIHRyaWVkIHNldHRpbmcg c29tZSBERUJVRwogICAgICBsb2dnaW5nIGJ1dCBkb24ndCBnZXQgdGhlIG91dHB1dCBJJ20gbG9v a2luZyBmb3IuPGJyPgogICAgICA8YnI+CiAgICAgIDxibG9ja3F1b3RlPqCgoKCgoKAgJmx0O2xv Z2dlcgogICAgICAgIGNhdGVnb3J5PSJvcmcub3ZpcnQuZW5naW5lLmNvcmUuYmxsLlNlYXJjaFF1 ZXJ5IiZndDs8YnI+CiAgICAgICAgoKCgoKCgoKCgoKCgoKCgICZsdDtsZXZlbCBuYW1lPSJERUJV RyIvJmd0Ozxicj4KICAgICAgICCgoKCgoKCgICZsdDsvbG9nZ2VyJmd0Ozxicj4KICAgICAgICCg oKCgoKCgICZsdDtsb2dnZXIKICAgICAgICBjYXRlZ29yeT0ib3JnLm92aXJ0LmVuZ2luZS5jb3Jl LmJsbC5hYWEuTG9naW5Vc2VyQ29tbWFuZCImZ3Q7PGJyPgogICAgICAgIKCgoKCgoKCgoKCgoKCg oCAmbHQ7bGV2ZWwgbmFtZT0iREVCVUciLyZndDs8YnI+CiAgICAgICAgoKCgoKCgoCAmbHQ7L2xv Z2dlciZndDs8YnI+CiAgICAgICAgoKCgoKCgoCAmbHQ7bG9nZ2VyCmNhdGVnb3J5PSJvcmcub3Zp cnQuZW5naW5lLmFwaS5yZXN0YXBpLnJlc291cmNlLkFic3RyYWN0QmFja2VuZFJlc291cmNlIiZn dDs8YnI+CiAgICAgICAgoKCgoKCgoKCgoKCgoKCgICZsdDtsZXZlbCBuYW1lPSJERUJVRyIvJmd0 Ozxicj4KICAgICAgICCgoKCgoKCgICZsdDsvbG9nZ2VyJmd0Ozxicj4KICAgICAgICA8YnI+CiAg ICAgIDwvYmxvY2txdW90ZT4KICAgICAgPGJyPgogICAgPC9ibG9ja3F1b3RlPgogICAgPGJyPgog ICAgSXQgZGVwZW5kcyB3aGF0IHVybCBmb3JlbWFuIGNsaWVudCBhY2Nlc3MuIEJ1dCB5b3UgY2Fu IHNldDo8YnI+CiAgICA8YnI+CiAgICAmbHQ7bG9nZ2VyIGNhdGVnb3J5PSJvcmcub3ZpcnQuZW5n aW5lLmNvcmUuYmxsIiZndDs8YnI+CiAgICCgoKAgJmx0O2xldmVsIG5hbWU9IkFMTCIvJmd0Ozxi cj4KICAgICZsdDsvbG9nZ2VyJmd0Ozxicj4KICAgIDxicj4KICAgIEFuZCB0aGVuIHlvdSB3aWxs IHNlZSB3aGF0IGNvbW1hbmRzIHdhcyBxdWVyaWVkIHdpdGggb3Igd2l0aG91dCB0aGUKICAgIGZp bHRlcmVkIEFQSS48YnI+CiAgICA8YnI+CiAgICAyMDE1LTEwLTI5IDE1OjQ1OjQ1LDQzNiBUUkFD RQogICAgW29yZy5vdmlydC5lbmdpbmUuY29yZS5ibGwuR2V0QWxsVm1zUXVlcnldIChhanAtLzEy Ny4wLjAuMTo4NzAyLTEpCiAgICBbXSBTVEFSVCwgR2V0QWxsVm1zUXVlcnkoVmRjUXVlcnlQYXJh bWV0ZXJzQmFzZTp7cmVmcmVzaD0ndHJ1ZScsCiAgICBmaWx0ZXJlZD0ndHJ1ZSd9KSwgbG9nIGlk OiA1M2IzYzhiOTxicj4KICAgIDxicj4KICAgIF5eIFRoaXMgaXMgZXhhbXBsZSBvZiBydW5uaW5n ICdGaWx0ZXI6IHRydWUnIG9uIC9hcGkvdm1zICh5b3UgY2FuCiAgICBzZWUgZmlsdGVyZWQ9J3Ry dWUnKS48YnI+CiAgICA8YnI+CiAgICA8YmxvY2txdW90ZSBjaXRlPSJtaWQ6NTYzMEEzNkQuNjAw MDIwMkBuZXRidWxhZS5ldSIgdHlwZT0iY2l0ZSI+CiAgICAgIDxibG9ja3F1b3RlPjxicj4KICAg ICAgICA8YnI+CiAgICAgIDwvYmxvY2txdW90ZT4KICAgICAgPGJyPgogICAgICA8YnI+CiAgICAg IDxicj4KICAgICAgPGJyPgogICAgICA8c3BhbiBzdHlsZT0iY29sb3I6IzYwNGM3ODsiPjxmb250 IGNvbG9yPSIwMDAwMDAiPjxzcGFuCiAgICAgICAgICAgIHN0eWxlPSJtc28tZmFyZWFzdC1sYW5n dWFnZTplbi1nYjsiIGxhbmc9Ik5MIj5NZXQKICAgICAgICAgICAgdnJpZW5kZWxpamtlIGdyb2V0 LCBXaXRoIGtpbmQgcmVnYXJkcyw8YnI+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgSm9y aWNrIEFzdHJlZ288YnI+CiAgICAgICAgICA8L3NwYW4+PC9mb250Pjwvc3Bhbj48YiBzdHlsZT0i Y29sb3I6IzYwNGM3OCI+PGJyPgogICAgICAgIE5ldGJ1bGFlIFZpcnR1YWxpemF0aW9uIEV4cGVy dHMgPC9iPjxicj4KICAgICAgPGhyIHN0eWxlPSJib3JkZXI6bm9uZTtib3JkZXItdG9wOjFweCBz b2xpZCAjY2NjOyI+CiAgICAgIDx0YWJsZSBzdHlsZT0id2lkdGg6IDUyMnB4Ij4KICAgICAgICA8 dGJvZHk+CiAgICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0ZCBzdHlsZT0id2lkdGg6IDEzMHB4 O2ZvbnQtc2l6ZTogMTBweCI+VGVsOiAwNTMgMjAgMzAgMjcwPC90ZD4KICAgICAgICAgICAgPHRk IHN0eWxlPSJ3aWR0aDogMTMwcHg7Zm9udC1zaXplOiAxMHB4Ij48YSBjbGFzcz0ibW96LXR4dC1s aW5rLWFiYnJldmlhdGVkIiBocmVmPSJtYWlsdG86aW5mb0BuZXRidWxhZS5ldSI+aW5mb0BuZXRi dWxhZS5ldTwvYT48L3RkPgogICAgICAgICAgICA8dGQgc3R5bGU9IndpZHRoOiAxMzBweDtmb250 LXNpemU6IDEwcHgiPlN0YWFsc3RlZGVuIDQtM0E8L3RkPgogICAgICAgICAgICA8dGQgc3R5bGU9 IndpZHRoOiAxMzBweDtmb250LXNpemU6IDEwcHgiPkt2SyAwODE5ODE4MDwvdGQ+CiAgICAgICAg ICA8L3RyPgogICAgICAgICAgPHRyPgogICAgICAgICAgICA8dGQgc3R5bGU9IndpZHRoOiAxMzBw eDtmb250LXNpemU6IDEwcHgiPkZheDogMDUzIDIwIDMwIDI3MTwvdGQ+CiAgICAgICAgICAgIDx0 ZCBzdHlsZT0id2lkdGg6IDEzMHB4O2ZvbnQtc2l6ZTogMTBweCI+PGEgY2xhc3M9Im1vei10eHQt bGluay1hYmJyZXZpYXRlZCIgaHJlZj0iaHR0cDovL3d3dy5uZXRidWxhZS5ldSI+d3d3Lm5ldGJ1 bGFlLmV1PC9hPjwvdGQ+CiAgICAgICAgICAgIDx0ZCBzdHlsZT0id2lkdGg6IDEzMHB4O2ZvbnQt c2l6ZTogMTBweCI+NzU0NyBUQSBFbnNjaGVkZTwvdGQ+CiAgICAgICAgICAgIDx0ZCBzdHlsZT0i d2lkdGg6IDEzMHB4O2ZvbnQtc2l6ZTogMTBweCI+QlRXIE5MODIxMjM0NTg0QjAxPC90ZD4KICAg ICAgICAgIDwvdHI+CiAgICAgICAgPC90Ym9keT4KICAgICAgPC90YWJsZT4KICAgICAgPGJyPgog ICAgICA8aHIgc3R5bGU9ImJvcmRlcjpub25lO2JvcmRlci10b3A6MXB4IHNvbGlkICNjY2M7Ij48 YnI+CiAgICAgIDxicj4KICAgICAgPGZpZWxkc2V0IGNsYXNzPSJtaW1lQXR0YWNobWVudEhlYWRl ciI+PC9maWVsZHNldD4KICAgICAgPGJyPgogICAgICA8cHJlIHdyYXA9IiI+X19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KVXNlcnMgbWFpbGluZyBsaXN0Cjxh IGNsYXNzPSJtb3otdHh0LWxpbmstYWJicmV2aWF0ZWQiIGhyZWY9Im1haWx0bzpVc2Vyc0Bvdmly dC5vcmciPlVzZXJzQG92aXJ0Lm9yZzwvYT4KPGEgY2xhc3M9Im1vei10eHQtbGluay1mcmVldGV4 dCIgaHJlZj0iaHR0cDovL2xpc3RzLm92aXJ0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3VzZXJzIj5o dHRwOi8vbGlzdHMub3ZpcnQub3JnL21haWxtYW4vbGlzdGluZm8vdXNlcnM8L2E+CjwvcHJlPgog ICAgPC9ibG9ja3F1b3RlPgogICAgPGJyPgogIDwvYm9keT4KPC9odG1sPgoKLS0tLS0tLS0tLS0t LS0wMTAzMDAwODAwMDIwMDAwMDYwMTA3MDItLQo= --===============8785779194192217920==--