From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: References: <20180422223430.16407-1-laurent.pinchart+renesas@ideasonboard.com> <3482108.jirjkbZynl@avalon> <20180430145524.GJ12521@phenom.ffwll.local> <20180430145640.GK12521@phenom.ffwll.local> <0f7c2e60-23d0-b222-c8c0-36b17f1e7c25@linux.intel.com> <20180502073240.GU12521@phenom.ffwll.local> From: Maarten Lankhorst Message-ID: Date: Mon, 7 May 2018 15:28:19 +0200 MIME-Version: 1.0 In-Reply-To: <20180502073240.GU12521@phenom.ffwll.local> Content-Language: en-US Subject: Re: [igt-dev] igt trouble with planes shared between multiple CRTCs (Re: [PATCH v2 0/8] R-Car DU: Support CRC calculation) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Daniel Vetter Cc: IGT development , Kieran Bingham , dri-devel@lists.freedesktop.org, linux-renesas-soc@vger.kernel.org, Laurent Pinchart List-ID: T3AgMDItMDUtMTggb20gMDk6MzIgc2NocmVlZiBEYW5pZWwgVmV0dGVyOgo+IE9uIFR1ZSwgTWF5 IDAxLCAyMDE4IGF0IDEwOjU4OjAyQU0gKzAyMDAsIE1hYXJ0ZW4gTGFua2hvcnN0IHdyb3RlOgo+ PiBIZXksCj4+Cj4+IE9wIDMwLTA0LTE4IG9tIDE2OjU2IHNjaHJlZWYgRGFuaWVsIFZldHRlcjoK Pj4+IE9uIE1vbiwgQXByIDMwLCAyMDE4IGF0IDA0OjU1OjI0UE0gKzAyMDAsIERhbmllbCBWZXR0 ZXIgd3JvdGU6Cj4+Pj4gT24gU2F0LCBBcHIgMjgsIDIwMTggYXQgMTI6MDc6MDRBTSArMDMwMCwg TGF1cmVudCBQaW5jaGFydCB3cm90ZToKPj4+Pj4gSGkgRGFuaWVsLAo+Pj4+Pgo+Pj4+PiAoUmVt b3ZpbmcgdGhlIGxpbnV4LW1lZGlhIG1haWxpbmcgbGlzdCBmcm9tIENDIGFzIGl0IGlzIG91dCBv ZiBzY29wZSkKPj4+Pj4KPj4+Pj4gWW91IGVucXVpcmVkIG9uIElSQyB3aGV0aGVyIHRoaXMgcGF0 Y2ggc2VyaWVzIHBhc3NlcyB0aGUgaWd0IENSQyB0ZXN0cy4KPj4+Pj4KPj4+Pj4gIyAuL2ttc19w aXBlX2NyY19iYXNpYyAtLXJ1bi1zdWJ0ZXN0IHJlYWQtY3JjLXBpcGUtQQo+Pj4+PiBJR1QtVmVy c2lvbjogMS4yMi1nZjQ0N2Y1ZmM1MzFkIChhYXJjaDY0KSAoTGludXg6IDQuMTcuMC1yYzEtMDAw ODUtZzU2ZTg0OWQ5M2NjOSBhYXJjaDY0KQo+Pj4+PiByZWFkLWNyYy1waXBlLUE6IFRlc3Rpbmcg Y29ubmVjdG9yIExWRFMtMSB1c2luZyBwaXBlIEEKPj4+Pj4gKGttc19waXBlX2NyY19iYXNpYzox NjM4KSBpZ3QtZGVidWdmcy1DUklUSUNBTDogVGVzdCBhc3NlcnRpb24gZmFpbHVyZSBmdW5jdGlv biBpZ3RfcGlwZV9jcmNfc3RhcnQsIGZpbGUgaWd0X2RlYnVnZnMuYzo3NjQ6Cj4+Pj4+IChrbXNf cGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0LWRlYnVnZnMtQ1JJVElDQUw6IEZhaWxlZCBhc3NlcnRp b246IHBpcGVfY3JjLT5jcmNfZmQgIT0gLTEKPj4+Pj4gKGttc19waXBlX2NyY19iYXNpYzoxNjM4 KSBpZ3QtZGVidWdmcy1DUklUSUNBTDogTGFzdCBlcnJubzogNSwgSW5wdXQvb3V0cHV0IGVycm9y Cj4+Pj4+IFN0YWNrIHRyYWNlOgo+Pj4+PiBTdWJ0ZXN0IHJlYWQtY3JjLXBpcGUtQSBmYWlsZWQu Cj4+Pj4+ICoqKiogREVCVUcgKioqKgo+Pj4+PiAoa21zX3BpcGVfY3JjX2Jhc2ljOjE2MzgpIERF QlVHOiBUZXN0IHJlcXVpcmVtZW50IHBhc3NlZDogIShwaXBlID49IGRhdGEtPmRpc3BsYXkubl9w aXBlcykKPj4+Pj4gKGttc19waXBlX2NyY19iYXNpYzoxNjM4KSBJTkZPOiByZWFkLWNyYy1waXBl LUE6IFRlc3RpbmcgY29ubmVjdG9yIExWRFMtMSB1c2luZyBwaXBlIEEKPj4+Pj4gKGttc19waXBl X2NyY19iYXNpYzoxNjM4KSBpZ3Qta21zLURFQlVHOiBkaXNwbGF5OiBMVkRTLTE6IHNldF9waXBl KEEpCj4+Pj4+IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0LWttcy1ERUJVRzogZGlzcGxh eTogTFZEUy0xOiBTZWxlY3RpbmcgcGlwZSBBCj4+Pj4+IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYz OCkgREVCVUc6IENsZWFyaW5nIHRoZSBmYiB3aXRoIGNvbG9yICgwLjAwLDEuMDAsMC4wMCkKPj4+ Pj4gKGttc19waXBlX2NyY19iYXNpYzoxNjM4KSBpZ3QtZmItREVCVUc6IGlndF9jcmVhdGVfZmJf d2l0aF9ib19zaXplKHdpZHRoPTEwMjQsIGhlaWdodD03NjgsIGZvcm1hdD0weDM0MzI1MjU4LCB0 aWxpbmc9MHgwLCBzaXplPTApCj4+Pj4+IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0LWZi LURFQlVHOiBpZ3RfY3JlYXRlX2ZiX3dpdGhfYm9fc2l6ZShoYW5kbGU9MSwgcGl0Y2g9NDA5NikK Pj4+Pj4gKGttc19waXBlX2NyY19iYXNpYzoxNjM4KSBpZ3Qta21zLURFQlVHOiBUZXN0IHJlcXVp cmVtZW50IHBhc3NlZDogcGxhbmVfaWR4ID49IDAgJiYgcGxhbmVfaWR4IDwgcGlwZS0+bl9wbGFu ZXMKPj4+Pj4gKGttc19waXBlX2NyY19iYXNpYzoxNjM4KSBpZ3Qta21zLURFQlVHOiBkaXNwbGF5 OiBBLjA6IHBsYW5lX3NldF9mYigxNDApCj4+Pj4+IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkg aWd0LWttcy1ERUJVRzogZGlzcGxheTogQS4wOiBwbGFuZV9zZXRfc2l6ZSAoMTAyNHg3NjgpCj4+ Pj4+IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0LWttcy1ERUJVRzogZGlzcGxheTogQS4w OiBmYl9zZXRfcG9zaXRpb24oMCwwKQo+Pj4+PiAoa21zX3BpcGVfY3JjX2Jhc2ljOjE2MzgpIGln dC1rbXMtREVCVUc6IGRpc3BsYXk6IEEuMDogZmJfc2V0X3NpemUoMTAyNHg3NjgpCj4+Pj4+IChr bXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0LWttcy1ERUJVRzogZGlzcGxheTogY29tbWl0IHsK Pj4+Pj4gKGttc19waXBlX2NyY19iYXNpYzoxNjM4KSBpZ3Qta21zLURFQlVHOiBkaXNwbGF5OiAg ICAgTFZEUy0xOiBTZXRDcnRjIHBpcGUgQSwgZmIgMTQwLCBzcmMgKDAsIDApLCBtb2RlIDEwMjR4 NzY4Cj4+Pj4+IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0LWttcy1ERUJVRzogZGlzcGxh eTogICAgIFNldENydGMgcGlwZSBBLCBkaXNhYmxpbmcKPj4+Pj4gKGttc19waXBlX2NyY19iYXNp YzoxNjM4KSBpZ3Qta21zLURFQlVHOiBkaXNwbGF5OiAgICAgU2V0UGxhbmUgcGlwZSBBLCBwbGFu ZSAyLCBkaXNhYmxpbmcKPj4+Pj4gKGttc19waXBlX2NyY19iYXNpYzoxNjM4KSBpZ3Qta21zLURF QlVHOiBkaXNwbGF5OiAgICAgU2V0UGxhbmUgcGlwZSBBLCBwbGFuZSAzLCBkaXNhYmxpbmcKPj4+ Pj4gKGttc19waXBlX2NyY19iYXNpYzoxNjM4KSBpZ3Qta21zLURFQlVHOiBkaXNwbGF5OiAgICAg U2V0UGxhbmUgcGlwZSBBLCBwbGFuZSA0LCBkaXNhYmxpbmcKPj4+Pj4gKGttc19waXBlX2NyY19i YXNpYzoxNjM4KSBpZ3Qta21zLURFQlVHOiBkaXNwbGF5OiAgICAgU2V0Q3J0YyBwaXBlIEIsIGRp c2FibGluZwo+Pj4+PiAoa21zX3BpcGVfY3JjX2Jhc2ljOjE2MzgpIGlndC1rbXMtREVCVUc6IGRp c3BsYXk6ICAgICBTZXRQbGFuZSBwaXBlIEIsIHBsYW5lIDEsIGRpc2FibGluZwo+Pj4+PiAoa21z X3BpcGVfY3JjX2Jhc2ljOjE2MzgpIGlndC1rbXMtREVCVUc6IGRpc3BsYXk6ICAgICBTZXRQbGFu ZSBwaXBlIEIsIHBsYW5lIDIsIGRpc2FibGluZwo+Pj4+PiAoa21zX3BpcGVfY3JjX2Jhc2ljOjE2 MzgpIGlndC1rbXMtREVCVUc6IGRpc3BsYXk6ICAgICBTZXRQbGFuZSBwaXBlIEIsIHBsYW5lIDMs IGRpc2FibGluZwo+Pj4+PiAoa21zX3BpcGVfY3JjX2Jhc2ljOjE2MzgpIGlndC1rbXMtREVCVUc6 IGRpc3BsYXk6ICAgICBTZXRQbGFuZSBwaXBlIEIsIHBsYW5lIDQsIGRpc2FibGluZwo+Pj4+PiAo a21zX3BpcGVfY3JjX2Jhc2ljOjE2MzgpIGlndC1rbXMtREVCVUc6IGRpc3BsYXk6ICAgICBTZXRD cnRjIHBpcGUgQywgZGlzYWJsaW5nCj4+Pj4+IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0 LWttcy1ERUJVRzogZGlzcGxheTogICAgIFNldFBsYW5lIHBpcGUgQywgcGxhbmUgMSwgZGlzYWJs aW5nCj4+Pj4+IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0LWttcy1ERUJVRzogZGlzcGxh eTogICAgIFNldFBsYW5lIHBpcGUgQywgcGxhbmUgMiwgZGlzYWJsaW5nCj4+Pj4+IChrbXNfcGlw ZV9jcmNfYmFzaWM6MTYzOCkgaWd0LWttcy1ERUJVRzogZGlzcGxheTogICAgIFNldFBsYW5lIHBp cGUgQywgcGxhbmUgMywgZGlzYWJsaW5nCj4+Pj4+IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkg aWd0LWttcy1ERUJVRzogZGlzcGxheTogICAgIFNldFBsYW5lIHBpcGUgQywgcGxhbmUgNCwgZGlz YWJsaW5nCj4+Pj4+IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0LWttcy1ERUJVRzogZGlz cGxheTogICAgIFNldENydGMgcGlwZSBELCBkaXNhYmxpbmcKPj4+Pj4gKGttc19waXBlX2NyY19i YXNpYzoxNjM4KSBpZ3Qta21zLURFQlVHOiBkaXNwbGF5OiAgICAgU2V0Q3J0YyBwaXBlIEQsIGRp c2FibGluZwo+Pj4+PiAoa21zX3BpcGVfY3JjX2Jhc2ljOjE2MzgpIGlndC1rbXMtREVCVUc6IGRp c3BsYXk6ICAgICBTZXRQbGFuZSBwaXBlIEQsIHBsYW5lIDIsIGRpc2FibGluZwo+Pj4+PiAoa21z X3BpcGVfY3JjX2Jhc2ljOjE2MzgpIGlndC1rbXMtREVCVUc6IGRpc3BsYXk6ICAgICBTZXRQbGFu ZSBwaXBlIEQsIHBsYW5lIDMsIGRpc2FibGluZwo+Pj4+PiAoa21zX3BpcGVfY3JjX2Jhc2ljOjE2 MzgpIGlndC1rbXMtREVCVUc6IGRpc3BsYXk6ICAgICBTZXRQbGFuZSBwaXBlIEQsIHBsYW5lIDQs IGRpc2FibGluZwo+Pj4+PiAoa21zX3BpcGVfY3JjX2Jhc2ljOjE2MzgpIGlndC1rbXMtREVCVUc6 IGRpc3BsYXk6IH0KPj4+Pj4gKGttc19waXBlX2NyY19iYXNpYzoxNjM4KSBpZ3QtZGVidWdmcy1E RUJVRzogT3BlbmluZyBkZWJ1Z2ZzIGRpcmVjdG9yeSAnL3N5cy9rZXJuZWwvZGVidWcvZHJpLzAn Cj4+Pj4+IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0LWRlYnVnZnMtREVCVUc6IE9wZW5p bmcgZGVidWdmcyBkaXJlY3RvcnkgJy9zeXMva2VybmVsL2RlYnVnL2RyaS8wJwo+Pj4+PiAoa21z X3BpcGVfY3JjX2Jhc2ljOjE2MzgpIGlndC1kZWJ1Z2ZzLUNSSVRJQ0FMOiBUZXN0IGFzc2VydGlv biBmYWlsdXJlIGZ1bmN0aW9uIGlndF9waXBlX2NyY19zdGFydCwgZmlsZSBpZ3RfZGVidWdmcy5j Ojc2NDoKPj4+Pj4gKGttc19waXBlX2NyY19iYXNpYzoxNjM4KSBpZ3QtZGVidWdmcy1DUklUSUNB TDogRmFpbGVkIGFzc2VydGlvbjogcGlwZV9jcmMtPmNyY19mZCAhPSAtMQo+Pj4+PiAoa21zX3Bp cGVfY3JjX2Jhc2ljOjE2MzgpIGlndC1kZWJ1Z2ZzLUNSSVRJQ0FMOiBMYXN0IGVycm5vOiA1LCBJ bnB1dC9vdXRwdXQgZXJyb3IKPj4+Pj4gKGttc19waXBlX2NyY19iYXNpYzoxNjM4KSBpZ3QtY29y ZS1JTkZPOiBTdGFjayB0cmFjZToKPj4+Pj4gKioqKiAgRU5EICAqKioqCj4+Pj4+IFN1YnRlc3Qg cmVhZC1jcmMtcGlwZS1BOiBGQUlMICgwLjA2MXMpCj4+Pj4+Cj4+Pj4+IEkgdGhpbmsgdGhlIGFu c3dlciBpcyBubywgYnV0IEkgZG9uJ3QgdGhpbmsgaXQncyB0aGUgZmF1bHQgb2YgdGhpcyBwYXRj aAo+Pj4+PiBzZXJpZXMuIE9wZW5pbmcgdGhlIENSQyBkYXRhIGZpbGUgcmV0dXJucyAtRUlPIGJl Y2F1c2UgdGhlIENSVEMgaXMgbm90IGFjdGl2ZSwKPj4+Pj4gYW5kIEknbSB0cnlpbmcgdG8gZmlu ZCBvdXQgd2h5IHRoYXQgaXMgdGhlIGNhc2UuIFRoZSBkZWJ1ZyBsb2cgc2hvd3MgYSBjb21taXQK Pj4+Pj4gdGhhdCBzZWVtcyBzdHJhbmdlIHRvIG1lLCBlbmFibGluZyBwaXBlIEEgYW5kIGltbWVk aWF0ZWx5IGRpc2FibGluZyByaWdodAo+Pj4+PiBhZnRlcndhcmRzLiBBZnRlciBzb21lIGludmVz dGlnYXRpb24gSSBiZWxpZXZlIHRoYXQgdGhpcyBpcyBjYXVzZWQgYnkgc2hhcmluZwo+Pj4+PiBw cmltYXJ5IHBsYW5lcyBiZXR3ZWVuIENSVENzLgo+Pj4+Pgo+Pj4+PiBUaGUgUi1DYXIgRFUgZ3Jv dXBzIENSVENzIGJ5IHR3byBhbmQgc2hhcmVzIDUgcGxhbmVzIGJldHdlZW4gdGhlIHR3byBDUlRD cyBvZgo+Pj4+PiB0aGUgZ3JvdXAuIFRoaXMgc3BlY2lmaWMgU29DIGhhcyB0d28gZ3JvdXBzIG9m IHR3byBDUlRDcywgYnV0IHRoYXQncyBub3QKPj4+Pj4gcmVsZXZhbnQgaGVyZSwgc28gd2UgY2Fu IGlnbm9yZSBwaXBlcyBDIGFuZCBELgo+Pj4+Pgo+Pj4+PiBQaXBlcyBBIGFuZCBCIHRodXMgc2hh cmVkIDUgcGxhbmVzIHRoYXQgSSB3aWxsIG51bWJlciAwIHRvIDQgZm9yIHNpbXBsaWNpdHkuCj4+ Pj4+IFRoZSBkcml2ZXIgc2V0cyBwbGFuZSAwIGFzIHRoZSBwcmltYXJ5IHBsYW5lIGZvciBDUlRD IEEgYW5kIHBsYW5lIDEgYXMgdGhlCj4+Pj4+IHByaW1hcnkgcGxhbmUgZm9yIENSVEMgQi4gUGxh bmVzIDIsIDMgYW5kIDQgYXJlIGNyZWF0ZWQgYXMgb3ZlcmxheSBwbGFuZXMuCj4+Pj4+Cj4+Pj4+ IFdoZW4gaWd0IGl0ZXJhdGVzIG92ZXIgYWxsIHBsYW5lcyBmb3IgcGlwZSBBLCBpdCB3aWxsIGZp cnN0IGVuY291bnRlciBwbGFuZSAwCj4+Pj4+IHRoYXQgaGFzIGEgZnJhbWVidWZmZXIsIGFuZCB0 aHVzIGVuYWJsZXMgdGhlIHBpcGUuIEl0IHRoZW4gaXRlcmF0ZXMgb3Zlcgo+Pj4+PiBwbGFuZSAx LCByZWNvZ25pemVzIGl0IGFzIGEgcHJpbWFyeSBwbGFuZSB3aXRob3V0IGEgZnJhbWVidWZmZXIs IGFuZCB0aHVzCj4+Pj4+IGRpc2FibGVzIHRoZSBwaXBlLiBQbGFuZXMgMiwgMyBhbmQgNCBhcmUg cmVjb2duaXplZCBhcyBvdmVybGF5IHBsYW5lcyBhbmQgdGh1cwo+Pj4+PiBkb24ndCBhZmZlY3Qg dGhlIHBpcGUgYWN0aXZlIHN0YXRlLiBQaXBlIEIgaXMgaGFuZGxlZCB0aGUgc2FtZSB3YXksIGFu ZCBpZ3QKPj4+Pj4gZGlzYWJsZXMgaXQgdHdpY2UgYXMgcGxhbmVzIDAgYW5kIDEgYXJlIHByaW1h cnkuCj4+Pj4+Cj4+Pj4+IEkgZG9uJ3Qga25vdyBpZiB0aGUgZmF1bHQgaGVyZSBpcyB3aXRoIGln dCB0aGF0IGRvZXNuJ3QgcHJvcGVybHkgc3VwcG9ydCB0aGlzCj4+Pj4+IGFyY2hpdGVjdHVyZSwg b3Igd2l0aCB0aGUgZHJpdmVyIHRoYXQgc2hvdWxkbid0IGhhdmUgdHdvIHByaW1hcnkgcGxhbmVz Cj4+Pj4+IGF2YWlsYWJsZSBmb3IgYSBDUlRDLiBJbiB0aGUgZm9ybWVyIGNhc2UsIEknbSBub3Qg c3VyZSBob3cgdG8gZml4IGl0LCBhcyBJJ20KPj4+Pj4gbm90IGZhbWlsaWFyIGVub3VnaCB3aXRo IGlndCB0byByZWFyY2hpdGVjdHVyZSB0aGUgY29tbWl0IGhlbHBlcnMuIEluIHRoZQo+Pj4+PiBs YXR0ZXIgY2FzZSwgaG93IHdvdWxkIHlvdSByZWNvbW1lbmQgZml4aW5nIGl0IG9uIHRoZSBkcml2 ZXIgc2lkZSA/Cj4+Pj4gSSBndWVzcyB0aHVzIGZhciBubyBvbmUgZGlkIHJ1biBpZ3Qgb24gYSBj aGlwIHdoaWNoIGRpZCBoYXZlIHJlYXNzaWduYWJsZQo+Pj4+IHByaW1hcnkgcGxhbmVzLiBUaGUg cHJvYmxlbSBoZXJlIGlzIHRoYXQgaXQncyBwcmV0dHkgaGFyZCB0byBmaWd1cmUgb3V0Cj4+Pj4g d2hpY2ggb25lIGlzIHRoZSByZWFsIHByaW1hcnkgcGxhbmUsIHNpbmNlIHdpdGggcG9zc2libGUg Q1JUQ3MgeW91IGNvdWxkCj4+Pj4gaGF2ZSBtdWx0aXBsZSBwcmltYXJ5IHBsYW5lcyBvbiAxIENS VEMuIFRoZXJlJ3Mgbm8gcHJvcGVydHkgb3IgYW55dGhpbmcKPj4+PiB0aGF0IGV4cGxpY2l0bHkg dGVsbHMgeW91IHRoaXMuIFR3byBmaXhlczoKPj4+Pgo+Pj4+IDEuIENoYW5nZSBkcml2ZXJzIHRv IGxpbWl0IHByaW1hcnkgcGxhbmVzIHRvIDEgY3J0Yy4gU2FtZSBmb3IgY3Vyc29yCj4+Pj4gICAg b3ZlcmxheXMuIFRoZXJlJ3MgcHJvYmFibHkgb3RoZXIgdXNlcnNwYWNlIHRoYW4gaWd0IHRoYXQg Z2V0cyBjb25mdXNlZAo+Pj4+ICAgIGJ5IHRoaXMsIGJ1dCB0aGlzIGhhcyB0aGUgdWdseSBkb3du c2lkZSB0aGF0IHdlIGFydGlmaWNhbGx5IGxpbWl0IHBsYW5lCj4+Pj4gICAgdXNhZ2UgLSBpZiBv bmx5IDEgQ1JUQyBpcyBvbiwgd2Ugd2FudCB0byB1c2UgYWxsIHRoZSBhdmFpbGFibGUgcGxhbmVz Cj4+Pj4gICAgb24gdGhhdCBvbmUuCj4+Pj4KPj4+PiAyLiBBZGQgc29tZSBpbXBsaWNpdCBvciBl eHBsaWNpdCB1YXBpIHRvIGFsbG93IHVzZXJzcGFjZSB0byBmaWd1cmUgb3V0Cj4+Pj4gICAgd2hp Y2ggcHJpbWFyeSBwbGFuZSBpcyB0aGUgcHJpbWFyeSBwbGFuZSBmb3IgdGhpcyBjcnRjLgo+Pj4+ Cj4+Pj4gICAgYSkgRXhwbGljaXQgb3B0aW9uOiBXZSBhZGQgYSBQUklNQVJZX0lEIHByb3BlcnR5 IChhbmQgQ1VSU09SX0lEIHByb3AKPj4+PiAgICAgICB3aGlsZSBhdCBpdCkgb24gdGhlIENSVEMg d2hpY2ggcG9pbnRzIGF0IHRoZSBwcmltYXJ5L2N1cnNvciBwbGFuZS4KPj4+Pgo+Pj4+ICAgIGIp IEltcGxpY2l0IG9wdGlvbjogV2UgcmVxdWlyZSBwcmltYXJ5IHBsYW5lcyBhcmUgYXNzaWduZWQg dG8gQ1JUQyBpbiB0aGUKPj4+PiAgICAgICBzYW1lIG9yZGVyIGFzIHRoZXkncmUgY3JlYXRlZC4g U28gZmlyc3QgcHJpbWFyeSBwbGFuZSB5b3UgZW5jb3V0ZXIKPj4+PiAgICAgICBpcyB0aGUgb25l IGZvciB0aGUgZmlyc3QgQ1JUQywgMm5kIHByaW1hcnkgcGxhbmUgaXMgdGhlIG9uZSBmb3IgdGhl Cj4+Pj4gICAgICAgMm5kIENSVEMgYW5kIHNvIG9uLiBJZiB3ZSBnbyB3aXRoIHRoaXMgd2UgcHJv YmFibHkgc2hvdWxkIGFkZCBhIGJpdAo+Pj4+ICAgICAgIG9mIGNvZGUgdG8gdGhlIGtlcm5lbCB0 byBjaGVjayB0aGF0IGludmFyaWFudCAoYnkgbWFraW5nIHN1cmUgdGhlCj4+Pj4gICAgICAgcHJp bWFyeSBwbGFuZSBoYXMgdGhlIGNvcnJlc3BvbmRpbmcgQ1JUQyBpbmNsdWRlZCBpbiBpdHMKPj4+ PiAgICAgICBwb3NzaWJsZV9jcnRjIG1hc2spLgo+Pj4+Cj4+Pj4gRWl0aGVyIHdheSBpZ3QgbmVl ZHMgdG8gYmUgcGF0Y2hlZCB0byBub3QgdHJlYXQgYW55IHByaW1hcnkgcGxhbmUgdGhhdAo+Pj4+ IGNvdWxkIHdvcmsgb24gYSBDUlRDIGFzIHRoZSBwcmltYXJ5IHBsYW5lIGZvciB0aGF0IENSVEMu Cj4+Pj4KPj4+PiBQZXJzb25hbGx5IEknbSBsZWFuaW5nIHRvd2FyZHMgMmIpLgo+Pj4gQWRkaW5n IE1hYXJ0ZW4gYW5kIGlndC1kZXYuCj4+IFdlIHNob3VsZCBmaXJzdCBtYWtlIHRoZSBwbGFuZSBh cnJheSBnbG9iYWwsIGluc3RlYWQgb2YgcGVyIGNydGMuCj4+Cj4+IFRoYXQgbWVhbnMgcmVtb3Zp bmcgcGxhbmUtPnBpcGUgYW5kIHBsYW5lLT5pbmRleC4KPj4KPj4gQW5kIHBpcGVfb2JqLT5wbGFu ZXMgYW5kIHBpcGVfb2JqLT5uX3BsYW5lcyBuZWVkIHRvIGJlIGdvbmUgdG9vLiBJIHRoaW5rIGl0 J3MKPj4gZWFzaWVzdCB0byBtYWtlCj4+Cj4+IFRoZXJlIGlzIG9uZSBwcm9ibGVtLiBNb3N0IG9m IHRoZSB0ZXN0cyBhcmUgbm90IGF3YXJlIG9mIHRoZSBsaW1pdGF0aW9ucy4KPj4gSWYgd2UgbWFr ZSB0aGUgcGxhbmUgYXJyYXkgZ2xvYmFsIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBtYWtlCj4+ IGEgZm9yX2VhY2hfcG9zc2libGVfcGxhbmVfb25fcGlwZSBlbnVtZXJhdGUgYWxsIHBsYW5lcyB0 aGF0IGNvdWxkIGJlIGFzc2lnbmVkCj4+IHRvIGEgY2VydGFpbiBwaXBlLiBXZSBuZWVkIHRvIHNv cnQgYnkgeiBvcmRlciBzb21laG93LCBidXQgaWYgd2UgdGhlbiBhZGQKPj4gaWd0X3BsYW5lX3Nl dF9waXBlKCkgd2hpY2ggdXBkYXRlcyB0aGUgSUdUX1BMQU5FX0NSVENfSUQgcHJvcGVydHksIHdl IHNob3VsZAo+PiBiZSBnb29kLgo+Pgo+PiBPbmx5IHRoaW5nIHdlIGRvbid0IHNlZSBpcyBob3cg dGhlIGRlZmF1bHQgY3J0Yy0+cHJpbWFyeSBhbmQgY3J0Yy0+Y3Vyc29yIGFyZQo+PiBhc3NpZ25l ZC4gRm9yIHRoZSBjYWxscyB3aXRoIENPTU1JVF9MRUdBQ1kgd2UgbmVlZCB0byBrbm93IHRoZSBt YXBwaW5ncywgYnV0Cj4+IEkgZG9uJ3QgdGhpbmsgdGhlIGtlcm5lbCBleHBvc2VzIHRoZW0/Cj4+ IEkgZ3Vlc3Mgd2UgY291bGQgcHV0IGl0IGluIGEgRklGTyB3YXksIGZpcnN0IGVudW1lcmF0ZWQg cGxhbmUgd2l0aCBQUklNQVJZIHR5cGUKPj4gaXMgYm91bmQgdG8gdGhlIGZpcnN0IGNydGMsIHNh bWUgZm9yIGN1cnNvci4KPiBTb2x1dGlvbnMgZm9yIHRoYXQgcHJvYmxlbSBpcyB3aGF0IEkgcHJv cG9zZWQgaW4gbXkgbWFpbCwgc2luY2UgYXRtIHRoZQo+IGtlcm5lbCBpcyBpbmRlZWQgbm90IGV4 cG9zaW5nIHRoYXQgaW4gYW55IGZhc2lvbi4KPgo+PiBUaGlzIHdpbGwgaG9wZWZ1bGx5IGFsbG93 IGxlZ2FjeSB0ZXN0cyB0byBrZWVwIHdvcmtpbmcsIHdoaWxlIGF0b21pYyBwbGFuZSBhd2FyZQo+ PiB0ZXN0cyB3aWxsIGJlIGFibGUgdG8gdXNlIGFsbCBwbGFuZXMuCj4gWWVhaCAuLgo+IC1EYW5p ZWwKCkZvciByZWZlcmVuY2U6IGh0dHBzOi8vcGF0Y2h3b3JrLmZyZWVkZXNrdG9wLm9yZy9zZXJp ZXMvNDI4MTQvCgpUaGUgcGFydCB3aGVyZSBwbGFuZXMgYXJlIHJlYXNzaWduZWQgaXNuJ3QgZG9u ZSB5ZXQsIGJ1dCB0aGF0IHdpbGwgZGVwZW5kIG9uIHRoZSBmaW5hbCBrZXJuZWwgYXBpLgoKfk1h YXJ0ZW4KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmln dC1kZXYgbWFpbGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldgo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga06.intel.com ([134.134.136.31]:8077 "EHLO mga06.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750881AbeEGNmY (ORCPT ); Mon, 7 May 2018 09:42:24 -0400 Subject: Re: igt trouble with planes shared between multiple CRTCs (Re: [PATCH v2 0/8] R-Car DU: Support CRC calculation) To: Daniel Vetter Cc: Laurent Pinchart , dri-devel@lists.freedesktop.org, linux-renesas-soc@vger.kernel.org, Kieran Bingham , Ulrich Hecht , IGT development References: <20180422223430.16407-1-laurent.pinchart+renesas@ideasonboard.com> <3482108.jirjkbZynl@avalon> <20180430145524.GJ12521@phenom.ffwll.local> <20180430145640.GK12521@phenom.ffwll.local> <0f7c2e60-23d0-b222-c8c0-36b17f1e7c25@linux.intel.com> <20180502073240.GU12521@phenom.ffwll.local> From: Maarten Lankhorst Message-ID: Date: Mon, 7 May 2018 15:28:19 +0200 MIME-Version: 1.0 In-Reply-To: <20180502073240.GU12521@phenom.ffwll.local> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Content-Language: en-US Sender: linux-renesas-soc-owner@vger.kernel.org List-ID: Op 02-05-18 om 09:32 schreef Daniel Vetter: > On Tue, May 01, 2018 at 10:58:02AM +0200, Maarten Lankhorst wrote: >> Hey, >> >> Op 30-04-18 om 16:56 schreef Daniel Vetter: >>> On Mon, Apr 30, 2018 at 04:55:24PM +0200, Daniel Vetter wrote: >>>> On Sat, Apr 28, 2018 at 12:07:04AM +0300, Laurent Pinchart wrote: >>>>> Hi Daniel, >>>>> >>>>> (Removing the linux-media mailing list from CC as it is out of scope) >>>>> >>>>> You enquired on IRC whether this patch series passes the igt CRC tests. >>>>> >>>>> # ./kms_pipe_crc_basic --run-subtest read-crc-pipe-A >>>>> IGT-Version: 1.22-gf447f5fc531d (aarch64) (Linux: 4.17.0-rc1-00085-g56e849d93cc9 aarch64) >>>>> read-crc-pipe-A: Testing connector LVDS-1 using pipe A >>>>> (kms_pipe_crc_basic:1638) igt-debugfs-CRITICAL: Test assertion failure function igt_pipe_crc_start, file igt_debugfs.c:764: >>>>> (kms_pipe_crc_basic:1638) igt-debugfs-CRITICAL: Failed assertion: pipe_crc->crc_fd != -1 >>>>> (kms_pipe_crc_basic:1638) igt-debugfs-CRITICAL: Last errno: 5, Input/output error >>>>> Stack trace: >>>>> Subtest read-crc-pipe-A failed. >>>>> **** DEBUG **** >>>>> (kms_pipe_crc_basic:1638) DEBUG: Test requirement passed: !(pipe >= data->display.n_pipes) >>>>> (kms_pipe_crc_basic:1638) INFO: read-crc-pipe-A: Testing connector LVDS-1 using pipe A >>>>> (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: LVDS-1: set_pipe(A) >>>>> (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: LVDS-1: Selecting pipe A >>>>> (kms_pipe_crc_basic:1638) DEBUG: Clearing the fb with color (0.00,1.00,0.00) >>>>> (kms_pipe_crc_basic:1638) igt-fb-DEBUG: igt_create_fb_with_bo_size(width=1024, height=768, format=0x34325258, tiling=0x0, size=0) >>>>> (kms_pipe_crc_basic:1638) igt-fb-DEBUG: igt_create_fb_with_bo_size(handle=1, pitch=4096) >>>>> (kms_pipe_crc_basic:1638) igt-kms-DEBUG: Test requirement passed: plane_idx >= 0 && plane_idx < pipe->n_planes >>>>> (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: A.0: plane_set_fb(140) >>>>> (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: A.0: plane_set_size (1024x768) >>>>> (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: A.0: fb_set_position(0,0) >>>>> (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: A.0: fb_set_size(1024x768) >>>>> (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: commit { >>>>> (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: LVDS-1: SetCrtc pipe A, fb 140, src (0, 0), mode 1024x768 >>>>> (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetCrtc pipe A, disabling >>>>> (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetPlane pipe A, plane 2, disabling >>>>> (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetPlane pipe A, plane 3, disabling >>>>> (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetPlane pipe A, plane 4, disabling >>>>> (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetCrtc pipe B, disabling >>>>> (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetPlane pipe B, plane 1, disabling >>>>> (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetPlane pipe B, plane 2, disabling >>>>> (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetPlane pipe B, plane 3, disabling >>>>> (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetPlane pipe B, plane 4, disabling >>>>> (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetCrtc pipe C, disabling >>>>> (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetPlane pipe C, plane 1, disabling >>>>> (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetPlane pipe C, plane 2, disabling >>>>> (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetPlane pipe C, plane 3, disabling >>>>> (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetPlane pipe C, plane 4, disabling >>>>> (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetCrtc pipe D, disabling >>>>> (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetCrtc pipe D, disabling >>>>> (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetPlane pipe D, plane 2, disabling >>>>> (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetPlane pipe D, plane 3, disabling >>>>> (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetPlane pipe D, plane 4, disabling >>>>> (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: } >>>>> (kms_pipe_crc_basic:1638) igt-debugfs-DEBUG: Opening debugfs directory '/sys/kernel/debug/dri/0' >>>>> (kms_pipe_crc_basic:1638) igt-debugfs-DEBUG: Opening debugfs directory '/sys/kernel/debug/dri/0' >>>>> (kms_pipe_crc_basic:1638) igt-debugfs-CRITICAL: Test assertion failure function igt_pipe_crc_start, file igt_debugfs.c:764: >>>>> (kms_pipe_crc_basic:1638) igt-debugfs-CRITICAL: Failed assertion: pipe_crc->crc_fd != -1 >>>>> (kms_pipe_crc_basic:1638) igt-debugfs-CRITICAL: Last errno: 5, Input/output error >>>>> (kms_pipe_crc_basic:1638) igt-core-INFO: Stack trace: >>>>> **** END **** >>>>> Subtest read-crc-pipe-A: FAIL (0.061s) >>>>> >>>>> I think the answer is no, but I don't think it's the fault of this patch >>>>> series. Opening the CRC data file returns -EIO because the CRTC is not active, >>>>> and I'm trying to find out why that is the case. The debug log shows a commit >>>>> that seems strange to me, enabling pipe A and immediately disabling right >>>>> afterwards. After some investigation I believe that this is caused by sharing >>>>> primary planes between CRTCs. >>>>> >>>>> The R-Car DU groups CRTCs by two and shares 5 planes between the two CRTCs of >>>>> the group. This specific SoC has two groups of two CRTCs, but that's not >>>>> relevant here, so we can ignore pipes C and D. >>>>> >>>>> Pipes A and B thus shared 5 planes that I will number 0 to 4 for simplicity. >>>>> The driver sets plane 0 as the primary plane for CRTC A and plane 1 as the >>>>> primary plane for CRTC B. Planes 2, 3 and 4 are created as overlay planes. >>>>> >>>>> When igt iterates over all planes for pipe A, it will first encounter plane 0 >>>>> that has a framebuffer, and thus enables the pipe. It then iterates over >>>>> plane 1, recognizes it as a primary plane without a framebuffer, and thus >>>>> disables the pipe. Planes 2, 3 and 4 are recognized as overlay planes and thus >>>>> don't affect the pipe active state. Pipe B is handled the same way, and igt >>>>> disables it twice as planes 0 and 1 are primary. >>>>> >>>>> I don't know if the fault here is with igt that doesn't properly support this >>>>> architecture, or with the driver that shouldn't have two primary planes >>>>> available for a CRTC. In the former case, I'm not sure how to fix it, as I'm >>>>> not familiar enough with igt to rearchitecture the commit helpers. In the >>>>> latter case, how would you recommend fixing it on the driver side ? >>>> I guess thus far no one did run igt on a chip which did have reassignable >>>> primary planes. The problem here is that it's pretty hard to figure out >>>> which one is the real primary plane, since with possible CRTCs you could >>>> have multiple primary planes on 1 CRTC. There's no property or anything >>>> that explicitly tells you this. Two fixes: >>>> >>>> 1. Change drivers to limit primary planes to 1 crtc. Same for cursor >>>> overlays. There's probably other userspace than igt that gets confused >>>> by this, but this has the ugly downside that we artifically limit plane >>>> usage - if only 1 CRTC is on, we want to use all the available planes >>>> on that one. >>>> >>>> 2. Add some implicit or explicit uapi to allow userspace to figure out >>>> which primary plane is the primary plane for this crtc. >>>> >>>> a) Explicit option: We add a PRIMARY_ID property (and CURSOR_ID prop >>>> while at it) on the CRTC which points at the primary/cursor plane. >>>> >>>> b) Implicit option: We require primary planes are assigned to CRTC in the >>>> same order as they're created. So first primary plane you encouter >>>> is the one for the first CRTC, 2nd primary plane is the one for the >>>> 2nd CRTC and so on. If we go with this we probably should add a bit >>>> of code to the kernel to check that invariant (by making sure the >>>> primary plane has the corresponding CRTC included in its >>>> possible_crtc mask). >>>> >>>> Either way igt needs to be patched to not treat any primary plane that >>>> could work on a CRTC as the primary plane for that CRTC. >>>> >>>> Personally I'm leaning towards 2b). >>> Adding Maarten and igt-dev. >> We should first make the plane array global, instead of per crtc. >> >> That means removing plane->pipe and plane->index. >> >> And pipe_obj->planes and pipe_obj->n_planes need to be gone too. I think it's >> easiest to make >> >> There is one problem. Most of the tests are not aware of the limitations. >> If we make the plane array global it should be possible to make >> a for_each_possible_plane_on_pipe enumerate all planes that could be assigned >> to a certain pipe. We need to sort by z order somehow, but if we then add >> igt_plane_set_pipe() which updates the IGT_PLANE_CRTC_ID property, we should >> be good. >> >> Only thing we don't see is how the default crtc->primary and crtc->cursor are >> assigned. For the calls with COMMIT_LEGACY we need to know the mappings, but >> I don't think the kernel exposes them? >> I guess we could put it in a FIFO way, first enumerated plane with PRIMARY type >> is bound to the first crtc, same for cursor. > Solutions for that problem is what I proposed in my mail, since atm the > kernel is indeed not exposing that in any fasion. > >> This will hopefully allow legacy tests to keep working, while atomic plane aware >> tests will be able to use all planes. > Yeah .. > -Daniel For reference: https://patchwork.freedesktop.org/series/42814/ The part where planes are reassigned isn't done yet, but that will depend on the final kernel api. ~Maarten From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maarten Lankhorst Subject: Re: igt trouble with planes shared between multiple CRTCs (Re: [PATCH v2 0/8] R-Car DU: Support CRC calculation) Date: Mon, 7 May 2018 15:28:19 +0200 Message-ID: References: <20180422223430.16407-1-laurent.pinchart+renesas@ideasonboard.com> <3482108.jirjkbZynl@avalon> <20180430145524.GJ12521@phenom.ffwll.local> <20180430145640.GK12521@phenom.ffwll.local> <0f7c2e60-23d0-b222-c8c0-36b17f1e7c25@linux.intel.com> <20180502073240.GU12521@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180502073240.GU12521@phenom.ffwll.local> Content-Language: en-US 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: IGT development , Kieran Bingham , dri-devel@lists.freedesktop.org, linux-renesas-soc@vger.kernel.org, Laurent Pinchart , Ulrich Hecht List-Id: dri-devel@lists.freedesktop.org T3AgMDItMDUtMTggb20gMDk6MzIgc2NocmVlZiBEYW5pZWwgVmV0dGVyOgo+IE9uIFR1ZSwgTWF5 IDAxLCAyMDE4IGF0IDEwOjU4OjAyQU0gKzAyMDAsIE1hYXJ0ZW4gTGFua2hvcnN0IHdyb3RlOgo+ PiBIZXksCj4+Cj4+IE9wIDMwLTA0LTE4IG9tIDE2OjU2IHNjaHJlZWYgRGFuaWVsIFZldHRlcjoK Pj4+IE9uIE1vbiwgQXByIDMwLCAyMDE4IGF0IDA0OjU1OjI0UE0gKzAyMDAsIERhbmllbCBWZXR0 ZXIgd3JvdGU6Cj4+Pj4gT24gU2F0LCBBcHIgMjgsIDIwMTggYXQgMTI6MDc6MDRBTSArMDMwMCwg TGF1cmVudCBQaW5jaGFydCB3cm90ZToKPj4+Pj4gSGkgRGFuaWVsLAo+Pj4+Pgo+Pj4+PiAoUmVt b3ZpbmcgdGhlIGxpbnV4LW1lZGlhIG1haWxpbmcgbGlzdCBmcm9tIENDIGFzIGl0IGlzIG91dCBv ZiBzY29wZSkKPj4+Pj4KPj4+Pj4gWW91IGVucXVpcmVkIG9uIElSQyB3aGV0aGVyIHRoaXMgcGF0 Y2ggc2VyaWVzIHBhc3NlcyB0aGUgaWd0IENSQyB0ZXN0cy4KPj4+Pj4KPj4+Pj4gIyAuL2ttc19w aXBlX2NyY19iYXNpYyAtLXJ1bi1zdWJ0ZXN0IHJlYWQtY3JjLXBpcGUtQQo+Pj4+PiBJR1QtVmVy c2lvbjogMS4yMi1nZjQ0N2Y1ZmM1MzFkIChhYXJjaDY0KSAoTGludXg6IDQuMTcuMC1yYzEtMDAw ODUtZzU2ZTg0OWQ5M2NjOSBhYXJjaDY0KQo+Pj4+PiByZWFkLWNyYy1waXBlLUE6IFRlc3Rpbmcg Y29ubmVjdG9yIExWRFMtMSB1c2luZyBwaXBlIEEKPj4+Pj4gKGttc19waXBlX2NyY19iYXNpYzox NjM4KSBpZ3QtZGVidWdmcy1DUklUSUNBTDogVGVzdCBhc3NlcnRpb24gZmFpbHVyZSBmdW5jdGlv biBpZ3RfcGlwZV9jcmNfc3RhcnQsIGZpbGUgaWd0X2RlYnVnZnMuYzo3NjQ6Cj4+Pj4+IChrbXNf cGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0LWRlYnVnZnMtQ1JJVElDQUw6IEZhaWxlZCBhc3NlcnRp b246IHBpcGVfY3JjLT5jcmNfZmQgIT0gLTEKPj4+Pj4gKGttc19waXBlX2NyY19iYXNpYzoxNjM4 KSBpZ3QtZGVidWdmcy1DUklUSUNBTDogTGFzdCBlcnJubzogNSwgSW5wdXQvb3V0cHV0IGVycm9y Cj4+Pj4+IFN0YWNrIHRyYWNlOgo+Pj4+PiBTdWJ0ZXN0IHJlYWQtY3JjLXBpcGUtQSBmYWlsZWQu Cj4+Pj4+ICoqKiogREVCVUcgKioqKgo+Pj4+PiAoa21zX3BpcGVfY3JjX2Jhc2ljOjE2MzgpIERF QlVHOiBUZXN0IHJlcXVpcmVtZW50IHBhc3NlZDogIShwaXBlID49IGRhdGEtPmRpc3BsYXkubl9w aXBlcykKPj4+Pj4gKGttc19waXBlX2NyY19iYXNpYzoxNjM4KSBJTkZPOiByZWFkLWNyYy1waXBl LUE6IFRlc3RpbmcgY29ubmVjdG9yIExWRFMtMSB1c2luZyBwaXBlIEEKPj4+Pj4gKGttc19waXBl X2NyY19iYXNpYzoxNjM4KSBpZ3Qta21zLURFQlVHOiBkaXNwbGF5OiBMVkRTLTE6IHNldF9waXBl KEEpCj4+Pj4+IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0LWttcy1ERUJVRzogZGlzcGxh eTogTFZEUy0xOiBTZWxlY3RpbmcgcGlwZSBBCj4+Pj4+IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYz OCkgREVCVUc6IENsZWFyaW5nIHRoZSBmYiB3aXRoIGNvbG9yICgwLjAwLDEuMDAsMC4wMCkKPj4+ Pj4gKGttc19waXBlX2NyY19iYXNpYzoxNjM4KSBpZ3QtZmItREVCVUc6IGlndF9jcmVhdGVfZmJf d2l0aF9ib19zaXplKHdpZHRoPTEwMjQsIGhlaWdodD03NjgsIGZvcm1hdD0weDM0MzI1MjU4LCB0 aWxpbmc9MHgwLCBzaXplPTApCj4+Pj4+IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0LWZi LURFQlVHOiBpZ3RfY3JlYXRlX2ZiX3dpdGhfYm9fc2l6ZShoYW5kbGU9MSwgcGl0Y2g9NDA5NikK Pj4+Pj4gKGttc19waXBlX2NyY19iYXNpYzoxNjM4KSBpZ3Qta21zLURFQlVHOiBUZXN0IHJlcXVp cmVtZW50IHBhc3NlZDogcGxhbmVfaWR4ID49IDAgJiYgcGxhbmVfaWR4IDwgcGlwZS0+bl9wbGFu ZXMKPj4+Pj4gKGttc19waXBlX2NyY19iYXNpYzoxNjM4KSBpZ3Qta21zLURFQlVHOiBkaXNwbGF5 OiBBLjA6IHBsYW5lX3NldF9mYigxNDApCj4+Pj4+IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkg aWd0LWttcy1ERUJVRzogZGlzcGxheTogQS4wOiBwbGFuZV9zZXRfc2l6ZSAoMTAyNHg3NjgpCj4+ Pj4+IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0LWttcy1ERUJVRzogZGlzcGxheTogQS4w OiBmYl9zZXRfcG9zaXRpb24oMCwwKQo+Pj4+PiAoa21zX3BpcGVfY3JjX2Jhc2ljOjE2MzgpIGln dC1rbXMtREVCVUc6IGRpc3BsYXk6IEEuMDogZmJfc2V0X3NpemUoMTAyNHg3NjgpCj4+Pj4+IChr bXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0LWttcy1ERUJVRzogZGlzcGxheTogY29tbWl0IHsK Pj4+Pj4gKGttc19waXBlX2NyY19iYXNpYzoxNjM4KSBpZ3Qta21zLURFQlVHOiBkaXNwbGF5OiAg ICAgTFZEUy0xOiBTZXRDcnRjIHBpcGUgQSwgZmIgMTQwLCBzcmMgKDAsIDApLCBtb2RlIDEwMjR4 NzY4Cj4+Pj4+IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0LWttcy1ERUJVRzogZGlzcGxh eTogICAgIFNldENydGMgcGlwZSBBLCBkaXNhYmxpbmcKPj4+Pj4gKGttc19waXBlX2NyY19iYXNp YzoxNjM4KSBpZ3Qta21zLURFQlVHOiBkaXNwbGF5OiAgICAgU2V0UGxhbmUgcGlwZSBBLCBwbGFu ZSAyLCBkaXNhYmxpbmcKPj4+Pj4gKGttc19waXBlX2NyY19iYXNpYzoxNjM4KSBpZ3Qta21zLURF QlVHOiBkaXNwbGF5OiAgICAgU2V0UGxhbmUgcGlwZSBBLCBwbGFuZSAzLCBkaXNhYmxpbmcKPj4+ Pj4gKGttc19waXBlX2NyY19iYXNpYzoxNjM4KSBpZ3Qta21zLURFQlVHOiBkaXNwbGF5OiAgICAg U2V0UGxhbmUgcGlwZSBBLCBwbGFuZSA0LCBkaXNhYmxpbmcKPj4+Pj4gKGttc19waXBlX2NyY19i YXNpYzoxNjM4KSBpZ3Qta21zLURFQlVHOiBkaXNwbGF5OiAgICAgU2V0Q3J0YyBwaXBlIEIsIGRp c2FibGluZwo+Pj4+PiAoa21zX3BpcGVfY3JjX2Jhc2ljOjE2MzgpIGlndC1rbXMtREVCVUc6IGRp c3BsYXk6ICAgICBTZXRQbGFuZSBwaXBlIEIsIHBsYW5lIDEsIGRpc2FibGluZwo+Pj4+PiAoa21z X3BpcGVfY3JjX2Jhc2ljOjE2MzgpIGlndC1rbXMtREVCVUc6IGRpc3BsYXk6ICAgICBTZXRQbGFu ZSBwaXBlIEIsIHBsYW5lIDIsIGRpc2FibGluZwo+Pj4+PiAoa21zX3BpcGVfY3JjX2Jhc2ljOjE2 MzgpIGlndC1rbXMtREVCVUc6IGRpc3BsYXk6ICAgICBTZXRQbGFuZSBwaXBlIEIsIHBsYW5lIDMs IGRpc2FibGluZwo+Pj4+PiAoa21zX3BpcGVfY3JjX2Jhc2ljOjE2MzgpIGlndC1rbXMtREVCVUc6 IGRpc3BsYXk6ICAgICBTZXRQbGFuZSBwaXBlIEIsIHBsYW5lIDQsIGRpc2FibGluZwo+Pj4+PiAo a21zX3BpcGVfY3JjX2Jhc2ljOjE2MzgpIGlndC1rbXMtREVCVUc6IGRpc3BsYXk6ICAgICBTZXRD cnRjIHBpcGUgQywgZGlzYWJsaW5nCj4+Pj4+IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0 LWttcy1ERUJVRzogZGlzcGxheTogICAgIFNldFBsYW5lIHBpcGUgQywgcGxhbmUgMSwgZGlzYWJs aW5nCj4+Pj4+IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0LWttcy1ERUJVRzogZGlzcGxh eTogICAgIFNldFBsYW5lIHBpcGUgQywgcGxhbmUgMiwgZGlzYWJsaW5nCj4+Pj4+IChrbXNfcGlw ZV9jcmNfYmFzaWM6MTYzOCkgaWd0LWttcy1ERUJVRzogZGlzcGxheTogICAgIFNldFBsYW5lIHBp cGUgQywgcGxhbmUgMywgZGlzYWJsaW5nCj4+Pj4+IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkg aWd0LWttcy1ERUJVRzogZGlzcGxheTogICAgIFNldFBsYW5lIHBpcGUgQywgcGxhbmUgNCwgZGlz YWJsaW5nCj4+Pj4+IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0LWttcy1ERUJVRzogZGlz cGxheTogICAgIFNldENydGMgcGlwZSBELCBkaXNhYmxpbmcKPj4+Pj4gKGttc19waXBlX2NyY19i YXNpYzoxNjM4KSBpZ3Qta21zLURFQlVHOiBkaXNwbGF5OiAgICAgU2V0Q3J0YyBwaXBlIEQsIGRp c2FibGluZwo+Pj4+PiAoa21zX3BpcGVfY3JjX2Jhc2ljOjE2MzgpIGlndC1rbXMtREVCVUc6IGRp c3BsYXk6ICAgICBTZXRQbGFuZSBwaXBlIEQsIHBsYW5lIDIsIGRpc2FibGluZwo+Pj4+PiAoa21z X3BpcGVfY3JjX2Jhc2ljOjE2MzgpIGlndC1rbXMtREVCVUc6IGRpc3BsYXk6ICAgICBTZXRQbGFu ZSBwaXBlIEQsIHBsYW5lIDMsIGRpc2FibGluZwo+Pj4+PiAoa21zX3BpcGVfY3JjX2Jhc2ljOjE2 MzgpIGlndC1rbXMtREVCVUc6IGRpc3BsYXk6ICAgICBTZXRQbGFuZSBwaXBlIEQsIHBsYW5lIDQs IGRpc2FibGluZwo+Pj4+PiAoa21zX3BpcGVfY3JjX2Jhc2ljOjE2MzgpIGlndC1rbXMtREVCVUc6 IGRpc3BsYXk6IH0KPj4+Pj4gKGttc19waXBlX2NyY19iYXNpYzoxNjM4KSBpZ3QtZGVidWdmcy1E RUJVRzogT3BlbmluZyBkZWJ1Z2ZzIGRpcmVjdG9yeSAnL3N5cy9rZXJuZWwvZGVidWcvZHJpLzAn Cj4+Pj4+IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0LWRlYnVnZnMtREVCVUc6IE9wZW5p bmcgZGVidWdmcyBkaXJlY3RvcnkgJy9zeXMva2VybmVsL2RlYnVnL2RyaS8wJwo+Pj4+PiAoa21z X3BpcGVfY3JjX2Jhc2ljOjE2MzgpIGlndC1kZWJ1Z2ZzLUNSSVRJQ0FMOiBUZXN0IGFzc2VydGlv biBmYWlsdXJlIGZ1bmN0aW9uIGlndF9waXBlX2NyY19zdGFydCwgZmlsZSBpZ3RfZGVidWdmcy5j Ojc2NDoKPj4+Pj4gKGttc19waXBlX2NyY19iYXNpYzoxNjM4KSBpZ3QtZGVidWdmcy1DUklUSUNB TDogRmFpbGVkIGFzc2VydGlvbjogcGlwZV9jcmMtPmNyY19mZCAhPSAtMQo+Pj4+PiAoa21zX3Bp cGVfY3JjX2Jhc2ljOjE2MzgpIGlndC1kZWJ1Z2ZzLUNSSVRJQ0FMOiBMYXN0IGVycm5vOiA1LCBJ bnB1dC9vdXRwdXQgZXJyb3IKPj4+Pj4gKGttc19waXBlX2NyY19iYXNpYzoxNjM4KSBpZ3QtY29y ZS1JTkZPOiBTdGFjayB0cmFjZToKPj4+Pj4gKioqKiAgRU5EICAqKioqCj4+Pj4+IFN1YnRlc3Qg cmVhZC1jcmMtcGlwZS1BOiBGQUlMICgwLjA2MXMpCj4+Pj4+Cj4+Pj4+IEkgdGhpbmsgdGhlIGFu c3dlciBpcyBubywgYnV0IEkgZG9uJ3QgdGhpbmsgaXQncyB0aGUgZmF1bHQgb2YgdGhpcyBwYXRj aAo+Pj4+PiBzZXJpZXMuIE9wZW5pbmcgdGhlIENSQyBkYXRhIGZpbGUgcmV0dXJucyAtRUlPIGJl Y2F1c2UgdGhlIENSVEMgaXMgbm90IGFjdGl2ZSwKPj4+Pj4gYW5kIEknbSB0cnlpbmcgdG8gZmlu ZCBvdXQgd2h5IHRoYXQgaXMgdGhlIGNhc2UuIFRoZSBkZWJ1ZyBsb2cgc2hvd3MgYSBjb21taXQK Pj4+Pj4gdGhhdCBzZWVtcyBzdHJhbmdlIHRvIG1lLCBlbmFibGluZyBwaXBlIEEgYW5kIGltbWVk aWF0ZWx5IGRpc2FibGluZyByaWdodAo+Pj4+PiBhZnRlcndhcmRzLiBBZnRlciBzb21lIGludmVz dGlnYXRpb24gSSBiZWxpZXZlIHRoYXQgdGhpcyBpcyBjYXVzZWQgYnkgc2hhcmluZwo+Pj4+PiBw cmltYXJ5IHBsYW5lcyBiZXR3ZWVuIENSVENzLgo+Pj4+Pgo+Pj4+PiBUaGUgUi1DYXIgRFUgZ3Jv dXBzIENSVENzIGJ5IHR3byBhbmQgc2hhcmVzIDUgcGxhbmVzIGJldHdlZW4gdGhlIHR3byBDUlRD cyBvZgo+Pj4+PiB0aGUgZ3JvdXAuIFRoaXMgc3BlY2lmaWMgU29DIGhhcyB0d28gZ3JvdXBzIG9m IHR3byBDUlRDcywgYnV0IHRoYXQncyBub3QKPj4+Pj4gcmVsZXZhbnQgaGVyZSwgc28gd2UgY2Fu IGlnbm9yZSBwaXBlcyBDIGFuZCBELgo+Pj4+Pgo+Pj4+PiBQaXBlcyBBIGFuZCBCIHRodXMgc2hh cmVkIDUgcGxhbmVzIHRoYXQgSSB3aWxsIG51bWJlciAwIHRvIDQgZm9yIHNpbXBsaWNpdHkuCj4+ Pj4+IFRoZSBkcml2ZXIgc2V0cyBwbGFuZSAwIGFzIHRoZSBwcmltYXJ5IHBsYW5lIGZvciBDUlRD IEEgYW5kIHBsYW5lIDEgYXMgdGhlCj4+Pj4+IHByaW1hcnkgcGxhbmUgZm9yIENSVEMgQi4gUGxh bmVzIDIsIDMgYW5kIDQgYXJlIGNyZWF0ZWQgYXMgb3ZlcmxheSBwbGFuZXMuCj4+Pj4+Cj4+Pj4+ IFdoZW4gaWd0IGl0ZXJhdGVzIG92ZXIgYWxsIHBsYW5lcyBmb3IgcGlwZSBBLCBpdCB3aWxsIGZp cnN0IGVuY291bnRlciBwbGFuZSAwCj4+Pj4+IHRoYXQgaGFzIGEgZnJhbWVidWZmZXIsIGFuZCB0 aHVzIGVuYWJsZXMgdGhlIHBpcGUuIEl0IHRoZW4gaXRlcmF0ZXMgb3Zlcgo+Pj4+PiBwbGFuZSAx LCByZWNvZ25pemVzIGl0IGFzIGEgcHJpbWFyeSBwbGFuZSB3aXRob3V0IGEgZnJhbWVidWZmZXIs IGFuZCB0aHVzCj4+Pj4+IGRpc2FibGVzIHRoZSBwaXBlLiBQbGFuZXMgMiwgMyBhbmQgNCBhcmUg cmVjb2duaXplZCBhcyBvdmVybGF5IHBsYW5lcyBhbmQgdGh1cwo+Pj4+PiBkb24ndCBhZmZlY3Qg dGhlIHBpcGUgYWN0aXZlIHN0YXRlLiBQaXBlIEIgaXMgaGFuZGxlZCB0aGUgc2FtZSB3YXksIGFu ZCBpZ3QKPj4+Pj4gZGlzYWJsZXMgaXQgdHdpY2UgYXMgcGxhbmVzIDAgYW5kIDEgYXJlIHByaW1h cnkuCj4+Pj4+Cj4+Pj4+IEkgZG9uJ3Qga25vdyBpZiB0aGUgZmF1bHQgaGVyZSBpcyB3aXRoIGln dCB0aGF0IGRvZXNuJ3QgcHJvcGVybHkgc3VwcG9ydCB0aGlzCj4+Pj4+IGFyY2hpdGVjdHVyZSwg b3Igd2l0aCB0aGUgZHJpdmVyIHRoYXQgc2hvdWxkbid0IGhhdmUgdHdvIHByaW1hcnkgcGxhbmVz Cj4+Pj4+IGF2YWlsYWJsZSBmb3IgYSBDUlRDLiBJbiB0aGUgZm9ybWVyIGNhc2UsIEknbSBub3Qg c3VyZSBob3cgdG8gZml4IGl0LCBhcyBJJ20KPj4+Pj4gbm90IGZhbWlsaWFyIGVub3VnaCB3aXRo IGlndCB0byByZWFyY2hpdGVjdHVyZSB0aGUgY29tbWl0IGhlbHBlcnMuIEluIHRoZQo+Pj4+PiBs YXR0ZXIgY2FzZSwgaG93IHdvdWxkIHlvdSByZWNvbW1lbmQgZml4aW5nIGl0IG9uIHRoZSBkcml2 ZXIgc2lkZSA/Cj4+Pj4gSSBndWVzcyB0aHVzIGZhciBubyBvbmUgZGlkIHJ1biBpZ3Qgb24gYSBj aGlwIHdoaWNoIGRpZCBoYXZlIHJlYXNzaWduYWJsZQo+Pj4+IHByaW1hcnkgcGxhbmVzLiBUaGUg cHJvYmxlbSBoZXJlIGlzIHRoYXQgaXQncyBwcmV0dHkgaGFyZCB0byBmaWd1cmUgb3V0Cj4+Pj4g d2hpY2ggb25lIGlzIHRoZSByZWFsIHByaW1hcnkgcGxhbmUsIHNpbmNlIHdpdGggcG9zc2libGUg Q1JUQ3MgeW91IGNvdWxkCj4+Pj4gaGF2ZSBtdWx0aXBsZSBwcmltYXJ5IHBsYW5lcyBvbiAxIENS VEMuIFRoZXJlJ3Mgbm8gcHJvcGVydHkgb3IgYW55dGhpbmcKPj4+PiB0aGF0IGV4cGxpY2l0bHkg dGVsbHMgeW91IHRoaXMuIFR3byBmaXhlczoKPj4+Pgo+Pj4+IDEuIENoYW5nZSBkcml2ZXJzIHRv IGxpbWl0IHByaW1hcnkgcGxhbmVzIHRvIDEgY3J0Yy4gU2FtZSBmb3IgY3Vyc29yCj4+Pj4gICAg b3ZlcmxheXMuIFRoZXJlJ3MgcHJvYmFibHkgb3RoZXIgdXNlcnNwYWNlIHRoYW4gaWd0IHRoYXQg Z2V0cyBjb25mdXNlZAo+Pj4+ICAgIGJ5IHRoaXMsIGJ1dCB0aGlzIGhhcyB0aGUgdWdseSBkb3du c2lkZSB0aGF0IHdlIGFydGlmaWNhbGx5IGxpbWl0IHBsYW5lCj4+Pj4gICAgdXNhZ2UgLSBpZiBv bmx5IDEgQ1JUQyBpcyBvbiwgd2Ugd2FudCB0byB1c2UgYWxsIHRoZSBhdmFpbGFibGUgcGxhbmVz Cj4+Pj4gICAgb24gdGhhdCBvbmUuCj4+Pj4KPj4+PiAyLiBBZGQgc29tZSBpbXBsaWNpdCBvciBl eHBsaWNpdCB1YXBpIHRvIGFsbG93IHVzZXJzcGFjZSB0byBmaWd1cmUgb3V0Cj4+Pj4gICAgd2hp Y2ggcHJpbWFyeSBwbGFuZSBpcyB0aGUgcHJpbWFyeSBwbGFuZSBmb3IgdGhpcyBjcnRjLgo+Pj4+ Cj4+Pj4gICAgYSkgRXhwbGljaXQgb3B0aW9uOiBXZSBhZGQgYSBQUklNQVJZX0lEIHByb3BlcnR5 IChhbmQgQ1VSU09SX0lEIHByb3AKPj4+PiAgICAgICB3aGlsZSBhdCBpdCkgb24gdGhlIENSVEMg d2hpY2ggcG9pbnRzIGF0IHRoZSBwcmltYXJ5L2N1cnNvciBwbGFuZS4KPj4+Pgo+Pj4+ICAgIGIp IEltcGxpY2l0IG9wdGlvbjogV2UgcmVxdWlyZSBwcmltYXJ5IHBsYW5lcyBhcmUgYXNzaWduZWQg dG8gQ1JUQyBpbiB0aGUKPj4+PiAgICAgICBzYW1lIG9yZGVyIGFzIHRoZXkncmUgY3JlYXRlZC4g U28gZmlyc3QgcHJpbWFyeSBwbGFuZSB5b3UgZW5jb3V0ZXIKPj4+PiAgICAgICBpcyB0aGUgb25l IGZvciB0aGUgZmlyc3QgQ1JUQywgMm5kIHByaW1hcnkgcGxhbmUgaXMgdGhlIG9uZSBmb3IgdGhl Cj4+Pj4gICAgICAgMm5kIENSVEMgYW5kIHNvIG9uLiBJZiB3ZSBnbyB3aXRoIHRoaXMgd2UgcHJv YmFibHkgc2hvdWxkIGFkZCBhIGJpdAo+Pj4+ICAgICAgIG9mIGNvZGUgdG8gdGhlIGtlcm5lbCB0 byBjaGVjayB0aGF0IGludmFyaWFudCAoYnkgbWFraW5nIHN1cmUgdGhlCj4+Pj4gICAgICAgcHJp bWFyeSBwbGFuZSBoYXMgdGhlIGNvcnJlc3BvbmRpbmcgQ1JUQyBpbmNsdWRlZCBpbiBpdHMKPj4+ PiAgICAgICBwb3NzaWJsZV9jcnRjIG1hc2spLgo+Pj4+Cj4+Pj4gRWl0aGVyIHdheSBpZ3QgbmVl ZHMgdG8gYmUgcGF0Y2hlZCB0byBub3QgdHJlYXQgYW55IHByaW1hcnkgcGxhbmUgdGhhdAo+Pj4+ IGNvdWxkIHdvcmsgb24gYSBDUlRDIGFzIHRoZSBwcmltYXJ5IHBsYW5lIGZvciB0aGF0IENSVEMu Cj4+Pj4KPj4+PiBQZXJzb25hbGx5IEknbSBsZWFuaW5nIHRvd2FyZHMgMmIpLgo+Pj4gQWRkaW5n IE1hYXJ0ZW4gYW5kIGlndC1kZXYuCj4+IFdlIHNob3VsZCBmaXJzdCBtYWtlIHRoZSBwbGFuZSBh cnJheSBnbG9iYWwsIGluc3RlYWQgb2YgcGVyIGNydGMuCj4+Cj4+IFRoYXQgbWVhbnMgcmVtb3Zp bmcgcGxhbmUtPnBpcGUgYW5kIHBsYW5lLT5pbmRleC4KPj4KPj4gQW5kIHBpcGVfb2JqLT5wbGFu ZXMgYW5kIHBpcGVfb2JqLT5uX3BsYW5lcyBuZWVkIHRvIGJlIGdvbmUgdG9vLiBJIHRoaW5rIGl0 J3MKPj4gZWFzaWVzdCB0byBtYWtlCj4+Cj4+IFRoZXJlIGlzIG9uZSBwcm9ibGVtLiBNb3N0IG9m IHRoZSB0ZXN0cyBhcmUgbm90IGF3YXJlIG9mIHRoZSBsaW1pdGF0aW9ucy4KPj4gSWYgd2UgbWFr ZSB0aGUgcGxhbmUgYXJyYXkgZ2xvYmFsIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBtYWtlCj4+ IGEgZm9yX2VhY2hfcG9zc2libGVfcGxhbmVfb25fcGlwZSBlbnVtZXJhdGUgYWxsIHBsYW5lcyB0 aGF0IGNvdWxkIGJlIGFzc2lnbmVkCj4+IHRvIGEgY2VydGFpbiBwaXBlLiBXZSBuZWVkIHRvIHNv cnQgYnkgeiBvcmRlciBzb21laG93LCBidXQgaWYgd2UgdGhlbiBhZGQKPj4gaWd0X3BsYW5lX3Nl dF9waXBlKCkgd2hpY2ggdXBkYXRlcyB0aGUgSUdUX1BMQU5FX0NSVENfSUQgcHJvcGVydHksIHdl IHNob3VsZAo+PiBiZSBnb29kLgo+Pgo+PiBPbmx5IHRoaW5nIHdlIGRvbid0IHNlZSBpcyBob3cg dGhlIGRlZmF1bHQgY3J0Yy0+cHJpbWFyeSBhbmQgY3J0Yy0+Y3Vyc29yIGFyZQo+PiBhc3NpZ25l ZC4gRm9yIHRoZSBjYWxscyB3aXRoIENPTU1JVF9MRUdBQ1kgd2UgbmVlZCB0byBrbm93IHRoZSBt YXBwaW5ncywgYnV0Cj4+IEkgZG9uJ3QgdGhpbmsgdGhlIGtlcm5lbCBleHBvc2VzIHRoZW0/Cj4+ IEkgZ3Vlc3Mgd2UgY291bGQgcHV0IGl0IGluIGEgRklGTyB3YXksIGZpcnN0IGVudW1lcmF0ZWQg cGxhbmUgd2l0aCBQUklNQVJZIHR5cGUKPj4gaXMgYm91bmQgdG8gdGhlIGZpcnN0IGNydGMsIHNh bWUgZm9yIGN1cnNvci4KPiBTb2x1dGlvbnMgZm9yIHRoYXQgcHJvYmxlbSBpcyB3aGF0IEkgcHJv cG9zZWQgaW4gbXkgbWFpbCwgc2luY2UgYXRtIHRoZQo+IGtlcm5lbCBpcyBpbmRlZWQgbm90IGV4 cG9zaW5nIHRoYXQgaW4gYW55IGZhc2lvbi4KPgo+PiBUaGlzIHdpbGwgaG9wZWZ1bGx5IGFsbG93 IGxlZ2FjeSB0ZXN0cyB0byBrZWVwIHdvcmtpbmcsIHdoaWxlIGF0b21pYyBwbGFuZSBhd2FyZQo+ PiB0ZXN0cyB3aWxsIGJlIGFibGUgdG8gdXNlIGFsbCBwbGFuZXMuCj4gWWVhaCAuLgo+IC1EYW5p ZWwKCkZvciByZWZlcmVuY2U6IGh0dHBzOi8vcGF0Y2h3b3JrLmZyZWVkZXNrdG9wLm9yZy9zZXJp ZXMvNDI4MTQvCgpUaGUgcGFydCB3aGVyZSBwbGFuZXMgYXJlIHJlYXNzaWduZWQgaXNuJ3QgZG9u ZSB5ZXQsIGJ1dCB0aGF0IHdpbGwgZGVwZW5kIG9uIHRoZSBmaW5hbCBrZXJuZWwgYXBpLgoKfk1h YXJ0ZW4KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRy aS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRw czovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=