From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH] drm/vblank: Fixup and document timestamp update/read barriers Date: Wed, 6 May 2015 10:56:40 +0200 Message-ID: <20150506085640.GH30184@phenom.ffwll.local> References: <1429082222-20820-1-git-send-email-daniel.vetter@ffwll.ch> <552E60D4.3070307@hurleysoftware.com> <20150415173153.GA6092@phenom.ffwll.local> <552FAB7F.4040707@hurleysoftware.com> <20150416130323.GG5082@phenom.ffwll.local> <5546FB02.4010508@gmail.com> <5548D568.3050109@hurleysoftware.com> <20150505154206.GB30184@phenom.ffwll.local> <5548E876.4010706@hurleysoftware.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <5548E876.4010706@hurleysoftware.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Peter Hurley Cc: Daniel Vetter , Intel Graphics Development , DRI Development , Daniel Vetter , Michel =?iso-8859-1?Q?D=E4nzer?= List-Id: dri-devel@lists.freedesktop.org T24gVHVlLCBNYXkgMDUsIDIwMTUgYXQgMTE6NTc6NDJBTSAtMDQwMCwgUGV0ZXIgSHVybGV5IHdy b3RlOgo+IE9uIDA1LzA1LzIwMTUgMTE6NDIgQU0sIERhbmllbCBWZXR0ZXIgd3JvdGU6Cj4gPiBP biBUdWUsIE1heSAwNSwgMjAxNSBhdCAxMDozNjoyNEFNIC0wNDAwLCBQZXRlciBIdXJsZXkgd3Jv dGU6Cj4gPj4gT24gMDUvMDQvMjAxNSAxMjo1MiBBTSwgTWFyaW8gS2xlaW5lciB3cm90ZToKPiA+ Pj4gT24gMDQvMTYvMjAxNSAwMzowMyBQTSwgRGFuaWVsIFZldHRlciB3cm90ZToKPiA+Pj4+IE9u IFRodSwgQXByIDE2LCAyMDE1IGF0IDA4OjMwOjU1QU0gLTA0MDAsIFBldGVyIEh1cmxleSB3cm90 ZToKPiA+Pj4+PiBPbiAwNC8xNS8yMDE1IDAxOjMxIFBNLCBEYW5pZWwgVmV0dGVyIHdyb3RlOgo+ ID4+Pj4+PiBPbiBXZWQsIEFwciAxNSwgMjAxNSBhdCAwOTowMDowNEFNIC0wNDAwLCBQZXRlciBI dXJsZXkgd3JvdGU6Cj4gPj4+Pj4+PiBIaSBEYW5pZWwsCj4gPj4+Pj4+Pgo+ID4+Pj4+Pj4gT24g MDQvMTUvMjAxNSAwMzoxNyBBTSwgRGFuaWVsIFZldHRlciB3cm90ZToKPiA+Pj4+Pj4+PiBUaGlz IHdhcyBhIGJpdCB0b28gbXVjaCBjYXJnby1jdWx0ZWQsIHNvIGxldHMgbWFrZSBpdCBzb2xpZDoK PiA+Pj4+Pj4+PiAtIHZibGFuay0+Y291bnQgZG9lc24ndCBuZWVkIHRvIGJlIGFuIGF0b21pYywg d3JpdGVzIGFyZSBhbHdheXMgZG9uZQo+ID4+Pj4+Pj4+ICAgIHVuZGVyIHRoZSBwcm90ZWN0aW9u IG9mIGRldi0+dmJsYW5rX3RpbWVfbG9jay4gU3dpdGNoIHRvIGFuIHVuc2lnbmVkCj4gPj4+Pj4+ Pj4gICAgbG9uZyBpbnN0ZWFkIGFuZCB1cGRhdGUgY29tbWVudHMuIE5vdGUgdGhhdCBhdG9taWNf cmVhZCBpcyBqdXN0IGEKPiA+Pj4+Pj4+PiAgICBub3JtYWwgcmVhZCBvZiBhIHZvbGF0aWxlIHZh cmlhYmxlLCBzbyBubyBuZWVkIHRvIGF1ZGl0IGFsbCB0aGUKPiA+Pj4+Pj4+PiAgICByZWFkLXNp ZGUgYWNjZXNzIHNwZWNpZmljYWxseS4KPiA+Pj4+Pj4+Pgo+ID4+Pj4+Pj4+IC0gVGhlIGJhcnJp ZXJzIGZvciB0aGUgdmJsYW5rIGNvdW50ZXIgc2VxbG9jayB3ZXJlbid0IGNvbXBsZXRlOiBUaGUK PiA+Pj4+Pj4+PiAgICByZWFkLXNpZGUgd2FzIG1pc3NpbmcgdGhlIGZpcnN0IGJhcnJpZXIgYmV0 d2VlbiB0aGUgY291bnRlciByZWFkIGFuZAo+ID4+Pj4+Pj4+ICAgIHRoZSB0aW1lc3RhbXAgcmVh ZCwgaXQgb25seSBoYWQgYSBiYXJyaWVyIGJldHdlZW4gdGhlIHRzIGFuZCB0aGUKPiA+Pj4+Pj4+ PiAgICBjb3VudGVyIHJlYWQuIFdlIG5lZWQgYm90aC4KPiA+Pj4+Pj4+Pgo+ID4+Pj4+Pj4+IC0g QmFycmllcnMgd2VyZW4ndCBwcm9wZXJseSBkb2N1bWVudGVkLiBTaW5jZSBiYXJyaWVycyBvbmx5 IHdvcmsgaWYKPiA+Pj4+Pj4+PiAgICB5b3UgaGF2ZSB0aGVtIG9uIGJvdGhzIHNpZGVzIG9mIHRo ZSB0cmFuc2FjdGlvbiBpdCdzIHBydWRlbnQgdG8KPiA+Pj4+Pj4+PiAgICByZWZlcmVuY2Ugd2hl cmUgdGhlIG90aGVyIHNpZGUgaXMuIFRvIGF2b2lkIGR1cGxpY2F0aW5nIHRoZQo+ID4+Pj4+Pj4+ ICAgIHdyaXRlLXNpZGUgY29tbWVudCAzIHRpbWVzIGV4dHJhY3QgYSBsaXR0bGUgc3RvcmVfdmJs YW5rKCkgaGVscGVyLgo+ID4+Pj4+Pj4+ICAgIEluIHRoYXQgaGVscGVyIGFsc28gYXNzZXJ0IHRo YXQgd2UgZG8gaW5kZWVkIGhvbGQKPiA+Pj4+Pj4+PiAgICBkZXYtPnZibGFua190aW1lX2xvY2ss IHNpbmNlIGluIHNvbWUgY2FzZXMgdGhlIGxvY2sgaXMgYWNxdWlyZWQgYQo+ID4+Pj4+Pj4+ICAg IGZldyBmdW5jdGlvbnMgdXAgaW4gdGhlIGNhbGxjaGFpbi4KPiA+Pj4+Pj4+Pgo+ID4+Pj4+Pj4+ IFNwb3R0ZWQgd2hpbGUgcmV2aWV3aW5nIGEgcGF0Y2ggZnJvbSBDaHJpcyBXaWxzb24gdG8gYWRk IGEgZmFzdHBhdGggdG8KPiA+Pj4+Pj4+PiB0aGUgdmJsYW5rX3dhaXQgaW9jdGwuCj4gPj4+Pj4+ Pj4KPiA+Pj4+Pj4+PiBDYzogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+ Cj4gPj4+Pj4+Pj4gQ2M6IE1hcmlvIEtsZWluZXIgPG1hcmlvLmtsZWluZXIuZGVAZ21haWwuY29t Pgo+ID4+Pj4+Pj4+IENjOiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50 ZWwuY29tPgo+ID4+Pj4+Pj4+IENjOiBNaWNoZWwgRMOkbnplciA8bWljaGVsQGRhZW56ZXIubmV0 Pgo+ID4+Pj4+Pj4+IFNpZ25lZC1vZmYtYnk6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJA aW50ZWwuY29tPgo+ID4+Pj4+Pj4+IC0tLQo+ID4+Pj4+Pj4+ICAgZHJpdmVycy9ncHUvZHJtL2Ry bV9pcnEuYyB8IDkyICsrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCj4gPj4+Pj4+Pj4gICBpbmNsdWRlL2RybS9kcm1QLmggICAgICAgIHwgIDggKysrLS0KPiA+ Pj4+Pj4+PiAgIDIgZmlsZXMgY2hhbmdlZCwgNTQgaW5zZXJ0aW9ucygrKSwgNDYgZGVsZXRpb25z KC0pCj4gPj4+Pj4+Pj4KPiA+Pj4+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2Ry bV9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faXJxLmMKPiA+Pj4+Pj4+PiBpbmRleCBjOGEz NDQ3NjU3MGEuLjIzYmZiYzYxYTQ5NCAxMDA2NDQKPiA+Pj4+Pj4+PiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vZHJtX2lycS5jCj4gPj4+Pj4+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9pcnEu Ywo+ID4+Pj4+Pj4+IEBAIC03NCw2ICs3NCwzMyBAQCBtb2R1bGVfcGFyYW1fbmFtZWQodmJsYW5r b2ZmZGVsYXksIGRybV92Ymxhbmtfb2ZmZGVsYXksIGludCwgMDYwMCk7Cj4gPj4+Pj4+Pj4gICBt b2R1bGVfcGFyYW1fbmFtZWQodGltZXN0YW1wX3ByZWNpc2lvbl91c2VjLCBkcm1fdGltZXN0YW1w X3ByZWNpc2lvbiwgaW50LCAwNjAwKTsKPiA+Pj4+Pj4+PiAgIG1vZHVsZV9wYXJhbV9uYW1lZCh0 aW1lc3RhbXBfbW9ub3RvbmljLCBkcm1fdGltZXN0YW1wX21vbm90b25pYywgaW50LCAwNjAwKTsK PiA+Pj4+Pj4+Pgo+ID4+Pj4+Pj4+ICtzdGF0aWMgdm9pZCBzdG9yZV92Ymxhbmsoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwgaW50IGNydGMsCj4gPj4+Pj4+Pj4gKyAgICAgICAgICAgICB1bnNpZ25l ZCB2YmxhbmtfY291bnRfaW5jLAo+ID4+Pj4+Pj4+ICsgICAgICAgICAgICAgc3RydWN0IHRpbWV2 YWwgKnRfdmJsYW5rKQo+ID4+Pj4+Pj4+ICt7Cj4gPj4+Pj4+Pj4gKyAgICBzdHJ1Y3QgZHJtX3Zi bGFua19jcnRjICp2YmxhbmsgPSAmZGV2LT52YmxhbmtbY3J0Y107Cj4gPj4+Pj4+Pj4gKyAgICB1 MzIgdHNsb3Q7Cj4gPj4+Pj4+Pj4gKwo+ID4+Pj4+Pj4+ICsgICAgYXNzZXJ0X3NwaW5fbG9ja2Vk KCZkZXYtPnZibGFua190aW1lX2xvY2spOwo+ID4+Pj4+Pj4+ICsKPiA+Pj4+Pj4+PiArICAgIGlm ICh0X3ZibGFuaykgewo+ID4+Pj4+Pj4+ICsgICAgICAgIHRzbG90ID0gdmJsYW5rLT5jb3VudCAr IHZibGFua19jb3VudF9pbmM7Cj4gPj4+Pj4+Pj4gKyAgICAgICAgdmJsYW5rdGltZXN0YW1wKGRl diwgY3J0YywgdHNsb3QpID0gKnRfdmJsYW5rOwo+ID4+Pj4+Pj4+ICsgICAgfQo+ID4+Pj4+Pj4+ ICsKPiA+Pj4+Pj4+PiArICAgIC8qCj4gPj4+Pj4+Pj4gKyAgICAgKiB2YmxhbmsgdGltZXN0YW1w IHVwZGF0ZXMgYXJlIHByb3RlY3RlZCBvbiB0aGUgd3JpdGUgc2lkZSB3aXRoCj4gPj4+Pj4+Pj4g KyAgICAgKiB2YmxhbmtfdGltZV9sb2NrLCBidXQgb24gdGhlIHJlYWQgc2lkZSBkb25lIGxvY2ts ZXNzbHkgdXNpbmcgYQo+ID4+Pj4+Pj4+ICsgICAgICogc2VxdWVuY2UtbG9jayBvbiB0aGUgdmJs YW5rIGNvdW50ZXIuIEVuc3VyZSBjb3JyZWN0IG9yZGVyaW5nIHVzaW5nCj4gPj4+Pj4+Pj4gKyAg ICAgKiBtZW1vcnkgYmFycnJpZXJzLiBXZSBuZWVkIHRoZSBiYXJyaWVyIGJvdGggYmVmb3JlIGFu ZCBhbHNvIGFmdGVyIHRoZQo+ID4+Pj4+Pj4+ICsgICAgICogY291bnRlciB1cGRhdGUgdG8gc3lu Y2hyb25pemUgd2l0aCB0aGUgbmV4dCB0aW1lc3RhbXAgd3JpdGUuCj4gPj4+Pj4+Pj4gKyAgICAg KiBUaGUgcmVhZC1zaWRlIGJhcnJpZXJzIGZvciB0aGlzIGFyZSBpbiBkcm1fdmJsYW5rX2NvdW50 X2FuZF90aW1lLgo+ID4+Pj4+Pj4+ICsgICAgICovCj4gPj4+Pj4+Pj4gKyAgICBzbXBfd21iKCk7 Cj4gPj4+Pj4+Pj4gKyAgICB2YmxhbmstPmNvdW50ICs9IHZibGFua19jb3VudF9pbmM7Cj4gPj4+ Pj4+Pj4gKyAgICBzbXBfd21iKCk7Cj4gPj4+Pj4+Pgo+ID4+Pj4+Pj4gVGhlIGNvbW1lbnQgYW5k IHRoZSBjb2RlIGFyZSBlYWNoIHNlbGYtY29udHJhZGljdG9yeS4KPiA+Pj4+Pj4+Cj4gPj4+Pj4+ PiBJZiB2YmxhbmstPmNvdW50IHdyaXRlcyBhcmUgYWx3YXlzIHByb3RlY3RlZCBieSB2Ymxhbmtf dGltZV9sb2NrIChzb21ldGhpbmcgSQo+ID4+Pj4+Pj4gZGlkIG5vdCB2ZXJpZnkgYnV0IHRoYXQg dGhlIGNvbW1lbnQgYWJvdmUgYXNzZXJ0cyksIHRoZW4gdGhlIHRyYWlsaW5nIHdyaXRlCj4gPj4+ Pj4+PiBiYXJyaWVyIGlzIG5vdCByZXF1aXJlZCAoYW5kIHRoZSBhc3NlcnRpb24gdGhhdCBpdCBp cyBpbiB0aGUgY29tbWVudCBpcyBpbmNvcnJlY3QpLgo+ID4+Pj4+Pj4KPiA+Pj4+Pj4+IEEgc3Bp biB1bmxvY2sgb3BlcmF0aW9uIGlzIGFsd2F5cyBhIHdyaXRlIGJhcnJpZXIuCj4gPj4+Pj4+Cj4g Pj4+Pj4+IEhtIHllYWguIE90b2ggdG8gbWUgdGhhdCdzIGJvcmRlcmluZyBvbiAiY29kZSB0b28g Y2xldmVyIGZvciBteSBvd24gZ29vZCIuCj4gPj4+Pj4+IFRoYXQgdGhlIHNwaW5sb2NrIGlzIGhl bGQgSSBjYW4gYXNzdXJlLiBUaGF0IG5vIG9uZSBnb2VzIGFyb3VuZCBhbmQgZG9lcwo+ID4+Pj4+ PiBtdWx0aXBsZSB2YmxhbmsgdXBkYXRlcyAoYmVjYXVzZSBzb21laG93IHRoYXQgY29kZSByYWNl ZCB3aXRoIHRoZSBodwo+ID4+Pj4+PiBpdHNlbGYpIEkgY2FuJ3QgZWFzaWx5IGFzc3VyZSB3aXRo IGEgc2ltcGxlIGFzc2VydCBvciBzb21ldGhpbmcgc2ltaWxhci4KPiA+Pj4+Pj4gSXQncyBub3Qg dGhlIGNhc2UgcmlnaHQgbm93LCBidXQgdGhhdCBjYW4gY2hhbmdlcy4KPiA+Pj4+Pgo+ID4+Pj4+ IFRoZSBhbGdvcml0aG0gd291bGQgYmUgYnJva2VuIGlmIG11bHRpcGxlIHVwZGF0ZXMgZm9yIHRo ZSBzYW1lIHZibGFuawo+ID4+Pj4+IGNvdW50IHdlcmUgYWxsb3dlZDsgdGhhdCdzIHdoeSBpdCBj aGVja3MgdG8gc2VlIGlmIHRoZSB2YmxhbmsgY291bnQgaGFzCj4gPj4+Pj4gbm90IGFkdmFuY2Vk IGJlZm9yZSBzdG9yaW5nIGEgbmV3IHRpbWVzdGFtcC4KPiA+Pj4+Pgo+ID4+Pj4+IE90aGVyd2lz ZSwgdGhlIHJlYWQgc2lkZSB3b3VsZCBub3QgYmUgYWJsZSB0byBkZXRlcm1pbmUgdGhhdCB0aGUK PiA+Pj4+PiB0aW1lc3RhbXAgaXMgdmFsaWQgYnkgZG91YmxlLWNoZWNraW5nIHRoYXQgdGhlIHZi bGFuayBjb3VudCBoYXMgbm90Cj4gPj4+Pj4gY2hhbmdlZC4KPiA+Pj4+Pgo+ID4+Pj4+IEFuZCBi ZXNpZGVzLCBldmVuIGlmIHRoZSBjb2RlIGxvb3BlZCB3aXRob3V0IGRyb3BwaW5nIHRoZSBzcGlu bG9jaywKPiA+Pj4+PiB0aGUgY29ycmVjdCB3cml0ZSBvcmRlciB3b3VsZCBzdGlsbCBiZSBvYnNl cnZlZCBiZWNhdXNlIGl0IHdvdWxkIHN0aWxsCj4gPj4+Pj4gYmUgZXhlY3V0aW5nIG9uIHRoZSBz YW1lIGNwdS4KPiA+Pj4+Pgo+ID4+Pj4+IE15IG9iamVjdGlvbiB0byB0aGUgd3JpdGUgbWVtb3J5 IGJhcnJpZXIgaXMgbm90IGFib3V0IG9wdGltaXphdGlvbjsKPiA+Pj4+PiBpdCdzIGFib3V0IGNv cnJlY3QgY29kZS4KPiA+Pj4+Cj4gPj4+PiBXZWxsIGRpZmY9MCBpcyBub3QgYWxsb3dlZCwgSSBn dWVzcyBJIGNvdWxkIGVuZm9yY2UgdGhpcyB3aXRoIHNvbWUKPiA+Pj4+IFdBUk5fT04uIEFuZCBJ IHN0aWxsIHRoaW5rIG15IHBvaW50IG9mIG5vbi1sb2NhbCBjb3JyZWN0bmVzcyBpcyBzb2xpZC4K PiA+Pj4+IFdpdGggdGhlIHNtcF93bWIoKSByZW1vdmVkIHRoZSBmb2xsb3dpbmcgc3RpbGwgd29y a3MgY29ycmVjdGx5Ogo+ID4+Pj4KPiA+Pj4+IHNwaW5fbG9jayh2YmxhbmtfdGltZV9sb2NrKTsK PiA+Pj4+IHN0b3JlX3ZibGFuayhkZXYsIGNydGMsIDEsIHRzMSk7Cj4gPj4+PiBzcGluX3VubG9j ayh2YmxhbmtfdGltZV9sb2NrKTsKPiA+Pj4+Cj4gPj4+PiBzcGluX2xvY2sodmJsYW5rX3RpbWVf bG9jayk7Cj4gPj4+PiBzdG9yZV92YmxhbmsoZGV2LCBjcnRjLCAxLCB0czIpOwo+ID4+Pj4gc3Bp bl91bmxvY2sodmJsYW5rX3RpbWVfbG9jayk7Cj4gPj4+Pgo+ID4+Pj4gQnV0IHdpdGggdGhlIHNt cF93bWIoKTsgcmVtb3ZlZCB0aGUgZm9sbG93aW5nIHdvdWxkIGJlIGJyb2tlbjoKPiA+Pj4+Cj4g Pj4+PiBzcGluX2xvY2sodmJsYW5rX3RpbWVfbG9jayk7Cj4gPj4+PiBzdG9yZV92YmxhbmsoZGV2 LCBjcnRjLCAxLCB0czEpOwo+ID4+Pj4gc3RvcmVfdmJsYW5rKGRldiwgY3J0YywgMSwgdHMyKTsK PiA+Pj4+IHNwaW5fdW5sb2NrKHZibGFua190aW1lX2xvY2spOwo+ID4+Pj4KPiA+Pj4+IGJlY2F1 c2UgdGhlIGNvbXBpbGVyL2NwdSBpcyBmcmVlIHRvIHJlb3JkZXIgdGhlIHN0b3JlIGZvciB2Ymxh bmstPmNvdW50Cj4gPj4+PiBfYWhlYWRfIG9mIHRoZSBzdG9yZSBmb3IgdGhlIHRpbWVzdGFtcC4g QW5kIHRoYXQgd291bGQgdHJpY2sgcmVhZGVycyBpbnRvCj4gPj4+PiBiZWxpZXZpbmcgdGhhdCB0 aGV5IGhhdmUgYSB2YWxpZCB0aW1lc3RhbXAgd2hlbiB0aGV5IHBvdGVudGlhbGx5IHJhY2VkLgo+ ID4+Pj4KPiA+Pj4+IE5vdyB5b3UncmUgY29ycmVjdCB0aGF0IHJpZ2h0IG5vdyB0aGVyZSdzIG5v IHN1Y2ggdGhpbmcgZ29pbmcgb24sIGFuZCBpdCdzCj4gPj4+PiB1bmxpa2VseSB0byBoYXBwZW4g KGdpdmVuIHRoZSBuYXR1cmUgb2YgdmJsYW5rIHVwZGF0ZXMpLiBCdXQgbXkgcG9pbnQgaXMKPiA+ Pj4+IHRoYXQgaWYgd2Ugb3B0aW1pemUgdGhpcyB0aGVuIHRoZSBjb3JyZWN0bmVzcyBjYW4ndCBi ZSBwcm92ZW4gbG9jYWxseQo+ID4+Pj4gYW55bW9yZSBieSBqdXN0IGxvb2tpbmcgYXQgc3RvcmVf dmJsYW5rLCBidXQgaW5zdGVhZCB5b3UgbXVzdCBhdWRpdCBhbGwKPiA+Pj4+IHRoZSBjYWxsZXJz LiBBbmQgbGVha2luZyBsb2NraW5nL2JhcnJpZXJzIGxpa2UgdGhhdCBpcyB0b28gZnJhZ2lsZSBk ZXNpZ24KPiA+Pj4+IGZvciBteSB0YXN0ZS4KPiA+Pj4+Cj4gPj4+PiBCdXQgeW91IGluc2lzdCB0 aGF0IG15IGFwcHJvYWNoIGlzIGJyb2tlbiBzb21laG93IGFuZCBkcm9wcGluZyB0aGUgc21wX3dt Ygo+ID4+Pj4gaXMgbmVlZGVkIGZvciBjb3JyZWN0bmVzcy4gSSBkb24ndCBzZWUgaG93IHRoYXQn cyB0aGUgY2FzZSBhdCBhbGwuCj4gPj4KPiA+PiBEYW5pZWwsCj4gPj4KPiA+PiBJJ3ZlIGJlZW4g cmVhbGx5IGJ1c3kgdGhpcyBsYXN0IHdlZWs7IG15IGFwb2xvZ2llcyBmb3Igbm90IHJlcGx5aW5n IHByb21wdGx5Lgo+ID4+Cj4gPj4+IEZ3aXcsIGkgc3BlbnQgc29tZSB0aW1lIHJlZWR1Y2F0aW5n IG15c2VsZiBhYm91dCBtZW1vcnkgYmFycmllcnMgKHRoYW5rcyBmb3IgeW91ciBleHBsYW5hdGlv bnMpIGFuZCB0aGlua2luZyBhYm91dCB0aGlzLCBhbmQgdGhlIGxhc3QgdmVyc2lvbiBvZiB5b3Vy IHBhdGNoIGxvb2tzIGdvb2QgdG8gbWUuIEl0IGFsc28gbWFrZXMgc2Vuc2UgdG8gbWUgdG8gbGVh dmUgdGhhdCBsYXN0IHNtYl93bWIoKSBpbiBwbGFjZSB0byBtYWtlIGZ1dHVyZSB1c2Ugb2YgdGhl IGhlbHBlciByb2J1c3QgLSBmb3Igbm9uLWxvY2FsIGNvcnJlY3RuZXNzLCB0byBhdm9pZCBoYXZp bmcgdG8gYXVkaXQgYWxsIGZ1dHVyZSBjYWxsZXJzIG9mIHRoYXQgaGVscGVyLgo+ID4+Cj4gPj4g TXkgY29uY2VybiB3cnQgdG8gdW5uZWNlc3NhcnkgYmFycmllcnMgaW4gdGhpcyBhbGdvcml0aG0g aXMgdGhhdCB0aGUgdHJhaWxpbmcKPiA+PiBiYXJyaWVyIG5vdyBhcHBlYXJzIG1hbmRhdG9yeSwg d2hlbiBpbiBmYWN0IGl0IGlzIG5vdC4KPiA+Pgo+ID4+IE1vcmVvdmVyLCB0aGlzIGFsZ29yaXRo bSBpcywgaW4gZ2VuZXJhbCwgZnJhZ2lsZSBhbmQgbm90IGRlc2lnbmVkIHRvIGhhbmRsZQo+ID4+ IHJhbmRvbSBvciBwb29ybHktcmVzZWFyY2hlZCBjaGFuZ2VzLgo+ID4gCj4gPiBMZXNzIGZyYWdp bGl0eSBpcyBleGFjdGx5IHdoeSBJIHdhbnQgdGhhdCBzdXJwbHVzIGJhcnJpZXIuIEJ1dCBJJ3Zl IHJ1bgo+ID4gb3V0IG9mIG5ldyBpZGVhcyBmb3IgaG93IHRvIGV4cGxhaW4gdGhhdCAuLi4KPiA+ IAo+ID4+IEZvciBleGFtcGxlLCBpZiBvbmx5IHRoZSByZWFkIGFuZCBzdG9yZSBvcGVyYXRpb25z IGFyZSBjb25zaWRlcmVkLCBpdCdzIG9idmlvdXNseQo+ID4+IHVuc2FmZSwgc2luY2UgYSByZWFk IG1heSB1bndpdHRpbmdseSByZXRyaWV2ZSBhbiBzdG9yZSBpbiBwcm9ncmVzcy4KPiA+Pgo+ID4+ Cj4gPj4gQ1BVIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ1BVIDEKPiA+ PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAo+ID4+ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogdmJsYW5rLT5jb3VudCA9PSAwICovCj4gPj4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKPiA+PiBkcm1fdmJsYW5rX2NvdW50 X2FuZF90aW1lKCkgICAgICAgICAgICAgfCBzdG9yZV92YmxhbmsoLi4sIGluYyA9IDIsIC4uLikK PiA+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAo+ID4+ICAgY3Vy X3ZibGFuayA8PSBMT0FEIHZibGFuay0+Y291bnQgICAgICB8Cj4gPj4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICB0c2xvdCA9IHZibGFuay0+Y291bnQgKyAyCj4g Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAvKiB0c2xvdCA9 PSAyICovCj4gPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBT VE9SRSB2Ymxhbmt0aW1lWzBdCj4gPiAKPiA+IFRoaXMgbGluZSBoZXJlIGlzIHdyb25nLCBpdCBz aG91bGQgYmUgIlNUT1JFIHZibGFua3RpbWVbMl0iCj4gPiAKPiA+IFRoZSAiU1RPUkUgdmJsYW5r dGltZVswXSIgaGFwcGVuZWQgd2F5IGVhcmxpZXIsIGJlZm9yZSAyIHNtcF93bWIgYW5kIHRoZQo+ ID4gcHJldmlvdXMgdXBkYXRpbmcgb2YgdmJsYW5rLT5jb3VudC4KPiAKPiAmdmJsYW5rdGltZVsw XSA9PSAmdmJsYW5rdGltZVsyXQo+IAo+IFRoYXQncyB3aHkgSSBrZWVwIHRyeWluZyB0byBleHBs YWluIHlvdSBhY3R1YWxseSBoYXZlIHRvIGxvb2sgYXQgYW5kCj4gdW5kZXJzdGFuZCB0aGUgYWxn b3JpdGhtIGJlZm9yZSBibGluZGx5IGFzc3VtaW5nIGxvY2FsIGJlaGF2aW9yIGlzCj4gc3VmZmlj aWVudC4KCk9rIG5vdyBJIHRoaW5rIEkgZ290IGl0LCB0aGUgaXNzdWUgaXMgd2hlbiB0aGUgYXJy YXkgKHdoaWNoIGlzIG9ubHkgMgplbGVtZW50cyBiaWcpIHdyYXBzIGFyb3VuZC4gQW5kIHRoYXQn cyByYWN5IGJlY2F1c2Ugd2UgZG9uJ3QgdG91Y2ggdGhlCmluY3JlbWVudCBiZWZvcmUgX2FuZF8g YWZ0ZXIgdGhlIHdyaXRlIHNpZGUgdXBkYXRlLiBCdXQgdGhhdCBzZWVtcyBsaWtlIGEKYnVnIHRo YXQncyBhbHdheXMgYmVlbiB0aGVyZT8KLURhbmllbAotLSAKRGFuaWVsIFZldHRlcgpTb2Z0d2Fy ZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Jsb2cuZmZ3bGwuY2gKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxp bmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK