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,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, 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 D5C23C433DF for ; Wed, 8 Jul 2020 14:34:13 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id AFB6B207C4 for ; Wed, 8 Jul 2020 14:34:13 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="D3k2+ayC" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729505AbgGHOeN (ORCPT ); Wed, 8 Jul 2020 10:34:13 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51028 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729486AbgGHOeM (ORCPT ); Wed, 8 Jul 2020 10:34:12 -0400 Received: from mail-wm1-x342.google.com (mail-wm1-x342.google.com [IPv6:2a00:1450:4864:20::342]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3B7EEC061A0B for ; Wed, 8 Jul 2020 07:34:12 -0700 (PDT) Received: by mail-wm1-x342.google.com with SMTP id j18so3456827wmi.3 for ; Wed, 08 Jul 2020 07:34:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=QIeEl2eUxfszxmiPFIuGD5Z7T/8od5TwILRWsxV6oDw=; b=D3k2+ayC8VxqEYL1HrSW40E1N+qNuiMUY6cpnLe0dF0FZC2dy2C/oAoOyhu0IY8U/M 7lT+G0XEhuHiB7+yMt3IuTxIavaZgEV0NRz3XoUmlg11LMwpAXm9shRkGbFuynrw2LqV KOZYPabA5hbk1kCFCyFbX5nas9F6ggOoS2BGR/ppoJr/8aT1u9hl9d87bYzW4WJ61F6l 9sf7jNqqoki3HIj/Gj/J3KVgv0m6QdQZsE3lRRM0qn5fDoECPh0lpF9gUAOMHe/0v2kW FGZQYoaXFPhdjFvG08OhpH6ohs+AI6iHO+Lw1mUPsnKuCTVG7rcwXMXAGFI6t3p2C3IN /jzA== 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:content-transfer-encoding; bh=QIeEl2eUxfszxmiPFIuGD5Z7T/8od5TwILRWsxV6oDw=; b=LmK3tt9fDFLDGkxRgYCB4YuFIqahRDyPXD7fZ7XCNItnEz20dyREhN0tQ4OJCngwUK nwkJep7ZM/dyf9yBkLpw8gcFV+TnSUUXoGv684ESl8PlxotxuQ3XUr87X085IEVnGLuj VLKjFQ6j1g/weQ+1pO+xs15pBahtusGmOpf6TJH7YZA+R7GnMcu7jUCEq3sCaFfBTJYT OLUYM7c6P5qnU58XUFzTHSfFUEzL5lYDfsjIDF1dX89vhfZLNqA+JM4QN+9JFAkczO9t 6Z5o2PhzDMzwvV6g+vTYYR12xfR4APdwRKK0Y4CnOHEoNsCylqiAkdA9Fbv7HVMutWnt mDbg== X-Gm-Message-State: AOAM530f8Z2e19bh6DqWKP0bZS8IYlRmqs0ecwfPoYLyzf08hYsYCOuy Ru7wBzt5dvTUswqJEEdnHE+7Nzu2rVqdWEWA9pxWDQ== X-Google-Smtp-Source: ABdhPJySvtmMxy3zK1ibJGzz7ZbxiOXP6zO/iVxoJvHu/4CXPn/v5Lt4tYYHr63RNiUnCIGV8rRvhlDYyODHpr9jfbc= X-Received: by 2002:a1c:de07:: with SMTP id v7mr9743311wmg.56.1594218850894; Wed, 08 Jul 2020 07:34:10 -0700 (PDT) MIME-Version: 1.0 References: <20200702131000.GW3278063@phenom.ffwll.local> <20200702132953.GS25301@ziepe.ca> <11e93282-25da-841d-9be6-38b0c9703d42@amd.com> <20200702181540.GC3278063@phenom.ffwll.local> <20200703120335.GT25301@ziepe.ca> <20200703131445.GU25301@ziepe.ca> <20200708094934.GI3278063@phenom.ffwll.local> <14659513-8164-dcae-e4f9-f0a199aee542@amd.com> In-Reply-To: <14659513-8164-dcae-e4f9-f0a199aee542@amd.com> From: Alex Deucher Date: Wed, 8 Jul 2020 10:33:58 -0400 Message-ID: Subject: Re: [RFC PATCH v2 0/3] RDMA: add dma-buf support To: =?UTF-8?Q?Christian_K=C3=B6nig?= Cc: Daniel Vetter , Leon Romanovsky , "linux-rdma@vger.kernel.org" , "dri-devel@lists.freedesktop.org" , Jason Gunthorpe , Doug Ledford , "Vetter, Daniel" , "Xiong, Jianxin" Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Sender: linux-rdma-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-rdma@vger.kernel.org On Wed, Jul 8, 2020 at 10:20 AM Christian K=C3=B6nig wrote: > > Am 08.07.20 um 11:49 schrieb Daniel Vetter: > > On Wed, Jul 08, 2020 at 11:38:31AM +0200, Christian K=C3=B6nig wrote: > >> Am 07.07.20 um 23:58 schrieb Xiong, Jianxin: > >>>> -----Original Message----- > >>>> From: Christian K=C3=B6nig > >>>> Am 03.07.20 um 15:14 schrieb Jason Gunthorpe: > >>>>> On Fri, Jul 03, 2020 at 02:52:03PM +0200, Daniel Vetter wrote: > >>>>> > >>>>>> So maybe I'm just totally confused about the rdma model. I thought= : > >>>>>> - you bind a pile of memory for various transactions, that might > >>>>>> happen whenever. Kernel driver doesn't have much if any insight in= to > >>>>>> when memory isn't needed anymore. I think in the rdma world that's > >>>>>> called registering memory, but not sure. > >>>>> Sure, but once registered the memory is able to be used at any mome= nt > >>>>> with no visibilty from the kernel. > >>>>> > >>>>> Unlike GPU the transactions that trigger memory access do not go > >>>>> through the kernel - so there is no ability to interrupt a command > >>>>> flow and fiddle with mappings. > >>>> This is the same for GPUs with user space queues as well. > >>>> > >>>> But we can still say for a process if that this process is using a D= MA-buf which is moved out and so can't run any more unless the DMA-buf is > >>>> accessible again. > >>>> > >>>> In other words you somehow need to make sure that the hardware is no= t accessing a piece of memory any more when you want to move it. > >>>> > >>> While a process can be easily suspended, there is no way to tell the = RDMA NIC not to process posted work requests that use specific memory regio= ns (or with any other conditions). > >>> > >>> So far it appears to me that DMA-buf dynamic mapping for RDMA is only= viable with ODP support. For NICs without ODP, a way to allow pinning the = device memory is still needed. > >> And that's exactly the reason why I introduced explicit pin()/unpin() > >> functions into the DMA-buf API: > >> https://nam11.safelinks.protection.outlook.com/?url=3Dhttps%3A%2F%2Fel= ixir.bootlin.com%2Flinux%2Flatest%2Fsource%2Fdrivers%2Fdma-buf%2Fdma-buf.c%= 23L811&data=3D02%7C01%7Cchristian.koenig%40amd.com%7C6d785861acc542a2f5= 3608d823243a7c%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637297985792135= 311&sdata=3DbBrkDynlACE9DAIlGntxXhE1unr%2FBxw5IRTm6AtV6WQ%3D&reserv= ed=3D0 > >> > >> It's just that at least our devices drivers currently prevent P2P with > >> pinned DMA-buf's for two main reasons: > >> > >> a) To prevent deny of service attacks because P2P BARs are a rather ra= re > >> resource. > >> > >> b) To prevent failures in configuration where P2P is not always possib= le > >> between all devices which want to access a buffer. > > So the above is more or less the question in the cover letter (which > > didn't make it to dri-devel). Can we somehow throw that limitation out,= or > > is that simply not a good idea? > > At least for the AMD graphics drivers that's most certain not a good idea= . > > We do have an use case where buffers need to be in system memory because > P2P doesn't work. > > And by pinning them to VRAM you can create a really nice deny of service > attack against the X system. > On the other hand, on modern platforms with large or resizable BARs, you may end up with systems with more vram than system ram. Alex > > Simply moving buffers to system memory when they're pinned does simplif= y a > > lot of headaches. For a specific custom built system we can avoid that > > maybe, but I think upstream is kinda a different thing. > > Yes, agree completely on that. Customers which are willing to take the > risk can easily do this themselves. > > But that is not something we should probably do for upstream. > > Regards, > Christian. > > > > > Cheers, Daniel > > > >> Regards, > >> Christian. > >> > >>> Jianxin > >>> > >>>> Christian. > >>>> > >>>>> Jason > > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel 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.5 required=3.0 tests=DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, 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 A2165C433E0 for ; Wed, 8 Jul 2020 14:34:13 +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 7250E206DF for ; Wed, 8 Jul 2020 14:34:13 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="D3k2+ayC" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7250E206DF Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com 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 DCB796E149; Wed, 8 Jul 2020 14:34:12 +0000 (UTC) Received: from mail-wm1-x343.google.com (mail-wm1-x343.google.com [IPv6:2a00:1450:4864:20::343]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3B2C36E149 for ; Wed, 8 Jul 2020 14:34:12 +0000 (UTC) Received: by mail-wm1-x343.google.com with SMTP id q15so3467064wmj.2 for ; Wed, 08 Jul 2020 07:34:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=QIeEl2eUxfszxmiPFIuGD5Z7T/8od5TwILRWsxV6oDw=; b=D3k2+ayC8VxqEYL1HrSW40E1N+qNuiMUY6cpnLe0dF0FZC2dy2C/oAoOyhu0IY8U/M 7lT+G0XEhuHiB7+yMt3IuTxIavaZgEV0NRz3XoUmlg11LMwpAXm9shRkGbFuynrw2LqV KOZYPabA5hbk1kCFCyFbX5nas9F6ggOoS2BGR/ppoJr/8aT1u9hl9d87bYzW4WJ61F6l 9sf7jNqqoki3HIj/Gj/J3KVgv0m6QdQZsE3lRRM0qn5fDoECPh0lpF9gUAOMHe/0v2kW FGZQYoaXFPhdjFvG08OhpH6ohs+AI6iHO+Lw1mUPsnKuCTVG7rcwXMXAGFI6t3p2C3IN /jzA== 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:content-transfer-encoding; bh=QIeEl2eUxfszxmiPFIuGD5Z7T/8od5TwILRWsxV6oDw=; b=g326uip3MTxCwsMkGUCCWPsHOLjIGozmAPKdybvlZ596NX8+gBk0TOZBWyUdOe8JPF PEA3/HR1V6pA4IkPmxsXVjXuoDnQsIBDAH5Sl6gbwhWr83IxGAVj7ELXNStrxo8rxcpP 55/+FMnRq52JZKhADHPdYerSnHiTNU3QPPQPcZYJjstskw6dk4ohI9Zn/MkepDC55uZO lBowNyv/GIqBY3Nx5vuzq0RpqKP0Xp3F7VjJ1Q75U1bwC2HFGN7rZOl5oHgTKTvNgvsJ MvLsN2AvoSIRJZwtzzrY4anboeV+6jp9m4qslgq4ov5n/XoKq2ys9HJZkpMhlXORoAzy eWxg== X-Gm-Message-State: AOAM533UkiW3WpTuVIIjGSxa2o5O1ZT5lm7U5h8PmL++MrhADuoTnW8Z t6BHnqtVb3/L5nZg3zO36oKHOkRnKdWEb1xvkQk= X-Google-Smtp-Source: ABdhPJySvtmMxy3zK1ibJGzz7ZbxiOXP6zO/iVxoJvHu/4CXPn/v5Lt4tYYHr63RNiUnCIGV8rRvhlDYyODHpr9jfbc= X-Received: by 2002:a1c:de07:: with SMTP id v7mr9743311wmg.56.1594218850894; Wed, 08 Jul 2020 07:34:10 -0700 (PDT) MIME-Version: 1.0 References: <20200702131000.GW3278063@phenom.ffwll.local> <20200702132953.GS25301@ziepe.ca> <11e93282-25da-841d-9be6-38b0c9703d42@amd.com> <20200702181540.GC3278063@phenom.ffwll.local> <20200703120335.GT25301@ziepe.ca> <20200703131445.GU25301@ziepe.ca> <20200708094934.GI3278063@phenom.ffwll.local> <14659513-8164-dcae-e4f9-f0a199aee542@amd.com> In-Reply-To: <14659513-8164-dcae-e4f9-f0a199aee542@amd.com> From: Alex Deucher Date: Wed, 8 Jul 2020 10:33:58 -0400 Message-ID: Subject: Re: [RFC PATCH v2 0/3] RDMA: add dma-buf support To: =?UTF-8?Q?Christian_K=C3=B6nig?= X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Leon Romanovsky , "linux-rdma@vger.kernel.org" , "dri-devel@lists.freedesktop.org" , Jason Gunthorpe , Doug Ledford , "Vetter, Daniel" , "Xiong, Jianxin" Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" T24gV2VkLCBKdWwgOCwgMjAyMCBhdCAxMDoyMCBBTSBDaHJpc3RpYW4gS8O2bmlnCjxjaHJpc3Rp YW4ua29lbmlnQGFtZC5jb20+IHdyb3RlOgo+Cj4gQW0gMDguMDcuMjAgdW0gMTE6NDkgc2Nocmll YiBEYW5pZWwgVmV0dGVyOgo+ID4gT24gV2VkLCBKdWwgMDgsIDIwMjAgYXQgMTE6Mzg6MzFBTSAr MDIwMCwgQ2hyaXN0aWFuIEvDtm5pZyB3cm90ZToKPiA+PiBBbSAwNy4wNy4yMCB1bSAyMzo1OCBz Y2hyaWViIFhpb25nLCBKaWFueGluOgo+ID4+Pj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0K PiA+Pj4+IEZyb206IENocmlzdGlhbiBLw7ZuaWcgPGNocmlzdGlhbi5rb2VuaWdAYW1kLmNvbT4K PiA+Pj4+IEFtIDAzLjA3LjIwIHVtIDE1OjE0IHNjaHJpZWIgSmFzb24gR3VudGhvcnBlOgo+ID4+ Pj4+IE9uIEZyaSwgSnVsIDAzLCAyMDIwIGF0IDAyOjUyOjAzUE0gKzAyMDAsIERhbmllbCBWZXR0 ZXIgd3JvdGU6Cj4gPj4+Pj4KPiA+Pj4+Pj4gU28gbWF5YmUgSSdtIGp1c3QgdG90YWxseSBjb25m dXNlZCBhYm91dCB0aGUgcmRtYSBtb2RlbC4gSSB0aG91Z2h0Ogo+ID4+Pj4+PiAtIHlvdSBiaW5k IGEgcGlsZSBvZiBtZW1vcnkgZm9yIHZhcmlvdXMgdHJhbnNhY3Rpb25zLCB0aGF0IG1pZ2h0Cj4g Pj4+Pj4+IGhhcHBlbiB3aGVuZXZlci4gS2VybmVsIGRyaXZlciBkb2Vzbid0IGhhdmUgbXVjaCBp ZiBhbnkgaW5zaWdodCBpbnRvCj4gPj4+Pj4+IHdoZW4gbWVtb3J5IGlzbid0IG5lZWRlZCBhbnlt b3JlLiBJIHRoaW5rIGluIHRoZSByZG1hIHdvcmxkIHRoYXQncwo+ID4+Pj4+PiBjYWxsZWQgcmVn aXN0ZXJpbmcgbWVtb3J5LCBidXQgbm90IHN1cmUuCj4gPj4+Pj4gU3VyZSwgYnV0IG9uY2UgcmVn aXN0ZXJlZCB0aGUgbWVtb3J5IGlzIGFibGUgdG8gYmUgdXNlZCBhdCBhbnkgbW9tZW50Cj4gPj4+ Pj4gd2l0aCBubyB2aXNpYmlsdHkgZnJvbSB0aGUga2VybmVsLgo+ID4+Pj4+Cj4gPj4+Pj4gVW5s aWtlIEdQVSB0aGUgdHJhbnNhY3Rpb25zIHRoYXQgdHJpZ2dlciBtZW1vcnkgYWNjZXNzIGRvIG5v dCBnbwo+ID4+Pj4+IHRocm91Z2ggdGhlIGtlcm5lbCAtIHNvIHRoZXJlIGlzIG5vIGFiaWxpdHkg dG8gaW50ZXJydXB0IGEgY29tbWFuZAo+ID4+Pj4+IGZsb3cgYW5kIGZpZGRsZSB3aXRoIG1hcHBp bmdzLgo+ID4+Pj4gVGhpcyBpcyB0aGUgc2FtZSBmb3IgR1BVcyB3aXRoIHVzZXIgc3BhY2UgcXVl dWVzIGFzIHdlbGwuCj4gPj4+Pgo+ID4+Pj4gQnV0IHdlIGNhbiBzdGlsbCBzYXkgZm9yIGEgcHJv Y2VzcyBpZiB0aGF0IHRoaXMgcHJvY2VzcyBpcyB1c2luZyBhIERNQS1idWYgd2hpY2ggaXMgbW92 ZWQgb3V0IGFuZCBzbyBjYW4ndCBydW4gYW55IG1vcmUgdW5sZXNzIHRoZSBETUEtYnVmIGlzCj4g Pj4+PiBhY2Nlc3NpYmxlIGFnYWluLgo+ID4+Pj4KPiA+Pj4+IEluIG90aGVyIHdvcmRzIHlvdSBz b21laG93IG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGhhcmR3YXJlIGlzIG5vdCBhY2Nlc3Np bmcgYSBwaWVjZSBvZiBtZW1vcnkgYW55IG1vcmUgd2hlbiB5b3Ugd2FudCB0byBtb3ZlIGl0Lgo+ ID4+Pj4KPiA+Pj4gV2hpbGUgYSBwcm9jZXNzIGNhbiBiZSBlYXNpbHkgc3VzcGVuZGVkLCB0aGVy ZSBpcyBubyB3YXkgdG8gdGVsbCB0aGUgUkRNQSBOSUMgbm90IHRvIHByb2Nlc3MgcG9zdGVkIHdv cmsgcmVxdWVzdHMgdGhhdCB1c2Ugc3BlY2lmaWMgbWVtb3J5IHJlZ2lvbnMgKG9yIHdpdGggYW55 IG90aGVyIGNvbmRpdGlvbnMpLgo+ID4+Pgo+ID4+PiBTbyBmYXIgaXQgYXBwZWFycyB0byBtZSB0 aGF0IERNQS1idWYgZHluYW1pYyBtYXBwaW5nIGZvciBSRE1BIGlzIG9ubHkgdmlhYmxlIHdpdGgg T0RQIHN1cHBvcnQuIEZvciBOSUNzIHdpdGhvdXQgT0RQLCBhIHdheSB0byBhbGxvdyBwaW5uaW5n IHRoZSBkZXZpY2UgbWVtb3J5IGlzIHN0aWxsIG5lZWRlZC4KPiA+PiBBbmQgdGhhdCdzIGV4YWN0 bHkgdGhlIHJlYXNvbiB3aHkgSSBpbnRyb2R1Y2VkIGV4cGxpY2l0IHBpbigpL3VucGluKCkKPiA+ PiBmdW5jdGlvbnMgaW50byB0aGUgRE1BLWJ1ZiBBUEk6Cj4gPj4gaHR0cHM6Ly9uYW0xMS5zYWZl bGlua3MucHJvdGVjdGlvbi5vdXRsb29rLmNvbS8/dXJsPWh0dHBzJTNBJTJGJTJGZWxpeGlyLmJv b3RsaW4uY29tJTJGbGludXglMkZsYXRlc3QlMkZzb3VyY2UlMkZkcml2ZXJzJTJGZG1hLWJ1ZiUy RmRtYS1idWYuYyUyM0w4MTEmYW1wO2RhdGE9MDIlN0MwMSU3Q2NocmlzdGlhbi5rb2VuaWclNDBh bWQuY29tJTdDNmQ3ODU4NjFhY2M1NDJhMmY1MzYwOGQ4MjMyNDNhN2MlN0MzZGQ4OTYxZmU0ODg0 ZTYwOGUxMWE4MmQ5OTRlMTgzZCU3QzAlN0MwJTdDNjM3Mjk3OTg1NzkyMTM1MzExJmFtcDtzZGF0 YT1iQnJrRHlubEFDRTlEQUlsR250eFhoRTF1bnIlMkZCeHc1SVJUbTZBdFY2V1ElM0QmYW1wO3Jl c2VydmVkPTAKPiA+Pgo+ID4+IEl0J3MganVzdCB0aGF0IGF0IGxlYXN0IG91ciBkZXZpY2VzIGRy aXZlcnMgY3VycmVudGx5IHByZXZlbnQgUDJQIHdpdGgKPiA+PiBwaW5uZWQgRE1BLWJ1ZidzIGZv ciB0d28gbWFpbiByZWFzb25zOgo+ID4+Cj4gPj4gYSkgVG8gcHJldmVudCBkZW55IG9mIHNlcnZp Y2UgYXR0YWNrcyBiZWNhdXNlIFAyUCBCQVJzIGFyZSBhIHJhdGhlciByYXJlCj4gPj4gcmVzb3Vy Y2UuCj4gPj4KPiA+PiBiKSBUbyBwcmV2ZW50IGZhaWx1cmVzIGluIGNvbmZpZ3VyYXRpb24gd2hl cmUgUDJQIGlzIG5vdCBhbHdheXMgcG9zc2libGUKPiA+PiBiZXR3ZWVuIGFsbCBkZXZpY2VzIHdo aWNoIHdhbnQgdG8gYWNjZXNzIGEgYnVmZmVyLgo+ID4gU28gdGhlIGFib3ZlIGlzIG1vcmUgb3Ig bGVzcyB0aGUgcXVlc3Rpb24gaW4gdGhlIGNvdmVyIGxldHRlciAod2hpY2gKPiA+IGRpZG4ndCBt YWtlIGl0IHRvIGRyaS1kZXZlbCkuIENhbiB3ZSBzb21laG93IHRocm93IHRoYXQgbGltaXRhdGlv biBvdXQsIG9yCj4gPiBpcyB0aGF0IHNpbXBseSBub3QgYSBnb29kIGlkZWE/Cj4KPiBBdCBsZWFz dCBmb3IgdGhlIEFNRCBncmFwaGljcyBkcml2ZXJzIHRoYXQncyBtb3N0IGNlcnRhaW4gbm90IGEg Z29vZCBpZGVhLgo+Cj4gV2UgZG8gaGF2ZSBhbiB1c2UgY2FzZSB3aGVyZSBidWZmZXJzIG5lZWQg dG8gYmUgaW4gc3lzdGVtIG1lbW9yeSBiZWNhdXNlCj4gUDJQIGRvZXNuJ3Qgd29yay4KPgo+IEFu ZCBieSBwaW5uaW5nIHRoZW0gdG8gVlJBTSB5b3UgY2FuIGNyZWF0ZSBhIHJlYWxseSBuaWNlIGRl bnkgb2Ygc2VydmljZQo+IGF0dGFjayBhZ2FpbnN0IHRoZSBYIHN5c3RlbS4KPgoKT24gdGhlIG90 aGVyIGhhbmQsIG9uIG1vZGVybiBwbGF0Zm9ybXMgd2l0aCBsYXJnZSBvciByZXNpemFibGUgQkFS cywKeW91IG1heSBlbmQgdXAgd2l0aCBzeXN0ZW1zIHdpdGggbW9yZSB2cmFtIHRoYW4gc3lzdGVt IHJhbS4KCkFsZXgKCgo+ID4gU2ltcGx5IG1vdmluZyBidWZmZXJzIHRvIHN5c3RlbSBtZW1vcnkg d2hlbiB0aGV5J3JlIHBpbm5lZCBkb2VzIHNpbXBsaWZ5IGEKPiA+IGxvdCBvZiBoZWFkYWNoZXMu IEZvciBhIHNwZWNpZmljIGN1c3RvbSBidWlsdCBzeXN0ZW0gd2UgY2FuIGF2b2lkIHRoYXQKPiA+ IG1heWJlLCBidXQgSSB0aGluayB1cHN0cmVhbSBpcyBraW5kYSBhIGRpZmZlcmVudCB0aGluZy4K Pgo+IFllcywgYWdyZWUgY29tcGxldGVseSBvbiB0aGF0LiBDdXN0b21lcnMgd2hpY2ggYXJlIHdp bGxpbmcgdG8gdGFrZSB0aGUKPiByaXNrIGNhbiBlYXNpbHkgZG8gdGhpcyB0aGVtc2VsdmVzLgo+ Cj4gQnV0IHRoYXQgaXMgbm90IHNvbWV0aGluZyB3ZSBzaG91bGQgcHJvYmFibHkgZG8gZm9yIHVw c3RyZWFtLgo+Cj4gUmVnYXJkcywKPiBDaHJpc3RpYW4uCj4KPiA+Cj4gPiBDaGVlcnMsIERhbmll bAo+ID4KPiA+PiBSZWdhcmRzLAo+ID4+IENocmlzdGlhbi4KPiA+Pgo+ID4+PiBKaWFueGluCj4g Pj4+Cj4gPj4+PiBDaHJpc3RpYW4uCj4gPj4+Pgo+ID4+Pj4+IEphc29uCj4KPiBfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IGRyaS1kZXZlbCBtYWlsaW5n IGxpc3QKPiBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApk cmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==