From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH] drm/i915: Boost GPU clocks if we miss the pageflip's vblank Date: Tue, 22 Aug 2017 20:02:04 +0300 Message-ID: <20170822170204.GJ4914@intel.com> References: <20170817123706.6777-1-chris@chris-wilson.co.uk> <150333086182.13047.2873367164613541928@mail.alporthouse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id F06AD6E41C for ; Tue, 22 Aug 2017 17:02:07 +0000 (UTC) Content-Disposition: inline In-Reply-To: <150333086182.13047.2873367164613541928@mail.alporthouse.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson Cc: intel-gfx@lists.freedesktop.org, Maarten@freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCBBdWcgMjEsIDIwMTcgYXQgMDQ6NTQ6MjFQTSArMDEwMCwgQ2hyaXMgV2lsc29uIHdy b3RlOgo+IFF1b3RpbmcgQ2hyaXMgV2lsc29uICgyMDE3LTA4LTE3IDEzOjM3OjA2KQo+ID4gSWYg d2UgbWlzcyB0aGUgY3VycmVudCB2YmxhbmsgYmVjYXVzZSB0aGUgZ3B1IHdhcyBidXN5LCB0aGF0 IG1heSBjYXVzZSBhCj4gPiBqaXR0ZXIgYXMgdGhlIGZyYW1lIHJhdGUgdGVtcG9yYXJpbHkgZHJv cHMuIFdlIHRyeSB0byBsaW1pdCB0aGUgaW1wYWN0Cj4gPiBvZiB0aGlzIGJ5IHRoZW4gYm9vc3Rp bmcgdGhlIEdQVSBjbG9jayB0byBkZWxpdmVyIHRoZSBmcmFtZSBhcyBxdWlja2x5Cj4gPiBhcyBw b3NzaWJsZS4gT3JpZ2luYWxseSBkb25lIGluIGNvbW1pdCA2YWQ3OTBjMGY1YWMgKCJkcm0vaTkx NTogQm9vc3QgR1BVCj4gPiBmcmVxdWVuY3kgaWYgd2UgZGV0ZWN0IG91dHN0YW5kaW5nIHBhZ2Vm bGlwcyIpIGJ1dCB3YXMgbmV2ZXIgZm9yd2FyZAo+ID4gcG9ydGVkIHRvIGF0b21pYyBhbmQgZmlu YWxseSBkcm9wcGVkIGluIGNvbW1pdCBmZDNhNDAyNDJlODcgKCJkcm0vaTkxNToKPiA+IFJpcCBv dXQgbGVnYWN5IHBhZ2VfZmxpcCBjb21wbGV0aW9uL2lycSBoYW5kbGluZyIpLgo+ID4gCj4gPiBS ZWZlcmVuY2VzOiBodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL3Nob3dfYnVnLmNnaT9pZD0x MDIxOTkKPiA+IFNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29u LmNvLnVrPgo+ID4gQ2M6IE1hYXJ0ZW4gTGFua2hvcnN0IDxtYWFydGVuLmxhbmtob3JzdEBsaW51 eC5pbnRlbC5jb20+Cj4gPiBDYzogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4 LmludGVsLmNvbT4KPiA+IENjOiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGludGVsLmNv bT4KPiAKPiBFaXRoZXIgb2YgeW91IGxpa2UgdG8gYWNrIHRoZSByZXR1cm4gb2YgdGhpcyBjb2Rl IHRvIHRoZSBkaXNwbGF5Cj4gc3Vic3lzdGVtPyBJdCdzIHN0aWxsIHJlYWN0aW9uYXJ5IGFuZCB3 aWxsIG9uZSBkYXkgYmUgcmVwbGFjZSBieSBhIHBvbnksCj4gb3IgcGVyaGFwcyBzdXBwbGVtZW50 ZWQgYnkgb25lLgoKSXQgbG9va3MgcmVhc29uYWJsZSBlbm91Z2ggdG8gbWUuCgpGb3IgdGhlIHBv bnkgcGFydCBJIHdhcyB3b25kZXJpbmcgaWYgYSBibGluZCBkb25rZXkgd291bGQgYmUgZW5vdWdo LgpTb21ldGhpbmcgbGlrZSAiYm9vc3QgdG8gcnBlIGFzIHNvb24gYXMgYSBmbGlwIGlzIHF1ZXVl ZCIgaXMgd2hhdApJIHdhcyB0aGlua2luZy4gQnV0IEkgc3VwcG9zZSBpdCBvdWdodCB0byBiZSBs aWtlbHkgdGhhdCB3ZSdyZQphbHJlYWR5ID49IHJwZSBpZiB3ZSBoYXZlIHNvbWV0aGluZyBydW5u aW5nIG9uIHRoZSBncHUuIFNvIG1heWJlCnJwZSBqdXN0IGlzbid0IGZhc3QgZW5vdWdoIGZvciB0 aGVzZSBjYXNlcz8KCj4gLUNocmlzCj4gCj4gPiAtLS0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kaXNwbGF5LmMgfCA1OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysKPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCAgICAgfCAgMSAtCj4gPiAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYyAgICAgIHwgNDIgKystLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQo+ID4gIDMgZmlsZXMgY2hhbmdlZCwgNjIgaW5zZXJ0aW9ucygrKSwgNDAgZGVs ZXRpb25zKC0pCj4gPiAKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiA+IGlu ZGV4IDBlOTNlYzIwMWZlMy4uN2Q1YjE5NTUzNjM3IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kaXNwbGF5LmMKPiA+IEBAIC0xMjYzNiw2ICsxMjYzNiw1NSBAQCBzdGF0aWMgY29u c3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzIGludGVsX2NydGNfZnVuY3MgPSB7Cj4gPiAgICAgICAg IC5zZXRfY3JjX3NvdXJjZSA9IGludGVsX2NydGNfc2V0X2NyY19zb3VyY2UsCj4gPiAgfTsKPiA+ ICAKPiA+ICtzdHJ1Y3Qgd2FpdF9ycHNfYm9vc3Qgewo+ID4gKyAgICAgICBzdHJ1Y3Qgd2FpdF9x dWV1ZV9lbnRyeSB3YWl0Owo+ID4gKwo+ID4gKyAgICAgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGM7 Cj4gPiArICAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVzdDsKPiA+ICt9 Owo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgZG9fcnBzX2Jvb3N0KHN0cnVjdCB3YWl0X3F1ZXVlX2Vu dHJ5ICpfd2FpdCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG1vZGUsIGlu dCBzeW5jLCB2b2lkICprZXkpCj4gPiArewo+ID4gKyAgICAgICBzdHJ1Y3Qgd2FpdF9ycHNfYm9v c3QgKndhaXQgPSBjb250YWluZXJfb2YoX3dhaXQsIHR5cGVvZigqd2FpdCksIHdhaXQpOwo+ID4g KyAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJxID0gd2FpdC0+cmVxdWVzdDsK PiA+ICsKPiA+ICsgICAgICAgZ2VuNl9ycHNfYm9vc3QocnEsIE5VTEwpOwo+ID4gKyAgICAgICBp OTE1X2dlbV9yZXF1ZXN0X3B1dChycSk7Cj4gPiArCj4gPiArICAgICAgIGRybV9jcnRjX3ZibGFu a19wdXQod2FpdC0+Y3J0Yyk7Cj4gPiArCj4gPiArICAgICAgIGxpc3RfZGVsKCZ3YWl0LT53YWl0 LmVudHJ5KTsKPiA+ICsgICAgICAga2ZyZWUod2FpdCk7Cj4gPiArICAgICAgIHJldHVybiAxOwo+ ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBhZGRfcnBzX2Jvb3N0X2FmdGVyX3ZibGFuayhz dHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSkKPiA+ICt7Cj4gPiArICAgICAgIHN0cnVj dCB3YWl0X3Jwc19ib29zdCAqd2FpdDsKPiA+ICsKPiA+ICsgICAgICAgaWYgKCFkbWFfZmVuY2Vf aXNfaTkxNShmZW5jZSkpCj4gPiArICAgICAgICAgICAgICAgcmV0dXJuOwo+ID4gKwo+ID4gKyAg ICAgICBpZiAoZHJtX2NydGNfdmJsYW5rX2dldChjcnRjKSkKPiA+ICsgICAgICAgICAgICAgICBy ZXR1cm47Cj4gPiArCj4gPiArICAgICAgIHdhaXQgPSBrbWFsbG9jKHNpemVvZigqd2FpdCksIEdG UF9LRVJORUwpOwo+ID4gKyAgICAgICBpZiAoIXdhaXQpIHsKPiA+ICsgICAgICAgICAgICAgICBk cm1fY3J0Y192YmxhbmtfcHV0KGNydGMpOwo+ID4gKyAgICAgICAgICAgICAgIHJldHVybjsKPiA+ ICsgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICB3YWl0LT5yZXF1ZXN0ID0gdG9fcmVxdWVzdChk bWFfZmVuY2VfZ2V0KGZlbmNlKSk7Cj4gPiArICAgICAgIHdhaXQtPmNydGMgPSBjcnRjOwo+ID4g Kwo+ID4gKyAgICAgICB3YWl0LT53YWl0LmZ1bmMgPSBkb19ycHNfYm9vc3Q7Cj4gPiArICAgICAg IHdhaXQtPndhaXQuZmxhZ3MgPSAwOwo+ID4gKwo+ID4gKyAgICAgICBhZGRfd2FpdF9xdWV1ZShk cm1fY3J0Y192Ymxhbmtfd2FpdHF1ZXVlKGNydGMpLCAmd2FpdC0+d2FpdCk7Cj4gPiArfQo+ID4g Kwo+ID4gIC8qKgo+ID4gICAqIGludGVsX3ByZXBhcmVfcGxhbmVfZmIgLSBQcmVwYXJlIGZiIGZv ciB1c2FnZSBvbiBwbGFuZQo+ID4gICAqIEBwbGFuZTogZHJtIHBsYW5lIHRvIHByZXBhcmUgZm9y Cj4gPiBAQCAtMTI3MzMsMTIgKzEyNzgyLDIyIEBAIGludGVsX3ByZXBhcmVfcGxhbmVfZmIoc3Ry dWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gPiAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPiA+ ICAKPiA+ICAgICAgICAgaWYgKCFuZXdfc3RhdGUtPmZlbmNlKSB7IC8qIGltcGxpY2l0IGZlbmNp bmcgKi8KPiA+ICsgICAgICAgICAgICAgICBzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZTsKPiA+ICsK PiA+ICAgICAgICAgICAgICAgICByZXQgPSBpOTE1X3N3X2ZlbmNlX2F3YWl0X3Jlc2VydmF0aW9u KCZpbnRlbF9zdGF0ZS0+Y29tbWl0X3JlYWR5LAo+ID4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLT5yZXN2LCBOVUxMLAo+ID4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIEk5 MTVfRkVOQ0VfVElNRU9VVCwKPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEdGUF9LRVJORUwpOwo+ID4gICAgICAgICAgICAgICAgIGlmIChy ZXQgPCAwKQo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPiA+ICsKPiA+ ICsgICAgICAgICAgICAgICBmZW5jZSA9IHJlc2VydmF0aW9uX29iamVjdF9nZXRfZXhjbF9yY3Uo b2JqLT5yZXN2KTsKPiA+ICsgICAgICAgICAgICAgICBpZiAoZmVuY2UpIHsKPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgIGFkZF9ycHNfYm9vc3RfYWZ0ZXJfdmJsYW5rKG5ld19zdGF0ZS0+Y3J0 YywgZmVuY2UpOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZG1hX2ZlbmNlX3B1dChmZW5j ZSk7Cj4gPiArICAgICAgICAgICAgICAgfQo+ID4gKyAgICAgICB9IGVsc2Ugewo+ID4gKyAgICAg ICAgICAgICAgIGFkZF9ycHNfYm9vc3RfYWZ0ZXJfdmJsYW5rKG5ld19zdGF0ZS0+Y3J0YywgbmV3 X3N0YXRlLT5mZW5jZSk7Cj4gPiAgICAgICAgIH0KPiA+ICAKPiA+ICAgICAgICAgcmV0dXJuIDA7 Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+ID4gaW5kZXggZmE0NzI4NTkxOGY0Li5lMDky MzU0YjRkNjMgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYu aAo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiA+IEBAIC0xODQ0 LDcgKzE4NDQsNiBAQCB2b2lkIGdlbjZfcnBzX3Jlc2V0X2VpKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdik7Cj4gPiAgdm9pZCBnZW42X3Jwc19pZGxlKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdik7Cj4gPiAgdm9pZCBnZW42X3Jwc19ib29zdChzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX3JlcXVlc3QgKnJxLAo+ID4gICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaW50ZWxf cnBzX2NsaWVudCAqcnBzKTsKPiA+IC12b2lkIGludGVsX3F1ZXVlX3Jwc19ib29zdF9mb3JfcmVx dWVzdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSk7Cj4gPiAgdm9pZCBnNHhfd21f Z2V0X2h3X3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+ID4gIHZvaWQgdmx2X3dtX2dl dF9od19zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPiA+ICB2b2lkIGlsa193bV9nZXRf aHdfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Bt LmMKPiA+IGluZGV4IGVkNjYyOTM3ZWMzYy4uYzlmYTJlYjE5MDNjIDEwMDY0NAo+ID4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfcG0uYwo+ID4gQEAgLTYxNjksNiArNjE2OSw3IEBAIHZvaWQgZ2VuNl9ycHNf Ym9vc3Qoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpycSwKPiA+ICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IGludGVsX3Jwc19jbGllbnQgKnJwcykKPiA+ICB7Cj4gPiAgICAgICAgIHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gcnEtPmk5MTU7Cj4gPiArICAgICAgIHVuc2ln bmVkIGxvbmcgZmxhZ3M7Cj4gPiAgICAgICAgIGJvb2wgYm9vc3Q7Cj4gPiAgCj4gPiAgICAgICAg IC8qIFRoaXMgaXMgaW50ZW50aW9uYWxseSByYWN5ISBXZSBwZWVrIGF0IHRoZSBzdGF0ZSBoZXJl LCB0aGVuCj4gPiBAQCAtNjE3OCwxMyArNjE3OSwxMyBAQCB2b2lkIGdlbjZfcnBzX2Jvb3N0KHN0 cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcnEsCj4gPiAgICAgICAgICAgICAgICAgcmV0dXJu Owo+ID4gIAo+ID4gICAgICAgICBib29zdCA9IGZhbHNlOwo+ID4gLSAgICAgICBzcGluX2xvY2tf aXJxKCZycS0+bG9jayk7Cj4gPiArICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZycS0+bG9jaywg ZmxhZ3MpOwo+ID4gICAgICAgICBpZiAoIXJxLT53YWl0Ym9vc3QgJiYgIWk5MTVfZ2VtX3JlcXVl c3RfY29tcGxldGVkKHJxKSkgewo+ID4gICAgICAgICAgICAgICAgIGF0b21pY19pbmMoJmk5MTUt PnJwcy5udW1fd2FpdGVycyk7Cj4gPiAgICAgICAgICAgICAgICAgcnEtPndhaXRib29zdCA9IHRy dWU7Cj4gPiAgICAgICAgICAgICAgICAgYm9vc3QgPSB0cnVlOwo+ID4gICAgICAgICB9Cj4gPiAt ICAgICAgIHNwaW5fdW5sb2NrX2lycSgmcnEtPmxvY2spOwo+ID4gKyAgICAgICBzcGluX3VubG9j a19pcnFyZXN0b3JlKCZycS0+bG9jaywgZmxhZ3MpOwo+ID4gICAgICAgICBpZiAoIWJvb3N0KQo+ ID4gICAgICAgICAgICAgICAgIHJldHVybjsKPiA+ICAKPiA+IEBAIC05MTMyLDQzICs5MTMzLDYg QEAgaW50IGludGVsX2ZyZXFfb3Bjb2RlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwgaW50IHZhbCkKPiA+ICAgICAgICAgICAgICAgICByZXR1cm4gRElWX1JPVU5EX0NMT1NFU1Qo dmFsLCBHVF9GUkVRVUVOQ1lfTVVMVElQTElFUik7Cj4gPiAgfQo+ID4gIAo+ID4gLXN0cnVjdCBy ZXF1ZXN0X2Jvb3N0IHsKPiA+IC0gICAgICAgc3RydWN0IHdvcmtfc3RydWN0IHdvcms7Cj4gPiAt ICAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxOwo+ID4gLX07Cj4gPiAtCj4g PiAtc3RhdGljIHZvaWQgX19pbnRlbF9ycHNfYm9vc3Rfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3Qg KndvcmspCj4gPiAtewo+ID4gLSAgICAgICBzdHJ1Y3QgcmVxdWVzdF9ib29zdCAqYm9vc3QgPSBj b250YWluZXJfb2Yod29yaywgc3RydWN0IHJlcXVlc3RfYm9vc3QsIHdvcmspOwo+ID4gLSAgICAg ICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSA9IGJvb3N0LT5yZXE7Cj4gPiAtCj4g PiAtICAgICAgIGlmICghaTkxNV9nZW1fcmVxdWVzdF9jb21wbGV0ZWQocmVxKSkKPiA+IC0gICAg ICAgICAgICAgICBnZW42X3Jwc19ib29zdChyZXEsIE5VTEwpOwo+ID4gLQo+ID4gLSAgICAgICBp OTE1X2dlbV9yZXF1ZXN0X3B1dChyZXEpOwo+ID4gLSAgICAgICBrZnJlZShib29zdCk7Cj4gPiAt fQo+ID4gLQo+ID4gLXZvaWQgaW50ZWxfcXVldWVfcnBzX2Jvb3N0X2Zvcl9yZXF1ZXN0KHN0cnVj dCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKQo+ID4gLXsKPiA+IC0gICAgICAgc3RydWN0IHJl cXVlc3RfYm9vc3QgKmJvb3N0Owo+ID4gLQo+ID4gLSAgICAgICBpZiAocmVxID09IE5VTEwgfHwg SU5URUxfR0VOKHJlcS0+aTkxNSkgPCA2KQo+ID4gLSAgICAgICAgICAgICAgIHJldHVybjsKPiA+ IC0KPiA+IC0gICAgICAgaWYgKGk5MTVfZ2VtX3JlcXVlc3RfY29tcGxldGVkKHJlcSkpCj4gPiAt ICAgICAgICAgICAgICAgcmV0dXJuOwo+ID4gLQo+ID4gLSAgICAgICBib29zdCA9IGttYWxsb2Mo c2l6ZW9mKCpib29zdCksIEdGUF9BVE9NSUMpOwo+ID4gLSAgICAgICBpZiAoYm9vc3QgPT0gTlVM TCkKPiA+IC0gICAgICAgICAgICAgICByZXR1cm47Cj4gPiAtCj4gPiAtICAgICAgIGJvb3N0LT5y ZXEgPSBpOTE1X2dlbV9yZXF1ZXN0X2dldChyZXEpOwo+ID4gLQo+ID4gLSAgICAgICBJTklUX1dP UksoJmJvb3N0LT53b3JrLCBfX2ludGVsX3Jwc19ib29zdF93b3JrKTsKPiA+IC0gICAgICAgcXVl dWVfd29yayhyZXEtPmk5MTUtPndxLCAmYm9vc3QtPndvcmspOwo+ID4gLX0KPiA+IC0KPiA+ICB2 b2lkIGludGVsX3BtX3NldHVwKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiA+ ICB7Cj4gPiAgICAgICAgIG11dGV4X2luaXQoJmRldl9wcml2LT5ycHMuaHdfbG9jayk7Cj4gPiAt LSAKPiA+IDIuMTQuMQo+ID4gCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KPiBJbnRlbC1nZnggbWFpbGluZyBsaXN0Cj4gSW50ZWwtZ2Z4QGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwo+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vaW50ZWwtZ2Z4CgotLSAKVmlsbGUgU3lyasOkbMOkCkludGVsIE9UQwpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBs aXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK