From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from out28-194.mail.aliyun.com (out28-194.mail.aliyun.com [115.124.28.194]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A8CEF4052CD for ; Wed, 19 Aug 2026 08:33:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=115.124.28.194 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787128408; cv=none; b=J9l+FWqh5Te4RQIdG62NEHDi3t6dr3PSOgQsPldjxU76ZBsSofJD8Gn8UntJHa7CztaeDUDzMO3+da3FVbLyUma8GUGaPAZEy/fegPuqECdowl7XAD2ujSZO78fBbuAi8B8ZOk71b2bbEmjVUiduAk7xfqGaFdLyAXQuigBOT3E= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787128408; c=relaxed/simple; bh=zxYKr2OSsagyvjMahgDsgd20sxrTYOfW7eT9OH04Jq0=; h=Date:From:To:Cc:Subject:References:Mime-Version:Message-ID: Content-Type; b=IXso/fghzo42B84AGEJicgsGvsccCQb01bucoTAtJDBTwMeaz6t2j7uB7D6SeuRMB2qmNrb1H4ZyKrRfUc1+TLecpWZsefw1uKTAdWnjY+IQg1gZnP+pHoLnRVbGL26ukVV2zy/VaHWP7oDzqgprbx5ZIwgD6kxLM+NcWg86cfQ= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=armdesigner.com; spf=none smtp.mailfrom=armdesigner.com; arc=none smtp.client-ip=115.124.28.194 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=armdesigner.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=armdesigner.com X-Alimail-AntiSpam:AC=CONTINUE;BC=0.07436259|-1;CH=green;DM=|CONTINUE|false|;DS=CONTINUE|ham_system_inform|0.291511-0.00490891-0.70358;FP=11248028799912396438|0|0|0|0|-1|-1|-1;HT=maildocker-contentspam033068005250;MF=support@armdesigner.com;NM=1;PH=DS;RN=17;RT=17;SR=0;TI=SMTPD_---.irAicsl_1787128392; Received: from DESKTOP-F4DGRM2(mailfrom:support@armdesigner.com fp:SMTPD_---.irAicsl_1787128392 cluster:ay29) by smtp.aliyun-inc.com; Wed, 19 Aug 2026 16:33:14 +0800 Date: Wed, 19 Aug 2026 16:33:12 +0800 Organization: boardcon From: support To: "royalnet026@gmail.com" , "Sandy Huang" , "Heiko Stuebner" , "Andy Yan" Cc: "royalnet026@gmail.com" , "Cristian Ciocaltea" , "Sebastian Reichel" , "Chaoyi Chen" , "Alexey Charkov" , "Maarten Lankhorst" , "Maxime Ripard" , "Thomas Zimmermann" , "David Airlie" , "Simona Vetter" , dri-devel , linux-rockchip , linux-arm-kernel , linux-kernel Subject: Re: [PATCH v2] drm/rockchip: vop2: Scale the AXI clock to the bandwidth the mode needs References: <20260813094614.9072-1-royalnet026@gmail.com> X-Priority: 3 X-Has-Attach: no X-Mailer: Foxmail 7.2.25.563[cn] Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 Message-ID: <2026081916331211222713@armdesigner.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgSWdvciwgCgpUaGFua3MgZm9yIHRoZSB0aG9yb3VnaCB3cml0ZWJhY2sg4oCUIGdvb2QgdG8g c2VlIHRoZSBwb2ludHMgbGFuZCB3aGVyZSB0aGV5IG1hdHRlci4gClJlc3BvbnNlcyB0byB5b3Vy IGFza2VkOiAKMS4gIFBlcm1pc3Npb24gdG8gcmVmZXJlbmNlIHRoaXMgY29ycmVzcG9uZGVuY2U6 IEdyYW50ZWQuICAKWW91IG1heSBjaXRlIHRoZSBtdWx0aS1DUlRDIHRlYXJpbmcgb2JzZXJ2YXRp b24gYW5kIHRoZSBmYW5sZXNzIHRoZXJtYWwgZGF0YSBpbiB0aGUgdjMgY292ZXIgbGV0dGVyLgoy LiAgT24tbGlzdCBwYXJ0aWNpcGF0aW9uIHdoZW4gdjMgZHJvcHM6IFllcywgSSB3aWxsIHBvc3Qg YSBzdW1tYXJ5IG9uIHRoZSBsaXN0LiBJJ2xsIGtlZXAgaXQgZm9jdXNlZCBvbiB0aGUgdHdvIHBv aW50cyBtYWludGFpbmVycyBjYXJlIGFib3V0Cm1vc3Q6ICAgKGEpIFRlYXJpbmcgZHVyaW5nIG11 bHRpLUNSVEMgcmVjb25maWd1cmUgdW5kZXIgcHJvZHVjdGlvbiBtdWx0aS1kaXNwbGF5IGxvYWRz IChkdWFsIEhETUkgKyBEUCBzaW11bHRhbmVvdXNseSBhY3RpdmUsIHRyYW5zaXRpb24gZnJvbQp0 aHJlZS1zY3JlZW4gdG8gc2luZ2xlLXNjcmVlbikuIChiKSBUaGVybWFsIGRlbHRhIGJldHdlZW4g NTAwIE1IeiBhbmQgODAwIE1IeiBBQ0xLIG9uIGEgZmFubGVzcyBpbmR1c3RyaWFsIGNoYXNzaXMg KFJLMzU4OEosIGFtYmllbnQgNjBDLCBzdXN0YWluZWQgU29DIGp1bmN0aW9uCiszLTVDIGF0IDc1 MCBNSHopLiAxLiBUZXN0ZWQtYnk6IFdpbGxpbmcgdG8gY29tbWl0LiBPdXIgRU0zNTg4IGJvYXJk IChSSzM1ODgsIGR1YWwgSERNSSAyLjEgKyBEUCAxLjQgKyBkdWFsIE1JUEkgRFNJLCBmYW5sZXNz LCBpbmR1c3RyaWFsIGRlcGxveW1lbnQpIGlzCmV4YWN0bHkgdGhlIG11bHRpLWRpc3BsYXkgYmFu ZHdpZHRoIHNjZW5hcmlvIHlvdXIgcGF0Y2ggdGFyZ2V0cy4gIAoKT25lIGNhdmVhdCB3b3J0aCBi ZWluZyB1cGZyb250IGFib3V0OiBvdXIgcHJvZHVjdGlvbiBrZXJuZWwgaXMgNi4xIExUUyAoUm9j a2NoaXAgQlNQKS4gSSBjYW4gYXBwbHkgdjMgb24gdG9wIG9mIHRoYXQgZm9yIHRoZSByZWFsLXdv cmxkIGRlcGxveW1lbnQgdGVzdCDigJQgCm11bHRpLWRpc3BsYXkgc3RyZXNzICsgdGhlcm1hbCBs b2dnaW5nIG92ZXIgYSA0OGggc29hay4gSWYgeW91IG5lZWQgdGhlIHRlc3Qgc3BlY2lmaWNhbGx5 IG9uIGEgbWFpbmxpbmUgdHJlZSAodjYuMTIrKSwKSSBjYW4gc3BpbiB0aGF0IHVwIHRvbzsgaXQn bGwgdGFrZSBhIGZldyBkYXlzIGxvbmdlciBiZWNhdXNlIEkgbmVlZCB0byBicmluZyB1cCB0aGUg Ym9hcmQgb24gbWFpbmxpbmUgZmlyc3QgKG5vIG1haW5saW5lIERUUyBmb3Igb3VyIGJvYXJkCnll dCDigJQgd29ya2luZyBvbiBpdCkuIFdoaWNoIHdvdWxkIHlvdSBwcmVmZXIg4oCUIEJTUCA2LjEg cmVhbC13b3JsZCwgb3IgbWFpbmxpbmUgY2xlYW4tcm9vbSwgb3IgYm90aD8gMS4gdjMgbm90aWZp Y2F0aW9uOiBJZiB5b3UgQ0MgbWUgd2hlbiB2MyBpcyBwb3N0ZWQsIEknbGwgZ2V0IG9uIGl0IGlt bWVkaWF0ZWx5LiAKT3RoZXJ3aXNlIEknbGwgd2F0Y2ggdGhlIGRyaS1kZXZlbCBsaXN0LiAgR29v ZCBsdWNrIHdpdGggdGhlIHYzLiBMb29raW5nIGZvcndhcmQgdG8gc2VlaW5nIHRoZSBGUkwgcmVs YXRpb25zaGlwCnN0YXRlZCBleHBsaWNpdGx5IGFuZCB0aGUgY29tbWl0X3NldHVwL2NvbW1pdF90 YWlsIGRpcmVjdGlvbiBzb3J0ZWQuIAoKQmVzdCByZWdhcmRzLAoKT3dlbgpCb2FyZGNvbiBFbWJl ZGRlZCBEZXNpZ24KCgoKCkZyb206wqBJZ29yIFBhdW5vdmljCgoKCkRhdGU6wqAyMDI2LTA4LTEz wqAxNzo0NQoKCgpUbzrCoFNhbmR5IEh1YW5nOyBIZWlrbyBTdHVlYm5lcjsgQW5keSBZYW4KCgoK Q0M6wqBJZ29yIFBhdW5vdmljOyBDcmlzdGlhbiBDaW9jYWx0ZWE7IFNlYmFzdGlhbiBSZWljaGVs OyBDaGFveWkgQ2hlbjsgQWxleGV5IENoYXJrb3Y7IE1hYXJ0ZW4gTGFua2hvcnN0OyBNYXhpbWUg UmlwYXJkOyBUaG9tYXMgWmltbWVybWFubjsgRGF2aWQgQWlybGllOyBTaW1vbmEgVmV0dGVyOyBk cmktZGV2ZWw7IGxpbnV4LXJvY2tjaGlwOyBsaW51eC1hcm0ta2VybmVsOyBsaW51eC1rZXJuZWwK CgoKU3ViamVjdDrCoFtQQVRDSCB2Ml0gZHJtL3JvY2tjaGlwOiB2b3AyOiBTY2FsZSB0aGUgQVhJ IGNsb2NrIHRvIHRoZSBiYW5kd2lkdGggdGhlIG1vZGUgbmVlZHMKCgoKVk9QMiBmZXRjaGVzIHRo ZSBzY2Fub3V0IGRhdGEgZm9yIGFsbCBvZiBpdHMgdmlkZW8gcG9ydHMgb3ZlciBhIHNpbmdsZQoK CgpBWEkgY2xvY2suwqAgT24gUkszNTg4IHRoYXQgY2xvY2sgaXMgcGlubmVkIHRvIDUwMCBNSHog YnkgdGhlIGRldmljZSB0cmVlCgoKCmFuZCBub3RoaW5nIGV2ZXIgcmFpc2VzIGl0LCBzbyBhIG1v ZGUgd2hvc2UgcGl4ZWwgcmF0ZSBvdXRydW5zIHdoYXQgdGhlCgoKCkFYSSBjbG9jayBjYW4gZGVs aXZlciB1bmRlcnJ1bnMgdGhlIGludGVybmFsIHNjYW5vdXQgRklGTy7CoCBUaGUgaGFyZHdhcmUK CgoKcmVwb3J0cyB0aGlzIGFzIFBPU1RfQlVGX0VNUFRZIGFuZCB0aGUgcGljdHVyZSBpcyBjb3Jy dXB0ZWQuCgoKCsKgCgoKCjM4NDB4MjE2MEAxMjAgb3ZlciBEaXNwbGF5UG9ydCBpcyBzdWNoIGEg bW9kZS7CoCBNZWFzdXJlZCBvbiBhbiBPcmFuZ2UgUGkKCgoKNSBQbHVzIGJ5IG1vdmluZyB0aGUg cmF0ZSBhdCBydW50aW1lIHdoaWxlIHRoZSBtb2RlIHdhcyB1cCwgd2l0aCBkY2xrCgoKCnVuY2hh bmdlZCBhdCA1OTQgTUh6IHRocm91Z2hvdXQsIHNvIHRoYXQgdGhlIEFYSSByYXRlIHdhcyB0aGUg b25seQoKCgp2YXJpYWJsZToKCgoKwqAKCgoKwqAgNTAwIE1IejogfjU5NDAwMCBzdXBwcmVzc2Vk IHZvcDJfaXNyIGNhbGxiYWNrcyBwZXIgNSBzLCBjb3JydXB0ZWQKCgoKwqAgNzUwIE1Iejogbm8g UE9TVF9CVUZfRU1QVFkgYXQgYWxsIGZvciB0aGUgNDIgcyB0aGUgcGhhc2UgbGFzdGVkLCBjbGVh bgoKCgrCoCA1MDAgTUh6OiB+NjA3MDAwIHN1cHByZXNzZWQgY2FsbGJhY2tzIHBlciA1IHMsIGNv cnJ1cHRlZCBhZ2FpbgoKCgrCoAoKCgpCb3RoIHRyYW5zaXRpb25zIGFyZSBpbW1lZGlhdGUuwqAg SGVpa28gU3R1ZWJuZXIgcmVwb3J0cyB0aGUgc2FtZQoKCgpzdGFydmF0aW9uIG9uIGRpZmZlcmVu dCBoYXJkd2FyZSBbMV0uCgoKCsKgCgoKClRoZSByZXF1aXJlbWVudCBmb2xsb3dzIGVhY2ggcG9y dCdzIHBpeGVsIHJhdGUgcmF0aGVyIHRoYW4gaXRzIGludGVyZmFjZQoKCgpjbG9jaywgYW5kIGl0 IGlzIHBlciBwb3J0IHJhdGhlciB0aGFuIGFnZ3JlZ2F0ZS7CoCBUd28gbWVhc3VyZW1lbnRzIGF0 CgoKCjUwMCBNSHogcGluIHRoYXQgZG93bjoKCgoKwqAKCgoKwqAgLSBhIHNpbmdsZSBwb3J0IHNj YW5uaW5nIG91dCAzODQweDIxNjBAMTIwIHVuZGVycnVucywgd2hpbGUgdGhlIHNhbWUKCgoKwqDC oMKgIGNvbXBvc2VkIHBpeGVsIHJhdGUgc3ByZWFkIG92ZXIgdGhyZWUgcG9ydHMgLSAzODQweDIx NjBANjAgb24gb25lCgoKCsKgwqDCoCBhbmQgMzg0MHgyMTYwQDMwIG9uIHR3byBvdGhlcnMgLSBp cyBjbGVhbiBmb3IgYSBtaW51dGUgd2l0aCBubwoKCgrCoMKgwqAgdW5kZXJydW4gb24gYW55IG9m IHRoZW0uwqAgVGhlIHRvdGFscyBhcmUgZXF1YWwgdG8gdGhlIHBpeGVsOgoKCgrCoMKgwqAgMzg0 MCoyMTYwKjEyMCA9PSAzODQwKjIxNjAqKDYwKzMwKzMwKS4KCgoKwqAKCgoKwqAgLSAzODQweDIx NjBANjAgaXMgY2xlYW4gd2hlcmUgMzg0MHgyMTYwQDEyMCBpcyBub3QsIGFsdGhvdWdoIGJvdGgg cnVuCgoKCsKgwqDCoCBkY2xrIGF0IDU5NCBNSHogb24gdGhpcyBib2FyZDogdGhlIDEyMCBIeiBs aW5rIGlzIFlDYkNyIDQ6MjowLCB3aGljaAoKCgrCoMKgwqAgaGFsdmVzIGRjbGsgd2l0aG91dCBo YWx2aW5nIHRoZSByYXRlIGF0IHdoaWNoIHRoZSBwb3J0IGNvbnN1bWVzCgoKCsKgwqDCoCBwaXhl bHMuCgoKCsKgCgoKClNvIHRoZSBjb25kaXRpb24gYmVsb25ncyBvbiBlYWNoIHZpZGVvIHBvcnQn cyBvd24gY3J0Y19jbG9jay7CoCBTdW1taW5nCgoKCmFjcm9zcyBwb3J0cyB3b3VsZCBiZSB3cm9u ZywgYW5kIGtleWluZyBvbiBkY2xrIHdvdWxkIG1pc3MgNDoyOjAKCgoKZW50aXJlbHkuwqAgVGhl IHRocmVzaG9sZCBzaXRzIGJldHdlZW4gdGhlIG1lYXN1cmVkIHBvaW50czogMzg0MHgyMTYwQDYw CgoKCig1OTQwMDAga0h6KSBhbmQgMjU2MHgxNDQwQDE0NCAoYWJvdXQgNTg2MDAwIGtIeikgYXJl IGJvdGggY2xlYW4gYXQgdGhlCgoKCmRlZmF1bHQgcmF0ZSwgMzg0MHgyMTYwQDEyMCAoMTE4ODAw MCBrSHopIGlzIG5vdC4KCgoKwqAKCgoKVHJhY2sgdGhlIHJlcXVpcmVtZW50IGFzIGEgZ2xvYmFs IGF0b21pYyBzdGF0ZSBvYmplY3QgcmF0aGVyIHRoYW4gYnkKCgoKd2Fsa2luZyB0aGUgQ1JUQyBs aXN0IHdoZW4gdGhlIHJhdGUgaXMgYXBwbGllZC7CoCBFYWNoIENSVEMgcmVjb3JkcyB3aGF0CgoK Cml0IG5lZWRzIGR1cmluZyBpdHMgb3duIGF0b21pYyBjaGVjaywgYW5kIHRoZSByYXRlIGFwcGxp ZWQgaXMgdGhlCgoKCm1heGltdW0gb3ZlciB0aGUgcG9ydHMuwqAgR29pbmcgdGhyb3VnaCB0aGUg YXRvbWljIHN0YXRlIGlzIHdoYXQgbWFrZXMKCgoKdGhpcyBzYWZlOiBhIGNvbW1pdCBvbmx5IGV2 ZXIgd3JpdGVzIHRoZSBlbnRyeSBmb3IgYSBDUlRDIGl0IGhvbGRzIGEKCgoKbG9jayBmb3IsIGFu ZCBuZXZlciByZWFkcyB0aGUgc3RhdGUgb2YgYSBDUlRDIHRoYXQgYSBjb25jdXJyZW50IGNvbW1p dAoKCgptYXkgYmUgc3dhcHBpbmcgdW5kZXJuZWF0aCBpdC7CoCBUaGUgcmF0ZSB0aGUgcGxhdGZv cm0gc2V0IHVwIGlzIHVzZWQgYXMKCgoKdGhlIGxvd2VyIGJvdW5kLCBzbyBhIGJvYXJkIHRoYXQg YWxyZWFkeSBjb25maWd1cmVzIGEgaGlnaGVyIHJhdGUga2VlcHMKCgoKaXQuCgoKCsKgCgoKClRl c3RlZCBvbiB0aGUgc2FtZSBib2FyZCBvbiBkcm0tbWlzYy1uZXh0IHBsdXMgdGhlIGR3LWRwIGFu ZCBSb2NrY2hpcAoKCgpVU0JEUCBQSFkgc2VyaWVzLCB3aGljaCBEaXNwbGF5UG9ydCBBbHQgTW9k ZSBuZWVkcyBpbiBvcmRlciB0byBjb21lIHVwCgoKCmF0IGFsbDogMzg0MHgyMTYwQDEyMCBzZWxl Y3RzIDc1MCBNSHogYW5kIHJ1bnMgd2l0aCBubyB1bmRlcnJ1biwKCgoKZHJvcHBpbmcgdG8gMzg0 MHgyMTYwQDYwIHJldHVybnMgdGhlIGNsb2NrIHRvIDUwMCBNSHogYW5kIHN0YXlzIGNsZWFuLAoK CgphbmQgZ29pbmcgYmFjayByYWlzZXMgaXQgYWdhaW4uwqAgT24gdGhhdCBzYW1lIGtlcm5lbCB3 aXRob3V0IHRoaXMgcGF0Y2gKCgoKdGhlIG91dHB1dCBzaG93cyBubyBwaWN0dXJlIGF0IGFueSBt b2RlLgoKCgrCoAoKCgpMaW5rOiBodHRwczovL2xvcmUua2VybmVsLm9yZy9hbGwvMjAyNjA4MDgx MDQyNDAuMTM3NzYtMS1yb3lhbG5ldDAyNkBnbWFpbC5jb20vCgoKCkxpbms6IGh0dHBzOi8vbG9y ZS5rZXJuZWwub3JnL2FsbC8yMDc2NzEzNy5nZU81S2dhV0w1QGRpZWdvLyBbMV0KCgoKU2lnbmVk LW9mZi1ieTogSWdvciBQYXVub3ZpYyA8cm95YWxuZXQwMjZAZ21haWwuY29tPgoKCgotLS0KCgoK djI6CgoKCi0gUmV3b3JrZWQgaG93IHRoZSByZXF1aXJlbWVudCBpcyB0cmFja2VkLsKgIHYxIGNv bXB1dGVkIHRoZSByYXRlIGJ5IHdhbGtpbmcKCgoKwqDCoCB0aGUgQ1JUQyBsaXN0IGF0IHRoZSBw b2ludCBpdCBhcHBsaWVkIGl0LCB3aGljaCByZWFkIHRoZSBzdGF0ZSBvZiBDUlRDcyB0aGUKCgoK wqDCoCBjb21taXQgaG9sZHMgbm8gbG9jayBmb3I7IGEgY29uY3VycmVudCBub24tYmxvY2tpbmcg Y29tbWl0IG9uIGFub3RoZXIgQ1JUQwoKCgrCoMKgIGNhbiBzd2FwIGFuZCBmcmVlIHRoYXQgc3Rh dGUgdW5kZXJuZWF0aC7CoCBDYXVnaHQgYnkgdGhlIFNhc2hpa28gQUkgcmV2aWV3CgoKCsKgwqAg WzJdIGJlZm9yZSBhbnlvbmUgaGFkIHRvIHRyaXAgb3ZlciBpdC7CoCB2MiBoYXMgZWFjaCBDUlRD IHJlY29yZCBpdHMgb3duCgoKCsKgwqAgcmVxdWlyZW1lbnQgaW4gYSBnbG9iYWwgYXRvbWljIHN0 YXRlIG9iamVjdCBkdXJpbmcgaXRzIG93biBhdG9taWMgY2hlY2sgYW5kCgoKCsKgwqAgdGFrZXMg dGhlIG1heGltdW0gb3ZlciB0aGUgcG9ydHMsIHNvIGEgY29tbWl0IG5ldmVyIHJlYWRzIHN0YXRl IGl0IGRvZXMgbm90CgoKCsKgwqAgb3duLsKgIFRoZSBzaGFwZSBmb2xsb3dzIHZjNCdzIGhhbmRs aW5nIG9mIGl0cyBjb3JlIGNsb2NrLCB3aGljaCBpcyB0aGUgc2FtZQoKCgrCoMKgIHByb2JsZW0u CgoKCi0gUmV0ZXN0ZWQgb24gaGFyZHdhcmUgd2l0aCB0aGUgbmV3IG1lY2hhbmlzbSwgc2luY2Ug dGhlIG9sZCBtZWFzdXJlbWVudCBubwoKCgrCoMKgIGxvbmdlciBhcHBsaWVzIHRvIGl0OiAzODQw eDIxNjBAMTIwIHNlbGVjdHMgNzUwIE1IeiwgZHJvcHBpbmcgdG8KCgoKwqDCoCAzODQweDIxNjBA NjAgcmV0dXJucyB0aGUgY2xvY2sgdG8gNTAwIE1IeiwgYW5kIGdvaW5nIGJhY2sgcmFpc2VzIGl0 IGFnYWluLAoKCgrCoMKgIHdpdGggbm8gUE9TVF9CVUZfRU1QVFkgaW4gYW55IHBoYXNlIGFuZCBu b3RoaW5nIGZhaWxpbmcgaW4gdGhlIGF0b21pYyBwYXRoLgoKCgrCoAoKCgp2MTogaHR0cHM6Ly9s b3JlLmtlcm5lbC5vcmcvYWxsLzIwMjYwODEyMTA0OTA5LjYzOTAtMS1yb3lhbG5ldDAyNkBnbWFp bC5jb20vCgoKClsyXSBodHRwczovL2xvcmUua2VybmVsLm9yZy9hbGwvMjAyNjA4MTIxMDU2NDku MzlDQkExRjAwMEU5QHNtdHAua2VybmVsLm9yZy8KCgoKZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlw L3JvY2tjaGlwX2RybV92b3AyLmMgfCAxMDcgKysrKysrKysrKysrKysrKysrKwoKCgpkcml2ZXJz L2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcDIuaCB8wqAgMTkgKysrKwoKCgoyIGZp bGVzIGNoYW5nZWQsIDEyNiBpbnNlcnRpb25zKCspCgoKCsKgCgoKCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcDIuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fdm9wMi5jCgoKCmluZGV4IDRjY2UzZTMzNmY1Yi4uZmRl ZTA4MDQyYWM3IDEwMDY0NAoKCgotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2No aXBfZHJtX3ZvcDIuYwoKCgorKysgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBf ZHJtX3ZvcDIuYwoKCgpAQCAtMTA0LDYgKzEwNCwyMCBAQCBlbnVtIHZvcDJfYWZiY19mb3JtYXQg ewoKCgojZGVmaW5lIFZPUDJfTUFYX0RDTEtfUkFURSA2MDAwMDAwMDBVTAoKCgorLyoKCgoKKyAq IEFsbCB2aWRlbyBwb3J0cyBmZXRjaCB0aGVpciBzY2Fub3V0IGRhdGEgb3ZlciBhIHNpbmdsZSBB WEkgY2xvY2suwqAgVGhlCgoKCisgKiBoYXJkd2FyZSBidWZmZXJzIHRoYXQgZGF0YSBpbiBhbiBp bnRlcm5hbCBGSUZPIHdoaWNoIGlzIGRyYWluZWQgYXQgdGhlCgoKCisgKiBwaXhlbCByYXRlLCBz byBhIG1vZGUgd2hvc2UgcGl4ZWwgcmF0ZSBvdXRydW5zIHRoZSBmaWxsIHJhdGUgdW5kZXJydW5z IHRoZQoKCgorICogRklGTywgd2hpY2ggdGhlIGhhcmR3YXJlIHJlcG9ydHMgYXMgUE9TVF9CVUZf RU1QVFkgYW5kIHdoaWNoIHNob3dzIHVwIGFzIGEKCgoKKyAqIGNvcnJ1cHRlZCBpbWFnZS7CoCBS YWlzZSB0aGUgQVhJIGNsb2NrIGZvciBtb2RlcyB0aGF0IG5lZWQgaXQuCgoKCisgKgoKCgorICog VGhlIHJlcXVpcmVtZW50IGZvbGxvd3MgdGhlIHBpeGVsIHJhdGUgcmF0aGVyIHRoYW4gdGhlIGlu dGVyZmFjZSBjbG9jazogYQoKCgorICogWUNiQ3IgNDoyOjAgbGluayBoYWx2ZXMgZGNsayBidXQg bm90IHRoZSByYXRlIGF0IHdoaWNoIHRoZSB2aWRlbyBwb3J0CgoKCisgKiBjb25zdW1lcyBwaXhl bHMuCgoKCisgKi8KCgoKKyNkZWZpbmUgVk9QMl9BQ0xLX1JBVEVfSElHSCA3NTAwMDAwMDBVTAoK CgorI2RlZmluZSBWT1AyX0hJR0hfQldfUElYQ0xLX0tIWiAxMDAwMDAwCgoKCisKCgoKLyoKCgoK wqAgKiBidXMtZm9ybWF0IHR5cGVzLgoKCgrCoCAqLwoKCgpAQCAtMTAwOCw2ICsxMDIyLDcyIEBA IHN0YXRpYyBib29sIHZvcDJfZ2FtbWFfbHV0X2luX3VzZShzdHJ1Y3Qgdm9wMiAqdm9wMiwgc3Ry dWN0IHZvcDJfdmlkZW9fcG9ydCAqdnApCgoKCnJldHVybiBnYW1tYV9lbl92cF9pZCAhPSBucl92 cHMgJiYgZ2FtbWFfZW5fdnBfaWQgIT0gdnAtPmlkOwoKCgp9CgoKCitzdGF0aWMgc3RydWN0IGRy bV9wcml2YXRlX3N0YXRlICoKCgoKK3ZvcDJfYWNsa19jcmVhdGVfc3RhdGUoc3RydWN0IGRybV9w cml2YXRlX29iaiAqb2JqKQoKCgorewoKCgorIHN0cnVjdCB2b3AyX2FjbGtfc3RhdGUgKnN0YXRl OwoKCgorCgoKCisgc3RhdGUgPSBremFsbG9jX29iaigqc3RhdGUpOwoKCgorIGlmICghc3RhdGUp CgoKCisgcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CgoKCisKCgoKKyByZXR1cm4gJnN0YXRlLT5i YXNlOwoKCgorfQoKCgorCgoKCitzdGF0aWMgc3RydWN0IGRybV9wcml2YXRlX3N0YXRlICoKCgoK K3ZvcDJfYWNsa19kdXBsaWNhdGVfc3RhdGUoc3RydWN0IGRybV9wcml2YXRlX29iaiAqb2JqKQoK CgorewoKCgorIHN0cnVjdCB2b3AyX2FjbGtfc3RhdGUgKnN0YXRlOwoKCgorCgoKCisgc3RhdGUg PSBrbWVtZHVwKG9iai0+c3RhdGUsIHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKCgoKKyBp ZiAoIXN0YXRlKQoKCgorIHJldHVybiBOVUxMOwoKCgorCgoKCisgX19kcm1fYXRvbWljX2hlbHBl cl9wcml2YXRlX29ial9kdXBsaWNhdGVfc3RhdGUob2JqLCAmc3RhdGUtPmJhc2UpOwoKCgorCgoK CisgcmV0dXJuICZzdGF0ZS0+YmFzZTsKCgoKK30KCgoKKwoKCgorc3RhdGljIHZvaWQgdm9wMl9h Y2xrX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRybV9wcml2YXRlX29iaiAqb2JqLAoKCgorIMKgwqDC oCBzdHJ1Y3QgZHJtX3ByaXZhdGVfc3RhdGUgKnN0YXRlKQoKCgorewoKCgorIGtmcmVlKHRvX3Zv cDJfYWNsa19zdGF0ZShzdGF0ZSkpOwoKCgorfQoKCgorCgoKCitzdGF0aWMgY29uc3Qgc3RydWN0 IGRybV9wcml2YXRlX3N0YXRlX2Z1bmNzIHZvcDJfYWNsa19zdGF0ZV9mdW5jcyA9IHsKCgoKKyAu YXRvbWljX2NyZWF0ZV9zdGF0ZSA9IHZvcDJfYWNsa19jcmVhdGVfc3RhdGUsCgoKCisgLmF0b21p Y19kdXBsaWNhdGVfc3RhdGUgPSB2b3AyX2FjbGtfZHVwbGljYXRlX3N0YXRlLAoKCgorIC5hdG9t aWNfZGVzdHJveV9zdGF0ZSA9IHZvcDJfYWNsa19kZXN0cm95X3N0YXRlLAoKCgorfTsKCgoKKwoK CgorLyogVGhlIHJhdGUgdGhhdCBzYXRpc2ZpZXMgZXZlcnkgdmlkZW8gcG9ydCwgbmV2ZXIgYmVs b3cgdGhlIHBsYXRmb3JtJ3Mgb3duLiAqLwoKCgorc3RhdGljIHVuc2lnbmVkIGxvbmcgdm9wMl9h Y2xrX3JhdGUoc3RydWN0IHZvcDIgKnZvcDIsCgoKCisgwqDCoMKgIGNvbnN0IHN0cnVjdCB2b3Ay X2FjbGtfc3RhdGUgKmFjbGtfc3RhdGUpCgoKCit7CgoKCisgdW5zaWduZWQgbG9uZyByYXRlID0g dm9wMi0+YWNsa19yYXRlX25vcm1hbDsKCgoKKyB1bnNpZ25lZCBpbnQgaTsKCgoKKwoKCgorIGZv ciAoaSA9IDA7IGkgPCB2b3AyLT5kYXRhLT5ucl92cHM7IGkrKykKCgoKKyByYXRlID0gbWF4KHJh dGUsIGFjbGtfc3RhdGUtPnZwX3JhdGVbaV0pOwoKCgorCgoKCisgcmV0dXJuIHJhdGU7CgoKCit9 CgoKCisKCgoKK3N0YXRpYyB2b2lkIHZvcDJfYXBwbHlfYWNsa19yYXRlKHN0cnVjdCB2b3AyICp2 b3AyLCBzdHJ1Y3QgZHJtX2F0b21pY19jb21taXQgKnN0YXRlKQoKCgorewoKCgorIHN0cnVjdCBk cm1fcHJpdmF0ZV9zdGF0ZSAqcHJpdl9zdGF0ZTsKCgoKKwoKCgorIGlmICh2b3AyLT52ZXJzaW9u ICE9IFZPUF9WRVJTSU9OX1JLMzU4OCkKCgoKKyByZXR1cm47CgoKCisKCgoKKyBwcml2X3N0YXRl ID0gZHJtX2F0b21pY19nZXRfbmV3X3ByaXZhdGVfb2JqX3N0YXRlKHN0YXRlLCAmdm9wMi0+YWNs a19vYmopOwoKCgorIGlmICghcHJpdl9zdGF0ZSkKCgoKKyByZXR1cm47CgoKCisKCgoKKyBjbGtf c2V0X3JhdGUodm9wMi0+YWNsaywKCgoKKyDCoMKgwqDCoCB2b3AyX2FjbGtfcmF0ZSh2b3AyLCB0 b192b3AyX2FjbGtfc3RhdGUocHJpdl9zdGF0ZSkpKTsKCgoKK30KCgoKKwoKCgpzdGF0aWMgdm9p ZCB2b3AyX2NydGNfYXRvbWljX2Rpc2FibGUoc3RydWN0IGRybV9jcnRjICpjcnRjLAoKCgrCoMKg wqDCoCBzdHJ1Y3QgZHJtX2F0b21pY19jb21taXQgKnN0YXRlKQoKCgp7CgoKCkBAIC0xMDUzLDYg KzExMzMsOCBAQCBzdGF0aWMgdm9pZCB2b3AyX2NydGNfYXRvbWljX2Rpc2FibGUoc3RydWN0IGRy bV9jcnRjICpjcnRjLAoKCgppZiAoIXZvcDItPmVuYWJsZV9jb3VudCkKCgoKdm9wMl9kaXNhYmxl KHZvcDIpOwoKCgorIHZvcDJfYXBwbHlfYWNsa19yYXRlKHZvcDIsIHN0YXRlKTsKCgoKKwoKCgp2 b3AyX3VubG9jayh2b3AyKTsKCgoKaWYgKGNydGMtPnN0YXRlLT5ldmVudCAmJiAhY3J0Yy0+c3Rh dGUtPmFjdGl2ZSkgewoKCgpAQCAtMTc4MCw2ICsxODYyLDggQEAgc3RhdGljIHZvaWQgdm9wMl9j cnRjX2F0b21pY19lbmFibGUoc3RydWN0IGRybV9jcnRjICpjcnRjLAoKCgp2b3AyX2xvY2sodm9w Mik7CgoKCisgdm9wMl9hcHBseV9hY2xrX3JhdGUodm9wMiwgc3RhdGUpOwoKCgorCgoKCnJldCA9 IGNsa19wcmVwYXJlX2VuYWJsZSh2cC0+ZGNsayk7CgoKCmlmIChyZXQgPCAwKSB7CgoKCmRybV9l cnIodm9wMi0+ZHJtLCAiZmFpbGVkIHRvIGVuYWJsZSBkY2xrIGZvciB2aWRlbyBwb3J0JWQgLSAl ZFxuIiwKCgoKQEAgLTE5OTMsNiArMjA3NywyMCBAQCBzdGF0aWMgaW50IHZvcDJfY3J0Y19hdG9t aWNfY2hlY2soc3RydWN0IGRybV9jcnRjICpjcnRjLAoKCgppZiAocmV0KQoKCgpyZXR1cm4gcmV0 OwoKCgorIGlmICh2cC0+dm9wMi0+dmVyc2lvbiA9PSBWT1BfVkVSU0lPTl9SSzM1ODgpIHsKCgoK KyBzdHJ1Y3QgZHJtX3ByaXZhdGVfc3RhdGUgKnByaXZfc3RhdGU7CgoKCisKCgoKKyBwcml2X3N0 YXRlID0gZHJtX2F0b21pY19nZXRfcHJpdmF0ZV9vYmpfc3RhdGUoc3RhdGUsCgoKCisgwqDCoMKg wqDCoCAmdnAtPnZvcDItPmFjbGtfb2JqKTsKCgoKKyBpZiAoSVNfRVJSKHByaXZfc3RhdGUpKQoK CgorIHJldHVybiBQVFJfRVJSKHByaXZfc3RhdGUpOwoKCgorCgoKCisgdG9fdm9wMl9hY2xrX3N0 YXRlKHByaXZfc3RhdGUpLT52cF9yYXRlW3ZwLT5pZF0gPQoKCgorIGNydGNfc3RhdGUtPmFjdGl2 ZSAmJgoKCgorIGNydGNfc3RhdGUtPmFkanVzdGVkX21vZGUuY3J0Y19jbG9jayA+IFZPUDJfSElH SF9CV19QSVhDTEtfS0haID8KCgoKKyBWT1AyX0FDTEtfUkFURV9ISUdIIDogMDsKCgoKKyB9CgoK CisKCgoKZHJtX2F0b21pY19jcnRjX3N0YXRlX2Zvcl9lYWNoX3BsYW5lKHBsYW5lLCBjcnRjX3N0 YXRlKQoKCgpucGxhbmVzKys7CgoKCkBAIC0yODc1LDYgKzI5NzMsOCBAQCBzdGF0aWMgaW50IHZv cDJfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3Rlciwgdm9pZCAq ZGF0YSkKCgoKcmV0dXJuIGRldl9lcnJfcHJvYmUoZHJtLT5kZXYsIFBUUl9FUlIodm9wMi0+YWNs ayksCgoKCsKgwqDCoMKgICJmYWlsZWQgdG8gZ2V0IGFjbGsgc291cmNlXG4iKTsKCgoKKyB2b3Ay LT5hY2xrX3JhdGVfbm9ybWFsID0gY2xrX2dldF9yYXRlKHZvcDItPmFjbGspOwoKCgorCgoKCnZv cDItPnBjbGsgPSBkZXZtX2Nsa19nZXRfb3B0aW9uYWwodm9wMi0+ZGV2LCAicGNsa192b3AiKTsK CgoKaWYgKElTX0VSUih2b3AyLT5wY2xrKSkKCgoKcmV0dXJuIGRldl9lcnJfcHJvYmUoZHJtLT5k ZXYsIFBUUl9FUlIodm9wMi0+cGNsayksCgoKCkBAIC0yOTQ0LDYgKzMwNDQsMTEgQEAgc3RhdGlj IGludCB2b3AyX2JpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIs IHZvaWQgKmRhdGEpCgoKCnJvY2tjaGlwX2RybV9kbWFfaW5pdF9kZXZpY2Uodm9wMi0+ZHJtLCB2 b3AyLT5kZXYpOwoKCgorIHJldCA9IGRybV9hdG9taWNfcHJpdmF0ZV9vYmpfaW5pdCh2b3AyLT5k cm0sICZ2b3AyLT5hY2xrX29iaiwKCgoKKyDCoCAmdm9wMl9hY2xrX3N0YXRlX2Z1bmNzKTsKCgoK KyBpZiAocmV0KQoKCgorIGdvdG8gZXJyX2NydGNzOwoKCgorCgoKCnBtX3J1bnRpbWVfZW5hYmxl KCZwZGV2LT5kZXYpOwoKCgpyZXR1cm4gMDsKCgoKQEAgLTI5NjAsNiArMzA2NSw4IEBAIHN0YXRp YyB2b2lkIHZvcDJfdW5iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFz dGVyLCB2b2lkICpkYXRhKQoKCgpwbV9ydW50aW1lX2Rpc2FibGUoZGV2KTsKCgoKKyBkcm1fYXRv bWljX3ByaXZhdGVfb2JqX2ZpbmkoJnZvcDItPmFjbGtfb2JqKTsKCgoKKwoKCgppZiAodm9wMi0+ cmdiKQoKCgpyb2NrY2hpcF9yZ2JfZmluaSh2b3AyLT5yZ2IpOwoKCgpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV92b3AyLmggYi9kcml2ZXJzL2dwdS9k cm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcDIuaAoKCgppbmRleCBmZmNiMzljMTMwYWEuLmRm MTQ4ZGM2MTcwMyAxMDA2NDQKCgoKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tj aGlwX2RybV92b3AyLmgKCgoKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlw X2RybV92b3AyLmgKCgoKQEAgLTgsNiArOCw3IEBACgoKCiNkZWZpbmUgX1JPQ0tDSElQX0RSTV9W T1AyX0gKCgoKI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgoKCgorI2luY2x1ZGUgPGRybS9kcm1f YXRvbWljLmg+CgoKCiNpbmNsdWRlIDxkcm0vZHJtX21vZGVzLmg+CgoKCiNpbmNsdWRlIDxkdC1i aW5kaW5ncy9zb2Mvcm9ja2NoaXAsdm9wMi5oPgoKCgojaW5jbHVkZSAicm9ja2NoaXBfZHJtX2Ry di5oIgoKCgpAQCAtMjg2LDYgKzI4NywyMSBAQCBzdHJ1Y3Qgdm9wMl9kYXRhIHsKCgoKdW5zaWdu ZWQgaW50IHNvY19pZDsKCgoKfTsKCgoKKy8qCgoKCisgKiBUaGUgQVhJIGNsb2NrIGlzIHNoYXJl ZCBieSBldmVyeSB2aWRlbyBwb3J0LCBzbyB0aGUgcmF0ZSBpdCBoYXMgdG8gcnVuIGF0IGlzCgoK CisgKiBhIHByb3BlcnR5IG9mIHRoZSBkZXZpY2UgcmF0aGVyIHRoYW4gb2Ygb25lIENSVEMuwqAg VHJhY2sgaXQgYXMgYSBnbG9iYWwKCgoKKyAqIGF0b21pYyBzdGF0ZSBvYmplY3Q6IGVhY2ggQ1JU QyByZWNvcmRzIGl0cyBvd24gcmVxdWlyZW1lbnQgZHVyaW5nIGF0b21pYwoKCgorICogY2hlY2ss IGFuZCB0aGUgcmF0ZSBhcHBsaWVkIGlzIHRoZSBtYXhpbXVtIG92ZXIgdGhlIHBvcnRzLsKgIEdv aW5nIHRocm91Z2gKCgoKKyAqIHRoZSBhdG9taWMgc3RhdGUgaXMgd2hhdCBtYWtlcyB0aGlzIHNh ZmUgLSBhIGNvbW1pdCBuZXZlciByZWFkcyB0aGUgc3RhdGUgb2YKCgoKKyAqIGEgQ1JUQyBpdCBk b2VzIG5vdCBob2xkIGEgbG9jayBmb3IuCgoKCisgKi8KCgoKK3N0cnVjdCB2b3AyX2FjbGtfc3Rh dGUgewoKCgorIHN0cnVjdCBkcm1fcHJpdmF0ZV9zdGF0ZSBiYXNlOwoKCgorIHVuc2lnbmVkIGxv bmcgdnBfcmF0ZVtST0NLQ0hJUF9NQVhfQ1JUQ107CgoKCit9OwoKCgorCgoKCisjZGVmaW5lIHRv X3ZvcDJfYWNsa19zdGF0ZSh4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IHZvcDJfYWNsa19zdGF0 ZSwgYmFzZSkKCgoKKwoKCgpzdHJ1Y3Qgdm9wMiB7CgoKCnUzMiB2ZXJzaW9uOwoKCgpzdHJ1Y3Qg ZGV2aWNlICpkZXY7CgoKCkBAIC0zMjYsNiArMzQyLDkgQEAgc3RydWN0IHZvcDIgewoKCgp1bnNp Z25lZCBpbnQgZW5hYmxlX2NvdW50OwoKCgpzdHJ1Y3QgY2xrICpoY2xrOwoKCgpzdHJ1Y3QgY2xr ICphY2xrOwoKCgorIC8qIEFYSSBjbG9jayByYXRlIHNldCB1cCBieSB0aGUgcGxhdGZvcm0sIHVz ZWQgYXMgdGhlIGxvd2VyIGJvdW5kLiAqLwoKCgorIHVuc2lnbmVkIGxvbmcgYWNsa19yYXRlX25v cm1hbDsKCgoKKyBzdHJ1Y3QgZHJtX3ByaXZhdGVfb2JqIGFjbGtfb2JqOwoKCgpzdHJ1Y3QgY2xr ICpwY2xrOwoKCgpzdHJ1Y3QgY2xrICpwbGxfaGRtaXBoeTA7CgoKCnN0cnVjdCBjbGsgKnBsbF9o ZG1pcGh5MTsKCgoKLS0KCgoKMi40My4wCgoKCsKgCgoKCsKgCgoKCkZyb20gbWJveHJkQHogVGh1 IEphbsKgIDEgMDA6MDA6MDAgMTk3MAoKCgpSZXR1cm4tUGF0aDogPGxpbnV4LXJvY2tjaGlwLWJv dW5jZXMrbGludXgtcm9ja2NoaXA9YXJjaGl2ZXIua2VybmVsLm9yZ0BsaXN0cy5pbmZyYWRlYWQu b3JnPgoKCgpYLVNwYW0tQ2hlY2tlci1WZXJzaW9uOiBTcGFtQXNzYXNzaW4gMy40LjAgKDIwMTQt MDItMDcpIG9uCgoKCmF3cy11cy13ZXN0LTIta29yZy1sa21sLTEud2ViLmNvZGVhdXJvcmEub3Jn CgoKClJlY2VpdmVkOiBmcm9tIGJvbWJhZGlsLmluZnJhZGVhZC5vcmcgKGJvbWJhZGlsLmluZnJh ZGVhZC5vcmcgWzE5OC4xMzcuMjAyLjEzM10pCgoKCih1c2luZyBUTFN2MS4yIHdpdGggY2lwaGVy IEVDREhFLVJTQS1BRVMyNTYtR0NNLVNIQTM4NCAoMjU2LzI1NiBiaXRzKSkKCgoKKE5vIGNsaWVu dCBjZXJ0aWZpY2F0ZSByZXF1ZXN0ZWQpCgoKCmJ5IHNtdHAubG9yZS5rZXJuZWwub3JnIChQb3N0 Zml4KSB3aXRoIEVTTVRQUyBpZCBCMTJBNkM1Q0ZFQgoKCgpmb3IgPGxpbnV4LXJvY2tjaGlwQGFy Y2hpdmVyLmtlcm5lbC5vcmc+OyBUaHUsIDEzIEF1ZyAyMDI2IDA5OjQ2OjMzICswMDAwIChVVEMp CgoKCkRLSU0tU2lnbmF0dXJlOiB2PTE7IGE9cnNhLXNoYTI1NjsgcT1kbnMvdHh0OyBjPXJlbGF4 ZWQvcmVsYXhlZDsKCgoKZD1saXN0cy5pbmZyYWRlYWQub3JnOyBzPWJvbWJhZGlsLjIwMjEwMzA5 OyBoPVNlbmRlcjoKCgoKQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzpDb250ZW50LVR5cGU6Q2M6 TGlzdC1TdWJzY3JpYmU6TGlzdC1IZWxwOkxpc3QtUG9zdDoKCgoKTGlzdC1BcmNoaXZlOkxpc3Qt VW5zdWJzY3JpYmU6TGlzdC1JZDpNSU1FLVZlcnNpb246TWVzc2FnZS1JRDpEYXRlOlN1YmplY3Q6 VG8KCgoKOkZyb206UmVwbHktVG86Q29udGVudC1JRDpDb250ZW50LURlc2NyaXB0aW9uOlJlc2Vu dC1EYXRlOlJlc2VudC1Gcm9tOgoKCgpSZXNlbnQtU2VuZGVyOlJlc2VudC1UbzpSZXNlbnQtQ2M6 UmVzZW50LU1lc3NhZ2UtSUQ6SW4tUmVwbHktVG86UmVmZXJlbmNlczoKCgoKTGlzdC1Pd25lcjsg Ymg9NHpzbVA4MFk2TXoydDVHZHFkaGFDVk9Ddjh0NmdZQXYzRC80d3BmRkZaRT07IGI9dmhqMFdD YlgvRDU4cWEKCgoKU3F0QWNGTVpsRlJ4R24rYXQzcWFvWEdmM3o2MmpndGZjcFBKSzhCdjdWTUNy S0s3YmtjelBlNDlvZWdhL2dIaHR5akc5VCtZcnhWeXgKCgoKbklQZ2ZZRE5pd05OQmhDcG1HKzhD SGhOd0xuaXBRVm5sN1Noem1KNE5PQzBMY0gvd3BJa3NJSTZrZmU0c1AzU09BZW9FTENvbE1idG0K CgoKRmxTZzcvK2ZRUXJLSU1HTVQzQUxucXpNYnlIaWUxRjRRc0hmSEdydGdBNEx2N2tVOGpNZkRl UWpHZnJoVFhhUzRqd0pZYUtQUDE5MW4KCgoKY3gyTFg5SUhWV1hjU2NKbjRJRHI1RE1CSHRWNGU1 K2hLSTlUSU9rZEs1T2FmSnNZNk00dEtPbDhCeUtXSzYzditRRlVaRXc5d0lNb0sKCgoKWGF5L0Rh d3A2WFFxNWs3VHpVcUE9PTsKCgoKUmVjZWl2ZWQ6IGZyb20gbG9jYWxob3N0IChbOjoxXSBoZWxv PWJvbWJhZGlsLmluZnJhZGVhZC5vcmcpCgoKCmJ5IGJvbWJhZGlsLmluZnJhZGVhZC5vcmcgd2l0 aCBlc210cCAoRXhpbSA0Ljk5LjEgIzIgKFJlZCBIYXQgTGludXgpKQoKCgppZCAxd3VTMTctMDAw MDAwMDBNVXItMEt3bjsKCgoKVGh1LCAxMyBBdWcgMjAyNiAwOTo0NjoyOSArMDAwMAoKCgpSZWNl aXZlZDogZnJvbSBtYWlsLXdyMS14NDMwLmdvb2dsZS5jb20gKFsyYTAwOjE0NTA6NDg2NDoyMDo6 NDMwXSkKCgoKYnkgYm9tYmFkaWwuaW5mcmFkZWFkLm9yZyB3aXRoIGVzbXRwcyAoRXhpbSA0Ljk5 LjEgIzIgKFJlZCBIYXQgTGludXgpKQoKCgppZCAxd3VTMTQtMDAwMDAwMDBNU1UtMHQ0cQoKCgpm b3IgbGludXgtcm9ja2NoaXBAbGlzdHMuaW5mcmFkZWFkLm9yZzsKCgoKVGh1LCAxMyBBdWcgMjAy NiAwOTo0NjoyOCArMDAwMAoKCgpSZWNlaXZlZDogYnkgbWFpbC13cjEteDQzMC5nb29nbGUuY29t IHdpdGggU01UUCBpZCBmZmFjZDBiODVhOTdkLTQ3ZmU3NjQ5MWI4c28xNDc1MDdmOGYuMAoKCgrC oMKgwqDCoMKgwqDCoCBmb3IgPGxpbnV4LXJvY2tjaGlwQGxpc3RzLmluZnJhZGVhZC5vcmc+OyBU aHUsIDEzIEF1ZyAyMDI2IDAyOjQ2OjI1IC0wNzAwIChQRFQpCgoKCkRLSU0tU2lnbmF0dXJlOiB2 PTE7IGE9cnNhLXNoYTI1NjsgYz1yZWxheGVkL3JlbGF4ZWQ7CgoKCsKgwqDCoMKgwqDCoMKgIGQ9 Z21haWwuY29tOyBzPTIwMjUxMTA0OyB0PTE3ODY2MTQzODQ7IHg9MTc4NzIxOTE4NDsgZGFybj1s aXN0cy5pbmZyYWRlYWQub3JnOwoKCgrCoMKgwqDCoMKgwqDCoCBoPWNvbnRlbnQtdHJhbnNmZXIt ZW5jb2Rpbmc6bWltZS12ZXJzaW9uOm1lc3NhZ2UtaWQ6ZGF0ZTpzdWJqZWN0OmNjCgoKCsKgwqDC oMKgwqDCoMKgwqAgOnRvOmZyb206ZnJvbTp0bzpjYzpzdWJqZWN0OmRhdGU6bWVzc2FnZS1pZDpy ZXBseS10bzpjb250ZW50LXR5cGU7CgoKCsKgwqDCoMKgwqDCoMKgIGJoPUFDSzZzdURENDVDWjA3 dGdrWkw5b2lQRitCWFkvbEc3QU5YdWVrT2ZPSzQ9OwoKCgrCoMKgwqDCoMKgwqDCoCBiPXNZQ0JT V2NiY0dDc2dUR2JOem9ORHFHRlZzSnpzT0hIdHZUVGFUQ0d0aFRXWUlpR0kvVU1nWi8vcmFrYkhC MklyVAoKCgrCoMKgwqDCoMKgwqDCoMKgIDJTK09IbFpnOXFXOHNiVEJRVzlYMW11WGcvZjhjY3Vi Q3pqY3UzdVVTdFJWTUxKR2I2Tk1yTXZwanVOaUdEZXFrczlrCgoKCsKgwqDCoMKgwqDCoMKgwqAg U3BxaGZyY1QrYTlPRW9SekVjcFVWSlh4U0J5NkdvdVNDeFcwOHpoVk5sOFJFeGhZNGF2QitpZmo5 TXVtL0pZcStlM1cKCgoKwqDCoMKgwqDCoMKgwqDCoCBoand2UjVEdWhSSnZzbW5JMkFKUGdTK1U5 VmFvQ2pRUWFadmVnODAxYVYrdGk4WHpTbkx1aXdqVEN4YUY4WmRRNDV3YwoKCgrCoMKgwqDCoMKg wqDCoMKgIDdBMTdOQUlFbG8wN3BGSjJIQ2hkYWVGNDd2d0paYm4weEJUS0pFYVBwdDBONGVVSVV6 VzFvSDRYVGtlN3Raa0E0MHhrCgoKCsKgwqDCoMKgwqDCoMKgwqAgdGV4Zz09CgoKClgtR29vZ2xl LURLSU0tU2lnbmF0dXJlOiB2PTE7IGE9cnNhLXNoYTI1NjsgYz1yZWxheGVkL3JlbGF4ZWQ7CgoK CsKgwqDCoMKgwqDCoMKgIGQ9MWUxMDAubmV0OyBzPTIwMjUxMTA0OyB0PTE3ODY2MTQzODQ7IHg9 MTc4NzIxOTE4NDsKCgoKwqDCoMKgwqDCoMKgwqAgaD1jb250ZW50LXRyYW5zZmVyLWVuY29kaW5n Om1pbWUtdmVyc2lvbjptZXNzYWdlLWlkOmRhdGU6c3ViamVjdDpjYwoKCgrCoMKgwqDCoMKgwqDC oMKgIDp0bzpmcm9tOngtZ20tZ2c6eC1nbS1tZXNzYWdlLXN0YXRlOmZyb206dG86Y2M6c3ViamVj dDpkYXRlCgoKCsKgwqDCoMKgwqDCoMKgwqAgOm1lc3NhZ2UtaWQ6cmVwbHktdG86Y29udGVudC10 eXBlOwoKCgrCoMKgwqDCoMKgwqDCoCBiaD1BQ0s2c3VERDQ1Q1owN3Rna1pMOW9pUEYrQlhZL2xH N0FOWHVla09mT0s0PTsKCgoKwqDCoMKgwqDCoMKgwqAgYj1LM25xYld5azNUZTBUUzJVcEtqUGM3 TVpQYnc3K0VGRnBvSTRvdE9kOE9Xelh6S09Sci92VXVUa01rQi9hWVBob3oKCgoKwqDCoMKgwqDC oMKgwqDCoCBacHljWEZaK3RTdUhNbWo5UkYwODJjTWk2cTZKK1NTSitwaU82SHZJdVM4SnVQNkM3 UmkwZWF3WWZFK3p0bzhxY0NyRQoKCgrCoMKgwqDCoMKgwqDCoMKgIDNoVGR6MkJxayt1cUJ2UkJH THhPbnNlQVpWQXYySVY3c25jL0x0cmlRd3VnNythZ1V6d2hJNzIvcTBtUUVLKzAra2pFCgoKCsKg wqDCoMKgwqDCoMKgwqAgOHJyTzlEemJvZSttcmFwWmgzWURKYkM0THF5Q2FoUi9XdythUmxETCtY UkI3RjYyQ0FsQWRzWGhNMDJ0M1h2Q2FUK3QKCgoKwqDCoMKgwqDCoMKgwqDCoCBDUGdKRTE3UmZT R09QdWY0aHU0Y1B1Qk8rdU5BbGVrbkt3dDRoNWJrUGpOSTdDckJYVWVIbXl2Vm1lZW4zeFRiTUFB UAoKCgrCoMKgwqDCoMKgwqDCoMKgIEliR1E9PQoKCgpYLUZvcndhcmRlZC1FbmNyeXB0ZWQ6IGk9 MTsgQUhnaCtScnAyOE96NUZsa0l3YmprcDFjYllMYmVKR1ZSa09VYitFRUo5Z3VQN2dBemxwYXUv ZVN3YVBDbkRKVTBVQ043dW4zMk1VbXU4Z0Q4aC8zVjNYL2pnPT1AbGlzdHMuaW5mcmFkZWFkLm9y ZwoKCgpYLUdtLU1lc3NhZ2UtU3RhdGU6IEFPSnUwWXdtMEZ3cklkSmVDMUVFNjJVazhzbnlFWDVT MVBaWStpd2pLd0o1Nkw5ajRCSHhFbnlyCgoKClE1WFFGM3ltSUg4b1NldHNJTnY2eng3ZHl2MEda RUdZUWhGUXovWVRhN21ZdXNvR1doa1Z1bmJxCgoKClgtR20tR2c6IEFSK3NEMTI4N3RsRlgzR0U4 WTd0ME03Q2VrRVgvcityRW5lZXBMa2tzYXF5Q2FmUDkva21INld2T0x2TklaRjhIMVQKCgoKT2U0 c3ZJeWVoMlNaTkRnQ28xV1lHaVpuTkNNWm84TVVjR1JacmRJbjc0RHFyMGhjZUlJenJaV0x3S1pZ UjQ5T0E3VUhHclNzWTdSCgoKCjZ6YVJJWlNlWWpKb2dnSzYySE00bWJxT0RNbzd5RkN4b2YzeE9G TWVLYXhReGRjanViRDF3Wk95czF4ZVVEejFwQURVd3JEZHYyNwoKCgpxTXk2QmZQd2lwWjBUQVZG WXFaSjNFa0hrSGE0aXRwNTJacy8rVkhOR09WS3VydjFlbktoUU04WE1IbkxVL1RINkJrbjMydzNH OVUKCgoKbFJOdnFuWVNXenZ4ZnJ1cllkTkZrMWhvVTZFZFY4ZUdmMVpBb3VmbEplOHk2TVhoVUpy VlhRbUtaek1mN1RocDduV0V3Y3N6UUNvCgoKCnRscUQ3UHRYMmVEM2lWQjYxeXA0RVUwZlhQaVhk c3ptK2gxTEVMWk9XOFR1bXNLc1NlT2FVUkJSdWQ5YUl5ZlNsZ3YvejRLUk4ydAoKCgpvMWFkTHRx YkdVMmx4V3JFSVEwcVlwbEV0S1VKNVcvVWRPRHZyeWpWbzdRRlpaNnZSc3pvWGhZT21rbndML2xH Z2xzbGpWUHJmRkYKCgoKYUJCWUc1MGZKSVdXamlDNjNnR2xSbVVHWkNRcndzbmdwUU93ZWlmd0lu MkZKK2dOazdsMjl3VXA4SlAyeUNOM21rTUw4a25JZTZyCgoKCmJxUTYKCgoKWC1SZWNlaXZlZDog YnkgMjAwMjphMDU6NjAwYzozYjA5OmIwOjQ5OTo1OWExOjk2Zjcgd2l0aCBTTVRQIGlkIDViMWYx N2IxODA0YjEtNDk5ODI2MWIxMWZtcjI2ODU2Njk1ZTkuMS4xNzg2NjE0MzgzNjY5OwoKCgrCoMKg wqDCoMKgwqDCoCBUaHUsIDEzIEF1ZyAyMDI2IDAyOjQ2OjIzIC0wNzAwIChQRFQpCgoKClJlY2Vp dmVkOiBmcm9tIE9yYW5nZVBpNS1QbHVzLkJCLUhPTUUgKDIwMDE0QzRFMUI5MTFDMDA5Mzc3RUU4 REY2RDBBMUMyLmRzbC5wb29sLnRlbGVrb20uaHUuIFsyMDAxOjRjNGU6MWI5MToxYzAwOjkzNzc6 ZWU4ZDpmNmQwOmExYzJdKQoKCgrCoMKgwqDCoMKgwqDCoCBieSBzbXRwLmdtYWlsLmNvbSB3aXRo IEVTTVRQU0EgaWQgZmZhY2QwYjg1YTk3ZC00ODE1YTU2OGM0MHNtNDg3MDg2M2Y4Zi4xMy4yMDI2 LjA4LjEzLjAyLjQ2LjIyCgoKCsKgwqDCoMKgwqDCoMKgICh2ZXJzaW9uPVRMUzFfMyBjaXBoZXI9 VExTX0FFU18yNTZfR0NNX1NIQTM4NCBiaXRzPTI1Ni8yNTYpOwoKCgrCoMKgwqDCoMKgwqDCoCBU aHUsIDEzIEF1ZyAyMDI2IDAyOjQ2OjIzIC0wNzAwIChQRFQpCgoKCkZyb206IElnb3IgUGF1bm92 aWMgPHJveWFsbmV0MDI2QGdtYWlsLmNvbT4KCgoKVG86IFNhbmR5IEh1YW5nIDxoamNAcm9jay1j aGlwcy5jb20+LAoKCgpIZWlrbyBTdHVlYm5lciA8aGVpa29Ac250ZWNoLmRlPiwKCgoKQW5keSBZ YW4gPGFuZHkueWFuQHJvY2stY2hpcHMuY29tPgoKCgpTdWJqZWN0OiBbUEFUQ0ggdjJdIGRybS9y b2NrY2hpcDogdm9wMjogU2NhbGUgdGhlIEFYSSBjbG9jayB0byB0aGUgYmFuZHdpZHRoIHRoZSBt b2RlIG5lZWRzCgoKCkRhdGU6IFRodSwgMTMgQXVnIDIwMjYgMTE6NDU6NTYgKzAyMDAKCgoKTWVz c2FnZS1JRDogPDIwMjYwODEzMDk0NjE0LjkwNzItMS1yb3lhbG5ldDAyNkBnbWFpbC5jb20+CgoK ClgtTWFpbGVyOiBnaXQtc2VuZC1lbWFpbCAyLjUzLjAKCgoKTUlNRS1WZXJzaW9uOiAxLjAKCgoK WC1DUk0xMTQtVmVyc2lvbjogMjAxMDAxMDYtQmxhbWVNaWNoZWxzb24gKCBUUkUgMC45LjAgKEJT RCkgKSBNUi02NDY3MDlFMwoKCgpYLUNSTTExNC1DYWNoZUlEOiBzZmlkLTIwMjYwODEzXzAyNDYy Nl8zNTUyMzBfMEJGNzNCQzYKCgoKWC1DUk0xMTQtU3RhdHVzOiBHT09EICjCoCAzMy4zOcKgICkK CgoKWC1CZWVuVGhlcmU6IGxpbnV4LXJvY2tjaGlwQGxpc3RzLmluZnJhZGVhZC5vcmcKCgoKWC1N YWlsbWFuLVZlcnNpb246IDIuMS4zNAoKCgpQcmVjZWRlbmNlOiBsaXN0CgoKCkxpc3QtSWQ6IFVw c3RyZWFtIGtlcm5lbCB3b3JrIGZvciBSb2NrY2hpcCBwbGF0Zm9ybXMgPGxpbnV4LXJvY2tjaGlw Lmxpc3RzLmluZnJhZGVhZC5vcmc+CgoKCkxpc3QtVW5zdWJzY3JpYmU6IDxodHRwOi8vbGlzdHMu aW5mcmFkZWFkLm9yZy9tYWlsbWFuL29wdGlvbnMvbGludXgtcm9ja2NoaXA+LAoKCgo8bWFpbHRv OmxpbnV4LXJvY2tjaGlwLXJlcXVlc3RAbGlzdHMuaW5mcmFkZWFkLm9yZz9zdWJqZWN0PXVuc3Vi c2NyaWJlPgoKCgpMaXN0LUFyY2hpdmU6IDxodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9waXBl cm1haWwvbGludXgtcm9ja2NoaXAvPgoKCgpMaXN0LVBvc3Q6IDxtYWlsdG86bGludXgtcm9ja2No aXBAbGlzdHMuaW5mcmFkZWFkLm9yZz4KCgoKTGlzdC1IZWxwOiA8bWFpbHRvOmxpbnV4LXJvY2tj aGlwLXJlcXVlc3RAbGlzdHMuaW5mcmFkZWFkLm9yZz9zdWJqZWN0PWhlbHA+CgoKCkxpc3QtU3Vi c2NyaWJlOiA8aHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51 eC1yb2NrY2hpcD4sCgoKCjxtYWlsdG86bGludXgtcm9ja2NoaXAtcmVxdWVzdEBsaXN0cy5pbmZy YWRlYWQub3JnP3N1YmplY3Q9c3Vic2NyaWJlPgoKCgpDYzogSWdvciBQYXVub3ZpYyA8cm95YWxu ZXQwMjZAZ21haWwuY29tPiwgU2ltb25hIFZldHRlciA8c2ltb25hQGZmd2xsLmNoPiwgbGludXgt a2VybmVsQHZnZXIua2VybmVsLm9yZywgTWFhcnRlbiBMYW5raG9yc3QgPG1hYXJ0ZW4ubGFua2hv cnN0QGxpbnV4LmludGVsLmNvbT4sIFNlYmFzdGlhbiBSZWljaGVsIDxzZWJhc3RpYW4ucmVpY2hl bEBjb2xsYWJvcmEuY29tPiwgTWF4aW1lIFJpcGFyZCA8bXJpcGFyZEBrZXJuZWwub3JnPiwgQ2hh b3lpIENoZW4gPGNoYW95aS5jaGVuQHJvY2stY2hpcHMuY29tPiwgQWxleGV5IENoYXJrb3YgPGFs Y2hhcmtAZmxpcHBlci5uZXQ+LCBsaW51eC1yb2NrY2hpcEBsaXN0cy5pbmZyYWRlYWQub3JnLCBk cmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnLCBUaG9tYXMgWmltbWVybWFubiA8dHppbW1l cm1hbm5Ac3VzZS5kZT4sIERhdmlkIEFpcmxpZSA8YWlybGllZEBnbWFpbC5jb20+LCBsaW51eC1h cm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKCgoKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWlu OyBjaGFyc2V0PSJ1cy1hc2NpaSIKCgoKQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAoK CgpTZW5kZXI6ICJMaW51eC1yb2NrY2hpcCIgPGxpbnV4LXJvY2tjaGlwLWJvdW5jZXNAbGlzdHMu aW5mcmFkZWFkLm9yZz4KCgoKRXJyb3JzLVRvOiBsaW51eC1yb2NrY2hpcC1ib3VuY2VzK2xpbnV4 LXJvY2tjaGlwPWFyY2hpdmVyLmtlcm5lbC5vcmdAbGlzdHMuaW5mcmFkZWFkLm9yZwoKCgrCoAoK CgpWT1AyIGZldGNoZXMgdGhlIHNjYW5vdXQgZGF0YSBmb3IgYWxsIG9mIGl0cyB2aWRlbyBwb3J0 cyBvdmVyIGEgc2luZ2xlCgoKCkFYSSBjbG9jay7CoCBPbiBSSzM1ODggdGhhdCBjbG9jayBpcyBw aW5uZWQgdG8gNTAwIE1IeiBieSB0aGUgZGV2aWNlIHRyZWUKCgoKYW5kIG5vdGhpbmcgZXZlciBy YWlzZXMgaXQsIHNvIGEgbW9kZSB3aG9zZSBwaXhlbCByYXRlIG91dHJ1bnMgd2hhdCB0aGUKCgoK QVhJIGNsb2NrIGNhbiBkZWxpdmVyIHVuZGVycnVucyB0aGUgaW50ZXJuYWwgc2Nhbm91dCBGSUZP LsKgIFRoZSBoYXJkd2FyZQoKCgpyZXBvcnRzIHRoaXMgYXMgUE9TVF9CVUZfRU1QVFkgYW5kIHRo ZSBwaWN0dXJlIGlzIGNvcnJ1cHRlZC4KCgoKwqAKCgoKMzg0MHgyMTYwQDEyMCBvdmVyIERpc3Bs YXlQb3J0IGlzIHN1Y2ggYSBtb2RlLsKgIE1lYXN1cmVkIG9uIGFuIE9yYW5nZSBQaQoKCgo1IFBs dXMgYnkgbW92aW5nIHRoZSByYXRlIGF0IHJ1bnRpbWUgd2hpbGUgdGhlIG1vZGUgd2FzIHVwLCB3 aXRoIGRjbGsKCgoKdW5jaGFuZ2VkIGF0IDU5NCBNSHogdGhyb3VnaG91dCwgc28gdGhhdCB0aGUg QVhJIHJhdGUgd2FzIHRoZSBvbmx5CgoKCnZhcmlhYmxlOgoKCgrCoAoKCgrCoCA1MDAgTUh6OiB+ NTk0MDAwIHN1cHByZXNzZWQgdm9wMl9pc3IgY2FsbGJhY2tzIHBlciA1IHMsIGNvcnJ1cHRlZAoK CgrCoCA3NTAgTUh6OiBubyBQT1NUX0JVRl9FTVBUWSBhdCBhbGwgZm9yIHRoZSA0MiBzIHRoZSBw aGFzZSBsYXN0ZWQsIGNsZWFuCgoKCsKgIDUwMCBNSHo6IH42MDcwMDAgc3VwcHJlc3NlZCBjYWxs YmFja3MgcGVyIDUgcywgY29ycnVwdGVkIGFnYWluCgoKCsKgCgoKCkJvdGggdHJhbnNpdGlvbnMg YXJlIGltbWVkaWF0ZS7CoCBIZWlrbyBTdHVlYm5lciByZXBvcnRzIHRoZSBzYW1lCgoKCnN0YXJ2 YXRpb24gb24gZGlmZmVyZW50IGhhcmR3YXJlIFsxXS4KCgoKwqAKCgoKVGhlIHJlcXVpcmVtZW50 IGZvbGxvd3MgZWFjaCBwb3J0J3MgcGl4ZWwgcmF0ZSByYXRoZXIgdGhhbiBpdHMgaW50ZXJmYWNl CgoKCmNsb2NrLCBhbmQgaXQgaXMgcGVyIHBvcnQgcmF0aGVyIHRoYW4gYWdncmVnYXRlLsKgIFR3 byBtZWFzdXJlbWVudHMgYXQKCgoKNTAwIE1IeiBwaW4gdGhhdCBkb3duOgoKCgrCoAoKCgrCoCAt IGEgc2luZ2xlIHBvcnQgc2Nhbm5pbmcgb3V0IDM4NDB4MjE2MEAxMjAgdW5kZXJydW5zLCB3aGls ZSB0aGUgc2FtZQoKCgrCoMKgwqAgY29tcG9zZWQgcGl4ZWwgcmF0ZSBzcHJlYWQgb3ZlciB0aHJl ZSBwb3J0cyAtIDM4NDB4MjE2MEA2MCBvbiBvbmUKCgoKwqDCoMKgIGFuZCAzODQweDIxNjBAMzAg b24gdHdvIG90aGVycyAtIGlzIGNsZWFuIGZvciBhIG1pbnV0ZSB3aXRoIG5vCgoKCsKgwqDCoCB1 bmRlcnJ1biBvbiBhbnkgb2YgdGhlbS7CoCBUaGUgdG90YWxzIGFyZSBlcXVhbCB0byB0aGUgcGl4 ZWw6CgoKCsKgwqDCoCAzODQwKjIxNjAqMTIwID09IDM4NDAqMjE2MCooNjArMzArMzApLgoKCgrC oAoKCgrCoCAtIDM4NDB4MjE2MEA2MCBpcyBjbGVhbiB3aGVyZSAzODQweDIxNjBAMTIwIGlzIG5v dCwgYWx0aG91Z2ggYm90aCBydW4KCgoKwqDCoMKgIGRjbGsgYXQgNTk0IE1IeiBvbiB0aGlzIGJv YXJkOiB0aGUgMTIwIEh6IGxpbmsgaXMgWUNiQ3IgNDoyOjAsIHdoaWNoCgoKCsKgwqDCoCBoYWx2 ZXMgZGNsayB3aXRob3V0IGhhbHZpbmcgdGhlIHJhdGUgYXQgd2hpY2ggdGhlIHBvcnQgY29uc3Vt ZXMKCgoKwqDCoMKgIHBpeGVscy4KCgoKwqAKCgoKU28gdGhlIGNvbmRpdGlvbiBiZWxvbmdzIG9u IGVhY2ggdmlkZW8gcG9ydCdzIG93biBjcnRjX2Nsb2NrLsKgIFN1bW1pbmcKCgoKYWNyb3NzIHBv cnRzIHdvdWxkIGJlIHdyb25nLCBhbmQga2V5aW5nIG9uIGRjbGsgd291bGQgbWlzcyA0OjI6MAoK CgplbnRpcmVseS7CoCBUaGUgdGhyZXNob2xkIHNpdHMgYmV0d2VlbiB0aGUgbWVhc3VyZWQgcG9p bnRzOiAzODQweDIxNjBANjAKCgoKKDU5NDAwMCBrSHopIGFuZCAyNTYweDE0NDBAMTQ0IChhYm91 dCA1ODYwMDAga0h6KSBhcmUgYm90aCBjbGVhbiBhdCB0aGUKCgoKZGVmYXVsdCByYXRlLCAzODQw eDIxNjBAMTIwICgxMTg4MDAwIGtIeikgaXMgbm90LgoKCgrCoAoKCgpUcmFjayB0aGUgcmVxdWly ZW1lbnQgYXMgYSBnbG9iYWwgYXRvbWljIHN0YXRlIG9iamVjdCByYXRoZXIgdGhhbiBieQoKCgp3 YWxraW5nIHRoZSBDUlRDIGxpc3Qgd2hlbiB0aGUgcmF0ZSBpcyBhcHBsaWVkLsKgIEVhY2ggQ1JU QyByZWNvcmRzIHdoYXQKCgoKaXQgbmVlZHMgZHVyaW5nIGl0cyBvd24gYXRvbWljIGNoZWNrLCBh bmQgdGhlIHJhdGUgYXBwbGllZCBpcyB0aGUKCgoKbWF4aW11bSBvdmVyIHRoZSBwb3J0cy7CoCBH b2luZyB0aHJvdWdoIHRoZSBhdG9taWMgc3RhdGUgaXMgd2hhdCBtYWtlcwoKCgp0aGlzIHNhZmU6 IGEgY29tbWl0IG9ubHkgZXZlciB3cml0ZXMgdGhlIGVudHJ5IGZvciBhIENSVEMgaXQgaG9sZHMg YQoKCgpsb2NrIGZvciwgYW5kIG5ldmVyIHJlYWRzIHRoZSBzdGF0ZSBvZiBhIENSVEMgdGhhdCBh IGNvbmN1cnJlbnQgY29tbWl0CgoKCm1heSBiZSBzd2FwcGluZyB1bmRlcm5lYXRoIGl0LsKgIFRo ZSByYXRlIHRoZSBwbGF0Zm9ybSBzZXQgdXAgaXMgdXNlZCBhcwoKCgp0aGUgbG93ZXIgYm91bmQs IHNvIGEgYm9hcmQgdGhhdCBhbHJlYWR5IGNvbmZpZ3VyZXMgYSBoaWdoZXIgcmF0ZSBrZWVwcwoK CgppdC4KCgoKwqAKCgoKVGVzdGVkIG9uIHRoZSBzYW1lIGJvYXJkIG9uIGRybS1taXNjLW5leHQg cGx1cyB0aGUgZHctZHAgYW5kIFJvY2tjaGlwCgoKClVTQkRQIFBIWSBzZXJpZXMsIHdoaWNoIERp c3BsYXlQb3J0IEFsdCBNb2RlIG5lZWRzIGluIG9yZGVyIHRvIGNvbWUgdXAKCgoKYXQgYWxsOiAz ODQweDIxNjBAMTIwIHNlbGVjdHMgNzUwIE1IeiBhbmQgcnVucyB3aXRoIG5vIHVuZGVycnVuLAoK Cgpkcm9wcGluZyB0byAzODQweDIxNjBANjAgcmV0dXJucyB0aGUgY2xvY2sgdG8gNTAwIE1IeiBh bmQgc3RheXMgY2xlYW4sCgoKCmFuZCBnb2luZyBiYWNrIHJhaXNlcyBpdCBhZ2Fpbi7CoCBPbiB0 aGF0IHNhbWUga2VybmVsIHdpdGhvdXQgdGhpcyBwYXRjaAoKCgp0aGUgb3V0cHV0IHNob3dzIG5v IHBpY3R1cmUgYXQgYW55IG1vZGUuCgoKCsKgCgoKCkxpbms6IGh0dHBzOi8vbG9yZS5rZXJuZWwu b3JnL2FsbC8yMDI2MDgwODEwNDI0MC4xMzc3Ni0xLXJveWFsbmV0MDI2QGdtYWlsLmNvbS8KCgoK TGluazogaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvYWxsLzIwNzY3MTM3LmdlTzVLZ2FXTDVAZGll Z28vIFsxXQoKCgpTaWduZWQtb2ZmLWJ5OiBJZ29yIFBhdW5vdmljIDxyb3lhbG5ldDAyNkBnbWFp bC5jb20+CgoKCi0tLQoKCgp2MjoKCgoKLSBSZXdvcmtlZCBob3cgdGhlIHJlcXVpcmVtZW50IGlz IHRyYWNrZWQuwqAgdjEgY29tcHV0ZWQgdGhlIHJhdGUgYnkgd2Fsa2luZwoKCgrCoMKgIHRoZSBD UlRDIGxpc3QgYXQgdGhlIHBvaW50IGl0IGFwcGxpZWQgaXQsIHdoaWNoIHJlYWQgdGhlIHN0YXRl IG9mIENSVENzIHRoZQoKCgrCoMKgIGNvbW1pdCBob2xkcyBubyBsb2NrIGZvcjsgYSBjb25jdXJy ZW50IG5vbi1ibG9ja2luZyBjb21taXQgb24gYW5vdGhlciBDUlRDCgoKCsKgwqAgY2FuIHN3YXAg YW5kIGZyZWUgdGhhdCBzdGF0ZSB1bmRlcm5lYXRoLsKgIENhdWdodCBieSB0aGUgU2FzaGlrbyBB SSByZXZpZXcKCgoKwqDCoCBbMl0gYmVmb3JlIGFueW9uZSBoYWQgdG8gdHJpcCBvdmVyIGl0LsKg IHYyIGhhcyBlYWNoIENSVEMgcmVjb3JkIGl0cyBvd24KCgoKwqDCoCByZXF1aXJlbWVudCBpbiBh IGdsb2JhbCBhdG9taWMgc3RhdGUgb2JqZWN0IGR1cmluZyBpdHMgb3duIGF0b21pYyBjaGVjayBh bmQKCgoKwqDCoCB0YWtlcyB0aGUgbWF4aW11bSBvdmVyIHRoZSBwb3J0cywgc28gYSBjb21taXQg bmV2ZXIgcmVhZHMgc3RhdGUgaXQgZG9lcyBub3QKCgoKwqDCoCBvd24uwqAgVGhlIHNoYXBlIGZv bGxvd3MgdmM0J3MgaGFuZGxpbmcgb2YgaXRzIGNvcmUgY2xvY2ssIHdoaWNoIGlzIHRoZSBzYW1l CgoKCsKgwqAgcHJvYmxlbS4KCgoKLSBSZXRlc3RlZCBvbiBoYXJkd2FyZSB3aXRoIHRoZSBuZXcg bWVjaGFuaXNtLCBzaW5jZSB0aGUgb2xkIG1lYXN1cmVtZW50IG5vCgoKCsKgwqAgbG9uZ2VyIGFw cGxpZXMgdG8gaXQ6IDM4NDB4MjE2MEAxMjAgc2VsZWN0cyA3NTAgTUh6LCBkcm9wcGluZyB0bwoK CgrCoMKgIDM4NDB4MjE2MEA2MCByZXR1cm5zIHRoZSBjbG9jayB0byA1MDAgTUh6LCBhbmQgZ29p bmcgYmFjayByYWlzZXMgaXQgYWdhaW4sCgoKCsKgwqAgd2l0aCBubyBQT1NUX0JVRl9FTVBUWSBp biBhbnkgcGhhc2UgYW5kIG5vdGhpbmcgZmFpbGluZyBpbiB0aGUgYXRvbWljIHBhdGguCgoKCsKg CgoKCnYxOiBodHRwczovL2xvcmUua2VybmVsLm9yZy9hbGwvMjAyNjA4MTIxMDQ5MDkuNjM5MC0x LXJveWFsbmV0MDI2QGdtYWlsLmNvbS8KCgoKWzJdIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2Fs bC8yMDI2MDgxMjEwNTY0OS4zOUNCQTFGMDAwRTlAc210cC5rZXJuZWwub3JnLwoKCgpkcml2ZXJz L2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcDIuYyB8IDEwNyArKysrKysrKysrKysr KysrKysrCgoKCmRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fdm9wMi5oIHzC oCAxOSArKysrCgoKCjIgZmlsZXMgY2hhbmdlZCwgMTI2IGluc2VydGlvbnMoKykKCgoKwqAKCgoK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fdm9wMi5j IGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV92b3AyLmMKCgoKaW5kZXgg NGNjZTNlMzM2ZjViLi5mZGVlMDgwNDJhYzcgMTAwNjQ0CgoKCi0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fdm9wMi5jCgoKCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9y b2NrY2hpcC9yb2NrY2hpcF9kcm1fdm9wMi5jCgoKCkBAIC0xMDQsNiArMTA0LDIwIEBAIGVudW0g dm9wMl9hZmJjX2Zvcm1hdCB7CgoKCiNkZWZpbmUgVk9QMl9NQVhfRENMS19SQVRFIDYwMDAwMDAw MFVMCgoKCisvKgoKCgorICogQWxsIHZpZGVvIHBvcnRzIGZldGNoIHRoZWlyIHNjYW5vdXQgZGF0 YSBvdmVyIGEgc2luZ2xlIEFYSSBjbG9jay7CoCBUaGUKCgoKKyAqIGhhcmR3YXJlIGJ1ZmZlcnMg dGhhdCBkYXRhIGluIGFuIGludGVybmFsIEZJRk8gd2hpY2ggaXMgZHJhaW5lZCBhdCB0aGUKCgoK KyAqIHBpeGVsIHJhdGUsIHNvIGEgbW9kZSB3aG9zZSBwaXhlbCByYXRlIG91dHJ1bnMgdGhlIGZp bGwgcmF0ZSB1bmRlcnJ1bnMgdGhlCgoKCisgKiBGSUZPLCB3aGljaCB0aGUgaGFyZHdhcmUgcmVw b3J0cyBhcyBQT1NUX0JVRl9FTVBUWSBhbmQgd2hpY2ggc2hvd3MgdXAgYXMgYQoKCgorICogY29y cnVwdGVkIGltYWdlLsKgIFJhaXNlIHRoZSBBWEkgY2xvY2sgZm9yIG1vZGVzIHRoYXQgbmVlZCBp dC4KCgoKKyAqCgoKCisgKiBUaGUgcmVxdWlyZW1lbnQgZm9sbG93cyB0aGUgcGl4ZWwgcmF0ZSBy YXRoZXIgdGhhbiB0aGUgaW50ZXJmYWNlIGNsb2NrOiBhCgoKCisgKiBZQ2JDciA0OjI6MCBsaW5r IGhhbHZlcyBkY2xrIGJ1dCBub3QgdGhlIHJhdGUgYXQgd2hpY2ggdGhlIHZpZGVvIHBvcnQKCgoK KyAqIGNvbnN1bWVzIHBpeGVscy4KCgoKKyAqLwoKCgorI2RlZmluZSBWT1AyX0FDTEtfUkFURV9I SUdIIDc1MDAwMDAwMFVMCgoKCisjZGVmaW5lIFZPUDJfSElHSF9CV19QSVhDTEtfS0haIDEwMDAw MDAKCgoKKwoKCgovKgoKCgrCoCAqIGJ1cy1mb3JtYXQgdHlwZXMuCgoKCsKgICovCgoKCkBAIC0x MDA4LDYgKzEwMjIsNzIgQEAgc3RhdGljIGJvb2wgdm9wMl9nYW1tYV9sdXRfaW5fdXNlKHN0cnVj dCB2b3AyICp2b3AyLCBzdHJ1Y3Qgdm9wMl92aWRlb19wb3J0ICp2cCkKCgoKcmV0dXJuIGdhbW1h X2VuX3ZwX2lkICE9IG5yX3ZwcyAmJiBnYW1tYV9lbl92cF9pZCAhPSB2cC0+aWQ7CgoKCn0KCgoK K3N0YXRpYyBzdHJ1Y3QgZHJtX3ByaXZhdGVfc3RhdGUgKgoKCgordm9wMl9hY2xrX2NyZWF0ZV9z dGF0ZShzdHJ1Y3QgZHJtX3ByaXZhdGVfb2JqICpvYmopCgoKCit7CgoKCisgc3RydWN0IHZvcDJf YWNsa19zdGF0ZSAqc3RhdGU7CgoKCisKCgoKKyBzdGF0ZSA9IGt6YWxsb2Nfb2JqKCpzdGF0ZSk7 CgoKCisgaWYgKCFzdGF0ZSkKCgoKKyByZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKCgoKKwoKCgor IHJldHVybiAmc3RhdGUtPmJhc2U7CgoKCit9CgoKCisKCgoKK3N0YXRpYyBzdHJ1Y3QgZHJtX3By aXZhdGVfc3RhdGUgKgoKCgordm9wMl9hY2xrX2R1cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX3By aXZhdGVfb2JqICpvYmopCgoKCit7CgoKCisgc3RydWN0IHZvcDJfYWNsa19zdGF0ZSAqc3RhdGU7 CgoKCisKCgoKKyBzdGF0ZSA9IGttZW1kdXAob2JqLT5zdGF0ZSwgc2l6ZW9mKCpzdGF0ZSksIEdG UF9LRVJORUwpOwoKCgorIGlmICghc3RhdGUpCgoKCisgcmV0dXJuIE5VTEw7CgoKCisKCgoKKyBf X2RybV9hdG9taWNfaGVscGVyX3ByaXZhdGVfb2JqX2R1cGxpY2F0ZV9zdGF0ZShvYmosICZzdGF0 ZS0+YmFzZSk7CgoKCisKCgoKKyByZXR1cm4gJnN0YXRlLT5iYXNlOwoKCgorfQoKCgorCgoKCitz dGF0aWMgdm9pZCB2b3AyX2FjbGtfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX3ByaXZhdGVfb2Jq ICpvYmosCgoKCisgwqDCoMKgIHN0cnVjdCBkcm1fcHJpdmF0ZV9zdGF0ZSAqc3RhdGUpCgoKCit7 CgoKCisga2ZyZWUodG9fdm9wMl9hY2xrX3N0YXRlKHN0YXRlKSk7CgoKCit9CgoKCisKCgoKK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3ByaXZhdGVfc3RhdGVfZnVuY3Mgdm9wMl9hY2xrX3N0YXRl X2Z1bmNzID0gewoKCgorIC5hdG9taWNfY3JlYXRlX3N0YXRlID0gdm9wMl9hY2xrX2NyZWF0ZV9z dGF0ZSwKCgoKKyAuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IHZvcDJfYWNsa19kdXBsaWNhdGVf c3RhdGUsCgoKCisgLmF0b21pY19kZXN0cm95X3N0YXRlID0gdm9wMl9hY2xrX2Rlc3Ryb3lfc3Rh dGUsCgoKCit9OwoKCgorCgoKCisvKiBUaGUgcmF0ZSB0aGF0IHNhdGlzZmllcyBldmVyeSB2aWRl byBwb3J0LCBuZXZlciBiZWxvdyB0aGUgcGxhdGZvcm0ncyBvd24uICovCgoKCitzdGF0aWMgdW5z aWduZWQgbG9uZyB2b3AyX2FjbGtfcmF0ZShzdHJ1Y3Qgdm9wMiAqdm9wMiwKCgoKKyDCoMKgwqAg Y29uc3Qgc3RydWN0IHZvcDJfYWNsa19zdGF0ZSAqYWNsa19zdGF0ZSkKCgoKK3sKCgoKKyB1bnNp Z25lZCBsb25nIHJhdGUgPSB2b3AyLT5hY2xrX3JhdGVfbm9ybWFsOwoKCgorIHVuc2lnbmVkIGlu dCBpOwoKCgorCgoKCisgZm9yIChpID0gMDsgaSA8IHZvcDItPmRhdGEtPm5yX3ZwczsgaSsrKQoK CgorIHJhdGUgPSBtYXgocmF0ZSwgYWNsa19zdGF0ZS0+dnBfcmF0ZVtpXSk7CgoKCisKCgoKKyBy ZXR1cm4gcmF0ZTsKCgoKK30KCgoKKwoKCgorc3RhdGljIHZvaWQgdm9wMl9hcHBseV9hY2xrX3Jh dGUoc3RydWN0IHZvcDIgKnZvcDIsIHN0cnVjdCBkcm1fYXRvbWljX2NvbW1pdCAqc3RhdGUpCgoK Cit7CgoKCisgc3RydWN0IGRybV9wcml2YXRlX3N0YXRlICpwcml2X3N0YXRlOwoKCgorCgoKCisg aWYgKHZvcDItPnZlcnNpb24gIT0gVk9QX1ZFUlNJT05fUkszNTg4KQoKCgorIHJldHVybjsKCgoK KwoKCgorIHByaXZfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9uZXdfcHJpdmF0ZV9vYmpfc3RhdGUo c3RhdGUsICZ2b3AyLT5hY2xrX29iaik7CgoKCisgaWYgKCFwcml2X3N0YXRlKQoKCgorIHJldHVy bjsKCgoKKwoKCgorIGNsa19zZXRfcmF0ZSh2b3AyLT5hY2xrLAoKCgorIMKgwqDCoMKgIHZvcDJf YWNsa19yYXRlKHZvcDIsIHRvX3ZvcDJfYWNsa19zdGF0ZShwcml2X3N0YXRlKSkpOwoKCgorfQoK CgorCgoKCnN0YXRpYyB2b2lkIHZvcDJfY3J0Y19hdG9taWNfZGlzYWJsZShzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMsCgoKCsKgwqDCoMKgIHN0cnVjdCBkcm1fYXRvbWljX2NvbW1pdCAqc3RhdGUpCgoK CnsKCgoKQEAgLTEwNTMsNiArMTEzMyw4IEBAIHN0YXRpYyB2b2lkIHZvcDJfY3J0Y19hdG9taWNf ZGlzYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCgoKCmlmICghdm9wMi0+ZW5hYmxlX2NvdW50 KQoKCgp2b3AyX2Rpc2FibGUodm9wMik7CgoKCisgdm9wMl9hcHBseV9hY2xrX3JhdGUodm9wMiwg c3RhdGUpOwoKCgorCgoKCnZvcDJfdW5sb2NrKHZvcDIpOwoKCgppZiAoY3J0Yy0+c3RhdGUtPmV2 ZW50ICYmICFjcnRjLT5zdGF0ZS0+YWN0aXZlKSB7CgoKCkBAIC0xNzgwLDYgKzE4NjIsOCBAQCBz dGF0aWMgdm9pZCB2b3AyX2NydGNfYXRvbWljX2VuYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMs CgoKCnZvcDJfbG9jayh2b3AyKTsKCgoKKyB2b3AyX2FwcGx5X2FjbGtfcmF0ZSh2b3AyLCBzdGF0 ZSk7CgoKCisKCgoKcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHZwLT5kY2xrKTsKCgoKaWYgKHJl dCA8IDApIHsKCgoKZHJtX2Vycih2b3AyLT5kcm0sICJmYWlsZWQgdG8gZW5hYmxlIGRjbGsgZm9y IHZpZGVvIHBvcnQlZCAtICVkXG4iLAoKCgpAQCAtMTk5Myw2ICsyMDc3LDIwIEBAIHN0YXRpYyBp bnQgdm9wMl9jcnRjX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCgoKCmlmIChy ZXQpCgoKCnJldHVybiByZXQ7CgoKCisgaWYgKHZwLT52b3AyLT52ZXJzaW9uID09IFZPUF9WRVJT SU9OX1JLMzU4OCkgewoKCgorIHN0cnVjdCBkcm1fcHJpdmF0ZV9zdGF0ZSAqcHJpdl9zdGF0ZTsK CgoKKwoKCgorIHByaXZfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9wcml2YXRlX29ial9zdGF0ZShz dGF0ZSwKCgoKKyDCoMKgwqDCoMKgICZ2cC0+dm9wMi0+YWNsa19vYmopOwoKCgorIGlmIChJU19F UlIocHJpdl9zdGF0ZSkpCgoKCisgcmV0dXJuIFBUUl9FUlIocHJpdl9zdGF0ZSk7CgoKCisKCgoK KyB0b192b3AyX2FjbGtfc3RhdGUocHJpdl9zdGF0ZSktPnZwX3JhdGVbdnAtPmlkXSA9CgoKCisg Y3J0Y19zdGF0ZS0+YWN0aXZlICYmCgoKCisgY3J0Y19zdGF0ZS0+YWRqdXN0ZWRfbW9kZS5jcnRj X2Nsb2NrID4gVk9QMl9ISUdIX0JXX1BJWENMS19LSFogPwoKCgorIFZPUDJfQUNMS19SQVRFX0hJ R0ggOiAwOwoKCgorIH0KCgoKKwoKCgpkcm1fYXRvbWljX2NydGNfc3RhdGVfZm9yX2VhY2hfcGxh bmUocGxhbmUsIGNydGNfc3RhdGUpCgoKCm5wbGFuZXMrKzsKCgoKQEAgLTI4NzUsNiArMjk3Myw4 IEBAIHN0YXRpYyBpbnQgdm9wMl9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmlj ZSAqbWFzdGVyLCB2b2lkICpkYXRhKQoKCgpyZXR1cm4gZGV2X2Vycl9wcm9iZShkcm0tPmRldiwg UFRSX0VSUih2b3AyLT5hY2xrKSwKCgoKwqDCoMKgwqAgImZhaWxlZCB0byBnZXQgYWNsayBzb3Vy Y2VcbiIpOwoKCgorIHZvcDItPmFjbGtfcmF0ZV9ub3JtYWwgPSBjbGtfZ2V0X3JhdGUodm9wMi0+ YWNsayk7CgoKCisKCgoKdm9wMi0+cGNsayA9IGRldm1fY2xrX2dldF9vcHRpb25hbCh2b3AyLT5k ZXYsICJwY2xrX3ZvcCIpOwoKCgppZiAoSVNfRVJSKHZvcDItPnBjbGspKQoKCgpyZXR1cm4gZGV2 X2Vycl9wcm9iZShkcm0tPmRldiwgUFRSX0VSUih2b3AyLT5wY2xrKSwKCgoKQEAgLTI5NDQsNiAr MzA0NCwxMSBAQCBzdGF0aWMgaW50IHZvcDJfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVj dCBkZXZpY2UgKm1hc3Rlciwgdm9pZCAqZGF0YSkKCgoKcm9ja2NoaXBfZHJtX2RtYV9pbml0X2Rl dmljZSh2b3AyLT5kcm0sIHZvcDItPmRldik7CgoKCisgcmV0ID0gZHJtX2F0b21pY19wcml2YXRl X29ial9pbml0KHZvcDItPmRybSwgJnZvcDItPmFjbGtfb2JqLAoKCgorIMKgICZ2b3AyX2FjbGtf c3RhdGVfZnVuY3MpOwoKCgorIGlmIChyZXQpCgoKCisgZ290byBlcnJfY3J0Y3M7CgoKCisKCgoK cG1fcnVudGltZV9lbmFibGUoJnBkZXYtPmRldik7CgoKCnJldHVybiAwOwoKCgpAQCAtMjk2MCw2 ICszMDY1LDggQEAgc3RhdGljIHZvaWQgdm9wMl91bmJpbmQoc3RydWN0IGRldmljZSAqZGV2LCBz dHJ1Y3QgZGV2aWNlICptYXN0ZXIsIHZvaWQgKmRhdGEpCgoKCnBtX3J1bnRpbWVfZGlzYWJsZShk ZXYpOwoKCgorIGRybV9hdG9taWNfcHJpdmF0ZV9vYmpfZmluaSgmdm9wMi0+YWNsa19vYmopOwoK CgorCgoKCmlmICh2b3AyLT5yZ2IpCgoKCnJvY2tjaGlwX3JnYl9maW5pKHZvcDItPnJnYik7CgoK CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcDIu aCBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fdm9wMi5oCgoKCmluZGV4 IGZmY2IzOWMxMzBhYS4uZGYxNDhkYzYxNzAzIDEwMDY0NAoKCgotLS0gYS9kcml2ZXJzL2dwdS9k cm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcDIuaAoKCgorKysgYi9kcml2ZXJzL2dwdS9kcm0v cm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcDIuaAoKCgpAQCAtOCw2ICs4LDcgQEAKCgoKI2RlZmlu ZSBfUk9DS0NISVBfRFJNX1ZPUDJfSAoKCgojaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CgoKCisj aW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4KCgoKI2luY2x1ZGUgPGRybS9kcm1fbW9kZXMuaD4K CgoKI2luY2x1ZGUgPGR0LWJpbmRpbmdzL3NvYy9yb2NrY2hpcCx2b3AyLmg+CgoKCiNpbmNsdWRl ICJyb2NrY2hpcF9kcm1fZHJ2LmgiCgoKCkBAIC0yODYsNiArMjg3LDIxIEBAIHN0cnVjdCB2b3Ay X2RhdGEgewoKCgp1bnNpZ25lZCBpbnQgc29jX2lkOwoKCgp9OwoKCgorLyoKCgoKKyAqIFRoZSBB WEkgY2xvY2sgaXMgc2hhcmVkIGJ5IGV2ZXJ5IHZpZGVvIHBvcnQsIHNvIHRoZSByYXRlIGl0IGhh cyB0byBydW4gYXQgaXMKCgoKKyAqIGEgcHJvcGVydHkgb2YgdGhlIGRldmljZSByYXRoZXIgdGhh biBvZiBvbmUgQ1JUQy7CoCBUcmFjayBpdCBhcyBhIGdsb2JhbAoKCgorICogYXRvbWljIHN0YXRl IG9iamVjdDogZWFjaCBDUlRDIHJlY29yZHMgaXRzIG93biByZXF1aXJlbWVudCBkdXJpbmcgYXRv bWljCgoKCisgKiBjaGVjaywgYW5kIHRoZSByYXRlIGFwcGxpZWQgaXMgdGhlIG1heGltdW0gb3Zl ciB0aGUgcG9ydHMuwqAgR29pbmcgdGhyb3VnaAoKCgorICogdGhlIGF0b21pYyBzdGF0ZSBpcyB3 aGF0IG1ha2VzIHRoaXMgc2FmZSAtIGEgY29tbWl0IG5ldmVyIHJlYWRzIHRoZSBzdGF0ZSBvZgoK CgorICogYSBDUlRDIGl0IGRvZXMgbm90IGhvbGQgYSBsb2NrIGZvci4KCgoKKyAqLwoKCgorc3Ry dWN0IHZvcDJfYWNsa19zdGF0ZSB7CgoKCisgc3RydWN0IGRybV9wcml2YXRlX3N0YXRlIGJhc2U7 CgoKCisgdW5zaWduZWQgbG9uZyB2cF9yYXRlW1JPQ0tDSElQX01BWF9DUlRDXTsKCgoKK307CgoK CisKCgoKKyNkZWZpbmUgdG9fdm9wMl9hY2xrX3N0YXRlKHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1 Y3Qgdm9wMl9hY2xrX3N0YXRlLCBiYXNlKQoKCgorCgoKCnN0cnVjdCB2b3AyIHsKCgoKdTMyIHZl cnNpb247CgoKCnN0cnVjdCBkZXZpY2UgKmRldjsKCgoKQEAgLTMyNiw2ICszNDIsOSBAQCBzdHJ1 Y3Qgdm9wMiB7CgoKCnVuc2lnbmVkIGludCBlbmFibGVfY291bnQ7CgoKCnN0cnVjdCBjbGsgKmhj bGs7CgoKCnN0cnVjdCBjbGsgKmFjbGs7CgoKCisgLyogQVhJIGNsb2NrIHJhdGUgc2V0IHVwIGJ5 IHRoZSBwbGF0Zm9ybSwgdXNlZCBhcyB0aGUgbG93ZXIgYm91bmQuICovCgoKCisgdW5zaWduZWQg bG9uZyBhY2xrX3JhdGVfbm9ybWFsOwoKCgorIHN0cnVjdCBkcm1fcHJpdmF0ZV9vYmogYWNsa19v Ymo7CgoKCnN0cnVjdCBjbGsgKnBjbGs7CgoKCnN0cnVjdCBjbGsgKnBsbF9oZG1pcGh5MDsKCgoK c3RydWN0IGNsayAqcGxsX2hkbWlwaHkxOwoKCgotLQoKCgoyLjQzLjAKCgoKwqAKCgoKwqAKCgoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KCgoKTGludXgt cm9ja2NoaXAgbWFpbGluZyBsaXN0CgoKCkxpbnV4LXJvY2tjaGlwQGxpc3RzLmluZnJhZGVhZC5v cmcKCgoKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1y b2NrY2hpcAoKCgrCoAoKCg==