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=-0.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED autolearn=no 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 68EB9C5DF60 for ; Tue, 5 Nov 2019 20:22:02 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 2367D21929 for ; Tue, 5 Nov 2019 20:22:02 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=ffwll.ch header.i=@ffwll.ch header.b="DB9RWO4d" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729707AbfKEUWB (ORCPT ); Tue, 5 Nov 2019 15:22:01 -0500 Received: from mail-oi1-f194.google.com ([209.85.167.194]:45364 "EHLO mail-oi1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725806AbfKEUWA (ORCPT ); Tue, 5 Nov 2019 15:22:00 -0500 Received: by mail-oi1-f194.google.com with SMTP id k2so18762100oij.12 for ; Tue, 05 Nov 2019 12:22:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=kJ/QmiONw/J1ide8QmCrFO9LpvSdfgpzRIFng2Jw4qI=; b=DB9RWO4dZYZTGfAckFGl8vDSfPDdaQ/QjEk/hU671olt9Y3FXIlMxBJuMHNhSEx+1y +ZUlhvLB7QpgLPV/AFtZT4PiVrgnDMKWO9nCWljG9Nsi/ZNexqMf1WdMhvzJEZ4S+4HH 2P+bUsoBcu22z3J9i7SqxWpBh2o1czjevA1/8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=kJ/QmiONw/J1ide8QmCrFO9LpvSdfgpzRIFng2Jw4qI=; b=iOafq8Se6UBKucYkZsDTJr43eGqq1JKoc9IO1PiWtZYoxb02mYS2WlsvtW7uZa5y2W V7r1Y2J7Y0MvVQeZepeQXuRF5i4JG9/VR8W38PF3rJBwtPtu0yngudKxa5mRjgdYoSH9 AeuhG+mt+uSYEVGqG60nLjQkjhsev/Ah/KTcX/8psOwxK7R5SQBDiWSgfdC5NsGxaclY wnVK1OaSZ2t44x0R7Y7NCVD5RekRJAWFFSascEQpcxFO/0fu3hc2oojN9KWQrHtG+Qch pdBhiPN2Fd0XNuLfto7NeOW7Gyy/vE6wTWqUrx6BFCNuk1K+x4+Nxmq6NM59lmCoVvIZ mu7Q== X-Gm-Message-State: APjAAAWDP805WPFnBTdNldqdBrJ027lPuEkLtKyEn5E1r3sANkmsC/Dv E7pEv2SXKMyM6IUAiIRhr6SDHsxlJhT2US5E1i2+OA== X-Google-Smtp-Source: APXvYqyZxGVl4poXtSRvZtdxq7Wur+8kFccBtl3PEV76j3oETOjDMbjpJaT33SPft+J8OIDKbi5KCnTRb9Ulu0IGitc= X-Received: by 2002:a05:6808:4cf:: with SMTP id a15mr727042oie.132.1572985319540; Tue, 05 Nov 2019 12:21:59 -0800 (PST) MIME-Version: 1.0 References: <20191025234834.28214-1-john.stultz@linaro.org> <20191104095823.GD10326@phenom.ffwll.local> <20191105094259.GX10326@phenom.ffwll.local> In-Reply-To: From: Daniel Vetter Date: Tue, 5 Nov 2019 21:21:48 +0100 Message-ID: Subject: Re: [RFC][PATCH 0/2] Allow DMA BUF heaps to be loaded as modules To: John Stultz Cc: lkml , Sandeep Patil , Mike Rapoport , Chenbo Feng , Alistair Strachan , Liam Mark , Yue Hu , dri-devel , "Andrew F . Davis" , Hridya Valsaraju , Andrew Morton , Pratik Patel Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Nov 5, 2019 at 8:48 PM John Stultz wrote: > > On Tue, Nov 5, 2019 at 11:19 AM Daniel Vetter wrote: > > On Tue, Nov 5, 2019 at 6:41 PM John Stultz wrote: > > > On Tue, Nov 5, 2019 at 1:43 AM Daniel Vetter wrote: > > > > > > > > On Mon, Nov 04, 2019 at 10:57:44AM -0800, John Stultz wrote: > > > > > On Mon, Nov 4, 2019 at 1:58 AM Daniel Vetter wrote: > > > > > > On Fri, Oct 25, 2019 at 11:48:32PM +0000, John Stultz wrote: > > > > > So even if the heaps are configured via DT (which at the moment there > > > > > is no such binding, so that's not really a valid method yet), there's > > > > > still the question of if the heap is necessary/makes sense on the > > > > > device. And the DT would only control the availability of the heap > > > > > interface, not if the heap driver is loaded or not. > > > > > > > > Hm I thought the cma regions are configured in DT? How does that work if > > > > it's not using DT? > > > > > > So yea, CMA regions are either configured by DT or setup at build time > > > (I think there's a cmdline option to set it up as well). > > > > > > But the CMA regions and the dmabuf cma heap driver are separate > > > things. The latter uses the former. > > > > Huh, I assumed the plan is that whenever there's a cma region, we want > > to instantiate a dma-buf heap for it? Why/when would we not want to do > > that? > > Not quite. Andrew noted that we may not want to expose all CMA regions > via dmabuf heaps, so right now we only expose the default region. I > have follow on patches that I sent out earlier (which requires a > to-be-finalized DT binding) which allows us to specify which other CMA > regions to expose. Why do we not want to expose them all? I figured if there's a cma heap, then a device you have needs it, and if that's the case you might want to allocate for that device from the heap? Maybe link to the discussion? > > > > > On the HiKey/HiKey960 boards, we have to allocate contiguous buffers > > > > > for the display framebuffer. So gralloc uses ION to allocate from the > > > > > CMA heap. However on the db845c, it has no such restrictions, so the > > > > > CMA heap isn't necessary. > > > > > > > > Why do you have a CMA region for the 2nd board if you don't need it? > > > > _That_ sounds like some serious memory waster, not a few lines of code > > > > loaded for nothing :-) > > > > > > ??? That's not what I said above. If the db845c doesn't need CMA it > > > won't have a CMA region. > > > > > > The issue at hand is that we may want to avoid loading the dmabuf CMA > > > heap driver on a board that doesn't use CMA. > > > > So the CMA core code is also a module, or how does that work? Not > > No. CMA core isn't available as a module. > > > loading the cma dma-buf heap, but keeping all the other cma code > > around feels slightly silly. Do we have numbers that justify this > > silliness? > > I agree that is maybe not the most critical item on the list, but its > one of many that do add up over time. > > Again, I'll defer to Sandeep or other folks on the Google side to help > with the importance here. Mostly I'm trying to ensure there is > functional parity to ION so we don't give folks any reason they could > object to deprecating it. > > > > The main reason I'm only submitting system and CMA is because those > > > are the only two I personally have a user for (HiKey/HiKey960 boards). > > > It's my hope that once we deprecate ION in Android, vendors will > > > migrate and we'll be able to push them to upstream their heaps as > > > well. > > > > I think for upstream I'd want to see those other heaps first. If > > they're mostly driver allocators exposed as heaps, then I think we > > need something different than heap modules, maybe allow dma-buf to > > allocate from drivers instead. But afaiui all such driver allocators > > we have in upstream are cma regions only right now. > > I'm sorry, I'm not sure I understand what you mean here (I'm not sure > what action I should be taking). Could you clarify this point? I'm not sold on the use-case for this, but maybe if I see the actual use-cases I might be swayed. A very basic/minimal "register a new dma-buf heap" function should be all that's really needed for android, so maybe we can start with that? -Daniel -- Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch 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=-0.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=no 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 B546FC47E49 for ; Tue, 5 Nov 2019 20:22:02 +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 81C0E21A49 for ; Tue, 5 Nov 2019 20:22:01 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 81C0E21A49 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ffwll.ch Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 3D0586E8FE; Tue, 5 Nov 2019 20:22:01 +0000 (UTC) Received: from mail-oi1-x243.google.com (mail-oi1-x243.google.com [IPv6:2607:f8b0:4864:20::243]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5BEAB6E8FE for ; Tue, 5 Nov 2019 20:22:00 +0000 (UTC) Received: by mail-oi1-x243.google.com with SMTP id i185so18781919oif.9 for ; Tue, 05 Nov 2019 12:22:00 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=kJ/QmiONw/J1ide8QmCrFO9LpvSdfgpzRIFng2Jw4qI=; b=tNexlj1Vcxa36qMuXFqh3Q7d6yBiI5mGHct4vmyvKQBjaoD43bYKpR+/kLbfnS2d6Z nPV+EsGf9dr7xrIblkaDLD/sYo98PthDAUJbfmst5d9fUoO/Ue0Uq6m3xFyHv/g8UlUx owfzXRc0fH4bbAMVpLnpBkD+i2a6wOq/ASg/YdGoXEmh67ogtuPrsqAMGxYaNIHjKl1+ HMKcmCO8fpRoOY64/1QopkUrtbH5D+/8bqOX1cYe6OMeQV73D+F6jNyZauhTBUR+qdWY COygyJKNt+1b6pbsfKEUSv+vwccQsYm9yqfS9auu8VCYH8G4/+i425SZU0WJqVEhTVww T8AQ== X-Gm-Message-State: APjAAAU3/DhAK2oLByBESRVtiGQu91bQfF9R6oS+yE0cMQwkT4uATohB u2fHPuFJcMBFbIB1FmQwJNUcOdYLvVgJJo1xvxg4Vg== X-Google-Smtp-Source: APXvYqyZxGVl4poXtSRvZtdxq7Wur+8kFccBtl3PEV76j3oETOjDMbjpJaT33SPft+J8OIDKbi5KCnTRb9Ulu0IGitc= X-Received: by 2002:a05:6808:4cf:: with SMTP id a15mr727042oie.132.1572985319540; Tue, 05 Nov 2019 12:21:59 -0800 (PST) MIME-Version: 1.0 References: <20191025234834.28214-1-john.stultz@linaro.org> <20191104095823.GD10326@phenom.ffwll.local> <20191105094259.GX10326@phenom.ffwll.local> In-Reply-To: From: Daniel Vetter Date: Tue, 5 Nov 2019 21:21:48 +0100 Message-ID: Subject: Re: [RFC][PATCH 0/2] Allow DMA BUF heaps to be loaded as modules To: John Stultz X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=kJ/QmiONw/J1ide8QmCrFO9LpvSdfgpzRIFng2Jw4qI=; b=DB9RWO4dZYZTGfAckFGl8vDSfPDdaQ/QjEk/hU671olt9Y3FXIlMxBJuMHNhSEx+1y +ZUlhvLB7QpgLPV/AFtZT4PiVrgnDMKWO9nCWljG9Nsi/ZNexqMf1WdMhvzJEZ4S+4HH 2P+bUsoBcu22z3J9i7SqxWpBh2o1czjevA1/8= X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Sandeep Patil , Chenbo Feng , Alistair Strachan , Liam Mark , lkml , Yue Hu , dri-devel , "Andrew F . Davis" , Hridya Valsaraju , Andrew Morton , Mike Rapoport , Pratik Patel Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Message-ID: <20191105202148.a5w-StdSdXZfus19WPUe2NGsvHht0PjZrBb8mWyV8Ys@z> T24gVHVlLCBOb3YgNSwgMjAxOSBhdCA4OjQ4IFBNIEpvaG4gU3R1bHR6IDxqb2huLnN0dWx0ekBs aW5hcm8ub3JnPiB3cm90ZToKPgo+IE9uIFR1ZSwgTm92IDUsIDIwMTkgYXQgMTE6MTkgQU0gRGFu aWVsIFZldHRlciA8ZGFuaWVsQGZmd2xsLmNoPiB3cm90ZToKPiA+IE9uIFR1ZSwgTm92IDUsIDIw MTkgYXQgNjo0MSBQTSBKb2huIFN0dWx0eiA8am9obi5zdHVsdHpAbGluYXJvLm9yZz4gd3JvdGU6 Cj4gPiA+IE9uIFR1ZSwgTm92IDUsIDIwMTkgYXQgMTo0MyBBTSBEYW5pZWwgVmV0dGVyIDxkYW5p ZWxAZmZ3bGwuY2g+IHdyb3RlOgo+ID4gPiA+Cj4gPiA+ID4gT24gTW9uLCBOb3YgMDQsIDIwMTkg YXQgMTA6NTc6NDRBTSAtMDgwMCwgSm9obiBTdHVsdHogd3JvdGU6Cj4gPiA+ID4gPiBPbiBNb24s IE5vdiA0LCAyMDE5IGF0IDE6NTggQU0gRGFuaWVsIFZldHRlciA8ZGFuaWVsQGZmd2xsLmNoPiB3 cm90ZToKPiA+ID4gPiA+ID4gT24gRnJpLCBPY3QgMjUsIDIwMTkgYXQgMTE6NDg6MzJQTSArMDAw MCwgSm9obiBTdHVsdHogd3JvdGU6Cj4gPiA+ID4gPiBTbyBldmVuIGlmIHRoZSBoZWFwcyBhcmUg Y29uZmlndXJlZCB2aWEgRFQgKHdoaWNoIGF0IHRoZSBtb21lbnQgdGhlcmUKPiA+ID4gPiA+IGlz IG5vIHN1Y2ggYmluZGluZywgc28gdGhhdCdzIG5vdCByZWFsbHkgYSB2YWxpZCBtZXRob2QgeWV0 KSwgdGhlcmUncwo+ID4gPiA+ID4gc3RpbGwgdGhlIHF1ZXN0aW9uIG9mIGlmIHRoZSBoZWFwIGlz IG5lY2Vzc2FyeS9tYWtlcyBzZW5zZSBvbiB0aGUKPiA+ID4gPiA+IGRldmljZS4gQW5kIHRoZSBE VCB3b3VsZCBvbmx5IGNvbnRyb2wgdGhlIGF2YWlsYWJpbGl0eSBvZiB0aGUgaGVhcAo+ID4gPiA+ ID4gaW50ZXJmYWNlLCBub3QgaWYgdGhlIGhlYXAgZHJpdmVyIGlzIGxvYWRlZCBvciBub3QuCj4g PiA+ID4KPiA+ID4gPiBIbSBJIHRob3VnaHQgdGhlIGNtYSByZWdpb25zIGFyZSBjb25maWd1cmVk IGluIERUPyBIb3cgZG9lcyB0aGF0IHdvcmsgaWYKPiA+ID4gPiBpdCdzIG5vdCB1c2luZyBEVD8K PiA+ID4KPiA+ID4gU28geWVhLCBDTUEgcmVnaW9ucyBhcmUgZWl0aGVyIGNvbmZpZ3VyZWQgYnkg RFQgb3Igc2V0dXAgYXQgYnVpbGQgdGltZQo+ID4gPiAoSSB0aGluayB0aGVyZSdzIGEgY21kbGlu ZSBvcHRpb24gdG8gc2V0IGl0IHVwIGFzIHdlbGwpLgo+ID4gPgo+ID4gPiBCdXQgdGhlIENNQSBy ZWdpb25zIGFuZCB0aGUgZG1hYnVmIGNtYSBoZWFwIGRyaXZlciBhcmUgc2VwYXJhdGUKPiA+ID4g dGhpbmdzLiBUaGUgbGF0dGVyIHVzZXMgdGhlIGZvcm1lci4KPiA+Cj4gPiBIdWgsIEkgYXNzdW1l ZCB0aGUgcGxhbiBpcyB0aGF0IHdoZW5ldmVyIHRoZXJlJ3MgYSBjbWEgcmVnaW9uLCB3ZSB3YW50 Cj4gPiB0byBpbnN0YW50aWF0ZSBhIGRtYS1idWYgaGVhcCBmb3IgaXQ/IFdoeS93aGVuIHdvdWxk IHdlIG5vdCB3YW50IHRvIGRvCj4gPiB0aGF0Pwo+Cj4gTm90IHF1aXRlLiBBbmRyZXcgbm90ZWQg dGhhdCB3ZSBtYXkgbm90IHdhbnQgdG8gZXhwb3NlIGFsbCBDTUEgcmVnaW9ucwo+IHZpYSBkbWFi dWYgaGVhcHMsIHNvIHJpZ2h0IG5vdyB3ZSBvbmx5IGV4cG9zZSB0aGUgZGVmYXVsdCByZWdpb24u IEkKPiBoYXZlIGZvbGxvdyBvbiBwYXRjaGVzIHRoYXQgSSBzZW50IG91dCBlYXJsaWVyICh3aGlj aCByZXF1aXJlcyBhCj4gdG8tYmUtZmluYWxpemVkIERUIGJpbmRpbmcpIHdoaWNoIGFsbG93cyB1 cyB0byBzcGVjaWZ5IHdoaWNoIG90aGVyIENNQQo+IHJlZ2lvbnMgdG8gZXhwb3NlLgoKV2h5IGRv IHdlIG5vdCB3YW50IHRvIGV4cG9zZSB0aGVtIGFsbD8gSSBmaWd1cmVkIGlmIHRoZXJlJ3MgYSBj bWEKaGVhcCwgdGhlbiBhIGRldmljZSB5b3UgaGF2ZSBuZWVkcyBpdCwgYW5kIGlmIHRoYXQncyB0 aGUgY2FzZSB5b3UKbWlnaHQgd2FudCB0byBhbGxvY2F0ZSBmb3IgdGhhdCBkZXZpY2UgZnJvbSB0 aGUgaGVhcD8gTWF5YmUgbGluayB0bwp0aGUgZGlzY3Vzc2lvbj8KCj4gPiA+ID4gPiBPbiB0aGUg SGlLZXkvSGlLZXk5NjAgYm9hcmRzLCB3ZSBoYXZlIHRvIGFsbG9jYXRlIGNvbnRpZ3VvdXMgYnVm ZmVycwo+ID4gPiA+ID4gZm9yIHRoZSBkaXNwbGF5IGZyYW1lYnVmZmVyLiBTbyBncmFsbG9jIHVz ZXMgSU9OIHRvIGFsbG9jYXRlIGZyb20gdGhlCj4gPiA+ID4gPiBDTUEgaGVhcC4gSG93ZXZlciBv biB0aGUgZGI4NDVjLCBpdCBoYXMgbm8gc3VjaCByZXN0cmljdGlvbnMsIHNvIHRoZQo+ID4gPiA+ ID4gQ01BIGhlYXAgaXNuJ3QgbmVjZXNzYXJ5Lgo+ID4gPiA+Cj4gPiA+ID4gV2h5IGRvIHlvdSBo YXZlIGEgQ01BIHJlZ2lvbiBmb3IgdGhlIDJuZCBib2FyZCBpZiB5b3UgZG9uJ3QgbmVlZCBpdD8K PiA+ID4gPiBfVGhhdF8gc291bmRzIGxpa2Ugc29tZSBzZXJpb3VzIG1lbW9yeSB3YXN0ZXIsIG5v dCBhIGZldyBsaW5lcyBvZiBjb2RlCj4gPiA+ID4gbG9hZGVkIGZvciBub3RoaW5nIDotKQo+ID4g Pgo+ID4gPiA/Pz8gVGhhdCdzIG5vdCB3aGF0IEkgc2FpZCBhYm92ZS4gIElmIHRoZSBkYjg0NWMg ZG9lc24ndCBuZWVkIENNQSBpdAo+ID4gPiB3b24ndCBoYXZlIGEgQ01BIHJlZ2lvbi4KPiA+ID4K PiA+ID4gVGhlIGlzc3VlIGF0IGhhbmQgaXMgdGhhdCB3ZSBtYXkgd2FudCB0byBhdm9pZCBsb2Fk aW5nIHRoZSBkbWFidWYgQ01BCj4gPiA+IGhlYXAgZHJpdmVyIG9uIGEgYm9hcmQgdGhhdCBkb2Vz bid0IHVzZSBDTUEuCj4gPgo+ID4gU28gdGhlIENNQSBjb3JlIGNvZGUgaXMgYWxzbyBhIG1vZHVs ZSwgb3IgaG93IGRvZXMgdGhhdCB3b3JrPyBOb3QKPgo+IE5vLiAgQ01BIGNvcmUgaXNuJ3QgYXZh aWxhYmxlIGFzIGEgbW9kdWxlLgo+Cj4gPiBsb2FkaW5nIHRoZSBjbWEgZG1hLWJ1ZiBoZWFwLCBi dXQga2VlcGluZyBhbGwgdGhlIG90aGVyIGNtYSBjb2RlCj4gPiBhcm91bmQgZmVlbHMgc2xpZ2h0 bHkgc2lsbHkuIERvIHdlIGhhdmUgbnVtYmVycyB0aGF0IGp1c3RpZnkgdGhpcwo+ID4gc2lsbGlu ZXNzPwo+Cj4gSSBhZ3JlZSB0aGF0IGlzIG1heWJlIG5vdCB0aGUgbW9zdCBjcml0aWNhbCBpdGVt IG9uIHRoZSBsaXN0LCBidXQgaXRzCj4gb25lIG9mIG1hbnkgdGhhdCBkbyBhZGQgdXAgb3ZlciB0 aW1lLgo+Cj4gQWdhaW4sIEknbGwgZGVmZXIgdG8gU2FuZGVlcCBvciBvdGhlciBmb2xrcyBvbiB0 aGUgR29vZ2xlIHNpZGUgdG8gaGVscAo+IHdpdGggdGhlIGltcG9ydGFuY2UgaGVyZS4gTW9zdGx5 IEknbSB0cnlpbmcgdG8gZW5zdXJlIHRoZXJlIGlzCj4gZnVuY3Rpb25hbCBwYXJpdHkgdG8gSU9O IHNvIHdlIGRvbid0IGdpdmUgZm9sa3MgYW55IHJlYXNvbiB0aGV5IGNvdWxkCj4gb2JqZWN0IHRv IGRlcHJlY2F0aW5nIGl0Lgo+Cj4gPiA+IFRoZSBtYWluIHJlYXNvbiBJJ20gb25seSBzdWJtaXR0 aW5nIHN5c3RlbSBhbmQgQ01BIGlzIGJlY2F1c2UgdGhvc2UKPiA+ID4gYXJlIHRoZSBvbmx5IHR3 byBJIHBlcnNvbmFsbHkgaGF2ZSBhIHVzZXIgZm9yIChIaUtleS9IaUtleTk2MCBib2FyZHMpLgo+ ID4gPiBJdCdzIG15IGhvcGUgdGhhdCBvbmNlIHdlIGRlcHJlY2F0ZSBJT04gaW4gQW5kcm9pZCwg dmVuZG9ycyB3aWxsCj4gPiA+IG1pZ3JhdGUgYW5kIHdlJ2xsIGJlIGFibGUgdG8gcHVzaCB0aGVt IHRvIHVwc3RyZWFtIHRoZWlyIGhlYXBzIGFzCj4gPiA+IHdlbGwuCj4gPgo+ID4gSSB0aGluayBm b3IgdXBzdHJlYW0gSSdkIHdhbnQgdG8gc2VlIHRob3NlIG90aGVyIGhlYXBzIGZpcnN0LiBJZgo+ ID4gdGhleSdyZSBtb3N0bHkgZHJpdmVyIGFsbG9jYXRvcnMgZXhwb3NlZCBhcyBoZWFwcywgdGhl biBJIHRoaW5rIHdlCj4gPiBuZWVkIHNvbWV0aGluZyBkaWZmZXJlbnQgdGhhbiBoZWFwIG1vZHVs ZXMsIG1heWJlIGFsbG93IGRtYS1idWYgdG8KPiA+IGFsbG9jYXRlIGZyb20gZHJpdmVycyBpbnN0 ZWFkLiBCdXQgYWZhaXVpIGFsbCBzdWNoIGRyaXZlciBhbGxvY2F0b3JzCj4gPiB3ZSBoYXZlIGlu IHVwc3RyZWFtIGFyZSBjbWEgcmVnaW9ucyBvbmx5IHJpZ2h0IG5vdy4KPgo+IEknbSBzb3JyeSwg SSdtIG5vdCBzdXJlIEkgdW5kZXJzdGFuZCB3aGF0IHlvdSBtZWFuIGhlcmUgKEknbSBub3Qgc3Vy ZQo+IHdoYXQgYWN0aW9uIEkgc2hvdWxkIGJlIHRha2luZykuIENvdWxkIHlvdSBjbGFyaWZ5IHRo aXMgcG9pbnQ/CgpJJ20gbm90IHNvbGQgb24gdGhlIHVzZS1jYXNlIGZvciB0aGlzLCBidXQgbWF5 YmUgaWYgSSBzZWUgdGhlIGFjdHVhbAp1c2UtY2FzZXMgSSBtaWdodCBiZSBzd2F5ZWQuIEEgdmVy eSBiYXNpYy9taW5pbWFsICJyZWdpc3RlciBhIG5ldwpkbWEtYnVmIGhlYXAiIGZ1bmN0aW9uIHNo b3VsZCBiZSBhbGwgdGhhdCdzIHJlYWxseSBuZWVkZWQgZm9yIGFuZHJvaWQsCnNvIG1heWJlIHdl IGNhbiBzdGFydCB3aXRoIHRoYXQ/Ci1EYW5pZWwKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUg RW5naW5lZXIsIEludGVsIENvcnBvcmF0aW9uCis0MSAoMCkgNzkgMzY1IDU3IDQ4IC0gaHR0cDov L2Jsb2cuZmZ3bGwuY2gKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRl dmVs