From mboxrd@z Thu Jan 1 00:00:00 1970 From: Boris Brezillon Subject: Re: [RFC PATCH] drm/vc4: Add a load tracker to prevent HVS underflow errors Date: Mon, 29 Oct 2018 10:10:56 +0100 Message-ID: <20181029101056.3a33ac66@bbrezillon> References: <20181025100931.50fddf7e@bbrezillon> <20181025093314.GB21967@phenom.ffwll.local> <20181025114114.42caf97d@bbrezillon> <20181026133026.GM21967@phenom.ffwll.local> <20181026155748.70b9a6bd@bbrezillon> <20181026165233.7ebaf6c7@bbrezillon> <20181026151003.GY9144@intel.com> <20181029080640.GQ21967@phenom.ffwll.local> <20181029094136.1b11b427@bbrezillon> <20181029090301.GR21967@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail.bootlin.com (mail.bootlin.com [62.4.15.54]) by gabe.freedesktop.org (Postfix) with ESMTP id 3369889C0A for ; Mon, 29 Oct 2018 09:11:08 +0000 (UTC) In-Reply-To: <20181029090301.GR21967@phenom.ffwll.local> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Daniel Vetter Cc: "Hollingworth, Gordon" , dri-devel , Eben Upton List-Id: dri-devel@lists.freedesktop.org T24gTW9uLCAyOSBPY3QgMjAxOCAxMDowMzowMSArMDEwMApEYW5pZWwgVmV0dGVyIDxkYW5pZWxA ZmZ3bGwuY2g+IHdyb3RlOgoKPiBPbiBNb24sIE9jdCAyOSwgMjAxOCBhdCAwOTo0MTozNkFNICsw MTAwLCBCb3JpcyBCcmV6aWxsb24gd3JvdGU6Cj4gPiBPbiBNb24sIDI5IE9jdCAyMDE4IDA5OjA2 OjQwICswMTAwCj4gPiBEYW5pZWwgVmV0dGVyIDxkYW5pZWxAZmZ3bGwuY2g+IHdyb3RlOgo+ID4g ICAKPiA+ID4gT24gRnJpLCBPY3QgMjYsIDIwMTggYXQgMDY6MTA6MDNQTSArMDMwMCwgVmlsbGUg U3lyasOkbMOkIHdyb3RlOiAgCj4gPiA+ID4gT24gRnJpLCBPY3QgMjYsIDIwMTggYXQgMDQ6NTI6 MzNQTSArMDIwMCwgQm9yaXMgQnJlemlsbG9uIHdyb3RlOiAgICAKPiA+ID4gPiA+IE9uIEZyaSwg MjYgT2N0IDIwMTggMTY6MjY6MDMgKzAyMDAKPiA+ID4gPiA+IERhbmllbCBWZXR0ZXIgPGRhbmll bEBmZndsbC5jaD4gd3JvdGU6Cj4gPiA+ID4gPiAgICAgCj4gPiA+ID4gPiA+IE9uIEZyaSwgT2N0 IDI2LCAyMDE4IGF0IDM6NTcgUE0gQm9yaXMgQnJlemlsbG9uCj4gPiA+ID4gPiA+IDxib3Jpcy5i cmV6aWxsb25AYm9vdGxpbi5jb20+IHdyb3RlOiAgICAKPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4g PiA+IE9uIEZyaSwgMjYgT2N0IDIwMTggMTU6MzA6MjYgKzAyMDAKPiA+ID4gPiA+ID4gPiBEYW5p ZWwgVmV0dGVyIDxkYW5pZWxAZmZ3bGwuY2g+IHdyb3RlOgo+ID4gPiA+ID4gPiA+ICAgICAgCj4g PiA+ID4gPiA+ID4gPiBPbiBUaHUsIE9jdCAyNSwgMjAxOCBhdCAxMTo0MToxNEFNICswMjAwLCBC b3JpcyBCcmV6aWxsb24gd3JvdGU6ICAgICAgCj4gPiA+ID4gPiA+ID4gPiA+IE9uIFRodSwgMjUg T2N0IDIwMTggMTE6MzM6MTQgKzAyMDAKPiA+ID4gPiA+ID4gPiA+ID4gRGFuaWVsIFZldHRlciA8 ZGFuaWVsQGZmd2xsLmNoPiB3cm90ZToKPiA+ID4gPiA+ID4gPiA+ID4gICAgICAKPiA+ID4gPiA+ ID4gPiA+ID4gPiBPbiBUaHUsIE9jdCAyNSwgMjAxOCBhdCAxMDowOTozMUFNICswMjAwLCBCb3Jp cyBCcmV6aWxsb24gd3JvdGU6ICAgICAgCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiBPbiBUdWUsIDIz IE9jdCAyMDE4IDE1OjQ0OjQzICswMjAwCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiBEYW5pZWwgVmV0 dGVyIDxkYW5pZWxAZmZ3bGwuY2g+IHdyb3RlOgo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gICAgICAK PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gT24gVHVlLCBPY3QgMjMsIDIwMTggYXQgMDk6NTU6MDhB TSArMDIwMCwgQm9yaXMgQnJlemlsbG9uIHdyb3RlOiAgICAgIAo+ID4gPiA+ID4gPiA+ID4gPiA+ ID4gPiA+IEhpIERhbmllbCwKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ ID4gPiA+ID4gPiA+IE9uIFR1ZSwgMTYgT2N0IDIwMTggMTQ6NTc6NDMgKzAyMDAKPiA+ID4gPiA+ ID4gPiA+ID4gPiA+ID4gPiBEYW5pZWwgVmV0dGVyIDxkYW5pZWxAZmZ3bGwuY2g+IHdyb3RlOgo+ ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICAgICAgCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g PiBPbiBUdWUsIE9jdCAxNiwgMjAxOCBhdCAxMTo0MDo0NUFNICswMjAwLCBCb3JpcyBCcmV6aWxs b24gd3JvdGU6ICAgICAgCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IFRoZSBIVlMgYmxv Y2sgaXMgc3VwcG9zZWQgdG8gZmlsbCB0aGUgcGl4ZWx2YWx2ZSBGSUZPcyBmYXN0IGVub3VnaCB0 bwo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBtZWV0IHRoZSByZXF1ZXN0ZWQgZnJhbWVy YXRlLiBUaGUgcHJvYmxlbSBpcywgdGhlIEhWUyBhbmQgbWVtb3J5IGJ1cwo+ID4gPiA+ID4gPiA+ ID4gPiA+ID4gPiA+ID4gPiBiYW5kd2lkdGhzIGFyZSBsaW1pdGVkLCBhbmQgaWYgd2UgZG9uJ3Qg dGFrZSB0aGVzZSBsaW1pdGF0aW9ucyBpbnRvCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ IGFjY291bnQgd2UgbWlnaHQgZW5kIHVwIHdpdGggSFZTIHVuZGVyZmxvdyBlcnJvcnMuCj4gPiA+ ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IFRo aXMgcGF0Y2ggaXMgdHJ5aW5nIHRvIG1vZGVsIHRoZSBwZXItcGxhbmUgSFZTIGFuZCBtZW1vcnkg YnVzIGJhbmR3aWR0aAo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBjb25zdW1wdGlvbiBh bmQgdGFrZSBhIGRlY2lzaW9uIGF0IGF0b21pY19jaGVjaygpIHRpbWUgd2hldGhlciB0aGUKPiA+ ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gZXN0aW1hdGVkIGxvYWQgd2lsbCBmaXQgaW4gdGhl IEhWUyBhbmQgbWVtYnVzIGJ1ZGdldC4KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4KPiA+ ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gTm90ZSB0aGF0IHdlIHRha2UgYW4gZXh0cmEgbWFy Z2luIG9uIHRoZSBtZW1vcnkgYnVzIGNvbnN1bXB0aW9uIHRvIGxldAo+ID4gPiA+ID4gPiA+ID4g PiA+ID4gPiA+ID4gPiB0aGUgc3lzdGVtIHJ1biBzbW9vdGhseSB3aGVuIG90aGVyIGJsb2NrcyBh cmUgZG9pbmcgaGVhdnkgdXNlIG9mIHRoZQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBt ZW1vcnkgYnVzLiBTYW1lIGdvZXMgZm9yIHRoZSBIVlMgbGltaXQsIGV4Y2VwdCB0aGUgbWFyZ2lu IGlzIHNtYWxsZXIgaW4KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gdGhpcyBjYXNlLCBz aW5jZSB0aGUgSFZTIGlzIG5vdCB1c2VkIGJ5IGV4dGVybmFsIGNvbXBvbmVudHMuCj4gPiA+ID4g PiA+ID4gPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IFNpZ25l ZC1vZmYtYnk6IEJvcmlzIEJyZXppbGxvbiA8Ym9yaXMuYnJlemlsbG9uQGJvb3RsaW4uY29tPgo+ ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAtLS0KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g PiA+ID4gVGhpcyBsb2dpYyBoYXMgYmVlbiB2YWxpZGF0ZWQgdXNpbmcgYSBzaW1wbGUgc2hlbGwg c2NyaXB0IGFuZAo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBzb21lIGluc3RydW1lbnRh dGlvbiBpbiB0aGUgVkM0IGRyaXZlcjoKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4KPiA+ ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gLSBjYXB0dXJlIHVuZGVyZmxvdyBlcnJvcnMgYXQg dGhlIEhWUyBsZXZlbCBhbmQgZXhwb3NlIGEgZGVidWdmcyBmaWxlCj4gPiA+ID4gPiA+ID4gPiA+ ID4gPiA+ID4gPiA+ICAgcmVwb3J0aW5nIHRob3NlIGVycm9ycwo+ID4gPiA+ID4gPiA+ID4gPiA+ ID4gPiA+ID4gPiAtIGFkZCBkZWJ1Z2ZzIGZpbGVzIHRvIGV4cG9zZSB3aGVuIGF0b21pY19jaGVj ayBmYWlscyBiZWNhdXNlIG9mIHRoZQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAgIEhW UyBvciBtZW1idXMgbG9hZCBsaW1pdGF0aW9uIG9yIHdoZW4gaXQgZmFpbHMgZm9yIG90aGVyIHJl YXNvbnMKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ ID4gPiA+ID4gVGhlIGJyYW5jaCBjb250YWluaW5nIHRob3NlIG1vZGlmaWNhdGlvbiBpcyBhdmFp bGFibGUgaGVyZSBbMV0sIGFuZCB0aGUKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gc2Ny aXB0ICh3aGljaCBpcyBpbnRlcm5hbGx5IHVzaW5nIG1vZGV0ZXN0KSBpcyBoZXJlIFsyXSAocGxl YXNlIG5vdGUKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gdGhhdCBJJ20gYmFkIGF0IHdy aXRpbmcgc2hlbGwgc2NyaXB0cyA6LSkpLgo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPgo+ ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBOb3RlIHRoYXQgdGhvc2UgbW9kaWZpY2F0aW9u IHRlbmQgdG8gb3Zlci1lc3RpbWF0ZSB0aGUgbG9hZCwgYW5kIHRodXMKPiA+ID4gPiA+ID4gPiA+ ID4gPiA+ID4gPiA+ID4gcmVqZWN0IHNldHVwcyB0aGF0IG1pZ2h0IGhhdmUgcHJldmlvdXNseSB3 b3JrZWQsIHNvIHdlIG1pZ2h0IHdhbnQgdG8KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g YWRqdXN0IHRoZSBsaW1pdHMgdG8gYXZvaWQgdGhhdC4KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g PiA+ID4KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gWzFdaHR0cHM6Ly9naXRodWIuY29t L2JicmV6aWxsb24vbGludXgvdHJlZS92YzQvaHZzLWJhbmR3aWR0aC1ldmFsCj4gPiA+ID4gPiA+ ID4gPiA+ID4gPiA+ID4gPiA+IFsyXWh0dHBzOi8vZ2l0aHViLmNvbS9iYnJlemlsbG9uL3ZjNC1o dnMtYmFuZHdpZHRoLXRlc3QgICAgICAKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBBbnkgaW50ZXJlc3QgaW4gdXNpbmcgaWd0IHRvIHRlc3Qg dGhpcyBzdHVmZj8gV2UgaGF2ZSBhdCBsZWFzdCBhIGJ1bmNoIG9mCj4gPiA+ID4gPiA+ID4gPiA+ ID4gPiA+ID4gPiB0ZXN0cyBhbHJlYWR5IGluIHRoZXJlIHRoYXQgdHJ5IGFsbCBraW5kcyBvZiBw bGFuZSBzZXR1cHMuIEFuZCB3ZSB1c2UKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IHRob3Nl IHRvIGh1bnQgZm9yIHVuZGVycnVucyBvbiBpOTE1IGh3Lgo+ID4gPiA+ID4gPiA+ID4gPiA+ID4g PiA+ID4KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IFdydCB1bmRlcnJ1biByZXBvcnRpbmc6 IE9uIGk5MTUgd2UganVzdCBkdW1wIHRoZW0gaW50byBkbWVzZyBhdCB0aGUgZXJyb3IKPiA+ID4g PiA+ID4gPiA+ID4gPiA+ID4gPiA+IGxldmVsLCB1c2luZyBEUk1fRVJST1IsICAgICAgCj4gPiA+ ID4gPiA+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBBcmUgeW91IG1h c2tpbmcgdGhlIHVuZGVycnVuIGludGVycnVwdCBhZnRlciBpdCdzIGJlZW4gcmVwb3J0ZWQ/IElm IHdlCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gZG9uJ3QgZG8gdGhhdCBvbiBWQzQgd2UganVz dCBlbmQgdXAgZmxvb2RpbmcgdGhlIGtlcm5lbC1sb2cgYnVmZmVyIHVudGlsCj4gPiA+ID4gPiA+ ID4gPiA+ID4gPiA+ID4gc29tZW9uZSBjb21lcyBhbmQgdXBkYXRlIHRoZSBjb25maWcuICAgICAg Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IFllYWggd2Ug ZG8gdGhhdCB0b28uIFJ1bGUgaXMgdGhhdCBhIGZ1bGwgbW9kZXNldCB3aWxsIGNsZWFyIGFueSB1 bmRlcnJ1bgo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBtYXNraW5nIChzbyB0ZXN0cyBuZWVkIHRv IG1ha2Ugc3VyZSB0aGV5IHN0YXJ0IHdpdGggYSBtb2Rlc2V0LCBvciBpdCdsbCBiZQo+ID4gPiA+ ID4gPiA+ID4gPiA+ID4gPiBmb3Igbm90aGluZykuCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICAg ICAgCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gICAgICAKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ ID4gPiA+IHBsdXMgYSB0cmFjZXBvaW50LiBTZWUgZS5nLgo+ID4gPiA+ID4gPiA+ID4gPiA+ID4g PiA+ID4gaW50ZWxfcGNoX2ZpZm9fdW5kZXJydW5faXJxX2hhbmRsZXIoKS4gSWYgdGhlcmUncyBp bnRlcmVzdCB3ZSBjb3VsZAo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gcGVyaGFwcyBleHRy YWN0IHRoaXMgaW50byBzb21ldGhpbmcgY29tbW9uLCBzaW1pbGFyIHRvIHdoYXQgd2FzIGRvbmUg d2l0aAo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gY3JjIHN1cHBvcnQgYWxyZWFkeS4KPiA+ ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICAgICAgCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4K PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBJJ20gbm90IGEgYmlnIGZhbiBvZiBoYXJkY29kZWQg dHJhY2UgcG9pbnRzIGluIGdlbmVyYWwgKGJlY2F1c2Ugb2YgdGhlCj4gPiA+ID4gPiA+ID4gPiA+ ID4gPiA+ID4gd2hvbGUgIml0J3MgcGFydCBvZiB0aGUgc3RhYmxlIEFCSSIgdGhpbmcpLCBhbmQg aW4gdGhpcyBjYXNlLCBtYWtpbmcgdGhlCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gdHJhY2Vw b2ludCBnZW5lcmljIHNvdW5kcyBldmVuIG1vcmUgcmlza3kgdG8gbWUuIEluZGVlZCwgaG93IGNh biB3ZSBrbm93Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gYWJvdXQgYWxsIHRoZSBIVyBzcGVj aWZpYyBiaXRzIG9uZSBtaWdodCB3YW50IHRvIGV4cG9zZS4gRm9yIGluc3RhbmNlLAo+ID4gPiA+ ID4gPiA+ID4gPiA+ID4gPiA+IEkgc2VlIHRoZSBpbnRlbCB1bmRlcnJ1biB0cmFjZXBvaW50IGV4 cG9zZXMgYSBzdHJ1Y3Qgd2l0aCBhIGZyYW1lIGFuZAo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ IHNjYW5saW5lIGZpZWxkLCBhbmQgQUZBSUNULCB3ZSBkb24ndCBoYXZlIHN1Y2ggaW5mb3JtYXRp b24gaW4gdGhlIFZDNAo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IGNhc2UuCj4gPiA+ID4gPiA+ ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBBbnkgb3BpbmlvbiBvbiB0 aGF0PyAgICAgIAo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ID4gPiA+ID4g PiBJdCdzIG9ubHkgYWJpIGlmIHlvdSdyZSB1bmx1Y2t5LiBJZiBpdCdzIGp1c3QgZm9yIGRlYnVn Z2luZyBhbmQKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gdmFsaWRhdGlvbiwgeW91IGNhbiBjaGFu Z2UgaXQgYWdhaW4uIFRiaCwgbm8gaWRlYSB3aHkgd2UgZXZlbiBoYXZlIHRoZXNlCj4gPiA+ID4g PiA+ID4gPiA+ID4gPiA+IHRyYWNlcG9pbnRzLCB0aGV5J3JlIGZhaXJseSB1c2VsZXNzIGltby4g Q0kgb25seSByZWxpZXMgdXBvbiB0aGUgZG1lc2cKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gb3V0 cHV0LiBNYXliZSBydW4gZ2l0IGJsYW1lIGFuZCBhc2sgdGhlIG9yaWdpbmFsIGF1dGhvciwgd2Ug Y2FuIHByb2JhYmx5Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IHVwZGF0ZSB0aGVtIHRvIHN1aXQg b3VyIG5lZWRzLiAgICAgIAo+ID4gPiA+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+ID4g PiA+IE9rYXksIEkgdGhpbmsgSSdsbCBnbyBmb3IgYSBnZW5lcmljIGRlYnVnZnMgZW50cnkgdGhh dCByZXR1cm5zIHRydWUKPiA+ID4gPiA+ID4gPiA+ID4gPiA+IHdoZW4gYW4gdW5kZXJydW4gZXJy b3IgaGFwcGVuZWQgc2luY2UgdGhlIGxhc3QgbW9kZXNldCwgZmFsc2Ugb3RoZXJ3aXNlLgo+ID4g PiA+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+ID4gPiA+IE5leHQgcXVlc3Rpb24gaXM6 IHNob3VsZCBJIGF0dGFjaCB0aGUgdW5kZXJydW4gc3RhdHVzIHRvIHRoZSBkcm1fZGV2aWNlCj4g PiA+ID4gPiA+ID4gPiA+ID4gPiBvciBoYXZlIG9uZSBwZXIgQ1JUQz8gSW4gbXkgY2FzZSwgSSBv bmx5IGNhcmUgYWJvdXQgdGhlICJoYXMgYW4KPiA+ID4gPiA+ID4gPiA+ID4gPiA+IHVuZGVycnVu IGVycm9yIG9jY3VycmVkIG9uIGFueSBvZiB0aGUgYWN0aXZlIENSVEMiIGNhc2UsIHNvIEknZCB2 b3RlIGZvcgo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gYSBwZXItZGV2aWNlIHVuZGVycnVuIHN0YXR1 cy4gICAgICAKPiA+ID4gPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ID4gPiA+IFllYWggcHJv YmFibHkgZ29vZCBlbm91Z2guIEZvciBvdXIgQ0kgYWxsIHdlIGNhcmUgYWJvdXQgaXMgdGhlIHdh cm4vZXJyb3IKPiA+ID4gPiA+ID4gPiA+ID4gPiBsZXZlbCBkbWVzZyBvdXRwdXQuIEFueXRoaW5n IGF0IHRoYXQgbGV2ZWwgaXMgY29uc2lkZXJlZCBhIENJIGZhaWx1cmUuICAgICAgCj4gPiA+ID4g PiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiA+IFNvIGlndCBpcyBncmVwcGluZyBkbWVzZyB0byBk ZXRlY3Qgd2hlbiBhbiB1bmRlcnJ1biBoYXBwZW5zPyAgICAgIAo+ID4gPiA+ID4gPiA+ID4KPiA+ ID4gPiA+ID4gPiA+IE5vLCBidXQgdGhlIENJIHJ1bm5lciBpcyBhbHNvIG9ic2VydmluZyBkbWVz Zy4gQW55dGhpbmcgaW4gdGhlcmUgYXQKPiA+ID4gPiA+ID4gPiA+IHdhcm5pbmcgb3IgaGlnaGVy IGxldmVsIGlzIGNvbnNpZGVyZWQgYSBmYWlsdXJlLiAgICAgIAo+ID4gPiA+ID4gPiA+Cj4gPiA+ ID4gPiA+ID4gRXJpYywgZG8geW91IGRvIHRoZSBzYW1lIHdoZW4geW91IGxhdW5jaCB0aGUgSUdU IHRlc3RzdWl0ZT8KPiA+ID4gPiA+ID4gPiAgICAgIAo+ID4gPiA+ID4gPiA+ID4gICAgICAKPiA+ ID4gPiA+ID4gPiA+ID4gPiBXaGF0IGRvIHlvdSBuZWVkIHRoZSBkZWJ1Z2ZzIGZpbGUgZm9yPyAg ICAgIAo+ID4gPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ID4gPiBJIGp1c3QgdGhvdWdodCBo YXZpbmcgYSBkZWJ1Z2ZzIGZpbGUgdG8gZXhwb3NlIHRoZSB1bmRlcnJ1biBpbmZvcm1hdGlvbgo+ ID4gPiA+ID4gPiA+ID4gPiB3b3VsZCBiZSBjbGVhbmVyIHRoYW4gaGF2aW5nIHRvIGdyZXAgaW4g ZG1lc2cgdG8gZGV0ZWN0IHN1Y2ggZmFpbHVyZXMuICAgICAgCj4gPiA+ID4gPiA+ID4gPgo+ID4g PiA+ID4gPiA+ID4gVGhlIGlzc3VlIGlzIHRoYXQgeW91IHdhbnQgdG8gZGV0ZWN0IHVuZGVycnVu cyBldmVyeXdoZXJlLCBub3QganVzdCBpbiB0aGUKPiA+ID4gPiA+ID4gPiA+IHNwZWNpZmljIHRl c3RzIHlvdSdyZSBjaGVja2luZyBmb3IgaXQuIEFueXRoaW5nIHRoYXQgZG9lcyBhIG1vZGVzZXQg Y291bGQKPiA+ID4gPiA+ID4gPiA+IGNhdXNlIGFuIHVuZGVycnVuIChhdCBsZWFzdCB3ZSd2ZSBt YW5hZ2VkIHRvIGRvIHNvIHByZXR0eSBtdWNoIGV2ZXJ5d2hlcmUKPiA+ID4gPiA+ID4gPiA+IG9u IGk5MTUgaHcsIGlmIHlvdSBtaXNwcm9ncmFtIGlzIHN1ZmZpY2llbnRseSkuICAgICAgCj4gPiA+ ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiBJbiBteSBzcGVjaWZpYyBjYXNlLCBJIHdhbnQgdG8gaGF2 ZSB0aGUgSUdUIHRlc3QgY2hlY2sgdGhlIHVuZGVycnVuCj4gPiA+ID4gPiA+ID4gdmFsdWUgd2hp bGUgdGhlIHRlc3QgaXMgYmVpbmcgZXhlY3V0ZWQgc28gdGhhdCBJIGtub3cgd2hpY2ggZXhhY3QK PiA+ID4gPiA+ID4gPiBjb25maWd1cmF0aW9uIHRyaWdnZXJzIHRoZSB1bmRlcnJ1biBzaXR1YXRp b24uIEF0IGxlYXN0IHRoYXQncyBob3cgSQo+ID4gPiA+ID4gPiA+IGRpZCB0byBhZGp1c3QvZGVi dWcgdGhlIEhWUyBsb2FkIHRyYWNraW5nIGNvZGUuIE1heWJlIGl0J3Mgbm90IHJlYWxseSBhCj4g PiA+ID4gPiA+ID4gcHJvYmxlbSB3aGVuIGFsbCB3ZSBkbyBpcyB0cmFja2luZyByZWdyZXNzaW9u cy4gICAgICAKPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+IE9rLCB0aGF0IG1ha2VzIHNlbnNlLCBh bmQgZXhwbGFpbnMgd2h5IHlvdSB3YW50IHRoZSBvdmVyYWxsIHVuZGVycnVuCj4gPiA+ID4gPiA+ IGNvdW50ZXIgZXhwb3NlZCBpbiBkZWJ1Z2ZzLiAgICAKPiA+ID4gPiA+IAo+ID4gPiA+ID4gSnVz dCBvbmUgdGlueSBkZXRhaWwgd2hpY2ggaXMgbm90IGV4YWN0bHkgcmVsYXRlZCB0byB0aGlzIGRp c2N1c3Npb24KPiA+ID4gPiA+IGJ1dCBJIHRob3VnaHQgSSdkIG1lbnRpb24gaXQgaGVyZTogdW5k ZXJydW4gaXMgYWN0dWFsbHkgbm90IGEgY291bnRlciwKPiA+ID4gPiA+IGl0J3MganVzdCBhIGJv b2xlYW4uIEkgdXNlZCBhbiBhdG9taWNfdCB0eXBlIHRvIGF2b2lkIGhhdmluZyB0byBhZGQgYQo+ ID4gPiA+ID4gc3BpbmxvY2sgdG8gcHJvdGVjdCB0aGUgdmFyaWFibGUgKHRoZSB2YXJpYWJsZSBp cyBtb2RpZmllZCBmcm9tCj4gPiA+ID4gPiBhbiBpbnRlcnJ1cHQgY29udGV4dCBhbmQgcmVhZCBm cm9tIGEgbm9uLWF0b21pYyBjb250ZXh0KS4gU28sIHRoZQo+ID4gPiA+ID4gYWNjZXB0YWJsZSB2 YWx1ZXMgZm9yIHVuZGVycnVuIGFyZSBjdXJyZW50bHkgMCBvciAxLiBJIGNhbiBtYWtlIGl0IGEK PiA+ID4gPiA+IGNvdW50ZXIgaWYgcmVxdWlyZWQuICAgIAo+ID4gPiA+IAo+ID4gPiA+IE9uZSBp ZGVhIEkgaGFkIGEgd2hpbGUgYmFjayBmb3IgaTkxNSB3b3VsZCBiZSB0byBjb3VudCB0aGUgbnVt YmVyIG9mCj4gPiA+ID4gZnJhbWVzIHRoYXQgaGFkIGFuIHVuZGVycnVuLiBTbyBiYXNpY2FsbHkg c29tZXRoaW5nIGxpa2UgdGhpczoKPiA+ID4gPiAKPiA+ID4gPiB1bmRlcnJ1bl9pcnEoKSB7Cj4g PiA+ID4gCXVuZGVycnVuX2ZyYW1lcz0xCj4gPiA+ID4gCWRpc2FibGVfdW5kZXJydW5faXJxKCk7 Cj4gPiA+ID4gCXZibGFua19nZXQoKTsKPiA+ID4gPiB9Cj4gPiA+ID4gdmJsYW5rX2lycSgpIHsK PiA+ID4gPiAJaWYgKHVuZGVycnVuKSB7Cj4gPiA+ID4gCQl1bmRlcnJ1bl9mcmFtZXMrKzsKPiA+ ID4gPiAJfSBlbHNlIGlmICh1bmRlcnJ1bl9mcmFtZXMpIHsKPiA+ID4gPiAJCXZibGFua19wdXQo KTsKPiA+ID4gPiAJCWVuYWJsZV91bmRlcnJ1bl9pcnEoKTsKPiA+ID4gPiAJCURFQlVHKCIlZCBm cmFtZXMgaGFkIGFuIHVuZGVycnVuXG4iLCB1bmRlcnJ1bl9mcmFtZXMpOwo+ID4gPiA+IAkJdW5k ZXJydW5fZnJhbWVzPTA7Cj4gPiA+ID4gCX0KPiA+ID4gPiB9Cj4gPiA+ID4gCj4gPiA+ID4gVGhp cyBhdm9pZHMgZHJvd25pbmcgaW4gdW5kZXJydW4gaW50ZXJydXB0cyB3aGlsZSBzdGlsbAo+ID4g PiA+IHJlcG9ydGluZyBhdCBsZWFzdCBob3cgbWFueSBmcmFtZXMgaGFkIHByb2JsZW1zLgo+ID4g PiA+IAo+ID4gPiA+IEJ1dCBJIGhhdmVuJ3QgaGFkIHRpbWUgdG8gaW1wbGVtZW50IHRoYXQgeWV0 LiAgICAKPiA+IAo+ID4gTWF5IEkgYXNrIHdoeSB5b3UgbmVlZCB0byBrbm93IGhvdyBtYW55IGZy YW1lcyBoYWQgdW5kZXJydW4gaXNzdWVzPyAgCj4gCj4gTXVjaCBxdWlja2VyIHRlc3Rpbmcgd2hl biB5b3UncmUgZXhwZXJpbWVudGluZyBhcm91bmQgd2l0aCBlLmcuIHdhdGVybWFyawo+IHNldHRp bmdzLiBGdWxsIG1vZGVzZXQgZm9yIHJlc2V0dGluZyBjYW4gZWFzaWx5IHRha2UgYSBmZXcgc2Vj b25kcy4gSQo+IHRoaW5rIHdlIGV2ZW4gaGFkIHBhdGNoZXMgdGhhdCByZXN0b3JlZCB0aGUgaW50 ZXJydXB0IGFmdGVyIDFtcyBhbHJlYWR5LAo+IHRvIGhhdmUgbW9yZSBhY2N1cmF0ZSBzYW1wbGlu ZyB0byBqdWRnZSB3aGV0aGVyIGEgZ2l2ZW4gY2hhbmdlIG1hZGUgdGhpbmdzCj4gd29yc2Ugb3Ig YmV0dGVyLiBXZSBtaWdodCBoYXZlIHNvbWV3aGF0IHN0cmFuZ2UgaHcgOi0pCj4gCj4gPiA+IFRo ZSBvdGhlciB1cHNob3Qgb2YgYSBjb3VudGVyIGlzIHRoYXQgdGhlcmUncyBubyBwcm9ibGVtIHdp dGggcmVzZXR0aW5nLgo+ID4gPiBVc2Vyc3BhY2Ugc2ltcGx5IGdyYWJzIHRoZSBjb3VudGVyIGJl Zm9yZSBhbmQgYWZ0ZXIgdGhlIHRlc3QgYW5kIGNvbXBhcmVzLgo+ID4gPiBJZiB5b3Ugb25seSBo YXZlIDAvMSB5b3UgbmVlZCBzb21lIHdheSB0byByZXNldCwgb3Igb3RoZXJ3aXNlIGF1dG9tYXRl ZAo+ID4gPiBydW5uaW5nIGluIGEgQ0kgZmFybSBpc24ndCBwb3NzaWJsZS4gIAo+ID4gCj4gPiBU aGUgcmVzZXQgd2FzIGRvbmUgZHVyaW5nIGF0b21pYyBjb21taXQgaW4gbXkgcHJvcG9zYWwsIHNv IG5vIGFjdGlvbgo+ID4gd2FzIHJlcXVpcmVkIG9uIHRoZSB1c2VyIHNpZGUgYXBhcnQgZnJvbSBh cHBseWluZyBhIG5ldyBjb25maWcuCj4gPiBBbnl3YXksIEknbGwgY2hhbmdlIHRoYXQgZm9yIGEg cmVhbCBjb3VudGVyLiAgCj4gCj4gV2Ugd2FudCB0byBtZWFzdXJlIHVuZGVycnVucyB3aGlsZSBk b2luZyBmdWxsIG1vZGVzZXRzIHRvbyAoc3BlY2lmaWNhbGx5LAo+IHdoZW4gc2h1dHRpbmcgZG93 biB0aGUgcGlwZWxpbmUpLiBBdCBsZWFzdCBmb3Igb3VyIGh3IHRoaXMgaGFzCj4gaGlzdG9yaWNh bGx5IGhlbHBlZCBncmVhdGx5IGluIGNhdGNoaW5nIHByb2dyYW1taW5nIHNlcXVlbmNlIGlzc3Vl cy4KCkxvb2tzIGxpa2UgeW91IGhhdmUgcGFydGljdWxhciBuZWVkcyBmb3IgaW50ZWwgSFcgd2hp Y2ggSSBkb24ndCBrbm93CmFib3V0LCBtYXliZSBJIHNob3VsZG4ndCBiZSB0aGUgb25lIGRyaXZp bmcgdGhpcyByZXdvcmsuLi4KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJp LWRldmVsCg==