From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v7 09/11] drm: uevent for connector status change Date: Wed, 15 May 2019 10:24:49 +0200 Message-ID: <20190515082449.GA17751@phenom.ffwll.local> References: <31dad9a323382628911c5301a6eec179855aa815.camel@bootlin.com> <8aa3980a6948b9b2b989c237f8453ca54e72ad95.camel@bootlin.com> <20190514110242.6f6ba4b0@eldfell.localdomain> <9b6386239ecae396fc4f5cc4467f8e76721f2c83.camel@intel.com> <20190514163602.7d252b12@eldfell.localdomain> <20190515103731.16855195@eldfell.localdomain> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20190515103731.16855195@eldfell.localdomain> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Pekka Paalanen Cc: "Ser, Simon" , "maxime.ripard@bootlin.com" , Daniel Vetter , "intel-gfx@lists.freedesktop.org" , "dri-devel@lists.freedesktop.org" , "paul.kocialkowski@bootlin.com" , "airlied@linux.ie" , "thomas.petazzoni@bootlin.com" , "Vetter, Daniel" List-Id: dri-devel@lists.freedesktop.org T24gV2VkLCBNYXkgMTUsIDIwMTkgYXQgMTA6Mzc6MzFBTSArMDMwMCwgUGVra2EgUGFhbGFuZW4g d3JvdGU6Cj4gT24gVHVlLCAxNCBNYXkgMjAxOSAxNjozNDowMSArMDIwMAo+IERhbmllbCBWZXR0 ZXIgPGRhbmllbC52ZXR0ZXJAZmZ3bGwuY2g+IHdyb3RlOgo+IAo+ID4gT24gVHVlLCBNYXkgMTQs IDIwMTkgYXQgMzozNiBQTSBQZWtrYSBQYWFsYW5lbiA8cHBhYWxhbmVuQGdtYWlsLmNvbT4gd3Jv dGU6Cj4gPiA+Cj4gPiA+IE9uIFR1ZSwgMTQgTWF5IDIwMTkgMTM6MDI6MDkgKzAyMDAKPiA+ID4g RGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBmZndsbC5jaD4gd3JvdGU6Cj4gPiA+ICAKPiA+ ID4gPiBPbiBUdWUsIE1heSAxNCwgMjAxOSBhdCAxMDoxOCBBTSBTZXIsIFNpbW9uIDxzaW1vbi5z ZXJAaW50ZWwuY29tPiB3cm90ZTogIAo+ID4gPiA+ID4KPiA+ID4gPiA+IE9uIFR1ZSwgMjAxOS0w NS0xNCBhdCAxMTowMiArMDMwMCwgUGVra2EgUGFhbGFuZW4gd3JvdGU6ICAKPiAKPiAuLi4KPiAK PiA+ID4gPiA+ID4gSGkgRGFuaWVsLAo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiBqdXN0IHRvIGNs YXJpZnkgdGhlIGZpcnN0IGNhc2UsIHNwZWNpZmljIHRvIG9uZSB2ZXJ5IHBhcnRpY3VsYXIKPiA+ ID4gPiA+ID4gcHJvcGVydHk6Cj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+IFdpdGggSERDUCwgdGhl cmUgaXMgYSBwcm9wZXJ0eSB0aGF0IG1heSBjaGFuZ2UgZHluYW1pY2FsbHkgYXQgcnVudGltZQo+ ID4gPiA+ID4gPiAodGhlIHVuZGVzaXJlZC9kZXNpcmVkL2VuYWJsZWQgdHJpc3RhdGUpLiBVc2Vy c3BhY2UgbXVzdCBiZSBub3RpZmllZAo+ID4gPiA+ID4gPiB3aGVuIGl0IGNoYW5nZXMsIEkgZG8g bm90IHdhbnQgdXNlcnNwYWNlIGhhdmUgdG8gcG9sbCB0aGF0IHByb3BlcnR5Cj4gPiA+ID4gPiA+ IHdpdGggYSB0aW1lci4KPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gV2hlbiB0aGF0IHByb3BlcnR5 IGFsb25lIGNoYW5nZXMsIGFuZCB1c2Vyc3BhY2UgaXMgcHJlcGFyZWQgdG8gaGFuZGxlCj4gPiA+ ID4gPiA+IHRoYXQgcHJvcGVydHkgY2hhbmdpbmcgYWxvbmUsIGl0IG11c3Qgbm90IHRyaWdnZXIg YSByZXByb2JlIG9mIHRoZQo+ID4gPiA+ID4gPiBjb25uZWN0b3IuIFRoZXJlIGlzIG5vIHJlYXNv biB0byByZXByb2JlIGF0IHRoYXQgcG9pbnQgQUZBSVUuCj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ IEhvdyBkbyB5b3UgZW5zdXJlIHRoYXQgdXNlcnNwYWNlIGNhbiBhdm9pZCB0cmlnZ2VyaW5nIGEg cmVwcm9iZSB3aXRoIHRoZQo+ID4gPiA+ID4gPiBlcG9jaCBhcHByb2FjaCBvciB3aXRoIGFueSBh bHRlcm5hdGUgdWV2ZW50IGRlc2lnbj8KPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gV2UgbmVlZCBh biBldmVudCB0byB1c2Vyc3BhY2UgdGhhdCBpbmRpY2F0ZXMgdGhhdCByZS1yZWFkaW5nIHRoZQo+ ID4gPiA+ID4gPiBwcm9wZXJ0aWVzIGlzIGVub3VnaCBhbmQgcmVwcm9iZSBvZiB0aGUgY29ubmVj dG9yIGlzIG5vdCBuZWNlc3NhcnkuCj4gPiA+ID4gPiA+IFRoaXMgaXMgY29tcGxlbWVudGFyeSB0 byBpbmRpY2F0aW5nIHRvIHVzZXJzcGFjZSB0aGF0IG9ubHkgc29tZQo+ID4gPiA+ID4gPiBjb25u ZWN0b3JzIG5lZWQgdG8gYmUgcmVwcm9iZWQgaW5zdGVhZCBvZiBldmVyeXRoaW5nLiAgCj4gPiA+ ID4gPgo+ID4gPiA+ID4gQ2FuJ3QgeW91IHVzZSB0aGUgUFJPUEVSVFkgaGludD8gSWYgUFJPUEVS VFkgaXMgdGhlIEhEQ1Agb25lLCBza2lwIHRoZQo+ID4gPiA+ID4gcmVwcm9iaW5nLiBXb3VsZCB0 aGF0IHdvcms/ICAKPiA+ID4KPiA+ID4gSGksCj4gPiA+Cj4gPiA+IHllcywgdGhhdCB3b3VsZCB3 b3JrLCBpZiBpdCB3YXMgYWNjZXB0YWJsZSB0byBEUk0gdXBzdHJlYW0uIFRoZSByZXBsaWVzCj4g PiA+IHRvIFBhdWwgc2VlbWVkIHRvIGJlIGdvaW5nIHNvdXRoIHNvIGZhc3QgdGhhdCBJIHRob3Vn aHQgd2Ugd291bGRuJ3QgZ2V0Cj4gPiA+IGFueSBuZXcgdWV2ZW50IGZpZWxkcyBpbiBmYXZvdXIg b2YgImVwb2NoIGNvdW50ZXJzIi4KPiA+ID4gIAo+ID4gPiA+IFllcyB0aGF0J3MgdGhlIGlkZWEs IGRlcGVuZGluZyB1cG9uIHdoaWNoIHByb3BlcnR5IHlvdSBnZXQgeW91IGtub3cKPiA+ID4gPiBp dCdzIGEgc2luayBjaGFuZ2UgKG5lZWRzIGZ1bGwgcmVwcm9iZSkgb3Igc29tZXRoaW5nIGVsc2Ug bGlrZSBoZGNwCj4gPiA+ID4gc3RhdGUgbWFjaGluZXJ5IHVwZGF0ZS4gIAo+ID4gPgo+ID4gPiBS aWdodC4KPiA+ID4gIAo+ID4gPiA+IFdydCBhdm9pZGluZyB0aGUgZnVsbCByZXByb2JlIGZvciBz aW5rIGNoYW5nZXM6IEkgdGhpbmsgd2Ugc2hvdWxkCj4gPiA+ID4gaW5kZWVkIGRlY291cGxlIHRo YXQgZnJvbSB0aGUgcGVyLWNvbm5lY3RvciBldmVudCBmb3Igc2luayBjaGFuZ2VzLgo+ID4gPiA+ IFRoYXQgYWxvbmcgaXMgYSBnb29kIHdpbiBhbHJlYWR5LCBzaW5jZSB5b3Uga25vdyBmb3Igd2hp Y2ggY29ubmVjdG9yCj4gPiA+ID4geW91IG5lZWQgdG8gY2FsbCBkcm1HZXRDb25uZWN0b3IgKHdo aWNoIGZvcmNlcyB0aGUgcmVwcm9iZSkuIEl0IHdvdWxkCj4gPiA+ID4gYmUgbmljZSB0byBvbmx5 IGNhbGwgZHJtR2V0Q29ubmVjdG9yQ3VycmVudCAoYXZvaWRzIHRoZSByZXByb2JlKSwgYnV0Cj4g PiA+ID4gaGlzdG9yaWNhbGx5IHNwZWFraW5nIGV2ZXJ5IHRpbWUgd2UgdHJpZWQgdG8gcmVseSBv biB0aGlzIHdlIGVuZGVkIHVwCj4gPiA+ID4gcmVncmV0dGluZyB0aGluZ3MuICAKPiA+ID4KPiA+ ID4gV2hhdCBjaGFuZ2VkPyBUaGlzIHNvdW5kcyB2ZXJ5IG11Y2ggd2hhdCBQYXVsIHN1Z2dlc3Rl ZC4gTG9va2luZyBhdCBpdAo+ID4gPiBmcm9tIHVzZXJzcGFjZSBzaWRlOiAgCj4gPiAKPiA+IFRo aXMgc291bmRzIHNvbGlkLCBzb21lIHJlZmluZW1lbnRzIGJlbG93Ogo+ID4gCj4gPiA+IEhPVFBM VUc9MSBDT05ORUNUT1I9eHggUFJPUEVSVFk9eXkKPiA+ID4KPiA+ID4gLSBJZiB5eSBpcyAiQ29u dGVudCBQcm90ZWN0aW9uIiwgbm8gbmVlZCB0byBkcm1Nb2RlR2V0Q29ubmVjdG9yKCksIGp1c3QK PiA+ID4gICByZS1nZXQgdGhlIGNvbm5lY3RvciBwcm9wZXJ0aWVzLgo+ID4gPgo+ID4gPiAtIEtl cm5lbCBwcm9iYWJseSBzaG91bGRuJ3QgYm90aGVyIHNlbmRpbmcgdGhpcyBmb3IgcHJvcGVydGll cyB3aGVyZQo+ID4gPiAgIHJlLXByb2JlIGNvdWxkIGJlIG5lY2Vzc2FyeSwgYW5kIHNlbmQgdGhl IGJlbG93IGluc3RlYWQuICAKPiA+IAo+ID4gCj4gPiBJIHRoaW5rIHdlIHNob3VsZCBhc3NlcnQg dGhhdCB0aGUga2VybmVsIGNhbiBnZXQgdGhlIG5ldyBwcm9wZXJ0eQo+ID4gdmFsdWVzIHVzaW5n IGRybU1vZGVHZXRDb25uZWN0b3JDdXJyZW50IGZvciB0aGlzIGNhc2UsIGkuZS4gdGhlIGtlcm5l bAo+ID4gZG9lcyBub3QgZXhwZWN0IGEgZnVsbCByZXByb2JlLiBJLmUuIHVwZ3JhZGUgeW91ciBp ZGVhIGZyb20gInNob3VsZCIKPiA+IHRvICJtdXN0Igo+IAo+IEhpIERhbmllbCwKPiAKPiBvaywg dGhhdCdzIGdvb2QuCj4gCj4gPiBGdXJ0aGVybW9yZSBkaWZmZXJlbnQgcHJvcGVydHkgY2FuIGlu ZGljYXRlIGRpZmZlcmVudCBraW5kIG9mIHVwZGF0ZXMsCj4gPiBlLmcuIGhkY3AgdnMgZ2VuZXJh bCBzaW5rIGNoYW5nZSB2cy4gd2hhdGV2ZXIgZWxzZSBtaWdodCBjb21lIGluIHRoZQo+ID4gZnV0 dXJlLgo+IAo+IFdoYXQgZG8geW91IG1lYW4gYnkgZGlmZmVyZW50IGtpbmRzIG9mIHVwZGF0ZXM/ CgpBdG0gd2UncmUgZGlzY3Vzc2luZyB0d286CgotICJDb250ZW50IFByb3RlY3Rpb24iCi0gInNp bmsgY2hhbmdlZCwgYnV0IHlvdSBkb24ndCBuZWVkIHRvIHJlcHJvYmUiIHRoaXMgd291bGQgYmUg cXVpdGUgYSBiaXQKICBhIGNhdGNoIGFsbCBmcm9tIHRoZSBvdXRwdXQgZGV0ZWN0aW9uLiBQYXVs IHRoaW5rcyBkaWZmZXJlbnRseSwgYnV0IEknbQogIG5vdCBzb2xkIG9uIHNwbGl0dGluZyB0aGlz IHVwIG1vcmUsIGF0IGxlYXN0IG5vdCByaWdodCBub3cuIFRoaXMgd291bGQKICBpbmNsdWRlIGNv bm5lY3RvciBzdGF0dXMgKGFuZCByZWxhdGVkIHRoaW5ncyByZXR1cm5lZCBieSBkcm1HZXRDb25u ZWN0b3IKICB3aGljaCBjdXJyZW50bHkgYXJlbid0IGEgcHJvcGVydHkpLCBFRElELCB0aGUgbXN0 IHBhdGggaWQsIHRoYXQga2luZCBvZgogIHN0dWZmLgoKSW1lIG9uY2Ugd2UgaGF2ZSAyLCB0aGVy ZSdzIG1vcmUgYm91bmQgdG8gY29tZSA6LSkKCj4gQnR3LiBJIHN0YXJ0ZWQgdGhpbmtpbmcsIG1h eWJlIHdlIHNob3VsZCBjb21wbGV0ZWx5IGxlYXZlIG91dCB0aGUgIklmCj4geXkgaXMgIkNvbnRl bnQgUHJvdGVjdGlvbiIiIGFuZCByZXF1aXJlIHRoZSBrZXJuZWwgdG8gZ3VhcmFudGVlLCB0aGF0 Cj4gaWYgUFJPUEVSVFkgaXMgc2V0LCB0aGVuIGRybU1vZGVHZXRDb25uZWN0b3IoKSAocHJvYmlu ZykgbXVzdCBub3QgYmUKPiBuZWNlc3NhcnkgYmFzZWQgb24gdGhpcyBldmVudCBhbG9uZS4KPiAK PiBXcml0aW5nIGl0IGRvd24gYWdhaW46Cj4gCj4gSE9UUExVRz0xIENPTk5FQ1RPUj14eCBQUk9Q RVJUWT15eQo+IAo+IC0geXkgZGVub3RlcyB3aGljaCBjb25uZWN0b3IgeHggcHJvcGVydHkgY2hh bmdlZC4KCk1heWJlIHl5IGRlbm90ZXMgd2hpY2ggZ3JvdXAgb2YgcHJvcGVydGllcyBjaGFuZ2Vk LCBhbmQgcGFydCBvZiB0aGUgdWFwaQppcyBwaWNraW5nIHRoZSBjYW5vbmljYWwgb25lLiBFLmcu IGNvbnRlbnQgcHJvdGVjdGlvbiBtaWdodCBhbHNvIGdhaW4gbW9yZQpwcm9wZXJ0aWVzIGluIHRo ZSBmdXR1cmUgKHRoZXJlJ3MgcGF0Y2hlcywgYnV0IHRoZSB1c2Vyc3BhY2Ugd29uJ3QgYmUgb3Bl bgpzb3VyY2VkKS4gQW5kIGZvciB0aGF0IGNhc2UgSSBkb24ndCB0aGluayB3ZSBzaG91bGQgdGhl biBzZW5kIGFuIGV2ZW4gZm9yCmV2ZXJ5IHNpbmdsZSBpbmRpdmlkdWFsIHByb3BlcnR5LCBidXQg anVzdCBmb3IgdGhlIGxlYWQgcHJvcGVydHkuCgpNYXliZSB3ZSBzaG91bGQgY2hhbmdlIGl0IHRv IFVQREFURV9UWVBFPTxzb21lLXVuaXF1ZS1zdHJpbmc+LCBidXQgaXQgZmVsdApiZXR0ZXIgdG8g dXNlIHRoZSBwcm9wZXJ0eSBpZCB3ZSBhbHJlYWR5IGhhdmUgZm9yIHRoaXMuCgo+IC0gVXNlcnNw YWNlIGRvZXMgbm90IG5lZWQgdG8gZG8gZHJtTW9kZUdldENvbm5lY3RvcigpLCBpdCBvbmx5IG5l ZWRzIHRvCj4gICBkcm1Nb2RlT2JqZWN0R2V0UHJvcGVydGllcygpIG9uIHRoZSBjb25uZWN0b3Ig dG8gcmVjZWl2ZSB0aGUgbmV3Cj4gICB1cGRhdGVkIHByb3BlcnR5IHZhbHVlcy4KCmRybU1vZGVH ZXRDb25uZWN0b3IoQ3VycmVudCkgYWxzbyBzdXBwbGllcyBhbGwgdGhlIHByb3BlcnRpZXMgYWxy ZWFkeS4KVGhpcyBpcyBzcGVjaWFsIHdpdGggY29ubmVjdG9ycywgc2luY2UgdGhlIHByZWRhdGUg dGhlICJwcm9wZXJ0aWVzIG9uCmV2ZXJ5dGhpbmciIGRlc2lnbi4gSSdkIGp1c3QgbWVudGlvbiB0 aGlzIGZ1bmN0aW9uIGhlcmUsIGFuZCBpZ25vcmUKZHJtTW9kZU9iamVjdEdldFByb3BlcnRpZXMu Cgo+IC0gS2VybmVsIG11c3Qgbm90IHNlbmQgdGhpcyBldmVudCBmb3IgY2hhbmdlcyB0aGF0IG1h eSByZXF1aXJlIHByb2JpbmcKPiAgIGZvciBjb3JyZWN0IHJlc3VsdHMsIGV4Y2VwdGlvbmFsIGNv bmRpdGlvbnMgKGJ1Z2d5IGhhcmR3YXJlLCBldGMuKQo+ICAgaW5jbHVkZWQuIEluc3RlYWQsIHRo ZSBrZXJuZWwgbXVzdCBzZW5kIG9uZSBvZiB0aGUgYmVsb3cgZXZlbnRzLgo+IAo+IElzIHRoZXJl IGFjdHVhbGx5IGFueXRoaW5nIGludGVyZXN0aW5nIHRoYXQKPiBkcm1Nb2RlR2V0Q29ubmVjdG9y Q3VycmVudCgpIGNvdWxkIGd1YXJhbnRlZWQgY29ycmVjdGx5IHJldHVybiB0aGF0IGlzCj4gbm90 IGEgcHJvcGVydHkgYWxyZWFkeT8gSSdkIHByb2JhYmx5IGxlYXZlIHRoaXMgY29uc2lkZXJhdGlv biBvdXQKPiBjb21wbGV0ZWx5LCBhbmQganVzdCBzYXkgZG8gb25lIG9mIHRoZSBuZWVkcy1wcm9i aW5nIGV2ZW50cyBpZiBhbnl0aGluZwo+IHRoZXJlIGNoYW5nZWQuCgpUaGF0J3Mgd2h5IEknbSBz dWdnZXN0aW5nIHRoZSBQUk9QRVJUWT08ZXBvY2hfcHJvcF9pZD4gd291bGQgaW5kaWNhdGUgYWxs CnNpbmsgcmVsYXRlZCBzdHVmZiwgaW5jbHVkaW5nIHRoZSBub3QtcHJvcGVycGVydHktZmllZCBz dHVmZiBpcyB1cGRhdGVkLAphbmQgd2lsbCBiZSByZXBvcnRlZCBjb3JyZWN0bHkgYnkgR2V0Q29u bmVjdG9yQ3VycmVudC4KCj4gPiA+IEhPVFBMVUc9MSBDT05ORUNUT1I9eHgKPiA+ID4KPiA+ID4g LSBOZWVkcyB0byBkcm1Nb2RlR2V0Q29ubmVjdG9yKCkgb24gdGhlIG9uZSBjb25uZWN0b3IsIG5v IG5lZWQgdG8gcHJvYmUKPiA+ID4gICBvdGhlcnMuIEltcGxpZXMgdGhhdCBvbmUgbmVlZHMgdG8g cmUtZ2V0IHRoZSBjb25uZWN0b3IgcHJvcGVydGllcyBhcwo+ID4gPiAgIHdlbGwuICAKPiA+IAo+ ID4gU291bmRzIGdvb2QuCj4gPiAKPiA+ID4gSE9UUExVRz0xCj4gPiA+Cj4gPiA+IC0gTmVlZCB0 byBkbyBkcm1Nb2RlR2V0UmVzb3VjZXMoKSB0byBkaXNjb3ZlciBuZXcvZGlzYXBwZWFyZWQKPiA+ ID4gICBjb25uZWN0b3JzLCBhbmQgbmVlZCB0byBkcm1Nb2RlR2V0Q29ubmVjdG9yIHRvIHJlLXBy b2JlIGV2ZXJ5Cj4gPiA+ICAgY29ubmVjdG9yLiAoQXMgYWx3YXlzLikgIAo+ID4gCj4gPiBNYXli ZSB3ZSBzaG91bGQgY2xhcmlmeSB0aGF0IHRoaXMgaXMgYWxzbyB3aGF0IHlvdSBnZXQgd2hlbiBh biBlbnRpcmUKPiA+IGNvbm5lY3RvciBhcHBlYXJzL2Rpc2FwcGVhcnMgKGZvciBkcCBtc3QgaG90 cGx1ZykuCj4gCj4gWWVzLCB0aGF0J3Mgd2hhdCBJIHdyb3RlLiA6LSkKPiAKPiBXZXN0b24gaW1w bGVtZW50cyB0aGUgZGlzY292ZXJ5IG9mIGFwcGVhcmluZy9kaXNhcHBlYXJpbmcgY29ubmVjdG9y cwo+IChhcyBvcHBvc2VkIHRvIGNvbm5lY3RpbmcvZGlzY29ubmVjdGluZyBjb25uZWN0b3JzKS4g Tm90IHN1cmUgYW55b25lCj4gaGFzIGV2ZXIgdGVzdGVkIGl0IHRob3VnaC4uLgoKRnJvbSB3aGF0 IC1tb2Rlc2V0dGluZyBhbmQgWCBkcml2ZXJzIGRvOiBFeHBlY3Qgc3VycHJpc2VzIGluIHJlYWwg d29ybGQKdXNhZ2UgOi0vCgo+ID4gTWF5YmUgd2UgY291bGQgbWFrZSBhbiBhZGRpdGlvbmFsIHJ1 bGUgdGhhdCBpZiBhIGNvbm5lY3RvciBoYXMgdGhlCj4gPiBFUE9DSCBwcm9wZXJ0eSwgdGhlbiBp dCBkb2VzIF9ub3RfIG5lZWQgdG8gYmUgcmVwcm9iZSBmb3IgdGhlIGdsb2JhbAo+ID4gZXZlbnRz LiBGb3IgdGhhdCBjYXNlIHVzZXJzcGFjZSBzaG91bGQgb25seSBjaGVjayB3aGV0aGVyIHRoZXJl J3MKPiA+IG5ldy9yZW1vdmVkIGNvbm5lY3RvcnMsIGFuZCB0aGVuIHByb2JlIHRoZSBuZXcgb25l cyAoYW5kIGRpc2FibGUgdGhlCj4gPiByZW1vdmVkIG9uZXMgYXMgbmVlZGVkKS4gV2UgY2FuIGFs c28gdXNlIHNvbWUgb3RoZXIgZmxhZyB0byBpbmRpY2F0ZQo+ID4gdGhpcyBpZiB3ZSBkb24ndCBh ZGQgdGhlIGVwb2NoIHByb3BydHkuCj4gCj4gU291bmRzIGZpbmUgdG8gbWUsIHRob3VnaCBJJ20g bm90IHRvbyBjbGVhciB3aGF0IHRoZSBlcG9jaCBwcm9wZXJ0eQo+IGlzIGRlc2lnbmVkIHRvIGFj aGlldmUuIElzIGl0IGFib3V0IGF2b2lkaW5nIHJlLXByb2Jpbmcgd2hlbiByZS1nYWluaW5nCj4g RFJNIG1hc3RlciBhZnRlciBoYXZpbmcgbGV0IGl0IGdvLCBlLmcuIFZULXN3aXRjaGluZyBiYWNr IGZyb20gYW5vdGhlcgo+IFZUPyBUaGF0IHdvdWxkIGJlIG5pY2UuCgpZdXAsIHByZXR0eSBtdWNo LiBQbHVzIEkgdGhpbmsgd2UgbmVlZCB0aGUgZXBvY2ggaW50ZXJuYWxseSBpbiB0aGUga2VybmVs CmFueXdheSwgdG8gZmlndXJlIG91dCB3aGF0IGhhcyBjaGFuZ2VkIHdpdGhvdXQgaGF2aW5nIHRv IHJld3JpdGUgZW5kbGVzcwphbW91bnRzIG9mIG91dHB1dCBkZXRlY3Rpb24gY29kZSBpbiBhbGwg ZHJpdmVycyB0byBwYXNzIHVwIGEgbmV3IHN0YXR1cwpjaGFuZ2UgcmV0dXJuIGNvZGUuIEJlY2F1 c2UgYXRtIHdlIHRvdGFsbHkgZmFpbCB0byB0cmFjayBzaW5rLXJlbGF0ZWQKY2hhbmdlcyBmcm9t IHNob3J0IHB1bHNlIGhwZCAoaS5lLiBzdGF5cyBjb25uZWN0ZWQsIGJ1dCBlLmcuIGVkaWQKY2hh bmdlZCkuCgo+ID4gPiBUaGF0IHNob3VsZCBiZSBhbHNvIGJhY2t3YXJkcy1jb21wYXRpYmxlOiBh bnkgdXNlcnNwYWNlIHRoYXQgZG9lc24ndAo+ID4gPiB1bmRlcnN0YW5kIENPTk5FQ1RPUiB3aWxs IHNlZSBIT1RQTFVHPTEgYW5kIHJlLXByb2JlIGV2ZXJ5dGhpbmcuIEFueQo+ID4gPiB1c2Vyc3Bh Y2UgdGhhdCBkb2Vzbid0IHVuZGVyc3RhbmQgUFJPUEVSVFkgb3IgdGhlIHByb3BlcnR5IGl0IHJl ZmVycyB0bwo+ID4gPiB3aWxsIGZhbGwgYmFjayB0byBwcm9iaW5nIGVpdGhlciB0aGUgY29ubmVj dG9yIG9yIGV2ZXJ5dGhpbmcuICAKPiA+IAo+ID4gQWdyZWVkLCB0aGF0IHNob3VsZCB3b3JrLgo+ IAo+IENvb2wuIFRoZSBlcG9jaCBleGNlcHRpb24geW91IHdvcmRlZCBzZWVtcyB0byBmaXQgYmFj a3dhcmQtY29tcGF0aWJsZQo+IGFzIHdlbGwuCj4gCj4gPiAKPiA+ID4gSSB3b3VsZCBiZSBoYXBw eSB0byBnZXQgdGhhdCBiZWhhdmlvdXIgaW50byBXZXN0b24sIHBhcnRpY3VsYXJseSBhcyB0aGUK PiA+ID4gSERDUCBmZWF0dXJlIGlzIGJyZXdpbmcgZm9yIFdlc3RvbiB0b28uCj4gPiA+Cj4gPiA+ IC0tLS0tLS0tCj4gPiA+Cj4gPiA+IFdoZW4gZGlzY3Vzc2luZyB0aGlzIGluIElSQywgSSBoYWQg dGhlIGNvbmNlcm4gYWJvdXQgaG93IHVldmVudHMgYXJlCj4gPiA+IGRlbGl2ZXJlZCBpbiB1c2Vy c3BhY2UuIElzIHRoZXJlIGEgcG9zc2liaWxpdHkgdGhhdCB0aGV5IG1pZ2h0IGJlCj4gPiA+IG92 ZXJ3cml0dGVuLCBjb250YWluIHN0YWxlIGF0dHJpYnV0ZXMsIG9yIGdldCBzcXVhc2hlZCB0b2dl dGhlcj8KPiA+ID4KPiA+ID4gUGFydGljdWxhcmx5IGlmIGEgZGlzcGxheSBzZXJ2ZXIgaXMgY3Vy cmVudCBvbiB0aGUgVlQgYW5kIGFjdGl2ZSBhbmQKPiA+ID4gbW9uaXRvcmluZyB1ZGV2LCBidXQg c3R1Y2sgZG9pbmcgc29tZXRoaW5nIGFuZCBjYW5ub3Qgc2VydmljZSB1ZXZlbnRzCj4gPiA+IHZl cnkgZmFzdCwgYW5kIHRoZSBrZXJuZWwgc2VuZHMgbW9yZSB0aGFuIG9uZSBldmVudCBiZWZvcmUg dGhlIHByb2Nlc3MKPiA+ID4gZ2V0cyBiYWNrIHRvIGRpc3BhdGNoaW5nLiBUaGUgdGVybWlub2xv Z3kgaW4gbGlidWRldiBBUEkgY29uZnVzZWQgbWUgYXMKPiA+ID4gYW4gZXZlbnQgaXMgYSBkZXZp Y2UuIFNxdWFzaGluZyB0b2dldGhlciB3b3VsZCBtYWtlIHNlbnNlIGlmIHRoZQo+ID4gPiB1ZXZl bnQgd2VyZSBqdXN0IHVwZGF0aW5nIGEgZGV2aWNlIGF0dHJpYnV0ZSBsaXN0LiBQcmV2aW91c2x5 IHdoZW4gd2UKPiA+ID4gaGFkIGp1c3QgYSBzaW5nbGUga2luZCBvZiB1ZXZlbnQsIHRoYXQgd291 bGQgbm90IGhhdmUgbWFkZSBhCj4gPiA+IGRpZmZlcmVuY2UsIGJ1dCBpZiB3ZSBnYWluIGRpZmZl cmVudCBraW5kcyBvZiB1ZXZlbnRzIGxpa2UgaGVyZSwgaXQKPiA+ID4gc3RhcnRzIHRvIG1hdHRl ci4KPiA+ID4KPiA+ID4gSG93ZXZlciwgUGF1bCBjYW1lIHRvIHRoZSBjb25jbHVzaW9uIHRoYXQg d2Ugd2lsbCBiZSBvayBhcyBsb25nIGFzIHRoZQo+ID4gPiBldmVudHMgY29tZSB2aWEgbmV0bGlu ay4gIAo+ID4gCj4gPiBZZWFoIG5ldGxpbmsgc2hvdWxkbid0IGRyb3AgZXZlbnRzIG9uIHRoZSBm bG9vciBJIHRoaW5rLiBJdCBtaWdodAo+ID4gc3RpbGwgaGFwcGVuLCBidXQgdGhlbiBJIHRoaW5r IHlvdSBzaG91bGQgZ2V0IGFuIGluZGljYXRpb24gb2YgdGhhdAo+ID4gZXJyb3IsIGFuZCB5b3Ug anVzdCB0cmVhdCBpdCBhcyBhIGdlbmVyYWwgaG90cGx1ZyBldmVudCBsaWtlIG9uIG9sZGVyCj4g PiBrZXJuZWxzLgo+IAo+IEFscmlnaHQsIGFsdGhvdWdoIHJlYWRpbmcgUGF1bCBpdCBzb3VuZHMg bGlrZSB0aGVyZSBpcyBhbm90aGVyCj4gKGZhbGxiYWNrPykgbWV0aG9kIGFzIHdlbGwgdGhhdCB3 b3VsZG4ndCB3b3JrLiBTaG91bGQgdXNlcnNwYWNlIHdvcnJ5Cj4gYWJvdXQgdGhhdD8KPiAKPiBI bW0sIGdldCBhbiBpbmRpY2F0aW9uIG9mIGFuIGVycm9yLi4uIEkgZG9uJ3Qga25vdyBob3cgdGhh dCB3b3VsZCBiZQo+IHByZXNlbnRlZCBpbiBsaWJ1ZGV2IEFQSSBhbmQgSSBjYW4ndCBwb2ludCB0 byBhbnkgY29kZSBpbiBXZXN0b24gdGhhdAo+IHdvdWxkIGRlYWwgd2l0aCBpdC4gRG9lcyBhbnlv bmUgaGF2ZSBhIGNsdWUgYWJvdXQgdGhhdD8KPiAKPiBVc2Vyc3BhY2UgY2Fubm90IHJlYWxseSBz dGFydCB0YWtpbmcgYWR2YW50YWdlIG9mIGFueSBuZXcgZmluZS1ncmFpbmVkCj4gaG90cGx1ZyBl dmVudHMgdW50aWwgaXQgY2FuIHJlbHkgb24gdGhlIGV2ZW50IGRlbGl2ZXJ5LiBHcmFudGVkLCB0 aGlzCj4gc2VlbXMgcHVyZWx5IGEgdXNlcnNwYWNlIGlzc3VlLCBidXQgSSBiZXQgaXQgY291bGQg YmUgZm9ybXVsYXRlZCBhcyBhCj4ga2VybmVsIHJlZ3Jlc3Npb246IHRoaW5ncyBzdG9wIHdvcmtp bmcgYWZ0ZXIgdXBncmFkaW5nIHRoZSBrZXJuZWwgd2hpbGUKPiBoYXZpbmcgYWx3YXlzIHVzZWQg bmV3IHVzZXJzcGFjZSB3aGljaCB3YXMgcmVhZHkgZm9yIGRldGFpbGVkIGhvdHBsdWcKPiBldmVu dHMgYnV0IGRpZG4ndCBlbnN1cmUgdGhlIGRlbGl2ZXJ5IGluIHVzZXJzcGFjZS4KCllvdSBoYXZl IHRoaXMgYWxyZWFkeSAoaWYgaXQncyByZWFsbHkgYW4gaXNzdWUgd2l0aCBuZXRsaW5rIHJlbGlh YmlsaXR5LAp0Ymggbm8gaWRlYSksIHlvdSBjYW4gYWxyZWFkeSBtaXNzIGEgZ2xvYmFsIHVldmVu dC4gSXQncyBlYXNpZXIgdG8gY2F0Y2gKdXAgaWYgeW91IGRvIG1pc3MgaXQsIHNpbmNlIHlvdSdy ZSBmb3JjaW5nIGEgcmVwcm9iZSBvbiBldmVyeXRoaW5nLiBUaGF0J3MKd2h5IEkgdGhpbmsgdGhl IEVQT0NIIHRoaW5nIHdvdWxkIGJlIGdvb2QsIHVzZXJzcGFjZSBjb3VsZCBiZSBkZWZlbnNpdmUK YW5kIGFsd2F5cyBjYWxsIEdldENvbm5lY3RvckN1cnJlbnQgb24gYWxsIGNvbm5lY3RvcnMgaWYg aXQgZ2V0cyBhbnkKaG90cGx1ZyB1ZXZlbnQsIGFuZCBpZiBpdCBnZXRzIGFuIEVQT0NIIGNoYW5n ZSwgZm9yY2UgYSByZXByb2JlLiBCdXQgSSdtCm5vdCBzdXJlIHRoYXQncyByZWFsbHkgcmVxdWly ZWQgKGFzaWRlIGZyb20gVlQgc3dpdGNoaW5nKS4KCklmIHdlIGRvIHRoaW5rIHRoaXMgaXMgcmVx dWlyZWQgSSB3b25kZXIgd2hldGhlciB3ZSBldmVuIG5lZWQgdGhlIG1vcmUKc3BlY2lmaWMgZXZl bnQgYXQgYWxsIDotKQotRGFuaWVsCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVy LCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0Cklu dGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZng=