From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH v5 1/2] drm/i915: Fix failure paths around initial fbdev allocation Date: Thu, 15 Oct 2015 20:34:23 +0300 Message-ID: <20151015173423.GK26517@intel.com> References: <20151013150440.GR26517@intel.com> <20151015171435.GA17598@wunner.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTP id 4A03F6E3B3 for ; Thu, 15 Oct 2015 10:34:27 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20151015171435.GA17598@wunner.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Lukas Wunner Cc: Jani Nikula , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBPY3QgMTUsIDIwMTUgYXQgMDc6MTQ6MzVQTSArMDIwMCwgTHVrYXMgV3VubmVyIHdy b3RlOgo+IEhpIFZpbGxlLAo+IAo+IE9uIFR1ZSwgT2N0IDEzLCAyMDE1IGF0IDA2OjA0OjQwUE0g KzAzMDAsIFZpbGxlIFN5cmrDpGzDpCB3cm90ZToKPiA+IE9uIFR1ZSwgSnVuIDMwLCAyMDE1IGF0 IDEwOjA2OjI3QU0gKzAxMDAsIEx1a2FzIFd1bm5lciB3cm90ZToKPiA+ID4gRnJvbTogVHZydGtv IFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KPiA+ID4gCj4gPiA+IFdlIGhhZCB0 d28gZmFpbHVyZSBtb2RlcyBoZXJlOgo+ID4gPiAKPiA+ID4gMS4KPiA+ID4gRGVhZGxvY2sgaW4g aW50ZWxmYl9hbGxvYyBmYWlsdXJlIHBhdGggd2hlcmUgaXQgY2FsbHMKPiA+ID4gZHJtX2ZyYW1l YnVmZmVyX3JlbW92ZSwgd2hpY2ggZ3JhYnMgdGhlIHN0cnVjdCBtdXRleCBhbmQgaW50ZWxmYl9j cmVhdGUKPiA+ID4gKGNhbGxlciBvZiBpbnRlbGZiX2FsbG9jKSB3YXMgYWxyZWFkeSBob2xkaW5n IGl0Lgo+ID4gPiAKPiA+ID4gMi4KPiA+ID4gRGVhZGxvY2sgaW4gaW50ZWxmYl9jcmVhdGUgZmFp bHVyZSBwYXRoIHdoZXJlIGl0IGNhbGxzCj4gPiA+IGRybV9mcmFtZWJ1ZmZlcl91bnJlZmVyZW5j ZSwgd2hpY2ggZ3JhYnMgdGhlIHN0cnVjdCBtdXRleCBhbmQKPiA+ID4gaW50ZWxmYl9jcmVhdGUg d2FzIGFscmVhZHkgaG9sZGluZyBpdC4KPiA+ID4gCj4gPiA+IHYyOgo+ID4gPiAgICAqIFJlZm9y bWF0IGNvbW1pdCBtc2cgdG8gNzIgY2hhcnMuIChMdWthcyBXdW5uZXIpCj4gPiA+ICAgICogQWRk IHRoaXJkIGZhaWx1cmUgbW9kZS4gKEx1a2FzIFd1bm5lcikKPiA+ID4gCj4gPiA+IHYzOgo+ID4g PiAgICAqIE9uIGZiIGFsbG9jIGZhaWx1cmUsIHVucmVmIGdlbSBvYmplY3Qgd2hlcmUgaXQgZ2V0 cyByZWZlZCwKPiA+ID4gICAgICBmaXggZG91YmxlIHVucmVmIGluIHNlcGFyYXRlIGNvbW1pdC4g KFZpbGxlIFN5cmrDpGzDpCkKPiA+ID4gCj4gPiA+IHY0Ogo+ID4gPiAgICAqIExvY2sgc3RydWN0 IG11dGV4IG9uIHVucmVmLiAoQ2hyaXMgV2lsc29uKQo+ID4gPiAKPiA+ID4gdjU6Cj4gPiA+ICAg ICogUmViYXNlIG9uIGRybS1pbnRlbC1uaWdodGx5IDIwMTV5LTA5bS0wNGQtMDhoLTE5bS0zNXMg VVRDLAo+ID4gPiAgICAgIHJlcGhyYXNlIGNvbW1pdCBtZXNzYWdlLiAoSmFuaSBOaWN1bGEpCj4g PiA+IAo+ID4gPiBUZXN0ZWQtYnk6IFBpZXJyZSBNb3JlYXUgPHBpZXJyZS5tb3Jyb3dAZnJlZS5m cj4KPiA+ID4gICAgIFtNQlAgIDUsMyAyMDA5ICBudmlkaWEgOTQwME0gKyA5NjAwTSBHVCAgIHBy ZS1yZXRpbmFdCj4gPiA+IFRlc3RlZC1ieTogUGF1bCBIb3JkaWllbmtvIDxwdnQuZ29yZEBnbWFp bC5jb20+Cj4gPiA+ICAgICBbTUJQICA2LDIgMjAxMCAgaW50ZWwgSUxLICsgbnZpZGlhIEdUMjE2 ICBwcmUtcmV0aW5hXQo+ID4gPiBUZXN0ZWQtYnk6IFdpbGxpYW0gQnJvd24gPHdpbGxpYW1AYmxh Y2toYXRzLm5ldC5hdT4KPiA+ID4gICAgIFtNQlAgIDgsMiAyMDExICBpbnRlbCBTTkIgKyBhbWQg dHVya3MgICAgIHByZS1yZXRpbmFdCj4gPiA+IFRlc3RlZC1ieTogTHVrYXMgV3VubmVyIDxsdWth c0B3dW5uZXIuZGU+Cj4gPiA+ICAgICBbTUJQICA5LDEgMjAxMiAgaW50ZWwgSVZCICsgbnZpZGlh IEdLMTA3ICBwcmUtcmV0aW5hXQo+ID4gPiBUZXN0ZWQtYnk6IEJydW5vIEJpZXJiYXVtZXIgPGJy dW5vQGJpZXJiYXVtZXIubmV0Pgo+ID4gPiAgICAgW01CUCAxMSwzIDIwMTMgIGludGVsIEhTVyAr IG52aWRpYSBHSzEwNyAgcmV0aW5hXQo+ID4gPiAKPiA+ID4gU2lnbmVkLW9mZi1ieTogVHZydGtv IFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KPiA+ID4gRml4ZXM6IDYwYTVjYTAx NWZmZCAoImRybS9pOTE1OiBBZGQgbG9ja2luZyBhcm91bmQKPiA+ID4gICAgIGZyYW1lYnVmZmVy X3JlZmVyZW5jZXMtLSIpCj4gPiA+IFJlcG9ydGVkLWJ5OiBMdWthcyBXdW5uZXIgPGx1a2FzQHd1 bm5lci5kZT4KPiA+ID4gW0x1a2FzOiBDcmVhdGUgdjMgKyB2NCArIHY1IGJhc2VkIG9uIFR2cnRr bydzIHYyXQo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBMdWthcyBXdW5uZXIgPGx1a2FzQHd1bm5lci5k ZT4KPiA+ID4gQ2M6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgo+ID4g PiBDYzogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KPiA+ ID4gQ2M6IEphbmkgTmlrdWxhIDxqYW5pLm5pa3VsYUBpbnRlbC5jb20+Cj4gPiA+IC0tLQo+ID4g PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmJkZXYuYyB8IDIwICsrKysrKysrKysrKy0t LS0tLS0tCj4gPiA+ICAxIGZpbGUgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlv bnMoLSkKPiA+ID4gCj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9mYmRldi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmJkZXYuYwo+ID4gPiBpbmRl eCA5NjQ3NmQ3Li5lZWUzMzA2IDEwMDY0NAo+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9mYmRldi5jCj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Zi ZGV2LmMKPiA+ID4gQEAgLTExOSw3ICsxMTksNyBAQCBzdGF0aWMgaW50IGludGVsZmJfYWxsb2Mo c3RydWN0IGRybV9mYl9oZWxwZXIgKmhlbHBlciwKPiA+ID4gIHsKPiA+ID4gIAlzdHJ1Y3QgaW50 ZWxfZmJkZXYgKmlmYmRldiA9Cj4gPiA+ICAJCWNvbnRhaW5lcl9vZihoZWxwZXIsIHN0cnVjdCBp bnRlbF9mYmRldiwgaGVscGVyKTsKPiA+ID4gLQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsK PiA+ID4gKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IE5VTEw7Cj4gPiA+ICAJc3RydWN0 IGRybV9kZXZpY2UgKmRldiA9IGhlbHBlci0+ZGV2Owo+ID4gPiAgCXN0cnVjdCBkcm1fbW9kZV9m Yl9jbWQyIG1vZGVfY21kID0ge307Cj4gPiA+ICAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iajsKPiA+ID4gQEAgLTEzNyw2ICsxMzcsOCBAQCBzdGF0aWMgaW50IGludGVsZmJfYWxsb2Mo c3RydWN0IGRybV9mYl9oZWxwZXIgKmhlbHBlciwKPiA+ID4gIAltb2RlX2NtZC5waXhlbF9mb3Jt YXQgPSBkcm1fbW9kZV9sZWdhY3lfZmJfZm9ybWF0KHNpemVzLT5zdXJmYWNlX2JwcCwKPiA+ID4g IAkJCQkJCQkgIHNpemVzLT5zdXJmYWNlX2RlcHRoKTsKPiA+ID4gIAo+ID4gPiArCW11dGV4X2xv Y2soJmRldi0+c3RydWN0X211dGV4KTsKPiA+ID4gKwo+ID4gPiAgCXNpemUgPSBtb2RlX2NtZC5w aXRjaGVzWzBdICogbW9kZV9jbWQuaGVpZ2h0Owo+ID4gPiAgCXNpemUgPSBQQUdFX0FMSUdOKHNp emUpOwo+ID4gPiAgCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfc3RvbGVuKGRldiwgc2l6 ZSk7Cj4gPiA+IEBAIC0xNTgsMTggKzE2MCwyMSBAQCBzdGF0aWMgaW50IGludGVsZmJfYWxsb2Mo c3RydWN0IGRybV9mYl9oZWxwZXIgKmhlbHBlciwKPiA+ID4gIAlyZXQgPSBpbnRlbF9waW5fYW5k X2ZlbmNlX2ZiX29iaihOVUxMLCBmYiwgTlVMTCwgTlVMTCwgTlVMTCk7Cj4gPiA+ICAJaWYgKHJl dCkgewo+ID4gPiAgCQlEUk1fRVJST1IoImZhaWxlZCB0byBwaW4gb2JqOiAlZFxuIiwgcmV0KTsK PiA+ID4gLQkJZ290byBvdXRfZmI7Cj4gPiA+ICsJCWdvdG8gb3V0X3VucmVmOwo+ID4gPiAgCX0K PiA+ID4gIAo+ID4gPiArCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ID4gPiAr Cj4gPiA+ICAJaWZiZGV2LT5mYiA9IHRvX2ludGVsX2ZyYW1lYnVmZmVyKGZiKTsKPiA+ID4gIAo+ ID4gPiAgCXJldHVybiAwOwo+ID4gPiAgCj4gPiA+IC1vdXRfZmI6Cj4gPiA+IC0JZHJtX2ZyYW1l YnVmZmVyX3JlbW92ZShmYik7Cj4gPiA+ICBvdXRfdW5yZWY6Cj4gPiA+ICAJZHJtX2dlbV9vYmpl Y3RfdW5yZWZlcmVuY2UoJm9iai0+YmFzZSk7Cj4gPiAKPiA+IElmIGZiIGluaXQgc3VjY2VlZGVk IGl0IHRvb2sgb3ZlciB0aGUgcmVmLCBubz8gU28gZHJtX2ZyYW1lYnVmZmVyX3JlbW92ZSgpCj4g PiB3aWxsIG5vdyBhdHRlbXB0IHRvIHVucmVmIG9uZSB0b28gbWFueSB0aW1lcy4KPiA+IAo+ID4g VGhpcyB0YWtpbmcgb3ZlciByZWZzIHN0dWZmIGlzIGNvbmZ1c2luZy4gTWF5YmUgaXQgd291bGQg YmUgYmV0dGVyIGlmCj4gPiBldmVyeW9uZSBqdXN0IHRvb2sgYW4gZXh0cmEgcmVmIHdoZW4gdGhl eSBzdGFzaCB0aGUgb2JqIHBvaW50ZXIKPiA+IHNvbWV3aGVyZSwgYW5kIGV2ZXJ5b25lIHdvdWxk IHRoZW4gYWx3YXlzIHJlbGVhc2Ugd2hhdGV2ZXIgcmVmIHRoZXkgb3duCj4gPiBhbmQgbm8gbG9u Z2VyIG5lZWQuCj4gPiAKPiA+ID4gIG91dDoKPiA+ID4gKwltdXRleF91bmxvY2soJmRldi0+c3Ry dWN0X211dGV4KTsKPiA+ID4gKwlpZiAoZmIpCj4gPiA+ICsJCWRybV9mcmFtZWJ1ZmZlcl9yZW1v dmUoZmIpOwo+ID4gPiAgCXJldHVybiByZXQ7Cj4gPiA+ICB9Cj4gPiA+ICAKPiAKPiBIbSwgd2h5 IGRvIHlvdSB0aGluayB3ZSB1bnJlZiBvbmUgdG9vIG1hbnkgdGltZXM/CgpCZWNhdXNlIHRoZSBm YiBub3cgb3ducyB0aGUgcmVmZXJlbmNlLCBzbyBpdCBnZXRzIHVucmVmZmVkIGJ5IHRoZSBmYgou ZGVzdHJveSgpIGhvb2suLi4gSSB0aGluay4KCj4gCj4gQSBiaXQgZnVydGhlciB1cCBpbiB0aGlz IGZ1bmN0aW9uIHdlIGNhbGwgX19pbnRlbF9mcmFtZWJ1ZmZlcl9jcmVhdGUoKQo+IHdoaWNoIHNl dHMgdGhlIHJlZmNvdW50IHRvIDEuIChJdCBjYWxscyBpbnRlbF9mcmFtZWJ1ZmZlcl9pbml0KCks IHdoaWNoCj4gY2FsbHMgZHJtX2ZyYW1lYnVmZmVyX2luaXQoKSwgd2hpY2ggY2FsbHMga3JlZl9p bml0KCZmYi0+cmVmY291bnQpLikKPiAKPiBTbyBpZiBpbnRlbF9waW5fYW5kX2ZlbmNlX2ZiX29i aigpIGZhaWxzLCB3ZSBkbyBuZWVkIHRvIHVucmVmZXJlbmNlIGFuZAo+IHRlYXIgZG93biB0aGUg ZmIuIFRodXMsIGRybV9mcmFtZWJ1ZmZlcl9yZW1vdmUoKSBzZWVtcyByaWdodCBoZXJlIHRvIG1l LgoKSSB3YXNuJ3QgY29tcGxhaW5pbmcgYWJvdXQgdGhlIGZiIHVucmVmLCBidXQgdGhlIGJvIHVu cmVmLgoKPiAKPiBIb3dldmVyLCBiZWNhdXNlIG9mIHlvdXIgb2JqZWN0aW9uIEkndmUgbm90aWNl ZCBub3cgdGhhdCAiaWYgKGZiKSIgc2VlbXMKPiB0byBiZSB3cm9uZywgSSB0aGluayB0aGlzIHNo b3VsZCBiZSAiaWYgKCFJU19FUlJfT1JfTlVMTChmYikpIi4KPiAKPiBCZWNhdXNlIGlmIF9faW50 ZWxfZnJhbWVidWZmZXJfY3JlYXRlKCkgZmFpbGVkLCBmYiB3aWxsIGJlIGEgUFRSX0VSUigpLAo+ IHNvIG5vdCBudWxsLCBhbmQgd2UnZCBjYWxsIGRybV9mcmFtZWJ1ZmZlcl9yZW1vdmUoKSBvbiB0 aGlzLiBJcyB0aGF0Cj4gd2hhdCB5b3UgbWVhbnQ/CgpObywgYnV0IHRoYXQncyBhIGdvb2Qgb2Jz ZXJ2YXRpb24gdG9vLgoKPiAKPiAKPiA+ID4gQEAgLTE4Nyw4ICsxOTIsNiBAQCBzdGF0aWMgaW50 IGludGVsZmJfY3JlYXRlKHN0cnVjdCBkcm1fZmJfaGVscGVyICpoZWxwZXIsCj4gPiA+ICAJaW50 IHNpemUsIHJldDsKPiA+ID4gIAlib29sIHByZWFsbG9jID0gZmFsc2U7Cj4gPiA+ICAKPiA+ID4g LQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cj4gPiA+IC0KPiA+ID4gIAlpZiAoaW50 ZWxfZmIgJiYKPiA+ID4gIAkgICAgKHNpemVzLT5mYl93aWR0aCA+IGludGVsX2ZiLT5iYXNlLndp ZHRoIHx8Cj4gPiA+ICAJICAgICBzaXplcy0+ZmJfaGVpZ2h0ID4gaW50ZWxfZmItPmJhc2UuaGVp Z2h0KSkgewo+ID4gPiBAQCAtMjAzLDcgKzIwNiw3IEBAIHN0YXRpYyBpbnQgaW50ZWxmYl9jcmVh dGUoc3RydWN0IGRybV9mYl9oZWxwZXIgKmhlbHBlciwKPiA+ID4gIAkJRFJNX0RFQlVHX0tNUygi bm8gQklPUyBmYiwgYWxsb2NhdGluZyBhIG5ldyBvbmVcbiIpOwo+ID4gPiAgCQlyZXQgPSBpbnRl bGZiX2FsbG9jKGhlbHBlciwgc2l6ZXMpOwo+ID4gPiAgCQlpZiAocmV0KQo+ID4gPiAtCQkJZ290 byBvdXRfdW5sb2NrOwo+ID4gPiArCQkJcmV0dXJuIHJldDsKPiA+ID4gIAkJaW50ZWxfZmIgPSBp ZmJkZXYtPmZiOwo+ID4gPiAgCX0gZWxzZSB7Cj4gPiA+ICAJCURSTV9ERUJVR19LTVMoInJlLXVz aW5nIEJJT1MgZmJcbiIpOwo+ID4gPiBAQCAtMjE1LDYgKzIxOCw4IEBAIHN0YXRpYyBpbnQgaW50 ZWxmYl9jcmVhdGUoc3RydWN0IGRybV9mYl9oZWxwZXIgKmhlbHBlciwKPiA+ID4gIAlvYmogPSBp bnRlbF9mYi0+b2JqOwo+ID4gPiAgCXNpemUgPSBvYmotPmJhc2Uuc2l6ZTsKPiA+ID4gIAo+ID4g PiArCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKPiA+ID4gKwo+ID4gCj4gPiBJJ20g dGhpbmtpbmcgd2Ugd29uJ3QgZXZlbiBuZWVkIHRoZSBsb2NrIGhlcmUgYW55bW9yZS4gQnV0IG1h eWJlIEknbQo+ID4gbWlzc2luZyBzb21ldGhpbmcuCj4gPiAKPiA+ID4gIAlpbmZvID0gZHJtX2Zi X2hlbHBlcl9hbGxvY19mYmkoaGVscGVyKTsKPiA+ID4gIAlpZiAoSVNfRVJSKGluZm8pKSB7Cj4g PiA+ICAJCXJldCA9IFBUUl9FUlIoaW5mbyk7Cj4gPiA+IEBAIC0yNzYsNyArMjgxLDYgQEAgb3V0 X2Rlc3Ryb3lfZmJpOgo+ID4gPiAgb3V0X3VucGluOgo+ID4gPiAgCWk5MTVfZ2VtX29iamVjdF9n Z3R0X3VucGluKG9iaik7Cj4gPiA+ICAJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJm9iai0+ YmFzZSk7Cj4gPiAKPiA+IEFuZCB0aGlzIHJlZiB3ZSBkb24ndCBvd24gZWl0aGVyIEFGQUlDUy4K PiAKPiBXaHk/IFdlIGRpZCBjYWxsIGludGVsZmJfYWxsb2MoKSBhYm92ZSwgc28gaWYgc29tZXRo aW5nIHN1YnNlcXVlbnRseQo+IGdvZXMgd3JvbmcsIHdlIG5lZWQgdG8gcmV2ZXJ0IHRoZSBzdGVw cyB0aGF0IGludGVsZmJfYWxsb2MoKSBjYXJyaWVkCj4gb3V0LiBUaGUgZHJtX2dlbV9vYmplY3Rf dW5yZWZlcmVuY2UoKSB0aGVyZWZvcmUgc2VlbXMgcmlnaHQgaGVyZSB0byBtZS4KCkhlcmUgdG9v IHRoZSBmYiAoaWYgc3VjY2VzZnVsbHkgY3JlYXRlZCkgbm93IG93bnMgdGhhdCByZWZlcmVuY2Uu Cgo+IAo+IEhvd2V2ZXIgSSdtIHB1enpsZWQgd2h5IHdlIGRvbid0IGNhbGwgZHJtX2ZyYW1lYnVm ZmVyX3JlbW92ZSgpIHVuZGVyCj4gdGhlIG91dF91bnBpbjogbGFiZWwuIEFyZW4ndCB3ZSBsZWFr aW5nIGEgZnJhbWVidWZmZXIgaGVyZSB3aXRob3V0IHRoYXQ/Cj4gCj4gTWF5YmUgeW91J3JlIHJl ZmVycmluZyB0byB0aGUgZmFjdCB0aGF0IHRoaXMgZnVuY3Rpb24gZWl0aGVyIGluaGVyaXRzCj4g dGhlIEJJT1MgZmIgb3IgY3JlYXRlcyBhIG5ldyBmYiB3aXRoIGludGVsZmJfYWxsb2MoKS4gSSdt IG5vdCBzdXJlIGlmCj4gdGhlIGNsZWFudXAgb24gZXJyb3IgaXMgaWRlbnRpY2FsIGluIHRoZXNl IHR3byBjYXNlcy4gTWF5YmUgeW91IG1lYW50Cj4gdGhhdCB3ZSBkb24ndCBvd24gdGhlIHJlZiBp biB0aGUgY2FzZSB0aGF0IHRoZSBmYiB3YXMgaW5oZXJpdGVkIGZyb20KPiBCSU9TPwo+IAo+IAo+ IEJlc3QgcmVnYXJkcywKPiAKPiBMdWthcwo+IAo+ID4gCj4gPiA+IC1vdXRfdW5sb2NrOgo+ID4g PiAgCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ID4gPiAgCXJldHVybiByZXQ7 Cj4gPiA+ICB9Cj4gPiA+IC0tIAo+ID4gPiAyLjEuMAo+ID4gCj4gPiAtLSAKPiA+IFZpbGxlIFN5 cmrDpGzDpAo+ID4gSW50ZWwgT1RDCgotLSAKVmlsbGUgU3lyasOkbMOkCkludGVsIE9UQwpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFp bGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=