From bob at doolittle.us.com Thu Mar 12 10:54:38 2015 Content-Type: multipart/mixed; boundary="===============6653089427331470311==" MIME-Version: 1.0 From: Bob Doolittle To: devel at ovirt.org Subject: Re: [ovirt-devel] oVirt node, hosted-engine, oVirt appliance and cloud-init Date: Thu, 12 Mar 2015 10:54:27 -0400 Message-ID: <5501A8A3.3030906@doolittle.us.com> In-Reply-To: 1957349372.20499494.1426168924455.JavaMail.zimbra@redhat.com --===============6653089427331470311== 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. --------------070400040605090801030307 Content-Type: text/plain; charset=3Dwindows-1252 Content-Transfer-Encoding: 7bit On 03/12/2015 10:02 AM, Simone Tiraboschi wrote: > Hi all, > cloud-init is a powerful tool to configure from outside a cloud instance = or an appliance as in our scenario. > > Deploying the engine as an appliance is indeed a good way to speed up and= make easier the hosted-engine deployment: you don't need to install an OS = on the engine virtual machine and than install the engine and so on but you= could simply run a ready to use oVirt engine appliance. But you still need= to configure it and so cloud-init support within hosted-engine is a reason= able way to complement it. > > Then we could also integrate it with oVirt node to let the user input the= required info from node TUI in order to have an almost unattended hosted-e= ngine setup on oVirt node using an engine appliance with cloud-init. > > The idea is to collect the required information interactively from hosted= -engine setup or from node TUI (passing them to hosted-engine setup via an = answer file) and pass them to the appliance via cloud-init using a no-cloud= datasource. > > So now the question is what do you really want to configure via cloud-ini= t? > It's just to define what we want in order to be more focused on user need= s: > for instance we could configure engine VM instance hostname, we could set= the root password, we could create other users, we could upload ssh privat= e keys, we could run a command on the first boot and so on. > So, if you have any ideas or requirement about that it's the right time f= or it. Great suggestions, Simone! The things you list cover most of what I do to the engine VM (I do all of t= hose except for "configure ssh private keys"). In addition, I: * Add a couple of packages (e.g. zsh) * Configure alternate shells for some initial users (this could be "run a= command on the first boot", as long as adding the necessary packages was d= one before that somehow, perhaps simply as a prior command) * Populate some specific files, e.g.: o Add specific ssh *public* keys into the $HOME/.ssh/authorized_keys = files for some user and root accounts o Replace /etc/hosts with a master copy that contains all hosts on my= network I'd like to see the "additional packages" abstracted out somehow and added = prior to the "run a command on the first boot" step, as opposed to using "y= um" explicitly for one of those commands, but that's somewhat of a cosmetic= "nice to have" since obviously it can be done explicitly. It's separate co= nceptually, so would be nice to treat as such. I'm learning Puppet at the moment, and it strikes me that what you want to = do is pretty much the same thing that Puppet manifests are designed to do. Thanks, Bob > > thanks, > Simone > > > > > _______________________________________________ > Devel mailing list > Devel(a)ovirt.org > http://lists.ovirt.org/mailman/listinfo/devel --------------070400040605090801030307 Content-Type: text/html; charset=3Dwindows-1252 Content-Transfer-Encoding: quoted-printable On 03/12/2015 10:02 AM, Simone Tiraboschi wrote:
Hi all,
cloud-init is a powerful tool to configure from outside a cloud instance =
=3D
or an appliance as in our scenario.

Deploying the engine as an appliance is indeed a good way to speed up and=
=3D
 make easier the hosted-engine deployment: you don't need to install an O=
=3D
S on the engine virtual machine and than install the engine and so on but=
=3D
 you could simply run a ready to use oVirt engine appliance. But you stil=
=3D
l need to configure it and so cloud-init support within hosted-engine is =
=3D
a reasonable way to complement it.

Then we could also integrate it with oVirt node to let the user input the=
=3D
 required info from node TUI in order to have an almost unattended hosted=
=3D
-engine setup on oVirt node using an engine appliance with cloud-init.

The idea is to collect the required information interactively from hosted=
=3D
-engine setup or from node TUI (passing them to hosted-engine setup via a=
=3D
n answer file) and pass them to the appliance via cloud-init using a no-c=
=3D
loud datasource.

So now the question is what do you really want to configure via cloud-ini=
=3D
t?
It's just to define what we want in order to be more focused on user need=
=3D
s:
for instance we could configure engine VM instance hostname, we could set=
=3D
 the root password, we could create other users, we could upload ssh priv=
=3D
ate keys, we could run a command on the first boot and so on.
So, if you have any ideas or requirement about that it's the right time f=
=3D
or it.

Great suggestions, Simone!

The things you list cover most of what I do to the engine VM (I do all of those except for "configure ssh private keys"). In addition, I:


I'd like to see the "additional packages" abstracted out somehow and added prior to the "run a command on the first boot" step, as opposed to using "yum" explicitly for one of those commands, but that's somewhat of a cosmetic "nice to have" since obviously it can be done explicitly. It's separate conceptually, so would be nice to treat as such.

I'm learning Puppet at the moment, and it strikes me that what you want to do is pretty much the same thing that Puppet manifests are designed to do.

Thanks,
=3DA0=3DA0 Bob


thanks,
Simone




_______________________________________________
Devel mailing list
Dev=3D
el(a)ovirt.org
http://lists.ovirt.org/mailman/listinfo/devel

--------------070400040605090801030307-- --===============6653089427331470311== Content-Type: multipart/alternative MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.bin" VGhpcyBpcyBhIG11bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC4KLS0tLS0tLS0tLS0t LS0wNzA0MDAwNDA2MDUwOTA4MDEwMzAzMDcKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFy c2V0PXdpbmRvd3MtMTI1MgpDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CgpPbiAwMy8x Mi8yMDE1IDEwOjAyIEFNLCBTaW1vbmUgVGlyYWJvc2NoaSB3cm90ZToKPiBIaSBhbGwsCj4gY2xv dWQtaW5pdCBpcyBhIHBvd2VyZnVsIHRvb2wgdG8gY29uZmlndXJlIGZyb20gb3V0c2lkZSBhIGNs b3VkIGluc3RhbmNlIG9yIGFuIGFwcGxpYW5jZSBhcyBpbiBvdXIgc2NlbmFyaW8uCj4KPiBEZXBs b3lpbmcgdGhlIGVuZ2luZSBhcyBhbiBhcHBsaWFuY2UgaXMgaW5kZWVkIGEgZ29vZCB3YXkgdG8g c3BlZWQgdXAgYW5kIG1ha2UgZWFzaWVyIHRoZSBob3N0ZWQtZW5naW5lIGRlcGxveW1lbnQ6IHlv dSBkb24ndCBuZWVkIHRvIGluc3RhbGwgYW4gT1Mgb24gdGhlIGVuZ2luZSB2aXJ0dWFsIG1hY2hp bmUgYW5kIHRoYW4gaW5zdGFsbCB0aGUgZW5naW5lIGFuZCBzbyBvbiBidXQgeW91IGNvdWxkIHNp bXBseSBydW4gYSByZWFkeSB0byB1c2Ugb1ZpcnQgZW5naW5lIGFwcGxpYW5jZS4gQnV0IHlvdSBz dGlsbCBuZWVkIHRvIGNvbmZpZ3VyZSBpdCBhbmQgc28gY2xvdWQtaW5pdCBzdXBwb3J0IHdpdGhp biBob3N0ZWQtZW5naW5lIGlzIGEgcmVhc29uYWJsZSB3YXkgdG8gY29tcGxlbWVudCBpdC4KPgo+ IFRoZW4gd2UgY291bGQgYWxzbyBpbnRlZ3JhdGUgaXQgd2l0aCBvVmlydCBub2RlIHRvIGxldCB0 aGUgdXNlciBpbnB1dCB0aGUgcmVxdWlyZWQgaW5mbyBmcm9tIG5vZGUgVFVJIGluIG9yZGVyIHRv IGhhdmUgYW4gYWxtb3N0IHVuYXR0ZW5kZWQgaG9zdGVkLWVuZ2luZSBzZXR1cCBvbiBvVmlydCBu b2RlIHVzaW5nIGFuIGVuZ2luZSBhcHBsaWFuY2Ugd2l0aCBjbG91ZC1pbml0Lgo+Cj4gVGhlIGlk ZWEgaXMgdG8gY29sbGVjdCB0aGUgcmVxdWlyZWQgaW5mb3JtYXRpb24gaW50ZXJhY3RpdmVseSBm cm9tIGhvc3RlZC1lbmdpbmUgc2V0dXAgb3IgZnJvbSBub2RlIFRVSSAocGFzc2luZyB0aGVtIHRv IGhvc3RlZC1lbmdpbmUgc2V0dXAgdmlhIGFuIGFuc3dlciBmaWxlKSBhbmQgcGFzcyB0aGVtIHRv IHRoZSBhcHBsaWFuY2UgdmlhIGNsb3VkLWluaXQgdXNpbmcgYSBuby1jbG91ZCBkYXRhc291cmNl Lgo+Cj4gU28gbm93IHRoZSBxdWVzdGlvbiBpcyB3aGF0IGRvIHlvdSByZWFsbHkgd2FudCB0byBj b25maWd1cmUgdmlhIGNsb3VkLWluaXQ/Cj4gSXQncyBqdXN0IHRvIGRlZmluZSB3aGF0IHdlIHdh bnQgaW4gb3JkZXIgdG8gYmUgbW9yZSBmb2N1c2VkIG9uIHVzZXIgbmVlZHM6Cj4gZm9yIGluc3Rh bmNlIHdlIGNvdWxkIGNvbmZpZ3VyZSBlbmdpbmUgVk0gaW5zdGFuY2UgaG9zdG5hbWUsIHdlIGNv dWxkIHNldCB0aGUgcm9vdCBwYXNzd29yZCwgd2UgY291bGQgY3JlYXRlIG90aGVyIHVzZXJzLCB3 ZSBjb3VsZCB1cGxvYWQgc3NoIHByaXZhdGUga2V5cywgd2UgY291bGQgcnVuIGEgY29tbWFuZCBv biB0aGUgZmlyc3QgYm9vdCBhbmQgc28gb24uCj4gU28sIGlmIHlvdSBoYXZlIGFueSBpZGVhcyBv ciByZXF1aXJlbWVudCBhYm91dCB0aGF0IGl0J3MgdGhlIHJpZ2h0IHRpbWUgZm9yIGl0LgoKR3Jl YXQgc3VnZ2VzdGlvbnMsIFNpbW9uZSEKClRoZSB0aGluZ3MgeW91IGxpc3QgY292ZXIgbW9zdCBv ZiB3aGF0IEkgZG8gdG8gdGhlIGVuZ2luZSBWTSAoSSBkbyBhbGwgb2YgdGhvc2UgZXhjZXB0IGZv ciAiY29uZmlndXJlIHNzaCBwcml2YXRlIGtleXMiKS4gSW4gYWRkaXRpb24sIEk6CgogICogQWRk IGEgY291cGxlIG9mIHBhY2thZ2VzIChlLmcuIHpzaCkKICAqIENvbmZpZ3VyZSBhbHRlcm5hdGUg c2hlbGxzIGZvciBzb21lIGluaXRpYWwgdXNlcnMgKHRoaXMgY291bGQgYmUgInJ1biBhIGNvbW1h bmQgb24gdGhlIGZpcnN0IGJvb3QiLCBhcyBsb25nIGFzIGFkZGluZyB0aGUgbmVjZXNzYXJ5IHBh Y2thZ2VzIHdhcyBkb25lIGJlZm9yZSB0aGF0IHNvbWVob3csIHBlcmhhcHMgc2ltcGx5IGFzIGEg cHJpb3IgY29tbWFuZCkKICAqIFBvcHVsYXRlIHNvbWUgc3BlY2lmaWMgZmlsZXMsIGUuZy46CiAg ICAgIG8gQWRkIHNwZWNpZmljIHNzaCAqcHVibGljKiBrZXlzIGludG8gdGhlICRIT01FLy5zc2gv YXV0aG9yaXplZF9rZXlzIGZpbGVzIGZvciBzb21lIHVzZXIgYW5kIHJvb3QgYWNjb3VudHMKICAg ICAgbyBSZXBsYWNlIC9ldGMvaG9zdHMgd2l0aCBhIG1hc3RlciBjb3B5IHRoYXQgY29udGFpbnMg YWxsIGhvc3RzIG9uIG15IG5ldHdvcmsKCgpJJ2QgbGlrZSB0byBzZWUgdGhlICJhZGRpdGlvbmFs IHBhY2thZ2VzIiBhYnN0cmFjdGVkIG91dCBzb21laG93IGFuZCBhZGRlZCBwcmlvciB0byB0aGUg InJ1biBhIGNvbW1hbmQgb24gdGhlIGZpcnN0IGJvb3QiIHN0ZXAsIGFzIG9wcG9zZWQgdG8gdXNp bmcgInl1bSIgZXhwbGljaXRseSBmb3Igb25lIG9mIHRob3NlIGNvbW1hbmRzLCBidXQgdGhhdCdz IHNvbWV3aGF0IG9mIGEgY29zbWV0aWMgIm5pY2UgdG8gaGF2ZSIgc2luY2Ugb2J2aW91c2x5IGl0 IGNhbiBiZSBkb25lIGV4cGxpY2l0bHkuIEl0J3Mgc2VwYXJhdGUgY29uY2VwdHVhbGx5LCBzbyB3 b3VsZCBiZSBuaWNlIHRvIHRyZWF0IGFzIHN1Y2guCgpJJ20gbGVhcm5pbmcgUHVwcGV0IGF0IHRo ZSBtb21lbnQsIGFuZCBpdCBzdHJpa2VzIG1lIHRoYXQgd2hhdCB5b3Ugd2FudCB0byBkbyBpcyBw cmV0dHkgbXVjaCB0aGUgc2FtZSB0aGluZyB0aGF0IFB1cHBldCBtYW5pZmVzdHMgYXJlIGRlc2ln bmVkIHRvIGRvLgoKVGhhbmtzLAogICBCb2IKCj4KPiB0aGFua3MsCj4gU2ltb25lCj4KPgo+Cj4K PiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IERldmVs IG1haWxpbmcgbGlzdAo+IERldmVsQG92aXJ0Lm9yZwo+IGh0dHA6Ly9saXN0cy5vdmlydC5vcmcv bWFpbG1hbi9saXN0aW5mby9kZXZlbAoKCi0tLS0tLS0tLS0tLS0tMDcwNDAwMDQwNjA1MDkwODAx MDMwMzA3CkNvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MgpDb250 ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBxdW90ZWQtcHJpbnRhYmxlCgo8aHRtbD4KICA8aGVhZD4K ICAgIDxtZXRhIGNvbnRlbnQ9M0QidGV4dC9odG1sOyBjaGFyc2V0PTNEd2luZG93cy0xMjUyIgog ICAgICBodHRwLWVxdWl2PTNEIkNvbnRlbnQtVHlwZSI+CiAgPC9oZWFkPgogIDxib2R5IGJnY29s b3I9M0QiI0ZGRkZGRiIgdGV4dD0zRCIjMDAwMDAwIj4KICAgIE9uIDAzLzEyLzIwMTUgMTA6MDIg QU0sIFNpbW9uZSBUaXJhYm9zY2hpIHdyb3RlOjxicj4KICAgIDxibG9ja3F1b3RlCiAgICAgIGNp dGU9M0QibWlkOjE5NTczNDkzNzIuMjA0OTk0OTQuMTQyNjE2ODkyNDQ1NS5KYXZhTWFpbC56aW1i cmFAcmVkaGE9CnQuY29tIgogICAgICB0eXBlPTNEImNpdGUiPgogICAgICA8cHJlIHdyYXA9M0Qi Ij5IaSBhbGwsCmNsb3VkLWluaXQgaXMgYSBwb3dlcmZ1bCB0b29sIHRvIGNvbmZpZ3VyZSBmcm9t IG91dHNpZGUgYSBjbG91ZCBpbnN0YW5jZSA9Cm9yIGFuIGFwcGxpYW5jZSBhcyBpbiBvdXIgc2Nl bmFyaW8uCgpEZXBsb3lpbmcgdGhlIGVuZ2luZSBhcyBhbiBhcHBsaWFuY2UgaXMgaW5kZWVkIGEg Z29vZCB3YXkgdG8gc3BlZWQgdXAgYW5kPQogbWFrZSBlYXNpZXIgdGhlIGhvc3RlZC1lbmdpbmUg ZGVwbG95bWVudDogeW91IGRvbid0IG5lZWQgdG8gaW5zdGFsbCBhbiBPPQpTIG9uIHRoZSBlbmdp bmUgdmlydHVhbCBtYWNoaW5lIGFuZCB0aGFuIGluc3RhbGwgdGhlIGVuZ2luZSBhbmQgc28gb24g YnV0PQogeW91IGNvdWxkIHNpbXBseSBydW4gYSByZWFkeSB0byB1c2Ugb1ZpcnQgZW5naW5lIGFw cGxpYW5jZS4gQnV0IHlvdSBzdGlsPQpsIG5lZWQgdG8gY29uZmlndXJlIGl0IGFuZCBzbyBjbG91 ZC1pbml0IHN1cHBvcnQgd2l0aGluIGhvc3RlZC1lbmdpbmUgaXMgPQphIHJlYXNvbmFibGUgd2F5 IHRvIGNvbXBsZW1lbnQgaXQuCgpUaGVuIHdlIGNvdWxkIGFsc28gaW50ZWdyYXRlIGl0IHdpdGgg b1ZpcnQgbm9kZSB0byBsZXQgdGhlIHVzZXIgaW5wdXQgdGhlPQogcmVxdWlyZWQgaW5mbyBmcm9t IG5vZGUgVFVJIGluIG9yZGVyIHRvIGhhdmUgYW4gYWxtb3N0IHVuYXR0ZW5kZWQgaG9zdGVkPQot ZW5naW5lIHNldHVwIG9uIG9WaXJ0IG5vZGUgdXNpbmcgYW4gZW5naW5lIGFwcGxpYW5jZSB3aXRo IGNsb3VkLWluaXQuCgpUaGUgaWRlYSBpcyB0byBjb2xsZWN0IHRoZSByZXF1aXJlZCBpbmZvcm1h dGlvbiBpbnRlcmFjdGl2ZWx5IGZyb20gaG9zdGVkPQotZW5naW5lIHNldHVwIG9yIGZyb20gbm9k ZSBUVUkgKHBhc3NpbmcgdGhlbSB0byBob3N0ZWQtZW5naW5lIHNldHVwIHZpYSBhPQpuIGFuc3dl ciBmaWxlKSBhbmQgcGFzcyB0aGVtIHRvIHRoZSBhcHBsaWFuY2UgdmlhIGNsb3VkLWluaXQgdXNp bmcgYSBuby1jPQpsb3VkIGRhdGFzb3VyY2UuCgpTbyBub3cgdGhlIHF1ZXN0aW9uIGlzIHdoYXQg ZG8geW91IHJlYWxseSB3YW50IHRvIGNvbmZpZ3VyZSB2aWEgY2xvdWQtaW5pPQp0PwpJdCdzIGp1 c3QgdG8gZGVmaW5lIHdoYXQgd2Ugd2FudCBpbiBvcmRlciB0byBiZSBtb3JlIGZvY3VzZWQgb24g dXNlciBuZWVkPQpzOgpmb3IgaW5zdGFuY2Ugd2UgY291bGQgY29uZmlndXJlIGVuZ2luZSBWTSBp bnN0YW5jZSBob3N0bmFtZSwgd2UgY291bGQgc2V0PQogdGhlIHJvb3QgcGFzc3dvcmQsIHdlIGNv dWxkIGNyZWF0ZSBvdGhlciB1c2Vycywgd2UgY291bGQgdXBsb2FkIHNzaCBwcml2PQphdGUga2V5 cywgd2UgY291bGQgcnVuIGEgY29tbWFuZCBvbiB0aGUgZmlyc3QgYm9vdCBhbmQgc28gb24uClNv LCBpZiB5b3UgaGF2ZSBhbnkgaWRlYXMgb3IgcmVxdWlyZW1lbnQgYWJvdXQgdGhhdCBpdCdzIHRo ZSByaWdodCB0aW1lIGY9Cm9yIGl0LjwvcHJlPgogICAgPC9ibG9ja3F1b3RlPgogICAgPGJyPgog ICAgR3JlYXQgc3VnZ2VzdGlvbnMsIFNpbW9uZSE8YnI+CiAgICA8YnI+CiAgICBUaGUgdGhpbmdz IHlvdSBsaXN0IGNvdmVyIG1vc3Qgb2Ygd2hhdCBJIGRvIHRvIHRoZSBlbmdpbmUgVk0gKEkgZG8K ICAgIGFsbCBvZiB0aG9zZSBleGNlcHQgZm9yICJjb25maWd1cmUgc3NoIHByaXZhdGUga2V5cyIp LiBJbiBhZGRpdGlvbiwKICAgIEk6PGJyPgogICAgPGJyPgogICAgPHVsPgogICAgICA8bGk+QWRk IGEgY291cGxlIG9mIHBhY2thZ2VzIChlLmcuIHpzaCk8L2xpPgogICAgICA8bGk+Q29uZmlndXJl IGFsdGVybmF0ZSBzaGVsbHMgZm9yIHNvbWUgaW5pdGlhbCB1c2VycyAodGhpcyBjb3VsZAogICAg ICAgIGJlICJydW4gYSBjb21tYW5kIG9uIHRoZSBmaXJzdCBib290IiwgYXMgbG9uZyBhcyBhZGRp bmcgdGhlCiAgICAgICAgbmVjZXNzYXJ5IHBhY2thZ2VzIHdhcyBkb25lIGJlZm9yZSB0aGF0IHNv bWVob3csIHBlcmhhcHMgc2ltcGx5CiAgICAgICAgYXMgYSBwcmlvciBjb21tYW5kKTxicj4KICAg ICAgPC9saT4KICAgICAgPGxpPlBvcHVsYXRlIHNvbWUgc3BlY2lmaWMgZmlsZXMsIGUuZy46PGJy PgogICAgICA8L2xpPgogICAgICA8dWw+CiAgICAgICAgPGxpPkFkZCBzcGVjaWZpYyBzc2ggKnB1 YmxpYyoga2V5cyBpbnRvIHRoZQogICAgICAgICAgJEhPTUUvLnNzaC9hdXRob3JpemVkX2tleXMg ZmlsZXMgZm9yIHNvbWUgdXNlciBhbmQgcm9vdAogICAgICAgICAgYWNjb3VudHM8L2xpPgogICAg ICAgIDxsaT5SZXBsYWNlIC9ldGMvaG9zdHMgd2l0aCBhIG1hc3RlciBjb3B5IHRoYXQgY29udGFp bnMgYWxsCiAgICAgICAgICBob3N0cyBvbiBteSBuZXR3b3JrPGJyPgogICAgICAgIDwvbGk+CiAg ICAgIDwvdWw+CiAgICA8L3VsPgogICAgPGJyPgogICAgSSdkIGxpa2UgdG8gc2VlIHRoZSAiYWRk aXRpb25hbCBwYWNrYWdlcyIgYWJzdHJhY3RlZCBvdXQgc29tZWhvdyBhbmQKICAgIGFkZGVkIHBy aW9yIHRvIHRoZSAicnVuIGEgY29tbWFuZCBvbiB0aGUgZmlyc3QgYm9vdCIgc3RlcCwgYXMKICAg IG9wcG9zZWQgdG8gdXNpbmcgInl1bSIgZXhwbGljaXRseSBmb3Igb25lIG9mIHRob3NlIGNvbW1h bmRzLCBidXQKICAgIHRoYXQncyBzb21ld2hhdCBvZiBhIGNvc21ldGljICJuaWNlIHRvIGhhdmUi IHNpbmNlIG9idmlvdXNseSBpdCBjYW4KICAgIGJlIGRvbmUgZXhwbGljaXRseS4gSXQncyBzZXBh cmF0ZSBjb25jZXB0dWFsbHksIHNvIHdvdWxkIGJlIG5pY2UgdG8KICAgIHRyZWF0IGFzIHN1Y2gu PGJyPgogICAgPGJyPgogICAgSSdtIGxlYXJuaW5nIFB1cHBldCBhdCB0aGUgbW9tZW50LCBhbmQg aXQgc3RyaWtlcyBtZSB0aGF0IHdoYXQgeW91CiAgICB3YW50IHRvIGRvIGlzIHByZXR0eSBtdWNo IHRoZSBzYW1lIHRoaW5nIHRoYXQgUHVwcGV0IG1hbmlmZXN0cyBhcmUKICAgIGRlc2lnbmVkIHRv IGRvLjxicj4KICAgIDxicj4KICAgIFRoYW5rcyw8YnI+CiAgICA9QTA9QTAgQm9iPGJyPgogICAg PGJyPgogICAgPGJsb2NrcXVvdGUKICAgICAgY2l0ZT0zRCJtaWQ6MTk1NzM0OTM3Mi4yMDQ5OTQ5 NC4xNDI2MTY4OTI0NDU1LkphdmFNYWlsLnppbWJyYUByZWRoYT0KdC5jb20iCiAgICAgIHR5cGU9 M0QiY2l0ZSI+CiAgICAgIDxwcmUgd3JhcD0zRCIiPgoKdGhhbmtzLApTaW1vbmUKCgoKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRldmVsIG1haWxpbmcg bGlzdAo8YSBjbGFzcz0zRCJtb3otdHh0LWxpbmstYWJicmV2aWF0ZWQiIGhyZWY9M0QibWFpbHRv OkRldmVsQG92aXJ0Lm9yZyI+RGV2PQplbEBvdmlydC5vcmc8L2E+CjxhIGNsYXNzPTNEIm1vei10 eHQtbGluay1mcmVldGV4dCIgaHJlZj0zRCJodHRwOi8vbGlzdHMub3ZpcnQub3JnL21haWxtYW49 Ci9saXN0aW5mby9kZXZlbCI+aHR0cDovL2xpc3RzLm92aXJ0Lm9yZy9tYWlsbWFuL2xpc3RpbmZv L2RldmVsPC9hPgo8L3ByZT4KICAgIDwvYmxvY2txdW90ZT4KICAgIDxicj4KICA8L2JvZHk+Cjwv aHRtbD4KCi0tLS0tLS0tLS0tLS0tMDcwNDAwMDQwNjA1MDkwODAxMDMwMzA3LS0K --===============6653089427331470311==--