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 5AFB8C433DB for ; Fri, 29 Jan 2021 17:34:35 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 2F21364E07 for ; Fri, 29 Jan 2021 17:34:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231246AbhA2Rd5 (ORCPT ); Fri, 29 Jan 2021 12:33:57 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51548 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231533AbhA2RbD (ORCPT ); Fri, 29 Jan 2021 12:31:03 -0500 Received: from mail-lj1-x233.google.com (mail-lj1-x233.google.com [IPv6:2a00:1450:4864:20::233]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id ADEBEC061574 for ; Fri, 29 Jan 2021 09:30:10 -0800 (PST) Received: by mail-lj1-x233.google.com with SMTP id b20so3520912ljo.1 for ; Fri, 29 Jan 2021 09:30:10 -0800 (PST) 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=ZDj5Zd17VeIJsrPXYNhev0hV+6mgMniB3E2FshOdbyc=; b=Wemd7WC7dfiHsTC195al2zRYGaaYcj0e6irZj7qVUVoCa9pn/kidMabOQ5pSwu8s1/ 1wfvVbVyqmkCXd0butDfPvZ5DTsm0Vt2XPRn5wap6AFHThgjQOYspDdORej5h0SDCq0Y Z4m2rH6TIXLnIkDSjU99Qzc7P/54FKLDqzIZ+T6SsnrZmKHmWoziQAQWcqtq8qTVsY+A YJvgzO+Zit9qWd3ybLTJ5WL6WrSgUp+91FHrep2lOyJno+0qVHPs8QpR7q9BFl+CCfm9 Io+zuPmhnhkkEa1loNdRsiGqEwmJ5ms8rUwAc06DHFV9iuovxFyEX060UAi0+a7RnBXp gTIw== 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=ZDj5Zd17VeIJsrPXYNhev0hV+6mgMniB3E2FshOdbyc=; b=XGxtfbU8JmAhM5Wdu2Ez1gnzSb+auvdNDJYefqEg5i/pT/0/C0GmFV/ijJcj0fPpDc IGbbexBHXkTPOSUtaPEnwvnh2jIBzTrQWzdvXQX9voAIcXALXKhqkaLHfXd/ZKfY6JMj 0OGp9CNNj7p6eKcCJZP8r9W0vH1Zop6rwVMRwwhH2Javk0cA2i6fVUS2HUIEtBXfwmqw TJbB+bizTPl+MQzXXG3NCynVFJQzltZQ5Px99hFgUGnIpyZt4jIaRybUTEriiiyNpt+Z xj8FICZ72kRHXxsXlGQ8pVGyeA8u54rsgFyRuJSPx38Bqc5+mFsvG6vR7t5M92Ghm8nx wKTg== X-Gm-Message-State: AOAM533OaI2do0G2Xihb9Qi1sGmW86A9W+272Qle++x1phKAt1cJoDeN fuHzlgeETdBuDPsmV4q4ZDc= X-Google-Smtp-Source: ABdhPJxx8aN8jAZEEFTgcJWKXPnTAMlks4CbTke3y3rQny5gMMUsrvv3Nur2CZYZ0Di8v/KNpCABcQ== X-Received: by 2002:a2e:9b42:: with SMTP id o2mr2849606ljj.99.1611941409221; Fri, 29 Jan 2021 09:30:09 -0800 (PST) Received: from ?IPv6:2a00:1370:814d:ea25:a10:76ff:fe69:21b6? ([2a00:1370:814d:ea25:a10:76ff:fe69:21b6]) by smtp.googlemail.com with ESMTPSA id 71sm2077043lfd.202.2021.01.29.09.30.07 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 29 Jan 2021 09:30:08 -0800 (PST) Subject: Re: [PATCH v5 00/21] Host1x sync point UAPI should not be used for tracking DRM jobs To: Thierry Reding , Mikko Perttunen Cc: 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> From: Dmitry Osipenko Message-ID: <1ff922b2-161d-c8b9-7b08-4454ff7329f8@gmail.com> Date: Fri, 29 Jan 2021 20:30:07 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.4.2 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 28.01.2021 19:58, Thierry Reding пишет: > On Thu, Jan 28, 2021 at 01:08:54PM +0200, Mikko Perttunen wrote: >> On 1/27/21 11:20 PM, Dmitry Osipenko wrote: >>> 26.01.2021 05:45, Mikko Perttunen пишет: >>>>> 2. We will probably need a dedicated drm_tegra_submit_cmd for sync point >>>>> increments.  The job's sync point will be allocated dynamically when job >>>>> is submitted.  We will need a fag for the sync_incr and wait_syncpt >>>>> commands, saying "it's a job's sync point increment/wait" >>>> >>>> Negative. Like I have explained in previous discussions, with the >>>> current way the usage of hardware resources is much more deterministic >>>> and obvious. I disagree on the point that this is much more complicated >>>> for the userspace. Separating syncpoint and channel allocation is one of >>>> the primary motivations of this series for me. >>> >>> Sync points are a limited resource. The most sensible way to work around >>> it is to keep sync points within kernel as much as possible. This is not >>> only much simpler for user space, but also allows to utilize DRM API >>> properly without re-inventing what already exists and it's easier to >>> maintain hardware in a good state. >> >> I've spent the last few years designing for automotive and industrial >> products, where we don't want to at runtime notice that the system is out of >> free syncpoints and because of that we can only process the next camera >> frame in a second or two instead of 16 milliseconds. We need to know that >> once we have allocated the resource, it is there. The newer chips are also >> designed to support this. >> >> Considering Linux is increasingly being used for such applications, and they >> are important target markets for NVIDIA, these need to be supported. >> >> Because of the above design constraint the userspace software that runs in >> these environments also expects resources to be allocated up front. This >> isn't a matter of having to design that software according to what kind of >> allocation API we decide do at Linux level -- it's no use designing for >> dynamic allocation if it leads to you not meeting the safety requirement of >> needing to ensure you have all resources allocated up front. >> >> This isn't a good design feature just in a car, but in anything that needs >> to be reliable. However, it does pose some tradeoffs, and if you think that >> running out of syncpoints on T20-T114 because of upfront allocation is an >> actual problem, I'm not opposed to having both options available. The word "reliable" contradicts to the error-prone approach. On the other hand, it should be very difficult to change the stubborn downstream firmware and we want driver to be usable as much as possible, so in reality not much can be done about it. > I think that's a fair point. I don't see why we can't support both > implicit and explicit syncpoint requests. If most of the use-cases can > work with implicit syncpoints and let the kernel handle all aspects of > it, that's great. But there's no reason we can't provide more explicit > controls for cases where it's really important that all the resources > are allocated upfront. > > Ultimately this is very specific to each use-case, so I think having > both options will provide us with the most flexibility. It should be fine to support both. This will add complexity to the driver, thus it needs to be done wisely. I'll need more time to think about it. 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 397E4C433E0 for ; Sat, 30 Jan 2021 11:28:44 +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 E350A64DDD for ; Sat, 30 Jan 2021 11:28:43 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E350A64DDD 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 B2BB96EC98; Sat, 30 Jan 2021 11:28:31 +0000 (UTC) Received: from mail-lj1-x229.google.com (mail-lj1-x229.google.com [IPv6:2a00:1450:4864:20::229]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0692A6EB98 for ; Fri, 29 Jan 2021 17:30:12 +0000 (UTC) Received: by mail-lj1-x229.google.com with SMTP id r14so11401100ljc.2 for ; Fri, 29 Jan 2021 09:30:11 -0800 (PST) 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=ZDj5Zd17VeIJsrPXYNhev0hV+6mgMniB3E2FshOdbyc=; b=Wemd7WC7dfiHsTC195al2zRYGaaYcj0e6irZj7qVUVoCa9pn/kidMabOQ5pSwu8s1/ 1wfvVbVyqmkCXd0butDfPvZ5DTsm0Vt2XPRn5wap6AFHThgjQOYspDdORej5h0SDCq0Y Z4m2rH6TIXLnIkDSjU99Qzc7P/54FKLDqzIZ+T6SsnrZmKHmWoziQAQWcqtq8qTVsY+A YJvgzO+Zit9qWd3ybLTJ5WL6WrSgUp+91FHrep2lOyJno+0qVHPs8QpR7q9BFl+CCfm9 Io+zuPmhnhkkEa1loNdRsiGqEwmJ5ms8rUwAc06DHFV9iuovxFyEX060UAi0+a7RnBXp gTIw== 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=ZDj5Zd17VeIJsrPXYNhev0hV+6mgMniB3E2FshOdbyc=; b=lg11V3ZHpW5c6JFHLlL57bEqgOrH13TYd5qJfGkrPFgUOn+ayU7CQdOWwCPRR8EDi9 Ir93EeCwj+bzJmcnoBQtbTnAh5Dep4YJtdUC2uMayHMYWG87DZUuti2Xs3ItuCOrh5C2 Fu0m1QiJTVW1N6uh4TKnGw62msKNKhI+Rpqw8Jq9zk+p8sRYkhrkkiQ/PqWDA9EBhyDB O/SwVkjicKjZCaOEXWX2rni3TM4gqhuEUx5B61uFzRPuMsovgygJmiJ+GC0T8jqIJX0D Ph05iCfv8yspoOcje5dx4GotrOXplJwwSRLjHoztRgkY3qggaNdwsx0dR1E+OSBeBKLk META== X-Gm-Message-State: AOAM5337xOBHLqWkEtJ82tRE8Z/q3LZlPv7+sTXKuo18HepF0erI7Ic5 9lp/75Om+ClyKIOovphbI0E= X-Google-Smtp-Source: ABdhPJxx8aN8jAZEEFTgcJWKXPnTAMlks4CbTke3y3rQny5gMMUsrvv3Nur2CZYZ0Di8v/KNpCABcQ== X-Received: by 2002:a2e:9b42:: with SMTP id o2mr2849606ljj.99.1611941409221; Fri, 29 Jan 2021 09:30:09 -0800 (PST) Received: from ?IPv6:2a00:1370:814d:ea25:a10:76ff:fe69:21b6? ([2a00:1370:814d:ea25:a10:76ff:fe69:21b6]) by smtp.googlemail.com with ESMTPSA id 71sm2077043lfd.202.2021.01.29.09.30.07 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 29 Jan 2021 09:30:08 -0800 (PST) Subject: Re: [PATCH v5 00/21] Host1x sync point UAPI should not be used for tracking DRM jobs To: Thierry Reding , Mikko Perttunen 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> From: Dmitry Osipenko Message-ID: <1ff922b2-161d-c8b9-7b08-4454ff7329f8@gmail.com> Date: Fri, 29 Jan 2021 20:30:07 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.4.2 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US X-Mailman-Approved-At: Sat, 30 Jan 2021 11:28:30 +0000 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: 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" MjguMDEuMjAyMSAxOTo1OCwgVGhpZXJyeSBSZWRpbmcg0L/QuNGI0LXRgjoKPiBPbiBUaHUsIEph biAyOCwgMjAyMSBhdCAwMTowODo1NFBNICswMjAwLCBNaWtrbyBQZXJ0dHVuZW4gd3JvdGU6Cj4+ IE9uIDEvMjcvMjEgMTE6MjAgUE0sIERtaXRyeSBPc2lwZW5rbyB3cm90ZToKPj4+IDI2LjAxLjIw MjEgMDU6NDUsIE1pa2tvIFBlcnR0dW5lbiDQv9C40YjQtdGCOgo+Pj4+PiAyLiBXZSB3aWxsIHBy b2JhYmx5IG5lZWQgYSBkZWRpY2F0ZWQgZHJtX3RlZ3JhX3N1Ym1pdF9jbWQgZm9yIHN5bmMgcG9p bnQKPj4+Pj4gaW5jcmVtZW50cy7CoCBUaGUgam9iJ3Mgc3luYyBwb2ludCB3aWxsIGJlIGFsbG9j YXRlZCBkeW5hbWljYWxseSB3aGVuIGpvYgo+Pj4+PiBpcyBzdWJtaXR0ZWQuwqAgV2Ugd2lsbCBu ZWVkIGEgZmFnIGZvciB0aGUgc3luY19pbmNyIGFuZCB3YWl0X3N5bmNwdAo+Pj4+PiBjb21tYW5k cywgc2F5aW5nICJpdCdzIGEgam9iJ3Mgc3luYyBwb2ludCBpbmNyZW1lbnQvd2FpdCIKPj4+Pgo+ Pj4+IE5lZ2F0aXZlLiBMaWtlIEkgaGF2ZSBleHBsYWluZWQgaW4gcHJldmlvdXMgZGlzY3Vzc2lv bnMsIHdpdGggdGhlCj4+Pj4gY3VycmVudCB3YXkgdGhlIHVzYWdlIG9mIGhhcmR3YXJlIHJlc291 cmNlcyBpcyBtdWNoIG1vcmUgZGV0ZXJtaW5pc3RpYwo+Pj4+IGFuZCBvYnZpb3VzLiBJIGRpc2Fn cmVlIG9uIHRoZSBwb2ludCB0aGF0IHRoaXMgaXMgbXVjaCBtb3JlIGNvbXBsaWNhdGVkCj4+Pj4g Zm9yIHRoZSB1c2Vyc3BhY2UuIFNlcGFyYXRpbmcgc3luY3BvaW50IGFuZCBjaGFubmVsIGFsbG9j YXRpb24gaXMgb25lIG9mCj4+Pj4gdGhlIHByaW1hcnkgbW90aXZhdGlvbnMgb2YgdGhpcyBzZXJp ZXMgZm9yIG1lLgo+Pj4KPj4+IFN5bmMgcG9pbnRzIGFyZSBhIGxpbWl0ZWQgcmVzb3VyY2UuIFRo ZSBtb3N0IHNlbnNpYmxlIHdheSB0byB3b3JrIGFyb3VuZAo+Pj4gaXQgaXMgdG8ga2VlcCBzeW5j IHBvaW50cyB3aXRoaW4ga2VybmVsIGFzIG11Y2ggYXMgcG9zc2libGUuIFRoaXMgaXMgbm90Cj4+ PiBvbmx5IG11Y2ggc2ltcGxlciBmb3IgdXNlciBzcGFjZSwgYnV0IGFsc28gYWxsb3dzIHRvIHV0 aWxpemUgRFJNIEFQSQo+Pj4gcHJvcGVybHkgd2l0aG91dCByZS1pbnZlbnRpbmcgd2hhdCBhbHJl YWR5IGV4aXN0cyBhbmQgaXQncyBlYXNpZXIgdG8KPj4+IG1haW50YWluIGhhcmR3YXJlIGluIGEg Z29vZCBzdGF0ZS4KPj4KPj4gSSd2ZSBzcGVudCB0aGUgbGFzdCBmZXcgeWVhcnMgZGVzaWduaW5n IGZvciBhdXRvbW90aXZlIGFuZCBpbmR1c3RyaWFsCj4+IHByb2R1Y3RzLCB3aGVyZSB3ZSBkb24n dCB3YW50IHRvIGF0IHJ1bnRpbWUgbm90aWNlIHRoYXQgdGhlIHN5c3RlbSBpcyBvdXQgb2YKPj4g ZnJlZSBzeW5jcG9pbnRzIGFuZCBiZWNhdXNlIG9mIHRoYXQgd2UgY2FuIG9ubHkgcHJvY2VzcyB0 aGUgbmV4dCBjYW1lcmEKPj4gZnJhbWUgaW4gYSBzZWNvbmQgb3IgdHdvIGluc3RlYWQgb2YgMTYg bWlsbGlzZWNvbmRzLiBXZSBuZWVkIHRvIGtub3cgdGhhdAo+PiBvbmNlIHdlIGhhdmUgYWxsb2Nh dGVkIHRoZSByZXNvdXJjZSwgaXQgaXMgdGhlcmUuIFRoZSBuZXdlciBjaGlwcyBhcmUgYWxzbwo+ PiBkZXNpZ25lZCB0byBzdXBwb3J0IHRoaXMuCj4+Cj4+IENvbnNpZGVyaW5nIExpbnV4IGlzIGlu Y3JlYXNpbmdseSBiZWluZyB1c2VkIGZvciBzdWNoIGFwcGxpY2F0aW9ucywgYW5kIHRoZXkKPj4g YXJlIGltcG9ydGFudCB0YXJnZXQgbWFya2V0cyBmb3IgTlZJRElBLCB0aGVzZSBuZWVkIHRvIGJl IHN1cHBvcnRlZC4KPj4KPj4gQmVjYXVzZSBvZiB0aGUgYWJvdmUgZGVzaWduIGNvbnN0cmFpbnQg dGhlIHVzZXJzcGFjZSBzb2Z0d2FyZSB0aGF0IHJ1bnMgaW4KPj4gdGhlc2UgZW52aXJvbm1lbnRz IGFsc28gZXhwZWN0cyByZXNvdXJjZXMgdG8gYmUgYWxsb2NhdGVkIHVwIGZyb250LiBUaGlzCj4+ IGlzbid0IGEgbWF0dGVyIG9mIGhhdmluZyB0byBkZXNpZ24gdGhhdCBzb2Z0d2FyZSBhY2NvcmRp bmcgdG8gd2hhdCBraW5kIG9mCj4+IGFsbG9jYXRpb24gQVBJIHdlIGRlY2lkZSBkbyBhdCBMaW51 eCBsZXZlbCAtLSBpdCdzIG5vIHVzZSBkZXNpZ25pbmcgZm9yCj4+IGR5bmFtaWMgYWxsb2NhdGlv biBpZiBpdCBsZWFkcyB0byB5b3Ugbm90IG1lZXRpbmcgdGhlIHNhZmV0eSByZXF1aXJlbWVudCBv Zgo+PiBuZWVkaW5nIHRvIGVuc3VyZSB5b3UgaGF2ZSBhbGwgcmVzb3VyY2VzIGFsbG9jYXRlZCB1 cCBmcm9udC4KPj4KPj4gVGhpcyBpc24ndCBhIGdvb2QgZGVzaWduIGZlYXR1cmUganVzdCBpbiBh IGNhciwgYnV0IGluIGFueXRoaW5nIHRoYXQgbmVlZHMKPj4gdG8gYmUgcmVsaWFibGUuIEhvd2V2 ZXIsIGl0IGRvZXMgcG9zZSBzb21lIHRyYWRlb2ZmcywgYW5kIGlmIHlvdSB0aGluayB0aGF0Cj4+ IHJ1bm5pbmcgb3V0IG9mIHN5bmNwb2ludHMgb24gVDIwLVQxMTQgYmVjYXVzZSBvZiB1cGZyb250 IGFsbG9jYXRpb24gaXMgYW4KPj4gYWN0dWFsIHByb2JsZW0sIEknbSBub3Qgb3Bwb3NlZCB0byBo YXZpbmcgYm90aCBvcHRpb25zIGF2YWlsYWJsZS4KClRoZSB3b3JkICJyZWxpYWJsZSIgY29udHJh ZGljdHMgdG8gdGhlIGVycm9yLXByb25lIGFwcHJvYWNoLiBPbiB0aGUKb3RoZXIgaGFuZCwgaXQg c2hvdWxkIGJlIHZlcnkgZGlmZmljdWx0IHRvIGNoYW5nZSB0aGUgc3R1YmJvcm4KZG93bnN0cmVh bSBmaXJtd2FyZSBhbmQgd2Ugd2FudCBkcml2ZXIgdG8gYmUgdXNhYmxlIGFzIG11Y2ggYXMgcG9z c2libGUsCnNvIGluIHJlYWxpdHkgbm90IG11Y2ggY2FuIGJlIGRvbmUgYWJvdXQgaXQuCgo+IEkg dGhpbmsgdGhhdCdzIGEgZmFpciBwb2ludC4gSSBkb24ndCBzZWUgd2h5IHdlIGNhbid0IHN1cHBv cnQgYm90aAo+IGltcGxpY2l0IGFuZCBleHBsaWNpdCBzeW5jcG9pbnQgcmVxdWVzdHMuIElmIG1v c3Qgb2YgdGhlIHVzZS1jYXNlcyBjYW4KPiB3b3JrIHdpdGggaW1wbGljaXQgc3luY3BvaW50cyBh bmQgbGV0IHRoZSBrZXJuZWwgaGFuZGxlIGFsbCBhc3BlY3RzIG9mCj4gaXQsIHRoYXQncyBncmVh dC4gQnV0IHRoZXJlJ3Mgbm8gcmVhc29uIHdlIGNhbid0IHByb3ZpZGUgbW9yZSBleHBsaWNpdAo+ IGNvbnRyb2xzIGZvciBjYXNlcyB3aGVyZSBpdCdzIHJlYWxseSBpbXBvcnRhbnQgdGhhdCBhbGwg dGhlIHJlc291cmNlcwo+IGFyZSBhbGxvY2F0ZWQgdXBmcm9udC4KPiAKPiBVbHRpbWF0ZWx5IHRo aXMgaXMgdmVyeSBzcGVjaWZpYyB0byBlYWNoIHVzZS1jYXNlLCBzbyBJIHRoaW5rIGhhdmluZwo+ IGJvdGggb3B0aW9ucyB3aWxsIHByb3ZpZGUgdXMgd2l0aCB0aGUgbW9zdCBmbGV4aWJpbGl0eS4K SXQgc2hvdWxkIGJlIGZpbmUgdG8gc3VwcG9ydCBib3RoLiBUaGlzIHdpbGwgYWRkIGNvbXBsZXhp dHkgdG8gdGhlCmRyaXZlciwgdGh1cyBpdCBuZWVkcyB0byBiZSBkb25lIHdpc2VseS4KCkknbGwg bmVlZCBtb3JlIHRpbWUgdG8gdGhpbmsgYWJvdXQgaXQuCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZl bEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9kcmktZGV2ZWwK