From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH v2] drm/i915: Introduce an internal allocator for disposable private objects Date: Mon, 10 Oct 2016 09:25:08 +0100 Message-ID: References: <5c234e90-abfd-301b-5743-2116b15d67c9@linux.intel.com> <20161008083440.25083-1-chris@chris-wilson.co.uk> <0516b5f3-afa7-892d-39d3-fa7905640b34@linux.intel.com> <20161010081900.GC2718@nuc-i3427.alporthouse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0C8AD6E229 for ; Mon, 10 Oct 2016 08:25:30 +0000 (UTC) In-Reply-To: <20161010081900.GC2718@nuc-i3427.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 , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Ck9uIDEwLzEwLzIwMTYgMDk6MTksIENocmlzIFdpbHNvbiB3cm90ZToKPiBPbiBNb24sIE9jdCAx MCwgMjAxNiBhdCAwOToxMTo0OUFNICswMTAwLCBUdnJ0a28gVXJzdWxpbiB3cm90ZToKPj4gT24g MDgvMTAvMjAxNiAwOTozNCwgQ2hyaXMgV2lsc29uIHdyb3RlOgo+Pj4gUXVpdGUgYSBmZXcgb2Yg b3VyIG9iamVjdHMgdXNlZCBmb3IgaW50ZXJuYWwgaGFyZHdhcmUgcHJvZ3JhbW1pbmcgZG8gbm90 Cj4+PiBiZW5lZml0IGZyb20gYmVpbmcgc3dhcHBhYmxlIG9yIGZyb20gYmVpbmcgemVybyBpbml0 aWFsaXNlZC4gQXMgc3VjaAo+Pj4gdGhleSBkbyBub3QgYmVuZWZpdCBmcm9tIHVzaW5nIGEgc2ht ZW1mcyBiYWNraW5nIHN0b3JhZ2UgYW5kIHNpbmNlIHRoZXkKPj4+IGFyZSBpbnRlcm5hbCBhbmQg bmV2ZXIgZGlyZWN0bHkgZXhwb3NlZCB0byB0aGUgdXNlciwgd2UgZG8gbm90IG5lZWQgdG8KPj4+ IHdvcnJ5IGFib3V0IHByb3ZpZGluZyBhIGZpbHAuIEZvciB0aGVzZSB3ZSBjYW4gdXNlIGFuCj4+ PiBkcm1faTkxNV9nZW1fb2JqZWN0IHdyYXBwZXIgYXJvdW5kIGEgc2dfdGFibGUgb2YgcGxhaW4g c3RydWN0IHBhZ2UuIFRoZXkKPj4+IGFyZSBub3Qgc3dhcCBiYWNrZWQgYW5kIG5vdCBhdXRvbWF0 aWNhbGx5IHBpbm5lZC4gSWYgdGhleSBhcmUgcmVhcGVkCj4+PiBieSB0aGUgc2hyaW5rZXIsIHRo ZSBwYWdlcyBhcmUgcmVsZWFzZWQgYW5kIHRoZSBjb250ZW50cyBkaXNjYXJkZWQuIEZvcgo+Pj4g dGhlIGludGVybmFsIHVzZSBjYXNlLCB0aGlzIGlzIGZpbmUgYXMgZm9yIGV4YW1wbGUsIHJpbmdi dWZmZXJzIGFyZQo+Pj4gcGlubmVkIGZyb20gYmVpbmcgd3JpdHRlbiBieSBhIHJlcXVlc3QgdG8g YmUgcmVhZCBieSB0aGUgaGFyZHdhcmUuIE9uY2UKPj4+IHRoZXkgYXJlIGlkbGUsIHRoZXkgY2Fu IGJlIGRpc2NhcmRlZCBlbnRpcmVseS4gQXMgc3VjaCB0aGV5IGFyZSBhIGdvb2QKPj4+IG1hdGNo IGZvciBleGVjbGlzdCByaW5nYnVmZmVycyBhbmQgYSBzbWFsbCB2YXJpZXR5IG9mIG90aGVyIGlu dGVybmFsCj4+PiBvYmplY3RzLgo+Pj4KPj4+IEluIHRoZSBmaXJzdCBpdGVyYXRpb24sIHRoaXMg aXMgbGltaXRlZCB0byB0aGUgc2NyYXRjaCBiYXRjaCBidWZmZXJzIHdlCj4+PiB1c2UgKGZvciBj b21tYW5kIHBhcnNpbmcgYW5kIHN0YXRlIGluaXRpYWxpc2F0aW9uKS4KPj4+Cj4+PiB2MjogQWxs b2NhdGUgcGh5c2ljYWxseSBjb250aWd1b3VzIHBhZ2VzLCB3aGVyZSBwb3NzaWJsZS4KPj4gU2lu Y2UgdGhlIGFsbG9jYXRvciB3aWxsIGJlIHVzZWQgY29uc3RhbnRseSBhdCBydW50aW1lLCBteQo+ PiByZWNvbGxlY3Rpb24gaXMgdGhhdCBoaWdoZXIgb3JkZXIgYWxsb2NhdGlvbnMgY2FuIGVhc2ls eSBiZWNvbWUgbmV4dAo+PiB0byBpbXBvc3NpYmxlLCBzbyBJIGFtIHdvbmRlcmluZyB3aHk/IEFs c28sIG9uIHlvdXIgbGFzdCByZXBseSB5b3UKPj4gZGlkIG5vdCB3cml0ZSB3aHkgeW91IHRoaW5r IHRoaXMgaXMgaW50ZXJlc3RpbmcgdG8gdHJ5Pwo+Pgo+Pj4gU2lnbmVkLW9mZi1ieTogQ2hyaXMg V2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4+PiBDYzogVHZydGtvIFVyc3VsaW4g PHR2cnRrby51cnN1bGluQGxpbnV4LmludGVsLmNvbT4KPj4+IC0tLQo+Pj4gICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9NYWtlZmlsZSAgICAgICAgICAgICAgICB8ICAgMSArCj4+PiAgIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggICAgICAgICAgICAgIHwgICA1ICsKPj4+ICAgZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fYmF0Y2hfcG9vbC5jICAgfCAgMjggKystLS0KPj4+ICAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1faW50ZXJuYWwuYyAgICAgfCAxNjIgKysrKysr KysrKysrKysrKysrKysrKysrKysrCj4+PiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt X3JlbmRlcl9zdGF0ZS5jIHwgICAyICstCj4+PiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2VuZ2luZV9jcy5jICAgICAgIHwgICAyICstCj4+PiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX3JpbmdidWZmZXIuYyAgICAgIHwgIDE0ICsrLQo+Pj4gICA3IGZpbGVzIGNoYW5nZWQsIDE5 MCBpbnNlcnRpb25zKCspLCAyNCBkZWxldGlvbnMoLSkKPj4+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2ludGVybmFsLmMKPj4+Cj4+PiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9NYWtlZmlsZQo+Pj4gaW5kZXggYTk5OGMyYmNlNzBhLi5iOTRhOTBmMzRkMmQgMTAwNjQ0Cj4+ PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+Pj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvTWFrZWZpbGUKPj4+IEBAIC0zNSw2ICszNSw3IEBAIGk5MTUteSArPSBpOTE1 X2NtZF9wYXJzZXIubyBcCj4+PiAgIAkgIGk5MTVfZ2VtX2V4ZWNidWZmZXIubyBcCj4+PiAgIAkg IGk5MTVfZ2VtX2ZlbmNlLm8gXAo+Pj4gICAJICBpOTE1X2dlbV9ndHQubyBcCj4+PiArCSAgaTkx NV9nZW1faW50ZXJuYWwubyBcCj4+PiAgIAkgIGk5MTVfZ2VtLm8gXAo+Pj4gICAJICBpOTE1X2dl bV9yZW5kZXJfc3RhdGUubyBcCj4+PiAgIAkgIGk5MTVfZ2VtX3JlcXVlc3QubyBcCj4+PiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZHJ2LmgKPj4+IGluZGV4IGZlZTVjYzkyZTJmMi4uYmFkOTdmMWU1MjY1IDEw MDY0NAo+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+Pj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+Pj4gQEAgLTM1MzgsNiArMzUzOCwxMSBA QCBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX3N0b2xlbl9mb3JfcHJlYWxsb2NhdGVkKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsCj4+PiAgIAkJCQkJICAgICAgIHUzMiBndHRfb2Zmc2V0LAo+Pj4gICAJ CQkJCSAgICAgICB1MzIgc2l6ZSk7Cj4+PiArLyogaTkxNV9nZW1faW50ZXJuYWwuYyAqLwo+Pj4g K3N0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICoKPj4+ICtpOTE1X2dlbV9vYmplY3RfY3JlYXRl X2ludGVybmFsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4+PiArCQkJCXVuc2lnbmVkIGludCBz aXplKTsKPj4+ICsKPj4+ICAgLyogaTkxNV9nZW1fc2hyaW5rZXIuYyAqLwo+Pj4gICB1bnNpZ25l ZCBsb25nIGk5MTVfZ2VtX3NocmluayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs Cj4+PiAgIAkJCSAgICAgIHVuc2lnbmVkIGxvbmcgdGFyZ2V0LAo+Pj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2JhdGNoX3Bvb2wuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtX2JhdGNoX3Bvb2wuYwo+Pj4gaW5kZXggY2IyNWNhZDMzMThjLi4zOTM0 YzkxMDNjZjIgMTAwNjQ0Cj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9i YXRjaF9wb29sLmMKPj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2JhdGNo X3Bvb2wuYwo+Pj4gQEAgLTk3LDkgKzk3LDkgQEAgaTkxNV9nZW1fYmF0Y2hfcG9vbF9nZXQoc3Ry dWN0IGk5MTVfZ2VtX2JhdGNoX3Bvb2wgKnBvb2wsCj4+PiAgIAkJCXNpemVfdCBzaXplKQo+Pj4g ICB7Cj4+PiAgIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gTlVMTDsKPj4+IC0J c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKnRtcCwgKm5leHQ7Cj4+PiArCXN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0ICp0bXA7Cj4+PiAgIAlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0Owo+Pj4g LQlpbnQgbjsKPj4+ICsJaW50IG4sIHJldDsKPj4+ICAgCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnBv b2wtPmVuZ2luZS0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4+PiBAQCAtMTEyLDE5ICsxMTIs MTIgQEAgaTkxNV9nZW1fYmF0Y2hfcG9vbF9nZXQoc3RydWN0IGk5MTVfZ2VtX2JhdGNoX3Bvb2wg KnBvb2wsCj4+PiAgIAkJbiA9IEFSUkFZX1NJWkUocG9vbC0+Y2FjaGVfbGlzdCkgLSAxOwo+Pj4g ICAJbGlzdCA9ICZwb29sLT5jYWNoZV9saXN0W25dOwo+Pj4gLQlsaXN0X2Zvcl9lYWNoX2VudHJ5 X3NhZmUodG1wLCBuZXh0LCBsaXN0LCBiYXRjaF9wb29sX2xpbmspIHsKPj4+ICsJbGlzdF9mb3Jf ZWFjaF9lbnRyeSh0bXAsIGxpc3QsIGJhdGNoX3Bvb2xfbGluaykgewo+Pj4gICAJCS8qIFRoZSBi YXRjaGVzIGFyZSBzdHJpY3RseSBMUlUgb3JkZXJlZCAqLwo+Pj4gICAJCWlmICghaTkxNV9nZW1f YWN0aXZlX2lzX2lkbGUoJnRtcC0+bGFzdF9yZWFkW3Bvb2wtPmVuZ2luZS0+aWRdLAo+Pj4gICAJ CQkJCSAgICAgJnRtcC0+YmFzZS5kZXYtPnN0cnVjdF9tdXRleCkpCj4+PiAgIAkJCWJyZWFrOwo+ Pj4gLQkJLyogV2hpbGUgd2UncmUgbG9vcGluZywgZG8gc29tZSBjbGVhbiB1cCAqLwo+Pj4gLQkJ aWYgKHRtcC0+bWFkdiA9PSBfX0k5MTVfTUFEVl9QVVJHRUQpIHsKPj4+IC0JCQlsaXN0X2RlbCgm dG1wLT5iYXRjaF9wb29sX2xpbmspOwo+Pj4gLQkJCWk5MTVfZ2VtX29iamVjdF9wdXQodG1wKTsK Pj4+IC0JCQljb250aW51ZTsKPj4+IC0JCX0KPj4+IC0KPj4+ICAgCQlpZiAodG1wLT5iYXNlLnNp emUgPj0gc2l6ZSkgewo+Pj4gICAJCQlvYmogPSB0bXA7Cj4+PiAgIAkJCWJyZWFrOwo+Pj4gQEAg LTEzMiwxOSArMTI1LDE2IEBAIGk5MTVfZ2VtX2JhdGNoX3Bvb2xfZ2V0KHN0cnVjdCBpOTE1X2dl bV9iYXRjaF9wb29sICpwb29sLAo+Pj4gICAJfQo+Pj4gICAJaWYgKG9iaiA9PSBOVUxMKSB7Cj4+ PiAtCQlpbnQgcmV0Owo+Pj4gLQo+Pj4gLQkJb2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZSgm cG9vbC0+ZW5naW5lLT5pOTE1LT5kcm0sIHNpemUpOwo+Pj4gKwkJb2JqID0gaTkxNV9nZW1fb2Jq ZWN0X2NyZWF0ZV9pbnRlcm5hbCgmcG9vbC0+ZW5naW5lLT5pOTE1LT5kcm0sCj4+PiArCQkJCQkJ ICAgICAgc2l6ZSk7Cj4+PiAgIAkJaWYgKElTX0VSUihvYmopKQo+Pj4gICAJCQlyZXR1cm4gb2Jq Owo+Pj4gLQo+Pj4gLQkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlcyhvYmopOwo+Pj4g LQkJaWYgKHJldCkKPj4+IC0JCQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+Pj4gLQo+Pj4gLQkJb2Jq LT5tYWR2ID0gSTkxNV9NQURWX0RPTlRORUVEOwo+Pj4gICAJfQo+Pj4gKwlyZXQgPSBpOTE1X2dl bV9vYmplY3RfZ2V0X3BhZ2VzKG9iaik7Cj4+PiArCWlmIChyZXQpCj4+PiArCQlyZXR1cm4gRVJS X1BUUihyZXQpOwo+Pj4gKwo+Pj4gICAJbGlzdF9tb3ZlX3RhaWwoJm9iai0+YmF0Y2hfcG9vbF9s aW5rLCBsaXN0KTsKPj4+ICAgCWk5MTVfZ2VtX29iamVjdF9waW5fcGFnZXMob2JqKTsKPj4+ICAg CXJldHVybiBvYmo7Cj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW1faW50ZXJuYWwuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2ludGVybmFsLmMK Pj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+PiBpbmRleCAwMDAwMDAwMDAwMDAuLjI1NWI5MjMy YjhlZgo+Pj4gLS0tIC9kZXYvbnVsbAo+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW1faW50ZXJuYWwuYwo+Pj4gQEAgLTAsMCArMSwxNjIgQEAKPj4+ICsvKgo+Pj4gKyAqIENv cHlyaWdodCDCqSAyMDE0LTIwMTYgSW50ZWwgQ29ycG9yYXRpb24KPj4+ICsgKgo+Pj4gKyAqIFBl cm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29u IG9idGFpbmluZyBhCj4+PiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVk IGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPj4+ICsgKiB0byBkZWFsIGlu IHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1p dGF0aW9uCj4+PiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1 Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4+PiArICogYW5kL29yIHNlbGwgY29waWVz IG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4+PiAr ICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dp bmcgY29uZGl0aW9uczoKPj4+ICsgKgo+Pj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl IGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPj4+ICsgKiBw YXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwg cG9ydGlvbnMgb2YgdGhlCj4+PiArICogU29mdHdhcmUuCj4+PiArICoKPj4+ICsgKiBUSEUgU09G VFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwg RVhQUkVTUyBPUgo+Pj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8g VEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+Pj4gKyAqIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFM TAo+Pj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1Ig QU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4+PiArICogTElBQklMSVRZLCBXSEVUSEVSIElO IEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPj4+ICsg KiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUg VVNFIE9SIE9USEVSIERFQUxJTkdTCj4+PiArICogSU4gVEhFIFNPRlRXQVJFLgo+Pj4gKyAqCj4+ PiArICovCj4+PiArCj4+PiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4+PiArI2luY2x1ZGUgPGRy bS9pOTE1X2RybS5oPgo+Pj4gKyNpbmNsdWRlICJpOTE1X2Rydi5oIgo+Pj4gKwo+Pj4gKyNkZWZp bmUgUVVJRVQgKF9fR0ZQX05PUkVUUlkgfCBfX0dGUF9OT1dBUk4pCj4+PiArCj4+PiArc3RhdGlj IHZvaWQgaW50ZXJuYWxfZnJlZV9wYWdlcyhzdHJ1Y3Qgc2dfdGFibGUgKnN0KQo+Pj4gK3sKPj4+ ICsJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKPj4+ICsKPj4+ICsJZm9yIChzZyA9IHN0LT5zZ2w7 IHNnOyBzZyA9IF9fc2dfbmV4dChzZykpCj4+PiArCQlfX2ZyZWVfcGFnZXMoc2dfcGFnZShzZyks IGdldF9vcmRlcihzZy0+bGVuZ3RoKSk7Cj4+IEZyYWdpbGUgc2luY2Ugd29udCB3b3JrIHRvZ2V0 aGVyIHdpdGggY29hbGVzY2luZywgd2hpY2ggSSBhbSBzYWQgdG8KPj4gc2VlIG5vdCBpbXBsZW1l bnRlZC4gRm9yIHNvbWUgcmVhc29uIGl0IG1ha2VzIG1lIGZlZWwgcmVhbCBnb29kIHdoZW4KPj4g aXQgaXMgdGhlcmUuCj4gV2UgZG8gdGhlIGNvYWxlc2NpbmcuCgpXaGVyZT8gSXQgaXMgbm90IGlu IHRoaXMgcGF0Y2g/IE9uZSBhbGxvY2F0aW9uID09IG9uZSBzdC0+bmVudHMrKy4gSWYgCnRoZSBu ZXh0IGFsbG9jYXRpb24gaXMgY29udGlndW91cyB0aGVyZSBpcyBubyBjb2FsZXNjaW5nLgoKPj4+ ICsJCWRvIHsKPj4+ICsJCQlwYWdlID0gYWxsb2NfcGFnZXMoZ2ZwIHwgKG9yZGVyID8gUVVJRVQg OiAwKSwgb3JkZXIpOwo+Pj4gKwkJCWlmIChwYWdlKQo+Pj4gKwkJCQlicmVhazsKPj4+ICsJCQlp ZiAoIW9yZGVyLS0pCj4+PiArCQkJCWdvdG8gZXJyOwo+Pj4gKwkJfSB3aGlsZSAoMSk7Cj4+IEZl ZWxzIGxpa2UgaXQgY291bGQgaGFtbWVyIGhhcmQgb24gYSBmcmFnbWVudGVkIHN5c3RlbSwgSSBo YXZlIGJpZwo+PiBjb25jZXJucyBhYm91dCB0aGlzLgo+IFlvdSBkaWQgbm90aWNlIHRoYXQgdGhl c2Ugd2VyZSBtYXJrZWQgYXMgdGVtcG9yYXJ5IGFsbG9jYXRpb25zIChiZWNhdXNlCj4gdGhleSBh cmUgcmVjbGFpbWVkIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSksIGFuZCBvbiBhbiBhbHJlYWR5IGZy YWdlbWVudGVkCj4gc3lzdGVtIHdlIGRvIHRoZSByaWdodCB0aGluZyBhbnl3YXk/CgpZb3UgdHJ5 IHNtYWxsZXIgYW5kIHRoZW4gZm9yIHRoZSBuZXh0IGFsbG9jYXRpb24gc3RhcnQgZnJvbSB0aGUg aW5pdGlhbCAKb3JkZXIgd2hpY2ggZGlkIG5vdCB3b3JrIHByZXZpb3VzbHkuCgpSZWdhcmRzLAoK VHZydGtvCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K SW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==