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 C71ACCD5BD2 for ; Tue, 26 May 2026 10:04:54 +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-Transfer-Encoding:Content-Type:MIME-Version:Reply-To:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:Message-Id:Date: References:In-Reply-To:Cc:To:Subject:From:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=trPfqU0auEgiibI96pIYFw05fGpmM+rLcZ+nPtCtQFA=; b=QkM3SBGzm6Go8c i8JTSDqYGeo7GHAR1e1NKAFWsIY2OSgHq3UT1hhJK/JxamF9WJ63zQSkToIZbMI/zSNvx17On0AuY 6Ldt+u7RIbp1Hn4XJ9fvPFXO7MZ+nwKndEfRxbJjBj5e/VjPdwCGjpYSynItYpLPI5WziQLD+b4mD dMFV4eUsj3OWAWzG7kurmEUc/ctCi9hfRYHcBjVD2KEsoPJgMO5b69IZiguJyvj+pw62aZve0l3FN wgH26V6Gav8snCXk1slKr+6F5tzsEMKG3wRA9hrXov5DtlxQAJ5e3FPUpskl5FD0iTnqeMFHCC8Vu xAXe7wQ44hCLTpKMdzlA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1wRoeV-00000001bRP-1Avb; Tue, 26 May 2026 10:04:47 +0000 Received: from sea.source.kernel.org ([2600:3c0a:e001:78e:0:1991:8:25]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1wRoeS-00000001bQu-2g7G for linux-amlogic@lists.infradead.org; Tue, 26 May 2026 10:04:46 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id DFB344360E; Tue, 26 May 2026 10:04:43 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 497C21F000E9; Tue, 26 May 2026 10:04:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1779789883; bh=hqdQK8EKP6IBYEXynOFlMsicI52NwFDuGSnbYPzTjW8=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=C7FaE6tfZqK1iYnjLz5K0/W8YGvqVDPtakGSyUZpNiYrQob7JPsanbYMFGSbsULFo QfI7KSEVqEdYWl5fDj3w5q2GZOXSOQ7ObftsdEyPLUf8mYn1nKT25jxuXPkTzTPlWt VD7PMNGuapJQcaLVE4HiHuJyOwcKH8nq4Fjf5GyIKgGLeg9Y2sFprVhc1zwjRtMgXD ATw4Ax40dLOtVHb1QFixW7aEfOgYNNRVbZmCVZObowaOUIMZaGbdJjQu5622ij+595 m92qHZFyoyGOUXM5r2SKAXyd5o7RtLns3SaGUkPj937R5rnvIWfyohJRh6oCvdKhSx 6cODonHYXKPzQ== From: sashiko-bot@kernel.org Subject: Re: [PATCH RFC RESEND v5 4/6] decoder: Add V4L2 stateless H.264 decoder driver To: "Zhentao Guo via B4 Relay" Cc: conor+dt@kernel.org, neil.armstrong@linaro.org, devicetree@vger.kernel.org, robh@kernel.org, linux-amlogic@lists.infradead.org In-Reply-To: <20260526-b4-s4-vdec-upstream-v5-4-33bc817f93f4@amlogic.com> References: <20260526-b4-s4-vdec-upstream-v5-4-33bc817f93f4@amlogic.com> Date: Tue, 26 May 2026 10:04:42 +0000 Message-Id: <20260526100443.497C21F000E9@smtp.kernel.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.9.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260526_030444_775280_7AE0BE44 X-CRM114-Status: GOOD ( 27.10 ) X-BeenThere: linux-amlogic@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: sashiko-reviews@lists.linux.dev MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-amlogic" Errors-To: linux-amlogic-bounces+linux-amlogic=archiver.kernel.org@lists.infradead.org VGhhbmsgeW91IGZvciB5b3VyIGNvbnRyaWJ1dGlvbiEgU2FzaGlrbyBBSSByZXZpZXcgZm91bmQg MjIgcG90ZW50aWFsIGlzc3VlKHMpIHRvIGNvbnNpZGVyOgotIFtDcml0aWNhbF0gR2xvYmFsIGNv bnRleHQgcG9pbnRlcnMgYXJlIHVuY29uZGl0aW9uYWxseSBvdmVyd3JpdHRlbiwgYnJlYWtpbmcg aXNvbGF0aW9uIGZvciBtdWx0aXBsZSBpbnN0YW5jZXMgYW5kIGxlYWRpbmcgdG8gVUFGLgotIFtI aWdoXSBBY2Nlc3NpbmcgVjRMMiBNMk0gYnVmZmVycyBhbmQgcmVxdWVzdCBvYmplY3RzIGFmdGVy IHRoZXkgaGF2ZSBiZWVuIGNvbXBsZXRlZCBieSB0aGUgSVNSLgotIFtIaWdoXSBNaXNzaW5nIGB2 NGwyX20ybV9idWZfZG9uZV9hbmRfam9iX2ZpbmlzaCgpYCBvbiBlcnJvciBwYXRoIGNhdXNlcyBh IHBlcm1hbmVudCBzdGFsbCBvZiB0aGUgVjRMMiBNMk0gY29udGV4dC4KLSBbSGlnaF0gUHJvYmUg ZXJyb3IgcGF0aHMgZmFpbCB0byBjbGVhbiB1cCBQTSBkb21haW5zIGFuZCBkZXZpY2UgbGlua3Mu Ci0gW0hpZ2hdIFNldHRpbmcgdGhlIE9VVFBVVCBxdWV1ZSBmb3JtYXQgbWlzdGFrZW5seSBvdmVy d3JpdGVzIHRoZSBDQVBUVVJFIHF1ZXVlJ3MgZm9ybWF0IHdpdGggYSBjb21wcmVzc2VkIHN0cmVh bSBmb3JtYXQuCi0gW0hpZ2hdIE11bHRpLXBsYW5hciByYXcgY2FwdHVyZSBmb3JtYXRzIHJlc3Vs dCBpbiBvdXQtb2YtYm91bmRzIERNQSBhY2Nlc3MgZHVlIHRvIGltcHJvcGVybHkgaGFyZGNvZGVk IHBsYW5lIGNvdW50cy4KLSBbSGlnaF0gUmVkdW5kYW50IGhhcmR3YXJlIGNhbnZhcyBhbGxvY2F0 aW9ucyBhbmQgZXJyb3IgcGF0aCBmYWlsdXJlcyBsZWFrIGFuZCBleGhhdXN0IHRoZSBnbG9iYWwg aGFyZHdhcmUgY2FudmFzIHBvb2wuCi0gW0hpZ2hdIFRhdXRvbG9naWNhbCBjb21wYXJpc29ucyBv biB1bnNpZ25lZCB2YXJpYWJsZXMgY2F1c2UgYm91bmRzLWNoZWNrIGJ5cGFzc2VzIGFuZCBzcHVy aW91cyByZXNvdXJjZSBmcmVlcy4KLSBbSGlnaF0gTWlzc2luZyB2YWxpZGF0aW9uIG9mIFY0TDIg U1BTL1BQUyBjb250cm9scyBsZWFkcyB0byBtdWx0aXBsZSBoZWFwIGJ1ZmZlciBvdmVyZmxvd3Ms IGludGVnZXIgb3ZlcmZsb3dzLCBhbmQgT09CIERNQS4KLSBbSGlnaF0gVGVhcmRvd24gaW4gYGFt bF92ZGVjX2Rydl9yZW1vdmVgIGZyZWVzIHRoZSBkcml2ZXIgY29udGV4dCB3aGlsZSBmaWxlIGRl c2NyaXB0b3JzIGNhbiByZW1haW4gb3Blbi4KLSBbSGlnaF0gRmFpbGluZyBgc3RhcnRfc3RyZWFt aW5nYCBkb2VzIG5vdCByZXR1cm4gcXVldWVkIGJ1ZmZlcnMgdG8gdGhlIFZCMiBmcmFtZXdvcmsu Ci0gW0hpZ2hdIERvdWJsZSBmcmVlIGFuZCBwcmVtYXR1cmUgZnJlZSBvZiBgY3R4LT5jb2RlY19w cml2YCB2aWEgYHZiMm9wc192ZGVjX3N0b3Bfc3RyZWFtaW5nYC4KLSBbSGlnaF0gQnlwYXNzaW5n IFBNIHJ1bnRpbWUgYWNxdWlzaXRpb24gbGVhZHMgdG8gdW5iYWxhbmNlZCBjbG9jay9QTSByZWZl cmVuY2VzLgotIFtIaWdoXSBMb2NrbGVzcyBidWZmZXIgYWNjZXNzIGFuZCB1bmNoZWNrZWQgTlVM TCBkZXJlZmVyZW5jZSBpbiBJUlEgaGFuZGxlci4KLSBbSGlnaF0gVGhlIERPUyBjbG9jayBpcyBu ZXZlciBlbmFibGVkIGJlZm9yZSBhY2Nlc3NpbmcgRE9TX0JVUyByZWdpc3RlcnMuCi0gW01lZGl1 bV0gSW5jb3JyZWN0IGVycm9yIGNoZWNraW5nIG9mIGBvZl9wYXJzZV9waGFuZGxlYCBsZWFkcyB0 byBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYW5kIHdyb25nIGVycm9yIHJldHVybi4KLSBbTWVk aXVtXSBVbm1ldCBkZXBlbmRlbmNpZXMgd2hlbiB1c2luZyBgc2VsZWN0YCB3aXRoIGFyY2hpdGVj dHVyZS1zcGVjaWZpYyBzeW1ib2xzIGluIGEgYENPTVBJTEVfVEVTVGAgZHJpdmVyLgotIFtNZWRp dW1dIE1pc3NpbmcgY2hlY2sgZm9yIHBtX3J1bnRpbWVfZ2V0X3N5bmMgcmV0dXJuIHZhbHVlIGFs bG93cyBhY2Nlc3MgdG8gdW5wb3dlcmVkIGhhcmR3YXJlLgotIFtNZWRpdW1dIFRoZSBWNEwyIGNv bnRyb2wgaGFuZGxlciBtZW1vcnkgaXMgbGVha2VkIGlmIGB2NGwyX2N0cmxfaGFuZGxlcl9zZXR1 cGAgZmFpbHMuCi0gW01lZGl1bV0gVmlkZW8gZGV2aWNlIG5vZGUgaXMgZXhwb3NlZCB0byB1c2Vy c3BhY2UgYmVmb3JlIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIGlzIGNvbXBsZXRlLgotIFtNZWRp dW1dIE1pc3NpbmcgbWluaW11bSBsZW5ndGggdmFsaWRhdGlvbiBmb3IgbG9hZGVkIGZpcm13YXJl IGRhdGEuCi0gW01lZGl1bV0gTWlzc2luZyBgZG1hX3JtYigpYCBiYXJyaWVyIGJlZm9yZSByZWFk aW5nIERNQSBtZW1vcnkgdXBkYXRlZCBieSBoYXJkd2FyZS4KLS0KCmNvbW1pdCAwNWQwZGIyYmU3 MTVmYTNlNGNjOGZjNzU2Yzk1N2Q0MzFlNmY1Yjg5CkF1dGhvcjogWmhlbnRhbyBHdW8gPHpoZW50 YW8uZ3VvQGFtbG9naWMuY29tPgoKICAgIGRlY29kZXI6IEFkZCBWNEwyIHN0YXRlbGVzcyBILjI2 NCBkZWNvZGVyIGRyaXZlcgogICAgCiAgICBBZGQgaW5pdGlhbCBzdXBwb3J0IGZvciBWNEwyIHN0 YXRlbGVzcyB2aWRlbyBkZWNvZGVyCiAgICBkcml2ZXIgb24gQW1sb2dpYyBTNChTODA1WDIpIHBs YXRmb3JtLiBJbiBwaGFzZSAxLAogICAgaXQgc3VwcG9ydHMgOGJpdCBILjI2NCBiaXRzdHJlYW1z IGRlY29kaW5nLiBDdXJyZW50bHkKICAgIG9ubHkgcHJvZ3Jlc3NpdmUgc3RyZWFtcyBhcmUgc3Vw cG9ydGVkLgoKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbWxvZ2ljL3Zk ZWMvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1sb2dpYy92ZGVjL0tjb25maWcK PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMDAuLmQzOTI5NjdjNzc0 MzYKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbWxvZ2lj L3ZkZWMvS2NvbmZpZwo+IEBAIC0wLDAgKzEsMTggQEAKPiArIyBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogKEdQTC0yLjAtb25seSBPUiBNSVQpCj4gKwo+ICtjb25maWcgVklERU9fQU1MT0dJQ19W REVDCj4gKyAgICB0cmlzdGF0ZSAiQW1sb2dpYyBWaWRlbyBEZWNvZGVyIERyaXZlciIKPiArICAg IGRlcGVuZHMgb24gQVJDSF9NRVNPTiB8fCBDT01QSUxFX1RFU1QKPiArICAgIGRlcGVuZHMgb24g VklERU9fREVWCj4gKyAgICBkZXBlbmRzIG9uIFY0TF9NRU0yTUVNX0RSSVZFUlMKPiArICAgIGRl cGVuZHMgb24gVEVFCj4gKyAgICBzZWxlY3QgVklERU9CVUYyX0RNQV9DT05USUcKPiArICAgIHNl bGVjdCBWNEwyX0gyNjQKPiArICAgIHNlbGVjdCBWNEwyX01FTTJNRU1fREVWCj4gKyAgICBzZWxl Y3QgTUVTT05fQ0FOVkFTCj4gKyAgICBzZWxlY3QgTUVTT05fU00KCltTZXZlcml0eTogTWVkaXVt XQpXaWxsIHNlbGVjdGluZyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc3ltYm9scyBsaWtlIE1FU09O X0NBTlZBUyBhbmQgTUVTT05fU00KY2F1c2UgdW5tZXQgZGVwZW5kZW5jeSB3YXJuaW5ncyBvbiB1 bnN1cHBvcnRlZCBhcmNoaXRlY3R1cmVzIHdoZW4gQ09NUElMRV9URVNUCmlzIGVuYWJsZWQ/Cgpb IC4uLiBdCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1sb2dpYy92ZGVj L2FtbF92ZGVjLmMgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtbG9naWMvdmRlYy9hbWxfdmRl Yy5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAwLi5kNGRjZDAx ODBkMmQwCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1s b2dpYy92ZGVjL2FtbF92ZGVjLmMKWyAuLi4gXQo+ICtpbnQgYW1sX3ZkZWNfY3RybHNfc2V0dXAo c3RydWN0IGFtbF92ZGVjX2N0eCAqY3R4KQo+ICt7Cj4gKwlpbnQgaTsKPiArCWludCBjdHJsc19z aXplID0gQVJSQVlfU0laRShjb250cm9scyk7Cj4gKwo+ICsJdjRsMl9jdHJsX2hhbmRsZXJfaW5p dCgmY3R4LT5jdHJsX2hhbmRsZXIsIGN0cmxzX3NpemUpOwo+ICsJZm9yIChpID0gMDsgaSA8IGN0 cmxzX3NpemU7IGkrKykgewo+ICsJCXY0bDJfY3RybF9uZXdfY3VzdG9tKCZjdHgtPmN0cmxfaGFu ZGxlciwgJmNvbnRyb2xzW2ldLmNmZywgTlVMTCk7Cj4gKwkJaWYgKGN0eC0+Y3RybF9oYW5kbGVy LmVycm9yKSB7Cj4gKwkJCWRldl9pbmZvKCZjdHgtPmRldi0+cGxhdF9kZXYtPmRldiwgImFkZCBj dHJsIGZvciAoJWQpIGZhaWxlZCVkXG4iLAo+ICsJCQkJIGNvbnRyb2xzW2ldLmNmZy5pZCwgY3R4 LT5jdHJsX2hhbmRsZXIuZXJyb3IpOwo+ICsJCQl2NGwyX2N0cmxfaGFuZGxlcl9mcmVlKCZjdHgt PmN0cmxfaGFuZGxlcik7Cj4gKwkJCXJldHVybiBjdHgtPmN0cmxfaGFuZGxlci5lcnJvcjsKPiAr CQl9Cj4gKwl9Cj4gKwljdHgtPmZoLmN0cmxfaGFuZGxlciA9ICZjdHgtPmN0cmxfaGFuZGxlcjsK PiArCXJldHVybiB2NGwyX2N0cmxfaGFuZGxlcl9zZXR1cCgmY3R4LT5jdHJsX2hhbmRsZXIpOwoK W1NldmVyaXR5OiBNZWRpdW1dCklmIHY0bDJfY3RybF9oYW5kbGVyX3NldHVwKCkgcmV0dXJucyBh biBlcnJvciwgZG9lcyB0aGlzIGNvZGUgbGVhayB0aGUgbWVtb3J5CmFsbG9jYXRlZCBmb3IgdGhl IGNvbnRyb2wgaGFuZGxlcj8gVGhlIGNhbGxlciBkb2Vzbid0IHNlZW0gdG8gZnJlZSBpdCBvbgp0 aGlzIGZhaWx1cmUgcGF0aC4KCj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG0ybW9wc192ZGVjX2Rl dmljZV9ydW4odm9pZCAqbTJtX3ByaXYpCj4gK3sKPiArCXN0cnVjdCBhbWxfdmRlY19jdHggKmN0 eCA9IG0ybV9wcml2Owo+ICsJc3RydWN0IGFtbF92ZGVjX2RldiAqZGV2ID0gY3R4LT5kZXY7Cj4g KwlzdHJ1Y3QgdmIyX3Y0bDJfYnVmZmVyICpzcmNfYnVmLCAqZHN0X2J1ZjsKPiArCXN0cnVjdCBt ZWRpYV9yZXF1ZXN0ICpzcmNfcmVxOwo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJc3JjX2J1ZiA9 IHY0bDJfbTJtX25leHRfc3JjX2J1ZihjdHgtPmZoLm0ybV9jdHgpOwo+ICsJZHN0X2J1ZiA9IHY0 bDJfbTJtX25leHRfZHN0X2J1ZihjdHgtPmZoLm0ybV9jdHgpOwo+ICsJZGV2X2RiZygmZGV2LT5w bGF0X2Rldi0+ZGV2LCAiZGV2aWNlIHJ1biA6IHNyYyBidWYgOiAlZCBkc3QgYnVmICVkXG4iLAo+ ICsJCXNyY19idWYtPnZiMl9idWYuaW5kZXgsIGRzdF9idWYtPnZiMl9idWYuaW5kZXgpOwo+ICsJ aWYgKFdBUk5fT05fT05DRSghY3R4LT5jb2RlY19vcHMtPnJ1bikpCj4gKwkJZ290byBlcnJfY2Fu Y2VsX2pvYjsKPiArCj4gKwlzcmNfcmVxID0gc3JjX2J1Zi0+dmIyX2J1Zi5yZXFfb2JqLnJlcTsK PiArCWlmIChzcmNfcmVxKQo+ICsJCXY0bDJfY3RybF9yZXF1ZXN0X3NldHVwKHNyY19yZXEsICZj dHgtPmN0cmxfaGFuZGxlcik7Cj4gKwlkb3NfZW5hYmxlKGRldi0+ZGVjX2h3KTsKPiArCS8qIGlu Y2FzZSBvZiBidXMgaGFuZyBpbiBzdG9wX3N0cmVhbWluZyAqLwo+ICsJY3R4LT5kb3NfY2xrX2Vu ID0gMTsKPiArCj4gKwlpZiAoY3R4LT5jdXJyX2RlY190eXBlID09IENPREVDX1RZUEVfSDI2NCkK PiArCQlhbWxfdmRlY19yZXNldF9jb3JlKGRldi0+ZGVjX2h3KTsKPiArCj4gKwlpZiAobG9hZF9m aXJtd2FyZShkZXYtPmRlY19odywgY3R4LT5jdXJyX2RlY190eXBlKSA8IDApCj4gKwkJZ290byBl cnJfY2FuY2VsX2pvYjsKPiArCj4gKwlyZXQgPSBjdHgtPmNvZGVjX29wcy0+cnVuKGN0eCk7Cj4g Kwo+ICsJdjRsMl9tMm1fYnVmX2NvcHlfbWV0YWRhdGEoc3JjX2J1ZiwgZHN0X2J1Zik7Cj4gKwlp ZiAoc3JjX3JlcSkKPiArCQl2NGwyX2N0cmxfcmVxdWVzdF9jb21wbGV0ZShzcmNfcmVxLCAmY3R4 LT5jdHJsX2hhbmRsZXIpOwoKW1NldmVyaXR5OiBIaWdoXQpTaW5jZSBjdHgtPmNvZGVjX29wcy0+ cnVuKCkgYmxvY2tzIG9uIHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0LCBhbmQKdGhl IElTUiBjb21wbGV0ZXMgdGhlIGpvYiBieSBjYWxsaW5nIHY0bDJfbTJtX2J1Zl9kb25lX2FuZF9q b2JfZmluaXNoKCksIGNvdWxkCnNyY19idWYsIGRzdF9idWYsIGFuZCBzcmNfcmVxIGFscmVhZHkg YmUgcmV0dXJuZWQgdG8gdXNlcnNwYWNlIGFuZCBwb3RlbnRpYWxseQpmcmVlZCBieSB0aGUgdGlt ZSB0aGlzIHRocmVhZCB3YWtlcyB1cCB0byBhY2Nlc3MgdGhlbT8KCj4gKwlpZiAocmV0IDwgMCkK PiArCQlnb3RvIGVycl9jYW5jZWxfam9iOwo+ICsKPiArCXJldHVybjsKPiArCj4gK2Vycl9jYW5j ZWxfam9iOgo+ICsJdjRsMl9tMm1fYnVmX2RvbmVfYW5kX2pvYl9maW5pc2goZGV2LT5tMm1fZGV2 X2RlYywgY3R4LT5tMm1fY3R4LAo+ICsJCQkJCSBWQjJfQlVGX1NUQVRFX0VSUk9SKTsKPiArfQpb IC4uLiBdCj4gK3N0YXRpYyB2b2lkIHNldF9waWNfaW5mbyhzdHJ1Y3QgYW1sX3ZkZWNfY3R4ICpj dHgsCj4gKwkJCSBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0X21wbGFuZSAqcGl4X21wLAo+ICsJCQkg ZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUpCj4gK3sKPiArCWlmIChWNEwyX1RZUEVfSVNfT1VUUFVU KHR5cGUpKSB7Cj4gKwkJY3R4LT5waWNfaW5mby5vdXRwdXRfcGl4X2ZtdCA9IHBpeF9tcC0+cGl4 ZWxmb3JtYXQ7Cj4gKwkJY3R4LT5waWNfaW5mby5jb2RlZF93aWR0aCA9IEFMSUdOKHBpeF9tcC0+ d2lkdGgsIDY0KTsKPiArCQljdHgtPnBpY19pbmZvLmNvZGVkX2hlaWdodCA9IEFMSUdOKHBpeF9t cC0+aGVpZ2h0LCA2NCk7Cj4gKwkJY3R4LT5waWNfaW5mby5mYl9zaXplWzBdID0KPiArCQkgICAg Y3R4LT5waWNfaW5mby5jb2RlZF93aWR0aCAqIGN0eC0+cGljX2luZm8uY29kZWRfaGVpZ2h0Owo+ ICsJCWN0eC0+cGljX2luZm8uZmJfc2l6ZVsxXSA9IGN0eC0+cGljX2luZm8uZmJfc2l6ZVswXSAv IDI7Cj4gKwkJY3R4LT5waWNfaW5mby5wbGFuZV9udW0gPSAxOwoKW1NldmVyaXR5OiBIaWdoXQpJ ZiBhIG11bHRpLXBsYW5hciBmb3JtYXQgbGlrZSBOVjEyTSBpcyBuZWdvdGlhdGVkLCBzaG91bGRu J3QgcGxhbmVfbnVtIGJlIHNldAp0byBtYXRjaCB0aGUgYWN0dWFsIHBsYW5lcyB1c2VkPyBCeSBy aWdpZGx5IHNldHRpbmcgcGxhbmVfbnVtIHRvIDEgaGVyZSwgY291bGQKdGhlIGRyaXZlciBlbmQg dXAgY29tcHV0aW5nIG91dC1vZi1ib3VuZHMgRE1BIGFkZHJlc3NlcyBmb3IgdGhlIEMgcGxhbmUg bGF0ZXI/Cgo+ICsJfQo+ICt9ClsgLi4uIF0KPiArc3RhdGljIGludCB2ZGVjX3NfZm10X291dHB1 dChzdHJ1Y3QgYW1sX3ZkZWNfY3R4ICpjdHgsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKPiArewo+ ICsJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdF9tcGxhbmUgKnBpeF9tcCA9ICZmLT5mbXQucGl4X21w Owo+ICsJY29uc3Qgc3RydWN0IGFtbF92aWRlb19mbXQgKm91dF9mbXQ7Cj4gKwlzdHJ1Y3QgdmIy X3F1ZXVlICp2cTsKPiArCWludCByZXQ7Cj4gKwo+ICsJdnEgPSB2NGwyX20ybV9nZXRfdnEoY3R4 LT5tMm1fY3R4LCBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVF9NUExBTkUpOwo+ICsJaWYgKHZi Ml9pc19idXN5KHZxKSAmJgo+ICsJICAgIHBpeF9tcC0+cGl4ZWxmb3JtYXQgIT0gY3R4LT5waXhf Zm10W0FNTF9GTVRfU1JDXS5waXhlbGZvcm1hdCkKPiArCQlyZXR1cm4gLUVCVVNZOwo+ICsKPiAr CW91dF9mbXQgPSBhbWxfdmRlY19nZXRfdmlkZW9fZm10KGN0eC0+ZGV2LCBwaXhfbXAtPnBpeGVs Zm9ybWF0KTsKPiArCWlmIChvdXRfZm10KQo+ICsJCWN0eC0+ZGVjX2ZtdFtBTUxfRk1UX1NSQ10g PSAqb3V0X2ZtdDsKPiArCWVsc2UKPiArCQlkZXZfZGJnKCZjdHgtPmRldi0+cGxhdF9kZXYtPmRl diwKPiArCQkJIiVzIGZtdCAlZCBub3Qgc3VwcG9ydGVkLCB1c2UgZGVmYXVsdFxuIiwgX19mdW5j X18sCj4gKwkJCXBpeF9tcC0+cGl4ZWxmb3JtYXQpOwo+ICsKPiArCXJldCA9IHZkZWNfdHJ5X2Zt dF9tcChjdHgsIGYtPnR5cGUsIHBpeF9tcCk7Cj4gKwlzZXRfcGljX2luZm8oY3R4LCBwaXhfbXAs IGYtPnR5cGUpOwo+ICsKPiArCWN0eC0+cGl4X2ZtdFtBTUxfRk1UX1NSQ10gPSAqcGl4X21wOwo+ ICsJY3R4LT5waXhfZm10W0FNTF9GTVRfRFNUXSA9ICpwaXhfbXA7CgpbU2V2ZXJpdHk6IEhpZ2hd CkRvZXMgb3ZlcndyaXRpbmcgY3R4LT5waXhfZm10W0FNTF9GTVRfRFNUXSBoZXJlIGNvcnJ1cHQg dGhlIGNhcHR1cmUgcXVldWUncwpwaXhlbCBmb3JtYXQgYnkgZXJyb25lb3VzbHkgYXNzaWduaW5n IGl0IHRoZSBvdXRwdXQgcXVldWUncyBjb21wcmVzc2VkCmJpdHN0cmVhbSBmb3JtYXQ/Cgo+ICsK PiArCXJldHVybiByZXQ7Cj4gK30KWyAuLi4gXQo+ICtzdGF0aWMgaW50IHZiMm9wc192ZGVjX3N0 YXJ0X3N0cmVhbWluZyhzdHJ1Y3QgdmIyX3F1ZXVlICpxLCB1bnNpZ25lZCBpbnQgY291bnQpCj4g K3sKPiArCXN0cnVjdCBhbWxfdmRlY19jdHggKmN0eCA9IHZiMl9nZXRfZHJ2X3ByaXYocSk7Cj4g Kwo+ICsJaWYgKFY0TDJfVFlQRV9JU19PVVRQVVQocS0+dHlwZSkpIHsKPiArCQljdHgtPmlzX291 dHB1dF9zdHJlYW1vbiA9IDE7Cj4gKwkJaWYgKGFtbF92ZGVjX2luaXRfZGVjX2luc3QoY3R4KSA8 IDApCj4gKwkJCXJldHVybiAtRUlOVkFMOwoKW1NldmVyaXR5OiBIaWdoXQpJZiBhbWxfdmRlY19p bml0X2RlY19pbnN0KCkgZmFpbHMgYW5kIHJldHVybnMgYW4gZXJyb3IsIGRvZXNuJ3QgdGhlIGRy aXZlcgpuZWVkIHRvIHJldHVybiBhbGwgcXVldWVkIGJ1ZmZlcnMgdG8gdXNlcnNwYWNlIHdpdGgg c3RhdGUgVkIyX0JVRl9TVEFURV9RVUVVRUQKdG8gYXZvaWQgcGVybWFuZW50bHkgbGVha2luZyB0 aGVtPwoKPiArCX0gZWxzZSB7Cj4gKwkJY3R4LT5pc19jYXBfc3RyZWFtb24gPSAxOwo+ICsJfQo+ ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB2YjJvcHNfdmRlY19zdG9w X3N0cmVhbWluZyhzdHJ1Y3QgdmIyX3F1ZXVlICpxKQo+ICt7Cj4gKwlzdHJ1Y3QgYW1sX3ZkZWNf Y3R4ICpjdHggPSB2YjJfZ2V0X2Rydl9wcml2KHEpOwo+ICsJc3RydWN0IHZiMl92NGwyX2J1ZmZl ciAqc3JjX2J1ZiA9IE5VTEwsICpkc3RfYnVmID0gTlVMTDsKPiArCj4gKwlhbWxfdmRlY19yZWxl YXNlX2luc3RhbmNlKGN0eCk7CgpbU2V2ZXJpdHk6IEhpZ2hdClNpbmNlIGFtbF92ZGVjX3JlbGVh c2VfaW5zdGFuY2UoKSBjYWxscyBhbWxfaDI2NF9leGl0KCkgd2hpY2ggZnJlZXMKY3R4LT5jb2Rl Y19wcml2LCB3aGF0IGhhcHBlbnMgaWYgdXNlcnNwYWNlIHN0b3BzIG9ubHkgdGhlIGNhcHR1cmUg cXVldWUgd2hpbGUKdGhlIG91dHB1dCBxdWV1ZSBpcyBhY3RpdmVseSBzdHJlYW1pbmc/IFdpbGwg dGhpcyBjYXVzZSBhIHVzZS1hZnRlci1mcmVlIG9uCmN0eC0+Y29kZWNfcHJpdiBmb3Igb25nb2lu ZyBkZWNvZGUgam9icyBvciBpbmNvbWluZyBJUlFzPwoKPiArCj4gKwlpZiAoVjRMMl9UWVBFX0lT X09VVFBVVChxLT50eXBlKSkgewo+ICsJCXdoaWxlICgoc3JjX2J1ZiA9IHY0bDJfbTJtX3NyY19i dWZfcmVtb3ZlKGN0eC0+bTJtX2N0eCkpKQo+ICsJCQl2NGwyX20ybV9idWZfZG9uZShzcmNfYnVm LCBWQjJfQlVGX1NUQVRFX0VSUk9SKTsKPiArCQljdHgtPmlzX291dHB1dF9zdHJlYW1vbiA9IDA7 Cj4gKwl9IGVsc2Ugewo+ICsJCXdoaWxlICgoZHN0X2J1ZiA9IHY0bDJfbTJtX2RzdF9idWZfcmVt b3ZlKGN0eC0+bTJtX2N0eCkpKQo+ICsJCQl2NGwyX20ybV9idWZfZG9uZShkc3RfYnVmLCBWQjJf QlVGX1NUQVRFX0VSUk9SKTsKPiArCQljdHgtPmlzX2NhcF9zdHJlYW1vbiA9IDA7Cj4gKwl9Cj4g K30KWyAuLi4gXQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtbG9naWMv dmRlYy9hbWxfdmRlY19kcnYuYyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1sb2dpYy92ZGVj L2FtbF92ZGVjX2Rydi5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAw MDAwLi5kNjNjYmQ0ZjllMjZkCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvbWVkaWEv cGxhdGZvcm0vYW1sb2dpYy92ZGVjL2FtbF92ZGVjX2Rydi5jClsgLi4uIF0KPiArc3RhdGljIGlu dCBmb3BzX3Zjb2RlY19vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQo+ICt7Cj4gKwlzdHJ1Y3QgYW1s X3ZkZWNfZGV2ICpkZWNfZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKPiArCXN0cnVjdCBhbWxf dmRlY19jdHggKmN0eCA9IE5VTEw7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwljdHggPSBremFs bG9jX29iaigqY3R4LCBHRlBfS0VSTkVMKTsKPiArCWlmICghY3R4KQo+ICsJCXJldHVybiAtRU5P TUVNOwo+ICsKPiArCW11dGV4X2xvY2soJmRlY19kZXYtPmRldl9tdXRleCk7Cj4gKwlkZWNfZGV2 LT5kZWNfY3R4ID0gY3R4OwoKW1NldmVyaXR5OiBDcml0aWNhbF0KSXMgaXQgc2FmZSB0byBhc3Np Z24gdGhlIG5ld2x5IGFsbG9jYXRlZCBjb250ZXh0IHRvIHRoZSBnbG9iYWwKZGVjX2Rldi0+ZGVj X2N0eD8gSWYgbXVsdGlwbGUgZmlsZSBoYW5kbGVzIGFyZSBvcGVuZWQgY29uY3VycmVudGx5LCB3 b24ndCB0aGlzCm92ZXJ3cml0ZSB0aGUgcG9pbnRlciBhbmQgY2F1c2UgdGhlIElTUiB0byByb3V0 ZSBldmVudHMgb25seSB0byB0aGUgbW9zdApyZWNlbnRseSBvcGVuZWQgaW5zdGFuY2U/Cgo+ICsJ Y3R4LT5kZXYgPSBkZWNfZGV2Owo+ICsJdjRsMl9maF9pbml0KCZjdHgtPmZoLCB2aWRlb19kZXZk YXRhKGZpbGUpKTsKPiArCWZpbGUtPnByaXZhdGVfZGF0YSA9ICZjdHgtPmZoOwo+ICsJdjRsMl9m aF9hZGQoJmN0eC0+ZmgsIGZpbGUpOwo+ICsJZGVjX2Rldi0+ZmlscCA9IGZpbGU7Cj4gKwltdXRl eF9pbml0KCZjdHgtPnY0bDJfaW50Zl9sb2NrKTsKPiArCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmN0 eC0+cXVldWUpOwo+ICsJY3R4LT5pbnRfY29uZCA9IDA7ClsgLi4uIF0KPiArc3RhdGljIGludCBh bWxfdmRlY19kcnZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiArewo+ICsJ c3RydWN0IGFtbF92ZGVjX2RldiAqZGV2Owo+ICsJc3RydWN0IHZpZGVvX2RldmljZSAqdmZkX2Rl YzsKPiArCXN0cnVjdCBhbWxfdmRlY19odyAqaHc7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwlk ZXYgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsK PiArCWlmICghZGV2KQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWRldi0+cGxhdF9kZXYg PSBwZGV2Owo+ICsJbXV0ZXhfaW5pdCgmZGV2LT5kZXZfbXV0ZXgpOwo+ICsKPiArCXJldCA9IHY0 bDJfZGV2aWNlX3JlZ2lzdGVyKCZwZGV2LT5kZXYsICZkZXYtPnY0bDJfZGV2KTsKPiArCWlmIChy ZXQpCj4gKwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoJnBkZXYtPmRldiwgcmV0LCAidjRsMl9kZXZp Y2VfcmVnaXN0ZXIgZXJyXG4iKTsKPiArCj4gKwl2ZmRfZGVjID0gdmlkZW9fZGV2aWNlX2FsbG9j KCk7Cj4gKwlpZiAoIXZmZF9kZWMpIHsKPiArCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgIkZh aWxlZCB0byBhbGxvY2F0ZSB2aWRlbyBkZXZpY2VcbiIpOwo+ICsJCXJldCA9IC1FTk9NRU07Cj4g KwkJZ290byBlcnJfZGV2aWNlX2FsbG9jOwo+ICsJfQo+ICsJKnZmZF9kZWMgPSBkZWNfZGV2Owo+ ICsJdmZkX2RlYy0+djRsMl9kZXYgPSAmZGV2LT52NGwyX2RldjsKPiArCXZmZF9kZWMtPmxvY2sg PSAmZGV2LT5kZXZfbXV0ZXg7Cj4gKwl2aWRlb19zZXRfZHJ2ZGF0YSh2ZmRfZGVjLCBkZXYpOwo+ ICsJZGV2LT52ZmQgPSB2ZmRfZGVjOwo+ICsJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGV2 KTsKPiArCj4gKwlodyA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKmh3KSwgR0ZQ X0tFUk5FTCk7Cj4gKwlpZiAoIWh3KSB7Cj4gKwkJcmV0ID0gLUVOT01FTTsKPiArCQlnb3RvIGVy cl9kZWNfbWVtX2luaXQ7Cj4gKwl9Cj4gKwlkZXYtPmRlY19odyA9IGh3Owo+ICsKPiArCWRldi0+ cHZkZWNfZGF0YSA9IG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YSgmcGRldi0+ZGV2KTsKPiArCXJl dCA9IGRldi0+cHZkZWNfZGF0YS0+cmVxX2h3X3Jlc291cmNlKGRldik7Cj4gKwlpZiAocmV0IDwg MCkKPiArCQlnb3RvIGVycl9od19pbml0Owo+ICsKPiArCWRldi0+bTJtX2Rldl9kZWMgPSB2NGwy X20ybV9pbml0KCZhbWxfdmRlY19tMm1fb3BzKTsKPiArCWlmIChJU19FUlIoZGV2LT5tMm1fZGV2 X2RlYykpIHsKPiArCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgIkZhaWxlZCB0byBpbml0IG1l bTJtZW0gZGVjIGRldmljZVxuIik7Cj4gKwkJcmV0ID0gUFRSX0VSUigoX19mb3JjZSB2b2lkICop ZGV2LT5tMm1fZGV2X2RlYyk7Cj4gKwkJZ290byBlcnJfaHdfaW5pdDsKPiArCX0KPiArCj4gKwly ZXQgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UodmZkX2RlYywgVkZMX1RZUEVfVklERU8sIC0xKTsK PiArCWlmIChyZXQpIHsKPiArCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgIkZhaWxlZCB0byBy ZWdpc3RlciB2aWRlbyBkZXZpY2UiKTsKPiArCQlnb3RvIGVycl92aWRfZGV2X3JlZ2lzdGVyOwo+ ICsJfQo+ICsKPiArCWRldi0+bWRldi5kZXYgPSAmcGRldi0+ZGV2Owo+ICsJc3Ryc2NweShkZXYt Pm1kZXYubW9kZWwsIEFNTF9WREVDX0RSVl9OQU1FLCBzaXplb2YoZGV2LT5tZGV2Lm1vZGVsKSk7 Cj4gKwltZWRpYV9kZXZpY2VfaW5pdCgmZGV2LT5tZGV2KTsKPiArCWRldi0+bWRldi5vcHMgPSAm YW1sX20ybV9tZWRpYV9vcHM7Cj4gKwlkZXYtPnY0bDJfZGV2Lm1kZXYgPSAmZGV2LT5tZGV2Owo+ ICsKPiArCXJldCA9IHY0bDJfbTJtX3JlZ2lzdGVyX21lZGlhX2NvbnRyb2xsZXIoZGV2LT5tMm1f ZGV2X2RlYywgdmZkX2RlYywKPiArCQkJCQkJIE1FRElBX0VOVF9GX1BST0NfVklERU9fREVDT0RF Uik7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsICJGYWlsZWQg dG8gaW5pdCBtZW0ybWVtIG1lZGlhIGNvbnRyb2xsZXJcbiIpOwo+ICsJCWdvdG8gZXJyb3JfbTJt X21jX3JlZ2lzdGVyOwo+ICsJfQo+ICsKPiArCXJldCA9IG1lZGlhX2RldmljZV9yZWdpc3Rlcigm ZGV2LT5tZGV2KTsKPiArCWlmIChyZXQpIHsKPiArCQl2NGwyX2VycigmZGV2LT52NGwyX2Rldiwg IkZhaWxlZCB0byByZWdpc3RlciBtZWRpYSBkZXZpY2UiKTsKPiArCQlnb3RvIGVycl9tZWRpYV9k ZXZfcmVnaXN0ZXI7Cj4gKwl9Cj4gKwl2ZGVjX2VuYWJsZShkZXYtPmRlY19odyk7CgpbU2V2ZXJp dHk6IE1lZGl1bV0KQnkgY2FsbGluZyB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoKSBiZWZvcmUgdmRl Y19lbmFibGUoKSwgaXNuJ3QgdGhlIGRldmljZSBub2RlCmV4cG9zZWQgdG8gdXNlcnNwYWNlIGJl Zm9yZSB0aGUgaGFyZHdhcmUgaXMgcG93ZXJlZCB1cCBhbmQgaW5pdGlhbGl6ZWQ/IENvdWxkCnRo aXMgYWxsb3cgdXNlcnNwYWNlIHRvIGlzc3VlIGlvY3RscyBvbiB1bnBvd2VyZWQgaGFyZHdhcmU/ Cgo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtlcnJfbWVkaWFfZGV2X3JlZ2lzdGVyOgo+ICsJdjRsMl9t Mm1fdW5yZWdpc3Rlcl9tZWRpYV9jb250cm9sbGVyKGRldi0+bTJtX2Rldl9kZWMpOwo+ICtlcnJv cl9tMm1fbWNfcmVnaXN0ZXI6Cj4gKwltZWRpYV9kZXZpY2VfY2xlYW51cCgmZGV2LT5tZGV2KTsK PiArZXJyX3ZpZF9kZXZfcmVnaXN0ZXI6Cj4gKwl2NGwyX20ybV9yZWxlYXNlKGRldi0+bTJtX2Rl dl9kZWMpOwo+ICtlcnJfaHdfaW5pdDoKPiArCWRldi0+ZGVjX2h3ID0gTlVMTDsKCltTZXZlcml0 eTogSGlnaF0KRG9lcyB0aGlzIGVycm9yIHBhdGggZm9yZ2V0IHRvIGNhbGwgZGV2LT5wdmRlY19k YXRhLT5kZXN0cm95X2h3X3Jlc291cmNlKGRldik/CkZhaWxpbmcgdG8gY2xlYW4gdXAgaGFyZHdh cmUgcmVzb3VyY2VzIGhlcmUgbWlnaHQgcGVybWFuZW50bHkgbGVhayBhdHRhY2hlZCBQTQpkb21h aW5zIGFuZCBkZXZpY2UgbGlua3MuCgo+ICtlcnJfZGVjX21lbV9pbml0Ogo+ICsJdmlkZW9fZGV2 aWNlX3JlbGVhc2UodmZkX2RlYyk7Cj4gK2Vycl9kZXZpY2VfYWxsb2M6Cj4gKwl2NGwyX2Rldmlj ZV91bnJlZ2lzdGVyKCZkZXYtPnY0bDJfZGV2KTsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIGFtbF92ZGVjX2Rydl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldikKPiArewo+ICsJc3RydWN0IGFtbF92ZGVjX2RldiAqZGV2ID0gcGxhdGZvcm1fZ2V0X2Ry dmRhdGEocGRldik7Cj4gKwo+ICsJdmRlY19kaXNhYmxlKGRldi0+ZGVjX2h3KTsKPiArCj4gKwlp ZiAobWVkaWFfZGV2bm9kZV9pc19yZWdpc3RlcmVkKGRldi0+bWRldi5kZXZub2RlKSkgewo+ICsJ CW1lZGlhX2RldmljZV91bnJlZ2lzdGVyKCZkZXYtPm1kZXYpOwo+ICsJCW1lZGlhX2RldmljZV9j bGVhbnVwKCZkZXYtPm1kZXYpOwo+ICsJfQo+ICsKPiArCWlmIChkZXYtPm0ybV9kZXZfZGVjKQo+ ICsJCXY0bDJfbTJtX3JlbGVhc2UoZGV2LT5tMm1fZGV2X2RlYyk7Cj4gKwlpZiAoZGV2LT52ZmQp Cj4gKwkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoZGV2LT52ZmQpOwo+ICsJaWYgKGRldi0+ZGVj X2h3KSB7Cj4gKwkJZGV2LT5wdmRlY19kYXRhLT5kZXN0cm95X2h3X3Jlc291cmNlKGRldik7Cj4g KwkJZGV2LT5kZWNfaHcgPSBOVUxMOwo+ICsJfQo+ICsJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcigm ZGV2LT52NGwyX2Rldik7Cj4gK30KCltTZXZlcml0eTogSGlnaF0KSWYgYSBwcm9jZXNzIGtlZXBz IHRoZSB2aWRlbyBmaWxlIGRlc2NyaXB0b3Igb3BlbiB3aGVuIHRoZSBkZXZpY2UgaXMgdW5ib3Vu ZCwKZGV2bV9remFsbG9jIHdpbGwgZnJlZSB0aGUgZGV2IHN0cnVjdHVyZSBhZnRlciB0aGlzIHJl bW92ZSBmdW5jdGlvbiBjb21wbGV0ZXMuCldoZW4gdGhlIGZpbGUgZGVzY3JpcHRvciBpcyBldmVu dHVhbGx5IGNsb3NlZCwgZm9wc192Y29kZWNfcmVsZWFzZSB3aWxsCmV4ZWN1dGUgYW5kIGF0dGVt cHQgdG8gYWNjZXNzIGRldi0+ZGV2X211dGV4LiBXaWxsIHRoaXMgbGVhZCB0byBhCnVzZS1hZnRl ci1mcmVlIG9uIHRoZSBkZXYgc3RydWN0dXJlPwoKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRp YS9wbGF0Zm9ybS9hbWxvZ2ljL3ZkZWMvYW1sX3ZkZWNfaHcuYyBiL2RyaXZlcnMvbWVkaWEvcGxh dGZvcm0vYW1sb2dpYy92ZGVjL2FtbF92ZGVjX2h3LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ IGluZGV4IDAwMDAwMDAwMDAwMDAuLjc5YmEyYTY4YmRlNDEKPiAtLS0gL2Rldi9udWxsCj4gKysr IGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbWxvZ2ljL3ZkZWMvYW1sX3ZkZWNfaHcuYwpbIC4u LiBdCj4gK3N0YXRpYyBpbnQgdmRlY19jbG9ja19nYXRlX2luaXQoc3RydWN0IGFtbF92ZGVjX2h3 ICpodykKPiArewo+ICsJaHctPmdhdGVzW0NMS19ET1NdLmlkID0gImRvcyI7Cj4gKwlody0+Z2F0 ZXNbQ0xLX1ZERUNdLmlkID0gInZkZWMiOwo+ICsJaHctPmdhdGVzW0NMS19IRVZDRl0uaWQgPSAi aGV2Y2YiOwo+ICsKPiArCXJldHVybiBkZXZtX2Nsa19idWxrX2dldChody0+ZGV2LCBDTEtfTUFY LCBody0+Z2F0ZXMpOwo+ICt9ClsgLi4uIF0KPiArc3RhdGljIHZvaWQgcG1fdmRlY19wb3dlcl9k b21haW5fcG93ZXJfb24oc3RydWN0IGFtbF92ZGVjX2h3ICpodywgaW50IGlkKQo+ICt7Cj4gKwlj b25zdCBzdHJ1Y3QgcG93ZXJfbWFuYWdlcl9zICpwbSA9IGh3LT5wbTsKPiArCXN0cnVjdCBkZXZp Y2UgKmRldiA9IHBtLT5wZF9kYXRhW2lkXS5kZXY7Cj4gKwlzdHJ1Y3QgY2xrX2J1bGtfZGF0YSAq Z2F0ZV9ub2RlID0gTlVMTDsKPiArCj4gKwlpZiAoaWQgPT0gVkRFQ18xKQo+ICsJCWdhdGVfbm9k ZSA9IHZkZWNfZ2V0X2Nsa19ieV9uYW1lKGh3LCAidmRlYyIpOwo+ICsJZWxzZSBpZiAoaWQgPT0g VkRFQ19IRVZDKQo+ICsJCWdhdGVfbm9kZSA9IHZkZWNfZ2V0X2Nsa19ieV9uYW1lKGh3LCAiaGV2 Y2YiKTsKPiArCj4gKwlpZiAoZ2F0ZV9ub2RlKSB7Cj4gKwkJY2xrX3ByZXBhcmVfZW5hYmxlKGdh dGVfbm9kZS0+Y2xrKTsKCltTZXZlcml0eTogSGlnaF0KV2hpbGUgdGhlICJ2ZGVjIiBhbmQgImhl dmNmIiBjbG9ja3MgYXJlIGVuYWJsZWQgaGVyZSwgaXNuJ3QgdGhlICJkb3MiIGNsb2NrCm9taXR0 ZWQgZW50aXJlbHk/IElmIHRoZSAiZG9zIiBjbG9jayByZW1haW5zIGdhdGVkLCBjb3VsZCBhY2Nl c3NpbmcgRE9TX0JVUwpyZWdpc3RlcnMgcmVzdWx0IGluIGEgc3luY2hyb25vdXMgZXh0ZXJuYWwg YWJvcnQ/Cgo+ICsJCWlmIChpZCA9PSBWREVDXzEpIHsKPiArCQkJY2xrX3NldF9yYXRlKGdhdGVf bm9kZS0+Y2xrLCA0OTk5OTk5OTIpOwo+ICsJCQlkZXZfZGJnKGh3LT5kZXYsICJhZnRlciBzZXQs IHZkZWMgY2xvY2sgaXMgJWx1IEh6XG4iLAo+ICsJCQkJY2xrX2dldF9yYXRlKGdhdGVfbm9kZS0+ Y2xrKSk7Cj4gKwkJfQo+ICsJCWRldl9kYmcoaHctPmRldiwgInRoZSAlLTE1cyBjbG9jayBvblxu IiwgZ2F0ZV9ub2RlLT5pZCk7Cj4gKwl9IGVsc2Ugewo+ICsJCWRldl9pbmZvKGh3LT5kZXYsICJj bGsgJWQsIHVucmVhY2hhYmxlXG4iLCBpZCk7Cj4gKwl9Cj4gKwo+ICsJaWYgKGRldikgewo+ICsJ CXBtX3J1bnRpbWVfZ2V0X3N5bmMoZGV2KTsKPiArCQlkZXZfZGJnKGRldiwgImRldjogJXAgbGlu ayAlcCB0aGUgJS0xNXMgcG93ZXIgb25cbiIsCj4gKwkJCWRldiwgcG0tPnBkX2RhdGFbaWRdLmxp bmssIHBtLT5wZF9kYXRhW2lkXS5uYW1lKTsKPiArCX0KPiArCj4gKwlkb3NfbG9jYWxfY29uZmln KGh3LCAxLCBpZCk7CgpbU2V2ZXJpdHk6IE1lZGl1bV0KU2hvdWxkIHRoZSByZXR1cm4gdmFsdWUg b2YgcG1fcnVudGltZV9nZXRfc3luYygpIGJlIGNoZWNrZWQgYmVmb3JlIGNhbGxpbmcKZG9zX2xv Y2FsX2NvbmZpZygpPyBJZiB0aGUgcG93ZXIgZG9tYWluIGZhaWxzIHRvIHBvd2VyIHVwLCBhY2Nl c3NpbmcgdGhlCmhhcmR3YXJlIHJlZ2lzdGVycyBjb3VsZCBsZWFkIHRvIGEgYnVzIGhhbmcuCgo+ ICt9ClsgLi4uIF0KPiArc3RhdGljIHZvaWQgdmRlY19wb3dlcm9uKHN0cnVjdCBhbWxfdmRlY19o dyAqaHcsIGVudW0gdmRlY190eXBlX2UgY29yZSkKPiArewo+ICsJaWYgKGNvcmUgPj0gVkRFQ19N QVgpCj4gKwkJcmV0dXJuOwo+ICsKPiArCW11dGV4X2xvY2soJmh3LT5wbV9tdXRleCk7Cj4gKwlp ZiAoIWh3LT5wbS0+cGRfZGF0YVtjb3JlXS5kZXYpCj4gKwkJZ290byBvdXQ7Cj4gKwo+ICsJaHct PnBtLT5wZF9kYXRhW2NvcmVdLnJlZl9jb3VudCsrOwo+ICsJaWYgKGh3LT5wbS0+cGRfZGF0YVtj b3JlXS5yZWZfY291bnQgPiAxKQo+ICsJCWdvdG8gb3V0Owo+ICsKPiArCWlmIChody0+cG0tPnBv d2VyX3N0YXRlKGh3LCBjb3JlKSkKPiArCQlnb3RvIG91dDsKCltTZXZlcml0eTogSGlnaF0KSWYg dGhlIHBvd2VyIGRvbWFpbiBpcyBhbHJlYWR5IGFjdGl2ZSwgdGhpcyBjb2RlIGp1bXBzIHBhc3Qg cG93ZXJfb24oKSBidXQKc3RpbGwgaW5jcmVtZW50cyByZWZfY291bnQuIFdvbid0IHRoZSBzdWJz ZXF1ZW50IHRlYXJkb3duIGRlY3JlbWVudCByZWZfY291bnQKYW5kIGNhbGwgcG93ZXJfb2ZmKCkg dW5jb25kaXRpb25hbGx5LCBjYXVzaW5nIHVuYmFsYW5jZWQgY2xrX2Rpc2FibGVfdW5wcmVwYXJl KCkKYW5kIHBtX3J1bnRpbWVfcHV0X3N5bmMoKSBjYWxscz8KCj4gKwo+ICsJaHctPnBtLT5wb3dl cl9vbihodywgY29yZSk7Cj4gKwo+ICtvdXQ6Cj4gKwltdXRleF91bmxvY2soJmh3LT5wbV9tdXRl eCk7Cj4gK30KWyAuLi4gXQo+ICtpbnQgZGV2X3JlcXVlc3RfaHdfcmVzb3VyY2VzKHZvaWQgKnBy aXYpCj4gK3sKWyAuLi4gXQo+ICsJaHctPmNhbnZhcyA9IG1lc29uX2NhbnZhc19nZXQoJnBkZXYt PmRldik7Cj4gKwlpZiAoSVNfRVJSKGh3LT5jYW52YXMpKQo+ICsJCXJldHVybiBQVFJfRVJSKGh3 LT5jYW52YXMpOwo+ICsKPiArCXNtX25wID0gb2ZfcGFyc2VfcGhhbmRsZShwZGV2LT5kZXYub2Zf bm9kZSwgInNlY3VyZS1tb25pdG9yIiwgMCk7Cj4gKwlpZiAoSVNfRVJSKHNtX25wKSkKPiArCQly ZXR1cm4gUFRSX0VSUihody0+Y2FudmFzKTsKCltTZXZlcml0eTogTWVkaXVtXQpTaW5jZSBvZl9w YXJzZV9waGFuZGxlKCkgcmV0dXJucyBOVUxMIG9uIGZhaWx1cmUgcmF0aGVyIHRoYW4gYW4gRVJS X1BUUiwKZG9lc24ndCB0aGUgSVNfRVJSIGNoZWNrIGZhaWwgdG8gY2F0Y2ggYSBtaXNzaW5nIG5v ZGU/IFBhc3NpbmcgTlVMTCB0bwptZXNvbl9zbV9nZXQoKSBsYXRlciBtaWdodCBjYXVzZSBpc3N1 ZXMuIEFsc28sIHdoeSBpcyBQVFJfRVJSKGh3LT5jYW52YXMpCnJldHVybmVkIGhlcmUgaW5zdGVh ZCBvZiBhbiBhcHByb3ByaWF0ZSBlcnJvciBjb2RlPwoKPiArCj4gKwlody0+c2VjX2Z3ID0gbWVz b25fc21fZ2V0KHNtX25wKTsKPiArCW9mX25vZGVfcHV0KHNtX25wKTsKPiArCWlmIChJU19FUlIo aHctPnNlY19mdykpCj4gKwkJcmV0dXJuIFBUUl9FUlIoaHctPnNlY19mdyk7ClsgLi4uIF0KPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbWxvZ2ljL3ZkZWMvaDI2NC5jIGIv ZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbWxvZ2ljL3ZkZWMvaDI2NC5jCj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAwLi5iZDNhZWY0NDQwOWYzCj4gLS0tIC9kZXYv bnVsbAo+ICsrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1sb2dpYy92ZGVjL2gyNjQuYwpb IC4uLiBdCj4gK3N0YXRpYyB2b2lkIGNvbmZpZ19zcHNfcGFyYW1zKHN0cnVjdCBhbWxfaDI2NF9j dHggKmgyNjRfY3R4LAo+ICsJCQkgICAgICB1bnNpZ25lZCBzaG9ydCAqc3BzX2Jhc2UsCj4gKwkJ CSAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfaDI2NF9zcHMgKnNwcykKPiArewo+ICsJc3Ry dWN0IGFtbF92ZGVjX2N0eCAqY3R4ID0gaDI2NF9jdHgtPnY0bDJfY3R4Owo+ICsJc3RydWN0IGFt bF92ZGVjX2h3ICpodyA9IHZkZWNfZ2V0X2h3KGN0eC0+ZGV2KTsKPiArCXUzMiBjZmdfdG1wID0g MDsKPiArCXUzMiBmcmFtZV9zaXplOwo+ICsJdTMyIG9mZnNldCA9IDA7Cj4gKwl1bnNpZ25lZCBz aG9ydCBkYXRhX3RtcFsweDEwMF07Cj4gKwlpbnQgaSwgaWk7Cj4gKwo+ICsJbWVtc2V0KHNwc19i YXNlLCAwLCAweDEwMCk7Cj4gKwo+ICsJaDI2NF9jdHgtPmZyYW1lX3dpZHRoID0gKHNwcy0+cGlj X3dpZHRoX2luX21ic19taW51czEgKyAxKSA8PCA0Owo+ICsJaDI2NF9jdHgtPmZyYW1lX2hlaWdo dCA9IChzcHMtPnBpY19oZWlnaHRfaW5fbWFwX3VuaXRzX21pbnVzMSArIDEpIDw8IDQ7CgpbU2V2 ZXJpdHk6IEhpZ2hdCkRvZXMgdGhpcyBjb2RlIHZhbGlkYXRlIHVzZXJzcGFjZS1wcm92aWRlZCBT UFMgY29udHJvbHM/IEZvciBleGFtcGxlLCBpZgptYXhfbnVtX3JlZl9mcmFtZXMgaXMgYXJ0aWZp Y2lhbGx5IGxhcmdlLCBjb3VsZCBpdCBvdmVyZmxvdyBjb2xvY2F0ZWQgYXJyYXlzPwpMaWtld2lz ZSwgY291bGQgYW4gb3Zlcmx5IGxhcmdlIHBpY193aWR0aF9pbl9tYnNfbWludXMxIGNhdXNlIGlu dGVnZXIgb3ZlcmZsb3dzCndoZW4gY2FsY3VsYXRpbmcgYWxsb2NhdGlvbiBzaXplcz8KCj4gKwo+ ICsJZGF0YV90bXBbb2Zmc2V0XSA9IFBBUkFNX0JBU0VfVkFMOwo+ICsJb2Zmc2V0ICs9IDI7Clsg Li4uIF0KPiArc3RhdGljIGludCBhbGxvY2F0ZV9jYW52YXNfcG9zKHN0cnVjdCBhbWxfaDI2NF9j dHggKmgyNjRfY3R4LCBpbnQgcG9jKQo+ICt7Cj4gKwlpbnQgaTsKPiArCWludCByZXQgPSAtMTsK PiArCXN0cnVjdCBhbWxfdmRlY19jdHggKmN0eCA9IGgyNjRfY3R4LT52NGwyX2N0eDsKPiArCj4g Kwlmb3IgKGkgPSAwOyBpIDwgKFY0TDJfSDI2NF9OVU1fRFBCX0VOVFJJRVMgKyAxKTsgaSsrKSB7 Cj4gKwkJaWYgKCgoaDI2NF9jdHgtPmNhbnZhc19wb3NfbWFwID4+IGkpICYgMHgxKSA9PSAwKSB7 Cj4gKwkJCWgyNjRfY3R4LT5jYW52YXNfcG9zX21hcCB8PSAoMSA8PCBpKTsKPiArCQkJaDI2NF9j dHgtPnJlZl9jYW52YXNbaV0ucG9jID0gcG9jOwo+ICsJCQloMjY0X2N0eC0+cmVmX2NhbnZhc1tp XS5jYW52YXNfcG9zID0gaTsKPiArCQkJcmV0ID0gaTsKPiArCj4gKwkJCWRldl9kYmcoJmN0eC0+ ZGV2LT5wbGF0X2Rldi0+ZGV2LAo+ICsJCQkJIiVzIGkgJWQgcG9zX3BvYyAlZFxuIiwgX19mdW5j X18sIGksCj4gKwkJCQloMjY0X2N0eC0+cmVmX2NhbnZhc1tpXS5wb2MpOwo+ICsJCQlicmVhazsK PiArCQl9Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQg cmVsZWFzZV9jYW52YXNfcG9zKHN0cnVjdCBhbWxfaDI2NF9jdHggKmgyNjRfY3R4LCBpbnQgaW5k ZXgpCj4gK3sKPiArCXN0cnVjdCBhbWxfdmRlY19jdHggKmN0eCA9IGgyNjRfY3R4LT52NGwyX2N0 eDsKPiArCj4gKwlpZiAoaW5kZXggPj0gMCkgewo+ICsJCWlmIChpbmRleCA+IFY0TDJfSDI2NF9O VU1fRFBCX0VOVFJJRVMpIHsKPiArCQkJZGV2X2RiZygmY3R4LT5kZXYtPnBsYXRfZGV2LT5kZXYs Cj4gKwkJCQkiJXMgZXJyb3IsIGluZGV4ICVkIGlzIGJpZ2dlciB0aGFuIGJ1ZiBjb3VudCAlZFxu IiwKPiArCQkJCV9fZnVuY19fLCBpbmRleCwgaDI2NF9jdHgtPm1heF9udW1fcmVmX2ZyYW1lcyk7 Cj4gKwkJfSBlbHNlIHsKPiArCQkJaWYgKGgyNjRfY3R4LT5yZWZfY2FudmFzW2luZGV4XS5wb2Mg IT0gSU5WQUxJRF9QT0MgJiYKPiArCQkJICAgICgoaDI2NF9jdHgtPmNhbnZhc19wb3NfbWFwID4+ IGluZGV4KSAmIDB4MSkgPT0KPiArCQkJICAgIDB4MSkgewo+ICsJCQkJaDI2NF9jdHgtPmNhbnZh c19wb3NfbWFwICY9ICh+KDEgPDwgaW5kZXgpKTsKPiArCQkJCWRldl9kYmcoJmN0eC0+ZGV2LT5w bGF0X2Rldi0+ZGV2LAo+ICsJCQkJCSIlcyBjYW52YXNfcG9zIGluZGV4ICVkIHJlbGVhc2VkIHBv YyAlZCwgY2FudmFzX3Bvc19tYXAgMHgleFxuIiwKPiArCQkJCQlfX2Z1bmNfXywgaW5kZXgsIGgy NjRfY3R4LT5yZWZfY2FudmFzW2luZGV4XS5wb2MsCj4gKwkJCQkJaDI2NF9jdHgtPmNhbnZhc19w b3NfbWFwKTsKPiArCQkJCWgyNjRfY3R4LT5yZWZfY2FudmFzW2luZGV4XS5wb2MgPSBJTlZBTElE X1BPQzsKPiArCQkJCWgyNjRfY3R4LT5yZWZfY2FudmFzW2luZGV4XS5jYW52YXNfcG9zID0gLTE7 Cj4gKwkJCX0KPiArCQl9Cj4gKwl9Cj4gK30KWyAuLi4gXQo+ICtzdGF0aWMgdm9pZCBoMjY0X2Nv bmZpZ19kZWNvZGVfc3BlYyhzdHJ1Y3QgYW1sX3ZkZWNfaHcgKmh3LCBzdHJ1Y3QgYW1sX3ZkZWNf Y3R4ICpjdHgpCj4gK3sKPiArCXN0cnVjdCBhbWxfaDI2NF9jdHggKmgyNjRfY3R4ID0gKHN0cnVj dCBhbWxfaDI2NF9jdHggKilody0+Y3Vycl9jdHg7Cj4gKwlzdHJ1Y3QgdmRlY19oMjY0X3N0YXRl bGVzc19jdHJsX3JlZiAqY3RybHMgPSAmaDI2NF9jdHgtPmN0cmxfcmVmOwo+ICsJc3RydWN0IHY0 bDJfY3RybF9oMjY0X2RlY29kZV9wYXJhbXMgKmRlY29kZSA9Cj4gKwkgICAgKHN0cnVjdCB2NGwy X2N0cmxfaDI2NF9kZWNvZGVfcGFyYW1zICopY3RybHMtPmRlY29kZTsKPiArCXN0cnVjdCBoMjY0 X2RlY29kZV9idWZfc3BlYyAqYnVmX3NwZWNfbDAsICpidWZfc3BlY19sMTsKPiArCXN0cnVjdCB2 YjJfYnVmZmVyICp2YjsKPiArCXN0cnVjdCB2YjJfdjRsMl9idWZmZXIgKnZiMl92NGwyOwo+ICsJ c3RydWN0IHZiMl9xdWV1ZSAqdnE7Cj4gKwlpbnQgaTsKPiArCj4gKwljbGVhcl91bnVzZWRfY29s X2J1ZihoMjY0X2N0eCwgZGVjb2RlKTsKPiArCj4gKwl2YjJfdjRsMiA9IHY0bDJfbTJtX25leHRf ZHN0X2J1ZihjdHgtPm0ybV9jdHgpOwo+ICsJdmIgPSAmdmIyX3Y0bDItPnZiMl9idWY7CgpbU2V2 ZXJpdHk6IEhpZ2hdCklmIHRoZSBkZXN0aW5hdGlvbiBxdWV1ZSBpcyBlbXB0eSB3aGVuIHRoaXMg SVNSIHJ1bnMsIHdvbid0IHY0bDJfbTJtX25leHRfZHN0X2J1ZgpyZXR1cm4gTlVMTD8gVGhpcyB3 b3VsZCByZXN1bHQgaW4gYW4gaW1tZWRpYXRlIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4KCj4g Kwo+ICsJaDI2NF9jdHgtPmN1cnJfc3BlYy55X2RtYV9hZGRyID0gdmIyX2RtYV9jb250aWdfcGxh bmVfZG1hX2FkZHIodmIsIDApOwo+ICsJaWYgKGN0eC0+cGljX2luZm8ucGxhbmVfbnVtID4gMSkK PiArCQloMjY0X2N0eC0+Y3Vycl9zcGVjLmNfZG1hX2FkZHIgPQo+ICsJCSAgICB2YjJfZG1hX2Nv bnRpZ19wbGFuZV9kbWFfYWRkcih2YiwgMSk7Cj4gKwllbHNlCj4gKwkJaDI2NF9jdHgtPmN1cnJf c3BlYy5jX2RtYV9hZGRyID0KPiArCQkgICAgaDI2NF9jdHgtPmN1cnJfc3BlYy55X2RtYV9hZGRy ICsgY3R4LT5waWNfaW5mby5mYl9zaXplWzBdOwo+ICsJaDI2NF9jdHgtPmN1cnJfc3BlYy5jYW52 YXNfcG9zID0KPiArCSAgICBhbGxvY2F0ZV9jYW52YXNfcG9zKGgyNjRfY3R4LCBkZWNvZGUtPnRv cF9maWVsZF9vcmRlcl9jbnQpOwo+ICsJaWYgKGgyNjRfY3R4LT5jdXJyX3NwZWMuY2FudmFzX3Bv cyA8IDApCgpbU2V2ZXJpdHk6IEhpZ2hdClNpbmNlIGNhbnZhc19wb3MgaXMgYSB1MzIgKGluc2lk ZSBzdHJ1Y3QgaDI2NF9kZWNvZGVfYnVmX3NwZWMpLCBpc24ndCB0aGlzCmNvbXBhcmlzb24gKDwg MCkgYWx3YXlzIGZhbHNlPyBUaGlzIGNhdXNlcyB0aGUgY29kZSB0byBwcm9jZWVkIHdpdGggYW4g aW52YWxpZApjYW52YXMgcG9zaXRpb24gaWYgYWxsb2NhdGVfY2FudmFzX3BvcygpIGZhaWxzLgoK PiArCQlkZXZfZXJyKCZjdHgtPmRldi0+cGxhdF9kZXYtPmRldiwgImN1cnJfc3BlYy5jYW52YXMg ZXJyb3JcbiIpOwo+ICsKPiArCWlmIChkZWNvZGUtPm5hbF9yZWZfaWRjKQo+ICsJCWgyNjRfY3R4 LT5jdXJyX3NwZWMuY29sX2J1Zl9pbmRleCA9Cj4gKwkJICAgIGFsbG9jYXRlX2NvbG9jYXRlX2J1 ZihoMjY0X2N0eCwKPiArCQkJCQkgIGRlY29kZS0+dG9wX2ZpZWxkX29yZGVyX2NudCk7ClsgLi4u IF0KPiArc3RhdGljIHZvaWQgZ2V0X2NhbnZhc19pbmRleChzdHJ1Y3QgYW1sX3ZkZWNfaHcgKmh3 LCBzdHJ1Y3QgYW1sX3ZkZWNfY3R4ICpjdHgpCj4gK3sKPiArCXN0cnVjdCBhbWxfaDI2NF9jdHgg KmgyNjRfY3R4ID0gKHN0cnVjdCBhbWxfaDI2NF9jdHggKilody0+Y3Vycl9jdHg7Cj4gKwlpbnQg aTsKPiArCXN0cnVjdCBoMjY0X2RlY29kZV9idWZfc3BlYyAqYnVmOwo+ICsKPiArCWNvbmZpZ19k ZWNvZGVfY2FudmFzKGh3LCAmaDI2NF9jdHgtPmN1cnJfc3BlYywKPiArCQkJICAgICBoMjY0X2N0 eC0+bWJfd2lkdGgsIGgyNjRfY3R4LT5tYl9oZWlnaHQpOwo+ICsJaWYgKGgyNjRfY3R4LT5saXN0 X3NpemVbMF0gPiAwKSB7Cj4gKwkJZm9yIChpID0gMDsgaSA8IGgyNjRfY3R4LT5saXN0X3NpemVb MF07IGkrKykgewo+ICsJCQlidWYgPSAmaDI2NF9jdHgtPnJlZl9saXN0MFtpXTsKPiArCQkJY29u ZmlnX2RlY29kZV9jYW52YXMoaHcsIGJ1ZiwgaDI2NF9jdHgtPm1iX3dpZHRoLAo+ICsJCQkJCSAg ICAgaDI2NF9jdHgtPm1iX2hlaWdodCk7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCWlmIChoMjY0X2N0 eC0+bGlzdF9zaXplWzFdID4gMCkgewo+ICsJCWZvciAoaSA9IDA7IGkgPCBoMjY0X2N0eC0+bGlz dF9zaXplWzFdOyBpKyspIHsKPiArCQkJYnVmID0gJmgyNjRfY3R4LT5yZWZfbGlzdDFbaV07Cj4g KwkJCWNvbmZpZ19kZWNvZGVfY2FudmFzKGh3LCBidWYsIGgyNjRfY3R4LT5tYl93aWR0aCwKPiAr CQkJCQkgICAgIGgyNjRfY3R4LT5tYl9oZWlnaHQpOwo+ICsJCX0KPiArCX0KCltTZXZlcml0eTog SGlnaF0KSWYgYSByZWZlcmVuY2UgZnJhbWUgaXMgc2hhcmVkIGJldHdlZW4gbGlzdDAgYW5kIGxp c3QxLCB3aWxsIGNvbmZpZ19kZWNvZGVfY2FudmFzKCkKYmUgY2FsbGVkIHR3aWNlIGZvciB0aGUg c2FtZSBidWZmZXIsIGNhdXNpbmcgYSByZWR1bmRhbnQgY2FudmFzIGFsbG9jYXRpb24KYW5kIGxl YWtpbmcgdGhlIGhhcmR3YXJlIGNhbnZhcyBwb29sPwoKPiArfQo+ICsKPiArc3RhdGljIHZvaWQg cmVsZWFzZV9jYW52YXNfaW5kZXgoc3RydWN0IGFtbF92ZGVjX2h3ICpodywKPiArCQkJCSBzdHJ1 Y3QgaDI2NF9kZWNvZGVfYnVmX3NwZWMgKmJ1ZikKPiArewo+ICsJaWYgKGJ1Zi0+eV9jYW52YXNf aW5kZXggPj0gMCkgewoKW1NldmVyaXR5OiBIaWdoXQpCZWNhdXNlIHlfY2FudmFzX2luZGV4IGlz IGRlY2xhcmVkIGFzIHU4LCB3b24ndCB0aGlzIGNoZWNrIGFsd2F5cyBiZSB0cnVlPwpJZiBpdCdz IHByZXZpb3VzbHkgc2V0IHRvIC0xLCBpdCB3cmFwcyB0byAyNTUsIGNhdXNpbmcgdGhlIGRyaXZl ciB0byBzcHVyaW91c2x5CmZyZWUgY2FudmFzIDI1NS4KCj4gKwkJZGV2X2RiZyhody0+ZGV2LCAi ZnJlZSB5X2NhbnZhcyAlZFxuIiwgYnVmLT55X2NhbnZhc19pbmRleCk7Cj4gKwkJbWVzb25fY2Fu dmFzX2ZyZWUoaHctPmNhbnZhcywgYnVmLT55X2NhbnZhc19pbmRleCk7Cj4gKwkJYnVmLT55X2Nh bnZhc19pbmRleCA9IC0xOwo+ICsJfQo+ICsKPiArCWlmIChidWYtPnVfY2FudmFzX2luZGV4ID49 IDApIHsKPiArCQlkZXZfZGJnKGh3LT5kZXYsICJmcmVlIHV2X2NhbnZhc19pbmRleCAlZFxuIiwK PiArCQkJYnVmLT51X2NhbnZhc19pbmRleCk7Cj4gKwkJbWVzb25fY2FudmFzX2ZyZWUoaHctPmNh bnZhcywgYnVmLT51X2NhbnZhc19pbmRleCk7Cj4gKwkJYnVmLT51X2NhbnZhc19pbmRleCA9IC0x Owo+ICsJCWJ1Zi0+dl9jYW52YXNfaW5kZXggPSAtMTsKPiArCX0KPiArfQpbIC4uLiBdCj4gK3N0 YXRpYyBpcnFyZXR1cm5fdCBoMjY0X3RocmVhZGVkX2lzcl9mdW5jKGludCBpcnEsIHZvaWQgKnBy aXYpCj4gK3sKPiArCXUzMiBkZWNfc3RhdHVzOwo+ICsJc3RydWN0IGFtbF92ZGVjX2RldiAqZGV2 ID0gKHN0cnVjdCBhbWxfdmRlY19kZXYgKilwcml2Owo+ICsJc3RydWN0IGFtbF9oMjY0X2N0eCAq aDI2NF9jdHggPSAoc3RydWN0IGFtbF9oMjY0X2N0eCAqKWRldi0+ZGVjX2h3LT5jdXJyX2N0eDsK PiArCXN0cnVjdCBhbWxfdmRlY19jdHggKmN0eCA9IChzdHJ1Y3QgYW1sX3ZkZWNfY3R4ICopZGV2 LT5kZWNfY3R4Owo+ICsJc3RydWN0IGFtbF92ZGVjX2h3ICpodyA9IHZkZWNfZ2V0X2h3KGN0eC0+ ZGV2KTsKPiArCXVuc2lnbmVkIHNob3J0ICpwID0gKHVuc2lnbmVkIHNob3J0ICopaDI2NF9jdHgt PmxtZW1fYWRkcjsKPiArCWludCBpLCBpaTsKPiArCj4gKwlyZWdtYXBfcmVhZChody0+bWFwW0RP U19CVVNdLCBEUEJfU1RBVFVTX1JFRywgJmRlY19zdGF0dXMpOwo+ICsJaDI2NF9jdHgtPmRlY19z dGF0dXMgPSBkZWNfc3RhdHVzOwo+ICsJZGV2X2RiZwo+ICsJICAgICgmZGV2LT5wbGF0X2Rldi0+ ZGV2LAo+ICsJICAgICAiJXMsIGRlY19zdGF0dXMgMHgleCBWSUZGX0JJVF9DTlQgMHgleCBNQllf TUJYIDB4JXggVkxEX1NISUZUX1NUQVRVUyAweCV4XG4iLAo+ICsJICAgICBfX2Z1bmNfXywgZGVj X3N0YXR1cywgcmVhZF9kb3NfcmVnKGh3LCBWSUZGX0JJVF9DTlQpLAo+ICsJICAgICByZWFkX2Rv c19yZWcoaHcsIE1CWV9NQlgpLCByZWFkX2Rvc19yZWcoaHcsIFZMRF9TSElGVF9TVEFUVVMpKTsK PiArCj4gKwlyZWdtYXBfcmVhZChody0+bWFwW0RPU19CVVNdLCBBVl9TQ1JBVENIX0YsICZoMjY0 X2N0eC0+c2F2ZV9hdnNjcmF0Y2hfZik7Cj4gKwo+ICsJc3dpdGNoIChkZWNfc3RhdHVzKSB7Cj4g KwljYXNlIEgyNjRfU0xJQ0VfSEVBREVSX0RPTkU6Cj4gKwkJZm9yIChpID0gMDsgaSA8IDB4NDAw OyBpICs9IDQpCj4gKwkJCWZvciAoaWkgPSAwOyBpaSA8IDQ7IGlpKyspCj4gKwkJCQloMjY0X2N0 eC0+ZHBiX3BhcmFtLmwuZGF0YVtpICsgaWldID0gcFtpICsgMyAtIGlpXTsKCltTZXZlcml0eTog TWVkaXVtXQpTaW5jZSBsbWVtX2FkZHIgaG9sZHMgRE1BIG1lbW9yeSBwb3B1bGF0ZWQgYnkgdGhl IGhhcmR3YXJlLCBzaG91bGQgYSBkbWFfcm1iKCkKYmFycmllciBiZSBpc3N1ZWQgYmVmb3JlIHJl YWRpbmcgZnJvbSBgcGAgdG8gZW5zdXJlIHRoZSBDUFUgZG9lc24ndCBvYnNlcnZlCnN0YWxlIGNh Y2hlZCBkYXRhPwoKPiArCQlzYXZlX3JlZ19zdGF0dXMoaDI2NF9jdHgpOwo+ICsJCWgyNjRfZ2V0 X3NsaWNlX3BhcmFtcyhoMjY0X2N0eCk7Cj4gKwkJaWYgKGgyNjRfY3R4LT5tc2xpY2UuZmlyc3Rf bWJfaW5fc2xpY2UgIT0gMCkKPiArCQkJaDI2NF9yZWxlYXNlX2RlY29kZV9zcGVjKGh3LCBjdHgp Owo+ICsKPiArCQloMjY0X2NvbmZpZ19kZWNvZGVfc3BlYyhodywgY3R4KTsKPiArCQloMjY0X3Jl b3JkZXJfcmVmbGlzdHMoaDI2NF9jdHgpOwo+ICsJCWdldF9jYW52YXNfaW5kZXgoaHcsIGN0eCk7 Cj4gKwo+ICsJCWlmIChoMjY0X2NvbmZpZ19kZWNvZGVfYnVmKGh3LCBjdHgpIDwgMCkgewo+ICsJ CQloMjY0X3JlbGVhc2VfZGVjb2RlX3NwZWMoaHcsIGN0eCk7Cj4gKwkJCWN0eC0+aW50X2NvbmQg PSAxOwo+ICsJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmN0eC0+cXVldWUpOwo+ICsJCQlnb3Rv IGlycV9oYW5kbGVkOwoKW1NldmVyaXR5OiBIaWdoXQpJZiB0aGUgZXhlY3V0aW9uIHRha2VzIHRo aXMgZXJyb3IgcGF0aCwgY3R4LT5pbnRfY29uZCA9IDEgc2F0aXNmaWVzIHRoZSB3YWl0CmNvbmRp dGlvbiBpbiBtMm1vcHNfdmRlY19kZXZpY2VfcnVuKCksIHdoaWNoIHRoZW4gcmV0dXJucyBkaXJl Y3RseSB3aXRob3V0CmNhbmNlbGluZyB0aGUgam9iLiBEb2VzIHRoaXMgb21pdCBhIG5lY2Vzc2Fy eSB2NGwyX20ybV9idWZfZG9uZV9hbmRfam9iX2ZpbmlzaCgpCmNhbGwgYW5kIHBlcm1hbmVudGx5 IHN0YWxsIHRoZSBtZW0ybWVtIGNvbnRleHQ/Cgo+ICsJCX0KPiArCQlpZiAoaDI2NF9jdHgtPm5l d19waWNfZmxhZyA9PSAxKSB7Cj4gKwkJCXJlZ21hcF93cml0ZShody0+bWFwW0RPU19CVVNdLCBE UEJfU1RBVFVTX1JFRywgSDI2NF9BQ1RJT05fREVDT0RFX05FV1BJQyk7Cj4gKwkJCWRldl9kYmco JmRldi0+cGxhdF9kZXYtPmRldiwgImFjdGlvbiBkZWNvZGUgbmV3IHBpY1xuIik7Cj4gKwkJCWgy NjRfY3R4LT5uZXdfcGljX2ZsYWcgPSAwOwo+ICsJCX0gZWxzZSB7Cj4gKwkJCXJlZ21hcF93cml0 ZShody0+bWFwW0RPU19CVVNdLCBEUEJfU1RBVFVTX1JFRywgSDI2NF9BQ1RJT05fREVDT0RFX1NM SUNFKTsKPiArCQkJZGV2X2RiZygmZGV2LT5wbGF0X2Rldi0+ZGV2LCAiYWN0aW9uIGRlY29kZSBu ZXcgc2xpY2VcbiIpOwo+ICsJCX0KPiArCQlicmVhazsKWyAuLi4gXQo+ICtzdGF0aWMgaW50IGFt bF9oMjY0X2xvYWRfZndfZXh0KHZvaWQgKnByaXYsIGNvbnN0IHU4ICpkYXRhLCB1MzIgbGVuKQo+ ICt7Cj4gKwlzdHJ1Y3QgYW1sX2gyNjRfY3R4ICpoMjY0X2N0eCA9IChzdHJ1Y3QgYW1sX2gyNjRf Y3R4ICopcHJpdjsKPiArCXN0cnVjdCBhbWxfdmRlY19jdHggKmN0eCA9IChzdHJ1Y3QgYW1sX3Zk ZWNfY3R4ICopaDI2NF9jdHgtPnY0bDJfY3R4Owo+ICsJc3RydWN0IGFtbF92ZGVjX2h3ICpkZWNf aHc7Cj4gKwo+ICsJaWYgKGgyNjRfY3R4LT5tY19jcHVfbG9hZGVkKQo+ICsJCXJldHVybiAwOwo+ ICsKPiArCWRlY19odyA9IHZkZWNfZ2V0X2h3KGN0eC0+ZGV2KTsKPiArCWlmICghZGVjX2h3KQo+ ICsJCXJldHVybiAtMTsKPiArCj4gKwlpZiAobGVuID4gTUNfVE9UQUxfU0laRSkgewo+ICsJCWRl dl9pbmZvKGRlY19ody0+ZGV2LCAic2l6ZSBvZiBtY19jcHVfZncgaWQgaW52YWxpZFxuIik7Cj4g KwkJcmV0dXJuIC0xOwo+ICsJfQoKW1NldmVyaXR5OiBNZWRpdW1dClNob3VsZCB0aGUgZmlybXdh cmUgbGVuZ3RoIGFsc28gYmUgY2hlY2tlZCBhZ2FpbnN0IGEgbWluaW11bSBib3VuZHMgYmVmb3Jl CmNhbGxpbmcgY29weV9tY19jcHVfZncoKT8gUGFzc2luZyB0cnVuY2F0ZWQgZmlybXdhcmUgY291 bGQgY2F1c2Ugb3V0LW9mLWJvdW5kcwpyZWFkcyB3aGVuIGFjY2Vzc2luZyBmaXhlZCBvZmZzZXRz IChlLmcuLCBkYXRhICsgMHg2MDAwKSBpbnNpZGUgY29weV9tY19jcHVfZncoKS4KCj4gKwo+ICsJ aDI2NF9jdHgtPm1jX2NwdV92YWRkciA9IGRtYV9hbGxvY19jb2hlcmVudChkZWNfaHctPmRldiwg TUNfVE9UQUxfU0laRSwKPiArCQkJCQkJICAgICZoMjY0X2N0eC0+bWNfY3B1X3BhZGRyLAo+ICsJ CQkJCQkgICAgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWgyNjRfY3R4LT5tY19jcHVfdmFkZHIpCj4g KwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJY29weV9tY19jcHVfZncoaDI2NF9jdHgtPm1jX2Nw dV92YWRkciwgZGF0YSk7Cj4gKwo+ICsJaDI2NF9jdHgtPm1jX2NwdV9sb2FkZWQgPSB0cnVlOwo+ ICsKPiArCWRldl9kYmcoZGVjX2h3LT5kZXYsICJoMjY0IG1jY3B1IGZ3IGxvYWRlZFxuIik7Cj4g Kwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK2ludCBhbWxfaDI2NF9pbml0KHZvaWQgKnByaXYp Cj4gK3sKPiArCXN0cnVjdCBhbWxfdmRlY19jdHggKmN0eCA9IChzdHJ1Y3QgYW1sX3ZkZWNfY3R4 ICopcHJpdjsKPiArCXN0cnVjdCBhbWxfdmRlY19odyAqZGVjX2h3Owo+ICsJc3RydWN0IGFtbF9o MjY0X2N0eCAqaDI2NF9jdHg7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwloMjY0X2N0eCA9IGt6 YWxsb2Nfb2JqKCpoMjY0X2N0eCwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWgyNjRfY3R4KQo+ICsJ CXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWgyNjRfY3R4LT52NGwyX2N0eCA9IGN0eDsKPiArCWRl Y19odyA9IHZkZWNfZ2V0X2h3KGN0eC0+ZGV2KTsKPiArCWlmICghZGVjX2h3KQo+ICsJCXJldHVy biAtMTsKPiArCj4gKwloMjY0X2N0eC0+bWNfY3B1X2xvYWRlZCA9IGZhbHNlOwo+ICsJZGVjX2h3 LT5od19vcHMuaXJxX2hhbmRsZXIgPSBoMjY0X2lzcjsKPiArCWRlY19ody0+aHdfb3BzLmlycV90 aHJlYWRlZF9mdW5jID0gaDI2NF90aHJlYWRlZF9pc3JfZnVuYzsKPiArCWRlY19ody0+aHdfb3Bz LmxvYWRfZmlybXdhcmVfZXggPSBhbWxfaDI2NF9sb2FkX2Z3X2V4dDsKPiArCj4gKwloMjY0X2N0 eC0+bG1lbV9hZGRyID0gZG1hX2FsbG9jX2NvaGVyZW50KGRlY19ody0+ZGV2LCBMTUVNX0RVTVBf U0laRSwKPiArCQkJCQkJICZoMjY0X2N0eC0+bG1lbV9waHlfYWRkciwKPiArCQkJCQkJIEdGUF9L RVJORUwpOwo+ICsJaWYgKCFoMjY0X2N0eC0+bG1lbV9hZGRyKSB7Cj4gKwkJcmV0ID0gLUVOT01F TTsKPiArCQlnb3RvIGVycl9hbGxvY19sbWVtOwo+ICsJfQo+ICsKPiArCWgyNjRfY3R4LT5jbWFf YWxsb2NfdmFkZHIgPQo+ICsJICAgIGRtYV9hbGxvY19jb2hlcmVudChkZWNfaHctPmRldiwgVl9C VUZfQUREUl9PRkZTRVQsCj4gKwkJCSAgICAgICAmaDI2NF9jdHgtPmNtYV9hbGxvY19hZGRyLCBH RlBfS0VSTkVMKTsKPiArCWlmICghaDI2NF9jdHgtPmNtYV9hbGxvY192YWRkcikgewo+ICsJCXJl dCA9IC1FTk9NRU07Cj4gKwkJZ290byBlcnJfYWxsb2Nfd29ya3NwYWNlOwo+ICsJfQo+ICsKPiAr CWgyNjRfY3R4LT53b3Jrc3BhY2Vfb2Zmc2V0ID0gaDI2NF9jdHgtPmNtYV9hbGxvY19hZGRyICsg RENBQ19SRUFEX01BUkdJTjsKPiArCWgyNjRfY3R4LT53b3Jrc3BhY2VfdmFkZHIgPSBoMjY0X2N0 eC0+Y21hX2FsbG9jX3ZhZGRyICsgRENBQ19SRUFEX01BUkdJTjsKPiArCj4gKwljdHgtPmNvZGVj X3ByaXYgPSBoMjY0X2N0eDsKPiArCWRlY19ody0+Y3Vycl9jdHggPSBoMjY0X2N0eDsKCltTZXZl cml0eTogQ3JpdGljYWxdClNpbWlsYXIgdG8gdGhlIGlzc3VlIGluIGZvcHNfdmNvZGVjX29wZW4o KSwgY291bGQgYXNzaWduaW5nIHRoZSBjb250ZXh0IHRvCmRlY19ody0+Y3Vycl9jdHggaGVyZSBi cmVhayBpc29sYXRpb24gYWNyb3NzIG11bHRpcGxlIGNvbmN1cnJlbnQgaW5zdGFuY2VzPwpXaGVu IG11bHRpcGxlIHN0cmVhbXMgYXJlIGFjdGl2ZSwgdGhlIElTUiB3aWxsIGJsaW5kbHkgZGVyZWZl cmVuY2UgY3Vycl9jdHgsCnBvdGVudGlhbGx5IHRhcmdldGluZyB0aGUgd3Jvbmcgb3IgZnJlZWQg Y29udGV4dC4KCj4gKwloMjY0X2N0eC0+Y29sX2J1Zl9hbGxvY19zaXplID0gMDsKPiArCWgyNjRf Y3R4LT5pbml0X2ZsYWcgPSAwOwo+ICsJaDI2NF9jdHgtPm5ld19waWNfZmxhZyA9IDA7Cj4gKwlo MjY0X2N0eC0+cGFyYW1fc2V0ID0gMDsKPiArCWgyNjRfY3R4LT5yZWdfaXFpZGN0X2NvbnRyb2xf aW5pdF9mbGFnID0gMDsKPiArCWgyNjRfY3R4LT5kZWNvZGVfcGljX2NvdW50ID0gMDsKPiArCj4g KwlyZXR1cm4gMDsKCi0tIApTYXNoaWtvIEFJIHJldmlldyDCtyBodHRwczovL3Nhc2hpa28uZGV2 LyMvcGF0Y2hzZXQvMjAyNjA1MjYtYjQtczQtdmRlYy11cHN0cmVhbS12NS0wLTMzYmM4MTdmOTNm NEBhbWxvZ2ljLmNvbT9wYXJ0PTQKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCmxpbnV4LWFtbG9naWMgbWFpbGluZyBsaXN0CmxpbnV4LWFtbG9naWNAbGlz dHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2xpbnV4LWFtbG9naWMK