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=-4.3 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE, SPF_PASS,USER_AGENT_SANE_1 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 AA56DC433C1 for ; Tue, 23 Mar 2021 19:58:29 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 60C0D619CB for ; Tue, 23 Mar 2021 19:58:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232784AbhCWT5u (ORCPT ); Tue, 23 Mar 2021 15:57:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35790 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232388AbhCWT5n (ORCPT ); Tue, 23 Mar 2021 15:57:43 -0400 Received: from mail-lf1-x134.google.com (mail-lf1-x134.google.com [IPv6:2a00:1450:4864:20::134]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0E548C061574 for ; Tue, 23 Mar 2021 12:57:43 -0700 (PDT) Received: by mail-lf1-x134.google.com with SMTP id o126so18962782lfa.0 for ; Tue, 23 Mar 2021 12:57:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=tLOU7baKB0TYVPxYLVj2OaWVh+GaLnQyuWYWA6+PT4w=; b=H/78cF+CHO2lJGWLn0yukJwkg57ETsgxkCbMSy+SkH20iIfme6uC8yMEJoIsMnE9Ke WaBriPpJtgsI6hY2EOx2oYab4i/XJs/W9XHYYteIoUOfTTXgGeKwRCu0cnfTvfUj70aK 8gRCdMrNt8p48t6MGkWmGrDDJ508tKtlkT71IPE7F7dMGb/6nG+UiDS6vby1GR5/TcPf iF1crsKz+E5FqoJxXjO6njfi7ugZSSvxpZkrpQclnPekzCWNVCw//hGU+8CAUTHf6e1o gMsaJp9yosmhuKSbaDldAjHCOtO5MpB6KyV4I3pHhetpCkebaxSu8stmmXbAn25iesvw BAeg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=tLOU7baKB0TYVPxYLVj2OaWVh+GaLnQyuWYWA6+PT4w=; b=K7MIz6+d4wqAJjvRiCBXynaOSwEoCqQHPafVCzLRdFEBSx2kHLSF3iL+akycjL406g HCgPSuThz1+ZowTqFiCi79CiYhV3otLFMttyc3NteETYkZRZfw688SkkEkg7Fk30V1FV tldcYs5JwYUyk3YgYLNkXc1lAEZXMA3J3vNB0zsey+PLAf6usVFnJlhmB2CIz/Kj8+t2 klrOsyKXYvJhv55rOZzquhCA+xMp6wxwjX9WwyY3hXxDExjUKYZlnZBRk9kMNd1kx3Tj ZcRl7PzKjjs9nicViW8ITYKvnd+EZVp4hH829GIdJjUq3MFo/CplpNHh04/ZvEcM3HlH T5uQ== X-Gm-Message-State: AOAM5329urg+HUx7DT605NLSK8d3n3O/SrMpl1zKZD6aKeho+LASbJwl qILtseg+O5Wrz58I/zJJFx8= X-Google-Smtp-Source: ABdhPJxH0FUacW/96OqiDqn48v6VceKlvxQOtMlHHK0hOO8Bim7HYtdO8CuIxwiZ1QKO5ZdqDeY8pw== X-Received: by 2002:ac2:5973:: with SMTP id h19mr3359749lfp.120.1616529461559; Tue, 23 Mar 2021 12:57:41 -0700 (PDT) Received: from [192.168.2.145] (109-252-193-60.dynamic.spd-mgts.ru. [109.252.193.60]) by smtp.googlemail.com with ESMTPSA id k5sm3555ljb.78.2021.03.23.12.57.40 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 23 Mar 2021 12:57:41 -0700 (PDT) Subject: Re: [PATCH v5 00/21] Host1x sync point UAPI should not be used for tracking DRM jobs To: Thierry Reding Cc: Mikko Perttunen , Mikko Perttunen , jonathanh@nvidia.com, airlied@linux.ie, daniel@ffwll.ch, linux-tegra@vger.kernel.org, dri-devel@lists.freedesktop.org, talho@nvidia.com, bhuntsman@nvidia.com References: <20210111130019.3515669-1-mperttunen@nvidia.com> <2f999b6d-d781-503a-78f4-d444bce72c58@kapsi.fi> <2ee12338-bd5a-4b99-f86d-13da0d2a899b@gmail.com> <8504c239-d5df-3033-934c-7b3fab52e387@kapsi.fi> <1ff922b2-161d-c8b9-7b08-4454ff7329f8@gmail.com> <25248139-5487-a15b-8965-1a29a71eacd7@kapsi.fi> <6211ee04-ebd6-74d3-cb5b-955b17acff5b@gmail.com> From: Dmitry Osipenko Message-ID: <8ff1a2f1-92bb-861a-31fd-f3af983baff0@gmail.com> Date: Tue, 23 Mar 2021 22:57:40 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.8.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org 23.03.2021 21:21, Thierry Reding пишет: > On Sat, Feb 27, 2021 at 02:19:39PM +0300, Dmitry Osipenko wrote: >> 03.02.2021 14:18, Mikko Perttunen пишет: >> ... >>>> I'll need more time to think about it. >>>> >>> >>> How about something like this: >>> >>> Turn the syncpt_incr field back into an array of structs like >>> >>> #define DRM_TEGRA_SUBMIT_SYNCPT_INCR_REPLACE_SYNCOBJ        (1<<0) >>> #define DRM_TEGRA_SUBMIT_SYNCPT_INCR_PATCH_DYNAMIC_SYNCPT    (1<<1) >>> >>> struct drm_tegra_submit_syncpt_incr { >>>     /* can be left as zero if using dynamic syncpt */ >>>     __u32 syncpt_id; >>>     __u32 flags; >>> >>>     struct { >>>         __u32 syncobj; >>>         __u32 value; >>>     } fence; >>> >>>     /* patch word as such: >>>          * *word = *word | (syncpt_id << shift) >>>          */ >>>     struct { >>>         __u32 gather_offset_words; >>>         __u32 shift; >>>     } patch; >>> }; >>> >>> So this will work similarly to the buffer reloc system; the kernel >>> driver will allocate a job syncpoint and patch in the syncpoint ID if >>> requested, and allows outputting syncobjs for each increment. >> >> I haven't got any great ideas so far, but it feels that will be easier >> and cleaner if we could have separate job paths (and job IOCTLS) based >> on hardware generation since the workloads a too different. The needs of >> a newer h/w are too obscure for me and absence of userspace code, >> firmware sources and full h/w documentation do not help. >> >> There still should be quite a lot to share, but things like >> mapping-to-channel and VM sync points are too far away from older h/w, >> IMO. This means that code path before drm-sched and path for job-timeout >> handling should be separate. >> >> Maybe later on it will become cleaner that we actually could unify it >> all nicely, but for now it doesn't look like a good idea to me. > > Sorry for jumping in rather randomly here and elsewhere, but it's been a > long time since the discussion and I just want to share my thoughts on a > couple of topics in order to hopefully help move this forward somehow. > > For UAPI, "unifying it later" doesn't really work. Of course I meant a "later version of this series" :) Sorry for not making it clear. > So I think the only > realistic option is to make a best attempt at getting the UABI right so > that it works for all existing use-cases and ideally perhaps even as of > yet unknown use-cases in the future. As with all APIs this means that > there's going to be a need to abstract away some of the hardware details > so that we don't have to deal with too many low-level details in > userspace, because otherwise the UAPI is just going to be a useless > mess. > > I think a proposal such as the above to allow both implicit and explicit > syncpoints makes sense. For what it's worth, it's fairly similar to what > we had come up with last time we tried destaging the ABI, although back > at the time I'm not sure we had even considered explicit syncpoint usage > yet. I think where reasonably possible this kind of optional behaviour > is acceptable, but I don't think having two completely separate paths is > going to help in any way. If anything it's just going to make it more > difficult to maintain the code and get it to a usable state in the first > place. > > Like I said elsewhere, the programming model for host1x hasn't changed > since Tegra20. It's rather evolved and gained a couple more features, > but that doesn't change anything about how userspace uses it. Not having a complete control over sync points state is a radical change, IMO. I prefer not to use this legacy and error-prone way of sync points handling at least for older h/w where it's possible to do. This is what downstream driver did 10 years ago and what it still continues to do. I was very happy to move away from this unnecessary complication in the experimental grate-kernel driver and I think this will be great to do in the mainline as well. The need to map buffers explicitly is also a big difference. The need to map BO for each channel is a quite big over-complication as we already found out in the current version of UAPI. Alright, perhaps the mapping could improved for older userspace if we will move away from a per-channel contexts to a single DRM context like I already was suggesting to Mikko before. I.e. instead of mapping BO "to a channel", we will need to map BO "to h/w clients" within the DRM context. This should allow older userspace to create a single mapping for all channels/clients using a single IOCTL and then to have a single "mapping handle" to care about. Objections? 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=-2.0 required=3.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE, SPF_PASS,USER_AGENT_SANE_1 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 7C334C433DB for ; Tue, 23 Mar 2021 19:57:45 +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 07752619C9 for ; Tue, 23 Mar 2021 19:57:44 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 07752619C9 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 5B98B6E106; Tue, 23 Mar 2021 19:57:44 +0000 (UTC) Received: from mail-lf1-x12d.google.com (mail-lf1-x12d.google.com [IPv6:2a00:1450:4864:20::12d]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3739E6E106 for ; Tue, 23 Mar 2021 19:57:43 +0000 (UTC) Received: by mail-lf1-x12d.google.com with SMTP id b4so4538046lfi.6 for ; Tue, 23 Mar 2021 12:57:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=tLOU7baKB0TYVPxYLVj2OaWVh+GaLnQyuWYWA6+PT4w=; b=H/78cF+CHO2lJGWLn0yukJwkg57ETsgxkCbMSy+SkH20iIfme6uC8yMEJoIsMnE9Ke WaBriPpJtgsI6hY2EOx2oYab4i/XJs/W9XHYYteIoUOfTTXgGeKwRCu0cnfTvfUj70aK 8gRCdMrNt8p48t6MGkWmGrDDJ508tKtlkT71IPE7F7dMGb/6nG+UiDS6vby1GR5/TcPf iF1crsKz+E5FqoJxXjO6njfi7ugZSSvxpZkrpQclnPekzCWNVCw//hGU+8CAUTHf6e1o gMsaJp9yosmhuKSbaDldAjHCOtO5MpB6KyV4I3pHhetpCkebaxSu8stmmXbAn25iesvw BAeg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=tLOU7baKB0TYVPxYLVj2OaWVh+GaLnQyuWYWA6+PT4w=; b=IhXhialFdkDeSyHDZx05M6efjTRREL3Zu+u9GxmD+I/03RwMcg8Jt35mBEsBZWdJ7V Lpr7SZC/Zh45bzStU3lv3GhqQhyXj0MB6XFbVGhq66F//paj1eAbxLnbS9D/RwDlx01d SyE8N2/hHZb1JE6U2stKSFvZJxVaAahFXZUKfYo6R+VHlHK43kcIOhXzsiSBsyBzr3a2 9XbRpt3bmOZB5yP+IMCFkujEfJyFDGG7MFbN6Y5TbVyWWK5SddSRioZivGlLR3Q2njZt 3/8IlMI7qOKcVa8UZ8SYcNj+B4W17AYzxdLhfjqzbO5BLOljVZtCiJlLrBuhzfxXcjWr 3jFg== X-Gm-Message-State: AOAM533bNFhVuc7qcBPSnvkjDBOVGvvwFUY2G8L8kH7APsMhPFh0d5SV CfeUWLYvR+66oZuACChzR6KDtG28ios= X-Google-Smtp-Source: ABdhPJxH0FUacW/96OqiDqn48v6VceKlvxQOtMlHHK0hOO8Bim7HYtdO8CuIxwiZ1QKO5ZdqDeY8pw== X-Received: by 2002:ac2:5973:: with SMTP id h19mr3359749lfp.120.1616529461559; Tue, 23 Mar 2021 12:57:41 -0700 (PDT) Received: from [192.168.2.145] (109-252-193-60.dynamic.spd-mgts.ru. [109.252.193.60]) by smtp.googlemail.com with ESMTPSA id k5sm3555ljb.78.2021.03.23.12.57.40 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 23 Mar 2021 12:57:41 -0700 (PDT) Subject: Re: [PATCH v5 00/21] Host1x sync point UAPI should not be used for tracking DRM jobs To: Thierry Reding References: <20210111130019.3515669-1-mperttunen@nvidia.com> <2f999b6d-d781-503a-78f4-d444bce72c58@kapsi.fi> <2ee12338-bd5a-4b99-f86d-13da0d2a899b@gmail.com> <8504c239-d5df-3033-934c-7b3fab52e387@kapsi.fi> <1ff922b2-161d-c8b9-7b08-4454ff7329f8@gmail.com> <25248139-5487-a15b-8965-1a29a71eacd7@kapsi.fi> <6211ee04-ebd6-74d3-cb5b-955b17acff5b@gmail.com> From: Dmitry Osipenko Message-ID: <8ff1a2f1-92bb-861a-31fd-f3af983baff0@gmail.com> Date: Tue, 23 Mar 2021 22:57:40 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.8.1 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US 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: Mikko Perttunen , airlied@linux.ie, dri-devel@lists.freedesktop.org, jonathanh@nvidia.com, talho@nvidia.com, bhuntsman@nvidia.com, linux-tegra@vger.kernel.org, Mikko Perttunen Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" MjMuMDMuMjAyMSAyMToyMSwgVGhpZXJyeSBSZWRpbmcg0L/QuNGI0LXRgjoKPiBPbiBTYXQsIEZl YiAyNywgMjAyMSBhdCAwMjoxOTozOVBNICswMzAwLCBEbWl0cnkgT3NpcGVua28gd3JvdGU6Cj4+ IDAzLjAyLjIwMjEgMTQ6MTgsIE1pa2tvIFBlcnR0dW5lbiDQv9C40YjQtdGCOgo+PiAuLi4KPj4+ PiBJJ2xsIG5lZWQgbW9yZSB0aW1lIHRvIHRoaW5rIGFib3V0IGl0Lgo+Pj4+Cj4+Pgo+Pj4gSG93 IGFib3V0IHNvbWV0aGluZyBsaWtlIHRoaXM6Cj4+Pgo+Pj4gVHVybiB0aGUgc3luY3B0X2luY3Ig ZmllbGQgYmFjayBpbnRvIGFuIGFycmF5IG9mIHN0cnVjdHMgbGlrZQo+Pj4KPj4+ICNkZWZpbmUg RFJNX1RFR1JBX1NVQk1JVF9TWU5DUFRfSU5DUl9SRVBMQUNFX1NZTkNPQkrCoMKgwqDCoMKgwqDC oCAoMTw8MCkKPj4+ICNkZWZpbmUgRFJNX1RFR1JBX1NVQk1JVF9TWU5DUFRfSU5DUl9QQVRDSF9E WU5BTUlDX1NZTkNQVMKgwqDCoCAoMTw8MSkKPj4+Cj4+PiBzdHJ1Y3QgZHJtX3RlZ3JhX3N1Ym1p dF9zeW5jcHRfaW5jciB7Cj4+PiDCoMKgwqDCoC8qIGNhbiBiZSBsZWZ0IGFzIHplcm8gaWYgdXNp bmcgZHluYW1pYyBzeW5jcHQgKi8KPj4+IMKgwqDCoMKgX191MzIgc3luY3B0X2lkOwo+Pj4gwqDC oMKgwqBfX3UzMiBmbGFnczsKPj4+Cj4+PiDCoMKgwqDCoHN0cnVjdCB7Cj4+PiDCoMKgwqDCoMKg wqDCoCBfX3UzMiBzeW5jb2JqOwo+Pj4gwqDCoMKgwqDCoMKgwqAgX191MzIgdmFsdWU7Cj4+PiDC oMKgwqDCoH0gZmVuY2U7Cj4+Pgo+Pj4gwqDCoMKgwqAvKiBwYXRjaCB3b3JkIGFzIHN1Y2g6Cj4+ PiDCoMKgwqDCoMKgwqDCoMKgICogKndvcmQgPSAqd29yZCB8IChzeW5jcHRfaWQgPDwgc2hpZnQp Cj4+PiDCoMKgwqDCoMKgwqDCoMKgICovCj4+PiDCoMKgwqDCoHN0cnVjdCB7Cj4+PiDCoMKgwqDC oMKgwqDCoCBfX3UzMiBnYXRoZXJfb2Zmc2V0X3dvcmRzOwo+Pj4gwqDCoMKgwqDCoMKgwqAgX191 MzIgc2hpZnQ7Cj4+PiDCoMKgwqDCoH0gcGF0Y2g7Cj4+PiB9Owo+Pj4KPj4+IFNvIHRoaXMgd2ls bCB3b3JrIHNpbWlsYXJseSB0byB0aGUgYnVmZmVyIHJlbG9jIHN5c3RlbTsgdGhlIGtlcm5lbAo+ Pj4gZHJpdmVyIHdpbGwgYWxsb2NhdGUgYSBqb2Igc3luY3BvaW50IGFuZCBwYXRjaCBpbiB0aGUg c3luY3BvaW50IElEIGlmCj4+PiByZXF1ZXN0ZWQsIGFuZCBhbGxvd3Mgb3V0cHV0dGluZyBzeW5j b2JqcyBmb3IgZWFjaCBpbmNyZW1lbnQuCj4+Cj4+IEkgaGF2ZW4ndCBnb3QgYW55IGdyZWF0IGlk ZWFzIHNvIGZhciwgYnV0IGl0IGZlZWxzIHRoYXQgd2lsbCBiZSBlYXNpZXIKPj4gYW5kIGNsZWFu ZXIgaWYgd2UgY291bGQgaGF2ZSBzZXBhcmF0ZSBqb2IgcGF0aHMgKGFuZCBqb2IgSU9DVExTKSBi YXNlZAo+PiBvbiBoYXJkd2FyZSBnZW5lcmF0aW9uIHNpbmNlIHRoZSB3b3JrbG9hZHMgYSB0b28g ZGlmZmVyZW50LiBUaGUgbmVlZHMgb2YKPj4gYSBuZXdlciBoL3cgYXJlIHRvbyBvYnNjdXJlIGZv ciBtZSBhbmQgYWJzZW5jZSBvZiB1c2Vyc3BhY2UgY29kZSwKPj4gZmlybXdhcmUgc291cmNlcyBh bmQgZnVsbCBoL3cgZG9jdW1lbnRhdGlvbiBkbyBub3QgaGVscC4KPj4KPj4gVGhlcmUgc3RpbGwg c2hvdWxkIGJlIHF1aXRlIGEgbG90IHRvIHNoYXJlLCBidXQgdGhpbmdzIGxpa2UKPj4gbWFwcGlu Zy10by1jaGFubmVsIGFuZCBWTSBzeW5jIHBvaW50cyBhcmUgdG9vIGZhciBhd2F5IGZyb20gb2xk ZXIgaC93LAo+PiBJTU8uIFRoaXMgbWVhbnMgdGhhdCBjb2RlIHBhdGggYmVmb3JlIGRybS1zY2hl ZCBhbmQgcGF0aCBmb3Igam9iLXRpbWVvdXQKPj4gaGFuZGxpbmcgc2hvdWxkIGJlIHNlcGFyYXRl Lgo+Pgo+PiBNYXliZSBsYXRlciBvbiBpdCB3aWxsIGJlY29tZSBjbGVhbmVyIHRoYXQgd2UgYWN0 dWFsbHkgY291bGQgdW5pZnkgaXQKPj4gYWxsIG5pY2VseSwgYnV0IGZvciBub3cgaXQgZG9lc24n dCBsb29rIGxpa2UgYSBnb29kIGlkZWEgdG8gbWUuCj4gCj4gU29ycnkgZm9yIGp1bXBpbmcgaW4g cmF0aGVyIHJhbmRvbWx5IGhlcmUgYW5kIGVsc2V3aGVyZSwgYnV0IGl0J3MgYmVlbiBhCj4gbG9u ZyB0aW1lIHNpbmNlIHRoZSBkaXNjdXNzaW9uIGFuZCBJIGp1c3Qgd2FudCB0byBzaGFyZSBteSB0 aG91Z2h0cyBvbiBhCj4gY291cGxlIG9mIHRvcGljcyBpbiBvcmRlciB0byBob3BlZnVsbHkgaGVs cCBtb3ZlIHRoaXMgZm9yd2FyZCBzb21laG93Lgo+IAo+IEZvciBVQVBJLCAidW5pZnlpbmcgaXQg bGF0ZXIiIGRvZXNuJ3QgcmVhbGx5IHdvcmsuCgpPZiBjb3Vyc2UgSSBtZWFudCBhICJsYXRlciB2 ZXJzaW9uIG9mIHRoaXMgc2VyaWVzIiA6KSBTb3JyeSBmb3Igbm90Cm1ha2luZyBpdCBjbGVhci4K Cj4gU28gSSB0aGluayB0aGUgb25seQo+IHJlYWxpc3RpYyBvcHRpb24gaXMgdG8gbWFrZSBhIGJl c3QgYXR0ZW1wdCBhdCBnZXR0aW5nIHRoZSBVQUJJIHJpZ2h0IHNvCj4gdGhhdCBpdCB3b3JrcyBm b3IgYWxsIGV4aXN0aW5nIHVzZS1jYXNlcyBhbmQgaWRlYWxseSBwZXJoYXBzIGV2ZW4gYXMgb2YK PiB5ZXQgdW5rbm93biB1c2UtY2FzZXMgaW4gdGhlIGZ1dHVyZS4gQXMgd2l0aCBhbGwgQVBJcyB0 aGlzIG1lYW5zIHRoYXQKPiB0aGVyZSdzIGdvaW5nIHRvIGJlIGEgbmVlZCB0byBhYnN0cmFjdCBh d2F5IHNvbWUgb2YgdGhlIGhhcmR3YXJlIGRldGFpbHMKPiBzbyB0aGF0IHdlIGRvbid0IGhhdmUg dG8gZGVhbCB3aXRoIHRvbyBtYW55IGxvdy1sZXZlbCBkZXRhaWxzIGluCj4gdXNlcnNwYWNlLCBi ZWNhdXNlIG90aGVyd2lzZSB0aGUgVUFQSSBpcyBqdXN0IGdvaW5nIHRvIGJlIGEgdXNlbGVzcwo+ IG1lc3MuCj4gCj4gSSB0aGluayBhIHByb3Bvc2FsIHN1Y2ggYXMgdGhlIGFib3ZlIHRvIGFsbG93 IGJvdGggaW1wbGljaXQgYW5kIGV4cGxpY2l0Cj4gc3luY3BvaW50cyBtYWtlcyBzZW5zZS4gRm9y IHdoYXQgaXQncyB3b3J0aCwgaXQncyBmYWlybHkgc2ltaWxhciB0byB3aGF0Cj4gd2UgaGFkIGNv bWUgdXAgd2l0aCBsYXN0IHRpbWUgd2UgdHJpZWQgZGVzdGFnaW5nIHRoZSBBQkksIGFsdGhvdWdo IGJhY2sKPiBhdCB0aGUgdGltZSBJJ20gbm90IHN1cmUgd2UgaGFkIGV2ZW4gY29uc2lkZXJlZCBl eHBsaWNpdCBzeW5jcG9pbnQgdXNhZ2UKPiB5ZXQuIEkgdGhpbmsgd2hlcmUgcmVhc29uYWJseSBw b3NzaWJsZSB0aGlzIGtpbmQgb2Ygb3B0aW9uYWwgYmVoYXZpb3VyCj4gaXMgYWNjZXB0YWJsZSwg YnV0IEkgZG9uJ3QgdGhpbmsgaGF2aW5nIHR3byBjb21wbGV0ZWx5IHNlcGFyYXRlIHBhdGhzIGlz Cj4gZ29pbmcgdG8gaGVscCBpbiBhbnkgd2F5LiBJZiBhbnl0aGluZyBpdCdzIGp1c3QgZ29pbmcg dG8gbWFrZSBpdCBtb3JlCj4gZGlmZmljdWx0IHRvIG1haW50YWluIHRoZSBjb2RlIGFuZCBnZXQg aXQgdG8gYSB1c2FibGUgc3RhdGUgaW4gdGhlIGZpcnN0Cj4gcGxhY2UuCj4gCj4gTGlrZSBJIHNh aWQgZWxzZXdoZXJlLCB0aGUgcHJvZ3JhbW1pbmcgbW9kZWwgZm9yIGhvc3QxeCBoYXNuJ3QgY2hh bmdlZAo+IHNpbmNlIFRlZ3JhMjAuIEl0J3MgcmF0aGVyIGV2b2x2ZWQgYW5kIGdhaW5lZCBhIGNv dXBsZSBtb3JlIGZlYXR1cmVzLAo+IGJ1dCB0aGF0IGRvZXNuJ3QgY2hhbmdlIGFueXRoaW5nIGFi b3V0IGhvdyB1c2Vyc3BhY2UgdXNlcyBpdC4KCk5vdCBoYXZpbmcgYSBjb21wbGV0ZSBjb250cm9s IG92ZXIgc3luYyBwb2ludHMgc3RhdGUgaXMgYSByYWRpY2FsCmNoYW5nZSwgSU1PLiBJIHByZWZl ciBub3QgdG8gdXNlIHRoaXMgbGVnYWN5IGFuZCBlcnJvci1wcm9uZSB3YXkgb2Ygc3luYwpwb2lu dHMgaGFuZGxpbmcgYXQgbGVhc3QgZm9yIG9sZGVyIGgvdyB3aGVyZSBpdCdzIHBvc3NpYmxlIHRv IGRvLiBUaGlzCmlzIHdoYXQgZG93bnN0cmVhbSBkcml2ZXIgZGlkIDEwIHllYXJzIGFnbyBhbmQg d2hhdCBpdCBzdGlsbCBjb250aW51ZXMKdG8gZG8uIEkgd2FzIHZlcnkgaGFwcHkgdG8gbW92ZSBh d2F5IGZyb20gdGhpcyB1bm5lY2Vzc2FyeSBjb21wbGljYXRpb24KaW4gdGhlIGV4cGVyaW1lbnRh bCBncmF0ZS1rZXJuZWwgZHJpdmVyIGFuZCBJIHRoaW5rIHRoaXMgd2lsbCBiZSBncmVhdAp0byBk byBpbiB0aGUgbWFpbmxpbmUgYXMgd2VsbC4KClRoZSBuZWVkIHRvIG1hcCBidWZmZXJzIGV4cGxp Y2l0bHkgaXMgYWxzbyBhIGJpZyBkaWZmZXJlbmNlLiBUaGUgbmVlZCB0bwptYXAgQk8gZm9yIGVh Y2ggY2hhbm5lbCBpcyBhIHF1aXRlIGJpZyBvdmVyLWNvbXBsaWNhdGlvbiBhcyB3ZSBhbHJlYWR5 CmZvdW5kIG91dCBpbiB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIFVBUEkuCgpBbHJpZ2h0LCBwZXJo YXBzIHRoZSBtYXBwaW5nIGNvdWxkIGltcHJvdmVkIGZvciBvbGRlciB1c2Vyc3BhY2UgaWYgd2UK d2lsbCBtb3ZlIGF3YXkgZnJvbSBhIHBlci1jaGFubmVsIGNvbnRleHRzIHRvIGEgc2luZ2xlIERS TSBjb250ZXh0IGxpa2UKSSBhbHJlYWR5IHdhcyBzdWdnZXN0aW5nIHRvIE1pa2tvIGJlZm9yZS4g SS5lLiBpbnN0ZWFkIG9mIG1hcHBpbmcgQk8gInRvCmEgY2hhbm5lbCIsIHdlIHdpbGwgbmVlZCB0 byBtYXAgQk8gInRvIGgvdyBjbGllbnRzIiB3aXRoaW4gdGhlIERSTQpjb250ZXh0LiBUaGlzIHNo b3VsZCBhbGxvdyBvbGRlciB1c2Vyc3BhY2UgdG8gY3JlYXRlIGEgc2luZ2xlIG1hcHBpbmcKZm9y IGFsbCBjaGFubmVscy9jbGllbnRzIHVzaW5nIGEgc2luZ2xlIElPQ1RMIGFuZCB0aGVuIHRvIGhh dmUgYSBzaW5nbGUKIm1hcHBpbmcgaGFuZGxlIiB0byBjYXJlIGFib3V0LiBPYmplY3Rpb25zPwpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwg bWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK