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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id B5E24C43334 for ; Tue, 14 Jun 2022 15:21:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=krN8Fqzmg3/t5HG5G7BEnYNo7TEcfodTfwzzHeFTgWI=; b=SQzv48r3iCE969 khPqrb/1dRQQdZR2LuzrmG0+76bCUvCZbODBNJkyYX5oObH2uZgd73i1tHqvVBVn5GmdtS17Tr9jp Oa6W2YkB0nH6UElJqPgb8GwvLQPVcod9tKNIMH3n96yqBbvfl+5GVwyuS6NJTqCxdLnFjijb6zkfZ uGcSHqVEJF1GG5/YgTqGxW+bAT2L8IMA03++6t66tLBTr1vVHIGfCSqTl2d+FEaX8pa72+oT5O7qs OoeMEhkxv4lMT3WGzv4S8TsB/B4P3PHPRYHTd3UgvcA/U1h7FUZ8s7QnwJ+eet6yySpJLlwu6rMGr 102w63bnuU+MM3cQ1tzw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1o18Ll-00A89G-1T; Tue, 14 Jun 2022 15:21:01 +0000 Received: from madras.collabora.co.uk ([46.235.227.172]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1o18LV-00A83F-Ea; Tue, 14 Jun 2022 15:20:49 +0000 Received: from [IPV6:2a01:e0a:120:3210:4a7b:8d3a:acaa:ec46] (unknown [IPv6:2a01:e0a:120:3210:4a7b:8d3a:acaa:ec46]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) (Authenticated sender: benjamin.gaignard) by madras.collabora.co.uk (Postfix) with ESMTPSA id 94C9C66016B6; Tue, 14 Jun 2022 16:20:43 +0100 (BST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1655220044; bh=8BdhfJPhS9pkvNh2AfdYyZoI34NuVVX/SWzfb6me7/0=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=VOMgR7KI+Xk/KVQS4/XKBzIx/eXtGwplgBLH8RN+PRwlxBC3b/soog/foQ9biZkhT lRFUa4c+cfYCJkcax+jPHBbNvpscZHBbJeZhwLB/tNRE+/BfLuPLXeb6veUweIrVsC u8JsmoDqnXQaGkbYVUS0x2Bn9DtynBY08OvYceJT7cuJY2S6YI+1ggHbog0y/pK7Ga yu49l/3pI641oc6CEMbnGcVRmNJgJErX/xl9ynLP8d6D/V+mR4uIAearMhiJ+GtMBm FIdYX6WX7qu/EHo9nA7J7afpXPf9sopp75iEZX7YTnW6rx3AUdcah5mQxYrZ1ES96D E8vN/bzTMip3A== Message-ID: <0fbf1961-c3f7-9205-4ec4-b7640614ae20@collabora.com> Date: Tue, 14 Jun 2022 17:20:41 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.9.1 Subject: Re: [PATCH v8 08/17] media: uapi: HEVC: Add documentation to uAPI structure Content-Language: en-US To: Hans Verkuil , mchehab@kernel.org, ezequiel@vanguardiasur.com.ar, p.zabel@pengutronix.de, gregkh@linuxfoundation.org, mripard@kernel.org, paul.kocialkowski@bootlin.com, wens@csie.org, jernej.skrabec@gmail.com, samuel@sholland.org, nicolas.dufresne@collabora.com, andrzej.p@collabora.com Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org, linux-staging@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, kernel@collabora.com References: <20220614083614.240641-1-benjamin.gaignard@collabora.com> <20220614083614.240641-9-benjamin.gaignard@collabora.com> <6960a5b6-441d-71a1-d99a-873b502301ca@xs4all.nl> From: Benjamin Gaignard In-Reply-To: <6960a5b6-441d-71a1-d99a-873b502301ca@xs4all.nl> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220614_082045_859793_B703B576 X-CRM114-Status: GOOD ( 32.09 ) X-BeenThere: linux-rockchip@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Upstream kernel work for Rockchip platforms List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org CkxlIDE0LzA2LzIwMjIgw6AgMTU6MzksIEhhbnMgVmVya3VpbCBhIMOpY3JpdMKgOgo+IE9uIDYv MTQvMjIgMTA6MzYsIEJlbmphbWluIEdhaWduYXJkIHdyb3RlOgo+PiBBZGQga2VybmVsLWRvYyBk b2N1bWVudGF0aW9uIGZvciBhbGwgdGhlIEhFVkMgc3RydWN0dXJlcy4KPj4KPj4gU2lnbmVkLW9m Zi1ieTogQmVuamFtaW4gR2FpZ25hcmQgPGJlbmphbWluLmdhaWduYXJkQGNvbGxhYm9yYS5jb20+ Cj4+IC0tLQo+PiB2ZXJzaW9uIDU6Cj4+IC0gRml4IG51bV9zaG9ydF90ZXJtX3JlZl9waWNfc2V0 cyBhbmQgbnVtX2xvbmdfdGVybV9yZWZfcGljc19zcHMKPj4KPj4gICAuLi4vbWVkaWEvdjRsL2V4 dC1jdHJscy1jb2RlYy5yc3QgICAgICAgICAgICAgfCAxNjQgKysrKysrKy0tLS0tLQo+PiAgIGlu Y2x1ZGUvbWVkaWEvaGV2Yy1jdHJscy5oICAgICAgICAgICAgICAgICAgICB8IDIyMSArKysrKysr KysrKysrKysrKy0KPj4gICAyIGZpbGVzIGNoYW5nZWQsIDMxMSBpbnNlcnRpb25zKCspLCA3NCBk ZWxldGlvbnMoLSkKPj4KPj4gZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFw aS9tZWRpYS92NGwvZXh0LWN0cmxzLWNvZGVjLnJzdCBiL0RvY3VtZW50YXRpb24vdXNlcnNwYWNl LWFwaS9tZWRpYS92NGwvZXh0LWN0cmxzLWNvZGVjLnJzdAo+PiBpbmRleCAxY2NmNmRkYTYxYjMu LjA2Yjk2N2RlMTQwYyAxMDA2NDQKPj4gLS0tIGEvRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBp L21lZGlhL3Y0bC9leHQtY3RybHMtY29kZWMucnN0Cj4+ICsrKyBiL0RvY3VtZW50YXRpb24vdXNl cnNwYWNlLWFwaS9tZWRpYS92NGwvZXh0LWN0cmxzLWNvZGVjLnJzdAo+PiBAQCAtMjY5NSw3MCAr MjY5NSw3NiBAQCBlbnVtIHY0bDJfbXBlZ192aWRlb19oZXZjX3NpemVfb2ZfbGVuZ3RoX2ZpZWxk IC0KPj4gICAgICAgICAgIG9mIEguMjY1IHNwZWNpZmljYXRpb25zLgo+PiAgICAgICAqIC0gX191 MTYKPj4gICAgICAgICAtIGBgcGljX3dpZHRoX2luX2x1bWFfc2FtcGxlc2BgCj4+IC0gICAgICAt Cj4+ICsgICAgICAtIFNwZWNpZmllcyB0aGUgd2lkdGggb2YgZWFjaCBkZWNvZGVkIHBpY3R1cmUg aW4gdW5pdHMgb2YgbHVtYSBzYW1wbGVzLgo+PiAgICAgICAqIC0gX191MTYKPj4gICAgICAgICAt IGBgcGljX2hlaWdodF9pbl9sdW1hX3NhbXBsZXNgYAo+PiAtICAgICAgLQo+PiArICAgICAgLSBT cGVjaWZpZXMgdGhlIGhlaWdodCBvZiBlYWNoIGRlY29kZWQgcGljdHVyZSBpbiB1bml0cyBvZiBs dW1hIHNhbXBsZXMuCj4+ICAgICAgICogLSBfX3U4Cj4+ICAgICAgICAgLSBgYGJpdF9kZXB0aF9s dW1hX21pbnVzOGBgCj4+IC0gICAgICAtCj4+ICsgICAgICAtIFNwZWNpZmllcyB0aGUgYml0IGRl cHRoIG9mIHRoZSBzYW1wbGVzIG9mIHRoZSBsdW1hIGFycmF5Lgo+IFNob3VsZG4ndCB0aGlzIGJl Ogo+Cj4gICAgICAgIC0gVGhpcyB2YWx1ZSBwbHVzIDggc3BlY2lmaWVzIHRoZSBiaXQgZGVwdGgg b2YgdGhlIHNhbXBsZXMgb2YgdGhlIGx1bWEgYXJyYXkuCj4KPiBTYW1lIGVsc2V3aGVyZS4KCkkg d2lsbCBjaGFuZ2UgdGhlbSBpbiB0aGUgbmV4dCB2ZXJzaW9uLgoKPgo+PiAgICAgICAqIC0gX191 OAo+PiAgICAgICAgIC0gYGBiaXRfZGVwdGhfY2hyb21hX21pbnVzOGBgCj4+IC0gICAgICAtCj4+ ICsgICAgICAtIFNwZWNpZmllcyB0aGUgYml0IGRlcHRoIG9mIHRoZSBzYW1wbGVzIG9mIHRoZSBj aHJvbWEgYXJyYXlzLgo+PiAgICAgICAqIC0gX191OAo+PiAgICAgICAgIC0gYGBsb2cyX21heF9w aWNfb3JkZXJfY250X2xzYl9taW51czRgYAo+PiAtICAgICAgLQo+PiArICAgICAgLSBTcGVjaWZp ZXMgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSBNYXhQaWNPcmRlckNudExzYi4KPj4gICAgICAg KiAtIF9fdTgKPj4gICAgICAgICAtIGBgc3BzX21heF9kZWNfcGljX2J1ZmZlcmluZ19taW51czFg YAo+PiAtICAgICAgLQo+PiArICAgICAgLSBQbHVzIDEgc3BlY2lmaWVzIHRoZSBtYXhpbXVtIHJl cXVpcmVkIHNpemUgb2YgdGhlIGRlY29kZWQgcGljdHVyZSBidWZmZXIgZm9yCj4gSSB3b3VsZCBw cmVmZXIgdG8gcGhyYXNlIHRoaXMgYXM6ICJUaGlzIHZhbHVlIHBsdXMgMSIKPiBJJ20gbm90IHN1 cmUgaG93IGNvbW1vbiB0aGUgY3VycmVudCBwaHJhc2UgaXMsIHRob3VnaC4gSWYgaXQgaXMgYWxy ZWFkeSB1c2VkIGV2ZXJ5d2hlcmUsCj4gdGhlbiBrZWVwIGl0IGFzLWlzLgo+Cj4+ICsgICAgICAg IHRoZSBDVlMKPiBNaXNzaW5nIHBlcmlvZCBhdCB0aGUgZW5kLgo+Cj4gV2hhdCBpcyBDVlM/IFBl cmhhcHMgd3JpdGUgdGhlIGZ1bGwgbmFtZT8KCml0IGlzIGZvciBjb2RlZCB2aWRlbyBzZXF1ZW5j ZSwgSSB3aWxsIHdyaXRlIHRoZSBmdWxsIG5hbWUgaW4gbmV4dCB2ZXJzaW9uLgoKPgo+PiAgICAg ICAqIC0gX191OAo+PiAgICAgICAgIC0gYGBzcHNfbWF4X251bV9yZW9yZGVyX3BpY3NgYAo+PiAt ICAgICAgLQo+PiArICAgICAgLSBJbmRpY2F0ZXMgdGhlIG1heGltdW0gYWxsb3dlZCBudW1iZXIg b2YgcGljdHVyZXMuCj4+ICAgICAgICogLSBfX3U4Cj4+ICAgICAgICAgLSBgYHNwc19tYXhfbGF0 ZW5jeV9pbmNyZWFzZV9wbHVzMWBgCj4+IC0gICAgICAtCj4+ICsgICAgICAtIE5vdCBlcXVhbCB0 byAwIGlzIHVzZWQgdG8gY29tcHV0ZSB0aGUgdmFsdWUgb2YgU3BzTWF4TGF0ZW5jeVBpY3R1cmVz W2ldLgo+PiAgICAgICAqIC0gX191OAo+PiAgICAgICAgIC0gYGBsb2cyX21pbl9sdW1hX2NvZGlu Z19ibG9ja19zaXplX21pbnVzM2BgCj4+IC0gICAgICAtCj4+ICsgICAgICAtIFBsdXMgMyBzcGVj aWZpZXMgdGhlIG1pbmltdW0gbHVtYSBjb2RpbmcgYmxvY2sgc2l6ZS4KPj4gICAgICAgKiAtIF9f dTgKPj4gICAgICAgICAtIGBgbG9nMl9kaWZmX21heF9taW5fbHVtYV9jb2RpbmdfYmxvY2tfc2l6 ZWBgCj4+IC0gICAgICAtCj4+ICsgICAgICAtIFNwZWNpZmllcyB0aGUgZGlmZmVyZW5jZSBiZXR3 ZWVuIHRoZSBtYXhpbXVtIGFuZCBtaW5pbXVtIGx1bWEgY29kaW5nIGJsb2NrIHNpemUuCj4+ICAg ICAgICogLSBfX3U4Cj4+ICAgICAgICAgLSBgYGxvZzJfbWluX2x1bWFfdHJhbnNmb3JtX2Jsb2Nr X3NpemVfbWludXMyYGAKPj4gLSAgICAgIC0KPj4gKyAgICAgIC0gUGx1cyAyIHNwZWNpZmllcyB0 aGUgbWluaW11bSBsdW1hIHRyYW5zZm9ybSBibG9jayBzaXplLgo+PiAgICAgICAqIC0gX191OAo+ PiAgICAgICAgIC0gYGBsb2cyX2RpZmZfbWF4X21pbl9sdW1hX3RyYW5zZm9ybV9ibG9ja19zaXpl YGAKPj4gLSAgICAgIC0KPj4gKyAgICAgIC0gU3BlY2lmaWVzIHRoZSBkaWZmZXJlbmNlIGJldHdl ZW4gdGhlIG1heGltdW0gYW5kIG1pbmltdW0gbHVtYSB0cmFuc2Zvcm0gYmxvY2sgc2l6ZS4KPj4g ICAgICAgKiAtIF9fdTgKPj4gICAgICAgICAtIGBgbWF4X3RyYW5zZm9ybV9oaWVyYXJjaHlfZGVw dGhfaW50ZXJgYAo+PiAtICAgICAgLQo+PiArICAgICAgLSBTcGVjaWZpZXMgdGhlIG1heGltdW0g aGllcmFyY2h5IGRlcHRoIGZvciB0cmFuc2Zvcm0gdW5pdHMgb2YgY29kaW5nIHVuaXRzIGNvZGVk Cj4+ICsgICAgICAgIGluIGludGVyIHByZWRpY3Rpb24gbW9kZS4KPj4gICAgICAgKiAtIF9fdTgK Pj4gICAgICAgICAtIGBgbWF4X3RyYW5zZm9ybV9oaWVyYXJjaHlfZGVwdGhfaW50cmFgYAo+PiAt ICAgICAgLQo+PiArICAgICAgLSBTcGVjaWZpZXMgdGhlIG1heGltdW0gaGllcmFyY2h5IGRlcHRo IGZvciB0cmFuc2Zvcm0gdW5pdHMgb2YgY29kaW5nIHVuaXRzIGNvZGVkIGluCj4+ICsgICAgICAg IGludHJhIHByZWRpY3Rpb24gbW9kZS4KPj4gICAgICAgKiAtIF9fdTgKPj4gICAgICAgICAtIGBg cGNtX3NhbXBsZV9iaXRfZGVwdGhfbHVtYV9taW51czFgYAo+PiAtICAgICAgLQo+PiArICAgICAg LSBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBiaXRzIHVzZWQgdG8gcmVwcmVzZW50IGVhY2ggb2Yg UENNIHNhbXBsZSB2YWx1ZXMgb2YgdGhlCj4+ICsgICAgICAgIGx1bWEgY29tcG9uZW50Lgo+PiAg ICAgICAqIC0gX191OAo+PiAgICAgICAgIC0gYGBwY21fc2FtcGxlX2JpdF9kZXB0aF9jaHJvbWFf bWludXMxYGAKPj4gLSAgICAgIC0KPj4gKyAgICAgIC0gU3BlY2lmaWVzIHRoZSBudW1iZXIgb2Yg Yml0cyB1c2VkIHRvIHJlcHJlc2VudCBlYWNoIG9mIFBDTSBzYW1wbGUgdmFsdWVzIG9mCj4+ICsg ICAgICAgIHRoZSBjaHJvbWEgY29tcG9uZW50cy4KPj4gICAgICAgKiAtIF9fdTgKPj4gICAgICAg ICAtIGBgbG9nMl9taW5fcGNtX2x1bWFfY29kaW5nX2Jsb2NrX3NpemVfbWludXMzYGAKPj4gLSAg ICAgIC0KPj4gKyAgICAgIC0gUGx1cyAzIHNwZWNpZmllcyB0aGUgbWluaW11bSBzaXplIG9mIGNv ZGluZyBibG9ja3MuCj4+ICAgICAgICogLSBfX3U4Cj4+ICAgICAgICAgLSBgYGxvZzJfZGlmZl9t YXhfbWluX3BjbV9sdW1hX2NvZGluZ19ibG9ja19zaXplYGAKPj4gLSAgICAgIC0KPj4gKyAgICAg IC0gU3BlY2lmaWVzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIG1heGltdW0gYW5kIG1pbmlt dW0gc2l6ZSBvZiBjb2RpbmcgYmxvY2tzLgo+PiAgICAgICAqIC0gX191OAo+PiAgICAgICAgIC0g YGBudW1fc2hvcnRfdGVybV9yZWZfcGljX3NldHNgYAo+PiAtICAgICAgLQo+PiArICAgICAgLSBT cGVjaWZpZXMgdGhlIG51bWJlciBvZiBzdF9yZWZfcGljX3NldCgpIHN5bnRheCBzdHJ1Y3R1cmVz IGluY2x1ZGVkIGluIHRoZSBTUFMuCj4+ICAgICAgICogLSBfX3U4Cj4+ICAgICAgICAgLSBgYG51 bV9sb25nX3Rlcm1fcmVmX3BpY3Nfc3BzYGAKPj4gLSAgICAgIC0KPj4gKyAgICAgIC0gU3BlY2lm aWVzIHRoZSBudW1iZXIgb2YgY2FuZGlkYXRlIGxvbmctdGVybSByZWZlcmVuY2UgcGljdHVyZXMg dGhhdCBhcmUKPj4gKyAgICAgICAgc3BlY2lmaWVkIGluIHRoZSBTUFMuCj4+ICAgICAgICogLSBf X3U4Cj4+ICAgICAgICAgLSBgYGNocm9tYV9mb3JtYXRfaWRjYGAKPj4gLSAgICAgIC0KPj4gKyAg ICAgIC0gU3BlY2lmaWVzIHRoZSBjaHJvbWEgc2FtcGxpbmcuCj4+ICAgICAgICogLSBfX3U4Cj4+ ICAgICAgICAgLSBgYHNwc19tYXhfc3ViX2xheWVyc19taW51czFgYAo+PiAtICAgICAgLQo+PiAr ICAgICAgLSBwbHVzIDEgc3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB0ZW1wb3JhbCBz dWItbGF5ZXJzLgo+IHBsdXMgLT4gUGx1cwo+Cj4+ICAgICAgICogLSBfX3U2NAo+PiAgICAgICAg IC0gYGBmbGFnc2BgCj4+ICAgICAgICAgLSBTZWUgOnJlZjpgU2VxdWVuY2UgUGFyYW1ldGVyIFNl dCBGbGFncyA8aGV2Y19zcHNfZmxhZ3M+YAo+PiBAQCAtMjgzNyw3ICsyODQzLDggQEAgZW51bSB2 NGwyX21wZWdfdmlkZW9faGV2Y19zaXplX29mX2xlbmd0aF9maWVsZCAtCj4+ICAgICAgICAgLSBJ ZGVudGlmaWVzIHRoZSBQUFMgZm9yIHJlZmVyZW5jZSBieSBvdGhlciBzeW50YXggZWxlbWVudHMu Cj4+ICAgICAgICogLSBfX3U4Cj4+ICAgICAgICAgLSBgYG51bV9leHRyYV9zbGljZV9oZWFkZXJf Yml0c2BgCj4+IC0gICAgICAtCj4+ICsgICAgICAtIFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGV4 dHJhIHNsaWNlIGhlYWRlciBiaXRzIHRoYXQgYXJlIHByZXNlbnQKPj4gKyAgICAgICAgaW4gdGhl IHNsaWNlIGhlYWRlciBSQlNQIGZvciBjb2RlZCBwaWN0dXJlcyByZWZlcnJpbmcgdG8gdGhlIFBQ Uy4KPj4gICAgICAgKiAtIF9fdTgKPj4gICAgICAgICAtIGBgbnVtX3JlZl9pZHhfbDBfZGVmYXVs dF9hY3RpdmVfbWludXMxYGAKPj4gICAgICAgICAtIFNwZWNpZmllcyB0aGUgaW5mZXJyZWQgdmFs dWUgb2YgbnVtX3JlZl9pZHhfbDBfYWN0aXZlX21pbnVzMQo+PiBAQCAtMjg0NiwzNyArMjg1Myw0 MiBAQCBlbnVtIHY0bDJfbXBlZ192aWRlb19oZXZjX3NpemVfb2ZfbGVuZ3RoX2ZpZWxkIC0KPj4g ICAgICAgICAtIFNwZWNpZmllcyB0aGUgaW5mZXJyZWQgdmFsdWUgb2YgbnVtX3JlZl9pZHhfbDFf YWN0aXZlX21pbnVzMQo+PiAgICAgICAqIC0gX19zOAo+PiAgICAgICAgIC0gYGBpbml0X3FwX21p bnVzMjZgYAo+PiAtICAgICAgLQo+PiArICAgICAgLSBQbHVzIDI2IHNwZWNpZmllcyB0aGUgaW5p dGlhbCB2YWx1ZSBvZiBTbGljZVFwIFkgZm9yIGVhY2ggc2xpY2UKPj4gKyAgICAgICAgcmVmZXJy aW5nIHRvIHRoZSBQUFMuCj4+ICAgICAgICogLSBfX3U4Cj4+ICAgICAgICAgLSBgYGRpZmZfY3Vf cXBfZGVsdGFfZGVwdGhgYAo+PiAtICAgICAgLQo+PiArICAgICAgLSBTcGVjaWZpZXMgdGhlIGRp ZmZlcmVuY2UgYmV0d2VlbiB0aGUgbHVtYSBjb2RpbmcgdHJlZSBibG9jayBzaXplCj4+ICsgICAg ICAgIGFuZCB0aGUgbWluaW11bSBsdW1hIGNvZGluZyBibG9jayBzaXplIG9mIGNvZGluZyB1bml0 cyB0aGF0Cj4+ICsgICAgICAgIGNvbnZleSBjdV9xcF9kZWx0YV9hYnMgYW5kIGN1X3FwX2RlbHRh X3NpZ25fZmxhZy4KPj4gICAgICAgKiAtIF9fczgKPj4gICAgICAgICAtIGBgcHBzX2NiX3FwX29m ZnNldGBgCj4+IC0gICAgICAtCj4+ICsgICAgICAtIFNwZWNpZnkgdGhlIG9mZnNldHMgdG8gdGhl IGx1bWEgcXVhbnRpemF0aW9uIHBhcmFtZXRlciBDYi4KPj4gICAgICAgKiAtIF9fczgKPj4gICAg ICAgICAtIGBgcHBzX2NyX3FwX29mZnNldGBgCj4+IC0gICAgICAtCj4+ICsgICAgICAtIFNwZWNp ZnkgdGhlIG9mZnNldHMgdG8gdGhlIGx1bWEgcXVhbnRpemF0aW9uIHBhcmFtZXRlciBDci4KPj4g ICAgICAgKiAtIF9fdTgKPj4gICAgICAgICAtIGBgbnVtX3RpbGVfY29sdW1uc19taW51czFgYAo+ PiAtICAgICAgLQo+PiArICAgICAgLSBQbHVzIDEgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgdGls ZSBjb2x1bW5zIHBhcnRpdGlvbmluZyB0aGUgcGljdHVyZS4KPj4gICAgICAgKiAtIF9fdTgKPj4g ICAgICAgICAtIGBgbnVtX3RpbGVfcm93c19taW51czFgYAo+PiAtICAgICAgLQo+PiArICAgICAg LSBQbHVzIDEgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgdGlsZSByb3dzIHBhcnRpdGlvbmluZyB0 aGUgcGljdHVyZS4KPj4gICAgICAgKiAtIF9fdTgKPj4gICAgICAgICAtIGBgY29sdW1uX3dpZHRo X21pbnVzMVsyMF1gYAo+PiAtICAgICAgLQo+PiArICAgICAgLSBQbHVzIDEgc3BlY2lmaWVzIHRo ZSB3aWR0aCBvZiB0aGUgaS10aCB0aWxlIGNvbHVtbiBpbiB1bml0cyBvZgo+IFdvdWxkbid0ICJv ZiBlYWNoIHRpbGUgY29sdW1uIiBiZSBlYXNpZXIgdG8gdW5kZXJzdGFuZD8KCnllcwoKPgo+PiAr ICAgICAgICBjb2RpbmcgdHJlZSBibG9ja3MuCj4+ICAgICAgICogLSBfX3U4Cj4+ICAgICAgICAg LSBgYHJvd19oZWlnaHRfbWludXMxWzIyXWBgCj4+IC0gICAgICAtCj4+ICsgICAgICAtIFBsdXMg MSBzcGVjaWZpZXMgdGhlIGhlaWdodCBvZiB0aGUgaS10aCB0aWxlIHJvdyBpbiB1bml0cyBvZiBj b2RpbmcKPiBEaXR0by4KPgo+PiArICAgICAgICB0cmVlIGJsb2Nrcy4KPj4gICAgICAgKiAtIF9f czgKPj4gICAgICAgICAtIGBgcHBzX2JldGFfb2Zmc2V0X2RpdjJgYAo+PiAtICAgICAgLQo+PiAr ICAgICAgLSBTcGVjaWZ5IHRoZSBkZWZhdWx0IGRlYmxvY2tpbmcgcGFyYW1ldGVyIG9mZnNldHMg Zm9yIGJldGEgZGl2aWRlZCBieSAyLgo+PiAgICAgICAqIC0gX19zOAo+PiAgICAgICAgIC0gYGBw cHNfdGNfb2Zmc2V0X2RpdjJgYAo+PiAtICAgICAgLQo+PiArICAgICAgLSBTcGVjaWZ5IHRoZSBk ZWZhdWx0IGRlYmxvY2tpbmcgcGFyYW1ldGVyIG9mZnNldHMgZm9yIHRDIGRpdmlkZWQgYnkgMi4K PiBJcyBpdCBhY3R1YWxseSBjYWxsZWQgJ3RDJyBpbiB0aGUgSEVWQyBzdGFuZGFyZCwgb3IgaXMg dGhpcyBhIHR5cG8/CgppdCBpcyBjYWxsZWQgdEMgaW4gSEVWQyBzcGVjOgoncHBzX2JldGFfb2Zm c2V0X2RpdjIgYW5kIHBwc190Y19vZmZzZXRfZGl2MiBzcGVjaWZ5IHRoZSBkZWZhdWx0IGRlYmxv Y2tpbmcgcGFyYW1ldGVyIG9mZnNldHMgZm9yIM6yIGFuZCB0Qy4uLicKCj4KPj4gICAgICAgKiAt IF9fdTgKPj4gICAgICAgICAtIGBgbG9nMl9wYXJhbGxlbF9tZXJnZV9sZXZlbF9taW51czJgYAo+ PiAtICAgICAgLQo+PiArICAgICAgLSBQbHVzIDIgc3BlY2lmaWVzIHRoZSB2YWx1ZSBvZiB0aGUg dmFyaWFibGUgTG9nMlBhck1yZ0xldmVsLgo+PiAgICAgICAqIC0gX191OAo+PiAgICAgICAgIC0g YGBwYWRkaW5nWzRdYGAKPj4gICAgICAgICAtIEFwcGxpY2F0aW9ucyBhbmQgZHJpdmVycyBtdXN0 IHNldCB0aGlzIHRvIHplcm8uCj4+IEBAIC0yOTk4LDEwICszMDEwLDEwIEBAIGVudW0gdjRsMl9t cGVnX3ZpZGVvX2hldmNfc2l6ZV9vZl9sZW5ndGhfZmllbGQgLQo+PiAgICAgICAgIC0gT2Zmc2V0 IChpbiBiaXRzKSB0byB0aGUgdmlkZW8gZGF0YSBpbiB0aGUgY3VycmVudCBzbGljZSBkYXRhLgo+ PiAgICAgICAqIC0gX191OAo+PiAgICAgICAgIC0gYGBuYWxfdW5pdF90eXBlYGAKPj4gLSAgICAg IC0KPj4gKyAgICAgIC0gU3BlY2lmaWVzIHRoZSBjb2RpbmcgdHlwZSBvZiB0aGUgc2xpY2UgKEIs IFAgb3IgSSkuCj4+ICAgICAgICogLSBfX3U4Cj4+ICAgICAgICAgLSBgYG51aF90ZW1wb3JhbF9p ZF9wbHVzMWBgCj4+IC0gICAgICAtCj4+ICsgICAgICAtIE1pbnVzIDEgc3BlY2lmaWVzIGEgdGVt cG9yYWwgaWRlbnRpZmllciBmb3IgdGhlIE5BTCB1bml0Lgo+PiAgICAgICAqIC0gX191OAo+PiAg ICAgICAgIC0gYGBzbGljZV90eXBlYGAKPj4gICAgICAgICAtCj4+IEBAIC0zMDA5LDUyICszMDIx LDU2IEBAIGVudW0gdjRsMl9tcGVnX3ZpZGVvX2hldmNfc2l6ZV9vZl9sZW5ndGhfZmllbGQgLQo+ PiAgIAlWNEwyX0hFVkNfU0xJQ0VfVFlQRV9CKS4KPj4gICAgICAgKiAtIF9fdTgKPj4gICAgICAg ICAtIGBgY29sb3VyX3BsYW5lX2lkYGAKPj4gLSAgICAgIC0KPj4gKyAgICAgIC0gU3BlY2lmaWVz IHRoZSBjb2xvdXIgcGxhbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IHNsaWNlLgo+PiAg ICAgICAqIC0gX19zMzIKPj4gICAgICAgICAtIGBgc2xpY2VfcGljX29yZGVyX2NudGBgCj4+IC0g ICAgICAtCj4+ICsgICAgICAtIFNwZWNpZmllcyB0aGUgcGljdHVyZSBvcmRlciBjb3VudC4KPj4g ICAgICAgKiAtIF9fdTgKPj4gICAgICAgICAtIGBgbnVtX3JlZl9pZHhfbDBfYWN0aXZlX21pbnVz MWBgCj4+IC0gICAgICAtCj4+ICsgICAgICAtIFNwZWNpZmllcyB0aGUgbWF4aW11bSByZWZlcmVu Y2UgaW5kZXggZm9yIHJlZmVyZW5jZSBwaWN0dXJlIGxpc3QgMAo+PiArICAgICAgICB0aGF0IG1h eSBiZSB1c2VkIHRvIGRlY29kZSB0aGUgc2xpY2UuCj4+ICAgICAgICogLSBfX3U4Cj4+ICAgICAg ICAgLSBgYG51bV9yZWZfaWR4X2wxX2FjdGl2ZV9taW51czFgYAo+PiAtICAgICAgLQo+PiArICAg ICAgLSBTcGVjaWZpZXMgdGhlIG1heGltdW0gcmVmZXJlbmNlIGluZGV4IGZvciByZWZlcmVuY2Ug cGljdHVyZSBsaXN0IDEKPj4gKyAgICAgICAgdGhhdCBtYXkgYmUgdXNlZCB0byBkZWNvZGUgdGhl IHNsaWNlLgo+PiAgICAgICAqIC0gX191OAo+PiAgICAgICAgIC0gYGBjb2xsb2NhdGVkX3JlZl9p ZHhgYAo+PiAtICAgICAgLQo+PiArICAgICAgLSBTcGVjaWZpZXMgdGhlIHJlZmVyZW5jZSBpbmRl eCBvZiB0aGUgY29sbG9jYXRlZCBwaWN0dXJlIHVzZWQgZm9yCj4+ICsgICAgICAgIHRlbXBvcmFs IG1vdGlvbiB2ZWN0b3IgcHJlZGljdGlvbi4KPj4gICAgICAgKiAtIF9fdTgKPj4gICAgICAgICAt IGBgZml2ZV9taW51c19tYXhfbnVtX21lcmdlX2NhbmRgYAo+PiAtICAgICAgLQo+PiArICAgICAg LSBTcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIG1lcmdpbmcgbW90aW9uIHZlY3RvciBw cmVkaWN0aW9uCj4+ICsgICAgICAgIGNhbmRpZGF0ZXMgc3VwcG9ydGVkIGluIHRoZSBzbGljZSBz dWJ0cmFjdGVkIGZyb20gNS4KPj4gICAgICAgKiAtIF9fczgKPj4gICAgICAgICAtIGBgc2xpY2Vf cXBfZGVsdGFgYAo+PiAtICAgICAgLQo+PiArICAgICAgLSBTcGVjaWZpZXMgdGhlIGluaXRpYWwg dmFsdWUgb2YgUXBZIHRvIGJlIHVzZWQgZm9yIHRoZSBjb2RpbmcgYmxvY2tzIGluIHRoZSBzbGlj ZS4KPiBJdCdzIHJlYWxseSAnUXBZJz8gVGhlcmUgaXMgbm8gb2J2aW91cyByZWxhdGlvbnNoaXAg YmV0d2VlbiB0aGUgJ1knIGNoYXJhY3RlciBhbmQgdGhlICdfZGVsdGEnCj4gc3VmZml4LiBKdXN0 IGNoZWNraW5nLgoKeWVzIGl0IGlzICdRcHknIGluIEhFVkMgc3BlYzoKJ3NsaWNlX3FwX2RlbHRh IHNwZWNpZmllcyB0aGUgaW5pdGlhbCB2YWx1ZSBvZiBRcFkgdG8gYmUgdXNlZCBmb3IgdGhlIGNv ZGluZyBibG9ja3MgaW4gdGhlIHNsaWNlIHVudGlsIG1vZGlmaWVkIGJ5IHRoZSB2YWx1ZQpvZiBD dVFwRGVsdGFWYWwgaW4gdGhlIGNvZGluZyB1bml0IGxheWVyLiBUaGUgaW5pdGlhbCB2YWx1ZSBv ZiB0aGUgUXBZIHF1YW50aXphdGlvbiBwYXJhbWV0ZXIgZm9yIHRoZSBzbGljZSwgU2xpY2VRcFks IGlzCmRlcml2ZWQgYXMgZm9sbG93czoKU2xpY2VRcFkgPSAyNiArIGluaXRfcXBfbWludXMyNiAr IHNsaWNlX3FwX2RlbHRhJwoKUmVnYXJkcywKQmVuamFtaW4KCj4KPj4gICAgICAgKiAtIF9fczgK Pj4gICAgICAgICAtIGBgc2xpY2VfY2JfcXBfb2Zmc2V0YGAKPj4gLSAgICAgIC0KPj4gKyAgICAg IC0gU3BlY2lmaWVzIGEgZGlmZmVyZW5jZSB0byBiZSBhZGRlZCB0byB0aGUgdmFsdWUgb2YgcHBz X2NiX3FwX29mZnNldC4KPj4gICAgICAgKiAtIF9fczgKPj4gICAgICAgICAtIGBgc2xpY2VfY3Jf cXBfb2Zmc2V0YGAKPj4gLSAgICAgIC0KPj4gKyAgICAgIC0gU3BlY2lmaWVzIGEgZGlmZmVyZW5j ZSB0byBiZSBhZGRlZCB0byB0aGUgdmFsdWUgb2YgcHBzX2NyX3FwX29mZnNldC4KPj4gICAgICAg KiAtIF9fczgKPj4gICAgICAgICAtIGBgc2xpY2VfYWN0X3lfcXBfb2Zmc2V0YGAKPj4gLSAgICAg IC0KPj4gKyAgICAgIC0gc2NyZWVuIGNvbnRlbnQgZXh0ZW5zaW9uIHBhcmFtZXRlcnMKPj4gICAg ICAgKiAtIF9fczgKPj4gICAgICAgICAtIGBgc2xpY2VfYWN0X2NiX3FwX29mZnNldGBgCj4+IC0g ICAgICAtCj4+ICsgICAgICAtIHNjcmVlbiBjb250ZW50IGV4dGVuc2lvbiBwYXJhbWV0ZXJzCj4+ ICAgICAgICogLSBfX3M4Cj4+ICAgICAgICAgLSBgYHNsaWNlX2FjdF9jcl9xcF9vZmZzZXRgYAo+ PiAtICAgICAgLQo+PiArICAgICAgLSBzY3JlZW4gY29udGVudCBleHRlbnNpb24gcGFyYW1ldGVy cwo+PiAgICAgICAqIC0gX19zOAo+PiAgICAgICAgIC0gYGBzbGljZV9iZXRhX29mZnNldF9kaXYy YGAKPj4gLSAgICAgIC0KPj4gKyAgICAgIC0gU3BlY2lmeSB0aGUgZGVibG9ja2luZyBwYXJhbWV0 ZXIgb2Zmc2V0cyBmb3IgYmV0YSBkaXZpZGVkIGJ5IDIuCj4+ICAgICAgICogLSBfX3M4Cj4+ICAg ICAgICAgLSBgYHNsaWNlX3RjX29mZnNldF9kaXYyYGAKPj4gLSAgICAgIC0KPj4gKyAgICAgIC0g U3BlY2lmeSB0aGUgZGVibG9ja2luZyBwYXJhbWV0ZXIgb2Zmc2V0cyBmb3IgdEMgZGl2aWRlZCBi eSAyLgo+PiAgICAgICAqIC0gX191OAo+PiAgICAgICAgIC0gYGBwaWNfc3RydWN0YGAKPj4gLSAg ICAgIC0KPj4gKyAgICAgIC0gSW5kaWNhdGVzIHdoZXRoZXIgYSBwaWN0dXJlIHNob3VsZCBiZSBk aXNwbGF5ZWQgYXMgYSBmcmFtZSBvciBhcyBvbmUgb3IgbW9yZSBmaWVsZHMuCj4+ICAgICAgICog LSBfX3UzMgo+PiAgICAgICAgIC0gYGBzbGljZV9zZWdtZW50X2FkZHJgYAo+PiAtICAgICAgLQo+ PiArICAgICAgLSBTcGVjaWZpZXMgdGhlIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IGNvZGluZyB0cmVl IGJsb2NrIGluIHRoZSBzbGljZSBzZWdtZW50Lgo+PiAgICAgICAqIC0gX191OAo+PiAgICAgICAg IC0gYGByZWZfaWR4X2wwW1Y0TDJfSEVWQ19EUEJfRU5UUklFU19OVU1fTUFYXWBgCj4+ICAgICAg ICAgLSBUaGUgbGlzdCBvZiBMMCByZWZlcmVuY2UgZWxlbWVudHMgYXMgaW5kaWNlcyBpbiB0aGUg RFBCLgo+PiBAQCAtMzIxOSwxMSArMzIzNSw5IEBAIGVudW0gdjRsMl9tcGVnX3ZpZGVvX2hldmNf c2l6ZV9vZl9sZW5ndGhfZmllbGQgLQo+PiAgICAgICAgIC0gYGBmaWVsZF9waWNgYAo+PiAgICAg ICAgIC0gV2hldGhlciB0aGUgcmVmZXJlbmNlIGlzIGEgZmllbGQgcGljdHVyZSBvciBhIGZyYW1l Lgo+PiAgICAgICAgICAgU2VlIDpyZWY6YEhFVkMgZHBiIGZpZWxkIHBpYyBGbGFncyA8aGV2Y19k cGJfZmllbGRfcGljX2ZsYWdzPmAKPj4gLSAgICAqIC0gX191MTYKPj4gLSAgICAgIC0gYGBwaWNf b3JkZXJfY250WzJdYGAKPj4gLSAgICAgIC0gVGhlIHBpY3R1cmUgb3JkZXIgY291bnQgb2YgdGhl IHJlZmVyZW5jZS4gT25seSB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUKPj4gLSAgICAgICAgYXJy YXkgaXMgdXNlZCBmb3IgZnJhbWUgcGljdHVyZXMsIHdoaWxlIHRoZSBmaXJzdCBlbGVtZW50IGlk ZW50aWZpZXMgdGhlCj4+IC0gICAgICAgIHRvcCBmaWVsZCBhbmQgdGhlIHNlY29uZCB0aGUgYm90 dG9tIGZpZWxkIGluIGZpZWxkLWNvZGVkIHBpY3R1cmVzLgo+PiArICAgICogLSBfX3MzMgo+PiAr ICAgICAgLSBgYHBpY19vcmRlcl9jbnRfdmFsYGAKPj4gKyAgICAgIC0gVGhlIHBpY3R1cmUgb3Jk ZXIgY291bnQgb2YgdGhlIGN1cnJlbnQgcGljdHVyZS4KPj4gICAgICAgKiAtIF9fdTgKPj4gICAg ICAgICAtIGBgcGFkZGluZ1syXWBgCj4+ICAgICAgICAgLSBBcHBsaWNhdGlvbnMgYW5kIGRyaXZl cnMgbXVzdCBzZXQgdGhpcyB0byB6ZXJvLgo+PiBAQCAtMzI5OCwzNiArMzMxMiw0NCBAQCBlbnVt IHY0bDJfbXBlZ192aWRlb19oZXZjX3NpemVfb2ZfbGVuZ3RoX2ZpZWxkIC0KPj4gICAgICAgOnN0 dWItY29sdW1uczogMAo+PiAgICAgICA6d2lkdGhzOiAgICAgICAxIDEgMgo+PiAgIAo+PiAtICAg ICogLSBfX3U4Cj4+IC0gICAgICAtIGBgbHVtYV9sb2cyX3dlaWdodF9kZW5vbWBgCj4+IC0gICAg ICAtCj4+IC0gICAgKiAtIF9fczgKPj4gLSAgICAgIC0gYGBkZWx0YV9jaHJvbWFfbG9nMl93ZWln aHRfZGVub21gYAo+PiAtICAgICAgLQo+PiAgICAgICAqIC0gX19zOAo+PiAgICAgICAgIC0gYGBk ZWx0YV9sdW1hX3dlaWdodF9sMFtWNEwyX0hFVkNfRFBCX0VOVFJJRVNfTlVNX01BWF1gYAo+PiAt ICAgICAgLQo+PiArICAgICAgLSBUaGUgZGlmZmVyZW5jZSBvZiB0aGUgd2VpZ2h0aW5nIGZhY3Rv ciBhcHBsaWVkIHRvIHRoZSBsdW1hCj4+ICsgICAgICAgIHByZWRpY3Rpb24gdmFsdWUgZm9yIGxp c3QgMC4KPj4gICAgICAgKiAtIF9fczgKPj4gICAgICAgICAtIGBgbHVtYV9vZmZzZXRfbDBbVjRM Ml9IRVZDX0RQQl9FTlRSSUVTX05VTV9NQVhdYGAKPj4gLSAgICAgIC0KPj4gKyAgICAgIC0gVGhl IGFkZGl0aXZlIG9mZnNldCBhcHBsaWVkIHRvIHRoZSBsdW1hIHByZWRpY3Rpb24gdmFsdWUgZm9y IGxpc3QgMC4KPj4gICAgICAgKiAtIF9fczgKPj4gICAgICAgICAtIGBgZGVsdGFfY2hyb21hX3dl aWdodF9sMFtWNEwyX0hFVkNfRFBCX0VOVFJJRVNfTlVNX01BWF1bMl1gYAo+PiAtICAgICAgLQo+ PiArICAgICAgLSBUaGUgZGlmZmVyZW5jZSBvZiB0aGUgd2VpZ2h0aW5nIGZhY3RvciBhcHBsaWVk IHRvIHRoZSBjaHJvbWEKPj4gKyAgICAgICAgcHJlZGljdGlvbiB2YWx1ZSBmb3IgbGlzdCAwLgo+ PiAgICAgICAqIC0gX19zOAo+PiAgICAgICAgIC0gYGBjaHJvbWFfb2Zmc2V0X2wwW1Y0TDJfSEVW Q19EUEJfRU5UUklFU19OVU1fTUFYXVsyXWBgCj4+IC0gICAgICAtCj4+ICsgICAgICAtIFRoZSBk aWZmZXJlbmNlIG9mIHRoZSBhZGRpdGl2ZSBvZmZzZXQgYXBwbGllZCB0byB0aGUgY2hyb21hCj4+ ICsgICAgICAgIHByZWRpY3Rpb24gdmFsdWVzIGZvciBsaXN0IDAuCj4+ICAgICAgICogLSBfX3M4 Cj4+ICAgICAgICAgLSBgYGRlbHRhX2x1bWFfd2VpZ2h0X2wxW1Y0TDJfSEVWQ19EUEJfRU5UUklF U19OVU1fTUFYXWBgCj4+IC0gICAgICAtCj4+ICsgICAgICAtIFRoZSBkaWZmZXJlbmNlIG9mIHRo ZSB3ZWlnaHRpbmcgZmFjdG9yIGFwcGxpZWQgdG8gdGhlIGx1bWEKPj4gKyAgICAgICAgcHJlZGlj dGlvbiB2YWx1ZSBmb3IgbGlzdCAxLgo+PiAgICAgICAqIC0gX19zOAo+PiAgICAgICAgIC0gYGBs dW1hX29mZnNldF9sMVtWNEwyX0hFVkNfRFBCX0VOVFJJRVNfTlVNX01BWF1gYAo+PiAtICAgICAg LQo+PiArICAgICAgLSBUaGUgYWRkaXRpdmUgb2Zmc2V0IGFwcGxpZWQgdG8gdGhlIGx1bWEgcHJl ZGljdGlvbiB2YWx1ZSBmb3IgbGlzdCAxLgo+PiAgICAgICAqIC0gX19zOAo+PiAgICAgICAgIC0g YGBkZWx0YV9jaHJvbWFfd2VpZ2h0X2wxW1Y0TDJfSEVWQ19EUEJfRU5UUklFU19OVU1fTUFYXVsy XWBgCj4+IC0gICAgICAtCj4+ICsgICAgICAtIFRoZSBkaWZmZXJlbmNlIG9mIHRoZSB3ZWlnaHRp bmcgZmFjdG9yIGFwcGxpZWQgdG8gdGhlIGNocm9tYQo+PiArICAgICAgICBwcmVkaWN0aW9uIHZh bHVlIGZvciBsaXN0IDEuCj4+ICAgICAgICogLSBfX3M4Cj4+ICAgICAgICAgLSBgYGNocm9tYV9v ZmZzZXRfbDFbVjRMMl9IRVZDX0RQQl9FTlRSSUVTX05VTV9NQVhdWzJdYGAKPj4gLSAgICAgIC0K Pj4gKyAgICAgIC0gVGhlIGRpZmZlcmVuY2Ugb2YgdGhlIGFkZGl0aXZlIG9mZnNldCBhcHBsaWVk IHRvIHRoZSBjaHJvbWEKPj4gKyAgICAgICAgcHJlZGljdGlvbiB2YWx1ZXMgZm9yIGxpc3QgMS4K Pj4gKyAgICAqIC0gX191OAo+PiArICAgICAgLSBgYGx1bWFfbG9nMl93ZWlnaHRfZGVub21gYAo+ PiArICAgICAgLSBUaGUgYmFzZSAyIGxvZ2FyaXRobSBvZiB0aGUgZGVub21pbmF0b3IgZm9yIGFs bCBsdW1hIHdlaWdodGluZwo+PiArICAgICAgICBmYWN0b3JzLgo+PiArICAgICogLSBfX3M4Cj4+ ICsgICAgICAtIGBgZGVsdGFfY2hyb21hX2xvZzJfd2VpZ2h0X2Rlbm9tYGAKPj4gKyAgICAgIC0g VGhlIGRpZmZlcmVuY2Ugb2YgdGhlIGJhc2UgMiBsb2dhcml0aG0gb2YgdGhlIGRlbm9taW5hdG9y IGZvcgo+PiArICAgICAgICBhbGwgY2hyb21hIHdlaWdodGluZyBmYWN0b3JzLgo+PiAgICAgICAq IC0gX191OAo+PiAgICAgICAgIC0gYGBwYWRkaW5nWzZdYGAKPj4gICAgICAgICAtIEFwcGxpY2F0 aW9ucyBhbmQgZHJpdmVycyBtdXN0IHNldCB0aGlzIHRvIHplcm8uCj4+IGRpZmYgLS1naXQgYS9p bmNsdWRlL21lZGlhL2hldmMtY3RybHMuaCBiL2luY2x1ZGUvbWVkaWEvaGV2Yy1jdHJscy5oCj4+ IGluZGV4IGYzNjk1YWI0NDM4OS4uMGRiZDVkNjgxYzI4IDEwMDY0NAo+PiAtLS0gYS9pbmNsdWRl L21lZGlhL2hldmMtY3RybHMuaAo+PiArKysgYi9pbmNsdWRlL21lZGlhL2hldmMtY3RybHMuaAo+ PiBAQCAtNTUsOSArNTUsNjggQEAgZW51bSB2NGwyX3N0YXRlbGVzc19oZXZjX3N0YXJ0X2NvZGUg ewo+PiAgICNkZWZpbmUgVjRMMl9IRVZDX1NQU19GTEFHX1NQU19URU1QT1JBTF9NVlBfRU5BQkxF RAkJKDFVTEwgPDwgNykKPj4gICAjZGVmaW5lIFY0TDJfSEVWQ19TUFNfRkxBR19TVFJPTkdfSU5U UkFfU01PT1RISU5HX0VOQUJMRUQJKDFVTEwgPDwgOCkKPj4gICAKPj4gLS8qIFRoZSBjb250cm9s cyBhcmUgbm90IHN0YWJsZSBhdCB0aGUgbW9tZW50IGFuZCB3aWxsIGxpa2VseSBiZSByZXdvcmtl ZC4gKi8KPj4gKy8qKgo+PiArICogc3RydWN0IHY0bDJfY3RybF9oZXZjX3NwcyAtIElUVS1UIFJl Yy4gSC4yNjU6IFNlcXVlbmNlIHBhcmFtZXRlciBzZXQKPj4gKyAqCj4+ICsgKiBAdmlkZW9fcGFy YW1ldGVyX3NldF9pZDogc3BlY2lmaWVzIHRoZSB2YWx1ZSBvZiB0aGUKPj4gKyAqCQkJICAgIHZw c192aWRlb19wYXJhbWV0ZXJfc2V0X2lkIG9mIHRoZSBhY3RpdmUgVlBTCj4+ICsgKiBAc2VxX3Bh cmFtZXRlcl9zZXRfaWQ6IHByb3ZpZGVzIGFuIGlkZW50aWZpZXIgZm9yIHRoZSBTUFMgZm9yCj4+ ICsgKgkJCSAgcmVmZXJlbmNlIGJ5IG90aGVyIHN5bnRheCBlbGVtZW50cwo+PiArICogQHBpY193 aWR0aF9pbl9sdW1hX3NhbXBsZXM6IHNwZWNpZmllcyB0aGUgd2lkdGggb2YgZWFjaCBkZWNvZGVk IHBpY3R1cmUKPj4gKyAqCQkJICAgICAgIGluIHVuaXRzIG9mIGx1bWEgc2FtcGxlcwo+PiArICog QHBpY19oZWlnaHRfaW5fbHVtYV9zYW1wbGVzOiBzcGVjaWZpZXMgdGhlIGhlaWdodCBvZiBlYWNo IGRlY29kZWQgcGljdHVyZQo+PiArICoJCQkJaW4gdW5pdHMgb2YgbHVtYSBzYW1wbGVzCj4+ICsg KiBAYml0X2RlcHRoX2x1bWFfbWludXM4OiBzcGVjaWZpZXMgdGhlIGJpdCBkZXB0aCBvZiB0aGUg c2FtcGxlcyBvZiB0aGUKPj4gKyAqCQkJICAgbHVtYSBhcnJheQo+PiArICogQGJpdF9kZXB0aF9j aHJvbWFfbWludXM4OiBzcGVjaWZpZXMgdGhlIGJpdCBkZXB0aCBvZiB0aGUgc2FtcGxlcyBvZiB0 aGUKPj4gKyAqCQkJICAgICBjaHJvbWEgYXJyYXlzCj4+ICsgKiBAbG9nMl9tYXhfcGljX29yZGVy X2NudF9sc2JfbWludXM0OiBzcGVjaWZpZXMgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZQo+PiAr ICoJCQkJICAgICAgIE1heFBpY09yZGVyQ250THNiCj4+ICsgKiBAc3BzX21heF9kZWNfcGljX2J1 ZmZlcmluZ19taW51czE6IHBsdXMgMSBzcGVjaWZpZXMgdGhlIG1heGltdW0gcmVxdWlyZWQKPj4g KyAqCQkJCSAgICAgIHNpemUgb2YgdGhlIGRlY29kZWQgcGljdHVyZSBidWZmZXIgZm9yCj4+ICsg KgkJCQkgICAgICB0aGUgQ1ZTCj4+ICsgKiBAc3BzX21heF9udW1fcmVvcmRlcl9waWNzOiBpbmRp Y2F0ZXMgdGhlIG1heGltdW0gYWxsb3dlZCBudW1iZXIgb2YgcGljdHVyZXMKPj4gKyAqIEBzcHNf bWF4X2xhdGVuY3lfaW5jcmVhc2VfcGx1czE6IG5vdCBlcXVhbCB0byAwIGlzIHVzZWQgdG8gY29t cHV0ZSB0aGUKPj4gKyAqCQkJCSAgICB2YWx1ZSBvZiBTcHNNYXhMYXRlbmN5UGljdHVyZXNbaV0K PiBXaGF0IGlzICdpJyBpbiB0aGlzIGNvbnRleHQ/Cj4KPj4gKyAqIEBsb2cyX21pbl9sdW1hX2Nv ZGluZ19ibG9ja19zaXplX21pbnVzMzogcGx1cyAzIHNwZWNpZmllcyB0aGUgbWluaW11bQo+PiAr ICoJCQkJCSAgICBsdW1hIGNvZGluZyBibG9jayBzaXplCj4+ICsgKiBAbG9nMl9kaWZmX21heF9t aW5fbHVtYV9jb2RpbmdfYmxvY2tfc2l6ZTogc3BlY2lmaWVzIHRoZSBkaWZmZXJlbmNlIGJldHdl ZW4KPj4gKyAqCQkJCQkgICAgICB0aGUgbWF4aW11bSBhbmQgbWluaW11bSBsdW1hCj4+ICsgKgkJ CQkJICAgICAgY29kaW5nIGJsb2NrIHNpemUKPj4gKyAqIEBsb2cyX21pbl9sdW1hX3RyYW5zZm9y bV9ibG9ja19zaXplX21pbnVzMjogcGx1cyAyIHNwZWNpZmllcyB0aGUgbWluaW11bSBsdW1hCj4+ ICsgKgkJCQkJICAgICAgIHRyYW5zZm9ybSBibG9jayBzaXplCj4+ICsgKiBAbG9nMl9kaWZmX21h eF9taW5fbHVtYV90cmFuc2Zvcm1fYmxvY2tfc2l6ZTogc3BlY2lmaWVzIHRoZSBkaWZmZXJlbmNl IGJldHdlZW4KPj4gKyAqCQkJCQkJIHRoZSBtYXhpbXVtIGFuZCBtaW5pbXVtIGx1bWEKPj4gKyAq CQkJCQkJIHRyYW5zZm9ybSBibG9jayBzaXplCj4+ICsgKiBAbWF4X3RyYW5zZm9ybV9oaWVyYXJj aHlfZGVwdGhfaW50ZXI6IHNwZWNpZmllcyB0aGUgbWF4aW11bSBoaWVyYXJjaHkKPj4gKyAqCQkJ CQkgZGVwdGggZm9yIHRyYW5zZm9ybSB1bml0cyBvZgo+PiArICoJCQkJCSBjb2RpbmcgdW5pdHMg Y29kZWQgaW4gaW50ZXIKPj4gKyAqCQkJCQkgcHJlZGljdGlvbiBtb2RlCj4+ICsgKiBAbWF4X3Ry YW5zZm9ybV9oaWVyYXJjaHlfZGVwdGhfaW50cmE6IHNwZWNpZmllcyB0aGUgbWF4aW11bSBoaWVy YXJjaHkKPj4gKyAqCQkJCQkgZGVwdGggZm9yIHRyYW5zZm9ybSB1bml0cyBvZgo+PiArICoJCQkJ CSBjb2RpbmcgdW5pdHMgY29kZWQgaW4gaW50cmEKPj4gKyAqCQkJCQkgcHJlZGljdGlvbiBtb2Rl Cj4+ICsgKiBAcGNtX3NhbXBsZV9iaXRfZGVwdGhfbHVtYV9taW51czE6IHNwZWNpZmllcyB0aGUg bnVtYmVyIG9mIGJpdHMgdXNlZCB0bwo+PiArICoJCQkJICAgICAgcmVwcmVzZW50IGVhY2ggb2Yg UENNIHNhbXBsZSB2YWx1ZXMgb2YgdGhlCj4+ICsgKgkJCQkgICAgICBsdW1hIGNvbXBvbmVudAo+ PiArICogQHBjbV9zYW1wbGVfYml0X2RlcHRoX2Nocm9tYV9taW51czE6IHNwZWNpZmllcyB0aGUg bnVtYmVyIG9mIGJpdHMgdXNlZCB0bwo+PiArICoJCQkJCXJlcHJlc2VudCBlYWNoIG9mIFBDTSBz YW1wbGUgdmFsdWVzIG9mCj4+ICsgKgkJCQkJdGhlIGNocm9tYSBjb21wb25lbnRzCj4+ICsgKiBA bG9nMl9taW5fcGNtX2x1bWFfY29kaW5nX2Jsb2NrX3NpemVfbWludXMzOiBwbHVzIDMgc3BlY2lm aWVzIHRoZSBtaW5pbXVtIHNpemUKPj4gKyAqCQkJCQkJb2YgY29kaW5nIGJsb2Nrcwo+PiArICog QGxvZzJfZGlmZl9tYXhfbWluX3BjbV9sdW1hX2NvZGluZ19ibG9ja19zaXplOiBzcGVjaWZpZXMg dGhlIGRpZmZlcmVuY2UgYmV0d2Vlbgo+PiArICoJCQkJCQkgIHRoZSBtYXhpbXVtIGFuZCBtaW5p bXVtIHNpemUgb2YKPj4gKyAqCQkJCQkJICBjb2RpbmcgYmxvY2tzCj4+ICsgKiBAbnVtX3Nob3J0 X3Rlcm1fcmVmX3BpY19zZXRzOiBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBzdF9yZWZfcGljX3Nl dCgpCj4+ICsgKgkJCQkgc3ludGF4IHN0cnVjdHVyZXMgaW5jbHVkZWQgaW4gdGhlIFNQUwo+PiAr ICogQG51bV9sb25nX3Rlcm1fcmVmX3BpY3Nfc3BzOglzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBj YW5kaWRhdGUgbG9uZy10ZXJtCj4+ICsgKgkJCQlyZWZlcmVuY2UgcGljdHVyZXMgdGhhdCBhcmUg c3BlY2lmaWVkIGluIHRoZSBTUFMKPj4gKyAqIEBjaHJvbWFfZm9ybWF0X2lkYzogc3BlY2lmaWVz IHRoZSBjaHJvbWEgc2FtcGxpbmcKPj4gKyAqIEBzcHNfbWF4X3N1Yl9sYXllcnNfbWludXMxOiBw bHVzIDEgc3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB0ZW1wb3JhbAo+PiArICoJCQkg ICAgICAgc3ViLWxheWVycwo+PiArICogQGZsYWdzOiBzZWUgVjRMMl9IRVZDX1NQU19GTEFHX3t9 Cj4+ICsgKi8KPj4gICBzdHJ1Y3QgdjRsMl9jdHJsX2hldmNfc3BzIHsKPj4gLQkvKiBJU08vSUVD IDIzMDA4LTIsIElUVS1UIFJlYy4gSC4yNjU6IFNlcXVlbmNlIHBhcmFtZXRlciBzZXQgKi8KPj4g ICAJX191OAl2aWRlb19wYXJhbWV0ZXJfc2V0X2lkOwo+PiAgIAlfX3U4CXNlcV9wYXJhbWV0ZXJf c2V0X2lkOwo+PiAgIAlfX3UxNglwaWNfd2lkdGhfaW5fbHVtYV9zYW1wbGVzOwo+PiBAQCAtMTA4 LDggKzE2Nyw0MyBAQCBzdHJ1Y3QgdjRsMl9jdHJsX2hldmNfc3BzIHsKPj4gICAjZGVmaW5lIFY0 TDJfSEVWQ19QUFNfRkxBR19ERUJMT0NLSU5HX0ZJTFRFUl9DT05UUk9MX1BSRVNFTlQJKDFVTEwg PDwgMTkpCj4+ICAgI2RlZmluZSBWNEwyX0hFVkNfUFBTX0ZMQUdfVU5JRk9STV9TUEFDSU5HCQkJ KDFVTEwgPDwgMjApCj4+ICAgCj4+ICsvKioKPj4gKyAqIHN0cnVjdCB2NGwyX2N0cmxfaGV2Y19w cHMgLSBJVFUtVCBSZWMuIEguMjY1OiBQaWN0dXJlIHBhcmFtZXRlciBzZXQKPj4gKyAqCj4+ICsg KiBAcGljX3BhcmFtZXRlcl9zZXRfaWQ6IGlkZW50aWZpZXMgdGhlIFBQUyBmb3IgcmVmZXJlbmNl IGJ5IG90aGVyCj4+ICsgKgkJCSAgc3ludGF4IGVsZW1lbnRzCj4+ICsgKiBAbnVtX2V4dHJhX3Ns aWNlX2hlYWRlcl9iaXRzOiBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBleHRyYSBzbGljZSBoZWFk ZXIKPj4gKyAqCQkJCSBiaXRzIHRoYXQgYXJlIHByZXNlbnQgaW4gdGhlIHNsaWNlIGhlYWRlciBS QlNQCj4+ICsgKgkJCQkgZm9yIGNvZGVkIHBpY3R1cmVzIHJlZmVycmluZyB0byB0aGUgUFBTLgo+ PiArICogQG51bV9yZWZfaWR4X2wwX2RlZmF1bHRfYWN0aXZlX21pbnVzMTogc3BlY2lmaWVzIHRo ZSBpbmZlcnJlZCB2YWx1ZSBvZgo+PiArICoJCQkJCSAgbnVtX3JlZl9pZHhfbDBfYWN0aXZlX21p bnVzMQo+PiArICogQG51bV9yZWZfaWR4X2wxX2RlZmF1bHRfYWN0aXZlX21pbnVzMTogc3BlY2lm aWVzIHRoZSBpbmZlcnJlZCB2YWx1ZSBvZgo+PiArICoJCQkJCSAgbnVtX3JlZl9pZHhfbDFfYWN0 aXZlX21pbnVzMQo+PiArICogQGluaXRfcXBfbWludXMyNjogcGx1cyAyNiBzcGVjaWZpZXMgdGhl IGluaXRpYWwgdmFsdWUgb2YgU2xpY2VRcCBZIGZvcgo+PiArICoJCSAgICAgZWFjaCBzbGljZSBy ZWZlcnJpbmcgdG8gdGhlIFBQUwo+PiArICogQGRpZmZfY3VfcXBfZGVsdGFfZGVwdGg6IHNwZWNp ZmllcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBsdW1hIGNvZGluZwo+PiArICoJCQkgICAg dHJlZSBibG9jayBzaXplIGFuZCB0aGUgbWluaW11bSBsdW1hIGNvZGluZyBibG9jawo+PiArICoJ CQkgICAgc2l6ZSBvZiBjb2RpbmcgdW5pdHMgdGhhdCBjb252ZXkgY3VfcXBfZGVsdGFfYWJzCj4+ ICsgKgkJCSAgICBhbmQgY3VfcXBfZGVsdGFfc2lnbl9mbGFnCj4+ICsgKiBAcHBzX2NiX3FwX29m ZnNldDogc3BlY2lmeSB0aGUgb2Zmc2V0cyB0byB0aGUgbHVtYSBxdWFudGl6YXRpb24gcGFyYW1l dGVyIENiCj4+ICsgKiBAcHBzX2NyX3FwX29mZnNldDogc3BlY2lmeSB0aGUgb2Zmc2V0cyB0byB0 aGUgbHVtYSBxdWFudGl6YXRpb24gcGFyYW1ldGVyIENyCj4+ICsgKiBAbnVtX3RpbGVfY29sdW1u c19taW51czE6IHBsdXMgMSBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiB0aWxlIGNvbHVtbnMKPj4g KyAqCQkJICAgICBwYXJ0aXRpb25pbmcgdGhlIHBpY3R1cmUKPj4gKyAqIEBudW1fdGlsZV9yb3dz X21pbnVzMTogcGx1cyAxIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHRpbGUgcm93cyBwYXJ0aXRp b25pbmcKPj4gKyAqCQkJICB0aGUgcGljdHVyZQo+PiArICogQGNvbHVtbl93aWR0aF9taW51czE6 IHBsdXMgMSBzcGVjaWZpZXMgdGhlIHdpZHRoIG9mIHRoZSBpLXRoIHRpbGUgY29sdW1uIGluCj4g InRoZSBpLXRoIiAtPiBlYWNoCj4KPiBJIHRoaW5rIHRoYXQncyBlYXNpZXIgdG8gdW5kZXJzdGFu ZC4KPgo+PiArICoJCQkgdW5pdHMgb2YgY29kaW5nIHRyZWUgYmxvY2tzCj4+ICsgKiBAcm93X2hl aWdodF9taW51czE6IHBsdXMgMSBzcGVjaWZpZXMgdGhlIGhlaWdodCBvZiB0aGUgaS10aCB0aWxl IHJvdyBpbgo+IERpdHRvLgo+Cj4+ICsgKgkJICAgICAgIHVuaXRzIG9mIGNvZGluZyB0cmVlIGJs b2Nrcwo+PiArICogQHBwc19iZXRhX29mZnNldF9kaXYyOiBzcGVjaWZ5IHRoZSBkZWZhdWx0IGRl YmxvY2tpbmcgcGFyYW1ldGVyIG9mZnNldHMgZm9yCj4+ICsgKgkJCSAgYmV0YSBkaXZpZGVkIGJ5 IDIKPj4gKyAqIEBwcHNfdGNfb2Zmc2V0X2RpdjI6IHNwZWNpZnkgdGhlIGRlZmF1bHQgZGVibG9j a2luZyBwYXJhbWV0ZXIgb2Zmc2V0cyBmb3IgdEMKPj4gKyAqCQkJZGl2aWRlZCBieSAyCj4+ICsg KiBAbG9nMl9wYXJhbGxlbF9tZXJnZV9sZXZlbF9taW51czI6IHBsdXMgMiBzcGVjaWZpZXMgdGhl IHZhbHVlIG9mIHRoZSB2YXJpYWJsZQo+PiArICoJCQkJICAgICAgTG9nMlBhck1yZ0xldmVsCj4+ ICsgKiBAZmxhZ3M6IHNlZSBWNEwyX0hFVkNfUFBTX0ZMQUdfe30KPj4gKyAqLwo+PiAgIHN0cnVj dCB2NGwyX2N0cmxfaGV2Y19wcHMgewo+PiAtCS8qIElTTy9JRUMgMjMwMDgtMiwgSVRVLVQgUmVj LiBILjI2NTogUGljdHVyZSBwYXJhbWV0ZXIgc2V0ICovCj4+ICAgCV9fdTgJcGljX3BhcmFtZXRl cl9zZXRfaWQ7Cj4+ICAgCV9fdTgJbnVtX2V4dHJhX3NsaWNlX2hlYWRlcl9iaXRzOwo+PiAgIAlf X3U4CW51bV9yZWZfaWR4X2wwX2RlZmF1bHRfYWN0aXZlX21pbnVzMTsKPj4gQEAgLTE0OCw2ICsy NDIsMTQgQEAgc3RydWN0IHY0bDJfY3RybF9oZXZjX3BwcyB7Cj4+ICAgCj4+ICAgI2RlZmluZSBW NEwyX0hFVkNfRFBCX0VOVFJJRVNfTlVNX01BWAkJMTYKPj4gICAKPj4gKy8qKgo+PiArICogc3Ry dWN0IHY0bDJfaGV2Y19kcGJfZW50cnkgLSBIRVZDIGRlY29kZWQgcGljdHVyZSBidWZmZXIgZW50 cnkKPj4gKyAqCj4+ICsgKiBAdGltZXN0YW1wOiB0aW1lc3RhbXAgb2YgdGhlIFY0TDIgY2FwdHVy ZSBidWZmZXIgdG8gdXNlIGFzIHJlZmVyZW5jZS4KPj4gKyAqIEBmbGFnczogbG9uZyB0ZXJtIGZs YWcgZm9yIHRoZSByZWZlcmVuY2UgZnJhbWUKPj4gKyAqIEBmaWVsZF9waWM6IHdoZXRoZXIgdGhl IHJlZmVyZW5jZSBpcyBhIGZpZWxkIHBpY3R1cmUgb3IgYSBmcmFtZS4KPj4gKyAqIEBwaWNfb3Jk ZXJfY250X3ZhbDogdGhlIHBpY3R1cmUgb3JkZXIgY291bnQgb2YgdGhlIHJlZmVyZW5jZS4KPj4g KyAqLwo+PiAgIHN0cnVjdCB2NGwyX2hldmNfZHBiX2VudHJ5IHsKPj4gICAJX191NjQJdGltZXN0 YW1wOwo+PiAgIAlfX3U4CWZsYWdzOwo+PiBAQCAtMTU2LDYgKzI1OCwzMSBAQCBzdHJ1Y3QgdjRs Ml9oZXZjX2RwYl9lbnRyeSB7Cj4+ICAgCV9fdTgJcGFkZGluZ1syXTsKPj4gICB9Owo+PiAgIAo+ PiArLyoqCj4+ICsgKiBzdHJ1Y3QgdjRsMl9oZXZjX3ByZWRfd2VpZ2h0X3RhYmxlIC0gSEVWQyB3 ZWlnaHRlZCBwcmVkaWN0aW9uIHBhcmFtZXRlcnMKPj4gKyAqCj4+ICsgKiBAZGVsdGFfbHVtYV93 ZWlnaHRfbDA6IHRoZSBkaWZmZXJlbmNlIG9mIHRoZSB3ZWlnaHRpbmcgZmFjdG9yIGFwcGxpZWQK Pj4gKyAqCQkJICB0byB0aGUgbHVtYSBwcmVkaWN0aW9uIHZhbHVlIGZvciBsaXN0IDAKPj4gKyAq IEBsdW1hX29mZnNldF9sMDogdGhlIGFkZGl0aXZlIG9mZnNldCBhcHBsaWVkIHRvIHRoZSBsdW1h IHByZWRpY3Rpb24gdmFsdWUKPj4gKyAqCQkgICAgZm9yIGxpc3QgMAo+PiArICogQGRlbHRhX2No cm9tYV93ZWlnaHRfbDA6IHRoZSBkaWZmZXJlbmNlIG9mIHRoZSB3ZWlnaHRpbmcgZmFjdG9yIGFw cGxpZWQKPj4gKyAqCQkJICAgIHRvIHRoZSBjaHJvbWEgcHJlZGljdGlvbiB2YWx1ZXMgZm9yIGxp c3QgMAo+PiArICogQGNocm9tYV9vZmZzZXRfbDA6IHRoZSBkaWZmZXJlbmNlIG9mIHRoZSBhZGRp dGl2ZSBvZmZzZXQgYXBwbGllZCB0bwo+PiArICoJCSAgICAgIHRoZSBjaHJvbWEgcHJlZGljdGlv biB2YWx1ZXMgZm9yIGxpc3QgMAo+PiArICogQGRlbHRhX2x1bWFfd2VpZ2h0X2wxOiB0aGUgZGlm ZmVyZW5jZSBvZiB0aGUgd2VpZ2h0aW5nIGZhY3RvciBhcHBsaWVkCj4+ICsgKgkJCSAgdG8gdGhl IGx1bWEgcHJlZGljdGlvbiB2YWx1ZSBmb3IgbGlzdCAxCj4+ICsgKiBAbHVtYV9vZmZzZXRfbDE6 IHRoZSBhZGRpdGl2ZSBvZmZzZXQgYXBwbGllZCB0byB0aGUgbHVtYSBwcmVkaWN0aW9uIHZhbHVl Cj4+ICsgKgkJICAgIGZvciBsaXN0IDEKPj4gKyAqIEBkZWx0YV9jaHJvbWFfd2VpZ2h0X2wxOiB0 aGUgZGlmZmVyZW5jZSBvZiB0aGUgd2VpZ2h0aW5nIGZhY3RvciBhcHBsaWVkCj4+ICsgKgkJCSAg ICB0byB0aGUgY2hyb21hIHByZWRpY3Rpb24gdmFsdWVzIGZvciBsaXN0IDEKPj4gKyAqIEBjaHJv bWFfb2Zmc2V0X2wxOiB0aGUgZGlmZmVyZW5jZSBvZiB0aGUgYWRkaXRpdmUgb2Zmc2V0IGFwcGxp ZWQgdG8KPj4gKyAqCQkgICAgICB0aGUgY2hyb21hIHByZWRpY3Rpb24gdmFsdWVzIGZvciBsaXN0 IDEKPj4gKyAqIEBsdW1hX2xvZzJfd2VpZ2h0X2Rlbm9tOiB0aGUgYmFzZSAyIGxvZ2FyaXRobSBv ZiB0aGUgZGVub21pbmF0b3IgZm9yCj4+ICsgKgkJCSAgICBhbGwgbHVtYSB3ZWlnaHRpbmcgZmFj dG9ycwo+PiArICogQGRlbHRhX2Nocm9tYV9sb2cyX3dlaWdodF9kZW5vbTogdGhlIGRpZmZlcmVu Y2Ugb2YgdGhlIGJhc2UgMiBsb2dhcml0aG0KPj4gKyAqCQkJCSAgICBvZiB0aGUgZGVub21pbmF0 b3IgZm9yIGFsbCBjaHJvbWEKPj4gKyAqCQkJCSAgICB3ZWlnaHRpbmcgZmFjdG9ycwo+PiArICov Cj4+ICAgc3RydWN0IHY0bDJfaGV2Y19wcmVkX3dlaWdodF90YWJsZSB7Cj4+ICAgCV9fczgJZGVs dGFfbHVtYV93ZWlnaHRfbDBbVjRMMl9IRVZDX0RQQl9FTlRSSUVTX05VTV9NQVhdOwo+PiAgIAlf X3M4CWx1bWFfb2Zmc2V0X2wwW1Y0TDJfSEVWQ19EUEJfRU5UUklFU19OVU1fTUFYXTsKPj4gQEAg LTE4NCw2ICszMTEsNTAgQEAgc3RydWN0IHY0bDJfaGV2Y19wcmVkX3dlaWdodF90YWJsZSB7Cj4+ ICAgI2RlZmluZSBWNEwyX0hFVkNfU0xJQ0VfUEFSQU1TX0ZMQUdfU0xJQ0VfTE9PUF9GSUxURVJf QUNST1NTX1NMSUNFU19FTkFCTEVEICgxVUxMIDw8IDgpCj4+ICAgI2RlZmluZSBWNEwyX0hFVkNf U0xJQ0VfUEFSQU1TX0ZMQUdfREVQRU5ERU5UX1NMSUNFX1NFR01FTlQJKDFVTEwgPDwgOSkKPj4g ICAKPj4gKy8qKgo+PiArICogdjRsMl9jdHJsX2hldmNfc2xpY2VfcGFyYW1zIC0gSEVWQyBzbGlj ZSBwYXJhbWV0ZXJzCj4+ICsgKgo+PiArICogQGJpdF9zaXplOiBzaXplIChpbiBiaXRzKSBvZiB0 aGUgY3VycmVudCBzbGljZSBkYXRhCj4+ICsgKiBAZGF0YV9iaXRfb2Zmc2V0OiBvZmZzZXQgKGlu IGJpdHMpIHRvIHRoZSB2aWRlbyBkYXRhIGluIHRoZSBjdXJyZW50IHNsaWNlIGRhdGEKPj4gKyAq IEBuYWxfdW5pdF90eXBlOiBzcGVjaWZpZXMgdGhlIGNvZGluZyB0eXBlIG9mIHRoZSBzbGljZSAo QiwgUCBvciBJKQo+PiArICogQG51aF90ZW1wb3JhbF9pZF9wbHVzMTogbWludXMgMSBzcGVjaWZp ZXMgYSB0ZW1wb3JhbCBpZGVudGlmaWVyIGZvciB0aGUgTkFMIHVuaXQKPj4gKyAqIEBzbGljZV90 eXBlOiBzZWUgVjRMMl9IRVZDX1NMSUNFX1RZUEVfe30KPj4gKyAqIEBjb2xvdXJfcGxhbmVfaWQ6 IHNwZWNpZmllcyB0aGUgY29sb3VyIHBsYW5lIGFzc29jaWF0ZWQgd2l0aCB0aGUgY3VycmVudCBz bGljZQo+PiArICogQHNsaWNlX3BpY19vcmRlcl9jbnQ6IHNwZWNpZmllcyB0aGUgcGljdHVyZSBv cmRlciBjb3VudAo+PiArICogQG51bV9yZWZfaWR4X2wwX2FjdGl2ZV9taW51czE6IHNwZWNpZmll cyB0aGUgbWF4aW11bSByZWZlcmVuY2UgaW5kZXggZm9yCj4+ICsgKgkJCQkgIHJlZmVyZW5jZSBw aWN0dXJlIGxpc3QgMCB0aGF0IG1heSBiZSB1c2VkIHRvIGRlY29kZQo+PiArICoJCQkJICB0aGUg c2xpY2UKPj4gKyAqIEBudW1fcmVmX2lkeF9sMV9hY3RpdmVfbWludXMxOiBzcGVjaWZpZXMgdGhl IG1heGltdW0gcmVmZXJlbmNlIGluZGV4IGZvcgo+PiArICoJCQkJICByZWZlcmVuY2UgcGljdHVy ZSBsaXN0IDEgdGhhdCBtYXkgYmUgdXNlZCB0byBkZWNvZGUKPj4gKyAqCQkJCSAgdGhlIHNsaWNl Cj4+ICsgKiBAY29sbG9jYXRlZF9yZWZfaWR4OiBzcGVjaWZpZXMgdGhlIHJlZmVyZW5jZSBpbmRl eCBvZiB0aGUgY29sbG9jYXRlZCBwaWN0dXJlIHVzZWQKPj4gKyAqCQkJZm9yIHRlbXBvcmFsIG1v dGlvbiB2ZWN0b3IgcHJlZGljdGlvbgo+PiArICogQGZpdmVfbWludXNfbWF4X251bV9tZXJnZV9j YW5kOiBzcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIG1lcmdpbmcKPj4gKyAqCQkJCSAg IG1vdGlvbiB2ZWN0b3IgcHJlZGljdGlvbiBjYW5kaWRhdGVzIHN1cHBvcnRlZCBpbgo+PiArICoJ CQkJICAgdGhlIHNsaWNlIHN1YnRyYWN0ZWQgZnJvbSA1Cj4+ICsgKiBAc2xpY2VfcXBfZGVsdGE6 IHNwZWNpZmllcyB0aGUgaW5pdGlhbCB2YWx1ZSBvZiBRcFkgdG8gYmUgdXNlZCBmb3IgdGhlIGNv ZGluZwo+PiArICoJCSAgICBibG9ja3MgaW4gdGhlIHNsaWNlCj4+ICsgKiBAc2xpY2VfY2JfcXBf b2Zmc2V0OiBzcGVjaWZpZXMgYSBkaWZmZXJlbmNlIHRvIGJlIGFkZGVkIHRvIHRoZSB2YWx1ZSBv ZiBwcHNfY2JfcXBfb2Zmc2V0Cj4+ICsgKiBAc2xpY2VfY3JfcXBfb2Zmc2V0OiBzcGVjaWZpZXMg YSBkaWZmZXJlbmNlIHRvIGJlIGFkZGVkIHRvIHRoZSB2YWx1ZSBvZiBwcHNfY3JfcXBfb2Zmc2V0 Cj4+ICsgKiBAc2xpY2VfYWN0X3lfcXBfb2Zmc2V0OiBzY3JlZW4gY29udGVudCBleHRlbnNpb24g cGFyYW1ldGVycwo+PiArICogQHNsaWNlX2FjdF9jYl9xcF9vZmZzZXQ6IHNjcmVlbiBjb250ZW50 IGV4dGVuc2lvbiBwYXJhbWV0ZXJzCj4+ICsgKiBAc2xpY2VfYWN0X2NyX3FwX29mZnNldDogc2Ny ZWVuIGNvbnRlbnQgZXh0ZW5zaW9uIHBhcmFtZXRlcnMKPj4gKyAqIEBzbGljZV9iZXRhX29mZnNl dF9kaXYyOiBzcGVjaWZ5IHRoZSBkZWJsb2NraW5nIHBhcmFtZXRlciBvZmZzZXRzIGZvciBiZXRh IGRpdmlkZWQgYnkgMgo+PiArICogQHNsaWNlX3RjX29mZnNldF9kaXYyOiBzcGVjaWZ5IHRoZSBk ZWJsb2NraW5nIHBhcmFtZXRlciBvZmZzZXRzIGZvciB0QyBkaXZpZGVkIGJ5IDIKPj4gKyAqIEBw aWNfc3RydWN0OiBpbmRpY2F0ZXMgd2hldGhlciBhIHBpY3R1cmUgc2hvdWxkIGJlIGRpc3BsYXll ZCBhcyBhIGZyYW1lIG9yIGFzIG9uZSBvcgo+PiArICoJCW1vcmUgZmllbGRzCj4+ICsgKiBAc2xp Y2Vfc2VnbWVudF9hZGRyOiBzcGVjaWZpZXMgdGhlIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IGNvZGlu ZyB0cmVlIGJsb2NrIGluCj4+ICsgKgkJCXRoZSBzbGljZSBzZWdtZW50Cj4+ICsgKiBAcmVmX2lk eF9sMDogdGhlIGxpc3Qgb2YgTDAgcmVmZXJlbmNlIGVsZW1lbnRzIGFzIGluZGljZXMgaW4gdGhl IERQQgo+PiArICogQHJlZl9pZHhfbDE6IHRoZSBsaXN0IG9mIEwxIHJlZmVyZW5jZSBlbGVtZW50 cyBhcyBpbmRpY2VzIGluIHRoZSBEUEIKPj4gKyAqIEBzaG9ydF90ZXJtX3JlZl9waWNfc2V0X3Np emU6IHNwZWNpZmllcyB0aGUgc2l6ZSBvZiBzaG9ydC10ZXJtIHJlZmVyZW5jZQo+PiArICoJCQkJ IHBpY3R1cmVzIGluY2x1ZGVkIGluIHRoZSBTUFMKPj4gKyAqIEBsb25nX3Rlcm1fcmVmX3BpY19z ZXRfc2l6ZTogc3BlY2lmaWVzIHRoZSBzaXplIG9mIGxvbmctdGVybSByZWZlcmVuY2UKPj4gKyAq CQkJCXBpY3R1cmUgaW5jbHVkZSBpbiB0aGUgU1BTCj4+ICsgKiBAcHJlZF93ZWlnaHRfdGFibGU6 IHRoZSBwcmVkaWN0aW9uIHdlaWdodCBjb2VmZmljaWVudHMgZm9yIGludGVyLXBpY3R1cmUKPj4g KyAqCQkgICAgICAgcHJlZGljdGlvbgo+PiArICogQGZsYWdzOiBzZWUgVjRMMl9IRVZDX1NMSUNF X1BBUkFNU19GTEFHX3t9Cj4+ICsgKi8KPj4gICBzdHJ1Y3QgdjRsMl9jdHJsX2hldmNfc2xpY2Vf cGFyYW1zIHsKPj4gICAJX191MzIJYml0X3NpemU7Cj4+ICAgCV9fdTMyCWRhdGFfYml0X29mZnNl dDsKPj4gQEAgLTIzMCw2ICs0MDEsMjggQEAgc3RydWN0IHY0bDJfY3RybF9oZXZjX3NsaWNlX3Bh cmFtcyB7Cj4+ICAgI2RlZmluZSBWNEwyX0hFVkNfREVDT0RFX1BBUkFNX0ZMQUdfSURSX1BJQwkJ MHgyCj4+ICAgI2RlZmluZSBWNEwyX0hFVkNfREVDT0RFX1BBUkFNX0ZMQUdfTk9fT1VUUFVUX09G X1BSSU9SICAweDQKPj4gICAKPj4gKy8qKgo+PiArICogc3RydWN0IHY0bDJfY3RybF9oZXZjX2Rl Y29kZV9wYXJhbXMgLSBIRVZDIGRlY29kZSBwYXJhbWV0ZXJzCj4+ICsgKgo+PiArICogQHBpY19v cmRlcl9jbnRfdmFsOiBwaWN0dXJlIG9yZGVyIGNvdW50Cj4+ICsgKiBAc2hvcnRfdGVybV9yZWZf cGljX3NldF9zaXplOiBzcGVjaWZpZXMgdGhlIHNpemUgb2Ygc2hvcnQtdGVybSByZWZlcmVuY2UK Pj4gKyAqCQkJCSBwaWN0dXJlcyBzZXQgaW5jbHVkZWQgaW4gdGhlIFNQUyBvZiB0aGUgZmlyc3Qg c2xpY2UKPj4gKyAqIEBsb25nX3Rlcm1fcmVmX3BpY19zZXRfc2l6ZTogc3BlY2lmaWVzIHRoZSBz aXplIG9mIGxvbmctdGVybSByZWZlcmVuY2UKPj4gKyAqCQkJCXBpY3R1cmVzIHNldCBpbmNsdWRl IGluIHRoZSBTUFMgb2YgdGhlIGZpcnN0IHNsaWNlCj4+ICsgKiBAbnVtX2FjdGl2ZV9kcGJfZW50 cmllczogdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIGRwYgo+PiArICogQGRwYjogdGhlIGRlY29k ZWQgcGljdHVyZSBidWZmZXIsIGZvciBtZXRhLWRhdGEgYWJvdXQgcmVmZXJlbmNlIGZyYW1lcwo+ PiArICogQG51bV9wb2Nfc3RfY3Vycl9iZWZvcmU6IHRoZSBudW1iZXIgb2YgcmVmZXJlbmNlIHBp Y3R1cmVzIGluIHRoZSBzaG9ydC10ZXJtCj4+ICsgKgkJCSAgICBzZXQgdGhhdCBjb21lIGJlZm9y ZSB0aGUgY3VycmVudCBmcmFtZQo+PiArICogQG51bV9wb2Nfc3RfY3Vycl9hZnRlcjogdGhlIG51 bWJlciBvZiByZWZlcmVuY2UgcGljdHVyZXMgaW4gdGhlIHNob3J0LXRlcm0KPj4gKyAqCQkJICAg c2V0IHRoYXQgY29tZSBhZnRlciB0aGUgY3VycmVudCBmcmFtZQo+PiArICogQG51bV9wb2NfbHRf Y3VycjogdGhlIG51bWJlciBvZiByZWZlcmVuY2UgcGljdHVyZXMgaW4gdGhlIGxvbmctdGVybSBz ZXQKPj4gKyAqIEBwb2Nfc3RfY3Vycl9iZWZvcmU6IHByb3ZpZGVzIHRoZSBpbmRleCBvZiB0aGUg c2hvcnQgdGVybSBiZWZvcmUgcmVmZXJlbmNlcwo+PiArICoJCQlpbiBEUEIgYXJyYXkKPj4gKyAq IEBwb2Nfc3RfY3Vycl9hZnRlcjogcHJvdmlkZXMgdGhlIGluZGV4IG9mIHRoZSBzaG9ydCB0ZXJt IGFmdGVyIHJlZmVyZW5jZXMKPj4gKyAqCQkgICAgICAgaW4gRFBCIGFycmF5Cj4+ICsgKiBAcG9j X2x0X2N1cnI6IHByb3ZpZGVzIHRoZSBpbmRleCBvZiB0aGUgbG9uZyB0ZXJtIHJlZmVyZW5jZXMg aW4gRFBCIGFycmF5Cj4+ICsgKiBAZmxhZ3M6IHNlZSBWNEwyX0hFVkNfREVDT0RFX1BBUkFNX0ZM QUdfe30KPj4gKyAqLwo+PiAgIHN0cnVjdCB2NGwyX2N0cmxfaGV2Y19kZWNvZGVfcGFyYW1zIHsK Pj4gICAJX19zMzIJcGljX29yZGVyX2NudF92YWw7Cj4+ICAgCV9fdTE2CXNob3J0X3Rlcm1fcmVm X3BpY19zZXRfc2l6ZTsKPj4gQEAgLTI0NSw2ICs0MzgsMjggQEAgc3RydWN0IHY0bDJfY3RybF9o ZXZjX2RlY29kZV9wYXJhbXMgewo+PiAgIAlfX3U2NAlmbGFnczsKPj4gICB9Owo+PiAgIAo+PiAr LyoqCj4+ICsgKiBzdHJ1Y3QgdjRsMl9jdHJsX2hldmNfc2NhbGluZ19tYXRyaXggLSBIRVZDIHNj YWxpbmcgbGlzdHMgcGFyYW1ldGVycwo+PiArICoKPj4gKyAqIEBzY2FsaW5nX2xpc3RfNHg0OiBz Y2FsaW5nIGxpc3QgaXMgdXNlZCBmb3IgdGhlIHNjYWxpbmcgcHJvY2VzcyBmb3IKPj4gKyAqCQkg ICAgICB0cmFuc2Zvcm0gY29lZmZpY2llbnRzLiBUaGUgdmFsdWVzIG9uIGVhY2ggc2NhbGluZwo+ PiArICoJCSAgICAgIGxpc3QgYXJlIGV4cGVjdGVkIGluIHJhc3RlciBzY2FuIG9yZGVyCj4+ICsg KiBAc2NhbGluZ19saXN0Xzh4ODogc2NhbGluZyBsaXN0IGlzIHVzZWQgZm9yIHRoZSBzY2FsaW5n IHByb2Nlc3MgZm9yCj4+ICsgKgkJICAgICAgdHJhbnNmb3JtIGNvZWZmaWNpZW50cy4gVGhlIHZh bHVlcyBvbiBlYWNoIHNjYWxpbmcKPj4gKyAqCQkgICAgICBsaXN0IGFyZSBleHBlY3RlZCBpbiBy YXN0ZXIgc2NhbiBvcmRlcgo+PiArICogQHNjYWxpbmdfbGlzdF8xNngxNjogc2NhbGluZyBsaXN0 IGlzIHVzZWQgZm9yIHRoZSBzY2FsaW5nIHByb2Nlc3MgZm9yCj4+ICsgKgkJCXRyYW5zZm9ybSBj b2VmZmljaWVudHMuIFRoZSB2YWx1ZXMgb24gZWFjaCBzY2FsaW5nCj4+ICsgKgkJCWxpc3QgYXJl IGV4cGVjdGVkIGluIHJhc3RlciBzY2FuIG9yZGVyCj4+ICsgKiBAc2NhbGluZ19saXN0XzMyeDMy OglzY2FsaW5nIGxpc3QgaXMgdXNlZCBmb3IgdGhlIHNjYWxpbmcgcHJvY2VzcyBmb3IKPj4gKyAq CQkJdHJhbnNmb3JtIGNvZWZmaWNpZW50cy4gVGhlIHZhbHVlcyBvbiBlYWNoIHNjYWxpbmcKPj4g KyAqCQkJbGlzdCBhcmUgZXhwZWN0ZWQgaW4gcmFzdGVyIHNjYW4gb3JkZXIKPj4gKyAqIEBzY2Fs aW5nX2xpc3RfZGNfY29lZl8xNngxNjogc2NhbGluZyBsaXN0IGlzIHVzZWQgZm9yIHRoZSBzY2Fs aW5nIHByb2Nlc3MKPj4gKyAqCQkJCWZvciB0cmFuc2Zvcm0gY29lZmZpY2llbnRzLiBUaGUgdmFs dWVzIG9uIGVhY2gKPj4gKyAqCQkJCXNjYWxpbmcgbGlzdCBhcmUgZXhwZWN0ZWQgaW4gcmFzdGVy IHNjYW4gb3JkZXIuCj4+ICsgKiBAc2NhbGluZ19saXN0X2RjX2NvZWZfMzJ4MzI6CXNjYWxpbmcg bGlzdCBpcyB1c2VkIGZvciB0aGUgc2NhbGluZyBwcm9jZXNzCj4+ICsgKgkJCQlmb3IgdHJhbnNm b3JtIGNvZWZmaWNpZW50cy4gVGhlIHZhbHVlcyBvbiBlYWNoCj4+ICsgKgkJCQlzY2FsaW5nIGxp c3QgYXJlIGV4cGVjdGVkIGluIHJhc3RlciBzY2FuIG9yZGVyLgo+PiArICovCj4+ICAgc3RydWN0 IHY0bDJfY3RybF9oZXZjX3NjYWxpbmdfbWF0cml4IHsKPj4gICAJX191OAlzY2FsaW5nX2xpc3Rf NHg0WzZdWzE2XTsKPj4gICAJX191OAlzY2FsaW5nX2xpc3RfOHg4WzZdWzY0XTsKPiBSZWdhcmRz LAo+Cj4gCUhhbnMKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCkxpbnV4LXJvY2tjaGlwIG1haWxpbmcgbGlzdApMaW51eC1yb2NrY2hpcEBsaXN0cy5pbmZy YWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGlu dXgtcm9ja2NoaXAK From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from madras.collabora.co.uk (madras.collabora.co.uk [46.235.227.172]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AD9687A; Tue, 14 Jun 2022 15:20:45 +0000 (UTC) Received: from [IPV6:2a01:e0a:120:3210:4a7b:8d3a:acaa:ec46] (unknown [IPv6:2a01:e0a:120:3210:4a7b:8d3a:acaa:ec46]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) (Authenticated sender: benjamin.gaignard) by madras.collabora.co.uk (Postfix) with ESMTPSA id 94C9C66016B6; Tue, 14 Jun 2022 16:20:43 +0100 (BST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1655220044; bh=8BdhfJPhS9pkvNh2AfdYyZoI34NuVVX/SWzfb6me7/0=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=VOMgR7KI+Xk/KVQS4/XKBzIx/eXtGwplgBLH8RN+PRwlxBC3b/soog/foQ9biZkhT lRFUa4c+cfYCJkcax+jPHBbNvpscZHBbJeZhwLB/tNRE+/BfLuPLXeb6veUweIrVsC u8JsmoDqnXQaGkbYVUS0x2Bn9DtynBY08OvYceJT7cuJY2S6YI+1ggHbog0y/pK7Ga yu49l/3pI641oc6CEMbnGcVRmNJgJErX/xl9ynLP8d6D/V+mR4uIAearMhiJ+GtMBm FIdYX6WX7qu/EHo9nA7J7afpXPf9sopp75iEZX7YTnW6rx3AUdcah5mQxYrZ1ES96D E8vN/bzTMip3A== Message-ID: <0fbf1961-c3f7-9205-4ec4-b7640614ae20@collabora.com> Date: Tue, 14 Jun 2022 17:20:41 +0200 Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.9.1 Subject: Re: [PATCH v8 08/17] media: uapi: HEVC: Add documentation to uAPI structure Content-Language: en-US To: Hans Verkuil , mchehab@kernel.org, ezequiel@vanguardiasur.com.ar, p.zabel@pengutronix.de, gregkh@linuxfoundation.org, mripard@kernel.org, paul.kocialkowski@bootlin.com, wens@csie.org, jernej.skrabec@gmail.com, samuel@sholland.org, nicolas.dufresne@collabora.com, andrzej.p@collabora.com Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org, linux-staging@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, kernel@collabora.com References: <20220614083614.240641-1-benjamin.gaignard@collabora.com> <20220614083614.240641-9-benjamin.gaignard@collabora.com> <6960a5b6-441d-71a1-d99a-873b502301ca@xs4all.nl> From: Benjamin Gaignard In-Reply-To: <6960a5b6-441d-71a1-d99a-873b502301ca@xs4all.nl> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Le 14/06/2022 à 15:39, Hans Verkuil a écrit : > On 6/14/22 10:36, Benjamin Gaignard wrote: >> Add kernel-doc documentation for all the HEVC structures. >> >> Signed-off-by: Benjamin Gaignard >> --- >> version 5: >> - Fix num_short_term_ref_pic_sets and num_long_term_ref_pics_sps >> >> .../media/v4l/ext-ctrls-codec.rst | 164 +++++++------ >> include/media/hevc-ctrls.h | 221 +++++++++++++++++- >> 2 files changed, 311 insertions(+), 74 deletions(-) >> >> diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst >> index 1ccf6dda61b3..06b967de140c 100644 >> --- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst >> +++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst >> @@ -2695,70 +2695,76 @@ enum v4l2_mpeg_video_hevc_size_of_length_field - >> of H.265 specifications. >> * - __u16 >> - ``pic_width_in_luma_samples`` >> - - >> + - Specifies the width of each decoded picture in units of luma samples. >> * - __u16 >> - ``pic_height_in_luma_samples`` >> - - >> + - Specifies the height of each decoded picture in units of luma samples. >> * - __u8 >> - ``bit_depth_luma_minus8`` >> - - >> + - Specifies the bit depth of the samples of the luma array. > Shouldn't this be: > > - This value plus 8 specifies the bit depth of the samples of the luma array. > > Same elsewhere. I will change them in the next version. > >> * - __u8 >> - ``bit_depth_chroma_minus8`` >> - - >> + - Specifies the bit depth of the samples of the chroma arrays. >> * - __u8 >> - ``log2_max_pic_order_cnt_lsb_minus4`` >> - - >> + - Specifies the value of the variable MaxPicOrderCntLsb. >> * - __u8 >> - ``sps_max_dec_pic_buffering_minus1`` >> - - >> + - Plus 1 specifies the maximum required size of the decoded picture buffer for > I would prefer to phrase this as: "This value plus 1" > I'm not sure how common the current phrase is, though. If it is already used everywhere, > then keep it as-is. > >> + the CVS > Missing period at the end. > > What is CVS? Perhaps write the full name? it is for coded video sequence, I will write the full name in next version. > >> * - __u8 >> - ``sps_max_num_reorder_pics`` >> - - >> + - Indicates the maximum allowed number of pictures. >> * - __u8 >> - ``sps_max_latency_increase_plus1`` >> - - >> + - Not equal to 0 is used to compute the value of SpsMaxLatencyPictures[i]. >> * - __u8 >> - ``log2_min_luma_coding_block_size_minus3`` >> - - >> + - Plus 3 specifies the minimum luma coding block size. >> * - __u8 >> - ``log2_diff_max_min_luma_coding_block_size`` >> - - >> + - Specifies the difference between the maximum and minimum luma coding block size. >> * - __u8 >> - ``log2_min_luma_transform_block_size_minus2`` >> - - >> + - Plus 2 specifies the minimum luma transform block size. >> * - __u8 >> - ``log2_diff_max_min_luma_transform_block_size`` >> - - >> + - Specifies the difference between the maximum and minimum luma transform block size. >> * - __u8 >> - ``max_transform_hierarchy_depth_inter`` >> - - >> + - Specifies the maximum hierarchy depth for transform units of coding units coded >> + in inter prediction mode. >> * - __u8 >> - ``max_transform_hierarchy_depth_intra`` >> - - >> + - Specifies the maximum hierarchy depth for transform units of coding units coded in >> + intra prediction mode. >> * - __u8 >> - ``pcm_sample_bit_depth_luma_minus1`` >> - - >> + - Specifies the number of bits used to represent each of PCM sample values of the >> + luma component. >> * - __u8 >> - ``pcm_sample_bit_depth_chroma_minus1`` >> - - >> + - Specifies the number of bits used to represent each of PCM sample values of >> + the chroma components. >> * - __u8 >> - ``log2_min_pcm_luma_coding_block_size_minus3`` >> - - >> + - Plus 3 specifies the minimum size of coding blocks. >> * - __u8 >> - ``log2_diff_max_min_pcm_luma_coding_block_size`` >> - - >> + - Specifies the difference between the maximum and minimum size of coding blocks. >> * - __u8 >> - ``num_short_term_ref_pic_sets`` >> - - >> + - Specifies the number of st_ref_pic_set() syntax structures included in the SPS. >> * - __u8 >> - ``num_long_term_ref_pics_sps`` >> - - >> + - Specifies the number of candidate long-term reference pictures that are >> + specified in the SPS. >> * - __u8 >> - ``chroma_format_idc`` >> - - >> + - Specifies the chroma sampling. >> * - __u8 >> - ``sps_max_sub_layers_minus1`` >> - - >> + - plus 1 specifies the maximum number of temporal sub-layers. > plus -> Plus > >> * - __u64 >> - ``flags`` >> - See :ref:`Sequence Parameter Set Flags ` >> @@ -2837,7 +2843,8 @@ enum v4l2_mpeg_video_hevc_size_of_length_field - >> - Identifies the PPS for reference by other syntax elements. >> * - __u8 >> - ``num_extra_slice_header_bits`` >> - - >> + - Specifies the number of extra slice header bits that are present >> + in the slice header RBSP for coded pictures referring to the PPS. >> * - __u8 >> - ``num_ref_idx_l0_default_active_minus1`` >> - Specifies the inferred value of num_ref_idx_l0_active_minus1 >> @@ -2846,37 +2853,42 @@ enum v4l2_mpeg_video_hevc_size_of_length_field - >> - Specifies the inferred value of num_ref_idx_l1_active_minus1 >> * - __s8 >> - ``init_qp_minus26`` >> - - >> + - Plus 26 specifies the initial value of SliceQp Y for each slice >> + referring to the PPS. >> * - __u8 >> - ``diff_cu_qp_delta_depth`` >> - - >> + - Specifies the difference between the luma coding tree block size >> + and the minimum luma coding block size of coding units that >> + convey cu_qp_delta_abs and cu_qp_delta_sign_flag. >> * - __s8 >> - ``pps_cb_qp_offset`` >> - - >> + - Specify the offsets to the luma quantization parameter Cb. >> * - __s8 >> - ``pps_cr_qp_offset`` >> - - >> + - Specify the offsets to the luma quantization parameter Cr. >> * - __u8 >> - ``num_tile_columns_minus1`` >> - - >> + - Plus 1 specifies the number of tile columns partitioning the picture. >> * - __u8 >> - ``num_tile_rows_minus1`` >> - - >> + - Plus 1 specifies the number of tile rows partitioning the picture. >> * - __u8 >> - ``column_width_minus1[20]`` >> - - >> + - Plus 1 specifies the width of the i-th tile column in units of > Wouldn't "of each tile column" be easier to understand? yes > >> + coding tree blocks. >> * - __u8 >> - ``row_height_minus1[22]`` >> - - >> + - Plus 1 specifies the height of the i-th tile row in units of coding > Ditto. > >> + tree blocks. >> * - __s8 >> - ``pps_beta_offset_div2`` >> - - >> + - Specify the default deblocking parameter offsets for beta divided by 2. >> * - __s8 >> - ``pps_tc_offset_div2`` >> - - >> + - Specify the default deblocking parameter offsets for tC divided by 2. > Is it actually called 'tC' in the HEVC standard, or is this a typo? it is called tC in HEVC spec: 'pps_beta_offset_div2 and pps_tc_offset_div2 specify the default deblocking parameter offsets for β and tC...' > >> * - __u8 >> - ``log2_parallel_merge_level_minus2`` >> - - >> + - Plus 2 specifies the value of the variable Log2ParMrgLevel. >> * - __u8 >> - ``padding[4]`` >> - Applications and drivers must set this to zero. >> @@ -2998,10 +3010,10 @@ enum v4l2_mpeg_video_hevc_size_of_length_field - >> - Offset (in bits) to the video data in the current slice data. >> * - __u8 >> - ``nal_unit_type`` >> - - >> + - Specifies the coding type of the slice (B, P or I). >> * - __u8 >> - ``nuh_temporal_id_plus1`` >> - - >> + - Minus 1 specifies a temporal identifier for the NAL unit. >> * - __u8 >> - ``slice_type`` >> - >> @@ -3009,52 +3021,56 @@ enum v4l2_mpeg_video_hevc_size_of_length_field - >> V4L2_HEVC_SLICE_TYPE_B). >> * - __u8 >> - ``colour_plane_id`` >> - - >> + - Specifies the colour plane associated with the current slice. >> * - __s32 >> - ``slice_pic_order_cnt`` >> - - >> + - Specifies the picture order count. >> * - __u8 >> - ``num_ref_idx_l0_active_minus1`` >> - - >> + - Specifies the maximum reference index for reference picture list 0 >> + that may be used to decode the slice. >> * - __u8 >> - ``num_ref_idx_l1_active_minus1`` >> - - >> + - Specifies the maximum reference index for reference picture list 1 >> + that may be used to decode the slice. >> * - __u8 >> - ``collocated_ref_idx`` >> - - >> + - Specifies the reference index of the collocated picture used for >> + temporal motion vector prediction. >> * - __u8 >> - ``five_minus_max_num_merge_cand`` >> - - >> + - Specifies the maximum number of merging motion vector prediction >> + candidates supported in the slice subtracted from 5. >> * - __s8 >> - ``slice_qp_delta`` >> - - >> + - Specifies the initial value of QpY to be used for the coding blocks in the slice. > It's really 'QpY'? There is no obvious relationship between the 'Y' character and the '_delta' > suffix. Just checking. yes it is 'Qpy' in HEVC spec: 'slice_qp_delta specifies the initial value of QpY to be used for the coding blocks in the slice until modified by the value of CuQpDeltaVal in the coding unit layer. The initial value of the QpY quantization parameter for the slice, SliceQpY, is derived as follows: SliceQpY = 26 + init_qp_minus26 + slice_qp_delta' Regards, Benjamin > >> * - __s8 >> - ``slice_cb_qp_offset`` >> - - >> + - Specifies a difference to be added to the value of pps_cb_qp_offset. >> * - __s8 >> - ``slice_cr_qp_offset`` >> - - >> + - Specifies a difference to be added to the value of pps_cr_qp_offset. >> * - __s8 >> - ``slice_act_y_qp_offset`` >> - - >> + - screen content extension parameters >> * - __s8 >> - ``slice_act_cb_qp_offset`` >> - - >> + - screen content extension parameters >> * - __s8 >> - ``slice_act_cr_qp_offset`` >> - - >> + - screen content extension parameters >> * - __s8 >> - ``slice_beta_offset_div2`` >> - - >> + - Specify the deblocking parameter offsets for beta divided by 2. >> * - __s8 >> - ``slice_tc_offset_div2`` >> - - >> + - Specify the deblocking parameter offsets for tC divided by 2. >> * - __u8 >> - ``pic_struct`` >> - - >> + - Indicates whether a picture should be displayed as a frame or as one or more fields. >> * - __u32 >> - ``slice_segment_addr`` >> - - >> + - Specifies the address of the first coding tree block in the slice segment. >> * - __u8 >> - ``ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]`` >> - The list of L0 reference elements as indices in the DPB. >> @@ -3219,11 +3235,9 @@ enum v4l2_mpeg_video_hevc_size_of_length_field - >> - ``field_pic`` >> - Whether the reference is a field picture or a frame. >> See :ref:`HEVC dpb field pic Flags ` >> - * - __u16 >> - - ``pic_order_cnt[2]`` >> - - The picture order count of the reference. Only the first element of the >> - array is used for frame pictures, while the first element identifies the >> - top field and the second the bottom field in field-coded pictures. >> + * - __s32 >> + - ``pic_order_cnt_val`` >> + - The picture order count of the current picture. >> * - __u8 >> - ``padding[2]`` >> - Applications and drivers must set this to zero. >> @@ -3298,36 +3312,44 @@ enum v4l2_mpeg_video_hevc_size_of_length_field - >> :stub-columns: 0 >> :widths: 1 1 2 >> >> - * - __u8 >> - - ``luma_log2_weight_denom`` >> - - >> - * - __s8 >> - - ``delta_chroma_log2_weight_denom`` >> - - >> * - __s8 >> - ``delta_luma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]`` >> - - >> + - The difference of the weighting factor applied to the luma >> + prediction value for list 0. >> * - __s8 >> - ``luma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]`` >> - - >> + - The additive offset applied to the luma prediction value for list 0. >> * - __s8 >> - ``delta_chroma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]`` >> - - >> + - The difference of the weighting factor applied to the chroma >> + prediction value for list 0. >> * - __s8 >> - ``chroma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]`` >> - - >> + - The difference of the additive offset applied to the chroma >> + prediction values for list 0. >> * - __s8 >> - ``delta_luma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]`` >> - - >> + - The difference of the weighting factor applied to the luma >> + prediction value for list 1. >> * - __s8 >> - ``luma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]`` >> - - >> + - The additive offset applied to the luma prediction value for list 1. >> * - __s8 >> - ``delta_chroma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]`` >> - - >> + - The difference of the weighting factor applied to the chroma >> + prediction value for list 1. >> * - __s8 >> - ``chroma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]`` >> - - >> + - The difference of the additive offset applied to the chroma >> + prediction values for list 1. >> + * - __u8 >> + - ``luma_log2_weight_denom`` >> + - The base 2 logarithm of the denominator for all luma weighting >> + factors. >> + * - __s8 >> + - ``delta_chroma_log2_weight_denom`` >> + - The difference of the base 2 logarithm of the denominator for >> + all chroma weighting factors. >> * - __u8 >> - ``padding[6]`` >> - Applications and drivers must set this to zero. >> diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h >> index f3695ab44389..0dbd5d681c28 100644 >> --- a/include/media/hevc-ctrls.h >> +++ b/include/media/hevc-ctrls.h >> @@ -55,9 +55,68 @@ enum v4l2_stateless_hevc_start_code { >> #define V4L2_HEVC_SPS_FLAG_SPS_TEMPORAL_MVP_ENABLED (1ULL << 7) >> #define V4L2_HEVC_SPS_FLAG_STRONG_INTRA_SMOOTHING_ENABLED (1ULL << 8) >> >> -/* The controls are not stable at the moment and will likely be reworked. */ >> +/** >> + * struct v4l2_ctrl_hevc_sps - ITU-T Rec. H.265: Sequence parameter set >> + * >> + * @video_parameter_set_id: specifies the value of the >> + * vps_video_parameter_set_id of the active VPS >> + * @seq_parameter_set_id: provides an identifier for the SPS for >> + * reference by other syntax elements >> + * @pic_width_in_luma_samples: specifies the width of each decoded picture >> + * in units of luma samples >> + * @pic_height_in_luma_samples: specifies the height of each decoded picture >> + * in units of luma samples >> + * @bit_depth_luma_minus8: specifies the bit depth of the samples of the >> + * luma array >> + * @bit_depth_chroma_minus8: specifies the bit depth of the samples of the >> + * chroma arrays >> + * @log2_max_pic_order_cnt_lsb_minus4: specifies the value of the variable >> + * MaxPicOrderCntLsb >> + * @sps_max_dec_pic_buffering_minus1: plus 1 specifies the maximum required >> + * size of the decoded picture buffer for >> + * the CVS >> + * @sps_max_num_reorder_pics: indicates the maximum allowed number of pictures >> + * @sps_max_latency_increase_plus1: not equal to 0 is used to compute the >> + * value of SpsMaxLatencyPictures[i] > What is 'i' in this context? > >> + * @log2_min_luma_coding_block_size_minus3: plus 3 specifies the minimum >> + * luma coding block size >> + * @log2_diff_max_min_luma_coding_block_size: specifies the difference between >> + * the maximum and minimum luma >> + * coding block size >> + * @log2_min_luma_transform_block_size_minus2: plus 2 specifies the minimum luma >> + * transform block size >> + * @log2_diff_max_min_luma_transform_block_size: specifies the difference between >> + * the maximum and minimum luma >> + * transform block size >> + * @max_transform_hierarchy_depth_inter: specifies the maximum hierarchy >> + * depth for transform units of >> + * coding units coded in inter >> + * prediction mode >> + * @max_transform_hierarchy_depth_intra: specifies the maximum hierarchy >> + * depth for transform units of >> + * coding units coded in intra >> + * prediction mode >> + * @pcm_sample_bit_depth_luma_minus1: specifies the number of bits used to >> + * represent each of PCM sample values of the >> + * luma component >> + * @pcm_sample_bit_depth_chroma_minus1: specifies the number of bits used to >> + * represent each of PCM sample values of >> + * the chroma components >> + * @log2_min_pcm_luma_coding_block_size_minus3: plus 3 specifies the minimum size >> + * of coding blocks >> + * @log2_diff_max_min_pcm_luma_coding_block_size: specifies the difference between >> + * the maximum and minimum size of >> + * coding blocks >> + * @num_short_term_ref_pic_sets: specifies the number of st_ref_pic_set() >> + * syntax structures included in the SPS >> + * @num_long_term_ref_pics_sps: specifies the number of candidate long-term >> + * reference pictures that are specified in the SPS >> + * @chroma_format_idc: specifies the chroma sampling >> + * @sps_max_sub_layers_minus1: plus 1 specifies the maximum number of temporal >> + * sub-layers >> + * @flags: see V4L2_HEVC_SPS_FLAG_{} >> + */ >> struct v4l2_ctrl_hevc_sps { >> - /* ISO/IEC 23008-2, ITU-T Rec. H.265: Sequence parameter set */ >> __u8 video_parameter_set_id; >> __u8 seq_parameter_set_id; >> __u16 pic_width_in_luma_samples; >> @@ -108,8 +167,43 @@ struct v4l2_ctrl_hevc_sps { >> #define V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_CONTROL_PRESENT (1ULL << 19) >> #define V4L2_HEVC_PPS_FLAG_UNIFORM_SPACING (1ULL << 20) >> >> +/** >> + * struct v4l2_ctrl_hevc_pps - ITU-T Rec. H.265: Picture parameter set >> + * >> + * @pic_parameter_set_id: identifies the PPS for reference by other >> + * syntax elements >> + * @num_extra_slice_header_bits: specifies the number of extra slice header >> + * bits that are present in the slice header RBSP >> + * for coded pictures referring to the PPS. >> + * @num_ref_idx_l0_default_active_minus1: specifies the inferred value of >> + * num_ref_idx_l0_active_minus1 >> + * @num_ref_idx_l1_default_active_minus1: specifies the inferred value of >> + * num_ref_idx_l1_active_minus1 >> + * @init_qp_minus26: plus 26 specifies the initial value of SliceQp Y for >> + * each slice referring to the PPS >> + * @diff_cu_qp_delta_depth: specifies the difference between the luma coding >> + * tree block size and the minimum luma coding block >> + * size of coding units that convey cu_qp_delta_abs >> + * and cu_qp_delta_sign_flag >> + * @pps_cb_qp_offset: specify the offsets to the luma quantization parameter Cb >> + * @pps_cr_qp_offset: specify the offsets to the luma quantization parameter Cr >> + * @num_tile_columns_minus1: plus 1 specifies the number of tile columns >> + * partitioning the picture >> + * @num_tile_rows_minus1: plus 1 specifies the number of tile rows partitioning >> + * the picture >> + * @column_width_minus1: plus 1 specifies the width of the i-th tile column in > "the i-th" -> each > > I think that's easier to understand. > >> + * units of coding tree blocks >> + * @row_height_minus1: plus 1 specifies the height of the i-th tile row in > Ditto. > >> + * units of coding tree blocks >> + * @pps_beta_offset_div2: specify the default deblocking parameter offsets for >> + * beta divided by 2 >> + * @pps_tc_offset_div2: specify the default deblocking parameter offsets for tC >> + * divided by 2 >> + * @log2_parallel_merge_level_minus2: plus 2 specifies the value of the variable >> + * Log2ParMrgLevel >> + * @flags: see V4L2_HEVC_PPS_FLAG_{} >> + */ >> struct v4l2_ctrl_hevc_pps { >> - /* ISO/IEC 23008-2, ITU-T Rec. H.265: Picture parameter set */ >> __u8 pic_parameter_set_id; >> __u8 num_extra_slice_header_bits; >> __u8 num_ref_idx_l0_default_active_minus1; >> @@ -148,6 +242,14 @@ struct v4l2_ctrl_hevc_pps { >> >> #define V4L2_HEVC_DPB_ENTRIES_NUM_MAX 16 >> >> +/** >> + * struct v4l2_hevc_dpb_entry - HEVC decoded picture buffer entry >> + * >> + * @timestamp: timestamp of the V4L2 capture buffer to use as reference. >> + * @flags: long term flag for the reference frame >> + * @field_pic: whether the reference is a field picture or a frame. >> + * @pic_order_cnt_val: the picture order count of the reference. >> + */ >> struct v4l2_hevc_dpb_entry { >> __u64 timestamp; >> __u8 flags; >> @@ -156,6 +258,31 @@ struct v4l2_hevc_dpb_entry { >> __u8 padding[2]; >> }; >> >> +/** >> + * struct v4l2_hevc_pred_weight_table - HEVC weighted prediction parameters >> + * >> + * @delta_luma_weight_l0: the difference of the weighting factor applied >> + * to the luma prediction value for list 0 >> + * @luma_offset_l0: the additive offset applied to the luma prediction value >> + * for list 0 >> + * @delta_chroma_weight_l0: the difference of the weighting factor applied >> + * to the chroma prediction values for list 0 >> + * @chroma_offset_l0: the difference of the additive offset applied to >> + * the chroma prediction values for list 0 >> + * @delta_luma_weight_l1: the difference of the weighting factor applied >> + * to the luma prediction value for list 1 >> + * @luma_offset_l1: the additive offset applied to the luma prediction value >> + * for list 1 >> + * @delta_chroma_weight_l1: the difference of the weighting factor applied >> + * to the chroma prediction values for list 1 >> + * @chroma_offset_l1: the difference of the additive offset applied to >> + * the chroma prediction values for list 1 >> + * @luma_log2_weight_denom: the base 2 logarithm of the denominator for >> + * all luma weighting factors >> + * @delta_chroma_log2_weight_denom: the difference of the base 2 logarithm >> + * of the denominator for all chroma >> + * weighting factors >> + */ >> struct v4l2_hevc_pred_weight_table { >> __s8 delta_luma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]; >> __s8 luma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]; >> @@ -184,6 +311,50 @@ struct v4l2_hevc_pred_weight_table { >> #define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_LOOP_FILTER_ACROSS_SLICES_ENABLED (1ULL << 8) >> #define V4L2_HEVC_SLICE_PARAMS_FLAG_DEPENDENT_SLICE_SEGMENT (1ULL << 9) >> >> +/** >> + * v4l2_ctrl_hevc_slice_params - HEVC slice parameters >> + * >> + * @bit_size: size (in bits) of the current slice data >> + * @data_bit_offset: offset (in bits) to the video data in the current slice data >> + * @nal_unit_type: specifies the coding type of the slice (B, P or I) >> + * @nuh_temporal_id_plus1: minus 1 specifies a temporal identifier for the NAL unit >> + * @slice_type: see V4L2_HEVC_SLICE_TYPE_{} >> + * @colour_plane_id: specifies the colour plane associated with the current slice >> + * @slice_pic_order_cnt: specifies the picture order count >> + * @num_ref_idx_l0_active_minus1: specifies the maximum reference index for >> + * reference picture list 0 that may be used to decode >> + * the slice >> + * @num_ref_idx_l1_active_minus1: specifies the maximum reference index for >> + * reference picture list 1 that may be used to decode >> + * the slice >> + * @collocated_ref_idx: specifies the reference index of the collocated picture used >> + * for temporal motion vector prediction >> + * @five_minus_max_num_merge_cand: specifies the maximum number of merging >> + * motion vector prediction candidates supported in >> + * the slice subtracted from 5 >> + * @slice_qp_delta: specifies the initial value of QpY to be used for the coding >> + * blocks in the slice >> + * @slice_cb_qp_offset: specifies a difference to be added to the value of pps_cb_qp_offset >> + * @slice_cr_qp_offset: specifies a difference to be added to the value of pps_cr_qp_offset >> + * @slice_act_y_qp_offset: screen content extension parameters >> + * @slice_act_cb_qp_offset: screen content extension parameters >> + * @slice_act_cr_qp_offset: screen content extension parameters >> + * @slice_beta_offset_div2: specify the deblocking parameter offsets for beta divided by 2 >> + * @slice_tc_offset_div2: specify the deblocking parameter offsets for tC divided by 2 >> + * @pic_struct: indicates whether a picture should be displayed as a frame or as one or >> + * more fields >> + * @slice_segment_addr: specifies the address of the first coding tree block in >> + * the slice segment >> + * @ref_idx_l0: the list of L0 reference elements as indices in the DPB >> + * @ref_idx_l1: the list of L1 reference elements as indices in the DPB >> + * @short_term_ref_pic_set_size: specifies the size of short-term reference >> + * pictures included in the SPS >> + * @long_term_ref_pic_set_size: specifies the size of long-term reference >> + * picture include in the SPS >> + * @pred_weight_table: the prediction weight coefficients for inter-picture >> + * prediction >> + * @flags: see V4L2_HEVC_SLICE_PARAMS_FLAG_{} >> + */ >> struct v4l2_ctrl_hevc_slice_params { >> __u32 bit_size; >> __u32 data_bit_offset; >> @@ -230,6 +401,28 @@ struct v4l2_ctrl_hevc_slice_params { >> #define V4L2_HEVC_DECODE_PARAM_FLAG_IDR_PIC 0x2 >> #define V4L2_HEVC_DECODE_PARAM_FLAG_NO_OUTPUT_OF_PRIOR 0x4 >> >> +/** >> + * struct v4l2_ctrl_hevc_decode_params - HEVC decode parameters >> + * >> + * @pic_order_cnt_val: picture order count >> + * @short_term_ref_pic_set_size: specifies the size of short-term reference >> + * pictures set included in the SPS of the first slice >> + * @long_term_ref_pic_set_size: specifies the size of long-term reference >> + * pictures set include in the SPS of the first slice >> + * @num_active_dpb_entries: the number of entries in dpb >> + * @dpb: the decoded picture buffer, for meta-data about reference frames >> + * @num_poc_st_curr_before: the number of reference pictures in the short-term >> + * set that come before the current frame >> + * @num_poc_st_curr_after: the number of reference pictures in the short-term >> + * set that come after the current frame >> + * @num_poc_lt_curr: the number of reference pictures in the long-term set >> + * @poc_st_curr_before: provides the index of the short term before references >> + * in DPB array >> + * @poc_st_curr_after: provides the index of the short term after references >> + * in DPB array >> + * @poc_lt_curr: provides the index of the long term references in DPB array >> + * @flags: see V4L2_HEVC_DECODE_PARAM_FLAG_{} >> + */ >> struct v4l2_ctrl_hevc_decode_params { >> __s32 pic_order_cnt_val; >> __u16 short_term_ref_pic_set_size; >> @@ -245,6 +438,28 @@ struct v4l2_ctrl_hevc_decode_params { >> __u64 flags; >> }; >> >> +/** >> + * struct v4l2_ctrl_hevc_scaling_matrix - HEVC scaling lists parameters >> + * >> + * @scaling_list_4x4: scaling list is used for the scaling process for >> + * transform coefficients. The values on each scaling >> + * list are expected in raster scan order >> + * @scaling_list_8x8: scaling list is used for the scaling process for >> + * transform coefficients. The values on each scaling >> + * list are expected in raster scan order >> + * @scaling_list_16x16: scaling list is used for the scaling process for >> + * transform coefficients. The values on each scaling >> + * list are expected in raster scan order >> + * @scaling_list_32x32: scaling list is used for the scaling process for >> + * transform coefficients. The values on each scaling >> + * list are expected in raster scan order >> + * @scaling_list_dc_coef_16x16: scaling list is used for the scaling process >> + * for transform coefficients. The values on each >> + * scaling list are expected in raster scan order. >> + * @scaling_list_dc_coef_32x32: scaling list is used for the scaling process >> + * for transform coefficients. The values on each >> + * scaling list are expected in raster scan order. >> + */ >> struct v4l2_ctrl_hevc_scaling_matrix { >> __u8 scaling_list_4x4[6][16]; >> __u8 scaling_list_8x8[6][64]; > Regards, > > Hans 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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 50DE3C43334 for ; Tue, 14 Jun 2022 15:21:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=C4TKvWkHXRyXUnXvGj6555qRlo4QnGq6dFaYV0PEEtE=; b=ZDAPhPSs3CtdUB 8ZNPGeAkRQtWTH6angWGg6D1oFDd4k5yTsl52uB6AY9mfavhqzZ01q6RehXzlH3R/+SY9Br4pWptm 6mf8eqEt2yRGd/jiWuzh4v0HUwGcExFzscF8VJzwxZU93x4TK21Dy6MhLbrgEmOTfLOgEsqwyZD9V +CwnINa1njP4p0yQIKp1G0sFm0a0fVSvv3z6wmaI5rm50FzpubdX/EuqDeulOoQYFqBmDmMmj7b4X Y/iyUbRATuFLC0MfpGv/F4Hx9mdXUztthu81WGR6xkXNbCOIiVumRAVESsYJNp6B7SxO4pfFu90i0 o1X4Xdvie7qX6+Pjba7Q==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1o18La-00A85o-I3; Tue, 14 Jun 2022 15:20:50 +0000 Received: from madras.collabora.co.uk ([46.235.227.172]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1o18LV-00A83F-Ea; Tue, 14 Jun 2022 15:20:49 +0000 Received: from [IPV6:2a01:e0a:120:3210:4a7b:8d3a:acaa:ec46] (unknown [IPv6:2a01:e0a:120:3210:4a7b:8d3a:acaa:ec46]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) (Authenticated sender: benjamin.gaignard) by madras.collabora.co.uk (Postfix) with ESMTPSA id 94C9C66016B6; Tue, 14 Jun 2022 16:20:43 +0100 (BST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1655220044; bh=8BdhfJPhS9pkvNh2AfdYyZoI34NuVVX/SWzfb6me7/0=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=VOMgR7KI+Xk/KVQS4/XKBzIx/eXtGwplgBLH8RN+PRwlxBC3b/soog/foQ9biZkhT lRFUa4c+cfYCJkcax+jPHBbNvpscZHBbJeZhwLB/tNRE+/BfLuPLXeb6veUweIrVsC u8JsmoDqnXQaGkbYVUS0x2Bn9DtynBY08OvYceJT7cuJY2S6YI+1ggHbog0y/pK7Ga yu49l/3pI641oc6CEMbnGcVRmNJgJErX/xl9ynLP8d6D/V+mR4uIAearMhiJ+GtMBm FIdYX6WX7qu/EHo9nA7J7afpXPf9sopp75iEZX7YTnW6rx3AUdcah5mQxYrZ1ES96D E8vN/bzTMip3A== Message-ID: <0fbf1961-c3f7-9205-4ec4-b7640614ae20@collabora.com> Date: Tue, 14 Jun 2022 17:20:41 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.9.1 Subject: Re: [PATCH v8 08/17] media: uapi: HEVC: Add documentation to uAPI structure Content-Language: en-US To: Hans Verkuil , mchehab@kernel.org, ezequiel@vanguardiasur.com.ar, p.zabel@pengutronix.de, gregkh@linuxfoundation.org, mripard@kernel.org, paul.kocialkowski@bootlin.com, wens@csie.org, jernej.skrabec@gmail.com, samuel@sholland.org, nicolas.dufresne@collabora.com, andrzej.p@collabora.com Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org, linux-staging@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, kernel@collabora.com References: <20220614083614.240641-1-benjamin.gaignard@collabora.com> <20220614083614.240641-9-benjamin.gaignard@collabora.com> <6960a5b6-441d-71a1-d99a-873b502301ca@xs4all.nl> From: Benjamin Gaignard In-Reply-To: <6960a5b6-441d-71a1-d99a-873b502301ca@xs4all.nl> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220614_082045_859793_B703B576 X-CRM114-Status: GOOD ( 32.09 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org CkxlIDE0LzA2LzIwMjIgw6AgMTU6MzksIEhhbnMgVmVya3VpbCBhIMOpY3JpdMKgOgo+IE9uIDYv MTQvMjIgMTA6MzYsIEJlbmphbWluIEdhaWduYXJkIHdyb3RlOgo+PiBBZGQga2VybmVsLWRvYyBk b2N1bWVudGF0aW9uIGZvciBhbGwgdGhlIEhFVkMgc3RydWN0dXJlcy4KPj4KPj4gU2lnbmVkLW9m Zi1ieTogQmVuamFtaW4gR2FpZ25hcmQgPGJlbmphbWluLmdhaWduYXJkQGNvbGxhYm9yYS5jb20+ Cj4+IC0tLQo+PiB2ZXJzaW9uIDU6Cj4+IC0gRml4IG51bV9zaG9ydF90ZXJtX3JlZl9waWNfc2V0 cyBhbmQgbnVtX2xvbmdfdGVybV9yZWZfcGljc19zcHMKPj4KPj4gICAuLi4vbWVkaWEvdjRsL2V4 dC1jdHJscy1jb2RlYy5yc3QgICAgICAgICAgICAgfCAxNjQgKysrKysrKy0tLS0tLQo+PiAgIGlu Y2x1ZGUvbWVkaWEvaGV2Yy1jdHJscy5oICAgICAgICAgICAgICAgICAgICB8IDIyMSArKysrKysr KysrKysrKysrKy0KPj4gICAyIGZpbGVzIGNoYW5nZWQsIDMxMSBpbnNlcnRpb25zKCspLCA3NCBk ZWxldGlvbnMoLSkKPj4KPj4gZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFw aS9tZWRpYS92NGwvZXh0LWN0cmxzLWNvZGVjLnJzdCBiL0RvY3VtZW50YXRpb24vdXNlcnNwYWNl LWFwaS9tZWRpYS92NGwvZXh0LWN0cmxzLWNvZGVjLnJzdAo+PiBpbmRleCAxY2NmNmRkYTYxYjMu LjA2Yjk2N2RlMTQwYyAxMDA2NDQKPj4gLS0tIGEvRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBp L21lZGlhL3Y0bC9leHQtY3RybHMtY29kZWMucnN0Cj4+ICsrKyBiL0RvY3VtZW50YXRpb24vdXNl cnNwYWNlLWFwaS9tZWRpYS92NGwvZXh0LWN0cmxzLWNvZGVjLnJzdAo+PiBAQCAtMjY5NSw3MCAr MjY5NSw3NiBAQCBlbnVtIHY0bDJfbXBlZ192aWRlb19oZXZjX3NpemVfb2ZfbGVuZ3RoX2ZpZWxk IC0KPj4gICAgICAgICAgIG9mIEguMjY1IHNwZWNpZmljYXRpb25zLgo+PiAgICAgICAqIC0gX191 MTYKPj4gICAgICAgICAtIGBgcGljX3dpZHRoX2luX2x1bWFfc2FtcGxlc2BgCj4+IC0gICAgICAt Cj4+ICsgICAgICAtIFNwZWNpZmllcyB0aGUgd2lkdGggb2YgZWFjaCBkZWNvZGVkIHBpY3R1cmUg aW4gdW5pdHMgb2YgbHVtYSBzYW1wbGVzLgo+PiAgICAgICAqIC0gX191MTYKPj4gICAgICAgICAt IGBgcGljX2hlaWdodF9pbl9sdW1hX3NhbXBsZXNgYAo+PiAtICAgICAgLQo+PiArICAgICAgLSBT cGVjaWZpZXMgdGhlIGhlaWdodCBvZiBlYWNoIGRlY29kZWQgcGljdHVyZSBpbiB1bml0cyBvZiBs dW1hIHNhbXBsZXMuCj4+ICAgICAgICogLSBfX3U4Cj4+ICAgICAgICAgLSBgYGJpdF9kZXB0aF9s dW1hX21pbnVzOGBgCj4+IC0gICAgICAtCj4+ICsgICAgICAtIFNwZWNpZmllcyB0aGUgYml0IGRl cHRoIG9mIHRoZSBzYW1wbGVzIG9mIHRoZSBsdW1hIGFycmF5Lgo+IFNob3VsZG4ndCB0aGlzIGJl Ogo+Cj4gICAgICAgIC0gVGhpcyB2YWx1ZSBwbHVzIDggc3BlY2lmaWVzIHRoZSBiaXQgZGVwdGgg b2YgdGhlIHNhbXBsZXMgb2YgdGhlIGx1bWEgYXJyYXkuCj4KPiBTYW1lIGVsc2V3aGVyZS4KCkkg d2lsbCBjaGFuZ2UgdGhlbSBpbiB0aGUgbmV4dCB2ZXJzaW9uLgoKPgo+PiAgICAgICAqIC0gX191 OAo+PiAgICAgICAgIC0gYGBiaXRfZGVwdGhfY2hyb21hX21pbnVzOGBgCj4+IC0gICAgICAtCj4+ ICsgICAgICAtIFNwZWNpZmllcyB0aGUgYml0IGRlcHRoIG9mIHRoZSBzYW1wbGVzIG9mIHRoZSBj aHJvbWEgYXJyYXlzLgo+PiAgICAgICAqIC0gX191OAo+PiAgICAgICAgIC0gYGBsb2cyX21heF9w aWNfb3JkZXJfY250X2xzYl9taW51czRgYAo+PiAtICAgICAgLQo+PiArICAgICAgLSBTcGVjaWZp ZXMgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSBNYXhQaWNPcmRlckNudExzYi4KPj4gICAgICAg KiAtIF9fdTgKPj4gICAgICAgICAtIGBgc3BzX21heF9kZWNfcGljX2J1ZmZlcmluZ19taW51czFg YAo+PiAtICAgICAgLQo+PiArICAgICAgLSBQbHVzIDEgc3BlY2lmaWVzIHRoZSBtYXhpbXVtIHJl cXVpcmVkIHNpemUgb2YgdGhlIGRlY29kZWQgcGljdHVyZSBidWZmZXIgZm9yCj4gSSB3b3VsZCBw cmVmZXIgdG8gcGhyYXNlIHRoaXMgYXM6ICJUaGlzIHZhbHVlIHBsdXMgMSIKPiBJJ20gbm90IHN1 cmUgaG93IGNvbW1vbiB0aGUgY3VycmVudCBwaHJhc2UgaXMsIHRob3VnaC4gSWYgaXQgaXMgYWxy ZWFkeSB1c2VkIGV2ZXJ5d2hlcmUsCj4gdGhlbiBrZWVwIGl0IGFzLWlzLgo+Cj4+ICsgICAgICAg IHRoZSBDVlMKPiBNaXNzaW5nIHBlcmlvZCBhdCB0aGUgZW5kLgo+Cj4gV2hhdCBpcyBDVlM/IFBl cmhhcHMgd3JpdGUgdGhlIGZ1bGwgbmFtZT8KCml0IGlzIGZvciBjb2RlZCB2aWRlbyBzZXF1ZW5j ZSwgSSB3aWxsIHdyaXRlIHRoZSBmdWxsIG5hbWUgaW4gbmV4dCB2ZXJzaW9uLgoKPgo+PiAgICAg ICAqIC0gX191OAo+PiAgICAgICAgIC0gYGBzcHNfbWF4X251bV9yZW9yZGVyX3BpY3NgYAo+PiAt ICAgICAgLQo+PiArICAgICAgLSBJbmRpY2F0ZXMgdGhlIG1heGltdW0gYWxsb3dlZCBudW1iZXIg b2YgcGljdHVyZXMuCj4+ICAgICAgICogLSBfX3U4Cj4+ICAgICAgICAgLSBgYHNwc19tYXhfbGF0 ZW5jeV9pbmNyZWFzZV9wbHVzMWBgCj4+IC0gICAgICAtCj4+ICsgICAgICAtIE5vdCBlcXVhbCB0 byAwIGlzIHVzZWQgdG8gY29tcHV0ZSB0aGUgdmFsdWUgb2YgU3BzTWF4TGF0ZW5jeVBpY3R1cmVz W2ldLgo+PiAgICAgICAqIC0gX191OAo+PiAgICAgICAgIC0gYGBsb2cyX21pbl9sdW1hX2NvZGlu Z19ibG9ja19zaXplX21pbnVzM2BgCj4+IC0gICAgICAtCj4+ICsgICAgICAtIFBsdXMgMyBzcGVj aWZpZXMgdGhlIG1pbmltdW0gbHVtYSBjb2RpbmcgYmxvY2sgc2l6ZS4KPj4gICAgICAgKiAtIF9f dTgKPj4gICAgICAgICAtIGBgbG9nMl9kaWZmX21heF9taW5fbHVtYV9jb2RpbmdfYmxvY2tfc2l6 ZWBgCj4+IC0gICAgICAtCj4+ICsgICAgICAtIFNwZWNpZmllcyB0aGUgZGlmZmVyZW5jZSBiZXR3 ZWVuIHRoZSBtYXhpbXVtIGFuZCBtaW5pbXVtIGx1bWEgY29kaW5nIGJsb2NrIHNpemUuCj4+ICAg ICAgICogLSBfX3U4Cj4+ICAgICAgICAgLSBgYGxvZzJfbWluX2x1bWFfdHJhbnNmb3JtX2Jsb2Nr X3NpemVfbWludXMyYGAKPj4gLSAgICAgIC0KPj4gKyAgICAgIC0gUGx1cyAyIHNwZWNpZmllcyB0 aGUgbWluaW11bSBsdW1hIHRyYW5zZm9ybSBibG9jayBzaXplLgo+PiAgICAgICAqIC0gX191OAo+ PiAgICAgICAgIC0gYGBsb2cyX2RpZmZfbWF4X21pbl9sdW1hX3RyYW5zZm9ybV9ibG9ja19zaXpl YGAKPj4gLSAgICAgIC0KPj4gKyAgICAgIC0gU3BlY2lmaWVzIHRoZSBkaWZmZXJlbmNlIGJldHdl ZW4gdGhlIG1heGltdW0gYW5kIG1pbmltdW0gbHVtYSB0cmFuc2Zvcm0gYmxvY2sgc2l6ZS4KPj4g ICAgICAgKiAtIF9fdTgKPj4gICAgICAgICAtIGBgbWF4X3RyYW5zZm9ybV9oaWVyYXJjaHlfZGVw dGhfaW50ZXJgYAo+PiAtICAgICAgLQo+PiArICAgICAgLSBTcGVjaWZpZXMgdGhlIG1heGltdW0g aGllcmFyY2h5IGRlcHRoIGZvciB0cmFuc2Zvcm0gdW5pdHMgb2YgY29kaW5nIHVuaXRzIGNvZGVk Cj4+ICsgICAgICAgIGluIGludGVyIHByZWRpY3Rpb24gbW9kZS4KPj4gICAgICAgKiAtIF9fdTgK Pj4gICAgICAgICAtIGBgbWF4X3RyYW5zZm9ybV9oaWVyYXJjaHlfZGVwdGhfaW50cmFgYAo+PiAt ICAgICAgLQo+PiArICAgICAgLSBTcGVjaWZpZXMgdGhlIG1heGltdW0gaGllcmFyY2h5IGRlcHRo IGZvciB0cmFuc2Zvcm0gdW5pdHMgb2YgY29kaW5nIHVuaXRzIGNvZGVkIGluCj4+ICsgICAgICAg IGludHJhIHByZWRpY3Rpb24gbW9kZS4KPj4gICAgICAgKiAtIF9fdTgKPj4gICAgICAgICAtIGBg cGNtX3NhbXBsZV9iaXRfZGVwdGhfbHVtYV9taW51czFgYAo+PiAtICAgICAgLQo+PiArICAgICAg LSBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBiaXRzIHVzZWQgdG8gcmVwcmVzZW50IGVhY2ggb2Yg UENNIHNhbXBsZSB2YWx1ZXMgb2YgdGhlCj4+ICsgICAgICAgIGx1bWEgY29tcG9uZW50Lgo+PiAg ICAgICAqIC0gX191OAo+PiAgICAgICAgIC0gYGBwY21fc2FtcGxlX2JpdF9kZXB0aF9jaHJvbWFf bWludXMxYGAKPj4gLSAgICAgIC0KPj4gKyAgICAgIC0gU3BlY2lmaWVzIHRoZSBudW1iZXIgb2Yg Yml0cyB1c2VkIHRvIHJlcHJlc2VudCBlYWNoIG9mIFBDTSBzYW1wbGUgdmFsdWVzIG9mCj4+ICsg ICAgICAgIHRoZSBjaHJvbWEgY29tcG9uZW50cy4KPj4gICAgICAgKiAtIF9fdTgKPj4gICAgICAg ICAtIGBgbG9nMl9taW5fcGNtX2x1bWFfY29kaW5nX2Jsb2NrX3NpemVfbWludXMzYGAKPj4gLSAg ICAgIC0KPj4gKyAgICAgIC0gUGx1cyAzIHNwZWNpZmllcyB0aGUgbWluaW11bSBzaXplIG9mIGNv ZGluZyBibG9ja3MuCj4+ICAgICAgICogLSBfX3U4Cj4+ICAgICAgICAgLSBgYGxvZzJfZGlmZl9t YXhfbWluX3BjbV9sdW1hX2NvZGluZ19ibG9ja19zaXplYGAKPj4gLSAgICAgIC0KPj4gKyAgICAg IC0gU3BlY2lmaWVzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIG1heGltdW0gYW5kIG1pbmlt dW0gc2l6ZSBvZiBjb2RpbmcgYmxvY2tzLgo+PiAgICAgICAqIC0gX191OAo+PiAgICAgICAgIC0g YGBudW1fc2hvcnRfdGVybV9yZWZfcGljX3NldHNgYAo+PiAtICAgICAgLQo+PiArICAgICAgLSBT cGVjaWZpZXMgdGhlIG51bWJlciBvZiBzdF9yZWZfcGljX3NldCgpIHN5bnRheCBzdHJ1Y3R1cmVz IGluY2x1ZGVkIGluIHRoZSBTUFMuCj4+ICAgICAgICogLSBfX3U4Cj4+ICAgICAgICAgLSBgYG51 bV9sb25nX3Rlcm1fcmVmX3BpY3Nfc3BzYGAKPj4gLSAgICAgIC0KPj4gKyAgICAgIC0gU3BlY2lm aWVzIHRoZSBudW1iZXIgb2YgY2FuZGlkYXRlIGxvbmctdGVybSByZWZlcmVuY2UgcGljdHVyZXMg dGhhdCBhcmUKPj4gKyAgICAgICAgc3BlY2lmaWVkIGluIHRoZSBTUFMuCj4+ICAgICAgICogLSBf X3U4Cj4+ICAgICAgICAgLSBgYGNocm9tYV9mb3JtYXRfaWRjYGAKPj4gLSAgICAgIC0KPj4gKyAg ICAgIC0gU3BlY2lmaWVzIHRoZSBjaHJvbWEgc2FtcGxpbmcuCj4+ICAgICAgICogLSBfX3U4Cj4+ ICAgICAgICAgLSBgYHNwc19tYXhfc3ViX2xheWVyc19taW51czFgYAo+PiAtICAgICAgLQo+PiAr ICAgICAgLSBwbHVzIDEgc3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB0ZW1wb3JhbCBz dWItbGF5ZXJzLgo+IHBsdXMgLT4gUGx1cwo+Cj4+ICAgICAgICogLSBfX3U2NAo+PiAgICAgICAg IC0gYGBmbGFnc2BgCj4+ICAgICAgICAgLSBTZWUgOnJlZjpgU2VxdWVuY2UgUGFyYW1ldGVyIFNl dCBGbGFncyA8aGV2Y19zcHNfZmxhZ3M+YAo+PiBAQCAtMjgzNyw3ICsyODQzLDggQEAgZW51bSB2 NGwyX21wZWdfdmlkZW9faGV2Y19zaXplX29mX2xlbmd0aF9maWVsZCAtCj4+ICAgICAgICAgLSBJ ZGVudGlmaWVzIHRoZSBQUFMgZm9yIHJlZmVyZW5jZSBieSBvdGhlciBzeW50YXggZWxlbWVudHMu Cj4+ICAgICAgICogLSBfX3U4Cj4+ICAgICAgICAgLSBgYG51bV9leHRyYV9zbGljZV9oZWFkZXJf Yml0c2BgCj4+IC0gICAgICAtCj4+ICsgICAgICAtIFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGV4 dHJhIHNsaWNlIGhlYWRlciBiaXRzIHRoYXQgYXJlIHByZXNlbnQKPj4gKyAgICAgICAgaW4gdGhl IHNsaWNlIGhlYWRlciBSQlNQIGZvciBjb2RlZCBwaWN0dXJlcyByZWZlcnJpbmcgdG8gdGhlIFBQ Uy4KPj4gICAgICAgKiAtIF9fdTgKPj4gICAgICAgICAtIGBgbnVtX3JlZl9pZHhfbDBfZGVmYXVs dF9hY3RpdmVfbWludXMxYGAKPj4gICAgICAgICAtIFNwZWNpZmllcyB0aGUgaW5mZXJyZWQgdmFs dWUgb2YgbnVtX3JlZl9pZHhfbDBfYWN0aXZlX21pbnVzMQo+PiBAQCAtMjg0NiwzNyArMjg1Myw0 MiBAQCBlbnVtIHY0bDJfbXBlZ192aWRlb19oZXZjX3NpemVfb2ZfbGVuZ3RoX2ZpZWxkIC0KPj4g ICAgICAgICAtIFNwZWNpZmllcyB0aGUgaW5mZXJyZWQgdmFsdWUgb2YgbnVtX3JlZl9pZHhfbDFf YWN0aXZlX21pbnVzMQo+PiAgICAgICAqIC0gX19zOAo+PiAgICAgICAgIC0gYGBpbml0X3FwX21p bnVzMjZgYAo+PiAtICAgICAgLQo+PiArICAgICAgLSBQbHVzIDI2IHNwZWNpZmllcyB0aGUgaW5p dGlhbCB2YWx1ZSBvZiBTbGljZVFwIFkgZm9yIGVhY2ggc2xpY2UKPj4gKyAgICAgICAgcmVmZXJy aW5nIHRvIHRoZSBQUFMuCj4+ICAgICAgICogLSBfX3U4Cj4+ICAgICAgICAgLSBgYGRpZmZfY3Vf cXBfZGVsdGFfZGVwdGhgYAo+PiAtICAgICAgLQo+PiArICAgICAgLSBTcGVjaWZpZXMgdGhlIGRp ZmZlcmVuY2UgYmV0d2VlbiB0aGUgbHVtYSBjb2RpbmcgdHJlZSBibG9jayBzaXplCj4+ICsgICAg ICAgIGFuZCB0aGUgbWluaW11bSBsdW1hIGNvZGluZyBibG9jayBzaXplIG9mIGNvZGluZyB1bml0 cyB0aGF0Cj4+ICsgICAgICAgIGNvbnZleSBjdV9xcF9kZWx0YV9hYnMgYW5kIGN1X3FwX2RlbHRh X3NpZ25fZmxhZy4KPj4gICAgICAgKiAtIF9fczgKPj4gICAgICAgICAtIGBgcHBzX2NiX3FwX29m ZnNldGBgCj4+IC0gICAgICAtCj4+ICsgICAgICAtIFNwZWNpZnkgdGhlIG9mZnNldHMgdG8gdGhl IGx1bWEgcXVhbnRpemF0aW9uIHBhcmFtZXRlciBDYi4KPj4gICAgICAgKiAtIF9fczgKPj4gICAg ICAgICAtIGBgcHBzX2NyX3FwX29mZnNldGBgCj4+IC0gICAgICAtCj4+ICsgICAgICAtIFNwZWNp ZnkgdGhlIG9mZnNldHMgdG8gdGhlIGx1bWEgcXVhbnRpemF0aW9uIHBhcmFtZXRlciBDci4KPj4g ICAgICAgKiAtIF9fdTgKPj4gICAgICAgICAtIGBgbnVtX3RpbGVfY29sdW1uc19taW51czFgYAo+ PiAtICAgICAgLQo+PiArICAgICAgLSBQbHVzIDEgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgdGls ZSBjb2x1bW5zIHBhcnRpdGlvbmluZyB0aGUgcGljdHVyZS4KPj4gICAgICAgKiAtIF9fdTgKPj4g ICAgICAgICAtIGBgbnVtX3RpbGVfcm93c19taW51czFgYAo+PiAtICAgICAgLQo+PiArICAgICAg LSBQbHVzIDEgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgdGlsZSByb3dzIHBhcnRpdGlvbmluZyB0 aGUgcGljdHVyZS4KPj4gICAgICAgKiAtIF9fdTgKPj4gICAgICAgICAtIGBgY29sdW1uX3dpZHRo X21pbnVzMVsyMF1gYAo+PiAtICAgICAgLQo+PiArICAgICAgLSBQbHVzIDEgc3BlY2lmaWVzIHRo ZSB3aWR0aCBvZiB0aGUgaS10aCB0aWxlIGNvbHVtbiBpbiB1bml0cyBvZgo+IFdvdWxkbid0ICJv ZiBlYWNoIHRpbGUgY29sdW1uIiBiZSBlYXNpZXIgdG8gdW5kZXJzdGFuZD8KCnllcwoKPgo+PiAr ICAgICAgICBjb2RpbmcgdHJlZSBibG9ja3MuCj4+ICAgICAgICogLSBfX3U4Cj4+ICAgICAgICAg LSBgYHJvd19oZWlnaHRfbWludXMxWzIyXWBgCj4+IC0gICAgICAtCj4+ICsgICAgICAtIFBsdXMg MSBzcGVjaWZpZXMgdGhlIGhlaWdodCBvZiB0aGUgaS10aCB0aWxlIHJvdyBpbiB1bml0cyBvZiBj b2RpbmcKPiBEaXR0by4KPgo+PiArICAgICAgICB0cmVlIGJsb2Nrcy4KPj4gICAgICAgKiAtIF9f czgKPj4gICAgICAgICAtIGBgcHBzX2JldGFfb2Zmc2V0X2RpdjJgYAo+PiAtICAgICAgLQo+PiAr ICAgICAgLSBTcGVjaWZ5IHRoZSBkZWZhdWx0IGRlYmxvY2tpbmcgcGFyYW1ldGVyIG9mZnNldHMg Zm9yIGJldGEgZGl2aWRlZCBieSAyLgo+PiAgICAgICAqIC0gX19zOAo+PiAgICAgICAgIC0gYGBw cHNfdGNfb2Zmc2V0X2RpdjJgYAo+PiAtICAgICAgLQo+PiArICAgICAgLSBTcGVjaWZ5IHRoZSBk ZWZhdWx0IGRlYmxvY2tpbmcgcGFyYW1ldGVyIG9mZnNldHMgZm9yIHRDIGRpdmlkZWQgYnkgMi4K PiBJcyBpdCBhY3R1YWxseSBjYWxsZWQgJ3RDJyBpbiB0aGUgSEVWQyBzdGFuZGFyZCwgb3IgaXMg dGhpcyBhIHR5cG8/CgppdCBpcyBjYWxsZWQgdEMgaW4gSEVWQyBzcGVjOgoncHBzX2JldGFfb2Zm c2V0X2RpdjIgYW5kIHBwc190Y19vZmZzZXRfZGl2MiBzcGVjaWZ5IHRoZSBkZWZhdWx0IGRlYmxv Y2tpbmcgcGFyYW1ldGVyIG9mZnNldHMgZm9yIM6yIGFuZCB0Qy4uLicKCj4KPj4gICAgICAgKiAt IF9fdTgKPj4gICAgICAgICAtIGBgbG9nMl9wYXJhbGxlbF9tZXJnZV9sZXZlbF9taW51czJgYAo+ PiAtICAgICAgLQo+PiArICAgICAgLSBQbHVzIDIgc3BlY2lmaWVzIHRoZSB2YWx1ZSBvZiB0aGUg dmFyaWFibGUgTG9nMlBhck1yZ0xldmVsLgo+PiAgICAgICAqIC0gX191OAo+PiAgICAgICAgIC0g YGBwYWRkaW5nWzRdYGAKPj4gICAgICAgICAtIEFwcGxpY2F0aW9ucyBhbmQgZHJpdmVycyBtdXN0 IHNldCB0aGlzIHRvIHplcm8uCj4+IEBAIC0yOTk4LDEwICszMDEwLDEwIEBAIGVudW0gdjRsMl9t cGVnX3ZpZGVvX2hldmNfc2l6ZV9vZl9sZW5ndGhfZmllbGQgLQo+PiAgICAgICAgIC0gT2Zmc2V0 IChpbiBiaXRzKSB0byB0aGUgdmlkZW8gZGF0YSBpbiB0aGUgY3VycmVudCBzbGljZSBkYXRhLgo+ PiAgICAgICAqIC0gX191OAo+PiAgICAgICAgIC0gYGBuYWxfdW5pdF90eXBlYGAKPj4gLSAgICAg IC0KPj4gKyAgICAgIC0gU3BlY2lmaWVzIHRoZSBjb2RpbmcgdHlwZSBvZiB0aGUgc2xpY2UgKEIs IFAgb3IgSSkuCj4+ICAgICAgICogLSBfX3U4Cj4+ICAgICAgICAgLSBgYG51aF90ZW1wb3JhbF9p ZF9wbHVzMWBgCj4+IC0gICAgICAtCj4+ICsgICAgICAtIE1pbnVzIDEgc3BlY2lmaWVzIGEgdGVt cG9yYWwgaWRlbnRpZmllciBmb3IgdGhlIE5BTCB1bml0Lgo+PiAgICAgICAqIC0gX191OAo+PiAg ICAgICAgIC0gYGBzbGljZV90eXBlYGAKPj4gICAgICAgICAtCj4+IEBAIC0zMDA5LDUyICszMDIx LDU2IEBAIGVudW0gdjRsMl9tcGVnX3ZpZGVvX2hldmNfc2l6ZV9vZl9sZW5ndGhfZmllbGQgLQo+ PiAgIAlWNEwyX0hFVkNfU0xJQ0VfVFlQRV9CKS4KPj4gICAgICAgKiAtIF9fdTgKPj4gICAgICAg ICAtIGBgY29sb3VyX3BsYW5lX2lkYGAKPj4gLSAgICAgIC0KPj4gKyAgICAgIC0gU3BlY2lmaWVz IHRoZSBjb2xvdXIgcGxhbmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IHNsaWNlLgo+PiAg ICAgICAqIC0gX19zMzIKPj4gICAgICAgICAtIGBgc2xpY2VfcGljX29yZGVyX2NudGBgCj4+IC0g ICAgICAtCj4+ICsgICAgICAtIFNwZWNpZmllcyB0aGUgcGljdHVyZSBvcmRlciBjb3VudC4KPj4g ICAgICAgKiAtIF9fdTgKPj4gICAgICAgICAtIGBgbnVtX3JlZl9pZHhfbDBfYWN0aXZlX21pbnVz MWBgCj4+IC0gICAgICAtCj4+ICsgICAgICAtIFNwZWNpZmllcyB0aGUgbWF4aW11bSByZWZlcmVu Y2UgaW5kZXggZm9yIHJlZmVyZW5jZSBwaWN0dXJlIGxpc3QgMAo+PiArICAgICAgICB0aGF0IG1h eSBiZSB1c2VkIHRvIGRlY29kZSB0aGUgc2xpY2UuCj4+ICAgICAgICogLSBfX3U4Cj4+ICAgICAg ICAgLSBgYG51bV9yZWZfaWR4X2wxX2FjdGl2ZV9taW51czFgYAo+PiAtICAgICAgLQo+PiArICAg ICAgLSBTcGVjaWZpZXMgdGhlIG1heGltdW0gcmVmZXJlbmNlIGluZGV4IGZvciByZWZlcmVuY2Ug cGljdHVyZSBsaXN0IDEKPj4gKyAgICAgICAgdGhhdCBtYXkgYmUgdXNlZCB0byBkZWNvZGUgdGhl IHNsaWNlLgo+PiAgICAgICAqIC0gX191OAo+PiAgICAgICAgIC0gYGBjb2xsb2NhdGVkX3JlZl9p ZHhgYAo+PiAtICAgICAgLQo+PiArICAgICAgLSBTcGVjaWZpZXMgdGhlIHJlZmVyZW5jZSBpbmRl eCBvZiB0aGUgY29sbG9jYXRlZCBwaWN0dXJlIHVzZWQgZm9yCj4+ICsgICAgICAgIHRlbXBvcmFs IG1vdGlvbiB2ZWN0b3IgcHJlZGljdGlvbi4KPj4gICAgICAgKiAtIF9fdTgKPj4gICAgICAgICAt IGBgZml2ZV9taW51c19tYXhfbnVtX21lcmdlX2NhbmRgYAo+PiAtICAgICAgLQo+PiArICAgICAg LSBTcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIG1lcmdpbmcgbW90aW9uIHZlY3RvciBw cmVkaWN0aW9uCj4+ICsgICAgICAgIGNhbmRpZGF0ZXMgc3VwcG9ydGVkIGluIHRoZSBzbGljZSBz dWJ0cmFjdGVkIGZyb20gNS4KPj4gICAgICAgKiAtIF9fczgKPj4gICAgICAgICAtIGBgc2xpY2Vf cXBfZGVsdGFgYAo+PiAtICAgICAgLQo+PiArICAgICAgLSBTcGVjaWZpZXMgdGhlIGluaXRpYWwg dmFsdWUgb2YgUXBZIHRvIGJlIHVzZWQgZm9yIHRoZSBjb2RpbmcgYmxvY2tzIGluIHRoZSBzbGlj ZS4KPiBJdCdzIHJlYWxseSAnUXBZJz8gVGhlcmUgaXMgbm8gb2J2aW91cyByZWxhdGlvbnNoaXAg YmV0d2VlbiB0aGUgJ1knIGNoYXJhY3RlciBhbmQgdGhlICdfZGVsdGEnCj4gc3VmZml4LiBKdXN0 IGNoZWNraW5nLgoKeWVzIGl0IGlzICdRcHknIGluIEhFVkMgc3BlYzoKJ3NsaWNlX3FwX2RlbHRh IHNwZWNpZmllcyB0aGUgaW5pdGlhbCB2YWx1ZSBvZiBRcFkgdG8gYmUgdXNlZCBmb3IgdGhlIGNv ZGluZyBibG9ja3MgaW4gdGhlIHNsaWNlIHVudGlsIG1vZGlmaWVkIGJ5IHRoZSB2YWx1ZQpvZiBD dVFwRGVsdGFWYWwgaW4gdGhlIGNvZGluZyB1bml0IGxheWVyLiBUaGUgaW5pdGlhbCB2YWx1ZSBv ZiB0aGUgUXBZIHF1YW50aXphdGlvbiBwYXJhbWV0ZXIgZm9yIHRoZSBzbGljZSwgU2xpY2VRcFks IGlzCmRlcml2ZWQgYXMgZm9sbG93czoKU2xpY2VRcFkgPSAyNiArIGluaXRfcXBfbWludXMyNiAr IHNsaWNlX3FwX2RlbHRhJwoKUmVnYXJkcywKQmVuamFtaW4KCj4KPj4gICAgICAgKiAtIF9fczgK Pj4gICAgICAgICAtIGBgc2xpY2VfY2JfcXBfb2Zmc2V0YGAKPj4gLSAgICAgIC0KPj4gKyAgICAg IC0gU3BlY2lmaWVzIGEgZGlmZmVyZW5jZSB0byBiZSBhZGRlZCB0byB0aGUgdmFsdWUgb2YgcHBz X2NiX3FwX29mZnNldC4KPj4gICAgICAgKiAtIF9fczgKPj4gICAgICAgICAtIGBgc2xpY2VfY3Jf cXBfb2Zmc2V0YGAKPj4gLSAgICAgIC0KPj4gKyAgICAgIC0gU3BlY2lmaWVzIGEgZGlmZmVyZW5j ZSB0byBiZSBhZGRlZCB0byB0aGUgdmFsdWUgb2YgcHBzX2NyX3FwX29mZnNldC4KPj4gICAgICAg KiAtIF9fczgKPj4gICAgICAgICAtIGBgc2xpY2VfYWN0X3lfcXBfb2Zmc2V0YGAKPj4gLSAgICAg IC0KPj4gKyAgICAgIC0gc2NyZWVuIGNvbnRlbnQgZXh0ZW5zaW9uIHBhcmFtZXRlcnMKPj4gICAg ICAgKiAtIF9fczgKPj4gICAgICAgICAtIGBgc2xpY2VfYWN0X2NiX3FwX29mZnNldGBgCj4+IC0g ICAgICAtCj4+ICsgICAgICAtIHNjcmVlbiBjb250ZW50IGV4dGVuc2lvbiBwYXJhbWV0ZXJzCj4+ ICAgICAgICogLSBfX3M4Cj4+ICAgICAgICAgLSBgYHNsaWNlX2FjdF9jcl9xcF9vZmZzZXRgYAo+ PiAtICAgICAgLQo+PiArICAgICAgLSBzY3JlZW4gY29udGVudCBleHRlbnNpb24gcGFyYW1ldGVy cwo+PiAgICAgICAqIC0gX19zOAo+PiAgICAgICAgIC0gYGBzbGljZV9iZXRhX29mZnNldF9kaXYy YGAKPj4gLSAgICAgIC0KPj4gKyAgICAgIC0gU3BlY2lmeSB0aGUgZGVibG9ja2luZyBwYXJhbWV0 ZXIgb2Zmc2V0cyBmb3IgYmV0YSBkaXZpZGVkIGJ5IDIuCj4+ICAgICAgICogLSBfX3M4Cj4+ICAg ICAgICAgLSBgYHNsaWNlX3RjX29mZnNldF9kaXYyYGAKPj4gLSAgICAgIC0KPj4gKyAgICAgIC0g U3BlY2lmeSB0aGUgZGVibG9ja2luZyBwYXJhbWV0ZXIgb2Zmc2V0cyBmb3IgdEMgZGl2aWRlZCBi eSAyLgo+PiAgICAgICAqIC0gX191OAo+PiAgICAgICAgIC0gYGBwaWNfc3RydWN0YGAKPj4gLSAg ICAgIC0KPj4gKyAgICAgIC0gSW5kaWNhdGVzIHdoZXRoZXIgYSBwaWN0dXJlIHNob3VsZCBiZSBk aXNwbGF5ZWQgYXMgYSBmcmFtZSBvciBhcyBvbmUgb3IgbW9yZSBmaWVsZHMuCj4+ICAgICAgICog LSBfX3UzMgo+PiAgICAgICAgIC0gYGBzbGljZV9zZWdtZW50X2FkZHJgYAo+PiAtICAgICAgLQo+ PiArICAgICAgLSBTcGVjaWZpZXMgdGhlIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IGNvZGluZyB0cmVl IGJsb2NrIGluIHRoZSBzbGljZSBzZWdtZW50Lgo+PiAgICAgICAqIC0gX191OAo+PiAgICAgICAg IC0gYGByZWZfaWR4X2wwW1Y0TDJfSEVWQ19EUEJfRU5UUklFU19OVU1fTUFYXWBgCj4+ICAgICAg ICAgLSBUaGUgbGlzdCBvZiBMMCByZWZlcmVuY2UgZWxlbWVudHMgYXMgaW5kaWNlcyBpbiB0aGUg RFBCLgo+PiBAQCAtMzIxOSwxMSArMzIzNSw5IEBAIGVudW0gdjRsMl9tcGVnX3ZpZGVvX2hldmNf c2l6ZV9vZl9sZW5ndGhfZmllbGQgLQo+PiAgICAgICAgIC0gYGBmaWVsZF9waWNgYAo+PiAgICAg ICAgIC0gV2hldGhlciB0aGUgcmVmZXJlbmNlIGlzIGEgZmllbGQgcGljdHVyZSBvciBhIGZyYW1l Lgo+PiAgICAgICAgICAgU2VlIDpyZWY6YEhFVkMgZHBiIGZpZWxkIHBpYyBGbGFncyA8aGV2Y19k cGJfZmllbGRfcGljX2ZsYWdzPmAKPj4gLSAgICAqIC0gX191MTYKPj4gLSAgICAgIC0gYGBwaWNf b3JkZXJfY250WzJdYGAKPj4gLSAgICAgIC0gVGhlIHBpY3R1cmUgb3JkZXIgY291bnQgb2YgdGhl IHJlZmVyZW5jZS4gT25seSB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUKPj4gLSAgICAgICAgYXJy YXkgaXMgdXNlZCBmb3IgZnJhbWUgcGljdHVyZXMsIHdoaWxlIHRoZSBmaXJzdCBlbGVtZW50IGlk ZW50aWZpZXMgdGhlCj4+IC0gICAgICAgIHRvcCBmaWVsZCBhbmQgdGhlIHNlY29uZCB0aGUgYm90 dG9tIGZpZWxkIGluIGZpZWxkLWNvZGVkIHBpY3R1cmVzLgo+PiArICAgICogLSBfX3MzMgo+PiAr ICAgICAgLSBgYHBpY19vcmRlcl9jbnRfdmFsYGAKPj4gKyAgICAgIC0gVGhlIHBpY3R1cmUgb3Jk ZXIgY291bnQgb2YgdGhlIGN1cnJlbnQgcGljdHVyZS4KPj4gICAgICAgKiAtIF9fdTgKPj4gICAg ICAgICAtIGBgcGFkZGluZ1syXWBgCj4+ICAgICAgICAgLSBBcHBsaWNhdGlvbnMgYW5kIGRyaXZl cnMgbXVzdCBzZXQgdGhpcyB0byB6ZXJvLgo+PiBAQCAtMzI5OCwzNiArMzMxMiw0NCBAQCBlbnVt IHY0bDJfbXBlZ192aWRlb19oZXZjX3NpemVfb2ZfbGVuZ3RoX2ZpZWxkIC0KPj4gICAgICAgOnN0 dWItY29sdW1uczogMAo+PiAgICAgICA6d2lkdGhzOiAgICAgICAxIDEgMgo+PiAgIAo+PiAtICAg ICogLSBfX3U4Cj4+IC0gICAgICAtIGBgbHVtYV9sb2cyX3dlaWdodF9kZW5vbWBgCj4+IC0gICAg ICAtCj4+IC0gICAgKiAtIF9fczgKPj4gLSAgICAgIC0gYGBkZWx0YV9jaHJvbWFfbG9nMl93ZWln aHRfZGVub21gYAo+PiAtICAgICAgLQo+PiAgICAgICAqIC0gX19zOAo+PiAgICAgICAgIC0gYGBk ZWx0YV9sdW1hX3dlaWdodF9sMFtWNEwyX0hFVkNfRFBCX0VOVFJJRVNfTlVNX01BWF1gYAo+PiAt ICAgICAgLQo+PiArICAgICAgLSBUaGUgZGlmZmVyZW5jZSBvZiB0aGUgd2VpZ2h0aW5nIGZhY3Rv ciBhcHBsaWVkIHRvIHRoZSBsdW1hCj4+ICsgICAgICAgIHByZWRpY3Rpb24gdmFsdWUgZm9yIGxp c3QgMC4KPj4gICAgICAgKiAtIF9fczgKPj4gICAgICAgICAtIGBgbHVtYV9vZmZzZXRfbDBbVjRM Ml9IRVZDX0RQQl9FTlRSSUVTX05VTV9NQVhdYGAKPj4gLSAgICAgIC0KPj4gKyAgICAgIC0gVGhl IGFkZGl0aXZlIG9mZnNldCBhcHBsaWVkIHRvIHRoZSBsdW1hIHByZWRpY3Rpb24gdmFsdWUgZm9y IGxpc3QgMC4KPj4gICAgICAgKiAtIF9fczgKPj4gICAgICAgICAtIGBgZGVsdGFfY2hyb21hX3dl aWdodF9sMFtWNEwyX0hFVkNfRFBCX0VOVFJJRVNfTlVNX01BWF1bMl1gYAo+PiAtICAgICAgLQo+ PiArICAgICAgLSBUaGUgZGlmZmVyZW5jZSBvZiB0aGUgd2VpZ2h0aW5nIGZhY3RvciBhcHBsaWVk IHRvIHRoZSBjaHJvbWEKPj4gKyAgICAgICAgcHJlZGljdGlvbiB2YWx1ZSBmb3IgbGlzdCAwLgo+ PiAgICAgICAqIC0gX19zOAo+PiAgICAgICAgIC0gYGBjaHJvbWFfb2Zmc2V0X2wwW1Y0TDJfSEVW Q19EUEJfRU5UUklFU19OVU1fTUFYXVsyXWBgCj4+IC0gICAgICAtCj4+ICsgICAgICAtIFRoZSBk aWZmZXJlbmNlIG9mIHRoZSBhZGRpdGl2ZSBvZmZzZXQgYXBwbGllZCB0byB0aGUgY2hyb21hCj4+ ICsgICAgICAgIHByZWRpY3Rpb24gdmFsdWVzIGZvciBsaXN0IDAuCj4+ICAgICAgICogLSBfX3M4 Cj4+ICAgICAgICAgLSBgYGRlbHRhX2x1bWFfd2VpZ2h0X2wxW1Y0TDJfSEVWQ19EUEJfRU5UUklF U19OVU1fTUFYXWBgCj4+IC0gICAgICAtCj4+ICsgICAgICAtIFRoZSBkaWZmZXJlbmNlIG9mIHRo ZSB3ZWlnaHRpbmcgZmFjdG9yIGFwcGxpZWQgdG8gdGhlIGx1bWEKPj4gKyAgICAgICAgcHJlZGlj dGlvbiB2YWx1ZSBmb3IgbGlzdCAxLgo+PiAgICAgICAqIC0gX19zOAo+PiAgICAgICAgIC0gYGBs dW1hX29mZnNldF9sMVtWNEwyX0hFVkNfRFBCX0VOVFJJRVNfTlVNX01BWF1gYAo+PiAtICAgICAg LQo+PiArICAgICAgLSBUaGUgYWRkaXRpdmUgb2Zmc2V0IGFwcGxpZWQgdG8gdGhlIGx1bWEgcHJl ZGljdGlvbiB2YWx1ZSBmb3IgbGlzdCAxLgo+PiAgICAgICAqIC0gX19zOAo+PiAgICAgICAgIC0g YGBkZWx0YV9jaHJvbWFfd2VpZ2h0X2wxW1Y0TDJfSEVWQ19EUEJfRU5UUklFU19OVU1fTUFYXVsy XWBgCj4+IC0gICAgICAtCj4+ICsgICAgICAtIFRoZSBkaWZmZXJlbmNlIG9mIHRoZSB3ZWlnaHRp bmcgZmFjdG9yIGFwcGxpZWQgdG8gdGhlIGNocm9tYQo+PiArICAgICAgICBwcmVkaWN0aW9uIHZh bHVlIGZvciBsaXN0IDEuCj4+ICAgICAgICogLSBfX3M4Cj4+ICAgICAgICAgLSBgYGNocm9tYV9v ZmZzZXRfbDFbVjRMMl9IRVZDX0RQQl9FTlRSSUVTX05VTV9NQVhdWzJdYGAKPj4gLSAgICAgIC0K Pj4gKyAgICAgIC0gVGhlIGRpZmZlcmVuY2Ugb2YgdGhlIGFkZGl0aXZlIG9mZnNldCBhcHBsaWVk IHRvIHRoZSBjaHJvbWEKPj4gKyAgICAgICAgcHJlZGljdGlvbiB2YWx1ZXMgZm9yIGxpc3QgMS4K Pj4gKyAgICAqIC0gX191OAo+PiArICAgICAgLSBgYGx1bWFfbG9nMl93ZWlnaHRfZGVub21gYAo+ PiArICAgICAgLSBUaGUgYmFzZSAyIGxvZ2FyaXRobSBvZiB0aGUgZGVub21pbmF0b3IgZm9yIGFs bCBsdW1hIHdlaWdodGluZwo+PiArICAgICAgICBmYWN0b3JzLgo+PiArICAgICogLSBfX3M4Cj4+ ICsgICAgICAtIGBgZGVsdGFfY2hyb21hX2xvZzJfd2VpZ2h0X2Rlbm9tYGAKPj4gKyAgICAgIC0g VGhlIGRpZmZlcmVuY2Ugb2YgdGhlIGJhc2UgMiBsb2dhcml0aG0gb2YgdGhlIGRlbm9taW5hdG9y IGZvcgo+PiArICAgICAgICBhbGwgY2hyb21hIHdlaWdodGluZyBmYWN0b3JzLgo+PiAgICAgICAq IC0gX191OAo+PiAgICAgICAgIC0gYGBwYWRkaW5nWzZdYGAKPj4gICAgICAgICAtIEFwcGxpY2F0 aW9ucyBhbmQgZHJpdmVycyBtdXN0IHNldCB0aGlzIHRvIHplcm8uCj4+IGRpZmYgLS1naXQgYS9p bmNsdWRlL21lZGlhL2hldmMtY3RybHMuaCBiL2luY2x1ZGUvbWVkaWEvaGV2Yy1jdHJscy5oCj4+ IGluZGV4IGYzNjk1YWI0NDM4OS4uMGRiZDVkNjgxYzI4IDEwMDY0NAo+PiAtLS0gYS9pbmNsdWRl L21lZGlhL2hldmMtY3RybHMuaAo+PiArKysgYi9pbmNsdWRlL21lZGlhL2hldmMtY3RybHMuaAo+ PiBAQCAtNTUsOSArNTUsNjggQEAgZW51bSB2NGwyX3N0YXRlbGVzc19oZXZjX3N0YXJ0X2NvZGUg ewo+PiAgICNkZWZpbmUgVjRMMl9IRVZDX1NQU19GTEFHX1NQU19URU1QT1JBTF9NVlBfRU5BQkxF RAkJKDFVTEwgPDwgNykKPj4gICAjZGVmaW5lIFY0TDJfSEVWQ19TUFNfRkxBR19TVFJPTkdfSU5U UkFfU01PT1RISU5HX0VOQUJMRUQJKDFVTEwgPDwgOCkKPj4gICAKPj4gLS8qIFRoZSBjb250cm9s cyBhcmUgbm90IHN0YWJsZSBhdCB0aGUgbW9tZW50IGFuZCB3aWxsIGxpa2VseSBiZSByZXdvcmtl ZC4gKi8KPj4gKy8qKgo+PiArICogc3RydWN0IHY0bDJfY3RybF9oZXZjX3NwcyAtIElUVS1UIFJl Yy4gSC4yNjU6IFNlcXVlbmNlIHBhcmFtZXRlciBzZXQKPj4gKyAqCj4+ICsgKiBAdmlkZW9fcGFy YW1ldGVyX3NldF9pZDogc3BlY2lmaWVzIHRoZSB2YWx1ZSBvZiB0aGUKPj4gKyAqCQkJICAgIHZw c192aWRlb19wYXJhbWV0ZXJfc2V0X2lkIG9mIHRoZSBhY3RpdmUgVlBTCj4+ICsgKiBAc2VxX3Bh cmFtZXRlcl9zZXRfaWQ6IHByb3ZpZGVzIGFuIGlkZW50aWZpZXIgZm9yIHRoZSBTUFMgZm9yCj4+ ICsgKgkJCSAgcmVmZXJlbmNlIGJ5IG90aGVyIHN5bnRheCBlbGVtZW50cwo+PiArICogQHBpY193 aWR0aF9pbl9sdW1hX3NhbXBsZXM6IHNwZWNpZmllcyB0aGUgd2lkdGggb2YgZWFjaCBkZWNvZGVk IHBpY3R1cmUKPj4gKyAqCQkJICAgICAgIGluIHVuaXRzIG9mIGx1bWEgc2FtcGxlcwo+PiArICog QHBpY19oZWlnaHRfaW5fbHVtYV9zYW1wbGVzOiBzcGVjaWZpZXMgdGhlIGhlaWdodCBvZiBlYWNo IGRlY29kZWQgcGljdHVyZQo+PiArICoJCQkJaW4gdW5pdHMgb2YgbHVtYSBzYW1wbGVzCj4+ICsg KiBAYml0X2RlcHRoX2x1bWFfbWludXM4OiBzcGVjaWZpZXMgdGhlIGJpdCBkZXB0aCBvZiB0aGUg c2FtcGxlcyBvZiB0aGUKPj4gKyAqCQkJICAgbHVtYSBhcnJheQo+PiArICogQGJpdF9kZXB0aF9j aHJvbWFfbWludXM4OiBzcGVjaWZpZXMgdGhlIGJpdCBkZXB0aCBvZiB0aGUgc2FtcGxlcyBvZiB0 aGUKPj4gKyAqCQkJICAgICBjaHJvbWEgYXJyYXlzCj4+ICsgKiBAbG9nMl9tYXhfcGljX29yZGVy X2NudF9sc2JfbWludXM0OiBzcGVjaWZpZXMgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZQo+PiAr ICoJCQkJICAgICAgIE1heFBpY09yZGVyQ250THNiCj4+ICsgKiBAc3BzX21heF9kZWNfcGljX2J1 ZmZlcmluZ19taW51czE6IHBsdXMgMSBzcGVjaWZpZXMgdGhlIG1heGltdW0gcmVxdWlyZWQKPj4g KyAqCQkJCSAgICAgIHNpemUgb2YgdGhlIGRlY29kZWQgcGljdHVyZSBidWZmZXIgZm9yCj4+ICsg KgkJCQkgICAgICB0aGUgQ1ZTCj4+ICsgKiBAc3BzX21heF9udW1fcmVvcmRlcl9waWNzOiBpbmRp Y2F0ZXMgdGhlIG1heGltdW0gYWxsb3dlZCBudW1iZXIgb2YgcGljdHVyZXMKPj4gKyAqIEBzcHNf bWF4X2xhdGVuY3lfaW5jcmVhc2VfcGx1czE6IG5vdCBlcXVhbCB0byAwIGlzIHVzZWQgdG8gY29t cHV0ZSB0aGUKPj4gKyAqCQkJCSAgICB2YWx1ZSBvZiBTcHNNYXhMYXRlbmN5UGljdHVyZXNbaV0K PiBXaGF0IGlzICdpJyBpbiB0aGlzIGNvbnRleHQ/Cj4KPj4gKyAqIEBsb2cyX21pbl9sdW1hX2Nv ZGluZ19ibG9ja19zaXplX21pbnVzMzogcGx1cyAzIHNwZWNpZmllcyB0aGUgbWluaW11bQo+PiAr ICoJCQkJCSAgICBsdW1hIGNvZGluZyBibG9jayBzaXplCj4+ICsgKiBAbG9nMl9kaWZmX21heF9t aW5fbHVtYV9jb2RpbmdfYmxvY2tfc2l6ZTogc3BlY2lmaWVzIHRoZSBkaWZmZXJlbmNlIGJldHdl ZW4KPj4gKyAqCQkJCQkgICAgICB0aGUgbWF4aW11bSBhbmQgbWluaW11bSBsdW1hCj4+ICsgKgkJ CQkJICAgICAgY29kaW5nIGJsb2NrIHNpemUKPj4gKyAqIEBsb2cyX21pbl9sdW1hX3RyYW5zZm9y bV9ibG9ja19zaXplX21pbnVzMjogcGx1cyAyIHNwZWNpZmllcyB0aGUgbWluaW11bSBsdW1hCj4+ ICsgKgkJCQkJICAgICAgIHRyYW5zZm9ybSBibG9jayBzaXplCj4+ICsgKiBAbG9nMl9kaWZmX21h eF9taW5fbHVtYV90cmFuc2Zvcm1fYmxvY2tfc2l6ZTogc3BlY2lmaWVzIHRoZSBkaWZmZXJlbmNl IGJldHdlZW4KPj4gKyAqCQkJCQkJIHRoZSBtYXhpbXVtIGFuZCBtaW5pbXVtIGx1bWEKPj4gKyAq CQkJCQkJIHRyYW5zZm9ybSBibG9jayBzaXplCj4+ICsgKiBAbWF4X3RyYW5zZm9ybV9oaWVyYXJj aHlfZGVwdGhfaW50ZXI6IHNwZWNpZmllcyB0aGUgbWF4aW11bSBoaWVyYXJjaHkKPj4gKyAqCQkJ CQkgZGVwdGggZm9yIHRyYW5zZm9ybSB1bml0cyBvZgo+PiArICoJCQkJCSBjb2RpbmcgdW5pdHMg Y29kZWQgaW4gaW50ZXIKPj4gKyAqCQkJCQkgcHJlZGljdGlvbiBtb2RlCj4+ICsgKiBAbWF4X3Ry YW5zZm9ybV9oaWVyYXJjaHlfZGVwdGhfaW50cmE6IHNwZWNpZmllcyB0aGUgbWF4aW11bSBoaWVy YXJjaHkKPj4gKyAqCQkJCQkgZGVwdGggZm9yIHRyYW5zZm9ybSB1bml0cyBvZgo+PiArICoJCQkJ CSBjb2RpbmcgdW5pdHMgY29kZWQgaW4gaW50cmEKPj4gKyAqCQkJCQkgcHJlZGljdGlvbiBtb2Rl Cj4+ICsgKiBAcGNtX3NhbXBsZV9iaXRfZGVwdGhfbHVtYV9taW51czE6IHNwZWNpZmllcyB0aGUg bnVtYmVyIG9mIGJpdHMgdXNlZCB0bwo+PiArICoJCQkJICAgICAgcmVwcmVzZW50IGVhY2ggb2Yg UENNIHNhbXBsZSB2YWx1ZXMgb2YgdGhlCj4+ICsgKgkJCQkgICAgICBsdW1hIGNvbXBvbmVudAo+ PiArICogQHBjbV9zYW1wbGVfYml0X2RlcHRoX2Nocm9tYV9taW51czE6IHNwZWNpZmllcyB0aGUg bnVtYmVyIG9mIGJpdHMgdXNlZCB0bwo+PiArICoJCQkJCXJlcHJlc2VudCBlYWNoIG9mIFBDTSBz YW1wbGUgdmFsdWVzIG9mCj4+ICsgKgkJCQkJdGhlIGNocm9tYSBjb21wb25lbnRzCj4+ICsgKiBA bG9nMl9taW5fcGNtX2x1bWFfY29kaW5nX2Jsb2NrX3NpemVfbWludXMzOiBwbHVzIDMgc3BlY2lm aWVzIHRoZSBtaW5pbXVtIHNpemUKPj4gKyAqCQkJCQkJb2YgY29kaW5nIGJsb2Nrcwo+PiArICog QGxvZzJfZGlmZl9tYXhfbWluX3BjbV9sdW1hX2NvZGluZ19ibG9ja19zaXplOiBzcGVjaWZpZXMg dGhlIGRpZmZlcmVuY2UgYmV0d2Vlbgo+PiArICoJCQkJCQkgIHRoZSBtYXhpbXVtIGFuZCBtaW5p bXVtIHNpemUgb2YKPj4gKyAqCQkJCQkJICBjb2RpbmcgYmxvY2tzCj4+ICsgKiBAbnVtX3Nob3J0 X3Rlcm1fcmVmX3BpY19zZXRzOiBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBzdF9yZWZfcGljX3Nl dCgpCj4+ICsgKgkJCQkgc3ludGF4IHN0cnVjdHVyZXMgaW5jbHVkZWQgaW4gdGhlIFNQUwo+PiAr ICogQG51bV9sb25nX3Rlcm1fcmVmX3BpY3Nfc3BzOglzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBj YW5kaWRhdGUgbG9uZy10ZXJtCj4+ICsgKgkJCQlyZWZlcmVuY2UgcGljdHVyZXMgdGhhdCBhcmUg c3BlY2lmaWVkIGluIHRoZSBTUFMKPj4gKyAqIEBjaHJvbWFfZm9ybWF0X2lkYzogc3BlY2lmaWVz IHRoZSBjaHJvbWEgc2FtcGxpbmcKPj4gKyAqIEBzcHNfbWF4X3N1Yl9sYXllcnNfbWludXMxOiBw bHVzIDEgc3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB0ZW1wb3JhbAo+PiArICoJCQkg ICAgICAgc3ViLWxheWVycwo+PiArICogQGZsYWdzOiBzZWUgVjRMMl9IRVZDX1NQU19GTEFHX3t9 Cj4+ICsgKi8KPj4gICBzdHJ1Y3QgdjRsMl9jdHJsX2hldmNfc3BzIHsKPj4gLQkvKiBJU08vSUVD IDIzMDA4LTIsIElUVS1UIFJlYy4gSC4yNjU6IFNlcXVlbmNlIHBhcmFtZXRlciBzZXQgKi8KPj4g ICAJX191OAl2aWRlb19wYXJhbWV0ZXJfc2V0X2lkOwo+PiAgIAlfX3U4CXNlcV9wYXJhbWV0ZXJf c2V0X2lkOwo+PiAgIAlfX3UxNglwaWNfd2lkdGhfaW5fbHVtYV9zYW1wbGVzOwo+PiBAQCAtMTA4 LDggKzE2Nyw0MyBAQCBzdHJ1Y3QgdjRsMl9jdHJsX2hldmNfc3BzIHsKPj4gICAjZGVmaW5lIFY0 TDJfSEVWQ19QUFNfRkxBR19ERUJMT0NLSU5HX0ZJTFRFUl9DT05UUk9MX1BSRVNFTlQJKDFVTEwg PDwgMTkpCj4+ICAgI2RlZmluZSBWNEwyX0hFVkNfUFBTX0ZMQUdfVU5JRk9STV9TUEFDSU5HCQkJ KDFVTEwgPDwgMjApCj4+ICAgCj4+ICsvKioKPj4gKyAqIHN0cnVjdCB2NGwyX2N0cmxfaGV2Y19w cHMgLSBJVFUtVCBSZWMuIEguMjY1OiBQaWN0dXJlIHBhcmFtZXRlciBzZXQKPj4gKyAqCj4+ICsg KiBAcGljX3BhcmFtZXRlcl9zZXRfaWQ6IGlkZW50aWZpZXMgdGhlIFBQUyBmb3IgcmVmZXJlbmNl IGJ5IG90aGVyCj4+ICsgKgkJCSAgc3ludGF4IGVsZW1lbnRzCj4+ICsgKiBAbnVtX2V4dHJhX3Ns aWNlX2hlYWRlcl9iaXRzOiBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBleHRyYSBzbGljZSBoZWFk ZXIKPj4gKyAqCQkJCSBiaXRzIHRoYXQgYXJlIHByZXNlbnQgaW4gdGhlIHNsaWNlIGhlYWRlciBS QlNQCj4+ICsgKgkJCQkgZm9yIGNvZGVkIHBpY3R1cmVzIHJlZmVycmluZyB0byB0aGUgUFBTLgo+ PiArICogQG51bV9yZWZfaWR4X2wwX2RlZmF1bHRfYWN0aXZlX21pbnVzMTogc3BlY2lmaWVzIHRo ZSBpbmZlcnJlZCB2YWx1ZSBvZgo+PiArICoJCQkJCSAgbnVtX3JlZl9pZHhfbDBfYWN0aXZlX21p bnVzMQo+PiArICogQG51bV9yZWZfaWR4X2wxX2RlZmF1bHRfYWN0aXZlX21pbnVzMTogc3BlY2lm aWVzIHRoZSBpbmZlcnJlZCB2YWx1ZSBvZgo+PiArICoJCQkJCSAgbnVtX3JlZl9pZHhfbDFfYWN0 aXZlX21pbnVzMQo+PiArICogQGluaXRfcXBfbWludXMyNjogcGx1cyAyNiBzcGVjaWZpZXMgdGhl IGluaXRpYWwgdmFsdWUgb2YgU2xpY2VRcCBZIGZvcgo+PiArICoJCSAgICAgZWFjaCBzbGljZSBy ZWZlcnJpbmcgdG8gdGhlIFBQUwo+PiArICogQGRpZmZfY3VfcXBfZGVsdGFfZGVwdGg6IHNwZWNp ZmllcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBsdW1hIGNvZGluZwo+PiArICoJCQkgICAg dHJlZSBibG9jayBzaXplIGFuZCB0aGUgbWluaW11bSBsdW1hIGNvZGluZyBibG9jawo+PiArICoJ CQkgICAgc2l6ZSBvZiBjb2RpbmcgdW5pdHMgdGhhdCBjb252ZXkgY3VfcXBfZGVsdGFfYWJzCj4+ ICsgKgkJCSAgICBhbmQgY3VfcXBfZGVsdGFfc2lnbl9mbGFnCj4+ICsgKiBAcHBzX2NiX3FwX29m ZnNldDogc3BlY2lmeSB0aGUgb2Zmc2V0cyB0byB0aGUgbHVtYSBxdWFudGl6YXRpb24gcGFyYW1l dGVyIENiCj4+ICsgKiBAcHBzX2NyX3FwX29mZnNldDogc3BlY2lmeSB0aGUgb2Zmc2V0cyB0byB0 aGUgbHVtYSBxdWFudGl6YXRpb24gcGFyYW1ldGVyIENyCj4+ICsgKiBAbnVtX3RpbGVfY29sdW1u c19taW51czE6IHBsdXMgMSBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiB0aWxlIGNvbHVtbnMKPj4g KyAqCQkJICAgICBwYXJ0aXRpb25pbmcgdGhlIHBpY3R1cmUKPj4gKyAqIEBudW1fdGlsZV9yb3dz X21pbnVzMTogcGx1cyAxIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHRpbGUgcm93cyBwYXJ0aXRp b25pbmcKPj4gKyAqCQkJICB0aGUgcGljdHVyZQo+PiArICogQGNvbHVtbl93aWR0aF9taW51czE6 IHBsdXMgMSBzcGVjaWZpZXMgdGhlIHdpZHRoIG9mIHRoZSBpLXRoIHRpbGUgY29sdW1uIGluCj4g InRoZSBpLXRoIiAtPiBlYWNoCj4KPiBJIHRoaW5rIHRoYXQncyBlYXNpZXIgdG8gdW5kZXJzdGFu ZC4KPgo+PiArICoJCQkgdW5pdHMgb2YgY29kaW5nIHRyZWUgYmxvY2tzCj4+ICsgKiBAcm93X2hl aWdodF9taW51czE6IHBsdXMgMSBzcGVjaWZpZXMgdGhlIGhlaWdodCBvZiB0aGUgaS10aCB0aWxl IHJvdyBpbgo+IERpdHRvLgo+Cj4+ICsgKgkJICAgICAgIHVuaXRzIG9mIGNvZGluZyB0cmVlIGJs b2Nrcwo+PiArICogQHBwc19iZXRhX29mZnNldF9kaXYyOiBzcGVjaWZ5IHRoZSBkZWZhdWx0IGRl YmxvY2tpbmcgcGFyYW1ldGVyIG9mZnNldHMgZm9yCj4+ICsgKgkJCSAgYmV0YSBkaXZpZGVkIGJ5 IDIKPj4gKyAqIEBwcHNfdGNfb2Zmc2V0X2RpdjI6IHNwZWNpZnkgdGhlIGRlZmF1bHQgZGVibG9j a2luZyBwYXJhbWV0ZXIgb2Zmc2V0cyBmb3IgdEMKPj4gKyAqCQkJZGl2aWRlZCBieSAyCj4+ICsg KiBAbG9nMl9wYXJhbGxlbF9tZXJnZV9sZXZlbF9taW51czI6IHBsdXMgMiBzcGVjaWZpZXMgdGhl IHZhbHVlIG9mIHRoZSB2YXJpYWJsZQo+PiArICoJCQkJICAgICAgTG9nMlBhck1yZ0xldmVsCj4+ ICsgKiBAZmxhZ3M6IHNlZSBWNEwyX0hFVkNfUFBTX0ZMQUdfe30KPj4gKyAqLwo+PiAgIHN0cnVj dCB2NGwyX2N0cmxfaGV2Y19wcHMgewo+PiAtCS8qIElTTy9JRUMgMjMwMDgtMiwgSVRVLVQgUmVj LiBILjI2NTogUGljdHVyZSBwYXJhbWV0ZXIgc2V0ICovCj4+ICAgCV9fdTgJcGljX3BhcmFtZXRl cl9zZXRfaWQ7Cj4+ICAgCV9fdTgJbnVtX2V4dHJhX3NsaWNlX2hlYWRlcl9iaXRzOwo+PiAgIAlf X3U4CW51bV9yZWZfaWR4X2wwX2RlZmF1bHRfYWN0aXZlX21pbnVzMTsKPj4gQEAgLTE0OCw2ICsy NDIsMTQgQEAgc3RydWN0IHY0bDJfY3RybF9oZXZjX3BwcyB7Cj4+ICAgCj4+ICAgI2RlZmluZSBW NEwyX0hFVkNfRFBCX0VOVFJJRVNfTlVNX01BWAkJMTYKPj4gICAKPj4gKy8qKgo+PiArICogc3Ry dWN0IHY0bDJfaGV2Y19kcGJfZW50cnkgLSBIRVZDIGRlY29kZWQgcGljdHVyZSBidWZmZXIgZW50 cnkKPj4gKyAqCj4+ICsgKiBAdGltZXN0YW1wOiB0aW1lc3RhbXAgb2YgdGhlIFY0TDIgY2FwdHVy ZSBidWZmZXIgdG8gdXNlIGFzIHJlZmVyZW5jZS4KPj4gKyAqIEBmbGFnczogbG9uZyB0ZXJtIGZs YWcgZm9yIHRoZSByZWZlcmVuY2UgZnJhbWUKPj4gKyAqIEBmaWVsZF9waWM6IHdoZXRoZXIgdGhl IHJlZmVyZW5jZSBpcyBhIGZpZWxkIHBpY3R1cmUgb3IgYSBmcmFtZS4KPj4gKyAqIEBwaWNfb3Jk ZXJfY250X3ZhbDogdGhlIHBpY3R1cmUgb3JkZXIgY291bnQgb2YgdGhlIHJlZmVyZW5jZS4KPj4g KyAqLwo+PiAgIHN0cnVjdCB2NGwyX2hldmNfZHBiX2VudHJ5IHsKPj4gICAJX191NjQJdGltZXN0 YW1wOwo+PiAgIAlfX3U4CWZsYWdzOwo+PiBAQCAtMTU2LDYgKzI1OCwzMSBAQCBzdHJ1Y3QgdjRs Ml9oZXZjX2RwYl9lbnRyeSB7Cj4+ICAgCV9fdTgJcGFkZGluZ1syXTsKPj4gICB9Owo+PiAgIAo+ PiArLyoqCj4+ICsgKiBzdHJ1Y3QgdjRsMl9oZXZjX3ByZWRfd2VpZ2h0X3RhYmxlIC0gSEVWQyB3 ZWlnaHRlZCBwcmVkaWN0aW9uIHBhcmFtZXRlcnMKPj4gKyAqCj4+ICsgKiBAZGVsdGFfbHVtYV93 ZWlnaHRfbDA6IHRoZSBkaWZmZXJlbmNlIG9mIHRoZSB3ZWlnaHRpbmcgZmFjdG9yIGFwcGxpZWQK Pj4gKyAqCQkJICB0byB0aGUgbHVtYSBwcmVkaWN0aW9uIHZhbHVlIGZvciBsaXN0IDAKPj4gKyAq IEBsdW1hX29mZnNldF9sMDogdGhlIGFkZGl0aXZlIG9mZnNldCBhcHBsaWVkIHRvIHRoZSBsdW1h IHByZWRpY3Rpb24gdmFsdWUKPj4gKyAqCQkgICAgZm9yIGxpc3QgMAo+PiArICogQGRlbHRhX2No cm9tYV93ZWlnaHRfbDA6IHRoZSBkaWZmZXJlbmNlIG9mIHRoZSB3ZWlnaHRpbmcgZmFjdG9yIGFw cGxpZWQKPj4gKyAqCQkJICAgIHRvIHRoZSBjaHJvbWEgcHJlZGljdGlvbiB2YWx1ZXMgZm9yIGxp c3QgMAo+PiArICogQGNocm9tYV9vZmZzZXRfbDA6IHRoZSBkaWZmZXJlbmNlIG9mIHRoZSBhZGRp dGl2ZSBvZmZzZXQgYXBwbGllZCB0bwo+PiArICoJCSAgICAgIHRoZSBjaHJvbWEgcHJlZGljdGlv biB2YWx1ZXMgZm9yIGxpc3QgMAo+PiArICogQGRlbHRhX2x1bWFfd2VpZ2h0X2wxOiB0aGUgZGlm ZmVyZW5jZSBvZiB0aGUgd2VpZ2h0aW5nIGZhY3RvciBhcHBsaWVkCj4+ICsgKgkJCSAgdG8gdGhl IGx1bWEgcHJlZGljdGlvbiB2YWx1ZSBmb3IgbGlzdCAxCj4+ICsgKiBAbHVtYV9vZmZzZXRfbDE6 IHRoZSBhZGRpdGl2ZSBvZmZzZXQgYXBwbGllZCB0byB0aGUgbHVtYSBwcmVkaWN0aW9uIHZhbHVl Cj4+ICsgKgkJICAgIGZvciBsaXN0IDEKPj4gKyAqIEBkZWx0YV9jaHJvbWFfd2VpZ2h0X2wxOiB0 aGUgZGlmZmVyZW5jZSBvZiB0aGUgd2VpZ2h0aW5nIGZhY3RvciBhcHBsaWVkCj4+ICsgKgkJCSAg ICB0byB0aGUgY2hyb21hIHByZWRpY3Rpb24gdmFsdWVzIGZvciBsaXN0IDEKPj4gKyAqIEBjaHJv bWFfb2Zmc2V0X2wxOiB0aGUgZGlmZmVyZW5jZSBvZiB0aGUgYWRkaXRpdmUgb2Zmc2V0IGFwcGxp ZWQgdG8KPj4gKyAqCQkgICAgICB0aGUgY2hyb21hIHByZWRpY3Rpb24gdmFsdWVzIGZvciBsaXN0 IDEKPj4gKyAqIEBsdW1hX2xvZzJfd2VpZ2h0X2Rlbm9tOiB0aGUgYmFzZSAyIGxvZ2FyaXRobSBv ZiB0aGUgZGVub21pbmF0b3IgZm9yCj4+ICsgKgkJCSAgICBhbGwgbHVtYSB3ZWlnaHRpbmcgZmFj dG9ycwo+PiArICogQGRlbHRhX2Nocm9tYV9sb2cyX3dlaWdodF9kZW5vbTogdGhlIGRpZmZlcmVu Y2Ugb2YgdGhlIGJhc2UgMiBsb2dhcml0aG0KPj4gKyAqCQkJCSAgICBvZiB0aGUgZGVub21pbmF0 b3IgZm9yIGFsbCBjaHJvbWEKPj4gKyAqCQkJCSAgICB3ZWlnaHRpbmcgZmFjdG9ycwo+PiArICov Cj4+ICAgc3RydWN0IHY0bDJfaGV2Y19wcmVkX3dlaWdodF90YWJsZSB7Cj4+ICAgCV9fczgJZGVs dGFfbHVtYV93ZWlnaHRfbDBbVjRMMl9IRVZDX0RQQl9FTlRSSUVTX05VTV9NQVhdOwo+PiAgIAlf X3M4CWx1bWFfb2Zmc2V0X2wwW1Y0TDJfSEVWQ19EUEJfRU5UUklFU19OVU1fTUFYXTsKPj4gQEAg LTE4NCw2ICszMTEsNTAgQEAgc3RydWN0IHY0bDJfaGV2Y19wcmVkX3dlaWdodF90YWJsZSB7Cj4+ ICAgI2RlZmluZSBWNEwyX0hFVkNfU0xJQ0VfUEFSQU1TX0ZMQUdfU0xJQ0VfTE9PUF9GSUxURVJf QUNST1NTX1NMSUNFU19FTkFCTEVEICgxVUxMIDw8IDgpCj4+ICAgI2RlZmluZSBWNEwyX0hFVkNf U0xJQ0VfUEFSQU1TX0ZMQUdfREVQRU5ERU5UX1NMSUNFX1NFR01FTlQJKDFVTEwgPDwgOSkKPj4g ICAKPj4gKy8qKgo+PiArICogdjRsMl9jdHJsX2hldmNfc2xpY2VfcGFyYW1zIC0gSEVWQyBzbGlj ZSBwYXJhbWV0ZXJzCj4+ICsgKgo+PiArICogQGJpdF9zaXplOiBzaXplIChpbiBiaXRzKSBvZiB0 aGUgY3VycmVudCBzbGljZSBkYXRhCj4+ICsgKiBAZGF0YV9iaXRfb2Zmc2V0OiBvZmZzZXQgKGlu IGJpdHMpIHRvIHRoZSB2aWRlbyBkYXRhIGluIHRoZSBjdXJyZW50IHNsaWNlIGRhdGEKPj4gKyAq IEBuYWxfdW5pdF90eXBlOiBzcGVjaWZpZXMgdGhlIGNvZGluZyB0eXBlIG9mIHRoZSBzbGljZSAo QiwgUCBvciBJKQo+PiArICogQG51aF90ZW1wb3JhbF9pZF9wbHVzMTogbWludXMgMSBzcGVjaWZp ZXMgYSB0ZW1wb3JhbCBpZGVudGlmaWVyIGZvciB0aGUgTkFMIHVuaXQKPj4gKyAqIEBzbGljZV90 eXBlOiBzZWUgVjRMMl9IRVZDX1NMSUNFX1RZUEVfe30KPj4gKyAqIEBjb2xvdXJfcGxhbmVfaWQ6 IHNwZWNpZmllcyB0aGUgY29sb3VyIHBsYW5lIGFzc29jaWF0ZWQgd2l0aCB0aGUgY3VycmVudCBz bGljZQo+PiArICogQHNsaWNlX3BpY19vcmRlcl9jbnQ6IHNwZWNpZmllcyB0aGUgcGljdHVyZSBv cmRlciBjb3VudAo+PiArICogQG51bV9yZWZfaWR4X2wwX2FjdGl2ZV9taW51czE6IHNwZWNpZmll cyB0aGUgbWF4aW11bSByZWZlcmVuY2UgaW5kZXggZm9yCj4+ICsgKgkJCQkgIHJlZmVyZW5jZSBw aWN0dXJlIGxpc3QgMCB0aGF0IG1heSBiZSB1c2VkIHRvIGRlY29kZQo+PiArICoJCQkJICB0aGUg c2xpY2UKPj4gKyAqIEBudW1fcmVmX2lkeF9sMV9hY3RpdmVfbWludXMxOiBzcGVjaWZpZXMgdGhl IG1heGltdW0gcmVmZXJlbmNlIGluZGV4IGZvcgo+PiArICoJCQkJICByZWZlcmVuY2UgcGljdHVy ZSBsaXN0IDEgdGhhdCBtYXkgYmUgdXNlZCB0byBkZWNvZGUKPj4gKyAqCQkJCSAgdGhlIHNsaWNl Cj4+ICsgKiBAY29sbG9jYXRlZF9yZWZfaWR4OiBzcGVjaWZpZXMgdGhlIHJlZmVyZW5jZSBpbmRl eCBvZiB0aGUgY29sbG9jYXRlZCBwaWN0dXJlIHVzZWQKPj4gKyAqCQkJZm9yIHRlbXBvcmFsIG1v dGlvbiB2ZWN0b3IgcHJlZGljdGlvbgo+PiArICogQGZpdmVfbWludXNfbWF4X251bV9tZXJnZV9j YW5kOiBzcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIG1lcmdpbmcKPj4gKyAqCQkJCSAg IG1vdGlvbiB2ZWN0b3IgcHJlZGljdGlvbiBjYW5kaWRhdGVzIHN1cHBvcnRlZCBpbgo+PiArICoJ CQkJICAgdGhlIHNsaWNlIHN1YnRyYWN0ZWQgZnJvbSA1Cj4+ICsgKiBAc2xpY2VfcXBfZGVsdGE6 IHNwZWNpZmllcyB0aGUgaW5pdGlhbCB2YWx1ZSBvZiBRcFkgdG8gYmUgdXNlZCBmb3IgdGhlIGNv ZGluZwo+PiArICoJCSAgICBibG9ja3MgaW4gdGhlIHNsaWNlCj4+ICsgKiBAc2xpY2VfY2JfcXBf b2Zmc2V0OiBzcGVjaWZpZXMgYSBkaWZmZXJlbmNlIHRvIGJlIGFkZGVkIHRvIHRoZSB2YWx1ZSBv ZiBwcHNfY2JfcXBfb2Zmc2V0Cj4+ICsgKiBAc2xpY2VfY3JfcXBfb2Zmc2V0OiBzcGVjaWZpZXMg YSBkaWZmZXJlbmNlIHRvIGJlIGFkZGVkIHRvIHRoZSB2YWx1ZSBvZiBwcHNfY3JfcXBfb2Zmc2V0 Cj4+ICsgKiBAc2xpY2VfYWN0X3lfcXBfb2Zmc2V0OiBzY3JlZW4gY29udGVudCBleHRlbnNpb24g cGFyYW1ldGVycwo+PiArICogQHNsaWNlX2FjdF9jYl9xcF9vZmZzZXQ6IHNjcmVlbiBjb250ZW50 IGV4dGVuc2lvbiBwYXJhbWV0ZXJzCj4+ICsgKiBAc2xpY2VfYWN0X2NyX3FwX29mZnNldDogc2Ny ZWVuIGNvbnRlbnQgZXh0ZW5zaW9uIHBhcmFtZXRlcnMKPj4gKyAqIEBzbGljZV9iZXRhX29mZnNl dF9kaXYyOiBzcGVjaWZ5IHRoZSBkZWJsb2NraW5nIHBhcmFtZXRlciBvZmZzZXRzIGZvciBiZXRh IGRpdmlkZWQgYnkgMgo+PiArICogQHNsaWNlX3RjX29mZnNldF9kaXYyOiBzcGVjaWZ5IHRoZSBk ZWJsb2NraW5nIHBhcmFtZXRlciBvZmZzZXRzIGZvciB0QyBkaXZpZGVkIGJ5IDIKPj4gKyAqIEBw aWNfc3RydWN0OiBpbmRpY2F0ZXMgd2hldGhlciBhIHBpY3R1cmUgc2hvdWxkIGJlIGRpc3BsYXll ZCBhcyBhIGZyYW1lIG9yIGFzIG9uZSBvcgo+PiArICoJCW1vcmUgZmllbGRzCj4+ICsgKiBAc2xp Y2Vfc2VnbWVudF9hZGRyOiBzcGVjaWZpZXMgdGhlIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IGNvZGlu ZyB0cmVlIGJsb2NrIGluCj4+ICsgKgkJCXRoZSBzbGljZSBzZWdtZW50Cj4+ICsgKiBAcmVmX2lk eF9sMDogdGhlIGxpc3Qgb2YgTDAgcmVmZXJlbmNlIGVsZW1lbnRzIGFzIGluZGljZXMgaW4gdGhl IERQQgo+PiArICogQHJlZl9pZHhfbDE6IHRoZSBsaXN0IG9mIEwxIHJlZmVyZW5jZSBlbGVtZW50 cyBhcyBpbmRpY2VzIGluIHRoZSBEUEIKPj4gKyAqIEBzaG9ydF90ZXJtX3JlZl9waWNfc2V0X3Np emU6IHNwZWNpZmllcyB0aGUgc2l6ZSBvZiBzaG9ydC10ZXJtIHJlZmVyZW5jZQo+PiArICoJCQkJ IHBpY3R1cmVzIGluY2x1ZGVkIGluIHRoZSBTUFMKPj4gKyAqIEBsb25nX3Rlcm1fcmVmX3BpY19z ZXRfc2l6ZTogc3BlY2lmaWVzIHRoZSBzaXplIG9mIGxvbmctdGVybSByZWZlcmVuY2UKPj4gKyAq CQkJCXBpY3R1cmUgaW5jbHVkZSBpbiB0aGUgU1BTCj4+ICsgKiBAcHJlZF93ZWlnaHRfdGFibGU6 IHRoZSBwcmVkaWN0aW9uIHdlaWdodCBjb2VmZmljaWVudHMgZm9yIGludGVyLXBpY3R1cmUKPj4g KyAqCQkgICAgICAgcHJlZGljdGlvbgo+PiArICogQGZsYWdzOiBzZWUgVjRMMl9IRVZDX1NMSUNF X1BBUkFNU19GTEFHX3t9Cj4+ICsgKi8KPj4gICBzdHJ1Y3QgdjRsMl9jdHJsX2hldmNfc2xpY2Vf cGFyYW1zIHsKPj4gICAJX191MzIJYml0X3NpemU7Cj4+ICAgCV9fdTMyCWRhdGFfYml0X29mZnNl dDsKPj4gQEAgLTIzMCw2ICs0MDEsMjggQEAgc3RydWN0IHY0bDJfY3RybF9oZXZjX3NsaWNlX3Bh cmFtcyB7Cj4+ICAgI2RlZmluZSBWNEwyX0hFVkNfREVDT0RFX1BBUkFNX0ZMQUdfSURSX1BJQwkJ MHgyCj4+ICAgI2RlZmluZSBWNEwyX0hFVkNfREVDT0RFX1BBUkFNX0ZMQUdfTk9fT1VUUFVUX09G X1BSSU9SICAweDQKPj4gICAKPj4gKy8qKgo+PiArICogc3RydWN0IHY0bDJfY3RybF9oZXZjX2Rl Y29kZV9wYXJhbXMgLSBIRVZDIGRlY29kZSBwYXJhbWV0ZXJzCj4+ICsgKgo+PiArICogQHBpY19v cmRlcl9jbnRfdmFsOiBwaWN0dXJlIG9yZGVyIGNvdW50Cj4+ICsgKiBAc2hvcnRfdGVybV9yZWZf cGljX3NldF9zaXplOiBzcGVjaWZpZXMgdGhlIHNpemUgb2Ygc2hvcnQtdGVybSByZWZlcmVuY2UK Pj4gKyAqCQkJCSBwaWN0dXJlcyBzZXQgaW5jbHVkZWQgaW4gdGhlIFNQUyBvZiB0aGUgZmlyc3Qg c2xpY2UKPj4gKyAqIEBsb25nX3Rlcm1fcmVmX3BpY19zZXRfc2l6ZTogc3BlY2lmaWVzIHRoZSBz aXplIG9mIGxvbmctdGVybSByZWZlcmVuY2UKPj4gKyAqCQkJCXBpY3R1cmVzIHNldCBpbmNsdWRl IGluIHRoZSBTUFMgb2YgdGhlIGZpcnN0IHNsaWNlCj4+ICsgKiBAbnVtX2FjdGl2ZV9kcGJfZW50 cmllczogdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIGRwYgo+PiArICogQGRwYjogdGhlIGRlY29k ZWQgcGljdHVyZSBidWZmZXIsIGZvciBtZXRhLWRhdGEgYWJvdXQgcmVmZXJlbmNlIGZyYW1lcwo+ PiArICogQG51bV9wb2Nfc3RfY3Vycl9iZWZvcmU6IHRoZSBudW1iZXIgb2YgcmVmZXJlbmNlIHBp Y3R1cmVzIGluIHRoZSBzaG9ydC10ZXJtCj4+ICsgKgkJCSAgICBzZXQgdGhhdCBjb21lIGJlZm9y ZSB0aGUgY3VycmVudCBmcmFtZQo+PiArICogQG51bV9wb2Nfc3RfY3Vycl9hZnRlcjogdGhlIG51 bWJlciBvZiByZWZlcmVuY2UgcGljdHVyZXMgaW4gdGhlIHNob3J0LXRlcm0KPj4gKyAqCQkJICAg c2V0IHRoYXQgY29tZSBhZnRlciB0aGUgY3VycmVudCBmcmFtZQo+PiArICogQG51bV9wb2NfbHRf Y3VycjogdGhlIG51bWJlciBvZiByZWZlcmVuY2UgcGljdHVyZXMgaW4gdGhlIGxvbmctdGVybSBz ZXQKPj4gKyAqIEBwb2Nfc3RfY3Vycl9iZWZvcmU6IHByb3ZpZGVzIHRoZSBpbmRleCBvZiB0aGUg c2hvcnQgdGVybSBiZWZvcmUgcmVmZXJlbmNlcwo+PiArICoJCQlpbiBEUEIgYXJyYXkKPj4gKyAq IEBwb2Nfc3RfY3Vycl9hZnRlcjogcHJvdmlkZXMgdGhlIGluZGV4IG9mIHRoZSBzaG9ydCB0ZXJt IGFmdGVyIHJlZmVyZW5jZXMKPj4gKyAqCQkgICAgICAgaW4gRFBCIGFycmF5Cj4+ICsgKiBAcG9j X2x0X2N1cnI6IHByb3ZpZGVzIHRoZSBpbmRleCBvZiB0aGUgbG9uZyB0ZXJtIHJlZmVyZW5jZXMg aW4gRFBCIGFycmF5Cj4+ICsgKiBAZmxhZ3M6IHNlZSBWNEwyX0hFVkNfREVDT0RFX1BBUkFNX0ZM QUdfe30KPj4gKyAqLwo+PiAgIHN0cnVjdCB2NGwyX2N0cmxfaGV2Y19kZWNvZGVfcGFyYW1zIHsK Pj4gICAJX19zMzIJcGljX29yZGVyX2NudF92YWw7Cj4+ICAgCV9fdTE2CXNob3J0X3Rlcm1fcmVm X3BpY19zZXRfc2l6ZTsKPj4gQEAgLTI0NSw2ICs0MzgsMjggQEAgc3RydWN0IHY0bDJfY3RybF9o ZXZjX2RlY29kZV9wYXJhbXMgewo+PiAgIAlfX3U2NAlmbGFnczsKPj4gICB9Owo+PiAgIAo+PiAr LyoqCj4+ICsgKiBzdHJ1Y3QgdjRsMl9jdHJsX2hldmNfc2NhbGluZ19tYXRyaXggLSBIRVZDIHNj YWxpbmcgbGlzdHMgcGFyYW1ldGVycwo+PiArICoKPj4gKyAqIEBzY2FsaW5nX2xpc3RfNHg0OiBz Y2FsaW5nIGxpc3QgaXMgdXNlZCBmb3IgdGhlIHNjYWxpbmcgcHJvY2VzcyBmb3IKPj4gKyAqCQkg ICAgICB0cmFuc2Zvcm0gY29lZmZpY2llbnRzLiBUaGUgdmFsdWVzIG9uIGVhY2ggc2NhbGluZwo+ PiArICoJCSAgICAgIGxpc3QgYXJlIGV4cGVjdGVkIGluIHJhc3RlciBzY2FuIG9yZGVyCj4+ICsg KiBAc2NhbGluZ19saXN0Xzh4ODogc2NhbGluZyBsaXN0IGlzIHVzZWQgZm9yIHRoZSBzY2FsaW5n IHByb2Nlc3MgZm9yCj4+ICsgKgkJICAgICAgdHJhbnNmb3JtIGNvZWZmaWNpZW50cy4gVGhlIHZh bHVlcyBvbiBlYWNoIHNjYWxpbmcKPj4gKyAqCQkgICAgICBsaXN0IGFyZSBleHBlY3RlZCBpbiBy YXN0ZXIgc2NhbiBvcmRlcgo+PiArICogQHNjYWxpbmdfbGlzdF8xNngxNjogc2NhbGluZyBsaXN0 IGlzIHVzZWQgZm9yIHRoZSBzY2FsaW5nIHByb2Nlc3MgZm9yCj4+ICsgKgkJCXRyYW5zZm9ybSBj b2VmZmljaWVudHMuIFRoZSB2YWx1ZXMgb24gZWFjaCBzY2FsaW5nCj4+ICsgKgkJCWxpc3QgYXJl IGV4cGVjdGVkIGluIHJhc3RlciBzY2FuIG9yZGVyCj4+ICsgKiBAc2NhbGluZ19saXN0XzMyeDMy OglzY2FsaW5nIGxpc3QgaXMgdXNlZCBmb3IgdGhlIHNjYWxpbmcgcHJvY2VzcyBmb3IKPj4gKyAq CQkJdHJhbnNmb3JtIGNvZWZmaWNpZW50cy4gVGhlIHZhbHVlcyBvbiBlYWNoIHNjYWxpbmcKPj4g KyAqCQkJbGlzdCBhcmUgZXhwZWN0ZWQgaW4gcmFzdGVyIHNjYW4gb3JkZXIKPj4gKyAqIEBzY2Fs aW5nX2xpc3RfZGNfY29lZl8xNngxNjogc2NhbGluZyBsaXN0IGlzIHVzZWQgZm9yIHRoZSBzY2Fs aW5nIHByb2Nlc3MKPj4gKyAqCQkJCWZvciB0cmFuc2Zvcm0gY29lZmZpY2llbnRzLiBUaGUgdmFs dWVzIG9uIGVhY2gKPj4gKyAqCQkJCXNjYWxpbmcgbGlzdCBhcmUgZXhwZWN0ZWQgaW4gcmFzdGVy IHNjYW4gb3JkZXIuCj4+ICsgKiBAc2NhbGluZ19saXN0X2RjX2NvZWZfMzJ4MzI6CXNjYWxpbmcg bGlzdCBpcyB1c2VkIGZvciB0aGUgc2NhbGluZyBwcm9jZXNzCj4+ICsgKgkJCQlmb3IgdHJhbnNm b3JtIGNvZWZmaWNpZW50cy4gVGhlIHZhbHVlcyBvbiBlYWNoCj4+ICsgKgkJCQlzY2FsaW5nIGxp c3QgYXJlIGV4cGVjdGVkIGluIHJhc3RlciBzY2FuIG9yZGVyLgo+PiArICovCj4+ICAgc3RydWN0 IHY0bDJfY3RybF9oZXZjX3NjYWxpbmdfbWF0cml4IHsKPj4gICAJX191OAlzY2FsaW5nX2xpc3Rf NHg0WzZdWzE2XTsKPj4gICAJX191OAlzY2FsaW5nX2xpc3RfOHg4WzZdWzY0XTsKPiBSZWdhcmRz LAo+Cj4gCUhhbnMKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMu aW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2xpbnV4LWFybS1rZXJuZWwK