From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mail.toke.dk (Postfix) with ESMTPS id 5677E9B29F4 for ; Thu, 3 Nov 2022 16:25:24 +0100 (CET) Authentication-Results: mail.toke.dk; dkim=pass (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=hLR5DwLj DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1667489123; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=FxLknX4Dr+lEWZuVdXeEwVh4CFMkJIAad9Vx7F97Myg=; b=hLR5DwLjUkKTZgGpv1WuoZxWECJtfZzK6H5ryagMYI8R8Q2KH2wmr8eZ5zvthowA7IVtZY f6xZA9ESuY1JUYPxppGezaDJrVlOS5d70slU/Yql2PI/eDWvse/1d/prqTDFgUQpfNhnXz Z+rp6to4m6nXYcDW6bN2rAlGbeS7+5A= Received: from mail-ej1-f69.google.com (mail-ej1-f69.google.com [209.85.218.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-225-wS4Qjj6gPUePd4emY12nsw-1; Thu, 03 Nov 2022 11:25:20 -0400 X-MC-Unique: wS4Qjj6gPUePd4emY12nsw-1 Received: by mail-ej1-f69.google.com with SMTP id oz34-20020a1709077da200b007adc8d68e90so1489812ejc.11 for ; Thu, 03 Nov 2022 08:25:19 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:in-reply-to:references:to :content-language:subject:cc:user-agent:mime-version:date:message-id :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=FxLknX4Dr+lEWZuVdXeEwVh4CFMkJIAad9Vx7F97Myg=; b=IXNUleEzNbsKoOe+zLrSYwwx475I0bUOJBG2/VVgD2O2/GhGFb2dPxoSegTRGa7Qly OV+9mg7V5N3DbmHabvI9x484cX3sSzsyLFXYEoQDFb9R+Q4xJc4V+QSjY2xH4sfQ6x4C qUCWckmVJgi7rwP4tUGbQdv8Xy2AmGCPOvgXW9HG1tJLmua72dtZfM7+k0Xm1OfOGj9q 6tAjvjGQ5DPwDlENAm5kl8Z85oPJrR3VPcc94FVgVAbpbOZKWm89KhUSQ2AhWkEkY1hd sJFy3YDjYi+yvngx4WF3cnBxV4+Aa7+RnL9TzWPB6qBjDtxzvbRv3Vr1VzI+vgR/BSRW zAtw== X-Gm-Message-State: ACrzQf03kh57pbpyyKMzTYhrwSHg0RZZeqGISro2kzXZTHaUvsfDcvVB LkeFgtDCjGw3/Q6bNjqVan2NA/gNR0iBw4gSMEtBlIDiGG610HMnYsyyXJhfMHMo0J5AveDwHc1 pkdQ45EvwvQYWkZHpqU/x X-Received: by 2002:a05:6402:5510:b0:459:5ea:9bc0 with SMTP id fi16-20020a056402551000b0045905ea9bc0mr4209442edb.152.1667489118599; Thu, 03 Nov 2022 08:25:18 -0700 (PDT) X-Google-Smtp-Source: AMsMyM4HulvbSJDEYzS6l9D4wa2lXruzJnGJ2K7yGk5WihK6Ks0IyqLtq43ro6Q5Wd+UvnSrDG5IEg== X-Received: by 2002:a05:6402:5510:b0:459:5ea:9bc0 with SMTP id fi16-20020a056402551000b0045905ea9bc0mr4209393edb.152.1667489118199; Thu, 03 Nov 2022 08:25:18 -0700 (PDT) Received: from [192.168.41.200] (83-90-141-187-cable.dk.customer.tdc.net. [83.90.141.187]) by smtp.gmail.com with ESMTPSA id l1-20020a1709060cc100b007adf2e4c6f7sm599887ejh.195.2022.11.03.08.25.16 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 03 Nov 2022 08:25:17 -0700 (PDT) From: Jesper Dangaard Brouer X-Google-Original-From: Jesper Dangaard Brouer Message-ID: <7fafd655-950f-bf1d-a37a-aa08978ddfa8@redhat.com> Date: Thu, 3 Nov 2022 16:25:15 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.3.1 To: =?UTF-8?Q?Toke_H=c3=b8iland-J=c3=b8rgensen?= , Jesper Dangaard Brouer , Stanislav Fomichev References: <20221027200019.4106375-1-sdf@google.com> <635bfc1a7c351_256e2082f@john.notmuch> <20221028110457.0ba53d8b@kernel.org> <635c62c12652d_b1ba208d0@john.notmuch> <20221028181431.05173968@kernel.org> <5aeda7f6bb26b20cb74ef21ae9c28ac91d57fae6.camel@siemens.com> <875yg057x1.fsf@toke.dk> <77b115a0-bbba-48eb-89bd-3078b5fb7eeb@linux.dev> <0c00ba33-f37b-dfe6-7980-45920ffa273b@linux.dev> <48ba6e77-1695-50b3-b27f-e82750ee70bb@redhat.com> <87iljx2ey4.fsf@toke.dk> <87cza43nlu.fsf@toke.dk> <874jvg2og4.fsf@toke.dk> In-Reply-To: <874jvg2og4.fsf@toke.dk> X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Language: en-US Content-Type: text/plain; charset="utf-8"; format="flowed" Content-Transfer-Encoding: base64 Message-ID-Hash: DDKNY3EVID5ELVS3DV3ZQJUKZSR4WDPO X-Message-ID-Hash: DDKNY3EVID5ELVS3DV3ZQJUKZSR4WDPO X-MailFrom: jbrouer@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: brouer@redhat.com, Martin KaFai Lau , "Bezdeka, Florian" , "kuba@kernel.org" , "john.fastabend@gmail.com" , "alexandr.lobakin@intel.com" , "anatoly.burakov@intel.com" , "song@kernel.org" , "Deric, Nemanja" , "andrii@kernel.org" , "Kiszka, Jan" , "magnus.karlsson@gmail.com" , "willemb@google.com" , "ast@kernel.org" , "yhs@fb.com" , "kpsingh@kernel.org" , "daniel@iogearbox.net" , "bpf@vger.kernel.org" , "mtahhan@redhat.com" , "xdp-hints@xdp-project.net" , "netdev@vger.kernel.org" , "jolsa@kernel.org" , "haoluo@google.com" X-Mailman-Version: 3.3.5 Precedence: list Subject: [xdp-hints] Re: [RFC bpf-next 0/5] xdp: hints via kfuncs List-Id: XDP hardware hints design discussion Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: DQoNCk9uIDAzLzExLzIwMjIgMTMuNDgsIFRva2UgSMO4aWxhbmQtSsO4cmdlbnNlbiB3cm90ZToN Cj4gSmVzcGVyIERhbmdhYXJkIEJyb3VlciA8amJyb3VlckByZWRoYXQuY29tPiB3cml0ZXM6DQo+ IA0KPj4gT24gMDMvMTEvMjAyMiAwMS4wOSwgVG9rZSBIw7hpbGFuZC1Kw7hyZ2Vuc2VuIHdyb3Rl Og0KPj4+IFN0YW5pc2xhdiBGb21pY2hldiA8c2RmQGdvb2dsZS5jb20+IHdyaXRlczoNCj4+Pg0K Pj4+PiBPbiBXZWQsIE5vdiAyLCAyMDIyIGF0IDM6MDIgUE0gVG9rZSBIw7hpbGFuZC1Kw7hyZ2Vu c2VuIDx0b2tlQHJlZGhhdC5jb20+IHdyb3RlOg0KPj4+Pj4NCj4+Pj4+IEplc3BlciBEYW5nYWFy ZCBCcm91ZXIgPGpicm91ZXJAcmVkaGF0LmNvbT4gd3JpdGVzOg0KPj4+Pj4NCj4+Pj4+PiBPbiAw MS8xMS8yMDIyIDE4LjA1LCBNYXJ0aW4gS2FGYWkgTGF1IHdyb3RlOg0KPj4+Pj4+PiBPbiAxMC8z MS8yMiA2OjU5IFBNLCBTdGFuaXNsYXYgRm9taWNoZXYgd3JvdGU6DQo+Pj4+Pj4+PiBPbiBNb24s IE9jdCAzMSwgMjAyMiBhdCAzOjU3IFBNIE1hcnRpbiBLYUZhaSBMYXUNCj4+Pj4+Pj4+IDxtYXJ0 aW4ubGF1QGxpbnV4LmRldj4gd3JvdGU6DQo+Pj4+Pj4+Pj4NCj4+Pj4+Pj4+PiBPbiAxMC8zMS8y MiAxMDowMCBBTSwgU3RhbmlzbGF2IEZvbWljaGV2IHdyb3RlOg0KPj4+Pj4+Pj4+Pj4gMi4gQUZf WERQIHByb2dyYW1zIHdvbid0IGJlIGFibGUgdG8gYWNjZXNzIHRoZSBtZXRhZGF0YSB3aXRob3V0 DQo+Pj4+Pj4+Pj4+PiB1c2luZyBhDQo+Pj4+Pj4+Pj4+PiBjdXN0b20gWERQIHByb2dyYW0gdGhh dCBjYWxscyB0aGUga2Z1bmNzIGFuZCBwdXRzIHRoZSBkYXRhIGludG8gdGhlDQo+Pj4+Pj4+Pj4+ PiBtZXRhZGF0YSBhcmVhLiBXZSBjb3VsZCBzb2x2ZSB0aGlzIHdpdGggc29tZSBjb2RlIGluIGxp YnhkcCwNCj4+Pj4+Pj4+Pj4+IHRob3VnaDsgaWYNCj4+Pj4+Pj4+Pj4+IHRoaXMgY29kZSBjYW4g YmUgbWFkZSBnZW5lcmljIGVub3VnaCAoc28gaXQganVzdCBkdW1wcyB0aGUgYXZhaWxhYmxlDQo+ Pj4+Pj4+Pj4+PiBtZXRhZGF0YSBmdW5jdGlvbnMgZnJvbSB0aGUgcnVubmluZyBrZXJuZWwgYXQg bG9hZCB0aW1lKSwgaXQgbWF5IGJlDQo+Pj4+Pj4+Pj4+PiBwb3NzaWJsZSB0byBtYWtlIGl0IGdl bmVyaWMgZW5vdWdoIHRoYXQgaXQgd2lsbCBiZSBmb3J3YXJkLWNvbXBhdGlibGUNCj4+Pj4+Pj4+ Pj4+IHdpdGggbmV3IHZlcnNpb25zIG9mIHRoZSBrZXJuZWwgdGhhdCBhZGQgbmV3IGZpZWxkcywg d2hpY2ggc2hvdWxkDQo+Pj4+Pj4+Pj4+PiBhbGxldmlhdGUgRmxvcmlhbidzIGNvbmNlcm4gYWJv dXQga2VlcGluZyB0aGluZ3MgaW4gc3luYy4NCj4+Pj4+Pj4+Pj4NCj4+Pj4+Pj4+Pj4gR29vZCBw b2ludC4gSSBoYWQgdG8gY29udmVydCB0byBhIGN1c3RvbSBwcm9ncmFtIHRvIHVzZSB0aGUga2Z1 bmNzIDotKA0KPj4+Pj4+Pj4+PiBCdXQgeW91ciBzdWdnZXN0aW9uIHNvdW5kcyBnb29kOyBtYXli ZSBsaWJ4ZHAgY2FuIGFjY2VwdCBzb21lIGV4dHJhDQo+Pj4+Pj4+Pj4+IGluZm8gYWJvdXQgYXQg d2hpY2ggb2Zmc2V0IHRoZSB1c2VyIHdvdWxkIGxpa2UgdG8gcGxhY2UgdGhlIG1ldGFkYXRhDQo+ Pj4+Pj4+Pj4+IGFuZCB0aGUgbGlicmFyeSBjYW4gZ2VuZXJhdGUgdGhlIHJlcXVpcmVkIGJ5dGVj b2RlPw0KPj4+Pj4+Pj4+Pg0KPj4+Pj4+Pj4+Pj4gMy4gSXQgd2lsbCBtYWtlIGl0IGhhcmRlciB0 byBjb25zdW1lIHRoZSBtZXRhZGF0YSB3aGVuIGJ1aWxkaW5nDQo+Pj4+Pj4+Pj4+PiBTS0JzLiBJ DQo+Pj4+Pj4+Pj4+PiB0aGluayB0aGUgQ1BVTUFQIGFuZCB2ZXRoIHVzZSBjYXNlcyBhcmUgYWxz byBxdWl0ZSBpbXBvcnRhbnQsIGFuZCB0aGF0DQo+Pj4+Pj4+Pj4+PiB3ZSB3YW50IG1ldGFkYXRh IHRvIGJlIGF2YWlsYWJsZSBmb3IgYnVpbGRpbmcgU0tCcyBpbiB0aGlzIHBhdGguIE1heWJlDQo+ Pj4+Pj4+Pj4+PiB0aGlzIGNhbiBiZSByZXNvbHZlZCBieSBoYXZpbmcgYSBjb252ZW5pZW50IGtm dW5jIGZvciB0aGlzIHRoYXQgY2FuIGJlDQo+Pj4+Pj4+Pj4+PiB1c2VkIGZvciBwcm9ncmFtcyBk b2luZyBzdWNoIHJlZGlyZWN0cy4gRS5nLiwgeW91IGNvdWxkIGp1c3QgY2FsbA0KPj4+Pj4+Pj4+ Pj4geGRwX2NvcHlfbWV0YWRhdGFfZm9yX3NrYigpIGJlZm9yZSBkb2luZyB0aGUgYnBmX3JlZGly ZWN0LCBhbmQgdGhhdA0KPj4+Pj4+Pj4+Pj4gd291bGQgcmVjdXJzaXZlbHkgZXhwYW5kIGludG8g YWxsIHRoZSBrZnVuYyBjYWxscyBuZWVkZWQgdG8gZXh0cmFjdA0KPj4+Pj4+Pj4+Pj4gdGhlDQo+ Pj4+Pj4+Pj4+PiBtZXRhZGF0YSBzdXBwb3J0ZWQgYnkgdGhlIFNLQiBwYXRoPw0KPj4+Pj4+Pj4+ Pg0KPj4+Pj4+Pj4+PiBTbyB0aGlzIHhkcF9jb3B5X21ldGFkYXRhX2Zvcl9za2Igd2lsbCBjcmVh dGUgYSBtZXRhZGF0YSBsYXlvdXQgdGhhdA0KPj4+Pj4+Pj4+DQo+Pj4+Pj4+Pj4gQ2FuIHRoZSB4 ZHBfY29weV9tZXRhZGF0YV9mb3Jfc2tiIGJlIHdyaXR0ZW4gYXMgYSBicGYgcHJvZyBpdHNlbGY/ DQo+Pj4+Pj4+Pj4gTm90IHN1cmUgd2hlcmUgaXMgdGhlIGJlc3QgcG9pbnQgdG8gc3BlY2lmeSB0 aGlzIHByb2cgdGhvdWdoLg0KPj4+Pj4+Pj4+IFNvbWVob3cgZHVyaW5nDQo+Pj4+Pj4+Pj4gYnBm X3hkcF9yZWRpcmVjdF9tYXA/DQo+Pj4+Pj4+Pj4gb3IgdGhpcyBwcm9nIGJlbG9uZ3MgdG8gdGhl IHRhcmdldCBjcHVtYXAgYW5kIHRoZSB4ZHAgcHJvZw0KPj4+Pj4+Pj4+IHJlZGlyZWN0aW5nIHRv IHRoaXMNCj4+Pj4+Pj4+PiBjcHVtYXAgaGFzIHRvIHdyaXRlIHRoZSBtZXRhIGxheW91dCBpbiBh IHdheSB0aGF0IHRoZSBjcHVtYXAgaXMNCj4+Pj4+Pj4+PiBleHBlY3Rpbmc/DQo+Pj4+Pj4+Pg0K Pj4+Pj4+Pj4gV2UncmUgcHJvYmFibHkgaW50ZXJlc3RlZCBpbiB0cmlnZ2VyaW5nIGl0IGZyb20g dGhlIHBsYWNlcyB3aGVyZSB4ZHANCj4+Pj4+Pj4+IGZyYW1lcyBjYW4gZXZlbnR1YWxseSBiZSBj b252ZXJ0ZWQgaW50byBza2JzPw0KPj4+Pj4+Pj4gU28gZm9yIHBsYWluICdyZXR1cm4gWERQX1BB U1MnIGFuZCB0aGluZ3MgbGlrZSBicGZfcmVkaXJlY3QvZXRjPyAoSU9XLA0KPj4+Pj4+Pj4gYW55 dGhpbmcgdGhhdCdzIG5vdCBYRFBfRFJPUCAvIEFGX1hEUCByZWRpcmVjdCkuDQo+Pj4+Pj4+PiBX ZSBjYW4gcHJvYmFibHkgbWFrZSBpdCBtYWdpY2FsbHkgd29yaywgYW5kIGNhbiBnZW5lcmF0ZQ0K Pj4+Pj4+Pj4ga2VybmVsLWRpZ2VzdGlibGUgbWV0YWRhdGEgd2hlbmV2ZXIgZGF0YSA9PSBkYXRh X21ldGEsIGJ1dCB0aGUNCj4+Pj4+Pj4+IHF1ZXN0aW9uIC0gc2hvdWxkIHdlPw0KPj4+Pj4+Pj4g KG5lZWQgdG8gbWFrZSBzdXJlIHdlIHdvbid0IHJlZ3Jlc3MgYW55IGV4aXN0aW5nIGNhc2VzIHRo YXQgYXJlIG5vdA0KPj4+Pj4+Pj4gcmVseWluZyBvbiB0aGUgbWV0YWRhdGEpDQo+Pj4+Pj4+DQo+ Pj4+Pj4+IEluc3RlYWQgb2YgaGF2aW5nIHNvbWUga2VybmVsLWRpZ2VzdGlibGUgbWV0YSBkYXRh LCBob3cgYWJvdXQgY2FsbGluZw0KPj4+Pj4+PiBhbm90aGVyIGJwZiBwcm9nIHRvIGluaXRpYWxp emUgdGhlIHNrYiBmaWVsZHMgZnJvbSB0aGUgbWV0YSBhcmVhIGFmdGVyDQo+Pj4+Pj4+IF9feGRw X2J1aWxkX3NrYl9mcm9tX2ZyYW1lKCkgaW4gdGhlIGNwdW1hcCwgc28NCj4+Pj4+Pj4gcnVuX3hk cF9zZXRfc2tiX2ZpbGVkc19mcm9tX21ldGFkYXRhKCkgbWF5IGJlIGEgYmV0dGVyIG5hbWUuDQo+ Pj4+Pj4+DQo+Pj4+Pj4NCj4+Pj4+PiBJIHZlcnkgbXVjaCBsaWtlIHRoaXMgaWRlYSBvZiBjYWxs aW5nIGFub3RoZXIgYnBmIHByb2cgdG8gaW5pdGlhbGl6ZSB0aGUNCj4+Pj4+PiBTS0IgZmllbGRz IGZyb20gdGhlIG1ldGEgYXJlYS4gKEFzIGEgcmVtaW5kZXIsIGRhdGEgbmVlZCB0byBjb21lIGZy b20NCj4+Pj4+PiBtZXRhIGFyZWEsIGJlY2F1c2UgYXQgdGhpcyBwb2ludCB0aGUgaGFyZHdhcmUg UlgtZGVzYyBpcyBvdXQtb2Ytc2NvcGUpLg0KPj4+Pj4+IEknbSBvbmJvYXJkIHdpdGggeGRwX2Nv cHlfbWV0YWRhdGFfZm9yX3NrYigpIHBvcHVsYXRpbmcgdGhlIG1ldGEgYXJlYS4NCj4+Pj4+Pg0K Pj4+Pj4+IFdlIGNvdWxkIGludm9rZSB0aGlzIEJQRi1wcm9nIGluc2lkZSBfX3hkcF9idWlsZF9z a2JfZnJvbV9mcmFtZSgpLg0KPj4+Pj4+DQo+Pj4+Pj4gV2UgbWlnaHQgbmVlZCBhIG5ldyBCUEZf UFJPR19UWVBFX1hEUDJTS0IgYXMgdGhpcyBuZXcgQlBGLXByb2cNCj4+Pj4+PiBydW5feGRwX3Nl dF9za2JfZmllbGRzX2Zyb21fbWV0YWRhdGEoKSB3b3VsZCBuZWVkIGJvdGggeGRwX2J1ZmYgKyBT S0IgYXMNCj4+Pj4+PiBjb250ZXh0IGlucHV0cy4gUmlnaHQ/ICAoTm90IHN1cmUsIGlmIHRoaXMg aXMgYWNjZXB0YWJsZSB3aXRoIHRoZSBCUEYNCj4+Pj4+PiBtYWludGFpbmVycyBuZXcgcnVsZXMp DQo+Pj4+Pj4NCj4+Pj4+Pj4gVGhlIHhkcF9wcm9nQHJ4IHNldHMgdGhlIG1ldGEgZGF0YSBhbmQg dGhlbiByZWRpcmVjdC4gIElmIHRoZQ0KPj4+Pj4+PiB4ZHBfcHJvZ0ByeCBjYW4gYWxzbyBzcGVj aWZ5IGEgeGRwIHByb2cgdG8gaW5pdGlhbGl6ZSB0aGUgc2tiIGZpZWxkcw0KPj4+Pj4+PiBmcm9t IHRoZSBtZXRhIGFyZWEsIHRoZW4gdGhlcmUgaXMgbm8gbmVlZCB0byBoYXZlIGEga2Z1bmMgdG8g ZW5mb3JjZSBhDQo+Pj4+Pj4+IGtlcm5lbC1kaWdlc3RpYmxlIGxheW91dC4gIE5vdCBzdXJlIHdo YXQgaXMgYSBnb29kIHdheSB0byBzcGVjaWZ5IHRoaXMNCj4+Pj4+Pj4geGRwX3Byb2cgdGhvdWdo Li4uDQo+Pj4+Pj4NCj4+Pj4+PiBUaGUgY2hhbGxlbmdlIG9mIHJ1bm5pbmcgdGhpcyAoQlBGX1BS T0dfVFlQRV9YRFAyU0tCKSBCUEYtcHJvZyBpbnNpZGUNCj4+Pj4+PiBfX3hkcF9idWlsZF9za2Jf ZnJvbV9mcmFtZSgpIGlzIHRoYXQgaXQgbmVlZCB0byBrbm93IGhvd3RvIGRlY29kZSB0aGUNCj4+ Pj4+PiBtZXRhIGFyZWEgZm9yIGV2ZXJ5IGRldmljZSBkcml2ZXIgb3IgWERQLXByb2cgcG9wdWxh dGluZyB0aGlzIChhcyB2ZXRoDQo+Pj4+Pj4gYW5kIGNwdW1hcCBjYW4gZ2V0IHJlZGlyZWN0ZWQg cGFja2V0cyBmcm9tIG11bHRpcGxlIGRldmljZSBkcml2ZXJzKS4NCj4+Pj4+DQo+Pj4+PiBJZiB3 ZSBoYXZlIHRoZSBoZWxwZXIgdG8gY29weSB0aGUgZGF0YSAib3V0IG9mIiB0aGUgZHJpdmVycywg d2h5IGRvIHdlDQo+Pj4+PiBuZWVkIGEgc2Vjb25kIEJQRiBwcm9ncmFtIHRvIGNvcHkgZGF0YSB0 byB0aGUgU0tCPw0KPj4+Pj4NCj4+DQo+PiBJTUhPIHRoZSBzZWNvbmQgQlBGIHByb2dyYW0gdG8g cG9wdWxhdGUgdGhlIFNLQiBpcyBuZWVkZWQgdG8gYWRkDQo+PiBmbGV4aWJpbGl0eSBhbmQgZXh0 ZW5zaWJpbGl0eS4NCj4+DQo+PiBNeSBlbmQtZ29hbCBoZXJlIGlzIHRvIHNwZWVkdXAgcGFja2V0 IHBhcnNpbmcuDQo+PiBUaGlzIEJQRi1wcm9nIHNob3VsZCAoaW4gdGltZSkgYmUgYWJsZSB0byB1 cGRhdGUgc2tiLT50cmFuc3BvcnRfaGVhZGVyDQo+PiBhbmQgc2tiLT5uZXR3b3JrX2hlYWRlci4g IEFzIEkgbWVudGlvbmVkIGJlZm9yZSwgSFcgUlgtaGFzaCBhbHJlYWR5IHRlbGwNCj4+IHVzIHRo ZSBMMyBhbmQgTDQgcHJvdG9jb2xzIGFuZCBpbi1tb3N0LWNhc2VzIGhlYWRlci1sZW4uICBFdmVu IHdpdGhvdXQNCj4+IEhXLWhpbnRzLCB0aGUgWERQLXByb2cgbGlrZWx5IGhhdmUgcGFyc2VkIHRo ZSBwYWNrZXQgb25jZS4gVGhpcyBwYXJzZQ0KPj4gaW5mb3JtYXRpb24gaXMgbG9zdCB0b2RheSwg YW5kIHJlZG9uZSBieSBuZXRzdGFjay4gV2hhdCBhYm91dCBzdG9yaW5nDQo+PiB0aGlzIGhlYWRl ciBwYXJzZSBpbmZvIGluIG1ldGEgZGF0YSBhbmQgcmUtdXNlIGluIHRoaXMgbmV3IFhEUDJTS0Ig aG9vaz8NCj4+DQo+PiBUaGUgcmVhc29uIGZvciBzdWdnZXN0aW5nIHRoaXMgQlBGLXByb2cgdG8g YmUgYSBjYWxsYmFjaywgYXNzb2NpYXRlZA0KPj4gd2l0aCB0aGUgbmV0X2RldmljZSwgd2VyZSB0 aGF0IEhXIGlzIGdvaW5nIHRvIGRpZmZlciBvbiB3aGF0IEhXIGhpbnRzDQo+PiB0aGF0IEhXIHN1 cHBvcnQuICBUaHVzLCB3ZSBjYW4gYXZvaWQgYSBnZW5lcmljIEMtZnVuY3Rpb24gdGhhdCBuZWVk IHRvDQo+PiBjaGVjayBmb3IgYWxsIHRoZSBwb3NzaWJsZSBoaW50cywgYW5kIGluc3RlYWQgaGF2 ZSBhIEJQRi1wcm9nIHRoYXQgb25seQ0KPj4gY29udGFpbnMgdGhlIGNvZGUgdGhhdCBpcyByZWxl dmFudCBmb3IgdGhpcyBuZXRfZGV2aWNlLg0KPiANCj4gQnV0IHRoYXQncyBleGFjdGx5IHdoYXQg dGhlIHhkcF9jb3B5X21ldGFkYXRhX2Zvcl9za2IoKSBpcyEgSXQncyBhDQo+IGR5bmFtaWMgIkJQ RiBwcm9ncmFtIiAoZ2VuZXJhdGVkIGFzIHVucm9sbGVkIGtmdW5jIGNhbGxzKSBqdXN0IHJ1bm5p bmcNCj4gaW4gdGhlIGhlbHBlciBhbmQgc3Rhc2hpbmcgdGhlIHJlc3VsdHMgaW4gYW4gaW50ZXJt ZWRpYXRlIHN0cnVjdCBpbiB0aGUNCj4gbWV0YWRhdGEgYXJlYS4gQW5kIG9uY2UgaXQncyBkb25l IHRoYXQsIHdlIGRvbid0IG5lZWQgKmFub3RoZXIqIGR5bmFtaWMNCj4gQlBGIHByb2dyYW0gdG8g cmVhZCBpdCBiYWNrIG91dCBhbmQgcG9wdWxhdGUgdGhlIFNLQiwgYmVjYXVzZSB0aGUNCj4gaW50 ZXJtZWRpYXRlIGZvcm1hdCBpdCdzIGJlZW4gc3Rhc2hlZCBpbnRvIGlzIHVuZGVyIHRoZSBjb250 cm9sIG9mIHRoZQ0KPiBrZXJuZWwgKHdlIGp1c3QgbmVlZCBhIGZsYWcgdG8gaW5kaWNhdGUgdGhh dCBpdCdzIHRoZXJlKS4NCj4gDQo+Pj4+PiBJLmUuLCB0aGUgWERQIHByb2dyYW0gY2FsbHMgeGRw X2NvcHlfbWV0YWRhdGFfZm9yX3NrYigpOyB0aGlzIGludm9rZXMNCj4+Pj4+IGVhY2ggb2YgdGhl IGtmdW5jcyBuZWVkZWQgZm9yIHRoZSBtZXRhZGF0YSB1c2VkIGJ5IFNLQnMsIGFsbCBvZiB3aGlj aA0KPj4+Pj4gZ2V0IHVucm9sbGVkLiBUaGUgaGVscGVyIHRha2VzIHRoZSBvdXRwdXQgb2YgdGhl c2UgbWV0YWRhdGEtZXh0cmFjdGluZw0KPj4+Pj4ga2Z1bmNzIGFuZCBzdG9yZXMgaXQgInNvbWV3 aGVyZSIuIFRoaXMgInNvbWV3aGVyZSIgY291bGQgd2VsbCBiZSB0aGUNCj4+Pj4+IG1ldGFkYXRh IGFyZWE7IGJ1dCBpbiBhbnkgY2FzZSwgc2luY2UgaXQncyBoaWRkZW4gYXdheSBpbnNpZGUgYSBo ZWxwZXINCj4+Pj4+IChvciBrZnVuYykgZnJvbSB0aGUgY2FsbGluZyBYRFAgcHJvZ3JhbSdzIFBv ViwgdGhlIGhlbHBlciBjYW4ganVzdCBzdGFzaA0KPj4+Pj4gYWxsIHRoZSBkYXRhIGluIGEgZml4 ZWQgZm9ybWF0LCB3aGljaCBfX3hkcF9idWlsZF9za2JfZnJvbV9mcmFtZSgpIGNhbg0KPj4+Pj4g dGhlbiBqdXN0IHJlYWQgc3RhdGljYWxseS4gV2UgY291bGQgZXZlbiBtYWtlIHRoaXMgZm9ybWF0 IG1hdGNoIHRoZQ0KPj4+Pj4gZmllbGQgbGF5b3V0IG9mIHN0cnVjdCBza19idWZmLCBzbyBhbGwg d2UgaGF2ZSB0byBkbyBpcyBtZW1jcHkgYQ0KPj4+Pj4gY29udGlndW91cyBjaHVuayBvZiBtZW1v cnkgd2hlbiBidWlsZGluZyB0aGUgU0tCLg0KPj4+Pg0KPj4+PiArMQ0KPj4NCj4+IFNvcnJ5LCBJ IHRoaW5rIHRoaXMgImhpZGluZyIgbGF5b3V0IHRyaWNrIGlzIGdvaW5nIGluIGEgd3JvbmcgZGly ZWN0aW9uLg0KPj4NCj4+IEltYWdpbmUgdGhlIHVzZS1jYXNlIG9mIGNwdW1hcCByZWRpcmVjdC4g IFRoZSBwaHlzaWNhbCBkZXZpY2UgWERQLXByb2cNCj4+IGNhbGxzIHhkcF9jb3B5X21ldGFkYXRh X2Zvcl9za2IoKSB0byBleHRyYWN0IGluZm8gZnJvbSBSWC1kZXNjLCB0aGVuIGl0DQo+PiBjYWxs cyByZWRpcmVjdCBpbnRvIGNwdW1hcC4gIE9uIHJlbW90ZSBDUFUsIHRoZSB4ZHBfZnJhbWUgaXMg cGlja2VkIHVwLA0KPj4gYW5kIHRoZW4gSSB3YW50IHRvIHJ1biBhbm90aGVyIFhEUC1wcm9nIHRo YXQgd2FudCB0byBsb29rIGF0IHRoZXNlDQo+PiBIVy1oaW50cywgYW5kIHRoZW4gbGlrZWx5IGNh bGwgWERQX1BBU1Mgd2hpY2ggY3JlYXRlcyB0aGUgU0tCLCBhbHNvDQo+PiB1c2luZyB0aGVzZSBI Vy1oaW50cy4gIEkgdGFrZSBpdCwgaXQgd291bGQgbm90IGJlIHBvc3NpYmxlIHdoZW4gdXNpbmcN Cj4+IHRoZSB4ZHBfY29weV9tZXRhZGF0YV9mb3Jfc2tiKCkgaGVscGVyPw0KPiANCj4gWW91J3Jl IHJpZ2h0IHRoYXQgaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHJlYWQgdGhlIHZhbHVlcyBiYWNr IG91dA0KPiBhZ2FpbiBsYXRlci4gVGhhdCBpcyB0b3RhbGx5IHBvc3NpYmxlIHdpdGggdGhpcyBz Y2hlbWUsIHRob3VnaDsgdGhlDQo+ICd4ZHBfdG9fc2tiX21ldGFkYXRhJyBpcyBnb2luZyB0byBi ZSBpbiB0aGUgdm1saW51eCBCVEYsIHNvIGFuIFhEUA0KPiBwcm9ncmFtIGNhbiBqdXN0IHJlYWQg dGhhdC4gV2UgY2FuIGV4cGxpY2l0bHkgc3VwcG9ydCBpdCBieSB1c2luZyB0aGUNCj4gQlRGIElE IGFzIHRoZSAibWFnaWMgdmFsdWUiIGFzIHlvdSBzdWdnZXN0LCB3aGljaCB3b3VsZCBiZSBmaW5l IGJ5IG1lLg0KPiANCg0KSSdtIG9uLWJvYXJkIGlmIHdlIGFzIHlvdSBzdWdnZXN0LCBhZGQgdGhl IEJURl9JRCBhcyB0aGUgIm1hZ2ljIHZhbHVlIiANCihhcyBsYXN0IG1lbWJlciBkdWUgdG8gQUZf WERQIHByb2Nlc3NpbmcpLiAgV2hlbiANCnhkcF9jb3B5X21ldGFkYXRhX2Zvcl9za2IoKSB3cml0 ZXMgJ3hkcF90b19za2JfbWV0YWRhdGEnIGluIG1ldGFkYXRhIA0KYXJlYS4gIFdlIHNob3VsZCBz aW1wbHkgc2VlIHRoaXMgQlRGLUlEIGFzIGEgJ2Nvb2tpZScgb3IgbWFnaWMgbnVtYmVyLg0KDQo+ IEkgc3RpbGwgdGhpbmsgd2Ugc2hvdWxkIGJlIHVzaW5nIHRoZSBfX3JhbmRvbWl6ZV9sYXlvdXQg dHJpY2ssIHRob3VnaCwNCj4gcHJlY2lzZWx5IHNvIHRoYXQgQlBGIGNvbnN1bWVycyBhcmUgZm9y Y2VkIHRvIHVzZSBCVEYgcmVsb2NhdGlvbnMgdG8NCj4gcmVhZCBpdDsgb3RoZXJ3aXNlIHdlIHJp c2sgdGhlIHN0cnVjdCBsYXlvdXQgb3NzaWZ5aW5nIGludG8gVUFQSSBiZWNhdXNlDQo+IHBlb3Bs ZSBhcmUganVzdCBnb2luZyB0byBhc3N1bWUgaXQncyBzdGF0aWMuLi4NCj4gDQoNCkknbSBhbHNv IG9uLWJvYXJkIHdpdGggc29tZSBsZXZlbCBvZiByYW5kb21pemF0aW9uIHRvIHRoZSBzdHJ1Y3Qg dG8gDQpmb3JjZSBjb25zdW1lcnMgdG8gdXNlIEJURiBmb3IgcmVsb2NhdGlvbnMuIGUuZyBCVEYt SUQgY29va2llL21hZ2ljIA0Kc2hvdWxkIGJlIGF0IGEgZml4ZWQgbG9jYXRpb24uDQoNCg0KPj4+ PiBJJ20gY3VycmVudGx5IGRvaW5nIGV4YWN0bHkgd2hhdCB5b3UncmUgc3VnZ2VzdGluZyAobWlu dXMgbWF0Y2hpbmcgc2tiIGxheW91dCk6DQo+Pj4+DQo+Pj4+IHN0cnVjdCB4ZHBfdG9fc2tiX21l dGFkYXRhIHsNCj4+Pj4gICAgIHUzMiBtYWdpYzsgLy8gcmFuZG9taXplZCBhdCBib290DQo+Pj4+ ICAgICAuLi4gc2tiLWNvbnN1bWFibGUtbWV0YWRhdGEgaW4gZml4ZWQgZm9ybWF0DQo+Pj4+IH0g X19yYW5kb21pemVfbGF5b3V0Ow0KPj4+Pg0KPj4+PiBicGZfeGRwX2NvcHlfbWV0YWRhdGFfZm9y X3NrYigpIGRvZXMgYnBmX3hkcF9hZGp1c3RfbWV0YShjdHgsDQo+Pj4+IC1zaXplb2Yoc3RydWN0 IHhkcF90b19za2JfbWV0YWRhdGEpKSBhbmQgdGhlbiBjYWxscyBhIGJ1bmNoIG9mIGtmdW5jcw0K Pj4+PiB0byBmaWxsIGluIHRoZSBhY3R1YWwgZGF0YS4NCj4+Pj4NCj4+Pj4gVGhlbiwgYXQgX194 ZHBfYnVpbGRfc2tiX2Zyb21fZnJhbWUgdGltZSwgSSdtIGhhdmluZyBhIHJlZ3VsYXIga2VybmVs DQo+Pj4+IEMgY29kZSB0aGF0IHBhcnNlcyB0aGF0ICdzdHJ1Y3QgeGRwX3RvX3NrYl9tZXRhZGF0 YScuDQo+Pj4+IChUbyBiZSBwcmVjaXNlLCBJJ20gdHJ5aW5nIHRvIHBhcnNlIHRoZSBtZXRhZGF0 YSBmcm9tDQo+Pj4+IHNrYl9tZXRhZGF0YV9zZXQ7IGl0J3MgY2FsbGVkIGZyb20gX194ZHBfYnVp bGRfc2tiX2Zyb21fZnJhbWUsIGJ1dCBub3QNCj4+Pj4gMTAwJSBzdXJlIHRoYXQncyB0aGUgcmln aHQgcGxhY2UpLg0KPj4+PiAoSSBhbHNvIHJhbmRvbWl6ZSB0aGUgbGF5b3V0IGFuZCBtYWdpYyB0 byBtYWtlIHN1cmUgdXNlcnNwYWNlIGRvZXNuJ3QNCj4+Pj4gZGVwZW5kIG9uIGl0IGJlY2F1c2Ug bm90aGluZyBzdG9wcyB0aGlzIHBhY2tldCB0byBiZSByb3V0ZWQgaW50byB4c2sNCj4+Pj4gc29j a2V0Li4pDQo+Pj4NCj4+PiBBaCwgbmljZSB0cmljayB3aXRoIF9fcmFuZG9taXplX2xheW91dCAt IEkgYWdyZWUgd2UgbmVlZCB0byBkbyBzb21ldGhpbmcNCj4+PiB0byBwcmV2ZW50IHVzZXJzcGFj ZSBmcm9tIGluYWR2ZXJ0ZW50bHkgc3RhcnRpbmcgdG8gcmVseSBvbiB0aGlzLCBhbmQNCj4+PiB0 aGlzIHNlZW1zIGxpa2UgYSBncmVhdCBzb2x1dGlvbiENCj4+DQo+PiBTb3JyeSwgSSBkaXNhZ3Jl ZSB3aGVyZSB0aGlzIGlzIGdvaW5nLiAgV2h5IGRvIGFsbCBvZiBhIHN1ZGRlbiB3YW50IHRvDQo+ PiBwcmV2ZW50IHVzZXJzcGFjZSAoZS5nLiBBRl9YRFApIGZyb20gdXNpbmcgdGhpcyBkYXRhPyE/ DQo+IA0KPiBTZWUgYWJvdmU6IEkgZG9uJ3QgdGhpbmsgd2Ugc2hvdWxkIHByZXZlbnQgdXNlcnNw YWNlIGZyb20gdXNpbmcgaXQgKGFuZA0KPiB3ZSdyZSBub3QpLCBidXQgd2Ugc2hvdWxkIHByZXZl bnQgdGhlIHN0cnVjdCBsYXlvdXQgZnJvbSBvc3NpZnlpbmcuDQo+IA0KDQpPa2F5LCB0aGVuIHdl IGFyZSBpbiBhZ3JlZW1lbnQsIGF2b2lkIG9zc2lmeWluZyBzdHJ1Y3QgbGF5b3V0Lg0KDQo+PiBU aGUgaG9sZSBleGVyY2lzZSBzdGFydGVkIHdpdGggd2FudGluZyB0byBwcm92aWRlIEFGX1hEUCB3 aXRoIHRoZXNlDQo+PiBIVy1oaW50cy4gVGhlIGhpbnRzIGEgc3RhbmRhcmQgQUZfWERQIHVzZXIg d2FudHMgaXMgbGlrZWx5IHZlcnkNCj4+IHNpbWlsYXIgdG8gd2hhdCB0aGUgU0tCIHVzZXIgd2Fu dHMuIFdoeSBkbyB0aGUgQUZfWERQIHVzZXIgbmVlZCB0bw0KPj4gb3BlbiBjb2RlIHRoaXM/DQo+ Pg0KPj4gVGhlIEJURi1JRCBzY2hlbWUgcHJlY2lzZWx5IGFsbG93cyB1cyB0byBleHBvc2UgdGhp cyBsYXlvdXQgdG8NCj4+IHVzZXJzcGFjZSwgYW5kIGF0IHRoZSBzYW1lIHRpbWUgaGF2ZSBmcmVl ZG9tIHRvIGNoYW5nZSB0aGlzIGluIGtlcm5lbA0KPj4gc3BhY2UsIGFzIHVzZXJzcGFjZSBtdXN0 IGRlY29kZSB0aGUgQlRGLWxheW91dCBiZWZvcmUgcmVhZGluZyB0aGlzLg0KPj4gSSB3YXMgaG9w aW5nIHhkcF9jb3B5X21ldGFkYXRhX2Zvcl9za2IoKSBjb3VsZCBzaW1wbHkgdXNlIHRoZSBCVEYt SUQNCj4+IHNjaGVtZSwgd2l0aCB0aGUgQlRGLUlEIG9mIHN0cnVjdCB4ZHBfaGludHNfcnhfY29t bW9uLCBpcyB0byB0b28gbXVjaCB0bw0KPj4gYXNrIGZvcj8gIFlvdSBjYW4ganVzdCBjb25zaWRl ciB0aGUgQlRGLUlEIGFzIHRoZSBtYWdpYyBudW1iZXIsIGFzIGl0DQo+PiB3aWxsIGJlIG1vcmUt b3ItbGVzcyByYW5kb20gcGVyIGtlcm5lbCBidWlsZCAoYW5kIG1vZHVsZSBsb2FkIG9yZGVyKS4N Cj4gDQo+IEFzIG1lbnRpb25lZCBhYm92ZSwgSSB3b3VsZCBiZSB0b3RhbGx5IGZpbmUgd2l0aCBq dXN0IGhhdmluZyB0aGUNCj4geGRwX3RvX3NrYl9tZXRhZGF0YSBiZSBwYXJ0IG9mIEJURiwgZW5h YmxpbmcgYm90aCBYRFAgcHJvZ3JhbXMgYW5kDQo+IEFGX1hEUCBjb25zdW1lcnMgdG8gcmUtdXNl IGl0Lg0KPg0KDQpNeSB1c2UtY2FzZSBpcyB0aGF0IEFGX1hEUCB3aWxsIG5lZWQgdG8ga2V5IG9u IHRoaXMgcnVudGltZSBCVEYtSUQgbWFnaWMgDQp2YWx1ZSBhbnl3YXkgdG8gcmVhZCBvdXQgJ3hk cF90b19za2JfbWV0YWRhdGEnIHZhbHVlcy4gIEkgaGF2ZSBhbiANClhEUC1wcm9nIHJ1bm5pbmcs IHRoYXQgd2lsbCBSWC10aW1lc3RhbXAgb25seSB0aGUgdGltZS1zeW5jIHByb3RvY29sIA0KcGFj a2V0cy4gIENvZGUgd2lzZSwgSSB3aWxsIHNpbXBseSBhZGQgbXkgUlgtdGltZXN0YW1wIG9uIHRv cCBvZiBzdHJ1Y3QgDQoneGRwX3RvX3NrYl9tZXRhZGF0YScgYW5kIHRoZW4gdXBkYXRlIHRoZSBC VEYtSUQgbWFnaWMgdmFsdWUuICBJIGRvbid0IA0KbmVlZCB0byBhZGQgYSByZWFsIEJURi1JRCBi dXQganVzdCBzb21lIG1hZ2ljIHZhbHVlIHRoYXQgbXkgQUZfWERQIA0KdXNlcnNwYWNlIHByb2cg a25vd3MgYWJvdXQuICBJbiBteSBjdXJyZW50IGNvZGVbMV0sIEknbSBwbGF5aW5nIG5pY2UgYW5k IA0KYWRkcyB0aGUgQlBGLXByb2cncyBvd24gbG9jYWwgQlRGLUlEIHZpYSBicGZfY29yZV90eXBl X2lkX2xvY2FsKCkuDQoNClsxXSANCmh0dHBzOi8vZ2l0aHViLmNvbS94ZHAtcHJvamVjdC9icGYt ZXhhbXBsZXMvYmxvYi9tYXN0ZXIvQUZfWERQLWludGVyYWN0aW9uL2FmX3hkcF9rZXJuLmMjTDgw DQoNCg0KPj4+IExvb2sgZm9yd2FyZCB0byBzZWVpbmcgd2hhdCB0aGUgd2hvbGUgdGhpbmcgbG9v a3MgbGlrZSBpbiBhIG1vcmUNCj4+PiBjb21wbGV0ZSBmb3JtIDopDQo+Pg0KPj4gSSdtIHNvcnQg b2Ygb24tYm9hcmQgd2l0aCB0aGUga2Z1bmNzIGFuZCB1bnJvbGwtdHJpY2tzLCBpZiBJIGNhbiBz ZWUNCj4+IHNvbWUgZHJpdmVyIGNvZGUgdGhhdCBoYW5kbGVzIHRoZSBpc3N1ZXMgb2YgZ2V0dGlu ZyBIVyBzZXR1cCBzdGF0ZQ0KPj4gZXhwb3NlZCBuZWVkZWQgdG8gZGVjb2RlIHRoZSBSWC1kZXNj IGZvcm1hdC4NCj4+DQo+PiBJIHNlbnNlIHRoYXQgSSBteXNlbGYsIGhhdmVuJ3QgYmVlbiBnb29k IGVub3VnaCB0byBleHBsYWluL2NvbnZleSB0aGUNCj4+IEJURi1JRCBzY2hlbWUuICBOZXh0IHdl ZWssIEkgd2lsbCBjb2RlIHNvbWUgZXhhbXBsZXMgdGhhdCBkZW1vIGhvdw0KPj4gQlRGLUlEcyBj YW4gYmUgdXNlZCBmcm9tIEJQRi1wcm9ncywgZXZlbiBhcyBhIGNvbW11bmljYXRpb24gY2hhbm5l bA0KPj4gYmV0d2VlbiBkaWZmZXJlbnQgQlBGLXByb2dzIChlLmcuIGRydiBYRFAtcHJvZyAtPiBj cHVtYXAgWERQLXByb2cgLT4NCj4+IFRDLUJQRikuDQo+IA0KPiBGb3IgbXkgcGFydCBhdCBsZWFz dCwgaXQncyBub3QgYSBsYWNrIG9mIHVuZGVyc3RhbmRpbmcgdGhhdCBtYWtlcyBtZQ0KPiBwcmVm ZXIgdGhlIGtmdW5jIGFwcHJvYWNoLiBSYXRoZXIsIGl0J3MgdGhlIGNvbXBsZXhpdHkgb2YgaGF2 aW5nIHRvDQo+IHJlc29sdmUgdGhlIG11bHRpcGxlIEJURiBJRHMsIGFuZCB0aGUgcmlzayBvZiBv c3NpZnlpbmcgdGhlIHN0cnVjdA0KPiBsYXlvdXRzIGJlY2F1c2UgcGVvcGxlIGFyZSBnb2luZyB0 byBkbyB0aGF0IHdyb25nLiBVc2luZyBrZnVuY3MgZ2l2ZXMgdXMNCj4gbXVjaCBtb3JlIGNvbnRy b2wgb2YgdGhlIEFQSSwgZXNwZWNpYWxseSBpZiB3ZSBjb21iaW5lIGl0IHdpdGggc3RydWN0DQo+ IHJhbmRvbWlzYXRpb24gZm9yIHRoZSBiaXRzIHdlIGRvIGV4cG9zZS4NCj4gDQo+IFRyYW5zbGF0 aW5nIHdoYXQgd2UndmUgZGlzY3Vzc2VkIGFib3ZlIGludG8gdGhlIHRlcm1zIHVzZWQgaW4geW91 ciBwYXRjaA0KPiBzZXJpZXMsIHRoaXMgd291bGQgY29ycmVzcG9uZCB0byAqb25seSogaGF2aW5n IHRoZSB4ZHBfbWV0YWRhdGFfY29tbW9uDQo+IHN0cnVjdCBleHBvc2VkIHZpYSBCVEYsIGFuZCBu b3QgYm90aGVyaW5nIHdpdGggYWxsIHRoZSBvdGhlcg0KPiBkcml2ZXItc3BlY2lmaWMgbGF5b3V0 cy4gU28gYW4gWERQL0FGX1hEUCB1c2VyIHRoYXQgb25seSB3YW50cyB0byB1c2UNCj4gdGhlIG1l dGFkYXRhIHRoYXQncyBhbHNvIHVzZWQgYnkgdGhlIHN0YWNrIGNhbiBqdXN0IGNhbGwNCj4geGRw X2NvcHlfbWV0YWRhdGFfZm9yX3NrYigpLCBhbmQgdGhlbiByZWFkIHRoZSByZXN1bHRpbmcgbWV0 YWRhdGEgYXJlYQ0KPiAodXNpbmcgQlRGKS4gQW5kIGlmIHNvbWVvbmUgd2FudHMgdG8gYWNjZXNz IG1ldGFkYXRhIHRoYXQncyAqbm90KiB1c2VkDQo+IGJ5IHRoZSBzdGFjaywgdGhleSdkIGhhdmUg dG8gY2FsbCBhZGRpdGlvbmFsIGtmdW5jcyB0byBleHRyYWN0IHRoYXQuDQo+IA0KDQpJIGFncmVl LCB0aGF0IHRoaXMgcGF0Y2hzZXQgZG9lcy93aWxsIHNpbXBsaWZ5IG15IHBhdGNoc2V0LiAgTXkg ZHJpdmVyIA0Kc3BlY2lmaWMgc3RydWN0cyBmb3IgQlRGLUlEcyB3aWxsIG5vLWxvbmdlciBiZSBu ZWVkZWQuICBBcyBpdCBpcyBub3cgDQp1cC10byBYRFAtcHJvZyB0byBleHBsaWNpdGx5IGV4dGVu ZCB3aXRoIGZpZWxkcy4gVGhpcyBzaG91bGQgcmVkdWNlIHlvdXIgDQpjb25jZXJuIHdpdGggcmVz b2x2aW5nIG11bHRpcGxlIEJURiBJRHMuDQoNCk1heWJlIGFmdGVyIHRoaXMgcGF0Y2hzZXQsIEkg d291bGQgc3VnZ2VzdCB0aGF0IHdlIGNvdWxkIGNyZWF0ZSBzb21lIA0KImtlcm5lbC1jZW50cmFs IiBzdHJ1Y3QncyB0aGF0IGhhdmUgZS5nLiBSWC10aW1lc3RhbXAgYW5kIG1hcmsgKG1seDUgDQpo YXZlIEhXIHN1cHBvcnQgZm9yIG1hcmspIGFuZCBwcm90b2NvbCB0eXBlcyAodmlhIFJYLWhhc2gp LiBBcyB0aGVzZSANCmNvdWxkIGJlIHVzZWQgYnkgWERQLXByb2cncyB0aGF0IGV4cGxpY2l0bHkg ZXh0cmFjdCB0aGVzZSwgYW5kIA0KY29tbXVuaWNhdGUgdGhlIGxheW91dCB2aWEgc2V0dGluZyB0 aGUgQlRGLUlEICh2aWEgY2FsbGluZyANCmJwZl9jb3JlX3R5cGVfaWRfa2VybmVsKCkpLiAgTWFr aW5nIGl0IGVhc2llciB0byBjb25zdW1lIGZyb20gY2hhaW5lZCANCkJQRi1wcm9ncywgQUZfWERQ IGFuZCBldmVuIHZpYSBrZXJuZWwgQy1jb2RlIHRoYXQgdXBkYXRlcyBTS0IgZmllbGRzIGFzIA0K dGhlIG51bWJlciBvZiB0aGVzZSBtYWdpYyBCVEYtSUQncyB3aWxsIGJlIHNtYWxsIGVub3VnaC4N Cg0KDQo+IEFuZCBzaW1pbGFybHksIGlmIHNvbWVvbmUgd2FudHMgb25seSBhIHN1YnNldCBvZiB0 aGUgbWV0YWRhdGEgdXNlZCBieSBhbg0KPiBTS0IsIHRoZXkgY2FuIGp1c3QgKm5vdCogY2FsbCB4 ZHBfY29weV9tZXRhZGF0YV9mb3Jfc2tiKCksIGFuZCBpbnN0ZWFkDQo+IGp1c3QgY2FsbCB0aGUg aW5kaXZpZHVhbCBrZnVuY3MgdG8gZXh0cmFjdCBqdXN0IHRoZSBmaWVsZHMgdGhleSB3YW50Lg0K PiANCj4gSSB0aGluayB0aGlzIHN0cmlrZXMgYSBuaWNlIGJhbGFuY2UgYmV0d2VlbiB0aGUgZmxl eGliaWxpdHkgYnkgdGhlDQo+IGtlcm5lbCB0byBjaGFuZ2UgdGhpbmdzLCB0aGUgZmxleGliaWxp dHkgb2YgWERQIGNvbnN1bWVycyB0byByZXF1ZXN0DQo+IG9ubHkgdGhlIGRhdGEgdGhleSB3YW50 LCBhbmQgdGhlIGFiaWxpdHkgZm9yIHRoZSBzYW1lIG1ldGFkYXRhIHRvIGJlDQo+IGNvbnN1bWVk IGF0IGRpZmZlcmVudCBwb2ludHMuIFdEWVQ/DQoNCldpdGggYWJvdmUgY29tbWVudHMsIEkgdGhp bmsgd2UgYXJlIGNsb3NlciB0byBhbiBhZ3JlZW1lbnQgYWdhaW4uDQoNCi0tSmVzcGVyDQoNCg==