From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7E01FC2B9F4 for ; Fri, 25 Jun 2021 19:07:21 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 43F0661962 for ; Fri, 25 Jun 2021 19:07:21 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 43F0661962 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 293586EE38; Fri, 25 Jun 2021 19:07:16 +0000 (UTC) Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id A243B6EE36; Fri, 25 Jun 2021 19:07:14 +0000 (UTC) IronPort-SDR: CYs7AIbZAZRtF0rDYEHvY4daPZzjCvca04iVCRHR9Q6LOVQeQKh8QVpJZNXPve/Y+leT5wkPu0 RSJ9rU0bbpTg== X-IronPort-AV: E=McAfee;i="6200,9189,10026"; a="229328625" X-IronPort-AV: E=Sophos;i="5.83,299,1616482800"; d="scan'208";a="229328625" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Jun 2021 12:07:13 -0700 IronPort-SDR: enOpdsP0uRU400MgCXAML/EWzASMVi+cVR7mSwVOrSPIhvMnf7QHlO5mvjefqlUemx/c0804n6 dRpvYiPdVnIQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.83,299,1616482800"; d="scan'208";a="556942738" Received: from irsmsx603.ger.corp.intel.com ([163.33.146.9]) by orsmga004.jf.intel.com with ESMTP; 25 Jun 2021 12:07:12 -0700 Received: from orsmsx611.amr.corp.intel.com (10.22.229.24) by irsmsx603.ger.corp.intel.com (163.33.146.9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.4; Fri, 25 Jun 2021 20:07:10 +0100 Received: from orsmsx611.amr.corp.intel.com ([10.22.229.24]) by ORSMSX611.amr.corp.intel.com ([10.22.229.24]) with mapi id 15.01.2242.008; Fri, 25 Jun 2021 12:07:09 -0700 From: "Ruhl, Michael J" To: =?utf-8?B?VGhvbWFzIEhlbGxzdHLDtm0=?= , "intel-gfx@lists.freedesktop.org" , "dri-devel@lists.freedesktop.org" Thread-Topic: [PATCH 4/4] drm/i915/gem: Migrate to system at dma-buf map time Thread-Index: AQHXaSc1dzuN1f3cQESNhHfcl61w5ask2PrggACFU4D//5sZkIAAf14A//+K6tCAAIUXgP//i05A Date: Fri, 25 Jun 2021 19:07:08 +0000 Message-ID: References: <20210624183110.22582-1-thomas.hellstrom@linux.intel.com> <20210624183110.22582-5-thomas.hellstrom@linux.intel.com> <5304ae661abb43a0816a485db9d3bbb5@intel.com> <5e9a46340f254928be6264e4e61eeab8@intel.com> <8cffb2f2-4401-2cdf-1ab3-98cc2d879b00@linux.intel.com> <6ca4bd4f3fde427ea8e2b0de61bbde65@intel.com> <3aa6d76f-eb4e-c2c7-0e8c-f87960cbff00@linux.intel.com> In-Reply-To: <3aa6d76f-eb4e-c2c7-0e8c-f87960cbff00@linux.intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.6.0.76 x-originating-ip: [10.1.200.100] MIME-Version: 1.0 Subject: Re: [Intel-gfx] [PATCH 4/4] drm/i915/gem: Migrate to system at dma-buf map time X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "Auld, Matthew" Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" Pi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+RnJvbTogVGhvbWFzIEhlbGxzdHLDtm0gPHRo b21hcy5oZWxsc3Ryb21AbGludXguaW50ZWwuY29tPg0KPlNlbnQ6IEZyaWRheSwgSnVuZSAyNSwg MjAyMSAyOjUwIFBNDQo+VG86IFJ1aGwsIE1pY2hhZWwgSiA8bWljaGFlbC5qLnJ1aGxAaW50ZWwu Y29tPjsgaW50ZWwtDQo+Z2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZzsgZHJpLWRldmVsQGxpc3Rz LmZyZWVkZXNrdG9wLm9yZw0KPkNjOiBBdWxkLCBNYXR0aGV3IDxtYXR0aGV3LmF1bGRAaW50ZWwu Y29tPg0KPlN1YmplY3Q6IFJlOiBbUEFUQ0ggNC80XSBkcm0vaTkxNS9nZW06IE1pZ3JhdGUgdG8g c3lzdGVtIGF0IGRtYS1idWYgbWFwDQo+dGltZQ0KPg0KPkhpLCBNaWtlLA0KPg0KPk9uIDYvMjUv MjEgNzo1NyBQTSwgUnVobCwgTWljaGFlbCBKIHdyb3RlOg0KPj4+IC0tLS0tT3JpZ2luYWwgTWVz c2FnZS0tLS0tDQo+Pj4gRnJvbTogVGhvbWFzIEhlbGxzdHLDtm0gPHRob21hcy5oZWxsc3Ryb21A bGludXguaW50ZWwuY29tPg0KPj4+IFNlbnQ6IEZyaWRheSwgSnVuZSAyNSwgMjAyMSAxOjUyIFBN DQo+Pj4gVG86IFJ1aGwsIE1pY2hhZWwgSiA8bWljaGFlbC5qLnJ1aGxAaW50ZWwuY29tPjsgaW50 ZWwtDQo+Pj4gZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZzsgZHJpLWRldmVsQGxpc3RzLmZyZWVk ZXNrdG9wLm9yZw0KPj4+IENjOiBBdWxkLCBNYXR0aGV3IDxtYXR0aGV3LmF1bGRAaW50ZWwuY29t Pg0KPj4+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggNC80XSBkcm0vaTkxNS9nZW06IE1pZ3JhdGUgdG8g c3lzdGVtIGF0IGRtYS1idWYNCj5tYXANCj4+PiB0aW1lDQo+Pj4NCj4+Pg0KPj4+IE9uIDYvMjUv MjEgNzozOCBQTSwgUnVobCwgTWljaGFlbCBKIHdyb3RlOg0KPj4+Pj4gLS0tLS1PcmlnaW5hbCBN ZXNzYWdlLS0tLS0NCj4+Pj4+IEZyb206IFRob21hcyBIZWxsc3Ryw7ZtIDx0aG9tYXMuaGVsbHN0 cm9tQGxpbnV4LmludGVsLmNvbT4NCj4+Pj4+IFNlbnQ6IEZyaWRheSwgSnVuZSAyNSwgMjAyMSAx MjoxOCBQTQ0KPj4+Pj4gVG86IFJ1aGwsIE1pY2hhZWwgSiA8bWljaGFlbC5qLnJ1aGxAaW50ZWwu Y29tPjsgaW50ZWwtDQo+Pj4+PiBnZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnOyBkcmktZGV2ZWxA bGlzdHMuZnJlZWRlc2t0b3Aub3JnDQo+Pj4+PiBDYzogQXVsZCwgTWF0dGhldyA8bWF0dGhldy5h dWxkQGludGVsLmNvbT4NCj4+Pj4+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggNC80XSBkcm0vaTkxNS9n ZW06IE1pZ3JhdGUgdG8gc3lzdGVtIGF0IGRtYS1idWYNCj4+PiBtYXANCj4+Pj4+IHRpbWUNCj4+ Pj4+DQo+Pj4+PiBIaSwgTWljaGFlbCwNCj4+Pj4+DQo+Pj4+PiB0aGFua3MgZm9yIGxvb2tpbmcg YXQgdGhpcy4NCj4+Pj4+DQo+Pj4+PiBPbiA2LzI1LzIxIDY6MDIgUE0sIFJ1aGwsIE1pY2hhZWwg SiB3cm90ZToNCj4+Pj4+Pj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4+Pj4+Pj4gRnJv bTogZHJpLWRldmVsIDxkcmktZGV2ZWwtYm91bmNlc0BsaXN0cy5mcmVlZGVza3RvcC5vcmc+IE9u DQo+QmVoYWxmDQo+Pj4gT2YNCj4+Pj4+Pj4gVGhvbWFzIEhlbGxzdHLDtm0NCj4+Pj4+Pj4gU2Vu dDogVGh1cnNkYXksIEp1bmUgMjQsIDIwMjEgMjozMSBQTQ0KPj4+Pj4+PiBUbzogaW50ZWwtZ2Z4 QGxpc3RzLmZyZWVkZXNrdG9wLm9yZzsgZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZw0K Pj4+Pj4+PiBDYzogVGhvbWFzIEhlbGxzdHLDtm0gPHRob21hcy5oZWxsc3Ryb21AbGludXguaW50 ZWwuY29tPjsgQXVsZCwNCj4+Pj4+IE1hdHRoZXcNCj4+Pj4+Pj4gPG1hdHRoZXcuYXVsZEBpbnRl bC5jb20+DQo+Pj4+Pj4+IFN1YmplY3Q6IFtQQVRDSCA0LzRdIGRybS9pOTE1L2dlbTogTWlncmF0 ZSB0byBzeXN0ZW0gYXQgZG1hLWJ1Zg0KPm1hcA0KPj4+Pj4gdGltZQ0KPj4+Pj4+PiBVbnRpbCB3 ZSBzdXBwb3J0IHAycCBkbWEgb3IgYXMgYSBjb21wbGVtZW50IHRvIHRoYXQsIG1pZ3JhdGUgZGF0 YQ0KPj4+Pj4+PiB0byBzeXN0ZW0gbWVtb3J5IGF0IGRtYS1idWYgbWFwIHRpbWUgaWYgcG9zc2li bGUuDQo+Pj4+Pj4+DQo+Pj4+Pj4+IFNpZ25lZC1vZmYtYnk6IFRob21hcyBIZWxsc3Ryw7ZtDQo+ PHRob21hcy5oZWxsc3Ryb21AbGludXguaW50ZWwuY29tPg0KPj4+Pj4+PiAtLS0NCj4+Pj4+Pj4g ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2RtYWJ1Zi5jIHwgOSArKysrKysrKy0N Cj4+Pj4+Pj4gMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQ0K Pj4+Pj4+Pg0KPj4+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5 MTVfZ2VtX2RtYWJ1Zi5jDQo+Pj4+Pj4+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVf Z2VtX2RtYWJ1Zi5jDQo+Pj4+Pj4+IGluZGV4IDYxNmMzYTJmMWJhZi4uYTUyZjg4NWJjMDlhIDEw MDY0NA0KPj4+Pj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fZG1h YnVmLmMNCj4+Pj4+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2Rt YWJ1Zi5jDQo+Pj4+Pj4+IEBAIC0yNSw3ICsyNSwxNCBAQCBzdGF0aWMgc3RydWN0IHNnX3RhYmxl DQo+Pj4+PiAqaTkxNV9nZW1fbWFwX2RtYV9idWYoc3RydWN0DQo+Pj4+Pj4+IGRtYV9idWZfYXR0 YWNobWVudCAqYXR0YWNobWUNCj4+Pj4+Pj4gCXN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLCAqZHN0 Ow0KPj4+Pj4+PiAJaW50IHJldCwgaTsNCj4+Pj4+Pj4NCj4+Pj4+Pj4gLQlyZXQgPSBpOTE1X2dl bV9vYmplY3RfcGluX3BhZ2VzX3VubG9ja2VkKG9iaik7DQo+Pj4+Pj4+ICsJcmV0ID0gaTkxNV9n ZW1fb2JqZWN0X2xvY2tfaW50ZXJydXB0aWJsZShvYmosIE5VTEwpOw0KPj4+Pj4+IEhtbSwgSSBi ZWxpZXZlIGluIG1vc3QgY2FzZXMgdGhhdCB0aGUgY2FsbGVyIHNob3VsZCBiZSBob2xkaW5nIHRo ZQ0KPj4+Pj4+IGxvY2sgKG9iamVjdCBkbWEtcmVzdikgb24gdGhpcyBvYmplY3QgYWxyZWFkeS4N Cj4+Pj4+IFllcywgSSBhZ3JlZSwgSW4gcGFydGljdWxhciBmb3Igb3RoZXIgaW5zdGFuY2VzIG9m IG91ciBvd24gZHJpdmVyLMKgIGF0DQo+Pj4+PiBsZWFzdCBzaW5jZSB0aGUgZG1hX3Jlc3YgaW50 cm9kdWN0aW9uLg0KPj4+Pj4NCj4+Pj4+IEJ1dCBJIGFsc28gdGhpbmsgdGhhdCdzIGEgcHJlLWV4 aXN0aW5nIGJ1Zywgc2luY2UNCj4+Pj4+IGk5MTVfZ2VtX29iamVjdF9waW5fcGFnZXNfdW5sb2Nr ZWQoKSB3aWxsIGFsc28gdGFrZSB0aGUgbG9jay4NCj4+Pj4gT3VjaCB5ZXMuICBNaXNzZWQgdGhh dC4NCj4+Pj4NCj4+Pj4+IEkgVGhpbmsgd2UgbmVlZCB0byBpbml0aWFsbHkgbWFrZSB0aGUgZXhw b3J0ZXIgZHluYW1pYy1jYXBhYmxlIHRvDQo+Pj4+PiByZXNvbHZlIHRoaXMsIGFuZCBkcm9wIHRo ZSBsb2NraW5nIGhlcmUgY29tcGxldGVseSwgYXMgZG1hLWJ1ZiBkb2NzIHNheXMNCj4+Pj4+IHRo YXQgd2UncmUgdGhlbiBndWFyYW50ZWVkIHRvIGdldCBjYWxsZWQgd2l0aCB0aGUgb2JqZWN0IGxv Y2sgaGVsZC4NCj4+Pj4+DQo+Pj4+PiBJIGZpZ3VyZSBpZiB3ZSBtYWtlIHRoZSBleHBvcnRlciBk eW5hbWljLCB3ZSBuZWVkIHRvIG1pZ3JhdGUgYWxyZWFkeSBhdA0KPj4+Pj4gZG1hX2J1Zl9waW4g dGltZSBzbyB3ZSBkb24ndCBwaW4gdGhlIG9iamVjdCBpbiB0aGUgd3JvbmcgbG9jYXRpb24uDQo+ Pj4+IFRoZSBleHBvcnRlciBhcyBkeW5hbWljICAob3BzLT5waW4gaXMgYXZhaWxhYmxlKSBpcyBv cHRpb25hbCwgYnV0IGltcG9ydGVyDQo+Pj4+IGR5bmFtaWMgKG9wcy0+bW92ZV9ub3RpZnkpIGlz IHJlcXVpcmVkLg0KPj4+Pg0KPj4+PiBXaXRoIHRoYXQgaW4gbWluZCwgaXQgd291bGQgc2VlbSB0 aGF0IHRoZXJlIGFyZSB0aHJlZSBwb3NzaWJsZQ0KPmNvbWJpbmF0aW9ucw0KPj4+PiBmb3IgdGhl IG1pZ3JhdGUgdG8gYmUgYXR0ZW1wdGVkOg0KPj4+Pg0KPj4+PiAxKSBpbiB0aGUgb3BzLT5waW4g ZnVuY3Rpb24gKGV4cG9ydF9keW5hbWljICE9IGltcG9ydF9keW5hbWljLCBkdXJpbmcNCj4+PiBh dHRhY2gpDQo+Pj4+IDIpIGluIHRoZSBvcHMtPnBpbiBmdW5jdGlvbiAoZXhwb3J0X2R5bmFtaWMg YW5kDQo+Pj4gIUNPTkZJR19ETUFCVUZfTU9WRV9OT1RJRlkpIGR1cmluZyBtYXBwaW5nDQo+Pj4+ IDMpIGFuZCBwb3NzaWJseSBpbiBvcHMtPm1hcF9kbWFfYnVmIChleG9ydF9keW5hbWljIGlhbmQN Cj4+PiBDT05GSUdfRE1BQlVGX01PVkVfTk9USUZZKQ0KPj4+PiBTaW5jZSBvbmUgcG9zc2liaWxp dHkgaGFzIHRvIGJlIGluIHRoZSBtYXBwaW5nIGZ1bmN0aW9uLCBpdCBzZWVtcyB0aGF0IGlmIHdl DQo+Pj4+IGNhbiBmaWd1cmUgb3V0IHRoZSBsb2NraW5nLCB0aGF0IHRoZSBtaWdyYXRlIHNob3Vs ZCBwcm9iYWJseSBiZSBhdmFpbGFibGUNCj4+PiBoZXJlLg0KPj4+PiBNaWtlDQo+Pj4gU28gcGVy aGFwcyBqdXN0IHRvIGluaXRpYWxseSBmaXggdGhlIGJ1Zywgd2UgY291bGQganVzdCBpbXBsZW1l bnQgTk9QDQo+Pj4gcGluKCkgYW5kIHVucGluKCkgY2FsbGJhY2tzIGFuZCBkcm9wIHRoZSBsb2Nr aW5nIGluIG1hcF9hdHRhY2goKSBhbmQNCj4+PiByZXBsYWNlIGl0IHdpdGggYW4gYXNzZXJ0X29i amVjdF9oZWxkKCk7DQo+PiBUaGF0IGlzIHRoZSBzdGlja3kgcGFydCBvZiB0aGUgbW92ZSBub3Rp ZnkgQVBJLg0KPj4NCj4+IElmIHlvdSBkbyB0aGUgYXR0YWNoX2R5bmFtaWMgeW91IGhhdmUgdG8g aGF2ZSBhbiBvcHMgd2l0aCBtb3ZlX25vdGlmeS4NCj4+DQo+PiAoaHR0cHM6Ly9lbGl4aXIuYm9v dGxpbi5jb20vbGludXgvdjUuMTMtcmM3L3NvdXJjZS9kcml2ZXJzL2RtYS1idWYvZG1hLQ0KPmJ1 Zi5jI0w3MzApDQo+Pg0KPj4gSWYgeW91IGRvbid0IGhhdmUgdGhhdCwgaS5lLiBqdXN0IHRoZSBw aW4gaW50ZXJmYWNlLCB0aGUgYXR0YWNoIHdpbGwgYmUNCj4+IHJlamVjdGVkLCBhbmQgeW91IHdp bGwgbm90IGdldCB0aGUgY2FsbGJhY2tzLg0KPg0KPkkgdW5kZXJzdG9vZCB0aGF0IGFzIHRoZSBy ZXF1aXJlbWVudCBmb3IgbW92ZV9ub3RpZnkgaXMgb25seSBpZiB0aGUNCj4qaW1wb3J0ZXIqIGRl Y2xhcmVzIGR5bmFtaWMuIEEgZHluYW1pYyBleHBvcnRlciBjb3VsZCBjaG9vc2Ugd2hldGhlciB0 bw0KPmNhbGwgbW92ZV9ub3RpZnkoKSBvbiBldmljdGlvbiBvciB0byBwaW4gYW5kIG5ldmVyIGV2 aWN0LiBJZiB0aGUNCj5pbXBvcnRlciBpcyBub24tZHluYW1pYywgdGhlIGNvcmUgY2FsbHMgcGlu KCkgYW5kIHRoZSBvbmx5IGNob2ljZSBpcyB0bw0KPnBpbiBhbmQgbmV2ZXIgZXZpY3QuDQo+DQo+ U28gaWYgd2UgdGVtcG9yYXJpbHkgY2hvb3NlIHRvIHBpbiBhbmQgbmV2ZXIgZXZpY3QgZm9yICpl dmVyeXRoaW5nKiwgKGFzDQo+dGhlIGN1cnJlbnQgY29kZSBkb2VzIG5vdyksIEkgdGhpbmsgd2Ug c2hvdWxkIGJlIGdvb2QgZm9yIG5vdywgYW5kIHRoZW4NCj53ZSBjYW4gaW1wbGVtZW50IGFsbCBm YW5jeSBwMnAgYW5kIG1vdmVfbm90aWZ5IHN0dWZmIG9uIHRvcCBvZiB0aGF0Lg0KDQovc2lnaC4N Cg0KWW91IGFyZSBjb3JyZWN0LiAgSSB3YXMgbWlzdGFrZW5seSBwbGFjaW5nIHRoZSBwaW4gQVBJ IChkbWFfYnVmX29wcykgaW4gdGhlDQphdHRhY2hfb3BzLiDwn5iQIE11c3QgYmUgRnJpZGF5Lg0K DQpVcG9uIGZ1cnRoZXIgcmVmbGVjdGlvbiwgSSB0aGluayB0aGF0IHlvdXIgcGF0aCB3aWxsIHdv cmsuDQoNCkhvd2V2ZXIsIGlzIGRvaW5nIGEgcGluICh3aXRoIG5vIGxvY2tpbmcpIGZyb20gdGhl IGRtYV9idWZfbWFwcGluZyBhbnkgZGlmZmVyZW50DQpmcm9tIHVzaW5nIHRoZSBwaW4gQVBJICsg ZXhwb3J0X2R5bmFtaWM/DQoNCk0NCg0KPi9UaG9tYXMNCj4NCj4NCj4+DQo+PiBTbyBJIHRoaW5r IHRoYXQgdGhlIG9ubHkgdGhpbmcgd2UgY2FuIGRvIGZvciBub3cgaXMgdG8gZG9wIHRoZSBsb2Nr aW5nIGFuZCBhZGQNCj50aGUNCj4+DQo+PiBhc3NlcnRfb2JqZWN0X2hlbGQoKTsNCj4+DQo+PiBN DQo+DQo+DQo+DQo+Pg0KPj4+IC9UaG9tYXMNCj4+Pg0KX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxt YW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==