From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Zhang, Jerry (Junwei)" Subject: Re: [PATCH 2/3] drm/amdgpu: allocate gart memory when it's required (v2) Date: Thu, 28 Jun 2018 10:03:24 +0800 Message-ID: <5B3441EC.2010209@amd.com> References: <1530002116-7019-1-git-send-email-Jerry.Zhang@amd.com> <1530002116-7019-2-git-send-email-Jerry.Zhang@amd.com> <1d4546ba-c3f3-c512-3d87-31ed34eb3896@amd.com> <5B32EB77.7000906@amd.com> <8cce28ba-4fca-7afe-860f-e374f30f043f@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <8cce28ba-4fca-7afe-860f-e374f30f043f-5C7GfCeVMHo@public.gmane.org> 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: Felix Kuehling , amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: michel.daenzer-5C7GfCeVMHo@public.gmane.org, christian.koenig-5C7GfCeVMHo@public.gmane.org T24gMDYvMjgvMjAxOCAxMjo1MiBBTSwgRmVsaXggS3VlaGxpbmcgd3JvdGU6Cj4gT24gMjAxOC0w Ni0yNiAwOTo0MiBQTSwgWmhhbmcsIEplcnJ5IChKdW53ZWkpIHdyb3RlOgo+Pgo+PiBCVFcsIGtm ZDJrZ2RfY2FsbHMga2ZkMmtnZCBsb29rcyBkdXBsaWNhdGVkIGluIGFtZGtmZF9nZnhfdjcvOC85 LmMKPj4gd2UgbWF5IGluaXRpYWxpemUgaXQgaW4gYSBjb21tb24gcGxhY2UoYXQgbGVhc3QgZm9y IGNvbW1vbiBtZW1iZXJzKS4KPj4gSWYgaXQgaGFzIG90aGVyIHB1cnBvc2UsIHBsZWFzZSBpZ25v cmUgdGhhdC4KPgo+IFNvbWUgb2YgdGhlIGZ1bmN0aW9uIHBvaW50ZXJzIGluIGtmZDJrZ2RfY2Fs bHMgYXJlIEhXLXNwZWNpZmljIChzdGF0aWMKPiBmdW5jdGlvbnMgaW1wbGVtZW50ZWQgaW4gYW1k Z3B1X2FtZGtmZF9nZnhfdls3ODldLmMpLiBUaGVyZWZvcmUgdGhleSBhcmUKPiBub3QgcmVhbGx5 IGR1cGxpY2F0ZXMuIFRoZXkgbWF5IGxvb2sgdGhlIHNhbWUgaW4gdGhlIHNvdXJjZSBjb2RlLCBi dXQKPiB0aGV5J2xsIGVuZCB1cCBwb2ludGluZyB0byBkaWZmZXJlbnQgZnVuY3Rpb25zLgoKVGhh bmtzIGZvciB5b3VyIGV4cGxhbmF0aW9uLgpJIHNlZS4KCkp1c3QgYSBzdWdnZXN0aW9uLiBJbiB0 aGlzIGNhc2UsIHdlIG1heSBhZGQgdGhlIHZlcnNpb24gZm9yIGVhY2ggZnVuYwp0byBjbGFyaWZ5 IHRoZSBkaWZmZXJlbnQgSFcgc3VwcG9ydCwgZS5nLiBrZ2RfcHJvZ3JhbV9zaF9tZW1fc2V0dGlu Z3NfdjkuClRoZW4gdGhlIGNvbW1vbiBmdW5jIHdvdWxkIGJlIGlkZW50aWZpZWQgY2xlYXJseSwg bGlrZSBhbGxvY19ndHRfbWVtKCkgZm9yIGFsbCBIV3MuClNvIGRvIEhXLXNwZWNpZmljIGZ1bmMu Cgooc2VlbXMgdG8gdGFsayB0b28gbXVjaCByZWdhcmRsZXNzIG9mIHRoaXMgdGhyZWFkLCB0aGFu a3MgZm9yIHlvdXIgZGlzY3Vzc2lvbikKCkplcnJ5Cgo+Cj4gUmVnYXJkcywKPiAgICBGZWxpeAo+ Cj4+Cj4+IEplcnJ5Cj4+Cj4+Pgo+Pj4gUmVnYXJkcywKPj4+ICAgICBGZWxpeAo+Pj4KPj4+PiAg ICAgICAgcmV0ID0gYW1kZ3B1X2JvX2ttYXAoYm8sIGtwdHIpOwo+Pj4+ICAgICAgICBpZiAocmV0 KSB7Cj4+Pj4gICAgICAgICAgICBwcl9lcnIoIkZhaWxlZCB0byBtYXAgYm8gdG8ga2VybmVsLiBy ZXQgJWRcbiIsIHJldCk7Cj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV9iZW5jaG1hcmsuYwo+Pj4+IGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUv YW1kZ3B1X2JlbmNobWFyay5jCj4+Pj4gaW5kZXggY2I4OGQ3ZS4uMzA3OWVhOCAxMDA2NDQKPj4+ PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYmVuY2htYXJrLmMKPj4+ PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYmVuY2htYXJrLmMKPj4+ PiBAQCAtOTYsMTEgKzk2LDE2IEBAIHN0YXRpYyB2b2lkIGFtZGdwdV9iZW5jaG1hcmtfbW92ZShz dHJ1Y3QKPj4+PiBhbWRncHVfZGV2aWNlICphZGV2LCB1bnNpZ25lZCBzaXplLAo+Pj4+ICAgICAg ICBpZiAodW5saWtlbHkociAhPSAwKSkKPj4+PiAgICAgICAgICAgIGdvdG8gb3V0X2NsZWFudXA7 Cj4+Pj4gICAgICAgIHIgPSBhbWRncHVfYm9fcGluKHNvYmosIHNkb21haW4pOwo+Pj4+IC0gICAg c2FkZHIgPSBhbWRncHVfYm9fZ3B1X29mZnNldChzb2JqKTsKPj4+PiArICAgIGlmIChyKSB7Cj4+ Pj4gKyAgICAgICAgYW1kZ3B1X2JvX3VucmVzZXJ2ZShzb2JqKTsKPj4+PiArICAgICAgICBnb3Rv IG91dF9jbGVhbnVwOwo+Pj4+ICsgICAgfQo+Pj4+ICsgICAgciA9IGFtZGdwdV90dG1fYWxsb2Nf Z2FydCgmc29iai0+dGJvKTsKPj4+PiAgICAgICAgYW1kZ3B1X2JvX3VucmVzZXJ2ZShzb2JqKTsK Pj4+PiAgICAgICAgaWYgKHIpIHsKPj4+PiAgICAgICAgICAgIGdvdG8gb3V0X2NsZWFudXA7Cj4+ Pj4gICAgICAgIH0KPj4+PiArICAgIHNhZGRyID0gYW1kZ3B1X2JvX2dwdV9vZmZzZXQoc29iaik7 Cj4+Pj4gICAgICAgIGJwLmRvbWFpbiA9IGRkb21haW47Cj4+Pj4gICAgICAgIHIgPSBhbWRncHVf Ym9fY3JlYXRlKGFkZXYsICZicCwgJmRvYmopOwo+Pj4+ICAgICAgICBpZiAocikgewo+Pj4+IEBA IC0xMTAsMTEgKzExNSwxNiBAQCBzdGF0aWMgdm9pZCBhbWRncHVfYmVuY2htYXJrX21vdmUoc3Ry dWN0Cj4+Pj4gYW1kZ3B1X2RldmljZSAqYWRldiwgdW5zaWduZWQgc2l6ZSwKPj4+PiAgICAgICAg aWYgKHVubGlrZWx5KHIgIT0gMCkpCj4+Pj4gICAgICAgICAgICBnb3RvIG91dF9jbGVhbnVwOwo+ Pj4+ICAgICAgICByID0gYW1kZ3B1X2JvX3Bpbihkb2JqLCBkZG9tYWluKTsKPj4+PiAtICAgIGRh ZGRyID0gYW1kZ3B1X2JvX2dwdV9vZmZzZXQoZG9iaik7Cj4+Pj4gKyAgICBpZiAocikgewo+Pj4+ ICsgICAgICAgIGFtZGdwdV9ib191bnJlc2VydmUoc29iaik7Cj4+Pj4gKyAgICAgICAgZ290byBv dXRfY2xlYW51cDsKPj4+PiArICAgIH0KPj4+PiArICAgIHIgPSBhbWRncHVfdHRtX2FsbG9jX2dh cnQoJmRvYmotPnRibyk7Cj4+Pj4gICAgICAgIGFtZGdwdV9ib191bnJlc2VydmUoZG9iaik7Cj4+ Pj4gICAgICAgIGlmIChyKSB7Cj4+Pj4gICAgICAgICAgICBnb3RvIG91dF9jbGVhbnVwOwo+Pj4+ ICAgICAgICB9Cj4+Pj4gKyAgICBkYWRkciA9IGFtZGdwdV9ib19ncHVfb2Zmc2V0KGRvYmopOwo+ Pj4+Cj4+Pj4gICAgICAgIGlmIChhZGV2LT5tbWFuLmJ1ZmZlcl9mdW5jcykgewo+Pj4+ICAgICAg ICAgICAgdGltZSA9IGFtZGdwdV9iZW5jaG1hcmtfZG9fbW92ZShhZGV2LCBzaXplLCBzYWRkciwg ZGFkZHIsIG4pOwo+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9h bWRncHVfZGlzcGxheS5jCj4+Pj4gYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVf ZGlzcGxheS5jCj4+Pj4gaW5kZXggMDM2YjZmNy4uN2Q2YTM2YiAxMDA2NDQKPj4+PiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZGlzcGxheS5jCj4+Pj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2Rpc3BsYXkuYwo+Pj4+IEBAIC0xOTQsNiAr MTk0LDEyIEBAIGludCBhbWRncHVfZGlzcGxheV9jcnRjX3BhZ2VfZmxpcF90YXJnZXQoc3RydWN0 Cj4+Pj4gZHJtX2NydGMgKmNydGMsCj4+Pj4gICAgICAgICAgICBnb3RvIHVucmVzZXJ2ZTsKPj4+ PiAgICAgICAgfQo+Pj4+Cj4+Pj4gKyAgICByID0gYW1kZ3B1X3R0bV9hbGxvY19nYXJ0KCZuZXdf YWJvLT50Ym8pOwo+Pj4+ICsgICAgaWYgKHVubGlrZWx5KHIgIT0gMCkpIHsKPj4+PiArICAgICAg ICBEUk1fRVJST1IoIiVwIGJpbmQgZmFpbGVkXG4iLCBuZXdfYWJvKTsKPj4+PiArICAgICAgICBn b3RvIHVucGluOwo+Pj4+ICsgICAgfQo+Pj4+ICsKPj4+PiAgICAgICAgciA9IHJlc2VydmF0aW9u X29iamVjdF9nZXRfZmVuY2VzX3JjdShuZXdfYWJvLT50Ym8ucmVzdiwKPj4+PiAmd29yay0+ZXhj bCwKPj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ3b3JrLT5zaGFyZWRfY291bnQs Cj4+Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmd29yay0+c2hhcmVkKTsKPj4+PiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2ZiLmMKPj4+PiBi L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9mYi5jCj4+Pj4gaW5kZXggNDYyYjdh MS4uY2Q2OGEyZSAxMDA2NDQKPj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9h bWRncHVfZmIuYwo+Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9m Yi5jCj4+Pj4gQEAgLTE3Myw2ICsxNzMsMTQgQEAgc3RhdGljIGludCBhbWRncHVmYl9jcmVhdGVf cGlubmVkX29iamVjdChzdHJ1Y3QKPj4+PiBhbWRncHVfZmJkZXYgKnJmYmRldiwKPj4+PiAgICAg ICAgICAgIGFtZGdwdV9ib191bnJlc2VydmUoYWJvKTsKPj4+PiAgICAgICAgICAgIGdvdG8gb3V0 X3VucmVmOwo+Pj4+ICAgICAgICB9Cj4+Pj4gKwo+Pj4+ICsgICAgcmV0ID0gYW1kZ3B1X3R0bV9h bGxvY19nYXJ0KCZhYm8tPnRibyk7Cj4+Pj4gKyAgICBpZiAocmV0KSB7Cj4+Pj4gKyAgICAgICAg YW1kZ3B1X2JvX3VucmVzZXJ2ZShhYm8pOwo+Pj4+ICsgICAgICAgIGRldl9lcnIoYWRldi0+ZGV2 LCAiJXAgYmluZCBmYWlsZWRcbiIsIGFibyk7Cj4+Pj4gKyAgICAgICAgZ290byBvdXRfdW5yZWY7 Cj4+Pj4gKyAgICB9Cj4+Pj4gKwo+Pj4+ICAgICAgICByZXQgPSBhbWRncHVfYm9fa21hcChhYm8s IE5VTEwpOwo+Pj4+ICAgICAgICBhbWRncHVfYm9fdW5yZXNlcnZlKGFibyk7Cj4+Pj4gICAgICAg IGlmIChyZXQpIHsKPj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUv YW1kZ3B1X29iamVjdC5jCj4+Pj4gYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVf b2JqZWN0LmMKPj4+PiBpbmRleCA3OWNkYmYxLi43ZjdjMjIxIDEwMDY0NAo+Pj4+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9vYmplY3QuYwo+Pj4+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9vYmplY3QuYwo+Pj4+IEBAIC0yNTcsNiArMjU3 LDEzIEBAIGludCBhbWRncHVfYm9fY3JlYXRlX3Jlc2VydmVkKHN0cnVjdAo+Pj4+IGFtZGdwdV9k ZXZpY2UgKmFkZXYsCj4+Pj4gICAgICAgICAgICBkZXZfZXJyKGFkZXYtPmRldiwgIiglZCkga2Vy bmVsIGJvIHBpbiBmYWlsZWRcbiIsIHIpOwo+Pj4+ICAgICAgICAgICAgZ290byBlcnJvcl91bnJl c2VydmU7Cj4+Pj4gICAgICAgIH0KPj4+PiArCj4+Pj4gKyAgICByID0gYW1kZ3B1X3R0bV9hbGxv Y19nYXJ0KCYoKmJvX3B0ciktPnRibyk7Cj4+Pj4gKyAgICBpZiAocikgewo+Pj4+ICsgICAgICAg IGRldl9lcnIoYWRldi0+ZGV2LCAiJXAgYmluZCBmYWlsZWRcbiIsICpib19wdHIpOwo+Pj4+ICsg ICAgICAgIGdvdG8gZXJyb3JfdW5waW47Cj4+Pj4gKyAgICB9Cj4+Pj4gKwo+Pj4+ICAgICAgICBp ZiAoZ3B1X2FkZHIpCj4+Pj4gICAgICAgICAgICAqZ3B1X2FkZHIgPSBhbWRncHVfYm9fZ3B1X29m ZnNldCgqYm9fcHRyKTsKPj4+Pgo+Pj4+IEBAIC0yNzAsNiArMjc3LDggQEAgaW50IGFtZGdwdV9i b19jcmVhdGVfcmVzZXJ2ZWQoc3RydWN0Cj4+Pj4gYW1kZ3B1X2RldmljZSAqYWRldiwKPj4+Pgo+ Pj4+ICAgICAgICByZXR1cm4gMDsKPj4+Pgo+Pj4+ICtlcnJvcl91bnBpbjoKPj4+PiArICAgIGFt ZGdwdV9ib191bnBpbigqYm9fcHRyKTsKPj4+PiAgICBlcnJvcl91bnJlc2VydmU6Cj4+Pj4gICAg ICAgIGFtZGdwdV9ib191bnJlc2VydmUoKmJvX3B0cik7Cj4+Pj4KPj4+PiBAQCAtOTAzLDEyICs5 MTIsNiBAQCBpbnQgYW1kZ3B1X2JvX3Bpbl9yZXN0cmljdGVkKHN0cnVjdCBhbWRncHVfYm8KPj4+ PiAqYm8sIHUzMiBkb21haW4sCj4+Pj4gICAgICAgICAgICBnb3RvIGVycm9yOwo+Pj4+ICAgICAg ICB9Cj4+Pj4KPj4+PiAtICAgIHIgPSBhbWRncHVfdHRtX2FsbG9jX2dhcnQoJmJvLT50Ym8pOwo+ Pj4+IC0gICAgaWYgKHVubGlrZWx5KHIpKSB7Cj4+Pj4gLSAgICAgICAgZGV2X2VycihhZGV2LT5k ZXYsICIlcCBiaW5kIGZhaWxlZFxuIiwgYm8pOwo+Pj4+IC0gICAgICAgIGdvdG8gZXJyb3I7Cj4+ Pj4gLSAgICB9Cj4+Pj4gLQo+Pj4+ICAgICAgICBiby0+cGluX2NvdW50ID0gMTsKPj4+Pgo+Pj4+ ICAgICAgICBkb21haW4gPSBhbWRncHVfbWVtX3R5cGVfdG9fZG9tYWluKGJvLT50Ym8ubWVtLm1l bV90eXBlKTsKPj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1k Z3B1X3Rlc3QuYwo+Pj4+IGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3Rlc3Qu Ywo+Pj4+IGluZGV4IDYyMmFmZmMuLmQ2ZWVlYTEgMTAwNjQ0Cj4+Pj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3Rlc3QuYwo+Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1kZ3B1L2FtZGdwdV90ZXN0LmMKPj4+PiBAQCAtMTAyLDYgKzEwMiwxMSBAQCBzdGF0 aWMgdm9pZCBhbWRncHVfZG9fdGVzdF9tb3ZlcyhzdHJ1Y3QKPj4+PiBhbWRncHVfZGV2aWNlICph ZGV2KQo+Pj4+ICAgICAgICAgICAgICAgIERSTV9FUlJPUigiRmFpbGVkIHRvIHBpbiBHVFQgb2Jq ZWN0ICVkXG4iLCBpKTsKPj4+PiAgICAgICAgICAgICAgICBnb3RvIG91dF9sY2xlYW5fdW5yZXM7 Cj4+Pj4gICAgICAgICAgICB9Cj4+Pj4gKyAgICAgICAgciA9IGFtZGdwdV90dG1fYWxsb2NfZ2Fy dCgmZ3R0X29ialtpXS0+dGJvKTsKPj4+PiArICAgICAgICBpZiAocikgewo+Pj4+ICsgICAgICAg ICAgICBEUk1fRVJST1IoIiVwIGJpbmQgZmFpbGVkXG4iLCBndHRfb2JqW2ldKTsKPj4+PiArICAg ICAgICAgICAgZ290byBvdXRfbGNsZWFuX3VucGluOwo+Pj4+ICsgICAgICAgIH0KPj4+PiAgICAg ICAgICAgIGdhcnRfYWRkciA9IGFtZGdwdV9ib19ncHVfb2Zmc2V0KGd0dF9vYmpbaV0pOwo+Pj4+ Cj4+Pj4gICAgICAgICAgICByID0gYW1kZ3B1X2JvX2ttYXAoZ3R0X29ialtpXSwgJmd0dF9tYXAp Owo+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvYW1kZ3B1X2Rt L2FtZGdwdV9kbS5jCj4+Pj4gYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvYW1kZ3B1X2Rt L2FtZGdwdV9kbS5jCj4+Pj4gaW5kZXggMzE2NTJjMWUuLmQ0MzM0MjggMTAwNjQ0Cj4+Pj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2FtZGdwdV9kbS9hbWRncHVfZG0uYwo+Pj4+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9hbWRncHVfZG0vYW1kZ3B1X2RtLmMK Pj4+PiBAQCAtMzExMCwxMyArMzExMCwyMiBAQCBzdGF0aWMgaW50IGRtX3BsYW5lX2hlbHBlcl9w cmVwYXJlX2ZiKHN0cnVjdAo+Pj4+IGRybV9wbGFuZSAqcGxhbmUsCj4+Pj4gICAgICAgICAgICBk b21haW4gPSBBTURHUFVfR0VNX0RPTUFJTl9WUkFNOwo+Pj4+Cj4+Pj4gICAgICAgIHIgPSBhbWRn cHVfYm9fcGluKHJibywgZG9tYWluKTsKPj4+PiAtICAgIGFtZGdwdV9ib191bnJlc2VydmUocmJv KTsKPj4+PiAtCj4+Pj4gICAgICAgIGlmICh1bmxpa2VseShyICE9IDApKSB7Cj4+Pj4gICAgICAg ICAgICBpZiAociAhPSAtRVJFU1RBUlRTWVMpCj4+Pj4gICAgICAgICAgICAgICAgRFJNX0VSUk9S KCJGYWlsZWQgdG8gcGluIGZyYW1lYnVmZmVyIHdpdGggZXJyb3IgJWRcbiIsCj4+Pj4gcik7Cj4+ Pj4gKyAgICAgICAgYW1kZ3B1X2JvX3VucmVzZXJ2ZShyYm8pOwo+Pj4+ICsgICAgICAgIHJldHVy biByOwo+Pj4+ICsgICAgfQo+Pj4+ICsKPj4+PiArICAgIHIgPSBhbWRncHVfdHRtX2FsbG9jX2dh cnQoJnJiby0+dGJvKTsKPj4+PiArICAgIGlmICh1bmxpa2VseShyICE9IDApKSB7Cj4+Pj4gKyAg ICAgICAgYW1kZ3B1X2JvX3VucGluKHJibyk7Cj4+Pj4gKyAgICAgICAgYW1kZ3B1X2JvX3VucmVz ZXJ2ZShyYm8pOwo+Pj4+ICsgICAgICAgIERSTV9FUlJPUigiJXAgYmluZCBmYWlsZWRcbiIsIHJi byk7Cj4+Pj4gICAgICAgICAgICByZXR1cm4gcjsKPj4+PiAgICAgICAgfQo+Pj4+ICsgICAgYW1k Z3B1X2JvX3VucmVzZXJ2ZShyYm8pOwo+Pj4+ICsKPj4+PiAgICAgICAgYWZiLT5hZGRyZXNzID0g YW1kZ3B1X2JvX2dwdV9vZmZzZXQocmJvKTsKPj4+Pgo+Pj4+ICAgICAgICBhbWRncHVfYm9fcmVm KHJibyk7Cj4+Pgo+Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmFtZC1nZnggbWFpbGluZyBsaXN0CmFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vYW1kLWdmeAo=