From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?Q?Christian_K=c3=b6nig?= Subject: Re: [PATCH 06/10] drm/ttm: fix busy memory to fail other user v10 Date: Fri, 24 May 2019 10:49:23 +0200 Message-ID: References: <20190522125947.4592-1-christian.koenig@amd.com> <20190522125947.4592-6-christian.koenig@amd.com> <171275f3-7536-227f-013a-337943434b8c@amd.com> <16918096-1430-d581-7284-a987aacb89da@gmail.com> Reply-To: christian.koenig-5C7GfCeVMHo@public.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: Content-Language: en-US List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: "Liang, Prike" , "Koenig, Christian" , "Zhou, David(ChunMing)" , "Olsak, Marek" , "dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" , "amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" WWVhaCwgdGhhdCBzaG91bGRuJ3QgYmUgYSBwcm9ibGVtLiBXZSBqdXN0IG5lZWQgdG8gbWFrZSBz dXJlIHdlIGRvbid0IApidXN5IHdhaXQgZm9yIHRoZSBCT3MgdG8gYmVjb21lIGF2YWlsYWJsZS4K CkNocmlzdGlhbi4KCkFtIDI0LjA1LjE5IHVtIDA3OjM1IHNjaHJpZWIgTGlhbmcsIFByaWtlOgo+ IFVzZSBBYmFxdXMgdG9ydHVyaW5nIHRoZSBhbWRncHUgZHJpdmVyIG1vcmUgdGltZXMgd2lsbCBy dW5uaW5nIGludG8gbG9ja2luZyBmaXJzdCBidXN5IEJPIGRlYWRsb2NrIC5UaGVuIHRoZSBjYWxs ZXIgd2lsbAo+IHJldHVybiBFQUdBSU4gYW5kIGV2ZW50dWFsbHkgZG1fcGxhbmVfaGVscGVyX3By ZXBhcmVfZmIgcG9wdXBzIG91dCBwaW5uZWQgZmFpbGVkIG1lc3NhZ2UgLkZvciB0aGlzIGNhc2Us IHRoZSBwYXRjaCM3Cj4gICBjYW4gd2UgYWRkIEVBR0FJTiBhcyBFUkVTVEFSVFNZUyB3aGljaCBm aWx0ZXIgb3V0IHRoZSBhbm5veWluZyBlcnJvciBtZXNzYWdlIC4KPgo+IFRoYW5rcywKPiBQcmlr ZQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tCj4gRnJvbTogQ2hyaXN0aWFuIEvDtm5pZyA8 Y2tvZW5pZy5sZWljaHR6dW1lcmtlbkBnbWFpbC5jb20+Cj4gU2VudDogVGh1cnNkYXksIE1heSAy MywgMjAxOSA3OjA0IFBNCj4gVG86IFpob3UsIERhdmlkKENodW5NaW5nKSA8RGF2aWQxLlpob3VA YW1kLmNvbT47IE9sc2FrLCBNYXJlayA8TWFyZWsuT2xzYWtAYW1kLmNvbT47IFpob3UsIERhdmlk KENodW5NaW5nKSA8RGF2aWQxLlpob3VAYW1kLmNvbT47IExpYW5nLCBQcmlrZSA8UHJpa2UuTGlh bmdAYW1kLmNvbT47IGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmc7IGFtZC1nZnhAbGlz dHMuZnJlZWRlc2t0b3Aub3JnCj4gU3ViamVjdDogUmU6IFtQQVRDSCAwNi8xMF0gZHJtL3R0bTog Zml4IGJ1c3kgbWVtb3J5IHRvIGZhaWwgb3RoZXIgdXNlciB2MTAKPgo+IFtDQVVUSU9OOiBFeHRl cm5hbCBFbWFpbF0KPgo+IEFtIDIzLjA1LjE5IHVtIDEyOjI0IHNjaHJpZWIgemhvdWNtMToKPj4K Pj4gT24gMjAxOeW5tDA15pyIMjLml6UgMjA6NTksIENocmlzdGlhbiBLw7ZuaWcgd3JvdGU6Cj4+ PiBbQ0FVVElPTjogRXh0ZXJuYWwgRW1haWxdCj4+Pgo+Pj4gQk9zIG9uIHRoZSBMUlUgbWlnaHQg YmUgYmxvY2tlZCBkdXJpbmcgY29tbWFuZCBzdWJtaXNzaW9uIGFuZCBjYXVzZQo+Pj4gT09NIHNp dHVhdGlvbnMuCj4+Pgo+Pj4gQXZvaWQgdGhpcyBieSBibG9ja2luZyBmb3IgdGhlIGZpcnN0IGJ1 c3kgQk8gbm90IGxvY2tlZCBieSB0aGUgc2FtZQo+Pj4gdGlja2V0IGFzIHRoZSBCTyB3ZSBhcmUg c2VhcmNoaW5nIHNwYWNlIGZvci4KPj4+Cj4+PiB2MTA6IGNvbXBsZXRlbHkgc3RhcnQgb3ZlciB3 aXRoIHRoZSBwYXRjaCBzaW5jZSB3ZSBkaWRuJ3QKPj4+ICAgICAgICBoYW5kbGVkIGEgd2hvbGUg YnVuY2ggb2YgY29ybmVyIGNhc2VzLgo+Pj4KPj4+IFNpZ25lZC1vZmYtYnk6IENocmlzdGlhbiBL w7ZuaWcgPGNocmlzdGlhbi5rb2VuaWdAYW1kLmNvbT4KPj4+IC0tLQo+Pj4gICAgZHJpdmVycy9n cHUvZHJtL3R0bS90dG1fYm8uYyB8IDc3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0t LS0tLQo+Pj4gICAgMSBmaWxlIGNoYW5nZWQsIDY2IGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9u cygtKQo+Pj4KPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iby5jCj4+ PiBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvLmMgaW5kZXggNGM2Mzg5ZDg0OWVkLi44NjFm YWNhYzMzZDQKPj4+IDEwMDY0NAo+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm8u Ywo+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm8uYwo+Pj4gQEAgLTc3MSwzMiAr NzcxLDcyIEBAIEVYUE9SVF9TWU1CT0wodHRtX2JvX2V2aWN0aW9uX3ZhbHVhYmxlKTsKPj4+ICAg ICAqIGIuIE90aGVyd2lzZSwgdHJ5bG9jayBpdC4KPj4+ICAgICAqLwo+Pj4gICAgc3RhdGljIGJv b2wgdHRtX2JvX2V2aWN0X3N3YXBvdXRfYWxsb3dhYmxlKHN0cnVjdCB0dG1fYnVmZmVyX29iamVj dAo+Pj4gKmJvLAo+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHR0bV9vcGVyYXRp b25fY3R4ICpjdHgsIGJvb2wgKmxvY2tlZCkKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCB0dG1fb3BlcmF0aW9uX2N0eCAqY3R4LCBib29sICpsb2NrZWQsCj4+PiBib29sICpidXN5 KQo+Pj4gICAgewo+Pj4gICAgICAgICAgIGJvb2wgcmV0ID0gZmFsc2U7Cj4+Pgo+Pj4gLSAgICAg ICAqbG9ja2VkID0gZmFsc2U7Cj4+PiAgICAgICAgICAgaWYgKGJvLT5yZXN2ID09IGN0eC0+cmVz dikgewo+Pj4gICAgICAgICAgICAgICAgICAgcmVzZXJ2YXRpb25fb2JqZWN0X2Fzc2VydF9oZWxk KGJvLT5yZXN2KTsKPj4+ICAgICAgICAgICAgICAgICAgIGlmIChjdHgtPmZsYWdzICYgVFRNX09Q VF9GTEFHX0FMTE9XX1JFU19FVklDVAo+Pj4gICAgICAgICAgICAgICAgICAgICAgIHx8ICFsaXN0 X2VtcHR5KCZiby0+ZGRlc3Ryb3kpKQo+Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICByZXQg PSB0cnVlOwo+Pj4gKyAgICAgICAgICAgICAgICpsb2NrZWQgPSBmYWxzZTsKPj4+ICsgICAgICAg ICAgICAgICBpZiAoYnVzeSkKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICpidXN5ID0gZmFs c2U7Cj4+PiAgICAgICAgICAgfSBlbHNlIHsKPj4+IC0gICAgICAgICAgICAgICAqbG9ja2VkID0g cmVzZXJ2YXRpb25fb2JqZWN0X3RyeWxvY2soYm8tPnJlc3YpOwo+Pj4gLSAgICAgICAgICAgICAg IHJldCA9ICpsb2NrZWQ7Cj4+PiArICAgICAgICAgICAgICAgcmV0ID0gcmVzZXJ2YXRpb25fb2Jq ZWN0X3RyeWxvY2soYm8tPnJlc3YpOwo+Pj4gKyAgICAgICAgICAgICAgICpsb2NrZWQgPSByZXQ7 Cj4+PiArICAgICAgICAgICAgICAgaWYgKGJ1c3kpCj4+PiArICAgICAgICAgICAgICAgICAgICAg ICAqYnVzeSA9ICFyZXQ7Cj4+PiAgICAgICAgICAgfQo+Pj4KPj4+ICAgICAgICAgICByZXR1cm4g cmV0Owo+Pj4gICAgfQo+Pj4KPj4+ICsvKioKPj4+ICsgKiB0dG1fbWVtX2V2aWN0X3dhaXRfYnVz eSAtIHdhaXQgZm9yIGEgYnVzeSBCTyB0byBiZWNvbWUgYXZhaWxhYmxlCj4+PiArICoKPj4+ICsg KiBAYnVzeV9ibzogQk8gd2hpY2ggY291bGRuJ3QgYmUgbG9ja2VkIHdpdGggdHJ5bG9jawo+Pj4g KyAqIEBjdHg6IG9wZXJhdGlvbiBjb250ZXh0Cj4+PiArICogQHRpY2tldDogYWNxdWlyZSB0aWNr ZXQKPj4+ICsgKgo+Pj4gKyAqIFRyeSB0byBsb2NrIGEgYnVzeSBidWZmZXIgb2JqZWN0IHRvIGF2 b2lkIGZhaWxpbmcgZXZpY3Rpb24uCj4+PiArICovCj4+PiArc3RhdGljIGludCB0dG1fbWVtX2V2 aWN0X3dhaXRfYnVzeShzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJ1c3lfYm8sCj4+PiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0dG1fb3BlcmF0aW9uX2N0eCAq Y3R4LAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgd3dfYWNx dWlyZV9jdHggKnRpY2tldCkgewo+Pj4gKyAgICAgICBpbnQgcjsKPj4+ICsKPj4+ICsgICAgICAg aWYgKCFidXN5X2JvIHx8ICF0aWNrZXQpCj4+PiArICAgICAgICAgICAgICAgcmV0dXJuIC1FQlVT WTsKPj4+ICsKPj4+ICsgICAgICAgaWYgKGN0eC0+aW50ZXJydXB0aWJsZSkKPj4+ICsgICAgICAg ICAgICAgICByID0KPj4+ICsgcmVzZXJ2YXRpb25fb2JqZWN0X2xvY2tfaW50ZXJydXB0aWJsZShi dXN5X2JvLT5yZXN2LAo+Pj4gKyB0aWNrZXQpOwo+Pj4gKyAgICAgICBlbHNlCj4+PiArICAgICAg ICAgICAgICAgciA9IHJlc2VydmF0aW9uX29iamVjdF9sb2NrKGJ1c3lfYm8tPnJlc3YsIHRpY2tl dCk7Cj4+PiArCj4+PiArICAgICAgIC8qCj4+PiArICAgICAgICAqIFRPRE86IEl0IHdvdWxkIGJl IGJldHRlciB0byBrZWVwIHRoZSBCTyBsb2NrZWQgdW50aWwKPj4+IGFsbG9jYXRpb24gaXMgYXQK Pj4+ICsgICAgICAgICogbGVhc3QgdHJpZWQgb25lIG1vcmUgdGltZSwgYnV0IHRoYXQgd291bGQg bWVhbiBhIG11Y2gKPj4+IGxhcmdlciByZXdvcmsKPj4+ICsgICAgICAgICogb2YgVFRNLgo+Pj4g KyAgICAgICAgKi8KPj4+ICsgICAgICAgaWYgKCFyKQo+Pj4gKyAgICAgICAgICAgICAgIHJlc2Vy dmF0aW9uX29iamVjdF91bmxvY2soYnVzeV9iby0+cmVzdik7Cj4+PiArCj4+PiArICAgICAgIHJl dHVybiByID09IC1FREVBRExLID8gLUVBR0FJTiA6IHI7IH0KPj4+ICsKPj4+ICAgIHN0YXRpYyBp bnQgdHRtX21lbV9ldmljdF9maXJzdChzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldiwKPj4+ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IG1lbV90eXBlLAo+Pj4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHR0bV9wbGFjZSAqcGxh Y2UsCj4+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHR0bV9vcGVyYXRp b25fY3R4ICpjdHgpCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHR0 bV9vcGVyYXRpb25fY3R4ICpjdHgsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3RydWN0IHd3X2FjcXVpcmVfY3R4ICp0aWNrZXQpCj4+PiAgICB7Cj4+PiArICAgICAgIHN0cnVj dCB0dG1fYnVmZmVyX29iamVjdCAqYm8gPSBOVUxMLCAqYnVzeV9ibyA9IE5VTEw7Cj4+PiAgICAg ICAgICAgc3RydWN0IHR0bV9ib19nbG9iYWwgKmdsb2IgPSBiZGV2LT5nbG9iOwo+Pj4gICAgICAg ICAgIHN0cnVjdCB0dG1fbWVtX3R5cGVfbWFuYWdlciAqbWFuID0gJmJkZXYtPm1hblttZW1fdHlw ZV07Cj4+PiAtICAgICAgIHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8gPSBOVUxMOwo+Pj4g ICAgICAgICAgIGJvb2wgbG9ja2VkID0gZmFsc2U7Cj4+PiAgICAgICAgICAgdW5zaWduZWQgaTsK Pj4+ICAgICAgICAgICBpbnQgcmV0Owo+Pj4gQEAgLTgwNCw4ICs4NDQsMTUgQEAgc3RhdGljIGlu dCB0dG1fbWVtX2V2aWN0X2ZpcnN0KHN0cnVjdAo+Pj4gdHRtX2JvX2RldmljZSAqYmRldiwKPj4+ ICAgICAgICAgICBzcGluX2xvY2soJmdsb2ItPmxydV9sb2NrKTsKPj4+ICAgICAgICAgICBmb3Ig KGkgPSAwOyBpIDwgVFRNX01BWF9CT19QUklPUklUWTsgKytpKSB7Cj4+PiAgICAgICAgICAgICAg ICAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5KGJvLCAmbWFuLT5scnVbaV0sIGxydSkgewo+Pj4gLSAg ICAgICAgICAgICAgICAgICAgICAgaWYgKCF0dG1fYm9fZXZpY3Rfc3dhcG91dF9hbGxvd2FibGUo Ym8sIGN0eCwKPj4+ICZsb2NrZWQpKQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBi dXN5Owo+Pj4gKwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0dG1fYm9fZXZpY3Rf c3dhcG91dF9hbGxvd2FibGUoYm8sIGN0eCwKPj4+ICZsb2NrZWQsCj4+PiArICZidXN5KSkgewo+ Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVzeSAmJiAhYnVzeV9ibyAm Jgo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm8tPnJlc3YtPmxvY2su Y3R4ICE9IHRpY2tldCkKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBidXN5X2JvID0gYm87Cj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u dGludWU7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgICB9Cj4+Pgo+Pj4gICAgICAgICAgICAg ICAgICAgICAgICAgICBpZiAocGxhY2UgJiYKPj4+ICFiZGV2LT5kcml2ZXItPmV2aWN0aW9uX3Zh bHVhYmxlKGJvLAo+Pj4gcGxhY2UpKSB7Cj4+PiBAQCAtODI0LDggKzg3MSwxMyBAQCBzdGF0aWMg aW50IHR0bV9tZW1fZXZpY3RfZmlyc3Qoc3RydWN0Cj4+PiB0dG1fYm9fZGV2aWNlICpiZGV2LAo+ Pj4gICAgICAgICAgIH0KPj4+Cj4+PiAgICAgICAgICAgaWYgKCFibykgewo+Pj4gKyAgICAgICAg ICAgICAgIGlmIChidXN5X2JvKQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgdHRtX2JvX2dl dChidXN5X2JvKTsKPj4+ICAgICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrKCZnbG9iLT5scnVf bG9jayk7Cj4+PiAtICAgICAgICAgICAgICAgcmV0dXJuIC1FQlVTWTsKPj4+ICsgICAgICAgICAg ICAgICByZXQgPSB0dG1fbWVtX2V2aWN0X3dhaXRfYnVzeShidXN5X2JvLCBjdHgsIHRpY2tldCk7 Cj4+IElmIHlvdSByZWx5IG9uIEVBR0FJTiwgd2h5IGRvIHlvdSBzdGlsbCB0cnkgdG8gbG9jayBi dXN5X2JvPyBhbnkKPj4gbmVnYXRpdmUgZWZmZWN0IGlmIGRpcmVjdGx5IHJldHVybiBFQUdBSU4g d2l0aG91dCB0cmluZyBsb2NrPwo+IFllYWgsIHRoYXQgd291bGQgYnVybiBhIGxvdCBvZiBDUFUg Y3ljbGVzIGJlY2F1c2Ugd2Ugd291bGQgZXNzZW50aWFsbHkgYnVzeSB3YWl0IGZvciB0aGUgQk8g dG8gYmVjb21lIHVubG9ja2VkLgo+Cj4gV2hlbiB3ZSBvbmx5IHJldHVybiBpbiBjYXNlIG9mIGEg ZGVhZGxvY2sgdGhlIG90aGVyIHRocmVhZCBjYW4gY29udGludWUgd2l0aCBpdHMgZXZpY3Rpb24g d2hpbGUgd2UgcmVhY3F1aXJlIGFsbCBsb29rcyBkdXJpbmcgRUFHQUlOIGhhbmRsaW5nLgo+Cj4g RXZlbiBkaXJlY3RseSB1bmxvY2tpbmcgdGhlIEJPIGFzIEkgZG8gaGVyZSBpcyBhIGJpdCBxdWVz dGlvbmFibGUuIEJ1dCBJIGNvdWxkbid0IGdldCB0aGUgb3JpZ2luYWwgbG9naWMgd2l0aCBmaW5k aW5nIGEgbmV3IEJPIHRvIGV2aWN0IHRvIHdvcmsgY29ycmVjdGx5LCB0aGF0J3Mgd2h5IEkgaGF2 ZSB0aGUgVE9ETyBjb21tZW50IGluIHRoZSBmdW5jdGlvbiBpdHNlbGYgYXMgd2VsbC4KPgo+IENo cmlzdGlhbi4KPgo+PiAtRGF2aWQKPj4+ICsgICAgICAgICAgICAgICBpZiAoYnVzeV9ibykKPj4+ ICsgICAgICAgICAgICAgICAgICAgICAgIHR0bV9ib19wdXQoYnVzeV9ibyk7Cj4+PiArICAgICAg ICAgICAgICAgcmV0dXJuIHJldDsKPj4+ICAgICAgICAgICB9Cj4+Pgo+Pj4gICAgICAgICAgIGty ZWZfZ2V0KCZiby0+bGlzdF9rcmVmKTsKPj4+IEBAIC05MTEsNyArOTYzLDggQEAgc3RhdGljIGlu dCB0dG1fYm9fbWVtX2ZvcmNlX3NwYWNlKHN0cnVjdAo+Pj4gdHRtX2J1ZmZlcl9vYmplY3QgKmJv LAo+Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0Owo+Pj4gICAgICAgICAg ICAgICAgICAgaWYgKG1lbS0+bW1fbm9kZSkKPj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7Cj4+PiAtICAgICAgICAgICAgICAgcmV0ID0gdHRtX21lbV9ldmljdF9maXJzdChiZGV2 LCBtZW0tPm1lbV90eXBlLCBwbGFjZSwKPj4+IGN0eCk7Cj4+PiArICAgICAgICAgICAgICAgcmV0 ID0gdHRtX21lbV9ldmljdF9maXJzdChiZGV2LCBtZW0tPm1lbV90eXBlLCBwbGFjZSwKPj4+IGN0 eCwKPj4+ICsgYm8tPnJlc3YtPmxvY2suY3R4KTsKPj4+ICAgICAgICAgICAgICAgICAgIGlmICh1 bmxpa2VseShyZXQgIT0gMCkpCj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBy ZXQ7Cj4+PiAgICAgICAgICAgfSB3aGlsZSAoMSk7Cj4+PiBAQCAtMTQyNiw3ICsxNDc5LDggQEAg c3RhdGljIGludCB0dG1fYm9fZm9yY2VfbGlzdF9jbGVhbihzdHJ1Y3QKPj4+IHR0bV9ib19kZXZp Y2UgKmJkZXYsCj4+PiAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IFRUTV9NQVhfQk9fUFJJT1JJ VFk7ICsraSkgewo+Pj4gICAgICAgICAgICAgICAgICAgd2hpbGUgKCFsaXN0X2VtcHR5KCZtYW4t PmxydVtpXSkpIHsKPj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bpbl91bmxvY2soJmds b2ItPmxydV9sb2NrKTsKPj4+IC0gICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHR0bV9tZW1f ZXZpY3RfZmlyc3QoYmRldiwgbWVtX3R5cGUsCj4+PiBOVUxMLCAmY3R4KTsKPj4+ICsgICAgICAg ICAgICAgICAgICAgICAgIHJldCA9IHR0bV9tZW1fZXZpY3RfZmlyc3QoYmRldiwgbWVtX3R5cGUs Cj4+PiBOVUxMLCAmY3R4LAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBOVUxMKTsKPj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJl dCkKPj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0Owo+Pj4g ICAgICAgICAgICAgICAgICAgICAgICAgICBzcGluX2xvY2soJmdsb2ItPmxydV9sb2NrKTsgQEAg LTE3OTcsNwo+Pj4gKzE4NTEsOCBAQCBpbnQgdHRtX2JvX3N3YXBvdXQoc3RydWN0IHR0bV9ib19n bG9iYWwgKmdsb2IsIHN0cnVjdAo+Pj4gdHRtX29wZXJhdGlvbl9jdHggKmN0eCkKPj4+ICAgICAg ICAgICBzcGluX2xvY2soJmdsb2ItPmxydV9sb2NrKTsKPj4+ICAgICAgICAgICBmb3IgKGkgPSAw OyBpIDwgVFRNX01BWF9CT19QUklPUklUWTsgKytpKSB7Cj4+PiAgICAgICAgICAgICAgICAgICBs aXN0X2Zvcl9lYWNoX2VudHJ5KGJvLCAmZ2xvYi0+c3dhcF9scnVbaV0sIHN3YXApIHsKPj4+IC0g ICAgICAgICAgICAgICAgICAgICAgIGlmICh0dG1fYm9fZXZpY3Rfc3dhcG91dF9hbGxvd2FibGUo Ym8sIGN0eCwKPj4+ICZsb2NrZWQpKSB7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgICBpZiAo dHRtX2JvX2V2aWN0X3N3YXBvdXRfYWxsb3dhYmxlKGJvLCBjdHgsCj4+PiAmbG9ja2VkLAo+Pj4g KyBOVUxMKSkgewo+Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IDA7 Cj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4+PiAgICAgICAg ICAgICAgICAgICAgICAgICAgIH0KPj4+IC0tCj4+PiAyLjE3LjEKPj4+Cj4gX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBhbWQtZ2Z4IG1haWxpbmcgbGlz dAo+IGFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4CgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwphbWQtZ2Z4IG1haWxpbmcgbGlzdAphbWQtZ2Z4QGxp c3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2FtZC1nZng=