From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.0 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2EDD0C10F0C for ; Mon, 11 Mar 2019 09:37:50 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id EE2EB20850 for ; Mon, 11 Mar 2019 09:37:49 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="W4Ui1S5I"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="ePxRXKWS" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org EE2EB20850 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=chromium.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:To:Subject:Message-ID:Date:From: In-Reply-To:References:MIME-Version:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=JqctIo9QImpe9t7MkZfxD6lSAV5thg7/848J8JtELxY=; b=W4Ui1S5IrAWKSt idzliv6UoAV5BNOwxExeyeRsOcE3LgY/TDf9fmh0aqI3kI7Sd+uQs8Qhmy1L/ZgADEMclHt8F8uL2 4RP2LAsqxqHzpCe3O8xIL40f/4b4T5NJJVRX2XSdGSSXUmddSAZRPZZdlgeCsmIE0F8Bdp95SlcKR nPWr5Udik5LiBTaoGbjxpA9NATDpqjeeZJdvQIUyVa3v/eYoztl17kqWG8cRu21XS9kBtUiGqoMQv UiqFqI1EyQmsz3C1yxPxngH8UHqe9pjxv/MntgMwevH1HylT1Ll7XKryhLIvxRyX9Y7BHwRNBKQe4 gKsC52GfmpyZbUxg4SIg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1h3HNO-0007JH-Gi; Mon, 11 Mar 2019 09:37:42 +0000 Received: from mail-ot1-x344.google.com ([2607:f8b0:4864:20::344]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1h3HNI-0007II-Fj for linux-arm-kernel@lists.infradead.org; Mon, 11 Mar 2019 09:37:39 +0000 Received: by mail-ot1-x344.google.com with SMTP id b3so3329264otp.4 for ; Mon, 11 Mar 2019 02:37:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=BCwkrTFD+10GWWjahCgs1WcInaY24j8bvL2YG2uQMQ8=; b=ePxRXKWSmx65y7m1mzGV46j1ZqggIRnb1opo9GU8X6RMw91y+t1nJOUKoBMTqT+6ft 3vEGpi+ZMbP4MBw1+sFtxq0MYHzMgANZKSC3Ga4bTZXMN+lF4YjwifeWw4ZD6Ep2Xlg6 7qUSzMDon7TfmtW0MEzijvztB1/bAOiF3wH1U= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=BCwkrTFD+10GWWjahCgs1WcInaY24j8bvL2YG2uQMQ8=; b=TPu8Rbxrkuq4l8915TOwaIs3gC93NSOvKKvIFJlqYCqJSJU3yjiGMor43HIxFjd3Qy NpUq0Xz3rKMDP5Ru3G5Xa8F59u9lTnVKCI1GPceR5K/W+Kt7ZX7xYVvSYuNFjox9xefK zR+Fz0JGtZ7Vsnq9POUpj+BH+3w76TJNwd2ZMnFju+U8V0sY59fE334JYRLF4D1du8VM PaHxxiIfGTJR9AEYan3MBaEhAg2FlxcEry5vn+PclHJgVk0sV6EO4BrP10a2ABAQNXgp Cy/8Pij5TPBXHhF6bNx5QJL+EPYmUY2EA798bp+ZTuoCaPpIK+IPxJa4l3AoAXTo1hXE cmvw== X-Gm-Message-State: APjAAAWaMmhDpg2mJK7o9YZuSx+gV2iTsLC14XRObrjeAImliis9/GdB 8qlzWvL1tenjNTOyPwqQzV5AtZ8XhR0= X-Google-Smtp-Source: APXvYqyMNVYLCUowjh5j9/Hzmp+vBzICM02+Ul1tScoLMaQ1Fzx5wawpPcdHfh7p2wrPaxL6NRu31g== X-Received: by 2002:a9d:5614:: with SMTP id e20mr19256899oti.348.1552297054117; Mon, 11 Mar 2019 02:37:34 -0700 (PDT) Received: from mail-oi1-f171.google.com (mail-oi1-f171.google.com. [209.85.167.171]) by smtp.gmail.com with ESMTPSA id g80sm2188381otg.38.2019.03.11.02.37.32 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 11 Mar 2019 02:37:32 -0700 (PDT) Received: by mail-oi1-f171.google.com with SMTP id b4so3075128oif.6 for ; Mon, 11 Mar 2019 02:37:32 -0700 (PDT) X-Received: by 2002:aca:4dca:: with SMTP id a193mr16217466oib.21.1552297051989; Mon, 11 Mar 2019 02:37:31 -0700 (PDT) MIME-Version: 1.0 References: <20180308094807.9443-1-jacob-chen@iotwrt.com> <20180308094807.9443-5-jacob-chen@iotwrt.com> <20190310174912.GA7076@pendragon.ideasonboard.com> In-Reply-To: <20190310174912.GA7076@pendragon.ideasonboard.com> From: Tomasz Figa Date: Mon, 11 Mar 2019 18:37:20 +0900 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH v6 04/17] media: rkisp1: add Rockchip MIPI Synopsys DPHY driver To: Laurent Pinchart X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190311_023736_561834_90572887 X-CRM114-Status: GOOD ( 24.76 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devicetree@vger.kernel.org, Eddie Cai , =?UTF-8?Q?Heiko_St=C3=BCbner?= , Jeffy , =?UTF-8?B?6ZKf5Lul5bSH?= , Linux Kernel Mailing List , =?UTF-8?B?6IOh5YWL5L+K?= , "open list:ARM/Rockchip SoC..." , Hans Verkuil , Sakari Ailus , Mauro Carvalho Chehab , Shunqian Zheng , "list@263.net:IOMMU DRIVERS , Joerg Roedel , " , Linux Media Mailing List Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgTGF1cmVudCwKCk9uIE1vbiwgTWFyIDExLCAyMDE5IGF0IDI6NDkgQU0gTGF1cmVudCBQaW5j aGFydAo8bGF1cmVudC5waW5jaGFydEBpZGVhc29uYm9hcmQuY29tPiB3cm90ZToKPgo+IEhpIEph Y29iLAo+Cj4gQSBmZXcgbW9yZSBjb21tZW50cyBvbiB0aGUgY29kZSB0aGlzIHRpbWUuCj4KPiBG aXJzdCBvZiBhbGwsIHRoaXMgaGFzIGJpdC1yb3R0ZW4gYSBiaXQgYW5kIGRvZXNuJ3QgY29tcGls ZS4gVGhlCj4gZm9sbG93aW5nIHBhdGNoIGZpeGVzIGl0LiBGZWVsIGZyZWUgdG8gc3F1YXNoIGl0 IGludG8gdGhpcyBwYXRjaCAobm8KPiBuZWVkIHRvIGNyZWRpdCBtZSBvciBhZGQgbXkgU29CIGxp bmUpLgoKVGhhbmtzIGEgbG90LgoKLUphY29iLCB3aG8ncyBub3Qgd29ya2luZyBvbiB0aGlzIGRy aXZlciBhbnltb3JlLgor6IOh5YWL5L+KIChXaWxsaWFtKSwgd2hvJ3MgYmVlbiBsb29raW5nIGlu dG8gcmV2aXZpbmcgdGhpcyBzZXJpZXMuCgo+Cj4gY29tbWl0IDI5NzM5OWJiNWUzYWM4ZDUwZjI3 ZjFjOTExZmU3ZTVmMjY5ODNlNTYKPiBBdXRob3I6IExhdXJlbnQgUGluY2hhcnQgPGxhdXJlbnQu cGluY2hhcnRAaWRlYXNvbmJvYXJkLmNvbT4KPiBEYXRlOiAgIFNhdCBNYXIgMiAwMjoxODoxOSAy MDE5ICswMjAwCj4KPiAgICAgbWVkaWE6IHJraXNwMTogRml4IGNvbXBpbGF0aW9uIGVycm9ycwo+ Cj4gICAgIFRoZSBjb2RlIGhhcyBiaXQtcm90dGVuIHNpbmNlIE1hcmNoIDIwMTgsIGZpeCBjb21w aWxhdGlvbiBlcnJvcnMuCj4KPiAgICAgVGhlIG5ldyBWNEwyIGFzeW5jIG5vdGlmaWVyIEFQSSBy ZXF1aXJlcyBub3RpZmllcnMgdG8gYmUgaW5pdGlhbGl6ZWQgYnkKPiAgICAgYSBjYWxsIHRvIHY0 bDJfYXN5bmNfbm90aWZpZXJfaW5pdCgpIGJlZm9yZSBiZWluZyB1c2VkLCBkbyBzby4KPgo+ICAg ICBTaWduZWQtb2ZmLWJ5OiBMYXVyZW50IFBpbmNoYXJ0IDxsYXVyZW50LnBpbmNoYXJ0QGlkZWFz b25ib2FyZC5jb20+Cj4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9yb2Nr Y2hpcC9pc3AxL21pcGlfZHBoeV9zeS5jIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9yb2NrY2hp cC9pc3AxL21pcGlfZHBoeV9zeS5jCj4gaW5kZXggMzIxNDA5NjA1NTdhLi44YTdkMDcwMzE0Yzkg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9yb2NrY2hpcC9pc3AxL21pcGlf ZHBoeV9zeS5jCj4gKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9yb2NrY2hpcC9pc3AxL21p cGlfZHBoeV9zeS5jCj4gQEAgLTY5Nyw3ICs2OTcsNyBAQCBzdGF0aWMgaW50IHJvY2tjaGlwX21p cGlkcGh5X2Z3bm9kZV9wYXJzZShzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gICAgICAgICAgICAgICAg ICAgICAgICAgY29udGFpbmVyX29mKGFzZCwgc3RydWN0IHNlbnNvcl9hc3luY19zdWJkZXYsIGFz ZCk7Cj4gICAgICAgICBzdHJ1Y3QgdjRsMl9tYnVzX2NvbmZpZyAqY29uZmlnID0gJnNfYXNkLT5t YnVzOwo+Cj4gLSAgICAgICBpZiAodmVwLT5idXNfdHlwZSAhPSBWNEwyX01CVVNfQ1NJMikgewo+ ICsgICAgICAgaWYgKHZlcC0+YnVzX3R5cGUgIT0gVjRMMl9NQlVTX0NTSTJfRFBIWSkgewo+ICAg ICAgICAgICAgICAgICBkZXZfZXJyKGRldiwgIk9ubHkgQ1NJMiBidXMgdHlwZSBpcyBjdXJyZW50 bHkgc3VwcG9ydGVkXG4iKTsKPiAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gICAg ICAgICB9Cj4gQEAgLTcwNyw3ICs3MDcsNyBAQCBzdGF0aWMgaW50IHJvY2tjaGlwX21pcGlkcGh5 X2Z3bm9kZV9wYXJzZShzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gICAgICAgICAgICAgICAgIHJldHVy biAtRUlOVkFMOwo+ICAgICAgICAgfQo+Cj4gLSAgICAgICBjb25maWctPnR5cGUgPSBWNEwyX01C VVNfQ1NJMjsKPiArICAgICAgIGNvbmZpZy0+dHlwZSA9IFY0TDJfTUJVU19DU0kyX0RQSFk7Cj4g ICAgICAgICBjb25maWctPmZsYWdzID0gdmVwLT5idXMubWlwaV9jc2kyLmZsYWdzOwo+ICAgICAg ICAgc19hc2QtPmxhbmVzID0gdmVwLT5idXMubWlwaV9jc2kyLm51bV9kYXRhX2xhbmVzOwo+Cj4g QEAgLTc0NSw2ICs3NDUsOCBAQCBzdGF0aWMgaW50IHJvY2tjaGlwX21pcGlkcGh5X21lZGlhX2lu aXQoc3RydWN0IG1pcGlkcGh5X3ByaXYgKnByaXYpCj4gICAgICAgICBpZiAocmV0IDwgMCkKPiAg ICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPgo+ICsgICAgICAgdjRsMl9hc3luY19ub3RpZmll cl9pbml0KCZwcml2LT5ub3RpZmllcik7Cj4gKwo+ICAgICAgICAgcmV0ID0gdjRsMl9hc3luY19u b3RpZmllcl9wYXJzZV9md25vZGVfZW5kcG9pbnRzX2J5X3BvcnQoCj4gICAgICAgICAgICAgICAg IHByaXYtPmRldiwgJnByaXYtPm5vdGlmaWVyLAo+ICAgICAgICAgICAgICAgICBzaXplb2Yoc3Ry dWN0IHNlbnNvcl9hc3luY19zdWJkZXYpLCAwLAo+IEBAIC03NTIsNyArNzU0LDcgQEAgc3RhdGlj IGludCByb2NrY2hpcF9taXBpZHBoeV9tZWRpYV9pbml0KHN0cnVjdCBtaXBpZHBoeV9wcml2ICpw cml2KQo+ICAgICAgICAgaWYgKHJldCA8IDApCj4gICAgICAgICAgICAgICAgIHJldHVybiByZXQ7 Cj4KPiAtICAgICAgIGlmICghcHJpdi0+bm90aWZpZXIubnVtX3N1YmRldnMpCj4gKyAgICAgICBp ZiAobGlzdF9lbXB0eSgmcHJpdi0+bm90aWZpZXIuYXNkX2xpc3QpKQo+ICAgICAgICAgICAgICAg ICByZXR1cm4gLUVOT0RFVjsgLyogbm8gZW5kcG9pbnQgKi8KPgo+ICAgICAgICAgcHJpdi0+c2Qu c3ViZGV2X25vdGlmaWVyID0gJnByaXYtPm5vdGlmaWVyOwo+Cj4KPiBUaGVuLCBwbGVhc2Ugc2Vl IGJlbG93IGZvciBhZGRpdGlvbmFsIGNvbW1lbnRzLgo+Cj4gT24gVGh1LCBNYXIgMDgsIDIwMTgg YXQgMDU6NDc6NTRQTSArMDgwMCwgSmFjb2IgQ2hlbiB3cm90ZToKPiA+IEZyb206IEphY29iIENo ZW4gPGphY29iMi5jaGVuQHJvY2stY2hpcHMuY29tPgo+ID4KPiA+IFRoaXMgY29tbWl0IGFkZHMg YSBzdWJkZXYgZHJpdmVyIGZvciBSb2NrY2hpcCBNSVBJIFN5bm9wc3lzIERQSFkgZHJpdmVyCj4g Pgo+ID4gU2lnbmVkLW9mZi1ieTogSmFjb2IgQ2hlbiA8amFjb2IyLmNoZW5Acm9jay1jaGlwcy5j b20+Cj4gPiBTaWduZWQtb2ZmLWJ5OiBTaHVucWlhbiBaaGVuZyA8emhlbmdzcUByb2NrLWNoaXBz LmNvbT4KPiA+IFNpZ25lZC1vZmYtYnk6IFRvbWFzeiBGaWdhIDx0ZmlnYUBjaHJvbWl1bS5vcmc+ Cj4gPiAtLS0KPiA+ICAuLi4vbWVkaWEvcGxhdGZvcm0vcm9ja2NoaXAvaXNwMS9taXBpX2RwaHlf c3kuYyAgICB8IDg2OCArKysrKysrKysrKysrKysrKysrKysKPiA+ICAuLi4vbWVkaWEvcGxhdGZv cm0vcm9ja2NoaXAvaXNwMS9taXBpX2RwaHlfc3kuaCAgICB8ICAxNSArCj4gPiAgMiBmaWxlcyBj aGFuZ2VkLCA4ODMgaW5zZXJ0aW9ucygrKQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L21lZGlhL3BsYXRmb3JtL3JvY2tjaGlwL2lzcDEvbWlwaV9kcGh5X3N5LmMKPiA+ICBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9yb2NrY2hpcC9pc3AxL21pcGlfZHBo eV9zeS5oCj4gPgo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vcm9ja2No aXAvaXNwMS9taXBpX2RwaHlfc3kuYyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vcm9ja2NoaXAv aXNwMS9taXBpX2RwaHlfc3kuYwo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAw MDAwMDAwMDAwMC4uMzIxNDA5NjA1NTdhCj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9kcml2 ZXJzL21lZGlhL3BsYXRmb3JtL3JvY2tjaGlwL2lzcDEvbWlwaV9kcGh5X3N5LmMKPiA+IEBAIC0w LDAgKzEsODY4IEBACj4gPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wKyBP UiBNSVQpCj4gPiArLyoKPiA+ICsgKiBSb2NrY2hpcCBNSVBJIFN5bm9wc3lzIERQSFkgZHJpdmVy Cj4gPiArICoKPiA+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTcgRnV6aG91IFJvY2tjaGlwIEVsZWN0 cm9uaWNzIENvLiwgTHRkLgo+ID4gKyAqLwo+ID4gKwo+ID4gKyNpbmNsdWRlIDxsaW51eC9jbGsu aD4KPiA+ICsjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvbW9k dWxlLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L29mLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L29m X3BsYXRmb3JtLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgo+ID4g KyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L3JlZ21h cC5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uLmg+Cj4gPiArI2luY2x1ZGUgPG1l ZGlhL21lZGlhLWVudGl0eS5oPgo+ID4gKyNpbmNsdWRlIDxtZWRpYS92NGwyLWN0cmxzLmg+Cj4g PiArI2luY2x1ZGUgPG1lZGlhL3Y0bDItZndub2RlLmg+Cj4gPiArI2luY2x1ZGUgPG1lZGlhL3Y0 bDItc3ViZGV2Lmg+Cj4gPiArCj4gPiArI2RlZmluZSBSSzMyODhfR1JGX1NPQ19DT042ICAweDAy NWMKPiA+ICsjZGVmaW5lIFJLMzI4OF9HUkZfU09DX0NPTjggIDB4MDI2NAo+ID4gKyNkZWZpbmUg UkszMjg4X0dSRl9TT0NfQ09OOSAgMHgwMjY4Cj4gPiArI2RlZmluZSBSSzMyODhfR1JGX1NPQ19D T04xMCAweDAyNmMKPiA+ICsjZGVmaW5lIFJLMzI4OF9HUkZfU09DX0NPTjE0IDB4MDI3Ywo+ID4g KyNkZWZpbmUgUkszMjg4X0dSRl9TT0NfU1RBVFVTMjEgICAgICAweDAyZDQKPiA+ICsjZGVmaW5l IFJLMzI4OF9HUkZfSU9fVlNFTCAgIDB4MDM4MAo+ID4gKyNkZWZpbmUgUkszMjg4X0dSRl9TT0Nf Q09OMTUgMHgwM2E0Cj4gPiArCj4gPiArI2RlZmluZSBSSzMzOTlfR1JGX1NPQ19DT045ICAweDYy MjQKPiA+ICsjZGVmaW5lIFJLMzM5OV9HUkZfU09DX0NPTjIxIDB4NjI1NAo+ID4gKyNkZWZpbmUg UkszMzk5X0dSRl9TT0NfQ09OMjIgMHg2MjU4Cj4gPiArI2RlZmluZSBSSzMzOTlfR1JGX1NPQ19D T04yMyAweDYyNWMKPiA+ICsjZGVmaW5lIFJLMzM5OV9HUkZfU09DX0NPTjI0IDB4NjI2MAo+ID4g KyNkZWZpbmUgUkszMzk5X0dSRl9TT0NfQ09OMjUgMHg2MjY0Cj4gPiArI2RlZmluZSBSSzMzOTlf R1JGX1NPQ19TVEFUVVMxICAgICAgIDB4ZTJhNAo+ID4gKwo+ID4gKyNkZWZpbmUgQ0xPQ0tfTEFO RV9IU19SWF9DT05UUk9MICAgICAgICAgICAgIDB4MzQKPiA+ICsjZGVmaW5lIExBTkUwX0hTX1JY X0NPTlRST0wgICAgICAgICAgICAgICAgICAweDQ0Cj4gPiArI2RlZmluZSBMQU5FMV9IU19SWF9D T05UUk9MICAgICAgICAgICAgICAgICAgMHg1NAo+ID4gKyNkZWZpbmUgTEFORTJfSFNfUlhfQ09O VFJPTCAgICAgICAgICAgICAgICAgIDB4ODQKPiA+ICsjZGVmaW5lIExBTkUzX0hTX1JYX0NPTlRS T0wgICAgICAgICAgICAgICAgICAweDk0Cj4gPiArI2RlZmluZSBIU19SWF9EQVRBX0xBTkVTX1RI U19TRVRUTEVfQ09OVFJPTCAgMHg3NQo+ID4gKwo+ID4gKy8qCj4gPiArICogQ1NJIEhPU1QKPiA+ ICsgKi8KPiA+ICsjZGVmaW5lIENTSUhPU1RfUEhZX1RFU1RfQ1RSTDAgICAgICAgICAgICAgICAw eDMwCj4gPiArI2RlZmluZSBDU0lIT1NUX1BIWV9URVNUX0NUUkwxICAgICAgICAgICAgICAgMHgz NAo+ID4gKyNkZWZpbmUgQ1NJSE9TVF9QSFlfU0hVVERPV05aICAgICAgICAgICAgICAgIDB4MDgK PiA+ICsjZGVmaW5lIENTSUhPU1RfRFBIWV9SU1RaICAgICAgICAgICAgMHgwYwo+ID4gKwo+ID4g KyNkZWZpbmUgUEhZX1RFU1RFTl9BRERSICAgICAgICAgICAgICAgICAgICAgICgweDEgPDwgMTYp Cj4gPiArI2RlZmluZSBQSFlfVEVTVEVOX0RBVEEgICAgICAgICAgICAgICAgICAgICAgKDB4MCA8 PCAxNikKPiA+ICsjZGVmaW5lIFBIWV9URVNUQ0xLICAgICAgICAgICAgICAgICAgKDB4MSA8PCAx KQo+ID4gKyNkZWZpbmUgUEhZX1RFU1RDTFIgICAgICAgICAgICAgICAgICAoMHgxIDw8IDApCj4g PiArI2RlZmluZSBUSFNfU0VUVExFX0NPVU5URVJfVEhSRVNIT0xEIDB4MDQKPiA+ICsKPiA+ICsj ZGVmaW5lIEhJV09SRF9VUERBVEUodmFsLCBtYXNrLCBzaGlmdCkgXAo+ID4gKyAgICAgKCh2YWwp IDw8IChzaGlmdCkgfCAobWFzaykgPDwgKChzaGlmdCkgKyAxNikpCj4gPiArCj4gPiArZW51bSBt aXBpX2RwaHlfc3lfcGFkcyB7Cj4gPiArICAgICBNSVBJX0RQSFlfU1lfUEFEX1NJTksgPSAwLAo+ ID4gKyAgICAgTUlQSV9EUEhZX1NZX1BBRF9TT1VSQ0UsCj4gPiArICAgICBNSVBJX0RQSFlfU1lf UEFEU19OVU0sCj4gPiArfTsKPiA+ICsKPiA+ICtlbnVtIGRwaHlfcmVnX2lkIHsKPiA+ICsgICAg IEdSRl9EUEhZX1JYMF9UVVJORElTQUJMRSA9IDAsCj4gPiArICAgICBHUkZfRFBIWV9SWDBfRk9S Q0VSWE1PREUsCj4gPiArICAgICBHUkZfRFBIWV9SWDBfRk9SQ0VUWFNUT1BNT0RFLAo+ID4gKyAg ICAgR1JGX0RQSFlfUlgwX0VOQUJMRSwKPiA+ICsgICAgIEdSRl9EUEhZX1JYMF9URVNUQ0xSLAo+ ID4gKyAgICAgR1JGX0RQSFlfUlgwX1RFU1RDTEssCj4gPiArICAgICBHUkZfRFBIWV9SWDBfVEVT VEVOLAo+ID4gKyAgICAgR1JGX0RQSFlfUlgwX1RFU1RESU4sCj4gPiArICAgICBHUkZfRFBIWV9S WDBfVFVSTlJFUVVFU1QsCj4gPiArICAgICBHUkZfRFBIWV9SWDBfVEVTVERPVVQsCj4gPiArICAg ICBHUkZfRFBIWV9UWDBfVFVSTkRJU0FCTEUsCj4gPiArICAgICBHUkZfRFBIWV9UWDBfRk9SQ0VS WE1PREUsCj4gPiArICAgICBHUkZfRFBIWV9UWDBfRk9SQ0VUWFNUT1BNT0RFLAo+ID4gKyAgICAg R1JGX0RQSFlfVFgwX1RVUk5SRVFVRVNULAo+ID4gKyAgICAgR1JGX0RQSFlfVFgxUlgxX1RVUk5E SVNBQkxFLAo+ID4gKyAgICAgR1JGX0RQSFlfVFgxUlgxX0ZPUkNFUlhNT0RFLAo+ID4gKyAgICAg R1JGX0RQSFlfVFgxUlgxX0ZPUkNFVFhTVE9QTU9ERSwKPiA+ICsgICAgIEdSRl9EUEhZX1RYMVJY MV9FTkFCTEUsCj4gPiArICAgICBHUkZfRFBIWV9UWDFSWDFfTUFTVEVSU0xBVkVaLAo+ID4gKyAg ICAgR1JGX0RQSFlfVFgxUlgxX0JBU0VESVIsCj4gPiArICAgICBHUkZfRFBIWV9UWDFSWDFfRU5B QkxFQ0xLLAo+ID4gKyAgICAgR1JGX0RQSFlfVFgxUlgxX1RVUk5SRVFVRVNULAo+ID4gKyAgICAg R1JGX0RQSFlfUlgxX1NSQ19TRUwsCj4gPiArICAgICAvKiByazMyODggb25seSAqLwo+ID4gKyAg ICAgR1JGX0NPTl9ESVNBQkxFX0lTUCwKPiA+ICsgICAgIEdSRl9DT05fSVNQX0RQSFlfU0VMLAo+ ID4gKyAgICAgR1JGX0RTSV9DU0lfVEVTVEJVU19TRUwsCj4gPiArICAgICBHUkZfRFZQX1YxOFNF TCwKPiA+ICsgICAgIC8qIGJlbG93IGlzIGZvciByazMzOTkgb25seSAqLwo+ID4gKyAgICAgR1JG X0RQSFlfUlgwX0NMS19JTlZfU0VMLAo+ID4gKyAgICAgR1JGX0RQSFlfUlgxX0NMS19JTlZfU0VM LAo+ID4gK307Cj4gPiArCj4gPiArc3RydWN0IGRwaHlfcmVnIHsKPiA+ICsgICAgIHUzMiBvZmZz ZXQ7Cj4gPiArICAgICB1MzIgbWFzazsKPiA+ICsgICAgIHUzMiBzaGlmdDsKPiA+ICt9Owo+ID4g Kwo+ID4gKyNkZWZpbmUgUEhZX1JFRyhfb2Zmc2V0LCBfd2lkdGgsIF9zaGlmdCkgXAo+ID4gKyAg ICAgeyAub2Zmc2V0ID0gX29mZnNldCwgLm1hc2sgPSBCSVQoX3dpZHRoKSAtIDEsIC5zaGlmdCA9 IF9zaGlmdCwgfQo+ID4gKwo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHBoeV9yZWcgcmszMzk5 X2dyZl9kcGh5X3JlZ3NbXSA9IHsKPiA+ICsgICAgIFtHUkZfRFBIWV9SWDBfVFVSTlJFUVVFU1Rd ID0gUEhZX1JFRyhSSzMzOTlfR1JGX1NPQ19DT045LCA0LCAwKSwKPiA+ICsgICAgIFtHUkZfRFBI WV9SWDBfQ0xLX0lOVl9TRUxdID0gUEhZX1JFRyhSSzMzOTlfR1JGX1NPQ19DT045LCAxLCAxMCks Cj4gPiArICAgICBbR1JGX0RQSFlfUlgxX0NMS19JTlZfU0VMXSA9IFBIWV9SRUcoUkszMzk5X0dS Rl9TT0NfQ09OOSwgMSwgMTEpLAo+ID4gKyAgICAgW0dSRl9EUEhZX1JYMF9FTkFCTEVdID0gUEhZ X1JFRyhSSzMzOTlfR1JGX1NPQ19DT04yMSwgNCwgMCksCj4gPiArICAgICBbR1JGX0RQSFlfUlgw X0ZPUkNFUlhNT0RFXSA9IFBIWV9SRUcoUkszMzk5X0dSRl9TT0NfQ09OMjEsIDQsIDQpLAo+ID4g KyAgICAgW0dSRl9EUEhZX1JYMF9GT1JDRVRYU1RPUE1PREVdID0gUEhZX1JFRyhSSzMzOTlfR1JG X1NPQ19DT04yMSwgNCwgOCksCj4gPiArICAgICBbR1JGX0RQSFlfUlgwX1RVUk5ESVNBQkxFXSA9 IFBIWV9SRUcoUkszMzk5X0dSRl9TT0NfQ09OMjEsIDQsIDEyKSwKPiA+ICsgICAgIFtHUkZfRFBI WV9UWDBfRk9SQ0VSWE1PREVdID0gUEhZX1JFRyhSSzMzOTlfR1JGX1NPQ19DT04yMiwgNCwgMCks Cj4gPiArICAgICBbR1JGX0RQSFlfVFgwX0ZPUkNFVFhTVE9QTU9ERV0gPSBQSFlfUkVHKFJLMzM5 OV9HUkZfU09DX0NPTjIyLCA0LCA0KSwKPiA+ICsgICAgIFtHUkZfRFBIWV9UWDBfVFVSTkRJU0FC TEVdID0gUEhZX1JFRyhSSzMzOTlfR1JGX1NPQ19DT04yMiwgNCwgOCksCj4gPiArICAgICBbR1JG X0RQSFlfVFgwX1RVUk5SRVFVRVNUXSA9IFBIWV9SRUcoUkszMzk5X0dSRl9TT0NfQ09OMjIsIDQs IDEyKSwKPiA+ICsgICAgIFtHUkZfRFBIWV9UWDFSWDFfRU5BQkxFXSA9IFBIWV9SRUcoUkszMzk5 X0dSRl9TT0NfQ09OMjMsIDQsIDApLAo+ID4gKyAgICAgW0dSRl9EUEhZX1RYMVJYMV9GT1JDRVJY TU9ERV0gPSBQSFlfUkVHKFJLMzM5OV9HUkZfU09DX0NPTjIzLCA0LCA0KSwKPiA+ICsgICAgIFtH UkZfRFBIWV9UWDFSWDFfRk9SQ0VUWFNUT1BNT0RFXSA9IFBIWV9SRUcoUkszMzk5X0dSRl9TT0Nf Q09OMjMsIDQsIDgpLAo+ID4gKyAgICAgW0dSRl9EUEhZX1RYMVJYMV9UVVJORElTQUJMRV0gPSBQ SFlfUkVHKFJLMzM5OV9HUkZfU09DX0NPTjIzLCA0LCAxMiksCj4gPiArICAgICBbR1JGX0RQSFlf VFgxUlgxX1RVUk5SRVFVRVNUXSA9IFBIWV9SRUcoUkszMzk5X0dSRl9TT0NfQ09OMjQsIDQsIDAp LAo+ID4gKyAgICAgW0dSRl9EUEhZX1JYMV9TUkNfU0VMXSA9IFBIWV9SRUcoUkszMzk5X0dSRl9T T0NfQ09OMjQsIDEsIDQpLAo+ID4gKyAgICAgW0dSRl9EUEhZX1RYMVJYMV9CQVNFRElSXSA9IFBI WV9SRUcoUkszMzk5X0dSRl9TT0NfQ09OMjQsIDEsIDUpLAo+ID4gKyAgICAgW0dSRl9EUEhZX1RY MVJYMV9FTkFCTEVDTEtdID0gUEhZX1JFRyhSSzMzOTlfR1JGX1NPQ19DT04yNCwgMSwgNiksCj4g PiArICAgICBbR1JGX0RQSFlfVFgxUlgxX01BU1RFUlNMQVZFWl0gPSBQSFlfUkVHKFJLMzM5OV9H UkZfU09DX0NPTjI0LCAxLCA3KSwKPiA+ICsgICAgIFtHUkZfRFBIWV9SWDBfVEVTVERJTl0gPSBQ SFlfUkVHKFJLMzM5OV9HUkZfU09DX0NPTjI1LCA4LCAwKSwKPiA+ICsgICAgIFtHUkZfRFBIWV9S WDBfVEVTVEVOXSA9IFBIWV9SRUcoUkszMzk5X0dSRl9TT0NfQ09OMjUsIDEsIDgpLAo+ID4gKyAg ICAgW0dSRl9EUEhZX1JYMF9URVNUQ0xLXSA9IFBIWV9SRUcoUkszMzk5X0dSRl9TT0NfQ09OMjUs IDEsIDkpLAo+ID4gKyAgICAgW0dSRl9EUEhZX1JYMF9URVNUQ0xSXSA9IFBIWV9SRUcoUkszMzk5 X0dSRl9TT0NfQ09OMjUsIDEsIDEwKSwKPiA+ICsgICAgIFtHUkZfRFBIWV9SWDBfVEVTVERPVVRd ID0gUEhZX1JFRyhSSzMzOTlfR1JGX1NPQ19TVEFUVVMxLCA4LCAwKSwKPiA+ICt9Owo+ID4gKwo+ ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHBoeV9yZWcgcmszMjg4X2dyZl9kcGh5X3JlZ3NbXSA9 IHsKPiA+ICsgICAgIFtHUkZfQ09OX0RJU0FCTEVfSVNQXSA9IFBIWV9SRUcoUkszMjg4X0dSRl9T T0NfQ09ONiwgMSwgMCksCj4gPiArICAgICBbR1JGX0NPTl9JU1BfRFBIWV9TRUxdID0gUEhZX1JF RyhSSzMyODhfR1JGX1NPQ19DT042LCAxLCAxKSwKPiA+ICsgICAgIFtHUkZfRFNJX0NTSV9URVNU QlVTX1NFTF0gPSBQSFlfUkVHKFJLMzI4OF9HUkZfU09DX0NPTjYsIDEsIDE0KSwKPiA+ICsgICAg IFtHUkZfRFBIWV9UWDBfVFVSTkRJU0FCTEVdID0gUEhZX1JFRyhSSzMyODhfR1JGX1NPQ19DT044 LCA0LCAwKSwKPiA+ICsgICAgIFtHUkZfRFBIWV9UWDBfRk9SQ0VSWE1PREVdID0gUEhZX1JFRyhS SzMyODhfR1JGX1NPQ19DT044LCA0LCA0KSwKPiA+ICsgICAgIFtHUkZfRFBIWV9UWDBfRk9SQ0VU WFNUT1BNT0RFXSA9IFBIWV9SRUcoUkszMjg4X0dSRl9TT0NfQ09OOCwgNCwgOCksCj4gPiArICAg ICBbR1JGX0RQSFlfVFgxUlgxX1RVUk5ESVNBQkxFXSA9IFBIWV9SRUcoUkszMjg4X0dSRl9TT0Nf Q09OOSwgNCwgMCksCj4gPiArICAgICBbR1JGX0RQSFlfVFgxUlgxX0ZPUkNFUlhNT0RFXSA9IFBI WV9SRUcoUkszMjg4X0dSRl9TT0NfQ09OOSwgNCwgNCksCj4gPiArICAgICBbR1JGX0RQSFlfVFgx UlgxX0ZPUkNFVFhTVE9QTU9ERV0gPSBQSFlfUkVHKFJLMzI4OF9HUkZfU09DX0NPTjksIDQsIDgp LAo+ID4gKyAgICAgW0dSRl9EUEhZX1RYMVJYMV9FTkFCTEVdID0gUEhZX1JFRyhSSzMyODhfR1JG X1NPQ19DT045LCA0LCAxMiksCj4gPiArICAgICBbR1JGX0RQSFlfUlgwX1RVUk5ESVNBQkxFXSA9 IFBIWV9SRUcoUkszMjg4X0dSRl9TT0NfQ09OMTAsIDQsIDApLAo+ID4gKyAgICAgW0dSRl9EUEhZ X1JYMF9GT1JDRVJYTU9ERV0gPSBQSFlfUkVHKFJLMzI4OF9HUkZfU09DX0NPTjEwLCA0LCA0KSwK PiA+ICsgICAgIFtHUkZfRFBIWV9SWDBfRk9SQ0VUWFNUT1BNT0RFXSA9IFBIWV9SRUcoUkszMjg4 X0dSRl9TT0NfQ09OMTAsIDQsIDgpLAo+ID4gKyAgICAgW0dSRl9EUEhZX1JYMF9FTkFCTEVdID0g UEhZX1JFRyhSSzMyODhfR1JGX1NPQ19DT04xMCwgNCwgMTIpLAo+ID4gKyAgICAgW0dSRl9EUEhZ X1JYMF9URVNUQ0xSXSA9IFBIWV9SRUcoUkszMjg4X0dSRl9TT0NfQ09OMTQsIDEsIDApLAo+ID4g KyAgICAgW0dSRl9EUEhZX1JYMF9URVNUQ0xLXSA9IFBIWV9SRUcoUkszMjg4X0dSRl9TT0NfQ09O MTQsIDEsIDEpLAo+ID4gKyAgICAgW0dSRl9EUEhZX1JYMF9URVNURU5dID0gUEhZX1JFRyhSSzMy ODhfR1JGX1NPQ19DT04xNCwgMSwgMiksCj4gPiArICAgICBbR1JGX0RQSFlfUlgwX1RFU1RESU5d ID0gUEhZX1JFRyhSSzMyODhfR1JGX1NPQ19DT04xNCwgOCwgMyksCj4gPiArICAgICBbR1JGX0RQ SFlfVFgxUlgxX0VOQUJMRUNMS10gPSBQSFlfUkVHKFJLMzI4OF9HUkZfU09DX0NPTjE0LCAxLCAx MiksCj4gPiArICAgICBbR1JGX0RQSFlfUlgxX1NSQ19TRUxdID0gUEhZX1JFRyhSSzMyODhfR1JG X1NPQ19DT04xNCwgMSwgMTMpLAo+ID4gKyAgICAgW0dSRl9EUEhZX1RYMVJYMV9NQVNURVJTTEFW RVpdID0gUEhZX1JFRyhSSzMyODhfR1JGX1NPQ19DT04xNCwgMSwgMTQpLAo+ID4gKyAgICAgW0dS Rl9EUEhZX1RYMVJYMV9CQVNFRElSXSA9IFBIWV9SRUcoUkszMjg4X0dSRl9TT0NfQ09OMTQsIDEs IDE1KSwKPiA+ICsgICAgIFtHUkZfRFBIWV9SWDBfVFVSTlJFUVVFU1RdID0gUEhZX1JFRyhSSzMy ODhfR1JGX1NPQ19DT04xNSwgNCwgMCksCj4gPiArICAgICBbR1JGX0RQSFlfVFgxUlgxX1RVUk5S RVFVRVNUXSA9IFBIWV9SRUcoUkszMjg4X0dSRl9TT0NfQ09OMTUsIDQsIDQpLAo+ID4gKyAgICAg W0dSRl9EUEhZX1RYMF9UVVJOUkVRVUVTVF0gPSBQSFlfUkVHKFJLMzI4OF9HUkZfU09DX0NPTjE1 LCAzLCA4KSwKPiA+ICsgICAgIFtHUkZfRFZQX1YxOFNFTF0gPSBQSFlfUkVHKFJLMzI4OF9HUkZf SU9fVlNFTCwgMSwgMSksCj4gPiArICAgICBbR1JGX0RQSFlfUlgwX1RFU1RET1VUXSA9IFBIWV9S RUcoUkszMjg4X0dSRl9TT0NfU1RBVFVTMjEsIDgsIDApLAo+ID4gK307Cj4gPiArCj4gPiArc3Ry dWN0IGhzZnJlcV9yYW5nZSB7Cj4gPiArICAgICB1MzIgcmFuZ2VfaDsKPiA+ICsgICAgIHU4IGNm Z19iaXQ7Cj4gPiArfTsKPiA+ICsKPiA+ICtzdHJ1Y3QgbWlwaWRwaHlfcHJpdjsKPiA+ICsKPiA+ ICtzdHJ1Y3QgZHBoeV9kcnZfZGF0YSB7Cj4gPiArICAgICBjb25zdCBjaGFyICogY29uc3QgKmNs a3M7Cj4gPiArICAgICBpbnQgbnVtX2Nsa3M7Cj4gPiArICAgICBjb25zdCBzdHJ1Y3QgaHNmcmVx X3JhbmdlICpoc2ZyZXFfcmFuZ2VzOwo+ID4gKyAgICAgaW50IG51bV9oc2ZyZXFfcmFuZ2VzOwo+ ID4gKyAgICAgY29uc3Qgc3RydWN0IGRwaHlfcmVnICpyZWdzOwo+ID4gK307Cj4gPiArCj4gPiAr c3RydWN0IHNlbnNvcl9hc3luY19zdWJkZXYgewo+ID4gKyAgICAgc3RydWN0IHY0bDJfYXN5bmNf c3ViZGV2IGFzZDsKPiA+ICsgICAgIHN0cnVjdCB2NGwyX21idXNfY29uZmlnIG1idXM7Cj4gPiAr ICAgICBpbnQgbGFuZXM7Cj4gPiArfTsKPiA+ICsKPiA+ICsjZGVmaW5lIE1BWF9EUEhZX0NMSyAg ICAgICAgIDgKPiA+ICsjZGVmaW5lIE1BWF9EUEhZX1NFTlNPUlMgICAgIDIKPiA+ICsKPiA+ICtz dHJ1Y3QgbWlwaWRwaHlfc2Vuc29yIHsKPiA+ICsgICAgIHN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7 Cj4gPiArICAgICBzdHJ1Y3QgdjRsMl9tYnVzX2NvbmZpZyBtYnVzOwo+ID4gKyAgICAgaW50IGxh bmVzOwo+ID4gK307Cj4gPiArCj4gPiArc3RydWN0IG1pcGlkcGh5X3ByaXYgewo+ID4gKyAgICAg c3RydWN0IGRldmljZSAqZGV2Owo+ID4gKyAgICAgc3RydWN0IHJlZ21hcCAqcmVnbWFwX2dyZjsK PiA+ICsgICAgIGNvbnN0IHN0cnVjdCBkcGh5X3JlZyAqZ3JmX3JlZ3M7Cj4gPiArICAgICBzdHJ1 Y3QgY2xrICpjbGtzW01BWF9EUEhZX0NMS107Cj4gPiArICAgICBjb25zdCBzdHJ1Y3QgZHBoeV9k cnZfZGF0YSAqZHJ2X2RhdGE7Cj4gPiArICAgICB1NjQgZGF0YV9yYXRlX21icHM7Cj4gPiArICAg ICBzdHJ1Y3QgdjRsMl9hc3luY19ub3RpZmllciBub3RpZmllcjsKPiA+ICsgICAgIHN0cnVjdCB2 NGwyX3N1YmRldiBzZDsKPiA+ICsgICAgIHN0cnVjdCBtZWRpYV9wYWQgcGFkc1tNSVBJX0RQSFlf U1lfUEFEU19OVU1dOwo+ID4gKyAgICAgc3RydWN0IG1pcGlkcGh5X3NlbnNvciBzZW5zb3JzW01B WF9EUEhZX1NFTlNPUlNdOwo+Cj4gU2hvdWxkIHdlIHJlYWxseSBoYXJkY29kZSB0aGUgbWF4aW11 bSBudW1iZXIgb2Ygc2Vuc29ycyA/IFdvdWxkbid0IGl0IGJlCj4gYmV0dGVyIHRvIGFsbG9jYXRl IHRoaXMgZHluYW1pY2FsbHkgPwo+Cj4gPiArICAgICBpbnQgbnVtX3NlbnNvcnM7Cj4gPiArICAg ICBib29sIGlzX3N0cmVhbWluZzsKPiA+ICsgICAgIHZvaWQgX19pb21lbSAqdHhyeF9iYXNlX2Fk ZHI7Cj4gPiArICAgICBpbnQgKCpzdHJlYW1fb24pKHN0cnVjdCBtaXBpZHBoeV9wcml2ICpwcml2 LCBzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKTsKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyBpbmxp bmUgc3RydWN0IG1pcGlkcGh5X3ByaXYgKnRvX2RwaHlfcHJpdihzdHJ1Y3QgdjRsMl9zdWJkZXYg KnN1YmRldikKPiA+ICt7Cj4gPiArICAgICByZXR1cm4gY29udGFpbmVyX29mKHN1YmRldiwgc3Ry dWN0IG1pcGlkcGh5X3ByaXYsIHNkKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGlubGluZSB2 b2lkIHdyaXRlX2dyZl9yZWcoc3RydWN0IG1pcGlkcGh5X3ByaXYgKnByaXYsCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4LCB1OCB2YWx1ZSkKPiA+ICt7Cj4gPiAr ICAgICBjb25zdCBzdHJ1Y3QgZHBoeV9yZWcgKnJlZyA9ICZwcml2LT5ncmZfcmVnc1tpbmRleF07 Cj4gPiArICAgICB1bnNpZ25lZCBpbnQgdmFsID0gSElXT1JEX1VQREFURSh2YWx1ZSwgcmVnLT5t YXNrLCByZWctPnNoaWZ0KTsKPiA+ICsKPiA+ICsgICAgIFdBUk5fT04oIXJlZy0+b2Zmc2V0KTsK PiA+ICsgICAgIHJlZ21hcF93cml0ZShwcml2LT5yZWdtYXBfZ3JmLCByZWctPm9mZnNldCwgdmFs KTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgbWlwaWRwaHkwX3dyX3JlZyhzdHJ1Y3Qg bWlwaWRwaHlfcHJpdiAqcHJpdiwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IHRl c3RfY29kZSwgdTggdGVzdF9kYXRhKQo+ID4gK3sKPiA+ICsgICAgIC8qCj4gPiArICAgICAgKiBX aXRoIHRoZSBmYWxsaW5nIGVkZ2Ugb24gVEVTVENMSywgdGhlIFRFU1RESU5bNzowXSBzaWduYWwg Y29udGVudAo+ID4gKyAgICAgICogaXMgbGF0Y2hlZCBpbnRlcm5hbGx5IGFzIHRoZSBjdXJyZW50 IHRlc3QgY29kZS4gVGVzdCBkYXRhIGlzCj4gPiArICAgICAgKiBwcm9ncmFtbWVkIGludGVybmFs bHkgYnkgcmlzaW5nIGVkZ2Ugb24gVEVTVENMSy4KPiA+ICsgICAgICAqLwo+ID4gKyAgICAgd3Jp dGVfZ3JmX3JlZyhwcml2LCBHUkZfRFBIWV9SWDBfVEVTVENMSywgMSk7Cj4gPiArICAgICB3cml0 ZV9ncmZfcmVnKHByaXYsIEdSRl9EUEhZX1JYMF9URVNURElOLCB0ZXN0X2NvZGUpOwo+ID4gKyAg ICAgd3JpdGVfZ3JmX3JlZyhwcml2LCBHUkZfRFBIWV9SWDBfVEVTVEVOLCAxKTsKPiA+ICsgICAg IHdyaXRlX2dyZl9yZWcocHJpdiwgR1JGX0RQSFlfUlgwX1RFU1RDTEssIDApOwo+ID4gKyAgICAg d3JpdGVfZ3JmX3JlZyhwcml2LCBHUkZfRFBIWV9SWDBfVEVTVEVOLCAwKTsKPiA+ICsgICAgIHdy aXRlX2dyZl9yZWcocHJpdiwgR1JGX0RQSFlfUlgwX1RFU1RESU4sIHRlc3RfZGF0YSk7Cj4gPiAr ICAgICB3cml0ZV9ncmZfcmVnKHByaXYsIEdSRl9EUEhZX1JYMF9URVNUQ0xLLCAxKTsKPiA+ICt9 Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgbWlwaWRwaHkxX3dyX3JlZyhzdHJ1Y3QgbWlwaWRwaHlf cHJpdiAqcHJpdiwgdW5zaWduZWQgY2hhciBhZGRyLAo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgdW5zaWduZWQgY2hhciBkYXRhKQo+ID4gK3sKPiA+ICsgICAgIC8qCj4gPiArICAgICAg KiBURVNURU4gPTEsVEVTVERJTj1hZGRyCj4gPiArICAgICAgKiBURVNUQ0xLPTAKPiA+ICsgICAg ICAqIFRFU1RFTiA9MCxURVNURElOPWRhdGEKPiA+ICsgICAgICAqIFRFU1RDTEs9MQo+ID4gKyAg ICAgICovCj4gPiArICAgICB3cml0ZWwoKFBIWV9URVNURU5fQUREUiB8IGFkZHIpLAo+ID4gKyAg ICAgICAgICAgIHByaXYtPnR4cnhfYmFzZV9hZGRyICsgQ1NJSE9TVF9QSFlfVEVTVF9DVFJMMSk7 Cj4gPiArICAgICB3cml0ZWwoMHgwMCwgcHJpdi0+dHhyeF9iYXNlX2FkZHIgKyBDU0lIT1NUX1BI WV9URVNUX0NUUkwwKTsKPiA+ICsgICAgIHdyaXRlbCgoUEhZX1RFU1RFTl9EQVRBIHwgZGF0YSks Cj4gPiArICAgICAgICAgICAgcHJpdi0+dHhyeF9iYXNlX2FkZHIgKyBDU0lIT1NUX1BIWV9URVNU X0NUUkwxKTsKPiA+ICsgICAgIHdyaXRlbChQSFlfVEVTVENMSywgcHJpdi0+dHhyeF9iYXNlX2Fk ZHIgKyBDU0lIT1NUX1BIWV9URVNUX0NUUkwwKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHN0 cnVjdCB2NGwyX3N1YmRldiAqZ2V0X3JlbW90ZV9zZW5zb3Ioc3RydWN0IHY0bDJfc3ViZGV2ICpz ZCkKPiA+ICt7Cj4gPiArICAgICBzdHJ1Y3QgbWVkaWFfcGFkICpsb2NhbCwgKnJlbW90ZTsKPiA+ ICsgICAgIHN0cnVjdCBtZWRpYV9lbnRpdHkgKnNlbnNvcl9tZTsKPiA+ICsKPiA+ICsgICAgIGxv Y2FsID0gJnNkLT5lbnRpdHkucGFkc1tNSVBJX0RQSFlfU1lfUEFEX1NJTktdOwo+ID4gKyAgICAg cmVtb3RlID0gbWVkaWFfZW50aXR5X3JlbW90ZV9wYWQobG9jYWwpOwo+ID4gKyAgICAgaWYgKCFy ZW1vdGUpIHsKPiA+ICsgICAgICAgICAgICAgdjRsMl93YXJuKHNkLCAiTm8gbGluayBiZXR3ZWVu IGRwaHkgYW5kIHNlbnNvclxuIik7Cj4gPiArICAgICAgICAgICAgIHJldHVybiBOVUxMOwo+ID4g KyAgICAgfQo+ID4gKwo+ID4gKyAgICAgc2Vuc29yX21lID0gbWVkaWFfZW50aXR5X3JlbW90ZV9w YWQobG9jYWwpLT5lbnRpdHk7Cj4gPiArICAgICByZXR1cm4gbWVkaWFfZW50aXR5X3RvX3Y0bDJf c3ViZGV2KHNlbnNvcl9tZSk7Cj4KPiBZb3UgY291bGQgY2FsbCB0aGlzIGF0IHRoZSBiZWdpbm5p bmcgb2YgbWlwaWRwaHlfc19zdHJlYW1fc3RhcnQoKSBhbmQKPiBwYXNzIHRoZSBzZW5zb3IgcG9p bnRlciB0byBtaXBpZHBoeV9nZXRfc2Vuc29yX2RhdGFfcmF0ZSgpIGFuZCB0aGUKPiAuc3RyZWFt X29uKCkgb3BlcmF0aW9ucyB0byBhdm9pZCBtdWx0aXBsZSBjb3N0bHkgbG9va3Vwcywgb3IgcG9z c2libHkKPiBjYWNoZSBpdCBpbiB0aGUgbWlwaWRwaHlfcHJpdiBzdHJ1Y3R1cmUgKGluIHRoYXQg Y2FzZSBJJ2QgcmVzZXQgaXQgdG8KPiBOVUxMIGF0IHN0cmVhbSBvZmYgdGltZSkuCj4KPiA+ICt9 Cj4gPiArCj4gPiArc3RhdGljIHN0cnVjdCBtaXBpZHBoeV9zZW5zb3IgKnNkX3RvX3NlbnNvcihz dHJ1Y3QgbWlwaWRwaHlfcHJpdiAqcHJpdiwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCj4gPiArewo+ID4gKyAgICAg aW50IGk7Cj4gPiArCj4gPiArICAgICBmb3IgKGkgPSAwOyBpIDwgcHJpdi0+bnVtX3NlbnNvcnM7 ICsraSkKPiA+ICsgICAgICAgICAgICAgaWYgKHByaXYtPnNlbnNvcnNbaV0uc2QgPT0gc2QpCj4g PiArICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICZwcml2LT5zZW5zb3JzW2ldOwo+ID4gKwo+ ID4gKyAgICAgcmV0dXJuIE5VTEw7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgbWlwaWRw aHlfZ2V0X3NlbnNvcl9kYXRhX3JhdGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKPiA+ICt7Cj4g PiArICAgICBzdHJ1Y3QgbWlwaWRwaHlfcHJpdiAqcHJpdiA9IHRvX2RwaHlfcHJpdihzZCk7Cj4g PiArICAgICBzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNlbnNvcl9zZCA9IGdldF9yZW1vdGVfc2Vuc29y KHNkKTsKPiA+ICsgICAgIHN0cnVjdCB2NGwyX2N0cmwgKmxpbmtfZnJlcTsKPiA+ICsgICAgIHN0 cnVjdCB2NGwyX3F1ZXJ5bWVudSBxbSA9IHsgLmlkID0gVjRMMl9DSURfTElOS19GUkVRLCB9Owo+ ID4gKyAgICAgaW50IHJldDsKPiA+ICsKPiA+ICsgICAgIGxpbmtfZnJlcSA9IHY0bDJfY3RybF9m aW5kKHNlbnNvcl9zZC0+Y3RybF9oYW5kbGVyLCBWNEwyX0NJRF9MSU5LX0ZSRVEpOwo+Cj4gVGhl IGNvcnJlY3QgY29udHJvbCBmb3IgdGhpcyBpcyBWNEwyX0NJRF9QSVhFTF9SQVRFLiBZb3Ugd2ls bCBoYXZlIHRvCj4gZGl2aWRlIGl0IGJ5IHRoZSBudW1iZXIgb2YgbGFuZXMgdG8gZ2V0IHRoZSBk YXRhIHJhdGUgcGVyIGxhbmUsIGJ1dAo+IHRoZXJlIHdpbGwgYmUgbm8gbmVlZCB0byBtdWx0aXBs eSBpdCBieSAyIGFzIGJlbG93Lgo+Cj4gPiArICAgICBpZiAoIWxpbmtfZnJlcSkgewo+ID4gKyAg ICAgICAgICAgICB2NGwyX3dhcm4oc2QsICJObyBwaXhlbCByYXRlIGNvbnRyb2wgaW4gc3ViZGV2 XG4iKTsKPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FUElQRTsKPiA+ICsgICAgIH0KPiA+ICsK PiA+ICsgICAgIHFtLmluZGV4ID0gdjRsMl9jdHJsX2dfY3RybChsaW5rX2ZyZXEpOwo+ID4gKyAg ICAgcmV0ID0gdjRsMl9xdWVyeW1lbnUoc2Vuc29yX3NkLT5jdHJsX2hhbmRsZXIsICZxbSk7Cj4g PiArICAgICBpZiAocmV0IDwgMCkgewo+ID4gKyAgICAgICAgICAgICB2NGwyX2VycihzZCwgIkZh aWxlZCB0byBnZXQgbWVudSBpdGVtXG4iKTsKPiA+ICsgICAgICAgICAgICAgcmV0dXJuIHJldDsK PiA+ICsgICAgIH0KPiA+ICsKPiA+ICsgICAgIGlmICghcW0udmFsdWUpIHsKPiA+ICsgICAgICAg ICAgICAgdjRsMl9lcnIoc2QsICJJbnZhbGlkIGxpbmtfZnJlcVxuIik7Cj4gPiArICAgICAgICAg ICAgIHJldHVybiAtRUlOVkFMOwo+ID4gKyAgICAgfQo+ID4gKyAgICAgcHJpdi0+ZGF0YV9yYXRl X21icHMgPSBxbS52YWx1ZSAqIDI7Cj4gPiArICAgICBkb19kaXYocHJpdi0+ZGF0YV9yYXRlX21i cHMsIDEwMDAgKiAxMDAwKTsKPiA+ICsKPiA+ICsgICAgIHJldHVybiAwOwo+ID4gK30KPiA+ICsK PiA+ICtzdGF0aWMgaW50IG1pcGlkcGh5X3Nfc3RyZWFtX3N0YXJ0KHN0cnVjdCB2NGwyX3N1YmRl diAqc2QpCj4gPiArewo+ID4gKyAgICAgc3RydWN0IG1pcGlkcGh5X3ByaXYgKnByaXYgPSB0b19k cGh5X3ByaXYoc2QpOwo+ID4gKyAgICAgaW50ICByZXQgPSAwOwo+ID4gKwo+ID4gKyAgICAgaWYg KHByaXYtPmlzX3N0cmVhbWluZykKPiA+ICsgICAgICAgICAgICAgcmV0dXJuIDA7Cj4gPiArCj4g PiArICAgICByZXQgPSBtaXBpZHBoeV9nZXRfc2Vuc29yX2RhdGFfcmF0ZShzZCk7Cj4gPiArICAg ICBpZiAocmV0IDwgMCkKPiA+ICsgICAgICAgICAgICAgcmV0dXJuIHJldDsKPiA+ICsKPiA+ICsg ICAgIHByaXYtPnN0cmVhbV9vbihwcml2LCBzZCk7Cj4gPiArCj4gPiArICAgICBwcml2LT5pc19z dHJlYW1pbmcgPSB0cnVlOwo+ID4gKwo+ID4gKyAgICAgcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ ID4gK3N0YXRpYyBpbnQgbWlwaWRwaHlfc19zdHJlYW1fc3RvcChzdHJ1Y3QgdjRsMl9zdWJkZXYg KnNkKQo+ID4gK3sKPiA+ICsgICAgIHN0cnVjdCBtaXBpZHBoeV9wcml2ICpwcml2ID0gdG9fZHBo eV9wcml2KHNkKTsKPiA+ICsKPiA+ICsgICAgIHByaXYtPmlzX3N0cmVhbWluZyA9IGZhbHNlOwo+ ID4gKwo+ID4gKyAgICAgcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgbWlw aWRwaHlfc19zdHJlYW0oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IG9uKQo+ID4gK3sKPiA+ ICsgICAgIGlmIChvbikKPiA+ICsgICAgICAgICAgICAgcmV0dXJuIG1pcGlkcGh5X3Nfc3RyZWFt X3N0YXJ0KHNkKTsKPiA+ICsgICAgIGVsc2UKPiA+ICsgICAgICAgICAgICAgcmV0dXJuIG1pcGlk cGh5X3Nfc3RyZWFtX3N0b3Aoc2QpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IG1pcGlk cGh5X2dfbWJ1c19jb25maWcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHY0bDJfbWJ1c19jb25maWcgKmNvbmZpZykKPiA+ ICt7Cj4gPiArICAgICBzdHJ1Y3QgbWlwaWRwaHlfcHJpdiAqcHJpdiA9IHRvX2RwaHlfcHJpdihz ZCk7Cj4gPiArICAgICBzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNlbnNvcl9zZCA9IGdldF9yZW1vdGVf c2Vuc29yKHNkKTsKPiA+ICsgICAgIHN0cnVjdCBtaXBpZHBoeV9zZW5zb3IgKnNlbnNvciA9IHNk X3RvX3NlbnNvcihwcml2LCBzZW5zb3Jfc2QpOwo+ID4gKwo+ID4gKyAgICAgKmNvbmZpZyA9IHNl bnNvci0+bWJ1czsKPiA+ICsKPiA+ICsgICAgIHJldHVybiAwOwo+ID4gK30KPgo+IFRoaXMgc2Vl bXMgbGlrZSBhIGhhY2sgOi0oCj4KPiA+ICsKPiA+ICtzdGF0aWMgaW50IG1pcGlkcGh5X3NfcG93 ZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IG9uKQo+ID4gK3sKPiA+ICsgICAgIHN0cnVj dCBtaXBpZHBoeV9wcml2ICpwcml2ID0gdG9fZHBoeV9wcml2KHNkKTsKPiA+ICsKPiA+ICsgICAg IGlmIChvbikKPiA+ICsgICAgICAgICAgICAgcmV0dXJuIHBtX3J1bnRpbWVfZ2V0X3N5bmMocHJp di0+ZGV2KTsKPiA+ICsgICAgIGVsc2UKPiA+ICsgICAgICAgICAgICAgcmV0dXJuIHBtX3J1bnRp bWVfcHV0KHByaXYtPmRldik7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgbWlwaWRwaHlf cnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKPiA+ICt7Cj4gPiArICAgICBzdHJ1 Y3QgbWVkaWFfZW50aXR5ICptZSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ID4gKyAgICAgc3Ry dWN0IHY0bDJfc3ViZGV2ICpzZCA9IG1lZGlhX2VudGl0eV90b192NGwyX3N1YmRldihtZSk7Cj4g PiArICAgICBzdHJ1Y3QgbWlwaWRwaHlfcHJpdiAqcHJpdiA9IHRvX2RwaHlfcHJpdihzZCk7Cj4g PiArICAgICBpbnQgaSwgbnVtX2Nsa3M7Cj4gPiArCj4gPiArICAgICBudW1fY2xrcyA9IHByaXYt PmRydl9kYXRhLT5udW1fY2xrczsKPiA+ICsgICAgIGZvciAoaSA9IG51bV9jbGtzIC0gMTsgaSA+ PSAwOyBpLS0pCj4gPiArICAgICAgICAgICAgIGNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LT5j bGtzW2ldKTsKPiA+ICsKPiA+ICsgICAgIHJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0 aWMgaW50IG1pcGlkcGh5X3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKPiA+ICt7 Cj4gPiArICAgICBzdHJ1Y3QgbWVkaWFfZW50aXR5ICptZSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYp Owo+ID4gKyAgICAgc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IG1lZGlhX2VudGl0eV90b192NGwy X3N1YmRldihtZSk7Cj4gPiArICAgICBzdHJ1Y3QgbWlwaWRwaHlfcHJpdiAqcHJpdiA9IHRvX2Rw aHlfcHJpdihzZCk7Cj4gPiArICAgICBpbnQgaSwgbnVtX2Nsa3MsIHJldDsKPiA+ICsKPiA+ICsg ICAgIG51bV9jbGtzID0gcHJpdi0+ZHJ2X2RhdGEtPm51bV9jbGtzOwo+ID4gKyAgICAgZm9yIChp ID0gMDsgaSA8IG51bV9jbGtzOyBpKyspIHsKPiA+ICsgICAgICAgICAgICAgcmV0ID0gY2xrX3By ZXBhcmVfZW5hYmxlKHByaXYtPmNsa3NbaV0pOwo+ID4gKyAgICAgICAgICAgICBpZiAocmV0IDwg MCkKPiA+ICsgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycjsKPiA+ICsgICAgIH0KPiA+ICsK PiA+ICsgICAgIHJldHVybiAwOwo+ID4gK2VycjoKPiA+ICsgICAgIHdoaWxlICgtLWkgPj0gMCkK PiA+ICsgICAgICAgICAgICAgY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtPmNsa3NbaV0pOwo+ ID4gKyAgICAgcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4gPiArLyogZHBoeSBhY2NlcHRzIGFs bCBmbXQvc2l6ZSBmcm9tIHNlbnNvciAqLwo+ID4gK3N0YXRpYyBpbnQgbWlwaWRwaHlfZ2V0X3Nl dF9mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCB2NGwyX3N1YmRldl9wYWRfY29uZmlnICpjZmcsCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfZm9ybWF0ICpmbXQpCj4gPiAr ewo+ID4gKyAgICAgc3RydWN0IHY0bDJfc3ViZGV2ICpzZW5zb3IgPSBnZXRfcmVtb3RlX3NlbnNv cihzZCk7Cj4gPiArCj4gPiArICAgICAvKgo+ID4gKyAgICAgICogRG8gbm90IGFsbG93IGZvcm1h dCBjaGFuZ2VzIGFuZCBqdXN0IHJlbGF5IHdoYXRldmVyCj4gPiArICAgICAgKiBzZXQgY3VycmVu dGx5IGluIHRoZSBzZW5zb3IuCj4gPiArICAgICAgKi8KPiA+ICsgICAgIHJldHVybiB2NGwyX3N1 YmRldl9jYWxsKHNlbnNvciwgcGFkLCBnZXRfZm10LCBOVUxMLCBmbXQpOwo+Cj4gSXQncyB1c2Vy c3BhY2UgcmVzcG9uc2liaWxpdHkgdG8gcHJvcGFnYXRlIGZvcm1hdHMgdGhyb3VnaCB0aGUgcGlw ZWxpbmUKPiB3aGVuIHVzaW5nIHRoZSBNQyBBUEksIHlvdSBzaG91bGRuJ3QgYWNjZXNzIHRoZSBm b3JtYXQgb2YgdGhlIHNvdXJjZQo+IHN1YmRldiBpbiB0aGlzIGRyaXZlci4KPgo+ID4gK30KPiA+ ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3BhZF9vcHMgbWlwaWRwaHlf c3ViZGV2X3BhZF9vcHMgPSB7Cj4gPiArICAgICAuc2V0X2ZtdCA9IG1pcGlkcGh5X2dldF9zZXRf Zm10LAo+ID4gKyAgICAgLmdldF9mbXQgPSBtaXBpZHBoeV9nZXRfc2V0X2ZtdCwKPiA+ICt9Owo+ ID4gKwo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgbWlwaWRw aHlfY29yZV9vcHMgPSB7Cj4gPiArICAgICAuc19wb3dlciA9IG1pcGlkcGh5X3NfcG93ZXIsCj4g PiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29w cyBtaXBpZHBoeV92aWRlb19vcHMgPSB7Cj4gPiArICAgICAuZ19tYnVzX2NvbmZpZyA9IG1pcGlk cGh5X2dfbWJ1c19jb25maWcsCj4gPiArICAgICAuc19zdHJlYW0gPSBtaXBpZHBoeV9zX3N0cmVh bSwKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3Bz IG1pcGlkcGh5X3N1YmRldl9vcHMgPSB7Cj4gPiArICAgICAuY29yZSA9ICZtaXBpZHBoeV9jb3Jl X29wcywKPiA+ICsgICAgIC52aWRlbyA9ICZtaXBpZHBoeV92aWRlb19vcHMsCj4gPiArICAgICAu cGFkID0gJm1pcGlkcGh5X3N1YmRldl9wYWRfb3BzLAo+ID4gK307Cj4gPiArCj4gPiArLyogVGhl c2UgdGFibGVzIG11c3QgYmUgc29ydGVkIGJ5IC5yYW5nZV9oIGFzY2VuZGluZy4gKi8KPiA+ICtz dGF0aWMgY29uc3Qgc3RydWN0IGhzZnJlcV9yYW5nZSByazMyODhfbWlwaWRwaHlfaHNmcmVxX3Jh bmdlc1tdID0gewo+ID4gKyAgICAgeyAgODksIDB4MDB9LCB7ICA5OSwgMHgxMH0sIHsgMTA5LCAw eDIwfSwgeyAxMjksIDB4MDF9LAo+ID4gKyAgICAgeyAxMzksIDB4MTF9LCB7IDE0OSwgMHgyMX0s IHsgMTY5LCAweDAyfSwgeyAxNzksIDB4MTJ9LAo+ID4gKyAgICAgeyAxOTksIDB4MjJ9LCB7IDIx OSwgMHgwM30sIHsgMjM5LCAweDEzfSwgeyAyNDksIDB4MjN9LAo+ID4gKyAgICAgeyAyNjksIDB4 MDR9LCB7IDI5OSwgMHgxNH0sIHsgMzI5LCAweDA1fSwgeyAzNTksIDB4MTV9LAo+ID4gKyAgICAg eyAzOTksIDB4MjV9LCB7IDQ0OSwgMHgwNn0sIHsgNDk5LCAweDE2fSwgeyA1NDksIDB4MDd9LAo+ ID4gKyAgICAgeyA1OTksIDB4MTd9LCB7IDY0OSwgMHgwOH0sIHsgNjk5LCAweDE4fSwgeyA3NDks IDB4MDl9LAo+ID4gKyAgICAgeyA3OTksIDB4MTl9LCB7IDg0OSwgMHgyOX0sIHsgODk5LCAweDM5 fSwgeyA5NDksIDB4MGF9LAo+ID4gKyAgICAgeyA5OTksIDB4MWF9Cj4gPiArfTsKPiA+ICsKPiA+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IGhzZnJlcV9yYW5nZSByazMzOTlfbWlwaWRwaHlfaHNmcmVx X3Jhbmdlc1tdID0gewo+ID4gKyAgICAgeyAgODksIDB4MDB9LCB7ICA5OSwgMHgxMH0sIHsgMTA5 LCAweDIwfSwgeyAxMjksIDB4MDF9LAo+ID4gKyAgICAgeyAxMzksIDB4MTF9LCB7IDE0OSwgMHgy MX0sIHsgMTY5LCAweDAyfSwgeyAxNzksIDB4MTJ9LAo+ID4gKyAgICAgeyAxOTksIDB4MjJ9LCB7 IDIxOSwgMHgwM30sIHsgMjM5LCAweDEzfSwgeyAyNDksIDB4MjN9LAo+ID4gKyAgICAgeyAyNjks IDB4MDR9LCB7IDI5OSwgMHgxNH0sIHsgMzI5LCAweDA1fSwgeyAzNTksIDB4MTV9LAo+ID4gKyAg ICAgeyAzOTksIDB4MjV9LCB7IDQ0OSwgMHgwNn0sIHsgNDk5LCAweDE2fSwgeyA1NDksIDB4MDd9 LAo+ID4gKyAgICAgeyA1OTksIDB4MTd9LCB7IDY0OSwgMHgwOH0sIHsgNjk5LCAweDE4fSwgeyA3 NDksIDB4MDl9LAo+ID4gKyAgICAgeyA3OTksIDB4MTl9LCB7IDg0OSwgMHgyOX0sIHsgODk5LCAw eDM5fSwgeyA5NDksIDB4MGF9LAo+ID4gKyAgICAgeyA5OTksIDB4MWF9LCB7MTA0OSwgMHgyYX0s IHsxMDk5LCAweDNhfSwgezExNDksIDB4MGJ9LAo+ID4gKyAgICAgezExOTksIDB4MWJ9LCB7MTI0 OSwgMHgyYn0sIHsxMjk5LCAweDNifSwgezEzNDksIDB4MGN9LAo+ID4gKyAgICAgezEzOTksIDB4 MWN9LCB7MTQ0OSwgMHgyY30sIHsxNTAwLCAweDNjfQo+ID4gK307Cj4gPiArCj4gPiArc3RhdGlj IGNvbnN0IGNoYXIgKiBjb25zdCByazMzOTlfbWlwaWRwaHlfY2xrc1tdID0gewo+ID4gKyAgICAg ImRwaHktcmVmIiwKPiA+ICsgICAgICJkcGh5LWNmZyIsCj4gPiArICAgICAiZ3JmIiwKPiA+ICt9 Owo+ID4gKwo+ID4gK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcmszMjg4X21pcGlkcGh5X2Ns a3NbXSA9IHsKPiA+ICsgICAgICJkcGh5LXJlZiIsCj4gPiArICAgICAicGNsayIsCj4gPiArfTsK PiA+ICsKPiA+ICtzdGF0aWMgaW50IG1pcGlkcGh5X3J4X3N0cmVhbV9vbihzdHJ1Y3QgbWlwaWRw aHlfcHJpdiAqcHJpdiwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg djRsMl9zdWJkZXYgKnNkKQo+ID4gK3sKPiA+ICsgICAgIHN0cnVjdCB2NGwyX3N1YmRldiAqc2Vu c29yX3NkID0gZ2V0X3JlbW90ZV9zZW5zb3Ioc2QpOwo+ID4gKyAgICAgc3RydWN0IG1pcGlkcGh5 X3NlbnNvciAqc2Vuc29yID0gc2RfdG9fc2Vuc29yKHByaXYsIHNlbnNvcl9zZCk7Cj4gPiArICAg ICBjb25zdCBzdHJ1Y3QgZHBoeV9kcnZfZGF0YSAqZHJ2X2RhdGEgPSBwcml2LT5kcnZfZGF0YTsK PiA+ICsgICAgIGNvbnN0IHN0cnVjdCBoc2ZyZXFfcmFuZ2UgKmhzZnJlcV9yYW5nZXMgPSBkcnZf ZGF0YS0+aHNmcmVxX3JhbmdlczsKPiA+ICsgICAgIGludCBudW1faHNmcmVxX3JhbmdlcyA9IGRy dl9kYXRhLT5udW1faHNmcmVxX3JhbmdlczsKPiA+ICsgICAgIGludCBpLCBoc2ZyZXEgPSAwOwo+ ID4gKwo+ID4gKyAgICAgZm9yIChpID0gMDsgaSA8IG51bV9oc2ZyZXFfcmFuZ2VzOyBpKyspIHsK PiA+ICsgICAgICAgICAgICAgaWYgKGhzZnJlcV9yYW5nZXNbaV0ucmFuZ2VfaCA+PSBwcml2LT5k YXRhX3JhdGVfbWJwcykgewo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGhzZnJlcSA9IGhzZnJl cV9yYW5nZXNbaV0uY2ZnX2JpdDsKPiA+ICsgICAgICAgICAgICAgICAgICAgICBicmVhazsKPiA+ ICsgICAgICAgICAgICAgfQo+ID4gKyAgICAgfQo+ID4gKyAgICAgd3JpdGVfZ3JmX3JlZyhwcml2 LCBHUkZfQ09OX0lTUF9EUEhZX1NFTCwgMCk7Cj4gPiArICAgICB3cml0ZV9ncmZfcmVnKHByaXYs IEdSRl9EUEhZX1JYMF9GT1JDRVJYTU9ERSwgMCk7Cj4gPiArICAgICB3cml0ZV9ncmZfcmVnKHBy aXYsIEdSRl9EUEhZX1JYMF9GT1JDRVRYU1RPUE1PREUsIDApOwo+ID4gKyAgICAgLyogRGlzYWJs ZSBsYW4gdHVybiBhcm91bmQsIHdoaWNoIGlzIGlnbm9yZWQgaW4gcmVjZWl2ZSBtb2RlICovCj4g PiArICAgICB3cml0ZV9ncmZfcmVnKHByaXYsIEdSRl9EUEhZX1JYMF9UVVJOUkVRVUVTVCwgMCk7 Cj4gPiArICAgICB3cml0ZV9ncmZfcmVnKHByaXYsIEdSRl9EUEhZX1JYMF9UVVJORElTQUJMRSwg MHhmKTsKPiA+ICsKPiA+ICsgICAgIHdyaXRlX2dyZl9yZWcocHJpdiwgR1JGX0RQSFlfUlgwX0VO QUJMRSwgR0VOTUFTSyhzZW5zb3ItPmxhbmVzIC0gMSwgMCkpOwo+ID4gKwo+ID4gKyAgICAgLyog ZHBoeSBzdGFydCAqLwo+ID4gKyAgICAgd3JpdGVfZ3JmX3JlZyhwcml2LCBHUkZfRFBIWV9SWDBf VEVTVENMSywgMSk7Cj4gPiArICAgICB3cml0ZV9ncmZfcmVnKHByaXYsIEdSRl9EUEhZX1JYMF9U RVNUQ0xSLCAxKTsKPiA+ICsgICAgIHVzbGVlcF9yYW5nZSgxMDAsIDE1MCk7Cj4gPiArICAgICB3 cml0ZV9ncmZfcmVnKHByaXYsIEdSRl9EUEhZX1JYMF9URVNUQ0xSLCAwKTsKPiA+ICsgICAgIHVz bGVlcF9yYW5nZSgxMDAsIDE1MCk7Cj4gPiArCj4gPiArICAgICAvKiBzZXQgY2xvY2sgbGFuZSAq Lwo+ID4gKyAgICAgLyogSFMgaHNmcmVxX3JhbmdlICYgbGFuZSAwICBzZXR0bGUgYnlwYXNzICov Cj4gPiArICAgICBtaXBpZHBoeTBfd3JfcmVnKHByaXYsIENMT0NLX0xBTkVfSFNfUlhfQ09OVFJP TCwgMCk7Cj4gPiArICAgICAvKiBIUyBSWCBDb250cm9sIG9mIGxhbmUwICovCj4gPiArICAgICBt aXBpZHBoeTBfd3JfcmVnKHByaXYsIExBTkUwX0hTX1JYX0NPTlRST0wsIGhzZnJlcSA8PCAxKTsK PiA+ICsgICAgIC8qIEhTIFJYIENvbnRyb2wgb2YgbGFuZTEgKi8KPiA+ICsgICAgIG1pcGlkcGh5 MF93cl9yZWcocHJpdiwgTEFORTFfSFNfUlhfQ09OVFJPTCwgMCk7Cj4gPiArICAgICAvKiBIUyBS WCBDb250cm9sIG9mIGxhbmUyICovCj4gPiArICAgICBtaXBpZHBoeTBfd3JfcmVnKHByaXYsIExB TkUyX0hTX1JYX0NPTlRST0wsIDApOwo+ID4gKyAgICAgLyogSFMgUlggQ29udHJvbCBvZiBsYW5l MyAqLwo+ID4gKyAgICAgbWlwaWRwaHkwX3dyX3JlZyhwcml2LCBMQU5FM19IU19SWF9DT05UUk9M LCAwKTsKPiA+ICsgICAgIC8qIEhTIFJYIERhdGEgTGFuZXMgU2V0dGxlIFN0YXRlIFRpbWUgQ29u dHJvbCAqLwo+ID4gKyAgICAgbWlwaWRwaHkwX3dyX3JlZyhwcml2LCBIU19SWF9EQVRBX0xBTkVT X1RIU19TRVRUTEVfQ09OVFJPTCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgVEhTX1NFVFRM RV9DT1VOVEVSX1RIUkVTSE9MRCk7Cj4gPiArCj4gPiArICAgICAvKiBOb3JtYWwgb3BlcmF0aW9u ICovCj4gPiArICAgICBtaXBpZHBoeTBfd3JfcmVnKHByaXYsIDB4MCwgMCk7Cj4gPiArCj4gPiAr ICAgICByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBtaXBpZHBoeV90eHJ4 X3N0cmVhbV9vbihzdHJ1Y3QgbWlwaWRwaHlfcHJpdiAqcHJpdiwKPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCj4gPiArewo+ID4gKyAg ICAgc3RydWN0IHY0bDJfc3ViZGV2ICpzZW5zb3Jfc2QgPSBnZXRfcmVtb3RlX3NlbnNvcihzZCk7 Cj4gPiArICAgICBzdHJ1Y3QgbWlwaWRwaHlfc2Vuc29yICpzZW5zb3IgPSBzZF90b19zZW5zb3Io cHJpdiwgc2Vuc29yX3NkKTsKPiA+ICsgICAgIGNvbnN0IHN0cnVjdCBkcGh5X2Rydl9kYXRhICpk cnZfZGF0YSA9IHByaXYtPmRydl9kYXRhOwo+ID4gKyAgICAgY29uc3Qgc3RydWN0IGhzZnJlcV9y YW5nZSAqaHNmcmVxX3JhbmdlcyA9IGRydl9kYXRhLT5oc2ZyZXFfcmFuZ2VzOwo+ID4gKyAgICAg aW50IG51bV9oc2ZyZXFfcmFuZ2VzID0gZHJ2X2RhdGEtPm51bV9oc2ZyZXFfcmFuZ2VzOwo+ID4g KyAgICAgaW50IGksIGhzZnJlcSA9IDA7Cj4gPiArCj4gPiArICAgICBmb3IgKGkgPSAwOyBpIDwg bnVtX2hzZnJlcV9yYW5nZXM7IGkrKykgewo+ID4gKyAgICAgICAgICAgICBpZiAoaHNmcmVxX3Jh bmdlc1tpXS5yYW5nZV9oID49IHByaXYtPmRhdGFfcmF0ZV9tYnBzKSB7Cj4gPiArICAgICAgICAg ICAgICAgICAgICAgaHNmcmVxID0gaHNmcmVxX3Jhbmdlc1tpXS5jZmdfYml0Owo+ID4gKyAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOwo+ID4gKyAgICAgICAgICAgICB9Cj4gPiArICAgICB9Cj4g PiArICAgICB3cml0ZV9ncmZfcmVnKHByaXYsIEdSRl9DT05fSVNQX0RQSFlfU0VMLCAxKTsKPiA+ ICsgICAgIHdyaXRlX2dyZl9yZWcocHJpdiwgR1JGX0RTSV9DU0lfVEVTVEJVU19TRUwsIDEpOwo+ ID4gKyAgICAgd3JpdGVfZ3JmX3JlZyhwcml2LCBHUkZfRFBIWV9SWDFfU1JDX1NFTCwgMSk7Cj4g PiArICAgICB3cml0ZV9ncmZfcmVnKHByaXYsIEdSRl9EUEhZX1RYMVJYMV9NQVNURVJTTEFWRVos IDApOwo+ID4gKyAgICAgd3JpdGVfZ3JmX3JlZyhwcml2LCBHUkZfRFBIWV9UWDFSWDFfQkFTRURJ UiwgMSk7Cj4gPiArICAgICAvKiBEaXNhYmxlIGxhbiB0dXJuIGFyb3VuZCwgd2hpY2ggaXMgaWdu b3JlZCBpbiByZWNlaXZlIG1vZGUgKi8KPiA+ICsgICAgIHdyaXRlX2dyZl9yZWcocHJpdiwgR1JG X0RQSFlfVFgxUlgxX0ZPUkNFUlhNT0RFLCAwKTsKPiA+ICsgICAgIHdyaXRlX2dyZl9yZWcocHJp diwgR1JGX0RQSFlfVFgxUlgxX0ZPUkNFVFhTVE9QTU9ERSwgMCk7Cj4gPiArICAgICB3cml0ZV9n cmZfcmVnKHByaXYsIEdSRl9EUEhZX1RYMVJYMV9UVVJOUkVRVUVTVCwgMCk7Cj4gPiArICAgICB3 cml0ZV9ncmZfcmVnKHByaXYsIEdSRl9EUEhZX1RYMVJYMV9UVVJORElTQUJMRSwgMHhmKTsKPiA+ ICsgICAgIHdyaXRlX2dyZl9yZWcocHJpdiwgR1JGX0RQSFlfVFgxUlgxX0VOQUJMRSwKPiA+ICsg ICAgICAgICAgICAgICAgICAgR0VOTUFTSyhzZW5zb3ItPmxhbmVzIC0gMSwgMCkpOwo+ID4gKyAg ICAgLyogZHBoeSBzdGFydCAqLwo+ID4gKyAgICAgd3JpdGVsKDAsIHByaXYtPnR4cnhfYmFzZV9h ZGRyICsgQ1NJSE9TVF9QSFlfU0hVVERPV05aKTsKPiA+ICsgICAgIHdyaXRlbCgwLCBwcml2LT50 eHJ4X2Jhc2VfYWRkciArIENTSUhPU1RfRFBIWV9SU1RaKTsKPiA+ICsgICAgIHdyaXRlbChQSFlf VEVTVENMSywgcHJpdi0+dHhyeF9iYXNlX2FkZHIgKyBDU0lIT1NUX1BIWV9URVNUX0NUUkwwKTsK PiA+ICsgICAgIHdyaXRlbChQSFlfVEVTVENMUiwgcHJpdi0+dHhyeF9iYXNlX2FkZHIgKyBDU0lI T1NUX1BIWV9URVNUX0NUUkwwKTsKPiA+ICsgICAgIHVzbGVlcF9yYW5nZSgxMDAsIDE1MCk7Cj4g PiArICAgICB3cml0ZWwoUEhZX1RFU1RDTEssIHByaXYtPnR4cnhfYmFzZV9hZGRyICsgQ1NJSE9T VF9QSFlfVEVTVF9DVFJMMCk7Cj4gPiArICAgICB1c2xlZXBfcmFuZ2UoMTAwLCAxNTApOwo+ID4g Kwo+ID4gKyAgICAgLyogc2V0IGNsb2NrIGxhbmUgKi8KPiA+ICsgICAgIG1pcGlkcGh5MV93cl9y ZWcocHJpdiwgQ0xPQ0tfTEFORV9IU19SWF9DT05UUk9MLCAwKTsKPiA+ICsgICAgIG1pcGlkcGh5 MV93cl9yZWcocHJpdiwgTEFORTBfSFNfUlhfQ09OVFJPTCwgaHNmcmVxIDw8IDEpOwo+ID4gKyAg ICAgbWlwaWRwaHkxX3dyX3JlZyhwcml2LCBMQU5FMV9IU19SWF9DT05UUk9MLCAwKTsKPiA+ICsg ICAgIG1pcGlkcGh5MV93cl9yZWcocHJpdiwgTEFORTJfSFNfUlhfQ09OVFJPTCwgMCk7Cj4gPiAr ICAgICBtaXBpZHBoeTFfd3JfcmVnKHByaXYsIExBTkUzX0hTX1JYX0NPTlRST0wsIDApOwo+ID4g KyAgICAgLyogSFMgUlggRGF0YSBMYW5lcyBTZXR0bGUgU3RhdGUgVGltZSBDb250cm9sICovCj4g PiArICAgICBtaXBpZHBoeTFfd3JfcmVnKHByaXYsIEhTX1JYX0RBVEFfTEFORVNfVEhTX1NFVFRM RV9DT05UUk9MLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICBUSFNfU0VUVExFX0NPVU5URVJf VEhSRVNIT0xEKTsKPiA+ICsKPiA+ICsgICAgIC8qIE5vcm1hbCBvcGVyYXRpb24gKi8KPiA+ICsg ICAgIG1pcGlkcGh5MV93cl9yZWcocHJpdiwgMHgwLCAwKTsKPiA+ICsKPiA+ICsgICAgIHJldHVy biAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRwaHlfZHJ2X2RhdGEg cmszMjg4X21pcGlkcGh5X2Rydl9kYXRhID0gewo+ID4gKyAgICAgLmNsa3MgPSByazMyODhfbWlw aWRwaHlfY2xrcywKPiA+ICsgICAgIC5udW1fY2xrcyA9IEFSUkFZX1NJWkUocmszMjg4X21pcGlk cGh5X2Nsa3MpLAo+ID4gKyAgICAgLmhzZnJlcV9yYW5nZXMgPSByazMyODhfbWlwaWRwaHlfaHNm cmVxX3JhbmdlcywKPiA+ICsgICAgIC5udW1faHNmcmVxX3JhbmdlcyA9IEFSUkFZX1NJWkUocmsz Mjg4X21pcGlkcGh5X2hzZnJlcV9yYW5nZXMpLAo+ID4gKyAgICAgLnJlZ3MgPSByazMyODhfZ3Jm X2RwaHlfcmVncywKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHBoeV9k cnZfZGF0YSByazMzOTlfbWlwaWRwaHlfZHJ2X2RhdGEgPSB7Cj4gPiArICAgICAuY2xrcyA9IHJr MzM5OV9taXBpZHBoeV9jbGtzLAo+ID4gKyAgICAgLm51bV9jbGtzID0gQVJSQVlfU0laRShyazMz OTlfbWlwaWRwaHlfY2xrcyksCj4gPiArICAgICAuaHNmcmVxX3JhbmdlcyA9IHJrMzM5OV9taXBp ZHBoeV9oc2ZyZXFfcmFuZ2VzLAo+ID4gKyAgICAgLm51bV9oc2ZyZXFfcmFuZ2VzID0gQVJSQVlf U0laRShyazMzOTlfbWlwaWRwaHlfaHNmcmVxX3JhbmdlcyksCj4gPiArICAgICAucmVncyA9IHJr MzM5OV9ncmZfZHBoeV9yZWdzLAo+ID4gK307Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHN0cnVj dCBvZl9kZXZpY2VfaWQgcm9ja2NoaXBfbWlwaWRwaHlfbWF0Y2hfaWRbXSA9IHsKPiA+ICsgICAg IHsKPiA+ICsgICAgICAgICAgICAgLmNvbXBhdGlibGUgPSAicm9ja2NoaXAscmszMzk5LW1pcGkt ZHBoeSIsCj4gPiArICAgICAgICAgICAgIC5kYXRhID0gJnJrMzM5OV9taXBpZHBoeV9kcnZfZGF0 YSwKPiA+ICsgICAgIH0sCj4gPiArICAgICB7Cj4gPiArICAgICAgICAgICAgIC5jb21wYXRpYmxl ID0gInJvY2tjaGlwLHJrMzI4OC1taXBpLWRwaHkiLAo+ID4gKyAgICAgICAgICAgICAuZGF0YSA9 ICZyazMyODhfbWlwaWRwaHlfZHJ2X2RhdGEsCj4gPiArICAgICB9LAo+ID4gKyAgICAge30KPiA+ ICt9Owo+ID4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHJvY2tjaGlwX21pcGlkcGh5X21hdGNo X2lkKTsKPgo+IFlvdSBjYW4gbW9kZSB0aGlzIGp1c3QgYWJvdmUgdGhlIHByb2JlIGZ1bmN0aW9u IHRvIGdyb3VwIGl0IHdpdGggdGhlCj4gY29kZSB0aGF0IHVzZXMgaXQuCj4KPiA+ICsKPiA+ICsv KiBUaGUgLmJvdW5kKCkgbm90aWZpZXIgY2FsbGJhY2sgd2hlbiBhIG1hdGNoIGlzIGZvdW5kICov Cj4gPiArc3RhdGljIGludAo+ID4gK3JvY2tjaGlwX21pcGlkcGh5X25vdGlmaWVyX2JvdW5kKHN0 cnVjdCB2NGwyX2FzeW5jX25vdGlmaWVyICpub3RpZmllciwKPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCB2NGwyX2FzeW5jX3N1YmRldiAqYXNkKQo+ID4gK3sKPiA+ ICsgICAgIHN0cnVjdCBtaXBpZHBoeV9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKG5vdGlmaWVy LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IG1pcGlkcGh5X3ByaXYsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBub3RpZmllcik7Cj4gPiArICAgICBzdHJ1Y3Qgc2Vuc29yX2FzeW5jX3N1 YmRldiAqc19hc2QgPSBjb250YWluZXJfb2YoYXNkLAo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2Vuc29yX2FzeW5jX3N1YmRldiwgYXNkKTsKPiA+ICsg ICAgIHN0cnVjdCBtaXBpZHBoeV9zZW5zb3IgKnNlbnNvcjsKPiA+ICsgICAgIHVuc2lnbmVkIGlu dCBwYWQsIHJldDsKPiA+ICsKPiA+ICsgICAgIGlmIChwcml2LT5udW1fc2Vuc29ycyA9PSBBUlJB WV9TSVpFKHByaXYtPnNlbnNvcnMpKQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVCVVNZOwo+ ID4gKwo+ID4gKyAgICAgc2Vuc29yID0gJnByaXYtPnNlbnNvcnNbcHJpdi0+bnVtX3NlbnNvcnMr K107Cj4gPiArICAgICBzZW5zb3ItPmxhbmVzID0gc19hc2QtPmxhbmVzOwo+ID4gKyAgICAgc2Vu c29yLT5tYnVzID0gc19hc2QtPm1idXM7Cj4gPiArICAgICBzZW5zb3ItPnNkID0gc2Q7Cj4gPiAr Cj4gPiArICAgICBmb3IgKHBhZCA9IDA7IHBhZCA8IHNlbnNvci0+c2QtPmVudGl0eS5udW1fcGFk czsgcGFkKyspCj4gPiArICAgICAgICAgICAgIGlmIChzZW5zb3ItPnNkLT5lbnRpdHkucGFkc1tw YWRdLmZsYWdzCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgTUVE SUFfUEFEX0ZMX1NPVVJDRSkKPiA+ICsgICAgICAgICAgICAgICAgICAgICBicmVhazsKPiA+ICsK PiA+ICsgICAgIGlmIChwYWQgPT0gc2Vuc29yLT5zZC0+ZW50aXR5Lm51bV9wYWRzKSB7Cj4gPiAr ICAgICAgICAgICAgIGRldl9lcnIocHJpdi0+ZGV2LAo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICJmYWlsZWQgdG8gZmluZCBzcmMgcGFkIGZvciAlc1xuIiwKPiA+ICsgICAgICAgICAgICAgICAg ICAgICBzZW5zb3ItPnNkLT5uYW1lKTsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1F TlhJTzsKPiA+ICsgICAgIH0KPiA+ICsKPiA+ICsgICAgIHJldCA9IG1lZGlhX2NyZWF0ZV9wYWRf bGluaygKPiA+ICsgICAgICAgICAgICAgICAgICAgICAmc2Vuc29yLT5zZC0+ZW50aXR5LCBwYWQs Cj4gPiArICAgICAgICAgICAgICAgICAgICAgJnByaXYtPnNkLmVudGl0eSwgTUlQSV9EUEhZX1NZ X1BBRF9TSU5LLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHByaXYtPm51bV9zZW5zb3JzICE9 IDEgPyAwIDogTUVESUFfTE5LX0ZMX0VOQUJMRUQpOwo+ID4gKyAgICAgaWYgKHJldCkgewo+ID4g KyAgICAgICAgICAgICBkZXZfZXJyKHByaXYtPmRldiwKPiA+ICsgICAgICAgICAgICAgICAgICAg ICAiZmFpbGVkIHRvIGNyZWF0ZSBsaW5rIGZvciAlc1xuIiwKPiA+ICsgICAgICAgICAgICAgICAg ICAgICBzZW5zb3ItPnNkLT5uYW1lKTsKPiA+ICsgICAgICAgICAgICAgcmV0dXJuIHJldDsKPiA+ ICsgICAgIH0KPiA+ICsKPiA+ICsgICAgIHJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICsvKiBU aGUgLnVuYmluZCBjYWxsYmFjayAqLwo+ID4gK3N0YXRpYyB2b2lkCj4gPiArcm9ja2NoaXBfbWlw aWRwaHlfbm90aWZpZXJfdW5iaW5kKHN0cnVjdCB2NGwyX2FzeW5jX25vdGlmaWVyICpub3RpZmll ciwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHY0bDJfc3ViZGV2 ICpzZCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHY0bDJfYXN5 bmNfc3ViZGV2ICphc2QpCj4gPiArewo+ID4gKyAgICAgc3RydWN0IG1pcGlkcGh5X3ByaXYgKnBy aXYgPSBjb250YWluZXJfb2Yobm90aWZpZXIsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbWlwaWRwaHlfcHJpdiwKPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyKTsKPiA+ICsg ICAgIHN0cnVjdCBtaXBpZHBoeV9zZW5zb3IgKnNlbnNvciA9IHNkX3RvX3NlbnNvcihwcml2LCBz ZCk7Cj4gPiArCj4gPiArICAgICBzZW5zb3ItPnNkID0gTlVMTDsKPiA+ICt9Cj4gPiArCj4gPiAr c3RhdGljIGNvbnN0IHN0cnVjdAo+ID4gK3Y0bDJfYXN5bmNfbm90aWZpZXJfb3BlcmF0aW9ucyBy b2NrY2hpcF9taXBpZHBoeV9hc3luY19vcHMgPSB7Cj4gPiArICAgICAuYm91bmQgPSByb2NrY2hp cF9taXBpZHBoeV9ub3RpZmllcl9ib3VuZCwKPiA+ICsgICAgIC51bmJpbmQgPSByb2NrY2hpcF9t aXBpZHBoeV9ub3RpZmllcl91bmJpbmQsCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgaW50IHJv Y2tjaGlwX21pcGlkcGh5X2Z3bm9kZV9wYXJzZShzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHY0bDJfZndub2RlX2Vu ZHBvaW50ICp2ZXAsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3RydWN0IHY0bDJfYXN5bmNfc3ViZGV2ICphc2QpCj4gPiArewo+ID4gKyAgICAgc3RydWN0IHNl bnNvcl9hc3luY19zdWJkZXYgKnNfYXNkID0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBjb250 YWluZXJfb2YoYXNkLCBzdHJ1Y3Qgc2Vuc29yX2FzeW5jX3N1YmRldiwgYXNkKTsKPiA+ICsgICAg IHN0cnVjdCB2NGwyX21idXNfY29uZmlnICpjb25maWcgPSAmc19hc2QtPm1idXM7Cj4gPiArCj4g PiArICAgICBpZiAodmVwLT5idXNfdHlwZSAhPSBWNEwyX01CVVNfQ1NJMikgewo+ID4gKyAgICAg ICAgICAgICBkZXZfZXJyKGRldiwgIk9ubHkgQ1NJMiBidXMgdHlwZSBpcyBjdXJyZW50bHkgc3Vw cG9ydGVkXG4iKTsKPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gPiArICAgICB9 Cj4gPiArCj4gPiArICAgICBpZiAodmVwLT5iYXNlLnBvcnQgIT0gMCkgewo+ID4gKyAgICAgICAg ICAgICBkZXZfZXJyKGRldiwgIlRoZSBQSFkgaGFzIG9ubHkgcG9ydCAwXG4iKTsKPiA+ICsgICAg ICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gPiArICAgICB9Cj4gPiArCj4gPiArICAgICBjb25m aWctPnR5cGUgPSBWNEwyX01CVVNfQ1NJMjsKPiA+ICsgICAgIGNvbmZpZy0+ZmxhZ3MgPSB2ZXAt PmJ1cy5taXBpX2NzaTIuZmxhZ3M7Cj4gPiArICAgICBzX2FzZC0+bGFuZXMgPSB2ZXAtPmJ1cy5t aXBpX2NzaTIubnVtX2RhdGFfbGFuZXM7Cj4gPiArCj4gPiArICAgICBzd2l0Y2ggKHZlcC0+YnVz Lm1pcGlfY3NpMi5udW1fZGF0YV9sYW5lcykgewo+ID4gKyAgICAgY2FzZSAxOgo+ID4gKyAgICAg ICAgICAgICBjb25maWctPmZsYWdzIHw9IFY0TDJfTUJVU19DU0kyXzFfTEFORTsKPiA+ICsgICAg ICAgICAgICAgYnJlYWs7Cj4gPiArICAgICBjYXNlIDI6Cj4gPiArICAgICAgICAgICAgIGNvbmZp Zy0+ZmxhZ3MgfD0gVjRMMl9NQlVTX0NTSTJfMl9MQU5FOwo+ID4gKyAgICAgICAgICAgICBicmVh azsKPiA+ICsgICAgIGNhc2UgMzoKPiA+ICsgICAgICAgICAgICAgY29uZmlnLT5mbGFncyB8PSBW NEwyX01CVVNfQ1NJMl8zX0xBTkU7Cj4gPiArICAgICAgICAgICAgIGJyZWFrOwo+ID4gKyAgICAg Y2FzZSA0Ogo+ID4gKyAgICAgICAgICAgICBjb25maWctPmZsYWdzIHw9IFY0TDJfTUJVU19DU0ky XzRfTEFORTsKPiA+ICsgICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAgICBkZWZhdWx0Ogo+ID4g KyAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPiA+ICsgICAgIH0KPiA+ICsKPiA+ICsgICAg IHJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IHJvY2tjaGlwX21pcGlkcGh5 X21lZGlhX2luaXQoc3RydWN0IG1pcGlkcGh5X3ByaXYgKnByaXYpCj4gPiArewo+ID4gKyAgICAg aW50IHJldDsKPiA+ICsKPiA+ICsgICAgIHByaXYtPnBhZHNbTUlQSV9EUEhZX1NZX1BBRF9TT1VS Q0VdLmZsYWdzID0KPiA+ICsgICAgICAgICAgICAgTUVESUFfUEFEX0ZMX1NPVVJDRSB8IE1FRElB X1BBRF9GTF9NVVNUX0NPTk5FQ1Q7Cj4gPiArICAgICBwcml2LT5wYWRzW01JUElfRFBIWV9TWV9Q QURfU0lOS10uZmxhZ3MgPQo+ID4gKyAgICAgICAgICAgICBNRURJQV9QQURfRkxfU0lOSyB8IE1F RElBX1BBRF9GTF9NVVNUX0NPTk5FQ1Q7Cj4gPiArCj4gPiArICAgICByZXQgPSBtZWRpYV9lbnRp dHlfcGFkc19pbml0KCZwcml2LT5zZC5lbnRpdHksCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBNSVBJX0RQSFlfU1lfUEFEU19OVU0sIHByaXYtPnBhZHMpOwo+ID4gKyAgICAgaWYg KHJldCA8IDApCj4gPiArICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gPiArCj4gPiArICAgICBy ZXQgPSB2NGwyX2FzeW5jX25vdGlmaWVyX3BhcnNlX2Z3bm9kZV9lbmRwb2ludHNfYnlfcG9ydCgK PiA+ICsgICAgICAgICAgICAgcHJpdi0+ZGV2LCAmcHJpdi0+bm90aWZpZXIsCj4gPiArICAgICAg ICAgICAgIHNpemVvZihzdHJ1Y3Qgc2Vuc29yX2FzeW5jX3N1YmRldiksIDAsCj4gPiArICAgICAg ICAgICAgIHJvY2tjaGlwX21pcGlkcGh5X2Z3bm9kZV9wYXJzZSk7Cj4gPiArICAgICBpZiAocmV0 IDwgMCkKPiA+ICsgICAgICAgICAgICAgcmV0dXJuIHJldDsKPiA+ICsKPiA+ICsgICAgIGlmICgh cHJpdi0+bm90aWZpZXIubnVtX3N1YmRldnMpCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRU5P REVWOyAvKiBubyBlbmRwb2ludCAqLwo+ID4gKwo+ID4gKyAgICAgcHJpdi0+c2Quc3ViZGV2X25v dGlmaWVyID0gJnByaXYtPm5vdGlmaWVyOwo+ID4gKyAgICAgcHJpdi0+bm90aWZpZXIub3BzID0g JnJvY2tjaGlwX21pcGlkcGh5X2FzeW5jX29wczsKPiA+ICsgICAgIHJldCA9IHY0bDJfYXN5bmNf c3ViZGV2X25vdGlmaWVyX3JlZ2lzdGVyKCZwcml2LT5zZCwgJnByaXYtPm5vdGlmaWVyKTsKPiA+ ICsgICAgIGlmIChyZXQpIHsKPiA+ICsgICAgICAgICAgICAgZGV2X2Vycihwcml2LT5kZXYsCj4g PiArICAgICAgICAgICAgICAgICAgICAgImZhaWxlZCB0byByZWdpc3RlciBhc3luYyBub3RpZmll ciA6ICVkXG4iLCByZXQpOwo+ID4gKyAgICAgICAgICAgICB2NGwyX2FzeW5jX25vdGlmaWVyX2Ns ZWFudXAoJnByaXYtPm5vdGlmaWVyKTsKPiA+ICsgICAgICAgICAgICAgcmV0dXJuIHJldDsKPiA+ ICsgICAgIH0KPiA+ICsKPiA+ICsgICAgIHJldHVybiB2NGwyX2FzeW5jX3JlZ2lzdGVyX3N1YmRl digmcHJpdi0+c2QpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IHJvY2tjaGlwX21pcGlk cGh5X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gPiArewo+ID4gKyAgICAg c3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKPiA+ICsgICAgIHN0cnVjdCB2NGwyX3N1 YmRldiAqc2Q7Cj4gPiArICAgICBzdHJ1Y3QgbWlwaWRwaHlfcHJpdiAqcHJpdjsKPiA+ICsgICAg IHN0cnVjdCByZWdtYXAgKmdyZjsKPiA+ICsgICAgIHN0cnVjdCByZXNvdXJjZSAqcmVzOwo+ID4g KyAgICAgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqb2ZfaWQ7Cj4gPiArICAgICBjb25zdCBz dHJ1Y3QgZHBoeV9kcnZfZGF0YSAqZHJ2X2RhdGE7Cj4gPiArICAgICBpbnQgaSwgcmV0Owo+ID4g Kwo+ID4gKyAgICAgcHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9L RVJORUwpOwo+ID4gKyAgICAgaWYgKCFwcml2KQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVO T01FTTsKPiA+ICsgICAgIHByaXYtPmRldiA9IGRldjsKPiA+ICsKPiA+ICsgICAgIG9mX2lkID0g b2ZfbWF0Y2hfZGV2aWNlKHJvY2tjaGlwX21pcGlkcGh5X21hdGNoX2lkLCBkZXYpOwo+ID4gKyAg ICAgaWYgKCFvZl9pZCkKPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gPiArCj4g PiArICAgICBncmYgPSBzeXNjb25fbm9kZV90b19yZWdtYXAoZGV2LT5wYXJlbnQtPm9mX25vZGUp Owo+ID4gKyAgICAgaWYgKElTX0VSUihncmYpKSB7Cj4gPiArICAgICAgICAgICAgIGdyZiA9IHN5 c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3BoYW5kbGUoZGV2LT5vZl9ub2RlLAo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyb2NrY2hpcCxncmYi KTsKPiA+ICsgICAgICAgICAgICAgaWYgKElTX0VSUihncmYpKSB7Cj4gPiArICAgICAgICAgICAg ICAgICAgICAgZGV2X2VycihkZXYsICJDYW4ndCBmaW5kIEdSRiBzeXNjb25cbiIpOwo+ID4gKyAg ICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOwo+ID4gKyAgICAgICAgICAgICB9Cj4g PiArICAgICB9Cj4gPiArICAgICBwcml2LT5yZWdtYXBfZ3JmID0gZ3JmOwo+ID4gKwo+ID4gKyAg ICAgZHJ2X2RhdGEgPSBvZl9pZC0+ZGF0YTsKPiA+ICsgICAgIGZvciAoaSA9IDA7IGkgPCBkcnZf ZGF0YS0+bnVtX2Nsa3M7IGkrKykgewo+ID4gKyAgICAgICAgICAgICBwcml2LT5jbGtzW2ldID0g ZGV2bV9jbGtfZ2V0KGRldiwgZHJ2X2RhdGEtPmNsa3NbaV0pOwo+ID4gKwo+ID4gKyAgICAgICAg ICAgICBpZiAoSVNfRVJSKHByaXYtPmNsa3NbaV0pKSB7Cj4gPiArICAgICAgICAgICAgICAgICAg ICAgZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0ICVzXG4iLCBkcnZfZGF0YS0+Y2xrc1tpXSk7 Cj4gPiArICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBUUl9FUlIocHJpdi0+Y2xrc1tpXSk7 Cj4gPiArICAgICAgICAgICAgIH0KPiA+ICsgICAgIH0KPiA+ICsKPiA+ICsgICAgIHByaXYtPmdy Zl9yZWdzID0gZHJ2X2RhdGEtPnJlZ3M7Cj4gPiArICAgICBwcml2LT5kcnZfZGF0YSA9IGRydl9k YXRhOwo+ID4gKyAgICAgcHJpdi0+c3RyZWFtX29uID0gbWlwaWRwaHlfdHhyeF9zdHJlYW1fb247 Cj4gPiArICAgICBwcml2LT50eHJ4X2Jhc2VfYWRkciA9IE5VTEw7Cj4gPiArICAgICByZXMgPSBw bGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwo+ID4gKyAgICAg cHJpdi0+dHhyeF9iYXNlX2FkZHIgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOwo+ Cj4gVGhpcyB3aWxsIHJlc3VsdCBpbiBhbiBlcnJvciBiZWluZyBwcmludGVkIHRvIHRoZSBrZXJu ZWwgbG9nIGlmIHJlcyBpcwo+IE5VTEwuIFRoZSBmb2xsb3dpbmcgKHVudGVzdGVkKSBjb2RlIHNo b3VsZCBmaXggaXQuCj4KPiAgICAgICAgIHJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2 LCBJT1JFU09VUkNFX01FTSwgMCk7Cj4gICAgICAgICBpZiAocmVzKSB7Cj4gICAgICAgICAgICAg ICAgIHByaXYtPnR4cnhfYmFzZV9hZGRyID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVz KTsKPiAgICAgICAgICAgICAgICAgaWYgKElTX0VSUihwcml2LT50eHJ4X2Jhc2VfYWRkcikpCj4g ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBUUl9FUlIocHJpdi0+dHhyeF9iYXNlX2Fk ZHIpOwo+Cj4gICAgICAgICAgICAgICAgIHByaXYtPnN0cmVhbV9vbiA9IG1pcGlkcGh5X3R4cnhf c3RyZWFtX29uOwo+ICAgICAgICAgfSBlbHNlIHsKPiAgICAgICAgICAgICAgICAgcHJpdi0+dHhy eF9iYXNlX2FkZHIgPSBOVUxMOwo+ICAgICAgICAgICAgICAgICBwcml2LT5zdHJlYW1fb24gPSBt aXBpZHBoeV9yeF9zdHJlYW1fb247Cj4gICAgICAgICB9Cj4KPiBGdXJ0aGVybW9yZSwgdHhyeF9i YXNlX2FkZHIgc2VlbXMgdG8gYmUgdXNlZCB0byBhY2Nlc3MgdGhlIENTSUhPU1QKPiByZWdpc3Rl cnMsIHBhcnQgb2YgdGhlIENTSS0yIHJlY2VpdmVyIChDU0kgaG9zdCBpbiB0aGUgc3lzdGVtIGNv bm5lY3Rpb24KPiBkZXNjcmlwdGlvbiBvZiB0aGUgUkszMjg4IGRhdGFzaGVldCwgaW4gdGhlIE1J UEkgQ1NJIFBIWSBzZWN0aW9uKSwgbm90Cj4gdGhlIFBIWSBpdHNlbGYuIEknbSBhZnJhaWQgeW91 J2xsIGhhdmUgdG8gcmVkZXNpZ24gdGhpcyB0byBzcGxpdCB0aGUKPiBjb2RlIGJldHdlZW4gdGhv c2UgdHdvIGNvbXBvbmVudHMuIE9uZSBvcHRpb24gd291bGQgYmUgdG8gaGF2ZSBhIENTSQo+IGhv c3QgRFQgbm9kZSB3aXRoIGEgcmVnIHJlc291cmNlIGZvciB0aGUgQ1NJSE9TVCByZWdpc3RlcnMs IG1vZGVsZWQgYXMgYQo+IFY0TDIgc3ViZGV2LCBhbmQgcG9pbnRpbmcgdG8gdGhlIERQSFkgdXNp bmcgYSBwaHktaGFuZGxlIHByb3BlcnR5LiBJbgo+IHRoZSBya2lzcDEgZHJpdmVyLCBJIHdvdWxk IHRoZW4gZXh0cmFjdCB0aGUgQ1NJLTIgcmVjZWl2ZXIgY29kZSB0byBhCj4gc2VwYXJhdGUgc3Vi ZGV2LCBhbmQgaGFuZGxlIHRoZSBQSFkgZnJvbSB0aGF0IHN1YmRldiwgYWxzbyB3aXRoIGEKPiBw aHktaGFuZGxlIHByb3BlcnR5IGluIHRoZSBya2lzcDEgRFQgbm9kZS4KPgo+ID4gKyAgICAgaWYg KElTX0VSUihwcml2LT50eHJ4X2Jhc2VfYWRkcikpCj4gPiArICAgICAgICAgICAgIHByaXYtPnN0 cmVhbV9vbiA9IG1pcGlkcGh5X3J4X3N0cmVhbV9vbjsKPiA+ICsKPiA+ICsgICAgIHNkID0gJnBy aXYtPnNkOwo+ID4gKyAgICAgdjRsMl9zdWJkZXZfaW5pdChzZCwgJm1pcGlkcGh5X3N1YmRldl9v cHMpOwo+ID4gKyAgICAgc2QtPmZsYWdzIHw9IFY0TDJfU1VCREVWX0ZMX0hBU19ERVZOT0RFOwo+ ID4gKyAgICAgc25wcmludGYoc2QtPm5hbWUsIHNpemVvZihzZC0+bmFtZSksICJyb2NrY2hpcC1z eS1taXBpLWRwaHkiKTsKPiA+ICsgICAgIHNkLT5kZXYgPSBkZXY7Cj4gPiArCj4gPiArICAgICBw bGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCAmc2QtPmVudGl0eSk7Cj4gPiArCj4gPiArICAgICBy ZXQgPSByb2NrY2hpcF9taXBpZHBoeV9tZWRpYV9pbml0KHByaXYpOwo+ID4gKyAgICAgaWYgKHJl dCA8IDApCj4gPiArICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gPiArCj4gPiArICAgICBwbV9y dW50aW1lX2VuYWJsZSgmcGRldi0+ZGV2KTsKPiA+ICsKPiA+ICsgICAgIHJldHVybiAwOwo+ID4g K30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IHJvY2tjaGlwX21pcGlkcGh5X3JlbW92ZShzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ID4gK3sKPiA+ICsgICAgIHN0cnVjdCBtZWRpYV9lbnRp dHkgKm1lID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Cj4gPiArICAgICBzdHJ1Y3QgdjRs Ml9zdWJkZXYgKnNkID0gbWVkaWFfZW50aXR5X3RvX3Y0bDJfc3ViZGV2KG1lKTsKPiA+ICsKPiA+ ICsgICAgIG1lZGlhX2VudGl0eV9jbGVhbnVwKCZzZC0+ZW50aXR5KTsKPiA+ICsKPiA+ICsgICAg IHBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKPiA+ICsKPiA+ICsgICAgIHJldHVybiAw Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgcm9ja2No aXBfbWlwaWRwaHlfcG1fb3BzID0gewo+ID4gKyAgICAgU0VUX1JVTlRJTUVfUE1fT1BTKG1pcGlk cGh5X3J1bnRpbWVfc3VzcGVuZCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICBtaXBpZHBo eV9ydW50aW1lX3Jlc3VtZSwgTlVMTCkKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyBzdHJ1Y3Qg cGxhdGZvcm1fZHJpdmVyIHJvY2tjaGlwX2lzcF9taXBpZHBoeV9kcml2ZXIgPSB7Cj4gPiArICAg ICAucHJvYmUgPSByb2NrY2hpcF9taXBpZHBoeV9wcm9iZSwKPiA+ICsgICAgIC5yZW1vdmUgPSBy b2NrY2hpcF9taXBpZHBoeV9yZW1vdmUsCj4gPiArICAgICAuZHJpdmVyID0gewo+ID4gKyAgICAg ICAgICAgICAgICAgICAgIC5uYW1lID0gInJvY2tjaGlwLXN5LW1pcGktZHBoeSIsCj4gPiArICAg ICAgICAgICAgICAgICAgICAgLnBtID0gJnJvY2tjaGlwX21pcGlkcGh5X3BtX29wcywKPiA+ICsg ICAgICAgICAgICAgICAgICAgICAub2ZfbWF0Y2hfdGFibGUgPSByb2NrY2hpcF9taXBpZHBoeV9t YXRjaF9pZCwKPgo+IFRvbyBtdWNoIGluZGVudGF0aW9uLgo+Cj4gPiArICAgICB9LAo+ID4gK307 Cj4gPiArCj4gPiArbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihyb2NrY2hpcF9pc3BfbWlwaWRwaHlf ZHJpdmVyKTsKPgo+IGRldi5jIGFsc28gaGFzIGEgbW9kdWxlX3BsYXRmb3JtX2RyaXZlcigpLiBB cyBib3RoIGFyZSBjb21waWxlZCBpbiB0aGUKPiBzYW1lIG1vZHVsZSwgdGhpcyByZXN1bHRzIGlu IGEgbGluayBlcnJvciB3aGVuIGNvbXBpbGluZyB0aGUgZHJpdmVycyBhcwo+IGEgbW9kdWxlLiBJ IHdvdWxkIHJlY29tbWVuZCBzZXBhcmF0aW5nIGl0IGludG8gdHdvIG1vZHVsZXMgdG8gZml4IHRo aXMuCj4KPiA+ICtNT0RVTEVfQVVUSE9SKCJSb2NrY2hpcCBDYW1lcmEvSVNQIHRlYW0iKTsKPiA+ ICtNT0RVTEVfREVTQ1JJUFRJT04oIlJvY2tjaGlwIE1JUEkgRFBIWSBkcml2ZXIiKTsKPiA+ICtN T0RVTEVfTElDRU5TRSgiRHVhbCBCU0QvR1BMIik7Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9t ZWRpYS9wbGF0Zm9ybS9yb2NrY2hpcC9pc3AxL21pcGlfZHBoeV9zeS5oIGIvZHJpdmVycy9tZWRp YS9wbGF0Zm9ybS9yb2NrY2hpcC9pc3AxL21pcGlfZHBoeV9zeS5oCj4gPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi5jNTU4NzkxMDY0YTIKPiA+IC0tLSAvZGV2 L251bGwKPiA+ICsrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vcm9ja2NoaXAvaXNwMS9taXBp X2RwaHlfc3kuaAo+ID4gQEAgLTAsMCArMSwxNSBAQAo+ID4gKy8vIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiAoR1BMLTIuMCsgT1IgTUlUKQo+ID4gKy8qCj4gPiArICogUm9ja2NoaXAgTUlQSSBT eW5vcHN5cyBEUEhZIGRyaXZlcgo+ID4gKyAqCj4gPiArICogQ29weXJpZ2h0IChDKSAyMDE3IEZ1 emhvdSBSb2NrY2hpcCBFbGVjdHJvbmljcyBDby4sIEx0ZC4KPiA+ICsgKi8KPiA+ICsKPiA+ICsj aWZuZGVmIF9fTUlQSV9EUEhZX1NZX0hfXwo+ID4gKyNkZWZpbmUgX19NSVBJX0RQSFlfU1lfSF9f Cj4gPiArCj4gPiArI2luY2x1ZGUgPG1lZGlhL3Y0bDItc3ViZGV2Lmg+Cj4gPiArCj4gPiArdm9p ZCBya2lzcDFfc2V0X21pcGlfZHBoeV9zeV9sYW5lcyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKmRwaHks IGludCBsYW5lcyk7Cj4KPiBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3Qgc2VlbSB0byBiZSB1c2VkIG9y IGRlZmluZWQgYW55d2hlcmUsIHlvdSBjYW4gZHJvcAo+IHRoaXMgZmlsZS4KPgo+ID4gKwo+ID4g KyNlbmRpZiAvKiBfX1JLSVNQMV9NSVBJX0RQSFlfU1lfSF9fICovCj4KPiAtLQo+IFJlZ2FyZHMs Cj4KPiBMYXVyZW50IFBpbmNoYXJ0CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2Vy bmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1h bi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==