From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH v2 2/3] drm/dp: Adjust i2c-over-aux retry count based on message size and i2c bus speed Date: Tue, 1 Sep 2015 14:13:01 +0300 Message-ID: <20150901111301.GE29811@intel.com> References: <1440514590-30837-1-git-send-email-ville.syrjala@linux.intel.com> <1440618907-11169-1-git-send-email-ville.syrjala@linux.intel.com> <1440618907-11169-2-git-send-email-ville.syrjala@linux.intel.com> <20150901091443.GJ1367@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTP id D80508957B for ; Tue, 1 Sep 2015 04:13:20 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20150901091443.GJ1367@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: moosotc@gmail.com, Simon Farnsworth , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gVHVlLCBTZXAgMDEsIDIwMTUgYXQgMTE6MTQ6NDNBTSArMDIwMCwgRGFuaWVsIFZldHRlciB3 cm90ZToKPiBPbiBXZWQsIEF1ZyAyNiwgMjAxNSBhdCAxMDo1NTowNlBNICswMzAwLCB2aWxsZS5z eXJqYWxhQGxpbnV4LmludGVsLmNvbSB3cm90ZToKPiA+IEZyb206IFZpbGxlIFN5cmrDpGzDpCA8 dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+Cj4gPiAKPiA+IENhbGN1bGF0ZSB0aGUgbnVt YmVyIG9mIHJldHJpZXMgd2Ugc2hvdWxkIGRvIGZvciBlYWNoIGkyYy1vdmVyLWF1eAo+ID4gbWVz c2FnZSBiYXNlZCBvbiB0aGUgdGltZSBpdCB0YWtlcyB0byBwZXJmb3JtIHRoZSBpMmMgdHJhbnNm ZXIgdnMuIHRoZQo+ID4gYXV4IHRyYW5zZmVyLiBXZSBhc3N1bWUgdGhlIHNob3J0ZXN0IHBvc3Np YmxlIGxlbmd0aCBmb3IgdGhlIGF1eAo+ID4gdHJhbnNmZXIsIGFuZCB0aGUgbG9uZ2VzdCBwb3Nz aWJsZSAoZXhsdWRpbmcgY2xvY2sgc3RyZXRjaGluZykgZm9yIHRoZQo+ID4gaTJjIHRyYW5zZmVy Lgo+ID4gCj4gPiBUaGUgRFAgc3BlYyBoYXMgc29tZSBleGFtcGxlcyBvbiBob3cgdG8gY2FsY3Vs YXRlIHRoaXMsIGJ1dCB3ZSBkb24ndAo+ID4gY2FsY3VsYXRlIHRoaW5ncyBxdWl0ZSB0aGUgc2Ft ZSB3YXkuIFRoZSBzcGVjIGRvZXNuJ3QgYWNjb3VudCBmb3IgdGhlCj4gPiByZXRyeSBpbnRlcnZh bCAoYXNzdW1lcyBpbW1lZGlhdGUgcmV0cnkgb24gZGVmZXIpLCBhbmQgZG9lc24ndCBhc3N1bWUK PiA+IHRoZSBiZXN0L3dvcnN0IGNhc2UgYmVoYXZpb3VyIGFzIHdlIGRvLgo+ID4gCj4gPiBOb3Rl IHRoYXQgY3VycmVudGx5IHdlIGFzc3VtZSAxMCBrSHogc3BlZWQgZm9yIHRoZSBpMmMgYnVzLiBT b21lIHJlYWwKPiA+IHdvcmxkIGRldmljZXMgKGVnLiBzb21lIEFwcGxlIERQLT5WR0EgZG9uZ2xl KSBmYWlscyB3aXRoIGxlc3MgdGhhbiAxNgo+ID4gcmV0cmllcy4gYW5kIHRoYXQgd291bGQgY29y cmVzcG9uZCB0byBzb21ldGhpbmcgY2xvc2UgdG8gMTUga0h6ICh3aXRoCj4gPiBvdXIgbWV0aG9k IG9mIGNhbGN1bGF0aW5nIHRoaW5ncykgQnV0IGxldCdzIGp1c3QgZ28gZm9yIDEwIGtIeiB0byBi ZQo+ID4gb24gdGhlIHNhZmUgc2lkZS4gSWRlYWxseSB3ZSBzaG91bGQgcXVlcnkvc2V0IHRoZSBp MmMgYnVzIHNwZWVkIHZpYQo+ID4gRFBDRCBidXQgZm9yIG5vdyB0aGlzIHNob3VsZCBhdCBsZWFh c3QgcmVtb3ZlIHRoZSByZWdyZXNzaW9uIGZyb20gdGhlCj4gPiAxLT4xNiBieXRlIHRyYXNuZmVy IHNpemUgY2hhbmdlLiBBbmQgb2YgY291cnNlIGlmIHRoZSBzaW5rIGNvbXBsZXRlcwo+ID4gdGhl IHRyYW5zZmVyIHF1aWNrZXIgdGhpcyBzaG91bGRuJ3Qgc2xvdyB0aGluZ3MgZG93biBzaW5jZSB3 ZSBkb24ndAo+ID4gY2hhbmdlIHRoZSBpbnRlcnZhbCBiZXR3ZWVuIHJldHJpZXMuCj4gPiAKPiA+ IEkgZGlkIGEgZmV3IGV4cGVyaW1lbnRzIHdpdGggYSBEUC0+RFZJIGRvbmdsZSBJIGhhdmUgdGhh dCBhbGxvd3MgeW91Cj4gPiB0byBjaGFuZ2UgdGhlIGkyYyBidXMgc3BlZWQuIEhlcmUgYXJlIHRo ZSByZXN1bHRzIG9mIG1lIGNoYW5naW5nIHRoZQo+ID4gYWN0dWFsIGJ1cyBzcGVlZCBhbmQgdGhl IGFzc3VtZWQgYnVzIHNwZWVkIGFuZCBzZWVpbmcgd2hlbiB3ZSBzdGFydAo+ID4gdG8gZmFpbCB0 aGUgb3BlcmF0aW9uOgo+ID4gCj4gPiBhY3R1YWwgaTJjIGtoeiAgICAgICAgICBhc3N1bWVkIGky YyBraHogICAgICAgICBtYXggcmV0cmllcwo+ID4gMSAgICAgICAgICAgICAgICAgICAgICAgMSBv ayAtPiAyIGZhaWwgICAgICAgICAgMjExIG9rIC0+IDEwNiBmYWlsCj4gPiA1ICAgICAgICAgICAg ICAgICAgICAgICA4IG9rIC0+IDkgZmFpbCAgICAgICAgICAyNyBvayAtPiAyNCBmYWlsCj4gPiAx MCAgICAgICAgICAgICAgICAgICAgICAxNyBvayAtPiAxOCBmYWlsICAgICAgICAxMyBvayAtPiAx MiBmYWlsCj4gPiAxMDAgICAgICAgICAgICAgICAgICAgICAyMTAgb2sgLT4gMjExIGZhaWwgICAg ICAyIG9rIC0+IDEgZmFpbAo+ID4gCj4gPiBTbyBiYXNlZCBvbiB0aGF0IHdlIGhhdmUgYSBmYWly bHkgZGVjZW50IHNhZmV0eSBtYXJnaW4gYmFrZWQgaW50bwo+ID4gdGhlIGZvcm11bGEgdG8gY2Fs Y3VsYXRlIHRoZSBtYXggbnVtYmVyIG9mIHJldHJpZXMuCj4gPiAKPiA+IEZpeGVzIGEgcmVncmVz c2lvbiB3aXRoIHNvbWUgRFAgZG9uZ2xlcyBmcm9tOgo+ID4gY29tbWl0IDFkMDAyZmE3MjA3Mzhi Y2QwYmRkYjkxNzhlOWVhMDc3MzI4OGUxZGQKPiA+IEF1dGhvcjogU2ltb24gRmFybnN3b3J0aCA8 c2ltb24uZmFybnN3b3J0aEBvbmVsYW4uY28udWs+Cj4gPiBEYXRlOiAgIFR1ZSBGZWIgMTAgMTg6 Mzg6MDggMjAxNSArMDAwMAo+ID4gCj4gPiAgICAgZHJtL2RwOiBVc2UgbGFyZ2UgdHJhbnNhY3Rp b25zIGZvciBJMkMgb3ZlciBBVVgKPiA+IAo+ID4gdjI6IFVzZSBiZXN0IGNhc2UgZm9yIEFVWCBh bmQgd29yc3QgY2FzZSBmb3IgaTJjIChTaW1vbiBGYXJuc3dvcnRoKQo+ID4gICAgIEFkZCBhIGRl ZmluZSBvdXIgQVVYIHJldHJ5IGludGVydmFsIGFuZCBhY2NvdW50IGZvciBpdAo+ID4gCj4gPiBD YzogU2ltb24gRmFybnN3b3J0aCA8c2ltb24uZmFybnN3b3J0aEBvbmVsYW4uY29tPgo+ID4gQ2M6 IG1vb3NvdGNAZ21haWwuY29tCj4gPiBUZXN0ZWQtYnk6IG1vb3NvdGNAZ21haWwuY29tCj4gPiBC dWd6aWxsYTogaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE0 NTEKPiA+IFNpZ25lZC1vZmYtYnk6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51 eC5pbnRlbC5jb20+Cj4gPiAtLS0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2RwX2hlbHBlci5j IHwgODEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KPiA+ICAxIGZp bGUgY2hhbmdlZCwgNzkgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKPiA+IAo+ID4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBfaGVscGVyLmMgYi9kcml2ZXJzL2dwdS9k cm0vZHJtX2RwX2hlbHBlci5jCj4gPiBpbmRleCA3MDY5ZTU0Li4yM2I5ZmNjIDEwMDY0NAo+ID4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9oZWxwZXIuYwo+ID4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2RybV9kcF9oZWxwZXIuYwo+ID4gQEAgLTQyNCw2ICs0MjQsNzggQEAgc3RhdGljIHUz MiBkcm1fZHBfaTJjX2Z1bmN0aW9uYWxpdHkoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQo+ ID4gIAkgICAgICAgSTJDX0ZVTkNfMTBCSVRfQUREUjsKPiA+ICB9Cj4gPiAgCj4gPiArI2RlZmlu ZSBBVVhfUFJFQ0hBUkdFX0xFTiAxMCAvKiAxMCB0byAxNiAqLwo+ID4gKyNkZWZpbmUgQVVYX1NZ TkNfTEVOICgxNiArIDQpIC8qIHByZWFtYmxlICsgQVVYX1NZTkNfRU5EICovCj4gPiArI2RlZmlu ZSBBVVhfU1RPUF9MRU4gNAo+ID4gKyNkZWZpbmUgQVVYX0NNRF9MRU4gNAo+ID4gKyNkZWZpbmUg QVVYX0FERFJFU1NfTEVOIDIwCj4gPiArI2RlZmluZSBBVVhfUkVQTFlfUEFEX0xFTiA0Cj4gPiAr I2RlZmluZSBBVVhfTEVOR1RIX0xFTiA4Cj4gPiArCj4gPiArLyoKPiA+ICsgKiBDYWxjdWxhdGUg dGhlIGxlbmd0aCBvZiB0aGUgQVVYIHJlcXVlc3QvcmVwbHkuIEdpdmVzIHRoZSAiYmVzdCIKPiA+ ICsgKiBjYXNlIGVzdGltYXRlLCBpZS4gc3VjY2Vzc2Z1bCB3aGlsZSBhcyBzaG9ydCBhcyBwb3Nz aWJsZS4KPiA+ICsgKi8KPiA+ICtzdGF0aWMgaW50IGRybV9kcF9hdXhfcmVxX2xlbihjb25zdCBz dHJ1Y3QgZHJtX2RwX2F1eF9tc2cgKm1zZykKPiA+ICt7Cj4gPiArCWludCBsZW4gPSBBVVhfUFJF Q0hBUkdFX0xFTiArIEFVWF9TWU5DX0xFTiArIEFVWF9TVE9QX0xFTiArCj4gPiArCQlBVVhfQ01E X0xFTiArIEFVWF9BRERSRVNTX0xFTiArIEFVWF9MRU5HVEhfTEVOOwo+ID4gKwo+ID4gKwlpZiAo KG1zZy0+cmVxdWVzdCAmIERQX0FVWF9JMkNfUkVBRCkgPT0gMCkKPiA+ICsJCWxlbiArPSBtc2ct PnNpemUgKiA4Owo+ID4gKwo+ID4gKwlyZXR1cm4gbGVuOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0 aWMgaW50IGRybV9kcF9hdXhfcmVwbHlfbGVuKGNvbnN0IHN0cnVjdCBkcm1fZHBfYXV4X21zZyAq bXNnKQo+ID4gK3sKPiA+ICsJaW50IGxlbiA9IEFVWF9QUkVDSEFSR0VfTEVOICsgQVVYX1NZTkNf TEVOICsgQVVYX1NUT1BfTEVOICsKPiA+ICsJCUFVWF9DTURfTEVOICsgQVVYX1JFUExZX1BBRF9M RU47Cj4gPiArCj4gPiArCS8qCj4gPiArCSAqIEZvciByZWFkIHdlIGV4cGVjdCB3aGF0IHdhcyBh c2tlZC4gRm9yIHdyaXRlcyB0aGVyZSB3aWxsCj4gPiArCSAqIGJlIDAgb3IgMSBkYXRhIGJ5dGVz LiBBc3N1bWUgMCBmb3IgdGhlICJiZXN0IiBjYXNlLgo+ID4gKwkgKi8KPiA+ICsJaWYgKG1zZy0+ cmVxdWVzdCAmIERQX0FVWF9JMkNfUkVBRCkKPiA+ICsJCWxlbiArPSBtc2ctPnNpemUgKiA4Owo+ ID4gKwo+ID4gKwlyZXR1cm4gbGVuOwo+ID4gK30KPiA+ICsKPiA+ICsjZGVmaW5lIEkyQ19TVEFS VF9MRU4gMQo+ID4gKyNkZWZpbmUgSTJDX1NUT1BfTEVOIDEKPiA+ICsjZGVmaW5lIEkyQ19BRERS X0xFTiA5IC8qIEFERFJFU1MgKyBSL1cgKyBBQ0svTkFDSyAqLwo+ID4gKyNkZWZpbmUgSTJDX0RB VEFfTEVOIDkgLyogREFUQSArIEFDSy9OQUNLICovCj4gPiArCj4gPiArLyoKPiA+ICsgKiBDYWxj dWxhdGUgdGhlIGxlbmd0aCBvZiB0aGUgaTJjIHRyYW5zZmVyIChpbiBBVVggY2xvY2tzKQo+ID4g KyAqIGFzc3VtaW5nIHRoZSBpMmMgYnVzIHNwZWVkIGlzIGFzIHNwZWNpZmllZC4gR2l2ZXMgdGhl IHRoZQo+ID4gKyAqICJ3b3JzdCIgY2FzZSBlc3RpbWF0ZSwgaWUuIHN1Y2Nlc3NmdWwgd2hpbGUg YXMgbG9uZyBhcyBwb3NzaWJsZS4KPiA+ICsgKiBEb2Vzbid0IGFjY291bnQgdGhlIHRoZSAiTU9U IiBiaXQsIGFuZCBpbnN0ZWFkIGFzc3VtZXMgZWFjaAo+ID4gKyAqIG1lc3NhZ2UgaW5jbHVkZXMg YSBTVEFSVCwgQUREUkVTUyBhbmQgU1RPUC4gTmVpdGhlciBkb2VzIGl0Cj4gPiArICogYWNjb3Vu dCBmb3IgYWRkaXRpb25hbCByYW5kb20gdmFyaWFibGVzIHN1Y2ggYXMgY2xvY2sgc3RyZXRjaGlu Zy4KPiA+ICsgKi8KPiA+ICtzdGF0aWMgaW50IGRybV9kcF9pMmNfbXNnX2xlbihjb25zdCBzdHJ1 Y3QgZHJtX2RwX2F1eF9tc2cgKm1zZywKPiA+ICsJCQkgICAgICBpbnQgaTJjX3NwZWVkX2toeikK PiA+ICt7Cj4gPiArCXJldHVybiAoSTJDX1NUQVJUX0xFTiArIEkyQ19BRERSX0xFTiArIG1zZy0+ c2l6ZSAqIEkyQ19EQVRBX0xFTiArCj4gPiArCQlJMkNfU1RPUF9MRU4pICogMTAwMCAvIGkyY19z cGVlZF9raHo7Cj4gCj4gVGhpcyBkb2Vzbid0IHNlZW0gdG8gY29tcHV0ZSB0aGUgbGVuZ2h0LCBi dXQgdGhlIHRpbWUgYSB0cmFuc2ZlciB0YWtlcywgaW4KPiB1c2VjIChpZiBJIGhhdmVuJ3Qgc2Ny ZXdlZCB1cCBteSBudW1iZXJzIC4uLikuIEFsc28gRElWX1JPVU5EX0RPV04gdG8gbWFrZQo+IHRo ZSBkZWZlbnNpdmVuZXNzIGNsZWFyPwoKV2VsbCBpdCBzdGFydGVkIG91dCBhcyBsZW5ndGgsIGFu ZCB0aGVuIEkgZmlndXJlZCBJJ2xsIGp1c3Qgc2hvdmUgdGhlCmkyYy0+YXV4IHVuaXQgY29udmVy c2lvbiBpbiBoZXJlLiBJdCdzIGEgbGVuZ3RoIGluIHRpbWUgaWYgeW91IHdpbGwgOykKCkFuZCBp dCBzaG91bGQgcmF0aGVyIGJlIERJVl9ST1VORF9VUCgpIHNpbmNlIHdlIHdhbnQgdGhlICJtYXhp bXVtIiBoZXJlLgoKPiAKPiA+ICt9Cj4gPiArCj4gPiArLyoKPiA+ICsgKiBEZXRlcmluZSBob3cg bWFueSByZXRyaWVzIHNob3VsZCBiZSBhdHRlbXB0ZWQgdG8gc3VjY2Vzc2Z1bGx5IHRyYW5zZmVy Cj4gCj4gRGV0ZXJpX21fZS4KPiAKPiA+ICsgKiB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UsIGJhc2Vk IG9uIHRoZSBlc3RpbWF0ZWQgZHVyYXRpb25zIG9mIHRoZQo+ID4gKyAqIGkyYyBhbmQgQVVYIHRy YW5zZmVycy4KPiA+ICsgKi8KPiA+ICtzdGF0aWMgaW50IGRybV9kcF9pMmNfcmV0cnlfY291bnQo Y29uc3Qgc3RydWN0IGRybV9kcF9hdXhfbXNnICptc2csCj4gPiArCQkJICAgICAgaW50IGkyY19z cGVlZF9raHopCj4gPiArewo+ID4gKwlpbnQgYXV4X2xlbiA9IGRybV9kcF9hdXhfcmVxX2xlbiht c2cpICsgZHJtX2RwX2F1eF9yZXBseV9sZW4obXNnKTsKPiA+ICsJaW50IGkyY19sZW4gPSBkcm1f ZHBfaTJjX21zZ19sZW4obXNnLCBpMmNfc3BlZWRfa2h6KTsKPiA+ICsKPiA+ICsJcmV0dXJuIERJ Vl9ST1VORF9VUChpMmNfbGVuLCBhdXhfbGVuICsgQVVYX1JFVFJZX0lOVEVSVkFMKTsKPiAKPiBT byBhc3N1bWluZyBJIGdldCB0aGluZ3MgcmlnaHQgaTJjX2xlbiBpcyBhY3R1YWxseSBpMmNfdGlt ZV91cywgYnV0Cj4gYXV4X2xlbiBpcyBzdGlsbCBqdXN0IGEgbGVuZ3RoIChhbmQgc2luY2UgdGhl IGJ1cyBydW5zIGF0IDJNSHogaXQgZG9lc24ndAo+IHNlZW0gdG8ganVzdCBhZGQgdXAgY29ycmVj dGx5KS4KCkFVWCBiaXRyYXRlIGlzIDFNSHoKCj4gQnV0IEFVWF9SRVRSWV9JTlRFUlZBTCBpcyBp biB1c2VjIChhbmQgSQo+IGV4cGVjdGVkIGFuIHVzZWMvdXNlYyBkaXZpc2lvbiBmb3IgdGhlIHJh dGlvbikuIEkgdGhpbmsgdGhlcmUncyBhCj4gYXV4X3RpbWVfdXMgPSBESVZfUk9VTkRfVVAoYXV4 X2xlbiAqIDEwMDAgKiAxMDAwIC8gYXV4X3NwZWVkX0haKSBtaXNzaW5nLgo+IAo+IENoZWVycywg RGFuaWVsCj4gCj4gPiArfQo+ID4gKwo+ID4gIC8qCj4gPiAgICogVHJhbnNmZXIgYSBzaW5nbGUg STJDLW92ZXItQVVYIG1lc3NhZ2UgYW5kIGhhbmRsZSB2YXJpb3VzIGVycm9yIGNvbmRpdGlvbnMs Cj4gPiAgICogcmV0cnlpbmcgdGhlIHRyYW5zYWN0aW9uIGFzIGFwcHJvcHJpYXRlLiAgSXQgaXMg YXNzdW1lZCB0aGF0IHRoZQo+ID4gQEAgLTQzNiwxMyArNTA4LDE4IEBAIHN0YXRpYyBpbnQgZHJt X2RwX2kyY19kb19tc2coc3RydWN0IGRybV9kcF9hdXggKmF1eCwgc3RydWN0IGRybV9kcF9hdXhf bXNnICptc2cpCj4gPiAgewo+ID4gIAl1bnNpZ25lZCBpbnQgcmV0cnksIGRlZmVyX2kyYzsKPiA+ ICAJaW50IHJldDsKPiA+IC0KPiA+ICAJLyoKPiA+ICAJICogRFAxLjIgc2VjdGlvbnMgMi43Ljcu MS41LjYuMSBhbmQgMi43LjcuMS42LjYuMTogQSBEUCBTb3VyY2UgZGV2aWNlCj4gPiAgCSAqIGlz IHJlcXVpcmVkIHRvIHJldHJ5IGF0IGxlYXN0IHNldmVuIHRpbWVzIHVwb24gcmVjZWl2aW5nIEFV WF9ERUZFUgo+ID4gIAkgKiBiZWZvcmUgZ2l2aW5nIHVwIHRoZSBBVVggdHJhbnNhY3Rpb24uCj4g PiArCSAqCj4gPiArCSAqIFdlIGFsc28gdHJ5IHRvIGFjY291bnQgZm9yIHRoZSBpMmMgYnVzIHNw ZWVkLgo+ID4gKwkgKiBGSVhNRSBjdXJyZW50bHkgYXNzdW1lcyAxMCBrSHogYXMgc29tZSByZWFs IHdvcmxkIGRldmljZXMgc2VlbQo+ID4gKwkgKiB0byByZXF1aXJlIGl0LiBXZSBzaG91bGQgcXVl cnkvc2V0IHRoZSBzcGVlZCB2aWEgRFBDRCBpZiBzdXBwb3J0ZWQuCj4gPiAgCSAqLwo+ID4gLQlm b3IgKHJldHJ5ID0gMCwgZGVmZXJfaTJjID0gMDsgcmV0cnkgPCAoNyArIGRlZmVyX2kyYyk7IHJl dHJ5KyspIHsKPiA+ICsJaW50IG1heF9yZXRyaWVzID0gbWF4KDcsIGRybV9kcF9pMmNfcmV0cnlf Y291bnQobXNnLCAxMCkpOwo+ID4gKwo+ID4gKwlmb3IgKHJldHJ5ID0gMCwgZGVmZXJfaTJjID0g MDsgcmV0cnkgPCAobWF4X3JldHJpZXMgKyBkZWZlcl9pMmMpOyByZXRyeSsrKSB7Cj4gPiAgCQlt dXRleF9sb2NrKCZhdXgtPmh3X211dGV4KTsKPiA+ICAJCXJldCA9IGF1eC0+dHJhbnNmZXIoYXV4 LCBtc2cpOwo+ID4gIAkJbXV0ZXhfdW5sb2NrKCZhdXgtPmh3X211dGV4KTsKPiA+IC0tIAo+ID4g Mi40LjYKPiA+IAo+ID4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KPiA+IGRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKPiA+IGRyaS1kZXZlbEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKPiA+IGh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9kcmktZGV2ZWwKPiAKPiAtLSAKPiBEYW5pZWwgVmV0dGVyCj4gU29mdHdhcmUgRW5naW5l ZXIsIEludGVsIENvcnBvcmF0aW9uCj4gaHR0cDovL2Jsb2cuZmZ3bGwuY2gKCi0tIApWaWxsZSBT eXJqw6Rsw6QKSW50ZWwgT1RDCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNr dG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJp LWRldmVsCg==