From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sean Paul Subject: [PATCH 20/21] drm/msm: Add SDM845 DPU support Date: Mon, 9 Jul 2018 13:31:56 -0400 Message-ID: <20180709173200.238457-21-seanpaul@chromium.org> References: <20180709173200.238457-1-seanpaul@chromium.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180709173200.238457-1-seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: abhinavk-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, architt-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, chandanu-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, jsanka-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, jcrouse-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, ryadav-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, skolluku-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, airlied-cv59FeDIM0c@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, nganji-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, hoegsberg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, dovizu-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org RnJvbTogSmV5a3VtYXIgU2Fua2FyYW4gPGpzYW5rYUBjb2RlYXVyb3JhLm9yZz4KClNETTg0NSBT b0MgaW5jbHVkZXMgdGhlIE1vYmlsZSBEaXNwbGF5IFN1YiBTeXN0ZW0gKE1EU1MpIHdoaWNoIGlz IGEKdG9wIGxldmVsIHdyYXBwZXIgY29uc2lzdGluZyBvZiBEaXNwbGF5IFByb2Nlc3NpbmcgVW5p dCAoRFBVKSBhbmQKZGlzcGxheSBwZXJpcGhlcmFsIG1vZHVsZXMgc3VjaCBhcyBEaXNwbGF5IFNl cmlhbCBJbnRlcmZhY2UgKERTSSkKYW5kIERpc3BsYXlQb3J0IChEUCkuCgpNRFNTIGZ1bmN0aW9u cyBlc3NlbnRpYWxseSBhcyBhIGJhY2stZW5kIGNvbXBvc2l0aW9uIGVuZ2luZS4gSXQgYmxlbmRz CnZpZGVvIGFuZCBncmFwaGljIGltYWdlcyBzdG9yZWQgaW4gdGhlIGZyYW1lIGJ1ZmZlcnMgYW5k IHNjYW5zIG91dCB0aGUKY29tcG9zZWQgaW1hZ2UgdG8gYSBkaXNwbGF5IHNpbmsgKG92ZXIgRFNJ L0RQKS4KClRoZSBmb2xsb3dpbmcgZGlhZ3JhbSByZXByZXNlbnRzIGhhcmR3YXJlIGJsb2NrcyBm b3IgYSBzaW1wbGUgcGlwZWxpbmUKKHR3byBwbGFuZXMgYXJlIHByZXNlbnQgb24gYSBnaXZlbiBj cnRjIHdoaWNoIGlzIGNvbm5lY3RlZCB0byBhIERTSQpjb25uZWN0b3IpOgoKICAgICAgIE1EU1MK ICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAgICAgfCArLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIHwKICAgICAgfCB8IERQVSAgICAgICAgICAgICAgICAg ICAgICAgICB8IHwKICAgICAgfCB8ICArLS0tLS0tLS0rICArLS0tLS0tLS0rICAgICB8IHwKICAg ICAgfCB8ICB8ICBTU1BQICB8ICB8ICBTU1BQICB8ICAgICB8IHwKICAgICAgfCB8ICArLS0tLSst LS0rICArLS0tLSstLS0rICAgICB8IHwKICAgICAgfCB8ICAgICAgIHwgICAgICAgICAgIHwgICAg ICAgICB8IHwKICAgICAgfCB8ICArLS0tLXYtLS0tLS0tLS0tLXYtLS0rICAgICB8IHwKICAgICAg fCB8ICB8ICBMYXllciBNaXhlciAoTE0pICB8ICAgICB8IHwKICAgICAgfCB8ICArLS0tLS0tLS0t LS0tLS0tLS0tLS0rICAgICB8IHwKICAgICAgfCB8ICArLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAg ICB8IHwKICAgICAgfCB8ICB8ICAgIFBpbmdQb25nIChQUCkgICB8ICAgICB8IHwKICAgICAgfCB8 ICArLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICB8IHwKICAgICAgfCB8ICArLS0tLS0tLS0tLS0t LS0tLS0tLS0rICAgICB8IHwKICAgICAgfCB8ICB8ICBJTlRFUkZBQ0UgKFZJREVPKSB8ICAgICB8 IHwKICAgICAgfCB8ICArLS0tKy0tLS0tLS0tLS0tLS0tLS0rICAgICB8IHwKICAgICAgfCArLS0t LS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIHwKICAgICAgfCAgICAgICAgfCAgICAgICAgICAg ICAgICAgICAgICAgIHwKICAgICAgfCArLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgIHwK ICAgICAgfCB8ICAgICAgfCBESVNQTEFZIFBFUklQSEVSQUxTIHwgIHwKICAgICAgfCB8ICArLS0t di0rICAgICAgKy0tLS0tKyAgICAgIHwgIHwKICAgICAgfCB8ICB8IERTSSB8ICAgICAgfCAgRFAg fCAgICAgIHwgIHwKICAgICAgfCB8ICArLS0tLS0rICAgICAgKy0tLS0tKyAgICAgIHwgIHwKICAg ICAgfCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgIHwKICAgICAgKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKClRoZSBudW1iZXIgb2YgRFBVIHN1Yi1ibG9ja3MgKGku ZS4gU1NQUHMsIExNcywgUFAgYmxvY2tzIGFuZCBJTlRGcykKZGVwZW5kcyBvbiBTb0MgY2FwYWJp bGl0aWVzLgoKT3ZlcnZpZXcgb2YgRFBVIHN1Yi1ibG9ja3M6Ci0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQoqIFNvdXJjZSBTdXJmYWNlIFByb2Nlc3NvciAoU1NQUCk6CiBSZWZlcnMgdG8gYW55 IG9mIGhhcmR3YXJlIHBpcGVzIGxpa2UgVmlHLCBETUEgZXRjLiBPbmx5IFZpRyBwaXBlcyBhcmUK IGNhcGFibGUgb2YgcGVyZm9ybWluZyBmb3JtYXQgY29udmVyc2lvbiwgc2NhbGluZyBhbmQgcXVh bGl0eSBpbXByb3ZlbWVudAogZm9yIHNvdXJjZSBzdXJmYWNlcy4KCiogTGF5ZXIgTWl4ZXIgKExN KToKIEJsZW5kIHNvdXJjZSBzdXJmYWNlcyB0b2dldGhlciAoaW4gcmVxdWVzdGVkIHpvcmRlcikK CiogUGluZ1BvbmcgKFBQKToKIFRoaXMgYmxvY2sgY29udHJvbHMgZnJhbWUgZG9uZSBpbnRlcnJ1 cHQgb3V0cHV0LCBFT0wgYW5kIEVPRiBnZW5lcmF0aW9uLAogb3ZlcmZsb3cvdW5kZXJmbG93IGNv bnRyb2wuCgoqIERpc3BsYXkgaW50ZXJmYWNlIChJTlRGKToKIFRpbWluZyBnZW5lcmF0b3IgYW5k IGludGVyZmFjZSBjb25uZWN0aW5nIHRoZSBkaXNwbGF5IHBlcmlwaGVyYWxzLgoKRFJNIGNvbXBv bmVudHMgbWFwcGluZyB0byBEUFUgYXJjaGl0ZWN0dXJlOgotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KUExBTkVzIG1hcHMgdG8gU1NQUHMKQ1JUQyBtYXBzIHRvIExN cwpFbmNvZGVyIG1hcHMgdG8gUFBzLCBJTlRGcwoKRGF0YSBmbG93IHNldHVwOgotLS0tLS0tLS0t LS0tLS0KTURTUyBoYXJkd2FyZSBjYW4gc3VwcG9ydCB2YXJpb3VzIGRhdGEgZmxvd3MgKGUuZy4p OgogIC0gRHVhbCBwaXBlOiBPdXRwdXQgZnJvbSB0d28gTE1zIGNvbWJpbmVkIHRvIHNpbmdsZSBk aXNwbGF5LgogIC0gU3BsaXQgZGlzcGxheTogT3V0cHV0IGZyb20gdHdvIExNcyBjb25uZWN0ZWQg dG8gdHdvIHNlcGFyYXRlCiAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2VzLgoKVGhlIGhhcmR3 YXJlIGNhcGFiaWxpdGllcyBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBjb25jdXJyZW50IGRhdGEg cGF0aHMKcG9zc2libGUuIEFueSBjb250cm9sIHBhdGggKGkuZS4gcGlwZWxpbmUgdy9pIERQVSkg Y2FuIGJlIHJvdXRlZCB0byBhbnkKb2YgdGhlIGhhcmR3YXJlIGRhdGEgcGF0aHMuIEEgZ2l2ZW4g Y29udHJvbCBwYXRoIGNhbiBiZSB0cmlnZ2VyZWQsCmZsdXNoZWQgYW5kIGNvbnRyb2xsZWQgaW5k ZXBlbmRlbnRseS4KClNpZ25lZC1vZmYtYnk6IEFiaGluYXYgS3VtYXIgPGFiaGluYXZrQGNvZGVh dXJvcmEub3JnPgpTaWduZWQtb2ZmLWJ5OiBBcmNoaXQgVGFuZWphIDxhcmNoaXR0QGNvZGVhdXJv cmEub3JnPgpTaWduZWQtb2ZmLWJ5OiBDaGFuZGFuIFVkZGFyYWp1IDxjaGFuZGFudUBjb2RlYXVy b3JhLm9yZz4KU2lnbmVkLW9mZi1ieTogSmV5a3VtYXIgU2Fua2FyYW4gPGpzYW5rYUBjb2RlYXVy b3JhLm9yZz4KU2lnbmVkLW9mZi1ieTogSm9yZGFuIENyb3VzZSA8amNyb3VzZUBjb2RlYXVyb3Jh Lm9yZz4KU2lnbmVkLW9mZi1ieTogUmFqZXNoIFlhZGF2IDxyeWFkYXZAY29kZWF1cm9yYS5vcmc+ ClNpZ25lZC1vZmYtYnk6IFNyYXZhbnRoaSBLb2xsdWt1ZHVydSA8c2tvbGx1a3VAY29kZWF1cm9y YS5vcmc+ClNpZ25lZC1vZmYtYnk6IFNlYW4gUGF1bCA8c2VhbnBhdWxAY2hyb21pdW0ub3JnPgot LS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUgICAgICAgICAgICAgICAgICB8ICAgMzIg Ky0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb3JlX2lycS5jICB8ICA1MzIg KysrKwogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NvcmVfaXJxLmggIHwgIDE3 OCArKwogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NvcmVfcGVyZi5jIHwgIDYz NyArKysrCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29yZV9wZXJmLmggfCAg MTMzICsKIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMgICAgICB8IDI1 MjMgKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2Ny dGMuaCAgICAgIHwgIDQ5MSArKysrCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf ZGJnLmMgICAgICAgfCAyMzkzICsrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X2RiZy5oICAgICAgIHwgIDEwMyArCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvZHB1MS9kcHVfZW5jb2Rlci5jICAgfCAyNTc0ICsrKysrKysrKysrKysrKysrCiBkcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5oICAgfCAgMTkxICsrCiAuLi4vZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyX3BoeXMuaCAgfCAgNDUzICsrKwogLi4uL2Ry bS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyX3BoeXNfY21kLmMgIHwgIDkwNSArKysrKysKIC4u Li9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlcl9waHlzX3ZpZC5jICB8ICA5MjIgKysrKysr CiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZm9ybWF0cy5jICAgfCAxMjc2ICsr KysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZm9ybWF0cy5oICAgfCAg MTM2ICsKIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19ibGsuYyAgICB8ICAx NTUgKwogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2Jsay5oICAgIHwgICA1 MyArCiAuLi4vZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jYXRhbG9nLmMgICAgfCAgNTEx ICsrKysKIC4uLi9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2NhdGFsb2cuaCAgICB8ICA4 MDQgKysrKysKIC4uLi9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY2F0YWxvZ19mb3JtYXQuaCB8 ICAxODIgKysKIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jZG0uYyAgICB8 ICAzMjMgKysrCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY2RtLmggICAg fCAgMTM5ICsKIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jdGwuYyAgICB8 ICA1NDAgKysrKwogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2N0bC5oICAg IHwgIDIxOCArKwogLi4uL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfaW50ZXJydXB0cy5j IHwgMTIxMyArKysrKysrKwogLi4uL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfaW50ZXJy dXB0cy5oIHwgIDI3OCArKwogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2lu dGYuYyAgIHwgIDM0OSArKysKIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19p bnRmLmggICB8ICAxMjggKwogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2xt LmMgICAgIHwgIDI2MSArKwogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2xt LmggICAgIHwgIDEyMiArCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfbWRz cy5oICAgfCAgNDY1ICsrKwogLi4uL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfcGluZ3Bv bmcuYyAgIHwgIDI1MCArKwogLi4uL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfcGluZ3Bv bmcuaCAgIHwgIDEzNiArCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfc3Nw cC5jICAgfCAgNzUzICsrKysrCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdf c3NwcC5oICAgfCAgNDI0ICsrKwogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3 X3RvcC5jICAgIHwgIDM5OCArKysKIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9o d190b3AuaCAgICB8ICAyMDIgKysKIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9o d191dGlsLmMgICB8ICA0NTIgKysrCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf aHdfdXRpbC5oICAgfCAgMzU4ICsrKwogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X2h3X3ZiaWYuYyAgIHwgIDI3NSArKwogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X2h3X3ZiaWYuaCAgIHwgIDEyOCArCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf aHdpby5oICAgICAgfCAgIDU2ICsKIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9p b191dGlsLmMgICB8ICAxODYgKysKIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9p b191dGlsLmggICB8ICAgNTcgKwogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ly cS5jICAgICAgIHwgICA2NiArCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaXJx LmggICAgICAgfCAgIDU5ICsKIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9rbXMu YyAgICAgICB8IDEzODAgKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfa21zLmggICAgICAgfCAgNDAyICsrKwogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X2ttc191dGlscy5jIHwgIDE1MyArCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfbWRzcy5jICAgICAgfCAgMjU5ICsrCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfcGxhbmUuYyAgICAgfCAxOTYzICsrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9wbGFuZS5oICAgICB8ICAxNzUgKysKIC4uLi9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X3Bvd2VyX2hhbmRsZS5jICB8ICAyNDkgKysKIC4uLi9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X3Bvd2VyX2hhbmRsZS5oICB8ICAyMjUgKysKIGRyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9ybS5jICAgICAgICB8IDEwNzkgKysrKysrKwogZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X3JtLmggICAgICAgIHwgIDE5OSArKwogZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X3RyYWNlLmggICAgIHwgMTAxMSArKysrKysrCiBkcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfdmJpZi5jICAgICAgfCAgMzg0ICsrKwogZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3ZiaWYuaCAgICAgIHwgICA5NCArCiBkcml2ZXJzL2dw dS9kcm0vbXNtL21zbV9kcnYuYyAgICAgICAgICAgICAgICAgfCAgMTM1ICstCiBkcml2ZXJzL2dw dS9kcm0vbXNtL21zbV9kcnYuaCAgICAgICAgICAgICAgICAgfCAgIDgxICstCiBkcml2ZXJzL2dw dS9kcm0vbXNtL21zbV9rbXMuaCAgICAgICAgICAgICAgICAgfCAgICA4ICsKIGluY2x1ZGUvdWFw aS9tZWRpYS9tc21fbWVkaWFfaW5mby5oICAgICAgICAgICB8IDEzNzYgKysrKysrKysrCiA2NCBm aWxlcyBjaGFuZ2VkLCAzMjE3OCBpbnNlcnRpb25zKCspLCAxNSBkZWxldGlvbnMoLSkKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29yZV9pcnEu YwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9j b3JlX2lycS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2NvcmVfcGVyZi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X2NvcmVfcGVyZi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZGJnLmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZGJnLmgKIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5jCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuaAog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNv ZGVyX3BoeXMuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9lbmNvZGVyX3BoeXNfY21kLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlcl9waHlzX3ZpZC5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2Zvcm1hdHMuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9mb3JtYXRzLmgK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdf YmxrLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfaHdfYmxrLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfaHdfY2F0YWxvZy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X2h3X2NhdGFsb2cuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jYXRhbG9nX2Zvcm1hdC5oCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2NkbS5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2Nk bS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X2h3X2N0bC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2h3X2N0bC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X2h3X2ludGVycnVwdHMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19pbnRlcnJ1cHRzLmgKIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfaW50Zi5jCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2ludGYuaAog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19s bS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X2h3X2xtLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfaHdfbWRzcy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X2h3X3Bpbmdwb25nLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfcGluZ3BvbmcuaAogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19zc3BwLmMKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfc3NwcC5oCiBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3RvcC5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3 X3RvcC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X2h3X3V0aWwuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9od191dGlsLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v bXNtL2Rpc3AvZHB1MS9kcHVfaHdfdmJpZi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3ZiaWYuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od2lvLmgKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaW9fdXRpbC5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2lvX3V0aWwuaAogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9pcnEuYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9pcnEu aAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9r bXMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9rbXMuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9rbXNfdXRpbHMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9tZHNzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v bXNtL2Rpc3AvZHB1MS9kcHVfcGxhbmUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wbGFuZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3Bvd2VyX2hhbmRsZS5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3Bvd2VyX2hhbmRsZS5oCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3JtLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcm0u aAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV90 cmFjZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X3ZiaWYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV92YmlmLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3VhcGkvbWVkaWEvbXNt X21lZGlhX2luZm8uaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUg Yi9kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlCmluZGV4IGNkNDBjMDUwYjJkNy4uMTYzOWVh OGMwZDEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUKQEAgLTEsNSArMSw2IEBACiAjIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wCiBjY2ZsYWdzLXkgOj0gLUlkcml2ZXJzL2dwdS9kcm0vbXNt CitjY2ZsYWdzLXkgKz0gLUlkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MQogY2NmbGFncy0k KENPTkZJR19EUk1fTVNNX0RTSSkgKz0gLUlkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaQogCiBtc20t eSA6PSBcCkBAIC00NSw2ICs0NiwzNCBAQCBtc20teSA6PSBcCiAJZGlzcC9tZHA1L21kcDVfbWl4 ZXIubyBcCiAJZGlzcC9tZHA1L21kcDVfcGxhbmUubyBcCiAJZGlzcC9tZHA1L21kcDVfc21wLm8g XAorCWRpc3AvZHB1MS9kcHVfY29yZV9pcnEubyBcCisJZGlzcC9kcHUxL2RwdV9jb3JlX3BlcmYu byBcCisJZGlzcC9kcHUxL2RwdV9jcnRjLm8gXAorCWRpc3AvZHB1MS9kcHVfZW5jb2Rlci5vIFwK KwlkaXNwL2RwdTEvZHB1X2VuY29kZXJfcGh5c19jbWQubyBcCisJZGlzcC9kcHUxL2RwdV9lbmNv ZGVyX3BoeXNfdmlkLm8gXAorCWRpc3AvZHB1MS9kcHVfZm9ybWF0cy5vIFwKKwlkaXNwL2RwdTEv ZHB1X2h3X2Jsay5vIFwKKwlkaXNwL2RwdTEvZHB1X2h3X2NhdGFsb2cubyBcCisJZGlzcC9kcHUx L2RwdV9od19jZG0ubyBcCisJZGlzcC9kcHUxL2RwdV9od19jdGwubyBcCisJZGlzcC9kcHUxL2Rw dV9od19pbnRlcnJ1cHRzLm8gXAorCWRpc3AvZHB1MS9kcHVfaHdfaW50Zi5vIFwKKwlkaXNwL2Rw dTEvZHB1X2h3X2xtLm8gXAorCWRpc3AvZHB1MS9kcHVfaHdfcGluZ3BvbmcubyBcCisJZGlzcC9k cHUxL2RwdV9od19zc3BwLm8gXAorCWRpc3AvZHB1MS9kcHVfaHdfdG9wLm8gXAorCWRpc3AvZHB1 MS9kcHVfaHdfdXRpbC5vIFwKKwlkaXNwL2RwdTEvZHB1X2h3X3ZiaWYubyBcCisJZGlzcC9kcHUx L2RwdV9pb191dGlsLm8gXAorCWRpc3AvZHB1MS9kcHVfaXJxLm8gXAorCWRpc3AvZHB1MS9kcHVf a21zLm8gXAorCWRpc3AvZHB1MS9kcHVfa21zX3V0aWxzLm8gXAorCWRpc3AvZHB1MS9kcHVfbWRz cy5vIFwKKwlkaXNwL2RwdTEvZHB1X3BsYW5lLm8gXAorCWRpc3AvZHB1MS9kcHVfcG93ZXJfaGFu ZGxlLm8gXAorCWRpc3AvZHB1MS9kcHVfcm0ubyBcCisJZGlzcC9kcHUxL2RwdV92YmlmLm8gXAog CW1zbV9hdG9taWMubyBcCiAJbXNtX2RlYnVnZnMubyBcCiAJbXNtX2Rydi5vIFwKQEAgLTYyLDcg KzkxLDggQEAgbXNtLXkgOj0gXAogCW1zbV9yaW5nYnVmZmVyLm8gXAogCW1zbV9zdWJtaXRxdWV1 ZS5vCiAKLW1zbS0kKENPTkZJR19ERUJVR19GUykgKz0gYWRyZW5vL2E1eHhfZGVidWdmcy5vCitt c20tJChDT05GSUdfREVCVUdfRlMpICs9IGFkcmVuby9hNXh4X2RlYnVnZnMubyBcCisJCQkgIGRp c3AvZHB1MS9kcHVfZGJnLm8KIAogbXNtLSQoQ09ORklHX0RSTV9GQkRFVl9FTVVMQVRJT04pICs9 IG1zbV9mYmRldi5vCiBtc20tJChDT05GSUdfQ09NTU9OX0NMSykgKz0gZGlzcC9tZHA0L21kcDRf bHZkc19wbGwubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X2NvcmVfaXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29yZV9pcnEu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjUzMGMyNGRlYzAxNwot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb3Jl X2lycS5jCkBAIC0wLDAgKzEsNTMyIEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxOCwgVGhl IExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgdmVyc2lvbiAyIGFuZAorICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLwor CisjZGVmaW5lIHByX2ZtdChmbXQpCSJbZHJtOiVzOiVkXSAiIGZtdCwgX19mdW5jX18sIF9fTElO RV9fCisKKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvaXJxZG9t YWluLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5o PgorCisjaW5jbHVkZSAiZHB1X2NvcmVfaXJxLmgiCisjaW5jbHVkZSAiZHB1X3RyYWNlLmgiCisK Ky8qKgorICogZHB1X2NvcmVfaXJxX2NhbGxiYWNrX2hhbmRsZXIgLSBkaXNwYXRjaCBjb3JlIGlu dGVycnVwdHMKKyAqIEBhcmc6CQlwcml2YXRlIGRhdGEgb2YgY2FsbGJhY2sgaGFuZGxlcgorICog QGlycV9pZHg6CQlpbnRlcnJ1cHQgaW5kZXgKKyAqLworc3RhdGljIHZvaWQgZHB1X2NvcmVfaXJx X2NhbGxiYWNrX2hhbmRsZXIodm9pZCAqYXJnLCBpbnQgaXJxX2lkeCkKK3sKKwlzdHJ1Y3QgZHB1 X2ttcyAqZHB1X2ttcyA9IGFyZzsKKwlzdHJ1Y3QgZHB1X2lycSAqaXJxX29iaiA9ICZkcHVfa21z LT5pcnFfb2JqOworCXN0cnVjdCBkcHVfaXJxX2NhbGxiYWNrICpjYjsKKwl1bnNpZ25lZCBsb25n IGlycV9mbGFnczsKKworCXByX2RlYnVnKCJpcnFfaWR4PSVkXG4iLCBpcnFfaWR4KTsKKworCWlm IChsaXN0X2VtcHR5KCZpcnFfb2JqLT5pcnFfY2JfdGJsW2lycV9pZHhdKSkgeworCQlEUk1fRVJS T1IoIm5vIHJlZ2lzdGVyZWQgY2IsIGlkeDolZCBlbmFibGVfY291bnQ6JWRcbiIsIGlycV9pZHgs CisJCQlhdG9taWNfcmVhZCgmZHB1X2ttcy0+aXJxX29iai5lbmFibGVfY291bnRzW2lycV9pZHhd KSk7CisJfQorCisJYXRvbWljX2luYygmaXJxX29iai0+aXJxX2NvdW50c1tpcnFfaWR4XSk7CisK KwkvKgorCSAqIFBlcmZvcm0gcmVnaXN0ZXJlZCBmdW5jdGlvbiBjYWxsYmFjaworCSAqLworCXNw aW5fbG9ja19pcnFzYXZlKCZkcHVfa21zLT5pcnFfb2JqLmNiX2xvY2ssIGlycV9mbGFncyk7CisJ bGlzdF9mb3JfZWFjaF9lbnRyeShjYiwgJmlycV9vYmotPmlycV9jYl90YmxbaXJxX2lkeF0sIGxp c3QpCisJCWlmIChjYi0+ZnVuYykKKwkJCWNiLT5mdW5jKGNiLT5hcmcsIGlycV9pZHgpOworCXNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJmRwdV9rbXMtPmlycV9vYmouY2JfbG9jaywgaXJxX2ZsYWdz KTsKKworCS8qCisJICogQ2xlYXIgcGVuZGluZyBpbnRlcnJ1cHQgc3RhdHVzIGluIEhXLgorCSAq IE5PVEU6IGRwdV9jb3JlX2lycV9jYWxsYmFja19oYW5kbGVyIGlzIHByb3RlY3RlZCBieSB0b3At bGV2ZWwKKwkgKiAgICAgICBzcGlubG9jaywgc28gaXQgaXMgc2FmZSB0byBjbGVhciBhbnkgaW50 ZXJydXB0IHN0YXR1cyBoZXJlLgorCSAqLworCWRwdV9rbXMtPmh3X2ludHItPm9wcy5jbGVhcl9p bnRyX3N0YXR1c19ub2xvY2soCisJCQlkcHVfa21zLT5od19pbnRyLAorCQkJaXJxX2lkeCk7Cit9 CisKK2ludCBkcHVfY29yZV9pcnFfaWR4X2xvb2t1cChzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttcywK KwkJZW51bSBkcHVfaW50cl90eXBlIGludHJfdHlwZSwgdTMyIGluc3RhbmNlX2lkeCkKK3sKKwlp ZiAoIWRwdV9rbXMgfHwgIWRwdV9rbXMtPmh3X2ludHIgfHwKKwkJCSFkcHVfa21zLT5od19pbnRy LT5vcHMuaXJxX2lkeF9sb29rdXApCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIGRwdV9r bXMtPmh3X2ludHItPm9wcy5pcnFfaWR4X2xvb2t1cChpbnRyX3R5cGUsCisJCQlpbnN0YW5jZV9p ZHgpOworfQorCisvKioKKyAqIF9kcHVfY29yZV9pcnFfZW5hYmxlIC0gZW5hYmxlIGNvcmUgaW50 ZXJydXB0IGdpdmVuIGJ5IHRoZSBpbmRleAorICogQGRwdV9rbXM6CQlQb2ludGVyIHRvIGRwdSBr bXMgY29udGV4dAorICogQGlycV9pZHg6CQlpbnRlcnJ1cHQgaW5kZXgKKyAqLworc3RhdGljIGlu dCBfZHB1X2NvcmVfaXJxX2VuYWJsZShzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttcywgaW50IGlycV9p ZHgpCit7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisJaW50IHJldCA9IDAsIGVuYWJsZV9j b3VudDsKKworCWlmICghZHB1X2ttcyB8fCAhZHB1X2ttcy0+aHdfaW50ciB8fAorCQkJIWRwdV9r bXMtPmlycV9vYmouZW5hYmxlX2NvdW50cyB8fAorCQkJIWRwdV9rbXMtPmlycV9vYmouaXJxX2Nv dW50cykgeworCQlEUFVfRVJST1IoImludmFsaWQgcGFyYW1zXG4iKTsKKwkJcmV0dXJuIC1FSU5W QUw7CisJfQorCisJaWYgKGlycV9pZHggPCAwIHx8IGlycV9pZHggPj0gZHB1X2ttcy0+aHdfaW50 ci0+aXJxX2lkeF90Ymxfc2l6ZSkgeworCQlEUFVfRVJST1IoImludmFsaWQgSVJRIGluZGV4OiBb JWRdXG4iLCBpcnFfaWR4KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZW5hYmxlX2NvdW50 ID0gYXRvbWljX3JlYWQoJmRwdV9rbXMtPmlycV9vYmouZW5hYmxlX2NvdW50c1tpcnFfaWR4XSk7 CisJRFJNX0RFQlVHX0tNUygiaXJxX2lkeD0lZCBlbmFibGVfY291bnQ9JWRcbiIsIGlycV9pZHgs IGVuYWJsZV9jb3VudCk7CisJdHJhY2VfZHB1X2NvcmVfaXJxX2VuYWJsZV9pZHgoaXJxX2lkeCwg ZW5hYmxlX2NvdW50KTsKKworCWlmIChhdG9taWNfaW5jX3JldHVybigmZHB1X2ttcy0+aXJxX29i ai5lbmFibGVfY291bnRzW2lycV9pZHhdKSA9PSAxKSB7CisJCXJldCA9IGRwdV9rbXMtPmh3X2lu dHItPm9wcy5lbmFibGVfaXJxKAorCQkJCWRwdV9rbXMtPmh3X2ludHIsCisJCQkJaXJxX2lkeCk7 CisJCWlmIChyZXQpCisJCQlEUFVfRVJST1IoIkZhaWwgdG8gZW5hYmxlIElSUSBmb3IgaXJxX2lk eDolZFxuIiwKKwkJCQkJaXJxX2lkeCk7CisKKwkJRFBVX0RFQlVHKCJpcnFfaWR4PSVkIHJldD0l ZFxuIiwgaXJxX2lkeCwgcmV0KTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZHB1X2ttcy0+aXJx X29iai5jYl9sb2NrLCBpcnFfZmxhZ3MpOworCQkvKiBlbXB0eSBjYWxsYmFjayBsaXN0IGJ1dCBp bnRlcnJ1cHQgaXMgZW5hYmxlZCAqLworCQlpZiAobGlzdF9lbXB0eSgmZHB1X2ttcy0+aXJxX29i ai5pcnFfY2JfdGJsW2lycV9pZHhdKSkKKwkJCURQVV9FUlJPUigiaXJxX2lkeD0lZCBlbmFibGVk IHdpdGggbm8gY2FsbGJhY2tcbiIsCisJCQkJCWlycV9pZHgpOworCQlzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZkcHVfa21zLT5pcnFfb2JqLmNiX2xvY2ssIGlycV9mbGFncyk7CisJfQorCisJcmV0 dXJuIHJldDsKK30KKworaW50IGRwdV9jb3JlX2lycV9lbmFibGUoc3RydWN0IGRwdV9rbXMgKmRw dV9rbXMsIGludCAqaXJxX2lkeHMsIHUzMiBpcnFfY291bnQpCit7CisJaW50IGksIHJldCA9IDAs IGNvdW50czsKKworCWlmICghZHB1X2ttcyB8fCAhaXJxX2lkeHMgfHwgIWlycV9jb3VudCkgewor CQlEUFVfRVJST1IoImludmFsaWQgcGFyYW1zXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQor CisJY291bnRzID0gYXRvbWljX3JlYWQoJmRwdV9rbXMtPmlycV9vYmouZW5hYmxlX2NvdW50c1tp cnFfaWR4c1swXV0pOworCWlmIChjb3VudHMpCisJCURSTV9FUlJPUigiaXJxX2lkeD0lZCBlbmFi bGVfY291bnQ9JWRcbiIsIGlycV9pZHhzWzBdLCBjb3VudHMpOworCisJZm9yIChpID0gMDsgKGkg PCBpcnFfY291bnQpICYmICFyZXQ7IGkrKykKKwkJcmV0ID0gX2RwdV9jb3JlX2lycV9lbmFibGUo ZHB1X2ttcywgaXJxX2lkeHNbaV0pOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBfZHB1 X2NvcmVfaXJxX2Rpc2FibGUgLSBkaXNhYmxlIGNvcmUgaW50ZXJydXB0IGdpdmVuIGJ5IHRoZSBp bmRleAorICogQGRwdV9rbXM6CQlQb2ludGVyIHRvIGRwdSBrbXMgY29udGV4dAorICogQGlycV9p ZHg6CQlpbnRlcnJ1cHQgaW5kZXgKKyAqLworc3RhdGljIGludCBfZHB1X2NvcmVfaXJxX2Rpc2Fi bGUoc3RydWN0IGRwdV9rbXMgKmRwdV9rbXMsIGludCBpcnFfaWR4KQoreworCWludCByZXQgPSAw LCBlbmFibGVfY291bnQ7CisKKwlpZiAoIWRwdV9rbXMgfHwgIWRwdV9rbXMtPmh3X2ludHIgfHwg IWRwdV9rbXMtPmlycV9vYmouZW5hYmxlX2NvdW50cykgeworCQlEUFVfRVJST1IoImludmFsaWQg cGFyYW1zXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGlycV9pZHggPCAwIHx8 IGlycV9pZHggPj0gZHB1X2ttcy0+aHdfaW50ci0+aXJxX2lkeF90Ymxfc2l6ZSkgeworCQlEUFVf RVJST1IoImludmFsaWQgSVJRIGluZGV4OiBbJWRdXG4iLCBpcnFfaWR4KTsKKwkJcmV0dXJuIC1F SU5WQUw7CisJfQorCisJZW5hYmxlX2NvdW50ID0gYXRvbWljX3JlYWQoJmRwdV9rbXMtPmlycV9v YmouZW5hYmxlX2NvdW50c1tpcnFfaWR4XSk7CisJRFJNX0RFQlVHX0tNUygiaXJxX2lkeD0lZCBl bmFibGVfY291bnQ9JWRcbiIsIGlycV9pZHgsIGVuYWJsZV9jb3VudCk7CisJdHJhY2VfZHB1X2Nv cmVfaXJxX2Rpc2FibGVfaWR4KGlycV9pZHgsIGVuYWJsZV9jb3VudCk7CisKKwlpZiAoYXRvbWlj X2RlY19yZXR1cm4oJmRwdV9rbXMtPmlycV9vYmouZW5hYmxlX2NvdW50c1tpcnFfaWR4XSkgPT0g MCkgeworCQlyZXQgPSBkcHVfa21zLT5od19pbnRyLT5vcHMuZGlzYWJsZV9pcnEoCisJCQkJZHB1 X2ttcy0+aHdfaW50ciwKKwkJCQlpcnFfaWR4KTsKKwkJaWYgKHJldCkKKwkJCURQVV9FUlJPUigi RmFpbCB0byBkaXNhYmxlIElSUSBmb3IgaXJxX2lkeDolZFxuIiwKKwkJCQkJaXJxX2lkeCk7CisJ CURQVV9ERUJVRygiaXJxX2lkeD0lZCByZXQ9JWRcbiIsIGlycV9pZHgsIHJldCk7CisJfQorCisJ cmV0dXJuIHJldDsKK30KKworaW50IGRwdV9jb3JlX2lycV9kaXNhYmxlKHN0cnVjdCBkcHVfa21z ICpkcHVfa21zLCBpbnQgKmlycV9pZHhzLCB1MzIgaXJxX2NvdW50KQoreworCWludCBpLCByZXQg PSAwLCBjb3VudHM7CisKKwlpZiAoIWRwdV9rbXMgfHwgIWlycV9pZHhzIHx8ICFpcnFfY291bnQp IHsKKwkJRFBVX0VSUk9SKCJpbnZhbGlkIHBhcmFtc1xuIik7CisJCXJldHVybiAtRUlOVkFMOwor CX0KKworCWNvdW50cyA9IGF0b21pY19yZWFkKCZkcHVfa21zLT5pcnFfb2JqLmVuYWJsZV9jb3Vu dHNbaXJxX2lkeHNbMF1dKTsKKwlpZiAoY291bnRzID09IDIpCisJCURSTV9FUlJPUigiaXJxX2lk eD0lZCBlbmFibGVfY291bnQ9JWRcbiIsIGlycV9pZHhzWzBdLCBjb3VudHMpOworCisJZm9yIChp ID0gMDsgKGkgPCBpcnFfY291bnQpICYmICFyZXQ7IGkrKykKKwkJcmV0ID0gX2RwdV9jb3JlX2ly cV9kaXNhYmxlKGRwdV9rbXMsIGlycV9pZHhzW2ldKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8q KgorICogZHB1X2NvcmVfaXJxX2Rpc2FibGVfbm9sb2NrIC0gZGlzYWJsZSBjb3JlIGludGVycnVw dCBnaXZlbiBieSB0aGUgaW5kZXgKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdp dGhvdXQgbG9jaworICogQGRwdV9rbXM6CQlQb2ludGVyIHRvIGRwdSBrbXMgY29udGV4dAorICog QGlycV9pZHg6CQlpbnRlcnJ1cHQgaW5kZXgKKyAqLworaW50IGRwdV9jb3JlX2lycV9kaXNhYmxl X25vbG9jayhzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttcywgaW50IGlycV9pZHgpCit7CisJaW50IHJl dCA9IDAsIGVuYWJsZV9jb3VudDsKKworCWlmICghZHB1X2ttcyB8fCAhZHB1X2ttcy0+aHdfaW50 ciB8fCAhZHB1X2ttcy0+aXJxX29iai5lbmFibGVfY291bnRzKSB7CisJCURQVV9FUlJPUigiaW52 YWxpZCBwYXJhbXNcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoaXJxX2lkeCA8 IDAgfHwgaXJxX2lkeCA+PSBkcHVfa21zLT5od19pbnRyLT5pcnFfaWR4X3RibF9zaXplKSB7CisJ CURQVV9FUlJPUigiaW52YWxpZCBJUlEgaW5kZXg6IFslZF1cbiIsIGlycV9pZHgpOworCQlyZXR1 cm4gLUVJTlZBTDsKKwl9CisKKwllbmFibGVfY291bnQgPSBhdG9taWNfcmVhZCgmZHB1X2ttcy0+ aXJxX29iai5lbmFibGVfY291bnRzW2lycV9pZHhdKTsKKwlEUk1fREVCVUdfS01TKCJpcnFfaWR4 PSVkIGVuYWJsZV9jb3VudD0lZFxuIiwgaXJxX2lkeCwgZW5hYmxlX2NvdW50KTsKKwl0cmFjZV9k cHVfY29yZV9pcnFfZGlzYWJsZV9ub2xvY2soaXJxX2lkeCwgZW5hYmxlX2NvdW50KTsKKworCWlm IChhdG9taWNfZGVjX3JldHVybigmZHB1X2ttcy0+aXJxX29iai5lbmFibGVfY291bnRzW2lycV9p ZHhdKSA9PSAwKSB7CisJCXJldCA9IGRwdV9rbXMtPmh3X2ludHItPm9wcy5kaXNhYmxlX2lycV9u b2xvY2soCisJCQkJZHB1X2ttcy0+aHdfaW50ciwKKwkJCQlpcnFfaWR4KTsKKwkJaWYgKHJldCkK KwkJCURQVV9FUlJPUigiRmFpbCB0byBkaXNhYmxlIElSUSBmb3IgaXJxX2lkeDolZFxuIiwKKwkJ CQkJaXJxX2lkeCk7CisJCURQVV9ERUJVRygiaXJxX2lkeD0lZCByZXQ9JWRcbiIsIGlycV9pZHgs IHJldCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKwordTMyIGRwdV9jb3JlX2lycV9yZWFkX25v bG9jayhzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttcywgaW50IGlycV9pZHgsIGJvb2wgY2xlYXIpCit7 CisJaWYgKCFkcHVfa21zIHx8ICFkcHVfa21zLT5od19pbnRyIHx8CisJCQkhZHB1X2ttcy0+aHdf aW50ci0+b3BzLmdldF9pbnRlcnJ1cHRfc3RhdHVzKQorCQlyZXR1cm4gMDsKKworCWlmIChpcnFf aWR4IDwgMCkgeworCQlEUFVfRVJST1IoIlslcFNdIGludmFsaWQgaXJxX2lkeD0lZFxuIiwKKwkJ CQlfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCksIGlycV9pZHgpOworCQlyZXR1cm4gMDsKKwl9 CisKKwlyZXR1cm4gZHB1X2ttcy0+aHdfaW50ci0+b3BzLmdldF9pbnRyX3N0YXR1c19ub2xvY2so ZHB1X2ttcy0+aHdfaW50ciwKKwkJCWlycV9pZHgsIGNsZWFyKTsKK30KKwordTMyIGRwdV9jb3Jl X2lycV9yZWFkKHN0cnVjdCBkcHVfa21zICpkcHVfa21zLCBpbnQgaXJxX2lkeCwgYm9vbCBjbGVh cikKK3sKKwlpZiAoIWRwdV9rbXMgfHwgIWRwdV9rbXMtPmh3X2ludHIgfHwKKwkJCSFkcHVfa21z LT5od19pbnRyLT5vcHMuZ2V0X2ludGVycnVwdF9zdGF0dXMpCisJCXJldHVybiAwOworCisJaWYg KGlycV9pZHggPCAwKSB7CisJCURQVV9FUlJPUigiWyVwU10gaW52YWxpZCBpcnFfaWR4PSVkXG4i LAorCQkJCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSwgaXJxX2lkeCk7CisJCXJldHVybiAw OworCX0KKworCXJldHVybiBkcHVfa21zLT5od19pbnRyLT5vcHMuZ2V0X2ludGVycnVwdF9zdGF0 dXMoZHB1X2ttcy0+aHdfaW50ciwKKwkJCWlycV9pZHgsIGNsZWFyKTsKK30KKworaW50IGRwdV9j b3JlX2lycV9yZWdpc3Rlcl9jYWxsYmFjayhzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttcywgaW50IGly cV9pZHgsCisJCXN0cnVjdCBkcHVfaXJxX2NhbGxiYWNrICpyZWdpc3Rlcl9pcnFfY2IpCit7CisJ dW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisKKwlpZiAoIWRwdV9rbXMgfHwgIWRwdV9rbXMtPmly cV9vYmouaXJxX2NiX3RibCkgeworCQlEUFVfRVJST1IoImludmFsaWQgcGFyYW1zXG4iKTsKKwkJ cmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFyZWdpc3Rlcl9pcnFfY2IgfHwgIXJlZ2lzdGVy X2lycV9jYi0+ZnVuYykgeworCQlEUFVfRVJST1IoImludmFsaWQgaXJxX2NiOiVkIGZ1bmM6JWRc biIsCisJCQkJcmVnaXN0ZXJfaXJxX2NiICE9IE5VTEwsCisJCQkJcmVnaXN0ZXJfaXJxX2NiID8K KwkJCQkJcmVnaXN0ZXJfaXJxX2NiLT5mdW5jICE9IE5VTEwgOiAtMSk7CisJCXJldHVybiAtRUlO VkFMOworCX0KKworCWlmIChpcnFfaWR4IDwgMCB8fCBpcnFfaWR4ID49IGRwdV9rbXMtPmh3X2lu dHItPmlycV9pZHhfdGJsX3NpemUpIHsKKwkJRFBVX0VSUk9SKCJpbnZhbGlkIElSUSBpbmRleDog WyVkXVxuIiwgaXJxX2lkeCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCURQVV9ERUJVRygi WyVwU10gaXJxX2lkeD0lZFxuIiwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApLCBpcnFfaWR4 KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkcHVfa21zLT5pcnFfb2JqLmNiX2xvY2ssIGlycV9m bGFncyk7CisJdHJhY2VfZHB1X2NvcmVfaXJxX3JlZ2lzdGVyX2NhbGxiYWNrKGlycV9pZHgsIHJl Z2lzdGVyX2lycV9jYik7CisJbGlzdF9kZWxfaW5pdCgmcmVnaXN0ZXJfaXJxX2NiLT5saXN0KTsK KwlsaXN0X2FkZF90YWlsKCZyZWdpc3Rlcl9pcnFfY2ItPmxpc3QsCisJCQkmZHB1X2ttcy0+aXJx X29iai5pcnFfY2JfdGJsW2lycV9pZHhdKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcHVf a21zLT5pcnFfb2JqLmNiX2xvY2ssIGlycV9mbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworaW50 IGRwdV9jb3JlX2lycV91bnJlZ2lzdGVyX2NhbGxiYWNrKHN0cnVjdCBkcHVfa21zICpkcHVfa21z LCBpbnQgaXJxX2lkeCwKKwkJc3RydWN0IGRwdV9pcnFfY2FsbGJhY2sgKnJlZ2lzdGVyX2lycV9j YikKK3sKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKworCWlmICghZHB1X2ttcyB8fCAhZHB1 X2ttcy0+aXJxX29iai5pcnFfY2JfdGJsKSB7CisJCURQVV9FUlJPUigiaW52YWxpZCBwYXJhbXNc biIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIXJlZ2lzdGVyX2lycV9jYiB8fCAh cmVnaXN0ZXJfaXJxX2NiLT5mdW5jKSB7CisJCURQVV9FUlJPUigiaW52YWxpZCBpcnFfY2I6JWQg ZnVuYzolZFxuIiwKKwkJCQlyZWdpc3Rlcl9pcnFfY2IgIT0gTlVMTCwKKwkJCQlyZWdpc3Rlcl9p cnFfY2IgPworCQkJCQlyZWdpc3Rlcl9pcnFfY2ItPmZ1bmMgIT0gTlVMTCA6IC0xKTsKKwkJcmV0 dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGlycV9pZHggPCAwIHx8IGlycV9pZHggPj0gZHB1X2tt cy0+aHdfaW50ci0+aXJxX2lkeF90Ymxfc2l6ZSkgeworCQlEUFVfRVJST1IoImludmFsaWQgSVJR IGluZGV4OiBbJWRdXG4iLCBpcnFfaWR4KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJRFBV X0RFQlVHKCJbJXBTXSBpcnFfaWR4PSVkXG4iLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCks IGlycV9pZHgpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRwdV9rbXMtPmlycV9vYmouY2JfbG9j aywgaXJxX2ZsYWdzKTsKKwl0cmFjZV9kcHVfY29yZV9pcnFfdW5yZWdpc3Rlcl9jYWxsYmFjayhp cnFfaWR4LCByZWdpc3Rlcl9pcnFfY2IpOworCWxpc3RfZGVsX2luaXQoJnJlZ2lzdGVyX2lycV9j Yi0+bGlzdCk7CisJLyogZW1wdHkgY2FsbGJhY2sgbGlzdCBidXQgaW50ZXJydXB0IGlzIHN0aWxs IGVuYWJsZWQgKi8KKwlpZiAobGlzdF9lbXB0eSgmZHB1X2ttcy0+aXJxX29iai5pcnFfY2JfdGJs W2lycV9pZHhdKSAmJgorCQkJYXRvbWljX3JlYWQoJmRwdV9rbXMtPmlycV9vYmouZW5hYmxlX2Nv dW50c1tpcnFfaWR4XSkpCisJCURQVV9FUlJPUigiaXJxX2lkeD0lZCBlbmFibGVkIHdpdGggbm8g Y2FsbGJhY2tcbiIsIGlycV9pZHgpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRwdV9rbXMt PmlycV9vYmouY2JfbG9jaywgaXJxX2ZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMg dm9pZCBkcHVfY2xlYXJfYWxsX2lycXMoc3RydWN0IGRwdV9rbXMgKmRwdV9rbXMpCit7CisJaWYg KCFkcHVfa21zIHx8ICFkcHVfa21zLT5od19pbnRyIHx8CisJCQkhZHB1X2ttcy0+aHdfaW50ci0+ b3BzLmNsZWFyX2FsbF9pcnFzKQorCQlyZXR1cm47CisKKwlkcHVfa21zLT5od19pbnRyLT5vcHMu Y2xlYXJfYWxsX2lycXMoZHB1X2ttcy0+aHdfaW50cik7Cit9CisKK3N0YXRpYyB2b2lkIGRwdV9k aXNhYmxlX2FsbF9pcnFzKHN0cnVjdCBkcHVfa21zICpkcHVfa21zKQoreworCWlmICghZHB1X2tt cyB8fCAhZHB1X2ttcy0+aHdfaW50ciB8fAorCQkJIWRwdV9rbXMtPmh3X2ludHItPm9wcy5kaXNh YmxlX2FsbF9pcnFzKQorCQlyZXR1cm47CisKKwlkcHVfa21zLT5od19pbnRyLT5vcHMuZGlzYWJs ZV9hbGxfaXJxcyhkcHVfa21zLT5od19pbnRyKTsKK30KKworI2lmZGVmIENPTkZJR19ERUJVR19G UworI2RlZmluZSBERUZJTkVfRFBVX0RFQlVHRlNfU0VRX0ZPUFMoX19wcmVmaXgpCQkJCVwKK3N0 YXRpYyBpbnQgX19wcmVmaXggIyMgX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZp bGUgKmZpbGUpCVwKK3sJCQkJCQkJCQlcCisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIF9fcHJl Zml4ICMjIF9zaG93LCBpbm9kZS0+aV9wcml2YXRlKTsJXAorfQkJCQkJCQkJCVwKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIF9fcHJlZml4ICMjIF9mb3BzID0gewkJXAorCS5v d25lciA9IFRISVNfTU9EVUxFLAkJCQkJCVwKKwkub3BlbiA9IF9fcHJlZml4ICMjIF9vcGVuLAkJ CQkJXAorCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCQkJCQlcCisJLnJlYWQgPSBzZXFfcmVh ZCwJCQkJCQlcCisJLmxsc2VlayA9IHNlcV9sc2VlaywJCQkJCQlcCit9CisKK3N0YXRpYyBpbnQg ZHB1X2RlYnVnZnNfY29yZV9pcnFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCit7 CisJc3RydWN0IGRwdV9pcnEgKmlycV9vYmogPSBzLT5wcml2YXRlOworCXN0cnVjdCBkcHVfaXJx X2NhbGxiYWNrICpjYjsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKwlpbnQgaSwgaXJxX2Nv dW50LCBlbmFibGVfY291bnQsIGNiX2NvdW50OworCisJaWYgKCFpcnFfb2JqIHx8ICFpcnFfb2Jq LT5lbmFibGVfY291bnRzIHx8ICFpcnFfb2JqLT5pcnFfY2JfdGJsKSB7CisJCURQVV9FUlJPUigi aW52YWxpZCBwYXJhbWV0ZXJzXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJZm9yIChpID0gMDsg aSA8IGlycV9vYmotPnRvdGFsX2lycXM7IGkrKykgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaXJx X29iai0+Y2JfbG9jaywgaXJxX2ZsYWdzKTsKKwkJY2JfY291bnQgPSAwOworCQlpcnFfY291bnQg PSBhdG9taWNfcmVhZCgmaXJxX29iai0+aXJxX2NvdW50c1tpXSk7CisJCWVuYWJsZV9jb3VudCA9 IGF0b21pY19yZWFkKCZpcnFfb2JqLT5lbmFibGVfY291bnRzW2ldKTsKKwkJbGlzdF9mb3JfZWFj aF9lbnRyeShjYiwgJmlycV9vYmotPmlycV9jYl90YmxbaV0sIGxpc3QpCisJCQljYl9jb3VudCsr OworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfb2JqLT5jYl9sb2NrLCBpcnFfZmxhZ3Mp OworCisJCWlmIChpcnFfY291bnQgfHwgZW5hYmxlX2NvdW50IHx8IGNiX2NvdW50KQorCQkJc2Vx X3ByaW50ZihzLCAiaWR4OiVkIGlycTolZCBlbmFibGU6JWQgY2I6JWRcbiIsCisJCQkJCWksIGly cV9jb3VudCwgZW5hYmxlX2NvdW50LCBjYl9jb3VudCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisK K0RFRklORV9EUFVfREVCVUdGU19TRVFfRk9QUyhkcHVfZGVidWdmc19jb3JlX2lycSk7CisKK2lu dCBkcHVfZGVidWdmc19jb3JlX2lycV9pbml0KHN0cnVjdCBkcHVfa21zICpkcHVfa21zLAorCQlz dHJ1Y3QgZGVudHJ5ICpwYXJlbnQpCit7CisJZHB1X2ttcy0+aXJxX29iai5kZWJ1Z2ZzX2ZpbGUg PSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJjb3JlX2lycSIsIDA2MDAsCisJCQlwYXJlbnQsICZkcHVf a21zLT5pcnFfb2JqLAorCQkJJmRwdV9kZWJ1Z2ZzX2NvcmVfaXJxX2ZvcHMpOworCisJcmV0dXJu IDA7Cit9CisKK3ZvaWQgZHB1X2RlYnVnZnNfY29yZV9pcnFfZGVzdHJveShzdHJ1Y3QgZHB1X2tt cyAqZHB1X2ttcykKK3sKKwlkZWJ1Z2ZzX3JlbW92ZShkcHVfa21zLT5pcnFfb2JqLmRlYnVnZnNf ZmlsZSk7CisJZHB1X2ttcy0+aXJxX29iai5kZWJ1Z2ZzX2ZpbGUgPSBOVUxMOworfQorCisjZWxz ZQoraW50IGRwdV9kZWJ1Z2ZzX2NvcmVfaXJxX2luaXQoc3RydWN0IGRwdV9rbXMgKmRwdV9rbXMs CisJCXN0cnVjdCBkZW50cnkgKnBhcmVudCkKK3sKKwlyZXR1cm4gMDsKK30KKwordm9pZCBkcHVf ZGVidWdmc19jb3JlX2lycV9kZXN0cm95KHN0cnVjdCBkcHVfa21zICpkcHVfa21zKQoreworfQor I2VuZGlmCisKK3ZvaWQgZHB1X2NvcmVfaXJxX3ByZWluc3RhbGwoc3RydWN0IGRwdV9rbXMgKmRw dV9rbXMpCit7CisJc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdjsKKwlpbnQgaTsKKworCWlm ICghZHB1X2ttcykgeworCQlEUFVfRVJST1IoImludmFsaWQgZHB1X2ttc1xuIik7CisJCXJldHVy bjsKKwl9IGVsc2UgaWYgKCFkcHVfa21zLT5kZXYpIHsKKwkJRFBVX0VSUk9SKCJpbnZhbGlkIGRy bSBkZXZpY2VcbiIpOworCQlyZXR1cm47CisJfSBlbHNlIGlmICghZHB1X2ttcy0+ZGV2LT5kZXZf cHJpdmF0ZSkgeworCQlEUFVfRVJST1IoImludmFsaWQgZGV2aWNlIHByaXZhdGVcbiIpOworCQly ZXR1cm47CisJfQorCXByaXYgPSBkcHVfa21zLT5kZXYtPmRldl9wcml2YXRlOworCisJcG1fcnVu dGltZV9nZXRfc3luYygmZHB1X2ttcy0+cGRldi0+ZGV2KTsKKwlkcHVfY2xlYXJfYWxsX2lycXMo ZHB1X2ttcyk7CisJZHB1X2Rpc2FibGVfYWxsX2lycXMoZHB1X2ttcyk7CisJcG1fcnVudGltZV9w dXRfc3luYygmZHB1X2ttcy0+cGRldi0+ZGV2KTsKKworCXNwaW5fbG9ja19pbml0KCZkcHVfa21z LT5pcnFfb2JqLmNiX2xvY2spOworCisJLyogQ3JlYXRlIGlycSBjYWxsYmFja3MgZm9yIGFsbCBw b3NzaWJsZSBpcnFfaWR4ICovCisJZHB1X2ttcy0+aXJxX29iai50b3RhbF9pcnFzID0gZHB1X2tt cy0+aHdfaW50ci0+aXJxX2lkeF90Ymxfc2l6ZTsKKwlkcHVfa21zLT5pcnFfb2JqLmlycV9jYl90 YmwgPSBrY2FsbG9jKGRwdV9rbXMtPmlycV9vYmoudG90YWxfaXJxcywKKwkJCXNpemVvZihzdHJ1 Y3QgbGlzdF9oZWFkKSwgR0ZQX0tFUk5FTCk7CisJZHB1X2ttcy0+aXJxX29iai5lbmFibGVfY291 bnRzID0ga2NhbGxvYyhkcHVfa21zLT5pcnFfb2JqLnRvdGFsX2lycXMsCisJCQlzaXplb2YoYXRv bWljX3QpLCBHRlBfS0VSTkVMKTsKKwlkcHVfa21zLT5pcnFfb2JqLmlycV9jb3VudHMgPSBrY2Fs bG9jKGRwdV9rbXMtPmlycV9vYmoudG90YWxfaXJxcywKKwkJCXNpemVvZihhdG9taWNfdCksIEdG UF9LRVJORUwpOworCWZvciAoaSA9IDA7IGkgPCBkcHVfa21zLT5pcnFfb2JqLnRvdGFsX2lycXM7 IGkrKykgeworCQlJTklUX0xJU1RfSEVBRCgmZHB1X2ttcy0+aXJxX29iai5pcnFfY2JfdGJsW2ld KTsKKwkJYXRvbWljX3NldCgmZHB1X2ttcy0+aXJxX29iai5lbmFibGVfY291bnRzW2ldLCAwKTsK KwkJYXRvbWljX3NldCgmZHB1X2ttcy0+aXJxX29iai5pcnFfY291bnRzW2ldLCAwKTsKKwl9Cit9 CisKK2ludCBkcHVfY29yZV9pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRwdV9rbXMgKmRwdV9rbXMp Cit7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZHB1X2NvcmVfaXJxX3VuaW5zdGFsbChzdHJ1Y3Qg ZHB1X2ttcyAqZHB1X2ttcykKK3sKKwlzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpwcml2OworCWlu dCBpOworCisJaWYgKCFkcHVfa21zKSB7CisJCURQVV9FUlJPUigiaW52YWxpZCBkcHVfa21zXG4i KTsKKwkJcmV0dXJuOworCX0gZWxzZSBpZiAoIWRwdV9rbXMtPmRldikgeworCQlEUFVfRVJST1Io ImludmFsaWQgZHJtIGRldmljZVxuIik7CisJCXJldHVybjsKKwl9IGVsc2UgaWYgKCFkcHVfa21z LT5kZXYtPmRldl9wcml2YXRlKSB7CisJCURQVV9FUlJPUigiaW52YWxpZCBkZXZpY2UgcHJpdmF0 ZVxuIik7CisJCXJldHVybjsKKwl9CisJcHJpdiA9IGRwdV9rbXMtPmRldi0+ZGV2X3ByaXZhdGU7 CisKKwlwbV9ydW50aW1lX2dldF9zeW5jKCZkcHVfa21zLT5wZGV2LT5kZXYpOworCWZvciAoaSA9 IDA7IGkgPCBkcHVfa21zLT5pcnFfb2JqLnRvdGFsX2lycXM7IGkrKykKKwkJaWYgKGF0b21pY19y ZWFkKCZkcHVfa21zLT5pcnFfb2JqLmVuYWJsZV9jb3VudHNbaV0pIHx8CisJCQkJIWxpc3RfZW1w dHkoJmRwdV9rbXMtPmlycV9vYmouaXJxX2NiX3RibFtpXSkpCisJCQlEUFVfRVJST1IoImlycV9p ZHg9JWQgc3RpbGwgZW5hYmxlZC9yZWdpc3RlcmVkXG4iLCBpKTsKKworCWRwdV9jbGVhcl9hbGxf aXJxcyhkcHVfa21zKTsKKwlkcHVfZGlzYWJsZV9hbGxfaXJxcyhkcHVfa21zKTsKKwlwbV9ydW50 aW1lX3B1dF9zeW5jKCZkcHVfa21zLT5wZGV2LT5kZXYpOworCisJa2ZyZWUoZHB1X2ttcy0+aXJx X29iai5pcnFfY2JfdGJsKTsKKwlrZnJlZShkcHVfa21zLT5pcnFfb2JqLmVuYWJsZV9jb3VudHMp OworCWtmcmVlKGRwdV9rbXMtPmlycV9vYmouaXJxX2NvdW50cyk7CisJZHB1X2ttcy0+aXJxX29i ai5pcnFfY2JfdGJsID0gTlVMTDsKKwlkcHVfa21zLT5pcnFfb2JqLmVuYWJsZV9jb3VudHMgPSBO VUxMOworCWRwdV9rbXMtPmlycV9vYmouaXJxX2NvdW50cyA9IE5VTEw7CisJZHB1X2ttcy0+aXJx X29iai50b3RhbF9pcnFzID0gMDsKK30KKworaXJxcmV0dXJuX3QgZHB1X2NvcmVfaXJxKHN0cnVj dCBkcHVfa21zICpkcHVfa21zKQoreworCS8qCisJICogUmVhZCBpbnRlcnJ1cHQgc3RhdHVzIGZy b20gYWxsIHNvdXJjZXMuIEludGVycnVwdCBzdGF0dXMgYXJlCisJICogc3RvcmVkIHdpdGhpbiBo d19pbnRyLgorCSAqIEZ1bmN0aW9uIHdpbGwgYWxzbyBjbGVhciB0aGUgaW50ZXJydXB0IHN0YXR1 cyBhZnRlciByZWFkaW5nLgorCSAqIEluZGl2aWR1YWwgaW50ZXJydXB0IHN0YXR1cyBiaXQgd2ls bCBvbmx5IGdldCBzdG9yZWQgaWYgaXQKKwkgKiBpcyBlbmFibGVkLgorCSAqLworCWRwdV9rbXMt Pmh3X2ludHItPm9wcy5nZXRfaW50ZXJydXB0X3N0YXR1c2VzKGRwdV9rbXMtPmh3X2ludHIpOwor CisJLyoKKwkgKiBEaXNwYXRjaCB0byBIVyBkcml2ZXIgdG8gaGFuZGxlIGludGVycnVwdCBsb29r dXAgdGhhdCBpcyBiZWluZworCSAqIGZpcmVkLiBXaGVuIG1hdGNoaW5nIGludGVycnVwdCBpcyBs b2NhdGVkLCBIVyBkcml2ZXIgd2lsbCBjYWxsIHRvCisJICogZHB1X2NvcmVfaXJxX2NhbGxiYWNr X2hhbmRsZXIgd2l0aCB0aGUgaXJxX2lkeCBmcm9tIHRoZSBsb29rdXAgdGFibGUuCisJICogZHB1 X2NvcmVfaXJxX2NhbGxiYWNrX2hhbmRsZXIgd2lsbCBwZXJmb3JtIHRoZSByZWdpc3RlcmVkIGZ1 bmN0aW9uCisJICogY2FsbGJhY2ssIGFuZCBkbyB0aGUgaW50ZXJydXB0IHN0YXR1cyBjbGVhcmlu ZyBvbmNlIHRoZSByZWdpc3RlcmVkCisJICogY2FsbGJhY2sgaXMgZmluaXNoZWQuCisJICovCisJ ZHB1X2ttcy0+aHdfaW50ci0+b3BzLmRpc3BhdGNoX2lycXMoCisJCQlkcHVfa21zLT5od19pbnRy LAorCQkJZHB1X2NvcmVfaXJxX2NhbGxiYWNrX2hhbmRsZXIsCisJCQlkcHVfa21zKTsKKworCXJl dHVybiBJUlFfSEFORExFRDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9jb3JlX2lycS5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X2NvcmVfaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi44ZmE1 OWRiNGNiZDUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfY29yZV9pcnEuaApAQCAtMCwwICsxLDE3OCBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE1 LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCisgKi8KKworI2lmbmRlZiBfX0RQVV9DT1JFX0lSUV9IX18KKyNkZWZpbmUgX19EUFVfQ09S RV9JUlFfSF9fCisKKyNpbmNsdWRlICJkcHVfa21zLmgiCisjaW5jbHVkZSAiZHB1X2h3X2ludGVy cnVwdHMuaCIKKworLyoqCisgKiBkcHVfY29yZV9pcnFfcHJlaW5zdGFsbCAtIHBlcmZvcm0gcHJl LWluc3RhbGxhdGlvbiBvZiBjb3JlIElSUSBoYW5kbGVyCisgKiBAZHB1X2ttczoJCURQVSBoYW5k bGUKKyAqIEByZXR1cm46CQlub25lCisgKi8KK3ZvaWQgZHB1X2NvcmVfaXJxX3ByZWluc3RhbGwo c3RydWN0IGRwdV9rbXMgKmRwdV9rbXMpOworCisvKioKKyAqIGRwdV9jb3JlX2lycV9wb3N0aW5z dGFsbCAtIHBlcmZvcm0gcG9zdC1pbnN0YWxsYXRpb24gb2YgY29yZSBJUlEgaGFuZGxlcgorICog QGRwdV9rbXM6CQlEUFUgaGFuZGxlCisgKiBAcmV0dXJuOgkJMCBpZiBzdWNjZXNzOyBlcnJvciBj b2RlIG90aGVyd2lzZQorICovCitpbnQgZHB1X2NvcmVfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBk cHVfa21zICpkcHVfa21zKTsKKworLyoqCisgKiBkcHVfY29yZV9pcnFfdW5pbnN0YWxsIC0gdW5p bnN0YWxsIGNvcmUgSVJRIGhhbmRsZXIKKyAqIEBkcHVfa21zOgkJRFBVIGhhbmRsZQorICogQHJl dHVybjoJCW5vbmUKKyAqLwordm9pZCBkcHVfY29yZV9pcnFfdW5pbnN0YWxsKHN0cnVjdCBkcHVf a21zICpkcHVfa21zKTsKKworLyoqCisgKiBkcHVfY29yZV9pcnEgLSBjb3JlIElSUSBoYW5kbGVy CisgKiBAZHB1X2ttczoJCURQVSBoYW5kbGUKKyAqIEByZXR1cm46CQlpbnRlcnJ1cHQgaGFuZGxp bmcgc3RhdHVzCisgKi8KK2lycXJldHVybl90IGRwdV9jb3JlX2lycShzdHJ1Y3QgZHB1X2ttcyAq ZHB1X2ttcyk7CisKKy8qKgorICogZHB1X2NvcmVfaXJxX2lkeF9sb29rdXAgLSBJUlEgaGVscGVy IGZ1bmN0aW9uIGZvciBsb29rdXAgaXJxX2lkeCBmcm9tIEhXCisgKiAgICAgICAgICAgICAgICAg ICAgICBpbnRlcnJ1cHQgbWFwcGluZyB0YWJsZS4KKyAqIEBkcHVfa21zOgkJRFBVIGhhbmRsZQor ICogQGludHJfdHlwZToJCURQVSBIVyBpbnRlcnJ1cHQgdHlwZSBmb3IgbG9va3VwCisgKiBAaW5z dGFuY2VfaWR4OglEUFUgSFcgYmxvY2sgaW5zdGFuY2UgZGVmaW5lZCBpbiBkcHVfaHdfbWRzcy5o CisgKiBAcmV0dXJuOgkJaXJxX2lkeCBvciAtRUlOVkFMIHdoZW4gZmFpbCB0byBsb29rdXAKKyAq LworaW50IGRwdV9jb3JlX2lycV9pZHhfbG9va3VwKAorCQlzdHJ1Y3QgZHB1X2ttcyAqZHB1X2tt cywKKwkJZW51bSBkcHVfaW50cl90eXBlIGludHJfdHlwZSwKKwkJdWludDMyX3QgaW5zdGFuY2Vf aWR4KTsKKworLyoqCisgKiBkcHVfY29yZV9pcnFfZW5hYmxlIC0gSVJRIGhlbHBlciBmdW5jdGlv biBmb3IgZW5hYmxpbmcgb25lIG9yIG1vcmUgSVJRcworICogQGRwdV9rbXM6CQlEUFUgaGFuZGxl CisgKiBAaXJxX2lkeHM6CQlBcnJheSBvZiBpcnEgaW5kZXgKKyAqIEBpcnFfY291bnQ6CQlOdW1i ZXIgb2YgaXJxX2lkeCBwcm92aWRlZCBpbiB0aGUgYXJyYXkKKyAqIEByZXR1cm46CQkwIGZvciBz dWNjZXNzIGVuYWJsaW5nIElSUSwgb3RoZXJ3aXNlIGZhaWx1cmUKKyAqCisgKiBUaGlzIGZ1bmN0 aW9uIGluY3JlbWVudHMgY291bnQgb24gZWFjaCBlbmFibGUgYW5kIGRlY3JlbWVudHMgb24gZWFj aAorICogZGlzYWJsZS4gIEludGVycnVwdHMgaXMgZW5hYmxlZCBpZiBjb3VudCBpcyAwIGJlZm9y ZSBpbmNyZW1lbnQuCisgKi8KK2ludCBkcHVfY29yZV9pcnFfZW5hYmxlKAorCQlzdHJ1Y3QgZHB1 X2ttcyAqZHB1X2ttcywKKwkJaW50ICppcnFfaWR4cywKKwkJdWludDMyX3QgaXJxX2NvdW50KTsK KworLyoqCisgKiBkcHVfY29yZV9pcnFfZGlzYWJsZSAtIElSUSBoZWxwZXIgZnVuY3Rpb24gZm9y IGRpc2FibGluZyBvbmUgb2YgbW9yZSBJUlFzCisgKiBAZHB1X2ttczoJCURQVSBoYW5kbGUKKyAq IEBpcnFfaWR4czoJCUFycmF5IG9mIGlycSBpbmRleAorICogQGlycV9jb3VudDoJCU51bWJlciBv ZiBpcnFfaWR4IHByb3ZpZGVkIGluIHRoZSBhcnJheQorICogQHJldHVybjoJCTAgZm9yIHN1Y2Nl c3MgZGlzYWJsaW5nIElSUSwgb3RoZXJ3aXNlIGZhaWx1cmUKKyAqCisgKiBUaGlzIGZ1bmN0aW9u IGluY3JlbWVudHMgY291bnQgb24gZWFjaCBlbmFibGUgYW5kIGRlY3JlbWVudHMgb24gZWFjaAor ICogZGlzYWJsZS4gIEludGVycnVwdHMgaXMgZGlzYWJsZWQgaWYgY291bnQgaXMgMCBhZnRlciBk ZWNyZW1lbnQuCisgKi8KK2ludCBkcHVfY29yZV9pcnFfZGlzYWJsZSgKKwkJc3RydWN0IGRwdV9r bXMgKmRwdV9rbXMsCisJCWludCAqaXJxX2lkeHMsCisJCXVpbnQzMl90IGlycV9jb3VudCk7CisK Ky8qKgorICogZHB1X2NvcmVfaXJxX2Rpc2FibGVfbm9sb2NrIC0gbm8gbG9jayB2ZXJzaW9uIG9m IGRwdV9jb3JlX2lycV9kaXNhYmxlCisgKiBAZHB1X2ttczoJCURQVSBoYW5kbGUKKyAqIEBpcnFf aWR4OgkJSXJxIGluZGV4CisgKiBAcmV0dXJuOgkJMCBmb3Igc3VjY2VzcyBkaXNhYmxpbmcgSVJR LCBvdGhlcndpc2UgZmFpbHVyZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gaW5jcmVtZW50cyBjb3Vu dCBvbiBlYWNoIGVuYWJsZSBhbmQgZGVjcmVtZW50cyBvbiBlYWNoCisgKiBkaXNhYmxlLiAgSW50 ZXJydXB0cyBpcyBkaXNhYmxlZCBpZiBjb3VudCBpcyAwIGFmdGVyIGRlY3JlbWVudC4KKyAqLwor aW50IGRwdV9jb3JlX2lycV9kaXNhYmxlX25vbG9jaygKKwkJc3RydWN0IGRwdV9rbXMgKmRwdV9r bXMsCisJCWludCBpcnFfaWR4KTsKKworLyoqCisgKiBkcHVfY29yZV9pcnFfcmVhZCAtIElSUSBo ZWxwZXIgZnVuY3Rpb24gZm9yIHJlYWRpbmcgSVJRIHN0YXR1cworICogQGRwdV9rbXM6CQlEUFUg aGFuZGxlCisgKiBAaXJxX2lkeDoJCWlycSBpbmRleAorICogQGNsZWFyOgkJVHJ1ZSB0byBjbGVh ciB0aGUgaXJxIGFmdGVyIHJlYWQKKyAqIEByZXR1cm46CQlub24temVybyBpZiBpcnEgZGV0ZWN0 ZWQ7IG90aGVyd2lzZSBubyBpcnEgZGV0ZWN0ZWQKKyAqLwordTMyIGRwdV9jb3JlX2lycV9yZWFk KAorCQlzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttcywKKwkJaW50IGlycV9pZHgsCisJCWJvb2wgY2xl YXIpOworCisvKioKKyAqIGRwdV9jb3JlX2lycV9yZWFkIC0gbm8gbG9jayB2ZXJzaW9uIG9mIGRw dV9jb3JlX2lycV9yZWFkCisgKiBAZHB1X2ttczoJCURQVSBoYW5kbGUKKyAqIEBpcnFfaWR4OgkJ aXJxIGluZGV4CisgKiBAY2xlYXI6CQlUcnVlIHRvIGNsZWFyIHRoZSBpcnEgYWZ0ZXIgcmVhZAor ICogQHJldHVybjoJCW5vbi16ZXJvIGlmIGlycSBkZXRlY3RlZDsgb3RoZXJ3aXNlIG5vIGlycSBk ZXRlY3RlZAorICovCit1MzIgZHB1X2NvcmVfaXJxX3JlYWRfbm9sb2NrKAorCQlzdHJ1Y3QgZHB1 X2ttcyAqZHB1X2ttcywKKwkJaW50IGlycV9pZHgsCisJCWJvb2wgY2xlYXIpOworCisvKioKKyAq IGRwdV9jb3JlX2lycV9yZWdpc3Rlcl9jYWxsYmFjayAtIEZvciByZWdpc3RlcmluZyBjYWxsYmFj ayBmdW5jdGlvbiBvbiBJUlEKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1 cHQKKyAqIEBkcHVfa21zOgkJRFBVIGhhbmRsZQorICogQGlycV9pZHg6CQlpcnEgaW5kZXgKKyAq IEBpcnFfY2I6CQlJUlEgY2FsbGJhY2sgc3RydWN0dXJlLCBjb250YWluaW5nIGNhbGxiYWNrIGZ1 bmN0aW9uCisgKgkJCWFuZCBhcmd1bWVudC4gUGFzc2luZyBOVUxMIGZvciBpcnFfY2Igd2lsbCB1 bnJlZ2lzdGVyCisgKgkJCXRoZSBjYWxsYmFjayBmb3IgdGhlIGdpdmVuIGlycV9pZHgKKyAqCQkJ VGhpcyBtdXN0IGV4aXN0IHVudGlsIHVuLXJlZ2lzdHJhdGlvbi4KKyAqIEByZXR1cm46CQkwIGZv ciBzdWNjZXNzIHJlZ2lzdGVyaW5nIGNhbGxiYWNrLCBvdGhlcndpc2UgZmFpbHVyZQorICoKKyAq IFRoaXMgZnVuY3Rpb24gc3VwcG9ydHMgcmVnaXN0cmF0aW9uIG9mIG11bHRpcGxlIGNhbGxiYWNr cyBmb3IgZWFjaCBpbnRlcnJ1cHQuCisgKi8KK2ludCBkcHVfY29yZV9pcnFfcmVnaXN0ZXJfY2Fs bGJhY2soCisJCXN0cnVjdCBkcHVfa21zICpkcHVfa21zLAorCQlpbnQgaXJxX2lkeCwKKwkJc3Ry dWN0IGRwdV9pcnFfY2FsbGJhY2sgKmlycV9jYik7CisKKy8qKgorICogZHB1X2NvcmVfaXJxX3Vu cmVnaXN0ZXJfY2FsbGJhY2sgLSBGb3IgdW5yZWdpc3RlcmluZyBjYWxsYmFjayBmdW5jdGlvbiBv biBJUlEKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQKKyAqIEBkcHVf a21zOgkJRFBVIGhhbmRsZQorICogQGlycV9pZHg6CQlpcnEgaW5kZXgKKyAqIEBpcnFfY2I6CQlJ UlEgY2FsbGJhY2sgc3RydWN0dXJlLCBjb250YWluaW5nIGNhbGxiYWNrIGZ1bmN0aW9uCisgKgkJ CWFuZCBhcmd1bWVudC4gUGFzc2luZyBOVUxMIGZvciBpcnFfY2Igd2lsbCB1bnJlZ2lzdGVyCisg KgkJCXRoZSBjYWxsYmFjayBmb3IgdGhlIGdpdmVuIGlycV9pZHgKKyAqCQkJVGhpcyBtdXN0IG1h dGNoIHdpdGggcmVnaXN0cmF0aW9uLgorICogQHJldHVybjoJCTAgZm9yIHN1Y2Nlc3MgcmVnaXN0 ZXJpbmcgY2FsbGJhY2ssIG90aGVyd2lzZSBmYWlsdXJlCisgKgorICogVGhpcyBmdW5jdGlvbiBz dXBwb3J0cyByZWdpc3RyYXRpb24gb2YgbXVsdGlwbGUgY2FsbGJhY2tzIGZvciBlYWNoIGludGVy cnVwdC4KKyAqLworaW50IGRwdV9jb3JlX2lycV91bnJlZ2lzdGVyX2NhbGxiYWNrKAorCQlzdHJ1 Y3QgZHB1X2ttcyAqZHB1X2ttcywKKwkJaW50IGlycV9pZHgsCisJCXN0cnVjdCBkcHVfaXJxX2Nh bGxiYWNrICppcnFfY2IpOworCisvKioKKyAqIGRwdV9kZWJ1Z2ZzX2NvcmVfaXJxX2luaXQgLSBy ZWdpc3RlciBjb3JlIGlycSBkZWJ1Z2ZzCisgKiBAZHB1X2ttczogcG9pbnRlciB0byBrbXMKKyAq IEBwYXJlbnQ6IGRlYnVnZnMgZGlyZWN0b3J5IHJvb3QKKyAqIEBSZXR1cm46IDAgb24gc3VjY2Vz cworICovCitpbnQgZHB1X2RlYnVnZnNfY29yZV9pcnFfaW5pdChzdHJ1Y3QgZHB1X2ttcyAqZHB1 X2ttcywKKwkJc3RydWN0IGRlbnRyeSAqcGFyZW50KTsKKworLyoqCisgKiBkcHVfZGVidWdmc19j b3JlX2lycV9kZXN0cm95IC0gZGVyZWdpc3RlciBjb3JlIGlycSBkZWJ1Z2ZzCisgKiBAZHB1X2tt czogcG9pbnRlciB0byBrbXMKKyAqLwordm9pZCBkcHVfZGVidWdmc19jb3JlX2lycV9kZXN0cm95 KHN0cnVjdCBkcHVfa21zICpkcHVfa21zKTsKKworI2VuZGlmIC8qIF9fRFBVX0NPUkVfSVJRX0hf XyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NvcmVf cGVyZi5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NvcmVfcGVyZi5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNDFjNTE5MWY5MDU2Ci0tLSAv ZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NvcmVfcGVy Zi5jCkBAIC0wLDAgKzEsNjM3IEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxOCwgVGhlIExp bnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK KyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug dmVyc2lvbiAyIGFuZAorICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor ICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisj ZGVmaW5lIHByX2ZtdChmbXQpCSJbZHJtOiVzOiVkXSAiIGZtdCwgX19mdW5jX18sIF9fTElORV9f CisKKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4K KyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3NvcnQuaD4KKyNpbmNs dWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KKworI2luY2x1ZGUg ImRwdV9rbXMuaCIKKyNpbmNsdWRlICJkcHVfdHJhY2UuaCIKKyNpbmNsdWRlICJkcHVfY3J0Yy5o IgorI2luY2x1ZGUgImRwdV9jb3JlX3BlcmYuaCIKKworI2RlZmluZSBEUFVfUEVSRl9NT0RFX1NU UklOR19TSVpFCTEyOAorCisvKioKKyAqIGVudW0gZHB1X3BlcmZfbW9kZSAtIHBlcmZvcm1hbmNl IHR1bmluZyBtb2RlCisgKiBARFBVX1BFUkZfTU9ERV9OT1JNQUw6IHBlcmZvcm1hbmNlIGNvbnRy b2xsZWQgYnkgdXNlciBtb2RlIGNsaWVudAorICogQERQVV9QRVJGX01PREVfTUlOSU1VTTogcGVy Zm9ybWFuY2UgYm91bmRlZCBieSBtaW5pbXVtIHNldHRpbmcKKyAqIEBEUFVfUEVSRl9NT0RFX0ZJ WEVEOiBwZXJmb3JtYW5jZSBib3VuZGVkIGJ5IGZpeGVkIHNldHRpbmcKKyAqLworZW51bSBkcHVf cGVyZl9tb2RlIHsKKwlEUFVfUEVSRl9NT0RFX05PUk1BTCwKKwlEUFVfUEVSRl9NT0RFX01JTklN VU0sCisJRFBVX1BFUkZfTU9ERV9GSVhFRCwKKwlEUFVfUEVSRl9NT0RFX01BWAorfTsKKworc3Rh dGljIHN0cnVjdCBkcHVfa21zICpfZHB1X2NydGNfZ2V0X2ttcyhzdHJ1Y3QgZHJtX2NydGMgKmNy dGMpCit7CisJc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdjsKKworCWlmICghY3J0Yy0+ZGV2 IHx8ICFjcnRjLT5kZXYtPmRldl9wcml2YXRlKSB7CisJCURQVV9FUlJPUigiaW52YWxpZCBkZXZp Y2VcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlwcml2ID0gY3J0Yy0+ZGV2LT5kZXZfcHJp dmF0ZTsKKwlpZiAoIXByaXYgfHwgIXByaXYtPmttcykgeworCQlEUFVfRVJST1IoImludmFsaWQg a21zXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIHRvX2RwdV9rbXMocHJpdi0+ a21zKTsKK30KKworc3RhdGljIGJvb2wgX2RwdV9jb3JlX3BlcmZfY3J0Y19pc19wb3dlcl9vbihz dHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJcmV0dXJuIGRwdV9jcnRjX2lzX2VuYWJsZWQoY3J0 Yyk7Cit9CisKK3N0YXRpYyBib29sIF9kcHVfY29yZV92aWRlb19tb2RlX2ludGZfY29ubmVjdGVk KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgZHJtX2NydGMgKnRtcF9jcnRjOwor CWJvb2wgaW50Zl9jb25uZWN0ZWQgPSBmYWxzZTsKKworCWlmICghY3J0YykKKwkJZ290byBlbmQ7 CisKKwlkcm1fZm9yX2VhY2hfY3J0Yyh0bXBfY3J0YywgY3J0Yy0+ZGV2KSB7CisJCWlmICgoZHB1 X2NydGNfZ2V0X2ludGZfbW9kZSh0bXBfY3J0YykgPT0gSU5URl9NT0RFX1ZJREVPKSAmJgorCQkJ CV9kcHVfY29yZV9wZXJmX2NydGNfaXNfcG93ZXJfb24odG1wX2NydGMpKSB7CisJCQlEUFVfREVC VUcoInZpZGVvIGludGVyZmFjZSBjb25uZWN0ZWQgY3J0YzolZFxuIiwKKwkJCQl0bXBfY3J0Yy0+ YmFzZS5pZCk7CisJCQlpbnRmX2Nvbm5lY3RlZCA9IHRydWU7CisJCQlnb3RvIGVuZDsKKwkJfQor CX0KKworZW5kOgorCXJldHVybiBpbnRmX2Nvbm5lY3RlZDsKK30KKworc3RhdGljIHZvaWQgX2Rw dV9jb3JlX3BlcmZfY2FsY19jcnRjKHN0cnVjdCBkcHVfa21zICprbXMsCisJCXN0cnVjdCBkcm1f Y3J0YyAqY3J0YywKKwkJc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSwKKwkJc3RydWN0IGRw dV9jb3JlX3BlcmZfcGFyYW1zICpwZXJmKQoreworCXN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAqZHB1 X2NzdGF0ZTsKKwlpbnQgaTsKKworCWlmICgha21zIHx8ICFrbXMtPmNhdGFsb2cgfHwgIWNydGMg fHwgIXN0YXRlIHx8ICFwZXJmKSB7CisJCURQVV9FUlJPUigiaW52YWxpZCBwYXJhbWV0ZXJzXG4i KTsKKwkJcmV0dXJuOworCX0KKworCWRwdV9jc3RhdGUgPSB0b19kcHVfY3J0Y19zdGF0ZShzdGF0 ZSk7CisJbWVtc2V0KHBlcmYsIDAsIHNpemVvZihzdHJ1Y3QgZHB1X2NvcmVfcGVyZl9wYXJhbXMp KTsKKworCWlmICghZHB1X2NzdGF0ZS0+YndfY29udHJvbCkgeworCQlmb3IgKGkgPSAwOyBpIDwg RFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEX01BWDsgaSsrKSB7CisJCQlwZXJmLT5id19jdGxbaV0g PSBrbXMtPmNhdGFsb2ctPnBlcmYubWF4X2J3X2hpZ2ggKgorCQkJCQkxMDAwVUxMOworCQkJcGVy Zi0+bWF4X3Blcl9waXBlX2liW2ldID0gcGVyZi0+YndfY3RsW2ldOworCQl9CisJCXBlcmYtPmNv cmVfY2xrX3JhdGUgPSBrbXMtPnBlcmYubWF4X2NvcmVfY2xrX3JhdGU7CisJfSBlbHNlIGlmIChr bXMtPnBlcmYucGVyZl90dW5lLm1vZGUgPT0gRFBVX1BFUkZfTU9ERV9NSU5JTVVNKSB7CisJCWZv ciAoaSA9IDA7IGkgPCBEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfTUFYOyBpKyspIHsKKwkJCXBl cmYtPmJ3X2N0bFtpXSA9IDA7CisJCQlwZXJmLT5tYXhfcGVyX3BpcGVfaWJbaV0gPSAwOworCQl9 CisJCXBlcmYtPmNvcmVfY2xrX3JhdGUgPSAwOworCX0gZWxzZSBpZiAoa21zLT5wZXJmLnBlcmZf dHVuZS5tb2RlID09IERQVV9QRVJGX01PREVfRklYRUQpIHsKKwkJZm9yIChpID0gMDsgaSA8IERQ VV9QT1dFUl9IQU5ETEVfREJVU19JRF9NQVg7IGkrKykgeworCQkJcGVyZi0+YndfY3RsW2ldID0g a21zLT5wZXJmLmZpeF9jb3JlX2FiX3ZvdGU7CisJCQlwZXJmLT5tYXhfcGVyX3BpcGVfaWJbaV0g PSBrbXMtPnBlcmYuZml4X2NvcmVfaWJfdm90ZTsKKwkJfQorCQlwZXJmLT5jb3JlX2Nsa19yYXRl ID0ga21zLT5wZXJmLmZpeF9jb3JlX2Nsa19yYXRlOworCX0KKworCURQVV9ERUJVRygKKwkJImNy dGM9JWQgY2xrX3JhdGU9JWxsdSBjb3JlX2liPSVsbHUgY29yZV9hYj0lbGx1IGxsY2NfaWI9JWxs dSBsbGNjX2FiPSVsbHUgbWVtX2liPSVsbHUgbWVtX2FiPSVsbHVcbiIsCisJCQljcnRjLT5iYXNl LmlkLCBwZXJmLT5jb3JlX2Nsa19yYXRlLAorCQkJcGVyZi0+bWF4X3Blcl9waXBlX2liW0RQVV9Q T1dFUl9IQU5ETEVfREJVU19JRF9NTk9DXSwKKwkJCXBlcmYtPmJ3X2N0bFtEUFVfUE9XRVJfSEFO RExFX0RCVVNfSURfTU5PQ10sCisJCQlwZXJmLT5tYXhfcGVyX3BpcGVfaWJbRFBVX1BPV0VSX0hB TkRMRV9EQlVTX0lEX0xMQ0NdLAorCQkJcGVyZi0+YndfY3RsW0RQVV9QT1dFUl9IQU5ETEVfREJV U19JRF9MTENDXSwKKwkJCXBlcmYtPm1heF9wZXJfcGlwZV9pYltEUFVfUE9XRVJfSEFORExFX0RC VVNfSURfRUJJXSwKKwkJCXBlcmYtPmJ3X2N0bFtEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfRUJJ XSk7Cit9CisKK2ludCBkcHVfY29yZV9wZXJmX2NydGNfY2hlY2soc3RydWN0IGRybV9jcnRjICpj cnRjLAorCQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlKQoreworCXUzMiBidywgdGhyZXNo b2xkOworCXU2NCBid19zdW1fb2ZfaW50ZnMgPSAwOworCWVudW0gZHB1X2NydGNfY2xpZW50X3R5 cGUgY3Vycl9jbGllbnRfdHlwZTsKKwlib29sIGlzX3ZpZGVvX21vZGU7CisJc3RydWN0IGRwdV9j cnRjX3N0YXRlICpkcHVfY3N0YXRlOworCXN0cnVjdCBkcm1fY3J0YyAqdG1wX2NydGM7CisJc3Ry dWN0IGRwdV9rbXMgKmttczsKKwlpbnQgaTsKKworCWlmICghY3J0YyB8fCAhc3RhdGUpIHsKKwkJ RFBVX0VSUk9SKCJpbnZhbGlkIGNydGNcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlr bXMgPSBfZHB1X2NydGNfZ2V0X2ttcyhjcnRjKTsKKwlpZiAoIWttcyB8fCAha21zLT5jYXRhbG9n KSB7CisJCURQVV9FUlJPUigiaW52YWxpZCBwYXJhbWV0ZXJzXG4iKTsKKwkJcmV0dXJuIDA7CisJ fQorCisJLyogd2Ugb25seSBuZWVkIGJhbmR3aWR0aCBjaGVjayBvbiByZWFsLXRpbWUgY2xpZW50 cyAoaW50ZXJmYWNlcykgKi8KKwlpZiAoZHB1X2NydGNfZ2V0X2NsaWVudF90eXBlKGNydGMpID09 IE5SVF9DTElFTlQpCisJCXJldHVybiAwOworCisJZHB1X2NzdGF0ZSA9IHRvX2RwdV9jcnRjX3N0 YXRlKHN0YXRlKTsKKworCS8qIG9idGFpbiBuZXcgdmFsdWVzICovCisJX2RwdV9jb3JlX3BlcmZf Y2FsY19jcnRjKGttcywgY3J0Yywgc3RhdGUsICZkcHVfY3N0YXRlLT5uZXdfcGVyZik7CisKKwlm b3IgKGkgPSBEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfTU5PQzsKKwkJCWkgPCBEUFVfUE9XRVJf SEFORExFX0RCVVNfSURfTUFYOyBpKyspIHsKKwkJYndfc3VtX29mX2ludGZzID0gZHB1X2NzdGF0 ZS0+bmV3X3BlcmYuYndfY3RsW2ldOworCQljdXJyX2NsaWVudF90eXBlID0gZHB1X2NydGNfZ2V0 X2NsaWVudF90eXBlKGNydGMpOworCisJCWRybV9mb3JfZWFjaF9jcnRjKHRtcF9jcnRjLCBjcnRj LT5kZXYpIHsKKwkJCWlmIChfZHB1X2NvcmVfcGVyZl9jcnRjX2lzX3Bvd2VyX29uKHRtcF9jcnRj KSAmJgorCQkJICAgIChkcHVfY3J0Y19nZXRfY2xpZW50X3R5cGUodG1wX2NydGMpID09CisJCQkJ CSAgICBjdXJyX2NsaWVudF90eXBlKSAmJgorCQkJICAgICh0bXBfY3J0YyAhPSBjcnRjKSkgewor CQkJCXN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAqdG1wX2NzdGF0ZSA9CisJCQkJCXRvX2RwdV9jcnRj X3N0YXRlKHRtcF9jcnRjLT5zdGF0ZSk7CisKKwkJCQlEUFVfREVCVUcoImNydGM6JWQgYnc6JWxs dSBjdHJsOiVkXG4iLAorCQkJCQl0bXBfY3J0Yy0+YmFzZS5pZCwKKwkJCQkJdG1wX2NzdGF0ZS0+ bmV3X3BlcmYuYndfY3RsW2ldLAorCQkJCQl0bXBfY3N0YXRlLT5id19jb250cm9sKTsKKwkJCQkv KgorCQkJCSAqIEZvciBidyBjaGVjayBvbmx5IHVzZSB0aGUgYncgaWYgdGhlCisJCQkJICogYXRv bWljIHByb3BlcnR5IGhhcyBiZWVuIGFscmVhZHkgc2V0CisJCQkJICovCisJCQkJaWYgKHRtcF9j c3RhdGUtPmJ3X2NvbnRyb2wpCisJCQkJCWJ3X3N1bV9vZl9pbnRmcyArPQorCQkJCQkJdG1wX2Nz dGF0ZS0+bmV3X3BlcmYuYndfY3RsW2ldOworCQkJfQorCQl9CisKKwkJLyogY29udmVydCBiYW5k d2lkdGggdG8ga2IgKi8KKwkJYncgPSBESVZfUk9VTkRfVVBfVUxMKGJ3X3N1bV9vZl9pbnRmcywg MTAwMCk7CisJCURQVV9ERUJVRygiY2FsY3VsYXRlZCBiYW5kd2lkdGg9JXVrXG4iLCBidyk7CisK KwkJaXNfdmlkZW9fbW9kZSA9IGRwdV9jcnRjX2dldF9pbnRmX21vZGUoY3J0YykgPT0gSU5URl9N T0RFX1ZJREVPOworCQl0aHJlc2hvbGQgPSAoaXNfdmlkZW9fbW9kZSB8fAorCQkJX2RwdV9jb3Jl X3ZpZGVvX21vZGVfaW50Zl9jb25uZWN0ZWQoY3J0YykpID8KKwkJCWttcy0+Y2F0YWxvZy0+cGVy Zi5tYXhfYndfbG93IDoKKwkJCWttcy0+Y2F0YWxvZy0+cGVyZi5tYXhfYndfaGlnaDsKKworCQlE UFVfREVCVUcoImZpbmFsIHRocmVzaG9sZCBidyBsaW1pdCA9ICVkXG4iLCB0aHJlc2hvbGQpOwor CisJCWlmICghZHB1X2NzdGF0ZS0+YndfY29udHJvbCkgeworCQkJRFBVX0RFQlVHKCJieXBhc3Mg YmFuZHdpZHRoIGNoZWNrXG4iKTsKKwkJfSBlbHNlIGlmICghdGhyZXNob2xkKSB7CisJCQlEUFVf RVJST1IoIm5vIGJhbmR3aWR0aCBsaW1pdHMgc3BlY2lmaWVkXG4iKTsKKwkJCXJldHVybiAtRTJC SUc7CisJCX0gZWxzZSBpZiAoYncgPiB0aHJlc2hvbGQpIHsKKwkJCURQVV9FUlJPUigiZXhjZWVk cyBiYW5kd2lkdGg6ICV1a2IgPiAldWtiXG4iLCBidywKKwkJCQkJdGhyZXNob2xkKTsKKwkJCXJl dHVybiAtRTJCSUc7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfZHB1 X2NvcmVfcGVyZl9jcnRjX3VwZGF0ZV9idXMoc3RydWN0IGRwdV9rbXMgKmttcywKKwkJc3RydWN0 IGRybV9jcnRjICpjcnRjLCB1MzIgYnVzX2lkKQoreworCXN0cnVjdCBkcHVfY29yZV9wZXJmX3Bh cmFtcyBwZXJmID0geyB7IDAgfSB9OworCWVudW0gZHB1X2NydGNfY2xpZW50X3R5cGUgY3Vycl9j bGllbnRfdHlwZQorCQkJCQk9IGRwdV9jcnRjX2dldF9jbGllbnRfdHlwZShjcnRjKTsKKwlzdHJ1 Y3QgZHJtX2NydGMgKnRtcF9jcnRjOworCXN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAqZHB1X2NzdGF0 ZTsKKwlpbnQgcmV0ID0gMDsKKworCWRybV9mb3JfZWFjaF9jcnRjKHRtcF9jcnRjLCBjcnRjLT5k ZXYpIHsKKwkJaWYgKF9kcHVfY29yZV9wZXJmX2NydGNfaXNfcG93ZXJfb24odG1wX2NydGMpICYm CisJCQljdXJyX2NsaWVudF90eXBlID09CisJCQkJZHB1X2NydGNfZ2V0X2NsaWVudF90eXBlKHRt cF9jcnRjKSkgeworCQkJZHB1X2NzdGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKHRtcF9jcnRjLT5z dGF0ZSk7CisKKwkJCXBlcmYubWF4X3Blcl9waXBlX2liW2J1c19pZF0gPQorCQkJCW1heChwZXJm Lm1heF9wZXJfcGlwZV9pYltidXNfaWRdLAorCQkJCWRwdV9jc3RhdGUtPm5ld19wZXJmLm1heF9w ZXJfcGlwZV9pYltidXNfaWRdKTsKKworCQkJRFBVX0RFQlVHKCJjcnRjPSVkIGJ1c19pZD0lZCBi dz0lbGx1XG4iLAorCQkJCXRtcF9jcnRjLT5iYXNlLmlkLCBidXNfaWQsCisJCQkJZHB1X2NzdGF0 ZS0+bmV3X3BlcmYuYndfY3RsW2J1c19pZF0pOworCQl9CisJfQorCXJldHVybiByZXQ7Cit9CisK Ky8qKgorICogQGRwdV9jb3JlX3BlcmZfY3J0Y19yZWxlYXNlX2J3KCkgLSByZXF1ZXN0IHplcm8g YmFuZHdpZHRoCisgKiBAY3J0YyAtIHBvaW50ZXIgdG8gYSBjcnRjCisgKgorICogRnVuY3Rpb24g Y2hlY2tzIGEgc3RhdGUgdmFyaWFibGUgZm9yIHRoZSBjcnRjLCBpZiBhbGwgcGVuZGluZyBjb21t aXQKKyAqIHJlcXVlc3RzIGFyZSBkb25lLCBtZWFuaW5nIG5vIG1vcmUgYmFuZHdpZHRoIGlzIG5l ZWRlZCwgcmVsZWFzZQorICogYmFuZHdpZHRoIHJlcXVlc3QuCisgKi8KK3ZvaWQgZHB1X2NvcmVf cGVyZl9jcnRjX3JlbGVhc2VfYncoc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBk cm1fY3J0YyAqdG1wX2NydGM7CisJc3RydWN0IGRwdV9jcnRjICpkcHVfY3J0YzsKKwlzdHJ1Y3Qg ZHB1X2NydGNfc3RhdGUgKmRwdV9jc3RhdGU7CisJc3RydWN0IGRwdV9rbXMgKmttczsKKwlpbnQg aTsKKworCWlmICghY3J0YykgeworCQlEUFVfRVJST1IoImludmFsaWQgY3J0Y1xuIik7CisJCXJl dHVybjsKKwl9CisKKwlrbXMgPSBfZHB1X2NydGNfZ2V0X2ttcyhjcnRjKTsKKwlpZiAoIWttcyB8 fCAha21zLT5jYXRhbG9nKSB7CisJCURQVV9FUlJPUigiaW52YWxpZCBrbXNcbiIpOworCQlyZXR1 cm47CisJfQorCisJZHB1X2NydGMgPSB0b19kcHVfY3J0YyhjcnRjKTsKKwlkcHVfY3N0YXRlID0g dG9fZHB1X2NydGNfc3RhdGUoY3J0Yy0+c3RhdGUpOworCisJLyogb25seSBkbyB0aGlzIGZvciBj b21tYW5kIG1vZGUgcnQgY2xpZW50ICovCisJaWYgKGRwdV9jcnRjX2dldF9pbnRmX21vZGUoY3J0 YykgIT0gSU5URl9NT0RFX0NNRCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBJZiB2aWRlbyBpbnRl cmZhY2UgcHJlc2VudCwgY21kIHBhbmVsIGJhbmR3aWR0aCBjYW5ub3QgYmUKKwkgKiByZWxlYXNl ZC4KKwkgKi8KKwlpZiAoZHB1X2NydGNfZ2V0X2ludGZfbW9kZShjcnRjKSA9PSBJTlRGX01PREVf Q01EKQorCQlkcm1fZm9yX2VhY2hfY3J0Yyh0bXBfY3J0YywgY3J0Yy0+ZGV2KSB7CisJCQlpZiAo X2RwdV9jb3JlX3BlcmZfY3J0Y19pc19wb3dlcl9vbih0bXBfY3J0YykgJiYKKwkJCQlkcHVfY3J0 Y19nZXRfaW50Zl9tb2RlKHRtcF9jcnRjKSA9PQorCQkJCQkJSU5URl9NT0RFX1ZJREVPKQorCQkJ CXJldHVybjsKKwkJfQorCisJLyogUmVsZWFzZSB0aGUgYmFuZHdpZHRoICovCisJaWYgKGttcy0+ cGVyZi5lbmFibGVfYndfcmVsZWFzZSkgeworCQl0cmFjZV9kcHVfY21kX3JlbGVhc2VfYncoY3J0 Yy0+YmFzZS5pZCk7CisJCURQVV9ERUJVRygiUmVsZWFzZSBCVyBjcnRjPSVkXG4iLCBjcnRjLT5i YXNlLmlkKTsKKwkJZm9yIChpID0gMDsgaSA8IERQVV9QT1dFUl9IQU5ETEVfREJVU19JRF9NQVg7 IGkrKykgeworCQkJZHB1X2NydGMtPmN1cl9wZXJmLmJ3X2N0bFtpXSA9IDA7CisJCQlfZHB1X2Nv cmVfcGVyZl9jcnRjX3VwZGF0ZV9idXMoa21zLCBjcnRjLCBpKTsKKwkJfQorCX0KK30KKworc3Rh dGljIGludCBfZHB1X2NvcmVfcGVyZl9zZXRfY29yZV9jbGtfcmF0ZShzdHJ1Y3QgZHB1X2ttcyAq a21zLCB1NjQgcmF0ZSkKK3sKKwlzdHJ1Y3QgZHNzX2NsayAqY29yZV9jbGsgPSBrbXMtPnBlcmYu Y29yZV9jbGs7CisKKwlpZiAoY29yZV9jbGstPm1heF9yYXRlICYmIChyYXRlID4gY29yZV9jbGst Pm1heF9yYXRlKSkKKwkJcmF0ZSA9IGNvcmVfY2xrLT5tYXhfcmF0ZTsKKworCWNvcmVfY2xrLT5y YXRlID0gcmF0ZTsKKwlyZXR1cm4gbXNtX2Rzc19jbGtfc2V0X3JhdGUoY29yZV9jbGssIDEpOwor fQorCitzdGF0aWMgdTY0IF9kcHVfY29yZV9wZXJmX2dldF9jb3JlX2Nsa19yYXRlKHN0cnVjdCBk cHVfa21zICprbXMpCit7CisJdTY0IGNsa19yYXRlID0ga21zLT5wZXJmLnBlcmZfdHVuZS5taW5f Y29yZV9jbGs7CisJc3RydWN0IGRybV9jcnRjICpjcnRjOworCXN0cnVjdCBkcHVfY3J0Y19zdGF0 ZSAqZHB1X2NzdGF0ZTsKKworCWRybV9mb3JfZWFjaF9jcnRjKGNydGMsIGttcy0+ZGV2KSB7CisJ CWlmIChfZHB1X2NvcmVfcGVyZl9jcnRjX2lzX3Bvd2VyX29uKGNydGMpKSB7CisJCQlkcHVfY3N0 YXRlID0gdG9fZHB1X2NydGNfc3RhdGUoY3J0Yy0+c3RhdGUpOworCQkJY2xrX3JhdGUgPSBtYXgo ZHB1X2NzdGF0ZS0+bmV3X3BlcmYuY29yZV9jbGtfcmF0ZSwKKwkJCQkJCQljbGtfcmF0ZSk7CisJ CQljbGtfcmF0ZSA9IGNsa19yb3VuZF9yYXRlKGttcy0+cGVyZi5jb3JlX2Nsay0+Y2xrLAorCQkJ CQljbGtfcmF0ZSk7CisJCX0KKwl9CisKKwlpZiAoa21zLT5wZXJmLnBlcmZfdHVuZS5tb2RlID09 IERQVV9QRVJGX01PREVfRklYRUQpCisJCWNsa19yYXRlID0ga21zLT5wZXJmLmZpeF9jb3JlX2Ns a19yYXRlOworCisJRFBVX0RFQlVHKCJjbGs6JWxsdVxuIiwgY2xrX3JhdGUpOworCisJcmV0dXJu IGNsa19yYXRlOworfQorCitpbnQgZHB1X2NvcmVfcGVyZl9jcnRjX3VwZGF0ZShzdHJ1Y3QgZHJt X2NydGMgKmNydGMsCisJCWludCBwYXJhbXNfY2hhbmdlZCwgYm9vbCBzdG9wX3JlcSkKK3sKKwlz dHJ1Y3QgZHB1X2NvcmVfcGVyZl9wYXJhbXMgKm5ldywgKm9sZDsKKwlpbnQgdXBkYXRlX2J1cyA9 IDAsIHVwZGF0ZV9jbGsgPSAwOworCXU2NCBjbGtfcmF0ZSA9IDA7CisJc3RydWN0IGRwdV9jcnRj ICpkcHVfY3J0YzsKKwlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmRwdV9jc3RhdGU7CisJaW50IGk7 CisJc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdjsKKwlzdHJ1Y3QgZHB1X2ttcyAqa21zOwor CWludCByZXQ7CisKKwlpZiAoIWNydGMpIHsKKwkJRFBVX0VSUk9SKCJpbnZhbGlkIGNydGNcbiIp OworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlrbXMgPSBfZHB1X2NydGNfZ2V0X2ttcyhjcnRj KTsKKwlpZiAoIWttcyB8fCAha21zLT5jYXRhbG9nKSB7CisJCURQVV9FUlJPUigiaW52YWxpZCBr bXNcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcHJpdiA9IGttcy0+ZGV2LT5kZXZfcHJp dmF0ZTsKKworCWRwdV9jcnRjID0gdG9fZHB1X2NydGMoY3J0Yyk7CisJZHB1X2NzdGF0ZSA9IHRv X2RwdV9jcnRjX3N0YXRlKGNydGMtPnN0YXRlKTsKKworCURQVV9ERUJVRygiY3J0YzolZCBzdG9w X3JlcTolZCBjb3JlX2NsazolbGx1XG4iLAorCQkJY3J0Yy0+YmFzZS5pZCwgc3RvcF9yZXEsIGtt cy0+cGVyZi5jb3JlX2Nsa19yYXRlKTsKKworCW9sZCA9ICZkcHVfY3J0Yy0+Y3VyX3BlcmY7CisJ bmV3ID0gJmRwdV9jc3RhdGUtPm5ld19wZXJmOworCisJaWYgKF9kcHVfY29yZV9wZXJmX2NydGNf aXNfcG93ZXJfb24oY3J0YykgJiYgIXN0b3BfcmVxKSB7CisJCWZvciAoaSA9IDA7IGkgPCBEUFVf UE9XRVJfSEFORExFX0RCVVNfSURfTUFYOyBpKyspIHsKKwkJCS8qCisJCQkgKiBjYXNlcyBmb3Ig YnVzIGJhbmR3aWR0aCB1cGRhdGUuCisJCQkgKiAxLiBuZXcgYmFuZHdpZHRoIHZvdGUgLSAiYWIg b3IgaWIgdm90ZSIgaXMgaGlnaGVyCisJCQkgKiAgICB0aGFuIGN1cnJlbnQgdm90ZSBmb3IgdXBk YXRlIHJlcXVlc3QuCisJCQkgKiAyLiBuZXcgYmFuZHdpZHRoIHZvdGUgLSAiYWIgb3IgaWIgdm90 ZSIgaXMgbG93ZXIKKwkJCSAqICAgIHRoYW4gY3VycmVudCB2b3RlIGF0IGVuZCBvZiBjb21taXQg b3Igc3RvcC4KKwkJCSAqLworCQkJaWYgKChwYXJhbXNfY2hhbmdlZCAmJiAoKG5ldy0+YndfY3Rs W2ldID4KKwkJCQkJCW9sZC0+YndfY3RsW2ldKSB8fAorCQkJCSAgKG5ldy0+bWF4X3Blcl9waXBl X2liW2ldID4KKwkJCQkJCW9sZC0+bWF4X3Blcl9waXBlX2liW2ldKSkpIHx8CisJCQkgICAgKCFw YXJhbXNfY2hhbmdlZCAmJiAoKG5ldy0+YndfY3RsW2ldIDwKKwkJCQkJCW9sZC0+YndfY3RsW2ld KSB8fAorCQkJCSAgKG5ldy0+bWF4X3Blcl9waXBlX2liW2ldIDwKKwkJCQkJCW9sZC0+bWF4X3Bl cl9waXBlX2liW2ldKSkpKSB7CisJCQkJRFBVX0RFQlVHKAorCQkJCQkiY3J0Yz0lZCBwPSVkIG5l d19idz0lbGx1LG9sZF9idz0lbGx1XG4iLAorCQkJCQljcnRjLT5iYXNlLmlkLCBwYXJhbXNfY2hh bmdlZCwKKwkJCQkJbmV3LT5id19jdGxbaV0sIG9sZC0+YndfY3RsW2ldKTsKKwkJCQlvbGQtPmJ3 X2N0bFtpXSA9IG5ldy0+YndfY3RsW2ldOworCQkJCW9sZC0+bWF4X3Blcl9waXBlX2liW2ldID0K KwkJCQkJCW5ldy0+bWF4X3Blcl9waXBlX2liW2ldOworCQkJCXVwZGF0ZV9idXMgfD0gQklUKGkp OworCQkJfQorCQl9CisKKwkJaWYgKChwYXJhbXNfY2hhbmdlZCAmJgorCQkJCShuZXctPmNvcmVf Y2xrX3JhdGUgPiBvbGQtPmNvcmVfY2xrX3JhdGUpKSB8fAorCQkJCSghcGFyYW1zX2NoYW5nZWQg JiYKKwkJCQkobmV3LT5jb3JlX2Nsa19yYXRlIDwgb2xkLT5jb3JlX2Nsa19yYXRlKSkpIHsKKwkJ CW9sZC0+Y29yZV9jbGtfcmF0ZSA9IG5ldy0+Y29yZV9jbGtfcmF0ZTsKKwkJCXVwZGF0ZV9jbGsg PSAxOworCQl9CisJfSBlbHNlIHsKKwkJRFBVX0RFQlVHKCJjcnRjPSVkIGRpc2FibGVcbiIsIGNy dGMtPmJhc2UuaWQpOworCQltZW1zZXQob2xkLCAwLCBzaXplb2YoKm9sZCkpOworCQltZW1zZXQo bmV3LCAwLCBzaXplb2YoKm5ldykpOworCQl1cGRhdGVfYnVzID0gfjA7CisJCXVwZGF0ZV9jbGsg PSAxOworCX0KKwl0cmFjZV9kcHVfcGVyZl9jcnRjX3VwZGF0ZShjcnRjLT5iYXNlLmlkLAorCQkJ CW5ldy0+YndfY3RsW0RQVV9QT1dFUl9IQU5ETEVfREJVU19JRF9NTk9DXSwKKwkJCQluZXctPmJ3 X2N0bFtEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfTExDQ10sCisJCQkJbmV3LT5id19jdGxbRFBV X1BPV0VSX0hBTkRMRV9EQlVTX0lEX0VCSV0sCisJCQkJbmV3LT5jb3JlX2Nsa19yYXRlLCBzdG9w X3JlcSwKKwkJCQl1cGRhdGVfYnVzLCB1cGRhdGVfY2xrKTsKKworCWZvciAoaSA9IDA7IGkgPCBE UFVfUE9XRVJfSEFORExFX0RCVVNfSURfTUFYOyBpKyspIHsKKwkJaWYgKHVwZGF0ZV9idXMgJiBC SVQoaSkpIHsKKwkJCXJldCA9IF9kcHVfY29yZV9wZXJmX2NydGNfdXBkYXRlX2J1cyhrbXMsIGNy dGMsIGkpOworCQkJaWYgKHJldCkgeworCQkJCURQVV9FUlJPUigiY3J0Yy0lZDogZmFpbGVkIHRv IHVwZGF0ZSBidyB2b3RlIGZvciBidXMtJWRcbiIsCisJCQkJCSAgY3J0Yy0+YmFzZS5pZCwgaSk7 CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJfQorCX0KKworCS8qCisJICogVXBkYXRlIHRoZSBj bG9jayBhZnRlciBiYW5kd2lkdGggdm90ZSB0byBlbnN1cmUKKwkgKiBiYW5kd2lkdGggaXMgYXZh aWxhYmxlIGJlZm9yZSBjbG9jayByYXRlIGlzIGluY3JlYXNlZC4KKwkgKi8KKwlpZiAodXBkYXRl X2NsaykgeworCQljbGtfcmF0ZSA9IF9kcHVfY29yZV9wZXJmX2dldF9jb3JlX2Nsa19yYXRlKGtt cyk7CisKKwkJdHJhY2VfZHB1X2NvcmVfcGVyZl91cGRhdGVfY2xrKGttcy0+ZGV2LCBzdG9wX3Jl cSwgY2xrX3JhdGUpOworCisJCXJldCA9IF9kcHVfY29yZV9wZXJmX3NldF9jb3JlX2Nsa19yYXRl KGttcywgY2xrX3JhdGUpOworCQlpZiAocmV0KSB7CisJCQlEUFVfRVJST1IoImZhaWxlZCB0byBz ZXQgJXMgY2xvY2sgcmF0ZSAlbGx1XG4iLAorCQkJCQlrbXMtPnBlcmYuY29yZV9jbGstPmNsa19u YW1lLCBjbGtfcmF0ZSk7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJa21zLT5wZXJmLmNvcmVf Y2xrX3JhdGUgPSBjbGtfcmF0ZTsKKwkJRFBVX0RFQlVHKCJ1cGRhdGUgY2xrIHJhdGUgPSAlbGxk IEhaXG4iLCBjbGtfcmF0ZSk7CisJfQorCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX0RF QlVHX0ZTCisKK3N0YXRpYyBzc2l6ZV90IF9kcHVfY29yZV9wZXJmX21vZGVfd3JpdGUoc3RydWN0 IGZpbGUgKmZpbGUsCisJCSAgICBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsIHNpemVfdCBj b3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBkcHVfY29yZV9wZXJmICpwZXJmID0gZmls ZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkcHVfcGVyZl9jZmcgKmNmZyA9ICZwZXJmLT5jYXRh bG9nLT5wZXJmOworCXUzMiBwZXJmX21vZGUgPSAwOworCWNoYXIgYnVmWzEwXTsKKworCWlmICgh cGVyZikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoY291bnQgPj0gc2l6ZW9mKGJ1ZikpCisJ CXJldHVybiAtRUZBVUxUOworCisJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcl9idWYsIGNv dW50KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlidWZbY291bnRdID0gMDsJLyogZW5kIG9mIHN0 cmluZyAqLworCisJaWYgKGtzdHJ0b3VpbnQoYnVmLCAwLCAmcGVyZl9tb2RlKSkKKwkJcmV0dXJu IC1FRkFVTFQ7CisKKwlpZiAocGVyZl9tb2RlID49IERQVV9QRVJGX01PREVfTUFYKQorCQlyZXR1 cm4gLUVGQVVMVDsKKworCWlmIChwZXJmX21vZGUgPT0gRFBVX1BFUkZfTU9ERV9GSVhFRCkgewor CQlEUk1fSU5GTygiZml4IHBlcmZvcm1hbmNlIG1vZGVcbiIpOworCX0gZWxzZSBpZiAocGVyZl9t b2RlID09IERQVV9QRVJGX01PREVfTUlOSU1VTSkgeworCQkvKiBydW4gdGhlIGRyaXZlciB3aXRo IG1heCBjbGsgYW5kIEJXIHZvdGUgKi8KKwkJcGVyZi0+cGVyZl90dW5lLm1pbl9jb3JlX2NsayA9 IHBlcmYtPm1heF9jb3JlX2Nsa19yYXRlOworCQlwZXJmLT5wZXJmX3R1bmUubWluX2J1c192b3Rl ID0KKwkJCQkodTY0KSBjZmctPm1heF9id19oaWdoICogMTAwMDsKKwkJRFJNX0lORk8oIm1pbmlt dW0gcGVyZm9ybWFuY2UgbW9kZVxuIik7CisJfSBlbHNlIGlmIChwZXJmX21vZGUgPT0gRFBVX1BF UkZfTU9ERV9OT1JNQUwpIHsKKwkJLyogcmVzZXQgdGhlIHBlcmYgdHVuZSBwYXJhbXMgdG8gMCAq LworCQlwZXJmLT5wZXJmX3R1bmUubWluX2NvcmVfY2xrID0gMDsKKwkJcGVyZi0+cGVyZl90dW5l Lm1pbl9idXNfdm90ZSA9IDA7CisJCURSTV9JTkZPKCJub3JtYWwgcGVyZm9ybWFuY2UgbW9kZVxu Iik7CisJfQorCXBlcmYtPnBlcmZfdHVuZS5tb2RlID0gcGVyZl9tb2RlOworCisJcmV0dXJuIGNv dW50OworfQorCitzdGF0aWMgc3NpemVfdCBfZHB1X2NvcmVfcGVyZl9tb2RlX3JlYWQoc3RydWN0 IGZpbGUgKmZpbGUsCisJCQljaGFyIF9fdXNlciAqYnVmZiwgc2l6ZV90IGNvdW50LCBsb2ZmX3Qg KnBwb3MpCit7CisJc3RydWN0IGRwdV9jb3JlX3BlcmYgKnBlcmYgPSBmaWxlLT5wcml2YXRlX2Rh dGE7CisJaW50IGxlbiA9IDA7CisJY2hhciBidWZbRFBVX1BFUkZfTU9ERV9TVFJJTkdfU0laRV0g PSB7J1wwJ307CisKKwlpZiAoIXBlcmYpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKCpwcG9z KQorCQlyZXR1cm4gMDsJLyogdGhlIGVuZCAqLworCisJbGVuID0gc25wcmludGYoYnVmLCBzaXpl b2YoYnVmKSwKKwkJCSJtb2RlICVkIG1pbl9tZHBfY2xrICVsbHUgbWluX2J1c192b3RlICVsbHVc biIsCisJCQlwZXJmLT5wZXJmX3R1bmUubW9kZSwKKwkJCXBlcmYtPnBlcmZfdHVuZS5taW5fY29y ZV9jbGssCisJCQlwZXJmLT5wZXJmX3R1bmUubWluX2J1c192b3RlKTsKKwlpZiAobGVuIDwgMCB8 fCBsZW4gPj0gc2l6ZW9mKGJ1ZikpCisJCXJldHVybiAwOworCisJaWYgKChjb3VudCA8IHNpemVv ZihidWYpKSB8fCBjb3B5X3RvX3VzZXIoYnVmZiwgYnVmLCBsZW4pKQorCQlyZXR1cm4gLUVGQVVM VDsKKworCSpwcG9zICs9IGxlbjsgICAvKiBpbmNyZWFzZSBvZmZzZXQgKi8KKworCXJldHVybiBs ZW47Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRwdV9jb3JlX3Bl cmZfbW9kZV9mb3BzID0geworCS5vcGVuID0gc2ltcGxlX29wZW4sCisJLnJlYWQgPSBfZHB1X2Nv cmVfcGVyZl9tb2RlX3JlYWQsCisJLndyaXRlID0gX2RwdV9jb3JlX3BlcmZfbW9kZV93cml0ZSwK K307CisKK3N0YXRpYyB2b2lkIGRwdV9jb3JlX3BlcmZfZGVidWdmc19kZXN0cm95KHN0cnVjdCBk cHVfY29yZV9wZXJmICpwZXJmKQoreworCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShwZXJmLT5k ZWJ1Z2ZzX3Jvb3QpOworCXBlcmYtPmRlYnVnZnNfcm9vdCA9IE5VTEw7Cit9CisKK2ludCBkcHVf Y29yZV9wZXJmX2RlYnVnZnNfaW5pdChzdHJ1Y3QgZHB1X2NvcmVfcGVyZiAqcGVyZiwKKwkJc3Ry dWN0IGRlbnRyeSAqcGFyZW50KQoreworCXN0cnVjdCBkcHVfbWRzc19jZmcgKmNhdGFsb2cgPSBw ZXJmLT5jYXRhbG9nOworCXN0cnVjdCBtc21fZHJtX3ByaXZhdGUgKnByaXY7CisJc3RydWN0IGRw dV9rbXMgKmRwdV9rbXM7CisKKwlwcml2ID0gcGVyZi0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlpZiAo IXByaXYgfHwgIXByaXYtPmttcykgeworCQlEUFVfRVJST1IoImludmFsaWQgS01TIHJlZmVyZW5j ZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRwdV9rbXMgPSB0b19kcHVfa21zKHBy aXYtPmttcyk7CisKKwlwZXJmLT5kZWJ1Z2ZzX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImNv cmVfcGVyZiIsIHBhcmVudCk7CisJaWYgKCFwZXJmLT5kZWJ1Z2ZzX3Jvb3QpIHsKKwkJRFBVX0VS Uk9SKCJmYWlsZWQgdG8gY3JlYXRlIGNvcmUgcGVyZiBkZWJ1Z2ZzXG4iKTsKKwkJcmV0dXJuIC1F SU5WQUw7CisJfQorCisJZGVidWdmc19jcmVhdGVfdTY0KCJtYXhfY29yZV9jbGtfcmF0ZSIsIDA2 MDAsIHBlcmYtPmRlYnVnZnNfcm9vdCwKKwkJCSZwZXJmLT5tYXhfY29yZV9jbGtfcmF0ZSk7CisJ ZGVidWdmc19jcmVhdGVfdTY0KCJjb3JlX2Nsa19yYXRlIiwgMDYwMCwgcGVyZi0+ZGVidWdmc19y b290LAorCQkJJnBlcmYtPmNvcmVfY2xrX3JhdGUpOworCWRlYnVnZnNfY3JlYXRlX3UzMigiZW5h YmxlX2J3X3JlbGVhc2UiLCAwNjAwLCBwZXJmLT5kZWJ1Z2ZzX3Jvb3QsCisJCQkodTMyICopJnBl cmYtPmVuYWJsZV9id19yZWxlYXNlKTsKKwlkZWJ1Z2ZzX2NyZWF0ZV91MzIoInRocmVzaG9sZF9s b3ciLCAwNjAwLCBwZXJmLT5kZWJ1Z2ZzX3Jvb3QsCisJCQkodTMyICopJmNhdGFsb2ctPnBlcmYu bWF4X2J3X2xvdyk7CisJZGVidWdmc19jcmVhdGVfdTMyKCJ0aHJlc2hvbGRfaGlnaCIsIDA2MDAs IHBlcmYtPmRlYnVnZnNfcm9vdCwKKwkJCSh1MzIgKikmY2F0YWxvZy0+cGVyZi5tYXhfYndfaGln aCk7CisJZGVidWdmc19jcmVhdGVfdTMyKCJtaW5fY29yZV9pYiIsIDA2MDAsIHBlcmYtPmRlYnVn ZnNfcm9vdCwKKwkJCSh1MzIgKikmY2F0YWxvZy0+cGVyZi5taW5fY29yZV9pYik7CisJZGVidWdm c19jcmVhdGVfdTMyKCJtaW5fbGxjY19pYiIsIDA2MDAsIHBlcmYtPmRlYnVnZnNfcm9vdCwKKwkJ CSh1MzIgKikmY2F0YWxvZy0+cGVyZi5taW5fbGxjY19pYik7CisJZGVidWdmc19jcmVhdGVfdTMy KCJtaW5fZHJhbV9pYiIsIDA2MDAsIHBlcmYtPmRlYnVnZnNfcm9vdCwKKwkJCSh1MzIgKikmY2F0 YWxvZy0+cGVyZi5taW5fZHJhbV9pYik7CisJZGVidWdmc19jcmVhdGVfZmlsZSgicGVyZl9tb2Rl IiwgMDYwMCwgcGVyZi0+ZGVidWdmc19yb290LAorCQkJKHUzMiAqKXBlcmYsICZkcHVfY29yZV9w ZXJmX21vZGVfZm9wcyk7CisJZGVidWdmc19jcmVhdGVfdTY0KCJmaXhfY29yZV9jbGtfcmF0ZSIs IDA2MDAsIHBlcmYtPmRlYnVnZnNfcm9vdCwKKwkJCSZwZXJmLT5maXhfY29yZV9jbGtfcmF0ZSk7 CisJZGVidWdmc19jcmVhdGVfdTY0KCJmaXhfY29yZV9pYl92b3RlIiwgMDYwMCwgcGVyZi0+ZGVi dWdmc19yb290LAorCQkJJnBlcmYtPmZpeF9jb3JlX2liX3ZvdGUpOworCWRlYnVnZnNfY3JlYXRl X3U2NCgiZml4X2NvcmVfYWJfdm90ZSIsIDA2MDAsIHBlcmYtPmRlYnVnZnNfcm9vdCwKKwkJCSZw ZXJmLT5maXhfY29yZV9hYl92b3RlKTsKKworCXJldHVybiAwOworfQorI2Vsc2UKK3N0YXRpYyB2 b2lkIGRwdV9jb3JlX3BlcmZfZGVidWdmc19kZXN0cm95KHN0cnVjdCBkcHVfY29yZV9wZXJmICpw ZXJmKQoreworfQorCitpbnQgZHB1X2NvcmVfcGVyZl9kZWJ1Z2ZzX2luaXQoc3RydWN0IGRwdV9j b3JlX3BlcmYgKnBlcmYsCisJCXN0cnVjdCBkZW50cnkgKnBhcmVudCkKK3sKKwlyZXR1cm4gMDsK K30KKyNlbmRpZgorCit2b2lkIGRwdV9jb3JlX3BlcmZfZGVzdHJveShzdHJ1Y3QgZHB1X2NvcmVf cGVyZiAqcGVyZikKK3sKKwlpZiAoIXBlcmYpIHsKKwkJRFBVX0VSUk9SKCJpbnZhbGlkIHBhcmFt ZXRlcnNcbiIpOworCQlyZXR1cm47CisJfQorCisJZHB1X2NvcmVfcGVyZl9kZWJ1Z2ZzX2Rlc3Ry b3kocGVyZik7CisJcGVyZi0+bWF4X2NvcmVfY2xrX3JhdGUgPSAwOworCXBlcmYtPmNvcmVfY2xr ID0gTlVMTDsKKwlwZXJmLT5waGFuZGxlID0gTlVMTDsKKwlwZXJmLT5jYXRhbG9nID0gTlVMTDsK KwlwZXJmLT5kZXYgPSBOVUxMOworfQorCitpbnQgZHB1X2NvcmVfcGVyZl9pbml0KHN0cnVjdCBk cHVfY29yZV9wZXJmICpwZXJmLAorCQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQlzdHJ1Y3Qg ZHB1X21kc3NfY2ZnICpjYXRhbG9nLAorCQlzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRs ZSwKKwkJc3RydWN0IGRzc19jbGsgKmNvcmVfY2xrKQoreworCXBlcmYtPmRldiA9IGRldjsKKwlw ZXJmLT5jYXRhbG9nID0gY2F0YWxvZzsKKwlwZXJmLT5waGFuZGxlID0gcGhhbmRsZTsKKwlwZXJm LT5jb3JlX2NsayA9IGNvcmVfY2xrOworCisJcGVyZi0+bWF4X2NvcmVfY2xrX3JhdGUgPSBjb3Jl X2Nsay0+bWF4X3JhdGU7CisJaWYgKCFwZXJmLT5tYXhfY29yZV9jbGtfcmF0ZSkgeworCQlEUFVf REVCVUcoIm9wdGlvbmFsIG1heCBjb3JlIGNsayByYXRlLCB1c2UgZGVmYXVsdFxuIik7CisJCXBl cmYtPm1heF9jb3JlX2Nsa19yYXRlID0gRFBVX1BFUkZfREVGQVVMVF9NQVhfQ09SRV9DTEtfUkFU RTsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9jb3JlX3BlcmYuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9jb3JlX3BlcmYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAu LmZiY2JlMGM3NTI3YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9jb3JlX3BlcmYuaApAQCAtMCwwICsxLDEzMyBAQAorLyogQ29weXJpZ2h0IChj KSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor ICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJv Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfRFBVX0NPUkVfUEVSRl9IXworI2RlZmluZSBfRFBV X0NPUkVfUEVSRl9IXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51 eC9kY2FjaGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGRybS9kcm1f Y3J0Yy5oPgorCisjaW5jbHVkZSAiZHB1X2h3X2NhdGFsb2cuaCIKKyNpbmNsdWRlICJkcHVfcG93 ZXJfaGFuZGxlLmgiCisKKyNkZWZpbmUJRFBVX1BFUkZfREVGQVVMVF9NQVhfQ09SRV9DTEtfUkFU RQk0MTI1MDAwMDAKKworLyoqCisgKiBzdHJ1Y3QgZHB1X2NvcmVfcGVyZl9wYXJhbXMgLSBkZWZp bml0aW9uIG9mIHBlcmZvcm1hbmNlIHBhcmFtZXRlcnMKKyAqIEBtYXhfcGVyX3BpcGVfaWI6IG1h eGltdW0gaW5zdGFudGFuZW91cyBiYW5kd2lkdGggcmVxdWVzdAorICogQGJ3X2N0bDogYXJiaXRy YXRlZCBiYW5kd2lkdGggcmVxdWVzdAorICogQGNvcmVfY2xrX3JhdGU6IGNvcmUgY2xvY2sgcmF0 ZSByZXF1ZXN0CisgKi8KK3N0cnVjdCBkcHVfY29yZV9wZXJmX3BhcmFtcyB7CisJdTY0IG1heF9w ZXJfcGlwZV9pYltEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfTUFYXTsKKwl1NjQgYndfY3RsW0RQ VV9QT1dFUl9IQU5ETEVfREJVU19JRF9NQVhdOworCXU2NCBjb3JlX2Nsa19yYXRlOworfTsKKwor LyoqCisgKiBzdHJ1Y3QgZHB1X2NvcmVfcGVyZl90dW5lIC0gZGVmaW5pdGlvbiBvZiBwZXJmb3Jt YW5jZSB0dW5pbmcgY29udHJvbAorICogQG1vZGU6IHBlcmZvcm1hbmNlIG1vZGUKKyAqIEBtaW5f Y29yZV9jbGs6IG1pbmltdW0gY29yZSBjbG9jaworICogQG1pbl9idXNfdm90ZTogbWluaW11bSBi dXMgdm90ZQorICovCitzdHJ1Y3QgZHB1X2NvcmVfcGVyZl90dW5lIHsKKwl1MzIgbW9kZTsKKwl1 NjQgbWluX2NvcmVfY2xrOworCXU2NCBtaW5fYnVzX3ZvdGU7Cit9OworCisvKioKKyAqIHN0cnVj dCBkcHVfY29yZV9wZXJmIC0gZGVmaW5pdGlvbiBvZiBjb3JlIHBlcmZvcm1hbmNlIGNvbnRleHQK KyAqIEBkZXY6IFBvaW50ZXIgdG8gZHJtIGRldmljZQorICogQGRlYnVnZnNfcm9vdDogdG9wIGxl dmVsIGRlYnVnIGZvbGRlcgorICogQGNhdGFsb2c6IFBvaW50ZXIgdG8gY2F0YWxvZyBjb25maWd1 cmF0aW9uCisgKiBAcGhhbmRsZTogUG9pbnRlciB0byBwb3dlciBoYW5kbGVyCisgKiBAY29yZV9j bGs6IFBvaW50ZXIgdG8gY29yZSBjbG9jayBzdHJ1Y3R1cmUKKyAqIEBjb3JlX2Nsa19yYXRlOiBj dXJyZW50IGNvcmUgY2xvY2sgcmF0ZQorICogQG1heF9jb3JlX2Nsa19yYXRlOiBtYXhpbXVtIGFs bG93YWJsZSBjb3JlIGNsb2NrIHJhdGUKKyAqIEBwZXJmX3R1bmU6IGRlYnVnIGNvbnRyb2wgZm9y IHBlcmZvcm1hbmNlIHR1bmluZworICogQGVuYWJsZV9id19yZWxlYXNlOiBkZWJ1ZyBjb250cm9s IGZvciBiYW5kd2lkdGggcmVsZWFzZQorICogQGZpeF9jb3JlX2Nsa19yYXRlOiBmaXhlZCBjb3Jl IGNsb2NrIHJlcXVlc3QgaW4gSHogdXNlZCBpbiBtb2RlIDIKKyAqIEBmaXhfY29yZV9pYl92b3Rl OiBmaXhlZCBjb3JlIGliIHZvdGUgaW4gYnBzIHVzZWQgaW4gbW9kZSAyCisgKiBAZml4X2NvcmVf YWJfdm90ZTogZml4ZWQgY29yZSBhYiB2b3RlIGluIGJwcyB1c2VkIGluIG1vZGUgMgorICovCitz dHJ1Y3QgZHB1X2NvcmVfcGVyZiB7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKKwlzdHJ1Y3Qg ZGVudHJ5ICpkZWJ1Z2ZzX3Jvb3Q7CisJc3RydWN0IGRwdV9tZHNzX2NmZyAqY2F0YWxvZzsKKwlz dHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZTsKKwlzdHJ1Y3QgZHNzX2NsayAqY29yZV9j bGs7CisJdTY0IGNvcmVfY2xrX3JhdGU7CisJdTY0IG1heF9jb3JlX2Nsa19yYXRlOworCXN0cnVj dCBkcHVfY29yZV9wZXJmX3R1bmUgcGVyZl90dW5lOworCXUzMiBlbmFibGVfYndfcmVsZWFzZTsK Kwl1NjQgZml4X2NvcmVfY2xrX3JhdGU7CisJdTY0IGZpeF9jb3JlX2liX3ZvdGU7CisJdTY0IGZp eF9jb3JlX2FiX3ZvdGU7Cit9OworCisvKioKKyAqIGRwdV9jb3JlX3BlcmZfY3J0Y19jaGVjayAt IHZhbGlkYXRlIHBlcmZvcm1hbmNlIG9mIHRoZSBnaXZlbiBjcnRjIHN0YXRlCisgKiBAY3J0Yzog UG9pbnRlciB0byBjcnRjCisgKiBAc3RhdGU6IFBvaW50ZXIgdG8gbmV3IGNydGMgc3RhdGUKKyAq IHJldHVybjogemVybyBpZiBzdWNjZXNzLCBvciBlcnJvciBjb2RlIG90aGVyd2lzZQorICovCitp bnQgZHB1X2NvcmVfcGVyZl9jcnRjX2NoZWNrKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJc3Ry dWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSk7CisKKy8qKgorICogZHB1X2NvcmVfcGVyZl9jcnRj X3VwZGF0ZSAtIHVwZGF0ZSBwZXJmb3JtYW5jZSBvZiB0aGUgZ2l2ZW4gY3J0YworICogQGNydGM6 IFBvaW50ZXIgdG8gY3J0YworICogQHBhcmFtc19jaGFuZ2VkOiB0cnVlIGlmIGNydGMgcGFyYW1l dGVycyBhcmUgbW9kaWZpZWQKKyAqIEBzdG9wX3JlcTogdHJ1ZSBpZiB0aGlzIGlzIGEgc3RvcCBy ZXF1ZXN0CisgKiByZXR1cm46IHplcm8gaWYgc3VjY2Vzcywgb3IgZXJyb3IgY29kZSBvdGhlcndp c2UKKyAqLworaW50IGRwdV9jb3JlX3BlcmZfY3J0Y191cGRhdGUoc3RydWN0IGRybV9jcnRjICpj cnRjLAorCQlpbnQgcGFyYW1zX2NoYW5nZWQsIGJvb2wgc3RvcF9yZXEpOworCisvKioKKyAqIGRw dV9jb3JlX3BlcmZfY3J0Y19yZWxlYXNlX2J3IC0gcmVsZWFzZSBiYW5kd2lkdGggb2YgdGhlIGdp dmVuIGNydGMKKyAqIEBjcnRjOiBQb2ludGVyIHRvIGNydGMKKyAqLwordm9pZCBkcHVfY29yZV9w ZXJmX2NydGNfcmVsZWFzZV9idyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOworCisvKioKKyAqIGRw dV9jb3JlX3BlcmZfZGVzdHJveSAtIGRlc3Ryb3kgdGhlIGdpdmVuIGNvcmUgcGVyZm9ybWFuY2Ug Y29udGV4dAorICogQHBlcmY6IFBvaW50ZXIgdG8gY29yZSBwZXJmb3JtYW5jZSBjb250ZXh0Cisg Ki8KK3ZvaWQgZHB1X2NvcmVfcGVyZl9kZXN0cm95KHN0cnVjdCBkcHVfY29yZV9wZXJmICpwZXJm KTsKKworLyoqCisgKiBkcHVfY29yZV9wZXJmX2luaXQgLSBpbml0aWFsaXplIHRoZSBnaXZlbiBj b3JlIHBlcmZvcm1hbmNlIGNvbnRleHQKKyAqIEBwZXJmOiBQb2ludGVyIHRvIGNvcmUgcGVyZm9y bWFuY2UgY29udGV4dAorICogQGRldjogUG9pbnRlciB0byBkcm0gZGV2aWNlCisgKiBAY2F0YWxv ZzogUG9pbnRlciB0byBjYXRhbG9nCisgKiBAcGhhbmRsZTogUG9pbnRlciB0byBwb3dlciBoYW5k bGUKKyAqIEBjb3JlX2NsazogcG9pbnRlciB0byBjb3JlIGNsb2NrCisgKi8KK2ludCBkcHVfY29y ZV9wZXJmX2luaXQoc3RydWN0IGRwdV9jb3JlX3BlcmYgKnBlcmYsCisJCXN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsCisJCXN0cnVjdCBkcHVfbWRzc19jZmcgKmNhdGFsb2csCisJCXN0cnVjdCBkcHVf cG93ZXJfaGFuZGxlICpwaGFuZGxlLAorCQlzdHJ1Y3QgZHNzX2NsayAqY29yZV9jbGspOworCisv KioKKyAqIGRwdV9jb3JlX3BlcmZfZGVidWdmc19pbml0IC0gaW5pdGlhbGl6ZSBkZWJ1Z2ZzIGZv ciBjb3JlIHBlcmZvcm1hbmNlIGNvbnRleHQKKyAqIEBwZXJmOiBQb2ludGVyIHRvIGNvcmUgcGVy Zm9ybWFuY2UgY29udGV4dAorICogQGRlYnVnZnNfcGFyZW50OiBQb2ludGVyIHRvIHBhcmVudCBk ZWJ1Z2ZzCisgKi8KK2ludCBkcHVfY29yZV9wZXJmX2RlYnVnZnNfaW5pdChzdHJ1Y3QgZHB1X2Nv cmVfcGVyZiAqcGVyZiwKKwkJc3RydWN0IGRlbnRyeSAqcGFyZW50KTsKKworI2VuZGlmIC8qIF9E UFVfQ09SRV9QRVJGX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmQxNzEyODIyMmY0NQot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRj LmMKQEAgLTAsMCArMSwyNTIzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE0LTIwMTggVGhl IExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp IDIwMTMgUmVkIEhhdAorICogQXV0aG9yOiBSb2IgQ2xhcmsgPHJvYmRjbGFya0BnbWFpbC5jb20+ CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5U QUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAq IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRw Oi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjZGVmaW5lIHByX2ZtdChmbXQpCSJb ZHJtOiVzOiVkXSAiIGZtdCwgX19mdW5jX18sIF9fTElORV9fCisjaW5jbHVkZSA8bGludXgvc29y dC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGltZS5o PgorI2luY2x1ZGUgPGRybS9kcm1fbW9kZS5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgor I2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2ZsaXBf d29yay5oPgorI2luY2x1ZGUgPGRybS9kcm1fcmVjdC5oPgorCisjaW5jbHVkZSAiZHB1X2ttcy5o IgorI2luY2x1ZGUgImRwdV9od19sbS5oIgorI2luY2x1ZGUgImRwdV9od19jdGwuaCIKKyNpbmNs dWRlICJkcHVfY3J0Yy5oIgorI2luY2x1ZGUgImRwdV9wbGFuZS5oIgorI2luY2x1ZGUgImRwdV9l bmNvZGVyLmgiCisjaW5jbHVkZSAiZHB1X3ZiaWYuaCIKKyNpbmNsdWRlICJkcHVfcG93ZXJfaGFu ZGxlLmgiCisjaW5jbHVkZSAiZHB1X2NvcmVfcGVyZi5oIgorI2luY2x1ZGUgImRwdV90cmFjZS5o IgorCisjZGVmaW5lIERQVV9EUk1fQkxFTkRfT1BfTk9UX0RFRklORUQgICAgMAorI2RlZmluZSBE UFVfRFJNX0JMRU5EX09QX09QQVFVRSAgICAgICAgIDEKKyNkZWZpbmUgRFBVX0RSTV9CTEVORF9P UF9QUkVNVUxUSVBMSUVEICAyCisjZGVmaW5lIERQVV9EUk1fQkxFTkRfT1BfQ09WRVJBR0UgICAg ICAgMworI2RlZmluZSBEUFVfRFJNX0JMRU5EX09QX01BWCAgICAgICAgICAgIDQKKworLyogbGF5 ZXIgbWl4ZXIgaW5kZXggb24gZHB1X2NydGMgKi8KKyNkZWZpbmUgTEVGVF9NSVhFUiAwCisjZGVm aW5lIFJJR0hUX01JWEVSIDEKKworI2RlZmluZSBNSVNSX0JVRkZfU0laRQkJCTI1NgorCitzdGF0 aWMgaW5saW5lIHN0cnVjdCBkcHVfa21zICpfZHB1X2NydGNfZ2V0X2ttcyhzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMpCit7CisJc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdjsKKworCWlmICghY3J0 YyB8fCAhY3J0Yy0+ZGV2IHx8ICFjcnRjLT5kZXYtPmRldl9wcml2YXRlKSB7CisJCURQVV9FUlJP UigiaW52YWxpZCBjcnRjXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXByaXYgPSBjcnRjLT5k ZXYtPmRldl9wcml2YXRlOworCWlmICghcHJpdiB8fCAhcHJpdi0+a21zKSB7CisJCURQVV9FUlJP UigiaW52YWxpZCBrbXNcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gdG9fZHB1 X2ttcyhwcml2LT5rbXMpOworfQorCitzdGF0aWMgaW5saW5lIGludCBfZHB1X2NydGNfcG93ZXJf ZW5hYmxlKHN0cnVjdCBkcHVfY3J0YyAqZHB1X2NydGMsIGJvb2wgZW5hYmxlKQoreworCXN0cnVj dCBkcm1fY3J0YyAqY3J0YzsKKwlzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpwcml2OworCXN0cnVj dCBkcHVfa21zICpkcHVfa21zOworCisJaWYgKCFkcHVfY3J0YykgeworCQlEUFVfRVJST1IoImlu dmFsaWQgZHB1IGNydGNcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljcnRjID0gJmRw dV9jcnRjLT5iYXNlOworCWlmICghY3J0Yy0+ZGV2IHx8ICFjcnRjLT5kZXYtPmRldl9wcml2YXRl KSB7CisJCURQVV9FUlJPUigiaW52YWxpZCBkcm0gZGV2aWNlXG4iKTsKKwkJcmV0dXJuIC1FSU5W QUw7CisJfQorCisJcHJpdiA9IGNydGMtPmRldi0+ZGV2X3ByaXZhdGU7CisJaWYgKCFwcml2LT5r bXMpIHsKKwkJRFBVX0VSUk9SKCJpbnZhbGlkIGttc1xuIik7CisJCXJldHVybiAtRUlOVkFMOwor CX0KKworCWRwdV9rbXMgPSB0b19kcHVfa21zKHByaXYtPmttcyk7CisKKwlpZiAoZW5hYmxlKQor CQlwbV9ydW50aW1lX2dldF9zeW5jKCZkcHVfa21zLT5wZGV2LT5kZXYpOworCWVsc2UKKwkJcG1f cnVudGltZV9wdXRfc3luYygmZHB1X2ttcy0+cGRldi0+ZGV2KTsKKworCXJldHVybiAwOworfQor CisvKioKKyAqIF9kcHVfY3J0Y19ycF90b19jcnRjIC0gZ2V0IGNydGMgZnJvbSByZXNvdXJjZSBw b29sIG9iamVjdAorICogQHJwOiBQb2ludGVyIHRvIHJlc291cmNlIHBvb2wKKyAqIHJldHVybjog UG9pbnRlciB0byBkcm0gY3J0YyBpZiBzdWNjZXNzOyBudWxsIG90aGVyd2lzZQorICovCitzdGF0 aWMgc3RydWN0IGRybV9jcnRjICpfZHB1X2NydGNfcnBfdG9fY3J0YyhzdHJ1Y3QgZHB1X2NydGNf cmVzcG9vbCAqcnApCit7CisJaWYgKCFycCkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gY29u dGFpbmVyX29mKHJwLCBzdHJ1Y3QgZHB1X2NydGNfc3RhdGUsIHJwKS0+YmFzZS5jcnRjOworfQor CisvKioKKyAqIF9kcHVfY3J0Y19ycF9yZWNsYWltIC0gcmVjbGFpbSB1bnVzZWQsIG9yIGFsbCBp ZiBmb3JjZWQsIHJlc291cmNlcyBpbiBwb29sCisgKiBAcnA6IFBvaW50ZXIgdG8gcmVzb3VyY2Ug cG9vbAorICogQGZvcmNlOiBUcnVlIHRvIHJlY2xhaW0gYWxsIHJlc291cmNlczsgb3RoZXJ3aXNl LCByZWNsYWltIG9ubHkgdW51c2VkIG9uZXMKKyAqIHJldHVybjogTm9uZQorICovCitzdGF0aWMg dm9pZCBfZHB1X2NydGNfcnBfcmVjbGFpbShzdHJ1Y3QgZHB1X2NydGNfcmVzcG9vbCAqcnAsIGJv b2wgZm9yY2UpCit7CisJc3RydWN0IGRwdV9jcnRjX3JlcyAqcmVzLCAqbmV4dDsKKwlzdHJ1Y3Qg ZHJtX2NydGMgKmNydGM7CisKKwljcnRjID0gX2RwdV9jcnRjX3JwX3RvX2NydGMocnApOworCWlm ICghY3J0YykgeworCQlEUFVfRVJST1IoImludmFsaWQgY3J0Y1xuIik7CisJCXJldHVybjsKKwl9 CisKKwlEUFVfREVCVUcoImNydGMlZC4ldSAlc1xuIiwgY3J0Yy0+YmFzZS5pZCwgcnAtPnNlcXVl bmNlX2lkLAorCQkJZm9yY2UgPyAiZGVzdHJveSIgOiAiZnJlZV91bnVzZWQiKTsKKworCWxpc3Rf Zm9yX2VhY2hfZW50cnlfc2FmZShyZXMsIG5leHQsICZycC0+cmVzX2xpc3QsIGxpc3QpIHsKKwkJ aWYgKCFmb3JjZSAmJiAhKHJlcy0+ZmxhZ3MgJiBEUFVfQ1JUQ19SRVNfRkxBR19GUkVFKSkKKwkJ CWNvbnRpbnVlOworCQlEUFVfREVCVUcoImNydGMlZC4ldSByZWNsYWltIHJlczoweCV4LzB4JWxs eC8lcEsvJWRcbiIsCisJCQkJY3J0Yy0+YmFzZS5pZCwgcnAtPnNlcXVlbmNlX2lkLAorCQkJCXJl cy0+dHlwZSwgcmVzLT50YWcsIHJlcy0+dmFsLAorCQkJCWF0b21pY19yZWFkKCZyZXMtPnJlZmNv dW50KSk7CisJCWxpc3RfZGVsKCZyZXMtPmxpc3QpOworCQlpZiAocmVzLT5vcHMucHV0KQorCQkJ cmVzLT5vcHMucHV0KHJlcy0+dmFsKTsKKwkJa2ZyZWUocmVzKTsKKwl9Cit9CisKKy8qKgorICog X2RwdV9jcnRjX3JwX2ZyZWVfdW51c2VkIC0gZnJlZSB1bnVzZWQgcmVzb3VyY2UgaW4gcG9vbAor ICogQHJwOiBQb2ludGVyIHRvIHJlc291cmNlIHBvb2wKKyAqIHJldHVybjogbm9uZQorICovCitz dGF0aWMgdm9pZCBfZHB1X2NydGNfcnBfZnJlZV91bnVzZWQoc3RydWN0IGRwdV9jcnRjX3Jlc3Bv b2wgKnJwKQoreworCW11dGV4X2xvY2socnAtPnJwX2xvY2spOworCV9kcHVfY3J0Y19ycF9yZWNs YWltKHJwLCBmYWxzZSk7CisJbXV0ZXhfdW5sb2NrKHJwLT5ycF9sb2NrKTsKK30KKworLyoqCisg KiBfZHB1X2NydGNfcnBfZGVzdHJveSAtIGRlc3Ryb3kgcmVzb3VyY2UgcG9vbAorICogQHJwOiBQ b2ludGVyIHRvIHJlc291cmNlIHBvb2wKKyAqIHJldHVybjogTm9uZQorICovCitzdGF0aWMgdm9p ZCBfZHB1X2NydGNfcnBfZGVzdHJveShzdHJ1Y3QgZHB1X2NydGNfcmVzcG9vbCAqcnApCit7CisJ bXV0ZXhfbG9jayhycC0+cnBfbG9jayk7CisJbGlzdF9kZWxfaW5pdCgmcnAtPnJwX2xpc3QpOwor CV9kcHVfY3J0Y19ycF9yZWNsYWltKHJwLCB0cnVlKTsKKwltdXRleF91bmxvY2socnAtPnJwX2xv Y2spOworfQorCisvKioKKyAqIF9kcHVfY3J0Y19od19ibGtfZ2V0IC0gZ2V0IGNhbGxiYWNrIGZv ciBoYXJkd2FyZSBibG9jaworICogQHZhbDogUmVzb3VyY2UgaGFuZGxlCisgKiBAdHlwZTogUmVz b3VyY2UgdHlwZQorICogQHRhZzogU2VhcmNoIHRhZyBmb3IgZ2l2ZW4gcmVzb3VyY2UKKyAqIHJl dHVybjogUmVzb3VyY2UgaGFuZGxlCisgKi8KK3N0YXRpYyB2b2lkICpfZHB1X2NydGNfaHdfYmxr X2dldCh2b2lkICp2YWwsIHUzMiB0eXBlLCB1NjQgdGFnKQoreworCURQVV9ERUJVRygicmVzOiVk LzB4JWxseC8lcEtcbiIsIHR5cGUsIHRhZywgdmFsKTsKKwlyZXR1cm4gZHB1X2h3X2Jsa19nZXQo dmFsLCB0eXBlLCB0YWcpOworfQorCisvKioKKyAqIF9kcHVfY3J0Y19od19ibGtfcHV0IC0gcHV0 IGNhbGxiYWNrIGZvciBoYXJkd2FyZSBibG9jaworICogQHZhbDogUmVzb3VyY2UgaGFuZGxlCisg KiByZXR1cm46IE5vbmUKKyAqLworc3RhdGljIHZvaWQgX2RwdV9jcnRjX2h3X2Jsa19wdXQodm9p ZCAqdmFsKQoreworCURQVV9ERUJVRygicmVzOi8vJXBLXG4iLCB2YWwpOworCWRwdV9od19ibGtf cHV0KHZhbCk7Cit9CisKKy8qKgorICogX2RwdV9jcnRjX3JwX2R1cGxpY2F0ZSAtIGR1cGxpY2F0 ZSByZXNvdXJjZSBwb29sIGFuZCByZXNldCByZWZlcmVuY2UgY291bnQKKyAqIEBycDogUG9pbnRl ciB0byBvcmlnaW5hbCByZXNvdXJjZSBwb29sCisgKiBAZHVwX3JwOiBQb2ludGVyIHRvIGR1cGxp Y2F0ZWQgcmVzb3VyY2UgcG9vbAorICogcmV0dXJuOiBOb25lCisgKi8KK3N0YXRpYyB2b2lkIF9k cHVfY3J0Y19ycF9kdXBsaWNhdGUoc3RydWN0IGRwdV9jcnRjX3Jlc3Bvb2wgKnJwLAorCQlzdHJ1 Y3QgZHB1X2NydGNfcmVzcG9vbCAqZHVwX3JwKQoreworCXN0cnVjdCBkcHVfY3J0Y19yZXMgKnJl cywgKmR1cF9yZXM7CisJc3RydWN0IGRybV9jcnRjICpjcnRjOworCisJaWYgKCFycCB8fCAhZHVw X3JwIHx8ICFycC0+cnBfaGVhZCkgeworCQlEUFVfRVJST1IoImludmFsaWQgcmVzb3VyY2UgcG9v bFxuIik7CisJCXJldHVybjsKKwl9CisKKwljcnRjID0gX2RwdV9jcnRjX3JwX3RvX2NydGMocnAp OworCWlmICghY3J0YykgeworCQlEUFVfRVJST1IoImludmFsaWQgY3J0Y1xuIik7CisJCXJldHVy bjsKKwl9CisKKwlEUFVfREVCVUcoImNydGMlZC4ldSBkdXBsaWNhdGVcbiIsIGNydGMtPmJhc2Uu aWQsIHJwLT5zZXF1ZW5jZV9pZCk7CisKKwltdXRleF9sb2NrKHJwLT5ycF9sb2NrKTsKKwlkdXBf cnAtPnNlcXVlbmNlX2lkID0gcnAtPnNlcXVlbmNlX2lkICsgMTsKKwlJTklUX0xJU1RfSEVBRCgm ZHVwX3JwLT5yZXNfbGlzdCk7CisJZHVwX3JwLT5vcHMgPSBycC0+b3BzOworCWxpc3RfZm9yX2Vh Y2hfZW50cnkocmVzLCAmcnAtPnJlc19saXN0LCBsaXN0KSB7CisJCWR1cF9yZXMgPSBremFsbG9j KHNpemVvZihzdHJ1Y3QgZHB1X2NydGNfcmVzKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghZHVwX3Jl cykgeworCQkJbXV0ZXhfdW5sb2NrKHJwLT5ycF9sb2NrKTsKKwkJCXJldHVybjsKKwkJfQorCQlJ TklUX0xJU1RfSEVBRCgmZHVwX3Jlcy0+bGlzdCk7CisJCWF0b21pY19zZXQoJmR1cF9yZXMtPnJl ZmNvdW50LCAwKTsKKwkJZHVwX3Jlcy0+dHlwZSA9IHJlcy0+dHlwZTsKKwkJZHVwX3Jlcy0+dGFn ID0gcmVzLT50YWc7CisJCWR1cF9yZXMtPnZhbCA9IHJlcy0+dmFsOworCQlkdXBfcmVzLT5vcHMg PSByZXMtPm9wczsKKwkJZHVwX3Jlcy0+ZmxhZ3MgPSBEUFVfQ1JUQ19SRVNfRkxBR19GUkVFOwor CQlEUFVfREVCVUcoImNydGMlZC4ldSBkdXAgcmVzOjB4JXgvMHglbGx4LyVwSy8lZFxuIiwKKwkJ CQljcnRjLT5iYXNlLmlkLCBkdXBfcnAtPnNlcXVlbmNlX2lkLAorCQkJCWR1cF9yZXMtPnR5cGUs IGR1cF9yZXMtPnRhZywgZHVwX3Jlcy0+dmFsLAorCQkJCWF0b21pY19yZWFkKCZkdXBfcmVzLT5y ZWZjb3VudCkpOworCQlsaXN0X2FkZF90YWlsKCZkdXBfcmVzLT5saXN0LCAmZHVwX3JwLT5yZXNf bGlzdCk7CisJCWlmIChkdXBfcmVzLT5vcHMuZ2V0KQorCQkJZHVwX3Jlcy0+b3BzLmdldChkdXBf cmVzLT52YWwsIDAsIC0xKTsKKwl9CisKKwlkdXBfcnAtPnJwX2xvY2sgPSBycC0+cnBfbG9jazsK KwlkdXBfcnAtPnJwX2hlYWQgPSBycC0+cnBfaGVhZDsKKwlJTklUX0xJU1RfSEVBRCgmZHVwX3Jw LT5ycF9saXN0KTsKKwlsaXN0X2FkZF90YWlsKCZkdXBfcnAtPnJwX2xpc3QsIHJwLT5ycF9oZWFk KTsKKwltdXRleF91bmxvY2socnAtPnJwX2xvY2spOworfQorCisvKioKKyAqIF9kcHVfY3J0Y19y cF9yZXNldCAtIHJlc2V0IHJlc291cmNlIHBvb2wgYWZ0ZXIgYWxsb2NhdGlvbgorICogQHJwOiBQ b2ludGVyIHRvIG9yaWdpbmFsIHJlc291cmNlIHBvb2wKKyAqIEBycF9sb2NrOiBQb2ludGVyIHRv IHNlcmlhbGl6YXRpb24gcmVzb3VyY2UgcG9vbCBsb2NrCisgKiBAcnBfaGVhZDogUG9pbnRlciB0 byBjcnRjIHJlc291cmNlIHBvb2wgaGVhZAorICogcmV0dXJuOiBOb25lCisgKi8KK3N0YXRpYyB2 b2lkIF9kcHVfY3J0Y19ycF9yZXNldChzdHJ1Y3QgZHB1X2NydGNfcmVzcG9vbCAqcnAsCisJCXN0 cnVjdCBtdXRleCAqcnBfbG9jaywgc3RydWN0IGxpc3RfaGVhZCAqcnBfaGVhZCkKK3sKKwlpZiAo IXJwIHx8ICFycF9sb2NrIHx8ICFycF9oZWFkKSB7CisJCURQVV9FUlJPUigiaW52YWxpZCByZXNv dXJjZSBwb29sXG4iKTsKKwkJcmV0dXJuOworCX0KKworCW11dGV4X2xvY2socnBfbG9jayk7CisJ cnAtPnJwX2xvY2sgPSBycF9sb2NrOworCXJwLT5ycF9oZWFkID0gcnBfaGVhZDsKKwlJTklUX0xJ U1RfSEVBRCgmcnAtPnJwX2xpc3QpOworCXJwLT5zZXF1ZW5jZV9pZCA9IDA7CisJSU5JVF9MSVNU X0hFQUQoJnJwLT5yZXNfbGlzdCk7CisJcnAtPm9wcy5nZXQgPSBfZHB1X2NydGNfaHdfYmxrX2dl dDsKKwlycC0+b3BzLnB1dCA9IF9kcHVfY3J0Y19od19ibGtfcHV0OworCWxpc3RfYWRkX3RhaWwo JnJwLT5ycF9saXN0LCBycC0+cnBfaGVhZCk7CisJbXV0ZXhfdW5sb2NrKHJwX2xvY2spOworfQor CisvKioKKyAqIF9kcHVfY3J0Y19ycF9hZGRfbm9fbG9jayAtIGFkZCBnaXZlbiByZXNvdXJjZSB0 byByZXNvdXJjZSBwb29sIHdpdGhvdXQgbG9jaworICogQHJwOiBQb2ludGVyIHRvIG9yaWdpbmFs IHJlc291cmNlIHBvb2wKKyAqIEB0eXBlOiBSZXNvdXJjZSB0eXBlCisgKiBAdGFnOiBTZWFyY2gg dGFnIGZvciBnaXZlbiByZXNvdXJjZQorICogQHZhbDogUmVzb3VyY2UgaGFuZGxlCisgKiBAb3Bz OiBSZXNvdXJjZSBjYWxsYmFjayBvcGVyYXRpb25zCisgKiByZXR1cm46IDAgaWYgc3VjY2Vzczsg ZXJyb3IgY29kZSBvdGhlcndpc2UKKyAqLworc3RhdGljIGludCBfZHB1X2NydGNfcnBfYWRkX25v X2xvY2soc3RydWN0IGRwdV9jcnRjX3Jlc3Bvb2wgKnJwLCB1MzIgdHlwZSwKKwkJdTY0IHRhZywg dm9pZCAqdmFsLCBzdHJ1Y3QgZHB1X2NydGNfcmVzX29wcyAqb3BzKQoreworCXN0cnVjdCBkcHVf Y3J0Y19yZXMgKnJlczsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisKKwlpZiAoIXJwIHx8ICFv cHMpIHsKKwkJRFBVX0VSUk9SKCJpbnZhbGlkIHJlc291cmNlIHBvb2wvb3BzXG4iKTsKKwkJcmV0 dXJuIC1FSU5WQUw7CisJfQorCisJY3J0YyA9IF9kcHVfY3J0Y19ycF90b19jcnRjKHJwKTsKKwlp ZiAoIWNydGMpIHsKKwkJRFBVX0VSUk9SKCJpbnZhbGlkIGNydGNcbiIpOworCQlyZXR1cm4gLUVJ TlZBTDsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcywgJnJwLT5yZXNfbGlzdCwgbGlz dCkgeworCQlpZiAocmVzLT50eXBlICE9IHR5cGUgfHwgcmVzLT50YWcgIT0gdGFnKQorCQkJY29u dGludWU7CisJCURQVV9FUlJPUigiY3J0YyVkLiV1IGFscmVhZHkgZXhpc3QgcmVzOjB4JXgvMHgl bGx4LyVwSy8lZFxuIiwKKwkJCQljcnRjLT5iYXNlLmlkLCBycC0+c2VxdWVuY2VfaWQsCisJCQkJ cmVzLT50eXBlLCByZXMtPnRhZywgcmVzLT52YWwsCisJCQkJYXRvbWljX3JlYWQoJnJlcy0+cmVm Y291bnQpKTsKKwkJcmV0dXJuIC1FRVhJU1Q7CisJfQorCXJlcyA9IGt6YWxsb2Moc2l6ZW9mKHN0 cnVjdCBkcHVfY3J0Y19yZXMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJlcykKKwkJcmV0dXJuIC1F Tk9NRU07CisJSU5JVF9MSVNUX0hFQUQoJnJlcy0+bGlzdCk7CisJYXRvbWljX3NldCgmcmVzLT5y ZWZjb3VudCwgMSk7CisJcmVzLT50eXBlID0gdHlwZTsKKwlyZXMtPnRhZyA9IHRhZzsKKwlyZXMt PnZhbCA9IHZhbDsKKwlyZXMtPm9wcyA9ICpvcHM7CisJbGlzdF9hZGRfdGFpbCgmcmVzLT5saXN0 LCAmcnAtPnJlc19saXN0KTsKKwlEUFVfREVCVUcoImNydGMlZC4ldSBhZGRlZCByZXM6MHgleC8w eCVsbHhcbiIsCisJCQljcnRjLT5iYXNlLmlkLCBycC0+c2VxdWVuY2VfaWQsIHR5cGUsIHRhZyk7 CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogX2RwdV9jcnRjX3JwX2FkZCAtIGFkZCBnaXZlbiBy ZXNvdXJjZSB0byByZXNvdXJjZSBwb29sCisgKiBAcnA6IFBvaW50ZXIgdG8gb3JpZ2luYWwgcmVz b3VyY2UgcG9vbAorICogQHR5cGU6IFJlc291cmNlIHR5cGUKKyAqIEB0YWc6IFNlYXJjaCB0YWcg Zm9yIGdpdmVuIHJlc291cmNlCisgKiBAdmFsOiBSZXNvdXJjZSBoYW5kbGUKKyAqIEBvcHM6IFJl c291cmNlIGNhbGxiYWNrIG9wZXJhdGlvbnMKKyAqIHJldHVybjogMCBpZiBzdWNjZXNzOyBlcnJv ciBjb2RlIG90aGVyd2lzZQorICovCitzdGF0aWMgaW50IF9kcHVfY3J0Y19ycF9hZGQoc3RydWN0 IGRwdV9jcnRjX3Jlc3Bvb2wgKnJwLCB1MzIgdHlwZSwgdTY0IHRhZywKKwkJdm9pZCAqdmFsLCBz dHJ1Y3QgZHB1X2NydGNfcmVzX29wcyAqb3BzKQoreworCWludCByYzsKKworCWlmICghcnApIHsK KwkJRFBVX0VSUk9SKCJpbnZhbGlkIHJlc291cmNlIHBvb2xcbiIpOworCQlyZXR1cm4gLUVJTlZB TDsKKwl9CisKKwltdXRleF9sb2NrKHJwLT5ycF9sb2NrKTsKKwlyYyA9IF9kcHVfY3J0Y19ycF9h ZGRfbm9fbG9jayhycCwgdHlwZSwgdGFnLCB2YWwsIG9wcyk7CisJbXV0ZXhfdW5sb2NrKHJwLT5y cF9sb2NrKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogX2RwdV9jcnRjX3JwX2dldCAtIGxv b2t1cCB0aGUgcmVzb3VyY2UgZnJvbSBnaXZlbiByZXNvdXJjZSBwb29sIGFuZCBvYnRhaW4KKyAq CWlmIGF2YWlsYWJsZTsgb3RoZXJ3aXNlLCBvYnRhaW4gcmVzb3VyY2UgZnJvbSBnbG9iYWwgcG9v bAorICogQHJwOiBQb2ludGVyIHRvIG9yaWdpbmFsIHJlc291cmNlIHBvb2wKKyAqIEB0eXBlOiBS ZXNvdXJjZSB0eXBlCisgKiBAdGFnOiAgU2VhcmNoIHRhZyBmb3IgZ2l2ZW4gcmVzb3VyY2UKKyAq IHJldHVybjogUmVzb3VyY2UgaGFuZGxlIGlmIHN1Y2Nlc3M7IHBvaW50ZXIgZXJyb3Igb3IgbnVs bCBvdGhlcndpc2UKKyAqLworc3RhdGljIHZvaWQgKl9kcHVfY3J0Y19ycF9nZXQoc3RydWN0IGRw dV9jcnRjX3Jlc3Bvb2wgKnJwLCB1MzIgdHlwZSwgdTY0IHRhZykKK3sKKwlzdHJ1Y3QgZHB1X2Ny dGNfcmVzcG9vbCAqb2xkX3JwOworCXN0cnVjdCBkcHVfY3J0Y19yZXMgKnJlczsKKwl2b2lkICp2 YWwgPSBOVUxMOworCWludCByYzsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisKKwlpZiAoIXJw KSB7CisJCURQVV9FUlJPUigiaW52YWxpZCByZXNvdXJjZSBwb29sXG4iKTsKKwkJcmV0dXJuIE5V TEw7CisJfQorCisJY3J0YyA9IF9kcHVfY3J0Y19ycF90b19jcnRjKHJwKTsKKwlpZiAoIWNydGMp IHsKKwkJRFBVX0VSUk9SKCJpbnZhbGlkIGNydGNcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisK KwltdXRleF9sb2NrKHJwLT5ycF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcywgJnJw LT5yZXNfbGlzdCwgbGlzdCkgeworCQlpZiAocmVzLT50eXBlICE9IHR5cGUgfHwgcmVzLT50YWcg IT0gdGFnKQorCQkJY29udGludWU7CisJCURQVV9ERUJVRygiY3J0YyVkLiV1IGZvdW5kIHJlczow eCV4LzB4JWxseC8lcEsvJWRcbiIsCisJCQkJY3J0Yy0+YmFzZS5pZCwgcnAtPnNlcXVlbmNlX2lk LAorCQkJCXJlcy0+dHlwZSwgcmVzLT50YWcsIHJlcy0+dmFsLAorCQkJCWF0b21pY19yZWFkKCZy ZXMtPnJlZmNvdW50KSk7CisJCWF0b21pY19pbmMoJnJlcy0+cmVmY291bnQpOworCQlyZXMtPmZs YWdzICY9IH5EUFVfQ1JUQ19SRVNfRkxBR19GUkVFOworCQltdXRleF91bmxvY2socnAtPnJwX2xv Y2spOworCQlyZXR1cm4gcmVzLT52YWw7CisJfQorCWxpc3RfZm9yX2VhY2hfZW50cnkocmVzLCAm cnAtPnJlc19saXN0LCBsaXN0KSB7CisJCWlmIChyZXMtPnR5cGUgIT0gdHlwZSB8fCAhKHJlcy0+ ZmxhZ3MgJiBEUFVfQ1JUQ19SRVNfRkxBR19GUkVFKSkKKwkJCWNvbnRpbnVlOworCQlEUFVfREVC VUcoImNydGMlZC4ldSByZXRhZyByZXM6MHgleC8weCVsbHgvJXBLLyVkXG4iLAorCQkJCWNydGMt PmJhc2UuaWQsIHJwLT5zZXF1ZW5jZV9pZCwKKwkJCQlyZXMtPnR5cGUsIHJlcy0+dGFnLCByZXMt PnZhbCwKKwkJCQlhdG9taWNfcmVhZCgmcmVzLT5yZWZjb3VudCkpOworCQlhdG9taWNfaW5jKCZy ZXMtPnJlZmNvdW50KTsKKwkJcmVzLT50YWcgPSB0YWc7CisJCXJlcy0+ZmxhZ3MgJj0gfkRQVV9D UlRDX1JFU19GTEFHX0ZSRUU7CisJCW11dGV4X3VubG9jayhycC0+cnBfbG9jayk7CisJCXJldHVy biByZXMtPnZhbDsKKwl9CisJLyogbm90IGluIHRoaXMgcnAsIHRyeSB0byBncmFiIGZyb20gZ2xv YmFsIHBvb2wgKi8KKwlpZiAocnAtPm9wcy5nZXQpCisJCXZhbCA9IHJwLT5vcHMuZ2V0KE5VTEws IHR5cGUsIC0xKTsKKwlpZiAoIUlTX0VSUl9PUl9OVUxMKHZhbCkpCisJCWdvdG8gYWRkX3JlczsK KwkvKgorCSAqIFNlYXJjaCBvbGRlciByZXNvdXJjZSBwb29scyBmb3IgaHcgYmxrIHdpdGggbWF0 Y2hpbmcgdHlwZSwKKwkgKiBuZWNlc3Nhcnkgd2hlbiByZXNvdXJjZSBpcyBiZWluZyB1c2VkIGJ5 IHRoaXMgb2JqZWN0LAorCSAqIGJ1dCBpbiBwcmV2aW91cyBzdGF0ZXMgbm90IHlldCBjbGVhbmVk IHVwLgorCSAqCisJICogVGhpcyBlbmFibGVzIHNlYXJjaGluZyBvZiBhbGwgcmVzb3VyY2VzIGN1 cnJlbnRseSBvd25lZAorCSAqIGJ5IHRoaXMgY3J0YyBldmVuIHRob3VnaCB0aGUgcmVzb3VyY2Ug bWlnaHQgbm90IGJlIHVzZWQKKwkgKiBpbiB0aGUgY3VycmVudCBhdG9taWMgc3RhdGUuIFRoaXMg YWxsb3dzIHRob3NlIHJlc291cmNlcworCSAqIHRvIGJlIHJlLWFjcXVpcmVkIGJ5IHRoZSBuZXcg YXRvbWljIHN0YXRlIGltbWVkaWF0ZWx5CisJICogd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgcmVz b3VyY2VzIHRvIGJlIGZ1bGx5IHJlbGVhc2VkLgorCSAqLworCWVsc2UgaWYgKElTX0VSUl9PUl9O VUxMKHZhbCkgJiYgKHR5cGUgPCBEUFVfSFdfQkxLX01BWCkpIHsKKwkJbGlzdF9mb3JfZWFjaF9l bnRyeShvbGRfcnAsIHJwLT5ycF9oZWFkLCBycF9saXN0KSB7CisJCQlpZiAob2xkX3JwID09IHJw KQorCQkJCWNvbnRpbnVlOworCisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcywgJm9sZF9ycC0+ cmVzX2xpc3QsIGxpc3QpIHsKKwkJCQlpZiAocmVzLT50eXBlICE9IHR5cGUpCisJCQkJCWNvbnRp bnVlOworCQkJCURSTV9ERUJVR19LTVMoImNydGMlZC4ldSBmb3VuZCByZXM6MHgleC8vJXBLLyAi CisJCQkJCSAgICAgICJpbiBjcnRjJWQuJWRcbiIsCisJCQkJCSAgICAgIGNydGMtPmJhc2UuaWQs IHJwLT5zZXF1ZW5jZV9pZCwKKwkJCQkJICAgICAgcmVzLT50eXBlLCByZXMtPnZhbCwKKwkJCQkJ ICAgICAgY3J0Yy0+YmFzZS5pZCwKKwkJCQkJICAgICAgb2xkX3JwLT5zZXF1ZW5jZV9pZCk7CisJ CQkJaWYgKHJlcy0+b3BzLmdldCkKKwkJCQkJcmVzLT5vcHMuZ2V0KHJlcy0+dmFsLCAwLCAtMSk7 CisJCQkJdmFsID0gcmVzLT52YWw7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWlmICghSVNfRVJS X09SX05VTEwodmFsKSkKKwkJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoSVNfRVJSX09SX05VTEwo dmFsKSkgeworCQlEUFVfREVCVUcoImNydGMlZC4ldSBmYWlsZWQgdG8gZ2V0IHJlczoweCV4Ly9c biIsCisJCQkJY3J0Yy0+YmFzZS5pZCwgcnAtPnNlcXVlbmNlX2lkLCB0eXBlKTsKKwkJbXV0ZXhf dW5sb2NrKHJwLT5ycF9sb2NrKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorYWRkX3JlczoKKwlyYyA9 IF9kcHVfY3J0Y19ycF9hZGRfbm9fbG9jayhycCwgdHlwZSwgdGFnLCB2YWwsICZycC0+b3BzKTsK KwlpZiAocmMpIHsKKwkJRFBVX0VSUk9SKCJjcnRjJWQuJXUgZmFpbGVkIHRvIGFkZCByZXM6MHgl eC8weCVsbHhcbiIsCisJCQkJY3J0Yy0+YmFzZS5pZCwgcnAtPnNlcXVlbmNlX2lkLCB0eXBlLCB0 YWcpOworCQlpZiAocnAtPm9wcy5wdXQpCisJCQlycC0+b3BzLnB1dCh2YWwpOworCQl2YWwgPSBO VUxMOworCX0KKwltdXRleF91bmxvY2socnAtPnJwX2xvY2spOworCXJldHVybiB2YWw7Cit9CisK Ky8qKgorICogX2RwdV9jcnRjX3JwX3B1dCAtIHJldHVybiBnaXZlbiByZXNvdXJjZSB0byByZXNv dXJjZSBwb29sCisgKiBAcnA6IFBvaW50ZXIgdG8gb3JpZ2luYWwgcmVzb3VyY2UgcG9vbAorICog QHR5cGU6IFJlc291cmNlIHR5cGUKKyAqIEB0YWc6IFNlYXJjaCB0YWcgZm9yIGdpdmVuIHJlc291 cmNlCisgKiByZXR1cm46IE5vbmUKKyAqLworc3RhdGljIHZvaWQgX2RwdV9jcnRjX3JwX3B1dChz dHJ1Y3QgZHB1X2NydGNfcmVzcG9vbCAqcnAsIHUzMiB0eXBlLCB1NjQgdGFnKQoreworCXN0cnVj dCBkcHVfY3J0Y19yZXMgKnJlcywgKm5leHQ7CisJc3RydWN0IGRybV9jcnRjICpjcnRjOworCisJ aWYgKCFycCkgeworCQlEUFVfRVJST1IoImludmFsaWQgcmVzb3VyY2UgcG9vbFxuIik7CisJCXJl dHVybjsKKwl9CisKKwljcnRjID0gX2RwdV9jcnRjX3JwX3RvX2NydGMocnApOworCWlmICghY3J0 YykgeworCQlEUFVfRVJST1IoImludmFsaWQgY3J0Y1xuIik7CisJCXJldHVybjsKKwl9CisKKwlt dXRleF9sb2NrKHJwLT5ycF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVzLCBu ZXh0LCAmcnAtPnJlc19saXN0LCBsaXN0KSB7CisJCWlmIChyZXMtPnR5cGUgIT0gdHlwZSB8fCBy ZXMtPnRhZyAhPSB0YWcpCisJCQljb250aW51ZTsKKwkJRFBVX0RFQlVHKCJjcnRjJWQuJXUgZm91 bmQgcmVzOjB4JXgvMHglbGx4LyVwSy8lZFxuIiwKKwkJCQljcnRjLT5iYXNlLmlkLCBycC0+c2Vx dWVuY2VfaWQsCisJCQkJcmVzLT50eXBlLCByZXMtPnRhZywgcmVzLT52YWwsCisJCQkJYXRvbWlj X3JlYWQoJnJlcy0+cmVmY291bnQpKTsKKwkJaWYgKHJlcy0+ZmxhZ3MgJiBEUFVfQ1JUQ19SRVNf RkxBR19GUkVFKQorCQkJRFBVX0VSUk9SKAorCQkJCSJjcnRjJWQuJXUgYWxyZWFkeSBmcmVlIHJl czoweCV4LzB4JWxseC8lcEsvJWRcbiIsCisJCQkJCWNydGMtPmJhc2UuaWQsIHJwLT5zZXF1ZW5j ZV9pZCwKKwkJCQkJcmVzLT50eXBlLCByZXMtPnRhZywgcmVzLT52YWwsCisJCQkJCWF0b21pY19y ZWFkKCZyZXMtPnJlZmNvdW50KSk7CisJCWVsc2UgaWYgKGF0b21pY19kZWNfcmV0dXJuKCZyZXMt PnJlZmNvdW50KSA9PSAwKQorCQkJcmVzLT5mbGFncyB8PSBEUFVfQ1JUQ19SRVNfRkxBR19GUkVF OworCisJCW11dGV4X3VubG9jayhycC0+cnBfbG9jayk7CisJCXJldHVybjsKKwl9CisJRFBVX0VS Uk9SKCJjcnRjJWQuJXUgbm90IGZvdW5kIHJlczoweCV4LzB4JWxseFxuIiwKKwkJCWNydGMtPmJh c2UuaWQsIHJwLT5zZXF1ZW5jZV9pZCwgdHlwZSwgdGFnKTsKKwltdXRleF91bmxvY2socnAtPnJw X2xvY2spOworfQorCitpbnQgZHB1X2NydGNfcmVzX2FkZChzdHJ1Y3QgZHJtX2NydGNfc3RhdGUg KnN0YXRlLCB1MzIgdHlwZSwgdTY0IHRhZywKKwkJdm9pZCAqdmFsLCBzdHJ1Y3QgZHB1X2NydGNf cmVzX29wcyAqb3BzKQoreworCXN0cnVjdCBkcHVfY3J0Y19yZXNwb29sICpycDsKKworCWlmICgh c3RhdGUpIHsKKwkJRFBVX0VSUk9SKCJpbnZhbGlkIHBhcmFtZXRlcnNcbiIpOworCQlyZXR1cm4g LUVJTlZBTDsKKwl9CisKKwlycCA9ICZ0b19kcHVfY3J0Y19zdGF0ZShzdGF0ZSktPnJwOworCXJl dHVybiBfZHB1X2NydGNfcnBfYWRkKHJwLCB0eXBlLCB0YWcsIHZhbCwgb3BzKTsKK30KKwordm9p ZCAqZHB1X2NydGNfcmVzX2dldChzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlLCB1MzIgdHlw ZSwgdTY0IHRhZykKK3sKKwlzdHJ1Y3QgZHB1X2NydGNfcmVzcG9vbCAqcnA7CisJdm9pZCAqdmFs OworCisJaWYgKCFzdGF0ZSkgeworCQlEUFVfRVJST1IoImludmFsaWQgcGFyYW1ldGVyc1xuIik7 CisJCXJldHVybiBOVUxMOworCX0KKworCXJwID0gJnRvX2RwdV9jcnRjX3N0YXRlKHN0YXRlKS0+ cnA7CisJdmFsID0gX2RwdV9jcnRjX3JwX2dldChycCwgdHlwZSwgdGFnKTsKKwlpZiAoSVNfRVJS KHZhbCkpIHsKKwkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gZ2V0IHJlcyB0eXBlOjB4JXg6MHglbGx4 XG4iLAorCQkJCXR5cGUsIHRhZyk7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiB2YWw7 Cit9CisKK3ZvaWQgZHB1X2NydGNfcmVzX3B1dChzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRl LCB1MzIgdHlwZSwgdTY0IHRhZykKK3sKKwlzdHJ1Y3QgZHB1X2NydGNfcmVzcG9vbCAqcnA7CisK KwlpZiAoIXN0YXRlKSB7CisJCURQVV9FUlJPUigiaW52YWxpZCBwYXJhbWV0ZXJzXG4iKTsKKwkJ cmV0dXJuOworCX0KKworCXJwID0gJnRvX2RwdV9jcnRjX3N0YXRlKHN0YXRlKS0+cnA7CisJX2Rw dV9jcnRjX3JwX3B1dChycCwgdHlwZSwgdGFnKTsKK30KKworc3RhdGljIHZvaWQgZHB1X2NydGNf ZGVzdHJveShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IGRwdV9jcnRjICpkcHVf Y3J0YyA9IHRvX2RwdV9jcnRjKGNydGMpOworCisJRFBVX0RFQlVHKCJcbiIpOworCisJaWYgKCFj cnRjKQorCQlyZXR1cm47CisKKwlkcHVfY3J0Yy0+cGhhbmRsZSA9IE5VTEw7CisKKwlkcm1fY3J0 Y19jbGVhbnVwKGNydGMpOworCW11dGV4X2Rlc3Ryb3koJmRwdV9jcnRjLT5jcnRjX2xvY2spOwor CWtmcmVlKGRwdV9jcnRjKTsKK30KKworc3RhdGljIHZvaWQgX2RwdV9jcnRjX3NldHVwX2JsZW5k X2NmZyhzdHJ1Y3QgZHB1X2NydGNfbWl4ZXIgKm1peGVyLAorCQlzdHJ1Y3QgZHB1X3BsYW5lX3N0 YXRlICpwc3RhdGUpCit7CisJc3RydWN0IGRwdV9od19taXhlciAqbG0gPSBtaXhlci0+aHdfbG07 CisKKwkvKiBkZWZhdWx0IHRvIG9wYXF1ZSBibGVuZGluZyAqLworCWxtLT5vcHMuc2V0dXBfYmxl bmRfY29uZmlnKGxtLCBwc3RhdGUtPnN0YWdlLCAwWEZGLCAwLAorCQkJCURQVV9CTEVORF9GR19B TFBIQV9GR19DT05TVCB8CisJCQkJRFBVX0JMRU5EX0JHX0FMUEhBX0JHX0NPTlNUKTsKK30KKwor c3RhdGljIHZvaWQgX2RwdV9jcnRjX3Byb2dyYW1fbG1fb3V0cHV0X3JvaShzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMpCit7CisJc3RydWN0IGRwdV9jcnRjICpkcHVfY3J0YzsKKwlzdHJ1Y3QgZHB1X2Ny dGNfc3RhdGUgKmNydGNfc3RhdGU7CisJaW50IGxtX2lkeCwgbG1faG9yaXpfcG9zaXRpb247CisK KwlkcHVfY3J0YyA9IHRvX2RwdV9jcnRjKGNydGMpOworCWNydGNfc3RhdGUgPSB0b19kcHVfY3J0 Y19zdGF0ZShjcnRjLT5zdGF0ZSk7CisKKwlsbV9ob3Jpel9wb3NpdGlvbiA9IDA7CisJZm9yIChs bV9pZHggPSAwOyBsbV9pZHggPCBkcHVfY3J0Yy0+bnVtX21peGVyczsgbG1faWR4KyspIHsKKwkJ Y29uc3Qgc3RydWN0IGRybV9yZWN0ICpsbV9yb2kgPSAmY3J0Y19zdGF0ZS0+bG1fYm91bmRzW2xt X2lkeF07CisJCXN0cnVjdCBkcHVfaHdfbWl4ZXIgKmh3X2xtID0gZHB1X2NydGMtPm1peGVyc1ts bV9pZHhdLmh3X2xtOworCQlzdHJ1Y3QgZHB1X2h3X21peGVyX2NmZyBjZmc7CisKKwkJaWYgKCFs bV9yb2kgfHwgIWRybV9yZWN0X3Zpc2libGUobG1fcm9pKSkKKwkJCWNvbnRpbnVlOworCisJCWNm Zy5vdXRfd2lkdGggPSBkcm1fcmVjdF93aWR0aChsbV9yb2kpOworCQljZmcub3V0X2hlaWdodCA9 IGRybV9yZWN0X2hlaWdodChsbV9yb2kpOworCQljZmcucmlnaHRfbWl4ZXIgPSBsbV9ob3Jpel9w b3NpdGlvbisrOworCQljZmcuZmxhZ3MgPSAwOworCQlod19sbS0+b3BzLnNldHVwX21peGVyX291 dChod19sbSwgJmNmZyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBfZHB1X2NydGNfYmxlbmRfc2V0 dXBfbWl4ZXIoc3RydWN0IGRybV9jcnRjICpjcnRjLAorCXN0cnVjdCBkcHVfY3J0YyAqZHB1X2Ny dGMsIHN0cnVjdCBkcHVfY3J0Y19taXhlciAqbWl4ZXIpCit7CisJc3RydWN0IGRybV9wbGFuZSAq cGxhbmU7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7CisJc3RydWN0IGRybV9wbGFuZV9z dGF0ZSAqc3RhdGU7CisJc3RydWN0IGRwdV9jcnRjX3N0YXRlICpjc3RhdGU7CisJc3RydWN0IGRw dV9wbGFuZV9zdGF0ZSAqcHN0YXRlID0gTlVMTDsKKwlzdHJ1Y3QgZHB1X2Zvcm1hdCAqZm9ybWF0 OworCXN0cnVjdCBkcHVfaHdfY3RsICpjdGw7CisJc3RydWN0IGRwdV9od19taXhlciAqbG07CisJ c3RydWN0IGRwdV9od19zdGFnZV9jZmcgKnN0YWdlX2NmZzsKKworCXUzMiBmbHVzaF9tYXNrOwor CXVpbnQzMl90IHN0YWdlX2lkeCwgbG1faWR4OworCWludCB6cG9zX2NudFtEUFVfU1RBR0VfTUFY ICsgMV0gPSB7IDAgfTsKKwlib29sIGJnX2FscGhhX2VuYWJsZSA9IGZhbHNlOworCisJaWYgKCFk cHVfY3J0YyB8fCAhbWl4ZXIpIHsKKwkJRFBVX0VSUk9SKCJpbnZhbGlkIGRwdV9jcnRjIG9yIG1p eGVyXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWN0bCA9IG1peGVyLT5od19jdGw7CisJbG0gPSBt aXhlci0+aHdfbG07CisJc3RhZ2VfY2ZnID0gJmRwdV9jcnRjLT5zdGFnZV9jZmc7CisJY3N0YXRl ID0gdG9fZHB1X2NydGNfc3RhdGUoY3J0Yy0+c3RhdGUpOworCisJZHJtX2F0b21pY19jcnRjX2Zv cl9lYWNoX3BsYW5lKHBsYW5lLCBjcnRjKSB7CisJCXN0YXRlID0gcGxhbmUtPnN0YXRlOworCQlp ZiAoIXN0YXRlKQorCQkJY29udGludWU7CisKKwkJcHN0YXRlID0gdG9fZHB1X3BsYW5lX3N0YXRl KHN0YXRlKTsKKwkJZmIgPSBzdGF0ZS0+ZmI7CisKKwkJZHB1X3BsYW5lX2dldF9jdGxfZmx1c2go cGxhbmUsIGN0bCwgJmZsdXNoX21hc2spOworCisJCURQVV9ERUJVRygiY3J0YyAlZCBzdGFnZTol ZCAtIHBsYW5lICVkIHNzcHAgJWQgZmIgJWRcbiIsCisJCQkJY3J0Yy0+YmFzZS5pZCwKKwkJCQlw c3RhdGUtPnN0YWdlLAorCQkJCXBsYW5lLT5iYXNlLmlkLAorCQkJCWRwdV9wbGFuZV9waXBlKHBs YW5lKSAtIFNTUFBfVklHMCwKKwkJCQlzdGF0ZS0+ZmIgPyBzdGF0ZS0+ZmItPmJhc2UuaWQgOiAt MSk7CisKKwkJZm9ybWF0ID0gdG9fZHB1X2Zvcm1hdChtc21fZnJhbWVidWZmZXJfZm9ybWF0KHBz dGF0ZS0+YmFzZS5mYikpOworCQlpZiAoIWZvcm1hdCkgeworCQkJRFBVX0VSUk9SKCJpbnZhbGlk IGZvcm1hdFxuIik7CisJCQlyZXR1cm47CisJCX0KKworCQlpZiAocHN0YXRlLT5zdGFnZSA9PSBE UFVfU1RBR0VfQkFTRSAmJiBmb3JtYXQtPmFscGhhX2VuYWJsZSkKKwkJCWJnX2FscGhhX2VuYWJs ZSA9IHRydWU7CisKKwkJc3RhZ2VfaWR4ID0genBvc19jbnRbcHN0YXRlLT5zdGFnZV0rKzsKKwkJ c3RhZ2VfY2ZnLT5zdGFnZVtwc3RhdGUtPnN0YWdlXVtzdGFnZV9pZHhdID0KKwkJCQkJZHB1X3Bs YW5lX3BpcGUocGxhbmUpOworCQlzdGFnZV9jZmctPm11bHRpcmVjdF9pbmRleFtwc3RhdGUtPnN0 YWdlXVtzdGFnZV9pZHhdID0KKwkJCQkJcHN0YXRlLT5tdWx0aXJlY3RfaW5kZXg7CisKKwkJdHJh Y2VfZHB1X2NydGNfc2V0dXBfbWl4ZXIoRFJNSUQoY3J0YyksIERSTUlEKHBsYW5lKSwKKwkJCQkJ ICAgc3RhdGUsIHBzdGF0ZSwgc3RhZ2VfaWR4LAorCQkJCQkgICBkcHVfcGxhbmVfcGlwZShwbGFu ZSkgLSBTU1BQX1ZJRzAsCisJCQkJCSAgIGZvcm1hdC0+YmFzZS5waXhlbF9mb3JtYXQsCisJCQkJ CSAgIGZiID8gZmItPm1vZGlmaWVyIDogMCk7CisKKwkJLyogYmxlbmQgY29uZmlnIHVwZGF0ZSAq LworCQlmb3IgKGxtX2lkeCA9IDA7IGxtX2lkeCA8IGRwdV9jcnRjLT5udW1fbWl4ZXJzOyBsbV9p ZHgrKykgeworCQkJX2RwdV9jcnRjX3NldHVwX2JsZW5kX2NmZyhtaXhlciArIGxtX2lkeCwgcHN0 YXRlKTsKKworCQkJbWl4ZXJbbG1faWR4XS5mbHVzaF9tYXNrIHw9IGZsdXNoX21hc2s7CisKKwkJ CWlmIChiZ19hbHBoYV9lbmFibGUgJiYgIWZvcm1hdC0+YWxwaGFfZW5hYmxlKQorCQkJCW1peGVy W2xtX2lkeF0ubWl4ZXJfb3BfbW9kZSA9IDA7CisJCQllbHNlCisJCQkJbWl4ZXJbbG1faWR4XS5t aXhlcl9vcF9tb2RlIHw9CisJCQkJCQkxIDw8IHBzdGF0ZS0+c3RhZ2U7CisJCX0KKwl9CisKKwkg X2RwdV9jcnRjX3Byb2dyYW1fbG1fb3V0cHV0X3JvaShjcnRjKTsKK30KKworLyoqCisgKiBfZHB1 X2NydGNfYmxlbmRfc2V0dXAgLSBjb25maWd1cmUgY3J0YyBtaXhlcnMKKyAqIEBjcnRjOiBQb2lu dGVyIHRvIGRybSBjcnRjIHN0cnVjdHVyZQorICovCitzdGF0aWMgdm9pZCBfZHB1X2NydGNfYmxl bmRfc2V0dXAoc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBkcHVfY3J0YyAqZHB1 X2NydGM7CisJc3RydWN0IGRwdV9jcnRjX3N0YXRlICpkcHVfY3J0Y19zdGF0ZTsKKwlzdHJ1Y3Qg ZHB1X2NydGNfbWl4ZXIgKm1peGVyOworCXN0cnVjdCBkcHVfaHdfY3RsICpjdGw7CisJc3RydWN0 IGRwdV9od19taXhlciAqbG07CisKKwlpbnQgaTsKKworCWlmICghY3J0YykKKwkJcmV0dXJuOwor CisJZHB1X2NydGMgPSB0b19kcHVfY3J0YyhjcnRjKTsKKwlkcHVfY3J0Y19zdGF0ZSA9IHRvX2Rw dV9jcnRjX3N0YXRlKGNydGMtPnN0YXRlKTsKKwltaXhlciA9IGRwdV9jcnRjLT5taXhlcnM7CisK KwlEUFVfREVCVUcoIiVzXG4iLCBkcHVfY3J0Yy0+bmFtZSk7CisKKwlpZiAoZHB1X2NydGMtPm51 bV9taXhlcnMgPiBDUlRDX0RVQUxfTUlYRVJTKSB7CisJCURQVV9FUlJPUigiaW52YWxpZCBudW1i ZXIgbWl4ZXJzOiAlZFxuIiwgZHB1X2NydGMtPm51bV9taXhlcnMpOworCQlyZXR1cm47CisJfQor CisJZm9yIChpID0gMDsgaSA8IGRwdV9jcnRjLT5udW1fbWl4ZXJzOyBpKyspIHsKKwkJaWYgKCFt aXhlcltpXS5od19sbSB8fCAhbWl4ZXJbaV0uaHdfY3RsKSB7CisJCQlEUFVfRVJST1IoImludmFs aWQgbG0gb3IgY3RsIGFzc2lnbmVkIHRvIG1peGVyXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCQlt aXhlcltpXS5taXhlcl9vcF9tb2RlID0gMDsKKwkJbWl4ZXJbaV0uZmx1c2hfbWFzayA9IDA7CisJ CWlmIChtaXhlcltpXS5od19jdGwtPm9wcy5jbGVhcl9hbGxfYmxlbmRzdGFnZXMpCisJCQltaXhl cltpXS5od19jdGwtPm9wcy5jbGVhcl9hbGxfYmxlbmRzdGFnZXMoCisJCQkJCW1peGVyW2ldLmh3 X2N0bCk7CisJfQorCisJLyogaW5pdGlhbGl6ZSBzdGFnZSBjZmcgKi8KKwltZW1zZXQoJmRwdV9j cnRjLT5zdGFnZV9jZmcsIDAsIHNpemVvZihzdHJ1Y3QgZHB1X2h3X3N0YWdlX2NmZykpOworCisJ X2RwdV9jcnRjX2JsZW5kX3NldHVwX21peGVyKGNydGMsIGRwdV9jcnRjLCBtaXhlcik7CisKKwlm b3IgKGkgPSAwOyBpIDwgZHB1X2NydGMtPm51bV9taXhlcnM7IGkrKykgeworCQljdGwgPSBtaXhl cltpXS5od19jdGw7CisJCWxtID0gbWl4ZXJbaV0uaHdfbG07CisKKwkJbG0tPm9wcy5zZXR1cF9h bHBoYV9vdXQobG0sIG1peGVyW2ldLm1peGVyX29wX21vZGUpOworCisJCW1peGVyW2ldLmZsdXNo X21hc2sgfD0gY3RsLT5vcHMuZ2V0X2JpdG1hc2tfbWl4ZXIoY3RsLAorCQkJbWl4ZXJbaV0uaHdf bG0tPmlkeCk7CisKKwkJLyogc3RhZ2UgY29uZmlnIGZsdXNoIG1hc2sgKi8KKwkJY3RsLT5vcHMu dXBkYXRlX3BlbmRpbmdfZmx1c2goY3RsLCBtaXhlcltpXS5mbHVzaF9tYXNrKTsKKworCQlEUFVf REVCVUcoImxtICVkLCBvcF9tb2RlIDB4JVgsIGN0bCAlZCwgZmx1c2ggbWFzayAweCV4XG4iLAor CQkJbWl4ZXJbaV0uaHdfbG0tPmlkeCAtIExNXzAsCisJCQltaXhlcltpXS5taXhlcl9vcF9tb2Rl LAorCQkJY3RsLT5pZHggLSBDVExfMCwKKwkJCW1peGVyW2ldLmZsdXNoX21hc2spOworCisJCWN0 bC0+b3BzLnNldHVwX2JsZW5kc3RhZ2UoY3RsLCBtaXhlcltpXS5od19sbS0+aWR4LAorCQkJJmRw dV9jcnRjLT5zdGFnZV9jZmcpOworCX0KK30KKworLyoqCisgKiAgX2RwdV9jcnRjX2NvbXBsZXRl X2ZsaXAgLSBzaWduYWwgcGVuZGluZyBwYWdlX2ZsaXAgZXZlbnRzCisgKiBBbnkgcGVuZGluZyB2 YmxhbmsgZXZlbnRzIGFyZSBhZGRlZCB0byB0aGUgdmJsYW5rX2V2ZW50X2xpc3QKKyAqIHNvIHRo YXQgdGhlIG5leHQgdmJsYW5rIGludGVycnVwdCBzaGFsbCBzaWduYWwgdGhlbS4KKyAqIEhvd2V2 ZXIgUEFHRV9GTElQIGV2ZW50cyBhcmUgbm90IGhhbmRsZWQgdGhyb3VnaCB0aGUgdmJsYW5rX2V2 ZW50X2xpc3QuCisgKiBUaGlzIEFQSSBzaWduYWxzIGFueSBwZW5kaW5nIFBBR0VfRkxJUCBldmVu dHMgcmVxdWVzdGVkIHRocm91Z2gKKyAqIERSTV9JT0NUTF9NT0RFX1BBR0VfRkxJUCBhbmQgYXJl IGNhY2hlZCBpbiB0aGUgZHB1X2NydGMtPmV2ZW50LgorICogaWYgZmlsZSE9TlVMTCwgdGhpcyBp cyBwcmVjbG9zZSBwb3RlbnRpYWwgY2FuY2VsLWZsaXAgcGF0aAorICogQGNydGM6IFBvaW50ZXIg dG8gZHJtIGNydGMgc3RydWN0dXJlCisgKiBAZmlsZTogUG9pbnRlciB0byBkcm0gZmlsZQorICov CitzdGF0aWMgdm9pZCBfZHB1X2NydGNfY29tcGxldGVfZmxpcChzdHJ1Y3QgZHJtX2NydGMgKmNy dGMsCisJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZHB1X2NydGMgKmRwdV9j cnRjID0gdG9fZHB1X2NydGMoY3J0Yyk7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMt PmRldjsKKwlzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50ICpldmVudDsKKwl1bnNpZ25l ZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+ZXZlbnRfbG9jaywgZmxh Z3MpOworCWV2ZW50ID0gZHB1X2NydGMtPmV2ZW50OworCWlmIChldmVudCkgeworCQkvKiBpZiBy ZWd1bGFyIHZibGFuayBjYXNlICghZmlsZSkgb3IgaWYgY2FuY2VsLWZsaXAgZnJvbQorCQkgKiBw cmVjbG9zZSBvbiBmaWxlIHRoYXQgcmVxdWVzdGVkIGZsaXAsIHRoZW4gc2VuZCB0aGUKKwkJICog ZXZlbnQ6CisJCSAqLworCQlpZiAoIWZpbGUgfHwgKGV2ZW50LT5iYXNlLmZpbGVfcHJpdiA9PSBm aWxlKSkgeworCQkJZHB1X2NydGMtPmV2ZW50ID0gTlVMTDsKKwkJCURSTV9ERUJVR19WQkwoIiVz OiBzZW5kIGV2ZW50OiAlcEtcbiIsCisJCQkJCQlkcHVfY3J0Yy0+bmFtZSwgZXZlbnQpOworCQkJ dHJhY2VfZHB1X2NydGNfY29tcGxldGVfZmxpcChEUk1JRChjcnRjKSk7CisJCQlkcm1fY3J0Y19z ZW5kX3ZibGFua19ldmVudChjcnRjLCBldmVudCk7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7Cit9CisKK2VudW0gZHB1X2ludGZfbW9k ZSBkcHVfY3J0Y19nZXRfaW50Zl9tb2RlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1 Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CisKKwlpZiAoIWNydGMgfHwgIWNydGMtPmRldikgewor CQlEUFVfRVJST1IoImludmFsaWQgY3J0Y1xuIik7CisJCXJldHVybiBJTlRGX01PREVfTk9ORTsK Kwl9CisKKwlkcm1fZm9yX2VhY2hfZW5jb2RlcihlbmNvZGVyLCBjcnRjLT5kZXYpCisJCWlmIChl bmNvZGVyLT5jcnRjID09IGNydGMpCisJCQlyZXR1cm4gZHB1X2VuY29kZXJfZ2V0X2ludGZfbW9k ZShlbmNvZGVyKTsKKworCXJldHVybiBJTlRGX01PREVfTk9ORTsKK30KKworc3RhdGljIHZvaWQg ZHB1X2NydGNfdmJsYW5rX2NiKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9jcnRjICpjcnRj ID0gKHN0cnVjdCBkcm1fY3J0YyAqKWRhdGE7CisJc3RydWN0IGRwdV9jcnRjICpkcHVfY3J0YyA9 IHRvX2RwdV9jcnRjKGNydGMpOworCisJLyoga2VlcCBzdGF0aXN0aWNzIG9uIHZibGFuayBjYWxs YmFjayAtIHdpdGggYXV0byByZXNldCB2aWEgZGVidWdmcyAqLworCWlmIChrdGltZV9jb21wYXJl KGRwdV9jcnRjLT52YmxhbmtfY2JfdGltZSwga3RpbWVfc2V0KDAsIDApKSA9PSAwKQorCQlkcHVf Y3J0Yy0+dmJsYW5rX2NiX3RpbWUgPSBrdGltZV9nZXQoKTsKKwllbHNlCisJCWRwdV9jcnRjLT52 YmxhbmtfY2JfY291bnQrKzsKKwlfZHB1X2NydGNfY29tcGxldGVfZmxpcChjcnRjLCBOVUxMKTsK Kwlkcm1fY3J0Y19oYW5kbGVfdmJsYW5rKGNydGMpOworCXRyYWNlX2RwdV9jcnRjX3ZibGFua19j YihEUk1JRChjcnRjKSk7Cit9CisKK3N0YXRpYyB2b2lkIGRwdV9jcnRjX2ZyYW1lX2V2ZW50X3dv cmsoc3RydWN0IGt0aHJlYWRfd29yayAqd29yaykKK3sKKwlzdHJ1Y3QgbXNtX2RybV9wcml2YXRl ICpwcml2OworCXN0cnVjdCBkcHVfY3J0Y19mcmFtZV9ldmVudCAqZmV2ZW50OworCXN0cnVjdCBk cm1fY3J0YyAqY3J0YzsKKwlzdHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRjOworCXN0cnVjdCBkcHVf a21zICpkcHVfa21zOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJYm9vbCBmcmFtZV9kb25lID0g ZmFsc2U7CisKKwlpZiAoIXdvcmspIHsKKwkJRFBVX0VSUk9SKCJpbnZhbGlkIHdvcmsgaGFuZGxl XG4iKTsKKwkJcmV0dXJuOworCX0KKworCWZldmVudCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1 Y3QgZHB1X2NydGNfZnJhbWVfZXZlbnQsIHdvcmspOworCWlmICghZmV2ZW50LT5jcnRjIHx8ICFm ZXZlbnQtPmNydGMtPnN0YXRlKSB7CisJCURQVV9FUlJPUigiaW52YWxpZCBjcnRjXG4iKTsKKwkJ cmV0dXJuOworCX0KKworCWNydGMgPSBmZXZlbnQtPmNydGM7CisJZHB1X2NydGMgPSB0b19kcHVf Y3J0YyhjcnRjKTsKKworCWRwdV9rbXMgPSBfZHB1X2NydGNfZ2V0X2ttcyhjcnRjKTsKKwlpZiAo IWRwdV9rbXMpIHsKKwkJRFBVX0VSUk9SKCJpbnZhbGlkIGttcyBoYW5kbGVcbiIpOworCQlyZXR1 cm47CisJfQorCXByaXYgPSBkcHVfa21zLT5kZXYtPmRldl9wcml2YXRlOworCURQVV9BVFJBQ0Vf QkVHSU4oImNydGNfZnJhbWVfZXZlbnQiKTsKKworCURSTV9ERUJVR19LTVMoImNydGMlZCBldmVu dDoldSB0czolbGxkXG4iLCBjcnRjLT5iYXNlLmlkLCBmZXZlbnQtPmV2ZW50LAorCQkJa3RpbWVf dG9fbnMoZmV2ZW50LT50cykpOworCisJaWYgKGZldmVudC0+ZXZlbnQgJiAoRFBVX0VOQ09ERVJf RlJBTUVfRVZFTlRfRE9ORQorCQkJCXwgRFBVX0VOQ09ERVJfRlJBTUVfRVZFTlRfRVJST1IKKwkJ CQl8IERQVV9FTkNPREVSX0ZSQU1FX0VWRU5UX1BBTkVMX0RFQUQpKSB7CisKKwkJaWYgKGF0b21p Y19yZWFkKCZkcHVfY3J0Yy0+ZnJhbWVfcGVuZGluZykgPCAxKSB7CisJCQkvKiB0aGlzIHNob3Vs ZCBub3QgaGFwcGVuICovCisJCQlEUk1fRVJST1IoImNydGMlZCBldjoldSB0czolbGxkIGZyYW1l X3BlbmRpbmc6JWRcbiIsCisJCQkJCWNydGMtPmJhc2UuaWQsCisJCQkJCWZldmVudC0+ZXZlbnQs CisJCQkJCWt0aW1lX3RvX25zKGZldmVudC0+dHMpLAorCQkJCQlhdG9taWNfcmVhZCgmZHB1X2Ny dGMtPmZyYW1lX3BlbmRpbmcpKTsKKwkJfSBlbHNlIGlmIChhdG9taWNfZGVjX3JldHVybigmZHB1 X2NydGMtPmZyYW1lX3BlbmRpbmcpID09IDApIHsKKwkJCS8qIHJlbGVhc2UgYmFuZHdpZHRoIGFu ZCBvdGhlciByZXNvdXJjZXMgKi8KKwkJCXRyYWNlX2RwdV9jcnRjX2ZyYW1lX2V2ZW50X2RvbmUo RFJNSUQoY3J0YyksCisJCQkJCQkJZmV2ZW50LT5ldmVudCk7CisJCQlkcHVfY29yZV9wZXJmX2Ny dGNfcmVsZWFzZV9idyhjcnRjKTsKKwkJfSBlbHNlIHsKKwkJCXRyYWNlX2RwdV9jcnRjX2ZyYW1l X2V2ZW50X21vcmVfcGVuZGluZyhEUk1JRChjcnRjKSwKKwkJCQkJCQkJZmV2ZW50LT5ldmVudCk7 CisJCX0KKworCQlpZiAoZmV2ZW50LT5ldmVudCAmIERQVV9FTkNPREVSX0ZSQU1FX0VWRU5UX0RP TkUpCisJCQlkcHVfY29yZV9wZXJmX2NydGNfdXBkYXRlKGNydGMsIDAsIGZhbHNlKTsKKworCQlp ZiAoZmV2ZW50LT5ldmVudCAmIChEUFVfRU5DT0RFUl9GUkFNRV9FVkVOVF9ET05FCisJCQkJCXwg RFBVX0VOQ09ERVJfRlJBTUVfRVZFTlRfRVJST1IpKQorCQkJZnJhbWVfZG9uZSA9IHRydWU7CisJ fQorCisJaWYgKGZldmVudC0+ZXZlbnQgJiBEUFVfRU5DT0RFUl9GUkFNRV9FVkVOVF9QQU5FTF9E RUFEKQorCQlEUFVfRVJST1IoImNydGMlZCB0czolbGxkIHJlY2VpdmVkIHBhbmVsIGRlYWQgZXZl bnRcbiIsCisJCQkJY3J0Yy0+YmFzZS5pZCwga3RpbWVfdG9fbnMoZmV2ZW50LT50cykpOworCisJ aWYgKGZyYW1lX2RvbmUpCisJCWNvbXBsZXRlX2FsbCgmZHB1X2NydGMtPmZyYW1lX2RvbmVfY29t cCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZHB1X2NydGMtPnNwaW5fbG9jaywgZmxhZ3MpOwor CWxpc3RfYWRkX3RhaWwoJmZldmVudC0+bGlzdCwgJmRwdV9jcnRjLT5mcmFtZV9ldmVudF9saXN0 KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcHVfY3J0Yy0+c3Bpbl9sb2NrLCBmbGFncyk7 CisJRFBVX0FUUkFDRV9FTkQoImNydGNfZnJhbWVfZXZlbnQiKTsKK30KKworLyoKKyAqIGRwdV9j cnRjX2ZyYW1lX2V2ZW50X2NiIC0gY3J0YyBmcmFtZSBldmVudCBjYWxsYmFjayBBUEkuIENSVEMg bW9kdWxlCisgKiByZWdpc3RlcnMgdGhpcyBBUEkgdG8gZW5jb2RlciBmb3IgYWxsIGZyYW1lIGV2 ZW50IGNhbGxiYWNrcyBsaWtlCisgKiBmcmFtZV9lcnJvciwgZnJhbWVfZG9uZSwgaWRsZV90aW1l b3V0LCBldGMuIEVuY29kZXIgbWF5IGNhbGwgZGlmZmVyZW50IGV2ZW50cworICogZnJvbSBkaWZm ZXJlbnQgY29udGV4dCAtIElSUSwgdXNlciB0aHJlYWQsIGNvbW1pdF90aHJlYWQsIGV0Yy4gRWFj aCBldmVudAorICogc2hvdWxkIGJlIGNhcmVmdWxseSByZXZpZXdlZCBhbmQgc2hvdWxkIGJlIHBy b2Nlc3NlZCBpbiBwcm9wZXIgdGFzayBjb250ZXh0CisgKiB0byBhdm9pZCBzY2hlZHVsaW4gZGVs YXkgb3IgcHJvcGVybHkgbWFuYWdlIHRoZSBpcnEgY29udGV4dCdzIGJvdHRvbSBoYWxmCisgKiBw cm9jZXNzaW5nLgorICovCitzdGF0aWMgdm9pZCBkcHVfY3J0Y19mcmFtZV9ldmVudF9jYih2b2lk ICpkYXRhLCB1MzIgZXZlbnQpCit7CisJc3RydWN0IGRybV9jcnRjICpjcnRjID0gKHN0cnVjdCBk cm1fY3J0YyAqKWRhdGE7CisJc3RydWN0IGRwdV9jcnRjICpkcHVfY3J0YzsKKwlzdHJ1Y3QgbXNt X2RybV9wcml2YXRlICpwcml2OworCXN0cnVjdCBkcHVfY3J0Y19mcmFtZV9ldmVudCAqZmV2ZW50 OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIGNydGNfaWQ7CisKKwlpZiAoIWNydGMgfHwg IWNydGMtPmRldiB8fCAhY3J0Yy0+ZGV2LT5kZXZfcHJpdmF0ZSkgeworCQlEUFVfRVJST1IoImlu dmFsaWQgcGFyYW1ldGVyc1xuIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBOb3RoaW5nIHRvIGRv IG9uIGlkbGUgZXZlbnQgKi8KKwlpZiAoZXZlbnQgJiBEUFVfRU5DT0RFUl9GUkFNRV9FVkVOVF9J RExFKQorCQlyZXR1cm47CisKKwlkcHVfY3J0YyA9IHRvX2RwdV9jcnRjKGNydGMpOworCXByaXYg PSBjcnRjLT5kZXYtPmRldl9wcml2YXRlOworCWNydGNfaWQgPSBkcm1fY3J0Y19pbmRleChjcnRj KTsKKworCXRyYWNlX2RwdV9jcnRjX2ZyYW1lX2V2ZW50X2NiKERSTUlEKGNydGMpLCBldmVudCk7 CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZHB1X2NydGMtPnNwaW5fbG9jaywgZmxhZ3MpOworCWZl dmVudCA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbCgmZHB1X2NydGMtPmZyYW1lX2V2ZW50X2xp c3QsCisJCQlzdHJ1Y3QgZHB1X2NydGNfZnJhbWVfZXZlbnQsIGxpc3QpOworCWlmIChmZXZlbnQp CisJCWxpc3RfZGVsX2luaXQoJmZldmVudC0+bGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSgmZHB1X2NydGMtPnNwaW5fbG9jaywgZmxhZ3MpOworCisJaWYgKCFmZXZlbnQpIHsKKwkJRFJN X0VSUk9SKCJjcnRjJWQgZXZlbnQgJWQgb3ZlcmZsb3dcbiIsIGNydGMtPmJhc2UuaWQsIGV2ZW50 KTsKKwkJcmV0dXJuOworCX0KKworCWZldmVudC0+ZXZlbnQgPSBldmVudDsKKwlmZXZlbnQtPmNy dGMgPSBjcnRjOworCWZldmVudC0+dHMgPSBrdGltZV9nZXQoKTsKKwlrdGhyZWFkX3F1ZXVlX3dv cmsoJnByaXYtPmV2ZW50X3RocmVhZFtjcnRjX2lkXS53b3JrZXIsICZmZXZlbnQtPndvcmspOwor fQorCit2b2lkIGRwdV9jcnRjX2NvbXBsZXRlX2NvbW1pdChzdHJ1Y3QgZHJtX2NydGMgKmNydGMs CisJCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqb2xkX3N0YXRlKQoreworCWlmICghY3J0YyB8fCAh Y3J0Yy0+c3RhdGUpIHsKKwkJRFBVX0VSUk9SKCJpbnZhbGlkIGNydGNcbiIpOworCQlyZXR1cm47 CisJfQorCXRyYWNlX2RwdV9jcnRjX2NvbXBsZXRlX2NvbW1pdChEUk1JRChjcnRjKSk7Cit9CisK K3N0YXRpYyB2b2lkIF9kcHVfY3J0Y19zZXR1cF9taXhlcl9mb3JfZW5jb2RlcigKKwkJc3RydWN0 IGRybV9jcnRjICpjcnRjLAorCQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuYykKK3sKKwlzdHJ1Y3Qg ZHB1X2NydGMgKmRwdV9jcnRjID0gdG9fZHB1X2NydGMoY3J0Yyk7CisJc3RydWN0IGRwdV9rbXMg KmRwdV9rbXMgPSBfZHB1X2NydGNfZ2V0X2ttcyhjcnRjKTsKKwlzdHJ1Y3QgZHB1X3JtICpybSA9 ICZkcHVfa21zLT5ybTsKKwlzdHJ1Y3QgZHB1X2NydGNfbWl4ZXIgKm1peGVyOworCXN0cnVjdCBk cHVfaHdfY3RsICpsYXN0X3ZhbGlkX2N0bCA9IE5VTEw7CisJaW50IGk7CisJc3RydWN0IGRwdV9y bV9od19pdGVyIGxtX2l0ZXIsIGN0bF9pdGVyOworCisJZHB1X3JtX2luaXRfaHdfaXRlcigmbG1f aXRlciwgZW5jLT5iYXNlLmlkLCBEUFVfSFdfQkxLX0xNKTsKKwlkcHVfcm1faW5pdF9od19pdGVy KCZjdGxfaXRlciwgZW5jLT5iYXNlLmlkLCBEUFVfSFdfQkxLX0NUTCk7CisKKwkvKiBTZXQgdXAg YWxsIHRoZSBtaXhlcnMgYW5kIGN0bHMgcmVzZXJ2ZWQgYnkgdGhpcyBlbmNvZGVyICovCisJZm9y IChpID0gZHB1X2NydGMtPm51bV9taXhlcnM7IGkgPCBBUlJBWV9TSVpFKGRwdV9jcnRjLT5taXhl cnMpOyBpKyspIHsKKwkJbWl4ZXIgPSAmZHB1X2NydGMtPm1peGVyc1tpXTsKKworCQlpZiAoIWRw dV9ybV9nZXRfaHcocm0sICZsbV9pdGVyKSkKKwkJCWJyZWFrOworCQltaXhlci0+aHdfbG0gPSAo c3RydWN0IGRwdV9od19taXhlciAqKWxtX2l0ZXIuaHc7CisKKwkJLyogQ1RMIG1heSBiZSA8PSBM TXMsIGlmIDwsIG11bHRpcGxlIExNcyBjb250cm9sbGVkIGJ5IDEgQ1RMICovCisJCWlmICghZHB1 X3JtX2dldF9odyhybSwgJmN0bF9pdGVyKSkgeworCQkJRFBVX0RFQlVHKCJubyBjdGwgYXNzaWdu ZWQgdG8gbG0gJWQsIHVzaW5nIHByZXZpb3VzXG4iLAorCQkJCQltaXhlci0+aHdfbG0tPmlkeCAt IExNXzApOworCQkJbWl4ZXItPmh3X2N0bCA9IGxhc3RfdmFsaWRfY3RsOworCQl9IGVsc2Ugewor CQkJbWl4ZXItPmh3X2N0bCA9IChzdHJ1Y3QgZHB1X2h3X2N0bCAqKWN0bF9pdGVyLmh3OworCQkJ bGFzdF92YWxpZF9jdGwgPSBtaXhlci0+aHdfY3RsOworCQl9CisKKwkJLyogU2hvdWxkbid0IGhh cHBlbiwgbWl4ZXJzIGFyZSBhbHdheXMgPj0gY3RscyAqLworCQlpZiAoIW1peGVyLT5od19jdGwp IHsKKwkJCURQVV9FUlJPUigibm8gdmFsaWQgY3RscyBmb3VuZCBmb3IgbG0gJWRcbiIsCisJCQkJ CW1peGVyLT5od19sbS0+aWR4IC0gTE1fMCk7CisJCQlyZXR1cm47CisJCX0KKworCQltaXhlci0+ ZW5jb2RlciA9IGVuYzsKKworCQlkcHVfY3J0Yy0+bnVtX21peGVycysrOworCQlEUFVfREVCVUco InNldHVwIG1peGVyICVkOiBsbSAlZFxuIiwKKwkJCQlpLCBtaXhlci0+aHdfbG0tPmlkeCAtIExN XzApOworCQlEUFVfREVCVUcoInNldHVwIG1peGVyICVkOiBjdGwgJWRcbiIsCisJCQkJaSwgbWl4 ZXItPmh3X2N0bC0+aWR4IC0gQ1RMXzApOworCX0KK30KKworc3RhdGljIHZvaWQgX2RwdV9jcnRj X3NldHVwX21peGVycyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IGRwdV9jcnRj ICpkcHVfY3J0YyA9IHRvX2RwdV9jcnRjKGNydGMpOworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5j OworCisJZHB1X2NydGMtPm51bV9taXhlcnMgPSAwOworCWRwdV9jcnRjLT5taXhlcnNfc3dhcHBl ZCA9IGZhbHNlOworCW1lbXNldChkcHVfY3J0Yy0+bWl4ZXJzLCAwLCBzaXplb2YoZHB1X2NydGMt Pm1peGVycykpOworCisJbXV0ZXhfbG9jaygmZHB1X2NydGMtPmNydGNfbG9jayk7CisJLyogQ2hl Y2sgZm9yIG1peGVycyBvbiBhbGwgZW5jb2RlcnMgYXR0YWNoZWQgdG8gdGhpcyBjcnRjICovCisJ bGlzdF9mb3JfZWFjaF9lbnRyeShlbmMsICZjcnRjLT5kZXYtPm1vZGVfY29uZmlnLmVuY29kZXJf bGlzdCwgaGVhZCkgeworCQlpZiAoZW5jLT5jcnRjICE9IGNydGMpCisJCQljb250aW51ZTsKKwor CQlfZHB1X2NydGNfc2V0dXBfbWl4ZXJfZm9yX2VuY29kZXIoY3J0YywgZW5jKTsKKwl9CisKKwlt dXRleF91bmxvY2soJmRwdV9jcnRjLT5jcnRjX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBfZHB1 X2NydGNfc2V0dXBfbG1fYm91bmRzKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJc3RydWN0IGRy bV9jcnRjX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRjOworCXN0 cnVjdCBkcHVfY3J0Y19zdGF0ZSAqY3N0YXRlOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICph ZGpfbW9kZTsKKwl1MzIgY3J0Y19zcGxpdF93aWR0aDsKKwlpbnQgaTsKKworCWlmICghY3J0YyB8 fCAhc3RhdGUpIHsKKwkJRFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3NcbiIpOworCQlyZXR1cm47CisJ fQorCisJZHB1X2NydGMgPSB0b19kcHVfY3J0YyhjcnRjKTsKKwljc3RhdGUgPSB0b19kcHVfY3J0 Y19zdGF0ZShzdGF0ZSk7CisKKwlhZGpfbW9kZSA9ICZzdGF0ZS0+YWRqdXN0ZWRfbW9kZTsKKwlj cnRjX3NwbGl0X3dpZHRoID0gZHB1X2NydGNfZ2V0X21peGVyX3dpZHRoKGRwdV9jcnRjLCBjc3Rh dGUsIGFkal9tb2RlKTsKKworCWZvciAoaSA9IDA7IGkgPCBkcHVfY3J0Yy0+bnVtX21peGVyczsg aSsrKSB7CisJCXN0cnVjdCBkcm1fcmVjdCAqciA9ICZjc3RhdGUtPmxtX2JvdW5kc1tpXTsKKwkJ ci0+eDEgPSBjcnRjX3NwbGl0X3dpZHRoICogaTsKKwkJci0+eTEgPSAwOworCQlyLT54MiA9IHIt PngxICsgY3J0Y19zcGxpdF93aWR0aDsKKwkJci0+eTIgPSBkcHVfY3J0Y19nZXRfbWl4ZXJfaGVp Z2h0KGRwdV9jcnRjLCBjc3RhdGUsIGFkal9tb2RlKTsKKworCQl0cmFjZV9kcHVfY3J0Y19zZXR1 cF9sbV9ib3VuZHMoRFJNSUQoY3J0YyksIGksIHIpOworCX0KKworCWRybV9tb2RlX2RlYnVnX3By aW50bW9kZWxpbmUoYWRqX21vZGUpOworfQorCitzdGF0aWMgdm9pZCBkcHVfY3J0Y19hdG9taWNf YmVnaW4oc3RydWN0IGRybV9jcnRjICpjcnRjLAorCQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm9s ZF9zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRjOworCXN0cnVjdCBkcm1fZW5j b2RlciAqZW5jb2RlcjsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OworCXVuc2lnbmVkIGxvbmcg ZmxhZ3M7CisJc3RydWN0IGRwdV9jcnRjX3NtbXVfc3RhdGVfZGF0YSAqc21tdV9zdGF0ZTsKKwor CWlmICghY3J0YykgeworCQlEUFVfRVJST1IoImludmFsaWQgY3J0Y1xuIik7CisJCXJldHVybjsK Kwl9CisKKwlpZiAoIWNydGMtPnN0YXRlLT5lbmFibGUpIHsKKwkJRFBVX0RFQlVHKCJjcnRjJWQg LT4gZW5hYmxlICVkLCBza2lwIGF0b21pY19iZWdpblxuIiwKKwkJCQljcnRjLT5iYXNlLmlkLCBj cnRjLT5zdGF0ZS0+ZW5hYmxlKTsKKwkJcmV0dXJuOworCX0KKworCURQVV9ERUJVRygiY3J0YyVk XG4iLCBjcnRjLT5iYXNlLmlkKTsKKworCWRwdV9jcnRjID0gdG9fZHB1X2NydGMoY3J0Yyk7CisJ ZGV2ID0gY3J0Yy0+ZGV2OworCXNtbXVfc3RhdGUgPSAmZHB1X2NydGMtPnNtbXVfc3RhdGU7CisK KwlpZiAoIWRwdV9jcnRjLT5udW1fbWl4ZXJzKSB7CisJCV9kcHVfY3J0Y19zZXR1cF9taXhlcnMo Y3J0Yyk7CisJCV9kcHVfY3J0Y19zZXR1cF9sbV9ib3VuZHMoY3J0YywgY3J0Yy0+c3RhdGUpOwor CX0KKworCWlmIChkcHVfY3J0Yy0+ZXZlbnQpIHsKKwkJV0FSTl9PTihkcHVfY3J0Yy0+ZXZlbnQp OworCX0gZWxzZSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdz KTsKKwkJZHB1X2NydGMtPmV2ZW50ID0gY3J0Yy0+c3RhdGUtPmV2ZW50OworCQljcnRjLT5zdGF0 ZS0+ZXZlbnQgPSBOVUxMOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmV2ZW50X2xv Y2ssIGZsYWdzKTsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVuY29kZXIsICZkZXYtPm1v ZGVfY29uZmlnLmVuY29kZXJfbGlzdCwgaGVhZCkgeworCQlpZiAoZW5jb2Rlci0+Y3J0YyAhPSBj cnRjKQorCQkJY29udGludWU7CisKKwkJLyogZW5jb2RlciB3aWxsIHRyaWdnZXIgcGVuZGluZyBt YXNrIG5vdyAqLworCQlkcHVfZW5jb2Rlcl90cmlnZ2VyX2tpY2tvZmZfcGVuZGluZyhlbmNvZGVy KTsKKwl9CisKKwkvKgorCSAqIElmIG5vIG1peGVycyBoYXZlIGJlZW4gYWxsb2NhdGVkIGluIGRw dV9jcnRjX2F0b21pY19jaGVjaygpLAorCSAqIGl0IG1lYW5zIHdlIGFyZSB0cnlpbmcgdG8gZmx1 c2ggYSBDUlRDIHdob3NlIHN0YXRlIGlzIGRpc2FibGVkOgorCSAqIG5vdGhpbmcgZWxzZSBuZWVk cyB0byBiZSBkb25lLgorCSAqLworCWlmICh1bmxpa2VseSghZHB1X2NydGMtPm51bV9taXhlcnMp KQorCQlyZXR1cm47CisKKwlfZHB1X2NydGNfYmxlbmRfc2V0dXAoY3J0Yyk7CisKKwkvKgorCSAq IFBQX0RPTkUgaXJxIGlzIG9ubHkgdXNlZCBieSBjb21tYW5kIG1vZGUgZm9yIG5vdy4KKwkgKiBJ dCBpcyBiZXR0ZXIgdG8gcmVxdWVzdCBwZW5kaW5nIGJlZm9yZSBGTFVTSCBhbmQgU1RBUlQgdHJp Z2dlcgorCSAqIHRvIG1ha2Ugc3VyZSBubyBwcF9kb25lIGlycSBtaXNzZWQuCisJICogVGhpcyBp cyBzYWZlIGJlY2F1c2Ugbm8gcHBfZG9uZSB3aWxsIGhhcHBlbiBiZWZvcmUgU1cgdHJpZ2dlcgor CSAqIGluIGNvbW1hbmQgbW9kZS4KKwkgKi8KK30KKworc3RhdGljIHZvaWQgZHB1X2NydGNfYXRv bWljX2ZsdXNoKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJc3RydWN0IGRybV9jcnRjX3N0YXRl ICpvbGRfY3J0Y19zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRjOworCXN0cnVj dCBkcm1fZGV2aWNlICpkZXY7CisJc3RydWN0IGRybV9wbGFuZSAqcGxhbmU7CisJc3RydWN0IG1z bV9kcm1fcHJpdmF0ZSAqcHJpdjsKKwlzdHJ1Y3QgbXNtX2RybV90aHJlYWQgKmV2ZW50X3RocmVh ZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAqY3N0YXRl OworCisJaWYgKCFjcnRjIHx8ICFjcnRjLT5kZXYgfHwgIWNydGMtPmRldi0+ZGV2X3ByaXZhdGUp IHsKKwkJRFBVX0VSUk9SKCJpbnZhbGlkIGNydGNcbiIpOworCQlyZXR1cm47CisJfQorCisJaWYg KCFjcnRjLT5zdGF0ZS0+ZW5hYmxlKSB7CisJCURQVV9ERUJVRygiY3J0YyVkIC0+IGVuYWJsZSAl ZCwgc2tpcCBhdG9taWNfZmx1c2hcbiIsCisJCQkJY3J0Yy0+YmFzZS5pZCwgY3J0Yy0+c3RhdGUt PmVuYWJsZSk7CisJCXJldHVybjsKKwl9CisKKwlEUFVfREVCVUcoImNydGMlZFxuIiwgY3J0Yy0+ YmFzZS5pZCk7CisKKwlkcHVfY3J0YyA9IHRvX2RwdV9jcnRjKGNydGMpOworCWNzdGF0ZSA9IHRv X2RwdV9jcnRjX3N0YXRlKGNydGMtPnN0YXRlKTsKKwlkZXYgPSBjcnRjLT5kZXY7CisJcHJpdiA9 IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlpZiAoY3J0Yy0+aW5kZXggPj0gQVJSQVlfU0laRShwcml2 LT5ldmVudF90aHJlYWQpKSB7CisJCURQVV9FUlJPUigiaW52YWxpZCBjcnRjIGluZGV4WyVkXVxu IiwgY3J0Yy0+aW5kZXgpOworCQlyZXR1cm47CisJfQorCisJZXZlbnRfdGhyZWFkID0gJnByaXYt PmV2ZW50X3RocmVhZFtjcnRjLT5pbmRleF07CisKKwlpZiAoZHB1X2NydGMtPmV2ZW50KSB7CisJ CURQVV9ERUJVRygiYWxyZWFkeSByZWNlaXZlZCBkcHVfY3J0Yy0+ZXZlbnRcbiIpOworCX0gZWxz ZSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKKwkJZHB1 X2NydGMtPmV2ZW50ID0gY3J0Yy0+c3RhdGUtPmV2ZW50OworCQljcnRjLT5zdGF0ZS0+ZXZlbnQg PSBOVUxMOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdz KTsKKwl9CisKKwkvKgorCSAqIElmIG5vIG1peGVycyBoYXMgYmVlbiBhbGxvY2F0ZWQgaW4gZHB1 X2NydGNfYXRvbWljX2NoZWNrKCksCisJICogaXQgbWVhbnMgd2UgYXJlIHRyeWluZyB0byBmbHVz aCBhIENSVEMgd2hvc2Ugc3RhdGUgaXMgZGlzYWJsZWQ6CisJICogbm90aGluZyBlbHNlIG5lZWRz IHRvIGJlIGRvbmUuCisJICovCisJaWYgKHVubGlrZWx5KCFkcHVfY3J0Yy0+bnVtX21peGVycykp CisJCXJldHVybjsKKworCS8qCisJICogRm9yIHBsYW5lcyB3aXRob3V0IGNvbW1pdCB1cGRhdGUs IGRybSBmcmFtZXdvcmsgd2lsbCBub3QgYWRkCisJICogdGhvc2UgcGxhbmVzIHRvIGN1cnJlbnQg c3RhdGUgc2luY2UgaGFyZHdhcmUgdXBkYXRlIGlzIG5vdAorCSAqIHJlcXVpcmVkLiBIb3dldmVy LCBpZiB0aG9zZSBwbGFuZXMgd2VyZSBwb3dlciBjb2xsYXBzZWQgc2luY2UKKwkgKiBsYXN0IGNv bW1pdCBjeWNsZSwgZHJpdmVyIGhhcyB0byByZXN0b3JlIHRoZSBoYXJkd2FyZSBzdGF0ZQorCSAq IG9mIHRob3NlIHBsYW5lcyBleHBsaWNpdGx5IGhlcmUgcHJpb3IgdG8gcGxhbmUgZmx1c2guCisJ ICovCisJZHJtX2F0b21pY19jcnRjX2Zvcl9lYWNoX3BsYW5lKHBsYW5lLCBjcnRjKQorCQlkcHVf cGxhbmVfcmVzdG9yZShwbGFuZSk7CisKKwkvKiB1cGRhdGUgcGVyZm9ybWFuY2Ugc2V0dGluZyBi ZWZvcmUgY3J0YyBraWNrb2ZmICovCisJZHB1X2NvcmVfcGVyZl9jcnRjX3VwZGF0ZShjcnRjLCAx LCBmYWxzZSk7CisKKwkvKgorCSAqIEZpbmFsIHBsYW5lIHVwZGF0ZXM6IEdpdmUgZWFjaCBwbGFu ZSBhIGNoYW5jZSB0byBjb21wbGV0ZSBhbGwKKwkgKiAgICAgICAgICAgICAgICAgICAgICByZXF1 aXJlZCB3cml0ZXMvZmx1c2hpbmcgYmVmb3JlIGNydGMncyAiZmx1c2gKKwkgKiAgICAgICAgICAg ICAgICAgICAgICBldmVyeXRoaW5nIiBjYWxsIGJlbG93LgorCSAqLworCWRybV9hdG9taWNfY3J0 Y19mb3JfZWFjaF9wbGFuZShwbGFuZSwgY3J0YykgeworCQlpZiAoZHB1X2NydGMtPnNtbXVfc3Rh dGUudHJhbnNpdGlvbl9lcnJvcikKKwkJCWRwdV9wbGFuZV9zZXRfZXJyb3IocGxhbmUsIHRydWUp OworCQlkcHVfcGxhbmVfZmx1c2gocGxhbmUpOworCX0KKworCS8qIEtpY2tvZmYgd2lsbCBiZSBz Y2hlZHVsZWQgYnkgb3V0ZXIgbGF5ZXIgKi8KK30KKworLyoqCisgKiBkcHVfY3J0Y19kZXN0cm95 X3N0YXRlIC0gc3RhdGUgZGVzdHJveSBob29rCisgKiBAY3J0YzogZHJtIENSVEMKKyAqIEBzdGF0 ZTogQ1JUQyBzdGF0ZSBvYmplY3QgdG8gcmVsZWFzZQorICovCitzdGF0aWMgdm9pZCBkcHVfY3J0 Y19kZXN0cm95X3N0YXRlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJc3RydWN0IGRybV9jcnRj X3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRjOworCXN0cnVjdCBk cHVfY3J0Y19zdGF0ZSAqY3N0YXRlOworCisJaWYgKCFjcnRjIHx8ICFzdGF0ZSkgeworCQlEUFVf RVJST1IoImludmFsaWQgYXJndW1lbnQocylcbiIpOworCQlyZXR1cm47CisJfQorCisJZHB1X2Ny dGMgPSB0b19kcHVfY3J0YyhjcnRjKTsKKwljc3RhdGUgPSB0b19kcHVfY3J0Y19zdGF0ZShzdGF0 ZSk7CisKKwlEUFVfREVCVUcoImNydGMlZFxuIiwgY3J0Yy0+YmFzZS5pZCk7CisKKwlfZHB1X2Ny dGNfcnBfZGVzdHJveSgmY3N0YXRlLT5ycCk7CisKKwlfX2RybV9hdG9taWNfaGVscGVyX2NydGNf ZGVzdHJveV9zdGF0ZShzdGF0ZSk7CisKKwlrZnJlZShjc3RhdGUpOworfQorCitzdGF0aWMgaW50 IF9kcHVfY3J0Y193YWl0X2Zvcl9mcmFtZV9kb25lKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sK KwlzdHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRjOworCWludCByZXQsIHJjID0gMDsKKworCWlmICgh Y3J0YykgeworCQlEUFVfRVJST1IoImludmFsaWQgYXJndW1lbnRcbiIpOworCQlyZXR1cm4gLUVJ TlZBTDsKKwl9CisJZHB1X2NydGMgPSB0b19kcHVfY3J0YyhjcnRjKTsKKworCWlmICghYXRvbWlj X3JlYWQoJmRwdV9jcnRjLT5mcmFtZV9wZW5kaW5nKSkgeworCQlEUFVfREVCVUcoIm5vIGZyYW1l cyBwZW5kaW5nXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJRFBVX0FUUkFDRV9CRUdJTigiZnJh bWUgZG9uZSBjb21wbGV0aW9uIHdhaXQiKTsKKwlyZXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3Rp bWVvdXQoJmRwdV9jcnRjLT5mcmFtZV9kb25lX2NvbXAsCisJCQltc2Vjc190b19qaWZmaWVzKERQ VV9GUkFNRV9ET05FX1RJTUVPVVQpKTsKKwlpZiAoIXJldCkgeworCQlEUk1fRVJST1IoImZyYW1l IGRvbmUgd2FpdCB0aW1lZCBvdXQsIHJldDolZFxuIiwgcmV0KTsKKwkJcmMgPSAtRVRJTUVET1VU OworCX0KKwlEUFVfQVRSQUNFX0VORCgiZnJhbWUgZG9uZSBjb21wbGV0aW9uIHdhaXQiKTsKKwor CXJldHVybiByYzsKK30KKwordm9pZCBkcHVfY3J0Y19jb21taXRfa2lja29mZihzdHJ1Y3QgZHJt X2NydGMgKmNydGMpCit7CisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOworCXN0cnVjdCBk cm1fZGV2aWNlICpkZXY7CisJc3RydWN0IGRwdV9jcnRjICpkcHVfY3J0YzsKKwlzdHJ1Y3QgbXNt X2RybV9wcml2YXRlICpwcml2OworCXN0cnVjdCBkcHVfa21zICpkcHVfa21zOworCXN0cnVjdCBk cHVfY3J0Y19zdGF0ZSAqY3N0YXRlOworCWludCByZXQ7CisKKwlpZiAoIWNydGMpIHsKKwkJRFBV X0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50XG4iKTsKKwkJcmV0dXJuOworCX0KKwlkZXYgPSBjcnRj LT5kZXY7CisJZHB1X2NydGMgPSB0b19kcHVfY3J0YyhjcnRjKTsKKwlkcHVfa21zID0gX2RwdV9j cnRjX2dldF9rbXMoY3J0Yyk7CisKKwlpZiAoIWRwdV9rbXMgfHwgIWRwdV9rbXMtPmRldiB8fCAh ZHB1X2ttcy0+ZGV2LT5kZXZfcHJpdmF0ZSkgeworCQlEUFVfRVJST1IoImludmFsaWQgYXJndW1l bnRcbiIpOworCQlyZXR1cm47CisJfQorCisJcHJpdiA9IGRwdV9rbXMtPmRldi0+ZGV2X3ByaXZh dGU7CisJY3N0YXRlID0gdG9fZHB1X2NydGNfc3RhdGUoY3J0Yy0+c3RhdGUpOworCisJLyoKKwkg KiBJZiBubyBtaXhlcnMgaGFzIGJlZW4gYWxsb2NhdGVkIGluIGRwdV9jcnRjX2F0b21pY19jaGVj aygpLAorCSAqIGl0IG1lYW5zIHdlIGFyZSB0cnlpbmcgdG8gc3RhcnQgYSBDUlRDIHdob3NlIHN0 YXRlIGlzIGRpc2FibGVkOgorCSAqIG5vdGhpbmcgZWxzZSBuZWVkcyB0byBiZSBkb25lLgorCSAq LworCWlmICh1bmxpa2VseSghZHB1X2NydGMtPm51bV9taXhlcnMpKQorCQlyZXR1cm47CisKKwlE UFVfQVRSQUNFX0JFR0lOKCJjcnRjX2NvbW1pdCIpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShl bmNvZGVyLCAmZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QsIGhlYWQpIHsKKwkJc3RydWN0 IGRwdV9lbmNvZGVyX2tpY2tvZmZfcGFyYW1zIHBhcmFtcyA9IHsgMCB9OworCisJCWlmIChlbmNv ZGVyLT5jcnRjICE9IGNydGMpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBFbmNvZGVyIHdp bGwgZmx1c2gvc3RhcnQgbm93LCB1bmxlc3MgaXQgaGFzIGEgdHggcGVuZGluZy4KKwkJICogSWYg c28sIGl0IG1heSBkZWxheSBhbmQgZmx1c2ggYXQgYW4gaXJxIGV2ZW50IChlLmcuIHBwZG9uZSkK KwkJICovCisJCWRwdV9lbmNvZGVyX3ByZXBhcmVfZm9yX2tpY2tvZmYoZW5jb2RlciwgJnBhcmFt cyk7CisJfQorCisJLyogd2FpdCBmb3IgZnJhbWVfZXZlbnRfZG9uZSBjb21wbGV0aW9uICovCisJ RFBVX0FUUkFDRV9CRUdJTigid2FpdF9mb3JfZnJhbWVfZG9uZV9ldmVudCIpOworCXJldCA9IF9k cHVfY3J0Y193YWl0X2Zvcl9mcmFtZV9kb25lKGNydGMpOworCURQVV9BVFJBQ0VfRU5EKCJ3YWl0 X2Zvcl9mcmFtZV9kb25lX2V2ZW50Iik7CisJaWYgKHJldCkgeworCQlEUFVfRVJST1IoImNydGMl ZCB3YWl0IGZvciBmcmFtZSBkb25lIGZhaWxlZDtmcmFtZV9wZW5kaW5nJWRcbiIsCisJCQkJY3J0 Yy0+YmFzZS5pZCwKKwkJCQlhdG9taWNfcmVhZCgmZHB1X2NydGMtPmZyYW1lX3BlbmRpbmcpKTsK KwkJZ290byBlbmQ7CisJfQorCisJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZkcHVfY3J0Yy0+ZnJh bWVfcGVuZGluZykgPT0gMSkgeworCQkvKiBhY3F1aXJlIGJhbmR3aWR0aCBhbmQgb3RoZXIgcmVz b3VyY2VzICovCisJCURQVV9ERUJVRygiY3J0YyVkIGZpcnN0IGNvbW1pdFxuIiwgY3J0Yy0+YmFz ZS5pZCk7CisJfSBlbHNlCisJCURQVV9ERUJVRygiY3J0YyVkIGNvbW1pdFxuIiwgY3J0Yy0+YmFz ZS5pZCk7CisKKwlkcHVfY3J0Yy0+cGxheV9jb3VudCsrOworCisJZHB1X3ZiaWZfY2xlYXJfZXJy b3JzKGRwdV9rbXMpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbmNvZGVyLCAmZGV2LT5tb2Rl X2NvbmZpZy5lbmNvZGVyX2xpc3QsIGhlYWQpIHsKKwkJaWYgKGVuY29kZXItPmNydGMgIT0gY3J0 YykKKwkJCWNvbnRpbnVlOworCisJCWRwdV9lbmNvZGVyX2tpY2tvZmYoZW5jb2Rlcik7CisJfQor CitlbmQ6CisJcmVpbml0X2NvbXBsZXRpb24oJmRwdV9jcnRjLT5mcmFtZV9kb25lX2NvbXApOwor CURQVV9BVFJBQ0VfRU5EKCJjcnRjX2NvbW1pdCIpOworfQorCisvKioKKyAqIF9kcHVfY3J0Y192 YmxhbmtfZW5hYmxlX25vX2xvY2sgLSB1cGRhdGUgcG93ZXIgcmVzb3VyY2UgYW5kIHZibGFuayBy ZXF1ZXN0CisgKiBAZHB1X2NydGM6IFBvaW50ZXIgdG8gZHB1IGNydGMgc3RydWN0dXJlCisgKiBA ZW5hYmxlOiBXaGV0aGVyIHRvIGVuYWJsZS9kaXNhYmxlIHZibGFua3MKKyAqCisgKiBAUmV0dXJu OiBlcnJvciBjb2RlCisgKi8KK3N0YXRpYyBpbnQgX2RwdV9jcnRjX3ZibGFua19lbmFibGVfbm9f bG9jaygKKwkJc3RydWN0IGRwdV9jcnRjICpkcHVfY3J0YywgYm9vbCBlbmFibGUpCit7CisJc3Ry dWN0IGRybV9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisJc3RydWN0IGRy bV9lbmNvZGVyICplbmM7CisKKwlpZiAoIWRwdV9jcnRjKSB7CisJCURQVV9FUlJPUigiaW52YWxp ZCBjcnRjXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY3J0YyA9ICZkcHVfY3J0Yy0+ YmFzZTsKKwlkZXYgPSBjcnRjLT5kZXY7CisKKwlpZiAoZW5hYmxlKSB7CisJCWludCByZXQ7CisK KwkJLyogZHJvcCBsb2NrIHNpbmNlIHBvd2VyIGNydGMgY2IgbWF5IHRyeSB0byByZS1hY3F1aXJl IGxvY2sgKi8KKwkJbXV0ZXhfdW5sb2NrKCZkcHVfY3J0Yy0+Y3J0Y19sb2NrKTsKKwkJcmV0ID0g X2RwdV9jcnRjX3Bvd2VyX2VuYWJsZShkcHVfY3J0YywgdHJ1ZSk7CisJCW11dGV4X2xvY2soJmRw dV9jcnRjLT5jcnRjX2xvY2spOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlsaXN0 X2Zvcl9lYWNoX2VudHJ5KGVuYywgJmRldi0+bW9kZV9jb25maWcuZW5jb2Rlcl9saXN0LCBoZWFk KSB7CisJCQlpZiAoZW5jLT5jcnRjICE9IGNydGMpCisJCQkJY29udGludWU7CisKKwkJCXRyYWNl X2RwdV9jcnRjX3ZibGFua19lbmFibGUoRFJNSUQoJmRwdV9jcnRjLT5iYXNlKSwKKwkJCQkJCSAg ICAgRFJNSUQoZW5jKSwgZW5hYmxlLAorCQkJCQkJICAgICBkcHVfY3J0Yyk7CisKKwkJCWRwdV9l bmNvZGVyX3JlZ2lzdGVyX3ZibGFua19jYWxsYmFjayhlbmMsCisJCQkJCWRwdV9jcnRjX3ZibGFu a19jYiwgKHZvaWQgKiljcnRjKTsKKwkJfQorCX0gZWxzZSB7CisJCWxpc3RfZm9yX2VhY2hfZW50 cnkoZW5jLCAmZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QsIGhlYWQpIHsKKwkJCWlmIChl bmMtPmNydGMgIT0gY3J0YykKKwkJCQljb250aW51ZTsKKworCQkJdHJhY2VfZHB1X2NydGNfdmJs YW5rX2VuYWJsZShEUk1JRCgmZHB1X2NydGMtPmJhc2UpLAorCQkJCQkJICAgICBEUk1JRChlbmMp LCBlbmFibGUsCisJCQkJCQkgICAgIGRwdV9jcnRjKTsKKworCQkJZHB1X2VuY29kZXJfcmVnaXN0 ZXJfdmJsYW5rX2NhbGxiYWNrKGVuYywgTlVMTCwgTlVMTCk7CisJCX0KKworCQkvKiBkcm9wIGxv Y2sgc2luY2UgcG93ZXIgY3J0YyBjYiBtYXkgdHJ5IHRvIHJlLWFjcXVpcmUgbG9jayAqLworCQlt dXRleF91bmxvY2soJmRwdV9jcnRjLT5jcnRjX2xvY2spOworCQlfZHB1X2NydGNfcG93ZXJfZW5h YmxlKGRwdV9jcnRjLCBmYWxzZSk7CisJCW11dGV4X2xvY2soJmRwdV9jcnRjLT5jcnRjX2xvY2sp OworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIF9kcHVfY3J0Y19zZXRfc3VzcGVuZCAt IG5vdGlmeSBjcnRjIG9mIHN1c3BlbmQgZW5hYmxlL2Rpc2FibGUKKyAqIEBjcnRjOiBQb2ludGVy IHRvIGRybSBjcnRjIG9iamVjdAorICogQGVuYWJsZTogdHJ1ZSB0byBlbmFibGUgc3VzcGVuZCwg ZmFsc2UgdG8gaW5kaWNhdGUgcmVzdW1lCisgKi8KK3N0YXRpYyB2b2lkIF9kcHVfY3J0Y19zZXRf c3VzcGVuZChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIGJvb2wgZW5hYmxlKQoreworCXN0cnVjdCBk cHVfY3J0YyAqZHB1X2NydGM7CisJc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdjsKKwlzdHJ1 Y3QgZHB1X2ttcyAqZHB1X2ttczsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghY3J0YyB8fCAhY3J0 Yy0+ZGV2IHx8ICFjcnRjLT5kZXYtPmRldl9wcml2YXRlKSB7CisJCURQVV9FUlJPUigiaW52YWxp ZCBjcnRjXG4iKTsKKwkJcmV0dXJuOworCX0KKwlkcHVfY3J0YyA9IHRvX2RwdV9jcnRjKGNydGMp OworCXByaXYgPSBjcnRjLT5kZXYtPmRldl9wcml2YXRlOworCisJaWYgKCFwcml2LT5rbXMpIHsK KwkJRFBVX0VSUk9SKCJpbnZhbGlkIGNydGMga21zXG4iKTsKKwkJcmV0dXJuOworCX0KKwlkcHVf a21zID0gdG9fZHB1X2ttcyhwcml2LT5rbXMpOworCisJRFJNX0RFQlVHX0tNUygiY3J0YyVkIHN1 c3BlbmQgPSAlZFxuIiwgY3J0Yy0+YmFzZS5pZCwgZW5hYmxlKTsKKworCW11dGV4X2xvY2soJmRw dV9jcnRjLT5jcnRjX2xvY2spOworCisJLyoKKwkgKiBJZiB0aGUgdmJsYW5rIGlzIGVuYWJsZWQs IHJlbGVhc2UgYSBwb3dlciByZWZlcmVuY2Ugb24gc3VzcGVuZAorCSAqIGFuZCB0YWtlIGl0IGJh Y2sgZHVyaW5nIHJlc3VtZSAoaWYgaXQgaXMgc3RpbGwgZW5hYmxlZCkuCisJICovCisJdHJhY2Vf ZHB1X2NydGNfc2V0X3N1c3BlbmQoRFJNSUQoJmRwdV9jcnRjLT5iYXNlKSwgZW5hYmxlLCBkcHVf Y3J0Yyk7CisJaWYgKGRwdV9jcnRjLT5zdXNwZW5kID09IGVuYWJsZSkKKwkJRFBVX0RFQlVHKCJj cnRjJWQgc3VzcGVuZCBhbHJlYWR5IHNldCB0byAlZCwgaWdub3JpbmcgdXBkYXRlXG4iLAorCQkJ CWNydGMtPmJhc2UuaWQsIGVuYWJsZSk7CisJZWxzZSBpZiAoZHB1X2NydGMtPmVuYWJsZWQgJiYg ZHB1X2NydGMtPnZibGFua19yZXF1ZXN0ZWQpIHsKKwkJcmV0ID0gX2RwdV9jcnRjX3ZibGFua19l bmFibGVfbm9fbG9jayhkcHVfY3J0YywgIWVuYWJsZSk7CisJCWlmIChyZXQpCisJCQlEUFVfRVJS T1IoIiVzIHZibGFuayBlbmFibGUgZmFpbGVkOiAlZFxuIiwKKwkJCQkJZHB1X2NydGMtPm5hbWUs IHJldCk7CisJfQorCisJZHB1X2NydGMtPnN1c3BlbmQgPSBlbmFibGU7CisJbXV0ZXhfdW5sb2Nr KCZkcHVfY3J0Yy0+Y3J0Y19sb2NrKTsKK30KKworLyoqCisgKiBkcHVfY3J0Y19kdXBsaWNhdGVf c3RhdGUgLSBzdGF0ZSBkdXBsaWNhdGUgaG9vaworICogQGNydGM6IFBvaW50ZXIgdG8gZHJtIGNy dGMgc3RydWN0dXJlCisgKiBAUmV0dXJuczogUG9pbnRlciB0byBuZXcgZHJtX2NydGNfc3RhdGUg c3RydWN0dXJlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmRwdV9jcnRjX2R1 cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IGRwdV9jcnRj ICpkcHVfY3J0YzsKKwlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmNzdGF0ZSwgKm9sZF9jc3RhdGU7 CisKKwlpZiAoIWNydGMgfHwgIWNydGMtPnN0YXRlKSB7CisJCURQVV9FUlJPUigiaW52YWxpZCBh cmd1bWVudChzKVxuIik7CisJCXJldHVybiBOVUxMOworCX0KKworCWRwdV9jcnRjID0gdG9fZHB1 X2NydGMoY3J0Yyk7CisJb2xkX2NzdGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKGNydGMtPnN0YXRl KTsKKwljc3RhdGUgPSBrbWVtZHVwKG9sZF9jc3RhdGUsIHNpemVvZigqb2xkX2NzdGF0ZSksIEdG UF9LRVJORUwpOworCWlmICghY3N0YXRlKSB7CisJCURQVV9FUlJPUigiZmFpbGVkIHRvIGFsbG9j YXRlIHN0YXRlXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogZHVwbGljYXRlIGJhc2Ug aGVscGVyICovCisJX19kcm1fYXRvbWljX2hlbHBlcl9jcnRjX2R1cGxpY2F0ZV9zdGF0ZShjcnRj LCAmY3N0YXRlLT5iYXNlKTsKKworCV9kcHVfY3J0Y19ycF9kdXBsaWNhdGUoJm9sZF9jc3RhdGUt PnJwLCAmY3N0YXRlLT5ycCk7CisKKwlyZXR1cm4gJmNzdGF0ZS0+YmFzZTsKK30KKworLyoqCisg KiBkcHVfY3J0Y19yZXNldCAtIHJlc2V0IGhvb2sgZm9yIENSVENzCisgKiBSZXNldHMgdGhlIGF0 b21pYyBzdGF0ZSBmb3IgQGNydGMgYnkgZnJlZWluZyB0aGUgc3RhdGUgcG9pbnRlciAod2hpY2gg bWlnaHQKKyAqIGJlIE5VTEwsIGUuZy4gYXQgZHJpdmVyIGxvYWQgdGltZSkgYW5kIGFsbG9jYXRp bmcgYSBuZXcgZW1wdHkgc3RhdGUgb2JqZWN0LgorICogQGNydGM6IFBvaW50ZXIgdG8gZHJtIGNy dGMgc3RydWN0dXJlCisgKi8KK3N0YXRpYyB2b2lkIGRwdV9jcnRjX3Jlc2V0KHN0cnVjdCBkcm1f Y3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRjOworCXN0cnVjdCBkcHVf Y3J0Y19zdGF0ZSAqY3N0YXRlOworCisJaWYgKCFjcnRjKSB7CisJCURQVV9FUlJPUigiaW52YWxp ZCBjcnRjXG4iKTsKKwkJcmV0dXJuOworCX0KKworCS8qIHJldmVydCBzdXNwZW5kIGFjdGlvbnMs IGlmIG5lY2Vzc2FyeSAqLworCWlmIChkcHVfa21zX2lzX3N1c3BlbmRfc3RhdGUoY3J0Yy0+ZGV2 KSkKKwkJX2RwdV9jcnRjX3NldF9zdXNwZW5kKGNydGMsIGZhbHNlKTsKKworCS8qIHJlbW92ZSBw cmV2aW91cyBzdGF0ZSwgaWYgcHJlc2VudCAqLworCWlmIChjcnRjLT5zdGF0ZSkgeworCQlkcHVf Y3J0Y19kZXN0cm95X3N0YXRlKGNydGMsIGNydGMtPnN0YXRlKTsKKwkJY3J0Yy0+c3RhdGUgPSAw OworCX0KKworCWRwdV9jcnRjID0gdG9fZHB1X2NydGMoY3J0Yyk7CisJY3N0YXRlID0ga3phbGxv YyhzaXplb2YoKmNzdGF0ZSksIEdGUF9LRVJORUwpOworCWlmICghY3N0YXRlKSB7CisJCURQVV9F UlJPUigiZmFpbGVkIHRvIGFsbG9jYXRlIHN0YXRlXG4iKTsKKwkJcmV0dXJuOworCX0KKworCV9k cHVfY3J0Y19ycF9yZXNldCgmY3N0YXRlLT5ycCwgJmRwdV9jcnRjLT5ycF9sb2NrLAorCQkJJmRw dV9jcnRjLT5ycF9oZWFkKTsKKworCWNzdGF0ZS0+YmFzZS5jcnRjID0gY3J0YzsKKwljcnRjLT5z dGF0ZSA9ICZjc3RhdGUtPmJhc2U7Cit9CisKK3N0YXRpYyB2b2lkIGRwdV9jcnRjX2hhbmRsZV9w b3dlcl9ldmVudCh1MzIgZXZlbnRfdHlwZSwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBkcm1fY3J0 YyAqY3J0YyA9IGFyZzsKKwlzdHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRjOworCXN0cnVjdCBkcm1f ZW5jb2RlciAqZW5jb2RlcjsKKwlzdHJ1Y3QgZHB1X2NydGNfbWl4ZXIgKm07CisJdTMyIGksIG1p c3Jfc3RhdHVzOworCisJaWYgKCFjcnRjKSB7CisJCURQVV9FUlJPUigiaW52YWxpZCBjcnRjXG4i KTsKKwkJcmV0dXJuOworCX0KKwlkcHVfY3J0YyA9IHRvX2RwdV9jcnRjKGNydGMpOworCisJbXV0 ZXhfbG9jaygmZHB1X2NydGMtPmNydGNfbG9jayk7CisKKwl0cmFjZV9kcHVfY3J0Y19oYW5kbGVf cG93ZXJfZXZlbnQoRFJNSUQoY3J0YyksIGV2ZW50X3R5cGUpOworCisJc3dpdGNoIChldmVudF90 eXBlKSB7CisJY2FzZSBEUFVfUE9XRVJfRVZFTlRfUE9TVF9FTkFCTEU6CisJCS8qIHJlc3RvcmUg ZW5jb2RlcjsgY3J0YyB3aWxsIGJlIHByb2dyYW1tZWQgZHVyaW5nIGNvbW1pdCAqLworCQlkcm1f Zm9yX2VhY2hfZW5jb2RlcihlbmNvZGVyLCBjcnRjLT5kZXYpIHsKKwkJCWlmIChlbmNvZGVyLT5j cnRjICE9IGNydGMpCisJCQkJY29udGludWU7CisKKwkJCWRwdV9lbmNvZGVyX3ZpcnRfcmVzdG9y ZShlbmNvZGVyKTsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBkcHVfY3J0Yy0+bnVtX21peGVy czsgKytpKSB7CisJCQltID0gJmRwdV9jcnRjLT5taXhlcnNbaV07CisJCQlpZiAoIW0tPmh3X2xt IHx8ICFtLT5od19sbS0+b3BzLnNldHVwX21pc3IgfHwKKwkJCQkJIWRwdV9jcnRjLT5taXNyX2Vu YWJsZSkKKwkJCQljb250aW51ZTsKKworCQkJbS0+aHdfbG0tPm9wcy5zZXR1cF9taXNyKG0tPmh3 X2xtLCB0cnVlLAorCQkJCQlkcHVfY3J0Yy0+bWlzcl9mcmFtZV9jb3VudCk7CisJCX0KKwkJYnJl YWs7CisJY2FzZSBEUFVfUE9XRVJfRVZFTlRfUFJFX0RJU0FCTEU6CisJCWZvciAoaSA9IDA7IGkg PCBkcHVfY3J0Yy0+bnVtX21peGVyczsgKytpKSB7CisJCQltID0gJmRwdV9jcnRjLT5taXhlcnNb aV07CisJCQlpZiAoIW0tPmh3X2xtIHx8ICFtLT5od19sbS0+b3BzLmNvbGxlY3RfbWlzciB8fAor CQkJCQkhZHB1X2NydGMtPm1pc3JfZW5hYmxlKQorCQkJCWNvbnRpbnVlOworCisJCQltaXNyX3N0 YXR1cyA9IG0tPmh3X2xtLT5vcHMuY29sbGVjdF9taXNyKG0tPmh3X2xtKTsKKwkJCWRwdV9jcnRj LT5taXNyX2RhdGFbaV0gPSBtaXNyX3N0YXR1cyA/IG1pc3Jfc3RhdHVzIDoKKwkJCQkJCQlkcHVf Y3J0Yy0+bWlzcl9kYXRhW2ldOworCQl9CisJCWJyZWFrOworCWNhc2UgRFBVX1BPV0VSX0VWRU5U X1BPU1RfRElTQUJMRToKKwkJLyoqCisJCSAqIE5vdGhpbmcgdG8gZG8uIEFsbCB0aGUgcGxhbmVz IG9uIHRoZSBDUlRDIHdpbGwgYmUKKwkJICogcHJvZ3JhbW1lZCBmb3IgZXZlcnkgZnJhbWUKKwkJ ICovCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURQVV9ERUJVRygiZXZlbnQ6JWQgbm90IGhhbmRs ZWRcbiIsIGV2ZW50X3R5cGUpOworCQlicmVhazsKKwl9CisKKwltdXRleF91bmxvY2soJmRwdV9j cnRjLT5jcnRjX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBkcHVfY3J0Y19kaXNhYmxlKHN0cnVj dCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRjOworCXN0cnVj dCBkcHVfY3J0Y19zdGF0ZSAqY3N0YXRlOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2Rl OworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKKwlzdHJ1Y3QgbXNtX2RybV9wcml2YXRl ICpwcml2OworCWludCByZXQ7CisKKwlpZiAoIWNydGMgfHwgIWNydGMtPmRldiB8fCAhY3J0Yy0+ ZGV2LT5kZXZfcHJpdmF0ZSB8fCAhY3J0Yy0+c3RhdGUpIHsKKwkJRFBVX0VSUk9SKCJpbnZhbGlk IGNydGNcbiIpOworCQlyZXR1cm47CisJfQorCWRwdV9jcnRjID0gdG9fZHB1X2NydGMoY3J0Yyk7 CisJY3N0YXRlID0gdG9fZHB1X2NydGNfc3RhdGUoY3J0Yy0+c3RhdGUpOworCW1vZGUgPSAmY3N0 YXRlLT5iYXNlLmFkanVzdGVkX21vZGU7CisJcHJpdiA9IGNydGMtPmRldi0+ZGV2X3ByaXZhdGU7 CisKKwlEUk1fREVCVUdfS01TKCJjcnRjJWRcbiIsIGNydGMtPmJhc2UuaWQpOworCisJaWYgKGRw dV9rbXNfaXNfc3VzcGVuZF9zdGF0ZShjcnRjLT5kZXYpKQorCQlfZHB1X2NydGNfc2V0X3N1c3Bl bmQoY3J0YywgdHJ1ZSk7CisKKwltdXRleF9sb2NrKCZkcHVfY3J0Yy0+Y3J0Y19sb2NrKTsKKwor CS8qIHdhaXQgZm9yIGZyYW1lX2V2ZW50X2RvbmUgY29tcGxldGlvbiAqLworCWlmIChfZHB1X2Ny dGNfd2FpdF9mb3JfZnJhbWVfZG9uZShjcnRjKSkKKwkJRFBVX0VSUk9SKCJjcnRjJWQgd2FpdCBm b3IgZnJhbWUgZG9uZSBmYWlsZWQ7ZnJhbWVfcGVuZGluZyVkXG4iLAorCQkJCWNydGMtPmJhc2Uu aWQsCisJCQkJYXRvbWljX3JlYWQoJmRwdV9jcnRjLT5mcmFtZV9wZW5kaW5nKSk7CisKKwl0cmFj ZV9kcHVfY3J0Y19kaXNhYmxlKERSTUlEKGNydGMpLCBmYWxzZSwgZHB1X2NydGMpOworCWlmIChk cHVfY3J0Yy0+ZW5hYmxlZCAmJiAhZHB1X2NydGMtPnN1c3BlbmQgJiYKKwkJCWRwdV9jcnRjLT52 YmxhbmtfcmVxdWVzdGVkKSB7CisJCXJldCA9IF9kcHVfY3J0Y192YmxhbmtfZW5hYmxlX25vX2xv Y2soZHB1X2NydGMsIGZhbHNlKTsKKwkJaWYgKHJldCkKKwkJCURQVV9FUlJPUigiJXMgdmJsYW5r IGVuYWJsZSBmYWlsZWQ6ICVkXG4iLAorCQkJCQlkcHVfY3J0Yy0+bmFtZSwgcmV0KTsKKwl9CisJ ZHB1X2NydGMtPmVuYWJsZWQgPSBmYWxzZTsKKworCWlmIChhdG9taWNfcmVhZCgmZHB1X2NydGMt PmZyYW1lX3BlbmRpbmcpKSB7CisJCXRyYWNlX2RwdV9jcnRjX2Rpc2FibGVfZnJhbWVfcGVuZGlu ZyhEUk1JRChjcnRjKSwKKwkJCQkgICAgIGF0b21pY19yZWFkKCZkcHVfY3J0Yy0+ZnJhbWVfcGVu ZGluZykpOworCQlkcHVfY29yZV9wZXJmX2NydGNfcmVsZWFzZV9idyhjcnRjKTsKKwkJYXRvbWlj X3NldCgmZHB1X2NydGMtPmZyYW1lX3BlbmRpbmcsIDApOworCX0KKworCWRwdV9jb3JlX3BlcmZf Y3J0Y191cGRhdGUoY3J0YywgMCwgdHJ1ZSk7CisKKwlkcm1fZm9yX2VhY2hfZW5jb2RlcihlbmNv ZGVyLCBjcnRjLT5kZXYpIHsKKwkJaWYgKGVuY29kZXItPmNydGMgIT0gY3J0YykKKwkJCWNvbnRp bnVlOworCQlkcHVfZW5jb2Rlcl9yZWdpc3Rlcl9mcmFtZV9ldmVudF9jYWxsYmFjayhlbmNvZGVy LCBOVUxMLCBOVUxMKTsKKwl9CisKKwlpZiAoZHB1X2NydGMtPnBvd2VyX2V2ZW50KQorCQlkcHVf cG93ZXJfaGFuZGxlX3VucmVnaXN0ZXJfZXZlbnQoZHB1X2NydGMtPnBoYW5kbGUsCisJCQkJZHB1 X2NydGMtPnBvd2VyX2V2ZW50KTsKKworCisJbWVtc2V0KGRwdV9jcnRjLT5taXhlcnMsIDAsIHNp emVvZihkcHVfY3J0Yy0+bWl4ZXJzKSk7CisJZHB1X2NydGMtPm51bV9taXhlcnMgPSAwOworCWRw dV9jcnRjLT5taXhlcnNfc3dhcHBlZCA9IGZhbHNlOworCisJLyogZGlzYWJsZSBjbGsgJiBidyBj b250cm9sIHVudGlsIGNsayAmIGJ3IHByb3BlcnRpZXMgYXJlIHNldCAqLworCWNzdGF0ZS0+Yndf Y29udHJvbCA9IGZhbHNlOworCWNzdGF0ZS0+Yndfc3BsaXRfdm90ZSA9IGZhbHNlOworCisJbXV0 ZXhfdW5sb2NrKCZkcHVfY3J0Yy0+Y3J0Y19sb2NrKTsKK30KKworc3RhdGljIHZvaWQgZHB1X2Ny dGNfZW5hYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJc3RydWN0IGRybV9jcnRjX3N0YXRl ICpvbGRfY3J0Y19zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRjOworCXN0cnVj dCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKKwlzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpwcml2Owor CWludCByZXQ7CisKKwlpZiAoIWNydGMgfHwgIWNydGMtPmRldiB8fCAhY3J0Yy0+ZGV2LT5kZXZf cHJpdmF0ZSkgeworCQlEUFVfRVJST1IoImludmFsaWQgY3J0Y1xuIik7CisJCXJldHVybjsKKwl9 CisJcHJpdiA9IGNydGMtPmRldi0+ZGV2X3ByaXZhdGU7CisKKwlEUk1fREVCVUdfS01TKCJjcnRj JWRcbiIsIGNydGMtPmJhc2UuaWQpOworCWRwdV9jcnRjID0gdG9fZHB1X2NydGMoY3J0Yyk7CisK Kwlkcm1fZm9yX2VhY2hfZW5jb2RlcihlbmNvZGVyLCBjcnRjLT5kZXYpIHsKKwkJaWYgKGVuY29k ZXItPmNydGMgIT0gY3J0YykKKwkJCWNvbnRpbnVlOworCQlkcHVfZW5jb2Rlcl9yZWdpc3Rlcl9m cmFtZV9ldmVudF9jYWxsYmFjayhlbmNvZGVyLAorCQkJCWRwdV9jcnRjX2ZyYW1lX2V2ZW50X2Ni LCAodm9pZCAqKWNydGMpOworCX0KKworCW11dGV4X2xvY2soJmRwdV9jcnRjLT5jcnRjX2xvY2sp OworCXRyYWNlX2RwdV9jcnRjX2VuYWJsZShEUk1JRChjcnRjKSwgdHJ1ZSwgZHB1X2NydGMpOwor CWlmICghZHB1X2NydGMtPmVuYWJsZWQgJiYgIWRwdV9jcnRjLT5zdXNwZW5kICYmCisJCQlkcHVf Y3J0Yy0+dmJsYW5rX3JlcXVlc3RlZCkgeworCQlyZXQgPSBfZHB1X2NydGNfdmJsYW5rX2VuYWJs ZV9ub19sb2NrKGRwdV9jcnRjLCB0cnVlKTsKKwkJaWYgKHJldCkKKwkJCURQVV9FUlJPUigiJXMg dmJsYW5rIGVuYWJsZSBmYWlsZWQ6ICVkXG4iLAorCQkJCQlkcHVfY3J0Yy0+bmFtZSwgcmV0KTsK Kwl9CisJZHB1X2NydGMtPmVuYWJsZWQgPSB0cnVlOworCisJbXV0ZXhfdW5sb2NrKCZkcHVfY3J0 Yy0+Y3J0Y19sb2NrKTsKKworCWRwdV9jcnRjLT5wb3dlcl9ldmVudCA9IGRwdV9wb3dlcl9oYW5k bGVfcmVnaXN0ZXJfZXZlbnQoCisJCWRwdV9jcnRjLT5waGFuZGxlLAorCQlEUFVfUE9XRVJfRVZF TlRfUE9TVF9FTkFCTEUgfCBEUFVfUE9XRVJfRVZFTlRfUE9TVF9ESVNBQkxFIHwKKwkJRFBVX1BP V0VSX0VWRU5UX1BSRV9ESVNBQkxFLAorCQlkcHVfY3J0Y19oYW5kbGVfcG93ZXJfZXZlbnQsIGNy dGMsIGRwdV9jcnRjLT5uYW1lKTsKKworfQorCitzdHJ1Y3QgcGxhbmVfc3RhdGUgeworCXN0cnVj dCBkcHVfcGxhbmVfc3RhdGUgKmRwdV9wc3RhdGU7CisJY29uc3Qgc3RydWN0IGRybV9wbGFuZV9z dGF0ZSAqZHJtX3BzdGF0ZTsKKwlpbnQgc3RhZ2U7CisJdTMyIHBpcGVfaWQ7Cit9OworCitzdGF0 aWMgaW50IGRwdV9jcnRjX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCXN0 cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IGRwdV9jcnRjICpkcHVfY3J0 YzsKKwlzdHJ1Y3QgcGxhbmVfc3RhdGUgKnBzdGF0ZXM7CisJc3RydWN0IGRwdV9jcnRjX3N0YXRl ICpjc3RhdGU7CisKKwljb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwc3RhdGU7CisJc3Ry dWN0IGRybV9wbGFuZSAqcGxhbmU7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7CisK KwlpbnQgY250ID0gMCwgcmMgPSAwLCBtaXhlcl93aWR0aCwgaSwgel9wb3M7CisKKwlzdHJ1Y3Qg ZHB1X211bHRpcmVjdF9wbGFuZV9zdGF0ZXMgbXVsdGlyZWN0X3BsYW5lW0RQVV9TVEFHRV9NQVgg KiAyXTsKKwlpbnQgbXVsdGlyZWN0X2NvdW50ID0gMDsKKwljb25zdCBzdHJ1Y3QgZHJtX3BsYW5l X3N0YXRlICpwaXBlX3N0YWdlZFtTU1BQX01BWF07CisJaW50IGxlZnRfenBvc19jbnQgPSAwLCBy aWdodF96cG9zX2NudCA9IDA7CisJc3RydWN0IGRybV9yZWN0IGNydGNfcmVjdCA9IHsgMCB9Owor CisJaWYgKCFjcnRjKSB7CisJCURQVV9FUlJPUigiaW52YWxpZCBjcnRjXG4iKTsKKwkJcmV0dXJu IC1FSU5WQUw7CisJfQorCisJcHN0YXRlcyA9IGt6YWxsb2Moc2l6ZW9mKCpwc3RhdGVzKSAqIERQ VV9TVEFHRV9NQVggKiA0LCBHRlBfS0VSTkVMKTsKKworCWRwdV9jcnRjID0gdG9fZHB1X2NydGMo Y3J0Yyk7CisJY3N0YXRlID0gdG9fZHB1X2NydGNfc3RhdGUoc3RhdGUpOworCisJaWYgKCFzdGF0 ZS0+ZW5hYmxlIHx8ICFzdGF0ZS0+YWN0aXZlKSB7CisJCURQVV9ERUJVRygiY3J0YyVkIC0+IGVu YWJsZSAlZCwgYWN0aXZlICVkLCBza2lwIGF0b21pY19jaGVja1xuIiwKKwkJCQljcnRjLT5iYXNl LmlkLCBzdGF0ZS0+ZW5hYmxlLCBzdGF0ZS0+YWN0aXZlKTsKKwkJZ290byBlbmQ7CisJfQorCisJ bW9kZSA9ICZzdGF0ZS0+YWRqdXN0ZWRfbW9kZTsKKwlEUFVfREVCVUcoIiVzOiBjaGVjayIsIGRw dV9jcnRjLT5uYW1lKTsKKworCS8qIGZvcmNlIGEgZnVsbCBtb2RlIHNldCBpZiBhY3RpdmUgc3Rh dGUgY2hhbmdlZCAqLworCWlmIChzdGF0ZS0+YWN0aXZlX2NoYW5nZWQpCisJCXN0YXRlLT5tb2Rl X2NoYW5nZWQgPSB0cnVlOworCisJbWVtc2V0KHBpcGVfc3RhZ2VkLCAwLCBzaXplb2YocGlwZV9z dGFnZWQpKTsKKworCW1peGVyX3dpZHRoID0gZHB1X2NydGNfZ2V0X21peGVyX3dpZHRoKGRwdV9j cnRjLCBjc3RhdGUsIG1vZGUpOworCisJX2RwdV9jcnRjX3NldHVwX2xtX2JvdW5kcyhjcnRjLCBz dGF0ZSk7CisKKwljcnRjX3JlY3QueDIgPSBtb2RlLT5oZGlzcGxheTsKKwljcnRjX3JlY3QueTIg PSBtb2RlLT52ZGlzcGxheTsKKworCSAvKiBnZXQgcGxhbmUgc3RhdGUgZm9yIGFsbCBkcm0gcGxh bmVzIGFzc29jaWF0ZWQgd2l0aCBjcnRjIHN0YXRlICovCisJZHJtX2F0b21pY19jcnRjX3N0YXRl X2Zvcl9lYWNoX3BsYW5lX3N0YXRlKHBsYW5lLCBwc3RhdGUsIHN0YXRlKSB7CisJCXN0cnVjdCBk cm1fcmVjdCBkc3QsIGNsaXAgPSBjcnRjX3JlY3Q7CisKKwkJaWYgKElTX0VSUl9PUl9OVUxMKHBz dGF0ZSkpIHsKKwkJCXJjID0gUFRSX0VSUihwc3RhdGUpOworCQkJRFBVX0VSUk9SKCIlczogZmFp bGVkIHRvIGdldCBwbGFuZSVkIHN0YXRlLCAlZFxuIiwKKwkJCQkJZHB1X2NydGMtPm5hbWUsIHBs YW5lLT5iYXNlLmlkLCByYyk7CisJCQlnb3RvIGVuZDsKKwkJfQorCQlpZiAoY250ID49IERQVV9T VEFHRV9NQVggKiA0KQorCQkJY29udGludWU7CisKKwkJcHN0YXRlc1tjbnRdLmRwdV9wc3RhdGUg PSB0b19kcHVfcGxhbmVfc3RhdGUocHN0YXRlKTsKKwkJcHN0YXRlc1tjbnRdLmRybV9wc3RhdGUg PSBwc3RhdGU7CisJCXBzdGF0ZXNbY250XS5zdGFnZSA9IHBzdGF0ZS0+bm9ybWFsaXplZF96cG9z OworCQlwc3RhdGVzW2NudF0ucGlwZV9pZCA9IGRwdV9wbGFuZV9waXBlKHBsYW5lKTsKKworCQlp ZiAocGlwZV9zdGFnZWRbcHN0YXRlc1tjbnRdLnBpcGVfaWRdKSB7CisJCQltdWx0aXJlY3RfcGxh bmVbbXVsdGlyZWN0X2NvdW50XS5yMCA9CisJCQkJcGlwZV9zdGFnZWRbcHN0YXRlc1tjbnRdLnBp cGVfaWRdOworCQkJbXVsdGlyZWN0X3BsYW5lW211bHRpcmVjdF9jb3VudF0ucjEgPSBwc3RhdGU7 CisJCQltdWx0aXJlY3RfY291bnQrKzsKKworCQkJcGlwZV9zdGFnZWRbcHN0YXRlc1tjbnRdLnBp cGVfaWRdID0gTlVMTDsKKwkJfSBlbHNlIHsKKwkJCXBpcGVfc3RhZ2VkW3BzdGF0ZXNbY250XS5w aXBlX2lkXSA9IHBzdGF0ZTsKKwkJfQorCisJCWNudCsrOworCisJCWRzdCA9IGRybV9wbGFuZV9z dGF0ZV9kZXN0KHBzdGF0ZSk7CisJCWlmICghZHJtX3JlY3RfaW50ZXJzZWN0KCZjbGlwLCAmZHN0 KSB8fAorCQkgICAgIWRybV9yZWN0X2VxdWFscygmY2xpcCwgJmRzdCkpIHsKKwkJCURQVV9FUlJP UigiaW52YWxpZCB2ZXJ0aWNhbC9ob3Jpem9udGFsIGRlc3RpbmF0aW9uXG4iKTsKKwkJCURQVV9F UlJPUigiZGlzcGxheTogIiBEUk1fUkVDVF9GTVQgIiBwbGFuZTogIgorCQkJCSAgRFJNX1JFQ1Rf Rk1UICJcbiIsIERSTV9SRUNUX0FSRygmY3J0Y19yZWN0KSwKKwkJCQkgIERSTV9SRUNUX0FSRygm ZHN0KSk7CisJCQlyYyA9IC1FMkJJRzsKKwkJCWdvdG8gZW5kOworCQl9CisJfQorCisJZm9yIChp ID0gMTsgaSA8IFNTUFBfTUFYOyBpKyspIHsKKwkJaWYgKHBpcGVfc3RhZ2VkW2ldKSB7CisJCQlk cHVfcGxhbmVfY2xlYXJfbXVsdGlyZWN0KHBpcGVfc3RhZ2VkW2ldKTsKKworCQkJaWYgKGlzX2Rw dV9wbGFuZV92aXJ0dWFsKHBpcGVfc3RhZ2VkW2ldLT5wbGFuZSkpIHsKKwkJCQlEUFVfRVJST1Io CisJCQkJCSJyMSBvbmx5IHZpcnQgcGxhbmU6JWQgbm90IHN1cHBvcnRlZFxuIiwKKwkJCQkJcGlw ZV9zdGFnZWRbaV0tPnBsYW5lLT5iYXNlLmlkKTsKKwkJCQlyYyAgPSAtRUlOVkFMOworCQkJCWdv dG8gZW5kOworCQkJfQorCQl9CisJfQorCisJel9wb3MgPSAtMTsKKwlmb3IgKGkgPSAwOyBpIDwg Y250OyBpKyspIHsKKwkJLyogcmVzZXQgY291bnRzIGF0IGV2ZXJ5IG5ldyBibGVuZCBzdGFnZSAq LworCQlpZiAocHN0YXRlc1tpXS5zdGFnZSAhPSB6X3BvcykgeworCQkJbGVmdF96cG9zX2NudCA9 IDA7CisJCQlyaWdodF96cG9zX2NudCA9IDA7CisJCQl6X3BvcyA9IHBzdGF0ZXNbaV0uc3RhZ2U7 CisJCX0KKworCQkvKiB2ZXJpZnkgel9wb3Mgc2V0dGluZyBiZWZvcmUgdXNpbmcgaXQgKi8KKwkJ aWYgKHpfcG9zID49IERQVV9TVEFHRV9NQVggLSBEUFVfU1RBR0VfMCkgeworCQkJRFBVX0VSUk9S KCI+ICVkIHBsYW5lIHN0YWdlcyBhc3NpZ25lZFxuIiwKKwkJCQkJRFBVX1NUQUdFX01BWCAtIERQ VV9TVEFHRV8wKTsKKwkJCXJjID0gLUVJTlZBTDsKKwkJCWdvdG8gZW5kOworCQl9IGVsc2UgaWYg KHBzdGF0ZXNbaV0uZHJtX3BzdGF0ZS0+Y3J0Y194IDwgbWl4ZXJfd2lkdGgpIHsKKwkJCWlmIChs ZWZ0X3pwb3NfY250ID09IDIpIHsKKwkJCQlEUFVfRVJST1IoIj4gMiBwbGFuZXMgQCBzdGFnZSAl ZCBvbiBsZWZ0XG4iLAorCQkJCQl6X3Bvcyk7CisJCQkJcmMgPSAtRUlOVkFMOworCQkJCWdvdG8g ZW5kOworCQkJfQorCQkJbGVmdF96cG9zX2NudCsrOworCisJCX0gZWxzZSB7CisJCQlpZiAocmln aHRfenBvc19jbnQgPT0gMikgeworCQkJCURQVV9FUlJPUigiPiAyIHBsYW5lcyBAIHN0YWdlICVk IG9uIHJpZ2h0XG4iLAorCQkJCQl6X3Bvcyk7CisJCQkJcmMgPSAtRUlOVkFMOworCQkJCWdvdG8g ZW5kOworCQkJfQorCQkJcmlnaHRfenBvc19jbnQrKzsKKwkJfQorCisJCXBzdGF0ZXNbaV0uZHB1 X3BzdGF0ZS0+c3RhZ2UgPSB6X3BvcyArIERQVV9TVEFHRV8wOworCQlEUFVfREVCVUcoIiVzOiB6 cG9zICVkIiwgZHB1X2NydGMtPm5hbWUsIHpfcG9zKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwg bXVsdGlyZWN0X2NvdW50OyBpKyspIHsKKwkJaWYgKGRwdV9wbGFuZV92YWxpZGF0ZV9tdWx0aXJl Y3RfdjIoJm11bHRpcmVjdF9wbGFuZVtpXSkpIHsKKwkJCURQVV9FUlJPUigKKwkJCSJtdWx0aXJl Y3QgdmFsaWRhdGlvbiBmYWlsZWQgZm9yIHBsYW5lcyAoJWQgLSAlZClcbiIsCisJCQkJCW11bHRp cmVjdF9wbGFuZVtpXS5yMC0+cGxhbmUtPmJhc2UuaWQsCisJCQkJCW11bHRpcmVjdF9wbGFuZVtp XS5yMS0+cGxhbmUtPmJhc2UuaWQpOworCQkJcmMgPSAtRUlOVkFMOworCQkJZ290byBlbmQ7CisJ CX0KKwl9CisKKwlyYyA9IGRwdV9jb3JlX3BlcmZfY3J0Y19jaGVjayhjcnRjLCBzdGF0ZSk7CisJ aWYgKHJjKSB7CisJCURQVV9FUlJPUigiY3J0YyVkIGZhaWxlZCBwZXJmb3JtYW5jZSBjaGVjayAl ZFxuIiwKKwkJCQljcnRjLT5iYXNlLmlkLCByYyk7CisJCWdvdG8gZW5kOworCX0KKworCS8qIHZh bGlkYXRlIHNvdXJjZSBzcGxpdDoKKwkgKiB1c2UgcHN0YXRlcyBzb3J0ZWQgYnkgc3RhZ2UgdG8g Y2hlY2sgcGxhbmVzIG9uIHNhbWUgc3RhZ2UKKwkgKiB3ZSBhc3N1bWUgdGhhdCBhbGwgcGlwZXMg YXJlIGluIHNvdXJjZSBzcGxpdCBzbyBpdHMgdmFsaWQgdG8gY29tcGFyZQorCSAqIHdpdGhvdXQg dGFraW5nIGludG8gYWNjb3VudCBsZWZ0L3JpZ2h0IG1peGVyIHBsYWNlbWVudAorCSAqLworCWZv ciAoaSA9IDE7IGkgPCBjbnQ7IGkrKykgeworCQlzdHJ1Y3QgcGxhbmVfc3RhdGUgKnBydl9wc3Rh dGUsICpjdXJfcHN0YXRlOworCQlzdHJ1Y3QgZHJtX3JlY3QgbGVmdF9yZWN0LCByaWdodF9yZWN0 OworCQlpbnQzMl90IGxlZnRfcGlkLCByaWdodF9waWQ7CisJCWludDMyX3Qgc3RhZ2U7CisKKwkJ cHJ2X3BzdGF0ZSA9ICZwc3RhdGVzW2kgLSAxXTsKKwkJY3VyX3BzdGF0ZSA9ICZwc3RhdGVzW2ld OworCQlpZiAocHJ2X3BzdGF0ZS0+c3RhZ2UgIT0gY3VyX3BzdGF0ZS0+c3RhZ2UpCisJCQljb250 aW51ZTsKKworCQlzdGFnZSA9IGN1cl9wc3RhdGUtPnN0YWdlOworCisJCWxlZnRfcGlkID0gcHJ2 X3BzdGF0ZS0+ZHB1X3BzdGF0ZS0+YmFzZS5wbGFuZS0+YmFzZS5pZDsKKwkJbGVmdF9yZWN0ID0g ZHJtX3BsYW5lX3N0YXRlX2Rlc3QocHJ2X3BzdGF0ZS0+ZHJtX3BzdGF0ZSk7CisKKwkJcmlnaHRf cGlkID0gY3VyX3BzdGF0ZS0+ZHB1X3BzdGF0ZS0+YmFzZS5wbGFuZS0+YmFzZS5pZDsKKwkJcmln aHRfcmVjdCA9IGRybV9wbGFuZV9zdGF0ZV9kZXN0KGN1cl9wc3RhdGUtPmRybV9wc3RhdGUpOwor CisJCWlmIChyaWdodF9yZWN0LngxIDwgbGVmdF9yZWN0LngxKSB7CisJCQlzd2FwKGxlZnRfcGlk LCByaWdodF9waWQpOworCQkJc3dhcChsZWZ0X3JlY3QsIHJpZ2h0X3JlY3QpOworCQl9CisKKwkJ LyoqCisJCSAqIC0gcGxhbmVzIGFyZSBlbnVtZXJhdGVkIGluIHBpcGUtcHJpb3JpdHkgb3JkZXIg c3VjaCB0aGF0CisJCSAqICAgcGxhbmVzIHdpdGggbG93ZXIgZHJtX2lkIG11c3QgYmUgbGVmdC1t b3N0IGluIGEgc2hhcmVkCisJCSAqICAgYmxlbmQtc3RhZ2Ugd2hlbiB1c2luZyBzb3VyY2Ugc3Bs aXQuCisJCSAqIC0gcGxhbmVzIGluIHNvdXJjZSBzcGxpdCBtdXN0IGJlIGNvbnRpZ3VvdXMgaW4g d2lkdGgKKwkJICogLSBwbGFuZXMgaW4gc291cmNlIHNwbGl0IG11c3QgaGF2ZSBzYW1lIGRlc3Qg eW9mZiBhbmQgaGVpZ2h0CisJCSAqLworCQlpZiAocmlnaHRfcGlkIDwgbGVmdF9waWQpIHsKKwkJ CURQVV9FUlJPUigKKwkJCQkiaW52YWxpZCBzcmMgc3BsaXQgY2ZnLiBwcmlvcml0eSBtaXNtYXRj aC4gc3RhZ2U6ICVkIGxlZnQ6ICVkIHJpZ2h0OiAlZFxuIiwKKwkJCQlzdGFnZSwgbGVmdF9waWQs IHJpZ2h0X3BpZCk7CisJCQlyYyA9IC1FSU5WQUw7CisJCQlnb3RvIGVuZDsKKwkJfSBlbHNlIGlm IChyaWdodF9yZWN0LngxICE9IGRybV9yZWN0X3dpZHRoKCZsZWZ0X3JlY3QpKSB7CisJCQlEUFVf RVJST1IoIm5vbi1jb250aWd1b3VzIGNvb3JkaW5hdGVzIGZvciBzcmMgc3BsaXQuICIKKwkJCQkg ICJzdGFnZTogJWQgbGVmdDogIiBEUk1fUkVDVF9GTVQgIiByaWdodDogIgorCQkJCSAgRFJNX1JF Q1RfRk1UICJcbiIsIHN0YWdlLAorCQkJCSAgRFJNX1JFQ1RfQVJHKCZsZWZ0X3JlY3QpLAorCQkJ CSAgRFJNX1JFQ1RfQVJHKCZyaWdodF9yZWN0KSk7CisJCQlyYyA9IC1FSU5WQUw7CisJCQlnb3Rv IGVuZDsKKwkJfSBlbHNlIGlmIChsZWZ0X3JlY3QueTEgIT0gcmlnaHRfcmVjdC55MSB8fAorCQkJ ICAgZHJtX3JlY3RfaGVpZ2h0KCZsZWZ0X3JlY3QpICE9IGRybV9yZWN0X2hlaWdodCgmcmlnaHRf cmVjdCkpIHsKKwkJCURQVV9FUlJPUigic291cmNlIHNwbGl0IGF0IHN0YWdlOiAlZC4gaW52YWxp ZCAiCisJCQkJICAieW9mZi9oZWlnaHQ6IGxlZnQ6ICIgRFJNX1JFQ1RfRk1UICIgcmlnaHQ6ICIK KwkJCQkgIERSTV9SRUNUX0ZNVCAiXG4iLCBzdGFnZSwKKwkJCQkgIERSTV9SRUNUX0FSRygmbGVm dF9yZWN0KSwKKwkJCQkgIERSTV9SRUNUX0FSRygmcmlnaHRfcmVjdCkpOworCQkJcmMgPSAtRUlO VkFMOworCQkJZ290byBlbmQ7CisJCX0KKwl9CisKK2VuZDoKKwlfZHB1X2NydGNfcnBfZnJlZV91 bnVzZWQoJmNzdGF0ZS0+cnApOworCWtmcmVlKHBzdGF0ZXMpOworCXJldHVybiByYzsKK30KKwor aW50IGRwdV9jcnRjX3ZibGFuayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIGJvb2wgZW4pCit7CisJ c3RydWN0IGRwdV9jcnRjICpkcHVfY3J0YzsKKwlpbnQgcmV0OworCisJaWYgKCFjcnRjKSB7CisJ CURQVV9FUlJPUigiaW52YWxpZCBjcnRjXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWRw dV9jcnRjID0gdG9fZHB1X2NydGMoY3J0Yyk7CisKKwltdXRleF9sb2NrKCZkcHVfY3J0Yy0+Y3J0 Y19sb2NrKTsKKwl0cmFjZV9kcHVfY3J0Y192YmxhbmsoRFJNSUQoJmRwdV9jcnRjLT5iYXNlKSwg ZW4sIGRwdV9jcnRjKTsKKwlpZiAoZHB1X2NydGMtPmVuYWJsZWQgJiYgIWRwdV9jcnRjLT5zdXNw ZW5kKSB7CisJCXJldCA9IF9kcHVfY3J0Y192YmxhbmtfZW5hYmxlX25vX2xvY2soZHB1X2NydGMs IGVuKTsKKwkJaWYgKHJldCkKKwkJCURQVV9FUlJPUigiJXMgdmJsYW5rIGVuYWJsZSBmYWlsZWQ6 ICVkXG4iLAorCQkJCQlkcHVfY3J0Yy0+bmFtZSwgcmV0KTsKKwl9CisJZHB1X2NydGMtPnZibGFu a19yZXF1ZXN0ZWQgPSBlbjsKKwltdXRleF91bmxvY2soJmRwdV9jcnRjLT5jcnRjX2xvY2spOwor CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZHB1X2NydGNfY2FuY2VsX3BlbmRpbmdfZmxpcChzdHJ1 Y3QgZHJtX2NydGMgKmNydGMsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZHB1 X2NydGMgKmRwdV9jcnRjID0gdG9fZHB1X2NydGMoY3J0Yyk7CisKKwlEUFVfREVCVUcoIiVzOiBj YW5jZWw6ICVwXG4iLCBkcHVfY3J0Yy0+bmFtZSwgZmlsZSk7CisJX2RwdV9jcnRjX2NvbXBsZXRl X2ZsaXAoY3J0YywgZmlsZSk7Cit9CisKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKK3N0YXRpYyBp bnQgX2RwdV9kZWJ1Z2ZzX3N0YXR1c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0 YSkKK3sKKwlzdHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRjOworCXN0cnVjdCBkcHVfcGxhbmVfc3Rh dGUgKnBzdGF0ZSA9IE5VTEw7CisJc3RydWN0IGRwdV9jcnRjX21peGVyICptOworCisJc3RydWN0 IGRybV9jcnRjICpjcnRjOworCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lOworCXN0cnVjdCBkcm1f ZGlzcGxheV9tb2RlICptb2RlOworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiOworCXN0cnVj dCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlOworCXN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAqY3N0YXRl OworCisJaW50IGksIG91dF93aWR0aDsKKworCWlmICghcyB8fCAhcy0+cHJpdmF0ZSkKKwkJcmV0 dXJuIC1FSU5WQUw7CisKKwlkcHVfY3J0YyA9IHMtPnByaXZhdGU7CisJY3J0YyA9ICZkcHVfY3J0 Yy0+YmFzZTsKKwljc3RhdGUgPSB0b19kcHVfY3J0Y19zdGF0ZShjcnRjLT5zdGF0ZSk7CisKKwlt dXRleF9sb2NrKCZkcHVfY3J0Yy0+Y3J0Y19sb2NrKTsKKwltb2RlID0gJmNydGMtPnN0YXRlLT5h ZGp1c3RlZF9tb2RlOworCW91dF93aWR0aCA9IGRwdV9jcnRjX2dldF9taXhlcl93aWR0aChkcHVf Y3J0YywgY3N0YXRlLCBtb2RlKTsKKworCXNlcV9wcmludGYocywgImNydGM6JWQgd2lkdGg6JWQg aGVpZ2h0OiVkXG4iLCBjcnRjLT5iYXNlLmlkLAorCQkJCW1vZGUtPmhkaXNwbGF5LCBtb2RlLT52 ZGlzcGxheSk7CisKKwlzZXFfcHV0cyhzLCAiXG4iKTsKKworCWZvciAoaSA9IDA7IGkgPCBkcHVf Y3J0Yy0+bnVtX21peGVyczsgKytpKSB7CisJCW0gPSAmZHB1X2NydGMtPm1peGVyc1tpXTsKKwkJ aWYgKCFtLT5od19sbSkKKwkJCXNlcV9wcmludGYocywgIlx0bWl4ZXJbJWRdIGhhcyBubyBsbVxu IiwgaSk7CisJCWVsc2UgaWYgKCFtLT5od19jdGwpCisJCQlzZXFfcHJpbnRmKHMsICJcdG1peGVy WyVkXSBoYXMgbm8gY3RsXG4iLCBpKTsKKwkJZWxzZQorCQkJc2VxX3ByaW50ZihzLCAiXHRtaXhl cjolZCBjdGw6JWQgd2lkdGg6JWQgaGVpZ2h0OiVkXG4iLAorCQkJCW0tPmh3X2xtLT5pZHggLSBM TV8wLCBtLT5od19jdGwtPmlkeCAtIENUTF8wLAorCQkJCW91dF93aWR0aCwgbW9kZS0+dmRpc3Bs YXkpOworCX0KKworCXNlcV9wdXRzKHMsICJcbiIpOworCisJZHJtX2F0b21pY19jcnRjX2Zvcl9l YWNoX3BsYW5lKHBsYW5lLCBjcnRjKSB7CisJCXBzdGF0ZSA9IHRvX2RwdV9wbGFuZV9zdGF0ZShw bGFuZS0+c3RhdGUpOworCQlzdGF0ZSA9IHBsYW5lLT5zdGF0ZTsKKworCQlpZiAoIXBzdGF0ZSB8 fCAhc3RhdGUpCisJCQljb250aW51ZTsKKworCQlzZXFfcHJpbnRmKHMsICJcdHBsYW5lOiV1IHN0 YWdlOiVkXG4iLCBwbGFuZS0+YmFzZS5pZCwKKwkJCXBzdGF0ZS0+c3RhZ2UpOworCisJCWlmIChw bGFuZS0+c3RhdGUtPmZiKSB7CisJCQlmYiA9IHBsYW5lLT5zdGF0ZS0+ZmI7CisKKwkJCXNlcV9w cmludGYocywgIlx0ZmI6JWQgaW1hZ2UgZm9ybWF0OiU0LjRzIHd4aDoldXgldSAiLAorCQkJCWZi LT5iYXNlLmlkLCAoY2hhciAqKSAmZmItPmZvcm1hdC0+Zm9ybWF0LAorCQkJCWZiLT53aWR0aCwg ZmItPmhlaWdodCk7CisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmYi0+Zm9ybWF0LT5j cHApOyArK2kpCisJCQkJc2VxX3ByaW50ZihzLCAiY3BwWyVkXToldSAiLAorCQkJCQkJaSwgZmIt PmZvcm1hdC0+Y3BwW2ldKTsKKwkJCXNlcV9wdXRzKHMsICJcblx0Iik7CisKKwkJCXNlcV9wcmlu dGYocywgIm1vZGlmaWVyOiU4bGx1ICIsIGZiLT5tb2RpZmllcik7CisJCQlzZXFfcHV0cyhzLCAi XG4iKTsKKworCQkJc2VxX3B1dHMocywgIlx0Iik7CisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlf U0laRShmYi0+cGl0Y2hlcyk7IGkrKykKKwkJCQlzZXFfcHJpbnRmKHMsICJwaXRjaGVzWyVkXTol OHUgIiwgaSwKKwkJCQkJCQlmYi0+cGl0Y2hlc1tpXSk7CisJCQlzZXFfcHV0cyhzLCAiXG4iKTsK KworCQkJc2VxX3B1dHMocywgIlx0Iik7CisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShm Yi0+b2Zmc2V0cyk7IGkrKykKKwkJCQlzZXFfcHJpbnRmKHMsICJvZmZzZXRzWyVkXTolOHUgIiwg aSwKKwkJCQkJCQlmYi0+b2Zmc2V0c1tpXSk7CisJCQlzZXFfcHV0cyhzLCAiXG4iKTsKKwkJfQor CisJCXNlcV9wcmludGYocywgIlx0c3JjX3g6JTRkIHNyY195OiU0ZCBzcmNfdzolNGQgc3JjX2g6 JTRkXG4iLAorCQkJc3RhdGUtPnNyY194LCBzdGF0ZS0+c3JjX3ksIHN0YXRlLT5zcmNfdywgc3Rh dGUtPnNyY19oKTsKKworCQlzZXFfcHJpbnRmKHMsICJcdGRzdCB4OiU0ZCBkc3RfeTolNGQgZHN0 X3c6JTRkIGRzdF9oOiU0ZFxuIiwKKwkJCXN0YXRlLT5jcnRjX3gsIHN0YXRlLT5jcnRjX3ksIHN0 YXRlLT5jcnRjX3csCisJCQlzdGF0ZS0+Y3J0Y19oKTsKKwkJc2VxX3ByaW50ZihzLCAiXHRtdWx0 aXJlY3Q6IG1vZGU6ICVkIGluZGV4OiAlZFxuIiwKKwkJCXBzdGF0ZS0+bXVsdGlyZWN0X21vZGUs IHBzdGF0ZS0+bXVsdGlyZWN0X2luZGV4KTsKKworCQlzZXFfcHV0cyhzLCAiXG4iKTsKKwl9CisJ aWYgKGRwdV9jcnRjLT52YmxhbmtfY2JfY291bnQpIHsKKwkJa3RpbWVfdCBkaWZmID0ga3RpbWVf c3ViKGt0aW1lX2dldCgpLCBkcHVfY3J0Yy0+dmJsYW5rX2NiX3RpbWUpOworCQlzNjQgZGlmZl9t cyA9IGt0aW1lX3RvX21zKGRpZmYpOworCQlzNjQgZnBzID0gZGlmZl9tcyA/IGRpdl9zNjQoCisJ CQkJZHB1X2NydGMtPnZibGFua19jYl9jb3VudCAqIDEwMDAsIGRpZmZfbXMpIDogMDsKKworCQlz ZXFfcHJpbnRmKHMsCisJCQkidmJsYW5rIGZwczolbGxkIGNvdW50OiV1IHRvdGFsOiVsbHVtcyB0 b3RhbF9mcmFtZWNvdW50OiVsbHVcbiIsCisJCQkJZnBzLCBkcHVfY3J0Yy0+dmJsYW5rX2NiX2Nv dW50LAorCQkJCWt0aW1lX3RvX21zKGRpZmYpLCBkcHVfY3J0Yy0+cGxheV9jb3VudCk7CisKKwkJ LyogcmVzZXQgdGltZSAmIGNvdW50IGZvciBuZXh0IG1lYXN1cmVtZW50ICovCisJCWRwdV9jcnRj LT52YmxhbmtfY2JfY291bnQgPSAwOworCQlkcHVfY3J0Yy0+dmJsYW5rX2NiX3RpbWUgPSBrdGlt ZV9zZXQoMCwgMCk7CisJfQorCisJc2VxX3ByaW50ZihzLCAidmJsYW5rX2VuYWJsZTolZFxuIiwg ZHB1X2NydGMtPnZibGFua19yZXF1ZXN0ZWQpOworCisJbXV0ZXhfdW5sb2NrKCZkcHVfY3J0Yy0+ Y3J0Y19sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9kcHVfZGVidWdmc19z dGF0dXNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwly ZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgX2RwdV9kZWJ1Z2ZzX3N0YXR1c19zaG93LCBpbm9kZS0+ aV9wcml2YXRlKTsKK30KKworc3RhdGljIHNzaXplX3QgX2RwdV9jcnRjX21pc3Jfc2V0dXAoc3Ry dWN0IGZpbGUgKmZpbGUsCisJCWNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1Ziwgc2l6ZV90IGNv dW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGRwdV9jcnRjICpkcHVfY3J0YzsKKwlzdHJ1 Y3QgZHB1X2NydGNfbWl4ZXIgKm07CisJaW50IGkgPSAwLCByYzsKKwljaGFyIGJ1ZltNSVNSX0JV RkZfU0laRSArIDFdOworCXUzMiBmcmFtZV9jb3VudCwgZW5hYmxlOworCXNpemVfdCBidWZmX2Nv cHk7CisKKwlpZiAoIWZpbGUgfHwgIWZpbGUtPnByaXZhdGVfZGF0YSkKKwkJcmV0dXJuIC1FSU5W QUw7CisKKwlkcHVfY3J0YyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlidWZmX2NvcHkgPSBtaW5f dChzaXplX3QsIGNvdW50LCBNSVNSX0JVRkZfU0laRSk7CisJaWYgKGNvcHlfZnJvbV91c2VyKGJ1 ZiwgdXNlcl9idWYsIGJ1ZmZfY29weSkpIHsKKwkJRFBVX0VSUk9SKCJidWZmZXIgY29weSBmYWls ZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlidWZbYnVmZl9jb3B5XSA9IDA7IC8q IGVuZCBvZiBzdHJpbmcgKi8KKworCWlmIChzc2NhbmYoYnVmLCAiJXUgJXUiLCAmZW5hYmxlLCAm ZnJhbWVfY291bnQpICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJcmMgPSBfZHB1X2NydGNf cG93ZXJfZW5hYmxlKGRwdV9jcnRjLCB0cnVlKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKwor CW11dGV4X2xvY2soJmRwdV9jcnRjLT5jcnRjX2xvY2spOworCWRwdV9jcnRjLT5taXNyX2VuYWJs ZSA9IGVuYWJsZTsKKwlkcHVfY3J0Yy0+bWlzcl9mcmFtZV9jb3VudCA9IGZyYW1lX2NvdW50Owor CWZvciAoaSA9IDA7IGkgPCBkcHVfY3J0Yy0+bnVtX21peGVyczsgKytpKSB7CisJCWRwdV9jcnRj LT5taXNyX2RhdGFbaV0gPSAwOworCQltID0gJmRwdV9jcnRjLT5taXhlcnNbaV07CisJCWlmICgh bS0+aHdfbG0gfHwgIW0tPmh3X2xtLT5vcHMuc2V0dXBfbWlzcikKKwkJCWNvbnRpbnVlOworCisJ CW0tPmh3X2xtLT5vcHMuc2V0dXBfbWlzcihtLT5od19sbSwgZW5hYmxlLCBmcmFtZV9jb3VudCk7 CisJfQorCW11dGV4X3VubG9jaygmZHB1X2NydGMtPmNydGNfbG9jayk7CisJX2RwdV9jcnRjX3Bv d2VyX2VuYWJsZShkcHVfY3J0YywgZmFsc2UpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0 aWMgc3NpemVfdCBfZHB1X2NydGNfbWlzcl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLAorCQljaGFy IF9fdXNlciAqdXNlcl9idWZmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1 Y3QgZHB1X2NydGMgKmRwdV9jcnRjOworCXN0cnVjdCBkcHVfY3J0Y19taXhlciAqbTsKKwlpbnQg aSA9IDAsIHJjOworCXUzMiBtaXNyX3N0YXR1czsKKwlzc2l6ZV90IGxlbiA9IDA7CisJY2hhciBi dWZbTUlTUl9CVUZGX1NJWkUgKyAxXSA9IHsnXDAnfTsKKworCWlmICgqcHBvcykKKwkJcmV0dXJu IDA7CisKKwlpZiAoIWZpbGUgfHwgIWZpbGUtPnByaXZhdGVfZGF0YSkKKwkJcmV0dXJuIC1FSU5W QUw7CisKKwlkcHVfY3J0YyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlyYyA9IF9kcHVfY3J0Y19w b3dlcl9lbmFibGUoZHB1X2NydGMsIHRydWUpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJ bXV0ZXhfbG9jaygmZHB1X2NydGMtPmNydGNfbG9jayk7CisJaWYgKCFkcHVfY3J0Yy0+bWlzcl9l bmFibGUpIHsKKwkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgTUlTUl9CVUZGX1NJWkUgLSBs ZW4sCisJCQkiZGlzYWJsZWRcbiIpOworCQlnb3RvIGJ1ZmZfY2hlY2s7CisJfQorCisJZm9yIChp ID0gMDsgaSA8IGRwdV9jcnRjLT5udW1fbWl4ZXJzOyArK2kpIHsKKwkJbSA9ICZkcHVfY3J0Yy0+ bWl4ZXJzW2ldOworCQlpZiAoIW0tPmh3X2xtIHx8ICFtLT5od19sbS0+b3BzLmNvbGxlY3RfbWlz cikKKwkJCWNvbnRpbnVlOworCisJCW1pc3Jfc3RhdHVzID0gbS0+aHdfbG0tPm9wcy5jb2xsZWN0 X21pc3IobS0+aHdfbG0pOworCQlkcHVfY3J0Yy0+bWlzcl9kYXRhW2ldID0gbWlzcl9zdGF0dXMg PyBtaXNyX3N0YXR1cyA6CisJCQkJCQkJZHB1X2NydGMtPm1pc3JfZGF0YVtpXTsKKwkJbGVuICs9 IHNucHJpbnRmKGJ1ZiArIGxlbiwgTUlTUl9CVUZGX1NJWkUgLSBsZW4sICJsbSBpZHg6JWRcbiIs CisJCQkJCW0tPmh3X2xtLT5pZHggLSBMTV8wKTsKKwkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxl biwgTUlTUl9CVUZGX1NJWkUgLSBsZW4sICIweCV4XG4iLAorCQkJCQkJCWRwdV9jcnRjLT5taXNy X2RhdGFbaV0pOworCX0KKworYnVmZl9jaGVjazoKKwlpZiAoY291bnQgPD0gbGVuKSB7CisJCWxl biA9IDA7CisJCWdvdG8gZW5kOworCX0KKworCWlmIChjb3B5X3RvX3VzZXIodXNlcl9idWZmLCBi dWYsIGxlbikpIHsKKwkJbGVuID0gLUVGQVVMVDsKKwkJZ290byBlbmQ7CisJfQorCisJKnBwb3Mg Kz0gbGVuOyAgIC8qIGluY3JlYXNlIG9mZnNldCAqLworCitlbmQ6CisJbXV0ZXhfdW5sb2NrKCZk cHVfY3J0Yy0+Y3J0Y19sb2NrKTsKKwlfZHB1X2NydGNfcG93ZXJfZW5hYmxlKGRwdV9jcnRjLCBm YWxzZSk7CisJcmV0dXJuIGxlbjsKK30KKworI2RlZmluZSBERUZJTkVfRFBVX0RFQlVHRlNfU0VR X0ZPUFMoX19wcmVmaXgpICAgICAgICAgICAgICAgICAgICAgICAgICBcCitzdGF0aWMgaW50IF9f cHJlZml4ICMjIF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQlc Cit7CQkJCQkJCQkJXAorCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBfX3ByZWZpeCAjIyBfc2hv dywgaW5vZGUtPmlfcHJpdmF0ZSk7CVwKK30JCQkJCQkJCQlcCitzdGF0aWMgY29uc3Qgc3RydWN0 IGZpbGVfb3BlcmF0aW9ucyBfX3ByZWZpeCAjIyBfZm9wcyA9IHsJCVwKKwkub3duZXIgPSBUSElT X01PRFVMRSwJCQkJCQlcCisJLm9wZW4gPSBfX3ByZWZpeCAjIyBfb3BlbiwJCQkJCVwKKwkucmVs ZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAkJCQkJXAorCS5yZWFkID0gc2VxX3JlYWQsCQkJCQkJXAor CS5sbHNlZWsgPSBzZXFfbHNlZWssCQkJCQkJXAorfQorCitzdGF0aWMgaW50IGRwdV9jcnRjX2Rl YnVnZnNfc3RhdGVfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCit7CisJc3RydWN0 IGRybV9jcnRjICpjcnRjID0gKHN0cnVjdCBkcm1fY3J0YyAqKSBzLT5wcml2YXRlOworCXN0cnVj dCBkcHVfY3J0YyAqZHB1X2NydGMgPSB0b19kcHVfY3J0YyhjcnRjKTsKKwlzdHJ1Y3QgZHB1X2Ny dGNfcmVzICpyZXM7CisJc3RydWN0IGRwdV9jcnRjX3Jlc3Bvb2wgKnJwOworCWludCBpOworCisJ c2VxX3ByaW50ZihzLCAiY2xpZW50IHR5cGU6ICVkXG4iLCBkcHVfY3J0Y19nZXRfY2xpZW50X3R5 cGUoY3J0YykpOworCXNlcV9wcmludGYocywgImludGZfbW9kZTogJWRcbiIsIGRwdV9jcnRjX2dl dF9pbnRmX21vZGUoY3J0YykpOworCXNlcV9wcmludGYocywgImNvcmVfY2xrX3JhdGU6ICVsbHVc biIsCisJCQlkcHVfY3J0Yy0+Y3VyX3BlcmYuY29yZV9jbGtfcmF0ZSk7CisJZm9yIChpID0gRFBV X1BPV0VSX0hBTkRMRV9EQlVTX0lEX01OT0M7CisJCQlpIDwgRFBVX1BPV0VSX0hBTkRMRV9EQlVT X0lEX01BWDsgaSsrKSB7CisJCXNlcV9wcmludGYocywgImJ3X2N0bFslc106ICVsbHVcbiIsCisJ CQkJZHB1X3Bvd2VyX2hhbmRsZV9nZXRfZGJ1c19uYW1lKGkpLAorCQkJCWRwdV9jcnRjLT5jdXJf cGVyZi5id19jdGxbaV0pOworCQlzZXFfcHJpbnRmKHMsICJtYXhfcGVyX3BpcGVfaWJbJXNdOiAl bGx1XG4iLAorCQkJCWRwdV9wb3dlcl9oYW5kbGVfZ2V0X2RidXNfbmFtZShpKSwKKwkJCQlkcHVf Y3J0Yy0+Y3VyX3BlcmYubWF4X3Blcl9waXBlX2liW2ldKTsKKwl9CisKKwltdXRleF9sb2NrKCZk cHVfY3J0Yy0+cnBfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShycCwgJmRwdV9jcnRjLT5y cF9oZWFkLCBycF9saXN0KSB7CisJCXNlcV9wcmludGYocywgInJwLiVkOiAiLCBycC0+c2VxdWVu Y2VfaWQpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcywgJnJwLT5yZXNfbGlzdCwgbGlzdCkK KwkJCXNlcV9wcmludGYocywgIjB4JXgvMHglbGx4LyVwSy8lZCAiLAorCQkJCQlyZXMtPnR5cGUs IHJlcy0+dGFnLCByZXMtPnZhbCwKKwkJCQkJYXRvbWljX3JlYWQoJnJlcy0+cmVmY291bnQpKTsK KwkJc2VxX3B1dHMocywgIlxuIik7CisJfQorCW11dGV4X3VubG9jaygmZHB1X2NydGMtPnJwX2xv Y2spOworCisJcmV0dXJuIDA7Cit9CitERUZJTkVfRFBVX0RFQlVHRlNfU0VRX0ZPUFMoZHB1X2Ny dGNfZGVidWdmc19zdGF0ZSk7CisKK3N0YXRpYyBpbnQgX2RwdV9jcnRjX2luaXRfZGVidWdmcyhz dHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IGRwdV9jcnRjICpkcHVfY3J0YzsKKwlz dHJ1Y3QgZHB1X2ttcyAqZHB1X2ttczsKKworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVy YXRpb25zIGRlYnVnZnNfc3RhdHVzX2ZvcHMgPSB7CisJCS5vcGVuID0JCV9kcHVfZGVidWdmc19z dGF0dXNfb3BlbiwKKwkJLnJlYWQgPQkJc2VxX3JlYWQsCisJCS5sbHNlZWsgPQlzZXFfbHNlZWss CisJCS5yZWxlYXNlID0Jc2luZ2xlX3JlbGVhc2UsCisJfTsKKwlzdGF0aWMgY29uc3Qgc3RydWN0 IGZpbGVfb3BlcmF0aW9ucyBkZWJ1Z2ZzX21pc3JfZm9wcyA9IHsKKwkJLm9wZW4gPQkJc2ltcGxl X29wZW4sCisJCS5yZWFkID0JCV9kcHVfY3J0Y19taXNyX3JlYWQsCisJCS53cml0ZSA9CV9kcHVf Y3J0Y19taXNyX3NldHVwLAorCX07CisKKwlpZiAoIWNydGMpCisJCXJldHVybiAtRUlOVkFMOwor CWRwdV9jcnRjID0gdG9fZHB1X2NydGMoY3J0Yyk7CisKKwlkcHVfa21zID0gX2RwdV9jcnRjX2dl dF9rbXMoY3J0Yyk7CisJaWYgKCFkcHVfa21zKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRwdV9j cnRjLT5kZWJ1Z2ZzX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoZHB1X2NydGMtPm5hbWUsCisJ CQljcnRjLT5kZXYtPnByaW1hcnktPmRlYnVnZnNfcm9vdCk7CisJaWYgKCFkcHVfY3J0Yy0+ZGVi dWdmc19yb290KQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIGRvbid0IGVycm9yIGNoZWNrIHRo ZXNlICovCisJZGVidWdmc19jcmVhdGVfZmlsZSgic3RhdHVzIiwgMDQwMCwKKwkJCWRwdV9jcnRj LT5kZWJ1Z2ZzX3Jvb3QsCisJCQlkcHVfY3J0YywgJmRlYnVnZnNfc3RhdHVzX2ZvcHMpOworCWRl YnVnZnNfY3JlYXRlX2ZpbGUoInN0YXRlIiwgMDYwMCwKKwkJCWRwdV9jcnRjLT5kZWJ1Z2ZzX3Jv b3QsCisJCQkmZHB1X2NydGMtPmJhc2UsCisJCQkmZHB1X2NydGNfZGVidWdmc19zdGF0ZV9mb3Bz KTsKKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJtaXNyX2RhdGEiLCAwNjAwLCBkcHVfY3J0Yy0+ZGVi dWdmc19yb290LAorCQkJCQlkcHVfY3J0YywgJmRlYnVnZnNfbWlzcl9mb3BzKTsKKworCXJldHVy biAwOworfQorCitzdGF0aWMgdm9pZCBfZHB1X2NydGNfZGVzdHJveV9kZWJ1Z2ZzKHN0cnVjdCBk cm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRjOworCisJaWYgKCFj cnRjKQorCQlyZXR1cm47CisJZHB1X2NydGMgPSB0b19kcHVfY3J0YyhjcnRjKTsKKwlkZWJ1Z2Zz X3JlbW92ZV9yZWN1cnNpdmUoZHB1X2NydGMtPmRlYnVnZnNfcm9vdCk7Cit9CisjZWxzZQorc3Rh dGljIGludCBfZHB1X2NydGNfaW5pdF9kZWJ1Z2ZzKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX2RwdV9jcnRjX2Rlc3Ryb3lfZGVidWdmcyhz dHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7Cit9CisjZW5kaWYgLyogQ09ORklHX0RFQlVHX0ZTICov CisKK3N0YXRpYyBpbnQgZHB1X2NydGNfbGF0ZV9yZWdpc3RlcihzdHJ1Y3QgZHJtX2NydGMgKmNy dGMpCit7CisJcmV0dXJuIF9kcHVfY3J0Y19pbml0X2RlYnVnZnMoY3J0Yyk7Cit9CisKK3N0YXRp YyB2b2lkIGRwdV9jcnRjX2Vhcmx5X3VucmVnaXN0ZXIoc3RydWN0IGRybV9jcnRjICpjcnRjKQor eworCV9kcHVfY3J0Y19kZXN0cm95X2RlYnVnZnMoY3J0Yyk7Cit9CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3QgZHJtX2NydGNfZnVuY3MgZHB1X2NydGNfZnVuY3MgPSB7CisJLnNldF9jb25maWcgPSBk cm1fYXRvbWljX2hlbHBlcl9zZXRfY29uZmlnLAorCS5kZXN0cm95ID0gZHB1X2NydGNfZGVzdHJv eSwKKwkucGFnZV9mbGlwID0gZHJtX2F0b21pY19oZWxwZXJfcGFnZV9mbGlwLAorCS5yZXNldCA9 IGRwdV9jcnRjX3Jlc2V0LAorCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHB1X2NydGNfZHVw bGljYXRlX3N0YXRlLAorCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGRwdV9jcnRjX2Rlc3Ryb3lf c3RhdGUsCisJLmxhdGVfcmVnaXN0ZXIgPSBkcHVfY3J0Y19sYXRlX3JlZ2lzdGVyLAorCS5lYXJs eV91bnJlZ2lzdGVyID0gZHB1X2NydGNfZWFybHlfdW5yZWdpc3RlciwKK307CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzIGRwdV9jcnRjX2hlbHBlcl9mdW5jcyA9 IHsKKwkuZGlzYWJsZSA9IGRwdV9jcnRjX2Rpc2FibGUsCisJLmF0b21pY19lbmFibGUgPSBkcHVf Y3J0Y19lbmFibGUsCisJLmF0b21pY19jaGVjayA9IGRwdV9jcnRjX2F0b21pY19jaGVjaywKKwku YXRvbWljX2JlZ2luID0gZHB1X2NydGNfYXRvbWljX2JlZ2luLAorCS5hdG9taWNfZmx1c2ggPSBk cHVfY3J0Y19hdG9taWNfZmx1c2gsCit9OworCitzdGF0aWMgdm9pZCBfZHB1X2NydGNfZXZlbnRf Y2Ioc3RydWN0IGt0aHJlYWRfd29yayAqd29yaykKK3sKKwlzdHJ1Y3QgZHB1X2NydGNfZXZlbnQg KmV2ZW50OworCXN0cnVjdCBkcHVfY3J0YyAqZHB1X2NydGM7CisJdW5zaWduZWQgbG9uZyBpcnFf ZmxhZ3M7CisKKwlpZiAoIXdvcmspIHsKKwkJRFBVX0VSUk9SKCJpbnZhbGlkIHdvcmsgaXRlbVxu Iik7CisJCXJldHVybjsKKwl9CisKKwlldmVudCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qg ZHB1X2NydGNfZXZlbnQsIGt0X3dvcmspOworCisJLyogc2V0IGRwdV9jcnRjIHRvIE5VTEwgZm9y IHN0YXRpYyB3b3JrIHN0cnVjdHVyZXMgKi8KKwlkcHVfY3J0YyA9IGV2ZW50LT5kcHVfY3J0YzsK KwlpZiAoIWRwdV9jcnRjKQorCQlyZXR1cm47CisKKwlpZiAoZXZlbnQtPmNiX2Z1bmMpCisJCWV2 ZW50LT5jYl9mdW5jKCZkcHVfY3J0Yy0+YmFzZSwgZXZlbnQtPnVzcik7CisKKwlzcGluX2xvY2tf aXJxc2F2ZSgmZHB1X2NydGMtPmV2ZW50X2xvY2ssIGlycV9mbGFncyk7CisJbGlzdF9hZGRfdGFp bCgmZXZlbnQtPmxpc3QsICZkcHVfY3J0Yy0+ZXZlbnRfZnJlZV9saXN0KTsKKwlzcGluX3VubG9j a19pcnFyZXN0b3JlKCZkcHVfY3J0Yy0+ZXZlbnRfbG9jaywgaXJxX2ZsYWdzKTsKK30KKworaW50 IGRwdV9jcnRjX2V2ZW50X3F1ZXVlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJdm9pZCAoKmZ1 bmMpKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywgdm9pZCAqdXNyKSwgdm9pZCAqdXNyKQoreworCXVu c2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCXN0cnVjdCBkcHVfY3J0YyAqZHB1X2NydGM7CisJc3Ry dWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdjsKKwlzdHJ1Y3QgZHB1X2NydGNfZXZlbnQgKmV2ZW50 ID0gTlVMTDsKKwl1MzIgY3J0Y19pZDsKKworCWlmICghY3J0YyB8fCAhY3J0Yy0+ZGV2IHx8ICFj cnRjLT5kZXYtPmRldl9wcml2YXRlIHx8ICFmdW5jKSB7CisJCURQVV9FUlJPUigiaW52YWxpZCBw YXJhbWV0ZXJzXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWRwdV9jcnRjID0gdG9fZHB1 X2NydGMoY3J0Yyk7CisJcHJpdiA9IGNydGMtPmRldi0+ZGV2X3ByaXZhdGU7CisJY3J0Y19pZCA9 IGRybV9jcnRjX2luZGV4KGNydGMpOworCisJLyoKKwkgKiBPYnRhaW4gYW4gZXZlbnQgc3RydWN0 IGZyb20gdGhlIHByaXZhdGUgY2FjaGUuIFRoaXMgZXZlbnQKKwkgKiBxdWV1ZSBtYXkgYmUgY2Fs bGVkIGZyb20gSVNSIGNvbnRleHRzLCBzbyB1c2UgYSBwcml2YXRlCisJICogY2FjaGUgdG8gYXZv aWQgY2FsbGluZyBhbnkgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb25zLgorCSAqLworCXNwaW5f bG9ja19pcnFzYXZlKCZkcHVfY3J0Yy0+ZXZlbnRfbG9jaywgaXJxX2ZsYWdzKTsKKwlpZiAoIWxp c3RfZW1wdHkoJmRwdV9jcnRjLT5ldmVudF9mcmVlX2xpc3QpKSB7CisJCWV2ZW50ID0gbGlzdF9m aXJzdF9lbnRyeSgmZHB1X2NydGMtPmV2ZW50X2ZyZWVfbGlzdCwKKwkJCQlzdHJ1Y3QgZHB1X2Ny dGNfZXZlbnQsIGxpc3QpOworCQlsaXN0X2RlbF9pbml0KCZldmVudC0+bGlzdCk7CisJfQorCXNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJmRwdV9jcnRjLT5ldmVudF9sb2NrLCBpcnFfZmxhZ3MpOwor CisJaWYgKCFldmVudCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBwb3B1bGF0ZSBldmVudCBu b2RlICovCisJZXZlbnQtPmRwdV9jcnRjID0gZHB1X2NydGM7CisJZXZlbnQtPmNiX2Z1bmMgPSBm dW5jOworCWV2ZW50LT51c3IgPSB1c3I7CisKKwkvKiBxdWV1ZSBuZXcgZXZlbnQgcmVxdWVzdCAq LworCWt0aHJlYWRfaW5pdF93b3JrKCZldmVudC0+a3Rfd29yaywgX2RwdV9jcnRjX2V2ZW50X2Ni KTsKKwlrdGhyZWFkX3F1ZXVlX3dvcmsoJnByaXYtPmV2ZW50X3RocmVhZFtjcnRjX2lkXS53b3Jr ZXIsCisJCQkmZXZlbnQtPmt0X3dvcmspOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg X2RwdV9jcnRjX2luaXRfZXZlbnRzKHN0cnVjdCBkcHVfY3J0YyAqZHB1X2NydGMpCit7CisJaW50 IGksIHJjID0gMDsKKworCWlmICghZHB1X2NydGMpIHsKKwkJRFBVX0VSUk9SKCJpbnZhbGlkIGNy dGNcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzcGluX2xvY2tfaW5pdCgmZHB1X2Ny dGMtPmV2ZW50X2xvY2spOworCisJSU5JVF9MSVNUX0hFQUQoJmRwdV9jcnRjLT5ldmVudF9mcmVl X2xpc3QpOworCWZvciAoaSA9IDA7IGkgPCBEUFVfQ1JUQ19NQVhfRVZFTlRfQ09VTlQ7ICsraSkK KwkJbGlzdF9hZGRfdGFpbCgmZHB1X2NydGMtPmV2ZW50X2NhY2hlW2ldLmxpc3QsCisJCQkJJmRw dV9jcnRjLT5ldmVudF9mcmVlX2xpc3QpOworCisJcmV0dXJuIHJjOworfQorCisvKiBpbml0aWFs aXplIGNydGMgKi8KK3N0cnVjdCBkcm1fY3J0YyAqZHB1X2NydGNfaW5pdChzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LCBzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKK3sKKwlzdHJ1Y3QgZHJtX2NydGMg KmNydGMgPSBOVUxMOworCXN0cnVjdCBkcHVfY3J0YyAqZHB1X2NydGMgPSBOVUxMOworCXN0cnVj dCBtc21fZHJtX3ByaXZhdGUgKnByaXYgPSBOVUxMOworCXN0cnVjdCBkcHVfa21zICprbXMgPSBO VUxMOworCWludCBpLCByYzsKKworCXByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWttcyA9IHRv X2RwdV9rbXMocHJpdi0+a21zKTsKKworCWRwdV9jcnRjID0ga3phbGxvYyhzaXplb2YoKmRwdV9j cnRjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkcHVfY3J0YykKKwkJcmV0dXJuIEVSUl9QVFIoLUVO T01FTSk7CisKKwljcnRjID0gJmRwdV9jcnRjLT5iYXNlOworCWNydGMtPmRldiA9IGRldjsKKwor CW11dGV4X2luaXQoJmRwdV9jcnRjLT5jcnRjX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZkcHVf Y3J0Yy0+c3Bpbl9sb2NrKTsKKwlhdG9taWNfc2V0KCZkcHVfY3J0Yy0+ZnJhbWVfcGVuZGluZywg MCk7CisKKwltdXRleF9pbml0KCZkcHVfY3J0Yy0+cnBfbG9jayk7CisJSU5JVF9MSVNUX0hFQUQo JmRwdV9jcnRjLT5ycF9oZWFkKTsKKworCWluaXRfY29tcGxldGlvbigmZHB1X2NydGMtPmZyYW1l X2RvbmVfY29tcCk7CisKKwlJTklUX0xJU1RfSEVBRCgmZHB1X2NydGMtPmZyYW1lX2V2ZW50X2xp c3QpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZHB1X2NydGMtPmZyYW1lX2V2ZW50 cyk7IGkrKykgeworCQlJTklUX0xJU1RfSEVBRCgmZHB1X2NydGMtPmZyYW1lX2V2ZW50c1tpXS5s aXN0KTsKKwkJbGlzdF9hZGQoJmRwdV9jcnRjLT5mcmFtZV9ldmVudHNbaV0ubGlzdCwKKwkJCQkm ZHB1X2NydGMtPmZyYW1lX2V2ZW50X2xpc3QpOworCQlrdGhyZWFkX2luaXRfd29yaygmZHB1X2Ny dGMtPmZyYW1lX2V2ZW50c1tpXS53b3JrLAorCQkJCWRwdV9jcnRjX2ZyYW1lX2V2ZW50X3dvcmsp OworCX0KKworCWRybV9jcnRjX2luaXRfd2l0aF9wbGFuZXMoZGV2LCBjcnRjLCBwbGFuZSwgTlVM TCwgJmRwdV9jcnRjX2Z1bmNzLAorCQkJCU5VTEwpOworCisJZHJtX2NydGNfaGVscGVyX2FkZChj cnRjLCAmZHB1X2NydGNfaGVscGVyX2Z1bmNzKTsKKwlwbGFuZS0+Y3J0YyA9IGNydGM7CisKKwkv KiBzYXZlIHVzZXIgZnJpZW5kbHkgQ1JUQyBuYW1lIGZvciBsYXRlciAqLworCXNucHJpbnRmKGRw dV9jcnRjLT5uYW1lLCBEUFVfQ1JUQ19OQU1FX1NJWkUsICJjcnRjJXUiLCBjcnRjLT5iYXNlLmlk KTsKKworCS8qIGluaXRpYWxpemUgZXZlbnQgaGFuZGxpbmcgKi8KKwlyYyA9IF9kcHVfY3J0Y19p bml0X2V2ZW50cyhkcHVfY3J0Yyk7CisJaWYgKHJjKSB7CisJCWRybV9jcnRjX2NsZWFudXAoY3J0 Yyk7CisJCWtmcmVlKGRwdV9jcnRjKTsKKwkJcmV0dXJuIEVSUl9QVFIocmMpOworCX0KKworCWRw dV9jcnRjLT5waGFuZGxlID0gJmttcy0+cGhhbmRsZTsKKworCURQVV9ERUJVRygiJXM6IHN1Y2Nl c3NmdWxseSBpbml0aWFsaXplZCBjcnRjXG4iLCBkcHVfY3J0Yy0+bmFtZSk7CisJcmV0dXJuIGNy dGM7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0 Yy5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuaApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjEyODRlOTkxZjY4NgotLS0gL2Rldi9udWxs CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmgKQEAgLTAsMCAr MSw0OTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxOCBUaGUgTGludXggRm91bmRh dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBSZWQgSGF0 CisgKiBBdXRob3I6IFJvYiBDbGFyayA8cm9iZGNsYXJrQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisg KiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxv bmcgd2l0aAorICogdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9y Zy9saWNlbnNlcy8+LgorICovCisKKyNpZm5kZWYgX0RQVV9DUlRDX0hfCisjZGVmaW5lIF9EUFVf Q1JUQ19IXworCisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGRybS9kcm1f Y3J0Yy5oPgorI2luY2x1ZGUgImRwdV9rbXMuaCIKKyNpbmNsdWRlICJkcHVfY29yZV9wZXJmLmgi CisjaW5jbHVkZSAiZHB1X2h3X2Jsay5oIgorCisjZGVmaW5lIERQVV9DUlRDX05BTUVfU0laRQkx MgorCisvKiBkZWZpbmUgdGhlIG1heGltdW0gbnVtYmVyIG9mIGluLWZsaWdodCBmcmFtZSBldmVu dHMgKi8KKyNkZWZpbmUgRFBVX0NSVENfRlJBTUVfRVZFTlRfU0laRQk0CisKKy8qKgorICogZW51 bSBkcHVfY3J0Y19jbGllbnRfdHlwZTogY3J0YyBjbGllbnQgdHlwZQorICogQFJUX0NMSUVOVDoJ UmVhbFRpbWUgY2xpZW50IGxpa2UgdmlkZW8vY21kIG1vZGUgZGlzcGxheQorICogICAgICAgICAg ICAgIHZvdGluZyB0aHJvdWdoIGFwcHMgcnNjCisgKiBATlJUX0NMSUVOVDoJTm9uLVJlYWxUaW1l IGNsaWVudCBsaWtlIFdCIGRpc3BsYXkKKyAqICAgICAgICAgICAgICB2b3RpbmcgdGhyb3VnaCBh cHBzIHJzYworICovCitlbnVtIGRwdV9jcnRjX2NsaWVudF90eXBlIHsKKwlSVF9DTElFTlQsCisJ TlJUX0NMSUVOVCwKK307CisKKy8qKgorICogZW51bSBkcHVfY3J0Y19zbW11X3N0YXRlOglzbW11 IHN0YXRlCisgKiBAQVRUQUNIRUQ6CSBhbGwgdGhlIGNvbnRleHQgYmFua3MgYXJlIGF0dGFjaGVk LgorICogQERFVEFDSEVEOgkgYWxsIHRoZSBjb250ZXh0IGJhbmtzIGFyZSBkZXRhY2hlZC4KKyAq IEBBVFRBQ0hfQUxMX1JFUToJIHRyYW5zaWVudCBzdGF0ZSBvZiBhdHRhY2hpbmcgY29udGV4dCBi YW5rcy4KKyAqIEBERVRBQ0hfQUxMX1JFUToJIHRyYW5zaWVudCBzdGF0ZSBvZiBkZXRhY2hpbmcg Y29udGV4dCBiYW5rcy4KKyAqLworZW51bSBkcHVfY3J0Y19zbW11X3N0YXRlIHsKKwlBVFRBQ0hF RCA9IDAsCisJREVUQUNIRUQsCisJQVRUQUNIX0FMTF9SRVEsCisJREVUQUNIX0FMTF9SRVEsCit9 OworCisvKioKKyAqIGVudW0gZHB1X2NydGNfc21tdV9zdGF0ZV90cmFuc2l0aW9uX3R5cGU6IHN0 YXRlIHRyYW5zaXRpb24gdHlwZQorICogQE5PTkU6IG5vIHBlbmRpbmcgc3RhdGUgdHJhbnNpdGlv bnMKKyAqIEBQUkVfQ09NTUlUOiBzdGF0ZSB0cmFuc2l0aW9ucyBzaG91bGQgYmUgZG9uZSBiZWZv cmUgcHJvY2Vzc2luZyB0aGUgY29tbWl0CisgKiBAUE9TVF9DT01NSVQ6IHN0YXRlIHRyYW5zaXRp b25zIHRvIGJlIGRvbmUgYWZ0ZXIgcHJvY2Vzc2luZyB0aGUgY29tbWl0LgorICovCitlbnVtIGRw dV9jcnRjX3NtbXVfc3RhdGVfdHJhbnNpdGlvbl90eXBlIHsKKwlOT05FLAorCVBSRV9DT01NSVQs CisJUE9TVF9DT01NSVQKK307CisKKy8qKgorICogc3RydWN0IGRwdV9jcnRjX3NtbXVfc3RhdGVf ZGF0YTogc3RvcmVzIHRoZSBzbW11IHN0YXRlIGFuZCB0cmFuc2l0aW9uIHR5cGUKKyAqIEBzdGF0 ZTogY3VycmVudCBzdGF0ZSBvZiBzbW11IGNvbnRleHQgYmFua3MKKyAqIEB0cmFuc2l0aW9uX3R5 cGU6IHRyYW5zaXRpb24gcmVxdWVzdCB0eXBlCisgKiBAdHJhbnNpdGlvbl9lcnJvcjogd2hldGhl ciB0aGVyZSBpcyBlcnJvciB3aGlsZSB0cmFuc2l0aW9uaW5nIHRoZSBzdGF0ZQorICovCitzdHJ1 Y3QgZHB1X2NydGNfc21tdV9zdGF0ZV9kYXRhIHsKKwl1aW50MzJfdCBzdGF0ZTsKKwl1aW50MzJf dCB0cmFuc2l0aW9uX3R5cGU7CisJdWludDMyX3QgdHJhbnNpdGlvbl9lcnJvcjsKK307CisKKy8q KgorICogc3RydWN0IGRwdV9jcnRjX21peGVyOiBzdG9yZXMgdGhlIG1hcCBmb3IgZWFjaCB2aXJ0 dWFsIHBpcGVsaW5lIGluIHRoZSBDUlRDCisgKiBAaHdfbG06CUxNIEhXIERyaXZlciBjb250ZXh0 CisgKiBAaHdfY3RsOglDVEwgUGF0aCBIVyBkcml2ZXIgY29udGV4dAorICogQGVuY29kZXI6CUVu Y29kZXIgYXR0YWNoZWQgdG8gdGhpcyBsbSAmIGN0bAorICogQG1peGVyX29wX21vZGU6CW1peGVy IGJsZW5kaW5nIG9wZXJhdGlvbiBtb2RlCisgKiBAZmx1c2hfbWFzazoJbWl4ZXIgZmx1c2ggbWFz ayBmb3IgY3RsLCBtaXhlciBhbmQgcGlwZQorICovCitzdHJ1Y3QgZHB1X2NydGNfbWl4ZXIgewor CXN0cnVjdCBkcHVfaHdfbWl4ZXIgKmh3X2xtOworCXN0cnVjdCBkcHVfaHdfY3RsICpod19jdGw7 CisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOworCXUzMiBtaXhlcl9vcF9tb2RlOworCXUz MiBmbHVzaF9tYXNrOworfTsKKworLyoqCisgKiBzdHJ1Y3QgZHB1X2NydGNfZnJhbWVfZXZlbnQ6 IHN0b3JlcyBjcnRjIGZyYW1lIGV2ZW50IGZvciBjcnRjIHByb2Nlc3NpbmcKKyAqIEB3b3JrOgli YXNlIHdvcmsgc3RydWN0dXJlCisgKiBAY3J0YzoJUG9pbnRlciB0byBjcnRjIGhhbmRsaW5nIHRo aXMgZXZlbnQKKyAqIEBsaXN0OglldmVudCBsaXN0CisgKiBAdHM6CQl0aW1lc3RhbXAgYXQgcXVl dWUgZW50cnkKKyAqIEBldmVudDoJZXZlbnQgaWRlbnRpZmllcgorICovCitzdHJ1Y3QgZHB1X2Ny dGNfZnJhbWVfZXZlbnQgeworCXN0cnVjdCBrdGhyZWFkX3dvcmsgd29yazsKKwlzdHJ1Y3QgZHJt X2NydGMgKmNydGM7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCWt0aW1lX3QgdHM7CisJdTMy IGV2ZW50OworfTsKKworLyoqCisgKiBzdHJ1Y3QgZHB1X2NydGNfZXZlbnQgLSBldmVudCBjYWxs YmFjayB0cmFja2luZyBzdHJ1Y3R1cmUKKyAqIEBsaXN0OiAgICAgTGlua2VkIGxpc3QgdHJhY2tp bmcgbm9kZQorICogQGt0X3dvcms6ICBLdGhyZWFkIHdvcmtlciBzdHJ1Y3R1cmUKKyAqIEBkcHVf Y3J0YzogUG9pbnRlciB0byBhc3NvY2lhdGVkIGRwdV9jcnRjIHN0cnVjdHVyZQorICogQGNiX2Z1 bmM6ICBQb2ludGVyIHRvIGNhbGxiYWNrIGZ1bmN0aW9uCisgKiBAdXNyOiAgICAgIFBvaW50ZXIg dG8gdXNlciBkYXRhIHRvIGJlIHByb3ZpZGVkIHRvIHRoZSBjYWxsYmFjaworICovCitzdHJ1Y3Qg ZHB1X2NydGNfZXZlbnQgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3Qga3RocmVh ZF93b3JrIGt0X3dvcms7CisJdm9pZCAqZHB1X2NydGM7CisKKwl2b2lkICgqY2JfZnVuYykoc3Ry dWN0IGRybV9jcnRjICpjcnRjLCB2b2lkICp1c3IpOworCXZvaWQgKnVzcjsKK307CisKKy8qCisg KiBNYXhpbXVtIG51bWJlciBvZiBmcmVlIGV2ZW50IHN0cnVjdHVyZXMgdG8gY2FjaGUKKyAqLwor I2RlZmluZSBEUFVfQ1JUQ19NQVhfRVZFTlRfQ09VTlQJMTYKKworLyoqCisgKiBzdHJ1Y3QgZHB1 X2NydGMgLSB2aXJ0dWFsaXplZCBDUlRDIGRhdGEgc3RydWN0dXJlCisgKiBAYmFzZSAgICAgICAg ICA6IEJhc2UgZHJtIGNydGMgc3RydWN0dXJlCisgKiBAbmFtZSAgICAgICAgICA6IEFTQ0lJIGRl c2NyaXB0aW9uIG9mIHRoaXMgY3J0YworICogQG51bV9jdGxzICAgICAgOiBOdW1iZXIgb2YgY3Rs IHBhdGhzIGluIHVzZQorICogQG51bV9taXhlcnMgICAgOiBOdW1iZXIgb2YgbWl4ZXJzIGluIHVz ZQorICogQG1peGVyc19zd2FwcGVkOiBXaGV0aGVyIHRoZSBtaXhlcnMgaGF2ZSBiZWVuIHN3YXBw ZWQgZm9yIGxlZnQvcmlnaHQgdXBkYXRlCisgKiAgICAgICAgICAgICAgICAgIGVzcGVjaWFsbHkg aW4gdGhlIGNhc2Ugb2YgRFNDIE1lcmdlLgorICogQG1peGVycyAgICAgICAgOiBMaXN0IG9mIGFj dGl2ZSBtaXhlcnMKKyAqIEBldmVudCAgICAgICAgIDogUG9pbnRlciB0byBsYXN0IHJlY2VpdmVk IGRybSB2YmxhbmsgZXZlbnQuIElmIHRoZXJlIGlzIGEKKyAqICAgICAgICAgICAgICAgICAgcGVu ZGluZyB2YmxhbmsgZXZlbnQsIHRoaXMgd2lsbCBiZSBub24tbnVsbC4KKyAqIEB2c3luY19jb3Vu dCAgIDogUnVubmluZyBjb3VudCBvZiByZWNlaXZlZCB2c3luYyBldmVudHMKKyAqIEBkcm1fcmVx dWVzdGVkX3ZibGFuayA6IFdoZXRoZXIgdmJsYW5rcyBoYXZlIGJlZW4gZW5hYmxlZCBpbiB0aGUg ZW5jb2RlcgorICogQHByb3BlcnR5X2luZm8gOiBPcGFxdWUgc3RydWN0dXJlIGZvciBnZW5lcmlj IHByb3BlcnR5IHN1cHBvcnQKKyAqIEBwcm9wZXJ0eV9kZWZhdWx0cyA6IEFycmF5IG9mIGRlZmF1 bHQgdmFsdWVzIGZvciBnZW5lcmljIHByb3BlcnR5IHN1cHBvcnQKKyAqIEBzdGFnZV9jZmcgICAg IDogSC93IG1peGVyIHN0YWdlIGNvbmZpZ3VyYXRpb24KKyAqIEBkZWJ1Z2ZzX3Jvb3QgIDogUGFy ZW50IG9mIGRlYnVnZnMgbm9kZQorICogQHZibGFua19jYl9jb3VudCA6IGNvdW50IG9mIHZibGFu ayBjYWxsYmFjayBzaW5jZSBsYXN0IHJlc2V0CisgKiBAcGxheV9jb3VudCAgICA6IGZyYW1lIGNv dW50IGJldHdlZW4gY3J0YyBlbmFibGUgYW5kIGRpc2FibGUKKyAqIEB2YmxhbmtfY2JfdGltZSAg OiBrdGltZSBhdCB2YmxhbmsgY291bnQgcmVzZXQKKyAqIEB2YmxhbmtfcmVxdWVzdGVkIDogd2hl dGhlciB0aGUgdXNlciBoYXMgcmVxdWVzdGVkIHZibGFuayBldmVudHMKKyAqIEBzdXNwZW5kICAg ICAgICAgOiB3aGV0aGVyIG9yIG5vdCBhIHN1c3BlbmQgb3BlcmF0aW9uIGlzIGluIHByb2dyZXNz CisgKiBAZW5hYmxlZCAgICAgICA6IHdoZXRoZXIgdGhlIERQVSBDUlRDIGlzIGN1cnJlbnRseSBl bmFibGVkLiB1cGRhdGVkIGluIHRoZQorICogICAgICAgICAgICAgICAgICBjb21taXQtdGhyZWFk LCBub3Qgc3RhdGUtc3dhcCB0aW1lIHdoaWNoIGlzIGVhcmxpZXIsIHNvCisgKiAgICAgICAgICAg ICAgICAgIHNhZmUgdG8gbWFrZSBkZWNpc2lvbnMgb24gZHVyaW5nIFZCTEFOSyBvbi9vZmYgd29y aworICogQGZlYXR1cmVfbGlzdCAgOiBsaXN0IG9mIGNvbG9yIHByb2Nlc3NpbmcgZmVhdHVyZXMg c3VwcG9ydGVkIG9uIGEgY3J0YworICogQGFjdGl2ZV9saXN0ICAgOiBsaXN0IG9mIGNvbG9yIHBy b2Nlc3NpbmcgZmVhdHVyZXMgYXJlIGFjdGl2ZQorICogQGRpcnR5X2xpc3QgICAgOiBsaXN0IG9m IGNvbG9yIHByb2Nlc3NpbmcgZmVhdHVyZXMgYXJlIGRpcnR5CisgKiBAYWRfZGlydHk6IGxpc3Qg Y29udGFpbmluZyBhZCBwcm9wZXJ0aWVzIHRoYXQgYXJlIGRpcnR5CisgKiBAYWRfYWN0aXZlOiBs aXN0IGNvbnRhaW5pbmcgYWQgcHJvcGVydGllcyB0aGF0IGFyZSBhY3RpdmUKKyAqIEBjcnRjX2xv Y2sgICAgIDogY3J0YyBsb2NrIGFyb3VuZCBjcmVhdGUsIGRlc3Ryb3kgYW5kIGFjY2Vzcy4KKyAq IEBmcmFtZV9wZW5kaW5nIDogV2hldGhlciBvciBub3QgYW4gdXBkYXRlIGlzIHBlbmRpbmcKKyAq IEBmcmFtZV9ldmVudHMgIDogc3RhdGljIGFsbG9jYXRpb24gb2YgaW4tZmxpZ2h0IGZyYW1lIGV2 ZW50cworICogQGZyYW1lX2V2ZW50X2xpc3QgOiBhdmFpbGFibGUgZnJhbWUgZXZlbnQgbGlzdAor ICogQHNwaW5fbG9jayAgICAgOiBzcGluIGxvY2sgZm9yIGZyYW1lIGV2ZW50LCB0cmFuc2FjdGlv biBzdGF0dXMsIGV0Yy4uLgorICogQGZyYW1lX2RvbmVfY29tcCAgICA6IGZvciBmcmFtZV9ldmVu dF9kb25lIHN5bmNocm9uaXphdGlvbgorICogQGV2ZW50X3RocmVhZCAgOiBQb2ludGVyIHRvIGV2 ZW50IGhhbmRsZXIgdGhyZWFkCisgKiBAZXZlbnRfd29ya2VyICA6IEV2ZW50IHdvcmtlciBxdWV1 ZQorICogQGV2ZW50X2NhY2hlICAgOiBMb2NhbCBjYWNoZSBvZiBldmVudCB3b3JrZXIgc3RydWN0 dXJlcworICogQGV2ZW50X2ZyZWVfbGlzdCA6IExpc3Qgb2YgYXZhaWxhYmxlIGV2ZW50IHN0cnVj dHVyZXMKKyAqIEBldmVudF9sb2NrICAgIDogU3BpbmxvY2sgYXJvdW5kIGV2ZW50IGhhbmRsaW5n IGNvZGUKKyAqIEBtaXNyX2VuYWJsZSAgIDogYm9vbGVhbiBlbnRyeSBpbmRpY2F0ZXMgbWlzciBl bmFibGUvZGlzYWJsZSBzdGF0dXMuCisgKiBAbWlzcl9mcmFtZV9jb3VudCAgOiBtaXNyIGZyYW1l IGNvdW50IHByb3ZpZGVkIGJ5IGNsaWVudAorICogQG1pc3JfZGF0YSAgICAgOiBzdG9yZSBtaXNy IGRhdGEgYmVmb3JlIHR1cm5pbmcgb2ZmIHRoZSBjbG9ja3MuCisgKiBAcGhhbmRsZTogUG9pbnRl ciB0byBwb3dlciBoYW5kbGVyCisgKiBAcG93ZXJfZXZlbnQgICA6IHJlZ2lzdGVyZWQgcG93ZXIg ZXZlbnQgaGFuZGxlCisgKiBAY3VyX3BlcmYgICAgICA6IGN1cnJlbnQgcGVyZm9ybWFuY2UgY29t bWl0dGVkIHRvIGNsb2NrL2JhbmR3aWR0aCBkcml2ZXIKKyAqIEBycF9sb2NrICAgICAgIDogc2Vy aWFsaXphdGlvbiBsb2NrIGZvciByZXNvdXJjZSBwb29sCisgKiBAcnBfaGVhZCAgICAgICA6IGxp c3Qgb2YgYWN0aXZlIHJlc291cmNlIHBvb2wKKyAqIEBzY2wzX2NmZ19sdXQgIDogcXNlZWQzIGx1 dCBjb25maWcKKyAqLworc3RydWN0IGRwdV9jcnRjIHsKKwlzdHJ1Y3QgZHJtX2NydGMgYmFzZTsK KwljaGFyIG5hbWVbRFBVX0NSVENfTkFNRV9TSVpFXTsKKworCS8qIEhXIFJlc291cmNlcyByZXNl cnZlZCBmb3IgdGhlIGNydGMgKi8KKwl1MzIgbnVtX2N0bHM7CisJdTMyIG51bV9taXhlcnM7CisJ Ym9vbCBtaXhlcnNfc3dhcHBlZDsKKwlzdHJ1Y3QgZHB1X2NydGNfbWl4ZXIgbWl4ZXJzW0NSVENf RFVBTF9NSVhFUlNdOworCXN0cnVjdCBkcHVfaHdfc2NhbGVyM19sdXRfY2ZnICpzY2wzX2x1dF9j Zmc7CisKKwlzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50ICpldmVudDsKKwl1MzIgdnN5 bmNfY291bnQ7CisKKwlzdHJ1Y3QgZHB1X2h3X3N0YWdlX2NmZyBzdGFnZV9jZmc7CisJc3RydWN0 IGRlbnRyeSAqZGVidWdmc19yb290OworCisJdTMyIHZibGFua19jYl9jb3VudDsKKwl1NjQgcGxh eV9jb3VudDsKKwlrdGltZV90IHZibGFua19jYl90aW1lOworCWJvb2wgdmJsYW5rX3JlcXVlc3Rl ZDsKKwlib29sIHN1c3BlbmQ7CisJYm9vbCBlbmFibGVkOworCisJc3RydWN0IGxpc3RfaGVhZCBm ZWF0dXJlX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCBhY3RpdmVfbGlzdDsKKwlzdHJ1Y3QgbGlz dF9oZWFkIGRpcnR5X2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCBhZF9kaXJ0eTsKKwlzdHJ1Y3Qg bGlzdF9oZWFkIGFkX2FjdGl2ZTsKKworCXN0cnVjdCBtdXRleCBjcnRjX2xvY2s7CisKKwlhdG9t aWNfdCBmcmFtZV9wZW5kaW5nOworCXN0cnVjdCBkcHVfY3J0Y19mcmFtZV9ldmVudCBmcmFtZV9l dmVudHNbRFBVX0NSVENfRlJBTUVfRVZFTlRfU0laRV07CisJc3RydWN0IGxpc3RfaGVhZCBmcmFt ZV9ldmVudF9saXN0OworCXNwaW5sb2NrX3Qgc3Bpbl9sb2NrOworCXN0cnVjdCBjb21wbGV0aW9u IGZyYW1lX2RvbmVfY29tcDsKKworCS8qIGZvciBoYW5kbGluZyBpbnRlcm5hbCBldmVudCB0aHJl YWQgKi8KKwlzdHJ1Y3QgZHB1X2NydGNfZXZlbnQgZXZlbnRfY2FjaGVbRFBVX0NSVENfTUFYX0VW RU5UX0NPVU5UXTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGV2ZW50X2ZyZWVfbGlzdDsKKwlzcGlubG9j a190IGV2ZW50X2xvY2s7CisJYm9vbCBtaXNyX2VuYWJsZTsKKwl1MzIgbWlzcl9mcmFtZV9jb3Vu dDsKKwl1MzIgbWlzcl9kYXRhW0NSVENfRFVBTF9NSVhFUlNdOworCisJc3RydWN0IGRwdV9wb3dl cl9oYW5kbGUgKnBoYW5kbGU7CisJc3RydWN0IGRwdV9wb3dlcl9ldmVudCAqcG93ZXJfZXZlbnQ7 CisKKwlzdHJ1Y3QgZHB1X2NvcmVfcGVyZl9wYXJhbXMgY3VyX3BlcmY7CisKKwlzdHJ1Y3QgbXV0 ZXggcnBfbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHJwX2hlYWQ7CisKKwlzdHJ1Y3QgZHB1X2Ny dGNfc21tdV9zdGF0ZV9kYXRhIHNtbXVfc3RhdGU7Cit9OworCisjZGVmaW5lIHRvX2RwdV9jcnRj KHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgZHB1X2NydGMsIGJhc2UpCisKKy8qKgorICogc3Ry dWN0IGRwdV9jcnRjX3Jlc19vcHMgLSBjb21tb24gb3BlcmF0aW9ucyBmb3IgY3J0YyByZXNvdXJj ZXMKKyAqIEBnZXQ6IGdldCBnaXZlbiByZXNvdXJjZQorICogQHB1dDogcHV0IGdpdmVuIHJlc291 cmNlCisgKi8KK3N0cnVjdCBkcHVfY3J0Y19yZXNfb3BzIHsKKwl2b2lkICooKmdldCkodm9pZCAq dmFsLCB1MzIgdHlwZSwgdTY0IHRhZyk7CisJdm9pZCAoKnB1dCkodm9pZCAqdmFsKTsKK307CisK KyNkZWZpbmUgRFBVX0NSVENfUkVTX0ZMQUdfRlJFRQkJQklUKDApCisKKy8qKgorICogc3RydWN0 IGRwdV9jcnRjX3JlcyAtIGRlZmluaXRpb24gb2YgY3J0YyByZXNvdXJjZXMKKyAqIEBsaXN0OiBs aXN0IG9mIGNydGMgcmVzb3VyY2UKKyAqIEB0eXBlOiBjcnRjIHJlc291cmNlIHR5cGUKKyAqIEB0 YWc6IHVuaXF1ZSBpZGVudGlmaWVyIHBlciB0eXBlCisgKiBAcmVmY291bnQ6IHJlZmVyZW5jZS91 c2FnZSBjb3VudAorICogQG9wczogY2FsbGJhY2sgb3BlcmF0aW9ucworICogQHZhbDogcmVzb3Vy Y2UgaGFuZGxlIGFzc29jaWF0ZWQgd2l0aCB0eXBlL3RhZworICogQGZsYWdzOiBjdXN0b21pemF0 aW9uIGZsYWdzCisgKi8KK3N0cnVjdCBkcHVfY3J0Y19yZXMgeworCXN0cnVjdCBsaXN0X2hlYWQg bGlzdDsKKwl1MzIgdHlwZTsKKwl1NjQgdGFnOworCWF0b21pY190IHJlZmNvdW50OworCXN0cnVj dCBkcHVfY3J0Y19yZXNfb3BzIG9wczsKKwl2b2lkICp2YWw7CisJdTMyIGZsYWdzOworfTsKKwor LyoqCisgKiBkcHVfY3J0Y19yZXNwb29sIC0gY3J0YyByZXNvdXJjZSBwb29sCisgKiBAcnBfbG9j azogcG9pbnRlciB0byBzZXJpYWxpemF0aW9uIGxvY2sKKyAqIEBycF9oZWFkOiBwb2ludGVyIHRv IGhlYWQgb2YgYWN0aXZlIHJlc291cmNlIHBvb2xzIG9mIHRoaXMgY3J0YworICogQHJwX2xpc3Q6 IGxpc3Qgb2YgY3J0YyByZXNvdXJjZSBwb29sCisgKiBAc2VxdWVuY2VfaWQ6IHNlcXVlbmNlIGlk ZW50aWZpZXIsIGluY3JlbWVudGVkIHBlciBzdGF0ZSBkdXBsaWNhdGlvbgorICogQHJlc19saXN0 OiBsaXN0IG9mIHJlc291cmNlIG1hbmFnZWQgYnkgdGhpcyByZXNvdXJjZSBwb29sCisgKiBAb3Bz OiByZXNvdXJjZSBvcGVyYXRpb25zIGZvciBwYXJlbnQgcmVzb3VyY2UgcG9vbAorICovCitzdHJ1 Y3QgZHB1X2NydGNfcmVzcG9vbCB7CisJc3RydWN0IG11dGV4ICpycF9sb2NrOworCXN0cnVjdCBs aXN0X2hlYWQgKnJwX2hlYWQ7CisJc3RydWN0IGxpc3RfaGVhZCBycF9saXN0OworCXUzMiBzZXF1 ZW5jZV9pZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHJlc19saXN0OworCXN0cnVjdCBkcHVfY3J0Y19y ZXNfb3BzIG9wczsKK307CisKKy8qKgorICogc3RydWN0IGRwdV9jcnRjX3N0YXRlIC0gZHB1IGNv bnRhaW5lciBmb3IgYXRvbWljIGNydGMgc3RhdGUKKyAqIEBiYXNlOiBCYXNlIGRybSBjcnRjIHN0 YXRlIHN0cnVjdHVyZQorICogQGlzX3Bwc3BsaXQgICAgOiBXaGV0aGVyIGN1cnJlbnQgdG9wb2xv Z3kgcmVxdWlyZXMgUFBTcGxpdCBzcGVjaWFsIGhhbmRsaW5nCisgKiBAYndfY29udHJvbCAgICA6 IHRydWUgaWYgYncvY2xrIGNvbnRyb2xsZWQgYnkgY29yZSBidy9jbGsgcHJvcGVydGllcworICog QGJ3X3NwbGl0X3ZvdGUgOiB0cnVlIGlmIGJ3IGNvbnRyb2xsZWQgYnkgbGxjYy9kcmFtIGJ3IHBy b3BlcnRpZXMKKyAqIEBsbV9ib3VuZHMgICAgIDogTE0gYm91bmRhcmllcyBiYXNlZCBvbiBjdXJy ZW50IG1vZGUgZnVsbCByZXNvbHV0aW9uLCBubyBST0kuCisgKiAgICAgICAgICAgICAgICAgIE9y aWdpbiB0b3AgbGVmdCBvZiBDUlRDLgorICogQHByb3BlcnR5X3N0YXRlOiBMb2NhbCBzdG9yYWdl IGZvciBtc21fcHJvcCBwcm9wZXJ0aWVzCisgKiBAcHJvcGVydHlfdmFsdWVzOiBDdXJyZW50IGNy dGMgcHJvcGVydHkgdmFsdWVzCisgKiBAaW5wdXRfZmVuY2VfdGltZW91dF9ucyA6IENhY2hlZCBp bnB1dCBmZW5jZSB0aW1lb3V0LCBpbiBucworICogQG5ld19wZXJmOiBuZXcgcGVyZm9ybWFuY2Ug c3RhdGUgYmVpbmcgcmVxdWVzdGVkCisgKi8KK3N0cnVjdCBkcHVfY3J0Y19zdGF0ZSB7CisJc3Ry dWN0IGRybV9jcnRjX3N0YXRlIGJhc2U7CisKKwlib29sIGJ3X2NvbnRyb2w7CisJYm9vbCBid19z cGxpdF92b3RlOworCisJYm9vbCBpc19wcHNwbGl0OworCXN0cnVjdCBkcm1fcmVjdCBsbV9ib3Vu ZHNbQ1JUQ19EVUFMX01JWEVSU107CisKKwl1aW50NjRfdCBpbnB1dF9mZW5jZV90aW1lb3V0X25z OworCisJc3RydWN0IGRwdV9jb3JlX3BlcmZfcGFyYW1zIG5ld19wZXJmOworCXN0cnVjdCBkcHVf Y3J0Y19yZXNwb29sIHJwOworfTsKKworI2RlZmluZSB0b19kcHVfY3J0Y19zdGF0ZSh4KSBcCisJ Y29udGFpbmVyX29mKHgsIHN0cnVjdCBkcHVfY3J0Y19zdGF0ZSwgYmFzZSkKKworLyoqCisgKiBk cHVfY3J0Y19nZXRfbWl4ZXJfd2lkdGggLSBnZXQgdGhlIG1peGVyIHdpZHRoCisgKiBNaXhlciB3 aWR0aCB3aWxsIGJlIHNhbWUgYXMgcGFuZWwgd2lkdGgoLzIgZm9yIHNwbGl0KQorICovCitzdGF0 aWMgaW5saW5lIGludCBkcHVfY3J0Y19nZXRfbWl4ZXJfd2lkdGgoc3RydWN0IGRwdV9jcnRjICpk cHVfY3J0YywKKwlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmNzdGF0ZSwgc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKm1vZGUpCit7CisJdTMyIG1peGVyX3dpZHRoOworCisJaWYgKCFkcHVfY3J0YyB8 fCAhY3N0YXRlIHx8ICFtb2RlKQorCQlyZXR1cm4gMDsKKworCW1peGVyX3dpZHRoID0gKGRwdV9j cnRjLT5udW1fbWl4ZXJzID09IENSVENfRFVBTF9NSVhFUlMgPworCQkJbW9kZS0+aGRpc3BsYXkg LyBDUlRDX0RVQUxfTUlYRVJTIDogbW9kZS0+aGRpc3BsYXkpOworCisJcmV0dXJuIG1peGVyX3dp ZHRoOworfQorCisvKioKKyAqIGRwdV9jcnRjX2dldF9taXhlcl9oZWlnaHQgLSBnZXQgdGhlIG1p eGVyIGhlaWdodAorICogTWl4ZXIgaGVpZ2h0IHdpbGwgYmUgc2FtZSBhcyBwYW5lbCBoZWlnaHQK KyAqLworc3RhdGljIGlubGluZSBpbnQgZHB1X2NydGNfZ2V0X21peGVyX2hlaWdodChzdHJ1Y3Qg ZHB1X2NydGMgKmRwdV9jcnRjLAorCQlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmNzdGF0ZSwgc3Ry dWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJaWYgKCFkcHVfY3J0YyB8fCAhY3N0YXRl IHx8ICFtb2RlKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBtb2RlLT52ZGlzcGxheTsKK30KKwor LyoqCisgKiBkcHVfY3J0Y19mcmFtZV9wZW5kaW5nIC0gcmV0dW4gdGhlIG51bWJlciBvZiBwZW5k aW5nIGZyYW1lcworICogQGNydGM6IFBvaW50ZXIgdG8gZHJtIGNydGMgb2JqZWN0CisgKi8KK3N0 YXRpYyBpbmxpbmUgaW50IGRwdV9jcnRjX2ZyYW1lX3BlbmRpbmcoc3RydWN0IGRybV9jcnRjICpj cnRjKQoreworCXN0cnVjdCBkcHVfY3J0YyAqZHB1X2NydGM7CisKKwlpZiAoIWNydGMpCisJCXJl dHVybiAtRUlOVkFMOworCisJZHB1X2NydGMgPSB0b19kcHVfY3J0YyhjcnRjKTsKKwlyZXR1cm4g YXRvbWljX3JlYWQoJmRwdV9jcnRjLT5mcmFtZV9wZW5kaW5nKTsKK30KKworLyoqCisgKiBkcHVf Y3J0Y192YmxhbmsgLSBlbmFibGUgb3IgZGlzYWJsZSB2YmxhbmtzIGZvciB0aGlzIGNydGMKKyAq IEBjcnRjOiBQb2ludGVyIHRvIGRybSBjcnRjIG9iamVjdAorICogQGVuOiB0cnVlIHRvIGVuYWJs ZSB2YmxhbmtzLCBmYWxzZSB0byBkaXNhYmxlCisgKi8KK2ludCBkcHVfY3J0Y192Ymxhbmsoc3Ry dWN0IGRybV9jcnRjICpjcnRjLCBib29sIGVuKTsKKworLyoqCisgKiBkcHVfY3J0Y19jb21taXRf a2lja29mZiAtIHRyaWdnZXIga2lja29mZiBvZiB0aGUgY29tbWl0IGZvciB0aGlzIGNydGMKKyAq IEBjcnRjOiBQb2ludGVyIHRvIGRybSBjcnRjIG9iamVjdAorICovCit2b2lkIGRwdV9jcnRjX2Nv bW1pdF9raWNrb2ZmKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7CisKKy8qKgorICogZHB1X2NydGNf Y29tcGxldGVfY29tbWl0IC0gY2FsbGJhY2sgc2lnbmFsbGluZyBjb21wbGV0aW9uIG9mIGN1cnJl bnQgY29tbWl0CisgKiBAY3J0YzogUG9pbnRlciB0byBkcm0gY3J0YyBvYmplY3QKKyAqIEBvbGRf c3RhdGU6IFBvaW50ZXIgdG8gZHJtIGNydGMgb2xkIHN0YXRlIG9iamVjdAorICovCit2b2lkIGRw dV9jcnRjX2NvbXBsZXRlX2NvbW1pdChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCXN0cnVjdCBk cm1fY3J0Y19zdGF0ZSAqb2xkX3N0YXRlKTsKKworLyoqCisgKiBkcHVfY3J0Y19pbml0IC0gY3Jl YXRlIGEgbmV3IGNydGMgb2JqZWN0CisgKiBAZGV2OiBkcHUgZGV2aWNlCisgKiBAcGxhbmU6IGJh c2UgcGxhbmUKKyAqIEBSZXR1cm46IG5ldyBjcnRjIG9iamVjdCBvciBlcnJvcgorICovCitzdHJ1 Y3QgZHJtX2NydGMgKmRwdV9jcnRjX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0 IGRybV9wbGFuZSAqcGxhbmUpOworCisvKioKKyAqIGRwdV9jcnRjX2NhbmNlbF9wZW5kaW5nX2Zs aXAgLSBjb21wbGV0ZSBmbGlwIGZvciBjbGllbnRzIG9uIGxhc3RjbG9zZQorICogQGNydGM6IFBv aW50ZXIgdG8gZHJtIGNydGMgb2JqZWN0CisgKiBAZmlsZTogY2xpZW50IHRvIGNhbmNlbCdzIGZp bGUgaGFuZGxlCisgKi8KK3ZvaWQgZHB1X2NydGNfY2FuY2VsX3BlbmRpbmdfZmxpcChzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSk7CisKKy8qKgorICogZHB1X2Ny dGNfcmVnaXN0ZXJfY3VzdG9tX2V2ZW50IC0gYXBpIGZvciBlbmFibGluZy9kaXNhYmxpbmcgY3J0 YyBldmVudAorICogQGttczogUG9pbnRlciB0byBkcHVfa21zCisgKiBAY3J0Y19kcm06IFBvaW50 ZXIgdG8gY3J0YyBvYmplY3QKKyAqIEBldmVudDogRXZlbnQgdGhhdCBjbGllbnQgaXMgaW50ZXJl c3RlZAorICogQGVuOiBGbGFnIHRvIGVuYWJsZS9kaXNhYmxlIHRoZSBldmVudAorICovCitpbnQg ZHB1X2NydGNfcmVnaXN0ZXJfY3VzdG9tX2V2ZW50KHN0cnVjdCBkcHVfa21zICprbXMsCisJCXN0 cnVjdCBkcm1fY3J0YyAqY3J0Y19kcm0sIHUzMiBldmVudCwgYm9vbCBlbik7CisKKy8qKgorICog ZHB1X2NydGNfZ2V0X2ludGZfbW9kZSAtIGdldCBpbnRlcmZhY2UgbW9kZSBvZiB0aGUgZ2l2ZW4g Y3J0YworICogQGNydGM6IFBvaW50ZXJ0IHRvIGNydGMKKyAqLworZW51bSBkcHVfaW50Zl9tb2Rl IGRwdV9jcnRjX2dldF9pbnRmX21vZGUoc3RydWN0IGRybV9jcnRjICpjcnRjKTsKKworLyoqCisg KiBkcHVfY3J0Y19nZXRfY2xpZW50X3R5cGUgLSBjaGVjayB0aGUgY3J0YyB0eXBlLSBydCwgbnJ0 IGV0Yy4KKyAqIEBjcnRjOiBQb2ludGVyIHRvIGNydGMKKyAqLworc3RhdGljIGlubGluZSBlbnVt IGRwdV9jcnRjX2NsaWVudF90eXBlIGRwdV9jcnRjX2dldF9jbGllbnRfdHlwZSgKKwkJCQkJCXN0 cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmNzdGF0ZSA9 CisJCQljcnRjID8gdG9fZHB1X2NydGNfc3RhdGUoY3J0Yy0+c3RhdGUpIDogTlVMTDsKKworCWlm ICghY3N0YXRlKQorCQlyZXR1cm4gTlJUX0NMSUVOVDsKKworCXJldHVybiBSVF9DTElFTlQ7Cit9 CisKKy8qKgorICogZHB1X2NydGNfaXNfZW5hYmxlZCAtIGNoZWNrIGlmIGRwdSBjcnRjIGlzIGVu YWJsZWQgb3Igbm90CisgKiBAY3J0YzogUG9pbnRlciB0byBjcnRjCisgKi8KK3N0YXRpYyBpbmxp bmUgYm9vbCBkcHVfY3J0Y19pc19lbmFibGVkKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwly ZXR1cm4gY3J0YyA/IGNydGMtPmVuYWJsZWQgOiBmYWxzZTsKK30KKworLyoqCisgKiBkcHVfY3J0 Y19ldmVudF9xdWV1ZSAtIHJlcXVlc3QgZXZlbnQgY2FsbGJhY2sKKyAqIEBjcnRjOiBQb2ludGVy IHRvIGRybSBjcnRjIHN0cnVjdHVyZQorICogQGZ1bmM6IFBvaW50ZXIgdG8gY2FsbGJhY2sgZnVu Y3Rpb24KKyAqIEB1c3I6IFBvaW50ZXIgdG8gdXNlciBkYXRhIHRvIGJlIHBhc3NlZCB0byBjYWxs YmFjaworICogUmV0dXJuczogWmVybyBvbiBzdWNjZXNzCisgKi8KK2ludCBkcHVfY3J0Y19ldmVu dF9xdWV1ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCXZvaWQgKCpmdW5jKShzdHJ1Y3QgZHJt X2NydGMgKmNydGMsIHZvaWQgKnVzciksIHZvaWQgKnVzcik7CisKKy8qKgorICogZHB1X2NydGNf cmVzX2FkZCAtIGFkZCBnaXZlbiByZXNvdXJjZSB0byByZXNvdXJjZSBwb29sIGluIGNydGMgc3Rh dGUKKyAqIEBzdGF0ZTogUG9pbnRlciB0byBkcm0gY3J0YyBzdGF0ZQorICogQHR5cGU6IFJlc291 cmNlIHR5cGUKKyAqIEB0YWc6IFNlYXJjaCB0YWcgZm9yIGdpdmVuIHJlc291cmNlCisgKiBAdmFs OiBSZXNvdXJjZSBoYW5kbGUKKyAqIEBvcHM6IFJlc291cmNlIGNhbGxiYWNrIG9wZXJhdGlvbnMK KyAqIHJldHVybjogMCBpZiBzdWNjZXNzOyBlcnJvciBjb2RlIG90aGVyd2lzZQorICovCitpbnQg ZHB1X2NydGNfcmVzX2FkZChzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlLCB1MzIgdHlwZSwg dTY0IHRhZywKKwkJdm9pZCAqdmFsLCBzdHJ1Y3QgZHB1X2NydGNfcmVzX29wcyAqb3BzKTsKKwor LyoqCisgKiBkcHVfY3J0Y19yZXNfZ2V0IC0gZ2V0IGdpdmVuIHJlc291cmNlIGZyb20gcmVzb3Vy Y2UgcG9vbCBpbiBjcnRjIHN0YXRlCisgKiBAc3RhdGU6IFBvaW50ZXIgdG8gZHJtIGNydGMgc3Rh dGUKKyAqIEB0eXBlOiBSZXNvdXJjZSB0eXBlCisgKiBAdGFnOiBTZWFyY2ggdGFnIGZvciBnaXZl biByZXNvdXJjZQorICogcmV0dXJuOiBSZXNvdXJjZSBoYW5kbGUgaWYgc3VjY2VzczsgcG9pbnRl ciBlcnJvciBvciBudWxsIG90aGVyd2lzZQorICovCit2b2lkICpkcHVfY3J0Y19yZXNfZ2V0KHN0 cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUsIHUzMiB0eXBlLCB1NjQgdGFnKTsKKworLyoqCisg KiBkcHVfY3J0Y19yZXNfcHV0IC0gcmV0dXJuIGdpdmVuIHJlc291cmNlIHRvIHJlc291cmNlIHBv b2wgaW4gY3J0YyBzdGF0ZQorICogQHN0YXRlOiBQb2ludGVyIHRvIGRybSBjcnRjIHN0YXRlCisg KiBAdHlwZTogUmVzb3VyY2UgdHlwZQorICogQHRhZzogU2VhcmNoIHRhZyBmb3IgZ2l2ZW4gcmVz b3VyY2UKKyAqIHJldHVybjogTm9uZQorICovCit2b2lkIGRwdV9jcnRjX3Jlc19wdXQoc3RydWN0 IGRybV9jcnRjX3N0YXRlICpzdGF0ZSwgdTMyIHR5cGUsIHU2NCB0YWcpOworCisjZW5kaWYgLyog X0RQVV9DUlRDX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfZGJnLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZGJnLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5hZTJhZWU3ZWQ5ZTEKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZGJnLmMKQEAg LTAsMCArMSwyMzkzIEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxOCwgVGhlIExpbnV4IEZv dW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lv biAyIGFuZAorICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjZGVmaW5l IHByX2ZtdChmbXQpCSJbZHJtOiVzOiVkXSAiIGZtdCwgX19mdW5jX18sIF9fTElORV9fCisKKyNp bmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5j bHVkZSA8bGludXgva3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVk ZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1idWYuaD4KKyNpbmNsdWRl IDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdF9zb3J0Lmg+CisjaW5jbHVkZSA8 bGludXgvcG1fcnVudGltZS5oPgorCisjaW5jbHVkZSAiZHB1X2RiZy5oIgorI2luY2x1ZGUgImRp c3AvZHB1MS9kcHVfaHdfY2F0YWxvZy5oIgorCisKKyNkZWZpbmUgREVGQVVMVF9EQkdCVVNfRFBV CURQVV9EQkdfRFVNUF9JTl9NRU0KKyNkZWZpbmUgREVGQVVMVF9EQkdCVVNfVkJJRlJUCURQVV9E QkdfRFVNUF9JTl9NRU0KKyNkZWZpbmUgUkVHX0JBU0VfTkFNRV9MRU4JODAKKworI2RlZmluZSBE QkdCVVNfRkxBR1NfRFNQUAlCSVQoMCkKKyNkZWZpbmUgREJHQlVTX0RTUFBfU1RBVFVTCTB4MzRD CisKKyNkZWZpbmUgREJHQlVTX05BTUVfRFBVCQkiZHB1IgorI2RlZmluZSBEQkdCVVNfTkFNRV9W QklGX1JUCSJ2YmlmX3J0IgorCisvKiBvZmZzZXRzIGZyb20gZHB1IHRvcCBhZGRyZXNzIGZvciB0 aGUgZGVidWcgYnVzZXMgKi8KKyNkZWZpbmUgREJHQlVTX1NTUFAwCTB4MTg4CisjZGVmaW5lIERC R0JVU19BWElfSU5URgkweDE5NAorI2RlZmluZSBEQkdCVVNfU1NQUDEJMHgyOTgKKyNkZWZpbmUg REJHQlVTX0RTUFAJMHgzNDgKKyNkZWZpbmUgREJHQlVTX1BFUklQSAkweDQxOAorCisjZGVmaW5l IFRFU1RfTUFTSyhpZCwgdHApCSgoaWQgPDwgNCkgfCAodHAgPDwgMSkgfCBCSVQoMCkpCisKKy8q IGZvbGxvd2luZyBvZmZzZXRzIGFyZSB3aXRoIHJlc3BlY3QgdG8gTURQIFZCSUYgYmFzZSBmb3Ig REJHIEJVUyBhY2Nlc3MgKi8KKyNkZWZpbmUgTU1TU19WQklGX0NMS09OCQkJMHg0CisjZGVmaW5l IE1NU1NfVkJJRl9URVNUX0JVU19PVVRfQ1RSTAkweDIxMAorI2RlZmluZSBNTVNTX1ZCSUZfVEVT VF9CVVNfT1VUCQkweDIzMAorCisvKiBWYmlmIGVycm9yIGluZm8gKi8KKyNkZWZpbmUgTU1TU19W QklGX1BORF9FUlIJCTB4MTkwCisjZGVmaW5lIE1NU1NfVkJJRl9TUkNfRVJSCQkweDE5NAorI2Rl ZmluZSBNTVNTX1ZCSUZfWElOX0hBTFRfQ1RSTDEJMHgyMDQKKyNkZWZpbmUgTU1TU19WQklGX0VS Ul9JTkZPCQkwWDFhMAorI2RlZmluZSBNTVNTX1ZCSUZfRVJSX0lORk9fMQkJMHgxYTQKKyNkZWZp bmUgTU1TU19WQklGX0NMSUVOVF9OVU0JCTE0CisKKy8qKgorICogc3RydWN0IGRwdV9kYmdfcmVn X2Jhc2UgLSByZWdpc3RlciByZWdpb24gYmFzZS4KKyAqCW1heSBzdWItcmFuZ2VzOiBzdWItcmFu Z2VzIGFyZSB1c2VkIGZvciBkdW1waW5nCisgKglvciBtYXkgbm90IGhhdmUgc3ViLXJhbmdlczog ZHVtcGluZyBpcyBiYXNlIC0+IG1heF9vZmZzZXQKKyAqIEByZWdfYmFzZV9oZWFkOiBoZWFkIG9m IHRoaXMgbm9kZQorICogQG5hbWU6IHJlZ2lzdGVyIGJhc2UgbmFtZQorICogQGJhc2U6IGJhc2Ug cG9pbnRlcgorICogQG9mZjogY2FjaGVkIG9mZnNldCBvZiByZWdpb24gZm9yIG1hbnVhbCByZWdp c3RlciBkdW1waW5nCisgKiBAY250OiBjYWNoZWQgcmFuZ2Ugb2YgcmVnaW9uIGZvciBtYW51YWwg cmVnaXN0ZXIgZHVtcGluZworICogQG1heF9vZmZzZXQ6IGxlbmd0aCBvZiByZWdpb24KKyAqIEBi dWY6IGJ1ZmZlciB1c2VkIGZvciBtYW51YWwgcmVnaXN0ZXIgZHVtcGluZworICogQGJ1Zl9sZW46 ICBidWZmZXIgbGVuZ3RoIHVzZWQgZm9yIG1hbnVhbCByZWdpc3RlciBkdW1waW5nCisgKiBAY2I6 IGNhbGxiYWNrIGZvciBleHRlcm5hbCBkdW1wIGZ1bmN0aW9uLCBudWxsIGlmIG5vdCBkZWZpbmVk CisgKiBAY2JfcHRyOiBwcml2YXRlIHBvaW50ZXIgdG8gY2FsbGJhY2sgZnVuY3Rpb24KKyAqLwor c3RydWN0IGRwdV9kYmdfcmVnX2Jhc2UgeworCXN0cnVjdCBsaXN0X2hlYWQgcmVnX2Jhc2VfaGVh ZDsKKwljaGFyIG5hbWVbUkVHX0JBU0VfTkFNRV9MRU5dOworCXZvaWQgX19pb21lbSAqYmFzZTsK KwlzaXplX3Qgb2ZmOworCXNpemVfdCBjbnQ7CisJc2l6ZV90IG1heF9vZmZzZXQ7CisJY2hhciAq YnVmOworCXNpemVfdCBidWZfbGVuOworCXZvaWQgKCpjYikodm9pZCAqcHRyKTsKKwl2b2lkICpj Yl9wdHI7Cit9OworCitzdHJ1Y3QgZHB1X2RlYnVnX2J1c19lbnRyeSB7CisJdTMyIHdyX2FkZHI7 CisJdTMyIGJsb2NrX2lkOworCXUzMiB0ZXN0X2lkOworCXZvaWQgKCphbmFseXplcikodm9pZCBf X2lvbWVtICptZW1fYmFzZSwKKwkJCQlzdHJ1Y3QgZHB1X2RlYnVnX2J1c19lbnRyeSAqZW50cnks IHUzMiB2YWwpOworfTsKKworc3RydWN0IHZiaWZfZGVidWdfYnVzX2VudHJ5IHsKKwl1MzIgZGlz YWJsZV9idXNfYWRkcjsKKwl1MzIgYmxvY2tfYnVzX2FkZHI7CisJdTMyIGJpdF9vZmZzZXQ7CisJ dTMyIGJsb2NrX2NudDsKKwl1MzIgdGVzdF9wbnRfc3RhcnQ7CisJdTMyIHRlc3RfcG50X2NudDsK K307CisKK3N0cnVjdCBkcHVfZGJnX2RlYnVnX2J1c19jb21tb24geworCWNoYXIgKm5hbWU7CisJ dTMyIGVuYWJsZV9tYXNrOworCWJvb2wgaW5jbHVkZV9pbl9kZWZlcnJlZF93b3JrOworCXUzMiBm bGFnczsKKwl1MzIgZW50cmllc19zaXplOworCXUzMiAqZHVtcGVkX2NvbnRlbnQ7Cit9OworCitz dHJ1Y3QgZHB1X2RiZ19kcHVfZGVidWdfYnVzIHsKKwlzdHJ1Y3QgZHB1X2RiZ19kZWJ1Z19idXNf Y29tbW9uIGNtbjsKKwlzdHJ1Y3QgZHB1X2RlYnVnX2J1c19lbnRyeSAqZW50cmllczsKKwl1MzIg dG9wX2Jsa19vZmY7Cit9OworCitzdHJ1Y3QgZHB1X2RiZ192YmlmX2RlYnVnX2J1cyB7CisJc3Ry dWN0IGRwdV9kYmdfZGVidWdfYnVzX2NvbW1vbiBjbW47CisJc3RydWN0IHZiaWZfZGVidWdfYnVz X2VudHJ5ICplbnRyaWVzOworfTsKKworLyoqCisgKiBzdHJ1Y3QgZHB1X2RiZ19iYXNlIC0gZ2xv YmFsIGRwdSBkZWJ1ZyBiYXNlIHN0cnVjdHVyZQorICogQHJlZ19iYXNlX2xpc3Q6IGxpc3Qgb2Yg cmVnaXN0ZXIgZHVtcGluZyByZWdpb25zCisgKiBAZGV2OiBkZXZpY2UgcG9pbnRlcgorICogQGR1 bXBfd29yazogd29yayBzdHJ1Y3QgZm9yIGRlZmVycmluZyByZWdpc3RlciBkdW1wIHdvcmsgdG8g c2VwYXJhdGUgdGhyZWFkCisgKiBAZGJnYnVzX2RwdTogZGVidWcgYnVzIHN0cnVjdHVyZSBmb3Ig dGhlIGRwdQorICogQGRiZ2J1c192YmlmX3J0OiBkZWJ1ZyBidXMgc3RydWN0dXJlIGZvciB0aGUg cmVhbHRpbWUgdmJpZgorICovCitzdGF0aWMgc3RydWN0IGRwdV9kYmdfYmFzZSB7CisJc3RydWN0 IGxpc3RfaGVhZCByZWdfYmFzZV9saXN0OworCXN0cnVjdCBkZXZpY2UgKmRldjsKKworCXN0cnVj dCB3b3JrX3N0cnVjdCBkdW1wX3dvcms7CisKKwlzdHJ1Y3QgZHB1X2RiZ19kcHVfZGVidWdfYnVz IGRiZ2J1c19kcHU7CisJc3RydWN0IGRwdV9kYmdfdmJpZl9kZWJ1Z19idXMgZGJnYnVzX3ZiaWZf cnQ7Cit9IGRwdV9kYmdfYmFzZTsKKworc3RhdGljIHZvaWQgX2RwdV9kZWJ1Z19idXNfeGJhcl9k dW1wKHZvaWQgX19pb21lbSAqbWVtX2Jhc2UsCisJCXN0cnVjdCBkcHVfZGVidWdfYnVzX2VudHJ5 ICplbnRyeSwgdTMyIHZhbCkKK3sKKwlkZXZfZXJyKGRwdV9kYmdfYmFzZS5kZXYsICJ4YmFyIDB4 JXggJWQgJWQgMHgleFxuIiwKKwkJCWVudHJ5LT53cl9hZGRyLCBlbnRyeS0+YmxvY2tfaWQsIGVu dHJ5LT50ZXN0X2lkLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBfZHB1X2RlYnVnX2J1c19sbV9k dW1wKHZvaWQgX19pb21lbSAqbWVtX2Jhc2UsCisJCXN0cnVjdCBkcHVfZGVidWdfYnVzX2VudHJ5 ICplbnRyeSwgdTMyIHZhbCkKK3sKKwlpZiAoISh2YWwgJiAweEZGRjAwMCkpCisJCXJldHVybjsK KworCWRldl9lcnIoZHB1X2RiZ19iYXNlLmRldiwgImxtIDB4JXggJWQgJWQgMHgleFxuIiwKKwkJ CWVudHJ5LT53cl9hZGRyLCBlbnRyeS0+YmxvY2tfaWQsIGVudHJ5LT50ZXN0X2lkLCB2YWwpOwor fQorCitzdGF0aWMgdm9pZCBfZHB1X2RlYnVnX2J1c19wcGIwX2R1bXAodm9pZCBfX2lvbWVtICpt ZW1fYmFzZSwKKwkJc3RydWN0IGRwdV9kZWJ1Z19idXNfZW50cnkgKmVudHJ5LCB1MzIgdmFsKQor eworCWlmICghKHZhbCAmIEJJVCgxNSkpKQorCQlyZXR1cm47CisKKwlkZXZfZXJyKGRwdV9kYmdf YmFzZS5kZXYsICJwcGIwIDB4JXggJWQgJWQgMHgleFxuIiwKKwkJCWVudHJ5LT53cl9hZGRyLCBl bnRyeS0+YmxvY2tfaWQsIGVudHJ5LT50ZXN0X2lkLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBf ZHB1X2RlYnVnX2J1c19wcGIxX2R1bXAodm9pZCBfX2lvbWVtICptZW1fYmFzZSwKKwkJc3RydWN0 IGRwdV9kZWJ1Z19idXNfZW50cnkgKmVudHJ5LCB1MzIgdmFsKQoreworCWlmICghKHZhbCAmIEJJ VCgxNSkpKQorCQlyZXR1cm47CisKKwlkZXZfZXJyKGRwdV9kYmdfYmFzZS5kZXYsICJwcGIxIDB4 JXggJWQgJWQgMHgleFxuIiwKKwkJCWVudHJ5LT53cl9hZGRyLCBlbnRyeS0+YmxvY2tfaWQsIGVu dHJ5LT50ZXN0X2lkLCB2YWwpOworfQorCitzdGF0aWMgc3RydWN0IGRwdV9kZWJ1Z19idXNfZW50 cnkgZGJnX2J1c19kcHVfODk5OFtdID0geworCisJLyogVW5wYWNrIDAgc3NwcCAwKi8KKwl7IERC R0JVU19TU1BQMCwgNTAsIDIgfSwKKwl7IERCR0JVU19TU1BQMCwgNjAsIDIgfSwKKwl7IERCR0JV U19TU1BQMCwgNzAsIDIgfSwKKwl7IERCR0JVU19TU1BQMCwgODUsIDIgfSwKKworCS8qIFVwYWNr IDAgc3NwcCAxKi8KKwl7IERCR0JVU19TU1BQMSwgNTAsIDIgfSwKKwl7IERCR0JVU19TU1BQMSwg NjAsIDIgfSwKKwl7IERCR0JVU19TU1BQMSwgNzAsIDIgfSwKKwl7IERCR0JVU19TU1BQMSwgODUs IDIgfSwKKworCS8qIHNjaGVkdWxlciAqLworCXsgREJHQlVTX0RTUFAsIDEzMCwgMCB9LAorCXsg REJHQlVTX0RTUFAsIDEzMCwgMSB9LAorCXsgREJHQlVTX0RTUFAsIDEzMCwgMiB9LAorCXsgREJH QlVTX0RTUFAsIDEzMCwgMyB9LAorCXsgREJHQlVTX0RTUFAsIDEzMCwgNCB9LAorCXsgREJHQlVT X0RTUFAsIDEzMCwgNSB9LAorCisJLyogcXNlZWQgKi8KKwl7IERCR0JVU19TU1BQMCwgNiwgMH0s CisJeyBEQkdCVVNfU1NQUDAsIDYsIDF9LAorCXsgREJHQlVTX1NTUFAwLCAyNiwgMH0sCisJeyBE QkdCVVNfU1NQUDAsIDI2LCAxfSwKKwl7IERCR0JVU19TU1BQMSwgNiwgMH0sCisJeyBEQkdCVVNf U1NQUDEsIDYsIDF9LAorCXsgREJHQlVTX1NTUFAxLCAyNiwgMH0sCisJeyBEQkdCVVNfU1NQUDEs IDI2LCAxfSwKKworCS8qIHNjYWxlICovCisJeyBEQkdCVVNfU1NQUDAsIDE2LCAwfSwKKwl7IERC R0JVU19TU1BQMCwgMTYsIDF9LAorCXsgREJHQlVTX1NTUFAwLCAzNiwgMH0sCisJeyBEQkdCVVNf U1NQUDAsIDM2LCAxfSwKKwl7IERCR0JVU19TU1BQMSwgMTYsIDB9LAorCXsgREJHQlVTX1NTUFAx LCAxNiwgMX0sCisJeyBEQkdCVVNfU1NQUDEsIDM2LCAwfSwKKwl7IERCR0JVU19TU1BQMSwgMzYs IDF9LAorCisJLyogZmV0Y2ggc3NwcDAgKi8KKworCS8qIHZpZyAwICovCisJeyBEQkdCVVNfU1NQ UDAsIDAsIDAgfSwKKwl7IERCR0JVU19TU1BQMCwgMCwgMSB9LAorCXsgREJHQlVTX1NTUFAwLCAw LCAyIH0sCisJeyBEQkdCVVNfU1NQUDAsIDAsIDMgfSwKKwl7IERCR0JVU19TU1BQMCwgMCwgNCB9 LAorCXsgREJHQlVTX1NTUFAwLCAwLCA1IH0sCisJeyBEQkdCVVNfU1NQUDAsIDAsIDYgfSwKKwl7 IERCR0JVU19TU1BQMCwgMCwgNyB9LAorCisJeyBEQkdCVVNfU1NQUDAsIDEsIDAgfSwKKwl7IERC R0JVU19TU1BQMCwgMSwgMSB9LAorCXsgREJHQlVTX1NTUFAwLCAxLCAyIH0sCisJeyBEQkdCVVNf U1NQUDAsIDEsIDMgfSwKKwl7IERCR0JVU19TU1BQMCwgMSwgNCB9LAorCXsgREJHQlVTX1NTUFAw LCAxLCA1IH0sCisJeyBEQkdCVVNfU1NQUDAsIDEsIDYgfSwKKwl7IERCR0JVU19TU1BQMCwgMSwg NyB9LAorCisJeyBEQkdCVVNfU1NQUDAsIDIsIDAgfSwKKwl7IERCR0JVU19TU1BQMCwgMiwgMSB9 LAorCXsgREJHQlVTX1NTUFAwLCAyLCAyIH0sCisJeyBEQkdCVVNfU1NQUDAsIDIsIDMgfSwKKwl7 IERCR0JVU19TU1BQMCwgMiwgNCB9LAorCXsgREJHQlVTX1NTUFAwLCAyLCA1IH0sCisJeyBEQkdC VVNfU1NQUDAsIDIsIDYgfSwKKwl7IERCR0JVU19TU1BQMCwgMiwgNyB9LAorCisJeyBEQkdCVVNf U1NQUDAsIDQsIDAgfSwKKwl7IERCR0JVU19TU1BQMCwgNCwgMSB9LAorCXsgREJHQlVTX1NTUFAw LCA0LCAyIH0sCisJeyBEQkdCVVNfU1NQUDAsIDQsIDMgfSwKKwl7IERCR0JVU19TU1BQMCwgNCwg NCB9LAorCXsgREJHQlVTX1NTUFAwLCA0LCA1IH0sCisJeyBEQkdCVVNfU1NQUDAsIDQsIDYgfSwK Kwl7IERCR0JVU19TU1BQMCwgNCwgNyB9LAorCisJeyBEQkdCVVNfU1NQUDAsIDUsIDAgfSwKKwl7 IERCR0JVU19TU1BQMCwgNSwgMSB9LAorCXsgREJHQlVTX1NTUFAwLCA1LCAyIH0sCisJeyBEQkdC VVNfU1NQUDAsIDUsIDMgfSwKKwl7IERCR0JVU19TU1BQMCwgNSwgNCB9LAorCXsgREJHQlVTX1NT UFAwLCA1LCA1IH0sCisJeyBEQkdCVVNfU1NQUDAsIDUsIDYgfSwKKwl7IERCR0JVU19TU1BQMCwg NSwgNyB9LAorCisJLyogdmlnIDIgKi8KKwl7IERCR0JVU19TU1BQMCwgMjAsIDAgfSwKKwl7IERC R0JVU19TU1BQMCwgMjAsIDEgfSwKKwl7IERCR0JVU19TU1BQMCwgMjAsIDIgfSwKKwl7IERCR0JV U19TU1BQMCwgMjAsIDMgfSwKKwl7IERCR0JVU19TU1BQMCwgMjAsIDQgfSwKKwl7IERCR0JVU19T U1BQMCwgMjAsIDUgfSwKKwl7IERCR0JVU19TU1BQMCwgMjAsIDYgfSwKKwl7IERCR0JVU19TU1BQ MCwgMjAsIDcgfSwKKworCXsgREJHQlVTX1NTUFAwLCAyMSwgMCB9LAorCXsgREJHQlVTX1NTUFAw LCAyMSwgMSB9LAorCXsgREJHQlVTX1NTUFAwLCAyMSwgMiB9LAorCXsgREJHQlVTX1NTUFAwLCAy MSwgMyB9LAorCXsgREJHQlVTX1NTUFAwLCAyMSwgNCB9LAorCXsgREJHQlVTX1NTUFAwLCAyMSwg NSB9LAorCXsgREJHQlVTX1NTUFAwLCAyMSwgNiB9LAorCXsgREJHQlVTX1NTUFAwLCAyMSwgNyB9 LAorCisJeyBEQkdCVVNfU1NQUDAsIDIyLCAwIH0sCisJeyBEQkdCVVNfU1NQUDAsIDIyLCAxIH0s CisJeyBEQkdCVVNfU1NQUDAsIDIyLCAyIH0sCisJeyBEQkdCVVNfU1NQUDAsIDIyLCAzIH0sCisJ eyBEQkdCVVNfU1NQUDAsIDIyLCA0IH0sCisJeyBEQkdCVVNfU1NQUDAsIDIyLCA1IH0sCisJeyBE QkdCVVNfU1NQUDAsIDIyLCA2IH0sCisJeyBEQkdCVVNfU1NQUDAsIDIyLCA3IH0sCisKKwl7IERC R0JVU19TU1BQMCwgMjQsIDAgfSwKKwl7IERCR0JVU19TU1BQMCwgMjQsIDEgfSwKKwl7IERCR0JV U19TU1BQMCwgMjQsIDIgfSwKKwl7IERCR0JVU19TU1BQMCwgMjQsIDMgfSwKKwl7IERCR0JVU19T U1BQMCwgMjQsIDQgfSwKKwl7IERCR0JVU19TU1BQMCwgMjQsIDUgfSwKKwl7IERCR0JVU19TU1BQ MCwgMjQsIDYgfSwKKwl7IERCR0JVU19TU1BQMCwgMjQsIDcgfSwKKworCXsgREJHQlVTX1NTUFAw LCAyNSwgMCB9LAorCXsgREJHQlVTX1NTUFAwLCAyNSwgMSB9LAorCXsgREJHQlVTX1NTUFAwLCAy NSwgMiB9LAorCXsgREJHQlVTX1NTUFAwLCAyNSwgMyB9LAorCXsgREJHQlVTX1NTUFAwLCAyNSwg NCB9LAorCXsgREJHQlVTX1NTUFAwLCAyNSwgNSB9LAorCXsgREJHQlVTX1NTUFAwLCAyNSwgNiB9 LAorCXsgREJHQlVTX1NTUFAwLCAyNSwgNyB9LAorCisJLyogZG1hIDIgKi8KKwl7IERCR0JVU19T U1BQMCwgMzAsIDAgfSwKKwl7IERCR0JVU19TU1BQMCwgMzAsIDEgfSwKKwl7IERCR0JVU19TU1BQ MCwgMzAsIDIgfSwKKwl7IERCR0JVU19TU1BQMCwgMzAsIDMgfSwKKwl7IERCR0JVU19TU1BQMCwg MzAsIDQgfSwKKwl7IERCR0JVU19TU1BQMCwgMzAsIDUgfSwKKwl7IERCR0JVU19TU1BQMCwgMzAs IDYgfSwKKwl7IERCR0JVU19TU1BQMCwgMzAsIDcgfSwKKworCXsgREJHQlVTX1NTUFAwLCAzMSwg MCB9LAorCXsgREJHQlVTX1NTUFAwLCAzMSwgMSB9LAorCXsgREJHQlVTX1NTUFAwLCAzMSwgMiB9 LAorCXsgREJHQlVTX1NTUFAwLCAzMSwgMyB9LAorCXsgREJHQlVTX1NTUFAwLCAzMSwgNCB9LAor CXsgREJHQlVTX1NTUFAwLCAzMSwgNSB9LAorCXsgREJHQlVTX1NTUFAwLCAzMSwgNiB9LAorCXsg REJHQlVTX1NTUFAwLCAzMSwgNyB9LAorCisJeyBEQkdCVVNfU1NQUDAsIDMyLCAwIH0sCisJeyBE QkdCVVNfU1NQUDAsIDMyLCAxIH0sCisJeyBEQkdCVVNfU1NQUDAsIDMyLCAyIH0sCisJeyBEQkdC VVNfU1NQUDAsIDMyLCAzIH0sCisJeyBEQkdCVVNfU1NQUDAsIDMyLCA0IH0sCisJeyBEQkdCVVNf U1NQUDAsIDMyLCA1IH0sCisJeyBEQkdCVVNfU1NQUDAsIDMyLCA2IH0sCisJeyBEQkdCVVNfU1NQ UDAsIDMyLCA3IH0sCisKKwl7IERCR0JVU19TU1BQMCwgMzMsIDAgfSwKKwl7IERCR0JVU19TU1BQ MCwgMzMsIDEgfSwKKwl7IERCR0JVU19TU1BQMCwgMzMsIDIgfSwKKwl7IERCR0JVU19TU1BQMCwg MzMsIDMgfSwKKwl7IERCR0JVU19TU1BQMCwgMzMsIDQgfSwKKwl7IERCR0JVU19TU1BQMCwgMzMs IDUgfSwKKwl7IERCR0JVU19TU1BQMCwgMzMsIDYgfSwKKwl7IERCR0JVU19TU1BQMCwgMzMsIDcg fSwKKworCXsgREJHQlVTX1NTUFAwLCAzNCwgMCB9LAorCXsgREJHQlVTX1NTUFAwLCAzNCwgMSB9 LAorCXsgREJHQlVTX1NTUFAwLCAzNCwgMiB9LAorCXsgREJHQlVTX1NTUFAwLCAzNCwgMyB9LAor CXsgREJHQlVTX1NTUFAwLCAzNCwgNCB9LAorCXsgREJHQlVTX1NTUFAwLCAzNCwgNSB9LAorCXsg REJHQlVTX1NTUFAwLCAzNCwgNiB9LAorCXsgREJHQlVTX1NTUFAwLCAzNCwgNyB9LAorCisJeyBE QkdCVVNfU1NQUDAsIDM1LCAwIH0sCisJeyBEQkdCVVNfU1NQUDAsIDM1LCAxIH0sCisJeyBEQkdC VVNfU1NQUDAsIDM1LCAyIH0sCisJeyBEQkdCVVNfU1NQUDAsIDM1LCAzIH0sCisKKwkvKiBkbWEg MCAqLworCXsgREJHQlVTX1NTUFAwLCA0MCwgMCB9LAorCXsgREJHQlVTX1NTUFAwLCA0MCwgMSB9 LAorCXsgREJHQlVTX1NTUFAwLCA0MCwgMiB9LAorCXsgREJHQlVTX1NTUFAwLCA0MCwgMyB9LAor CXsgREJHQlVTX1NTUFAwLCA0MCwgNCB9LAorCXsgREJHQlVTX1NTUFAwLCA0MCwgNSB9LAorCXsg REJHQlVTX1NTUFAwLCA0MCwgNiB9LAorCXsgREJHQlVTX1NTUFAwLCA0MCwgNyB9LAorCisJeyBE QkdCVVNfU1NQUDAsIDQxLCAwIH0sCisJeyBEQkdCVVNfU1NQUDAsIDQxLCAxIH0sCisJeyBEQkdC VVNfU1NQUDAsIDQxLCAyIH0sCisJeyBEQkdCVVNfU1NQUDAsIDQxLCAzIH0sCisJeyBEQkdCVVNf U1NQUDAsIDQxLCA0IH0sCisJeyBEQkdCVVNfU1NQUDAsIDQxLCA1IH0sCisJeyBEQkdCVVNfU1NQ UDAsIDQxLCA2IH0sCisJeyBEQkdCVVNfU1NQUDAsIDQxLCA3IH0sCisKKwl7IERCR0JVU19TU1BQ MCwgNDIsIDAgfSwKKwl7IERCR0JVU19TU1BQMCwgNDIsIDEgfSwKKwl7IERCR0JVU19TU1BQMCwg NDIsIDIgfSwKKwl7IERCR0JVU19TU1BQMCwgNDIsIDMgfSwKKwl7IERCR0JVU19TU1BQMCwgNDIs IDQgfSwKKwl7IERCR0JVU19TU1BQMCwgNDIsIDUgfSwKKwl7IERCR0JVU19TU1BQMCwgNDIsIDYg fSwKKwl7IERCR0JVU19TU1BQMCwgNDIsIDcgfSwKKworCXsgREJHQlVTX1NTUFAwLCA0NCwgMCB9 LAorCXsgREJHQlVTX1NTUFAwLCA0NCwgMSB9LAorCXsgREJHQlVTX1NTUFAwLCA0NCwgMiB9LAor CXsgREJHQlVTX1NTUFAwLCA0NCwgMyB9LAorCXsgREJHQlVTX1NTUFAwLCA0NCwgNCB9LAorCXsg REJHQlVTX1NTUFAwLCA0NCwgNSB9LAorCXsgREJHQlVTX1NTUFAwLCA0NCwgNiB9LAorCXsgREJH QlVTX1NTUFAwLCA0NCwgNyB9LAorCisJeyBEQkdCVVNfU1NQUDAsIDQ1LCAwIH0sCisJeyBEQkdC VVNfU1NQUDAsIDQ1LCAxIH0sCisJeyBEQkdCVVNfU1NQUDAsIDQ1LCAyIH0sCisJeyBEQkdCVVNf U1NQUDAsIDQ1LCAzIH0sCisJeyBEQkdCVVNfU1NQUDAsIDQ1LCA0IH0sCisJeyBEQkdCVVNfU1NQ UDAsIDQ1LCA1IH0sCisJeyBEQkdCVVNfU1NQUDAsIDQ1LCA2IH0sCisJeyBEQkdCVVNfU1NQUDAs IDQ1LCA3IH0sCisKKwkvKiBmZXRjaCBzc3BwMSAqLworCS8qIHZpZyAxICovCisJeyBEQkdCVVNf U1NQUDEsIDAsIDAgfSwKKwl7IERCR0JVU19TU1BQMSwgMCwgMSB9LAorCXsgREJHQlVTX1NTUFAx LCAwLCAyIH0sCisJeyBEQkdCVVNfU1NQUDEsIDAsIDMgfSwKKwl7IERCR0JVU19TU1BQMSwgMCwg NCB9LAorCXsgREJHQlVTX1NTUFAxLCAwLCA1IH0sCisJeyBEQkdCVVNfU1NQUDEsIDAsIDYgfSwK Kwl7IERCR0JVU19TU1BQMSwgMCwgNyB9LAorCisJeyBEQkdCVVNfU1NQUDEsIDEsIDAgfSwKKwl7 IERCR0JVU19TU1BQMSwgMSwgMSB9LAorCXsgREJHQlVTX1NTUFAxLCAxLCAyIH0sCisJeyBEQkdC VVNfU1NQUDEsIDEsIDMgfSwKKwl7IERCR0JVU19TU1BQMSwgMSwgNCB9LAorCXsgREJHQlVTX1NT UFAxLCAxLCA1IH0sCisJeyBEQkdCVVNfU1NQUDEsIDEsIDYgfSwKKwl7IERCR0JVU19TU1BQMSwg MSwgNyB9LAorCisJeyBEQkdCVVNfU1NQUDEsIDIsIDAgfSwKKwl7IERCR0JVU19TU1BQMSwgMiwg MSB9LAorCXsgREJHQlVTX1NTUFAxLCAyLCAyIH0sCisJeyBEQkdCVVNfU1NQUDEsIDIsIDMgfSwK Kwl7IERCR0JVU19TU1BQMSwgMiwgNCB9LAorCXsgREJHQlVTX1NTUFAxLCAyLCA1IH0sCisJeyBE QkdCVVNfU1NQUDEsIDIsIDYgfSwKKwl7IERCR0JVU19TU1BQMSwgMiwgNyB9LAorCisJeyBEQkdC VVNfU1NQUDEsIDQsIDAgfSwKKwl7IERCR0JVU19TU1BQMSwgNCwgMSB9LAorCXsgREJHQlVTX1NT UFAxLCA0LCAyIH0sCisJeyBEQkdCVVNfU1NQUDEsIDQsIDMgfSwKKwl7IERCR0JVU19TU1BQMSwg NCwgNCB9LAorCXsgREJHQlVTX1NTUFAxLCA0LCA1IH0sCisJeyBEQkdCVVNfU1NQUDEsIDQsIDYg fSwKKwl7IERCR0JVU19TU1BQMSwgNCwgNyB9LAorCisJeyBEQkdCVVNfU1NQUDEsIDUsIDAgfSwK Kwl7IERCR0JVU19TU1BQMSwgNSwgMSB9LAorCXsgREJHQlVTX1NTUFAxLCA1LCAyIH0sCisJeyBE QkdCVVNfU1NQUDEsIDUsIDMgfSwKKwl7IERCR0JVU19TU1BQMSwgNSwgNCB9LAorCXsgREJHQlVT X1NTUFAxLCA1LCA1IH0sCisJeyBEQkdCVVNfU1NQUDEsIDUsIDYgfSwKKwl7IERCR0JVU19TU1BQ MSwgNSwgNyB9LAorCisJLyogdmlnIDMgKi8KKwl7IERCR0JVU19TU1BQMSwgMjAsIDAgfSwKKwl7 IERCR0JVU19TU1BQMSwgMjAsIDEgfSwKKwl7IERCR0JVU19TU1BQMSwgMjAsIDIgfSwKKwl7IERC R0JVU19TU1BQMSwgMjAsIDMgfSwKKwl7IERCR0JVU19TU1BQMSwgMjAsIDQgfSwKKwl7IERCR0JV U19TU1BQMSwgMjAsIDUgfSwKKwl7IERCR0JVU19TU1BQMSwgMjAsIDYgfSwKKwl7IERCR0JVU19T U1BQMSwgMjAsIDcgfSwKKworCXsgREJHQlVTX1NTUFAxLCAyMSwgMCB9LAorCXsgREJHQlVTX1NT UFAxLCAyMSwgMSB9LAorCXsgREJHQlVTX1NTUFAxLCAyMSwgMiB9LAorCXsgREJHQlVTX1NTUFAx LCAyMSwgMyB9LAorCXsgREJHQlVTX1NTUFAxLCAyMSwgNCB9LAorCXsgREJHQlVTX1NTUFAxLCAy MSwgNSB9LAorCXsgREJHQlVTX1NTUFAxLCAyMSwgNiB9LAorCXsgREJHQlVTX1NTUFAxLCAyMSwg NyB9LAorCisJeyBEQkdCVVNfU1NQUDEsIDIyLCAwIH0sCisJeyBEQkdCVVNfU1NQUDEsIDIyLCAx IH0sCisJeyBEQkdCVVNfU1NQUDEsIDIyLCAyIH0sCisJeyBEQkdCVVNfU1NQUDEsIDIyLCAzIH0s CisJeyBEQkdCVVNfU1NQUDEsIDIyLCA0IH0sCisJeyBEQkdCVVNfU1NQUDEsIDIyLCA1IH0sCisJ eyBEQkdCVVNfU1NQUDEsIDIyLCA2IH0sCisJeyBEQkdCVVNfU1NQUDEsIDIyLCA3IH0sCisKKwl7 IERCR0JVU19TU1BQMSwgMjQsIDAgfSwKKwl7IERCR0JVU19TU1BQMSwgMjQsIDEgfSwKKwl7IERC R0JVU19TU1BQMSwgMjQsIDIgfSwKKwl7IERCR0JVU19TU1BQMSwgMjQsIDMgfSwKKwl7IERCR0JV U19TU1BQMSwgMjQsIDQgfSwKKwl7IERCR0JVU19TU1BQMSwgMjQsIDUgfSwKKwl7IERCR0JVU19T U1BQMSwgMjQsIDYgfSwKKwl7IERCR0JVU19TU1BQMSwgMjQsIDcgfSwKKworCXsgREJHQlVTX1NT UFAxLCAyNSwgMCB9LAorCXsgREJHQlVTX1NTUFAxLCAyNSwgMSB9LAorCXsgREJHQlVTX1NTUFAx LCAyNSwgMiB9LAorCXsgREJHQlVTX1NTUFAxLCAyNSwgMyB9LAorCXsgREJHQlVTX1NTUFAxLCAy NSwgNCB9LAorCXsgREJHQlVTX1NTUFAxLCAyNSwgNSB9LAorCXsgREJHQlVTX1NTUFAxLCAyNSwg NiB9LAorCXsgREJHQlVTX1NTUFAxLCAyNSwgNyB9LAorCisJLyogZG1hIDMgKi8KKwl7IERCR0JV U19TU1BQMSwgMzAsIDAgfSwKKwl7IERCR0JVU19TU1BQMSwgMzAsIDEgfSwKKwl7IERCR0JVU19T U1BQMSwgMzAsIDIgfSwKKwl7IERCR0JVU19TU1BQMSwgMzAsIDMgfSwKKwl7IERCR0JVU19TU1BQ MSwgMzAsIDQgfSwKKwl7IERCR0JVU19TU1BQMSwgMzAsIDUgfSwKKwl7IERCR0JVU19TU1BQMSwg MzAsIDYgfSwKKwl7IERCR0JVU19TU1BQMSwgMzAsIDcgfSwKKworCXsgREJHQlVTX1NTUFAxLCAz MSwgMCB9LAorCXsgREJHQlVTX1NTUFAxLCAzMSwgMSB9LAorCXsgREJHQlVTX1NTUFAxLCAzMSwg MiB9LAorCXsgREJHQlVTX1NTUFAxLCAzMSwgMyB9LAorCXsgREJHQlVTX1NTUFAxLCAzMSwgNCB9 LAorCXsgREJHQlVTX1NTUFAxLCAzMSwgNSB9LAorCXsgREJHQlVTX1NTUFAxLCAzMSwgNiB9LAor CXsgREJHQlVTX1NTUFAxLCAzMSwgNyB9LAorCisJeyBEQkdCVVNfU1NQUDEsIDMyLCAwIH0sCisJ eyBEQkdCVVNfU1NQUDEsIDMyLCAxIH0sCisJeyBEQkdCVVNfU1NQUDEsIDMyLCAyIH0sCisJeyBE QkdCVVNfU1NQUDEsIDMyLCAzIH0sCisJeyBEQkdCVVNfU1NQUDEsIDMyLCA0IH0sCisJeyBEQkdC VVNfU1NQUDEsIDMyLCA1IH0sCisJeyBEQkdCVVNfU1NQUDEsIDMyLCA2IH0sCisJeyBEQkdCVVNf U1NQUDEsIDMyLCA3IH0sCisKKwl7IERCR0JVU19TU1BQMSwgMzMsIDAgfSwKKwl7IERCR0JVU19T U1BQMSwgMzMsIDEgfSwKKwl7IERCR0JVU19TU1BQMSwgMzMsIDIgfSwKKwl7IERCR0JVU19TU1BQ MSwgMzMsIDMgfSwKKwl7IERCR0JVU19TU1BQMSwgMzMsIDQgfSwKKwl7IERCR0JVU19TU1BQMSwg MzMsIDUgfSwKKwl7IERCR0JVU19TU1BQMSwgMzMsIDYgfSwKKwl7IERCR0JVU19TU1BQMSwgMzMs IDcgfSwKKworCXsgREJHQlVTX1NTUFAxLCAzNCwgMCB9LAorCXsgREJHQlVTX1NTUFAxLCAzNCwg MSB9LAorCXsgREJHQlVTX1NTUFAxLCAzNCwgMiB9LAorCXsgREJHQlVTX1NTUFAxLCAzNCwgMyB9 LAorCXsgREJHQlVTX1NTUFAxLCAzNCwgNCB9LAorCXsgREJHQlVTX1NTUFAxLCAzNCwgNSB9LAor CXsgREJHQlVTX1NTUFAxLCAzNCwgNiB9LAorCXsgREJHQlVTX1NTUFAxLCAzNCwgNyB9LAorCisJ eyBEQkdCVVNfU1NQUDEsIDM1LCAwIH0sCisJeyBEQkdCVVNfU1NQUDEsIDM1LCAxIH0sCisJeyBE QkdCVVNfU1NQUDEsIDM1LCAyIH0sCisKKwkvKiBkbWEgMSAqLworCXsgREJHQlVTX1NTUFAxLCA0 MCwgMCB9LAorCXsgREJHQlVTX1NTUFAxLCA0MCwgMSB9LAorCXsgREJHQlVTX1NTUFAxLCA0MCwg MiB9LAorCXsgREJHQlVTX1NTUFAxLCA0MCwgMyB9LAorCXsgREJHQlVTX1NTUFAxLCA0MCwgNCB9 LAorCXsgREJHQlVTX1NTUFAxLCA0MCwgNSB9LAorCXsgREJHQlVTX1NTUFAxLCA0MCwgNiB9LAor CXsgREJHQlVTX1NTUFAxLCA0MCwgNyB9LAorCisJeyBEQkdCVVNfU1NQUDEsIDQxLCAwIH0sCisJ eyBEQkdCVVNfU1NQUDEsIDQxLCAxIH0sCisJeyBEQkdCVVNfU1NQUDEsIDQxLCAyIH0sCisJeyBE QkdCVVNfU1NQUDEsIDQxLCAzIH0sCisJeyBEQkdCVVNfU1NQUDEsIDQxLCA0IH0sCisJeyBEQkdC VVNfU1NQUDEsIDQxLCA1IH0sCisJeyBEQkdCVVNfU1NQUDEsIDQxLCA2IH0sCisJeyBEQkdCVVNf U1NQUDEsIDQxLCA3IH0sCisKKwl7IERCR0JVU19TU1BQMSwgNDIsIDAgfSwKKwl7IERCR0JVU19T U1BQMSwgNDIsIDEgfSwKKwl7IERCR0JVU19TU1BQMSwgNDIsIDIgfSwKKwl7IERCR0JVU19TU1BQ MSwgNDIsIDMgfSwKKwl7IERCR0JVU19TU1BQMSwgNDIsIDQgfSwKKwl7IERCR0JVU19TU1BQMSwg NDIsIDUgfSwKKwl7IERCR0JVU19TU1BQMSwgNDIsIDYgfSwKKwl7IERCR0JVU19TU1BQMSwgNDIs IDcgfSwKKworCXsgREJHQlVTX1NTUFAxLCA0NCwgMCB9LAorCXsgREJHQlVTX1NTUFAxLCA0NCwg MSB9LAorCXsgREJHQlVTX1NTUFAxLCA0NCwgMiB9LAorCXsgREJHQlVTX1NTUFAxLCA0NCwgMyB9 LAorCXsgREJHQlVTX1NTUFAxLCA0NCwgNCB9LAorCXsgREJHQlVTX1NTUFAxLCA0NCwgNSB9LAor CXsgREJHQlVTX1NTUFAxLCA0NCwgNiB9LAorCXsgREJHQlVTX1NTUFAxLCA0NCwgNyB9LAorCisJ eyBEQkdCVVNfU1NQUDEsIDQ1LCAwIH0sCisJeyBEQkdCVVNfU1NQUDEsIDQ1LCAxIH0sCisJeyBE QkdCVVNfU1NQUDEsIDQ1LCAyIH0sCisJeyBEQkdCVVNfU1NQUDEsIDQ1LCAzIH0sCisJeyBEQkdC VVNfU1NQUDEsIDQ1LCA0IH0sCisJeyBEQkdCVVNfU1NQUDEsIDQ1LCA1IH0sCisJeyBEQkdCVVNf U1NQUDEsIDQ1LCA2IH0sCisJeyBEQkdCVVNfU1NQUDEsIDQ1LCA3IH0sCisKKwkvKiBjdXJzb3Ig MSAqLworCXsgREJHQlVTX1NTUFAxLCA4MCwgMCB9LAorCXsgREJHQlVTX1NTUFAxLCA4MCwgMSB9 LAorCXsgREJHQlVTX1NTUFAxLCA4MCwgMiB9LAorCXsgREJHQlVTX1NTUFAxLCA4MCwgMyB9LAor CXsgREJHQlVTX1NTUFAxLCA4MCwgNCB9LAorCXsgREJHQlVTX1NTUFAxLCA4MCwgNSB9LAorCXsg REJHQlVTX1NTUFAxLCA4MCwgNiB9LAorCXsgREJHQlVTX1NTUFAxLCA4MCwgNyB9LAorCisJeyBE QkdCVVNfU1NQUDEsIDgxLCAwIH0sCisJeyBEQkdCVVNfU1NQUDEsIDgxLCAxIH0sCisJeyBEQkdC VVNfU1NQUDEsIDgxLCAyIH0sCisJeyBEQkdCVVNfU1NQUDEsIDgxLCAzIH0sCisJeyBEQkdCVVNf U1NQUDEsIDgxLCA0IH0sCisJeyBEQkdCVVNfU1NQUDEsIDgxLCA1IH0sCisJeyBEQkdCVVNfU1NQ UDEsIDgxLCA2IH0sCisJeyBEQkdCVVNfU1NQUDEsIDgxLCA3IH0sCisKKwl7IERCR0JVU19TU1BQ MSwgODIsIDAgfSwKKwl7IERCR0JVU19TU1BQMSwgODIsIDEgfSwKKwl7IERCR0JVU19TU1BQMSwg ODIsIDIgfSwKKwl7IERCR0JVU19TU1BQMSwgODIsIDMgfSwKKwl7IERCR0JVU19TU1BQMSwgODIs IDQgfSwKKwl7IERCR0JVU19TU1BQMSwgODIsIDUgfSwKKwl7IERCR0JVU19TU1BQMSwgODIsIDYg fSwKKwl7IERCR0JVU19TU1BQMSwgODIsIDcgfSwKKworCXsgREJHQlVTX1NTUFAxLCA4MywgMCB9 LAorCXsgREJHQlVTX1NTUFAxLCA4MywgMSB9LAorCXsgREJHQlVTX1NTUFAxLCA4MywgMiB9LAor CXsgREJHQlVTX1NTUFAxLCA4MywgMyB9LAorCXsgREJHQlVTX1NTUFAxLCA4MywgNCB9LAorCXsg REJHQlVTX1NTUFAxLCA4MywgNSB9LAorCXsgREJHQlVTX1NTUFAxLCA4MywgNiB9LAorCXsgREJH QlVTX1NTUFAxLCA4MywgNyB9LAorCisJeyBEQkdCVVNfU1NQUDEsIDg0LCAwIH0sCisJeyBEQkdC VVNfU1NQUDEsIDg0LCAxIH0sCisJeyBEQkdCVVNfU1NQUDEsIDg0LCAyIH0sCisJeyBEQkdCVVNf U1NQUDEsIDg0LCAzIH0sCisJeyBEQkdCVVNfU1NQUDEsIDg0LCA0IH0sCisJeyBEQkdCVVNfU1NQ UDEsIDg0LCA1IH0sCisJeyBEQkdCVVNfU1NQUDEsIDg0LCA2IH0sCisJeyBEQkdCVVNfU1NQUDEs IDg0LCA3IH0sCisKKwkvKiBkc3BwICovCisJeyBEQkdCVVNfRFNQUCwgMTMsIDAgfSwKKwl7IERC R0JVU19EU1BQLCAxOSwgMCB9LAorCXsgREJHQlVTX0RTUFAsIDE0LCAwIH0sCisJeyBEQkdCVVNf RFNQUCwgMTQsIDEgfSwKKwl7IERCR0JVU19EU1BQLCAxNCwgMyB9LAorCXsgREJHQlVTX0RTUFAs IDIwLCAwIH0sCisJeyBEQkdCVVNfRFNQUCwgMjAsIDEgfSwKKwl7IERCR0JVU19EU1BQLCAyMCwg MyB9LAorCisJLyogcHBiXzAgKi8KKwl7IERCR0JVU19EU1BQLCAzMSwgMCwgX2RwdV9kZWJ1Z19i dXNfcHBiMF9kdW1wIH0sCisJeyBEQkdCVVNfRFNQUCwgMzMsIDAsIF9kcHVfZGVidWdfYnVzX3Bw YjBfZHVtcCB9LAorCXsgREJHQlVTX0RTUFAsIDM1LCAwLCBfZHB1X2RlYnVnX2J1c19wcGIwX2R1 bXAgfSwKKwl7IERCR0JVU19EU1BQLCA0MiwgMCwgX2RwdV9kZWJ1Z19idXNfcHBiMF9kdW1wIH0s CisKKwkvKiBwcGJfMSAqLworCXsgREJHQlVTX0RTUFAsIDMyLCAwLCBfZHB1X2RlYnVnX2J1c19w cGIxX2R1bXAgfSwKKwl7IERCR0JVU19EU1BQLCAzNCwgMCwgX2RwdV9kZWJ1Z19idXNfcHBiMV9k dW1wIH0sCisJeyBEQkdCVVNfRFNQUCwgMzYsIDAsIF9kcHVfZGVidWdfYnVzX3BwYjFfZHVtcCB9 LAorCXsgREJHQlVTX0RTUFAsIDQzLCAwLCBfZHB1X2RlYnVnX2J1c19wcGIxX2R1bXAgfSwKKwor CS8qIGxtX2x1dCAqLworCXsgREJHQlVTX0RTUFAsIDEwOSwgMCB9LAorCXsgREJHQlVTX0RTUFAs IDEwNSwgMCB9LAorCXsgREJHQlVTX0RTUFAsIDEwMywgMCB9LAorCisJLyogdGVhci1jaGVjayAq LworCXsgREJHQlVTX1BFUklQSCwgNjMsIDAgfSwKKwl7IERCR0JVU19QRVJJUEgsIDY0LCAwIH0s CisJeyBEQkdCVVNfUEVSSVBILCA2NSwgMCB9LAorCXsgREJHQlVTX1BFUklQSCwgNzMsIDAgfSwK Kwl7IERCR0JVU19QRVJJUEgsIDc0LCAwIH0sCisKKwkvKiBjcm9zc2JhciAqLworCXsgREJHQlVT X0RTUFAsIDAsIDAsIF9kcHVfZGVidWdfYnVzX3hiYXJfZHVtcCB9LAorCisJLyogcm90YXRvciAq LworCXsgREJHQlVTX0RTUFAsIDksIDB9LAorCisJLyogYmxlbmQgKi8KKwkvKiBMTTAgKi8KKwl7 IERCR0JVU19EU1BQLCA2MywgMH0sCisJeyBEQkdCVVNfRFNQUCwgNjMsIDF9LAorCXsgREJHQlVT X0RTUFAsIDYzLCAyfSwKKwl7IERCR0JVU19EU1BQLCA2MywgM30sCisJeyBEQkdCVVNfRFNQUCwg NjMsIDR9LAorCXsgREJHQlVTX0RTUFAsIDYzLCA1fSwKKwl7IERCR0JVU19EU1BQLCA2MywgNn0s CisJeyBEQkdCVVNfRFNQUCwgNjMsIDcsIF9kcHVfZGVidWdfYnVzX2xtX2R1bXAgfSwKKworCXsg REJHQlVTX0RTUFAsIDY0LCAwfSwKKwl7IERCR0JVU19EU1BQLCA2NCwgMX0sCisJeyBEQkdCVVNf RFNQUCwgNjQsIDJ9LAorCXsgREJHQlVTX0RTUFAsIDY0LCAzfSwKKwl7IERCR0JVU19EU1BQLCA2 NCwgNH0sCisJeyBEQkdCVVNfRFNQUCwgNjQsIDV9LAorCXsgREJHQlVTX0RTUFAsIDY0LCA2fSwK Kwl7IERCR0JVU19EU1BQLCA2NCwgNywgX2RwdV9kZWJ1Z19idXNfbG1fZHVtcCB9LAorCisJeyBE QkdCVVNfRFNQUCwgNjUsIDB9LAorCXsgREJHQlVTX0RTUFAsIDY1LCAxfSwKKwl7IERCR0JVU19E U1BQLCA2NSwgMn0sCisJeyBEQkdCVVNfRFNQUCwgNjUsIDN9LAorCXsgREJHQlVTX0RTUFAsIDY1 LCA0fSwKKwl7IERCR0JVU19EU1BQLCA2NSwgNX0sCisJeyBEQkdCVVNfRFNQUCwgNjUsIDZ9LAor CXsgREJHQlVTX0RTUFAsIDY1LCA3LCBfZHB1X2RlYnVnX2J1c19sbV9kdW1wIH0sCisKKwl7IERC R0JVU19EU1BQLCA2NiwgMH0sCisJeyBEQkdCVVNfRFNQUCwgNjYsIDF9LAorCXsgREJHQlVTX0RT UFAsIDY2LCAyfSwKKwl7IERCR0JVU19EU1BQLCA2NiwgM30sCisJeyBEQkdCVVNfRFNQUCwgNjYs IDR9LAorCXsgREJHQlVTX0RTUFAsIDY2LCA1fSwKKwl7IERCR0JVU19EU1BQLCA2NiwgNn0sCisJ eyBEQkdCVVNfRFNQUCwgNjYsIDcsIF9kcHVfZGVidWdfYnVzX2xtX2R1bXAgfSwKKworCXsgREJH QlVTX0RTUFAsIDY3LCAwfSwKKwl7IERCR0JVU19EU1BQLCA2NywgMX0sCisJeyBEQkdCVVNfRFNQ UCwgNjcsIDJ9LAorCXsgREJHQlVTX0RTUFAsIDY3LCAzfSwKKwl7IERCR0JVU19EU1BQLCA2Nywg NH0sCisJeyBEQkdCVVNfRFNQUCwgNjcsIDV9LAorCXsgREJHQlVTX0RTUFAsIDY3LCA2fSwKKwl7 IERCR0JVU19EU1BQLCA2NywgNywgX2RwdV9kZWJ1Z19idXNfbG1fZHVtcCB9LAorCisJeyBEQkdC VVNfRFNQUCwgNjgsIDB9LAorCXsgREJHQlVTX0RTUFAsIDY4LCAxfSwKKwl7IERCR0JVU19EU1BQ LCA2OCwgMn0sCisJeyBEQkdCVVNfRFNQUCwgNjgsIDN9LAorCXsgREJHQlVTX0RTUFAsIDY4LCA0 fSwKKwl7IERCR0JVU19EU1BQLCA2OCwgNX0sCisJeyBEQkdCVVNfRFNQUCwgNjgsIDZ9LAorCXsg REJHQlVTX0RTUFAsIDY4LCA3LCBfZHB1X2RlYnVnX2J1c19sbV9kdW1wIH0sCisKKwl7IERCR0JV U19EU1BQLCA2OSwgMH0sCisJeyBEQkdCVVNfRFNQUCwgNjksIDF9LAorCXsgREJHQlVTX0RTUFAs IDY5LCAyfSwKKwl7IERCR0JVU19EU1BQLCA2OSwgM30sCisJeyBEQkdCVVNfRFNQUCwgNjksIDR9 LAorCXsgREJHQlVTX0RTUFAsIDY5LCA1fSwKKwl7IERCR0JVU19EU1BQLCA2OSwgNn0sCisJeyBE QkdCVVNfRFNQUCwgNjksIDcsIF9kcHVfZGVidWdfYnVzX2xtX2R1bXAgfSwKKworCS8qIExNMSAq LworCXsgREJHQlVTX0RTUFAsIDcwLCAwfSwKKwl7IERCR0JVU19EU1BQLCA3MCwgMX0sCisJeyBE QkdCVVNfRFNQUCwgNzAsIDJ9LAorCXsgREJHQlVTX0RTUFAsIDcwLCAzfSwKKwl7IERCR0JVU19E U1BQLCA3MCwgNH0sCisJeyBEQkdCVVNfRFNQUCwgNzAsIDV9LAorCXsgREJHQlVTX0RTUFAsIDcw LCA2fSwKKwl7IERCR0JVU19EU1BQLCA3MCwgNywgX2RwdV9kZWJ1Z19idXNfbG1fZHVtcCB9LAor CisJeyBEQkdCVVNfRFNQUCwgNzEsIDB9LAorCXsgREJHQlVTX0RTUFAsIDcxLCAxfSwKKwl7IERC R0JVU19EU1BQLCA3MSwgMn0sCisJeyBEQkdCVVNfRFNQUCwgNzEsIDN9LAorCXsgREJHQlVTX0RT UFAsIDcxLCA0fSwKKwl7IERCR0JVU19EU1BQLCA3MSwgNX0sCisJeyBEQkdCVVNfRFNQUCwgNzEs IDZ9LAorCXsgREJHQlVTX0RTUFAsIDcxLCA3LCBfZHB1X2RlYnVnX2J1c19sbV9kdW1wIH0sCisK Kwl7IERCR0JVU19EU1BQLCA3MiwgMH0sCisJeyBEQkdCVVNfRFNQUCwgNzIsIDF9LAorCXsgREJH QlVTX0RTUFAsIDcyLCAyfSwKKwl7IERCR0JVU19EU1BQLCA3MiwgM30sCisJeyBEQkdCVVNfRFNQ UCwgNzIsIDR9LAorCXsgREJHQlVTX0RTUFAsIDcyLCA1fSwKKwl7IERCR0JVU19EU1BQLCA3Miwg Nn0sCisJeyBEQkdCVVNfRFNQUCwgNzIsIDcsIF9kcHVfZGVidWdfYnVzX2xtX2R1bXAgfSwKKwor CXsgREJHQlVTX0RTUFAsIDczLCAwfSwKKwl7IERCR0JVU19EU1BQLCA3MywgMX0sCisJeyBEQkdC VVNfRFNQUCwgNzMsIDJ9LAorCXsgREJHQlVTX0RTUFAsIDczLCAzfSwKKwl7IERCR0JVU19EU1BQ LCA3MywgNH0sCisJeyBEQkdCVVNfRFNQUCwgNzMsIDV9LAorCXsgREJHQlVTX0RTUFAsIDczLCA2 fSwKKwl7IERCR0JVU19EU1BQLCA3MywgNywgX2RwdV9kZWJ1Z19idXNfbG1fZHVtcCB9LAorCisJ eyBEQkdCVVNfRFNQUCwgNzQsIDB9LAorCXsgREJHQlVTX0RTUFAsIDc0LCAxfSwKKwl7IERCR0JV U19EU1BQLCA3NCwgMn0sCisJeyBEQkdCVVNfRFNQUCwgNzQsIDN9LAorCXsgREJHQlVTX0RTUFAs IDc0LCA0fSwKKwl7IERCR0JVU19EU1BQLCA3NCwgNX0sCisJeyBEQkdCVVNfRFNQUCwgNzQsIDZ9 LAorCXsgREJHQlVTX0RTUFAsIDc0LCA3LCBfZHB1X2RlYnVnX2J1c19sbV9kdW1wIH0sCisKKwl7 IERCR0JVU19EU1BQLCA3NSwgMH0sCisJeyBEQkdCVVNfRFNQUCwgNzUsIDF9LAorCXsgREJHQlVT X0RTUFAsIDc1LCAyfSwKKwl7IERCR0JVU19EU1BQLCA3NSwgM30sCisJeyBEQkdCVVNfRFNQUCwg NzUsIDR9LAorCXsgREJHQlVTX0RTUFAsIDc1LCA1fSwKKwl7IERCR0JVU19EU1BQLCA3NSwgNn0s CisJeyBEQkdCVVNfRFNQUCwgNzUsIDcsIF9kcHVfZGVidWdfYnVzX2xtX2R1bXAgfSwKKworCXsg REJHQlVTX0RTUFAsIDc2LCAwfSwKKwl7IERCR0JVU19EU1BQLCA3NiwgMX0sCisJeyBEQkdCVVNf RFNQUCwgNzYsIDJ9LAorCXsgREJHQlVTX0RTUFAsIDc2LCAzfSwKKwl7IERCR0JVU19EU1BQLCA3 NiwgNH0sCisJeyBEQkdCVVNfRFNQUCwgNzYsIDV9LAorCXsgREJHQlVTX0RTUFAsIDc2LCA2fSwK Kwl7IERCR0JVU19EU1BQLCA3NiwgNywgX2RwdV9kZWJ1Z19idXNfbG1fZHVtcCB9LAorCisJLyog TE0yICovCisJeyBEQkdCVVNfRFNQUCwgNzcsIDB9LAorCXsgREJHQlVTX0RTUFAsIDc3LCAxfSwK Kwl7IERCR0JVU19EU1BQLCA3NywgMn0sCisJeyBEQkdCVVNfRFNQUCwgNzcsIDN9LAorCXsgREJH QlVTX0RTUFAsIDc3LCA0fSwKKwl7IERCR0JVU19EU1BQLCA3NywgNX0sCisJeyBEQkdCVVNfRFNQ UCwgNzcsIDZ9LAorCXsgREJHQlVTX0RTUFAsIDc3LCA3LCBfZHB1X2RlYnVnX2J1c19sbV9kdW1w IH0sCisKKwl7IERCR0JVU19EU1BQLCA3OCwgMH0sCisJeyBEQkdCVVNfRFNQUCwgNzgsIDF9LAor CXsgREJHQlVTX0RTUFAsIDc4LCAyfSwKKwl7IERCR0JVU19EU1BQLCA3OCwgM30sCisJeyBEQkdC VVNfRFNQUCwgNzgsIDR9LAorCXsgREJHQlVTX0RTUFAsIDc4LCA1fSwKKwl7IERCR0JVU19EU1BQ LCA3OCwgNn0sCisJeyBEQkdCVVNfRFNQUCwgNzgsIDcsIF9kcHVfZGVidWdfYnVzX2xtX2R1bXAg fSwKKworCXsgREJHQlVTX0RTUFAsIDc5LCAwfSwKKwl7IERCR0JVU19EU1BQLCA3OSwgMX0sCisJ eyBEQkdCVVNfRFNQUCwgNzksIDJ9LAorCXsgREJHQlVTX0RTUFAsIDc5LCAzfSwKKwl7IERCR0JV U19EU1BQLCA3OSwgNH0sCisJeyBEQkdCVVNfRFNQUCwgNzksIDV9LAorCXsgREJHQlVTX0RTUFAs IDc5LCA2fSwKKwl7IERCR0JVU19EU1BQLCA3OSwgNywgX2RwdV9kZWJ1Z19idXNfbG1fZHVtcCB9 LAorCisJeyBEQkdCVVNfRFNQUCwgODAsIDB9LAorCXsgREJHQlVTX0RTUFAsIDgwLCAxfSwKKwl7 IERCR0JVU19EU1BQLCA4MCwgMn0sCisJeyBEQkdCVVNfRFNQUCwgODAsIDN9LAorCXsgREJHQlVT X0RTUFAsIDgwLCA0fSwKKwl7IERCR0JVU19EU1BQLCA4MCwgNX0sCisJeyBEQkdCVVNfRFNQUCwg ODAsIDZ9LAorCXsgREJHQlVTX0RTUFAsIDgwLCA3LCBfZHB1X2RlYnVnX2J1c19sbV9kdW1wIH0s CisKKwl7IERCR0JVU19EU1BQLCA4MSwgMH0sCisJeyBEQkdCVVNfRFNQUCwgODEsIDF9LAorCXsg REJHQlVTX0RTUFAsIDgxLCAyfSwKKwl7IERCR0JVU19EU1BQLCA4MSwgM30sCisJeyBEQkdCVVNf RFNQUCwgODEsIDR9LAorCXsgREJHQlVTX0RTUFAsIDgxLCA1fSwKKwl7IERCR0JVU19EU1BQLCA4 MSwgNn0sCisJeyBEQkdCVVNfRFNQUCwgODEsIDcsIF9kcHVfZGVidWdfYnVzX2xtX2R1bXAgfSwK KworCXsgREJHQlVTX0RTUFAsIDgyLCAwfSwKKwl7IERCR0JVU19EU1BQLCA4MiwgMX0sCisJeyBE QkdCVVNfRFNQUCwgODIsIDJ9LAorCXsgREJHQlVTX0RTUFAsIDgyLCAzfSwKKwl7IERCR0JVU19E U1BQLCA4MiwgNH0sCisJeyBEQkdCVVNfRFNQUCwgODIsIDV9LAorCXsgREJHQlVTX0RTUFAsIDgy LCA2fSwKKwl7IERCR0JVU19EU1BQLCA4MiwgNywgX2RwdV9kZWJ1Z19idXNfbG1fZHVtcCB9LAor CisJeyBEQkdCVVNfRFNQUCwgODMsIDB9LAorCXsgREJHQlVTX0RTUFAsIDgzLCAxfSwKKwl7IERC R0JVU19EU1BQLCA4MywgMn0sCisJeyBEQkdCVVNfRFNQUCwgODMsIDN9LAorCXsgREJHQlVTX0RT UFAsIDgzLCA0fSwKKwl7IERCR0JVU19EU1BQLCA4MywgNX0sCisJeyBEQkdCVVNfRFNQUCwgODMs IDZ9LAorCXsgREJHQlVTX0RTUFAsIDgzLCA3LCBfZHB1X2RlYnVnX2J1c19sbV9kdW1wIH0sCisK KwkvKiBjc2MgKi8KKwl7IERCR0JVU19TU1BQMCwgNywgMH0sCisJeyBEQkdCVVNfU1NQUDAsIDcs IDF9LAorCXsgREJHQlVTX1NTUFAwLCAyNywgMH0sCisJeyBEQkdCVVNfU1NQUDAsIDI3LCAxfSwK Kwl7IERCR0JVU19TU1BQMSwgNywgMH0sCisJeyBEQkdCVVNfU1NQUDEsIDcsIDF9LAorCXsgREJH QlVTX1NTUFAxLCAyNywgMH0sCisJeyBEQkdCVVNfU1NQUDEsIDI3LCAxfSwKKworCS8qIHBjYyAq LworCXsgREJHQlVTX1NTUFAwLCAzLCAgM30sCisJeyBEQkdCVVNfU1NQUDAsIDIzLCAzfSwKKwl7 IERCR0JVU19TU1BQMCwgMzMsIDN9LAorCXsgREJHQlVTX1NTUFAwLCA0MywgM30sCisJeyBEQkdC VVNfU1NQUDEsIDMsICAzfSwKKwl7IERCR0JVU19TU1BQMSwgMjMsIDN9LAorCXsgREJHQlVTX1NT UFAxLCAzMywgM30sCisJeyBEQkdCVVNfU1NQUDEsIDQzLCAzfSwKKworCS8qIHNwYSAqLworCXsg REJHQlVTX1NTUFAwLCA4LCAgMH0sCisJeyBEQkdCVVNfU1NQUDAsIDI4LCAwfSwKKwl7IERCR0JV U19TU1BQMSwgOCwgIDB9LAorCXsgREJHQlVTX1NTUFAxLCAyOCwgMH0sCisJeyBEQkdCVVNfRFNQ UCwgMTMsIDB9LAorCXsgREJHQlVTX0RTUFAsIDE5LCAwfSwKKworCS8qIGlnYyAqLworCXsgREJH QlVTX1NTUFAwLCA5LCAgMH0sCisJeyBEQkdCVVNfU1NQUDAsIDksICAxfSwKKwl7IERCR0JVU19T U1BQMCwgOSwgIDN9LAorCXsgREJHQlVTX1NTUFAwLCAyOSwgMH0sCisJeyBEQkdCVVNfU1NQUDAs IDI5LCAxfSwKKwl7IERCR0JVU19TU1BQMCwgMjksIDN9LAorCXsgREJHQlVTX1NTUFAwLCAxNywg MH0sCisJeyBEQkdCVVNfU1NQUDAsIDE3LCAxfSwKKwl7IERCR0JVU19TU1BQMCwgMTcsIDN9LAor CXsgREJHQlVTX1NTUFAwLCAzNywgMH0sCisJeyBEQkdCVVNfU1NQUDAsIDM3LCAxfSwKKwl7IERC R0JVU19TU1BQMCwgMzcsIDN9LAorCXsgREJHQlVTX1NTUFAwLCA0NiwgMH0sCisJeyBEQkdCVVNf U1NQUDAsIDQ2LCAxfSwKKwl7IERCR0JVU19TU1BQMCwgNDYsIDN9LAorCisJeyBEQkdCVVNfU1NQ UDEsIDksICAwfSwKKwl7IERCR0JVU19TU1BQMSwgOSwgIDF9LAorCXsgREJHQlVTX1NTUFAxLCA5 LCAgM30sCisJeyBEQkdCVVNfU1NQUDEsIDI5LCAwfSwKKwl7IERCR0JVU19TU1BQMSwgMjksIDF9 LAorCXsgREJHQlVTX1NTUFAxLCAyOSwgM30sCisJeyBEQkdCVVNfU1NQUDEsIDE3LCAwfSwKKwl7 IERCR0JVU19TU1BQMSwgMTcsIDF9LAorCXsgREJHQlVTX1NTUFAxLCAxNywgM30sCisJeyBEQkdC VVNfU1NQUDEsIDM3LCAwfSwKKwl7IERCR0JVU19TU1BQMSwgMzcsIDF9LAorCXsgREJHQlVTX1NT UFAxLCAzNywgM30sCisJeyBEQkdCVVNfU1NQUDEsIDQ2LCAwfSwKKwl7IERCR0JVU19TU1BQMSwg NDYsIDF9LAorCXsgREJHQlVTX1NTUFAxLCA0NiwgM30sCisKKwl7IERCR0JVU19EU1BQLCAxNCwg MH0sCisJeyBEQkdCVVNfRFNQUCwgMTQsIDF9LAorCXsgREJHQlVTX0RTUFAsIDE0LCAzfSwKKwl7 IERCR0JVU19EU1BQLCAyMCwgMH0sCisJeyBEQkdCVVNfRFNQUCwgMjAsIDF9LAorCXsgREJHQlVT X0RTUFAsIDIwLCAzfSwKKworCXsgREJHQlVTX1BFUklQSCwgNjAsIDB9LAorfTsKKworc3RhdGlj IHN0cnVjdCBkcHVfZGVidWdfYnVzX2VudHJ5IGRiZ19idXNfZHB1X3NkbTg0NVtdID0geworCisJ LyogVW5wYWNrIDAgc3NwcCAwKi8KKwl7IERCR0JVU19TU1BQMCwgNTAsIDIgfSwKKwl7IERCR0JV U19TU1BQMCwgNjAsIDIgfSwKKwl7IERCR0JVU19TU1BQMCwgNzAsIDIgfSwKKworCS8qIFVwYWNr IDAgc3NwcCAxKi8KKwl7IERCR0JVU19TU1BQMSwgNTAsIDIgfSwKKwl7IERCR0JVU19TU1BQMSwg NjAsIDIgfSwKKwl7IERCR0JVU19TU1BQMSwgNzAsIDIgfSwKKworCS8qIHNjaGVkdWxlciAqLwor CXsgREJHQlVTX0RTUFAsIDEzMCwgMCB9LAorCXsgREJHQlVTX0RTUFAsIDEzMCwgMSB9LAorCXsg REJHQlVTX0RTUFAsIDEzMCwgMiB9LAorCXsgREJHQlVTX0RTUFAsIDEzMCwgMyB9LAorCXsgREJH QlVTX0RTUFAsIDEzMCwgNCB9LAorCXsgREJHQlVTX0RTUFAsIDEzMCwgNSB9LAorCisJLyogcXNl ZWQgKi8KKwl7IERCR0JVU19TU1BQMCwgNiwgMH0sCisJeyBEQkdCVVNfU1NQUDAsIDYsIDF9LAor CXsgREJHQlVTX1NTUFAwLCAyNiwgMH0sCisJeyBEQkdCVVNfU1NQUDAsIDI2LCAxfSwKKwl7IERC R0JVU19TU1BQMSwgNiwgMH0sCisJeyBEQkdCVVNfU1NQUDEsIDYsIDF9LAorCXsgREJHQlVTX1NT UFAxLCAyNiwgMH0sCisJeyBEQkdCVVNfU1NQUDEsIDI2LCAxfSwKKworCS8qIHNjYWxlICovCisJ eyBEQkdCVVNfU1NQUDAsIDE2LCAwfSwKKwl7IERCR0JVU19TU1BQMCwgMTYsIDF9LAorCXsgREJH QlVTX1NTUFAwLCAzNiwgMH0sCisJeyBEQkdCVVNfU1NQUDAsIDM2LCAxfSwKKwl7IERCR0JVU19T U1BQMSwgMTYsIDB9LAorCXsgREJHQlVTX1NTUFAxLCAxNiwgMX0sCisJeyBEQkdCVVNfU1NQUDEs IDM2LCAwfSwKKwl7IERCR0JVU19TU1BQMSwgMzYsIDF9LAorCisJLyogZmV0Y2ggc3NwcDAgKi8K KworCS8qIHZpZyAwICovCisJeyBEQkdCVVNfU1NQUDAsIDAsIDAgfSwKKwl7IERCR0JVU19TU1BQ MCwgMCwgMSB9LAorCXsgREJHQlVTX1NTUFAwLCAwLCAyIH0sCisJeyBEQkdCVVNfU1NQUDAsIDAs IDMgfSwKKwl7IERCR0JVU19TU1BQMCwgMCwgNCB9LAorCXsgREJHQlVTX1NTUFAwLCAwLCA1IH0s CisJeyBEQkdCVVNfU1NQUDAsIDAsIDYgfSwKKwl7IERCR0JVU19TU1BQMCwgMCwgNyB9LAorCisJ eyBEQkdCVVNfU1NQUDAsIDEsIDAgfSwKKwl7IERCR0JVU19TU1BQMCwgMSwgMSB9LAorCXsgREJH QlVTX1NTUFAwLCAxLCAyIH0sCisJeyBEQkdCVVNfU1NQUDAsIDEsIDMgfSwKKwl7IERCR0JVU19T U1BQMCwgMSwgNCB9LAorCXsgREJHQlVTX1NTUFAwLCAxLCA1IH0sCisJeyBEQkdCVVNfU1NQUDAs IDEsIDYgfSwKKwl7IERCR0JVU19TU1BQMCwgMSwgNyB9LAorCisJeyBEQkdCVVNfU1NQUDAsIDIs IDAgfSwKKwl7IERCR0JVU19TU1BQMCwgMiwgMSB9LAorCXsgREJHQlVTX1NTUFAwLCAyLCAyIH0s CisJeyBEQkdCVVNfU1NQUDAsIDIsIDMgfSwKKwl7IERCR0JVU19TU1BQMCwgMiwgNCB9LAorCXsg REJHQlVTX1NTUFAwLCAyLCA1IH0sCisJeyBEQkdCVVNfU1NQUDAsIDIsIDYgfSwKKwl7IERCR0JV U19TU1BQMCwgMiwgNyB9LAorCisJeyBEQkdCVVNfU1NQUDAsIDQsIDAgfSwKKwl7IERCR0JVU19T U1BQMCwgNCwgMSB9LAorCXsgREJHQlVTX1NTUFAwLCA0LCAyIH0sCisJeyBEQkdCVVNfU1NQUDAs IDQsIDMgfSwKKwl7IERCR0JVU19TU1BQMCwgNCwgNCB9LAorCXsgREJHQlVTX1NTUFAwLCA0LCA1 IH0sCisJeyBEQkdCVVNfU1NQUDAsIDQsIDYgfSwKKwl7IERCR0JVU19TU1BQMCwgNCwgNyB9LAor CisJeyBEQkdCVVNfU1NQUDAsIDUsIDAgfSwKKwl7IERCR0JVU19TU1BQMCwgNSwgMSB9LAorCXsg REJHQlVTX1NTUFAwLCA1LCAyIH0sCisJeyBEQkdCVVNfU1NQUDAsIDUsIDMgfSwKKwl7IERCR0JV U19TU1BQMCwgNSwgNCB9LAorCXsgREJHQlVTX1NTUFAwLCA1LCA1IH0sCisJeyBEQkdCVVNfU1NQ UDAsIDUsIDYgfSwKKwl7IERCR0JVU19TU1BQMCwgNSwgNyB9LAorCisJLyogdmlnIDIgKi8KKwl7 IERCR0JVU19TU1BQMCwgMjAsIDAgfSwKKwl7IERCR0JVU19TU1BQMCwgMjAsIDEgfSwKKwl7IERC R0JVU19TU1BQMCwgMjAsIDIgfSwKKwl7IERCR0JVU19TU1BQMCwgMjAsIDMgfSwKKwl7IERCR0JV U19TU1BQMCwgMjAsIDQgfSwKKwl7IERCR0JVU19TU1BQMCwgMjAsIDUgfSwKKwl7IERCR0JVU19T U1BQMCwgMjAsIDYgfSwKKwl7IERCR0JVU19TU1BQMCwgMjAsIDcgfSwKKworCXsgREJHQlVTX1NT UFAwLCAyMSwgMCB9LAorCXsgREJHQlVTX1NTUFAwLCAyMSwgMSB9LAorCXsgREJHQlVTX1NTUFAw LCAyMSwgMiB9LAorCXsgREJHQlVTX1NTUFAwLCAyMSwgMyB9LAorCXsgREJHQlVTX1NTUFAwLCAy MSwgNCB9LAorCXsgREJHQlVTX1NTUFAwLCAyMSwgNSB9LAorCXsgREJHQlVTX1NTUFAwLCAyMSwg NiB9LAorCXsgREJHQlVTX1NTUFAwLCAyMSwgNyB9LAorCisJeyBEQkdCVVNfU1NQUDAsIDIyLCAw IH0sCisJeyBEQkdCVVNfU1NQUDAsIDIyLCAxIH0sCisJeyBEQkdCVVNfU1NQUDAsIDIyLCAyIH0s CisJeyBEQkdCVVNfU1NQUDAsIDIyLCAzIH0sCisJeyBEQkdCVVNfU1NQUDAsIDIyLCA0IH0sCisJ eyBEQkdCVVNfU1NQUDAsIDIyLCA1IH0sCisJeyBEQkdCVVNfU1NQUDAsIDIyLCA2IH0sCisJeyBE QkdCVVNfU1NQUDAsIDIyLCA3IH0sCisKKwl7IERCR0JVU19TU1BQMCwgMjQsIDAgfSwKKwl7IERC R0JVU19TU1BQMCwgMjQsIDEgfSwKKwl7IERCR0JVU19TU1BQMCwgMjQsIDIgfSwKKwl7IERCR0JV U19TU1BQMCwgMjQsIDMgfSwKKwl7IERCR0JVU19TU1BQMCwgMjQsIDQgfSwKKwl7IERCR0JVU19T U1BQMCwgMjQsIDUgfSwKKwl7IERCR0JVU19TU1BQMCwgMjQsIDYgfSwKKwl7IERCR0JVU19TU1BQ MCwgMjQsIDcgfSwKKworCXsgREJHQlVTX1NTUFAwLCAyNSwgMCB9LAorCXsgREJHQlVTX1NTUFAw LCAyNSwgMSB9LAorCXsgREJHQlVTX1NTUFAwLCAyNSwgMiB9LAorCXsgREJHQlVTX1NTUFAwLCAy NSwgMyB9LAorCXsgREJHQlVTX1NTUFAwLCAyNSwgNCB9LAorCXsgREJHQlVTX1NTUFAwLCAyNSwg NSB9LAorCXsgREJHQlVTX1NTUFAwLCAyNSwgNiB9LAorCXsgREJHQlVTX1NTUFAwLCAyNSwgNyB9 LAorCisJLyogZG1hIDIgKi8KKwl7IERCR0JVU19TU1BQMCwgMzAsIDAgfSwKKwl7IERCR0JVU19T U1BQMCwgMzAsIDEgfSwKKwl7IERCR0JVU19TU1BQMCwgMzAsIDIgfSwKKwl7IERCR0JVU19TU1BQ MCwgMzAsIDMgfSwKKwl7IERCR0JVU19TU1BQMCwgMzAsIDQgfSwKKwl7IERCR0JVU19TU1BQMCwg MzAsIDUgfSwKKwl7IERCR0JVU19TU1BQMCwgMzAsIDYgfSwKKwl7IERCR0JVU19TU1BQMCwgMzAs IDcgfSwKKworCXsgREJHQlVTX1NTUFAwLCAzMSwgMCB9LAorCXsgREJHQlVTX1NTUFAwLCAzMSwg MSB9LAorCXsgREJHQlVTX1NTUFAwLCAzMSwgMiB9LAorCXsgREJHQlVTX1NTUFAwLCAzMSwgMyB9 LAorCXsgREJHQlVTX1NTUFAwLCAzMSwgNCB9LAorCXsgREJHQlVTX1NTUFAwLCAzMSwgNSB9LAor CXsgREJHQlVTX1NTUFAwLCAzMSwgNiB9LAorCXsgREJHQlVTX1NTUFAwLCAzMSwgNyB9LAorCisJ eyBEQkdCVVNfU1NQUDAsIDMyLCAwIH0sCisJeyBEQkdCVVNfU1NQUDAsIDMyLCAxIH0sCisJeyBE QkdCVVNfU1NQUDAsIDMyLCAyIH0sCisJeyBEQkdCVVNfU1NQUDAsIDMyLCAzIH0sCisJeyBEQkdC VVNfU1NQUDAsIDMyLCA0IH0sCisJeyBEQkdCVVNfU1NQUDAsIDMyLCA1IH0sCisJeyBEQkdCVVNf U1NQUDAsIDMyLCA2IH0sCisJeyBEQkdCVVNfU1NQUDAsIDMyLCA3IH0sCisKKwl7IERCR0JVU19T U1BQMCwgMzMsIDAgfSwKKwl7IERCR0JVU19TU1BQMCwgMzMsIDEgfSwKKwl7IERCR0JVU19TU1BQ MCwgMzMsIDIgfSwKKwl7IERCR0JVU19TU1BQMCwgMzMsIDMgfSwKKwl7IERCR0JVU19TU1BQMCwg MzMsIDQgfSwKKwl7IERCR0JVU19TU1BQMCwgMzMsIDUgfSwKKwl7IERCR0JVU19TU1BQMCwgMzMs IDYgfSwKKwl7IERCR0JVU19TU1BQMCwgMzMsIDcgfSwKKworCXsgREJHQlVTX1NTUFAwLCAzNCwg MCB9LAorCXsgREJHQlVTX1NTUFAwLCAzNCwgMSB9LAorCXsgREJHQlVTX1NTUFAwLCAzNCwgMiB9 LAorCXsgREJHQlVTX1NTUFAwLCAzNCwgMyB9LAorCXsgREJHQlVTX1NTUFAwLCAzNCwgNCB9LAor CXsgREJHQlVTX1NTUFAwLCAzNCwgNSB9LAorCXsgREJHQlVTX1NTUFAwLCAzNCwgNiB9LAorCXsg REJHQlVTX1NTUFAwLCAzNCwgNyB9LAorCisJeyBEQkdCVVNfU1NQUDAsIDM1LCAwIH0sCisJeyBE QkdCVVNfU1NQUDAsIDM1LCAxIH0sCisJeyBEQkdCVVNfU1NQUDAsIDM1LCAyIH0sCisJeyBEQkdC VVNfU1NQUDAsIDM1LCAzIH0sCisKKwkvKiBkbWEgMCAqLworCXsgREJHQlVTX1NTUFAwLCA0MCwg MCB9LAorCXsgREJHQlVTX1NTUFAwLCA0MCwgMSB9LAorCXsgREJHQlVTX1NTUFAwLCA0MCwgMiB9 LAorCXsgREJHQlVTX1NTUFAwLCA0MCwgMyB9LAorCXsgREJHQlVTX1NTUFAwLCA0MCwgNCB9LAor CXsgREJHQlVTX1NTUFAwLCA0MCwgNSB9LAorCXsgREJHQlVTX1NTUFAwLCA0MCwgNiB9LAorCXsg REJHQlVTX1NTUFAwLCA0MCwgNyB9LAorCisJeyBEQkdCVVNfU1NQUDAsIDQxLCAwIH0sCisJeyBE QkdCVVNfU1NQUDAsIDQxLCAxIH0sCisJeyBEQkdCVVNfU1NQUDAsIDQxLCAyIH0sCisJeyBEQkdC VVNfU1NQUDAsIDQxLCAzIH0sCisJeyBEQkdCVVNfU1NQUDAsIDQxLCA0IH0sCisJeyBEQkdCVVNf U1NQUDAsIDQxLCA1IH0sCisJeyBEQkdCVVNfU1NQUDAsIDQxLCA2IH0sCisJeyBEQkdCVVNfU1NQ UDAsIDQxLCA3IH0sCisKKwl7IERCR0JVU19TU1BQMCwgNDIsIDAgfSwKKwl7IERCR0JVU19TU1BQ MCwgNDIsIDEgfSwKKwl7IERCR0JVU19TU1BQMCwgNDIsIDIgfSwKKwl7IERCR0JVU19TU1BQMCwg NDIsIDMgfSwKKwl7IERCR0JVU19TU1BQMCwgNDIsIDQgfSwKKwl7IERCR0JVU19TU1BQMCwgNDIs IDUgfSwKKwl7IERCR0JVU19TU1BQMCwgNDIsIDYgfSwKKwl7IERCR0JVU19TU1BQMCwgNDIsIDcg fSwKKworCXsgREJHQlVTX1NTUFAwLCA0NCwgMCB9LAorCXsgREJHQlVTX1NTUFAwLCA0NCwgMSB9 LAorCXsgREJHQlVTX1NTUFAwLCA0NCwgMiB9LAorCXsgREJHQlVTX1NTUFAwLCA0NCwgMyB9LAor CXsgREJHQlVTX1NTUFAwLCA0NCwgNCB9LAorCXsgREJHQlVTX1NTUFAwLCA0NCwgNSB9LAorCXsg REJHQlVTX1NTUFAwLCA0NCwgNiB9LAorCXsgREJHQlVTX1NTUFAwLCA0NCwgNyB9LAorCisJeyBE QkdCVVNfU1NQUDAsIDQ1LCAwIH0sCisJeyBEQkdCVVNfU1NQUDAsIDQ1LCAxIH0sCisJeyBEQkdC VVNfU1NQUDAsIDQ1LCAyIH0sCisJeyBEQkdCVVNfU1NQUDAsIDQ1LCAzIH0sCisJeyBEQkdCVVNf U1NQUDAsIDQ1LCA0IH0sCisJeyBEQkdCVVNfU1NQUDAsIDQ1LCA1IH0sCisJeyBEQkdCVVNfU1NQ UDAsIDQ1LCA2IH0sCisJeyBEQkdCVVNfU1NQUDAsIDQ1LCA3IH0sCisKKwkvKiBmZXRjaCBzc3Bw MSAqLworCS8qIHZpZyAxICovCisJeyBEQkdCVVNfU1NQUDEsIDAsIDAgfSwKKwl7IERCR0JVU19T U1BQMSwgMCwgMSB9LAorCXsgREJHQlVTX1NTUFAxLCAwLCAyIH0sCisJeyBEQkdCVVNfU1NQUDEs IDAsIDMgfSwKKwl7IERCR0JVU19TU1BQMSwgMCwgNCB9LAorCXsgREJHQlVTX1NTUFAxLCAwLCA1 IH0sCisJeyBEQkdCVVNfU1NQUDEsIDAsIDYgfSwKKwl7IERCR0JVU19TU1BQMSwgMCwgNyB9LAor CisJeyBEQkdCVVNfU1NQUDEsIDEsIDAgfSwKKwl7IERCR0JVU19TU1BQMSwgMSwgMSB9LAorCXsg REJHQlVTX1NTUFAxLCAxLCAyIH0sCisJeyBEQkdCVVNfU1NQUDEsIDEsIDMgfSwKKwl7IERCR0JV U19TU1BQMSwgMSwgNCB9LAorCXsgREJHQlVTX1NTUFAxLCAxLCA1IH0sCisJeyBEQkdCVVNfU1NQ UDEsIDEsIDYgfSwKKwl7IERCR0JVU19TU1BQMSwgMSwgNyB9LAorCisJeyBEQkdCVVNfU1NQUDEs IDIsIDAgfSwKKwl7IERCR0JVU19TU1BQMSwgMiwgMSB9LAorCXsgREJHQlVTX1NTUFAxLCAyLCAy IH0sCisJeyBEQkdCVVNfU1NQUDEsIDIsIDMgfSwKKwl7IERCR0JVU19TU1BQMSwgMiwgNCB9LAor CXsgREJHQlVTX1NTUFAxLCAyLCA1IH0sCisJeyBEQkdCVVNfU1NQUDEsIDIsIDYgfSwKKwl7IERC R0JVU19TU1BQMSwgMiwgNyB9LAorCisJeyBEQkdCVVNfU1NQUDEsIDQsIDAgfSwKKwl7IERCR0JV U19TU1BQMSwgNCwgMSB9LAorCXsgREJHQlVTX1NTUFAxLCA0LCAyIH0sCisJeyBEQkdCVVNfU1NQ UDEsIDQsIDMgfSwKKwl7IERCR0JVU19TU1BQMSwgNCwgNCB9LAorCXsgREJHQlVTX1NTUFAxLCA0 LCA1IH0sCisJeyBEQkdCVVNfU1NQUDEsIDQsIDYgfSwKKwl7IERCR0JVU19TU1BQMSwgNCwgNyB9 LAorCisJeyBEQkdCVVNfU1NQUDEsIDUsIDAgfSwKKwl7IERCR0JVU19TU1BQMSwgNSwgMSB9LAor CXsgREJHQlVTX1NTUFAxLCA1LCAyIH0sCisJeyBEQkdCVVNfU1NQUDEsIDUsIDMgfSwKKwl7IERC R0JVU19TU1BQMSwgNSwgNCB9LAorCXsgREJHQlVTX1NTUFAxLCA1LCA1IH0sCisJeyBEQkdCVVNf U1NQUDEsIDUsIDYgfSwKKwl7IERCR0JVU19TU1BQMSwgNSwgNyB9LAorCisJLyogdmlnIDMgKi8K Kwl7IERCR0JVU19TU1BQMSwgMjAsIDAgfSwKKwl7IERCR0JVU19TU1BQMSwgMjAsIDEgfSwKKwl7 IERCR0JVU19TU1BQMSwgMjAsIDIgfSwKKwl7IERCR0JVU19TU1BQMSwgMjAsIDMgfSwKKwl7IERC R0JVU19TU1BQMSwgMjAsIDQgfSwKKwl7IERCR0JVU19TU1BQMSwgMjAsIDUgfSwKKwl7IERCR0JV U19TU1BQMSwgMjAsIDYgfSwKKwl7IERCR0JVU19TU1BQMSwgMjAsIDcgfSwKKworCXsgREJHQlVT X1NTUFAxLCAyMSwgMCB9LAorCXsgREJHQlVTX1NTUFAxLCAyMSwgMSB9LAorCXsgREJHQlVTX1NT UFAxLCAyMSwgMiB9LAorCXsgREJHQlVTX1NTUFAxLCAyMSwgMyB9LAorCXsgREJHQlVTX1NTUFAx LCAyMSwgNCB9LAorCXsgREJHQlVTX1NTUFAxLCAyMSwgNSB9LAorCXsgREJHQlVTX1NTUFAxLCAy MSwgNiB9LAorCXsgREJHQlVTX1NTUFAxLCAyMSwgNyB9LAorCisJeyBEQkdCVVNfU1NQUDEsIDIy LCAwIH0sCisJeyBEQkdCVVNfU1NQUDEsIDIyLCAxIH0sCisJeyBEQkdCVVNfU1NQUDEsIDIyLCAy IH0sCisJeyBEQkdCVVNfU1NQUDEsIDIyLCAzIH0sCisJeyBEQkdCVVNfU1NQUDEsIDIyLCA0IH0s CisJeyBEQkdCVVNfU1NQUDEsIDIyLCA1IH0sCisJeyBEQkdCVVNfU1NQUDEsIDIyLCA2IH0sCisJ eyBEQkdCVVNfU1NQUDEsIDIyLCA3IH0sCisKKwl7IERCR0JVU19TU1BQMSwgMjQsIDAgfSwKKwl7 IERCR0JVU19TU1BQMSwgMjQsIDEgfSwKKwl7IERCR0JVU19TU1BQMSwgMjQsIDIgfSwKKwl7IERC R0JVU19TU1BQMSwgMjQsIDMgfSwKKwl7IERCR0JVU19TU1BQMSwgMjQsIDQgfSwKKwl7IERCR0JV U19TU1BQMSwgMjQsIDUgfSwKKwl7IERCR0JVU19TU1BQMSwgMjQsIDYgfSwKKwl7IERCR0JVU19T U1BQMSwgMjQsIDcgfSwKKworCXsgREJHQlVTX1NTUFAxLCAyNSwgMCB9LAorCXsgREJHQlVTX1NT UFAxLCAyNSwgMSB9LAorCXsgREJHQlVTX1NTUFAxLCAyNSwgMiB9LAorCXsgREJHQlVTX1NTUFAx LCAyNSwgMyB9LAorCXsgREJHQlVTX1NTUFAxLCAyNSwgNCB9LAorCXsgREJHQlVTX1NTUFAxLCAy NSwgNSB9LAorCXsgREJHQlVTX1NTUFAxLCAyNSwgNiB9LAorCXsgREJHQlVTX1NTUFAxLCAyNSwg NyB9LAorCisJLyogZG1hIDMgKi8KKwl7IERCR0JVU19TU1BQMSwgMzAsIDAgfSwKKwl7IERCR0JV U19TU1BQMSwgMzAsIDEgfSwKKwl7IERCR0JVU19TU1BQMSwgMzAsIDIgfSwKKwl7IERCR0JVU19T U1BQMSwgMzAsIDMgfSwKKwl7IERCR0JVU19TU1BQMSwgMzAsIDQgfSwKKwl7IERCR0JVU19TU1BQ MSwgMzAsIDUgfSwKKwl7IERCR0JVU19TU1BQMSwgMzAsIDYgfSwKKwl7IERCR0JVU19TU1BQMSwg MzAsIDcgfSwKKworCXsgREJHQlVTX1NTUFAxLCAzMSwgMCB9LAorCXsgREJHQlVTX1NTUFAxLCAz MSwgMSB9LAorCXsgREJHQlVTX1NTUFAxLCAzMSwgMiB9LAorCXsgREJHQlVTX1NTUFAxLCAzMSwg MyB9LAorCXsgREJHQlVTX1NTUFAxLCAzMSwgNCB9LAorCXsgREJHQlVTX1NTUFAxLCAzMSwgNSB9 LAorCXsgREJHQlVTX1NTUFAxLCAzMSwgNiB9LAorCXsgREJHQlVTX1NTUFAxLCAzMSwgNyB9LAor CisJeyBEQkdCVVNfU1NQUDEsIDMyLCAwIH0sCisJeyBEQkdCVVNfU1NQUDEsIDMyLCAxIH0sCisJ eyBEQkdCVVNfU1NQUDEsIDMyLCAyIH0sCisJeyBEQkdCVVNfU1NQUDEsIDMyLCAzIH0sCisJeyBE QkdCVVNfU1NQUDEsIDMyLCA0IH0sCisJeyBEQkdCVVNfU1NQUDEsIDMyLCA1IH0sCisJeyBEQkdC VVNfU1NQUDEsIDMyLCA2IH0sCisJeyBEQkdCVVNfU1NQUDEsIDMyLCA3IH0sCisKKwl7IERCR0JV U19TU1BQMSwgMzMsIDAgfSwKKwl7IERCR0JVU19TU1BQMSwgMzMsIDEgfSwKKwl7IERCR0JVU19T U1BQMSwgMzMsIDIgfSwKKwl7IERCR0JVU19TU1BQMSwgMzMsIDMgfSwKKwl7IERCR0JVU19TU1BQ MSwgMzMsIDQgfSwKKwl7IERCR0JVU19TU1BQMSwgMzMsIDUgfSwKKwl7IERCR0JVU19TU1BQMSwg MzMsIDYgfSwKKwl7IERCR0JVU19TU1BQMSwgMzMsIDcgfSwKKworCXsgREJHQlVTX1NTUFAxLCAz NCwgMCB9LAorCXsgREJHQlVTX1NTUFAxLCAzNCwgMSB9LAorCXsgREJHQlVTX1NTUFAxLCAzNCwg MiB9LAorCXsgREJHQlVTX1NTUFAxLCAzNCwgMyB9LAorCXsgREJHQlVTX1NTUFAxLCAzNCwgNCB9 LAorCXsgREJHQlVTX1NTUFAxLCAzNCwgNSB9LAorCXsgREJHQlVTX1NTUFAxLCAzNCwgNiB9LAor CXsgREJHQlVTX1NTUFAxLCAzNCwgNyB9LAorCisJeyBEQkdCVVNfU1NQUDEsIDM1LCAwIH0sCisJ eyBEQkdCVVNfU1NQUDEsIDM1LCAxIH0sCisJeyBEQkdCVVNfU1NQUDEsIDM1LCAyIH0sCisKKwkv KiBkbWEgMSAqLworCXsgREJHQlVTX1NTUFAxLCA0MCwgMCB9LAorCXsgREJHQlVTX1NTUFAxLCA0 MCwgMSB9LAorCXsgREJHQlVTX1NTUFAxLCA0MCwgMiB9LAorCXsgREJHQlVTX1NTUFAxLCA0MCwg MyB9LAorCXsgREJHQlVTX1NTUFAxLCA0MCwgNCB9LAorCXsgREJHQlVTX1NTUFAxLCA0MCwgNSB9 LAorCXsgREJHQlVTX1NTUFAxLCA0MCwgNiB9LAorCXsgREJHQlVTX1NTUFAxLCA0MCwgNyB9LAor CisJeyBEQkdCVVNfU1NQUDEsIDQxLCAwIH0sCisJeyBEQkdCVVNfU1NQUDEsIDQxLCAxIH0sCisJ eyBEQkdCVVNfU1NQUDEsIDQxLCAyIH0sCisJeyBEQkdCVVNfU1NQUDEsIDQxLCAzIH0sCisJeyBE QkdCVVNfU1NQUDEsIDQxLCA0IH0sCisJeyBEQkdCVVNfU1NQUDEsIDQxLCA1IH0sCisJeyBEQkdC VVNfU1NQUDEsIDQxLCA2IH0sCisJeyBEQkdCVVNfU1NQUDEsIDQxLCA3IH0sCisKKwl7IERCR0JV U19TU1BQMSwgNDIsIDAgfSwKKwl7IERCR0JVU19TU1BQMSwgNDIsIDEgfSwKKwl7IERCR0JVU19T U1BQMSwgNDIsIDIgfSwKKwl7IERCR0JVU19TU1BQMSwgNDIsIDMgfSwKKwl7IERCR0JVU19TU1BQ MSwgNDIsIDQgfSwKKwl7IERCR0JVU19TU1BQMSwgNDIsIDUgfSwKKwl7IERCR0JVU19TU1BQMSwg NDIsIDYgfSwKKwl7IERCR0JVU19TU1BQMSwgNDIsIDcgfSwKKworCXsgREJHQlVTX1NTUFAxLCA0 NCwgMCB9LAorCXsgREJHQlVTX1NTUFAxLCA0NCwgMSB9LAorCXsgREJHQlVTX1NTUFAxLCA0NCwg MiB9LAorCXsgREJHQlVTX1NTUFAxLCA0NCwgMyB9LAorCXsgREJHQlVTX1NTUFAxLCA0NCwgNCB9 LAorCXsgREJHQlVTX1NTUFAxLCA0NCwgNSB9LAorCXsgREJHQlVTX1NTUFAxLCA0NCwgNiB9LAor CXsgREJHQlVTX1NTUFAxLCA0NCwgNyB9LAorCisJeyBEQkdCVVNfU1NQUDEsIDQ1LCAwIH0sCisJ eyBEQkdCVVNfU1NQUDEsIDQ1LCAxIH0sCisJeyBEQkdCVVNfU1NQUDEsIDQ1LCAyIH0sCisJeyBE QkdCVVNfU1NQUDEsIDQ1LCAzIH0sCisJeyBEQkdCVVNfU1NQUDEsIDQ1LCA0IH0sCisJeyBEQkdC VVNfU1NQUDEsIDQ1LCA1IH0sCisJeyBEQkdCVVNfU1NQUDEsIDQ1LCA2IH0sCisJeyBEQkdCVVNf U1NQUDEsIDQ1LCA3IH0sCisKKwkvKiBkc3BwICovCisJeyBEQkdCVVNfRFNQUCwgMTMsIDAgfSwK Kwl7IERCR0JVU19EU1BQLCAxOSwgMCB9LAorCXsgREJHQlVTX0RTUFAsIDE0LCAwIH0sCisJeyBE QkdCVVNfRFNQUCwgMTQsIDEgfSwKKwl7IERCR0JVU19EU1BQLCAxNCwgMyB9LAorCXsgREJHQlVT X0RTUFAsIDIwLCAwIH0sCisJeyBEQkdCVVNfRFNQUCwgMjAsIDEgfSwKKwl7IERCR0JVU19EU1BQ LCAyMCwgMyB9LAorCisJLyogcHBiXzAgKi8KKwl7IERCR0JVU19EU1BQLCAzMSwgMCwgX2RwdV9k ZWJ1Z19idXNfcHBiMF9kdW1wIH0sCisJeyBEQkdCVVNfRFNQUCwgMzMsIDAsIF9kcHVfZGVidWdf YnVzX3BwYjBfZHVtcCB9LAorCXsgREJHQlVTX0RTUFAsIDM1LCAwLCBfZHB1X2RlYnVnX2J1c19w cGIwX2R1bXAgfSwKKwl7IERCR0JVU19EU1BQLCA0MiwgMCwgX2RwdV9kZWJ1Z19idXNfcHBiMF9k dW1wIH0sCisKKwkvKiBwcGJfMSAqLworCXsgREJHQlVTX0RTUFAsIDMyLCAwLCBfZHB1X2RlYnVn X2J1c19wcGIxX2R1bXAgfSwKKwl7IERCR0JVU19EU1BQLCAzNCwgMCwgX2RwdV9kZWJ1Z19idXNf cHBiMV9kdW1wIH0sCisJeyBEQkdCVVNfRFNQUCwgMzYsIDAsIF9kcHVfZGVidWdfYnVzX3BwYjFf ZHVtcCB9LAorCXsgREJHQlVTX0RTUFAsIDQzLCAwLCBfZHB1X2RlYnVnX2J1c19wcGIxX2R1bXAg fSwKKworCS8qIGxtX2x1dCAqLworCXsgREJHQlVTX0RTUFAsIDEwOSwgMCB9LAorCXsgREJHQlVT X0RTUFAsIDEwNSwgMCB9LAorCXsgREJHQlVTX0RTUFAsIDEwMywgMCB9LAorCisJLyogY3Jvc3Ni YXIgKi8KKwl7IERCR0JVU19EU1BQLCAwLCAwLCBfZHB1X2RlYnVnX2J1c194YmFyX2R1bXAgfSwK KworCS8qIHJvdGF0b3IgKi8KKwl7IERCR0JVU19EU1BQLCA5LCAwfSwKKworCS8qIGJsZW5kICov CisJLyogTE0wICovCisJeyBEQkdCVVNfRFNQUCwgNjMsIDF9LAorCXsgREJHQlVTX0RTUFAsIDYz LCAyfSwKKwl7IERCR0JVU19EU1BQLCA2MywgM30sCisJeyBEQkdCVVNfRFNQUCwgNjMsIDR9LAor CXsgREJHQlVTX0RTUFAsIDYzLCA1fSwKKwl7IERCR0JVU19EU1BQLCA2MywgNn0sCisJeyBEQkdC VVNfRFNQUCwgNjMsIDcsIF9kcHVfZGVidWdfYnVzX2xtX2R1bXAgfSwKKworCXsgREJHQlVTX0RT UFAsIDY0LCAxfSwKKwl7IERCR0JVU19EU1BQLCA2NCwgMn0sCisJeyBEQkdCVVNfRFNQUCwgNjQs IDN9LAorCXsgREJHQlVTX0RTUFAsIDY0LCA0fSwKKwl7IERCR0JVU19EU1BQLCA2NCwgNX0sCisJ eyBEQkdCVVNfRFNQUCwgNjQsIDZ9LAorCXsgREJHQlVTX0RTUFAsIDY0LCA3LCBfZHB1X2RlYnVn X2J1c19sbV9kdW1wIH0sCisKKwl7IERCR0JVU19EU1BQLCA2NSwgMX0sCisJeyBEQkdCVVNfRFNQ UCwgNjUsIDJ9LAorCXsgREJHQlVTX0RTUFAsIDY1LCAzfSwKKwl7IERCR0JVU19EU1BQLCA2NSwg NH0sCisJeyBEQkdCVVNfRFNQUCwgNjUsIDV9LAorCXsgREJHQlVTX0RTUFAsIDY1LCA2fSwKKwl7 IERCR0JVU19EU1BQLCA2NSwgNywgX2RwdV9kZWJ1Z19idXNfbG1fZHVtcCB9LAorCisJeyBEQkdC VVNfRFNQUCwgNjYsIDF9LAorCXsgREJHQlVTX0RTUFAsIDY2LCAyfSwKKwl7IERCR0JVU19EU1BQ LCA2NiwgM30sCisJeyBEQkdCVVNfRFNQUCwgNjYsIDR9LAorCXsgREJHQlVTX0RTUFAsIDY2LCA1 fSwKKwl7IERCR0JVU19EU1BQLCA2NiwgNn0sCisJeyBEQkdCVVNfRFNQUCwgNjYsIDcsIF9kcHVf ZGVidWdfYnVzX2xtX2R1bXAgfSwKKworCXsgREJHQlVTX0RTUFAsIDY3LCAxfSwKKwl7IERCR0JV U19EU1BQLCA2NywgMn0sCisJeyBEQkdCVVNfRFNQUCwgNjcsIDN9LAorCXsgREJHQlVTX0RTUFAs IDY3LCA0fSwKKwl7IERCR0JVU19EU1BQLCA2NywgNX0sCisJeyBEQkdCVVNfRFNQUCwgNjcsIDZ9 LAorCXsgREJHQlVTX0RTUFAsIDY3LCA3LCBfZHB1X2RlYnVnX2J1c19sbV9kdW1wIH0sCisKKwl7 IERCR0JVU19EU1BQLCA2OCwgMX0sCisJeyBEQkdCVVNfRFNQUCwgNjgsIDJ9LAorCXsgREJHQlVT X0RTUFAsIDY4LCAzfSwKKwl7IERCR0JVU19EU1BQLCA2OCwgNH0sCisJeyBEQkdCVVNfRFNQUCwg NjgsIDV9LAorCXsgREJHQlVTX0RTUFAsIDY4LCA2fSwKKwl7IERCR0JVU19EU1BQLCA2OCwgNywg X2RwdV9kZWJ1Z19idXNfbG1fZHVtcCB9LAorCisJeyBEQkdCVVNfRFNQUCwgNjksIDF9LAorCXsg REJHQlVTX0RTUFAsIDY5LCAyfSwKKwl7IERCR0JVU19EU1BQLCA2OSwgM30sCisJeyBEQkdCVVNf RFNQUCwgNjksIDR9LAorCXsgREJHQlVTX0RTUFAsIDY5LCA1fSwKKwl7IERCR0JVU19EU1BQLCA2 OSwgNn0sCisJeyBEQkdCVVNfRFNQUCwgNjksIDcsIF9kcHVfZGVidWdfYnVzX2xtX2R1bXAgfSwK KworCXsgREJHQlVTX0RTUFAsIDg0LCAxfSwKKwl7IERCR0JVU19EU1BQLCA4NCwgMn0sCisJeyBE QkdCVVNfRFNQUCwgODQsIDN9LAorCXsgREJHQlVTX0RTUFAsIDg0LCA0fSwKKwl7IERCR0JVU19E U1BQLCA4NCwgNX0sCisJeyBEQkdCVVNfRFNQUCwgODQsIDZ9LAorCXsgREJHQlVTX0RTUFAsIDg0 LCA3LCBfZHB1X2RlYnVnX2J1c19sbV9kdW1wIH0sCisKKworCXsgREJHQlVTX0RTUFAsIDg1LCAx fSwKKwl7IERCR0JVU19EU1BQLCA4NSwgMn0sCisJeyBEQkdCVVNfRFNQUCwgODUsIDN9LAorCXsg REJHQlVTX0RTUFAsIDg1LCA0fSwKKwl7IERCR0JVU19EU1BQLCA4NSwgNX0sCisJeyBEQkdCVVNf RFNQUCwgODUsIDZ9LAorCXsgREJHQlVTX0RTUFAsIDg1LCA3LCBfZHB1X2RlYnVnX2J1c19sbV9k dW1wIH0sCisKKworCXsgREJHQlVTX0RTUFAsIDg2LCAxfSwKKwl7IERCR0JVU19EU1BQLCA4Niwg Mn0sCisJeyBEQkdCVVNfRFNQUCwgODYsIDN9LAorCXsgREJHQlVTX0RTUFAsIDg2LCA0fSwKKwl7 IERCR0JVU19EU1BQLCA4NiwgNX0sCisJeyBEQkdCVVNfRFNQUCwgODYsIDZ9LAorCXsgREJHQlVT X0RTUFAsIDg2LCA3LCBfZHB1X2RlYnVnX2J1c19sbV9kdW1wIH0sCisKKworCXsgREJHQlVTX0RT UFAsIDg3LCAxfSwKKwl7IERCR0JVU19EU1BQLCA4NywgMn0sCisJeyBEQkdCVVNfRFNQUCwgODcs IDN9LAorCXsgREJHQlVTX0RTUFAsIDg3LCA0fSwKKwl7IERCR0JVU19EU1BQLCA4NywgNX0sCisJ eyBEQkdCVVNfRFNQUCwgODcsIDZ9LAorCXsgREJHQlVTX0RTUFAsIDg3LCA3LCBfZHB1X2RlYnVn X2J1c19sbV9kdW1wIH0sCisKKwkvKiBMTTEgKi8KKwl7IERCR0JVU19EU1BQLCA3MCwgMX0sCisJ eyBEQkdCVVNfRFNQUCwgNzAsIDJ9LAorCXsgREJHQlVTX0RTUFAsIDcwLCAzfSwKKwl7IERCR0JV U19EU1BQLCA3MCwgNH0sCisJeyBEQkdCVVNfRFNQUCwgNzAsIDV9LAorCXsgREJHQlVTX0RTUFAs IDcwLCA2fSwKKwl7IERCR0JVU19EU1BQLCA3MCwgNywgX2RwdV9kZWJ1Z19idXNfbG1fZHVtcCB9 LAorCisJeyBEQkdCVVNfRFNQUCwgNzEsIDF9LAorCXsgREJHQlVTX0RTUFAsIDcxLCAyfSwKKwl7 IERCR0JVU19EU1BQLCA3MSwgM30sCisJeyBEQkdCVVNfRFNQUCwgNzEsIDR9LAorCXsgREJHQlVT X0RTUFAsIDcxLCA1fSwKKwl7IERCR0JVU19EU1BQLCA3MSwgNn0sCisJeyBEQkdCVVNfRFNQUCwg NzEsIDcsIF9kcHVfZGVidWdfYnVzX2xtX2R1bXAgfSwKKworCXsgREJHQlVTX0RTUFAsIDcyLCAx fSwKKwl7IERCR0JVU19EU1BQLCA3MiwgMn0sCisJeyBEQkdCVVNfRFNQUCwgNzIsIDN9LAorCXsg REJHQlVTX0RTUFAsIDcyLCA0fSwKKwl7IERCR0JVU19EU1BQLCA3MiwgNX0sCisJeyBEQkdCVVNf RFNQUCwgNzIsIDZ9LAorCXsgREJHQlVTX0RTUFAsIDcyLCA3LCBfZHB1X2RlYnVnX2J1c19sbV9k dW1wIH0sCisKKwl7IERCR0JVU19EU1BQLCA3MywgMX0sCisJeyBEQkdCVVNfRFNQUCwgNzMsIDJ9 LAorCXsgREJHQlVTX0RTUFAsIDczLCAzfSwKKwl7IERCR0JVU19EU1BQLCA3MywgNH0sCisJeyBE QkdCVVNfRFNQUCwgNzMsIDV9LAorCXsgREJHQlVTX0RTUFAsIDczLCA2fSwKKwl7IERCR0JVU19E U1BQLCA3MywgNywgX2RwdV9kZWJ1Z19idXNfbG1fZHVtcCB9LAorCisJeyBEQkdCVVNfRFNQUCwg NzQsIDF9LAorCXsgREJHQlVTX0RTUFAsIDc0LCAyfSwKKwl7IERCR0JVU19EU1BQLCA3NCwgM30s CisJeyBEQkdCVVNfRFNQUCwgNzQsIDR9LAorCXsgREJHQlVTX0RTUFAsIDc0LCA1fSwKKwl7IERC R0JVU19EU1BQLCA3NCwgNn0sCisJeyBEQkdCVVNfRFNQUCwgNzQsIDcsIF9kcHVfZGVidWdfYnVz X2xtX2R1bXAgfSwKKworCXsgREJHQlVTX0RTUFAsIDc1LCAxfSwKKwl7IERCR0JVU19EU1BQLCA3 NSwgMn0sCisJeyBEQkdCVVNfRFNQUCwgNzUsIDN9LAorCXsgREJHQlVTX0RTUFAsIDc1LCA0fSwK Kwl7IERCR0JVU19EU1BQLCA3NSwgNX0sCisJeyBEQkdCVVNfRFNQUCwgNzUsIDZ9LAorCXsgREJH QlVTX0RTUFAsIDc1LCA3LCBfZHB1X2RlYnVnX2J1c19sbV9kdW1wIH0sCisKKwl7IERCR0JVU19E U1BQLCA3NiwgMX0sCisJeyBEQkdCVVNfRFNQUCwgNzYsIDJ9LAorCXsgREJHQlVTX0RTUFAsIDc2 LCAzfSwKKwl7IERCR0JVU19EU1BQLCA3NiwgNH0sCisJeyBEQkdCVVNfRFNQUCwgNzYsIDV9LAor CXsgREJHQlVTX0RTUFAsIDc2LCA2fSwKKwl7IERCR0JVU19EU1BQLCA3NiwgNywgX2RwdV9kZWJ1 Z19idXNfbG1fZHVtcCB9LAorCisJeyBEQkdCVVNfRFNQUCwgODgsIDF9LAorCXsgREJHQlVTX0RT UFAsIDg4LCAyfSwKKwl7IERCR0JVU19EU1BQLCA4OCwgM30sCisJeyBEQkdCVVNfRFNQUCwgODgs IDR9LAorCXsgREJHQlVTX0RTUFAsIDg4LCA1fSwKKwl7IERCR0JVU19EU1BQLCA4OCwgNn0sCisJ eyBEQkdCVVNfRFNQUCwgODgsIDcsIF9kcHVfZGVidWdfYnVzX2xtX2R1bXAgfSwKKworCXsgREJH QlVTX0RTUFAsIDg5LCAxfSwKKwl7IERCR0JVU19EU1BQLCA4OSwgMn0sCisJeyBEQkdCVVNfRFNQ UCwgODksIDN9LAorCXsgREJHQlVTX0RTUFAsIDg5LCA0fSwKKwl7IERCR0JVU19EU1BQLCA4OSwg NX0sCisJeyBEQkdCVVNfRFNQUCwgODksIDZ9LAorCXsgREJHQlVTX0RTUFAsIDg5LCA3LCBfZHB1 X2RlYnVnX2J1c19sbV9kdW1wIH0sCisKKwl7IERCR0JVU19EU1BQLCA5MCwgMX0sCisJeyBEQkdC VVNfRFNQUCwgOTAsIDJ9LAorCXsgREJHQlVTX0RTUFAsIDkwLCAzfSwKKwl7IERCR0JVU19EU1BQ LCA5MCwgNH0sCisJeyBEQkdCVVNfRFNQUCwgOTAsIDV9LAorCXsgREJHQlVTX0RTUFAsIDkwLCA2 fSwKKwl7IERCR0JVU19EU1BQLCA5MCwgNywgX2RwdV9kZWJ1Z19idXNfbG1fZHVtcCB9LAorCisJ eyBEQkdCVVNfRFNQUCwgOTEsIDF9LAorCXsgREJHQlVTX0RTUFAsIDkxLCAyfSwKKwl7IERCR0JV U19EU1BQLCA5MSwgM30sCisJeyBEQkdCVVNfRFNQUCwgOTEsIDR9LAorCXsgREJHQlVTX0RTUFAs IDkxLCA1fSwKKwl7IERCR0JVU19EU1BQLCA5MSwgNn0sCisJeyBEQkdCVVNfRFNQUCwgOTEsIDcs IF9kcHVfZGVidWdfYnVzX2xtX2R1bXAgfSwKKworCS8qIExNMiAqLworCXsgREJHQlVTX0RTUFAs IDc3LCAwfSwKKwl7IERCR0JVU19EU1BQLCA3NywgMX0sCisJeyBEQkdCVVNfRFNQUCwgNzcsIDJ9 LAorCXsgREJHQlVTX0RTUFAsIDc3LCAzfSwKKwl7IERCR0JVU19EU1BQLCA3NywgNH0sCisJeyBE QkdCVVNfRFNQUCwgNzcsIDV9LAorCXsgREJHQlVTX0RTUFAsIDc3LCA2fSwKKwl7IERCR0JVU19E U1BQLCA3NywgNywgX2RwdV9kZWJ1Z19idXNfbG1fZHVtcCB9LAorCisJeyBEQkdCVVNfRFNQUCwg NzgsIDB9LAorCXsgREJHQlVTX0RTUFAsIDc4LCAxfSwKKwl7IERCR0JVU19EU1BQLCA3OCwgMn0s CisJeyBEQkdCVVNfRFNQUCwgNzgsIDN9LAorCXsgREJHQlVTX0RTUFAsIDc4LCA0fSwKKwl7IERC R0JVU19EU1BQLCA3OCwgNX0sCisJeyBEQkdCVVNfRFNQUCwgNzgsIDZ9LAorCXsgREJHQlVTX0RT UFAsIDc4LCA3LCBfZHB1X2RlYnVnX2J1c19sbV9kdW1wIH0sCisKKwl7IERCR0JVU19EU1BQLCA3 OSwgMH0sCisJeyBEQkdCVVNfRFNQUCwgNzksIDF9LAorCXsgREJHQlVTX0RTUFAsIDc5LCAyfSwK Kwl7IERCR0JVU19EU1BQLCA3OSwgM30sCisJeyBEQkdCVVNfRFNQUCwgNzksIDR9LAorCXsgREJH QlVTX0RTUFAsIDc5LCA1fSwKKwl7IERCR0JVU19EU1BQLCA3OSwgNn0sCisJeyBEQkdCVVNfRFNQ UCwgNzksIDcsIF9kcHVfZGVidWdfYnVzX2xtX2R1bXAgfSwKKworCXsgREJHQlVTX0RTUFAsIDgw LCAwfSwKKwl7IERCR0JVU19EU1BQLCA4MCwgMX0sCisJeyBEQkdCVVNfRFNQUCwgODAsIDJ9LAor CXsgREJHQlVTX0RTUFAsIDgwLCAzfSwKKwl7IERCR0JVU19EU1BQLCA4MCwgNH0sCisJeyBEQkdC VVNfRFNQUCwgODAsIDV9LAorCXsgREJHQlVTX0RTUFAsIDgwLCA2fSwKKwl7IERCR0JVU19EU1BQ LCA4MCwgNywgX2RwdV9kZWJ1Z19idXNfbG1fZHVtcCB9LAorCisJeyBEQkdCVVNfRFNQUCwgODEs IDB9LAorCXsgREJHQlVTX0RTUFAsIDgxLCAxfSwKKwl7IERCR0JVU19EU1BQLCA4MSwgMn0sCisJ eyBEQkdCVVNfRFNQUCwgODEsIDN9LAorCXsgREJHQlVTX0RTUFAsIDgxLCA0fSwKKwl7IERCR0JV U19EU1BQLCA4MSwgNX0sCisJeyBEQkdCVVNfRFNQUCwgODEsIDZ9LAorCXsgREJHQlVTX0RTUFAs IDgxLCA3LCBfZHB1X2RlYnVnX2J1c19sbV9kdW1wIH0sCisKKwl7IERCR0JVU19EU1BQLCA4Miwg MH0sCisJeyBEQkdCVVNfRFNQUCwgODIsIDF9LAorCXsgREJHQlVTX0RTUFAsIDgyLCAyfSwKKwl7 IERCR0JVU19EU1BQLCA4MiwgM30sCisJeyBEQkdCVVNfRFNQUCwgODIsIDR9LAorCXsgREJHQlVT X0RTUFAsIDgyLCA1fSwKKwl7IERCR0JVU19EU1BQLCA4MiwgNn0sCisJeyBEQkdCVVNfRFNQUCwg ODIsIDcsIF9kcHVfZGVidWdfYnVzX2xtX2R1bXAgfSwKKworCXsgREJHQlVTX0RTUFAsIDgzLCAw fSwKKwl7IERCR0JVU19EU1BQLCA4MywgMX0sCisJeyBEQkdCVVNfRFNQUCwgODMsIDJ9LAorCXsg REJHQlVTX0RTUFAsIDgzLCAzfSwKKwl7IERCR0JVU19EU1BQLCA4MywgNH0sCisJeyBEQkdCVVNf RFNQUCwgODMsIDV9LAorCXsgREJHQlVTX0RTUFAsIDgzLCA2fSwKKwl7IERCR0JVU19EU1BQLCA4 MywgNywgX2RwdV9kZWJ1Z19idXNfbG1fZHVtcCB9LAorCisJeyBEQkdCVVNfRFNQUCwgOTIsIDF9 LAorCXsgREJHQlVTX0RTUFAsIDkyLCAyfSwKKwl7IERCR0JVU19EU1BQLCA5MiwgM30sCisJeyBE QkdCVVNfRFNQUCwgOTIsIDR9LAorCXsgREJHQlVTX0RTUFAsIDkyLCA1fSwKKwl7IERCR0JVU19E U1BQLCA5MiwgNn0sCisJeyBEQkdCVVNfRFNQUCwgOTIsIDcsIF9kcHVfZGVidWdfYnVzX2xtX2R1 bXAgfSwKKworCXsgREJHQlVTX0RTUFAsIDkzLCAxfSwKKwl7IERCR0JVU19EU1BQLCA5MywgMn0s CisJeyBEQkdCVVNfRFNQUCwgOTMsIDN9LAorCXsgREJHQlVTX0RTUFAsIDkzLCA0fSwKKwl7IERC R0JVU19EU1BQLCA5MywgNX0sCisJeyBEQkdCVVNfRFNQUCwgOTMsIDZ9LAorCXsgREJHQlVTX0RT UFAsIDkzLCA3LCBfZHB1X2RlYnVnX2J1c19sbV9kdW1wIH0sCisKKwl7IERCR0JVU19EU1BQLCA5 NCwgMX0sCisJeyBEQkdCVVNfRFNQUCwgOTQsIDJ9LAorCXsgREJHQlVTX0RTUFAsIDk0LCAzfSwK Kwl7IERCR0JVU19EU1BQLCA5NCwgNH0sCisJeyBEQkdCVVNfRFNQUCwgOTQsIDV9LAorCXsgREJH QlVTX0RTUFAsIDk0LCA2fSwKKwl7IERCR0JVU19EU1BQLCA5NCwgNywgX2RwdV9kZWJ1Z19idXNf bG1fZHVtcCB9LAorCisJeyBEQkdCVVNfRFNQUCwgOTUsIDF9LAorCXsgREJHQlVTX0RTUFAsIDk1 LCAyfSwKKwl7IERCR0JVU19EU1BQLCA5NSwgM30sCisJeyBEQkdCVVNfRFNQUCwgOTUsIDR9LAor CXsgREJHQlVTX0RTUFAsIDk1LCA1fSwKKwl7IERCR0JVU19EU1BQLCA5NSwgNn0sCisJeyBEQkdC VVNfRFNQUCwgOTUsIDcsIF9kcHVfZGVidWdfYnVzX2xtX2R1bXAgfSwKKworCS8qIExNNSAqLwor CXsgREJHQlVTX0RTUFAsIDExMCwgMX0sCisJeyBEQkdCVVNfRFNQUCwgMTEwLCAyfSwKKwl7IERC R0JVU19EU1BQLCAxMTAsIDN9LAorCXsgREJHQlVTX0RTUFAsIDExMCwgNH0sCisJeyBEQkdCVVNf RFNQUCwgMTEwLCA1fSwKKwl7IERCR0JVU19EU1BQLCAxMTAsIDZ9LAorCXsgREJHQlVTX0RTUFAs IDExMCwgNywgX2RwdV9kZWJ1Z19idXNfbG1fZHVtcCB9LAorCisJeyBEQkdCVVNfRFNQUCwgMTEx LCAxfSwKKwl7IERCR0JVU19EU1BQLCAxMTEsIDJ9LAorCXsgREJHQlVTX0RTUFAsIDExMSwgM30s CisJeyBEQkdCVVNfRFNQUCwgMTExLCA0fSwKKwl7IERCR0JVU19EU1BQLCAxMTEsIDV9LAorCXsg REJHQlVTX0RTUFAsIDExMSwgNn0sCisJeyBEQkdCVVNfRFNQUCwgMTExLCA3LCBfZHB1X2RlYnVn X2J1c19sbV9kdW1wIH0sCisKKwl7IERCR0JVU19EU1BQLCAxMTIsIDF9LAorCXsgREJHQlVTX0RT UFAsIDExMiwgMn0sCisJeyBEQkdCVVNfRFNQUCwgMTEyLCAzfSwKKwl7IERCR0JVU19EU1BQLCAx MTIsIDR9LAorCXsgREJHQlVTX0RTUFAsIDExMiwgNX0sCisJeyBEQkdCVVNfRFNQUCwgMTEyLCA2 fSwKKwl7IERCR0JVU19EU1BQLCAxMTIsIDcsIF9kcHVfZGVidWdfYnVzX2xtX2R1bXAgfSwKKwor CXsgREJHQlVTX0RTUFAsIDExMywgMX0sCisJeyBEQkdCVVNfRFNQUCwgMTEzLCAyfSwKKwl7IERC R0JVU19EU1BQLCAxMTMsIDN9LAorCXsgREJHQlVTX0RTUFAsIDExMywgNH0sCisJeyBEQkdCVVNf RFNQUCwgMTEzLCA1fSwKKwl7IERCR0JVU19EU1BQLCAxMTMsIDZ9LAorCXsgREJHQlVTX0RTUFAs IDExMywgNywgX2RwdV9kZWJ1Z19idXNfbG1fZHVtcCB9LAorCisJeyBEQkdCVVNfRFNQUCwgMTE0 LCAxfSwKKwl7IERCR0JVU19EU1BQLCAxMTQsIDJ9LAorCXsgREJHQlVTX0RTUFAsIDExNCwgM30s CisJeyBEQkdCVVNfRFNQUCwgMTE0LCA0fSwKKwl7IERCR0JVU19EU1BQLCAxMTQsIDV9LAorCXsg REJHQlVTX0RTUFAsIDExNCwgNn0sCisJeyBEQkdCVVNfRFNQUCwgMTE0LCA3LCBfZHB1X2RlYnVn X2J1c19sbV9kdW1wIH0sCisKKwl7IERCR0JVU19EU1BQLCAxMTUsIDF9LAorCXsgREJHQlVTX0RT UFAsIDExNSwgMn0sCisJeyBEQkdCVVNfRFNQUCwgMTE1LCAzfSwKKwl7IERCR0JVU19EU1BQLCAx MTUsIDR9LAorCXsgREJHQlVTX0RTUFAsIDExNSwgNX0sCisJeyBEQkdCVVNfRFNQUCwgMTE1LCA2 fSwKKwl7IERCR0JVU19EU1BQLCAxMTUsIDcsIF9kcHVfZGVidWdfYnVzX2xtX2R1bXAgfSwKKwor CXsgREJHQlVTX0RTUFAsIDExNiwgMX0sCisJeyBEQkdCVVNfRFNQUCwgMTE2LCAyfSwKKwl7IERC R0JVU19EU1BQLCAxMTYsIDN9LAorCXsgREJHQlVTX0RTUFAsIDExNiwgNH0sCisJeyBEQkdCVVNf RFNQUCwgMTE2LCA1fSwKKwl7IERCR0JVU19EU1BQLCAxMTYsIDZ9LAorCXsgREJHQlVTX0RTUFAs IDExNiwgNywgX2RwdV9kZWJ1Z19idXNfbG1fZHVtcCB9LAorCisJeyBEQkdCVVNfRFNQUCwgMTE3 LCAxfSwKKwl7IERCR0JVU19EU1BQLCAxMTcsIDJ9LAorCXsgREJHQlVTX0RTUFAsIDExNywgM30s CisJeyBEQkdCVVNfRFNQUCwgMTE3LCA0fSwKKwl7IERCR0JVU19EU1BQLCAxMTcsIDV9LAorCXsg REJHQlVTX0RTUFAsIDExNywgNn0sCisJeyBEQkdCVVNfRFNQUCwgMTE3LCA3LCBfZHB1X2RlYnVn X2J1c19sbV9kdW1wIH0sCisKKwl7IERCR0JVU19EU1BQLCAxMTgsIDF9LAorCXsgREJHQlVTX0RT UFAsIDExOCwgMn0sCisJeyBEQkdCVVNfRFNQUCwgMTE4LCAzfSwKKwl7IERCR0JVU19EU1BQLCAx MTgsIDR9LAorCXsgREJHQlVTX0RTUFAsIDExOCwgNX0sCisJeyBEQkdCVVNfRFNQUCwgMTE4LCA2 fSwKKwl7IERCR0JVU19EU1BQLCAxMTgsIDcsIF9kcHVfZGVidWdfYnVzX2xtX2R1bXAgfSwKKwor CXsgREJHQlVTX0RTUFAsIDExOSwgMX0sCisJeyBEQkdCVVNfRFNQUCwgMTE5LCAyfSwKKwl7IERC R0JVU19EU1BQLCAxMTksIDN9LAorCXsgREJHQlVTX0RTUFAsIDExOSwgNH0sCisJeyBEQkdCVVNf RFNQUCwgMTE5LCA1fSwKKwl7IERCR0JVU19EU1BQLCAxMTksIDZ9LAorCXsgREJHQlVTX0RTUFAs IDExOSwgNywgX2RwdV9kZWJ1Z19idXNfbG1fZHVtcCB9LAorCisJeyBEQkdCVVNfRFNQUCwgMTIw LCAxfSwKKwl7IERCR0JVU19EU1BQLCAxMjAsIDJ9LAorCXsgREJHQlVTX0RTUFAsIDEyMCwgM30s CisJeyBEQkdCVVNfRFNQUCwgMTIwLCA0fSwKKwl7IERCR0JVU19EU1BQLCAxMjAsIDV9LAorCXsg REJHQlVTX0RTUFAsIDEyMCwgNn0sCisJeyBEQkdCVVNfRFNQUCwgMTIwLCA3LCBfZHB1X2RlYnVn X2J1c19sbV9kdW1wIH0sCisKKwkvKiBjc2MgKi8KKwl7IERCR0JVU19TU1BQMCwgNywgMH0sCisJ eyBEQkdCVVNfU1NQUDAsIDcsIDF9LAorCXsgREJHQlVTX1NTUFAwLCAyNywgMH0sCisJeyBEQkdC VVNfU1NQUDAsIDI3LCAxfSwKKwl7IERCR0JVU19TU1BQMSwgNywgMH0sCisJeyBEQkdCVVNfU1NQ UDEsIDcsIDF9LAorCXsgREJHQlVTX1NTUFAxLCAyNywgMH0sCisJeyBEQkdCVVNfU1NQUDEsIDI3 LCAxfSwKKworCS8qIHBjYyAqLworCXsgREJHQlVTX1NTUFAwLCAzLCAgM30sCisJeyBEQkdCVVNf U1NQUDAsIDIzLCAzfSwKKwl7IERCR0JVU19TU1BQMCwgMzMsIDN9LAorCXsgREJHQlVTX1NTUFAw LCA0MywgM30sCisJeyBEQkdCVVNfU1NQUDEsIDMsICAzfSwKKwl7IERCR0JVU19TU1BQMSwgMjMs IDN9LAorCXsgREJHQlVTX1NTUFAxLCAzMywgM30sCisJeyBEQkdCVVNfU1NQUDEsIDQzLCAzfSwK KworCS8qIHNwYSAqLworCXsgREJHQlVTX1NTUFAwLCA4LCAgMH0sCisJeyBEQkdCVVNfU1NQUDAs IDI4LCAwfSwKKwl7IERCR0JVU19TU1BQMSwgOCwgIDB9LAorCXsgREJHQlVTX1NTUFAxLCAyOCwg MH0sCisJeyBEQkdCVVNfRFNQUCwgMTMsIDB9LAorCXsgREJHQlVTX0RTUFAsIDE5LCAwfSwKKwor CS8qIGlnYyAqLworCXsgREJHQlVTX1NTUFAwLCAxNywgMH0sCisJeyBEQkdCVVNfU1NQUDAsIDE3 LCAxfSwKKwl7IERCR0JVU19TU1BQMCwgMTcsIDN9LAorCXsgREJHQlVTX1NTUFAwLCAzNywgMH0s CisJeyBEQkdCVVNfU1NQUDAsIDM3LCAxfSwKKwl7IERCR0JVU19TU1BQMCwgMzcsIDN9LAorCXsg REJHQlVTX1NTUFAwLCA0NiwgMH0sCisJeyBEQkdCVVNfU1NQUDAsIDQ2LCAxfSwKKwl7IERCR0JV U19TU1BQMCwgNDYsIDN9LAorCisJeyBEQkdCVVNfU1NQUDEsIDE3LCAwfSwKKwl7IERCR0JVU19T U1BQMSwgMTcsIDF9LAorCXsgREJHQlVTX1NTUFAxLCAxNywgM30sCisJeyBEQkdCVVNfU1NQUDEs IDM3LCAwfSwKKwl7IERCR0JVU19TU1BQMSwgMzcsIDF9LAorCXsgREJHQlVTX1NTUFAxLCAzNywg M30sCisJeyBEQkdCVVNfU1NQUDEsIDQ2LCAwfSwKKwl7IERCR0JVU19TU1BQMSwgNDYsIDF9LAor CXsgREJHQlVTX1NTUFAxLCA0NiwgM30sCisKKwl7IERCR0JVU19EU1BQLCAxNCwgMH0sCisJeyBE QkdCVVNfRFNQUCwgMTQsIDF9LAorCXsgREJHQlVTX0RTUFAsIDE0LCAzfSwKKwl7IERCR0JVU19E U1BQLCAyMCwgMH0sCisJeyBEQkdCVVNfRFNQUCwgMjAsIDF9LAorCXsgREJHQlVTX0RTUFAsIDIw LCAzfSwKKworCS8qIGludGYwLTMgKi8KKwl7IERCR0JVU19QRVJJUEgsIDAsIDB9LAorCXsgREJH QlVTX1BFUklQSCwgMSwgMH0sCisJeyBEQkdCVVNfUEVSSVBILCAyLCAwfSwKKwl7IERCR0JVU19Q RVJJUEgsIDMsIDB9LAorCisJLyogdGUgY291bnRlciB3cmFwcGVyICovCisJeyBEQkdCVVNfUEVS SVBILCA2MCwgMH0sCisKKwkvKiBkc2MwICovCisJeyBEQkdCVVNfUEVSSVBILCA0NywgMH0sCisJ eyBEQkdCVVNfUEVSSVBILCA0NywgMX0sCisJeyBEQkdCVVNfUEVSSVBILCA0NywgMn0sCisJeyBE QkdCVVNfUEVSSVBILCA0NywgM30sCisJeyBEQkdCVVNfUEVSSVBILCA0NywgNH0sCisJeyBEQkdC VVNfUEVSSVBILCA0NywgNX0sCisJeyBEQkdCVVNfUEVSSVBILCA0NywgNn0sCisJeyBEQkdCVVNf UEVSSVBILCA0NywgN30sCisKKwkvKiBkc2MxICovCisJeyBEQkdCVVNfUEVSSVBILCA0OCwgMH0s CisJeyBEQkdCVVNfUEVSSVBILCA0OCwgMX0sCisJeyBEQkdCVVNfUEVSSVBILCA0OCwgMn0sCisJ eyBEQkdCVVNfUEVSSVBILCA0OCwgM30sCisJeyBEQkdCVVNfUEVSSVBILCA0OCwgNH0sCisJeyBE QkdCVVNfUEVSSVBILCA0OCwgNX0sCisJeyBEQkdCVVNfUEVSSVBILCA0OCwgNn0sCisJeyBEQkdC VVNfUEVSSVBILCA0OCwgN30sCisKKwkvKiBkc2MyICovCisJeyBEQkdCVVNfUEVSSVBILCA1MSwg MH0sCisJeyBEQkdCVVNfUEVSSVBILCA1MSwgMX0sCisJeyBEQkdCVVNfUEVSSVBILCA1MSwgMn0s CisJeyBEQkdCVVNfUEVSSVBILCA1MSwgM30sCisJeyBEQkdCVVNfUEVSSVBILCA1MSwgNH0sCisJ eyBEQkdCVVNfUEVSSVBILCA1MSwgNX0sCisJeyBEQkdCVVNfUEVSSVBILCA1MSwgNn0sCisJeyBE QkdCVVNfUEVSSVBILCA1MSwgN30sCisKKwkvKiBkc2MzICovCisJeyBEQkdCVVNfUEVSSVBILCA1 MiwgMH0sCisJeyBEQkdCVVNfUEVSSVBILCA1MiwgMX0sCisJeyBEQkdCVVNfUEVSSVBILCA1Miwg Mn0sCisJeyBEQkdCVVNfUEVSSVBILCA1MiwgM30sCisJeyBEQkdCVVNfUEVSSVBILCA1MiwgNH0s CisJeyBEQkdCVVNfUEVSSVBILCA1MiwgNX0sCisJeyBEQkdCVVNfUEVSSVBILCA1MiwgNn0sCisJ eyBEQkdCVVNfUEVSSVBILCA1MiwgN30sCisKKwkvKiB0ZWFyLWNoZWNrICovCisJeyBEQkdCVVNf UEVSSVBILCA2MywgMCB9LAorCXsgREJHQlVTX1BFUklQSCwgNjQsIDAgfSwKKwl7IERCR0JVU19Q RVJJUEgsIDY1LCAwIH0sCisJeyBEQkdCVVNfUEVSSVBILCA3MywgMCB9LAorCXsgREJHQlVTX1BF UklQSCwgNzQsIDAgfSwKKworCS8qIGNkd24gKi8KKwl7IERCR0JVU19QRVJJUEgsIDgwLCAwfSwK Kwl7IERCR0JVU19QRVJJUEgsIDgwLCAxfSwKKwl7IERCR0JVU19QRVJJUEgsIDgwLCAyfSwKKwor CXsgREJHQlVTX1BFUklQSCwgODEsIDB9LAorCXsgREJHQlVTX1BFUklQSCwgODEsIDF9LAorCXsg REJHQlVTX1BFUklQSCwgODEsIDJ9LAorCisJeyBEQkdCVVNfUEVSSVBILCA4MiwgMH0sCisJeyBE QkdCVVNfUEVSSVBILCA4MiwgMX0sCisJeyBEQkdCVVNfUEVSSVBILCA4MiwgMn0sCisJeyBEQkdC VVNfUEVSSVBILCA4MiwgM30sCisJeyBEQkdCVVNfUEVSSVBILCA4MiwgNH0sCisJeyBEQkdCVVNf UEVSSVBILCA4MiwgNX0sCisJeyBEQkdCVVNfUEVSSVBILCA4MiwgNn0sCisJeyBEQkdCVVNfUEVS SVBILCA4MiwgN30sCisKKwkvKiBoZG1pICovCisJeyBEQkdCVVNfUEVSSVBILCA2OCwgMH0sCisJ eyBEQkdCVVNfUEVSSVBILCA2OCwgMX0sCisJeyBEQkdCVVNfUEVSSVBILCA2OCwgMn0sCisJeyBE QkdCVVNfUEVSSVBILCA2OCwgM30sCisJeyBEQkdCVVNfUEVSSVBILCA2OCwgNH0sCisJeyBEQkdC VVNfUEVSSVBILCA2OCwgNX0sCisKKwkvKiBlZHAgKi8KKwl7IERCR0JVU19QRVJJUEgsIDY5LCAw fSwKKwl7IERCR0JVU19QRVJJUEgsIDY5LCAxfSwKKwl7IERCR0JVU19QRVJJUEgsIDY5LCAyfSwK Kwl7IERCR0JVU19QRVJJUEgsIDY5LCAzfSwKKwl7IERCR0JVU19QRVJJUEgsIDY5LCA0fSwKKwl7 IERCR0JVU19QRVJJUEgsIDY5LCA1fSwKKworCS8qIGRzaTAgKi8KKwl7IERCR0JVU19QRVJJUEgs IDcwLCAwfSwKKwl7IERCR0JVU19QRVJJUEgsIDcwLCAxfSwKKwl7IERCR0JVU19QRVJJUEgsIDcw LCAyfSwKKwl7IERCR0JVU19QRVJJUEgsIDcwLCAzfSwKKwl7IERCR0JVU19QRVJJUEgsIDcwLCA0 fSwKKwl7IERCR0JVU19QRVJJUEgsIDcwLCA1fSwKKworCS8qIGRzaTEgKi8KKwl7IERCR0JVU19Q RVJJUEgsIDcxLCAwfSwKKwl7IERCR0JVU19QRVJJUEgsIDcxLCAxfSwKKwl7IERCR0JVU19QRVJJ UEgsIDcxLCAyfSwKKwl7IERCR0JVU19QRVJJUEgsIDcxLCAzfSwKKwl7IERCR0JVU19QRVJJUEgs IDcxLCA0fSwKKwl7IERCR0JVU19QRVJJUEgsIDcxLCA1fSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qg dmJpZl9kZWJ1Z19idXNfZW50cnkgdmJpZl9kYmdfYnVzX21zbTg5OThbXSA9IHsKKwl7MHgyMTQs IDB4MjFjLCAxNiwgMiwgMHgwLCAweGR9LCAgICAgLyogYXJiIGNsaWVudHMgKi8KKwl7MHgyMTQs IDB4MjFjLCAxNiwgMiwgMHg4MCwgMHhjMH0sICAgLyogYXJiIGNsaWVudHMgKi8KKwl7MHgyMTQs IDB4MjFjLCAxNiwgMiwgMHgxMDAsIDB4MTQwfSwgLyogYXJiIGNsaWVudHMgKi8KKwl7MHgyMTQs IDB4MjFjLCAwLCAxNiwgMHgwLCAweGZ9LCAgICAgLyogeGluIGJsb2NrcyAtIGF4aSBzaWRlICov CisJezB4MjE0LCAweDIxYywgMCwgMTYsIDB4ODAsIDB4YTR9LCAgIC8qIHhpbiBibG9ja3MgLSBh eGkgc2lkZSAqLworCXsweDIxNCwgMHgyMWMsIDAsIDE1LCAweDEwMCwgMHgxMjR9LCAvKiB4aW4g YmxvY2tzIC0gYXhpIHNpZGUgKi8KKwl7MHgyMWMsIDB4MjE0LCAwLCAxNCwgMCwgMHhjfSwgLyog eGluIGJsb2NrcyAtIGNsb2NrIHNpZGUgKi8KK307CisKKy8qKgorICogX2RwdV9kYmdfZW5hYmxl X3Bvd2VyIC0gdXNlIGNhbGxiYWNrIHRvIHR1cm4gcG93ZXIgb24gZm9yIGh3IHJlZ2lzdGVyIGFj Y2VzcworICogQGVuYWJsZTogd2hldGhlciB0byB0dXJuIHBvd2VyIG9uIG9yIG9mZgorICovCitz dGF0aWMgaW5saW5lIHZvaWQgX2RwdV9kYmdfZW5hYmxlX3Bvd2VyKGludCBlbmFibGUpCit7CisJ aWYgKGVuYWJsZSkKKwkJcG1fcnVudGltZV9nZXRfc3luYyhkcHVfZGJnX2Jhc2UuZGV2KTsKKwll bHNlCisJCXBtX3J1bnRpbWVfcHV0X3N5bmMoZHB1X2RiZ19iYXNlLmRldik7Cit9CisKK3N0YXRp YyB2b2lkIF9kcHVfZGJnX2R1bXBfZHB1X2RiZ19idXMoc3RydWN0IGRwdV9kYmdfZHB1X2RlYnVn X2J1cyAqYnVzKQoreworCWJvb2wgaW5fbG9nLCBpbl9tZW07CisJdTMyICoqZHVtcF9tZW0gPSBO VUxMOworCXUzMiAqZHVtcF9hZGRyID0gTlVMTDsKKwl1MzIgc3RhdHVzID0gMDsKKwlzdHJ1Y3Qg ZHB1X2RlYnVnX2J1c19lbnRyeSAqaGVhZDsKKwlwaHlzX2FkZHJfdCBwaHlzID0gMDsKKwlpbnQg bGlzdF9zaXplOworCWludCBpOworCXUzMiBvZmZzZXQ7CisJdm9pZCBfX2lvbWVtICptZW1fYmFz ZSA9IE5VTEw7CisJc3RydWN0IGRwdV9kYmdfcmVnX2Jhc2UgKnJlZ19iYXNlOworCisJaWYgKCFi dXMgfHwgIWJ1cy0+Y21uLmVudHJpZXNfc2l6ZSkKKwkJcmV0dXJuOworCisJbGlzdF9mb3JfZWFj aF9lbnRyeShyZWdfYmFzZSwgJmRwdV9kYmdfYmFzZS5yZWdfYmFzZV9saXN0LAorCQkJcmVnX2Jh c2VfaGVhZCkKKwkJaWYgKHN0cmxlbihyZWdfYmFzZS0+bmFtZSkgJiYKKwkJCSFzdHJjbXAocmVn X2Jhc2UtPm5hbWUsIGJ1cy0+Y21uLm5hbWUpKQorCQkJbWVtX2Jhc2UgPSByZWdfYmFzZS0+YmFz ZSArIGJ1cy0+dG9wX2Jsa19vZmY7CisKKwlpZiAoIW1lbV9iYXNlKSB7CisJCXByX2VycigidW5h YmxlIHRvIGZpbmQgbWVtX2Jhc2UgZm9yICVzXG4iLCBidXMtPmNtbi5uYW1lKTsKKwkJcmV0dXJu OworCX0KKworCWR1bXBfbWVtID0gJmJ1cy0+Y21uLmR1bXBlZF9jb250ZW50OworCisJLyogd2ls bCBrZWVwIGluIG1lbW9yeSA0IGVudHJpZXMgb2YgNCBieXRlcyBlYWNoICovCisJbGlzdF9zaXpl ID0gKGJ1cy0+Y21uLmVudHJpZXNfc2l6ZSAqIDQgKiA0KTsKKworCWluX2xvZyA9IChidXMtPmNt bi5lbmFibGVfbWFzayAmIERQVV9EQkdfRFVNUF9JTl9MT0cpOworCWluX21lbSA9IChidXMtPmNt bi5lbmFibGVfbWFzayAmIERQVV9EQkdfRFVNUF9JTl9NRU0pOworCisJaWYgKCFpbl9sb2cgJiYg IWluX21lbSkKKwkJcmV0dXJuOworCisJZGV2X2luZm8oZHB1X2RiZ19iYXNlLmRldiwgIj09PT09 PT09IHN0YXJ0ICVzIGR1bXAgPT09PT09PT09XG4iLAorCQkJYnVzLT5jbW4ubmFtZSk7CisKKwlp ZiAoaW5fbWVtKSB7CisJCWlmICghKCpkdW1wX21lbSkpCisJCQkqZHVtcF9tZW0gPSBkbWFfYWxs b2NfY29oZXJlbnQoZHB1X2RiZ19iYXNlLmRldiwKKwkJCQlsaXN0X3NpemUsICZwaHlzLCBHRlBf S0VSTkVMKTsKKworCQlpZiAoKmR1bXBfbWVtKSB7CisJCQlkdW1wX2FkZHIgPSAqZHVtcF9tZW07 CisJCQlkZXZfaW5mbyhkcHVfZGJnX2Jhc2UuZGV2LAorCQkJCSIlczogc3RhcnRfYWRkcjoweCVw SyBsZW46MHgleFxuIiwKKwkJCQlfX2Z1bmNfXywgZHVtcF9hZGRyLCBsaXN0X3NpemUpOworCQl9 IGVsc2UgeworCQkJaW5fbWVtID0gZmFsc2U7CisJCQlwcl9lcnIoImR1bXBfbWVtOiBhbGxvY2F0 aW9uIGZhaWxzXG4iKTsKKwkJfQorCX0KKworCV9kcHVfZGJnX2VuYWJsZV9wb3dlcih0cnVlKTsK Kwlmb3IgKGkgPSAwOyBpIDwgYnVzLT5jbW4uZW50cmllc19zaXplOyBpKyspIHsKKwkJaGVhZCA9 IGJ1cy0+ZW50cmllcyArIGk7CisJCXdyaXRlbF9yZWxheGVkKFRFU1RfTUFTSyhoZWFkLT5ibG9j a19pZCwgaGVhZC0+dGVzdF9pZCksCisJCQkJbWVtX2Jhc2UgKyBoZWFkLT53cl9hZGRyKTsKKwkJ d21iKCk7IC8qIG1ha2Ugc3VyZSB0ZXN0IGJpdHMgd2VyZSB3cml0dGVuICovCisKKwkJaWYgKGJ1 cy0+Y21uLmZsYWdzICYgREJHQlVTX0ZMQUdTX0RTUFApIHsKKwkJCW9mZnNldCA9IERCR0JVU19E U1BQX1NUQVRVUzsKKwkJCS8qIGtlZXAgRFNQUCB0ZXN0IHBvaW50IGVuYWJsZWQgKi8KKwkJCWlm IChoZWFkLT53cl9hZGRyICE9IERCR0JVU19EU1BQKQorCQkJCXdyaXRlbF9yZWxheGVkKDB4Riwg bWVtX2Jhc2UgKyBEQkdCVVNfRFNQUCk7CisJCX0gZWxzZSB7CisJCQlvZmZzZXQgPSBoZWFkLT53 cl9hZGRyICsgMHg0OworCQl9CisKKwkJc3RhdHVzID0gcmVhZGxfcmVsYXhlZChtZW1fYmFzZSAr IG9mZnNldCk7CisKKwkJaWYgKGluX2xvZykKKwkJCWRldl9pbmZvKGRwdV9kYmdfYmFzZS5kZXYs CisJCQkJCSJ3YWRkcj0weCV4IGJsaz0lZCB0c3Q9JWQgdmFsPTB4JXhcbiIsCisJCQkJCWhlYWQt PndyX2FkZHIsIGhlYWQtPmJsb2NrX2lkLAorCQkJCQloZWFkLT50ZXN0X2lkLCBzdGF0dXMpOwor CisJCWlmIChkdW1wX2FkZHIgJiYgaW5fbWVtKSB7CisJCQlkdW1wX2FkZHJbaSo0XSAgICAgPSBo ZWFkLT53cl9hZGRyOworCQkJZHVtcF9hZGRyW2kqNCArIDFdID0gaGVhZC0+YmxvY2tfaWQ7CisJ CQlkdW1wX2FkZHJbaSo0ICsgMl0gPSBoZWFkLT50ZXN0X2lkOworCQkJZHVtcF9hZGRyW2kqNCAr IDNdID0gc3RhdHVzOworCQl9CisKKwkJaWYgKGhlYWQtPmFuYWx5emVyKQorCQkJaGVhZC0+YW5h bHl6ZXIobWVtX2Jhc2UsIGhlYWQsIHN0YXR1cyk7CisKKwkJLyogRGlzYWJsZSBkZWJ1ZyBidXMg b25jZSB3ZSBhcmUgZG9uZSAqLworCQl3cml0ZWxfcmVsYXhlZCgwLCBtZW1fYmFzZSArIGhlYWQt PndyX2FkZHIpOworCQlpZiAoYnVzLT5jbW4uZmxhZ3MgJiBEQkdCVVNfRkxBR1NfRFNQUCAmJgor CQkJCQkJaGVhZC0+d3JfYWRkciAhPSBEQkdCVVNfRFNQUCkKKwkJCXdyaXRlbF9yZWxheGVkKDB4 MCwgbWVtX2Jhc2UgKyBEQkdCVVNfRFNQUCk7CisJfQorCV9kcHVfZGJnX2VuYWJsZV9wb3dlcihm YWxzZSk7CisKKwlkZXZfaW5mbyhkcHVfZGJnX2Jhc2UuZGV2LCAiPT09PT09PT0gZW5kICVzIGR1 bXAgPT09PT09PT09XG4iLAorCQkJYnVzLT5jbW4ubmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9k cHVfZGJnX2R1bXBfdmJpZl9kZWJ1Z19idXNfZW50cnkoCisJCXN0cnVjdCB2YmlmX2RlYnVnX2J1 c19lbnRyeSAqaGVhZCwgdm9pZCBfX2lvbWVtICptZW1fYmFzZSwKKwkJdTMyICpkdW1wX2FkZHIs IGJvb2wgaW5fbG9nKQoreworCWludCBpLCBqOworCXUzMiB2YWw7CisKKwlpZiAoIWR1bXBfYWRk ciAmJiAhaW5fbG9nKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgaGVhZC0+YmxvY2tf Y250OyBpKyspIHsKKwkJd3JpdGVsX3JlbGF4ZWQoMSA8PCAoaSArIGhlYWQtPmJpdF9vZmZzZXQp LAorCQkJCW1lbV9iYXNlICsgaGVhZC0+YmxvY2tfYnVzX2FkZHIpOworCQkvKiBtYWtlIHN1cmUg dGhhdCBjdXJyZW50IGJ1cyBibGNvayBlbmFibGUgKi8KKwkJd21iKCk7CisJCWZvciAoaiA9IGhl YWQtPnRlc3RfcG50X3N0YXJ0OyBqIDwgaGVhZC0+dGVzdF9wbnRfY250OyBqKyspIHsKKwkJCXdy aXRlbF9yZWxheGVkKGosIG1lbV9iYXNlICsgaGVhZC0+YmxvY2tfYnVzX2FkZHIgKyA0KTsKKwkJ CS8qIG1ha2Ugc3VyZSB0aGF0IHRlc3QgcG9pbnQgaXMgZW5hYmxlZCAqLworCQkJd21iKCk7CisJ CQl2YWwgPSByZWFkbF9yZWxheGVkKG1lbV9iYXNlICsgTU1TU19WQklGX1RFU1RfQlVTX09VVCk7 CisJCQlpZiAoZHVtcF9hZGRyKSB7CisJCQkJKmR1bXBfYWRkcisrID0gaGVhZC0+YmxvY2tfYnVz X2FkZHI7CisJCQkJKmR1bXBfYWRkcisrID0gaTsKKwkJCQkqZHVtcF9hZGRyKysgPSBqOworCQkJ CSpkdW1wX2FkZHIrKyA9IHZhbDsKKwkJCX0KKwkJCWlmIChpbl9sb2cpCisJCQkJZGV2X2luZm8o ZHB1X2RiZ19iYXNlLmRldiwKKwkJCQkJInRlc3Rwb2ludDoleCBhcmIveGluIGlkPSVkIGluZGV4 PSVkIHZhbD0weCV4XG4iLAorCQkJCQloZWFkLT5ibG9ja19idXNfYWRkciwgaSwgaiwgdmFsKTsK KwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgX2RwdV9kYmdfZHVtcF92YmlmX2RiZ19idXMoc3Ry dWN0IGRwdV9kYmdfdmJpZl9kZWJ1Z19idXMgKmJ1cykKK3sKKwlib29sIGluX2xvZywgaW5fbWVt OworCXUzMiAqKmR1bXBfbWVtID0gTlVMTDsKKwl1MzIgKmR1bXBfYWRkciA9IE5VTEw7CisJdTMy IHZhbHVlLCBkMCwgZDE7CisJdW5zaWduZWQgbG9uZyByZWcsIHJlZzEsIHJlZzI7CisJc3RydWN0 IHZiaWZfZGVidWdfYnVzX2VudHJ5ICpoZWFkOworCXBoeXNfYWRkcl90IHBoeXMgPSAwOworCWlu dCBpLCBsaXN0X3NpemUgPSAwOworCXZvaWQgX19pb21lbSAqbWVtX2Jhc2UgPSBOVUxMOworCXN0 cnVjdCB2YmlmX2RlYnVnX2J1c19lbnRyeSAqZGJnX2J1czsKKwl1MzIgYnVzX3NpemU7CisJc3Ry dWN0IGRwdV9kYmdfcmVnX2Jhc2UgKnJlZ19iYXNlOworCisJaWYgKCFidXMgfHwgIWJ1cy0+Y21u LmVudHJpZXNfc2l6ZSkKKwkJcmV0dXJuOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZWdfYmFz ZSwgJmRwdV9kYmdfYmFzZS5yZWdfYmFzZV9saXN0LAorCQkJcmVnX2Jhc2VfaGVhZCkKKwkJaWYg KHN0cmxlbihyZWdfYmFzZS0+bmFtZSkgJiYKKwkJCSFzdHJjbXAocmVnX2Jhc2UtPm5hbWUsIGJ1 cy0+Y21uLm5hbWUpKQorCQkJbWVtX2Jhc2UgPSByZWdfYmFzZS0+YmFzZTsKKworCWlmICghbWVt X2Jhc2UpIHsKKwkJcHJfZXJyKCJ1bmFibGUgdG8gZmluZCBtZW1fYmFzZSBmb3IgJXNcbiIsIGJ1 cy0+Y21uLm5hbWUpOworCQlyZXR1cm47CisJfQorCisJZGJnX2J1cyA9IGJ1cy0+ZW50cmllczsK KwlidXNfc2l6ZSA9IGJ1cy0+Y21uLmVudHJpZXNfc2l6ZTsKKwlsaXN0X3NpemUgPSBidXMtPmNt bi5lbnRyaWVzX3NpemU7CisJZHVtcF9tZW0gPSAmYnVzLT5jbW4uZHVtcGVkX2NvbnRlbnQ7CisK KwlkZXZfaW5mbyhkcHVfZGJnX2Jhc2UuZGV2LCAiPT09PT09PT0gc3RhcnQgJXMgZHVtcCA9PT09 PT09PT1cbiIsCisJCQlidXMtPmNtbi5uYW1lKTsKKworCWlmICghZHVtcF9tZW0gfHwgIWRiZ19i dXMgfHwgIWJ1c19zaXplIHx8ICFsaXN0X3NpemUpCisJCXJldHVybjsKKworCS8qIGFsbG9jYXRl IG1lbW9yeSBmb3IgZWFjaCB0ZXN0IHBvaW50ICovCisJZm9yIChpID0gMDsgaSA8IGJ1c19zaXpl OyBpKyspIHsKKwkJaGVhZCA9IGRiZ19idXMgKyBpOworCQlsaXN0X3NpemUgKz0gKGhlYWQtPmJs b2NrX2NudCAqIGhlYWQtPnRlc3RfcG50X2NudCk7CisJfQorCisJLyogNCBieXRlcyAqIDQgZW50 cmllcyBmb3IgZWFjaCB0ZXN0IHBvaW50Ki8KKwlsaXN0X3NpemUgKj0gMTY7CisKKwlpbl9sb2cg PSAoYnVzLT5jbW4uZW5hYmxlX21hc2sgJiBEUFVfREJHX0RVTVBfSU5fTE9HKTsKKwlpbl9tZW0g PSAoYnVzLT5jbW4uZW5hYmxlX21hc2sgJiBEUFVfREJHX0RVTVBfSU5fTUVNKTsKKworCWlmICgh aW5fbG9nICYmICFpbl9tZW0pCisJCXJldHVybjsKKworCWlmIChpbl9tZW0pIHsKKwkJaWYgKCEo KmR1bXBfbWVtKSkKKwkJCSpkdW1wX21lbSA9IGRtYV9hbGxvY19jb2hlcmVudChkcHVfZGJnX2Jh c2UuZGV2LAorCQkJCWxpc3Rfc2l6ZSwgJnBoeXMsIEdGUF9LRVJORUwpOworCisJCWlmICgqZHVt cF9tZW0pIHsKKwkJCWR1bXBfYWRkciA9ICpkdW1wX21lbTsKKwkJCWRldl9pbmZvKGRwdV9kYmdf YmFzZS5kZXYsCisJCQkJIiVzOiBzdGFydF9hZGRyOjB4JXBLIGxlbjoweCV4XG4iLAorCQkJCV9f ZnVuY19fLCBkdW1wX2FkZHIsIGxpc3Rfc2l6ZSk7CisJCX0gZWxzZSB7CisJCQlpbl9tZW0gPSBm YWxzZTsKKwkJCXByX2VycigiZHVtcF9tZW06IGFsbG9jYXRpb24gZmFpbHNcbiIpOworCQl9CisJ fQorCisJX2RwdV9kYmdfZW5hYmxlX3Bvd2VyKHRydWUpOworCisJdmFsdWUgPSByZWFkbF9yZWxh eGVkKG1lbV9iYXNlICsgTU1TU19WQklGX0NMS09OKTsKKwl3cml0ZWxfcmVsYXhlZCh2YWx1ZSB8 IEJJVCgxKSwgbWVtX2Jhc2UgKyBNTVNTX1ZCSUZfQ0xLT04pOworCisJLyogbWFrZSBzdXJlIHRo YXQgdmJpZiBjb3JlIGlzIG9uICovCisJd21iKCk7CisKKwkvKioKKwkgKiBFeHRyYWN0IFZCSUYg ZXJyb3IgaW5mbyBiYXNlZCBvbiBYSU4gaGFsdCBhbmQgZXJyb3Igc3RhdHVzLgorCSAqIElmIHRo ZSBYSU4gY2xpZW50IGlzIG5vdCBpbiBIQUxUIHN0YXRlLCBvciBhbiBlcnJvciBpcyBkZXRlY3Rl ZCwKKwkgKiB0aGVuIHJldHJpZXZlIHRoZSBWQklGIGVycm9yIGluZm8gZm9yIGl0LgorCSAqLwor CXJlZyA9IHJlYWRsX3JlbGF4ZWQobWVtX2Jhc2UgKyBNTVNTX1ZCSUZfWElOX0hBTFRfQ1RSTDEp OworCXJlZzEgPSByZWFkbF9yZWxheGVkKG1lbV9iYXNlICsgTU1TU19WQklGX1BORF9FUlIpOwor CXJlZzIgPSByZWFkbF9yZWxheGVkKG1lbV9iYXNlICsgTU1TU19WQklGX1NSQ19FUlIpOworCWRl dl9lcnIoZHB1X2RiZ19iYXNlLmRldiwKKwkJCSJYSU4gSEFMVDoweCVsWCwgUE5EIEVSUjoweCVs WCwgU1JDIEVSUjoweCVsWFxuIiwKKwkJCXJlZywgcmVnMSwgcmVnMik7CisJcmVnID4+PSAxNjsK KwlyZWcgJj0gfihyZWcxIHwgcmVnMik7CisJZm9yIChpID0gMDsgaSA8IE1NU1NfVkJJRl9DTElF TlRfTlVNOyBpKyspIHsKKwkJaWYgKCF0ZXN0X2JpdCgwLCAmcmVnKSkgeworCQkJd3JpdGVsX3Jl bGF4ZWQoaSwgbWVtX2Jhc2UgKyBNTVNTX1ZCSUZfRVJSX0lORk8pOworCQkJLyogbWFrZSBzdXJl IHJlZyB3cml0ZSBnb2VzIHRocm91Z2ggKi8KKwkJCXdtYigpOworCisJCQlkMCA9IHJlYWRsX3Jl bGF4ZWQobWVtX2Jhc2UgKyBNTVNTX1ZCSUZfRVJSX0lORk8pOworCQkJZDEgPSByZWFkbF9yZWxh eGVkKG1lbV9iYXNlICsgTU1TU19WQklGX0VSUl9JTkZPXzEpOworCisJCQlkZXZfZXJyKGRwdV9k YmdfYmFzZS5kZXYsCisJCQkJCSJDbGllbnQ6JWQsIGVycmluZm89MHglWCwgZXJyaW5mbzE9MHgl WFxuIiwKKwkJCQkJaSwgZDAsIGQxKTsKKwkJfQorCQlyZWcgPj49IDE7CisJfQorCisJZm9yIChp ID0gMDsgaSA8IGJ1c19zaXplOyBpKyspIHsKKwkJaGVhZCA9IGRiZ19idXMgKyBpOworCisJCXdy aXRlbF9yZWxheGVkKDAsIG1lbV9iYXNlICsgaGVhZC0+ZGlzYWJsZV9idXNfYWRkcik7CisJCXdy aXRlbF9yZWxheGVkKEJJVCgwKSwgbWVtX2Jhc2UgKyBNTVNTX1ZCSUZfVEVTVF9CVVNfT1VUX0NU UkwpOworCQkvKiBtYWtlIHN1cmUgdGhhdCBvdGhlciBidXMgaXMgb2ZmICovCisJCXdtYigpOwor CisJCV9kcHVfZGJnX2R1bXBfdmJpZl9kZWJ1Z19idXNfZW50cnkoaGVhZCwgbWVtX2Jhc2UsIGR1 bXBfYWRkciwKKwkJCQlpbl9sb2cpOworCQlpZiAoZHVtcF9hZGRyKQorCQkJZHVtcF9hZGRyICs9 IChoZWFkLT5ibG9ja19jbnQgKiBoZWFkLT50ZXN0X3BudF9jbnQgKiA0KTsKKwl9CisKKwlfZHB1 X2RiZ19lbmFibGVfcG93ZXIoZmFsc2UpOworCisJZGV2X2luZm8oZHB1X2RiZ19iYXNlLmRldiwg Ij09PT09PT09IGVuZCAlcyBkdW1wID09PT09PT09PVxuIiwKKwkJCWJ1cy0+Y21uLm5hbWUpOwor fQorCisvKioKKyAqIF9kcHVfZHVtcF9hcnJheSAtIGR1bXAgYXJyYXkgb2YgcmVnaXN0ZXIgYmFz ZXMKKyAqIEBuYW1lOiBzdHJpbmcgaW5kaWNhdGluZyBvcmlnaW4gb2YgZHVtcAorICogQGR1bXBf ZGJnYnVzX2RwdTogd2hldGhlciB0byBkdW1wIHRoZSBkcHUgZGVidWcgYnVzCisgKiBAZHVtcF9k YmdidXNfdmJpZl9ydDogd2hldGhlciB0byBkdW1wIHRoZSB2YmlmIHJ0IGRlYnVnIGJ1cworICov CitzdGF0aWMgdm9pZCBfZHB1X2R1bXBfYXJyYXkoY29uc3QgY2hhciAqbmFtZSwgYm9vbCBkdW1w X2RiZ2J1c19kcHUsCisJCQkgICAgYm9vbCBkdW1wX2RiZ2J1c192YmlmX3J0KQoreworCWlmIChk dW1wX2RiZ2J1c19kcHUpCisJCV9kcHVfZGJnX2R1bXBfZHB1X2RiZ19idXMoJmRwdV9kYmdfYmFz ZS5kYmdidXNfZHB1KTsKKworCWlmIChkdW1wX2RiZ2J1c192YmlmX3J0KQorCQlfZHB1X2RiZ19k dW1wX3ZiaWZfZGJnX2J1cygmZHB1X2RiZ19iYXNlLmRiZ2J1c192YmlmX3J0KTsKK30KKworLyoq CisgKiBfZHB1X2R1bXBfd29yayAtIGRlZmVycmVkIGR1bXAgd29yayBmdW5jdGlvbgorICogQHdv cms6IHdvcmsgc3RydWN0dXJlCisgKi8KK3N0YXRpYyB2b2lkIF9kcHVfZHVtcF93b3JrKHN0cnVj dCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlfZHB1X2R1bXBfYXJyYXkoImRwdWR1bXBfd29ya2l0 ZW0iLAorCQlkcHVfZGJnX2Jhc2UuZGJnYnVzX2RwdS5jbW4uaW5jbHVkZV9pbl9kZWZlcnJlZF93 b3JrLAorCQlkcHVfZGJnX2Jhc2UuZGJnYnVzX3ZiaWZfcnQuY21uLmluY2x1ZGVfaW5fZGVmZXJy ZWRfd29yayk7Cit9CisKK3ZvaWQgZHB1X2RiZ19kdW1wKGJvb2wgcXVldWVfd29yaywgY29uc3Qg Y2hhciAqbmFtZSwgYm9vbCBkdW1wX2RiZ2J1c19kcHUsCisJCSAgYm9vbCBkdW1wX2RiZ2J1c192 YmlmX3J0KQoreworCWlmIChxdWV1ZV93b3JrICYmIHdvcmtfcGVuZGluZygmZHB1X2RiZ19iYXNl LmR1bXBfd29yaykpCisJCXJldHVybjsKKworCWlmICghcXVldWVfd29yaykgeworCQlfZHB1X2R1 bXBfYXJyYXkobmFtZSwgZHVtcF9kYmdidXNfZHB1LCBkdW1wX2RiZ2J1c192YmlmX3J0KTsKKwkJ cmV0dXJuOworCX0KKworCS8qIHNjaGVkdWxlIHdvcmsgdG8gZHVtcCBsYXRlciAqLworCWRwdV9k YmdfYmFzZS5kYmdidXNfZHB1LmNtbi5pbmNsdWRlX2luX2RlZmVycmVkX3dvcmsgPSBkdW1wX2Ri Z2J1c19kcHU7CisJZHB1X2RiZ19iYXNlLmRiZ2J1c192YmlmX3J0LmNtbi5pbmNsdWRlX2luX2Rl ZmVycmVkX3dvcmsgPQorCQkJZHVtcF9kYmdidXNfdmJpZl9ydDsKKwlzY2hlZHVsZV93b3JrKCZk cHVfZGJnX2Jhc2UuZHVtcF93b3JrKTsKK30KKworLyoKKyAqIGRwdV9kYmdfZGVidWdmc19vcGVu IC0gZGVidWdmcyBvcGVuIGhhbmRsZXIgZm9yIGRlYnVnIGR1bXAKKyAqIEBpbm9kZTogZGVidWdm cyBpbm9kZQorICogQGZpbGU6IGZpbGUgaGFuZGxlCisgKi8KK3N0YXRpYyBpbnQgZHB1X2RiZ19k ZWJ1Z2ZzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJ Lyogbm9uLXNlZWthYmxlICovCisJZmlsZS0+Zl9tb2RlICY9IH4oRk1PREVfTFNFRUsgfCBGTU9E RV9QUkVBRCB8IEZNT0RFX1BXUklURSk7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gaW5vZGUtPmlf cHJpdmF0ZTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBkcHVfZGJnX2R1bXBfd3JpdGUgLSBk ZWJ1Z2ZzIHdyaXRlIGhhbmRsZXIgZm9yIGRlYnVnIGR1bXAKKyAqIEBmaWxlOiBmaWxlIGhhbmRs ZXIKKyAqIEB1c2VyX2J1ZjogdXNlciBidWZmZXIgY29udGVudCBmcm9tIGRlYnVnZnMKKyAqIEBj b3VudDogc2l6ZSBvZiB1c2VyIGJ1ZmZlcgorICogQHBwb3M6IHBvc2l0aW9uIG9mZnNldCBvZiB1 c2VyIGJ1ZmZlcgorICovCitzdGF0aWMgc3NpemVfdCBkcHVfZGJnX2R1bXBfd3JpdGUoc3RydWN0 IGZpbGUgKmZpbGUsCisJY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLCBzaXplX3QgY291bnQs IGxvZmZfdCAqcHBvcykKK3sKKwlfZHB1X2R1bXBfYXJyYXkoImR1bXBfZGVidWdmcyIsIHRydWUs IHRydWUpOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29w ZXJhdGlvbnMgZHB1X2RiZ19kdW1wX2ZvcHMgPSB7CisJLm9wZW4gPSBkcHVfZGJnX2RlYnVnZnNf b3BlbiwKKwkud3JpdGUgPSBkcHVfZGJnX2R1bXBfd3JpdGUsCit9OworCitpbnQgZHB1X2RiZ19k ZWJ1Z2ZzX3JlZ2lzdGVyKHN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcm9vdCkKK3sKKwlzdGF0aWMg c3RydWN0IGRwdV9kYmdfYmFzZSAqZGJnID0gJmRwdV9kYmdfYmFzZTsKKwljaGFyIGRlYnVnX25h bWVbODBdID0gIiI7CisKKwlpZiAoIWRlYnVnZnNfcm9vdCkKKwkJcmV0dXJuIC1FSU5WQUw7CisK KwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJkdW1wIiwgMDYwMCwgZGVidWdmc19yb290LCBOVUxMLAor CQkJJmRwdV9kYmdfZHVtcF9mb3BzKTsKKworCWlmIChkYmctPmRiZ2J1c19kcHUuZW50cmllcykg eworCQlkYmctPmRiZ2J1c19kcHUuY21uLm5hbWUgPSBEQkdCVVNfTkFNRV9EUFU7CisJCXNucHJp bnRmKGRlYnVnX25hbWUsIHNpemVvZihkZWJ1Z19uYW1lKSwgIiVzX2RiZ2J1cyIsCisJCQkJZGJn LT5kYmdidXNfZHB1LmNtbi5uYW1lKTsKKwkJZGJnLT5kYmdidXNfZHB1LmNtbi5lbmFibGVfbWFz ayA9IERFRkFVTFRfREJHQlVTX0RQVTsKKwkJZGVidWdmc19jcmVhdGVfdTMyKGRlYnVnX25hbWUs IDA2MDAsIGRlYnVnZnNfcm9vdCwKKwkJCQkmZGJnLT5kYmdidXNfZHB1LmNtbi5lbmFibGVfbWFz ayk7CisJfQorCisJaWYgKGRiZy0+ZGJnYnVzX3ZiaWZfcnQuZW50cmllcykgeworCQlkYmctPmRi Z2J1c192YmlmX3J0LmNtbi5uYW1lID0gREJHQlVTX05BTUVfVkJJRl9SVDsKKwkJc25wcmludGYo ZGVidWdfbmFtZSwgc2l6ZW9mKGRlYnVnX25hbWUpLCAiJXNfZGJnYnVzIiwKKwkJCQlkYmctPmRi Z2J1c192YmlmX3J0LmNtbi5uYW1lKTsKKwkJZGJnLT5kYmdidXNfdmJpZl9ydC5jbW4uZW5hYmxl X21hc2sgPSBERUZBVUxUX0RCR0JVU19WQklGUlQ7CisJCWRlYnVnZnNfY3JlYXRlX3UzMihkZWJ1 Z19uYW1lLCAwNjAwLCBkZWJ1Z2ZzX3Jvb3QsCisJCQkJJmRiZy0+ZGJnYnVzX3ZiaWZfcnQuY21u LmVuYWJsZV9tYXNrKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX2RwdV9k YmdfZGVidWdmc19kZXN0cm95KHZvaWQpCit7Cit9CisKK3ZvaWQgZHB1X2RiZ19pbml0X2RiZ19i dXNlcyh1MzIgaHd2ZXJzaW9uKQoreworCXN0YXRpYyBzdHJ1Y3QgZHB1X2RiZ19iYXNlICpkYmcg PSAmZHB1X2RiZ19iYXNlOworCisJbWVtc2V0KCZkYmctPmRiZ2J1c19kcHUsIDAsIHNpemVvZihk YmctPmRiZ2J1c19kcHUpKTsKKwltZW1zZXQoJmRiZy0+ZGJnYnVzX3ZiaWZfcnQsIDAsIHNpemVv ZihkYmctPmRiZ2J1c192YmlmX3J0KSk7CisKKwlpZiAoSVNfTVNNODk5OF9UQVJHRVQoaHd2ZXJz aW9uKSkgeworCQlkYmctPmRiZ2J1c19kcHUuZW50cmllcyA9IGRiZ19idXNfZHB1Xzg5OTg7CisJ CWRiZy0+ZGJnYnVzX2RwdS5jbW4uZW50cmllc19zaXplID0gQVJSQVlfU0laRShkYmdfYnVzX2Rw dV84OTk4KTsKKwkJZGJnLT5kYmdidXNfZHB1LmNtbi5mbGFncyA9IERCR0JVU19GTEFHU19EU1BQ OworCisJCWRiZy0+ZGJnYnVzX3ZiaWZfcnQuZW50cmllcyA9IHZiaWZfZGJnX2J1c19tc204OTk4 OworCQlkYmctPmRiZ2J1c192YmlmX3J0LmNtbi5lbnRyaWVzX3NpemUgPQorCQkJCUFSUkFZX1NJ WkUodmJpZl9kYmdfYnVzX21zbTg5OTgpOworCX0gZWxzZSBpZiAoSVNfU0RNODQ1X1RBUkdFVCho d3ZlcnNpb24pIHx8IElTX1NETTY3MF9UQVJHRVQoaHd2ZXJzaW9uKSkgeworCQlkYmctPmRiZ2J1 c19kcHUuZW50cmllcyA9IGRiZ19idXNfZHB1X3NkbTg0NTsKKwkJZGJnLT5kYmdidXNfZHB1LmNt bi5lbnRyaWVzX3NpemUgPQorCQkJCUFSUkFZX1NJWkUoZGJnX2J1c19kcHVfc2RtODQ1KTsKKwkJ ZGJnLT5kYmdidXNfZHB1LmNtbi5mbGFncyA9IERCR0JVU19GTEFHU19EU1BQOworCisJCS8qIHZi aWYgaXMgdW5jaGFuZ2VkIHZzIDg5OTggKi8KKwkJZGJnLT5kYmdidXNfdmJpZl9ydC5lbnRyaWVz ID0gdmJpZl9kYmdfYnVzX21zbTg5OTg7CisJCWRiZy0+ZGJnYnVzX3ZiaWZfcnQuY21uLmVudHJp ZXNfc2l6ZSA9CisJCQkJQVJSQVlfU0laRSh2YmlmX2RiZ19idXNfbXNtODk5OCk7CisJfSBlbHNl IHsKKwkJcHJfZXJyKCJ1bnN1cHBvcnRlZCBjaGlwc2V0IGlkICVYXG4iLCBod3ZlcnNpb24pOwor CX0KK30KKworaW50IGRwdV9kYmdfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaWYgKCFk ZXYpIHsKKwkJcHJfZXJyKCJpbnZhbGlkIHBhcmFtc1xuIik7CisJCXJldHVybiAtRUlOVkFMOwor CX0KKworCUlOSVRfTElTVF9IRUFEKCZkcHVfZGJnX2Jhc2UucmVnX2Jhc2VfbGlzdCk7CisJZHB1 X2RiZ19iYXNlLmRldiA9IGRldjsKKworCUlOSVRfV09SSygmZHB1X2RiZ19iYXNlLmR1bXBfd29y aywgX2RwdV9kdW1wX3dvcmspOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogZHB1X2RiZ19k ZXN0cm95IC0gZGVzdHJveSBkcHUgZGVidWcgZmFjaWxpdGllcworICovCit2b2lkIGRwdV9kYmdf ZGVzdHJveSh2b2lkKQoreworCV9kcHVfZGJnX2RlYnVnZnNfZGVzdHJveSgpOworfQorCit2b2lk IGRwdV9kYmdfc2V0X2RwdV90b3Bfb2Zmc2V0KHUzMiBibGtfb2ZmKQoreworCWRwdV9kYmdfYmFz ZS5kYmdidXNfZHB1LnRvcF9ibGtfb2ZmID0gYmxrX29mZjsKK30KZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9kYmcuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9kYmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MDAuLjFlNmZhOTQ1Zjk4YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9kYmcuaApAQCAtMCwwICsxLDEwMyBAQAorLyogQ29weXJpZ2h0IChjKSAy MDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK KyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCisgKi8KKworI2lmbmRlZiBEUFVfREJHX0hfCisjZGVmaW5lIERQVV9EQkdfSF8KKwor I2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRl IDxsaW51eC9saXN0Lmg+CisKK2VudW0gZHB1X2RiZ19kdW1wX2ZsYWcgeworCURQVV9EQkdfRFVN UF9JTl9MT0cgPSBCSVQoMCksCisJRFBVX0RCR19EVU1QX0lOX01FTSA9IEJJVCgxKSwKK307CisK KyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKKworLyoqCisgKiBkcHVfZGJnX2luaXRfZGJn X2J1c2VzIC0gaW5pdGlhbGl6ZSBkZWJ1ZyBidXMgZHVtcGluZyBzdXBwb3J0IGZvciB0aGUgY2hp cHNldAorICogQGh3dmVyc2lvbjoJCUNoaXBzZXQgcmV2aXNpb24KKyAqLwordm9pZCBkcHVfZGJn X2luaXRfZGJnX2J1c2VzKHUzMiBod3ZlcnNpb24pOworCisvKioKKyAqIGRwdV9kYmdfaW5pdCAt IGluaXRpYWxpemUgZ2xvYmFsIGRwdSBkZWJ1ZyBmYWNpbGl0aWVzOiByZWdkdW1wCisgKiBAZGV2 OgkJZGV2aWNlIGhhbmRsZQorICogUmV0dXJuczoJCTAgb3IgLUVSUk9SCisgKi8KK2ludCBkcHVf ZGJnX2luaXQoc3RydWN0IGRldmljZSAqZGV2KTsKKworLyoqCisgKiBkcHVfZGJnX2RlYnVnZnNf cmVnaXN0ZXIgLSByZWdpc3RlciBlbnRyaWVzIGF0IHRoZSBnaXZlbiBkZWJ1Z2ZzIGRpcgorICog QGRlYnVnZnNfcm9vdDoJZGVidWdmcyByb290IGluIHdoaWNoIHRvIGNyZWF0ZSBkcHUgZGVidWcg ZW50cmllcworICogUmV0dXJuczoJMCBvciAtRVJST1IKKyAqLworaW50IGRwdV9kYmdfZGVidWdm c19yZWdpc3RlcihzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3Jvb3QpOworCisvKioKKyAqIGRwdV9k YmdfZGVzdHJveSAtIGRlc3Ryb3kgdGhlIGdsb2JhbCBkcHUgZGVidWcgZmFjaWxpdGllcworICog UmV0dXJuczoJbm9uZQorICovCit2b2lkIGRwdV9kYmdfZGVzdHJveSh2b2lkKTsKKworLyoqCisg KiBkcHVfZGJnX2R1bXAgLSB0cmlnZ2VyIGR1bXBpbmcgb2YgYWxsIGRwdV9kYmcgZmFjaWxpdGll cworICogQHF1ZXVlX3dvcms6CSAgd2hldGhlciB0byBxdWV1ZSB0aGUgZHVtcGluZyB3b3JrIHRv IHRoZSB3b3JrX3N0cnVjdAorICogQG5hbWU6CSAgc3RyaW5nIGluZGljYXRpbmcgb3JpZ2luIG9m IGR1bXAKKyAqIEBkdW1wX2RiZ2J1czogIGR1bXAgdGhlIGRwdSBkZWJ1ZyBidXMKKyAqIEBkdW1w X3ZiaWZfcnQ6IGR1bXAgdGhlIHZiaWYgcnQgYnVzCisgKiBSZXR1cm5zOglub25lCisgKi8KK3Zv aWQgZHB1X2RiZ19kdW1wKGJvb2wgcXVldWVfd29yaywgY29uc3QgY2hhciAqbmFtZSwgYm9vbCBk dW1wX2RiZ2J1c19kcHUsCisJCSAgYm9vbCBkdW1wX2RiZ2J1c192YmlmX3J0KTsKKworLyoqCisg KiBkcHVfZGJnX3NldF9kcHVfdG9wX29mZnNldCAtIHNldCB0aGUgdGFyZ2V0IHNwZWNpZmljIG9m ZnNldCBmcm9tIG1kc3MgYmFzZQorICoJYWRkcmVzcyBvZiB0aGUgdG9wIHJlZ2lzdGVycy4gVXNl ZCBmb3IgYWNjZXNzaW5nIGRlYnVnIGJ1cyBjb250cm9scy4KKyAqIEBibGtfb2ZmOiBvZmZzZXQg ZnJvbSBtZHNzIGJhc2Ugb2YgdGhlIHRvcCBibG9jaworICovCit2b2lkIGRwdV9kYmdfc2V0X2Rw dV90b3Bfb2Zmc2V0KHUzMiBibGtfb2ZmKTsKKworI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lk IGRwdV9kYmdfaW5pdF9kYmdfYnVzZXModTMyIGh3dmVyc2lvbikKK3sKK30KKworc3RhdGljIGlu bGluZSBpbnQgZHB1X2RiZ19pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGlubGluZSBpbnQgZHB1X2RiZ19kZWJ1Z2ZzX3JlZ2lzdGVyKHN0cnVjdCBk ZW50cnkgKmRlYnVnZnNfcm9vdCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2 b2lkIGRwdV9kYmdfZGVzdHJveSh2b2lkKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZHB1 X2RiZ19kdW1wKGJvb2wgcXVldWVfd29yaywgY29uc3QgY2hhciAqbmFtZSwKKwkJCQlib29sIGR1 bXBfZGJnYnVzX2RwdSwgYm9vbCBkdW1wX2RiZ2J1c192YmlmX3J0KQoreworfQorCitzdGF0aWMg aW5saW5lIHZvaWQgZHB1X2RiZ19zZXRfZHB1X3RvcF9vZmZzZXQodTMyIGJsa19vZmYpCit7Cit9 CisKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykgKi8KKworCisjZW5kaWYgLyog RFBVX0RCR19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X2VuY29kZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVy LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5jZTRmYWVlMTJhZGMK LS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5j b2Rlci5jCkBAIC0wLDAgKzEsMjU3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4 LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo dCAoQykgMjAxMyBSZWQgSGF0CisgKiBBdXRob3I6IFJvYiBDbGFyayA8cm9iZGNsYXJrQGdtYWls LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5CisgKiB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAor ICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVS Q0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisg KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUg PGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNkZWZpbmUgcHJfZm10KGZt dCkJIltkcm06JXM6JWRdICIgZm10LCBfX2Z1bmNfXywgX19MSU5FX18KKyNpbmNsdWRlIDxsaW51 eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4 L3NlcV9maWxlLmg+CisKKyNpbmNsdWRlICJtc21fZHJ2LmgiCisjaW5jbHVkZSAiZHB1X2ttcy5o IgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxw ZXIuaD4KKyNpbmNsdWRlICJkcHVfaHdpby5oIgorI2luY2x1ZGUgImRwdV9od19jYXRhbG9nLmgi CisjaW5jbHVkZSAiZHB1X2h3X2ludGYuaCIKKyNpbmNsdWRlICJkcHVfaHdfY3RsLmgiCisjaW5j bHVkZSAiZHB1X2Zvcm1hdHMuaCIKKyNpbmNsdWRlICJkcHVfZW5jb2Rlcl9waHlzLmgiCisjaW5j bHVkZSAiZHB1X2NydGMuaCIKKyNpbmNsdWRlICJkcHVfdHJhY2UuaCIKKyNpbmNsdWRlICJkcHVf Y29yZV9pcnEuaCIKKworI2RlZmluZSBEUFVfREVCVUdfRU5DKGUsIGZtdCwgLi4uKSBEUFVfREVC VUcoImVuYyVkICIgZm10LFwKKwkJKGUpID8gKGUpLT5iYXNlLmJhc2UuaWQgOiAtMSwgIyNfX1ZB X0FSR1NfXykKKworI2RlZmluZSBEUFVfRVJST1JfRU5DKGUsIGZtdCwgLi4uKSBEUFVfRVJST1Io ImVuYyVkICIgZm10LFwKKwkJKGUpID8gKGUpLT5iYXNlLmJhc2UuaWQgOiAtMSwgIyNfX1ZBX0FS R1NfXykKKworI2RlZmluZSBEUFVfREVCVUdfUEhZUyhwLCBmbXQsIC4uLikgRFBVX0RFQlVHKCJl bmMlZCBpbnRmJWQgcHAlZCAiIGZtdCxcCisJCShwKSA/IChwKS0+cGFyZW50LT5iYXNlLmlkIDog LTEsIFwKKwkJKHApID8gKHApLT5pbnRmX2lkeCAtIElOVEZfMCA6IC0xLCBcCisJCShwKSA/ICgo cCktPmh3X3BwID8gKHApLT5od19wcC0+aWR4IC0gUElOR1BPTkdfMCA6IC0xKSA6IC0xLCBcCisJ CSMjX19WQV9BUkdTX18pCisKKyNkZWZpbmUgRFBVX0VSUk9SX1BIWVMocCwgZm10LCAuLi4pIERQ VV9FUlJPUigiZW5jJWQgaW50ZiVkIHBwJWQgIiBmbXQsXAorCQkocCkgPyAocCktPnBhcmVudC0+ YmFzZS5pZCA6IC0xLCBcCisJCShwKSA/IChwKS0+aW50Zl9pZHggLSBJTlRGXzAgOiAtMSwgXAor CQkocCkgPyAoKHApLT5od19wcCA/IChwKS0+aHdfcHAtPmlkeCAtIFBJTkdQT05HXzAgOiAtMSkg OiAtMSwgXAorCQkjI19fVkFfQVJHU19fKQorCisvKgorICogVHdvIHRvIGFudGljaXBhdGUgcGFu ZWxzIHRoYXQgY2FuIGRvIGNtZC92aWQgZHluYW1pYyBzd2l0Y2hpbmcKKyAqIHBsYW4gaXMgdG8g Y3JlYXRlIGFsbCBwb3NzaWJsZSBwaHlzaWNhbCBlbmNvZGVyIHR5cGVzLCBhbmQgc3dpdGNoIGJl dHdlZW4KKyAqIHRoZW0gYXQgcnVudGltZQorICovCisjZGVmaW5lIE5VTV9QSFlTX0VOQ09ERVJf VFlQRVMgMgorCisjZGVmaW5lIE1BWF9QSFlTX0VOQ09ERVJTX1BFUl9WSVJUVUFMIFwKKwkoTUFY X0hfVElMRVNfUEVSX0RJU1BMQVkgKiBOVU1fUEhZU19FTkNPREVSX1RZUEVTKQorCisjZGVmaW5l IE1BWF9DSEFOTkVMU19QRVJfRU5DIDIKKworI2RlZmluZSBNSVNSX0JVRkZfU0laRQkJCTI1Ngor CisjZGVmaW5lIElETEVfU0hPUlRfVElNRU9VVAkxCisKKyNkZWZpbmUgTUFYX1ZESVNQTEFZX1NQ TElUIDEwODAKKworLyoqCisgKiBlbnVtIGRwdV9lbmNfcmNfZXZlbnRzIC0gZXZlbnRzIGZvciBy ZXNvdXJjZSBjb250cm9sIHN0YXRlIG1hY2hpbmUKKyAqIEBEUFVfRU5DX1JDX0VWRU5UX0tJQ0tP RkY6CisgKglUaGlzIGV2ZW50IGhhcHBlbnMgYXQgTk9STUFMIHByaW9yaXR5LgorICoJRXZlbnQg dGhhdCBzaWduYWxzIHRoZSBzdGFydCBvZiB0aGUgdHJhbnNmZXIuIFdoZW4gdGhpcyBldmVudCBp cworICoJcmVjZWl2ZWQsIGVuYWJsZSBNRFAvRFNJIGNvcmUgY2xvY2tzLiBSZWdhcmRsZXNzIG9m IHRoZSBwcmV2aW91cworICoJc3RhdGUsIHRoZSByZXNvdXJjZSBzaG91bGQgYmUgaW4gT04gc3Rh dGUgYXQgdGhlIGVuZCBvZiB0aGlzIGV2ZW50LgorICogQERQVV9FTkNfUkNfRVZFTlRfRlJBTUVf RE9ORToKKyAqCVRoaXMgZXZlbnQgaGFwcGVucyBhdCBJTlRFUlJVUFQgbGV2ZWwuCisgKglFdmVu dCBzaWduYWxzIHRoZSBlbmQgb2YgdGhlIGRhdGEgdHJhbnNmZXIgYWZ0ZXIgdGhlIFBQIEZSQU1F X0RPTkUKKyAqCWV2ZW50LiBBdCB0aGUgZW5kIG9mIHRoaXMgZXZlbnQsIGEgZGVsYXllZCB3b3Jr IGlzIHNjaGVkdWxlZCB0byBnbyB0bworICoJSURMRV9QQyBzdGF0ZSBhZnRlciBJRExFX1RJTUVP VVQgdGltZS4KKyAqIEBEUFVfRU5DX1JDX0VWRU5UX1BSRV9TVE9QOgorICoJVGhpcyBldmVudCBo YXBwZW5zIGF0IE5PUk1BTCBwcmlvcml0eS4KKyAqCVRoaXMgZXZlbnQsIHdoZW4gcmVjZWl2ZWQg ZHVyaW5nIHRoZSBPTiBzdGF0ZSwgbGVhdmUgdGhlIFJDIFNUQVRFCisgKglpbiB0aGUgUFJFX09G RiBzdGF0ZS4gSXQgc2hvdWxkIGJlIGZvbGxvd2VkIGJ5IHRoZSBTVE9QIGV2ZW50IGFzCisgKglw YXJ0IG9mIGVuY29kZXIgZGlzYWJsZS4KKyAqCUlmIHJlY2VpdmVkIGR1cmluZyBJRExFIG9yIE9G RiBzdGF0ZXMsIGl0IHdpbGwgZG8gbm90aGluZy4KKyAqIEBEUFVfRU5DX1JDX0VWRU5UX1NUT1A6 CisgKglUaGlzIGV2ZW50IGhhcHBlbnMgYXQgTk9STUFMIHByaW9yaXR5LgorICoJV2hlbiB0aGlz IGV2ZW50IGlzIHJlY2VpdmVkLCBkaXNhYmxlIGFsbCB0aGUgTURQL0RTSSBjb3JlIGNsb2Nrcywg YW5kCisgKglkaXNhYmxlIElSUXMuIEl0IHNob3VsZCBiZSBjYWxsZWQgZnJvbSB0aGUgUFJFX09G RiBvciBJRExFIHN0YXRlcy4KKyAqCUlETEUgaXMgZXhwZWN0ZWQgd2hlbiBJRExFX1BDIGhhcyBy dW4sIGFuZCBQUkVfT0ZGIGRpZCBub3RoaW5nLgorICoJUFJFX09GRiBpcyBleHBlY3RlZCB3aGVu IFBSRV9TVE9QIHdhcyBleGVjdXRlZCBkdXJpbmcgdGhlIE9OIHN0YXRlLgorICoJUmVzb3VyY2Ug c3RhdGUgc2hvdWxkIGJlIGluIE9GRiBhdCB0aGUgZW5kIG9mIHRoZSBldmVudC4KKyAqIEBEUFVf RU5DX1JDX0VWRU5UX0VOVEVSX0lETEU6CisgKglUaGlzIGV2ZW50IGhhcHBlbnMgYXQgTk9STUFM IHByaW9yaXR5IGZyb20gYSB3b3JrIGl0ZW0uCisgKglFdmVudCBzaWduYWxzIHRoYXQgdGhlcmUg d2VyZSBubyBmcmFtZSB1cGRhdGVzIGZvciBJRExFX1RJTUVPVVQgdGltZS4KKyAqCVRoaXMgd291 bGQgZGlzYWJsZSBNRFAvRFNJIGNvcmUgY2xvY2tzIGFuZCBjaGFuZ2UgdGhlIHJlc291cmNlIHN0 YXRlCisgKgl0byBJRExFLgorICovCitlbnVtIGRwdV9lbmNfcmNfZXZlbnRzIHsKKwlEUFVfRU5D X1JDX0VWRU5UX0tJQ0tPRkYgPSAxLAorCURQVV9FTkNfUkNfRVZFTlRfRlJBTUVfRE9ORSwKKwlE UFVfRU5DX1JDX0VWRU5UX1BSRV9TVE9QLAorCURQVV9FTkNfUkNfRVZFTlRfU1RPUCwKKwlEUFVf RU5DX1JDX0VWRU5UX0VOVEVSX0lETEUKK307CisKKy8qCisgKiBlbnVtIGRwdV9lbmNfcmNfc3Rh dGVzIC0gc3RhdGVzIHRoYXQgdGhlIHJlc291cmNlIGNvbnRyb2wgbWFpbnRhaW5zCisgKiBARFBV X0VOQ19SQ19TVEFURV9PRkY6IFJlc291cmNlIGlzIGluIE9GRiBzdGF0ZQorICogQERQVV9FTkNf UkNfU1RBVEVfUFJFX09GRjogUmVzb3VyY2UgaXMgdHJhbnNpdGlvbmluZyB0byBPRkYgc3RhdGUK KyAqIEBEUFVfRU5DX1JDX1NUQVRFX09OOiBSZXNvdXJjZSBpcyBpbiBPTiBzdGF0ZQorICogQERQ VV9FTkNfUkNfU1RBVEVfTU9ERVNFVDogUmVzb3VyY2UgaXMgaW4gbW9kZXNldCBzdGF0ZQorICog QERQVV9FTkNfUkNfU1RBVEVfSURMRTogUmVzb3VyY2UgaXMgaW4gSURMRSBzdGF0ZQorICovCitl bnVtIGRwdV9lbmNfcmNfc3RhdGVzIHsKKwlEUFVfRU5DX1JDX1NUQVRFX09GRiwKKwlEUFVfRU5D X1JDX1NUQVRFX1BSRV9PRkYsCisJRFBVX0VOQ19SQ19TVEFURV9PTiwKKwlEUFVfRU5DX1JDX1NU QVRFX0lETEUKK307CisKKy8qKgorICogc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgLSB2aXJ0dWFs IGVuY29kZXIuIENvbnRhaW5lciBvZiBvbmUgb3IgbW9yZSBwaHlzaWNhbAorICoJZW5jb2RlcnMu IFZpcnR1YWwgZW5jb2RlciBtYW5hZ2VzIG9uZSAibG9naWNhbCIgZGlzcGxheS4gUGh5c2ljYWwK KyAqCWVuY29kZXJzIG1hbmFnZSBvbmUgaW50ZiBibG9jaywgdGllZCB0byBhIHNwZWNpZmljIHBh bmVsL3N1Yi1wYW5lbC4KKyAqCVZpcnR1YWwgZW5jb2RlciBkZWZlcnMgYXMgbXVjaCBhcyBwb3Nz aWJsZSB0byB0aGUgcGh5c2ljYWwgZW5jb2RlcnMuCisgKglWaXJ0dWFsIGVuY29kZXIgcmVnaXN0 ZXJzIGl0c2VsZiB3aXRoIHRoZSBEUk0gRnJhbWV3b3JrIGFzIHRoZSBlbmNvZGVyLgorICogQGJh c2U6CQlkcm1fZW5jb2RlciBiYXNlIGNsYXNzIGZvciByZWdpc3RyYXRpb24gd2l0aCBEUk0KKyAq IEBlbmNfc3Bpbl9sb2NrOglWaXJ0dWFsLUVuY29kZXItV2lkZSBTcGluIExvY2sgZm9yIElSUSBw dXJwb3NlcworICogQGJ1c19zY2FsaW5nX2NsaWVudDoJQ2xpZW50IGhhbmRsZSB0byB0aGUgYnVz IHNjYWxpbmcgaW50ZXJmYWNlCisgKiBAbnVtX3BoeXNfZW5jczoJQWN0dWFsIG51bWJlciBvZiBw aHlzaWNhbCBlbmNvZGVycyBjb250YWluZWQuCisgKiBAcGh5c19lbmNzOgkJQ29udGFpbmVyIG9m IHBoeXNpY2FsIGVuY29kZXJzIG1hbmFnZWQuCisgKiBAY3VyX21hc3RlcjoJCVBvaW50ZXIgdG8g dGhlIGN1cnJlbnQgbWFzdGVyIGluIHRoaXMgbW9kZS4gT3B0aW1pemF0aW9uCisgKgkJCU9ubHkg dmFsaWQgYWZ0ZXIgZW5hYmxlLiBDbGVhcmVkIGFzIGRpc2FibGUuCisgKiBAaHdfcHAJCUhhbmRs ZSB0byB0aGUgcGluZ3BvbmcgYmxvY2tzIHVzZWQgZm9yIHRoZSBkaXNwbGF5LiBOby4KKyAqCQkJ cGluZ3BvbmcgYmxvY2tzIGNhbiBiZSBkaWZmZXJlbnQgdGhhbiBudW1fcGh5c19lbmNzLgorICog QGludGZzX3N3YXBwZWQJV2hldGhlciBvciBub3QgdGhlIHBoeXNfZW5jIGludGVyZmFjZXMgaGF2 ZSBiZWVuIHN3YXBwZWQKKyAqCQkJZm9yIHBhcnRpYWwgdXBkYXRlIHJpZ2h0LW9ubHkgY2FzZXMs IHN1Y2ggYXMgcGluZ3BvbmcKKyAqCQkJc3BsaXQgd2hlcmUgdmlydHVhbCBwaW5ncG9uZyBkb2Vz IG5vdCBnZW5lcmF0ZSBJUlFzCisgKiBAY3J0Y192YmxhbmtfY2I6CUNhbGxiYWNrIGludG8gdGhl IHVwcGVyIGxheWVyIC8gQ1JUQyBmb3IKKyAqCQkJbm90aWZpY2F0aW9uIG9mIHRoZSBWQkxBTksK KyAqIEBjcnRjX3ZibGFua19jYl9kYXRhOglEYXRhIGZyb20gdXBwZXIgbGF5ZXIgZm9yIFZCTEFO SyBub3RpZmljYXRpb24KKyAqIEBjcnRjX2tpY2tvZmZfY2I6CQlDYWxsYmFjayBpbnRvIENSVEMg dGhhdCB3aWxsIGZsdXNoICYgc3RhcnQKKyAqCQkJCWFsbCBDVEwgcGF0aHMKKyAqIEBjcnRjX2tp Y2tvZmZfY2JfZGF0YToJT3BhcXVlIHVzZXIgZGF0YSBnaXZlbiB0byBjcnRjX2tpY2tvZmZfY2IK KyAqIEBkZWJ1Z2ZzX3Jvb3Q6CQlEZWJ1ZyBmaWxlIHN5c3RlbSByb290IGZpbGUgbm9kZQorICog QGVuY19sb2NrOgkJCUxvY2sgYXJvdW5kIHBoeXNpY2FsIGVuY29kZXIgY3JlYXRlL2Rlc3Ryb3kg YW5kCisJCQkJYWNjZXNzLgorICogQGZyYW1lX2J1c3lfbWFzazoJCUJpdG1hc2sgdHJhY2tpbmcg d2hpY2ggcGh5c19lbmMgd2UgYXJlIHN0aWxsCisgKgkJCQlidXN5IHByb2Nlc3NpbmcgY3VycmVu dCBjb21tYW5kLgorICoJCQkJQml0MCA9IHBoeXNfZW5jc1swXSBldGMuCisgKiBAY3J0Y19mcmFt ZV9ldmVudF9jYjoJY2FsbGJhY2sgaGFuZGxlciBmb3IgZnJhbWUgZXZlbnQKKyAqIEBjcnRjX2Zy YW1lX2V2ZW50X2NiX2RhdGE6CWNhbGxiYWNrIGhhbmRsZXIgcHJpdmF0ZSBkYXRhCisgKiBAZnJh bWVfZG9uZV90aW1lb3V0OgkJZnJhbWUgZG9uZSB0aW1lb3V0IGluIEh6CisgKiBAZnJhbWVfZG9u ZV90aW1lcjoJCXdhdGNoZG9nIHRpbWVyIGZvciBmcmFtZSBkb25lIGV2ZW50CisgKiBAdnN5bmNf ZXZlbnRfdGltZXI6CQl2c3luYyB0aW1lcgorICogQGRpc3BfaW5mbzoJCQlsb2NhbCBjb3B5IG9m IG1zbV9kaXNwbGF5X2luZm8gc3RydWN0CisgKiBAbWlzcl9lbmFibGU6CQltaXNyIGVuYWJsZS9k aXNhYmxlIHN0YXR1cworICogQG1pc3JfZnJhbWVfY291bnQ6CQltaXNyIGZyYW1lIGNvdW50IGJl Zm9yZSBzdGFydCBjYXB0dXJpbmcgdGhlIGRhdGEKKyAqIEBpZGxlX3BjX3N1cHBvcnRlZDoJCWlu ZGljYXRlIGlmIGlkbGUgcG93ZXIgY29sbGFwcyBpcyBzdXBwb3J0ZWQKKyAqIEByY19sb2NrOgkJ CXJlc291cmNlIGNvbnRyb2wgbXV0ZXggbG9jayB0byBwcm90ZWN0CisgKgkJCQl2aXJ0IGVuY29k ZXIgb3ZlciB2YXJpb3VzIHN0YXRlIGNoYW5nZXMKKyAqIEByY19zdGF0ZToJCQlyZXNvdXJjZSBj b250cm9sbGVyIHN0YXRlCisgKiBAZGVsYXllZF9vZmZfd29yazoJCWRlbGF5ZWQgd29ya2VyIHRv IHNjaGVkdWxlIGRpc2FibGluZyBvZgorICoJCQkJY2xrcyBhbmQgcmVzb3VyY2VzIGFmdGVyIElE TEVfVElNRU9VVCB0aW1lLgorICogQHZzeW5jX2V2ZW50X3dvcms6CQl3b3JrZXIgdG8gaGFuZGxl IHZzeW5jIGV2ZW50IGZvciBhdXRvcmVmcmVzaAorICogQHRvcG9sb2d5OiAgICAgICAgICAgICAg ICAgICB0b3BvbG9neSBvZiB0aGUgZGlzcGxheQorICogQG1vZGVfc2V0X2NvbXBsZXRlOiAgICAg ICAgICBmbGFnIHRvIGluZGljYXRlIG1vZGVzZXQgY29tcGxldGlvbgorICogQGlkbGVfdGltZW91 dDoJCWlkbGUgdGltZW91dCBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMKKyAqLworc3RydWN0IGRw dV9lbmNvZGVyX3ZpcnQgeworCXN0cnVjdCBkcm1fZW5jb2RlciBiYXNlOworCXNwaW5sb2NrX3Qg ZW5jX3NwaW5sb2NrOworCXVpbnQzMl90IGJ1c19zY2FsaW5nX2NsaWVudDsKKworCXVpbnQzMl90 IGRpc3BsYXlfbnVtX29mX2hfdGlsZXM7CisKKwl1bnNpZ25lZCBpbnQgbnVtX3BoeXNfZW5jczsK KwlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqcGh5c19lbmNzW01BWF9QSFlTX0VOQ09ERVJTX1BF Ul9WSVJUVUFMXTsKKwlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqY3VyX21hc3RlcjsKKwlzdHJ1 Y3QgZHB1X2h3X3Bpbmdwb25nICpod19wcFtNQVhfQ0hBTk5FTFNfUEVSX0VOQ107CisKKwlib29s IGludGZzX3N3YXBwZWQ7CisKKwl2b2lkICgqY3J0Y192YmxhbmtfY2IpKHZvaWQgKik7CisJdm9p ZCAqY3J0Y192YmxhbmtfY2JfZGF0YTsKKworCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcm9vdDsK KwlzdHJ1Y3QgbXV0ZXggZW5jX2xvY2s7CisJREVDTEFSRV9CSVRNQVAoZnJhbWVfYnVzeV9tYXNr LCBNQVhfUEhZU19FTkNPREVSU19QRVJfVklSVFVBTCk7CisJdm9pZCAoKmNydGNfZnJhbWVfZXZl bnRfY2IpKHZvaWQgKiwgdTMyIGV2ZW50KTsKKwl2b2lkICpjcnRjX2ZyYW1lX2V2ZW50X2NiX2Rh dGE7CisKKwlhdG9taWNfdCBmcmFtZV9kb25lX3RpbWVvdXQ7CisJc3RydWN0IHRpbWVyX2xpc3Qg ZnJhbWVfZG9uZV90aW1lcjsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB2c3luY19ldmVudF90aW1lcjsK KworCXN0cnVjdCBtc21fZGlzcGxheV9pbmZvIGRpc3BfaW5mbzsKKwlib29sIG1pc3JfZW5hYmxl OworCXUzMiBtaXNyX2ZyYW1lX2NvdW50OworCisJYm9vbCBpZGxlX3BjX3N1cHBvcnRlZDsKKwlz dHJ1Y3QgbXV0ZXggcmNfbG9jazsKKwllbnVtIGRwdV9lbmNfcmNfc3RhdGVzIHJjX3N0YXRlOwor CXN0cnVjdCBrdGhyZWFkX2RlbGF5ZWRfd29yayBkZWxheWVkX29mZl93b3JrOworCXN0cnVjdCBr dGhyZWFkX3dvcmsgdnN5bmNfZXZlbnRfd29yazsKKwlzdHJ1Y3QgbXNtX2Rpc3BsYXlfdG9wb2xv Z3kgdG9wb2xvZ3k7CisJYm9vbCBtb2RlX3NldF9jb21wbGV0ZTsKKworCXUzMiBpZGxlX3RpbWVv dXQ7Cit9OworCisjZGVmaW5lIHRvX2RwdV9lbmNvZGVyX3ZpcnQoeCkgY29udGFpbmVyX29mKHgs IHN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0LCBiYXNlKQorc3RhdGljIGlubGluZSBpbnQgX2RwdV9l bmNvZGVyX3Bvd2VyX2VuYWJsZShzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYywKKwkJ CQkJCQkJYm9vbCBlbmFibGUpCit7CisJc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jOworCXN0 cnVjdCBtc21fZHJtX3ByaXZhdGUgKnByaXY7CisJc3RydWN0IGRwdV9rbXMgKmRwdV9rbXM7CisK KwlpZiAoIWRwdV9lbmMpIHsKKwkJRFBVX0VSUk9SKCJpbnZhbGlkIGRwdSBlbmNcbiIpOworCQly ZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkcm1fZW5jID0gJmRwdV9lbmMtPmJhc2U7CisJaWYgKCFk cm1fZW5jLT5kZXYgfHwgIWRybV9lbmMtPmRldi0+ZGV2X3ByaXZhdGUpIHsKKwkJRFBVX0VSUk9S KCJkcm0gZGV2aWNlIGludmFsaWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwcml2 ID0gZHJtX2VuYy0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlpZiAoIXByaXYtPmttcykgeworCQlEUFVf RVJST1IoImludmFsaWQga21zXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZHB1X2tt cyA9IHRvX2RwdV9rbXMocHJpdi0+a21zKTsKKworCWlmIChlbmFibGUpCisJCXBtX3J1bnRpbWVf Z2V0X3N5bmMoJmRwdV9rbXMtPnBkZXYtPmRldik7CisJZWxzZQorCQlwbV9ydW50aW1lX3B1dF9z eW5jKCZkcHVfa21zLT5wZGV2LT5kZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZHB1X2Vu Y29kZXJfaGVscGVyX3JlcG9ydF9pcnFfdGltZW91dChzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAq cGh5c19lbmMsCisJCWVudW0gZHB1X2ludHJfaWR4IGludHJfaWR4KQoreworCURSTV9FUlJPUigi aXJxIHRpbWVvdXQgaWQ9JXUsIGludGY9JWQsIHBwPSVkLCBpbnRyPSVkXG4iLAorCQkgIERSTUlE KHBoeXNfZW5jLT5wYXJlbnQpLCBwaHlzX2VuYy0+aW50Zl9pZHggLSBJTlRGXzAsCisJCSAgcGh5 c19lbmMtPmh3X3BwLT5pZHggLSBQSU5HUE9OR18wLCBpbnRyX2lkeCk7CisKKwlpZiAocGh5c19l bmMtPnBhcmVudF9vcHMuaGFuZGxlX2ZyYW1lX2RvbmUpCisJCXBoeXNfZW5jLT5wYXJlbnRfb3Bz LmhhbmRsZV9mcmFtZV9kb25lKAorCQkJCXBoeXNfZW5jLT5wYXJlbnQsIHBoeXNfZW5jLAorCQkJ CURQVV9FTkNPREVSX0ZSQU1FX0VWRU5UX0VSUk9SKTsKK30KKworaW50IGRwdV9lbmNvZGVyX2hl bHBlcl93YWl0X2Zvcl9pcnEoc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKnBoeXNfZW5jLAorCQll bnVtIGRwdV9pbnRyX2lkeCBpbnRyX2lkeCwKKwkJc3RydWN0IGRwdV9lbmNvZGVyX3dhaXRfaW5m byAqd2FpdF9pbmZvKQoreworCXN0cnVjdCBkcHVfZW5jb2Rlcl9pcnEgKmlycTsKKwl1MzIgaXJx X3N0YXR1czsKKwlpbnQgcmV0OworCisJaWYgKCFwaHlzX2VuYyB8fCAhd2FpdF9pbmZvIHx8IGlu dHJfaWR4ID49IElOVFJfSURYX01BWCkgeworCQlEUFVfRVJST1IoImludmFsaWQgcGFyYW1zXG4i KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlycSA9ICZwaHlzX2VuYy0+aXJxW2ludHJfaWR4 XTsKKworCS8qIG5vdGU6IGRvIG1hc3RlciAvIHNsYXZlIGNoZWNraW5nIG91dHNpZGUgKi8KKwor CS8qIHJldHVybiBFV09VTERCTE9DSyBzaW5jZSB3ZSBrbm93IHRoZSB3YWl0IGlzbid0IG5lY2Vz c2FyeSAqLworCWlmIChwaHlzX2VuYy0+ZW5hYmxlX3N0YXRlID09IERQVV9FTkNfRElTQUJMRUQp IHsKKwkJRFJNX0VSUk9SKCJlbmNvZGVyIGlzIGRpc2FibGVkIGlkPSV1LCBpbnRyPSVkLCBodz0l ZCwgaXJxPSVkIiwKKwkJCSAgRFJNSUQocGh5c19lbmMtPnBhcmVudCksIGludHJfaWR4LCBpcnEt Pmh3X2lkeCwKKwkJCSAgaXJxLT5pcnFfaWR4KTsKKwkJcmV0dXJuIC1FV09VTERCTE9DSzsKKwl9 CisKKwlpZiAoaXJxLT5pcnFfaWR4IDwgMCkgeworCQlEUk1fREVCVUdfS01TKCJza2lwIGlycSB3 YWl0IGlkPSV1LCBpbnRyPSVkLCBodz0lZCwgaXJxPSVzIiwKKwkJCSAgICAgIERSTUlEKHBoeXNf ZW5jLT5wYXJlbnQpLCBpbnRyX2lkeCwgaXJxLT5od19pZHgsCisJCQkgICAgICBpcnEtPm5hbWUp OworCQlyZXR1cm4gMDsKKwl9CisKKwlEUk1fREVCVUdfS01TKCJpZD0ldSwgaW50cj0lZCwgaHc9 JWQsIGlycT0lZCwgcHA9JWQsIHBlbmRpbmdfY250PSVkIiwKKwkJICAgICAgRFJNSUQocGh5c19l bmMtPnBhcmVudCksIGludHJfaWR4LCBpcnEtPmh3X2lkeCwKKwkJICAgICAgaXJxLT5pcnFfaWR4 LCBwaHlzX2VuYy0+aHdfcHAtPmlkeCAtIFBJTkdQT05HXzAsCisJCSAgICAgIGF0b21pY19yZWFk KHdhaXRfaW5mby0+YXRvbWljX2NudCkpOworCisJcmV0ID0gZHB1X2VuY29kZXJfaGVscGVyX3dh aXRfZXZlbnRfdGltZW91dCgKKwkJCURSTUlEKHBoeXNfZW5jLT5wYXJlbnQpLAorCQkJaXJxLT5o d19pZHgsCisJCQl3YWl0X2luZm8pOworCisJaWYgKHJldCA8PSAwKSB7CisJCWlycV9zdGF0dXMg PSBkcHVfY29yZV9pcnFfcmVhZChwaHlzX2VuYy0+ZHB1X2ttcywKKwkJCQlpcnEtPmlycV9pZHgs IHRydWUpOworCQlpZiAoaXJxX3N0YXR1cykgeworCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwor CQkJRFJNX0RFQlVHX0tNUygiaXJxIG5vdCB0cmlnZ2VyZWQgaWQ9JXUsIGludHI9JWQsICIKKwkJ CQkgICAgICAiaHc9JWQsIGlycT0lZCwgcHA9JWQsIGF0b21pY19jbnQ9JWQiLAorCQkJCSAgICAg IERSTUlEKHBoeXNfZW5jLT5wYXJlbnQpLCBpbnRyX2lkeCwKKwkJCQkgICAgICBpcnEtPmh3X2lk eCwgaXJxLT5pcnFfaWR4LAorCQkJCSAgICAgIHBoeXNfZW5jLT5od19wcC0+aWR4IC0gUElOR1BP TkdfMCwKKwkJCQkgICAgICBhdG9taWNfcmVhZCh3YWl0X2luZm8tPmF0b21pY19jbnQpKTsKKwkJ CWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJCWlycS0+Y2IuZnVuYyhwaHlzX2VuYywgaXJxLT5p cnFfaWR4KTsKKwkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkJCXJldCA9IDA7CisJCX0g ZWxzZSB7CisJCQlyZXQgPSAtRVRJTUVET1VUOworCQkJRFJNX0RFQlVHX0tNUygiaXJxIHRpbWVv dXQgaWQ9JXUsIGludHI9JWQsICIKKwkJCQkgICAgICAiaHc9JWQsIGlycT0lZCwgcHA9JWQsIGF0 b21pY19jbnQ9JWQiLAorCQkJCSAgICAgIERSTUlEKHBoeXNfZW5jLT5wYXJlbnQpLCBpbnRyX2lk eCwKKwkJCQkgICAgICBpcnEtPmh3X2lkeCwgaXJxLT5pcnFfaWR4LAorCQkJCSAgICAgIHBoeXNf ZW5jLT5od19wcC0+aWR4IC0gUElOR1BPTkdfMCwKKwkJCQkgICAgICBhdG9taWNfcmVhZCh3YWl0 X2luZm8tPmF0b21pY19jbnQpKTsKKwkJfQorCX0gZWxzZSB7CisJCXJldCA9IDA7CisJCXRyYWNl X2RwdV9lbmNfaXJxX3dhaXRfc3VjY2VzcyhEUk1JRChwaHlzX2VuYy0+cGFyZW50KSwKKwkJCWlu dHJfaWR4LCBpcnEtPmh3X2lkeCwgaXJxLT5pcnFfaWR4LAorCQkJcGh5c19lbmMtPmh3X3BwLT5p ZHggLSBQSU5HUE9OR18wLAorCQkJYXRvbWljX3JlYWQod2FpdF9pbmZvLT5hdG9taWNfY250KSk7 CisJfQorCisJcmV0dXJuIHJldDsKK30KKworaW50IGRwdV9lbmNvZGVyX2hlbHBlcl9yZWdpc3Rl cl9pcnEoc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKnBoeXNfZW5jLAorCQllbnVtIGRwdV9pbnRy X2lkeCBpbnRyX2lkeCkKK3sKKwlzdHJ1Y3QgZHB1X2VuY29kZXJfaXJxICppcnE7CisJaW50IHJl dCA9IDA7CisKKwlpZiAoIXBoeXNfZW5jIHx8IGludHJfaWR4ID49IElOVFJfSURYX01BWCkgewor CQlEUFVfRVJST1IoImludmFsaWQgcGFyYW1zXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQor CWlycSA9ICZwaHlzX2VuYy0+aXJxW2ludHJfaWR4XTsKKworCWlmIChpcnEtPmlycV9pZHggPj0g MCkgeworCQlEUFVfREVCVUdfUEhZUyhwaHlzX2VuYywKKwkJCQkic2tpcHBpbmcgYWxyZWFkeSBy ZWdpc3RlcmVkIGlycSAlcyB0eXBlICVkXG4iLAorCQkJCWlycS0+bmFtZSwgaXJxLT5pbnRyX3R5 cGUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpcnEtPmlycV9pZHggPSBkcHVfY29yZV9pcnFfaWR4 X2xvb2t1cChwaHlzX2VuYy0+ZHB1X2ttcywKKwkJCWlycS0+aW50cl90eXBlLCBpcnEtPmh3X2lk eCk7CisJaWYgKGlycS0+aXJxX2lkeCA8IDApIHsKKwkJRFBVX0VSUk9SX1BIWVMocGh5c19lbmMs CisJCQkiZmFpbGVkIHRvIGxvb2t1cCBJUlEgaW5kZXggZm9yICVzIHR5cGU6JWRcbiIsCisJCQlp cnEtPm5hbWUsIGlycS0+aW50cl90eXBlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0 ID0gZHB1X2NvcmVfaXJxX3JlZ2lzdGVyX2NhbGxiYWNrKHBoeXNfZW5jLT5kcHVfa21zLCBpcnEt PmlycV9pZHgsCisJCQkmaXJxLT5jYik7CisJaWYgKHJldCkgeworCQlEUFVfRVJST1JfUEhZUyhw aHlzX2VuYywKKwkJCSJmYWlsZWQgdG8gcmVnaXN0ZXIgSVJRIGNhbGxiYWNrIGZvciAlc1xuIiwK KwkJCWlycS0+bmFtZSk7CisJCWlycS0+aXJxX2lkeCA9IC1FSU5WQUw7CisJCXJldHVybiByZXQ7 CisJfQorCisJcmV0ID0gZHB1X2NvcmVfaXJxX2VuYWJsZShwaHlzX2VuYy0+ZHB1X2ttcywgJmly cS0+aXJxX2lkeCwgMSk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoImVuYWJsZSBmYWlsZWQg aWQ9JXUsIGludHI9JWQsIGh3PSVkLCBpcnE9JWQiLAorCQkJICBEUk1JRChwaHlzX2VuYy0+cGFy ZW50KSwgaW50cl9pZHgsIGlycS0+aHdfaWR4LAorCQkJICBpcnEtPmlycV9pZHgpOworCQlkcHVf Y29yZV9pcnFfdW5yZWdpc3Rlcl9jYWxsYmFjayhwaHlzX2VuYy0+ZHB1X2ttcywKKwkJCQlpcnEt PmlycV9pZHgsICZpcnEtPmNiKTsKKwkJaXJxLT5pcnFfaWR4ID0gLUVJTlZBTDsKKwkJcmV0dXJu IHJldDsKKwl9CisKKwl0cmFjZV9kcHVfZW5jX2lycV9yZWdpc3Rlcl9zdWNjZXNzKERSTUlEKHBo eXNfZW5jLT5wYXJlbnQpLCBpbnRyX2lkeCwKKwkJCQlpcnEtPmh3X2lkeCwgaXJxLT5pcnFfaWR4 KTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBkcHVfZW5jb2Rlcl9oZWxwZXJfdW5yZWdpc3Rl cl9pcnEoc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKnBoeXNfZW5jLAorCQllbnVtIGRwdV9pbnRy X2lkeCBpbnRyX2lkeCkKK3sKKwlzdHJ1Y3QgZHB1X2VuY29kZXJfaXJxICppcnE7CisJaW50IHJl dDsKKworCWlmICghcGh5c19lbmMpIHsKKwkJRFBVX0VSUk9SKCJpbnZhbGlkIGVuY29kZXJcbiIp OworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaXJxID0gJnBoeXNfZW5jLT5pcnFbaW50cl9pZHhd OworCisJLyogc2lsZW50bHkgc2tpcCBpcnFzIHRoYXQgd2VyZW4ndCByZWdpc3RlcmVkICovCisJ aWYgKGlycS0+aXJxX2lkeCA8IDApIHsKKwkJRFJNX0VSUk9SKCJkdXBsaWNhdGUgdW5yZWdpc3Rl ciBpZD0ldSwgaW50cj0lZCwgaHc9JWQsIGlycT0lZCIsCisJCQkgIERSTUlEKHBoeXNfZW5jLT5w YXJlbnQpLCBpbnRyX2lkeCwgaXJxLT5od19pZHgsCisJCQkgIGlycS0+aXJxX2lkeCk7CisJCXJl dHVybiAwOworCX0KKworCXJldCA9IGRwdV9jb3JlX2lycV9kaXNhYmxlKHBoeXNfZW5jLT5kcHVf a21zLCAmaXJxLT5pcnFfaWR4LCAxKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiZGlhYmxl IGZhaWxlZCBpZD0ldSwgaW50cj0lZCwgaHc9JWQsIGlycT0lZCByZXQ9JWQiLAorCQkJICBEUk1J RChwaHlzX2VuYy0+cGFyZW50KSwgaW50cl9pZHgsIGlycS0+aHdfaWR4LAorCQkJICBpcnEtPmly cV9pZHgsIHJldCk7CisJfQorCisJcmV0ID0gZHB1X2NvcmVfaXJxX3VucmVnaXN0ZXJfY2FsbGJh Y2socGh5c19lbmMtPmRwdV9rbXMsIGlycS0+aXJxX2lkeCwKKwkJCSZpcnEtPmNiKTsKKwlpZiAo cmV0KSB7CisJCURSTV9FUlJPUigidW5yZWcgY2IgZmFpbCBpZD0ldSwgaW50cj0lZCwgaHc9JWQs IGlycT0lZCByZXQ9JWQiLAorCQkJICBEUk1JRChwaHlzX2VuYy0+cGFyZW50KSwgaW50cl9pZHgs IGlycS0+aHdfaWR4LAorCQkJICBpcnEtPmlycV9pZHgsIHJldCk7CisJfQorCisJdHJhY2VfZHB1 X2VuY19pcnFfdW5yZWdpc3Rlcl9zdWNjZXNzKERSTUlEKHBoeXNfZW5jLT5wYXJlbnQpLCBpbnRy X2lkeCwKKwkJCQkJICAgICBpcnEtPmh3X2lkeCwgaXJxLT5pcnFfaWR4KTsKKworCWlycS0+aXJx X2lkeCA9IC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBkcHVfZW5jb2Rlcl9nZXRf aHdfcmVzb3VyY2VzKHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYywKKwkJc3RydWN0IGRwdV9l bmNvZGVyX2h3X3Jlc291cmNlcyAqaHdfcmVzLAorCQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0 ZSAqY29ubl9zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYyA9IE5V TEw7CisJaW50IGkgPSAwOworCisJaWYgKCFod19yZXMgfHwgIWRybV9lbmMgfHwgIWNvbm5fc3Rh dGUpIHsKKwkJRFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50KHMpLCBkcm1fZW5jICVkLCByZXMg JWQsIHN0YXRlICVkXG4iLAorCQkJCWRybV9lbmMgIT0gMCwgaHdfcmVzICE9IDAsIGNvbm5fc3Rh dGUgIT0gMCk7CisJCXJldHVybjsKKwl9CisKKwlkcHVfZW5jID0gdG9fZHB1X2VuY29kZXJfdmly dChkcm1fZW5jKTsKKwlEUFVfREVCVUdfRU5DKGRwdV9lbmMsICJcbiIpOworCisJLyogUXVlcnkg cmVzb3VyY2VzIHVzZWQgYnkgcGh5cyBlbmNzLCBleHBlY3RlZCB0byBiZSB3aXRob3V0IG92ZXJs YXAgKi8KKwltZW1zZXQoaHdfcmVzLCAwLCBzaXplb2YoKmh3X3JlcykpOworCWh3X3Jlcy0+ZGlz cGxheV9udW1fb2ZfaF90aWxlcyA9IGRwdV9lbmMtPmRpc3BsYXlfbnVtX29mX2hfdGlsZXM7CisK Kwlmb3IgKGkgPSAwOyBpIDwgZHB1X2VuYy0+bnVtX3BoeXNfZW5jczsgaSsrKSB7CisJCXN0cnVj dCBkcHVfZW5jb2Rlcl9waHlzICpwaHlzID0gZHB1X2VuYy0+cGh5c19lbmNzW2ldOworCisJCWlm IChwaHlzICYmIHBoeXMtPm9wcy5nZXRfaHdfcmVzb3VyY2VzKQorCQkJcGh5cy0+b3BzLmdldF9o d19yZXNvdXJjZXMocGh5cywgaHdfcmVzLCBjb25uX3N0YXRlKTsKKwl9Cit9CisKK3ZvaWQgZHB1 X2VuY29kZXJfZGVzdHJveShzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMpCit7CisJc3RydWN0 IGRwdV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmMgPSBOVUxMOworCWludCBpID0gMDsKKworCWlmICgh ZHJtX2VuYykgeworCQlEUFVfRVJST1IoImludmFsaWQgZW5jb2RlclxuIik7CisJCXJldHVybjsK Kwl9CisKKwlkcHVfZW5jID0gdG9fZHB1X2VuY29kZXJfdmlydChkcm1fZW5jKTsKKwlEUFVfREVC VUdfRU5DKGRwdV9lbmMsICJcbiIpOworCisJbXV0ZXhfbG9jaygmZHB1X2VuYy0+ZW5jX2xvY2sp OworCisJZm9yIChpID0gMDsgaSA8IGRwdV9lbmMtPm51bV9waHlzX2VuY3M7IGkrKykgeworCQlz dHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqcGh5cyA9IGRwdV9lbmMtPnBoeXNfZW5jc1tpXTsKKwor CQlpZiAocGh5cyAmJiBwaHlzLT5vcHMuZGVzdHJveSkgeworCQkJcGh5cy0+b3BzLmRlc3Ryb3ko cGh5cyk7CisJCQktLWRwdV9lbmMtPm51bV9waHlzX2VuY3M7CisJCQlkcHVfZW5jLT5waHlzX2Vu Y3NbaV0gPSBOVUxMOworCQl9CisJfQorCisJaWYgKGRwdV9lbmMtPm51bV9waHlzX2VuY3MpCisJ CURQVV9FUlJPUl9FTkMoZHB1X2VuYywgImV4cGVjdGVkIDAgbnVtX3BoeXNfZW5jcyBub3QgJWRc biIsCisJCQkJZHB1X2VuYy0+bnVtX3BoeXNfZW5jcyk7CisJZHB1X2VuYy0+bnVtX3BoeXNfZW5j cyA9IDA7CisJbXV0ZXhfdW5sb2NrKCZkcHVfZW5jLT5lbmNfbG9jayk7CisKKwlkcm1fZW5jb2Rl cl9jbGVhbnVwKGRybV9lbmMpOworCW11dGV4X2Rlc3Ryb3koJmRwdV9lbmMtPmVuY19sb2NrKTsK KworCWtmcmVlKGRwdV9lbmMpOworfQorCit2b2lkIGRwdV9lbmNvZGVyX2hlbHBlcl9zcGxpdF9j b25maWcoCisJCXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpwaHlzX2VuYywKKwkJZW51bSBkcHVf aW50ZiBpbnRlcmZhY2UpCit7CisJc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmM7CisJ c3RydWN0IHNwbGl0X3BpcGVfY2ZnIGNmZyA9IHsgMCB9OworCXN0cnVjdCBkcHVfaHdfbWRwICpo d19tZHB0b3A7CisJc3RydWN0IG1zbV9kaXNwbGF5X2luZm8gKmRpc3BfaW5mbzsKKworCWlmICgh cGh5c19lbmMgfHwgIXBoeXNfZW5jLT5od19tZHB0b3AgfHwgIXBoeXNfZW5jLT5wYXJlbnQpIHsK KwkJRFBVX0VSUk9SKCJpbnZhbGlkIGFyZyhzKSwgZW5jb2RlciAlZFxuIiwgcGh5c19lbmMgIT0g MCk7CisJCXJldHVybjsKKwl9CisKKwlkcHVfZW5jID0gdG9fZHB1X2VuY29kZXJfdmlydChwaHlz X2VuYy0+cGFyZW50KTsKKwlod19tZHB0b3AgPSBwaHlzX2VuYy0+aHdfbWRwdG9wOworCWRpc3Bf aW5mbyA9ICZkcHVfZW5jLT5kaXNwX2luZm87CisKKwlpZiAoZGlzcF9pbmZvLT5pbnRmX3R5cGUg IT0gRFJNX01PREVfQ09OTkVDVE9SX0RTSSkKKwkJcmV0dXJuOworCisJLyoqCisJICogZGlzYWJs ZSBzcGxpdCBtb2RlcyBzaW5jZSBlbmNvZGVyIHdpbGwgYmUgb3BlcmF0aW5nIGluIGFzIHRoZSBv bmx5CisJICogZW5jb2RlciwgZWl0aGVyIGZvciB0aGUgZW50aXJlIHVzZSBjYXNlIGluIHRoZSBj YXNlIG9mLCBmb3IgZXhhbXBsZSwKKwkgKiBzaW5nbGUgRFNJLCBvciBmb3IgdGhpcyBmcmFtZSBp biB0aGUgY2FzZSBvZiBsZWZ0L3JpZ2h0IG9ubHkgcGFydGlhbAorCSAqIHVwZGF0ZS4KKwkgKi8K KwlpZiAocGh5c19lbmMtPnNwbGl0X3JvbGUgPT0gRU5DX1JPTEVfU09MTykgeworCQlpZiAoaHdf bWRwdG9wLT5vcHMuc2V0dXBfc3BsaXRfcGlwZSkKKwkJCWh3X21kcHRvcC0+b3BzLnNldHVwX3Nw bGl0X3BpcGUoaHdfbWRwdG9wLCAmY2ZnKTsKKwkJcmV0dXJuOworCX0KKworCWNmZy5lbiA9IHRy dWU7CisJY2ZnLm1vZGUgPSBwaHlzX2VuYy0+aW50Zl9tb2RlOworCWNmZy5pbnRmID0gaW50ZXJm YWNlOworCisJaWYgKGNmZy5lbiAmJiBwaHlzX2VuYy0+b3BzLm5lZWRzX3NpbmdsZV9mbHVzaCAm JgorCQkJcGh5c19lbmMtPm9wcy5uZWVkc19zaW5nbGVfZmx1c2gocGh5c19lbmMpKQorCQljZmcu c3BsaXRfZmx1c2hfZW4gPSB0cnVlOworCisJaWYgKHBoeXNfZW5jLT5zcGxpdF9yb2xlID09IEVO Q19ST0xFX01BU1RFUikgeworCQlEUFVfREVCVUdfRU5DKGRwdV9lbmMsICJlbmFibGUgJWRcbiIs IGNmZy5lbik7CisKKwkJaWYgKGh3X21kcHRvcC0+b3BzLnNldHVwX3NwbGl0X3BpcGUpCisJCQlo d19tZHB0b3AtPm9wcy5zZXR1cF9zcGxpdF9waXBlKGh3X21kcHRvcCwgJmNmZyk7CisJfQorfQor CitzdGF0aWMgdm9pZCBfZHB1X2VuY29kZXJfYWRqdXN0X21vZGUoc3RydWN0IGRybV9jb25uZWN0 b3IgKmNvbm5lY3RvciwKKwkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkal9tb2RlKQorewor CXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpjdXJfbW9kZTsKKworCWlmICghY29ubmVjdG9yIHx8 ICFhZGpfbW9kZSkKKwkJcmV0dXJuOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjdXJfbW9kZSwg JmNvbm5lY3Rvci0+bW9kZXMsIGhlYWQpIHsKKwkJaWYgKGN1cl9tb2RlLT52ZGlzcGxheSA9PSBh ZGpfbW9kZS0+dmRpc3BsYXkgJiYKKwkJCWN1cl9tb2RlLT5oZGlzcGxheSA9PSBhZGpfbW9kZS0+ aGRpc3BsYXkgJiYKKwkJCWN1cl9tb2RlLT52cmVmcmVzaCA9PSBhZGpfbW9kZS0+dnJlZnJlc2gp IHsKKwkJCWFkal9tb2RlLT5wcml2YXRlID0gY3VyX21vZGUtPnByaXZhdGU7CisJCQlhZGpfbW9k ZS0+cHJpdmF0ZV9mbGFncyB8PSBjdXJfbW9kZS0+cHJpdmF0ZV9mbGFnczsKKwkJfQorCX0KK30K Kworc3RhdGljIHN0cnVjdCBtc21fZGlzcGxheV90b3BvbG9neSBkcHVfZW5jb2Rlcl9nZXRfdG9w b2xvZ3koCisJCQlzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYywKKwkJCXN0cnVjdCBk cHVfa21zICpkcHVfa21zLAorCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJ c3RydWN0IG1zbV9kaXNwbGF5X3RvcG9sb2d5IHRvcG9sb2d5OworCWludCBpLCBpbnRmX2NvdW50 ID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfUEhZU19FTkNPREVSU19QRVJfVklSVFVBTDsg aSsrKQorCQlpZiAoZHB1X2VuYy0+cGh5c19lbmNzW2ldKQorCQkJaW50Zl9jb3VudCsrOworCisJ LyogVXNlciBzcGxpdCB0b3BvbG9neSBmb3Igd2lkdGggPiAxMDgwICovCisJdG9wb2xvZ3kubnVt X2xtID0gKG1vZGUtPnZkaXNwbGF5ID4gTUFYX1ZESVNQTEFZX1NQTElUKSA/IDIgOiAxOworCXRv cG9sb2d5Lm51bV9lbmMgPSAwOworCXRvcG9sb2d5Lm51bV9pbnRmID0gaW50Zl9jb3VudDsKKwor CXJldHVybiB0b3BvbG9neTsKK30KK3N0YXRpYyBpbnQgZHB1X2VuY29kZXJfdmlydF9hdG9taWNf Y2hlY2soCisJCXN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYywKKwkJc3RydWN0IGRybV9jcnRj X3N0YXRlICpjcnRjX3N0YXRlLAorCQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9z dGF0ZSkKK3sKKwlzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYzsKKwlzdHJ1Y3QgbXNt X2RybV9wcml2YXRlICpwcml2OworCXN0cnVjdCBkcHVfa21zICpkcHVfa21zOworCWNvbnN0IHN0 cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICph ZGpfbW9kZTsKKwlzdHJ1Y3QgbXNtX2Rpc3BsYXlfdG9wb2xvZ3kgdG9wb2xvZ3k7CisJaW50IGkg PSAwOworCWludCByZXQgPSAwOworCisJaWYgKCFkcm1fZW5jIHx8ICFjcnRjX3N0YXRlIHx8ICFj b25uX3N0YXRlKSB7CisJCURQVV9FUlJPUigiaW52YWxpZCBhcmcocyksIGRybV9lbmMgJWQsIGNy dGMvY29ubiBzdGF0ZSAlZC8lZFxuIiwKKwkJCQlkcm1fZW5jICE9IDAsIGNydGNfc3RhdGUgIT0g MCwgY29ubl9zdGF0ZSAhPSAwKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZHB1X2VuYyA9 IHRvX2RwdV9lbmNvZGVyX3ZpcnQoZHJtX2VuYyk7CisJRFBVX0RFQlVHX0VOQyhkcHVfZW5jLCAi XG4iKTsKKworCXByaXYgPSBkcm1fZW5jLT5kZXYtPmRldl9wcml2YXRlOworCWRwdV9rbXMgPSB0 b19kcHVfa21zKHByaXYtPmttcyk7CisJbW9kZSA9ICZjcnRjX3N0YXRlLT5tb2RlOworCWFkal9t b2RlID0gJmNydGNfc3RhdGUtPmFkanVzdGVkX21vZGU7CisJdHJhY2VfZHB1X2VuY19hdG9taWNf Y2hlY2soRFJNSUQoZHJtX2VuYykpOworCisJLyoKKwkgKiBkaXNwbGF5IGRyaXZlcnMgbWF5IHBv cHVsYXRlIHByaXZhdGUgZmllbGRzIG9mIHRoZSBkcm0gZGlzcGxheSBtb2RlCisJICogc3RydWN0 dXJlIHdoaWxlIHJlZ2lzdGVyaW5nIHBvc3NpYmxlIG1vZGVzIG9mIGEgY29ubmVjdG9yIHdpdGgg RFJNLgorCSAqIFRoZXNlIHByaXZhdGUgZmllbGRzIGFyZSBub3QgcG9wdWxhdGVkIGJhY2sgd2hp bGUgRFJNIGludm9rZXMKKwkgKiB0aGUgbW9kZV9zZXQgY2FsbGJhY2tzLiBUaGlzIG1vZHVsZSBy ZXRyaWV2ZXMgYW5kIHBvcHVsYXRlcyB0aGUKKwkgKiBwcml2YXRlIGZpZWxkcyBvZiB0aGUgZ2l2 ZW4gbW9kZS4KKwkgKi8KKwlfZHB1X2VuY29kZXJfYWRqdXN0X21vZGUoY29ubl9zdGF0ZS0+Y29u bmVjdG9yLCBhZGpfbW9kZSk7CisKKwkvKiBwZXJmb3JtIGF0b21pYyBjaGVjayBvbiB0aGUgZmly c3QgcGh5c2ljYWwgZW5jb2RlciAobWFzdGVyKSAqLworCWZvciAoaSA9IDA7IGkgPCBkcHVfZW5j LT5udW1fcGh5c19lbmNzOyBpKyspIHsKKwkJc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKnBoeXMg PSBkcHVfZW5jLT5waHlzX2VuY3NbaV07CisKKwkJaWYgKHBoeXMgJiYgcGh5cy0+b3BzLmF0b21p Y19jaGVjaykKKwkJCXJldCA9IHBoeXMtPm9wcy5hdG9taWNfY2hlY2socGh5cywgY3J0Y19zdGF0 ZSwKKwkJCQkJY29ubl9zdGF0ZSk7CisJCWVsc2UgaWYgKHBoeXMgJiYgcGh5cy0+b3BzLm1vZGVf Zml4dXApCisJCQlpZiAoIXBoeXMtPm9wcy5tb2RlX2ZpeHVwKHBoeXMsIG1vZGUsIGFkal9tb2Rl KSkKKwkJCQlyZXQgPSAtRUlOVkFMOworCisJCWlmIChyZXQpIHsKKwkJCURQVV9FUlJPUl9FTkMo ZHB1X2VuYywKKwkJCQkJIm1vZGUgdW5zdXBwb3J0ZWQsIHBoeXMgaWR4ICVkXG4iLCBpKTsKKwkJ CWJyZWFrOworCQl9CisJfQorCisJdG9wb2xvZ3kgPSBkcHVfZW5jb2Rlcl9nZXRfdG9wb2xvZ3ko ZHB1X2VuYywgZHB1X2ttcywgYWRqX21vZGUpOworCisJLyogUmVzZXJ2ZSBkeW5hbWljIHJlc291 cmNlcyBub3cuIEluZGljYXRpbmcgQXRvbWljVGVzdCBwaGFzZSAqLworCWlmICghcmV0KSB7CisJ CS8qCisJCSAqIEF2b2lkIHJlc2VydmluZyByZXNvdXJjZXMgd2hlbiBtb2RlIHNldCBpcyBwZW5k aW5nLiBUb3BvbG9neQorCQkgKiBpbmZvIG1heSBub3QgYmUgYXZhaWxhYmxlIHRvIGNvbXBsZXRl IHJlc2VydmF0aW9uLgorCQkgKi8KKwkJaWYgKGRybV9hdG9taWNfY3J0Y19uZWVkc19tb2Rlc2V0 KGNydGNfc3RhdGUpCisJCQkJJiYgZHB1X2VuYy0+bW9kZV9zZXRfY29tcGxldGUpIHsKKwkJCXJl dCA9IGRwdV9ybV9yZXNlcnZlKCZkcHVfa21zLT5ybSwgZHJtX2VuYywgY3J0Y19zdGF0ZSwKKwkJ CQljb25uX3N0YXRlLCB0b3BvbG9neSwgdHJ1ZSk7CisJCQlkcHVfZW5jLT5tb2RlX3NldF9jb21w bGV0ZSA9IGZhbHNlOworCQl9CisJfQorCisJaWYgKCFyZXQpCisJCWRybV9tb2RlX3NldF9jcnRj aW5mbyhhZGpfbW9kZSwgMCk7CisKKwl0cmFjZV9kcHVfZW5jX2F0b21pY19jaGVja19mbGFncyhE Uk1JRChkcm1fZW5jKSwgYWRqX21vZGUtPmZsYWdzLAorCQkJYWRqX21vZGUtPnByaXZhdGVfZmxh Z3MpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX2RwdV9lbmNvZGVyX3VwZGF0 ZV92c3luY19zb3VyY2Uoc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmMsCisJCQlzdHJ1 Y3QgbXNtX2Rpc3BsYXlfaW5mbyAqZGlzcF9pbmZvKQoreworCXN0cnVjdCBkcHVfdnN5bmNfc291 cmNlX2NmZyB2c3luY19jZmcgPSB7IDAgfTsKKwlzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpwcml2 OworCXN0cnVjdCBkcHVfa21zICpkcHVfa21zOworCXN0cnVjdCBkcHVfaHdfbWRwICpod19tZHB0 b3A7CisJc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jOworCWludCBpOworCisJaWYgKCFkcHVf ZW5jIHx8ICFkaXNwX2luZm8pIHsKKwkJRFBVX0VSUk9SKCJpbnZhbGlkIHBhcmFtIGRwdV9lbmM6 JWQgb3IgZGlzcF9pbmZvOiVkXG4iLAorCQkJCQlkcHVfZW5jICE9IE5VTEwsIGRpc3BfaW5mbyAh PSBOVUxMKTsKKwkJcmV0dXJuOworCX0gZWxzZSBpZiAoZHB1X2VuYy0+bnVtX3BoeXNfZW5jcyA+ IEFSUkFZX1NJWkUoZHB1X2VuYy0+aHdfcHApKSB7CisJCURQVV9FUlJPUigiaW52YWxpZCBudW0g cGh5cyBlbmMgJWQvJWRcbiIsCisJCQkJZHB1X2VuYy0+bnVtX3BoeXNfZW5jcywKKwkJCQkoaW50 KSBBUlJBWV9TSVpFKGRwdV9lbmMtPmh3X3BwKSk7CisJCXJldHVybjsKKwl9CisKKwlkcm1fZW5j ID0gJmRwdV9lbmMtPmJhc2U7CisJLyogdGhpcyBwb2ludGVycyBhcmUgY2hlY2tlZCBpbiB2aXJ0 X2VuYWJsZV9oZWxwZXIgKi8KKwlwcml2ID0gZHJtX2VuYy0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwor CWRwdV9rbXMgPSB0b19kcHVfa21zKHByaXYtPmttcyk7CisJaWYgKCFkcHVfa21zKSB7CisJCURQ VV9FUlJPUigiaW52YWxpZCBkcHVfa21zXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWh3X21kcHRv cCA9IGRwdV9rbXMtPmh3X21kcDsKKwlpZiAoIWh3X21kcHRvcCkgeworCQlEUFVfRVJST1IoImlu dmFsaWQgbWRwdG9wXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChod19tZHB0b3AtPm9wcy5z ZXR1cF92c3luY19zb3VyY2UgJiYKKwkJCWRpc3BfaW5mby0+Y2FwYWJpbGl0aWVzICYgTVNNX0RJ U1BMQVlfQ0FQX0NNRF9NT0RFKSB7CisJCWZvciAoaSA9IDA7IGkgPCBkcHVfZW5jLT5udW1fcGh5 c19lbmNzOyBpKyspCisJCQl2c3luY19jZmcucHBudW1iZXJbaV0gPSBkcHVfZW5jLT5od19wcFtp XS0+aWR4OworCisJCXZzeW5jX2NmZy5wcF9jb3VudCA9IGRwdV9lbmMtPm51bV9waHlzX2VuY3M7 CisJCWlmIChkaXNwX2luZm8tPmlzX3RlX3VzaW5nX3dhdGNoZG9nX3RpbWVyKQorCQkJdnN5bmNf Y2ZnLnZzeW5jX3NvdXJjZSA9IERQVV9WU1lOQ19TT1VSQ0VfV0RfVElNRVJfMDsKKwkJZWxzZQor CQkJdnN5bmNfY2ZnLnZzeW5jX3NvdXJjZSA9IERQVV9WU1lOQzBfU09VUkNFX0dQSU87CisKKwkJ aHdfbWRwdG9wLT5vcHMuc2V0dXBfdnN5bmNfc291cmNlKGh3X21kcHRvcCwgJnZzeW5jX2NmZyk7 CisJfQorfQorCitzdGF0aWMgdm9pZCBfZHB1X2VuY29kZXJfaXJxX2NvbnRyb2woc3RydWN0IGRy bV9lbmNvZGVyICpkcm1fZW5jLCBib29sIGVuYWJsZSkKK3sKKwlzdHJ1Y3QgZHB1X2VuY29kZXJf dmlydCAqZHB1X2VuYzsKKwlpbnQgaTsKKworCWlmICghZHJtX2VuYykgeworCQlEUFVfRVJST1Io ImludmFsaWQgZW5jb2RlclxuIik7CisJCXJldHVybjsKKwl9CisKKwlkcHVfZW5jID0gdG9fZHB1 X2VuY29kZXJfdmlydChkcm1fZW5jKTsKKworCURQVV9ERUJVR19FTkMoZHB1X2VuYywgImVuYWJs ZTolZFxuIiwgZW5hYmxlKTsKKwlmb3IgKGkgPSAwOyBpIDwgZHB1X2VuYy0+bnVtX3BoeXNfZW5j czsgaSsrKSB7CisJCXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpwaHlzID0gZHB1X2VuYy0+cGh5 c19lbmNzW2ldOworCisJCWlmIChwaHlzICYmIHBoeXMtPm9wcy5pcnFfY29udHJvbCkKKwkJCXBo eXMtPm9wcy5pcnFfY29udHJvbChwaHlzLCBlbmFibGUpOworCX0KKworfQorCitzdGF0aWMgdm9p ZCBfZHB1X2VuY29kZXJfcmVzb3VyY2VfY29udHJvbF9oZWxwZXIoc3RydWN0IGRybV9lbmNvZGVy ICpkcm1fZW5jLAorCQlib29sIGVuYWJsZSkKK3sKKwlzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpw cml2OworCXN0cnVjdCBkcHVfa21zICpkcHVfa21zOworCXN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0 ICpkcHVfZW5jOworCisJZHB1X2VuYyA9IHRvX2RwdV9lbmNvZGVyX3ZpcnQoZHJtX2VuYyk7CisJ cHJpdiA9IGRybV9lbmMtPmRldi0+ZGV2X3ByaXZhdGU7CisJZHB1X2ttcyA9IHRvX2RwdV9rbXMo cHJpdi0+a21zKTsKKworCXRyYWNlX2RwdV9lbmNfcmNfaGVscGVyKERSTUlEKGRybV9lbmMpLCBl bmFibGUpOworCisJaWYgKCFkcHVfZW5jLT5jdXJfbWFzdGVyKSB7CisJCURQVV9FUlJPUigiZW5j b2RlciBtYXN0ZXIgbm90IHNldFxuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoZW5hYmxlKSB7 CisJCS8qIGVuYWJsZSBEUFUgY29yZSBjbGtzICovCisJCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJmRw dV9rbXMtPnBkZXYtPmRldik7CisKKwkJLyogZW5hYmxlIGFsbCB0aGUgaXJxICovCisJCV9kcHVf ZW5jb2Rlcl9pcnFfY29udHJvbChkcm1fZW5jLCB0cnVlKTsKKworCX0gZWxzZSB7CisJCS8qIGRp c2FibGUgYWxsIHRoZSBpcnEgKi8KKwkJX2RwdV9lbmNvZGVyX2lycV9jb250cm9sKGRybV9lbmMs IGZhbHNlKTsKKworCQkvKiBkaXNhYmxlIERQVSBjb3JlIGNsa3MgKi8KKwkJcG1fcnVudGltZV9w dXRfc3luYygmZHB1X2ttcy0+cGRldi0+ZGV2KTsKKwl9CisKK30KKworc3RhdGljIGludCBkcHVf ZW5jb2Rlcl9yZXNvdXJjZV9jb250cm9sKHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYywKKwkJ dTMyIHN3X2V2ZW50KQoreworCXN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5jOworCXN0 cnVjdCBtc21fZHJtX3ByaXZhdGUgKnByaXY7CisJc3RydWN0IG1zbV9kcm1fdGhyZWFkICpkaXNw X3RocmVhZDsKKwlib29sIGlzX3ZpZF9tb2RlID0gZmFsc2U7CisKKwlpZiAoIWRybV9lbmMgfHwg IWRybV9lbmMtPmRldiB8fCAhZHJtX2VuYy0+ZGV2LT5kZXZfcHJpdmF0ZSB8fAorCQkJIWRybV9l bmMtPmNydGMpIHsKKwkJRFBVX0VSUk9SKCJpbnZhbGlkIHBhcmFtZXRlcnNcbiIpOworCQlyZXR1 cm4gLUVJTlZBTDsKKwl9CisJZHB1X2VuYyA9IHRvX2RwdV9lbmNvZGVyX3ZpcnQoZHJtX2VuYyk7 CisJcHJpdiA9IGRybV9lbmMtPmRldi0+ZGV2X3ByaXZhdGU7CisJaXNfdmlkX21vZGUgPSBkcHVf ZW5jLT5kaXNwX2luZm8uY2FwYWJpbGl0aWVzICYKKwkJCQkJCU1TTV9ESVNQTEFZX0NBUF9WSURf TU9ERTsKKworCWlmIChkcm1fZW5jLT5jcnRjLT5pbmRleCA+PSBBUlJBWV9TSVpFKHByaXYtPmRp c3BfdGhyZWFkKSkgeworCQlEUFVfRVJST1IoImludmFsaWQgY3J0YyBpbmRleFxuIik7CisJCXJl dHVybiAtRUlOVkFMOworCX0KKwlkaXNwX3RocmVhZCA9ICZwcml2LT5kaXNwX3RocmVhZFtkcm1f ZW5jLT5jcnRjLT5pbmRleF07CisKKwkvKgorCSAqIHdoZW4gaWRsZV9wYyBpcyBub3Qgc3VwcG9y dGVkLCBwcm9jZXNzIG9ubHkgS0lDS09GRiwgU1RPUCBhbmQgTU9ERVNFVAorCSAqIGV2ZW50cyBh bmQgcmV0dXJuIGVhcmx5IGZvciBvdGhlciBldmVudHMgKGllIHdiIGRpc3BsYXkpLgorCSAqLwor CWlmICghZHB1X2VuYy0+aWRsZV9wY19zdXBwb3J0ZWQgJiYKKwkJCShzd19ldmVudCAhPSBEUFVf RU5DX1JDX0VWRU5UX0tJQ0tPRkYgJiYKKwkJCXN3X2V2ZW50ICE9IERQVV9FTkNfUkNfRVZFTlRf U1RPUCAmJgorCQkJc3dfZXZlbnQgIT0gRFBVX0VOQ19SQ19FVkVOVF9QUkVfU1RPUCkpCisJCXJl dHVybiAwOworCisJdHJhY2VfZHB1X2VuY19yYyhEUk1JRChkcm1fZW5jKSwgc3dfZXZlbnQsIGRw dV9lbmMtPmlkbGVfcGNfc3VwcG9ydGVkLAorCQkJIGRwdV9lbmMtPnJjX3N0YXRlLCAiYmVnaW4i KTsKKworCXN3aXRjaCAoc3dfZXZlbnQpIHsKKwljYXNlIERQVV9FTkNfUkNfRVZFTlRfS0lDS09G RjoKKwkJLyogY2FuY2VsIGRlbGF5ZWQgb2ZmIHdvcmssIGlmIGFueSAqLworCQlpZiAoa3RocmVh ZF9jYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoCisJCQkJJmRwdV9lbmMtPmRlbGF5ZWRfb2ZmX3dv cmspKQorCQkJRFBVX0RFQlVHX0VOQyhkcHVfZW5jLCAic3dfZXZlbnQ6JWQsIHdvcmsgY2FuY2Vs bGVkXG4iLAorCQkJCQlzd19ldmVudCk7CisKKwkJbXV0ZXhfbG9jaygmZHB1X2VuYy0+cmNfbG9j ayk7CisKKwkJLyogcmV0dXJuIGlmIHRoZSByZXNvdXJjZSBjb250cm9sIGlzIGFscmVhZHkgaW4g T04gc3RhdGUgKi8KKwkJaWYgKGRwdV9lbmMtPnJjX3N0YXRlID09IERQVV9FTkNfUkNfU1RBVEVf T04pIHsKKwkJCURSTV9ERUJVR19LTVMoImlkOyV1LCBzd19ldmVudDolZCwgcmMgaW4gT04gc3Rh dGVcbiIsCisJCQkJICAgICAgRFJNSUQoZHJtX2VuYyksIHN3X2V2ZW50KTsKKwkJCW11dGV4X3Vu bG9jaygmZHB1X2VuYy0+cmNfbG9jayk7CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIGlmIChkcHVf ZW5jLT5yY19zdGF0ZSAhPSBEUFVfRU5DX1JDX1NUQVRFX09GRiAmJgorCQkJCWRwdV9lbmMtPnJj X3N0YXRlICE9IERQVV9FTkNfUkNfU1RBVEVfSURMRSkgeworCQkJRFJNX0RFQlVHX0tNUygiaWQ7 JXUsIHN3X2V2ZW50OiVkLCByYyBpbiBzdGF0ZSAlZFxuIiwKKwkJCQkgICAgICBEUk1JRChkcm1f ZW5jKSwgc3dfZXZlbnQsCisJCQkJICAgICAgZHB1X2VuYy0+cmNfc3RhdGUpOworCQkJbXV0ZXhf dW5sb2NrKCZkcHVfZW5jLT5yY19sb2NrKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJ aWYgKGlzX3ZpZF9tb2RlICYmIGRwdV9lbmMtPnJjX3N0YXRlID09IERQVV9FTkNfUkNfU1RBVEVf SURMRSkKKwkJCV9kcHVfZW5jb2Rlcl9pcnFfY29udHJvbChkcm1fZW5jLCB0cnVlKTsKKwkJZWxz ZQorCQkJX2RwdV9lbmNvZGVyX3Jlc291cmNlX2NvbnRyb2xfaGVscGVyKGRybV9lbmMsIHRydWUp OworCisJCWRwdV9lbmMtPnJjX3N0YXRlID0gRFBVX0VOQ19SQ19TVEFURV9PTjsKKworCQl0cmFj ZV9kcHVfZW5jX3JjKERSTUlEKGRybV9lbmMpLCBzd19ldmVudCwKKwkJCQkgZHB1X2VuYy0+aWRs ZV9wY19zdXBwb3J0ZWQsIGRwdV9lbmMtPnJjX3N0YXRlLAorCQkJCSAia2lja29mZiIpOworCisJ CW11dGV4X3VubG9jaygmZHB1X2VuYy0+cmNfbG9jayk7CisJCWJyZWFrOworCisJY2FzZSBEUFVf RU5DX1JDX0VWRU5UX0ZSQU1FX0RPTkU6CisJCS8qCisJCSAqIG11dGV4IGxvY2sgaXMgbm90IHVz ZWQgYXMgdGhpcyBldmVudCBoYXBwZW5zIGF0IGludGVycnVwdAorCQkgKiBjb250ZXh0LiBBbmQg bG9ja2luZyBpcyBub3QgcmVxdWlyZWQgYXMsIHRoZSBvdGhlciBldmVudHMKKwkJICogbGlrZSBL SUNLT0ZGIGFuZCBTVE9QIGRvZXMgYSB3YWl0LWZvci1pZGxlIGJlZm9yZSBleGVjdXRpbmcKKwkJ ICogdGhlIHJlc291cmNlX2NvbnRyb2wKKwkJICovCisJCWlmIChkcHVfZW5jLT5yY19zdGF0ZSAh PSBEUFVfRU5DX1JDX1NUQVRFX09OKSB7CisJCQlEUk1fREVCVUdfS01TKCJpZDolZCwgc3dfZXZl bnQ6JWQscmM6JWQtdW5leHBlY3RlZFxuIiwKKwkJCQkgICAgICBEUk1JRChkcm1fZW5jKSwgc3df ZXZlbnQsCisJCQkJICAgICAgZHB1X2VuYy0+cmNfc3RhdGUpOworCQkJcmV0dXJuIC1FSU5WQUw7 CisJCX0KKworCQkvKgorCQkgKiBzY2hlZHVsZSBvZmYgd29yayBpdGVtIG9ubHkgd2hlbiB0aGVy ZSBhcmUgbm8KKwkJICogZnJhbWVzIHBlbmRpbmcKKwkJICovCisJCWlmIChkcHVfY3J0Y19mcmFt ZV9wZW5kaW5nKGRybV9lbmMtPmNydGMpID4gMSkgeworCQkJRFJNX0RFQlVHX0tNUygiaWQ6JWQg c2tpcCBzY2hlZHVsZSB3b3JrXG4iLAorCQkJCSAgICAgIERSTUlEKGRybV9lbmMpKTsKKwkJCXJl dHVybiAwOworCQl9CisKKwkJa3RocmVhZF9xdWV1ZV9kZWxheWVkX3dvcmsoCisJCQkmZGlzcF90 aHJlYWQtPndvcmtlciwKKwkJCSZkcHVfZW5jLT5kZWxheWVkX29mZl93b3JrLAorCQkJbXNlY3Nf dG9famlmZmllcyhkcHVfZW5jLT5pZGxlX3RpbWVvdXQpKTsKKworCQl0cmFjZV9kcHVfZW5jX3Jj KERSTUlEKGRybV9lbmMpLCBzd19ldmVudCwKKwkJCQkgZHB1X2VuYy0+aWRsZV9wY19zdXBwb3J0 ZWQsIGRwdV9lbmMtPnJjX3N0YXRlLAorCQkJCSAiZnJhbWUgZG9uZSIpOworCQlicmVhazsKKwor CWNhc2UgRFBVX0VOQ19SQ19FVkVOVF9QUkVfU1RPUDoKKwkJLyogY2FuY2VsIGRlbGF5ZWQgb2Zm IHdvcmssIGlmIGFueSAqLworCQlpZiAoa3RocmVhZF9jYW5jZWxfZGVsYXllZF93b3JrX3N5bmMo CisJCQkJJmRwdV9lbmMtPmRlbGF5ZWRfb2ZmX3dvcmspKQorCQkJRFBVX0RFQlVHX0VOQyhkcHVf ZW5jLCAic3dfZXZlbnQ6JWQsIHdvcmsgY2FuY2VsbGVkXG4iLAorCQkJCQlzd19ldmVudCk7CisK KwkJbXV0ZXhfbG9jaygmZHB1X2VuYy0+cmNfbG9jayk7CisKKwkJaWYgKGlzX3ZpZF9tb2RlICYm CisJCQkgIGRwdV9lbmMtPnJjX3N0YXRlID09IERQVV9FTkNfUkNfU1RBVEVfSURMRSkgeworCQkJ X2RwdV9lbmNvZGVyX2lycV9jb250cm9sKGRybV9lbmMsIHRydWUpOworCQl9CisJCS8qIHNraXAg aWYgaXMgYWxyZWFkeSBPRkYgb3IgSURMRSwgcmVzb3VyY2VzIGFyZSBvZmYgYWxyZWFkeSAqLwor CQllbHNlIGlmIChkcHVfZW5jLT5yY19zdGF0ZSA9PSBEUFVfRU5DX1JDX1NUQVRFX09GRiB8fAor CQkJCWRwdV9lbmMtPnJjX3N0YXRlID09IERQVV9FTkNfUkNfU1RBVEVfSURMRSkgeworCQkJRFJN X0RFQlVHX0tNUygiaWQ6JXUsIHN3X2V2ZW50OiVkLCByYyBpbiAlZCBzdGF0ZVxuIiwKKwkJCQkg ICAgICBEUk1JRChkcm1fZW5jKSwgc3dfZXZlbnQsCisJCQkJICAgICAgZHB1X2VuYy0+cmNfc3Rh dGUpOworCQkJbXV0ZXhfdW5sb2NrKCZkcHVfZW5jLT5yY19sb2NrKTsKKwkJCXJldHVybiAwOwor CQl9CisKKwkJZHB1X2VuYy0+cmNfc3RhdGUgPSBEUFVfRU5DX1JDX1NUQVRFX1BSRV9PRkY7CisK KwkJdHJhY2VfZHB1X2VuY19yYyhEUk1JRChkcm1fZW5jKSwgc3dfZXZlbnQsCisJCQkJIGRwdV9l bmMtPmlkbGVfcGNfc3VwcG9ydGVkLCBkcHVfZW5jLT5yY19zdGF0ZSwKKwkJCQkgInByZSBzdG9w Iik7CisKKwkJbXV0ZXhfdW5sb2NrKCZkcHVfZW5jLT5yY19sb2NrKTsKKwkJYnJlYWs7CisKKwlj YXNlIERQVV9FTkNfUkNfRVZFTlRfU1RPUDoKKwkJbXV0ZXhfbG9jaygmZHB1X2VuYy0+cmNfbG9j ayk7CisKKwkJLyogcmV0dXJuIGlmIHRoZSByZXNvdXJjZSBjb250cm9sIGlzIGFscmVhZHkgaW4g T0ZGIHN0YXRlICovCisJCWlmIChkcHVfZW5jLT5yY19zdGF0ZSA9PSBEUFVfRU5DX1JDX1NUQVRF X09GRikgeworCQkJRFJNX0RFQlVHX0tNUygiaWQ6ICV1LCBzd19ldmVudDolZCwgcmMgaW4gT0ZG IHN0YXRlXG4iLAorCQkJCSAgICAgIERSTUlEKGRybV9lbmMpLCBzd19ldmVudCk7CisJCQltdXRl eF91bmxvY2soJmRwdV9lbmMtPnJjX2xvY2spOworCQkJcmV0dXJuIDA7CisJCX0gZWxzZSBpZiAo ZHB1X2VuYy0+cmNfc3RhdGUgPT0gRFBVX0VOQ19SQ19TVEFURV9PTikgeworCQkJRFJNX0VSUk9S KCJpZDogJXUsIHN3X2V2ZW50OiVkLCByYyBpbiBzdGF0ZSAlZFxuIiwKKwkJCQkgIERSTUlEKGRy bV9lbmMpLCBzd19ldmVudCwgZHB1X2VuYy0+cmNfc3RhdGUpOworCQkJbXV0ZXhfdW5sb2NrKCZk cHVfZW5jLT5yY19sb2NrKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJLyoqCisJCSAq IGV4cGVjdCB0byBhcnJpdmUgaGVyZSBvbmx5IGlmIGluIGVpdGhlciBpZGxlIHN0YXRlIG9yIHBy ZS1vZmYKKwkJICogYW5kIGluIElETEUgc3RhdGUgdGhlIHJlc291cmNlcyBhcmUgYWxyZWFkeSBk aXNhYmxlZAorCQkgKi8KKwkJaWYgKGRwdV9lbmMtPnJjX3N0YXRlID09IERQVV9FTkNfUkNfU1RB VEVfUFJFX09GRikKKwkJCV9kcHVfZW5jb2Rlcl9yZXNvdXJjZV9jb250cm9sX2hlbHBlcihkcm1f ZW5jLCBmYWxzZSk7CisKKwkJZHB1X2VuYy0+cmNfc3RhdGUgPSBEUFVfRU5DX1JDX1NUQVRFX09G RjsKKworCQl0cmFjZV9kcHVfZW5jX3JjKERSTUlEKGRybV9lbmMpLCBzd19ldmVudCwKKwkJCQkg ZHB1X2VuYy0+aWRsZV9wY19zdXBwb3J0ZWQsIGRwdV9lbmMtPnJjX3N0YXRlLAorCQkJCSAic3Rv cCIpOworCisJCW11dGV4X3VubG9jaygmZHB1X2VuYy0+cmNfbG9jayk7CisJCWJyZWFrOworCisJ Y2FzZSBEUFVfRU5DX1JDX0VWRU5UX0VOVEVSX0lETEU6CisJCW11dGV4X2xvY2soJmRwdV9lbmMt PnJjX2xvY2spOworCisJCWlmIChkcHVfZW5jLT5yY19zdGF0ZSAhPSBEUFVfRU5DX1JDX1NUQVRF X09OKSB7CisJCQlEUk1fRVJST1IoImlkOiAldSwgc3dfZXZlbnQ6JWQsIHJjOiVkICFPTiBzdGF0 ZVxuIiwKKwkJCQkgIERSTUlEKGRybV9lbmMpLCBzd19ldmVudCwgZHB1X2VuYy0+cmNfc3RhdGUp OworCQkJbXV0ZXhfdW5sb2NrKCZkcHVfZW5jLT5yY19sb2NrKTsKKwkJCXJldHVybiAwOworCQl9 CisKKwkJLyoKKwkJICogaWYgd2UgYXJlIGluIE9OIGJ1dCBhIGZyYW1lIHdhcyBqdXN0IGtpY2tl ZCBvZmYsCisJCSAqIGlnbm9yZSB0aGUgSURMRSBldmVudCwgaXQncyBwcm9iYWJseSBhIHN0YWxl IHRpbWVyIGV2ZW50CisJCSAqLworCQlpZiAoZHB1X2VuYy0+ZnJhbWVfYnVzeV9tYXNrWzBdKSB7 CisJCQlEUk1fRVJST1IoImlkOiV1LCBzd19ldmVudDolZCwgcmM6JWQgZnJhbWUgcGVuZGluZ1xu IiwKKwkJCQkgIERSTUlEKGRybV9lbmMpLCBzd19ldmVudCwgZHB1X2VuYy0+cmNfc3RhdGUpOwor CQkJbXV0ZXhfdW5sb2NrKCZkcHVfZW5jLT5yY19sb2NrKTsKKwkJCXJldHVybiAwOworCQl9CisK KwkJaWYgKGlzX3ZpZF9tb2RlKQorCQkJX2RwdV9lbmNvZGVyX2lycV9jb250cm9sKGRybV9lbmMs IGZhbHNlKTsKKwkJZWxzZQorCQkJX2RwdV9lbmNvZGVyX3Jlc291cmNlX2NvbnRyb2xfaGVscGVy KGRybV9lbmMsIGZhbHNlKTsKKworCQlkcHVfZW5jLT5yY19zdGF0ZSA9IERQVV9FTkNfUkNfU1RB VEVfSURMRTsKKworCQl0cmFjZV9kcHVfZW5jX3JjKERSTUlEKGRybV9lbmMpLCBzd19ldmVudCwK KwkJCQkgZHB1X2VuYy0+aWRsZV9wY19zdXBwb3J0ZWQsIGRwdV9lbmMtPnJjX3N0YXRlLAorCQkJ CSAiaWRsZSIpOworCisJCW11dGV4X3VubG9jaygmZHB1X2VuYy0+cmNfbG9jayk7CisJCWJyZWFr OworCisJZGVmYXVsdDoKKwkJRFJNX0VSUk9SKCJpZDoldSwgdW5leHBlY3RlZCBzd19ldmVudDog JWRcbiIsIERSTUlEKGRybV9lbmMpLAorCQkJICBzd19ldmVudCk7CisJCXRyYWNlX2RwdV9lbmNf cmMoRFJNSUQoZHJtX2VuYyksIHN3X2V2ZW50LAorCQkJCSBkcHVfZW5jLT5pZGxlX3BjX3N1cHBv cnRlZCwgZHB1X2VuYy0+cmNfc3RhdGUsCisJCQkJICJlcnJvciIpOworCQlicmVhazsKKwl9CisK Kwl0cmFjZV9kcHVfZW5jX3JjKERSTUlEKGRybV9lbmMpLCBzd19ldmVudCwKKwkJCSBkcHVfZW5j LT5pZGxlX3BjX3N1cHBvcnRlZCwgZHB1X2VuYy0+cmNfc3RhdGUsCisJCQkgImVuZCIpOworCXJl dHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkcHVfZW5jb2Rlcl92aXJ0X21vZGVfc2V0KHN0cnVj dCBkcm1fZW5jb2RlciAqZHJtX2VuYywKKwkJCQkgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k ZSAqbW9kZSwKKwkJCQkgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqX21vZGUpCit7 CisJc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmM7CisJc3RydWN0IG1zbV9kcm1fcHJp dmF0ZSAqcHJpdjsKKwlzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttczsKKwlzdHJ1Y3QgbGlzdF9oZWFk ICpjb25uZWN0b3JfbGlzdDsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubiA9IE5VTEwsICpj b25uX2l0ZXI7CisJc3RydWN0IGRwdV9ybV9od19pdGVyIHBwX2l0ZXI7CisJc3RydWN0IG1zbV9k aXNwbGF5X3RvcG9sb2d5IHRvcG9sb2d5OworCWVudW0gZHB1X3JtX3RvcG9sb2d5X25hbWUgdG9w b2xvZ3lfbmFtZTsKKwlpbnQgaSA9IDAsIHJldDsKKworCWlmICghZHJtX2VuYykgeworCQlEUFVf RVJST1IoImludmFsaWQgZW5jb2RlclxuIik7CisJCXJldHVybjsKKwl9CisKKwlkcHVfZW5jID0g dG9fZHB1X2VuY29kZXJfdmlydChkcm1fZW5jKTsKKwlEUFVfREVCVUdfRU5DKGRwdV9lbmMsICJc biIpOworCisJcHJpdiA9IGRybV9lbmMtPmRldi0+ZGV2X3ByaXZhdGU7CisJZHB1X2ttcyA9IHRv X2RwdV9rbXMocHJpdi0+a21zKTsKKwljb25uZWN0b3JfbGlzdCA9ICZkcHVfa21zLT5kZXYtPm1v ZGVfY29uZmlnLmNvbm5lY3Rvcl9saXN0OworCisJdHJhY2VfZHB1X2VuY19tb2RlX3NldChEUk1J RChkcm1fZW5jKSk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5faXRlciwgY29ubmVjdG9y X2xpc3QsIGhlYWQpCisJCWlmIChjb25uX2l0ZXItPmVuY29kZXIgPT0gZHJtX2VuYykKKwkJCWNv bm4gPSBjb25uX2l0ZXI7CisKKwlpZiAoIWNvbm4pIHsKKwkJRFBVX0VSUk9SX0VOQyhkcHVfZW5j LCAiZmFpbGVkIHRvIGZpbmQgYXR0YWNoZWQgY29ubmVjdG9yXG4iKTsKKwkJcmV0dXJuOworCX0g ZWxzZSBpZiAoIWNvbm4tPnN0YXRlKSB7CisJCURQVV9FUlJPUl9FTkMoZHB1X2VuYywgImludmFs aWQgY29ubmVjdG9yIHN0YXRlXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXRvcG9sb2d5ID0gZHB1 X2VuY29kZXJfZ2V0X3RvcG9sb2d5KGRwdV9lbmMsIGRwdV9rbXMsIGFkal9tb2RlKTsKKworCS8q IFJlc2VydmUgZHluYW1pYyByZXNvdXJjZXMgbm93LiBJbmRpY2F0aW5nIG5vbi1BdG9taWNUZXN0 IHBoYXNlICovCisJcmV0ID0gZHB1X3JtX3Jlc2VydmUoJmRwdV9rbXMtPnJtLCBkcm1fZW5jLCBk cm1fZW5jLT5jcnRjLT5zdGF0ZSwKKwkJCWNvbm4tPnN0YXRlLCB0b3BvbG9neSwgZmFsc2UpOwor CWlmIChyZXQpIHsKKwkJRFBVX0VSUk9SX0VOQyhkcHVfZW5jLAorCQkJCSJmYWlsZWQgdG8gcmVz ZXJ2ZSBodyByZXNvdXJjZXMsICVkXG4iLCByZXQpOworCQlyZXR1cm47CisJfQorCisJZHB1X3Jt X2luaXRfaHdfaXRlcigmcHBfaXRlciwgZHJtX2VuYy0+YmFzZS5pZCwgRFBVX0hXX0JMS19QSU5H UE9ORyk7CisJZm9yIChpID0gMDsgaSA8IE1BWF9DSEFOTkVMU19QRVJfRU5DOyBpKyspIHsKKwkJ ZHB1X2VuYy0+aHdfcHBbaV0gPSBOVUxMOworCQlpZiAoIWRwdV9ybV9nZXRfaHcoJmRwdV9rbXMt PnJtLCAmcHBfaXRlcikpCisJCQlicmVhazsKKwkJZHB1X2VuYy0+aHdfcHBbaV0gPSAoc3RydWN0 IGRwdV9od19waW5ncG9uZyAqKSBwcF9pdGVyLmh3OworCX0KKworCXRvcG9sb2d5X25hbWUgPSBk cHVfcm1fZ2V0X3RvcG9sb2d5X25hbWUodG9wb2xvZ3kpOworCWZvciAoaSA9IDA7IGkgPCBkcHVf ZW5jLT5udW1fcGh5c19lbmNzOyBpKyspIHsKKwkJc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKnBo eXMgPSBkcHVfZW5jLT5waHlzX2VuY3NbaV07CisKKwkJaWYgKHBoeXMpIHsKKwkJCWlmICghZHB1 X2VuYy0+aHdfcHBbaV0pIHsKKwkJCQlEUFVfRVJST1JfRU5DKGRwdV9lbmMsCisJCQkJICAgICJp bnZhbGlkIHBpbmdwb25nIGJsb2NrIGZvciB0aGUgZW5jb2RlclxuIik7CisJCQkJcmV0dXJuOwor CQkJfQorCQkJcGh5cy0+aHdfcHAgPSBkcHVfZW5jLT5od19wcFtpXTsKKwkJCXBoeXMtPmNvbm5l Y3RvciA9IGNvbm4tPnN0YXRlLT5jb25uZWN0b3I7CisJCQlwaHlzLT50b3BvbG9neV9uYW1lID0g dG9wb2xvZ3lfbmFtZTsKKwkJCWlmIChwaHlzLT5vcHMubW9kZV9zZXQpCisJCQkJcGh5cy0+b3Bz Lm1vZGVfc2V0KHBoeXMsIG1vZGUsIGFkal9tb2RlKTsKKwkJfQorCX0KKworCWRwdV9lbmMtPm1v ZGVfc2V0X2NvbXBsZXRlID0gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgX2RwdV9lbmNvZGVyX3Zp cnRfZW5hYmxlX2hlbHBlcihzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMpCit7CisJc3RydWN0 IGRwdV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmMgPSBOVUxMOworCXN0cnVjdCBtc21fZHJtX3ByaXZh dGUgKnByaXY7CisJc3RydWN0IGRwdV9rbXMgKmRwdV9rbXM7CisKKwlpZiAoIWRybV9lbmMgfHwg IWRybV9lbmMtPmRldiB8fCAhZHJtX2VuYy0+ZGV2LT5kZXZfcHJpdmF0ZSkgeworCQlEUFVfRVJS T1IoImludmFsaWQgcGFyYW1ldGVyc1xuIik7CisJCXJldHVybjsKKwl9CisKKwlwcml2ID0gZHJt X2VuYy0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlkcHVfa21zID0gdG9fZHB1X2ttcyhwcml2LT5rbXMp OworCWlmICghZHB1X2ttcykgeworCQlEUFVfRVJST1IoImludmFsaWQgZHB1X2ttc1xuIik7CisJ CXJldHVybjsKKwl9CisKKwlkcHVfZW5jID0gdG9fZHB1X2VuY29kZXJfdmlydChkcm1fZW5jKTsK KwlpZiAoIWRwdV9lbmMgfHwgIWRwdV9lbmMtPmN1cl9tYXN0ZXIpIHsKKwkJRFBVX0VSUk9SKCJp bnZhbGlkIGRwdSBlbmNvZGVyL21hc3RlclxuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoZHB1 X2VuYy0+ZGlzcF9pbmZvLmludGZfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBv cnQgJiYKKwkgICAgZHB1X2VuYy0+Y3VyX21hc3Rlci0+aHdfbWRwdG9wICYmCisJICAgIGRwdV9l bmMtPmN1cl9tYXN0ZXItPmh3X21kcHRvcC0+b3BzLmludGZfYXVkaW9fc2VsZWN0KQorCQlkcHVf ZW5jLT5jdXJfbWFzdGVyLT5od19tZHB0b3AtPm9wcy5pbnRmX2F1ZGlvX3NlbGVjdCgKKwkJCQkJ ZHB1X2VuYy0+Y3VyX21hc3Rlci0+aHdfbWRwdG9wKTsKKworCWlmIChkcHVfZW5jLT5jdXJfbWFz dGVyLT5od19tZHB0b3AgJiYKKwkJCWRwdV9lbmMtPmN1cl9tYXN0ZXItPmh3X21kcHRvcC0+b3Bz LnJlc2V0X3Vid2MpCisJCWRwdV9lbmMtPmN1cl9tYXN0ZXItPmh3X21kcHRvcC0+b3BzLnJlc2V0 X3Vid2MoCisJCQkJZHB1X2VuYy0+Y3VyX21hc3Rlci0+aHdfbWRwdG9wLAorCQkJCWRwdV9rbXMt PmNhdGFsb2cpOworCisJX2RwdV9lbmNvZGVyX3VwZGF0ZV92c3luY19zb3VyY2UoZHB1X2VuYywg JmRwdV9lbmMtPmRpc3BfaW5mbyk7Cit9CisKK3ZvaWQgZHB1X2VuY29kZXJfdmlydF9yZXN0b3Jl KHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYykKK3sKKwlzdHJ1Y3QgZHB1X2VuY29kZXJfdmly dCAqZHB1X2VuYyA9IE5VTEw7CisJaW50IGk7CisKKwlpZiAoIWRybV9lbmMpIHsKKwkJRFBVX0VS Uk9SKCJpbnZhbGlkIGVuY29kZXJcbiIpOworCQlyZXR1cm47CisJfQorCWRwdV9lbmMgPSB0b19k cHVfZW5jb2Rlcl92aXJ0KGRybV9lbmMpOworCisJZm9yIChpID0gMDsgaSA8IGRwdV9lbmMtPm51 bV9waHlzX2VuY3M7IGkrKykgeworCQlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqcGh5cyA9IGRw dV9lbmMtPnBoeXNfZW5jc1tpXTsKKworCQlpZiAocGh5cyAmJiAocGh5cyAhPSBkcHVfZW5jLT5j dXJfbWFzdGVyKSAmJiBwaHlzLT5vcHMucmVzdG9yZSkKKwkJCXBoeXMtPm9wcy5yZXN0b3JlKHBo eXMpOworCX0KKworCWlmIChkcHVfZW5jLT5jdXJfbWFzdGVyICYmIGRwdV9lbmMtPmN1cl9tYXN0 ZXItPm9wcy5yZXN0b3JlKQorCQlkcHVfZW5jLT5jdXJfbWFzdGVyLT5vcHMucmVzdG9yZShkcHVf ZW5jLT5jdXJfbWFzdGVyKTsKKworCV9kcHVfZW5jb2Rlcl92aXJ0X2VuYWJsZV9oZWxwZXIoZHJt X2VuYyk7Cit9CisKK3N0YXRpYyB2b2lkIGRwdV9lbmNvZGVyX3ZpcnRfZW5hYmxlKHN0cnVjdCBk cm1fZW5jb2RlciAqZHJtX2VuYykKK3sKKwlzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2Vu YyA9IE5VTEw7CisJaW50IGksIHJldCA9IDA7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmN1 cl9tb2RlID0gTlVMTDsKKworCWlmICghZHJtX2VuYykgeworCQlEUFVfRVJST1IoImludmFsaWQg ZW5jb2RlclxuIik7CisJCXJldHVybjsKKwl9CisJZHB1X2VuYyA9IHRvX2RwdV9lbmNvZGVyX3Zp cnQoZHJtX2VuYyk7CisJY3VyX21vZGUgPSAmZHB1X2VuYy0+YmFzZS5jcnRjLT5zdGF0ZS0+YWRq dXN0ZWRfbW9kZTsKKworCXRyYWNlX2RwdV9lbmNfZW5hYmxlKERSTUlEKGRybV9lbmMpLCBjdXJf bW9kZS0+aGRpc3BsYXksCisJCQkgICAgIGN1cl9tb2RlLT52ZGlzcGxheSk7CisKKwlkcHVfZW5j LT5jdXJfbWFzdGVyID0gTlVMTDsKKwlmb3IgKGkgPSAwOyBpIDwgZHB1X2VuYy0+bnVtX3BoeXNf ZW5jczsgaSsrKSB7CisJCXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpwaHlzID0gZHB1X2VuYy0+ cGh5c19lbmNzW2ldOworCisJCWlmIChwaHlzICYmIHBoeXMtPm9wcy5pc19tYXN0ZXIgJiYgcGh5 cy0+b3BzLmlzX21hc3RlcihwaHlzKSkgeworCQkJRFBVX0RFQlVHX0VOQyhkcHVfZW5jLCAibWFz dGVyIGlzIG5vdyBpZHggJWRcbiIsIGkpOworCQkJZHB1X2VuYy0+Y3VyX21hc3RlciA9IHBoeXM7 CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghZHB1X2VuYy0+Y3VyX21hc3RlcikgeworCQlE UFVfRVJST1IoInZpcnQgZW5jb2RlciBoYXMgbm8gbWFzdGVyISBudW1fcGh5cyAlZFxuIiwgaSk7 CisJCXJldHVybjsKKwl9CisKKwlyZXQgPSBkcHVfZW5jb2Rlcl9yZXNvdXJjZV9jb250cm9sKGRy bV9lbmMsIERQVV9FTkNfUkNfRVZFTlRfS0lDS09GRik7CisJaWYgKHJldCkgeworCQlEUFVfRVJS T1JfRU5DKGRwdV9lbmMsICJkcHUgcmVzb3VyY2UgY29udHJvbCBmYWlsZWQ6ICVkXG4iLAorCQkJ CXJldCk7CisJCXJldHVybjsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgZHB1X2VuYy0+bnVtX3Bo eXNfZW5jczsgaSsrKSB7CisJCXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpwaHlzID0gZHB1X2Vu Yy0+cGh5c19lbmNzW2ldOworCisJCWlmICghcGh5cykKKwkJCWNvbnRpbnVlOworCisJCWlmIChw aHlzICE9IGRwdV9lbmMtPmN1cl9tYXN0ZXIpIHsKKwkJCWlmIChwaHlzLT5vcHMuZW5hYmxlKQor CQkJCXBoeXMtPm9wcy5lbmFibGUocGh5cyk7CisJCX0KKworCQlpZiAoZHB1X2VuYy0+bWlzcl9l bmFibGUgJiYgKGRwdV9lbmMtPmRpc3BfaW5mby5jYXBhYmlsaXRpZXMgJgorCQkgICAgIE1TTV9E SVNQTEFZX0NBUF9WSURfTU9ERSkgJiYgcGh5cy0+b3BzLnNldHVwX21pc3IpCisJCQlwaHlzLT5v cHMuc2V0dXBfbWlzcihwaHlzLCB0cnVlLAorCQkJCQkJZHB1X2VuYy0+bWlzcl9mcmFtZV9jb3Vu dCk7CisJfQorCisJaWYgKGRwdV9lbmMtPmN1cl9tYXN0ZXItPm9wcy5lbmFibGUpCisJCWRwdV9l bmMtPmN1cl9tYXN0ZXItPm9wcy5lbmFibGUoZHB1X2VuYy0+Y3VyX21hc3Rlcik7CisKKwlfZHB1 X2VuY29kZXJfdmlydF9lbmFibGVfaGVscGVyKGRybV9lbmMpOworfQorCitzdGF0aWMgdm9pZCBk cHVfZW5jb2Rlcl92aXJ0X2Rpc2FibGUoc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jKQorewor CXN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5jID0gTlVMTDsKKwlzdHJ1Y3QgbXNtX2Ry bV9wcml2YXRlICpwcml2OworCXN0cnVjdCBkcHVfa21zICpkcHVfa21zOworCXN0cnVjdCBkcm1f ZGlzcGxheV9tb2RlICptb2RlOworCWludCBpID0gMDsKKworCWlmICghZHJtX2VuYykgeworCQlE UFVfRVJST1IoImludmFsaWQgZW5jb2RlclxuIik7CisJCXJldHVybjsKKwl9IGVsc2UgaWYgKCFk cm1fZW5jLT5kZXYpIHsKKwkJRFBVX0VSUk9SKCJpbnZhbGlkIGRldlxuIik7CisJCXJldHVybjsK Kwl9IGVsc2UgaWYgKCFkcm1fZW5jLT5kZXYtPmRldl9wcml2YXRlKSB7CisJCURQVV9FUlJPUigi aW52YWxpZCBkZXZfcHJpdmF0ZVxuIik7CisJCXJldHVybjsKKwl9CisKKwltb2RlID0gJmRybV9l bmMtPmNydGMtPnN0YXRlLT5hZGp1c3RlZF9tb2RlOworCisJZHB1X2VuYyA9IHRvX2RwdV9lbmNv ZGVyX3ZpcnQoZHJtX2VuYyk7CisJRFBVX0RFQlVHX0VOQyhkcHVfZW5jLCAiXG4iKTsKKworCXBy aXYgPSBkcm1fZW5jLT5kZXYtPmRldl9wcml2YXRlOworCWRwdV9rbXMgPSB0b19kcHVfa21zKHBy aXYtPmttcyk7CisKKwl0cmFjZV9kcHVfZW5jX2Rpc2FibGUoRFJNSUQoZHJtX2VuYykpOworCisJ Lyogd2FpdCBmb3IgaWRsZSAqLworCWRwdV9lbmNvZGVyX3dhaXRfZm9yX2V2ZW50KGRybV9lbmMs IE1TTV9FTkNfVFhfQ09NUExFVEUpOworCisJZHB1X2VuY29kZXJfcmVzb3VyY2VfY29udHJvbChk cm1fZW5jLCBEUFVfRU5DX1JDX0VWRU5UX1BSRV9TVE9QKTsKKworCWZvciAoaSA9IDA7IGkgPCBk cHVfZW5jLT5udW1fcGh5c19lbmNzOyBpKyspIHsKKwkJc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMg KnBoeXMgPSBkcHVfZW5jLT5waHlzX2VuY3NbaV07CisKKwkJaWYgKHBoeXMgJiYgcGh5cy0+b3Bz LmRpc2FibGUpCisJCQlwaHlzLT5vcHMuZGlzYWJsZShwaHlzKTsKKwl9CisKKwkvKiBhZnRlciBw aHlzIHdhaXRzIGZvciBmcmFtZS1kb25lLCBzaG91bGQgYmUgbm8gbW9yZSBmcmFtZXMgcGVuZGlu ZyAqLworCWlmIChhdG9taWNfeGNoZygmZHB1X2VuYy0+ZnJhbWVfZG9uZV90aW1lb3V0LCAwKSkg eworCQlEUFVfRVJST1IoImVuYyVkIHRpbWVvdXQgcGVuZGluZ1xuIiwgZHJtX2VuYy0+YmFzZS5p ZCk7CisJCWRlbF90aW1lcl9zeW5jKCZkcHVfZW5jLT5mcmFtZV9kb25lX3RpbWVyKTsKKwl9CisK KwlkcHVfZW5jb2Rlcl9yZXNvdXJjZV9jb250cm9sKGRybV9lbmMsIERQVV9FTkNfUkNfRVZFTlRf U1RPUCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZHB1X2VuYy0+bnVtX3BoeXNfZW5jczsgaSsrKSB7 CisJCWlmIChkcHVfZW5jLT5waHlzX2VuY3NbaV0pCisJCQlkcHVfZW5jLT5waHlzX2VuY3NbaV0t PmNvbm5lY3RvciA9IE5VTEw7CisJfQorCisJZHB1X2VuYy0+Y3VyX21hc3RlciA9IE5VTEw7CisK KwlEUFVfREVCVUdfRU5DKGRwdV9lbmMsICJlbmNvZGVyIGRpc2FibGVkXG4iKTsKKworCWRwdV9y bV9yZWxlYXNlKCZkcHVfa21zLT5ybSwgZHJtX2VuYyk7Cit9CisKK3N0YXRpYyBlbnVtIGRwdV9p bnRmIGRwdV9lbmNvZGVyX2dldF9pbnRmKHN0cnVjdCBkcHVfbWRzc19jZmcgKmNhdGFsb2csCisJ CWVudW0gZHB1X2ludGZfdHlwZSB0eXBlLCB1MzIgY29udHJvbGxlcl9pZCkKK3sKKwlpbnQgaSA9 IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgY2F0YWxvZy0+aW50Zl9jb3VudDsgaSsrKSB7CisJCWlm IChjYXRhbG9nLT5pbnRmW2ldLnR5cGUgPT0gdHlwZQorCQkgICAgJiYgY2F0YWxvZy0+aW50Zltp XS5jb250cm9sbGVyX2lkID09IGNvbnRyb2xsZXJfaWQpIHsKKwkJCXJldHVybiBjYXRhbG9nLT5p bnRmW2ldLmlkOworCQl9CisJfQorCisJcmV0dXJuIElOVEZfTUFYOworfQorCitzdGF0aWMgdm9p ZCBkcHVfZW5jb2Rlcl92YmxhbmtfY2FsbGJhY2soc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5j LAorCQlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqcGh5X2VuYykKK3sKKwlzdHJ1Y3QgZHB1X2Vu Y29kZXJfdmlydCAqZHB1X2VuYyA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOwor CisJaWYgKCFkcm1fZW5jIHx8ICFwaHlfZW5jKQorCQlyZXR1cm47CisKKwlEUFVfQVRSQUNFX0JF R0lOKCJlbmNvZGVyX3ZibGFua19jYWxsYmFjayIpOworCWRwdV9lbmMgPSB0b19kcHVfZW5jb2Rl cl92aXJ0KGRybV9lbmMpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRwdV9lbmMtPmVuY19zcGlu bG9jaywgbG9ja19mbGFncyk7CisJaWYgKGRwdV9lbmMtPmNydGNfdmJsYW5rX2NiKQorCQlkcHVf ZW5jLT5jcnRjX3ZibGFua19jYihkcHVfZW5jLT5jcnRjX3ZibGFua19jYl9kYXRhKTsKKwlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZkcHVfZW5jLT5lbmNfc3BpbmxvY2ssIGxvY2tfZmxhZ3MpOwor CisJYXRvbWljX2luYygmcGh5X2VuYy0+dnN5bmNfY250KTsKKwlEUFVfQVRSQUNFX0VORCgiZW5j b2Rlcl92YmxhbmtfY2FsbGJhY2siKTsKK30KKworc3RhdGljIHZvaWQgZHB1X2VuY29kZXJfdW5k ZXJydW5fY2FsbGJhY2soc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jLAorCQlzdHJ1Y3QgZHB1 X2VuY29kZXJfcGh5cyAqcGh5X2VuYykKK3sKKwlpZiAoIXBoeV9lbmMpCisJCXJldHVybjsKKwor CURQVV9BVFJBQ0VfQkVHSU4oImVuY29kZXJfdW5kZXJydW5fY2FsbGJhY2siKTsKKwlhdG9taWNf aW5jKCZwaHlfZW5jLT51bmRlcnJ1bl9jbnQpOworCXRyYWNlX2RwdV9lbmNfdW5kZXJydW5fY2Io RFJNSUQoZHJtX2VuYyksCisJCQkJICBhdG9taWNfcmVhZCgmcGh5X2VuYy0+dW5kZXJydW5fY250 KSk7CisJRFBVX0FUUkFDRV9FTkQoImVuY29kZXJfdW5kZXJydW5fY2FsbGJhY2siKTsKK30KKwor dm9pZCBkcHVfZW5jb2Rlcl9yZWdpc3Rlcl92YmxhbmtfY2FsbGJhY2soc3RydWN0IGRybV9lbmNv ZGVyICpkcm1fZW5jLAorCQl2b2lkICgqdmJsX2NiKSh2b2lkICopLCB2b2lkICp2YmxfZGF0YSkK K3sKKwlzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYyA9IHRvX2RwdV9lbmNvZGVyX3Zp cnQoZHJtX2VuYyk7CisJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOworCWJvb2wgZW5hYmxlOwor CWludCBpOworCisJZW5hYmxlID0gdmJsX2NiID8gdHJ1ZSA6IGZhbHNlOworCisJaWYgKCFkcm1f ZW5jKSB7CisJCURQVV9FUlJPUigiaW52YWxpZCBlbmNvZGVyXG4iKTsKKwkJcmV0dXJuOworCX0K Kwl0cmFjZV9kcHVfZW5jX3ZibGFua19jYihEUk1JRChkcm1fZW5jKSwgZW5hYmxlKTsKKworCXNw aW5fbG9ja19pcnFzYXZlKCZkcHVfZW5jLT5lbmNfc3BpbmxvY2ssIGxvY2tfZmxhZ3MpOworCWRw dV9lbmMtPmNydGNfdmJsYW5rX2NiID0gdmJsX2NiOworCWRwdV9lbmMtPmNydGNfdmJsYW5rX2Ni X2RhdGEgPSB2YmxfZGF0YTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcHVfZW5jLT5lbmNf c3BpbmxvY2ssIGxvY2tfZmxhZ3MpOworCisJZm9yIChpID0gMDsgaSA8IGRwdV9lbmMtPm51bV9w aHlzX2VuY3M7IGkrKykgeworCQlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqcGh5cyA9IGRwdV9l bmMtPnBoeXNfZW5jc1tpXTsKKworCQlpZiAocGh5cyAmJiBwaHlzLT5vcHMuY29udHJvbF92Ymxh bmtfaXJxKQorCQkJcGh5cy0+b3BzLmNvbnRyb2xfdmJsYW5rX2lycShwaHlzLCBlbmFibGUpOwor CX0KK30KKwordm9pZCBkcHVfZW5jb2Rlcl9yZWdpc3Rlcl9mcmFtZV9ldmVudF9jYWxsYmFjayhz dHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMsCisJCXZvaWQgKCpmcmFtZV9ldmVudF9jYikodm9p ZCAqLCB1MzIgZXZlbnQpLAorCQl2b2lkICpmcmFtZV9ldmVudF9jYl9kYXRhKQoreworCXN0cnVj dCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5jID0gdG9fZHB1X2VuY29kZXJfdmlydChkcm1fZW5j KTsKKwl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CisJYm9vbCBlbmFibGU7CisKKwllbmFibGUg PSBmcmFtZV9ldmVudF9jYiA/IHRydWUgOiBmYWxzZTsKKworCWlmICghZHJtX2VuYykgeworCQlE UFVfRVJST1IoImludmFsaWQgZW5jb2RlclxuIik7CisJCXJldHVybjsKKwl9CisJdHJhY2VfZHB1 X2VuY19mcmFtZV9ldmVudF9jYihEUk1JRChkcm1fZW5jKSwgZW5hYmxlKTsKKworCXNwaW5fbG9j a19pcnFzYXZlKCZkcHVfZW5jLT5lbmNfc3BpbmxvY2ssIGxvY2tfZmxhZ3MpOworCWRwdV9lbmMt PmNydGNfZnJhbWVfZXZlbnRfY2IgPSBmcmFtZV9ldmVudF9jYjsKKwlkcHVfZW5jLT5jcnRjX2Zy YW1lX2V2ZW50X2NiX2RhdGEgPSBmcmFtZV9ldmVudF9jYl9kYXRhOworCXNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoJmRwdV9lbmMtPmVuY19zcGlubG9jaywgbG9ja19mbGFncyk7Cit9CisKK3N0YXRp YyB2b2lkIGRwdV9lbmNvZGVyX2ZyYW1lX2RvbmVfY2FsbGJhY2soCisJCXN0cnVjdCBkcm1fZW5j b2RlciAqZHJtX2VuYywKKwkJc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKnJlYWR5X3BoeXMsIHUz MiBldmVudCkKK3sKKwlzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYyA9IHRvX2RwdV9l bmNvZGVyX3ZpcnQoZHJtX2VuYyk7CisJdW5zaWduZWQgaW50IGk7CisKKwlpZiAoZXZlbnQgJiAo RFBVX0VOQ09ERVJfRlJBTUVfRVZFTlRfRE9ORQorCQkJfCBEUFVfRU5DT0RFUl9GUkFNRV9FVkVO VF9FUlJPUgorCQkJfCBEUFVfRU5DT0RFUl9GUkFNRV9FVkVOVF9QQU5FTF9ERUFEKSkgeworCisJ CWlmICghZHB1X2VuYy0+ZnJhbWVfYnVzeV9tYXNrWzBdKSB7CisJCQkvKioKKwkJCSAqIHN1cHBy ZXNzIGZyYW1lX2RvbmUgd2l0aG91dCB3YWl0ZXIsCisJCQkgKiBsaWtlbHkgYXV0b3JlZnJlc2gK KwkJCSAqLworCQkJdHJhY2VfZHB1X2VuY19mcmFtZV9kb25lX2NiX25vdF9idXN5KERSTUlEKGRy bV9lbmMpLAorCQkJCQlldmVudCwgcmVhZHlfcGh5cy0+aW50Zl9pZHgpOworCQkJcmV0dXJuOwor CQl9CisKKwkJLyogT25lIG9mIHRoZSBwaHlzaWNhbCBlbmNvZGVycyBoYXMgYmVjb21lIGlkbGUg Ki8KKwkJZm9yIChpID0gMDsgaSA8IGRwdV9lbmMtPm51bV9waHlzX2VuY3M7IGkrKykgeworCQkJ aWYgKGRwdV9lbmMtPnBoeXNfZW5jc1tpXSA9PSByZWFkeV9waHlzKSB7CisJCQkJY2xlYXJfYml0 KGksIGRwdV9lbmMtPmZyYW1lX2J1c3lfbWFzayk7CisJCQkJdHJhY2VfZHB1X2VuY19mcmFtZV9k b25lX2NiKERSTUlEKGRybV9lbmMpLCBpLAorCQkJCQkJZHB1X2VuYy0+ZnJhbWVfYnVzeV9tYXNr WzBdKTsKKwkJCX0KKwkJfQorCisJCWlmICghZHB1X2VuYy0+ZnJhbWVfYnVzeV9tYXNrWzBdKSB7 CisJCQlhdG9taWNfc2V0KCZkcHVfZW5jLT5mcmFtZV9kb25lX3RpbWVvdXQsIDApOworCQkJZGVs X3RpbWVyKCZkcHVfZW5jLT5mcmFtZV9kb25lX3RpbWVyKTsKKworCQkJZHB1X2VuY29kZXJfcmVz b3VyY2VfY29udHJvbChkcm1fZW5jLAorCQkJCQlEUFVfRU5DX1JDX0VWRU5UX0ZSQU1FX0RPTkUp OworCisJCQlpZiAoZHB1X2VuYy0+Y3J0Y19mcmFtZV9ldmVudF9jYikKKwkJCQlkcHVfZW5jLT5j cnRjX2ZyYW1lX2V2ZW50X2NiKAorCQkJCQlkcHVfZW5jLT5jcnRjX2ZyYW1lX2V2ZW50X2NiX2Rh dGEsCisJCQkJCWV2ZW50KTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChkcHVfZW5jLT5jcnRjX2Zy YW1lX2V2ZW50X2NiKQorCQkJZHB1X2VuYy0+Y3J0Y19mcmFtZV9ldmVudF9jYigKKwkJCQlkcHVf ZW5jLT5jcnRjX2ZyYW1lX2V2ZW50X2NiX2RhdGEsIGV2ZW50KTsKKwl9Cit9CisKK3N0YXRpYyB2 b2lkIGRwdV9lbmNvZGVyX29mZl93b3JrKHN0cnVjdCBrdGhyZWFkX3dvcmsgKndvcmspCit7CisJ c3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmMgPSBjb250YWluZXJfb2Yod29yaywKKwkJ CXN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0LCBkZWxheWVkX29mZl93b3JrLndvcmspOworCisJaWYg KCFkcHVfZW5jKSB7CisJCURQVV9FUlJPUigiaW52YWxpZCBkcHUgZW5jb2RlclxuIik7CisJCXJl dHVybjsKKwl9CisKKwlkcHVfZW5jb2Rlcl9yZXNvdXJjZV9jb250cm9sKCZkcHVfZW5jLT5iYXNl LAorCQkJCQkJRFBVX0VOQ19SQ19FVkVOVF9FTlRFUl9JRExFKTsKKworCWRwdV9lbmNvZGVyX2Zy YW1lX2RvbmVfY2FsbGJhY2soJmRwdV9lbmMtPmJhc2UsIE5VTEwsCisJCQkJRFBVX0VOQ09ERVJf RlJBTUVfRVZFTlRfSURMRSk7Cit9CisKKy8qKgorICogX2RwdV9lbmNvZGVyX3RyaWdnZXJfZmx1 c2ggLSB0cmlnZ2VyIGZsdXNoIGZvciBhIHBoeXNpY2FsIGVuY29kZXIKKyAqIGRybV9lbmM6IFBv aW50ZXIgdG8gZHJtIGVuY29kZXIgc3RydWN0dXJlCisgKiBwaHlzOiBQb2ludGVyIHRvIHBoeXNp Y2FsIGVuY29kZXIgc3RydWN0dXJlCisgKiBleHRyYV9mbHVzaF9iaXRzOiBBZGRpdGlvbmFsIGJp dCBtYXNrIHRvIGluY2x1ZGUgaW4gZmx1c2ggdHJpZ2dlcgorICovCitzdGF0aWMgaW5saW5lIHZv aWQgX2RwdV9lbmNvZGVyX3RyaWdnZXJfZmx1c2goc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5j LAorCQlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqcGh5cywgdWludDMyX3QgZXh0cmFfZmx1c2hf Yml0cykKK3sKKwlzdHJ1Y3QgZHB1X2h3X2N0bCAqY3RsOworCWludCBwZW5kaW5nX2tpY2tvZmZf Y250OworCXUzMiByZXQgPSBVSU5UX01BWDsKKworCWlmICghZHJtX2VuYyB8fCAhcGh5cykgewor CQlEUFVfRVJST1IoImludmFsaWQgYXJndW1lbnQocyksIGRybV9lbmMgJWQsIHBoeXNfZW5jICVk XG4iLAorCQkJCWRybV9lbmMgIT0gMCwgcGh5cyAhPSAwKTsKKwkJcmV0dXJuOworCX0KKworCWlm ICghcGh5cy0+aHdfcHApIHsKKwkJRFBVX0VSUk9SKCJpbnZhbGlkIHBpbmdwb25nIGh3XG4iKTsK KwkJcmV0dXJuOworCX0KKworCWN0bCA9IHBoeXMtPmh3X2N0bDsKKwlpZiAoIWN0bCB8fCAhY3Rs LT5vcHMudHJpZ2dlcl9mbHVzaCkgeworCQlEUFVfRVJST1IoIm1pc3NpbmcgdHJpZ2dlciBjYlxu Iik7CisJCXJldHVybjsKKwl9CisKKwlwZW5kaW5nX2tpY2tvZmZfY250ID0gZHB1X2VuY29kZXJf cGh5c19pbmNfcGVuZGluZyhwaHlzKTsKKworCWlmIChleHRyYV9mbHVzaF9iaXRzICYmIGN0bC0+ b3BzLnVwZGF0ZV9wZW5kaW5nX2ZsdXNoKQorCQljdGwtPm9wcy51cGRhdGVfcGVuZGluZ19mbHVz aChjdGwsIGV4dHJhX2ZsdXNoX2JpdHMpOworCisJY3RsLT5vcHMudHJpZ2dlcl9mbHVzaChjdGwp OworCisJaWYgKGN0bC0+b3BzLmdldF9wZW5kaW5nX2ZsdXNoKQorCQlyZXQgPSBjdGwtPm9wcy5n ZXRfcGVuZGluZ19mbHVzaChjdGwpOworCisJdHJhY2VfZHB1X2VuY190cmlnZ2VyX2ZsdXNoKERS TUlEKGRybV9lbmMpLCBwaHlzLT5pbnRmX2lkeCwKKwkJCQkgICAgcGVuZGluZ19raWNrb2ZmX2Nu dCwgY3RsLT5pZHgsIHJldCk7Cit9CisKKy8qKgorICogX2RwdV9lbmNvZGVyX3RyaWdnZXJfc3Rh cnQgLSB0cmlnZ2VyIHN0YXJ0IGZvciBhIHBoeXNpY2FsIGVuY29kZXIKKyAqIHBoeXM6IFBvaW50 ZXIgdG8gcGh5c2ljYWwgZW5jb2RlciBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIGlubGluZSB2b2lk IF9kcHVfZW5jb2Rlcl90cmlnZ2VyX3N0YXJ0KHN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpwaHlz KQoreworCWlmICghcGh5cykgeworCQlEUFVfRVJST1IoImludmFsaWQgYXJndW1lbnQocylcbiIp OworCQlyZXR1cm47CisJfQorCisJaWYgKCFwaHlzLT5od19wcCkgeworCQlEUFVfRVJST1IoImlu dmFsaWQgcGluZ3BvbmcgaHdcbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKHBoeXMtPm9wcy50 cmlnZ2VyX3N0YXJ0ICYmIHBoeXMtPmVuYWJsZV9zdGF0ZSAhPSBEUFVfRU5DX0RJU0FCTEVEKQor CQlwaHlzLT5vcHMudHJpZ2dlcl9zdGFydChwaHlzKTsKK30KKwordm9pZCBkcHVfZW5jb2Rlcl9o ZWxwZXJfdHJpZ2dlcl9zdGFydChzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqcGh5c19lbmMpCit7 CisJc3RydWN0IGRwdV9od19jdGwgKmN0bDsKKworCWlmICghcGh5c19lbmMpIHsKKwkJRFBVX0VS Uk9SKCJpbnZhbGlkIGVuY29kZXJcbiIpOworCQlyZXR1cm47CisJfQorCisJY3RsID0gcGh5c19l bmMtPmh3X2N0bDsKKwlpZiAoY3RsICYmIGN0bC0+b3BzLnRyaWdnZXJfc3RhcnQpIHsKKwkJY3Rs LT5vcHMudHJpZ2dlcl9zdGFydChjdGwpOworCQl0cmFjZV9kcHVfZW5jX3RyaWdnZXJfc3RhcnQo RFJNSUQocGh5c19lbmMtPnBhcmVudCksIGN0bC0+aWR4KTsKKwl9Cit9CisKK2ludCBkcHVfZW5j b2Rlcl9oZWxwZXJfd2FpdF9ldmVudF90aW1lb3V0KAorCQlpbnQzMl90IGRybV9pZCwKKwkJaW50 MzJfdCBod19pZCwKKwkJc3RydWN0IGRwdV9lbmNvZGVyX3dhaXRfaW5mbyAqaW5mbykKK3sKKwlp bnQgcmMgPSAwOworCXM2NCBleHBlY3RlZF90aW1lID0ga3RpbWVfdG9fbXMoa3RpbWVfZ2V0KCkp ICsgaW5mby0+dGltZW91dF9tczsKKwlzNjQgamlmZmllcyA9IG1zZWNzX3RvX2ppZmZpZXMoaW5m by0+dGltZW91dF9tcyk7CisJczY0IHRpbWU7CisKKwlkbyB7CisJCXJjID0gd2FpdF9ldmVudF90 aW1lb3V0KCooaW5mby0+d3EpLAorCQkJCWF0b21pY19yZWFkKGluZm8tPmF0b21pY19jbnQpID09 IDAsIGppZmZpZXMpOworCQl0aW1lID0ga3RpbWVfdG9fbXMoa3RpbWVfZ2V0KCkpOworCisJCXRy YWNlX2RwdV9lbmNfd2FpdF9ldmVudF90aW1lb3V0KGRybV9pZCwgaHdfaWQsIHJjLCB0aW1lLAor CQkJCQkJIGV4cGVjdGVkX3RpbWUsCisJCQkJCQkgYXRvbWljX3JlYWQoaW5mby0+YXRvbWljX2Nu dCkpOworCS8qIElmIHdlIHRpbWVkIG91dCwgY291bnRlciBpcyB2YWxpZCBhbmQgdGltZSBpcyBs ZXNzLCB3YWl0IGFnYWluICovCisJfSB3aGlsZSAoYXRvbWljX3JlYWQoaW5mby0+YXRvbWljX2Nu dCkgJiYgKHJjID09IDApICYmCisJCQkodGltZSA8IGV4cGVjdGVkX3RpbWUpKTsKKworCXJldHVy biByYzsKK30KKwordm9pZCBkcHVfZW5jb2Rlcl9oZWxwZXJfaHdfcmVzZXQoc3RydWN0IGRwdV9l bmNvZGVyX3BoeXMgKnBoeXNfZW5jKQoreworCXN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVf ZW5jOworCXN0cnVjdCBkcHVfaHdfY3RsICpjdGw7CisJaW50IHJjOworCisJaWYgKCFwaHlzX2Vu YykgeworCQlEUFVfRVJST1IoImludmFsaWQgZW5jb2RlclxuIik7CisJCXJldHVybjsKKwl9CisJ ZHB1X2VuYyA9IHRvX2RwdV9lbmNvZGVyX3ZpcnQocGh5c19lbmMtPnBhcmVudCk7CisJY3RsID0g cGh5c19lbmMtPmh3X2N0bDsKKworCWlmICghY3RsIHx8ICFjdGwtPm9wcy5yZXNldCkKKwkJcmV0 dXJuOworCisJRFJNX0RFQlVHX0tNUygiaWQ6JXUgY3RsICVkIHJlc2V0XG4iLCBEUk1JRChwaHlz X2VuYy0+cGFyZW50KSwKKwkJICAgICAgY3RsLT5pZHgpOworCisJcmMgPSBjdGwtPm9wcy5yZXNl dChjdGwpOworCWlmIChyYykgeworCQlEUFVfRVJST1JfRU5DKGRwdV9lbmMsICJjdGwgJWQgcmVz ZXQgZmFpbHVyZVxuIiwgIGN0bC0+aWR4KTsKKwkJZHB1X2RiZ19kdW1wKGZhbHNlLCBfX2Z1bmNf XywgdHJ1ZSwgdHJ1ZSk7CisJfQorCisJcGh5c19lbmMtPmVuYWJsZV9zdGF0ZSA9IERQVV9FTkNf RU5BQkxFRDsKK30KKworLyoqCisgKiBfZHB1X2VuY29kZXJfa2lja29mZl9waHlzIC0gaGFuZGxl IHBoeXNpY2FsIGVuY29kZXIga2lja29mZgorICoJSXRlcmF0ZSB0aHJvdWdoIHRoZSBwaHlzaWNh bCBlbmNvZGVycyBhbmQgcGVyZm9ybSBjb25zb2xpZGF0ZWQgZmx1c2gKKyAqCWFuZC9vciBjb250 cm9sIHN0YXJ0IHRyaWdnZXJpbmcgYXMgbmVlZGVkLiBUaGlzIGlzIGRvbmUgaW4gdGhlIHZpcnR1 YWwKKyAqCWVuY29kZXIgcmF0aGVyIHRoYW4gdGhlIGluZGl2aWR1YWwgcGh5c2ljYWwgb25lcyBp biBvcmRlciB0byBoYW5kbGUKKyAqCXVzZSBjYXNlcyB0aGF0IHJlcXVpcmUgdmlzaWJpbGl0eSBp bnRvIG11bHRpcGxlIHBoeXNpY2FsIGVuY29kZXJzIGF0CisgKglhIHRpbWUuCisgKiBkcHVfZW5j OiBQb2ludGVyIHRvIHZpcnR1YWwgZW5jb2RlciBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIHZvaWQg X2RwdV9lbmNvZGVyX2tpY2tvZmZfcGh5cyhzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2Vu YykKK3sKKwlzdHJ1Y3QgZHB1X2h3X2N0bCAqY3RsOworCXVpbnQzMl90IGksIHBlbmRpbmdfZmx1 c2g7CisJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOworCisJaWYgKCFkcHVfZW5jKSB7CisJCURQ VV9FUlJPUigiaW52YWxpZCBlbmNvZGVyXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXBlbmRpbmdf Zmx1c2ggPSAweDA7CisKKwkvKiB1cGRhdGUgcGVuZGluZyBjb3VudHMgYW5kIHRyaWdnZXIga2lj a29mZiBjdGwgZmx1c2ggYXRvbWljYWxseSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZkcHVfZW5j LT5lbmNfc3BpbmxvY2ssIGxvY2tfZmxhZ3MpOworCisJLyogZG9uJ3QgcGVyZm9ybSBmbHVzaC9z dGFydCBvcGVyYXRpb25zIGZvciBzbGF2ZSBlbmNvZGVycyAqLworCWZvciAoaSA9IDA7IGkgPCBk cHVfZW5jLT5udW1fcGh5c19lbmNzOyBpKyspIHsKKwkJc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMg KnBoeXMgPSBkcHVfZW5jLT5waHlzX2VuY3NbaV07CisKKwkJaWYgKCFwaHlzIHx8IHBoeXMtPmVu YWJsZV9zdGF0ZSA9PSBEUFVfRU5DX0RJU0FCTEVEKQorCQkJY29udGludWU7CisKKwkJY3RsID0g cGh5cy0+aHdfY3RsOworCQlpZiAoIWN0bCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChwaHlzLT5z cGxpdF9yb2xlICE9IEVOQ19ST0xFX1NMQVZFKQorCQkJc2V0X2JpdChpLCBkcHVfZW5jLT5mcmFt ZV9idXN5X21hc2spOworCQlpZiAoIXBoeXMtPm9wcy5uZWVkc19zaW5nbGVfZmx1c2ggfHwKKwkJ CQkhcGh5cy0+b3BzLm5lZWRzX3NpbmdsZV9mbHVzaChwaHlzKSkKKwkJCV9kcHVfZW5jb2Rlcl90 cmlnZ2VyX2ZsdXNoKCZkcHVfZW5jLT5iYXNlLCBwaHlzLCAweDApOworCQllbHNlIGlmIChjdGwt Pm9wcy5nZXRfcGVuZGluZ19mbHVzaCkKKwkJCXBlbmRpbmdfZmx1c2ggfD0gY3RsLT5vcHMuZ2V0 X3BlbmRpbmdfZmx1c2goY3RsKTsKKwl9CisKKwkvKiBmb3Igc3BsaXQgZmx1c2gsIGNvbWJpbmUg cGVuZGluZyBmbHVzaCBtYXNrcyBhbmQgc2VuZCB0byBtYXN0ZXIgKi8KKwlpZiAocGVuZGluZ19m bHVzaCAmJiBkcHVfZW5jLT5jdXJfbWFzdGVyKSB7CisJCV9kcHVfZW5jb2Rlcl90cmlnZ2VyX2Zs dXNoKAorCQkJCSZkcHVfZW5jLT5iYXNlLAorCQkJCWRwdV9lbmMtPmN1cl9tYXN0ZXIsCisJCQkJ cGVuZGluZ19mbHVzaCk7CisJfQorCisJX2RwdV9lbmNvZGVyX3RyaWdnZXJfc3RhcnQoZHB1X2Vu Yy0+Y3VyX21hc3Rlcik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcHVfZW5jLT5lbmNf c3BpbmxvY2ssIGxvY2tfZmxhZ3MpOworfQorCitib29sIGRwdV9lbmNvZGVyX2NoZWNrX21vZGUo c3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jLCB1MzIgbW9kZSkKK3sKKwlzdHJ1Y3QgZHB1X2Vu Y29kZXJfdmlydCAqZHB1X2VuYzsKKwlzdHJ1Y3QgbXNtX2Rpc3BsYXlfaW5mbyAqZGlzcF9pbmZv OworCisJaWYgKCFkcm1fZW5jKSB7CisJCURQVV9FUlJPUigiaW52YWxpZCBlbmNvZGVyXG4iKTsK KwkJcmV0dXJuIGZhbHNlOworCX0KKworCWRwdV9lbmMgPSB0b19kcHVfZW5jb2Rlcl92aXJ0KGRy bV9lbmMpOworCWRpc3BfaW5mbyA9ICZkcHVfZW5jLT5kaXNwX2luZm87CisKKwlyZXR1cm4gKGRp c3BfaW5mby0+Y2FwYWJpbGl0aWVzICYgbW9kZSk7Cit9CisKK3ZvaWQgZHB1X2VuY29kZXJfdHJp Z2dlcl9raWNrb2ZmX3BlbmRpbmcoc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jKQoreworCXN0 cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5jOworCXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlz ICpwaHlzOworCXVuc2lnbmVkIGludCBpOworCXN0cnVjdCBkcHVfaHdfY3RsICpjdGw7CisJc3Ry dWN0IG1zbV9kaXNwbGF5X2luZm8gKmRpc3BfaW5mbzsKKworCWlmICghZHJtX2VuYykgeworCQlE UFVfRVJST1IoImludmFsaWQgZW5jb2RlclxuIik7CisJCXJldHVybjsKKwl9CisJZHB1X2VuYyA9 IHRvX2RwdV9lbmNvZGVyX3ZpcnQoZHJtX2VuYyk7CisJZGlzcF9pbmZvID0gJmRwdV9lbmMtPmRp c3BfaW5mbzsKKworCWZvciAoaSA9IDA7IGkgPCBkcHVfZW5jLT5udW1fcGh5c19lbmNzOyBpKysp IHsKKwkJcGh5cyA9IGRwdV9lbmMtPnBoeXNfZW5jc1tpXTsKKworCQlpZiAocGh5cyAmJiBwaHlz LT5od19jdGwpIHsKKwkJCWN0bCA9IHBoeXMtPmh3X2N0bDsKKwkJCWlmIChjdGwtPm9wcy5jbGVh cl9wZW5kaW5nX2ZsdXNoKQorCQkJCWN0bC0+b3BzLmNsZWFyX3BlbmRpbmdfZmx1c2goY3RsKTsK KworCQkJLyogdXBkYXRlIG9ubHkgZm9yIGNvbW1hbmQgbW9kZSBwcmltYXJ5IGN0bCAqLworCQkJ aWYgKChwaHlzID09IGRwdV9lbmMtPmN1cl9tYXN0ZXIpICYmCisJCQkgICAoZGlzcF9pbmZvLT5j YXBhYmlsaXRpZXMgJiBNU01fRElTUExBWV9DQVBfQ01EX01PREUpCisJCQkgICAgJiYgY3RsLT5v cHMudHJpZ2dlcl9wZW5kaW5nKQorCQkJCWN0bC0+b3BzLnRyaWdnZXJfcGVuZGluZyhjdGwpOwor CQl9CisJfQorfQorCitzdGF0aWMgdTMyIF9kcHVfZW5jb2Rlcl9jYWxjdWxhdGVfbGluZXRpbWUo c3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmMsCisJCXN0cnVjdCBkcm1fZGlzcGxheV9t b2RlICptb2RlKQoreworCXU2NCBwY2xrX3JhdGU7CisJdTMyIHBjbGtfcGVyaW9kOworCXUzMiBs aW5lX3RpbWU7CisKKwkvKgorCSAqIEZvciBsaW5ldGltZSBjYWxjdWxhdGlvbiwgb25seSBvcGVy YXRlIG9uIG1hc3RlciBlbmNvZGVyLgorCSAqLworCWlmICghZHB1X2VuYy0+Y3VyX21hc3RlcikK KwkJcmV0dXJuIDA7CisKKwlpZiAoIWRwdV9lbmMtPmN1cl9tYXN0ZXItPm9wcy5nZXRfbGluZV9j b3VudCkgeworCQlEUFVfRVJST1IoImdldF9saW5lX2NvdW50IGZ1bmN0aW9uIG5vdCBkZWZpbmVk XG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcGNsa19yYXRlID0gbW9kZS0+Y2xvY2s7IC8qIHBp eGVsIGNsb2NrIGluIGtIeiAqLworCWlmIChwY2xrX3JhdGUgPT0gMCkgeworCQlEUFVfRVJST1Io InBjbGsgaXMgMCwgY2Fubm90IGNhbGN1bGF0ZSBsaW5lIHRpbWVcbiIpOworCQlyZXR1cm4gMDsK Kwl9CisKKwlwY2xrX3BlcmlvZCA9IERJVl9ST1VORF9VUF9VTEwoMTAwMDAwMDAwMHVsbCwgcGNs a19yYXRlKTsKKwlpZiAocGNsa19wZXJpb2QgPT0gMCkgeworCQlEUFVfRVJST1IoInBjbGsgcGVy aW9kIGlzIDBcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIExpbmUgdGltZSBjYWxj dWxhdGlvbiBiYXNlZCBvbiBQaXhlbCBjbG9jayBhbmQgSFRPVEFMLgorCSAqIEZpbmFsIHVuaXQg aXMgaW4gbnMuCisJICovCisJbGluZV90aW1lID0gKHBjbGtfcGVyaW9kICogbW9kZS0+aHRvdGFs KSAvIDEwMDA7CisJaWYgKGxpbmVfdGltZSA9PSAwKSB7CisJCURQVV9FUlJPUigibGluZSB0aW1l IGNhbGN1bGF0aW9uIGlzIDBcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlEUFVfREVCVUdfRU5D KGRwdV9lbmMsCisJCQkiY2xrX3JhdGU9JWxsZGtIeiwgY2xrX3BlcmlvZD0lZCwgbGluZXRpbWU9 JWRuc1xuIiwKKwkJCXBjbGtfcmF0ZSwgcGNsa19wZXJpb2QsIGxpbmVfdGltZSk7CisKKwlyZXR1 cm4gbGluZV90aW1lOworfQorCitzdGF0aWMgaW50IF9kcHVfZW5jb2Rlcl93YWtldXBfdGltZShz dHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMsCisJCWt0aW1lX3QgKndha2V1cF90aW1lKQorewor CXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlOworCXN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0 ICpkcHVfZW5jOworCXUzMiBjdXJfbGluZTsKKwl1MzIgbGluZV90aW1lOworCXUzMiB2dG90YWws IHRpbWVfdG9fdnN5bmM7CisJa3RpbWVfdCBjdXJfdGltZTsKKworCWRwdV9lbmMgPSB0b19kcHVf ZW5jb2Rlcl92aXJ0KGRybV9lbmMpOworCisJaWYgKCFkcm1fZW5jLT5jcnRjIHx8ICFkcm1fZW5j LT5jcnRjLT5zdGF0ZSkgeworCQlEUFVfRVJST1IoImNydGMvY3J0YyBzdGF0ZSBvYmplY3QgaXMg TlVMTFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwltb2RlID0gJmRybV9lbmMtPmNydGMt PnN0YXRlLT5hZGp1c3RlZF9tb2RlOworCisJbGluZV90aW1lID0gX2RwdV9lbmNvZGVyX2NhbGN1 bGF0ZV9saW5ldGltZShkcHVfZW5jLCBtb2RlKTsKKwlpZiAoIWxpbmVfdGltZSkKKwkJcmV0dXJu IC1FSU5WQUw7CisKKwljdXJfbGluZSA9IGRwdV9lbmMtPmN1cl9tYXN0ZXItPm9wcy5nZXRfbGlu ZV9jb3VudChkcHVfZW5jLT5jdXJfbWFzdGVyKTsKKworCXZ0b3RhbCA9IG1vZGUtPnZ0b3RhbDsK KwlpZiAoY3VyX2xpbmUgPj0gdnRvdGFsKQorCQl0aW1lX3RvX3ZzeW5jID0gbGluZV90aW1lICog dnRvdGFsOworCWVsc2UKKwkJdGltZV90b192c3luYyA9IGxpbmVfdGltZSAqICh2dG90YWwgLSBj dXJfbGluZSk7CisKKwlpZiAodGltZV90b192c3luYyA9PSAwKSB7CisJCURQVV9FUlJPUigidGlt ZSB0byB2c3luYyBzaG91bGQgbm90IGJlIHplcm8sIHZ0b3RhbD0lZFxuIiwKKwkJCQl2dG90YWwp OworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljdXJfdGltZSA9IGt0aW1lX2dldCgpOworCSp3 YWtldXBfdGltZSA9IGt0aW1lX2FkZF9ucyhjdXJfdGltZSwgdGltZV90b192c3luYyk7CisKKwlE UFVfREVCVUdfRU5DKGRwdV9lbmMsCisJCQkiY3VyX2xpbmU9JXUgdnRvdGFsPSV1IHRpbWVfdG9f dnN5bmM9JXUsIGN1cl90aW1lPSVsbGQsIHdha2V1cF90aW1lPSVsbGRcbiIsCisJCQljdXJfbGlu ZSwgdnRvdGFsLCB0aW1lX3RvX3ZzeW5jLAorCQkJa3RpbWVfdG9fbXMoY3VyX3RpbWUpLAorCQkJ a3RpbWVfdG9fbXMoKndha2V1cF90aW1lKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lk IGRwdV9lbmNvZGVyX3ZzeW5jX2V2ZW50X2hhbmRsZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpCit7 CisJc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmMgPSBmcm9tX3RpbWVyKGRwdV9lbmMs IHQsCisJCQl2c3luY19ldmVudF90aW1lcik7CisJc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5j ID0gJmRwdV9lbmMtPmJhc2U7CisJc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdjsKKwlzdHJ1 Y3QgbXNtX2RybV90aHJlYWQgKmV2ZW50X3RocmVhZDsKKworCWlmICghZHJtX2VuYy0+ZGV2IHx8 ICFkcm1fZW5jLT5kZXYtPmRldl9wcml2YXRlIHx8CisJCQkhZHJtX2VuYy0+Y3J0YykgeworCQlE UFVfRVJST1IoImludmFsaWQgcGFyYW1ldGVyc1xuIik7CisJCXJldHVybjsKKwl9CisKKwlwcml2 ID0gZHJtX2VuYy0+ZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmIChkcm1fZW5jLT5jcnRjLT5pbmRl eCA+PSBBUlJBWV9TSVpFKHByaXYtPmV2ZW50X3RocmVhZCkpIHsKKwkJRFBVX0VSUk9SKCJpbnZh bGlkIGNydGMgaW5kZXhcbiIpOworCQlyZXR1cm47CisJfQorCWV2ZW50X3RocmVhZCA9ICZwcml2 LT5ldmVudF90aHJlYWRbZHJtX2VuYy0+Y3J0Yy0+aW5kZXhdOworCWlmICghZXZlbnRfdGhyZWFk KSB7CisJCURQVV9FUlJPUigiZXZlbnRfdGhyZWFkIG5vdCBmb3VuZCBmb3IgY3J0YzolZFxuIiwK KwkJCQlkcm1fZW5jLT5jcnRjLT5pbmRleCk7CisJCXJldHVybjsKKwl9CisKKwlkZWxfdGltZXIo JmRwdV9lbmMtPnZzeW5jX2V2ZW50X3RpbWVyKTsKK30KKworc3RhdGljIHZvaWQgZHB1X2VuY29k ZXJfdnN5bmNfZXZlbnRfd29ya19oYW5kbGVyKHN0cnVjdCBrdGhyZWFkX3dvcmsgKndvcmspCit7 CisJc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmMgPSBjb250YWluZXJfb2Yod29yaywK KwkJCXN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0LCB2c3luY19ldmVudF93b3JrKTsKKwlrdGltZV90 IHdha2V1cF90aW1lOworCisJaWYgKCFkcHVfZW5jKSB7CisJCURQVV9FUlJPUigiaW52YWxpZCBk cHUgZW5jb2RlclxuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoX2RwdV9lbmNvZGVyX3dha2V1 cF90aW1lKCZkcHVfZW5jLT5iYXNlLCAmd2FrZXVwX3RpbWUpKQorCQlyZXR1cm47CisKKwl0cmFj ZV9kcHVfZW5jX3ZzeW5jX2V2ZW50X3dvcmsoRFJNSUQoJmRwdV9lbmMtPmJhc2UpLCB3YWtldXBf dGltZSk7CisJbW9kX3RpbWVyKCZkcHVfZW5jLT52c3luY19ldmVudF90aW1lciwKKwkJCW5zZWNz X3RvX2ppZmZpZXMoa3RpbWVfdG9fbnMod2FrZXVwX3RpbWUpKSk7Cit9CisKK3ZvaWQgZHB1X2Vu Y29kZXJfcHJlcGFyZV9mb3Jfa2lja29mZihzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMsCisJ CXN0cnVjdCBkcHVfZW5jb2Rlcl9raWNrb2ZmX3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBk cHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5jOworCXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpwaHlz OworCWJvb2wgbmVlZHNfaHdfcmVzZXQgPSBmYWxzZTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlm ICghZHJtX2VuYyB8fCAhcGFyYW1zKSB7CisJCURQVV9FUlJPUigiaW52YWxpZCBhcmdzXG4iKTsK KwkJcmV0dXJuOworCX0KKwlkcHVfZW5jID0gdG9fZHB1X2VuY29kZXJfdmlydChkcm1fZW5jKTsK KworCXRyYWNlX2RwdV9lbmNfcHJlcGFyZV9raWNrb2ZmKERSTUlEKGRybV9lbmMpKTsKKworCS8q IHByZXBhcmUgZm9yIG5leHQga2lja29mZiwgbWF5IGluY2x1ZGUgd2FpdGluZyBvbiBwcmV2aW91 cyBraWNrb2ZmICovCisJRFBVX0FUUkFDRV9CRUdJTigiZW5jX3ByZXBhcmVfZm9yX2tpY2tvZmYi KTsKKwlmb3IgKGkgPSAwOyBpIDwgZHB1X2VuYy0+bnVtX3BoeXNfZW5jczsgaSsrKSB7CisJCXBo eXMgPSBkcHVfZW5jLT5waHlzX2VuY3NbaV07CisJCWlmIChwaHlzKSB7CisJCQlpZiAocGh5cy0+ b3BzLnByZXBhcmVfZm9yX2tpY2tvZmYpCisJCQkJcGh5cy0+b3BzLnByZXBhcmVfZm9yX2tpY2tv ZmYocGh5cywgcGFyYW1zKTsKKwkJCWlmIChwaHlzLT5lbmFibGVfc3RhdGUgPT0gRFBVX0VOQ19F UlJfTkVFRFNfSFdfUkVTRVQpCisJCQkJbmVlZHNfaHdfcmVzZXQgPSB0cnVlOworCQl9CisJfQor CURQVV9BVFJBQ0VfRU5EKCJlbmNfcHJlcGFyZV9mb3Jfa2lja29mZiIpOworCisJZHB1X2VuY29k ZXJfcmVzb3VyY2VfY29udHJvbChkcm1fZW5jLCBEUFVfRU5DX1JDX0VWRU5UX0tJQ0tPRkYpOwor CisJLyogaWYgYW55IHBoeXMgbmVlZHMgcmVzZXQsIHJlc2V0IGFsbCBwaHlzLCBpbi1vcmRlciAq LworCWlmIChuZWVkc19od19yZXNldCkgeworCQl0cmFjZV9kcHVfZW5jX3ByZXBhcmVfa2lja29m Zl9yZXNldChEUk1JRChkcm1fZW5jKSk7CisJCWZvciAoaSA9IDA7IGkgPCBkcHVfZW5jLT5udW1f cGh5c19lbmNzOyBpKyspIHsKKwkJCXBoeXMgPSBkcHVfZW5jLT5waHlzX2VuY3NbaV07CisJCQlp ZiAocGh5cyAmJiBwaHlzLT5vcHMuaHdfcmVzZXQpCisJCQkJcGh5cy0+b3BzLmh3X3Jlc2V0KHBo eXMpOworCQl9CisJfQorfQorCit2b2lkIGRwdV9lbmNvZGVyX2tpY2tvZmYoc3RydWN0IGRybV9l bmNvZGVyICpkcm1fZW5jKQoreworCXN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5jOwor CXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpwaHlzOworCWt0aW1lX3Qgd2FrZXVwX3RpbWU7CisJ dW5zaWduZWQgaW50IGk7CisKKwlpZiAoIWRybV9lbmMpIHsKKwkJRFBVX0VSUk9SKCJpbnZhbGlk IGVuY29kZXJcbiIpOworCQlyZXR1cm47CisJfQorCURQVV9BVFJBQ0VfQkVHSU4oImVuY29kZXJf a2lja29mZiIpOworCWRwdV9lbmMgPSB0b19kcHVfZW5jb2Rlcl92aXJ0KGRybV9lbmMpOworCisJ dHJhY2VfZHB1X2VuY19raWNrb2ZmKERSTUlEKGRybV9lbmMpKTsKKworCWF0b21pY19zZXQoJmRw dV9lbmMtPmZyYW1lX2RvbmVfdGltZW91dCwKKwkJCURQVV9GUkFNRV9ET05FX1RJTUVPVVQgKiAx MDAwIC8KKwkJCWRybV9lbmMtPmNydGMtPnN0YXRlLT5hZGp1c3RlZF9tb2RlLnZyZWZyZXNoKTsK Kwltb2RfdGltZXIoJmRwdV9lbmMtPmZyYW1lX2RvbmVfdGltZXIsIGppZmZpZXMgKworCQkoKGF0 b21pY19yZWFkKCZkcHVfZW5jLT5mcmFtZV9kb25lX3RpbWVvdXQpICogSFopIC8gMTAwMCkpOwor CisJLyogQWxsIHBoeXMgZW5jcyBhcmUgcmVhZHkgdG8gZ28sIHRyaWdnZXIgdGhlIGtpY2tvZmYg Ki8KKwlfZHB1X2VuY29kZXJfa2lja29mZl9waHlzKGRwdV9lbmMpOworCisJLyogYWxsb3cgcGh5 cyBlbmNzIHRvIGhhbmRsZSBhbnkgcG9zdC1raWNrb2ZmIGJ1c2luZXNzICovCisJZm9yIChpID0g MDsgaSA8IGRwdV9lbmMtPm51bV9waHlzX2VuY3M7IGkrKykgeworCQlwaHlzID0gZHB1X2VuYy0+ cGh5c19lbmNzW2ldOworCQlpZiAocGh5cyAmJiBwaHlzLT5vcHMuaGFuZGxlX3Bvc3Rfa2lja29m ZikKKwkJCXBoeXMtPm9wcy5oYW5kbGVfcG9zdF9raWNrb2ZmKHBoeXMpOworCX0KKworCWlmIChk cHVfZW5jLT5kaXNwX2luZm8uaW50Zl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9EU0kgJiYK KwkJCSFfZHB1X2VuY29kZXJfd2FrZXVwX3RpbWUoZHJtX2VuYywgJndha2V1cF90aW1lKSkgewor CQl0cmFjZV9kcHVfZW5jX2Vhcmx5X2tpY2tvZmYoRFJNSUQoZHJtX2VuYyksCisJCQkJCSAgICBr dGltZV90b19tcyh3YWtldXBfdGltZSkpOworCQltb2RfdGltZXIoJmRwdV9lbmMtPnZzeW5jX2V2 ZW50X3RpbWVyLAorCQkJCW5zZWNzX3RvX2ppZmZpZXMoa3RpbWVfdG9fbnMod2FrZXVwX3RpbWUp KSk7CisJfQorCisJRFBVX0FUUkFDRV9FTkQoImVuY29kZXJfa2lja29mZiIpOworfQorCitpbnQg ZHB1X2VuY29kZXJfaGVscGVyX2h3X3JlbGVhc2Uoc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKnBo eXNfZW5jLAorCQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKK3sKKwlzdHJ1Y3QgZHJtX2Vu Y29kZXIgKmRybV9lbmM7CisJc3RydWN0IGRwdV9od19taXhlcl9jZmcgbWl4ZXI7CisJc3RydWN0 IGRwdV9ybV9od19pdGVyIGxtX2l0ZXI7CisJYm9vbCBsbV92YWxpZCA9IGZhbHNlOworCisJaWYg KCFwaHlzX2VuYyB8fCAhcGh5c19lbmMtPnBhcmVudCkgeworCQlEUFVfRVJST1IoImludmFsaWQg ZW5jb2RlclxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRybV9lbmMgPSBwaHlzX2Vu Yy0+cGFyZW50OworCW1lbXNldCgmbWl4ZXIsIDAsIHNpemVvZihtaXhlcikpOworCisJLyogcmVz ZXQgYXNzb2NpYXRlZCBDVEwvTE1zICovCisJaWYgKHBoeXNfZW5jLT5od19jdGwtPm9wcy5jbGVh cl9wZW5kaW5nX2ZsdXNoKQorCQlwaHlzX2VuYy0+aHdfY3RsLT5vcHMuY2xlYXJfcGVuZGluZ19m bHVzaChwaHlzX2VuYy0+aHdfY3RsKTsKKwlpZiAocGh5c19lbmMtPmh3X2N0bC0+b3BzLmNsZWFy X2FsbF9ibGVuZHN0YWdlcykKKwkJcGh5c19lbmMtPmh3X2N0bC0+b3BzLmNsZWFyX2FsbF9ibGVu ZHN0YWdlcyhwaHlzX2VuYy0+aHdfY3RsKTsKKworCWRwdV9ybV9pbml0X2h3X2l0ZXIoJmxtX2l0 ZXIsIGRybV9lbmMtPmJhc2UuaWQsIERQVV9IV19CTEtfTE0pOworCXdoaWxlIChkcHVfcm1fZ2V0 X2h3KCZwaHlzX2VuYy0+ZHB1X2ttcy0+cm0sICZsbV9pdGVyKSkgeworCQlzdHJ1Y3QgZHB1X2h3 X21peGVyICpod19sbSA9IChzdHJ1Y3QgZHB1X2h3X21peGVyICopbG1faXRlci5odzsKKworCQlp ZiAoIWh3X2xtKQorCQkJY29udGludWU7CisKKwkJLyogbmVlZCB0byBmbHVzaCBMTSB0byByZW1v dmUgaXQgKi8KKwkJaWYgKHBoeXNfZW5jLT5od19jdGwtPm9wcy5nZXRfYml0bWFza19taXhlciAm JgorCQkJCXBoeXNfZW5jLT5od19jdGwtPm9wcy51cGRhdGVfcGVuZGluZ19mbHVzaCkKKwkJCXBo eXNfZW5jLT5od19jdGwtPm9wcy51cGRhdGVfcGVuZGluZ19mbHVzaCgKKwkJCQkJcGh5c19lbmMt Pmh3X2N0bCwKKwkJCQkJcGh5c19lbmMtPmh3X2N0bC0+b3BzLmdldF9iaXRtYXNrX21peGVyKAor CQkJCQlwaHlzX2VuYy0+aHdfY3RsLCBod19sbS0+aWR4KSk7CisKKwkJaWYgKGZiKSB7CisJCQkv KiBhc3N1bWUgYSBzaW5nbGUgTE0gaWYgdGFyZ2V0aW5nIGEgZnJhbWUgYnVmZmVyICovCisJCQlp ZiAobG1fdmFsaWQpCisJCQkJY29udGludWU7CisKKwkJCW1peGVyLm91dF9oZWlnaHQgPSBmYi0+ aGVpZ2h0OworCQkJbWl4ZXIub3V0X3dpZHRoID0gZmItPndpZHRoOworCisJCQlpZiAoaHdfbG0t Pm9wcy5zZXR1cF9taXhlcl9vdXQpCisJCQkJaHdfbG0tPm9wcy5zZXR1cF9taXhlcl9vdXQoaHdf bG0sICZtaXhlcik7CisJCX0KKworCQlsbV92YWxpZCA9IHRydWU7CisKKwkJLyogb25seSBlbmFi bGUgYm9yZGVyIGNvbG9yIG9uIExNICovCisJCWlmIChwaHlzX2VuYy0+aHdfY3RsLT5vcHMuc2V0 dXBfYmxlbmRzdGFnZSkKKwkJCXBoeXNfZW5jLT5od19jdGwtPm9wcy5zZXR1cF9ibGVuZHN0YWdl KAorCQkJCQlwaHlzX2VuYy0+aHdfY3RsLCBod19sbS0+aWR4LCBOVUxMKTsKKwl9CisKKwlpZiAo IWxtX3ZhbGlkKSB7CisJCURQVV9ERUJVR19FTkModG9fZHB1X2VuY29kZXJfdmlydChkcm1fZW5j KSwgImxtIG5vdCBmb3VuZFxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlyZXR1cm4gMDsK K30KKwordm9pZCBkcHVfZW5jb2Rlcl9wcmVwYXJlX2NvbW1pdChzdHJ1Y3QgZHJtX2VuY29kZXIg KmRybV9lbmMpCit7CisJc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmM7CisJc3RydWN0 IGRwdV9lbmNvZGVyX3BoeXMgKnBoeXM7CisJaW50IGk7CisKKwlpZiAoIWRybV9lbmMpIHsKKwkJ RFBVX0VSUk9SKCJpbnZhbGlkIGVuY29kZXJcbiIpOworCQlyZXR1cm47CisJfQorCWRwdV9lbmMg PSB0b19kcHVfZW5jb2Rlcl92aXJ0KGRybV9lbmMpOworCisJZm9yIChpID0gMDsgaSA8IGRwdV9l bmMtPm51bV9waHlzX2VuY3M7IGkrKykgeworCQlwaHlzID0gZHB1X2VuYy0+cGh5c19lbmNzW2ld OworCQlpZiAocGh5cyAmJiBwaHlzLT5vcHMucHJlcGFyZV9jb21taXQpCisJCQlwaHlzLT5vcHMu cHJlcGFyZV9jb21taXQocGh5cyk7CisJfQorfQorCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCitz dGF0aWMgaW50IF9kcHVfZW5jb2Rlcl9zdGF0dXNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZv aWQgKmRhdGEpCit7CisJc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmM7CisJaW50IGk7 CisKKwlpZiAoIXMgfHwgIXMtPnByaXZhdGUpCisJCXJldHVybiAtRUlOVkFMOworCisJZHB1X2Vu YyA9IHMtPnByaXZhdGU7CisKKwltdXRleF9sb2NrKCZkcHVfZW5jLT5lbmNfbG9jayk7CisJZm9y IChpID0gMDsgaSA8IGRwdV9lbmMtPm51bV9waHlzX2VuY3M7IGkrKykgeworCQlzdHJ1Y3QgZHB1 X2VuY29kZXJfcGh5cyAqcGh5cyA9IGRwdV9lbmMtPnBoeXNfZW5jc1tpXTsKKworCQlpZiAoIXBo eXMpCisJCQljb250aW51ZTsKKworCQlzZXFfcHJpbnRmKHMsICJpbnRmOiVkICAgIHZzeW5jOiU4 ZCAgICAgdW5kZXJydW46JThkICAgICIsCisJCQkJcGh5cy0+aW50Zl9pZHggLSBJTlRGXzAsCisJ CQkJYXRvbWljX3JlYWQoJnBoeXMtPnZzeW5jX2NudCksCisJCQkJYXRvbWljX3JlYWQoJnBoeXMt PnVuZGVycnVuX2NudCkpOworCisJCXN3aXRjaCAocGh5cy0+aW50Zl9tb2RlKSB7CisJCWNhc2Ug SU5URl9NT0RFX1ZJREVPOgorCQkJc2VxX3B1dHMocywgIm1vZGU6IHZpZGVvXG4iKTsKKwkJCWJy ZWFrOworCQljYXNlIElOVEZfTU9ERV9DTUQ6CisJCQlzZXFfcHV0cyhzLCAibW9kZTogY29tbWFu ZFxuIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXNlcV9wdXRzKHMsICJtb2RlOiA/Pz9c biIpOworCQkJYnJlYWs7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZkcHVfZW5jLT5lbmNfbG9j ayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfZHB1X2VuY29kZXJfZGVidWdmc19z dGF0dXNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQlzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sK KwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgX2RwdV9lbmNvZGVyX3N0YXR1c19zaG93LCBpbm9k ZS0+aV9wcml2YXRlKTsKK30KKworc3RhdGljIHNzaXplX3QgX2RwdV9lbmNvZGVyX21pc3Jfc2V0 dXAoc3RydWN0IGZpbGUgKmZpbGUsCisJCWNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1Ziwgc2l6 ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgKmRw dV9lbmM7CisJaW50IGkgPSAwLCByYzsKKwljaGFyIGJ1ZltNSVNSX0JVRkZfU0laRSArIDFdOwor CXNpemVfdCBidWZmX2NvcHk7CisJdTMyIGZyYW1lX2NvdW50LCBlbmFibGU7CisKKwlpZiAoIWZp bGUgfHwgIWZpbGUtPnByaXZhdGVfZGF0YSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkcHVfZW5j ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJYnVmZl9jb3B5ID0gbWluX3Qoc2l6ZV90LCBjb3Vu dCwgTUlTUl9CVUZGX1NJWkUpOworCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVzZXJfYnVmLCBi dWZmX2NvcHkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWJ1ZltidWZmX2NvcHldID0gMDsgLyog ZW5kIG9mIHN0cmluZyAqLworCisJaWYgKHNzY2FuZihidWYsICIldSAldSIsICZlbmFibGUsICZm cmFtZV9jb3VudCkgIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyYyA9IF9kcHVfZW5jb2Rl cl9wb3dlcl9lbmFibGUoZHB1X2VuYywgdHJ1ZSk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisK KwltdXRleF9sb2NrKCZkcHVfZW5jLT5lbmNfbG9jayk7CisJZHB1X2VuYy0+bWlzcl9lbmFibGUg PSBlbmFibGU7CisJZHB1X2VuYy0+bWlzcl9mcmFtZV9jb3VudCA9IGZyYW1lX2NvdW50OworCWZv ciAoaSA9IDA7IGkgPCBkcHVfZW5jLT5udW1fcGh5c19lbmNzOyBpKyspIHsKKwkJc3RydWN0IGRw dV9lbmNvZGVyX3BoeXMgKnBoeXMgPSBkcHVfZW5jLT5waHlzX2VuY3NbaV07CisKKwkJaWYgKCFw aHlzIHx8ICFwaHlzLT5vcHMuc2V0dXBfbWlzcikKKwkJCWNvbnRpbnVlOworCisJCXBoeXMtPm9w cy5zZXR1cF9taXNyKHBoeXMsIGVuYWJsZSwgZnJhbWVfY291bnQpOworCX0KKwltdXRleF91bmxv Y2soJmRwdV9lbmMtPmVuY19sb2NrKTsKKwlfZHB1X2VuY29kZXJfcG93ZXJfZW5hYmxlKGRwdV9l bmMsIGZhbHNlKTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgX2RwdV9l bmNvZGVyX21pc3JfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJY2hhciBfX3VzZXIgKnVzZXJf YnVmZiwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGRwdV9lbmNvZGVy X3ZpcnQgKmRwdV9lbmM7CisJaW50IGkgPSAwLCBsZW4gPSAwOworCWNoYXIgYnVmW01JU1JfQlVG Rl9TSVpFICsgMV0gPSB7J1wwJ307CisJaW50IHJjOworCisJaWYgKCpwcG9zKQorCQlyZXR1cm4g MDsKKworCWlmICghZmlsZSB8fCAhZmlsZS0+cHJpdmF0ZV9kYXRhKQorCQlyZXR1cm4gLUVJTlZB TDsKKworCWRwdV9lbmMgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlyYyA9IF9kcHVfZW5jb2Rl cl9wb3dlcl9lbmFibGUoZHB1X2VuYywgdHJ1ZSk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisK KwltdXRleF9sb2NrKCZkcHVfZW5jLT5lbmNfbG9jayk7CisJaWYgKCFkcHVfZW5jLT5taXNyX2Vu YWJsZSkgeworCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBNSVNSX0JVRkZfU0laRSAtIGxl biwKKwkJCSJkaXNhYmxlZFxuIik7CisJCWdvdG8gYnVmZl9jaGVjazsKKwl9IGVsc2UgaWYgKGRw dV9lbmMtPmRpc3BfaW5mby5jYXBhYmlsaXRpZXMgJgorCQkJCQkJfk1TTV9ESVNQTEFZX0NBUF9W SURfTU9ERSkgeworCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBNSVNSX0JVRkZfU0laRSAt IGxlbiwKKwkJCSJ1bnN1cHBvcnRlZFxuIik7CisJCWdvdG8gYnVmZl9jaGVjazsKKwl9CisKKwlm b3IgKGkgPSAwOyBpIDwgZHB1X2VuYy0+bnVtX3BoeXNfZW5jczsgaSsrKSB7CisJCXN0cnVjdCBk cHVfZW5jb2Rlcl9waHlzICpwaHlzID0gZHB1X2VuYy0+cGh5c19lbmNzW2ldOworCisJCWlmICgh cGh5cyB8fCAhcGh5cy0+b3BzLmNvbGxlY3RfbWlzcikKKwkJCWNvbnRpbnVlOworCisJCWxlbiAr PSBzbnByaW50ZihidWYgKyBsZW4sIE1JU1JfQlVGRl9TSVpFIC0gbGVuLAorCQkJIkludGYgaWR4 OiVkXG4iLCBwaHlzLT5pbnRmX2lkeCAtIElOVEZfMCk7CisJCWxlbiArPSBzbnByaW50ZihidWYg KyBsZW4sIE1JU1JfQlVGRl9TSVpFIC0gbGVuLCAiMHgleFxuIiwKKwkJCQkJcGh5cy0+b3BzLmNv bGxlY3RfbWlzcihwaHlzKSk7CisJfQorCitidWZmX2NoZWNrOgorCWlmIChjb3VudCA8PSBsZW4p IHsKKwkJbGVuID0gMDsKKwkJZ290byBlbmQ7CisJfQorCisJaWYgKGNvcHlfdG9fdXNlcih1c2Vy X2J1ZmYsIGJ1ZiwgbGVuKSkgeworCQlsZW4gPSAtRUZBVUxUOworCQlnb3RvIGVuZDsKKwl9CisK KwkqcHBvcyArPSBsZW47ICAgLyogaW5jcmVhc2Ugb2Zmc2V0ICovCisKK2VuZDoKKwltdXRleF91 bmxvY2soJmRwdV9lbmMtPmVuY19sb2NrKTsKKwlfZHB1X2VuY29kZXJfcG93ZXJfZW5hYmxlKGRw dV9lbmMsIGZhbHNlKTsKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgaW50IF9kcHVfZW5jb2Rl cl9pbml0X2RlYnVnZnMoc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jKQoreworCXN0cnVjdCBk cHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5jOworCXN0cnVjdCBtc21fZHJtX3ByaXZhdGUgKnByaXY7 CisJc3RydWN0IGRwdV9rbXMgKmRwdV9rbXM7CisJaW50IGk7CisKKwlzdGF0aWMgY29uc3Qgc3Ry dWN0IGZpbGVfb3BlcmF0aW9ucyBkZWJ1Z2ZzX3N0YXR1c19mb3BzID0geworCQkub3BlbiA9CQlf ZHB1X2VuY29kZXJfZGVidWdmc19zdGF0dXNfb3BlbiwKKwkJLnJlYWQgPQkJc2VxX3JlYWQsCisJ CS5sbHNlZWsgPQlzZXFfbHNlZWssCisJCS5yZWxlYXNlID0Jc2luZ2xlX3JlbGVhc2UsCisJfTsK KworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlYnVnZnNfbWlzcl9mb3Bz ID0geworCQkub3BlbiA9IHNpbXBsZV9vcGVuLAorCQkucmVhZCA9IF9kcHVfZW5jb2Rlcl9taXNy X3JlYWQsCisJCS53cml0ZSA9IF9kcHVfZW5jb2Rlcl9taXNyX3NldHVwLAorCX07CisKKwljaGFy IG5hbWVbRFBVX05BTUVfU0laRV07CisKKwlpZiAoIWRybV9lbmMgfHwgIWRybV9lbmMtPmRldiB8 fCAhZHJtX2VuYy0+ZGV2LT5kZXZfcHJpdmF0ZSkgeworCQlEUFVfRVJST1IoImludmFsaWQgZW5j b2RlciBvciBrbXNcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkcHVfZW5jID0gdG9f ZHB1X2VuY29kZXJfdmlydChkcm1fZW5jKTsKKwlwcml2ID0gZHJtX2VuYy0+ZGV2LT5kZXZfcHJp dmF0ZTsKKwlkcHVfa21zID0gdG9fZHB1X2ttcyhwcml2LT5rbXMpOworCisJc25wcmludGYobmFt ZSwgRFBVX05BTUVfU0laRSwgImVuY29kZXIldSIsIGRybV9lbmMtPmJhc2UuaWQpOworCisJLyog Y3JlYXRlIG92ZXJhbGwgc3ViLWRpcmVjdG9yeSBmb3IgdGhlIGVuY29kZXIgKi8KKwlkcHVfZW5j LT5kZWJ1Z2ZzX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIobmFtZSwKKwkJCWRybV9lbmMtPmRl di0+cHJpbWFyeS0+ZGVidWdmc19yb290KTsKKwlpZiAoIWRwdV9lbmMtPmRlYnVnZnNfcm9vdCkK KwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBkb24ndCBlcnJvciBjaGVjayB0aGVzZSAqLworCWRl YnVnZnNfY3JlYXRlX2ZpbGUoInN0YXR1cyIsIDA2MDAsCisJCWRwdV9lbmMtPmRlYnVnZnNfcm9v dCwgZHB1X2VuYywgJmRlYnVnZnNfc3RhdHVzX2ZvcHMpOworCisJZGVidWdmc19jcmVhdGVfZmls ZSgibWlzcl9kYXRhIiwgMDYwMCwKKwkJZHB1X2VuYy0+ZGVidWdmc19yb290LCBkcHVfZW5jLCAm ZGVidWdmc19taXNyX2ZvcHMpOworCisJZm9yIChpID0gMDsgaSA8IGRwdV9lbmMtPm51bV9waHlz X2VuY3M7IGkrKykKKwkJaWYgKGRwdV9lbmMtPnBoeXNfZW5jc1tpXSAmJgorCQkJCWRwdV9lbmMt PnBoeXNfZW5jc1tpXS0+b3BzLmxhdGVfcmVnaXN0ZXIpCisJCQlkcHVfZW5jLT5waHlzX2VuY3Nb aV0tPm9wcy5sYXRlX3JlZ2lzdGVyKAorCQkJCQlkcHVfZW5jLT5waHlzX2VuY3NbaV0sCisJCQkJ CWRwdV9lbmMtPmRlYnVnZnNfcm9vdCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQg X2RwdV9lbmNvZGVyX2Rlc3Ryb3lfZGVidWdmcyhzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMp Cit7CisJc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmM7CisKKwlpZiAoIWRybV9lbmMp CisJCXJldHVybjsKKworCWRwdV9lbmMgPSB0b19kcHVfZW5jb2Rlcl92aXJ0KGRybV9lbmMpOwor CWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShkcHVfZW5jLT5kZWJ1Z2ZzX3Jvb3QpOworfQorI2Vs c2UKK3N0YXRpYyBpbnQgX2RwdV9lbmNvZGVyX2luaXRfZGVidWdmcyhzdHJ1Y3QgZHJtX2VuY29k ZXIgKmRybV9lbmMpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9kcHVfZW5jb2Rl cl9kZXN0cm95X2RlYnVnZnMoc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jKQoreworfQorI2Vu ZGlmCisKK3N0YXRpYyBpbnQgZHB1X2VuY29kZXJfbGF0ZV9yZWdpc3RlcihzdHJ1Y3QgZHJtX2Vu Y29kZXIgKmVuY29kZXIpCit7CisJcmV0dXJuIF9kcHVfZW5jb2Rlcl9pbml0X2RlYnVnZnMoZW5j b2Rlcik7Cit9CisKK3N0YXRpYyB2b2lkIGRwdV9lbmNvZGVyX2Vhcmx5X3VucmVnaXN0ZXIoc3Ry dWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCV9kcHVfZW5jb2Rlcl9kZXN0cm95X2RlYnVn ZnMoZW5jb2Rlcik7Cit9CisKK3N0YXRpYyBpbnQgZHB1X2VuY29kZXJfdmlydF9hZGRfcGh5c19l bmNzKAorCQl1MzIgZGlzcGxheV9jYXBzLAorCQlzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1 X2VuYywKKwkJc3RydWN0IGRwdV9lbmNfcGh5c19pbml0X3BhcmFtcyAqcGFyYW1zKQoreworCXN0 cnVjdCBkcHVfZW5jb2Rlcl9waHlzICplbmMgPSBOVUxMOworCisJRFBVX0RFQlVHX0VOQyhkcHVf ZW5jLCAiXG4iKTsKKworCS8qCisJICogV2UgbWF5IGNyZWF0ZSB1cCB0byBOVU1fUEhZU19FTkNP REVSX1RZUEVTIHBoeXNpY2FsIGVuY29kZXIgdHlwZXMKKwkgKiBpbiB0aGlzIGZ1bmN0aW9uLCBj aGVjayB1cC1mcm9udC4KKwkgKi8KKwlpZiAoZHB1X2VuYy0+bnVtX3BoeXNfZW5jcyArIE5VTV9Q SFlTX0VOQ09ERVJfVFlQRVMgPj0KKwkJCUFSUkFZX1NJWkUoZHB1X2VuYy0+cGh5c19lbmNzKSkg eworCQlEUFVfRVJST1JfRU5DKGRwdV9lbmMsICJ0b28gbWFueSBwaHlzaWNhbCBlbmNvZGVycyAl ZFxuIiwKKwkJCSAgZHB1X2VuYy0+bnVtX3BoeXNfZW5jcyk7CisJCXJldHVybiAtRUlOVkFMOwor CX0KKworCWlmIChkaXNwbGF5X2NhcHMgJiBNU01fRElTUExBWV9DQVBfVklEX01PREUpIHsKKwkJ ZW5jID0gZHB1X2VuY29kZXJfcGh5c192aWRfaW5pdChwYXJhbXMpOworCisJCWlmIChJU19FUlJf T1JfTlVMTChlbmMpKSB7CisJCQlEUFVfRVJST1JfRU5DKGRwdV9lbmMsICJmYWlsZWQgdG8gaW5p dCB2aWQgZW5jOiAlbGRcbiIsCisJCQkJUFRSX0VSUihlbmMpKTsKKwkJCXJldHVybiBlbmMgPT0g MCA/IC1FSU5WQUwgOiBQVFJfRVJSKGVuYyk7CisJCX0KKworCQlkcHVfZW5jLT5waHlzX2VuY3Nb ZHB1X2VuYy0+bnVtX3BoeXNfZW5jc10gPSBlbmM7CisJCSsrZHB1X2VuYy0+bnVtX3BoeXNfZW5j czsKKwl9CisKKwlpZiAoZGlzcGxheV9jYXBzICYgTVNNX0RJU1BMQVlfQ0FQX0NNRF9NT0RFKSB7 CisJCWVuYyA9IGRwdV9lbmNvZGVyX3BoeXNfY21kX2luaXQocGFyYW1zKTsKKworCQlpZiAoSVNf RVJSX09SX05VTEwoZW5jKSkgeworCQkJRFBVX0VSUk9SX0VOQyhkcHVfZW5jLCAiZmFpbGVkIHRv IGluaXQgY21kIGVuYzogJWxkXG4iLAorCQkJCVBUUl9FUlIoZW5jKSk7CisJCQlyZXR1cm4gZW5j ID09IDAgPyAtRUlOVkFMIDogUFRSX0VSUihlbmMpOworCQl9CisKKwkJZHB1X2VuYy0+cGh5c19l bmNzW2RwdV9lbmMtPm51bV9waHlzX2VuY3NdID0gZW5jOworCQkrK2RwdV9lbmMtPm51bV9waHlz X2VuY3M7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHB1X2VuY29kZXJfc2V0 dXBfZGlzcGxheShzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYywKKwkJCQkgc3RydWN0 IGRwdV9rbXMgKmRwdV9rbXMsCisJCQkJIHN0cnVjdCBtc21fZGlzcGxheV9pbmZvICpkaXNwX2lu Zm8sCisJCQkJIGludCAqZHJtX2VuY19tb2RlKQoreworCWludCByZXQgPSAwOworCWludCBpID0g MDsKKwllbnVtIGRwdV9pbnRmX3R5cGUgaW50Zl90eXBlOworCXN0cnVjdCBkcHVfZW5jb2Rlcl92 aXJ0X29wcyBwYXJlbnRfb3BzID0geworCQlkcHVfZW5jb2Rlcl92YmxhbmtfY2FsbGJhY2ssCisJ CWRwdV9lbmNvZGVyX3VuZGVycnVuX2NhbGxiYWNrLAorCQlkcHVfZW5jb2Rlcl9mcmFtZV9kb25l X2NhbGxiYWNrLAorCX07CisJc3RydWN0IGRwdV9lbmNfcGh5c19pbml0X3BhcmFtcyBwaHlzX3Bh cmFtczsKKworCWlmICghZHB1X2VuYyB8fCAhZHB1X2ttcykgeworCQlEUFVfRVJST1IoImludmFs aWQgYXJnKHMpLCBlbmMgJWQga21zICVkXG4iLAorCQkJCWRwdV9lbmMgIT0gMCwgZHB1X2ttcyAh PSAwKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbWVtc2V0KCZwaHlzX3BhcmFtcywgMCwg c2l6ZW9mKHBoeXNfcGFyYW1zKSk7CisJcGh5c19wYXJhbXMuZHB1X2ttcyA9IGRwdV9rbXM7CisJ cGh5c19wYXJhbXMucGFyZW50ID0gJmRwdV9lbmMtPmJhc2U7CisJcGh5c19wYXJhbXMucGFyZW50 X29wcyA9IHBhcmVudF9vcHM7CisJcGh5c19wYXJhbXMuZW5jX3NwaW5sb2NrID0gJmRwdV9lbmMt PmVuY19zcGlubG9jazsKKworCURQVV9ERUJVRygiXG4iKTsKKworCWlmIChkaXNwX2luZm8tPmlu dGZfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfRFNJKSB7CisJCSpkcm1fZW5jX21vZGUgPSBE Uk1fTU9ERV9FTkNPREVSX0RTSTsKKwkJaW50Zl90eXBlID0gSU5URl9EU0k7CisJfSBlbHNlIGlm IChkaXNwX2luZm8tPmludGZfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUEpIHsKKwkJ KmRybV9lbmNfbW9kZSA9IERSTV9NT0RFX0VOQ09ERVJfVE1EUzsKKwkJaW50Zl90eXBlID0gSU5U Rl9IRE1JOworCX0gZWxzZSBpZiAoZGlzcF9pbmZvLT5pbnRmX3R5cGUgPT0gRFJNX01PREVfQ09O TkVDVE9SX0Rpc3BsYXlQb3J0KSB7CisJCSpkcm1fZW5jX21vZGUgPSBEUk1fTU9ERV9FTkNPREVS X1RNRFM7CisJCWludGZfdHlwZSA9IElOVEZfRFA7CisJfSBlbHNlIHsKKwkJRFBVX0VSUk9SX0VO QyhkcHVfZW5jLCAidW5zdXBwb3J0ZWQgZGlzcGxheSBpbnRlcmZhY2UgdHlwZVxuIik7CisJCXJl dHVybiAtRUlOVkFMOworCX0KKworCVdBUk5fT04oZGlzcF9pbmZvLT5udW1fb2ZfaF90aWxlcyA8 IDEpOworCisJZHB1X2VuYy0+ZGlzcGxheV9udW1fb2ZfaF90aWxlcyA9IGRpc3BfaW5mby0+bnVt X29mX2hfdGlsZXM7CisKKwlEUFVfREVCVUcoImRzaV9pbmZvLT5udW1fb2ZfaF90aWxlcyAlZFxu IiwgZGlzcF9pbmZvLT5udW1fb2ZfaF90aWxlcyk7CisKKwlpZiAoKGRpc3BfaW5mby0+Y2FwYWJp bGl0aWVzICYgTVNNX0RJU1BMQVlfQ0FQX0NNRF9NT0RFKSB8fAorCSAgICAoZGlzcF9pbmZvLT5j YXBhYmlsaXRpZXMgJiBNU01fRElTUExBWV9DQVBfVklEX01PREUpKQorCQlkcHVfZW5jLT5pZGxl X3BjX3N1cHBvcnRlZCA9CisJCQkJZHB1X2ttcy0+Y2F0YWxvZy0+Y2Fwcy0+aGFzX2lkbGVfcGM7 CisKKwltdXRleF9sb2NrKCZkcHVfZW5jLT5lbmNfbG9jayk7CisJZm9yIChpID0gMDsgaSA8IGRp c3BfaW5mby0+bnVtX29mX2hfdGlsZXMgJiYgIXJldDsgaSsrKSB7CisJCS8qCisJCSAqIExlZnQt bW9zdCB0aWxlIGlzIGF0IGluZGV4IDAsIGNvbnRlbnQgaXMgY29udHJvbGxlciBpZAorCQkgKiBo X3RpbGVfaW5zdGFuY2VfaWRzWzJdID0gezAsIDF9OyBEU0kwID0gbGVmdCwgRFNJMSA9IHJpZ2h0 CisJCSAqIGhfdGlsZV9pbnN0YW5jZV9pZHNbMl0gPSB7MSwgMH07IERTSTEgPSBsZWZ0LCBEU0kw ID0gcmlnaHQKKwkJICovCisJCXUzMiBjb250cm9sbGVyX2lkID0gZGlzcF9pbmZvLT5oX3RpbGVf aW5zdGFuY2VbaV07CisKKwkJaWYgKGRpc3BfaW5mby0+bnVtX29mX2hfdGlsZXMgPiAxKSB7CisJ CQlpZiAoaSA9PSAwKQorCQkJCXBoeXNfcGFyYW1zLnNwbGl0X3JvbGUgPSBFTkNfUk9MRV9NQVNU RVI7CisJCQllbHNlCisJCQkJcGh5c19wYXJhbXMuc3BsaXRfcm9sZSA9IEVOQ19ST0xFX1NMQVZF OworCQl9IGVsc2UgeworCQkJcGh5c19wYXJhbXMuc3BsaXRfcm9sZSA9IEVOQ19ST0xFX1NPTE87 CisJCX0KKworCQlEUFVfREVCVUcoImhfdGlsZV9pbnN0YW5jZSAlZCA9ICVkLCBzcGxpdF9yb2xl ICVkXG4iLAorCQkJCWksIGNvbnRyb2xsZXJfaWQsIHBoeXNfcGFyYW1zLnNwbGl0X3JvbGUpOwor CisJCXBoeXNfcGFyYW1zLmludGZfaWR4ID0gZHB1X2VuY29kZXJfZ2V0X2ludGYoZHB1X2ttcy0+ Y2F0YWxvZywKKwkJCQkJCQkJCQkJCQlpbnRmX3R5cGUsCisJCQkJCQkJCQkJCQkJY29udHJvbGxl cl9pZCk7CisJCWlmIChwaHlzX3BhcmFtcy5pbnRmX2lkeCA9PSBJTlRGX01BWCkgeworCQkJRFBV X0VSUk9SX0VOQyhkcHVfZW5jLCAiY291bGQgbm90IGdldCBpbnRmOiB0eXBlICVkLCBpZCAlZFxu IiwKKwkJCQkJCSAgaW50Zl90eXBlLCBjb250cm9sbGVyX2lkKTsKKwkJCXJldCA9IC1FSU5WQUw7 CisJCX0KKworCQlpZiAoIXJldCkgeworCQkJcmV0ID0gZHB1X2VuY29kZXJfdmlydF9hZGRfcGh5 c19lbmNzKGRpc3BfaW5mby0+Y2FwYWJpbGl0aWVzLAorCQkJCQkJCQkJCQkJIGRwdV9lbmMsCisJ CQkJCQkJCQkJCQkgJnBoeXNfcGFyYW1zKTsKKwkJCWlmIChyZXQpCisJCQkJRFBVX0VSUk9SX0VO QyhkcHVfZW5jLCAiZmFpbGVkIHRvIGFkZCBwaHlzIGVuY3NcbiIpOworCQl9CisJfQorCisJZm9y IChpID0gMDsgaSA8IGRwdV9lbmMtPm51bV9waHlzX2VuY3M7IGkrKykgeworCQlzdHJ1Y3QgZHB1 X2VuY29kZXJfcGh5cyAqcGh5cyA9IGRwdV9lbmMtPnBoeXNfZW5jc1tpXTsKKworCQlpZiAocGh5 cykgeworCQkJYXRvbWljX3NldCgmcGh5cy0+dnN5bmNfY250LCAwKTsKKwkJCWF0b21pY19zZXQo JnBoeXMtPnVuZGVycnVuX2NudCwgMCk7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZkcHVfZW5j LT5lbmNfbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBkcHVfZW5jb2Rl cl9mcmFtZV9kb25lX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpCit7CisJc3RydWN0IGRw dV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmMgPSBmcm9tX3RpbWVyKGRwdV9lbmMsIHQsCisJCQlmcmFt ZV9kb25lX3RpbWVyKTsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMgPSAmZHB1X2VuYy0+ YmFzZTsKKwlzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpwcml2OworCXUzMiBldmVudDsKKworCWlm ICghZHJtX2VuYy0+ZGV2IHx8ICFkcm1fZW5jLT5kZXYtPmRldl9wcml2YXRlKSB7CisJCURQVV9F UlJPUigiaW52YWxpZCBwYXJhbWV0ZXJzXG4iKTsKKwkJcmV0dXJuOworCX0KKwlwcml2ID0gZHJt X2VuYy0+ZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmICghZHB1X2VuYy0+ZnJhbWVfYnVzeV9tYXNr WzBdIHx8ICFkcHVfZW5jLT5jcnRjX2ZyYW1lX2V2ZW50X2NiKSB7CisJCURSTV9ERUJVR19LTVMo ImlkOiV1IGludmFsaWQgdGltZW91dCBmcmFtZV9idXN5X21hc2s9JWx1XG4iLAorCQkJICAgICAg RFJNSUQoZHJtX2VuYyksIGRwdV9lbmMtPmZyYW1lX2J1c3lfbWFza1swXSk7CisJCXJldHVybjsK Kwl9IGVsc2UgaWYgKCFhdG9taWNfeGNoZygmZHB1X2VuYy0+ZnJhbWVfZG9uZV90aW1lb3V0LCAw KSkgeworCQlEUk1fREVCVUdfS01TKCJpZDoldSBpbnZhbGlkIHRpbWVvdXRcbiIsIERSTUlEKGRy bV9lbmMpKTsKKwkJcmV0dXJuOworCX0KKworCURQVV9FUlJPUl9FTkMoZHB1X2VuYywgImZyYW1l IGRvbmUgdGltZW91dFxuIik7CisKKwlldmVudCA9IERQVV9FTkNPREVSX0ZSQU1FX0VWRU5UX0VS Uk9SOworCXRyYWNlX2RwdV9lbmNfZnJhbWVfZG9uZV90aW1lb3V0KERSTUlEKGRybV9lbmMpLCBl dmVudCk7CisJZHB1X2VuYy0+Y3J0Y19mcmFtZV9ldmVudF9jYihkcHVfZW5jLT5jcnRjX2ZyYW1l X2V2ZW50X2NiX2RhdGEsIGV2ZW50KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZW5j b2Rlcl9oZWxwZXJfZnVuY3MgZHB1X2VuY29kZXJfaGVscGVyX2Z1bmNzID0geworCS5tb2RlX3Nl dCA9IGRwdV9lbmNvZGVyX3ZpcnRfbW9kZV9zZXQsCisJLmRpc2FibGUgPSBkcHVfZW5jb2Rlcl92 aXJ0X2Rpc2FibGUsCisJLmVuYWJsZSA9IGRwdV9rbXNfZW5jb2Rlcl9lbmFibGUsCisJLmF0b21p Y19jaGVjayA9IGRwdV9lbmNvZGVyX3ZpcnRfYXRvbWljX2NoZWNrLAorCisJLyogVGhpcyBpcyBj YWxsZWQgYnkgZHB1X2ttc19lbmNvZGVyX2VuYWJsZSAqLworCS5jb21taXQgPSBkcHVfZW5jb2Rl cl92aXJ0X2VuYWJsZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfZnVu Y3MgZHB1X2VuY29kZXJfZnVuY3MgPSB7CisJCS5kZXN0cm95ID0gZHB1X2VuY29kZXJfZGVzdHJv eSwKKwkJLmxhdGVfcmVnaXN0ZXIgPSBkcHVfZW5jb2Rlcl9sYXRlX3JlZ2lzdGVyLAorCQkuZWFy bHlfdW5yZWdpc3RlciA9IGRwdV9lbmNvZGVyX2Vhcmx5X3VucmVnaXN0ZXIsCit9OworCitpbnQg ZHB1X2VuY29kZXJfc2V0dXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9lbmNv ZGVyICplbmMsCisJCXN0cnVjdCBtc21fZGlzcGxheV9pbmZvICpkaXNwX2luZm8pCit7CisJc3Ry dWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRw dV9rbXMgKmRwdV9rbXMgPSB0b19kcHVfa21zKHByaXYtPmttcyk7CisJc3RydWN0IGRybV9lbmNv ZGVyICpkcm1fZW5jID0gTlVMTDsKKwlzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYyA9 IE5VTEw7CisJaW50IGRybV9lbmNfbW9kZSA9IERSTV9NT0RFX0VOQ09ERVJfTk9ORTsKKwlpbnQg cmV0ID0gMDsKKworCWRwdV9lbmMgPSB0b19kcHVfZW5jb2Rlcl92aXJ0KGVuYyk7CisKKwltdXRl eF9pbml0KCZkcHVfZW5jLT5lbmNfbG9jayk7CisJcmV0ID0gZHB1X2VuY29kZXJfc2V0dXBfZGlz cGxheShkcHVfZW5jLCBkcHVfa21zLCBkaXNwX2luZm8sCisJCQkmZHJtX2VuY19tb2RlKTsKKwlp ZiAocmV0KQorCQlnb3RvIGZhaWw7CisKKwlkcHVfZW5jLT5jdXJfbWFzdGVyID0gTlVMTDsKKwlz cGluX2xvY2tfaW5pdCgmZHB1X2VuYy0+ZW5jX3NwaW5sb2NrKTsKKworCWF0b21pY19zZXQoJmRw dV9lbmMtPmZyYW1lX2RvbmVfdGltZW91dCwgMCk7CisJdGltZXJfc2V0dXAoJmRwdV9lbmMtPmZy YW1lX2RvbmVfdGltZXIsCisJCQlkcHVfZW5jb2Rlcl9mcmFtZV9kb25lX3RpbWVvdXQsIDApOwor CisJaWYgKGRpc3BfaW5mby0+aW50Zl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9EU0kpCisJ CXRpbWVyX3NldHVwKCZkcHVfZW5jLT52c3luY19ldmVudF90aW1lciwKKwkJCQlkcHVfZW5jb2Rl cl92c3luY19ldmVudF9oYW5kbGVyLAorCQkJCTApOworCisKKwltdXRleF9pbml0KCZkcHVfZW5j LT5yY19sb2NrKTsKKwlrdGhyZWFkX2luaXRfZGVsYXllZF93b3JrKCZkcHVfZW5jLT5kZWxheWVk X29mZl93b3JrLAorCQkJZHB1X2VuY29kZXJfb2ZmX3dvcmspOworCWRwdV9lbmMtPmlkbGVfdGlt ZW91dCA9IElETEVfVElNRU9VVDsKKworCWt0aHJlYWRfaW5pdF93b3JrKCZkcHVfZW5jLT52c3lu Y19ldmVudF93b3JrLAorCQkJZHB1X2VuY29kZXJfdnN5bmNfZXZlbnRfd29ya19oYW5kbGVyKTsK KworCW1lbWNweSgmZHB1X2VuYy0+ZGlzcF9pbmZvLCBkaXNwX2luZm8sIHNpemVvZigqZGlzcF9p bmZvKSk7CisKKwlEUFVfREVCVUdfRU5DKGRwdV9lbmMsICJjcmVhdGVkXG4iKTsKKworCXJldHVy biByZXQ7CisKK2ZhaWw6CisJRFBVX0VSUk9SKCJmYWlsZWQgdG8gY3JlYXRlIGVuY29kZXJcbiIp OworCWlmIChkcm1fZW5jKQorCQlkcHVfZW5jb2Rlcl9kZXN0cm95KGRybV9lbmMpOworCisJcmV0 dXJuIHJldDsKKworCit9CisKK3N0cnVjdCBkcm1fZW5jb2RlciAqZHB1X2VuY29kZXJfaW5pdChz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQlpbnQgZHJtX2VuY19tb2RlKQoreworCXN0cnVjdCBk cHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5jID0gTlVMTDsKKwlpbnQgcmMgPSAwOworCisJZHB1X2Vu YyA9IGRldm1fa3phbGxvYyhkZXYtPmRldiwgc2l6ZW9mKCpkcHVfZW5jKSwgR0ZQX0tFUk5FTCk7 CisJaWYgKCFkcHVfZW5jKQorCQlyZXR1cm4gRVJSX1BUUihFTk9NRU0pOworCisJcmMgPSBkcm1f ZW5jb2Rlcl9pbml0KGRldiwgJmRwdV9lbmMtPmJhc2UsICZkcHVfZW5jb2Rlcl9mdW5jcywKKwkJ CWRybV9lbmNfbW9kZSwgTlVMTCk7CisJaWYgKHJjKSB7CisJCWRldm1fa2ZyZWUoZGV2LT5kZXYs IGRwdV9lbmMpOworCQlyZXR1cm4gRVJSX1BUUihyYyk7CisJfQorCisJZHJtX2VuY29kZXJfaGVs cGVyX2FkZCgmZHB1X2VuYy0+YmFzZSwgJmRwdV9lbmNvZGVyX2hlbHBlcl9mdW5jcyk7CisKKwly ZXR1cm4gJmRwdV9lbmMtPmJhc2U7Cit9CisKK2ludCBkcHVfZW5jb2Rlcl93YWl0X2Zvcl9ldmVu dChzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMsCisJZW51bSBtc21fZXZlbnRfd2FpdCBldmVu dCkKK3sKKwlpbnQgKCpmbl93YWl0KShzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqcGh5c19lbmMp ID0gTlVMTDsKKwlzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYyA9IE5VTEw7CisJaW50 IGksIHJldCA9IDA7CisKKwlpZiAoIWRybV9lbmMpIHsKKwkJRFBVX0VSUk9SKCJpbnZhbGlkIGVu Y29kZXJcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZHB1X2VuYyA9IHRvX2RwdV9lbmNv ZGVyX3ZpcnQoZHJtX2VuYyk7CisJRFBVX0RFQlVHX0VOQyhkcHVfZW5jLCAiXG4iKTsKKworCWZv ciAoaSA9IDA7IGkgPCBkcHVfZW5jLT5udW1fcGh5c19lbmNzOyBpKyspIHsKKwkJc3RydWN0IGRw dV9lbmNvZGVyX3BoeXMgKnBoeXMgPSBkcHVfZW5jLT5waHlzX2VuY3NbaV07CisKKwkJc3dpdGNo IChldmVudCkgeworCQljYXNlIE1TTV9FTkNfQ09NTUlUX0RPTkU6CisJCQlmbl93YWl0ID0gcGh5 cy0+b3BzLndhaXRfZm9yX2NvbW1pdF9kb25lOworCQkJYnJlYWs7CisJCWNhc2UgTVNNX0VOQ19U WF9DT01QTEVURToKKwkJCWZuX3dhaXQgPSBwaHlzLT5vcHMud2FpdF9mb3JfdHhfY29tcGxldGU7 CisJCQlicmVhazsKKwkJY2FzZSBNU01fRU5DX1ZCTEFOSzoKKwkJCWZuX3dhaXQgPSBwaHlzLT5v cHMud2FpdF9mb3JfdmJsYW5rOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlEUFVfRVJST1Jf RU5DKGRwdV9lbmMsICJ1bmtub3duIHdhaXQgZXZlbnQgJWRcbiIsCisJCQkJCWV2ZW50KTsKKwkJ CXJldHVybiAtRUlOVkFMOworCQl9OworCisJCWlmIChwaHlzICYmIGZuX3dhaXQpIHsKKwkJCURQ VV9BVFJBQ0VfQkVHSU4oIndhaXRfZm9yX2NvbXBsZXRpb25fZXZlbnQiKTsKKwkJCXJldCA9IGZu X3dhaXQocGh5cyk7CisJCQlEUFVfQVRSQUNFX0VORCgid2FpdF9mb3JfY29tcGxldGlvbl9ldmVu dCIpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJcmV0dXJuIHJl dDsKK30KKworZW51bSBkcHVfaW50Zl9tb2RlIGRwdV9lbmNvZGVyX2dldF9pbnRmX21vZGUoc3Ry dWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpk cHVfZW5jID0gTlVMTDsKKwlpbnQgaTsKKworCWlmICghZW5jb2RlcikgeworCQlEUFVfRVJST1Io ImludmFsaWQgZW5jb2RlclxuIik7CisJCXJldHVybiBJTlRGX01PREVfTk9ORTsKKwl9CisJZHB1 X2VuYyA9IHRvX2RwdV9lbmNvZGVyX3ZpcnQoZW5jb2Rlcik7CisKKwlpZiAoZHB1X2VuYy0+Y3Vy X21hc3RlcikKKwkJcmV0dXJuIGRwdV9lbmMtPmN1cl9tYXN0ZXItPmludGZfbW9kZTsKKworCWZv ciAoaSA9IDA7IGkgPCBkcHVfZW5jLT5udW1fcGh5c19lbmNzOyBpKyspIHsKKwkJc3RydWN0IGRw dV9lbmNvZGVyX3BoeXMgKnBoeXMgPSBkcHVfZW5jLT5waHlzX2VuY3NbaV07CisKKwkJaWYgKHBo eXMpCisJCQlyZXR1cm4gcGh5cy0+aW50Zl9tb2RlOworCX0KKworCXJldHVybiBJTlRGX01PREVf Tk9ORTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9l bmNvZGVyLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5oCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uY2U5MjkwMWVkMjI3Ci0tLSAv ZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIu aApAQCAtMCwwICsxLDE5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNS0yMDE4LCBUaGUg TGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg MjAxMyBSZWQgSGF0CisgKiBBdXRob3I6IFJvYiBDbGFyayA8cm9iZGNsYXJrQGdtYWlsLmNvbT4K KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRB QklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICog WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6 Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpZm5kZWYgX19EUFVfRU5DT0RFUl9I X18KKyNkZWZpbmUgX19EUFVfRU5DT0RFUl9IX18KKworI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5o PgorI2luY2x1ZGUgImRwdV9od19tZHNzLmgiCisKKyNkZWZpbmUgRFBVX0VOQ09ERVJfRlJBTUVf RVZFTlRfRE9ORQkJCUJJVCgwKQorI2RlZmluZSBEUFVfRU5DT0RFUl9GUkFNRV9FVkVOVF9FUlJP UgkJCUJJVCgxKQorI2RlZmluZSBEUFVfRU5DT0RFUl9GUkFNRV9FVkVOVF9QQU5FTF9ERUFECQlC SVQoMikKKyNkZWZpbmUgRFBVX0VOQ09ERVJfRlJBTUVfRVZFTlRfSURMRQkJCUJJVCgzKQorCisj ZGVmaW5lIElETEVfVElNRU9VVAkoNjYgLSAxNi8yKQorCisvKioKKyAqIEVuY29kZXIgZnVuY3Rp b25zIGFuZCBkYXRhIHR5cGVzCisgKiBAaW50ZnM6CUludGVyZmFjZXMgdGhpcyBlbmNvZGVyIGlz IHVzaW5nLCBJTlRGX01PREVfTk9ORSBpZiB1bnVzZWQKKyAqIEBuZWVkc19jZG06CUVuY29kZXIg cmVxdWVzdHMgYSBDRE0gYmFzZWQgb24gcGl4ZWwgZm9ybWF0IGNvbnZlcnNpb24gbmVlZHMKKyAq IEBkaXNwbGF5X251bV9vZl9oX3RpbGVzOiBOdW1iZXIgb2YgaG9yaXpvbnRhbCB0aWxlcyBpbiBj YXNlIG9mIHNwbGl0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlCisgKiBA dG9wb2xvZ3k6ICAgVG9wb2xvZ3kgb2YgdGhlIGRpc3BsYXkKKyAqLworc3RydWN0IGRwdV9lbmNv ZGVyX2h3X3Jlc291cmNlcyB7CisJZW51bSBkcHVfaW50Zl9tb2RlIGludGZzW0lOVEZfTUFYXTsK Kwlib29sIG5lZWRzX2NkbTsKKwl1MzIgZGlzcGxheV9udW1fb2ZfaF90aWxlczsKK307CisKKy8q KgorICogZHB1X2VuY29kZXJfa2lja29mZl9wYXJhbXMgLSBpbmZvIGVuY29kZXIgcmVxdWlyZXMg YXQga2lja29mZgorICogQGFmZmVjdGVkX2Rpc3BsYXlzOiAgYml0bWFzaywgYml0IHNldCBtZWFu cyB0aGUgUk9JIG9mIHRoZSBjb21taXQgbGllcyB3aXRoaW4KKyAqICAgICAgICAgICAgICAgICAg ICAgIHRoZSBib3VuZHMgb2YgdGhlIHBoeXNpY2FsIGRpc3BsYXkgYXQgdGhlIGJpdCBpbmRleAor ICovCitzdHJ1Y3QgZHB1X2VuY29kZXJfa2lja29mZl9wYXJhbXMgeworCXVuc2lnbmVkIGxvbmcg YWZmZWN0ZWRfZGlzcGxheXM7Cit9OworCisvKioKKyAqIGRwdV9lbmNvZGVyX2dldF9od19yZXNv dXJjZXMgLSBQb3B1bGF0ZSB0YWJsZSBvZiByZXF1aXJlZCBoYXJkd2FyZSByZXNvdXJjZXMKKyAq IEBlbmNvZGVyOgllbmNvZGVyIHBvaW50ZXIKKyAqIEBod19yZXM6CXJlc291cmNlIHRhYmxlIHRv IHBvcHVsYXRlIHdpdGggZW5jb2RlciByZXF1aXJlZCByZXNvdXJjZXMKKyAqIEBjb25uX3N0YXRl OglyZXBvcnQgaHcgcmVxcyBiYXNlZCBvbiB0aGlzIHByb3Bvc2VkIGNvbm5lY3RvciBzdGF0ZQor ICovCit2b2lkIGRwdV9lbmNvZGVyX2dldF9od19yZXNvdXJjZXMoc3RydWN0IGRybV9lbmNvZGVy ICplbmNvZGVyLAorCQlzdHJ1Y3QgZHB1X2VuY29kZXJfaHdfcmVzb3VyY2VzICpod19yZXMsCisJ CXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlKTsKKworLyoqCisgKiBkcHVf ZW5jb2Rlcl9yZWdpc3Rlcl92YmxhbmtfY2FsbGJhY2sgLSBwcm92aWRlIGNhbGxiYWNrIHRvIGVu Y29kZXIgdGhhdAorICoJd2lsbCBiZSBjYWxsZWQgb24gdGhlIG5leHQgdmJsYW5rLgorICogQGVu Y29kZXI6CWVuY29kZXIgcG9pbnRlcgorICogQGNiOgkJY2FsbGJhY2sgcG9pbnRlciwgcHJvdmlk ZSBOVUxMIHRvIGRlcmVnaXN0ZXIgYW5kIGRpc2FibGUgSVJRcworICogQGRhdGE6CXVzZXIgZGF0 YSBwcm92aWRlZCB0byBjYWxsYmFjaworICovCit2b2lkIGRwdV9lbmNvZGVyX3JlZ2lzdGVyX3Zi bGFua19jYWxsYmFjayhzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCXZvaWQgKCpjYiko dm9pZCAqKSwgdm9pZCAqZGF0YSk7CisKKy8qKgorICogZHB1X2VuY29kZXJfcmVnaXN0ZXJfZnJh bWVfZXZlbnRfY2FsbGJhY2sgLSBwcm92aWRlIGNhbGxiYWNrIHRvIGVuY29kZXIgdGhhdAorICoJ d2lsbCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIHJlcXVlc3QgaXMgY29tcGxldGUsIG9yIG90aGVyIGV2 ZW50cy4KKyAqIEBlbmNvZGVyOgllbmNvZGVyIHBvaW50ZXIKKyAqIEBjYjoJCWNhbGxiYWNrIHBv aW50ZXIsIHByb3ZpZGUgTlVMTCB0byBkZXJlZ2lzdGVyCisgKiBAZGF0YToJdXNlciBkYXRhIHBy b3ZpZGVkIHRvIGNhbGxiYWNrCisgKi8KK3ZvaWQgZHB1X2VuY29kZXJfcmVnaXN0ZXJfZnJhbWVf ZXZlbnRfY2FsbGJhY2soc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQl2b2lkICgqY2Ip KHZvaWQgKiwgdTMyKSwgdm9pZCAqZGF0YSk7CisKKy8qKgorICogZHB1X2VuY29kZXJfcHJlcGFy ZV9mb3Jfa2lja29mZiAtIHNjaGVkdWxlIGRvdWJsZSBidWZmZXIgZmxpcCBvZiB0aGUgY3RsCisg KglwYXRoIChpLmUuIGN0bCBmbHVzaCBhbmQgc3RhcnQpIGF0IG5leHQgYXBwcm9wcmlhdGUgdGlt ZS4KKyAqCUltbWVkaWF0ZWx5OiBpZiBubyBwcmV2aW91cyBjb21taXQgaXMgb3V0c3RhbmRpbmcu CisgKglEZWxheWVkOiBCbG9jayB1bnRpbCBuZXh0IHRyaWdnZXIgY2FuIGJlIGlzc3VlZC4KKyAq IEBlbmNvZGVyOgllbmNvZGVyIHBvaW50ZXIKKyAqIEBwYXJhbXM6CWtpY2tvZmYgdGltZSBwYXJh bWV0ZXJzCisgKi8KK3ZvaWQgZHB1X2VuY29kZXJfcHJlcGFyZV9mb3Jfa2lja29mZihzdHJ1Y3Qg ZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCXN0cnVjdCBkcHVfZW5jb2Rlcl9raWNrb2ZmX3BhcmFt cyAqcGFyYW1zKTsKKworLyoqCisgKiBkcHVfZW5jb2Rlcl90cmlnZ2VyX2tpY2tvZmZfcGVuZGlu ZyAtIENsZWFyIHRoZSBmbHVzaCBiaXRzIGZyb20gcHJldmlvdXMKKyAqICAgICAgICBraWNrb2Zm IGFuZCB0cmlnZ2VyIHRoZSBjdGwgcHJlcGFyZSBwcm9ncmVzcyBmb3IgY29tbWFuZCBtb2RlIGRp c3BsYXkuCisgKiBAZW5jb2RlcjoJZW5jb2RlciBwb2ludGVyCisgKi8KK3ZvaWQgZHB1X2VuY29k ZXJfdHJpZ2dlcl9raWNrb2ZmX3BlbmRpbmcoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKTsK KworLyoqCisgKiBkcHVfZW5jb2Rlcl9raWNrb2ZmIC0gdHJpZ2dlciBhIGRvdWJsZSBidWZmZXIg ZmxpcCBvZiB0aGUgY3RsIHBhdGgKKyAqCShpLmUuIGN0bCBmbHVzaCBhbmQgc3RhcnQpIGltbWVk aWF0ZWx5LgorICogQGVuY29kZXI6CWVuY29kZXIgcG9pbnRlcgorICovCit2b2lkIGRwdV9lbmNv ZGVyX2tpY2tvZmYoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKTsKKworLyoqCisgKiBkcHVf ZW5jb2Rlcl93YWl0X2Zvcl9ldmVudCAtIFdhaXRzIGZvciBlbmNvZGVyIGV2ZW50cworICogQGVu Y29kZXI6CWVuY29kZXIgcG9pbnRlcgorICogQGV2ZW50OiAgICAgIGV2ZW50IHRvIHdhaXQgZm9y CisgKiBNU01fRU5DX0NPTU1JVF9ET05FIC0gIFdhaXQgZm9yIGhhcmR3YXJlIHRvIGhhdmUgZmx1 c2hlZCB0aGUgY3VycmVudCBwZW5kaW5nCisgKiAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1l cyB0byBoYXJkd2FyZSBhdCBhIHZibGFuayBvciBjdGxfc3RhcnQKKyAqICAgICAgICAgICAgICAg ICAgICAgICAgRW5jb2RlcnMgd2lsbCBtYXAgdGhpcyBkaWZmZXJlbnRseSBkZXBlbmRpbmcgb24g dGhlCisgKiAgICAgICAgICAgICAgICAgICAgICAgIHBhbmVsIHR5cGUuCisgKgkgICAgICAgICAg ICAgICAgICB2aWQgbW9kZSAtPiB2c3luY19pcnEKKyAqICAgICAgICAgICAgICAgICAgICAgICAg Y21kIG1vZGUgLT4gY3RsX3N0YXJ0CisgKiBNU01fRU5DX1RYX0NPTVBMRVRFIC0gIFdhaXQgZm9y IHRoZSBoYXJkd2FyZSB0byB0cmFuc2ZlciBhbGwgdGhlIHBpeGVscyB0bworICogICAgICAgICAg ICAgICAgICAgICAgICB0aGUgcGFuZWwuIEVuY29kZXJzIHdpbGwgbWFwIHRoaXMgZGlmZmVyZW50 bHkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kaW5nIG9uIHRoZSBwYW5lbCB0eXBl LgorICogICAgICAgICAgICAgICAgICAgICAgICB2aWQgbW9kZSAtPiB2c3luY19pcnEKKyAqICAg ICAgICAgICAgICAgICAgICAgICAgY21kIG1vZGUgLT4gcHBfZG9uZQorICogUmV0dXJuczogMCBv biBzdWNjZXNzLCAtRVdPVUxEQkxPQ0sgaWYgYWxyZWFkeSBzaWduYWxlZCwgZXJyb3Igb3RoZXJ3 aXNlCisgKi8KK2ludCBkcHVfZW5jb2Rlcl93YWl0X2Zvcl9ldmVudChzdHJ1Y3QgZHJtX2VuY29k ZXIgKmRybV9lbmNvZGVyLAorCQkJCQkJZW51bSBtc21fZXZlbnRfd2FpdCBldmVudCk7CisKKy8q CisgKiBkcHVfZW5jb2Rlcl9nZXRfaW50Zl9tb2RlIC0gZ2V0IGludGVyZmFjZSBtb2RlIG9mIHRo ZSBnaXZlbiBlbmNvZGVyCisgKiBAZW5jb2RlcjogUG9pbnRlciB0byBkcm0gZW5jb2RlciBvYmpl Y3QKKyAqLworZW51bSBkcHVfaW50Zl9tb2RlIGRwdV9lbmNvZGVyX2dldF9pbnRmX21vZGUoc3Ry dWN0IGRybV9lbmNvZGVyICplbmNvZGVyKTsKKworLyoqCisgKiBkcHVfZW5jb2Rlcl92aXJ0X3Jl c3RvcmUgLSByZXN0b3JlIHRoZSBlbmNvZGVyIGNvbmZpZ3MKKyAqIEBlbmNvZGVyOgllbmNvZGVy IHBvaW50ZXIKKyAqLwordm9pZCBkcHVfZW5jb2Rlcl92aXJ0X3Jlc3RvcmUoc3RydWN0IGRybV9l bmNvZGVyICplbmNvZGVyKTsKKworLyoqCisgKiBkcHVfZW5jb2Rlcl9jaGVja19tb2RlIC0gY2hl Y2sgaWYgZ2l2ZW4gbW9kZSBpcyBzdXBwb3J0ZWQgb3Igbm90CisgKiBAZHJtX2VuYzogUG9pbnRl ciB0byBkcm0gZW5jb2RlciBvYmplY3QKKyAqIEBtb2RlOiBNb2RlIHRvIGJlIGNoZWNrZWQKKyAq IEBSZXR1cm46IHRydWUgaWYgaXQgaXMgY21kIG1vZGUKKyAqLworYm9vbCBkcHVfZW5jb2Rlcl9j aGVja19tb2RlKHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYywgdTMyIG1vZGUpOworCisvKioK KyAqIGRwdV9lbmNvZGVyX2luaXQgLSBpbml0aWFsaXplIHZpcnR1YWwgZW5jb2RlciBvYmplY3QK KyAqIEBkZXY6ICAgICAgICBQb2ludGVyIHRvIGRybSBkZXZpY2Ugc3RydWN0dXJlCisgKiBAZGlz cF9pbmZvOiAgUG9pbnRlciB0byBkaXNwbGF5IGluZm9ybWF0aW9uIHN0cnVjdHVyZQorICogUmV0 dXJuczogICAgIFBvaW50ZXIgdG8gbmV3bHkgY3JlYXRlZCBkcm0gZW5jb2RlcgorICovCitzdHJ1 Y3QgZHJtX2VuY29kZXIgKmRwdV9lbmNvZGVyX2luaXQoCisJCXN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsCisJCWludCBkcm1fZW5jX21vZGUpOworCisvKioKKyAqIGRwdV9lbmNvZGVyX3NldHVwIC0g c2V0dXAgZHB1X2VuY29kZXIgZm9yIHRoZSBkaXNwbGF5IHByb2JlZAorICogQGRldjoJCVBvaW50 ZXIgdG8gZHJtIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBlbmM6CQlQb2ludGVyIHRvIHRoZSBkcm1f ZW5jb2RlcgorICogQGRpc3BfaW5mbzoJUG9pbnRlciB0byB0aGUgZGlzcGxheSBpbmZvCisgKi8K K2ludCBkcHVfZW5jb2Rlcl9zZXR1cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJt X2VuY29kZXIgKmVuYywKKwkJc3RydWN0IG1zbV9kaXNwbGF5X2luZm8gKmRpc3BfaW5mbyk7CisK Ky8qKgorICogZHB1X2VuY29kZXJfZGVzdHJveSAtIGRlc3Ryb3kgcHJldmlvdXNseSBpbml0aWFs aXplZCB2aXJ0dWFsIGVuY29kZXIKKyAqIEBkcm1fZW5jOiAgICBQb2ludGVyIHRvIHByZXZpb3Vz bHkgY3JlYXRlZCBkcm0gZW5jb2RlciBzdHJ1Y3R1cmUKKyAqLwordm9pZCBkcHVfZW5jb2Rlcl9k ZXN0cm95KHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYyk7CisKKy8qKgorICogZHB1X2VuY29k ZXJfcHJlcGFyZV9jb21taXQgLSBwcmVwYXJlIGVuY29kZXIgYXQgdGhlIHZlcnkgYmVnaW5uaW5n IG9mIGFuCisgKglhdG9taWMgY29tbWl0LCBiZWZvcmUgYW55IHJlZ2lzdGVycyBhcmUgd3JpdHRl bgorICogQGRybV9lbmM6ICAgIFBvaW50ZXIgdG8gcHJldmlvdXNseSBjcmVhdGVkIGRybSBlbmNv ZGVyIHN0cnVjdHVyZQorICovCit2b2lkIGRwdV9lbmNvZGVyX3ByZXBhcmVfY29tbWl0KHN0cnVj dCBkcm1fZW5jb2RlciAqZHJtX2VuYyk7CisKKy8qKgorICogZHB1X2VuY29kZXJfc2V0X2lkbGVf dGltZW91dCAtIHNldCB0aGUgaWRsZSB0aW1lb3V0IGZvciB2aWRlbworICogICAgICAgICAgICAg ICAgICAgIGFuZCBjb21tYW5kIG1vZGUgZW5jb2RlcnMuCisgKiBAZHJtX2VuYzogICAgUG9pbnRl ciB0byBwcmV2aW91c2x5IGNyZWF0ZWQgZHJtIGVuY29kZXIgc3RydWN0dXJlCisgKiBAaWRsZV90 aW1lb3V0OiAgICBpZGxlIHRpbWVvdXQgZHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzCisgKi8KK3Zv aWQgZHB1X2VuY29kZXJfc2V0X2lkbGVfdGltZW91dChzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9l bmMsCisJCQkJCQkJdTMyIGlkbGVfdGltZW91dCk7CisKKyNlbmRpZiAvKiBfX0RQVV9FTkNPREVS X0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2Vu Y29kZXJfcGh5cy5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXJf cGh5cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMTU0NTliZWI5 NmM1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X2VuY29kZXJfcGh5cy5oCkBAIC0wLDAgKzEsNDUzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAy MDE1LTIwMTggVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAorICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlz aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKyAqCisgKi8KKworI2lmbmRlZiBfX0RQVV9FTkNPREVSX1BIWVNfSF9fCisjZGVmaW5l IF9fRFBVX0VOQ09ERVJfUEhZU19IX18KKworI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKwor I2luY2x1ZGUgImRwdV9rbXMuaCIKKyNpbmNsdWRlICJkcHVfaHdfaW50Zi5oIgorI2luY2x1ZGUg ImRwdV9od19waW5ncG9uZy5oIgorI2luY2x1ZGUgImRwdV9od19jdGwuaCIKKyNpbmNsdWRlICJk cHVfaHdfdG9wLmgiCisjaW5jbHVkZSAiZHB1X2h3X2NkbS5oIgorI2luY2x1ZGUgImRwdV9lbmNv ZGVyLmgiCisKKyNkZWZpbmUgRFBVX0VOQ09ERVJfTkFNRV9NQVgJMTYKKworLyogd2FpdCBmb3Ig YXQgbW9zdCAyIHZzeW5jIGZvciBsb3dlc3QgcmVmcmVzaCByYXRlICgyNGh6KSAqLworI2RlZmlu ZSBLSUNLT0ZGX1RJTUVPVVRfTVMJCTg0CisjZGVmaW5lIEtJQ0tPRkZfVElNRU9VVF9KSUZGSUVT CQltc2Vjc190b19qaWZmaWVzKEtJQ0tPRkZfVElNRU9VVF9NUykKKworLyoqCisgKiBlbnVtIGRw dV9lbmNfc3BsaXRfcm9sZSAtIFJvbGUgdGhpcyBwaHlzaWNhbCBlbmNvZGVyIHdpbGwgcGxheSBp biBhCisgKglzcGxpdC1wYW5lbCBjb25maWd1cmF0aW9uLCB3aGVyZSBvbmUgcGFuZWwgaXMgbWFz dGVyLCBhbmQgb3RoZXJzIHNsYXZlcy4KKyAqCU1hc3RlcnMgaGF2ZSBleHRyYSByZXNwb25zaWJp bGl0aWVzLCBsaWtlIG1hbmFnaW5nIHRoZSBWQkxBTksgSVJRLgorICogQEVOQ19ST0xFX1NPTE86 CVRoaXMgaXMgdGhlIG9uZSBhbmQgb25seSBwYW5lbC4gVGhpcyBlbmNvZGVyIGlzIG1hc3Rlci4K KyAqIEBFTkNfUk9MRV9NQVNURVI6CVRoaXMgZW5jb2RlciBpcyB0aGUgbWFzdGVyIG9mIGEgc3Bs aXQgcGFuZWwgY29uZmlnLgorICogQEVOQ19ST0xFX1NMQVZFOglUaGlzIGVuY29kZXIgaXMgbm90 IHRoZSBtYXN0ZXIgb2YgYSBzcGxpdCBwYW5lbCBjb25maWcuCisgKi8KK2VudW0gZHB1X2VuY19z cGxpdF9yb2xlIHsKKwlFTkNfUk9MRV9TT0xPLAorCUVOQ19ST0xFX01BU1RFUiwKKwlFTkNfUk9M RV9TTEFWRSwKK307CisKKy8qKgorICogZW51bSBkcHVfZW5jX2VuYWJsZV9zdGF0ZSAtIGN1cnJl bnQgZW5hYmxlZCBzdGF0ZSBvZiB0aGUgcGh5c2ljYWwgZW5jb2RlcgorICogQERQVV9FTkNfRElT QUJMSU5HOglFbmNvZGVyIHRyYW5zaXRpb25pbmcgdG8gZGlzYWJsZSBzdGF0ZQorICoJCQlFdmVu dHMgYm91bmRpbmcgdHJhbnNpdGlvbiBhcmUgZW5jb2RlciB0eXBlIHNwZWNpZmljCisgKiBARFBV X0VOQ19ESVNBQkxFRDoJRW5jb2RlciBpcyBkaXNhYmxlZAorICogQERQVV9FTkNfRU5BQkxJTkc6 CUVuY29kZXIgdHJhbnNpdGlvbmluZyB0byBlbmFibGVkCisgKgkJCUV2ZW50cyBib3VuZGluZyB0 cmFuc2l0aW9uIGFyZSBlbmNvZGVyIHR5cGUgc3BlY2lmaWMKKyAqIEBEUFVfRU5DX0VOQUJMRUQ6 CUVuY29kZXIgaXMgZW5hYmxlZAorICogQERQVV9FTkNfRVJSX05FRURTX0hXX1JFU0VUOglFbmNv ZGVyIGlzIGVuYWJsZWQsIGJ1dCByZXF1aXJlcyBhIGh3X3Jlc2V0CisgKgkJCQl0byByZWNvdmVy IGZyb20gYSBwcmV2aW91cyBlcnJvcgorICovCitlbnVtIGRwdV9lbmNfZW5hYmxlX3N0YXRlIHsK KwlEUFVfRU5DX0RJU0FCTElORywKKwlEUFVfRU5DX0RJU0FCTEVELAorCURQVV9FTkNfRU5BQkxJ TkcsCisJRFBVX0VOQ19FTkFCTEVELAorCURQVV9FTkNfRVJSX05FRURTX0hXX1JFU0VUCit9Owor CitzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5czsKKworLyoqCisgKiBzdHJ1Y3QgZHB1X2VuY29kZXJf dmlydF9vcHMgLSBJbnRlcmZhY2UgdGhlIGNvbnRhaW5pbmcgdmlydHVhbCBlbmNvZGVyCisgKglw cm92aWRlcyBmb3IgdGhlIHBoeXNpY2FsIGVuY29kZXJzIHRvIHVzZSB0byBjYWxsYmFjay4KKyAq IEBoYW5kbGVfdmJsYW5rX3ZpcnQ6CU5vdGlmeSB2aXJ0dWFsIGVuY29kZXIgb2YgdmJsYW5rIElS USByZWNlcHRpb24KKyAqCQkJTm90ZTogVGhpcyBpcyBjYWxsZWQgZnJvbSBJUlEgaGFuZGxlciBj b250ZXh0LgorICogQGhhbmRsZV91bmRlcnJ1bl92aXJ0OiBOb3RpZnkgdmlydHVhbCBlbmNvZGVy IG9mIHVuZGVycnVuIElSUSByZWNlcHRpb24KKyAqCQkJTm90ZTogVGhpcyBpcyBjYWxsZWQgZnJv bSBJUlEgaGFuZGxlciBjb250ZXh0LgorICogQGhhbmRsZV9mcmFtZV9kb25lOglOb3RpZnkgdmly dHVhbCBlbmNvZGVyIHRoYXQgdGhpcyBwaHlzIGVuY29kZXIKKyAqCQkJY29tcGxldGVzIGxhc3Qg cmVxdWVzdCBmcmFtZS4KKyAqLworc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnRfb3BzIHsKKwl2b2lk ICgqaGFuZGxlX3ZibGFua192aXJ0KShzdHJ1Y3QgZHJtX2VuY29kZXIgKiwKKwkJCXN0cnVjdCBk cHVfZW5jb2Rlcl9waHlzICpwaHlzKTsKKwl2b2lkICgqaGFuZGxlX3VuZGVycnVuX3ZpcnQpKHN0 cnVjdCBkcm1fZW5jb2RlciAqLAorCQkJc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKnBoeXMpOwor CXZvaWQgKCpoYW5kbGVfZnJhbWVfZG9uZSkoc3RydWN0IGRybV9lbmNvZGVyICosCisJCQlzdHJ1 Y3QgZHB1X2VuY29kZXJfcGh5cyAqcGh5cywgdTMyIGV2ZW50KTsKK307CisKKy8qKgorICogc3Ry dWN0IGRwdV9lbmNvZGVyX3BoeXNfb3BzIC0gSW50ZXJmYWNlIHRoZSBwaHlzaWNhbCBlbmNvZGVy cyBwcm92aWRlIHRvCisgKgl0aGUgY29udGFpbmluZyB2aXJ0dWFsIGVuY29kZXIuCisgKiBAbGF0 ZV9yZWdpc3RlcjoJCURSTSBDYWxsLiBBZGQgVXNlcnNwYWNlIGludGVyZmFjZXMsIGRlYnVnZnMu CisgKiBAcHJlcGFyZV9jb21taXQ6CQlNU00gQXRvbWljIENhbGwsIHN0YXJ0IG9mIGF0b21pYyBj b21taXQgc2VxdWVuY2UKKyAqIEBpc19tYXN0ZXI6CQkJV2hldGhlciB0aGlzIHBoeXNfZW5jIGlz IHRoZSBjdXJyZW50IG1hc3RlcgorICoJCQkJZW5jb2Rlci4gQ2FuIGJlIHN3aXRjaGVkIGF0IGVu YWJsZSB0aW1lLiBCYXNlZAorICoJCQkJb24gc3BsaXRfcm9sZSBhbmQgY3VycmVudCBtb2RlIChD TUQvVklEKS4KKyAqIEBtb2RlX2ZpeHVwOgkJCURSTSBDYWxsLiBGaXh1cCBhIERSTSBtb2RlLgor ICogQG1vZGVfc2V0OgkJCURSTSBDYWxsLiBTZXQgYSBEUk0gbW9kZS4KKyAqCQkJCVRoaXMgbGlr ZWx5IGNhY2hlcyB0aGUgbW9kZSwgZm9yIHVzZSBhdCBlbmFibGUuCisgKiBAZW5hYmxlOgkJCURS TSBDYWxsLiBFbmFibGUgYSBEUk0gbW9kZS4KKyAqIEBkaXNhYmxlOgkJCURSTSBDYWxsLiBEaXNh YmxlIG1vZGUuCisgKiBAYXRvbWljX2NoZWNrOgkJRFJNIENhbGwuIEF0b21pYyBjaGVjayBuZXcg RFJNIHN0YXRlLgorICogQGRlc3Ryb3k6CQkJRFJNIENhbGwuIERlc3Ryb3kgYW5kIHJlbGVhc2Ug cmVzb3VyY2VzLgorICogQGdldF9od19yZXNvdXJjZXM6CQlQb3B1bGF0ZSB0aGUgc3RydWN0dXJl IHdpdGggdGhlIGhhcmR3YXJlCisgKgkJCQlyZXNvdXJjZXMgdGhhdCB0aGlzIHBoeXNfZW5jIGlz IHVzaW5nLgorICoJCQkJRXhwZWN0IG5vIG92ZXJsYXAgYmV0d2VlbiBwaHlzX2VuY3MuCisgKiBA Y29udHJvbF92YmxhbmtfaXJxCQlSZWdpc3Rlci9EZXJlZ2lzdGVyIGZvciBWQkxBTksgSVJRCisg KiBAd2FpdF9mb3JfY29tbWl0X2RvbmU6CVdhaXQgZm9yIGhhcmR3YXJlIHRvIGhhdmUgZmx1c2hl ZCB0aGUKKyAqCQkJCWN1cnJlbnQgcGVuZGluZyBmcmFtZXMgdG8gaGFyZHdhcmUKKyAqIEB3YWl0 X2Zvcl90eF9jb21wbGV0ZToJV2FpdCBmb3IgaGFyZHdhcmUgdG8gdHJhbnNmZXIgdGhlIHBpeGVs cworICoJCQkJdG8gdGhlIHBhbmVsCisgKiBAd2FpdF9mb3JfdmJsYW5rOgkJV2FpdCBmb3IgVkJM QU5LLCBmb3Igc3ViLWRyaXZlciBpbnRlcm5hbCB1c2UKKyAqIEBwcmVwYXJlX2Zvcl9raWNrb2Zm OglEbyBhbnkgd29yayBuZWNlc3NhcnkgcHJpb3IgdG8gYSBraWNrb2ZmCisgKgkJCQlGb3IgQ01E IGVuY29kZXIsIG1heSB3YWl0IGZvciBwcmV2aW91cyB0eCBkb25lCisgKiBAaGFuZGxlX3Bvc3Rf a2lja29mZjoJRG8gYW55IHdvcmsgbmVjZXNzYXJ5IHBvc3Qta2lja29mZiB3b3JrCisgKiBAdHJp Z2dlcl9zdGFydDoJCVByb2Nlc3Mgc3RhcnQgZXZlbnQgb24gcGh5c2ljYWwgZW5jb2RlcgorICog QG5lZWRzX3NpbmdsZV9mbHVzaDoJCVdoZXRoZXIgZW5jb2RlciBzbGF2ZXMgbmVlZCB0byBiZSBm bHVzaGVkCisgKiBAc2V0dXBfbWlzcjoJCVNldHMgdXAgTUlTUiwgZW5hYmxlIGFuZCBkaXNhYmxl cyBiYXNlZCBvbiBzeXNmcworICogQGNvbGxlY3RfbWlzcjoJCUNvbGxlY3RzIE1JU1IgZGF0YSBv biBmcmFtZSB1cGRhdGUKKyAqIEBod19yZXNldDoJCQlJc3N1ZSBIVyByZWNvdmVyeSBzdWNoIGFz IENUTCByZXNldCBhbmQgY2xlYXIKKyAqCQkJCURQVV9FTkNfRVJSX05FRURTX0hXX1JFU0VUIHN0 YXRlCisgKiBAaXJxX2NvbnRyb2w6CQlIYW5kbGVyIHRvIGVuYWJsZS9kaXNhYmxlIGFsbCB0aGUg ZW5jb2RlciBJUlFzCisgKiBAcHJlcGFyZV9pZGxlX3BjOgkJcGh5cyBlbmNvZGVyIGNhbiB1cGRh dGUgdGhlIHZzeW5jX2VuYWJsZSBzdGF0dXMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgb24gaWRsZSBwb3dlciBjb2xsYXBzZSBwcmVwYXJlCisgKiBAcmVzdG9yZToJCQlSZXN0b3Jl IGFsbCB0aGUgZW5jb2RlciBjb25maWdzLgorICogQGdldF9saW5lX2NvdW50OgkJT2J0YWluIGN1 cnJlbnQgdmVydGljYWwgbGluZSBjb3VudAorICovCisKK3N0cnVjdCBkcHVfZW5jb2Rlcl9waHlz X29wcyB7CisJaW50ICgqbGF0ZV9yZWdpc3Rlcikoc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKmVu Y29kZXIsCisJCQlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3Jvb3QpOworCXZvaWQgKCpwcmVwYXJl X2NvbW1pdCkoc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKmVuY29kZXIpOworCWJvb2wgKCppc19t YXN0ZXIpKHN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICplbmNvZGVyKTsKKwlib29sICgqbW9kZV9m aXh1cCkoc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKmVuY29kZXIsCisJCQljb25zdCBzdHJ1Y3Qg ZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1 c3RlZF9tb2RlKTsKKwl2b2lkICgqbW9kZV9zZXQpKHN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpl bmNvZGVyLAorCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQlzdHJ1Y3QgZHJt X2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSk7CisJdm9pZCAoKmVuYWJsZSkoc3RydWN0IGRw dV9lbmNvZGVyX3BoeXMgKmVuY29kZXIpOworCXZvaWQgKCpkaXNhYmxlKShzdHJ1Y3QgZHB1X2Vu Y29kZXJfcGh5cyAqZW5jb2Rlcik7CisJaW50ICgqYXRvbWljX2NoZWNrKShzdHJ1Y3QgZHB1X2Vu Y29kZXJfcGh5cyAqZW5jb2RlciwKKwkJCSAgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNf c3RhdGUsCisJCQkgICAgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUpOwor CXZvaWQgKCpkZXN0cm95KShzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqZW5jb2Rlcik7CisJdm9p ZCAoKmdldF9od19yZXNvdXJjZXMpKHN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICplbmNvZGVyLAor CQkJc3RydWN0IGRwdV9lbmNvZGVyX2h3X3Jlc291cmNlcyAqaHdfcmVzLAorCQkJc3RydWN0IGRy bV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUpOworCWludCAoKmNvbnRyb2xfdmJsYW5rX2ly cSkoc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKmVuYywgYm9vbCBlbmFibGUpOworCWludCAoKndh aXRfZm9yX2NvbW1pdF9kb25lKShzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqcGh5c19lbmMpOwor CWludCAoKndhaXRfZm9yX3R4X2NvbXBsZXRlKShzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqcGh5 c19lbmMpOworCWludCAoKndhaXRfZm9yX3ZibGFuaykoc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMg KnBoeXNfZW5jKTsKKwl2b2lkICgqcHJlcGFyZV9mb3Jfa2lja29mZikoc3RydWN0IGRwdV9lbmNv ZGVyX3BoeXMgKnBoeXNfZW5jLAorCQkJc3RydWN0IGRwdV9lbmNvZGVyX2tpY2tvZmZfcGFyYW1z ICpwYXJhbXMpOworCXZvaWQgKCpoYW5kbGVfcG9zdF9raWNrb2ZmKShzdHJ1Y3QgZHB1X2VuY29k ZXJfcGh5cyAqcGh5c19lbmMpOworCXZvaWQgKCp0cmlnZ2VyX3N0YXJ0KShzdHJ1Y3QgZHB1X2Vu Y29kZXJfcGh5cyAqcGh5c19lbmMpOworCWJvb2wgKCpuZWVkc19zaW5nbGVfZmx1c2gpKHN0cnVj dCBkcHVfZW5jb2Rlcl9waHlzICpwaHlzX2VuYyk7CisKKwl2b2lkICgqc2V0dXBfbWlzcikoc3Ry dWN0IGRwdV9lbmNvZGVyX3BoeXMgKnBoeXNfZW5jcywKKwkJCQlib29sIGVuYWJsZSwgdTMyIGZy YW1lX2NvdW50KTsKKwl1MzIgKCpjb2xsZWN0X21pc3IpKHN0cnVjdCBkcHVfZW5jb2Rlcl9waHlz ICpwaHlzX2VuYyk7CisJdm9pZCAoKmh3X3Jlc2V0KShzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAq cGh5c19lbmMpOworCXZvaWQgKCppcnFfY29udHJvbCkoc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMg KnBoeXMsIGJvb2wgZW5hYmxlKTsKKwl2b2lkICgqcHJlcGFyZV9pZGxlX3BjKShzdHJ1Y3QgZHB1 X2VuY29kZXJfcGh5cyAqcGh5c19lbmMpOworCXZvaWQgKCpyZXN0b3JlKShzdHJ1Y3QgZHB1X2Vu Y29kZXJfcGh5cyAqcGh5cyk7CisJaW50ICgqZ2V0X2xpbmVfY291bnQpKHN0cnVjdCBkcHVfZW5j b2Rlcl9waHlzICpwaHlzKTsKK307CisKKy8qKgorICogZW51bSBkcHVfaW50cl9pZHggLSBkcHUg ZW5jb2RlciBpbnRlcnJ1cHQgaW5kZXgKKyAqIEBJTlRSX0lEWF9WU1lOQzogICAgVnN5bmMgaW50 ZXJydXB0IGZvciB2aWRlbyBtb2RlIHBhbmVsCisgKiBASU5UUl9JRFhfUElOR1BPTkc6IFBpbmdw b25nIGRvbmUgdW50ZXJydXB0IGZvciBjbWQgbW9kZSBwYW5lbAorICogQElOVFJfSURYX1VOREVS UlVOOiBVbmRlcnJ1biB1bnRlcnJ1cHQgZm9yIHZpZGVvIGFuZCBjbWQgbW9kZSBwYW5lbAorICog QElOVFJfSURYX1JEUFRSOiAgICBSZWFkcG9pbnRlciBkb25lIHVudGVycnVwdCBmb3IgY21kIG1v ZGUgcGFuZWwKKyAqLworZW51bSBkcHVfaW50cl9pZHggeworCUlOVFJfSURYX1ZTWU5DLAorCUlO VFJfSURYX1BJTkdQT05HLAorCUlOVFJfSURYX1VOREVSUlVOLAorCUlOVFJfSURYX0NUTF9TVEFS VCwKKwlJTlRSX0lEWF9SRFBUUiwKKwlJTlRSX0lEWF9NQVgsCit9OworCisvKioKKyAqIGRwdV9l bmNvZGVyX2lycSAtIHRyYWNraW5nIHN0cnVjdHVyZSBmb3IgaW50ZXJydXB0cworICogQG5hbWU6 CQlzdHJpbmcgbmFtZSBvZiBpbnRlcnJ1cHQKKyAqIEBpbnRyX3R5cGU6CQlFbmNvZGVyIGludGVy cnVwdCB0eXBlCisgKiBAaW50cl9pZHg6CQlFbmNvZGVyIGludGVycnVwdCBlbnVtZXJhdGlvbgor ICogQGh3X2lkeDoJCUhXIEJsb2NrIElECisgKiBAaXJxX2lkeDoJCUlSUSBpbnRlcmZhY2UgbG9v a3VwIGluZGV4IGZyb20gRFBVIElSUSBmcmFtZXdvcmsKKyAqCQkJd2lsbCBiZSAtRUlOVkFMIGlm IElSUSBpcyBub3QgcmVnaXN0ZXJlZAorICogQGlycV9jYjoJCWludGVycnVwdCBjYWxsYmFjawor ICovCitzdHJ1Y3QgZHB1X2VuY29kZXJfaXJxIHsKKwljb25zdCBjaGFyICpuYW1lOworCWVudW0g ZHB1X2ludHJfdHlwZSBpbnRyX3R5cGU7CisJZW51bSBkcHVfaW50cl9pZHggaW50cl9pZHg7CisJ aW50IGh3X2lkeDsKKwlpbnQgaXJxX2lkeDsKKwlzdHJ1Y3QgZHB1X2lycV9jYWxsYmFjayBjYjsK K307CisKKy8qKgorICogc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgLSBwaHlzaWNhbCBlbmNvZGVy IHRoYXQgZHJpdmVzIGEgc2luZ2xlIElOVEYgYmxvY2sKKyAqCXRpZWQgdG8gYSBzcGVjaWZpYyBw YW5lbCAvIHN1Yi1wYW5lbC4gQWJzdHJhY3QgdHlwZSwgc3ViLWNsYXNzZWQgYnkKKyAqCXBoeXNf dmlkIG9yIHBoeXNfY21kIGZvciB2aWRlbyBtb2RlIG9yIGNvbW1hbmQgbW9kZSBlbmNzIHJlc3Bl Y3RpdmVseS4KKyAqIEBwYXJlbnQ6CQlQb2ludGVyIHRvIHRoZSBjb250YWluaW5nIHZpcnR1YWwg ZW5jb2RlcgorICogQGNvbm5lY3RvcjoJCUlmIGEgbW9kZSBpcyBzZXQsIGNhY2hlZCBwb2ludGVy IHRvIHRoZSBhY3RpdmUgY29ubmVjdG9yCisgKiBAb3BzOgkJT3BlcmF0aW9ucyBleHBvc2VkIHRv IHRoZSB2aXJ0dWFsIGVuY29kZXIKKyAqIEBwYXJlbnRfb3BzOgkJQ2FsbGJhY2tzIGV4cG9zZWQg YnkgdGhlIHBhcmVudCB0byB0aGUgcGh5c19lbmMKKyAqIEBod19tZHB0b3A6CQlIYXJkd2FyZSBp bnRlcmZhY2UgdG8gdGhlIHRvcCByZWdpc3RlcnMKKyAqIEBod19jdGw6CQlIYXJkd2FyZSBpbnRl cmZhY2UgdG8gdGhlIGN0bCByZWdpc3RlcnMKKyAqIEBod19jZG06CQlIYXJkd2FyZSBpbnRlcmZh Y2UgdG8gdGhlIGNkbSByZWdpc3RlcnMKKyAqIEBjZG1fY2ZnOgkJQ2hyb21hLWRvd24gaGFyZHdh cmUgY29uZmlndXJhdGlvbgorICogQGh3X3BwOgkJSGFyZHdhcmUgaW50ZXJmYWNlIHRvIHRoZSBw aW5nIHBvbmcgcmVnaXN0ZXJzCisgKiBAZHB1X2ttczoJCVBvaW50ZXIgdG8gdGhlIGRwdV9rbXMg dG9wIGxldmVsCisgKiBAY2FjaGVkX21vZGU6CURSTSBtb2RlIGNhY2hlZCBhdCBtb2RlX3NldCB0 aW1lLCBhY3RlZCBvbiBpbiBlbmFibGUKKyAqIEBlbmFibGVkOgkJV2hldGhlciB0aGUgZW5jb2Rl ciBoYXMgZW5hYmxlZCBhbmQgcnVubmluZyBhIG1vZGUKKyAqIEBzcGxpdF9yb2xlOgkJUm9sZSB0 byBwbGF5IGluIGEgc3BsaXQtcGFuZWwgY29uZmlndXJhdGlvbgorICogQGludGZfbW9kZToJCUlu dGVyZmFjZSBtb2RlCisgKiBAaW50Zl9pZHg6CQlJbnRlcmZhY2UgaW5kZXggb24gZHB1IGhhcmR3 YXJlCisgKiBAdG9wb2xvZ3lfbmFtZToJdG9wb2xvZ3kgc2VsZWN0ZWQgZm9yIHRoZSBkaXNwbGF5 CisgKiBAZW5jX3NwaW5sb2NrOglWaXJ0dWFsLUVuY29kZXItV2lkZSBTcGluIExvY2sgZm9yIElS USBwdXJwb3NlcworICogQGVuYWJsZV9zdGF0ZToJRW5hYmxlIHN0YXRlIHRyYWNraW5nCisgKiBA dmJsYW5rX3JlZmNvdW50OglSZWZlcmVuY2UgY291bnQgb2YgdmJsYW5rIHJlcXVlc3QKKyAqIEB2 c3luY19jbnQ6CQlWc3luYyBjb3VudCBmb3IgdGhlIHBoeXNpY2FsIGVuY29kZXIKKyAqIEB1bmRl cnJ1bl9jbnQ6CVVuZGVycnVuIGNvdW50IGZvciB0aGUgcGh5c2ljYWwgZW5jb2RlcgorICogQHBl bmRpbmdfa2lja29mZl9jbnQ6CUF0b21pYyBjb3VudGVyIHRyYWNraW5nIHRoZSBudW1iZXIgb2Yg a2lja29mZnMKKyAqCQkJCXZzLiB0aGUgbnVtYmVyIG9mIGRvbmUvdmJsYW5rIGlycXMuIFNob3Vs ZCBob3ZlcgorICoJCQkJYmV0d2VlbiAwLTIgSW5jcmVtZW50ZWQgd2hlbiBhIG5ldyBraWNrb2Zm IGlzCisgKgkJCQlzY2hlZHVsZWQuIERlY3JlbWVudGVkIGluIGlycSBoYW5kbGVyCisgKiBAcGVu ZGluZ19jdGxzdGFydF9jbnQ6CUF0b21pYyBjb3VudGVyIHRyYWNraW5nIHRoZSBudW1iZXIgb2Yg Y3RsIHN0YXJ0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmcuCisgKiBA cGVuZGluZ19raWNrb2ZmX3dxOgkJV2FpdCBxdWV1ZSBmb3IgYmxvY2tpbmcgdW50aWwga2lja29m ZiBjb21wbGV0ZXMKKyAqIEBpcnE6CQkJSVJRIHRyYWNraW5nIHN0cnVjdHVyZXMKKyAqLworc3Ry dWN0IGRwdV9lbmNvZGVyX3BoeXMgeworCXN0cnVjdCBkcm1fZW5jb2RlciAqcGFyZW50OworCXN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJc3RydWN0IGRwdV9lbmNvZGVyX3BoeXNf b3BzIG9wczsKKwlzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydF9vcHMgcGFyZW50X29wczsKKwlzdHJ1 Y3QgZHB1X2h3X21kcCAqaHdfbWRwdG9wOworCXN0cnVjdCBkcHVfaHdfY3RsICpod19jdGw7CisJ c3RydWN0IGRwdV9od19jZG0gKmh3X2NkbTsKKwlzdHJ1Y3QgZHB1X2h3X2NkbV9jZmcgY2RtX2Nm ZzsKKwlzdHJ1Y3QgZHB1X2h3X3Bpbmdwb25nICpod19wcDsKKwlzdHJ1Y3QgZHB1X2ttcyAqZHB1 X2ttczsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBjYWNoZWRfbW9kZTsKKwllbnVtIGRwdV9l bmNfc3BsaXRfcm9sZSBzcGxpdF9yb2xlOworCWVudW0gZHB1X2ludGZfbW9kZSBpbnRmX21vZGU7 CisJZW51bSBkcHVfaW50ZiBpbnRmX2lkeDsKKwllbnVtIGRwdV9ybV90b3BvbG9neV9uYW1lIHRv cG9sb2d5X25hbWU7CisJc3BpbmxvY2tfdCAqZW5jX3NwaW5sb2NrOworCWVudW0gZHB1X2VuY19l bmFibGVfc3RhdGUgZW5hYmxlX3N0YXRlOworCWF0b21pY190IHZibGFua19yZWZjb3VudDsKKwlh dG9taWNfdCB2c3luY19jbnQ7CisJYXRvbWljX3QgdW5kZXJydW5fY250OworCWF0b21pY190IHBl bmRpbmdfY3Rsc3RhcnRfY250OworCWF0b21pY190IHBlbmRpbmdfa2lja29mZl9jbnQ7CisJd2Fp dF9xdWV1ZV9oZWFkX3QgcGVuZGluZ19raWNrb2ZmX3dxOworCXN0cnVjdCBkcHVfZW5jb2Rlcl9p cnEgaXJxW0lOVFJfSURYX01BWF07Cit9OworCitzdGF0aWMgaW5saW5lIGludCBkcHVfZW5jb2Rl cl9waHlzX2luY19wZW5kaW5nKHN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpwaHlzKQoreworCWF0 b21pY19pbmNfcmV0dXJuKCZwaHlzLT5wZW5kaW5nX2N0bHN0YXJ0X2NudCk7CisJcmV0dXJuIGF0 b21pY19pbmNfcmV0dXJuKCZwaHlzLT5wZW5kaW5nX2tpY2tvZmZfY250KTsKK30KKworLyoqCisg KiBzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5c192aWQgLSBzdWItY2xhc3Mgb2YgZHB1X2VuY29kZXJf cGh5cyB0byBoYW5kbGUgdmlkZW8KKyAqCW1vZGUgc3BlY2lmaWMgb3BlcmF0aW9ucworICogQGJh c2U6CUJhc2VjbGFzcyBwaHlzaWNhbCBlbmNvZGVyIHN0cnVjdHVyZQorICogQGh3X2ludGY6CUhh cmR3YXJlIGludGVyZmFjZSB0byB0aGUgaW50ZiByZWdpc3RlcnMKKyAqIEB0aW1pbmdfcGFyYW1z OiBDdXJyZW50IHRpbWluZyBwYXJhbWV0ZXIKKyAqLworc3RydWN0IGRwdV9lbmNvZGVyX3BoeXNf dmlkIHsKKwlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyBiYXNlOworCXN0cnVjdCBkcHVfaHdfaW50 ZiAqaHdfaW50ZjsKKwlzdHJ1Y3QgaW50Zl90aW1pbmdfcGFyYW1zIHRpbWluZ19wYXJhbXM7Cit9 OworCisvKioKKyAqIHN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzX2NtZCAtIHN1Yi1jbGFzcyBvZiBk cHVfZW5jb2Rlcl9waHlzIHRvIGhhbmRsZSBjb21tYW5kCisgKgltb2RlIHNwZWNpZmljIG9wZXJh dGlvbnMKKyAqIEBiYXNlOglCYXNlY2xhc3MgcGh5c2ljYWwgZW5jb2RlciBzdHJ1Y3R1cmUKKyAq IEBpbnRmX2lkeDoJSW50ZiBCbG9jayBpbmRleCB1c2VkIGJ5IHRoaXMgcGh5cyBlbmNvZGVyCisg KiBAc3RyZWFtX3NlbDoJU3RyZWFtIHNlbGVjdGlvbiBmb3IgbXVsdGktc3RyZWFtIGludGVyZmFj ZXMKKyAqIEBzZXJpYWxpemVfd2FpdDRwcDoJc2VyaWFsaXplIHdhaXQ0cHAgZmVhdHVyZSB3YWl0 cyBmb3IgcHBfZG9uZSBpbnRlcnJ1cHQKKyAqCQkJYWZ0ZXIgY3RsX3N0YXJ0IGluc3RlYWQgb2Yg YmVmb3JlIG5leHQgZnJhbWUga2lja29mZgorICogQHBwX3RpbWVvdXRfcmVwb3J0X2NudDogbnVt YmVyIG9mIHBpbmdwb25nIGRvbmUgaXJxIHRpbWVvdXQgZXJyb3JzCisgKiBAcGVuZGluZ192Ymxh bmtfY250OiBBdG9taWMgY291bnRlciB0cmFja2luZyBwZW5kaW5nIHdhaXQgZm9yIFZCTEFOSwor ICogQHBlbmRpbmdfdmJsYW5rX3dxOiBXYWl0IHF1ZXVlIGZvciBibG9ja2luZyB1bnRpbCBWQkxB TksgcmVjZWl2ZWQKKyAqLworc3RydWN0IGRwdV9lbmNvZGVyX3BoeXNfY21kIHsKKwlzdHJ1Y3Qg ZHB1X2VuY29kZXJfcGh5cyBiYXNlOworCWludCBzdHJlYW1fc2VsOworCWJvb2wgc2VyaWFsaXpl X3dhaXQ0cHA7CisJaW50IHBwX3RpbWVvdXRfcmVwb3J0X2NudDsKKwlhdG9taWNfdCBwZW5kaW5n X3ZibGFua19jbnQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QgcGVuZGluZ192Ymxhbmtfd3E7Cit9Owor CisvKioKKyAqIHN0cnVjdCBkcHVfZW5jX3BoeXNfaW5pdF9wYXJhbXMgLSBpbml0aWFsaXphdGlv biBwYXJhbWV0ZXJzIGZvciBwaHlzIGVuY3MKKyAqIEBkcHVfa21zOgkJUG9pbnRlciB0byB0aGUg ZHB1X2ttcyB0b3AgbGV2ZWwKKyAqIEBwYXJlbnQ6CQlQb2ludGVyIHRvIHRoZSBjb250YWluaW5n IHZpcnR1YWwgZW5jb2RlcgorICogQHBhcmVudF9vcHM6CQlDYWxsYmFja3MgZXhwb3NlZCBieSB0 aGUgcGFyZW50IHRvIHRoZSBwaHlzX2VuYworICogQHNwbGl0X3JvbGU6CQlSb2xlIHRvIHBsYXkg aW4gYSBzcGxpdC1wYW5lbCBjb25maWd1cmF0aW9uCisgKiBAaW50Zl9pZHg6CQlJbnRlcmZhY2Ug aW5kZXggdGhpcyBwaHlzX2VuYyB3aWxsIGNvbnRyb2wKKyAqIEBlbmNfc3BpbmxvY2s6CVZpcnR1 YWwtRW5jb2Rlci1XaWRlIFNwaW4gTG9jayBmb3IgSVJRIHB1cnBvc2VzCisgKi8KK3N0cnVjdCBk cHVfZW5jX3BoeXNfaW5pdF9wYXJhbXMgeworCXN0cnVjdCBkcHVfa21zICpkcHVfa21zOworCXN0 cnVjdCBkcm1fZW5jb2RlciAqcGFyZW50OworCXN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0X29wcyBw YXJlbnRfb3BzOworCWVudW0gZHB1X2VuY19zcGxpdF9yb2xlIHNwbGl0X3JvbGU7CisJZW51bSBk cHVfaW50ZiBpbnRmX2lkeDsKKwlzcGlubG9ja190ICplbmNfc3BpbmxvY2s7Cit9OworCisvKioK KyAqIGRwdV9lbmNvZGVyX3dhaXRfaW5mbyAtIGNvbnRhaW5lciBmb3IgcGFzc2luZyBhcmd1bWVu dHMgdG8gaXJxIHdhaXQgZnVuY3Rpb25zCisgKiBAd3E6IHdhaXQgcXVldWUgc3RydWN0dXJlCisg KiBAYXRvbWljX2NudDogd2FpdCB1bnRpbCBhdG9taWNfY250IGVxdWFscyB6ZXJvCisgKiBAdGlt ZW91dF9tczogdGltZW91dCB2YWx1ZSBpbiBtaWxsaXNlY29uZHMKKyAqLworc3RydWN0IGRwdV9l bmNvZGVyX3dhaXRfaW5mbyB7CisJd2FpdF9xdWV1ZV9oZWFkX3QgKndxOworCWF0b21pY190ICph dG9taWNfY250OworCXM2NCB0aW1lb3V0X21zOworfTsKKworLyoqCisgKiBkcHVfZW5jb2Rlcl9w aHlzX3ZpZF9pbml0IC0gQ29uc3RydWN0IGEgbmV3IHZpZGVvIG1vZGUgcGh5c2ljYWwgZW5jb2Rl cgorICogQHA6CVBvaW50ZXIgdG8gaW5pdCBwYXJhbXMgc3RydWN0dXJlCisgKiBSZXR1cm46IEVy cm9yIGNvZGUgb3IgbmV3bHkgYWxsb2NhdGVkIGVuY29kZXIKKyAqLworc3RydWN0IGRwdV9lbmNv ZGVyX3BoeXMgKmRwdV9lbmNvZGVyX3BoeXNfdmlkX2luaXQoCisJCXN0cnVjdCBkcHVfZW5jX3Bo eXNfaW5pdF9wYXJhbXMgKnApOworCisvKioKKyAqIGRwdV9lbmNvZGVyX3BoeXNfY21kX2luaXQg LSBDb25zdHJ1Y3QgYSBuZXcgY29tbWFuZCBtb2RlIHBoeXNpY2FsIGVuY29kZXIKKyAqIEBwOglQ b2ludGVyIHRvIGluaXQgcGFyYW1zIHN0cnVjdHVyZQorICogUmV0dXJuOiBFcnJvciBjb2RlIG9y IG5ld2x5IGFsbG9jYXRlZCBlbmNvZGVyCisgKi8KK3N0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpk cHVfZW5jb2Rlcl9waHlzX2NtZF9pbml0KAorCQlzdHJ1Y3QgZHB1X2VuY19waHlzX2luaXRfcGFy YW1zICpwKTsKKworLyoqCisgKiBkcHVfZW5jb2Rlcl9oZWxwZXJfdHJpZ2dlcl9zdGFydCAtIGNv bnRyb2wgc3RhcnQgaGVscGVyIGZ1bmN0aW9uCisgKglUaGlzIGhlbHBlciBmdW5jdGlvbiBtYXkg YmUgb3B0aW9uYWxseSBzcGVjaWZpZWQgYnkgcGh5c2ljYWwKKyAqCWVuY29kZXJzIGlmIHRoZXkg cmVxdWlyZSBjdGxfc3RhcnQgdHJpZ2dlcmluZy4KKyAqIEBwaHlzX2VuYzogUG9pbnRlciB0byBw aHlzaWNhbCBlbmNvZGVyIHN0cnVjdHVyZQorICovCit2b2lkIGRwdV9lbmNvZGVyX2hlbHBlcl90 cmlnZ2VyX3N0YXJ0KHN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpwaHlzX2VuYyk7CisKKy8qKgor ICogZHB1X2VuY29kZXJfaGVscGVyX3dhaXRfZXZlbnRfdGltZW91dCAtIHdhaXQgZm9yIGV2ZW50 IHdpdGggdGltZW91dAorICoJdGFraW5nIGludG8gYWNjb3VudCB0aGF0IGppZmZpZXMgbWF5IGp1 bXAgYmV0d2VlbiByZWFkcyBsZWFkaW5nIHRvCisgKglpbmNvcnJlY3RseSBkZXRlY3RlZCB0aW1l b3V0cy4gUHJldmVudCBmYWlsdXJlIGluIHRoaXMgc2NlbmFyaW8gYnkKKyAqCW1ha2luZyBzdXJl IHRoYXQgZWxhcHNlZCB0aW1lIGR1cmluZyB3YWl0IGlzIHZhbGlkLgorICogQGRybV9pZDogZHJt IG9iamVjdCBpZCBmb3IgbG9nZ2luZworICogQGh3X2lkOiBodyBpbnN0YW5jZSBpZCBmb3IgbG9n Z2luZworICogQGluZm86IHdhaXQgaW5mbyBzdHJ1Y3R1cmUKKyAqLworaW50IGRwdV9lbmNvZGVy X2hlbHBlcl93YWl0X2V2ZW50X3RpbWVvdXQoCisJCWludDMyX3QgZHJtX2lkLAorCQlpbnQzMl90 IGh3X2lkLAorCQlzdHJ1Y3QgZHB1X2VuY29kZXJfd2FpdF9pbmZvICppbmZvKTsKKworLyoqCisg KiBkcHVfZW5jb2Rlcl9oZWxwZXJfaHdfcmVzZXQgLSBpc3N1ZSBjdGwgaHcgcmVzZXQKKyAqCVRo aXMgaGVscGVyIGZ1bmN0aW9uIG1heSBiZSBvcHRpb25hbGx5IHNwZWNpZmllZCBieSBwaHlzaWNh bAorICoJZW5jb2RlcnMgaWYgdGhleSByZXF1aXJlIGN0bCBodyByZXNldC4gSWYgc3RhdGUgaXMg Y3VycmVudGx5CisgKglEUFVfRU5DX0VSUl9ORUVEU19IV19SRVNFVCwgaXQgaXMgc2V0IGJhY2sg dG8gRFBVX0VOQ19FTkFCTEVELgorICogQHBoeXNfZW5jOiBQb2ludGVyIHRvIHBoeXNpY2FsIGVu Y29kZXIgc3RydWN0dXJlCisgKi8KK3ZvaWQgZHB1X2VuY29kZXJfaGVscGVyX2h3X3Jlc2V0KHN0 cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpwaHlzX2VuYyk7CisKK3N0YXRpYyBpbmxpbmUgZW51bSBk cHVfM2RfYmxlbmRfbW9kZSBkcHVfZW5jb2Rlcl9oZWxwZXJfZ2V0XzNkX2JsZW5kX21vZGUoCisJ CXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpwaHlzX2VuYykKK3sKKwlpZiAoIXBoeXNfZW5jIHx8 IHBoeXNfZW5jLT5lbmFibGVfc3RhdGUgPT0gRFBVX0VOQ19ESVNBQkxJTkcpCisJCXJldHVybiBC TEVORF8zRF9OT05FOworCisJaWYgKHBoeXNfZW5jLT5zcGxpdF9yb2xlID09IEVOQ19ST0xFX1NP TE8gJiYKKwkgICAgcGh5c19lbmMtPnRvcG9sb2d5X25hbWUgPT0gRFBVX1JNX1RPUE9MT0dZX0RV QUxQSVBFXzNETUVSR0UpCisJCXJldHVybiBCTEVORF8zRF9IX1JPV19JTlQ7CisKKwlyZXR1cm4g QkxFTkRfM0RfTk9ORTsKK30KKworLyoqCisgKiBkcHVfZW5jb2Rlcl9oZWxwZXJfc3BsaXRfY29u ZmlnIC0gc3BsaXQgZGlzcGxheSBjb25maWd1cmF0aW9uIGhlbHBlciBmdW5jdGlvbgorICoJVGhp cyBoZWxwZXIgZnVuY3Rpb24gbWF5IGJlIHVzZWQgYnkgcGh5c2ljYWwgZW5jb2RlcnMgdG8gY29u ZmlndXJlCisgKgl0aGUgc3BsaXQgZGlzcGxheSByZWxhdGVkIHJlZ2lzdGVycy4KKyAqIEBwaHlz X2VuYzogUG9pbnRlciB0byBwaHlzaWNhbCBlbmNvZGVyIHN0cnVjdHVyZQorICogQGludGVyZmFj ZTogZW51bSBkcHVfaW50ZiBzZXR0aW5nCisgKi8KK3ZvaWQgZHB1X2VuY29kZXJfaGVscGVyX3Nw bGl0X2NvbmZpZygKKwkJc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKnBoeXNfZW5jLAorCQllbnVt IGRwdV9pbnRmIGludGVyZmFjZSk7CisKKy8qKgorICogZHB1X2VuY29kZXJfaGVscGVyX2h3X3Jl bGVhc2UgLSBwcmVwYXJlIGZvciBoL3cgcmVzZXQgZHVyaW5nIGRpc2FibGUKKyAqIEBwaHlzX2Vu YzogUG9pbnRlciB0byBwaHlzaWNhbCBlbmNvZGVyIHN0cnVjdHVyZQorICogQGZiOiBPcHRpb25h bCBmYiBmb3Igc3BlY2lmeWluZyBuZXcgbWl4ZXIgb3V0cHV0IHJlc29sdXRpb24sIG1heSBiZSBO VUxMCisgKiBSZXR1cm46IFplcm8gb24gc3VjY2VzcworICovCitpbnQgZHB1X2VuY29kZXJfaGVs cGVyX2h3X3JlbGVhc2Uoc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKnBoeXNfZW5jLAorCQlzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYik7CisKKy8qKgorICogZHB1X2VuY29kZXJfaGVscGVyX3Jl cG9ydF9pcnFfdGltZW91dCAtIHV0aWxpdHkgdG8gcmVwb3J0IGVycm9yIHRoYXQgaXJxIGhhcwor ICoJdGltZWQgb3V0LCBpbmNsdWRpbmcgcmVwb3J0aW5nIGZyYW1lIGVycm9yIGV2ZW50IHRvIGNy dGMgYW5kIGRlYnVnIGR1bXAKKyAqIEBwaHlzX2VuYzogUG9pbnRlciB0byBwaHlzaWNhbCBlbmNv ZGVyIHN0cnVjdHVyZQorICogQGludHJfaWR4OiBGYWlsaW5nIGludGVycnVwdCBpbmRleAorICov Cit2b2lkIGRwdV9lbmNvZGVyX2hlbHBlcl9yZXBvcnRfaXJxX3RpbWVvdXQoc3RydWN0IGRwdV9l bmNvZGVyX3BoeXMgKnBoeXNfZW5jLAorCQllbnVtIGRwdV9pbnRyX2lkeCBpbnRyX2lkeCk7CisK Ky8qKgorICogZHB1X2VuY29kZXJfaGVscGVyX3dhaXRfZm9yX2lycSAtIHV0aWxpdHkgdG8gd2Fp dCBvbiBhbiBpcnEuCisgKglub3RlOiB3aWxsIGNhbGwgZHB1X2VuY29kZXJfaGVscGVyX3dhaXRf Zm9yX2lycSBvbiB0aW1lb3V0CisgKiBAcGh5c19lbmM6IFBvaW50ZXIgdG8gcGh5c2ljYWwgZW5j b2RlciBzdHJ1Y3R1cmUKKyAqIEBpbnRyX2lkeDogZW5jb2RlciBpbnRlcnJ1cHQgaW5kZXgKKyAq IEB3YWl0X2luZm86IHdhaXQgaW5mbyBzdHJ1Y3QKKyAqIEBSZXR1cm46IDAgb3IgLUVSUk9SCisg Ki8KK2ludCBkcHVfZW5jb2Rlcl9oZWxwZXJfd2FpdF9mb3JfaXJxKHN0cnVjdCBkcHVfZW5jb2Rl cl9waHlzICpwaHlzX2VuYywKKwkJZW51bSBkcHVfaW50cl9pZHggaW50cl9pZHgsCisJCXN0cnVj dCBkcHVfZW5jb2Rlcl93YWl0X2luZm8gKndhaXRfaW5mbyk7CisKKy8qKgorICogZHB1X2VuY29k ZXJfaGVscGVyX3JlZ2lzdGVyX2lycSAtIHJlZ2lzdGVyIGFuZCBlbmFibGUgYW4gaXJxCisgKiBA cGh5c19lbmM6IFBvaW50ZXIgdG8gcGh5c2ljYWwgZW5jb2RlciBzdHJ1Y3R1cmUKKyAqIEBpbnRy X2lkeDogZW5jb2RlciBpbnRlcnJ1cHQgaW5kZXgKKyAqIEBSZXR1cm46IDAgb3IgLUVSUk9SCisg Ki8KK2ludCBkcHVfZW5jb2Rlcl9oZWxwZXJfcmVnaXN0ZXJfaXJxKHN0cnVjdCBkcHVfZW5jb2Rl cl9waHlzICpwaHlzX2VuYywKKwkJZW51bSBkcHVfaW50cl9pZHggaW50cl9pZHgpOworCisvKioK KyAqIGRwdV9lbmNvZGVyX2hlbHBlcl91bnJlZ2lzdGVyX2lycSAtIHVucmVnaXN0ZXIgYW5kIGRp c2FibGUgYW4gaXJxCisgKiBAcGh5c19lbmM6IFBvaW50ZXIgdG8gcGh5c2ljYWwgZW5jb2RlciBz dHJ1Y3R1cmUKKyAqIEBpbnRyX2lkeDogZW5jb2RlciBpbnRlcnJ1cHQgaW5kZXgKKyAqIEBSZXR1 cm46IDAgb3IgLUVSUk9SCisgKi8KK2ludCBkcHVfZW5jb2Rlcl9oZWxwZXJfdW5yZWdpc3Rlcl9p cnEoc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKnBoeXNfZW5jLAorCQllbnVtIGRwdV9pbnRyX2lk eCBpbnRyX2lkeCk7CisKKyNlbmRpZiAvKiBfX2RwdV9lbmNvZGVyX3BoeXNfSF9fICovCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlcl9waHlzX2Nt ZC5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXJfcGh5c19jbWQu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjk1MTlkYmMyNDI2Ngot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNv ZGVyX3BoeXNfY21kLmMKQEAgLTAsMCArMSw5MDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIw MTUtMjAxOCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg KiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCisgKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNo ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgorICoKKyAqLworCisjZGVmaW5lIHByX2ZtdChmbXQpCSJbZHJtOiVzOiVkXSAiIGZtdCwg X19mdW5jX18sIF9fTElORV9fCisjaW5jbHVkZSAiZHB1X2VuY29kZXJfcGh5cy5oIgorI2luY2x1 ZGUgImRwdV9od19pbnRlcnJ1cHRzLmgiCisjaW5jbHVkZSAiZHB1X2NvcmVfaXJxLmgiCisjaW5j bHVkZSAiZHB1X2Zvcm1hdHMuaCIKKyNpbmNsdWRlICJkcHVfdHJhY2UuaCIKKworI2RlZmluZSBE UFVfREVCVUdfQ01ERU5DKGUsIGZtdCwgLi4uKSBEUFVfREVCVUcoImVuYyVkIGludGYlZCAiIGZt dCwgXAorCQkoZSkgJiYgKGUpLT5iYXNlLnBhcmVudCA/IFwKKwkJKGUpLT5iYXNlLnBhcmVudC0+ YmFzZS5pZCA6IC0xLCBcCisJCShlKSA/IChlKS0+YmFzZS5pbnRmX2lkeCAtIElOVEZfMCA6IC0x LCAjI19fVkFfQVJHU19fKQorCisjZGVmaW5lIERQVV9FUlJPUl9DTURFTkMoZSwgZm10LCAuLi4p IERQVV9FUlJPUigiZW5jJWQgaW50ZiVkICIgZm10LCBcCisJCShlKSAmJiAoZSktPmJhc2UucGFy ZW50ID8gXAorCQkoZSktPmJhc2UucGFyZW50LT5iYXNlLmlkIDogLTEsIFwKKwkJKGUpID8gKGUp LT5iYXNlLmludGZfaWR4IC0gSU5URl8wIDogLTEsICMjX19WQV9BUkdTX18pCisKKyNkZWZpbmUg dG9fZHB1X2VuY29kZXJfcGh5c19jbWQoeCkgXAorCWNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgZHB1 X2VuY29kZXJfcGh5c19jbWQsIGJhc2UpCisKKyNkZWZpbmUgUFBfVElNRU9VVF9NQVhfVFJJQUxT CTEwCisKKy8qCisgKiBUZWFyY2hlY2sgc3luYyBzdGFydCBhbmQgY29udGludWUgdGhyZXNob2xk cyBhcmUgZW1waXJpY2FsbHkgZm91bmQKKyAqIGJhc2VkIG9uIGNvbW1vbiBwYW5lbHMgSW4gdGhl IGZ1dHVyZSwgbWF5IHdhbnQgdG8gYWxsb3cgcGFuZWxzIHRvIG92ZXJyaWRlCisgKiB0aGVzZSBk ZWZhdWx0IHZhbHVlcworICovCisjZGVmaW5lIERFRkFVTFRfVEVBUkNIRUNLX1NZTkNfVEhSRVNI X1NUQVJUCTQKKyNkZWZpbmUgREVGQVVMVF9URUFSQ0hFQ0tfU1lOQ19USFJFU0hfQ09OVElOVUUJ NAorCisjZGVmaW5lIERQVV9FTkNfV1JfUFRSX1NUQVJUX1RJTUVPVVRfVVMgMjAwMDAKKworc3Rh dGljIGlubGluZSBpbnQgX2RwdV9lbmNvZGVyX3BoeXNfY21kX2dldF9pZGxlX3RpbWVvdXQoCisJ CXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzX2NtZCAqY21kX2VuYykKK3sKKwlyZXR1cm4gS0lDS09G Rl9USU1FT1VUX01TOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgZHB1X2VuY29kZXJfcGh5c19j bWRfaXNfbWFzdGVyKAorCQlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqcGh5c19lbmMpCit7CisJ cmV0dXJuIChwaHlzX2VuYy0+c3BsaXRfcm9sZSAhPSBFTkNfUk9MRV9TTEFWRSkgPyB0cnVlIDog ZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIGRwdV9lbmNvZGVyX3BoeXNfY21kX21vZGVfZml4dXAo CisJCXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpwaHlzX2VuYywKKwkJY29uc3Qgc3RydWN0IGRy bV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGpfbW9k ZSkKK3sKKwlpZiAocGh5c19lbmMpCisJCURQVV9ERUJVR19DTURFTkModG9fZHB1X2VuY29kZXJf cGh5c19jbWQocGh5c19lbmMpLCAiXG4iKTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZv aWQgX2RwdV9lbmNvZGVyX3BoeXNfY21kX3VwZGF0ZV9pbnRmX2NmZygKKwkJc3RydWN0IGRwdV9l bmNvZGVyX3BoeXMgKnBoeXNfZW5jKQoreworCXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzX2NtZCAq Y21kX2VuYyA9CisJCQl0b19kcHVfZW5jb2Rlcl9waHlzX2NtZChwaHlzX2VuYyk7CisJc3RydWN0 IGRwdV9od19jdGwgKmN0bDsKKwlzdHJ1Y3QgZHB1X2h3X2ludGZfY2ZnIGludGZfY2ZnID0geyAw IH07CisKKwlpZiAoIXBoeXNfZW5jKQorCQlyZXR1cm47CisKKwljdGwgPSBwaHlzX2VuYy0+aHdf Y3RsOworCWlmICghY3RsIHx8ICFjdGwtPm9wcy5zZXR1cF9pbnRmX2NmZykKKwkJcmV0dXJuOwor CisJaW50Zl9jZmcuaW50ZiA9IHBoeXNfZW5jLT5pbnRmX2lkeDsKKwlpbnRmX2NmZy5pbnRmX21v ZGVfc2VsID0gRFBVX0NUTF9NT0RFX1NFTF9DTUQ7CisJaW50Zl9jZmcuc3RyZWFtX3NlbCA9IGNt ZF9lbmMtPnN0cmVhbV9zZWw7CisJaW50Zl9jZmcubW9kZV8zZCA9IGRwdV9lbmNvZGVyX2hlbHBl cl9nZXRfM2RfYmxlbmRfbW9kZShwaHlzX2VuYyk7CisJY3RsLT5vcHMuc2V0dXBfaW50Zl9jZmco Y3RsLCAmaW50Zl9jZmcpOworfQorCitzdGF0aWMgdm9pZCBkcHVfZW5jb2Rlcl9waHlzX2NtZF9w cF90eF9kb25lX2lycSh2b2lkICphcmcsIGludCBpcnFfaWR4KQoreworCXN0cnVjdCBkcHVfZW5j b2Rlcl9waHlzICpwaHlzX2VuYyA9IGFyZzsKKwl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CisJ aW50IG5ld19jbnQ7CisJdTMyIGV2ZW50ID0gRFBVX0VOQ09ERVJfRlJBTUVfRVZFTlRfRE9ORTsK KworCWlmICghcGh5c19lbmMgfHwgIXBoeXNfZW5jLT5od19wcCkKKwkJcmV0dXJuOworCisJRFBV X0FUUkFDRV9CRUdJTigicHBfZG9uZV9pcnEiKTsKKwkvKiBub3RpZnkgYWxsIHN5bmNocm9ub3Vz IGNsaWVudHMgZmlyc3QsIHRoZW4gYXN5bmNocm9ub3VzIGNsaWVudHMgKi8KKwlpZiAocGh5c19l bmMtPnBhcmVudF9vcHMuaGFuZGxlX2ZyYW1lX2RvbmUpCisJCXBoeXNfZW5jLT5wYXJlbnRfb3Bz LmhhbmRsZV9mcmFtZV9kb25lKHBoeXNfZW5jLT5wYXJlbnQsCisJCQkJcGh5c19lbmMsIGV2ZW50 KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKHBoeXNfZW5jLT5lbmNfc3BpbmxvY2ssIGxvY2tfZmxh Z3MpOworCW5ld19jbnQgPSBhdG9taWNfYWRkX3VubGVzcygmcGh5c19lbmMtPnBlbmRpbmdfa2lj a29mZl9jbnQsIC0xLCAwKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKHBoeXNfZW5jLT5lbmNf c3BpbmxvY2ssIGxvY2tfZmxhZ3MpOworCisJdHJhY2VfZHB1X2VuY19waHlzX2NtZF9wcF90eF9k b25lKERSTUlEKHBoeXNfZW5jLT5wYXJlbnQpLAorCQkJCQkgIHBoeXNfZW5jLT5od19wcC0+aWR4 IC0gUElOR1BPTkdfMCwKKwkJCQkJICBuZXdfY250LCBldmVudCk7CisKKwkvKiBTaWduYWwgYW55 IHdhaXRpbmcgYXRvbWljIGNvbW1pdCB0aHJlYWQgKi8KKwl3YWtlX3VwX2FsbCgmcGh5c19lbmMt PnBlbmRpbmdfa2lja29mZl93cSk7CisJRFBVX0FUUkFDRV9FTkQoInBwX2RvbmVfaXJxIik7Cit9 CisKK3N0YXRpYyB2b2lkIGRwdV9lbmNvZGVyX3BoeXNfY21kX3BwX3JkX3B0cl9pcnEodm9pZCAq YXJnLCBpbnQgaXJxX2lkeCkKK3sKKwlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqcGh5c19lbmMg PSBhcmc7CisJc3RydWN0IGRwdV9lbmNvZGVyX3BoeXNfY21kICpjbWRfZW5jOworCisJaWYgKCFw aHlzX2VuYyB8fCAhcGh5c19lbmMtPmh3X3BwKQorCQlyZXR1cm47CisKKwlEUFVfQVRSQUNFX0JF R0lOKCJyZF9wdHJfaXJxIik7CisJY21kX2VuYyA9IHRvX2RwdV9lbmNvZGVyX3BoeXNfY21kKHBo eXNfZW5jKTsKKworCWlmIChwaHlzX2VuYy0+cGFyZW50X29wcy5oYW5kbGVfdmJsYW5rX3ZpcnQp CisJCXBoeXNfZW5jLT5wYXJlbnRfb3BzLmhhbmRsZV92YmxhbmtfdmlydChwaHlzX2VuYy0+cGFy ZW50LAorCQkJcGh5c19lbmMpOworCisJYXRvbWljX2FkZF91bmxlc3MoJmNtZF9lbmMtPnBlbmRp bmdfdmJsYW5rX2NudCwgLTEsIDApOworCXdha2VfdXBfYWxsKCZjbWRfZW5jLT5wZW5kaW5nX3Zi bGFua193cSk7CisJRFBVX0FUUkFDRV9FTkQoInJkX3B0cl9pcnEiKTsKK30KKworc3RhdGljIHZv aWQgZHB1X2VuY29kZXJfcGh5c19jbWRfY3RsX3N0YXJ0X2lycSh2b2lkICphcmcsIGludCBpcnFf aWR4KQoreworCXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpwaHlzX2VuYyA9IGFyZzsKKwlzdHJ1 Y3QgZHB1X2VuY29kZXJfcGh5c19jbWQgKmNtZF9lbmM7CisKKwlpZiAoIXBoeXNfZW5jIHx8ICFw aHlzX2VuYy0+aHdfY3RsKQorCQlyZXR1cm47CisKKwlEUFVfQVRSQUNFX0JFR0lOKCJjdGxfc3Rh cnRfaXJxIik7CisJY21kX2VuYyA9IHRvX2RwdV9lbmNvZGVyX3BoeXNfY21kKHBoeXNfZW5jKTsK KworCWF0b21pY19hZGRfdW5sZXNzKCZwaHlzX2VuYy0+cGVuZGluZ19jdGxzdGFydF9jbnQsIC0x LCAwKTsKKworCS8qIFNpZ25hbCBhbnkgd2FpdGluZyBjdGwgc3RhcnQgaW50ZXJydXB0ICovCisJ d2FrZV91cF9hbGwoJnBoeXNfZW5jLT5wZW5kaW5nX2tpY2tvZmZfd3EpOworCURQVV9BVFJBQ0Vf RU5EKCJjdGxfc3RhcnRfaXJxIik7Cit9CisKK3N0YXRpYyB2b2lkIGRwdV9lbmNvZGVyX3BoeXNf Y21kX3VuZGVycnVuX2lycSh2b2lkICphcmcsIGludCBpcnFfaWR4KQoreworCXN0cnVjdCBkcHVf ZW5jb2Rlcl9waHlzICpwaHlzX2VuYyA9IGFyZzsKKworCWlmICghcGh5c19lbmMpCisJCXJldHVy bjsKKworCWlmIChwaHlzX2VuYy0+cGFyZW50X29wcy5oYW5kbGVfdW5kZXJydW5fdmlydCkKKwkJ cGh5c19lbmMtPnBhcmVudF9vcHMuaGFuZGxlX3VuZGVycnVuX3ZpcnQocGh5c19lbmMtPnBhcmVu dCwKKwkJCXBoeXNfZW5jKTsKK30KKworc3RhdGljIHZvaWQgX2RwdV9lbmNvZGVyX3BoeXNfY21k X3NldHVwX2lycV9od19pZHgoCisJCXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpwaHlzX2VuYykK K3sKKwlzdHJ1Y3QgZHB1X2VuY29kZXJfaXJxICppcnE7CisKKwlpcnEgPSAmcGh5c19lbmMtPmly cVtJTlRSX0lEWF9DVExfU1RBUlRdOworCWlycS0+aHdfaWR4ID0gcGh5c19lbmMtPmh3X2N0bC0+ aWR4OworCWlycS0+aXJxX2lkeCA9IC1FSU5WQUw7CisKKwlpcnEgPSAmcGh5c19lbmMtPmlycVtJ TlRSX0lEWF9QSU5HUE9OR107CisJaXJxLT5od19pZHggPSBwaHlzX2VuYy0+aHdfcHAtPmlkeDsK KwlpcnEtPmlycV9pZHggPSAtRUlOVkFMOworCisJaXJxID0gJnBoeXNfZW5jLT5pcnFbSU5UUl9J RFhfUkRQVFJdOworCWlycS0+aHdfaWR4ID0gcGh5c19lbmMtPmh3X3BwLT5pZHg7CisJaXJxLT5p cnFfaWR4ID0gLUVJTlZBTDsKKworCWlycSA9ICZwaHlzX2VuYy0+aXJxW0lOVFJfSURYX1VOREVS UlVOXTsKKwlpcnEtPmh3X2lkeCA9IHBoeXNfZW5jLT5pbnRmX2lkeDsKKwlpcnEtPmlycV9pZHgg PSAtRUlOVkFMOworfQorCitzdGF0aWMgdm9pZCBkcHVfZW5jb2Rlcl9waHlzX2NtZF9tb2RlX3Nl dCgKKwkJc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKnBoeXNfZW5jLAorCQlzdHJ1Y3QgZHJtX2Rp c3BsYXlfbW9kZSAqbW9kZSwKKwkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkal9tb2RlKQor eworCXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzX2NtZCAqY21kX2VuYyA9CisJCXRvX2RwdV9lbmNv ZGVyX3BoeXNfY21kKHBoeXNfZW5jKTsKKwlzdHJ1Y3QgZHB1X3JtICpybSA9ICZwaHlzX2VuYy0+ ZHB1X2ttcy0+cm07CisJc3RydWN0IGRwdV9ybV9od19pdGVyIGl0ZXI7CisJaW50IGksIGluc3Rh bmNlOworCisJaWYgKCFwaHlzX2VuYyB8fCAhbW9kZSB8fCAhYWRqX21vZGUpIHsKKwkJRFBVX0VS Uk9SKCJpbnZhbGlkIGFyZ3NcbiIpOworCQlyZXR1cm47CisJfQorCXBoeXNfZW5jLT5jYWNoZWRf bW9kZSA9ICphZGpfbW9kZTsKKwlEUFVfREVCVUdfQ01ERU5DKGNtZF9lbmMsICJjYWNoaW5nIG1v ZGU6XG4iKTsKKwlkcm1fbW9kZV9kZWJ1Z19wcmludG1vZGVsaW5lKGFkal9tb2RlKTsKKworCWlu c3RhbmNlID0gcGh5c19lbmMtPnNwbGl0X3JvbGUgPT0gRU5DX1JPTEVfU0xBVkUgPyAxIDogMDsK KworCS8qIFJldHJpZXZlIHByZXZpb3VzbHkgYWxsb2NhdGVkIEhXIFJlc291cmNlcy4gU2hvdWxk bid0IGZhaWwgKi8KKwlkcHVfcm1faW5pdF9od19pdGVyKCZpdGVyLCBwaHlzX2VuYy0+cGFyZW50 LT5iYXNlLmlkLCBEUFVfSFdfQkxLX0NUTCk7CisJZm9yIChpID0gMDsgaSA8PSBpbnN0YW5jZTsg aSsrKSB7CisJCWlmIChkcHVfcm1fZ2V0X2h3KHJtLCAmaXRlcikpCisJCQlwaHlzX2VuYy0+aHdf Y3RsID0gKHN0cnVjdCBkcHVfaHdfY3RsICopaXRlci5odzsKKwl9CisKKwlpZiAoSVNfRVJSX09S X05VTEwocGh5c19lbmMtPmh3X2N0bCkpIHsKKwkJRFBVX0VSUk9SX0NNREVOQyhjbWRfZW5jLCAi ZmFpbGVkIHRvIGluaXQgY3RsOiAlbGRcbiIsCisJCQkJUFRSX0VSUihwaHlzX2VuYy0+aHdfY3Rs KSk7CisJCXBoeXNfZW5jLT5od19jdGwgPSBOVUxMOworCQlyZXR1cm47CisJfQorCisJX2RwdV9l bmNvZGVyX3BoeXNfY21kX3NldHVwX2lycV9od19pZHgocGh5c19lbmMpOworfQorCitzdGF0aWMg aW50IF9kcHVfZW5jb2Rlcl9waHlzX2NtZF9oYW5kbGVfcHBkb25lX3RpbWVvdXQoCisJCXN0cnVj dCBkcHVfZW5jb2Rlcl9waHlzICpwaHlzX2VuYykKK3sKKwlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5 c19jbWQgKmNtZF9lbmMgPQorCQkJdG9fZHB1X2VuY29kZXJfcGh5c19jbWQocGh5c19lbmMpOwor CXUzMiBmcmFtZV9ldmVudCA9IERQVV9FTkNPREVSX0ZSQU1FX0VWRU5UX0VSUk9SOworCWJvb2wg ZG9fbG9nID0gZmFsc2U7CisKKwlpZiAoIXBoeXNfZW5jIHx8ICFwaHlzX2VuYy0+aHdfcHAgfHwg IXBoeXNfZW5jLT5od19jdGwpCisJCXJldHVybiAtRUlOVkFMOworCisJY21kX2VuYy0+cHBfdGlt ZW91dF9yZXBvcnRfY250Kys7CisJaWYgKGNtZF9lbmMtPnBwX3RpbWVvdXRfcmVwb3J0X2NudCA9 PSBQUF9USU1FT1VUX01BWF9UUklBTFMpIHsKKwkJZnJhbWVfZXZlbnQgfD0gRFBVX0VOQ09ERVJf RlJBTUVfRVZFTlRfUEFORUxfREVBRDsKKwkJZG9fbG9nID0gdHJ1ZTsKKwl9IGVsc2UgaWYgKGNt ZF9lbmMtPnBwX3RpbWVvdXRfcmVwb3J0X2NudCA9PSAxKSB7CisJCWRvX2xvZyA9IHRydWU7CisJ fQorCisJdHJhY2VfZHB1X2VuY19waHlzX2NtZF9wZG9uZV90aW1lb3V0KERSTUlEKHBoeXNfZW5j LT5wYXJlbnQpLAorCQkgICAgIHBoeXNfZW5jLT5od19wcC0+aWR4IC0gUElOR1BPTkdfMCwKKwkJ ICAgICBjbWRfZW5jLT5wcF90aW1lb3V0X3JlcG9ydF9jbnQsCisJCSAgICAgYXRvbWljX3JlYWQo JnBoeXNfZW5jLT5wZW5kaW5nX2tpY2tvZmZfY250KSwKKwkJICAgICBmcmFtZV9ldmVudCk7CisK KwkvKiB0byBhdm9pZCBmbG9vZGluZywgb25seSBsb2cgZmlyc3QgdGltZSwgYW5kICJkZWFkIiB0 aW1lICovCisJaWYgKGRvX2xvZykgeworCQlEUk1fRVJST1IoImlkOiVkIHBwOiVkIGtpY2tvZmYg dGltZW91dCAlZCBjbnQgJWQga29mZl9jbnQgJWRcbiIsCisJCQkgIERSTUlEKHBoeXNfZW5jLT5w YXJlbnQpLAorCQkJICBwaHlzX2VuYy0+aHdfcHAtPmlkeCAtIFBJTkdQT05HXzAsCisJCQkgIHBo eXNfZW5jLT5od19jdGwtPmlkeCAtIENUTF8wLAorCQkJICBjbWRfZW5jLT5wcF90aW1lb3V0X3Jl cG9ydF9jbnQsCisJCQkgIGF0b21pY19yZWFkKCZwaHlzX2VuYy0+cGVuZGluZ19raWNrb2ZmX2Nu dCkpOworCisJCWRwdV9lbmNvZGVyX2hlbHBlcl91bnJlZ2lzdGVyX2lycShwaHlzX2VuYywgSU5U Ul9JRFhfUkRQVFIpOworCQlkcHVfZGJnX2R1bXAoZmFsc2UsIF9fZnVuY19fLCB0cnVlLCB0cnVl KTsKKwl9CisKKwlhdG9taWNfYWRkX3VubGVzcygmcGh5c19lbmMtPnBlbmRpbmdfa2lja29mZl9j bnQsIC0xLCAwKTsKKworCS8qIHJlcXVlc3QgYSBjdGwgcmVzZXQgYmVmb3JlIHRoZSBuZXh0IGtp Y2tvZmYgKi8KKwlwaHlzX2VuYy0+ZW5hYmxlX3N0YXRlID0gRFBVX0VOQ19FUlJfTkVFRFNfSFdf UkVTRVQ7CisKKwlpZiAocGh5c19lbmMtPnBhcmVudF9vcHMuaGFuZGxlX2ZyYW1lX2RvbmUpCisJ CXBoeXNfZW5jLT5wYXJlbnRfb3BzLmhhbmRsZV9mcmFtZV9kb25lKAorCQkJCXBoeXNfZW5jLT5w YXJlbnQsIHBoeXNfZW5jLCBmcmFtZV9ldmVudCk7CisKKwlyZXR1cm4gLUVUSU1FRE9VVDsKK30K Kworc3RhdGljIGludCBfZHB1X2VuY29kZXJfcGh5c19jbWRfd2FpdF9mb3JfaWRsZSgKKwkJc3Ry dWN0IGRwdV9lbmNvZGVyX3BoeXMgKnBoeXNfZW5jKQoreworCXN0cnVjdCBkcHVfZW5jb2Rlcl9w aHlzX2NtZCAqY21kX2VuYyA9CisJCQl0b19kcHVfZW5jb2Rlcl9waHlzX2NtZChwaHlzX2VuYyk7 CisJc3RydWN0IGRwdV9lbmNvZGVyX3dhaXRfaW5mbyB3YWl0X2luZm87CisJaW50IHJldDsKKwor CWlmICghcGh5c19lbmMpIHsKKwkJRFBVX0VSUk9SKCJpbnZhbGlkIGVuY29kZXJcbiIpOworCQly ZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl3YWl0X2luZm8ud3EgPSAmcGh5c19lbmMtPnBlbmRpbmdf a2lja29mZl93cTsKKwl3YWl0X2luZm8uYXRvbWljX2NudCA9ICZwaHlzX2VuYy0+cGVuZGluZ19r aWNrb2ZmX2NudDsKKwl3YWl0X2luZm8udGltZW91dF9tcyA9IEtJQ0tPRkZfVElNRU9VVF9NUzsK KworCXJldCA9IGRwdV9lbmNvZGVyX2hlbHBlcl93YWl0X2Zvcl9pcnEocGh5c19lbmMsIElOVFJf SURYX1BJTkdQT05HLAorCQkJJndhaXRfaW5mbyk7CisJaWYgKHJldCA9PSAtRVRJTUVET1VUKQor CQlfZHB1X2VuY29kZXJfcGh5c19jbWRfaGFuZGxlX3BwZG9uZV90aW1lb3V0KHBoeXNfZW5jKTsK KwllbHNlIGlmICghcmV0KQorCQljbWRfZW5jLT5wcF90aW1lb3V0X3JlcG9ydF9jbnQgPSAwOwor CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkcHVfZW5jb2Rlcl9waHlzX2NtZF9jb250 cm9sX3ZibGFua19pcnEoCisJCXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpwaHlzX2VuYywKKwkJ Ym9vbCBlbmFibGUpCit7CisJaW50IHJldCA9IDA7CisJaW50IHJlZmNvdW50OworCisJaWYgKCFw aHlzX2VuYyB8fCAhcGh5c19lbmMtPmh3X3BwKSB7CisJCURQVV9FUlJPUigiaW52YWxpZCBlbmNv ZGVyXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmVmY291bnQgPSBhdG9taWNfcmVh ZCgmcGh5c19lbmMtPnZibGFua19yZWZjb3VudCk7CisKKwkvKiBTbGF2ZSBlbmNvZGVycyBkb24n dCByZXBvcnQgdmJsYW5rICovCisJaWYgKCFkcHVfZW5jb2Rlcl9waHlzX2NtZF9pc19tYXN0ZXIo cGh5c19lbmMpKQorCQlnb3RvIGVuZDsKKworCS8qIHByb3RlY3QgYWdhaW5zdCBuZWdhdGl2ZSAq LworCWlmICghZW5hYmxlICYmIHJlZmNvdW50ID09IDApIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJ Z290byBlbmQ7CisJfQorCisJRFJNX0RFQlVHX0tNUygiaWQ6JXUgcHA6JWQgZW5hYmxlPSVzLyVk XG4iLCBEUk1JRChwaHlzX2VuYy0+cGFyZW50KSwKKwkJICAgICAgcGh5c19lbmMtPmh3X3BwLT5p ZHggLSBQSU5HUE9OR18wLAorCQkgICAgICBlbmFibGUgPyAidHJ1ZSIgOiAiZmFsc2UiLCByZWZj b3VudCk7CisKKwlpZiAoZW5hYmxlICYmIGF0b21pY19pbmNfcmV0dXJuKCZwaHlzX2VuYy0+dmJs YW5rX3JlZmNvdW50KSA9PSAxKQorCQlyZXQgPSBkcHVfZW5jb2Rlcl9oZWxwZXJfcmVnaXN0ZXJf aXJxKHBoeXNfZW5jLCBJTlRSX0lEWF9SRFBUUik7CisJZWxzZSBpZiAoIWVuYWJsZSAmJiBhdG9t aWNfZGVjX3JldHVybigmcGh5c19lbmMtPnZibGFua19yZWZjb3VudCkgPT0gMCkKKwkJcmV0ID0g ZHB1X2VuY29kZXJfaGVscGVyX3VucmVnaXN0ZXJfaXJxKHBoeXNfZW5jLAorCQkJCUlOVFJfSURY X1JEUFRSKTsKKworZW5kOgorCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJ2YmxhbmsgaXJxIGVy ciBpZDoldSBwcDolZCByZXQ6JWQsIGVuYWJsZSAlcy8lZFxuIiwKKwkJCSAgRFJNSUQocGh5c19l bmMtPnBhcmVudCksCisJCQkgIHBoeXNfZW5jLT5od19wcC0+aWR4IC0gUElOR1BPTkdfMCwgcmV0 LAorCQkJICBlbmFibGUgPyAidHJ1ZSIgOiAiZmFsc2UiLCByZWZjb3VudCk7CisJfQorCisJcmV0 dXJuIHJldDsKK30KKwordm9pZCBkcHVfZW5jb2Rlcl9waHlzX2NtZF9pcnFfY29udHJvbChzdHJ1 Y3QgZHB1X2VuY29kZXJfcGh5cyAqcGh5c19lbmMsCisJCWJvb2wgZW5hYmxlKQoreworCXN0cnVj dCBkcHVfZW5jb2Rlcl9waHlzX2NtZCAqY21kX2VuYzsKKworCWlmICghcGh5c19lbmMpCisJCXJl dHVybjsKKworCWNtZF9lbmMgPSB0b19kcHVfZW5jb2Rlcl9waHlzX2NtZChwaHlzX2VuYyk7CisK Kwl0cmFjZV9kcHVfZW5jX3BoeXNfY21kX2lycV9jdHJsKERSTUlEKHBoeXNfZW5jLT5wYXJlbnQp LAorCQkJcGh5c19lbmMtPmh3X3BwLT5pZHggLSBQSU5HUE9OR18wLAorCQkJZW5hYmxlLCBhdG9t aWNfcmVhZCgmcGh5c19lbmMtPnZibGFua19yZWZjb3VudCkpOworCisJaWYgKGVuYWJsZSkgewor CQlkcHVfZW5jb2Rlcl9oZWxwZXJfcmVnaXN0ZXJfaXJxKHBoeXNfZW5jLCBJTlRSX0lEWF9QSU5H UE9ORyk7CisJCWRwdV9lbmNvZGVyX2hlbHBlcl9yZWdpc3Rlcl9pcnEocGh5c19lbmMsIElOVFJf SURYX1VOREVSUlVOKTsKKwkJZHB1X2VuY29kZXJfcGh5c19jbWRfY29udHJvbF92YmxhbmtfaXJx KHBoeXNfZW5jLCB0cnVlKTsKKworCQlpZiAoZHB1X2VuY29kZXJfcGh5c19jbWRfaXNfbWFzdGVy KHBoeXNfZW5jKSkKKwkJCWRwdV9lbmNvZGVyX2hlbHBlcl9yZWdpc3Rlcl9pcnEocGh5c19lbmMs CisJCQkJCUlOVFJfSURYX0NUTF9TVEFSVCk7CisJfSBlbHNlIHsKKwkJaWYgKGRwdV9lbmNvZGVy X3BoeXNfY21kX2lzX21hc3RlcihwaHlzX2VuYykpCisJCQlkcHVfZW5jb2Rlcl9oZWxwZXJfdW5y ZWdpc3Rlcl9pcnEocGh5c19lbmMsCisJCQkJCUlOVFJfSURYX0NUTF9TVEFSVCk7CisKKwkJZHB1 X2VuY29kZXJfaGVscGVyX3VucmVnaXN0ZXJfaXJxKHBoeXNfZW5jLCBJTlRSX0lEWF9VTkRFUlJV Tik7CisJCWRwdV9lbmNvZGVyX3BoeXNfY21kX2NvbnRyb2xfdmJsYW5rX2lycShwaHlzX2VuYywg ZmFsc2UpOworCQlkcHVfZW5jb2Rlcl9oZWxwZXJfdW5yZWdpc3Rlcl9pcnEocGh5c19lbmMsIElO VFJfSURYX1BJTkdQT05HKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRwdV9lbmNvZGVyX3BoeXNf Y21kX3RlYXJjaGVja19jb25maWcoCisJCXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpwaHlzX2Vu YykKK3sKKwlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5c19jbWQgKmNtZF9lbmMgPQorCQl0b19kcHVf ZW5jb2Rlcl9waHlzX2NtZChwaHlzX2VuYyk7CisJc3RydWN0IGRwdV9od190ZWFyX2NoZWNrIHRj X2NmZyA9IHsgMCB9OworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlOworCWJvb2wgdGNf ZW5hYmxlID0gdHJ1ZTsKKwl1MzIgdnN5bmNfaHo7CisJc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAq cHJpdjsKKwlzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttczsKKworCWlmICghcGh5c19lbmMgfHwgIXBo eXNfZW5jLT5od19wcCkgeworCQlEUFVfRVJST1IoImludmFsaWQgZW5jb2RlclxuIik7CisJCXJl dHVybjsKKwl9CisJbW9kZSA9ICZwaHlzX2VuYy0+Y2FjaGVkX21vZGU7CisKKwlEUFVfREVCVUdf Q01ERU5DKGNtZF9lbmMsICJwcCAlZFxuIiwgcGh5c19lbmMtPmh3X3BwLT5pZHggLSBQSU5HUE9O R18wKTsKKworCWlmICghcGh5c19lbmMtPmh3X3BwLT5vcHMuc2V0dXBfdGVhcmNoZWNrIHx8CisJ CSFwaHlzX2VuYy0+aHdfcHAtPm9wcy5lbmFibGVfdGVhcmNoZWNrKSB7CisJCURQVV9ERUJVR19D TURFTkMoY21kX2VuYywgInRlYXJjaGVjayBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJcmV0dXJuOwor CX0KKworCWRwdV9rbXMgPSBwaHlzX2VuYy0+ZHB1X2ttczsKKwlpZiAoIWRwdV9rbXMgfHwgIWRw dV9rbXMtPmRldiB8fCAhZHB1X2ttcy0+ZGV2LT5kZXZfcHJpdmF0ZSkgeworCQlEUFVfRVJST1Io ImludmFsaWQgZGV2aWNlXG4iKTsKKwkJcmV0dXJuOworCX0KKwlwcml2ID0gZHB1X2ttcy0+ZGV2 LT5kZXZfcHJpdmF0ZTsKKworCS8qCisJICogVEUgZGVmYXVsdDogZHNpIGJ5dGUgY2xvY2sgY2Fs Y3VsYXRlZCBiYXNlIG9uIDcwIGZwczsKKwkgKiBhcm91bmQgMTQgbXMgdG8gY29tcGxldGUgYSBr aWNrb2ZmIGN5Y2xlIGlmIHRlIGRpc2FibGVkOworCSAqIHZjbGtfbGluZSBiYXNlIG9uIDYwIGZw czsgd3JpdGUgaXMgZmFzdGVyIHRoYW4gcmVhZDsKKwkgKiBpbml0ID09IHN0YXJ0ID09IHJkcHRy OworCSAqCisJICogdnN5bmNfY291bnQgaXMgcmF0aW8gb2YgTURQIFZTWU5DIGNsb2NrIGZyZXF1 ZW5jeSB0byBMQ0QgcGFuZWwKKwkgKiBmcmVxdWVuY3kgZGl2aWRlZCBieSB0aGUgbm8uIG9mIHJv d3MgKGxpbmVzKSBpbiB0aGUgTENEcGFuZWwuCisJICovCisJdnN5bmNfaHogPSBkcHVfa21zX2dl dF9jbGtfcmF0ZShkcHVfa21zLCAidnN5bmNfY2xrIik7CisJaWYgKHZzeW5jX2h6IDw9IDApIHsK KwkJRFBVX0RFQlVHX0NNREVOQyhjbWRfZW5jLCAiaW52YWxpZCAtIHZzeW5jX2h6ICV1XG4iLAor CQkJCSB2c3luY19oeik7CisJCXJldHVybjsKKwl9CisKKwl0Y19jZmcudnN5bmNfY291bnQgPSB2 c3luY19oeiAvIChtb2RlLT52dG90YWwgKiBtb2RlLT52cmVmcmVzaCk7CisKKwkvKiBlbmFibGUg ZXh0ZXJuYWwgVEUgYWZ0ZXIga2lja29mZiB0byBhdm9pZCBwcmVtYXR1cmUgYXV0b3JlZnJlc2gg Ki8KKwl0Y19jZmcuaHdfdnN5bmNfbW9kZSA9IDA7CisKKwkvKgorCSAqIEJ5IHNldHRpbmcgc3lu Y19jZmdfaGVpZ2h0IHRvIG5lYXIgbWF4IHJlZ2lzdGVyIHZhbHVlLCB3ZSBlc3NlbnRpYWxseQor CSAqIGRpc2FibGUgZHB1IGh3IGdlbmVyYXRlZCBURSBzaWduYWwsIHNpbmNlIGh3IFRFIHdpbGwg YXJyaXZlIGZpcnN0LgorCSAqIE9ubHkgY2F2ZWF0IGlzIGlmIGR1ZSB0byBlcnJvciwgd2UgaGl0 IHdyYXAtYXJvdW5kLgorCSAqLworCXRjX2NmZy5zeW5jX2NmZ19oZWlnaHQgPSAweEZGRjA7CisJ dGNfY2ZnLnZzeW5jX2luaXRfdmFsID0gbW9kZS0+dmRpc3BsYXk7CisJdGNfY2ZnLnN5bmNfdGhy ZXNob2xkX3N0YXJ0ID0gREVGQVVMVF9URUFSQ0hFQ0tfU1lOQ19USFJFU0hfU1RBUlQ7CisJdGNf Y2ZnLnN5bmNfdGhyZXNob2xkX2NvbnRpbnVlID0gREVGQVVMVF9URUFSQ0hFQ0tfU1lOQ19USFJF U0hfQ09OVElOVUU7CisJdGNfY2ZnLnN0YXJ0X3BvcyA9IG1vZGUtPnZkaXNwbGF5OworCXRjX2Nm Zy5yZF9wdHJfaXJxID0gbW9kZS0+dmRpc3BsYXkgKyAxOworCisJRFBVX0RFQlVHX0NNREVOQyhj bWRfZW5jLAorCQkidGMgJWQgdnN5bmNfY2xrX3NwZWVkX2h6ICV1IHZ0b3RhbCAldSB2cmVmcmVz aCAldVxuIiwKKwkJcGh5c19lbmMtPmh3X3BwLT5pZHggLSBQSU5HUE9OR18wLCB2c3luY19oeiwK KwkJbW9kZS0+dnRvdGFsLCBtb2RlLT52cmVmcmVzaCk7CisJRFBVX0RFQlVHX0NNREVOQyhjbWRf ZW5jLAorCQkidGMgJWQgZW5hYmxlICV1IHN0YXJ0X3BvcyAldSByZF9wdHJfaXJxICV1XG4iLAor CQlwaHlzX2VuYy0+aHdfcHAtPmlkeCAtIFBJTkdQT05HXzAsIHRjX2VuYWJsZSwgdGNfY2ZnLnN0 YXJ0X3BvcywKKwkJdGNfY2ZnLnJkX3B0cl9pcnEpOworCURQVV9ERUJVR19DTURFTkMoY21kX2Vu YywKKwkJInRjICVkIGh3X3ZzeW5jX21vZGUgJXUgdnN5bmNfY291bnQgJXUgdnN5bmNfaW5pdF92 YWwgJXVcbiIsCisJCXBoeXNfZW5jLT5od19wcC0+aWR4IC0gUElOR1BPTkdfMCwgdGNfY2ZnLmh3 X3ZzeW5jX21vZGUsCisJCXRjX2NmZy52c3luY19jb3VudCwgdGNfY2ZnLnZzeW5jX2luaXRfdmFs KTsKKwlEUFVfREVCVUdfQ01ERU5DKGNtZF9lbmMsCisJCSJ0YyAlZCBjZmdoZWlnaHQgJXUgdGhy ZXNoX3N0YXJ0ICV1IHRocmVzaF9jb250ICV1XG4iLAorCQlwaHlzX2VuYy0+aHdfcHAtPmlkeCAt IFBJTkdQT05HXzAsIHRjX2NmZy5zeW5jX2NmZ19oZWlnaHQsCisJCXRjX2NmZy5zeW5jX3RocmVz aG9sZF9zdGFydCwgdGNfY2ZnLnN5bmNfdGhyZXNob2xkX2NvbnRpbnVlKTsKKworCXBoeXNfZW5j LT5od19wcC0+b3BzLnNldHVwX3RlYXJjaGVjayhwaHlzX2VuYy0+aHdfcHAsICZ0Y19jZmcpOwor CXBoeXNfZW5jLT5od19wcC0+b3BzLmVuYWJsZV90ZWFyY2hlY2socGh5c19lbmMtPmh3X3BwLCB0 Y19lbmFibGUpOworfQorCitzdGF0aWMgdm9pZCBfZHB1X2VuY29kZXJfcGh5c19jbWRfcGluZ3Bv bmdfY29uZmlnKAorCQlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqcGh5c19lbmMpCit7CisJc3Ry dWN0IGRwdV9lbmNvZGVyX3BoeXNfY21kICpjbWRfZW5jID0KKwkJdG9fZHB1X2VuY29kZXJfcGh5 c19jbWQocGh5c19lbmMpOworCisJaWYgKCFwaHlzX2VuYyB8fCAhcGh5c19lbmMtPmh3X2N0bCB8 fCAhcGh5c19lbmMtPmh3X3BwCisJCQl8fCAhcGh5c19lbmMtPmh3X2N0bC0+b3BzLnNldHVwX2lu dGZfY2ZnKSB7CisJCURQVV9FUlJPUigiaW52YWxpZCBhcmcocyksIGVuYyAlZFxuIiwgcGh5c19l bmMgIT0gMCk7CisJCXJldHVybjsKKwl9CisKKwlEUFVfREVCVUdfQ01ERU5DKGNtZF9lbmMsICJw cCAlZCwgZW5hYmxpbmcgbW9kZTpcbiIsCisJCQlwaHlzX2VuYy0+aHdfcHAtPmlkeCAtIFBJTkdQ T05HXzApOworCWRybV9tb2RlX2RlYnVnX3ByaW50bW9kZWxpbmUoJnBoeXNfZW5jLT5jYWNoZWRf bW9kZSk7CisKKwlfZHB1X2VuY29kZXJfcGh5c19jbWRfdXBkYXRlX2ludGZfY2ZnKHBoeXNfZW5j KTsKKwlkcHVfZW5jb2Rlcl9waHlzX2NtZF90ZWFyY2hlY2tfY29uZmlnKHBoeXNfZW5jKTsKK30K Kworc3RhdGljIGJvb2wgZHB1X2VuY29kZXJfcGh5c19jbWRfbmVlZHNfc2luZ2xlX2ZsdXNoKAor CQlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqcGh5c19lbmMpCit7CisJLyoqCisJICogd2UgZG8g c2VwYXJhdGUgZmx1c2ggZm9yIGVhY2ggQ1RMIGFuZCBsZXQKKwkgKiBDVExfU1RBUlQgc3luY2hy b25pemUgdGhlbQorCSAqLworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgZHB1X2Vu Y29kZXJfcGh5c19jbWRfZW5hYmxlX2hlbHBlcigKKwkJc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMg KnBoeXNfZW5jKQoreworCXN0cnVjdCBkcHVfaHdfY3RsICpjdGw7CisJdTMyIGZsdXNoX21hc2sg PSAwOworCisJaWYgKCFwaHlzX2VuYyB8fCAhcGh5c19lbmMtPmh3X2N0bCB8fCAhcGh5c19lbmMt Pmh3X3BwKSB7CisJCURQVV9FUlJPUigiaW52YWxpZCBhcmcocyksIGVuY29kZXIgJWRcbiIsIHBo eXNfZW5jICE9IDApOworCQlyZXR1cm47CisJfQorCisJZHB1X2VuY29kZXJfaGVscGVyX3NwbGl0 X2NvbmZpZyhwaHlzX2VuYywgcGh5c19lbmMtPmludGZfaWR4KTsKKworCV9kcHVfZW5jb2Rlcl9w aHlzX2NtZF9waW5ncG9uZ19jb25maWcocGh5c19lbmMpOworCisJaWYgKCFkcHVfZW5jb2Rlcl9w aHlzX2NtZF9pc19tYXN0ZXIocGh5c19lbmMpKQorCQlnb3RvIHNraXBfZmx1c2g7CisKKwljdGwg PSBwaHlzX2VuYy0+aHdfY3RsOworCWN0bC0+b3BzLmdldF9iaXRtYXNrX2ludGYoY3RsLCAmZmx1 c2hfbWFzaywgcGh5c19lbmMtPmludGZfaWR4KTsKKwljdGwtPm9wcy51cGRhdGVfcGVuZGluZ19m bHVzaChjdGwsIGZsdXNoX21hc2spOworCitza2lwX2ZsdXNoOgorCXJldHVybjsKK30KKworc3Rh dGljIHZvaWQgZHB1X2VuY29kZXJfcGh5c19jbWRfZW5hYmxlKHN0cnVjdCBkcHVfZW5jb2Rlcl9w aHlzICpwaHlzX2VuYykKK3sKKwlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5c19jbWQgKmNtZF9lbmMg PQorCQl0b19kcHVfZW5jb2Rlcl9waHlzX2NtZChwaHlzX2VuYyk7CisKKwlpZiAoIXBoeXNfZW5j IHx8ICFwaHlzX2VuYy0+aHdfcHApIHsKKwkJRFBVX0VSUk9SKCJpbnZhbGlkIHBoeXMgZW5jb2Rl clxuIik7CisJCXJldHVybjsKKwl9CisKKwlEUFVfREVCVUdfQ01ERU5DKGNtZF9lbmMsICJwcCAl ZFxuIiwgcGh5c19lbmMtPmh3X3BwLT5pZHggLSBQSU5HUE9OR18wKTsKKworCWlmIChwaHlzX2Vu Yy0+ZW5hYmxlX3N0YXRlID09IERQVV9FTkNfRU5BQkxFRCkgeworCQlEUFVfRVJST1IoImFscmVh ZHkgZW5hYmxlZFxuIik7CisJCXJldHVybjsKKwl9CisKKwlkcHVfZW5jb2Rlcl9waHlzX2NtZF9l bmFibGVfaGVscGVyKHBoeXNfZW5jKTsKKwlwaHlzX2VuYy0+ZW5hYmxlX3N0YXRlID0gRFBVX0VO Q19FTkFCTEVEOworfQorCitzdGF0aWMgdm9pZCBfZHB1X2VuY29kZXJfcGh5c19jbWRfY29ubmVj dF90ZSgKKwkJc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKnBoeXNfZW5jLCBib29sIGVuYWJsZSkK K3sKKwlpZiAoIXBoeXNfZW5jIHx8ICFwaHlzX2VuYy0+aHdfcHAgfHwKKwkJCSFwaHlzX2VuYy0+ aHdfcHAtPm9wcy5jb25uZWN0X2V4dGVybmFsX3RlKQorCQlyZXR1cm47CisKKwl0cmFjZV9kcHVf ZW5jX3BoeXNfY21kX2Nvbm5lY3RfdGUoRFJNSUQocGh5c19lbmMtPnBhcmVudCksIGVuYWJsZSk7 CisJcGh5c19lbmMtPmh3X3BwLT5vcHMuY29ubmVjdF9leHRlcm5hbF90ZShwaHlzX2VuYy0+aHdf cHAsIGVuYWJsZSk7Cit9CisKK3N0YXRpYyB2b2lkIGRwdV9lbmNvZGVyX3BoeXNfY21kX3ByZXBh cmVfaWRsZV9wYygKKwkJc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKnBoeXNfZW5jKQoreworCV9k cHVfZW5jb2Rlcl9waHlzX2NtZF9jb25uZWN0X3RlKHBoeXNfZW5jLCBmYWxzZSk7Cit9CisKK3N0 YXRpYyBpbnQgZHB1X2VuY29kZXJfcGh5c19jbWRfZ2V0X2xpbmVfY291bnQoCisJCXN0cnVjdCBk cHVfZW5jb2Rlcl9waHlzICpwaHlzX2VuYykKK3sKKwlzdHJ1Y3QgZHB1X2h3X3Bpbmdwb25nICpo d19wcDsKKworCWlmICghcGh5c19lbmMgfHwgIXBoeXNfZW5jLT5od19wcCkKKwkJcmV0dXJuIC1F SU5WQUw7CisKKwlpZiAoIWRwdV9lbmNvZGVyX3BoeXNfY21kX2lzX21hc3RlcihwaHlzX2VuYykp CisJCXJldHVybiAtRUlOVkFMOworCisJaHdfcHAgPSBwaHlzX2VuYy0+aHdfcHA7CisJaWYgKCFo d19wcC0+b3BzLmdldF9saW5lX2NvdW50KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBo d19wcC0+b3BzLmdldF9saW5lX2NvdW50KGh3X3BwKTsKK30KKworc3RhdGljIHZvaWQgZHB1X2Vu Y29kZXJfcGh5c19jbWRfZGlzYWJsZShzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqcGh5c19lbmMp Cit7CisJc3RydWN0IGRwdV9lbmNvZGVyX3BoeXNfY21kICpjbWRfZW5jID0KKwkJdG9fZHB1X2Vu Y29kZXJfcGh5c19jbWQocGh5c19lbmMpOworCisJaWYgKCFwaHlzX2VuYyB8fCAhcGh5c19lbmMt Pmh3X3BwKSB7CisJCURQVV9FUlJPUigiaW52YWxpZCBlbmNvZGVyXG4iKTsKKwkJcmV0dXJuOwor CX0KKwlEUk1fREVCVUdfS01TKCJpZDoldSBwcDolZCBzdGF0ZTolZFxuIiwgRFJNSUQocGh5c19l bmMtPnBhcmVudCksCisJCSAgICAgIHBoeXNfZW5jLT5od19wcC0+aWR4IC0gUElOR1BPTkdfMCwK KwkJICAgICAgcGh5c19lbmMtPmVuYWJsZV9zdGF0ZSk7CisKKwlpZiAocGh5c19lbmMtPmVuYWJs ZV9zdGF0ZSA9PSBEUFVfRU5DX0RJU0FCTEVEKSB7CisJCURQVV9FUlJPUl9DTURFTkMoY21kX2Vu YywgImFscmVhZHkgZGlzYWJsZWRcbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKHBoeXNfZW5j LT5od19wcC0+b3BzLmVuYWJsZV90ZWFyY2hlY2spCisJCXBoeXNfZW5jLT5od19wcC0+b3BzLmVu YWJsZV90ZWFyY2hlY2socGh5c19lbmMtPmh3X3BwLCBmYWxzZSk7CisJcGh5c19lbmMtPmVuYWJs ZV9zdGF0ZSA9IERQVV9FTkNfRElTQUJMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIGRwdV9lbmNvZGVy X3BoeXNfY21kX2Rlc3Ryb3koc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKnBoeXNfZW5jKQorewor CXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzX2NtZCAqY21kX2VuYyA9CisJCXRvX2RwdV9lbmNvZGVy X3BoeXNfY21kKHBoeXNfZW5jKTsKKworCWlmICghcGh5c19lbmMpIHsKKwkJRFBVX0VSUk9SKCJp bnZhbGlkIGVuY29kZXJcbiIpOworCQlyZXR1cm47CisJfQorCWtmcmVlKGNtZF9lbmMpOworfQor CitzdGF0aWMgdm9pZCBkcHVfZW5jb2Rlcl9waHlzX2NtZF9nZXRfaHdfcmVzb3VyY2VzKAorCQlz dHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqcGh5c19lbmMsCisJCXN0cnVjdCBkcHVfZW5jb2Rlcl9o d19yZXNvdXJjZXMgKmh3X3JlcywKKwkJc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5f c3RhdGUpCit7CisJc3RydWN0IGRwdV9lbmNvZGVyX3BoeXNfY21kICpjbWRfZW5jID0KKwkJdG9f ZHB1X2VuY29kZXJfcGh5c19jbWQocGh5c19lbmMpOworCisJaWYgKCFwaHlzX2VuYykgeworCQlE UFVfRVJST1IoImludmFsaWQgZW5jb2RlclxuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoKHBo eXNfZW5jLT5pbnRmX2lkeCAtIElOVEZfMCkgPj0gSU5URl9NQVgpIHsKKwkJRFBVX0VSUk9SKCJp bnZhbGlkIGludGYgaWR4OiVkXG4iLCBwaHlzX2VuYy0+aW50Zl9pZHgpOworCQlyZXR1cm47CisJ fQorCisJRFBVX0RFQlVHX0NNREVOQyhjbWRfZW5jLCAiXG4iKTsKKwlod19yZXMtPmludGZzW3Bo eXNfZW5jLT5pbnRmX2lkeCAtIElOVEZfMF0gPSBJTlRGX01PREVfQ01EOworfQorCitzdGF0aWMg dm9pZCBkcHVfZW5jb2Rlcl9waHlzX2NtZF9wcmVwYXJlX2Zvcl9raWNrb2ZmKAorCQlzdHJ1Y3Qg ZHB1X2VuY29kZXJfcGh5cyAqcGh5c19lbmMsCisJCXN0cnVjdCBkcHVfZW5jb2Rlcl9raWNrb2Zm X3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzX2NtZCAqY21kX2Vu YyA9CisJCQl0b19kcHVfZW5jb2Rlcl9waHlzX2NtZChwaHlzX2VuYyk7CisJaW50IHJldDsKKwor CWlmICghcGh5c19lbmMgfHwgIXBoeXNfZW5jLT5od19wcCkgeworCQlEUFVfRVJST1IoImludmFs aWQgZW5jb2RlclxuIik7CisJCXJldHVybjsKKwl9CisJRFJNX0RFQlVHX0tNUygiaWQ6JXUgcHA6 JWQgcGVuZGluZ19jbnQ6JWRcbiIsIERSTUlEKHBoeXNfZW5jLT5wYXJlbnQpLAorCQkgICAgICBw aHlzX2VuYy0+aHdfcHAtPmlkeCAtIFBJTkdQT05HXzAsCisJCSAgICAgIGF0b21pY19yZWFkKCZw aHlzX2VuYy0+cGVuZGluZ19raWNrb2ZmX2NudCkpOworCisJLyoKKwkgKiBNYXJrIGtpY2tvZmYg cmVxdWVzdCBhcyBvdXRzdGFuZGluZy4gSWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUsCisJICog b3V0c3RhbmRpbmcsIHRoZW4gd2UgaGF2ZSB0byB3YWl0IGZvciB0aGUgcHJldmlvdXMgb25lIHRv IGNvbXBsZXRlCisJICovCisJcmV0ID0gX2RwdV9lbmNvZGVyX3BoeXNfY21kX3dhaXRfZm9yX2lk bGUocGh5c19lbmMpOworCWlmIChyZXQpIHsKKwkJLyogZm9yY2UgcGVuZGluZ19raWNrb2ZmX2Nu dCAwIHRvIGRpc2NhcmQgZmFpbGVkIGtpY2tvZmYgKi8KKwkJYXRvbWljX3NldCgmcGh5c19lbmMt PnBlbmRpbmdfa2lja29mZl9jbnQsIDApOworCQlEUk1fRVJST1IoImZhaWxlZCB3YWl0X2Zvcl9p ZGxlOiBpZDoldSByZXQ6JWQgcHA6JWRcbiIsCisJCQkgIERSTUlEKHBoeXNfZW5jLT5wYXJlbnQp LCByZXQsCisJCQkgIHBoeXNfZW5jLT5od19wcC0+aWR4IC0gUElOR1BPTkdfMCk7CisJfQorCisJ RFBVX0RFQlVHX0NNREVOQyhjbWRfZW5jLCAicHA6JWQgcGVuZGluZ19jbnQgJWRcbiIsCisJCQlw aHlzX2VuYy0+aHdfcHAtPmlkeCAtIFBJTkdQT05HXzAsCisJCQlhdG9taWNfcmVhZCgmcGh5c19l bmMtPnBlbmRpbmdfa2lja29mZl9jbnQpKTsKK30KKworc3RhdGljIGludCBfZHB1X2VuY29kZXJf cGh5c19jbWRfd2FpdF9mb3JfY3RsX3N0YXJ0KAorCQlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAq cGh5c19lbmMpCit7CisJc3RydWN0IGRwdV9lbmNvZGVyX3BoeXNfY21kICpjbWRfZW5jID0KKwkJ CXRvX2RwdV9lbmNvZGVyX3BoeXNfY21kKHBoeXNfZW5jKTsKKwlzdHJ1Y3QgZHB1X2VuY29kZXJf d2FpdF9pbmZvIHdhaXRfaW5mbzsKKwlpbnQgcmV0OworCisJaWYgKCFwaHlzX2VuYyB8fCAhcGh5 c19lbmMtPmh3X2N0bCkgeworCQlEUFVfRVJST1IoImludmFsaWQgYXJndW1lbnQocylcbiIpOwor CQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl3YWl0X2luZm8ud3EgPSAmcGh5c19lbmMtPnBlbmRp bmdfa2lja29mZl93cTsKKwl3YWl0X2luZm8uYXRvbWljX2NudCA9ICZwaHlzX2VuYy0+cGVuZGlu Z19jdGxzdGFydF9jbnQ7CisJd2FpdF9pbmZvLnRpbWVvdXRfbXMgPSBLSUNLT0ZGX1RJTUVPVVRf TVM7CisKKwlyZXQgPSBkcHVfZW5jb2Rlcl9oZWxwZXJfd2FpdF9mb3JfaXJxKHBoeXNfZW5jLCBJ TlRSX0lEWF9DVExfU1RBUlQsCisJCQkmd2FpdF9pbmZvKTsKKwlpZiAocmV0ID09IC1FVElNRURP VVQpIHsKKwkJRFBVX0VSUk9SX0NNREVOQyhjbWRfZW5jLCAiY3RsIHN0YXJ0IGludGVycnVwdCB3 YWl0IGZhaWxlZFxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJfSBlbHNlIGlmICghcmV0KQorCQly ZXQgPSAwOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkcHVfZW5jb2Rlcl9waHlz X2NtZF93YWl0X2Zvcl90eF9jb21wbGV0ZSgKKwkJc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKnBo eXNfZW5jKQoreworCWludCByYzsKKwlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5c19jbWQgKmNtZF9l bmM7CisKKwlpZiAoIXBoeXNfZW5jKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNtZF9lbmMgPSB0 b19kcHVfZW5jb2Rlcl9waHlzX2NtZChwaHlzX2VuYyk7CisKKwlyYyA9IF9kcHVfZW5jb2Rlcl9w aHlzX2NtZF93YWl0X2Zvcl9pZGxlKHBoeXNfZW5jKTsKKwlpZiAocmMpIHsKKwkJRFJNX0VSUk9S KCJmYWlsZWQgd2FpdF9mb3JfaWRsZTogaWQ6JXUgcmV0OiVkIGludGY6JWRcbiIsCisJCQkgIERS TUlEKHBoeXNfZW5jLT5wYXJlbnQpLCByYywKKwkJCSAgcGh5c19lbmMtPmludGZfaWR4IC0gSU5U Rl8wKTsKKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgZHB1X2VuY29kZXJfcGh5 c19jbWRfd2FpdF9mb3JfY29tbWl0X2RvbmUoCisJCXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpw aHlzX2VuYykKK3sKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzX2NtZCAq Y21kX2VuYzsKKworCWlmICghcGh5c19lbmMpCisJCXJldHVybiAtRUlOVkFMOworCisJY21kX2Vu YyA9IHRvX2RwdV9lbmNvZGVyX3BoeXNfY21kKHBoeXNfZW5jKTsKKworCS8qIG9ubHkgcmVxdWly ZWQgZm9yIG1hc3RlciBjb250cm9sbGVyICovCisJaWYgKGRwdV9lbmNvZGVyX3BoeXNfY21kX2lz X21hc3RlcihwaHlzX2VuYykpCisJCXJjID0gX2RwdV9lbmNvZGVyX3BoeXNfY21kX3dhaXRfZm9y X2N0bF9zdGFydChwaHlzX2VuYyk7CisKKwkvKiByZXF1aXJlZCBmb3IgYm90aCBjb250cm9sbGVy cyAqLworCWlmICghcmMgJiYgY21kX2VuYy0+c2VyaWFsaXplX3dhaXQ0cHApCisJCWRwdV9lbmNv ZGVyX3BoeXNfY21kX3ByZXBhcmVfZm9yX2tpY2tvZmYocGh5c19lbmMsIE5VTEwpOworCisJcmV0 dXJuIHJjOworfQorCitzdGF0aWMgaW50IGRwdV9lbmNvZGVyX3BoeXNfY21kX3dhaXRfZm9yX3Zi bGFuaygKKwkJc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKnBoeXNfZW5jKQoreworCWludCByYyA9 IDA7CisJc3RydWN0IGRwdV9lbmNvZGVyX3BoeXNfY21kICpjbWRfZW5jOworCXN0cnVjdCBkcHVf ZW5jb2Rlcl93YWl0X2luZm8gd2FpdF9pbmZvOworCisJaWYgKCFwaHlzX2VuYykKKwkJcmV0dXJu IC1FSU5WQUw7CisKKwljbWRfZW5jID0gdG9fZHB1X2VuY29kZXJfcGh5c19jbWQocGh5c19lbmMp OworCisJLyogb25seSByZXF1aXJlZCBmb3IgbWFzdGVyIGNvbnRyb2xsZXIgKi8KKwlpZiAoIWRw dV9lbmNvZGVyX3BoeXNfY21kX2lzX21hc3RlcihwaHlzX2VuYykpCisJCXJldHVybiByYzsKKwor CXdhaXRfaW5mby53cSA9ICZjbWRfZW5jLT5wZW5kaW5nX3ZibGFua193cTsKKwl3YWl0X2luZm8u YXRvbWljX2NudCA9ICZjbWRfZW5jLT5wZW5kaW5nX3ZibGFua19jbnQ7CisJd2FpdF9pbmZvLnRp bWVvdXRfbXMgPSBfZHB1X2VuY29kZXJfcGh5c19jbWRfZ2V0X2lkbGVfdGltZW91dChjbWRfZW5j KTsKKworCWF0b21pY19pbmMoJmNtZF9lbmMtPnBlbmRpbmdfdmJsYW5rX2NudCk7CisKKwlyYyA9 IGRwdV9lbmNvZGVyX2hlbHBlcl93YWl0X2Zvcl9pcnEocGh5c19lbmMsIElOVFJfSURYX1JEUFRS LAorCQkJJndhaXRfaW5mbyk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIGRwdV9l bmNvZGVyX3BoeXNfY21kX2hhbmRsZV9wb3N0X2tpY2tvZmYoCisJCXN0cnVjdCBkcHVfZW5jb2Rl cl9waHlzICpwaHlzX2VuYykKK3sKKwlpZiAoIXBoeXNfZW5jKQorCQlyZXR1cm47CisKKwkvKioK KwkgKiByZS1lbmFibGUgZXh0ZXJuYWwgVEUsIGVpdGhlciBmb3IgdGhlIGZpcnN0IHRpbWUgYWZ0 ZXIgZW5hYmxpbmcKKwkgKiBvciBpZiBkaXNhYmxlZCBmb3IgQXV0b3JlZnJlc2gKKwkgKi8KKwlf ZHB1X2VuY29kZXJfcGh5c19jbWRfY29ubmVjdF90ZShwaHlzX2VuYywgdHJ1ZSk7Cit9CisKK3N0 YXRpYyB2b2lkIGRwdV9lbmNvZGVyX3BoeXNfY21kX3RyaWdnZXJfc3RhcnQoCisJCXN0cnVjdCBk cHVfZW5jb2Rlcl9waHlzICpwaHlzX2VuYykKK3sKKwlpZiAoIXBoeXNfZW5jKQorCQlyZXR1cm47 CisKKwlkcHVfZW5jb2Rlcl9oZWxwZXJfdHJpZ2dlcl9zdGFydChwaHlzX2VuYyk7Cit9CisKK3N0 YXRpYyB2b2lkIGRwdV9lbmNvZGVyX3BoeXNfY21kX2luaXRfb3BzKAorCQlzdHJ1Y3QgZHB1X2Vu Y29kZXJfcGh5c19vcHMgKm9wcykKK3sKKwlvcHMtPmlzX21hc3RlciA9IGRwdV9lbmNvZGVyX3Bo eXNfY21kX2lzX21hc3RlcjsKKwlvcHMtPm1vZGVfc2V0ID0gZHB1X2VuY29kZXJfcGh5c19jbWRf bW9kZV9zZXQ7CisJb3BzLT5tb2RlX2ZpeHVwID0gZHB1X2VuY29kZXJfcGh5c19jbWRfbW9kZV9m aXh1cDsKKwlvcHMtPmVuYWJsZSA9IGRwdV9lbmNvZGVyX3BoeXNfY21kX2VuYWJsZTsKKwlvcHMt PmRpc2FibGUgPSBkcHVfZW5jb2Rlcl9waHlzX2NtZF9kaXNhYmxlOworCW9wcy0+ZGVzdHJveSA9 IGRwdV9lbmNvZGVyX3BoeXNfY21kX2Rlc3Ryb3k7CisJb3BzLT5nZXRfaHdfcmVzb3VyY2VzID0g ZHB1X2VuY29kZXJfcGh5c19jbWRfZ2V0X2h3X3Jlc291cmNlczsKKwlvcHMtPmNvbnRyb2xfdmJs YW5rX2lycSA9IGRwdV9lbmNvZGVyX3BoeXNfY21kX2NvbnRyb2xfdmJsYW5rX2lycTsKKwlvcHMt PndhaXRfZm9yX2NvbW1pdF9kb25lID0gZHB1X2VuY29kZXJfcGh5c19jbWRfd2FpdF9mb3JfY29t bWl0X2RvbmU7CisJb3BzLT5wcmVwYXJlX2Zvcl9raWNrb2ZmID0gZHB1X2VuY29kZXJfcGh5c19j bWRfcHJlcGFyZV9mb3Jfa2lja29mZjsKKwlvcHMtPndhaXRfZm9yX3R4X2NvbXBsZXRlID0gZHB1 X2VuY29kZXJfcGh5c19jbWRfd2FpdF9mb3JfdHhfY29tcGxldGU7CisJb3BzLT53YWl0X2Zvcl92 YmxhbmsgPSBkcHVfZW5jb2Rlcl9waHlzX2NtZF93YWl0X2Zvcl92Ymxhbms7CisJb3BzLT50cmln Z2VyX3N0YXJ0ID0gZHB1X2VuY29kZXJfcGh5c19jbWRfdHJpZ2dlcl9zdGFydDsKKwlvcHMtPm5l ZWRzX3NpbmdsZV9mbHVzaCA9IGRwdV9lbmNvZGVyX3BoeXNfY21kX25lZWRzX3NpbmdsZV9mbHVz aDsKKwlvcHMtPmh3X3Jlc2V0ID0gZHB1X2VuY29kZXJfaGVscGVyX2h3X3Jlc2V0OworCW9wcy0+ aXJxX2NvbnRyb2wgPSBkcHVfZW5jb2Rlcl9waHlzX2NtZF9pcnFfY29udHJvbDsKKwlvcHMtPnJl c3RvcmUgPSBkcHVfZW5jb2Rlcl9waHlzX2NtZF9lbmFibGVfaGVscGVyOworCW9wcy0+cHJlcGFy ZV9pZGxlX3BjID0gZHB1X2VuY29kZXJfcGh5c19jbWRfcHJlcGFyZV9pZGxlX3BjOworCW9wcy0+ aGFuZGxlX3Bvc3Rfa2lja29mZiA9IGRwdV9lbmNvZGVyX3BoeXNfY21kX2hhbmRsZV9wb3N0X2tp Y2tvZmY7CisJb3BzLT5nZXRfbGluZV9jb3VudCA9IGRwdV9lbmNvZGVyX3BoeXNfY21kX2dldF9s aW5lX2NvdW50OworfQorCitzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqZHB1X2VuY29kZXJfcGh5 c19jbWRfaW5pdCgKKwkJc3RydWN0IGRwdV9lbmNfcGh5c19pbml0X3BhcmFtcyAqcCkKK3sKKwlz dHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqcGh5c19lbmMgPSBOVUxMOworCXN0cnVjdCBkcHVfZW5j b2Rlcl9waHlzX2NtZCAqY21kX2VuYyA9IE5VTEw7CisJc3RydWN0IGRwdV9od19tZHAgKmh3X21k cDsKKwlzdHJ1Y3QgZHB1X2VuY29kZXJfaXJxICppcnE7CisJaW50IGksIHJldCA9IDA7CisKKwlE UFVfREVCVUcoImludGYgJWRcbiIsIHAtPmludGZfaWR4IC0gSU5URl8wKTsKKworCWNtZF9lbmMg PSBremFsbG9jKHNpemVvZigqY21kX2VuYyksIEdGUF9LRVJORUwpOworCWlmICghY21kX2VuYykg eworCQlyZXQgPSAtRU5PTUVNOworCQlEUFVfRVJST1IoImZhaWxlZCB0byBhbGxvY2F0ZVxuIik7 CisJCWdvdG8gZmFpbDsKKwl9CisJcGh5c19lbmMgPSAmY21kX2VuYy0+YmFzZTsKKworCWh3X21k cCA9IGRwdV9ybV9nZXRfbWRwKCZwLT5kcHVfa21zLT5ybSk7CisJaWYgKElTX0VSUl9PUl9OVUxM KGh3X21kcCkpIHsKKwkJcmV0ID0gUFRSX0VSUihod19tZHApOworCQlEUFVfRVJST1IoImZhaWxl ZCB0byBnZXQgbWRwdG9wXG4iKTsKKwkJZ290byBmYWlsX21kcF9pbml0OworCX0KKwlwaHlzX2Vu Yy0+aHdfbWRwdG9wID0gaHdfbWRwOworCXBoeXNfZW5jLT5pbnRmX2lkeCA9IHAtPmludGZfaWR4 OworCisJZHB1X2VuY29kZXJfcGh5c19jbWRfaW5pdF9vcHMoJnBoeXNfZW5jLT5vcHMpOworCXBo eXNfZW5jLT5wYXJlbnQgPSBwLT5wYXJlbnQ7CisJcGh5c19lbmMtPnBhcmVudF9vcHMgPSBwLT5w YXJlbnRfb3BzOworCXBoeXNfZW5jLT5kcHVfa21zID0gcC0+ZHB1X2ttczsKKwlwaHlzX2VuYy0+ c3BsaXRfcm9sZSA9IHAtPnNwbGl0X3JvbGU7CisJcGh5c19lbmMtPmludGZfbW9kZSA9IElOVEZf TU9ERV9DTUQ7CisJcGh5c19lbmMtPmVuY19zcGlubG9jayA9IHAtPmVuY19zcGlubG9jazsKKwlj bWRfZW5jLT5zdHJlYW1fc2VsID0gMDsKKwlwaHlzX2VuYy0+ZW5hYmxlX3N0YXRlID0gRFBVX0VO Q19ESVNBQkxFRDsKKwlmb3IgKGkgPSAwOyBpIDwgSU5UUl9JRFhfTUFYOyBpKyspIHsKKwkJaXJx ID0gJnBoeXNfZW5jLT5pcnFbaV07CisJCUlOSVRfTElTVF9IRUFEKCZpcnEtPmNiLmxpc3QpOwor CQlpcnEtPmlycV9pZHggPSAtRUlOVkFMOworCQlpcnEtPmh3X2lkeCA9IC1FSU5WQUw7CisJCWly cS0+Y2IuYXJnID0gcGh5c19lbmM7CisJfQorCisJaXJxID0gJnBoeXNfZW5jLT5pcnFbSU5UUl9J RFhfQ1RMX1NUQVJUXTsKKwlpcnEtPm5hbWUgPSAiY3RsX3N0YXJ0IjsKKwlpcnEtPmludHJfdHlw ZSA9IERQVV9JUlFfVFlQRV9DVExfU1RBUlQ7CisJaXJxLT5pbnRyX2lkeCA9IElOVFJfSURYX0NU TF9TVEFSVDsKKwlpcnEtPmNiLmZ1bmMgPSBkcHVfZW5jb2Rlcl9waHlzX2NtZF9jdGxfc3RhcnRf aXJxOworCisJaXJxID0gJnBoeXNfZW5jLT5pcnFbSU5UUl9JRFhfUElOR1BPTkddOworCWlycS0+ bmFtZSA9ICJwcF9kb25lIjsKKwlpcnEtPmludHJfdHlwZSA9IERQVV9JUlFfVFlQRV9QSU5HX1BP TkdfQ09NUDsKKwlpcnEtPmludHJfaWR4ID0gSU5UUl9JRFhfUElOR1BPTkc7CisJaXJxLT5jYi5m dW5jID0gZHB1X2VuY29kZXJfcGh5c19jbWRfcHBfdHhfZG9uZV9pcnE7CisKKwlpcnEgPSAmcGh5 c19lbmMtPmlycVtJTlRSX0lEWF9SRFBUUl07CisJaXJxLT5uYW1lID0gInBwX3JkX3B0ciI7CisJ aXJxLT5pbnRyX3R5cGUgPSBEUFVfSVJRX1RZUEVfUElOR19QT05HX1JEX1BUUjsKKwlpcnEtPmlu dHJfaWR4ID0gSU5UUl9JRFhfUkRQVFI7CisJaXJxLT5jYi5mdW5jID0gZHB1X2VuY29kZXJfcGh5 c19jbWRfcHBfcmRfcHRyX2lycTsKKworCWlycSA9ICZwaHlzX2VuYy0+aXJxW0lOVFJfSURYX1VO REVSUlVOXTsKKwlpcnEtPm5hbWUgPSAidW5kZXJydW4iOworCWlycS0+aW50cl90eXBlID0gRFBV X0lSUV9UWVBFX0lOVEZfVU5ERVJfUlVOOworCWlycS0+aW50cl9pZHggPSBJTlRSX0lEWF9VTkRF UlJVTjsKKwlpcnEtPmNiLmZ1bmMgPSBkcHVfZW5jb2Rlcl9waHlzX2NtZF91bmRlcnJ1bl9pcnE7 CisKKwlhdG9taWNfc2V0KCZwaHlzX2VuYy0+dmJsYW5rX3JlZmNvdW50LCAwKTsKKwlhdG9taWNf c2V0KCZwaHlzX2VuYy0+cGVuZGluZ19raWNrb2ZmX2NudCwgMCk7CisJYXRvbWljX3NldCgmcGh5 c19lbmMtPnBlbmRpbmdfY3Rsc3RhcnRfY250LCAwKTsKKwlhdG9taWNfc2V0KCZjbWRfZW5jLT5w ZW5kaW5nX3ZibGFua19jbnQsIDApOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnBoeXNfZW5jLT5w ZW5kaW5nX2tpY2tvZmZfd3EpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNtZF9lbmMtPnBlbmRp bmdfdmJsYW5rX3dxKTsKKworCURQVV9ERUJVR19DTURFTkMoY21kX2VuYywgImNyZWF0ZWRcbiIp OworCisJcmV0dXJuIHBoeXNfZW5jOworCitmYWlsX21kcF9pbml0OgorCWtmcmVlKGNtZF9lbmMp OworZmFpbDoKKwlyZXR1cm4gRVJSX1BUUihyZXQpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXJfcGh5c192aWQuYyBiL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyX3BoeXNfdmlkLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4xMTBjNDYzMDc3ZWQKLS0tIC9kZXYvbnVsbAorKysg Yi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlcl9waHlzX3ZpZC5jCkBA IC0wLDAgKzEsOTIyIEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxOCwgVGhlIExpbnV4IEZv dW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lv biAyIGFuZAorICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjZGVmaW5l IHByX2ZtdChmbXQpCSJbZHJtOiVzOiVkXSAiIGZtdCwgX19mdW5jX18sIF9fTElORV9fCisjaW5j bHVkZSAiZHB1X2VuY29kZXJfcGh5cy5oIgorI2luY2x1ZGUgImRwdV9od19pbnRlcnJ1cHRzLmgi CisjaW5jbHVkZSAiZHB1X2NvcmVfaXJxLmgiCisjaW5jbHVkZSAiZHB1X2Zvcm1hdHMuaCIKKyNp bmNsdWRlICJkcHVfdHJhY2UuaCIKKworI2RlZmluZSBEUFVfREVCVUdfVklERU5DKGUsIGZtdCwg Li4uKSBEUFVfREVCVUcoImVuYyVkIGludGYlZCAiIGZtdCwgXAorCQkoZSkgJiYgKGUpLT5iYXNl LnBhcmVudCA/IFwKKwkJKGUpLT5iYXNlLnBhcmVudC0+YmFzZS5pZCA6IC0xLCBcCisJCShlKSAm JiAoZSktPmh3X2ludGYgPyBcCisJCShlKS0+aHdfaW50Zi0+aWR4IC0gSU5URl8wIDogLTEsICMj X19WQV9BUkdTX18pCisKKyNkZWZpbmUgRFBVX0VSUk9SX1ZJREVOQyhlLCBmbXQsIC4uLikgRFBV X0VSUk9SKCJlbmMlZCBpbnRmJWQgIiBmbXQsIFwKKwkJKGUpICYmIChlKS0+YmFzZS5wYXJlbnQg PyBcCisJCShlKS0+YmFzZS5wYXJlbnQtPmJhc2UuaWQgOiAtMSwgXAorCQkoZSkgJiYgKGUpLT5o d19pbnRmID8gXAorCQkoZSktPmh3X2ludGYtPmlkeCAtIElOVEZfMCA6IC0xLCAjI19fVkFfQVJH U19fKQorCisjZGVmaW5lIHRvX2RwdV9lbmNvZGVyX3BoeXNfdmlkKHgpIFwKKwljb250YWluZXJf b2YoeCwgc3RydWN0IGRwdV9lbmNvZGVyX3BoeXNfdmlkLCBiYXNlKQorCitzdGF0aWMgYm9vbCBk cHVfZW5jb2Rlcl9waHlzX3ZpZF9pc19tYXN0ZXIoCisJCXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlz ICpwaHlzX2VuYykKK3sKKwlib29sIHJldCA9IGZhbHNlOworCisJaWYgKHBoeXNfZW5jLT5zcGxp dF9yb2xlICE9IEVOQ19ST0xFX1NMQVZFKQorCQlyZXQgPSB0cnVlOworCisJcmV0dXJuIHJldDsK K30KKworc3RhdGljIHZvaWQgZHJtX21vZGVfdG9faW50Zl90aW1pbmdfcGFyYW1zKAorCQljb25z dCBzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5c192aWQgKnZpZF9lbmMsCisJCWNvbnN0IHN0cnVjdCBk cm1fZGlzcGxheV9tb2RlICptb2RlLAorCQlzdHJ1Y3QgaW50Zl90aW1pbmdfcGFyYW1zICp0aW1p bmcpCit7CisJbWVtc2V0KHRpbWluZywgMCwgc2l6ZW9mKCp0aW1pbmcpKTsKKworCWlmICgobW9k ZS0+aHRvdGFsIDwgbW9kZS0+aHN5bmNfZW5kKQorCQkJfHwgKG1vZGUtPmhzeW5jX3N0YXJ0IDwg bW9kZS0+aGRpc3BsYXkpCisJCQl8fCAobW9kZS0+dnRvdGFsIDwgbW9kZS0+dnN5bmNfZW5kKQor CQkJfHwgKG1vZGUtPnZzeW5jX3N0YXJ0IDwgbW9kZS0+dmRpc3BsYXkpCisJCQl8fCAobW9kZS0+ aHN5bmNfZW5kIDwgbW9kZS0+aHN5bmNfc3RhcnQpCisJCQl8fCAobW9kZS0+dnN5bmNfZW5kIDwg bW9kZS0+dnN5bmNfc3RhcnQpKSB7CisJCURQVV9FUlJPUigKKwkJICAgICJpbnZhbGlkIHBhcmFt cyAtIGhzdGFydDolZCxoZW5kOiVkLGh0b3Q6JWQsaGRpc3BsYXk6JWRcbiIsCisJCQkJbW9kZS0+ aHN5bmNfc3RhcnQsIG1vZGUtPmhzeW5jX2VuZCwKKwkJCQltb2RlLT5odG90YWwsIG1vZGUtPmhk aXNwbGF5KTsKKwkJRFBVX0VSUk9SKCJ2c3RhcnQ6JWQsdmVuZDolZCx2dG90OiVkLHZkaXNwbGF5 OiVkXG4iLAorCQkJCW1vZGUtPnZzeW5jX3N0YXJ0LCBtb2RlLT52c3luY19lbmQsCisJCQkJbW9k ZS0+dnRvdGFsLCBtb2RlLT52ZGlzcGxheSk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIGh0 dHBzOi8vd3d3Lmtlcm5lbC5vcmcvZG9jL2h0bWxkb2NzL2RybS9jaDAyczA1Lmh0bWwKKwkgKiAg QWN0aXZlIFJlZ2lvbiAgICAgIEZyb250IFBvcmNoICAgU3luYyAgIEJhY2sgUG9yY2gKKwkgKiA8 LS0tLS0tLS0tLS0tLS0tLS0+PC0tLS0tLS0tLS0tLT48LS0tLS0+PC0tLS0tLS0tLS0tPgorCSAq IDwtIFtodl1kaXNwbGF5IC0tLT4KKwkgKiA8LS0tLS0tLS0tIFtodl1zeW5jX3N0YXJ0IC0tLS0t LT4KKwkgKiA8LS0tLS0tLS0tLS0tLS0tLS0gW2h2XXN5bmNfZW5kIC0tLS0tLS0+CisJICogPC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gW2h2XXRvdGFsIC0tLS0tLS0tLS0tLS0+CisJICov CisJdGltaW5nLT53aWR0aCA9IG1vZGUtPmhkaXNwbGF5OwkvKiBhY3RpdmUgd2lkdGggKi8KKwl0 aW1pbmctPmhlaWdodCA9IG1vZGUtPnZkaXNwbGF5OwkvKiBhY3RpdmUgaGVpZ2h0ICovCisJdGlt aW5nLT54cmVzID0gdGltaW5nLT53aWR0aDsKKwl0aW1pbmctPnlyZXMgPSB0aW1pbmctPmhlaWdo dDsKKwl0aW1pbmctPmhfYmFja19wb3JjaCA9IG1vZGUtPmh0b3RhbCAtIG1vZGUtPmhzeW5jX2Vu ZDsKKwl0aW1pbmctPmhfZnJvbnRfcG9yY2ggPSBtb2RlLT5oc3luY19zdGFydCAtIG1vZGUtPmhk aXNwbGF5OworCXRpbWluZy0+dl9iYWNrX3BvcmNoID0gbW9kZS0+dnRvdGFsIC0gbW9kZS0+dnN5 bmNfZW5kOworCXRpbWluZy0+dl9mcm9udF9wb3JjaCA9IG1vZGUtPnZzeW5jX3N0YXJ0IC0gbW9k ZS0+dmRpc3BsYXk7CisJdGltaW5nLT5oc3luY19wdWxzZV93aWR0aCA9IG1vZGUtPmhzeW5jX2Vu ZCAtIG1vZGUtPmhzeW5jX3N0YXJ0OworCXRpbWluZy0+dnN5bmNfcHVsc2Vfd2lkdGggPSBtb2Rl LT52c3luY19lbmQgLSBtb2RlLT52c3luY19zdGFydDsKKwl0aW1pbmctPmhzeW5jX3BvbGFyaXR5 ID0gKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19OSFNZTkMpID8gMSA6IDA7CisJdGltaW5n LT52c3luY19wb2xhcml0eSA9IChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfTlZTWU5DKSA/ IDEgOiAwOworCXRpbWluZy0+Ym9yZGVyX2NsciA9IDA7CisJdGltaW5nLT51bmRlcmZsb3dfY2xy ID0gMHhmZjsKKwl0aW1pbmctPmhzeW5jX3NrZXcgPSBtb2RlLT5oc2tldzsKKworCS8qIERTSSBj b250cm9sbGVyIGNhbm5vdCBoYW5kbGUgYWN0aXZlLWxvdyBzeW5jIHNpZ25hbHMuICovCisJaWYg KHZpZF9lbmMtPmh3X2ludGYtPmNhcC0+dHlwZSA9PSBJTlRGX0RTSSkgeworCQl0aW1pbmctPmhz eW5jX3BvbGFyaXR5ID0gMDsKKwkJdGltaW5nLT52c3luY19wb2xhcml0eSA9IDA7CisJfQorCisJ LyoKKwkgKiBGb3IgZWRwIG9ubHk6CisJICogRElTUExBWV9WX1NUQVJUID0gKFZCUCAqIEhDWUNM RSkgKyBIQlAKKwkgKiBESVNQTEFZX1ZfRU5EID0gKFZCUCArIFZBQ1RJVkUpICogSENZQ0xFIC0g MSAtIEhGUAorCSAqLworCS8qCisJICogaWYgKHZpZF9lbmMtPmh3LT5jYXAtPnR5cGUgPT0gSU5U Rl9FRFApIHsKKwkgKiBkaXNwbGF5X3Zfc3RhcnQgKz0gbW9kZS0+aHRvdGFsIC0gbW9kZS0+aHN5 bmNfc3RhcnQ7CisJICogZGlzcGxheV92X2VuZCAtPSBtb2RlLT5oc3luY19zdGFydCAtIG1vZGUt PmhkaXNwbGF5OworCSAqIH0KKwkgKi8KK30KKworc3RhdGljIGlubGluZSB1MzIgZ2V0X2hvcml6 b250YWxfdG90YWwoY29uc3Qgc3RydWN0IGludGZfdGltaW5nX3BhcmFtcyAqdGltaW5nKQorewor CXUzMiBhY3RpdmUgPSB0aW1pbmctPnhyZXM7CisJdTMyIGluYWN0aXZlID0KKwkgICAgdGltaW5n LT5oX2JhY2tfcG9yY2ggKyB0aW1pbmctPmhfZnJvbnRfcG9yY2ggKworCSAgICB0aW1pbmctPmhz eW5jX3B1bHNlX3dpZHRoOworCXJldHVybiBhY3RpdmUgKyBpbmFjdGl2ZTsKK30KKworc3RhdGlj IGlubGluZSB1MzIgZ2V0X3ZlcnRpY2FsX3RvdGFsKGNvbnN0IHN0cnVjdCBpbnRmX3RpbWluZ19w YXJhbXMgKnRpbWluZykKK3sKKwl1MzIgYWN0aXZlID0gdGltaW5nLT55cmVzOworCXUzMiBpbmFj dGl2ZSA9CisJICAgIHRpbWluZy0+dl9iYWNrX3BvcmNoICsgdGltaW5nLT52X2Zyb250X3BvcmNo ICsKKwkgICAgdGltaW5nLT52c3luY19wdWxzZV93aWR0aDsKKwlyZXR1cm4gYWN0aXZlICsgaW5h Y3RpdmU7Cit9CisKKy8qCisgKiBwcm9ncmFtbWFibGVfZmV0Y2hfZ2V0X251bV9saW5lczoKKyAq CU51bWJlciBvZiBmZXRjaCBsaW5lcyBpbiB2ZXJ0aWNhbCBmcm9udCBwb3JjaAorICogQHRpbWlu ZzogUG9pbnRlciB0byB0aGUgaW50ZiB0aW1pbmcgaW5mb3JtYXRpb24gZm9yIHRoZSByZXF1ZXN0 ZWQgbW9kZQorICoKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBmZXRjaCBsaW5lcyBpbiB2ZXJ0 aWNhbCBmcm9udCBwb3JjaCBhdCB3aGljaCBtZHAKKyAqIGNhbiBzdGFydCBmZXRjaGluZyB0aGUg bmV4dCBmcmFtZS4KKyAqCisgKiBOdW1iZXIgb2YgbmVlZGVkIHByZWZldGNoIGxpbmVzIGlzIGFu eXRoaW5nIHRoYXQgY2Fubm90IGJlIGFic29yYmVkIGluIHRoZQorICogc3RhcnQgb2YgZnJhbWUg dGltZSAoYmFjayBwb3JjaCArIHZzeW5jIHB1bHNlIHdpZHRoKS4KKyAqCisgKiBTb21lIHBhbmVs cyBoYXZlIHZlcnkgbGFyZ2UgVkZQLCBob3dldmVyIHdlIG9ubHkgbmVlZCBhIHRvdGFsIG51bWJl ciBvZgorICogbGluZXMgYmFzZWQgb24gdGhlIGNoaXAgd29yc3QgY2FzZSBsYXRlbmNpZXMuCisg Ki8KK3N0YXRpYyB1MzIgcHJvZ3JhbW1hYmxlX2ZldGNoX2dldF9udW1fbGluZXMoCisJCXN0cnVj dCBkcHVfZW5jb2Rlcl9waHlzX3ZpZCAqdmlkX2VuYywKKwkJY29uc3Qgc3RydWN0IGludGZfdGlt aW5nX3BhcmFtcyAqdGltaW5nKQoreworCXUzMiB3b3JzdF9jYXNlX25lZWRlZF9saW5lcyA9CisJ ICAgIHZpZF9lbmMtPmh3X2ludGYtPmNhcC0+cHJvZ19mZXRjaF9saW5lc193b3JzdF9jYXNlOwor CXUzMiBzdGFydF9vZl9mcmFtZV9saW5lcyA9CisJICAgIHRpbWluZy0+dl9iYWNrX3BvcmNoICsg dGltaW5nLT52c3luY19wdWxzZV93aWR0aDsKKwl1MzIgbmVlZGVkX3ZmcF9saW5lcyA9IHdvcnN0 X2Nhc2VfbmVlZGVkX2xpbmVzIC0gc3RhcnRfb2ZfZnJhbWVfbGluZXM7CisJdTMyIGFjdHVhbF92 ZnBfbGluZXMgPSAwOworCisJLyogRmV0Y2ggbXVzdCBiZSBvdXRzaWRlIGFjdGl2ZSBsaW5lcywg b3RoZXJ3aXNlIHVuZGVmaW5lZC4gKi8KKwlpZiAoc3RhcnRfb2ZfZnJhbWVfbGluZXMgPj0gd29y c3RfY2FzZV9uZWVkZWRfbGluZXMpIHsKKwkJRFBVX0RFQlVHX1ZJREVOQyh2aWRfZW5jLAorCQkJ CSJwcm9nIGZldGNoIGlzIG5vdCBuZWVkZWQsIGxhcmdlIHZicCt2c3dcbiIpOworCQlhY3R1YWxf dmZwX2xpbmVzID0gMDsKKwl9IGVsc2UgaWYgKHRpbWluZy0+dl9mcm9udF9wb3JjaCA8IG5lZWRl ZF92ZnBfbGluZXMpIHsKKwkJLyogV2FybiBmZXRjaCBuZWVkZWQsIGJ1dCBub3QgZW5vdWdoIHBv cmNoIGluIHBhbmVsIGNvbmZpZyAqLworCQlwcl93YXJuX29uY2UKKwkJCSgibG93IHZicCt2ZnAg bWF5IGxlYWQgdG8gcGVyZiBpc3N1ZXMgaW4gc29tZSBjYXNlc1xuIik7CisJCURQVV9ERUJVR19W SURFTkModmlkX2VuYywKKwkJCQkibGVzcyB2ZnAgdGhhbiBmZXRjaCByZXEsIHVzaW5nIGVudGly ZSB2ZnBcbiIpOworCQlhY3R1YWxfdmZwX2xpbmVzID0gdGltaW5nLT52X2Zyb250X3BvcmNoOwor CX0gZWxzZSB7CisJCURQVV9ERUJVR19WSURFTkModmlkX2VuYywgInJvb20gaW4gdmZwIGZvciBu ZWVkZWQgcHJlZmV0Y2hcbiIpOworCQlhY3R1YWxfdmZwX2xpbmVzID0gbmVlZGVkX3ZmcF9saW5l czsKKwl9CisKKwlEUFVfREVCVUdfVklERU5DKHZpZF9lbmMsCisJCSJ2X2Zyb250X3BvcmNoICV1 IHZfYmFja19wb3JjaCAldSB2c3luY19wdWxzZV93aWR0aCAldVxuIiwKKwkJdGltaW5nLT52X2Zy b250X3BvcmNoLCB0aW1pbmctPnZfYmFja19wb3JjaCwKKwkJdGltaW5nLT52c3luY19wdWxzZV93 aWR0aCk7CisJRFBVX0RFQlVHX1ZJREVOQyh2aWRfZW5jLAorCQkid2NfbGluZXMgJXUgbmVlZGVk X3ZmcF9saW5lcyAldSBhY3R1YWxfdmZwX2xpbmVzICV1XG4iLAorCQl3b3JzdF9jYXNlX25lZWRl ZF9saW5lcywgbmVlZGVkX3ZmcF9saW5lcywgYWN0dWFsX3ZmcF9saW5lcyk7CisKKwlyZXR1cm4g YWN0dWFsX3ZmcF9saW5lczsKK30KKworLyoKKyAqIHByb2dyYW1tYWJsZV9mZXRjaF9jb25maWc6 IFByb2dyYW1zIEhXIHRvIHByZWZldGNoIGxpbmVzIGJ5IG9mZnNldHRpbmcKKyAqCXRoZSBzdGFy dCBvZiBmZXRjaCBpbnRvIHRoZSB2ZXJ0aWNhbCBmcm9udCBwb3JjaCBmb3IgY2FzZXMgd2hlcmUg dGhlCisgKgl2c3luYyBwdWxzZSB3aWR0aCBhbmQgdmVydGljYWwgYmFjayBwb3JjaCB0aW1lIGlz IGluc3VmZmljaWVudAorICoKKyAqCUdldHMgIyBvZiBsaW5lcyB0byBwcmUtZmV0Y2gsIHRoZW4g Y2FsY3VsYXRlIFZTWU5DIGNvdW50ZXIgdmFsdWUuCisgKglIVyBsYXllciByZXF1aXJlcyBWU1lO QyBjb3VudGVyIG9mIGZpcnN0IHBpeGVsIG9mIHRndCBWRlAgbGluZS4KKyAqCisgKiBAdGltaW5n OiBQb2ludGVyIHRvIHRoZSBpbnRmIHRpbWluZyBpbmZvcm1hdGlvbiBmb3IgdGhlIHJlcXVlc3Rl ZCBtb2RlCisgKi8KK3N0YXRpYyB2b2lkIHByb2dyYW1tYWJsZV9mZXRjaF9jb25maWcoc3RydWN0 IGRwdV9lbmNvZGVyX3BoeXMgKnBoeXNfZW5jLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpbnRm X3RpbWluZ19wYXJhbXMgKnRpbWluZykKK3sKKwlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5c192aWQg KnZpZF9lbmMgPQorCQl0b19kcHVfZW5jb2Rlcl9waHlzX3ZpZChwaHlzX2VuYyk7CisJc3RydWN0 IGludGZfcHJvZ19mZXRjaCBmID0geyAwIH07CisJdTMyIHZmcF9mZXRjaF9saW5lcyA9IDA7CisJ dTMyIGhvcml6X3RvdGFsID0gMDsKKwl1MzIgdmVydF90b3RhbCA9IDA7CisJdTMyIHZmcF9mZXRj aF9zdGFydF92c3luY19jb3VudGVyID0gMDsKKwl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CisK KwlpZiAoV0FSTl9PTl9PTkNFKCF2aWRfZW5jLT5od19pbnRmLT5vcHMuc2V0dXBfcHJnX2ZldGNo KSkKKwkJcmV0dXJuOworCisJdmZwX2ZldGNoX2xpbmVzID0gcHJvZ3JhbW1hYmxlX2ZldGNoX2dl dF9udW1fbGluZXModmlkX2VuYywgdGltaW5nKTsKKwlpZiAodmZwX2ZldGNoX2xpbmVzKSB7CisJ CXZlcnRfdG90YWwgPSBnZXRfdmVydGljYWxfdG90YWwodGltaW5nKTsKKwkJaG9yaXpfdG90YWwg PSBnZXRfaG9yaXpvbnRhbF90b3RhbCh0aW1pbmcpOworCQl2ZnBfZmV0Y2hfc3RhcnRfdnN5bmNf Y291bnRlciA9CisJCSAgICAodmVydF90b3RhbCAtIHZmcF9mZXRjaF9saW5lcykgKiBob3Jpel90 b3RhbCArIDE7CisJCWYuZW5hYmxlID0gMTsKKwkJZi5mZXRjaF9zdGFydCA9IHZmcF9mZXRjaF9z dGFydF92c3luY19jb3VudGVyOworCX0KKworCURQVV9ERUJVR19WSURFTkModmlkX2VuYywKKwkJ InZmcF9mZXRjaF9saW5lcyAldSB2ZnBfZmV0Y2hfc3RhcnRfdnN5bmNfY291bnRlciAldVxuIiwK KwkJdmZwX2ZldGNoX2xpbmVzLCB2ZnBfZmV0Y2hfc3RhcnRfdnN5bmNfY291bnRlcik7CisKKwlz cGluX2xvY2tfaXJxc2F2ZShwaHlzX2VuYy0+ZW5jX3NwaW5sb2NrLCBsb2NrX2ZsYWdzKTsKKwl2 aWRfZW5jLT5od19pbnRmLT5vcHMuc2V0dXBfcHJnX2ZldGNoKHZpZF9lbmMtPmh3X2ludGYsICZm KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKHBoeXNfZW5jLT5lbmNfc3BpbmxvY2ssIGxvY2tf ZmxhZ3MpOworfQorCitzdGF0aWMgYm9vbCBkcHVfZW5jb2Rlcl9waHlzX3ZpZF9tb2RlX2ZpeHVw KAorCQlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqcGh5c19lbmMsCisJCWNvbnN0IHN0cnVjdCBk cm1fZGlzcGxheV9tb2RlICptb2RlLAorCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqX21v ZGUpCit7CisJaWYgKHBoeXNfZW5jKQorCQlEUFVfREVCVUdfVklERU5DKHRvX2RwdV9lbmNvZGVy X3BoeXNfdmlkKHBoeXNfZW5jKSwgIlxuIik7CisKKwkvKgorCSAqIE1vZGlmeWluZyBtb2RlIGhh cyBjb25zZXF1ZW5jZXMgd2hlbiB0aGUgbW9kZSBjb21lcyBiYWNrIHRvIHVzCisJICovCisJcmV0 dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIGRwdV9lbmNvZGVyX3BoeXNfdmlkX3NldHVwX3Rp bWluZ19lbmdpbmUoCisJCXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpwaHlzX2VuYykKK3sKKwlz dHJ1Y3QgZHB1X2VuY29kZXJfcGh5c192aWQgKnZpZF9lbmM7CisJc3RydWN0IGRybV9kaXNwbGF5 X21vZGUgbW9kZTsKKwlzdHJ1Y3QgaW50Zl90aW1pbmdfcGFyYW1zIHRpbWluZ19wYXJhbXMgPSB7 IDAgfTsKKwljb25zdCBzdHJ1Y3QgZHB1X2Zvcm1hdCAqZm10ID0gTlVMTDsKKwl1MzIgZm10X2Zv dXJjYyA9IERSTV9GT1JNQVRfUkdCODg4OworCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKKwlz dHJ1Y3QgZHB1X2h3X2ludGZfY2ZnIGludGZfY2ZnID0geyAwIH07CisKKwlpZiAoIXBoeXNfZW5j IHx8ICFwaHlzX2VuYy0+aHdfY3RsLT5vcHMuc2V0dXBfaW50Zl9jZmcpIHsKKwkJRFBVX0VSUk9S KCJpbnZhbGlkIGVuY29kZXIgJWRcbiIsIHBoeXNfZW5jICE9IDApOworCQlyZXR1cm47CisJfQor CisJbW9kZSA9IHBoeXNfZW5jLT5jYWNoZWRfbW9kZTsKKwl2aWRfZW5jID0gdG9fZHB1X2VuY29k ZXJfcGh5c192aWQocGh5c19lbmMpOworCWlmICghdmlkX2VuYy0+aHdfaW50Zi0+b3BzLnNldHVw X3RpbWluZ19nZW4pIHsKKwkJRFBVX0VSUk9SKCJ0aW1pbmcgZW5naW5lIHNldHVwIGlzIG5vdCBz dXBwb3J0ZWRcbiIpOworCQlyZXR1cm47CisJfQorCisJRFBVX0RFQlVHX1ZJREVOQyh2aWRfZW5j LCAiZW5hYmxpbmcgbW9kZTpcbiIpOworCWRybV9tb2RlX2RlYnVnX3ByaW50bW9kZWxpbmUoJm1v ZGUpOworCisJaWYgKHBoeXNfZW5jLT5zcGxpdF9yb2xlICE9IEVOQ19ST0xFX1NPTE8pIHsKKwkJ bW9kZS5oZGlzcGxheSA+Pj0gMTsKKwkJbW9kZS5odG90YWwgPj49IDE7CisJCW1vZGUuaHN5bmNf c3RhcnQgPj49IDE7CisJCW1vZGUuaHN5bmNfZW5kID4+PSAxOworCisJCURQVV9ERUJVR19WSURF TkModmlkX2VuYywKKwkJCSJzcGxpdF9yb2xlICVkLCBoYWx2ZSBob3Jpem9udGFsICVkICVkICVk ICVkXG4iLAorCQkJcGh5c19lbmMtPnNwbGl0X3JvbGUsCisJCQltb2RlLmhkaXNwbGF5LCBtb2Rl Lmh0b3RhbCwKKwkJCW1vZGUuaHN5bmNfc3RhcnQsIG1vZGUuaHN5bmNfZW5kKTsKKwl9CisKKwlk cm1fbW9kZV90b19pbnRmX3RpbWluZ19wYXJhbXModmlkX2VuYywgJm1vZGUsICZ0aW1pbmdfcGFy YW1zKTsKKworCWZtdCA9IGRwdV9nZXRfZHB1X2Zvcm1hdChmbXRfZm91cmNjKTsKKwlEUFVfREVC VUdfVklERU5DKHZpZF9lbmMsICJmbXRfZm91cmNjIDB4JVhcbiIsIGZtdF9mb3VyY2MpOworCisJ aW50Zl9jZmcuaW50ZiA9IHZpZF9lbmMtPmh3X2ludGYtPmlkeDsKKwlpbnRmX2NmZy5pbnRmX21v ZGVfc2VsID0gRFBVX0NUTF9NT0RFX1NFTF9WSUQ7CisJaW50Zl9jZmcuc3RyZWFtX3NlbCA9IDA7 IC8qIERvbid0IGNhcmUgdmFsdWUgZm9yIHZpZGVvIG1vZGUgKi8KKwlpbnRmX2NmZy5tb2RlXzNk ID0gZHB1X2VuY29kZXJfaGVscGVyX2dldF8zZF9ibGVuZF9tb2RlKHBoeXNfZW5jKTsKKworCXNw aW5fbG9ja19pcnFzYXZlKHBoeXNfZW5jLT5lbmNfc3BpbmxvY2ssIGxvY2tfZmxhZ3MpOworCXZp ZF9lbmMtPmh3X2ludGYtPm9wcy5zZXR1cF90aW1pbmdfZ2VuKHZpZF9lbmMtPmh3X2ludGYsCisJ CQkmdGltaW5nX3BhcmFtcywgZm10KTsKKwlwaHlzX2VuYy0+aHdfY3RsLT5vcHMuc2V0dXBfaW50 Zl9jZmcocGh5c19lbmMtPmh3X2N0bCwgJmludGZfY2ZnKTsKKwlzcGluX3VubG9ja19pcnFyZXN0 b3JlKHBoeXNfZW5jLT5lbmNfc3BpbmxvY2ssIGxvY2tfZmxhZ3MpOworCisJcHJvZ3JhbW1hYmxl X2ZldGNoX2NvbmZpZyhwaHlzX2VuYywgJnRpbWluZ19wYXJhbXMpOworCisJdmlkX2VuYy0+dGlt aW5nX3BhcmFtcyA9IHRpbWluZ19wYXJhbXM7Cit9CisKK3N0YXRpYyB2b2lkIGRwdV9lbmNvZGVy X3BoeXNfdmlkX3ZibGFua19pcnEodm9pZCAqYXJnLCBpbnQgaXJxX2lkeCkKK3sKKwlzdHJ1Y3Qg ZHB1X2VuY29kZXJfcGh5cyAqcGh5c19lbmMgPSBhcmc7CisJc3RydWN0IGRwdV9od19jdGwgKmh3 X2N0bDsKKwl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CisJdTMyIGZsdXNoX3JlZ2lzdGVyID0g MDsKKwlpbnQgbmV3X2NudCA9IC0xLCBvbGRfY250ID0gLTE7CisKKwlpZiAoIXBoeXNfZW5jKQor CQlyZXR1cm47CisKKwlod19jdGwgPSBwaHlzX2VuYy0+aHdfY3RsOworCWlmICghaHdfY3RsKQor CQlyZXR1cm47CisKKwlEUFVfQVRSQUNFX0JFR0lOKCJ2YmxhbmtfaXJxIik7CisKKwlpZiAocGh5 c19lbmMtPnBhcmVudF9vcHMuaGFuZGxlX3ZibGFua192aXJ0KQorCQlwaHlzX2VuYy0+cGFyZW50 X29wcy5oYW5kbGVfdmJsYW5rX3ZpcnQocGh5c19lbmMtPnBhcmVudCwKKwkJCQlwaHlzX2VuYyk7 CisKKwlvbGRfY250ICA9IGF0b21pY19yZWFkKCZwaHlzX2VuYy0+cGVuZGluZ19raWNrb2ZmX2Nu dCk7CisKKwkvKgorCSAqIG9ubHkgZGVjcmVtZW50IHRoZSBwZW5kaW5nIGZsdXNoIGNvdW50IGlm IHdlJ3ZlIGFjdHVhbGx5IGZsdXNoZWQKKwkgKiBoYXJkd2FyZS4gZHVlIHRvIHN3IGlycSBsYXRl bmN5LCB2YmxhbmsgbWF5IGhhdmUgYWxyZWFkeSBoYXBwZW5lZAorCSAqIHNvIHdlIG5lZWQgdG8g ZG91YmxlLWNoZWNrIHdpdGggaHcgdGhhdCBpdCBhY2NlcHRlZCB0aGUgZmx1c2ggYml0cworCSAq LworCXNwaW5fbG9ja19pcnFzYXZlKHBoeXNfZW5jLT5lbmNfc3BpbmxvY2ssIGxvY2tfZmxhZ3Mp OworCWlmIChod19jdGwgJiYgaHdfY3RsLT5vcHMuZ2V0X2ZsdXNoX3JlZ2lzdGVyKQorCQlmbHVz aF9yZWdpc3RlciA9IGh3X2N0bC0+b3BzLmdldF9mbHVzaF9yZWdpc3Rlcihod19jdGwpOworCisJ aWYgKGZsdXNoX3JlZ2lzdGVyID09IDApCisJCW5ld19jbnQgPSBhdG9taWNfYWRkX3VubGVzcygm cGh5c19lbmMtPnBlbmRpbmdfa2lja29mZl9jbnQsCisJCQkJLTEsIDApOworCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUocGh5c19lbmMtPmVuY19zcGlubG9jaywgbG9ja19mbGFncyk7CisKKwkvKiBT aWduYWwgYW55IHdhaXRpbmcgYXRvbWljIGNvbW1pdCB0aHJlYWQgKi8KKwl3YWtlX3VwX2FsbCgm cGh5c19lbmMtPnBlbmRpbmdfa2lja29mZl93cSk7CisJRFBVX0FUUkFDRV9FTkQoInZibGFua19p cnEiKTsKK30KKworc3RhdGljIHZvaWQgZHB1X2VuY29kZXJfcGh5c192aWRfdW5kZXJydW5faXJx KHZvaWQgKmFyZywgaW50IGlycV9pZHgpCit7CisJc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKnBo eXNfZW5jID0gYXJnOworCisJaWYgKCFwaHlzX2VuYykKKwkJcmV0dXJuOworCisJaWYgKHBoeXNf ZW5jLT5wYXJlbnRfb3BzLmhhbmRsZV91bmRlcnJ1bl92aXJ0KQorCQlwaHlzX2VuYy0+cGFyZW50 X29wcy5oYW5kbGVfdW5kZXJydW5fdmlydChwaHlzX2VuYy0+cGFyZW50LAorCQkJcGh5c19lbmMp OworfQorCitzdGF0aWMgYm9vbCBfZHB1X2VuY29kZXJfcGh5c19pc19kdWFsX2N0bChzdHJ1Y3Qg ZHB1X2VuY29kZXJfcGh5cyAqcGh5c19lbmMpCit7CisJaWYgKCFwaHlzX2VuYykKKwkJcmV0dXJu IGZhbHNlOworCisJaWYgKHBoeXNfZW5jLT50b3BvbG9neV9uYW1lID09IERQVV9STV9UT1BPTE9H WV9EVUFMUElQRSkKKwkJcmV0dXJuIHRydWU7CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRp YyBib29sIGRwdV9lbmNvZGVyX3BoeXNfdmlkX25lZWRzX3NpbmdsZV9mbHVzaCgKKwkJc3RydWN0 IGRwdV9lbmNvZGVyX3BoeXMgKnBoeXNfZW5jKQoreworCXJldHVybiAocGh5c19lbmMgJiYgX2Rw dV9lbmNvZGVyX3BoeXNfaXNfZHVhbF9jdGwocGh5c19lbmMpKTsKK30KKworc3RhdGljIHZvaWQg X2RwdV9lbmNvZGVyX3BoeXNfdmlkX3NldHVwX2lycV9od19pZHgoCisJCXN0cnVjdCBkcHVfZW5j b2Rlcl9waHlzICpwaHlzX2VuYykKK3sKKwlzdHJ1Y3QgZHB1X2VuY29kZXJfaXJxICppcnE7CisK KwkvKgorCSAqIEluaXRpYWxpemUgaXJxLT5od19pZHggb25seSB3aGVuIGlycSBpcyBub3QgcmVn aXN0ZXJlZC4KKwkgKiBQcmV2ZW50IGludmFsaWRhdGluZyBpcnEtPmlycV9pZHggYXMgbW9kZXNl dCBtYXkgYmUKKwkgKiBjYWxsZWQgbWFueSB0aW1lcyBkdXJpbmcgZGZwcy4KKwkgKi8KKworCWly cSA9ICZwaHlzX2VuYy0+aXJxW0lOVFJfSURYX1ZTWU5DXTsKKwlpZiAoaXJxLT5pcnFfaWR4IDwg MCkKKwkJaXJxLT5od19pZHggPSBwaHlzX2VuYy0+aW50Zl9pZHg7CisKKwlpcnEgPSAmcGh5c19l bmMtPmlycVtJTlRSX0lEWF9VTkRFUlJVTl07CisJaWYgKGlycS0+aXJxX2lkeCA8IDApCisJCWly cS0+aHdfaWR4ID0gcGh5c19lbmMtPmludGZfaWR4OworfQorCitzdGF0aWMgdm9pZCBkcHVfZW5j b2Rlcl9waHlzX3ZpZF9tb2RlX3NldCgKKwkJc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKnBoeXNf ZW5jLAorCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKmFkal9tb2RlKQoreworCXN0cnVjdCBkcHVfcm0gKnJtOworCXN0cnVjdCBkcHVf cm1faHdfaXRlciBpdGVyOworCWludCBpLCBpbnN0YW5jZTsKKwlzdHJ1Y3QgZHB1X2VuY29kZXJf cGh5c192aWQgKnZpZF9lbmM7CisKKwlpZiAoIXBoeXNfZW5jIHx8ICFwaHlzX2VuYy0+ZHB1X2tt cykgeworCQlEUFVfRVJST1IoImludmFsaWQgZW5jb2Rlci9rbXNcbiIpOworCQlyZXR1cm47CisJ fQorCisJcm0gPSAmcGh5c19lbmMtPmRwdV9rbXMtPnJtOworCXZpZF9lbmMgPSB0b19kcHVfZW5j b2Rlcl9waHlzX3ZpZChwaHlzX2VuYyk7CisKKwlpZiAoYWRqX21vZGUpIHsKKwkJcGh5c19lbmMt PmNhY2hlZF9tb2RlID0gKmFkal9tb2RlOworCQlkcm1fbW9kZV9kZWJ1Z19wcmludG1vZGVsaW5l KGFkal9tb2RlKTsKKwkJRFBVX0RFQlVHX1ZJREVOQyh2aWRfZW5jLCAiY2FjaGluZyBtb2RlOlxu Iik7CisJfQorCisJaW5zdGFuY2UgPSBwaHlzX2VuYy0+c3BsaXRfcm9sZSA9PSBFTkNfUk9MRV9T TEFWRSA/IDEgOiAwOworCisJLyogUmV0cmlldmUgcHJldmlvdXNseSBhbGxvY2F0ZWQgSFcgUmVz b3VyY2VzLiBTaG91bGRuJ3QgZmFpbCAqLworCWRwdV9ybV9pbml0X2h3X2l0ZXIoJml0ZXIsIHBo eXNfZW5jLT5wYXJlbnQtPmJhc2UuaWQsIERQVV9IV19CTEtfQ1RMKTsKKwlmb3IgKGkgPSAwOyBp IDw9IGluc3RhbmNlOyBpKyspIHsKKwkJaWYgKGRwdV9ybV9nZXRfaHcocm0sICZpdGVyKSkKKwkJ CXBoeXNfZW5jLT5od19jdGwgPSAoc3RydWN0IGRwdV9od19jdGwgKilpdGVyLmh3OworCX0KKwlp ZiAoSVNfRVJSX09SX05VTEwocGh5c19lbmMtPmh3X2N0bCkpIHsKKwkJRFBVX0VSUk9SX1ZJREVO Qyh2aWRfZW5jLCAiZmFpbGVkIHRvIGluaXQgY3RsLCAlbGRcbiIsCisJCQkJUFRSX0VSUihwaHlz X2VuYy0+aHdfY3RsKSk7CisJCXBoeXNfZW5jLT5od19jdGwgPSBOVUxMOworCQlyZXR1cm47CisJ fQorCisJX2RwdV9lbmNvZGVyX3BoeXNfdmlkX3NldHVwX2lycV9od19pZHgocGh5c19lbmMpOwor fQorCitzdGF0aWMgaW50IGRwdV9lbmNvZGVyX3BoeXNfdmlkX2NvbnRyb2xfdmJsYW5rX2lycSgK KwkJc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKnBoeXNfZW5jLAorCQlib29sIGVuYWJsZSkKK3sK KwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5c192aWQgKnZpZF9lbmM7CisJ aW50IHJlZmNvdW50OworCisJaWYgKCFwaHlzX2VuYykgeworCQlEUFVfRVJST1IoImludmFsaWQg ZW5jb2RlclxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJlZmNvdW50ID0gYXRvbWlj X3JlYWQoJnBoeXNfZW5jLT52YmxhbmtfcmVmY291bnQpOworCXZpZF9lbmMgPSB0b19kcHVfZW5j b2Rlcl9waHlzX3ZpZChwaHlzX2VuYyk7CisKKwkvKiBTbGF2ZSBlbmNvZGVycyBkb24ndCByZXBv cnQgdmJsYW5rICovCisJaWYgKCFkcHVfZW5jb2Rlcl9waHlzX3ZpZF9pc19tYXN0ZXIocGh5c19l bmMpKQorCQlnb3RvIGVuZDsKKworCS8qIHByb3RlY3QgYWdhaW5zdCBuZWdhdGl2ZSAqLworCWlm ICghZW5hYmxlICYmIHJlZmNvdW50ID09IDApIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBl bmQ7CisJfQorCisJRFJNX0RFQlVHX0tNUygiaWQ6JXUgZW5hYmxlPSVkLyVkXG4iLCBEUk1JRChw aHlzX2VuYy0+cGFyZW50KSwgZW5hYmxlLAorCQkgICAgICBhdG9taWNfcmVhZCgmcGh5c19lbmMt PnZibGFua19yZWZjb3VudCkpOworCisJaWYgKGVuYWJsZSAmJiBhdG9taWNfaW5jX3JldHVybigm cGh5c19lbmMtPnZibGFua19yZWZjb3VudCkgPT0gMSkKKwkJcmV0ID0gZHB1X2VuY29kZXJfaGVs cGVyX3JlZ2lzdGVyX2lycShwaHlzX2VuYywgSU5UUl9JRFhfVlNZTkMpOworCWVsc2UgaWYgKCFl bmFibGUgJiYgYXRvbWljX2RlY19yZXR1cm4oJnBoeXNfZW5jLT52YmxhbmtfcmVmY291bnQpID09 IDApCisJCXJldCA9IGRwdV9lbmNvZGVyX2hlbHBlcl91bnJlZ2lzdGVyX2lycShwaHlzX2VuYywK KwkJCQlJTlRSX0lEWF9WU1lOQyk7CisKK2VuZDoKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigi ZmFpbGVkOiBpZDoldSBpbnRmOiVkIHJldDolZCBlbmFibGU6JWQgcmVmY250OiVkXG4iLAorCQkJ ICBEUk1JRChwaHlzX2VuYy0+cGFyZW50KSwKKwkJCSAgdmlkX2VuYy0+aHdfaW50Zi0+aWR4IC0g SU5URl8wLCByZXQsIGVuYWJsZSwKKwkJCSAgcmVmY291bnQpOworCX0KKwlyZXR1cm4gcmV0Owor fQorCitzdGF0aWMgdm9pZCBkcHVfZW5jb2Rlcl9waHlzX3ZpZF9lbmFibGUoc3RydWN0IGRwdV9l bmNvZGVyX3BoeXMgKnBoeXNfZW5jKQoreworCXN0cnVjdCBtc21fZHJtX3ByaXZhdGUgKnByaXY7 CisJc3RydWN0IGRwdV9lbmNvZGVyX3BoeXNfdmlkICp2aWRfZW5jOworCXN0cnVjdCBkcHVfaHdf aW50ZiAqaW50ZjsKKwlzdHJ1Y3QgZHB1X2h3X2N0bCAqY3RsOworCXUzMiBmbHVzaF9tYXNrID0g MDsKKworCWlmICghcGh5c19lbmMgfHwgIXBoeXNfZW5jLT5wYXJlbnQgfHwgIXBoeXNfZW5jLT5w YXJlbnQtPmRldiB8fAorCQkJIXBoeXNfZW5jLT5wYXJlbnQtPmRldi0+ZGV2X3ByaXZhdGUpIHsK KwkJRFBVX0VSUk9SKCJpbnZhbGlkIGVuY29kZXIvZGV2aWNlXG4iKTsKKwkJcmV0dXJuOworCX0K Kwlwcml2ID0gcGh5c19lbmMtPnBhcmVudC0+ZGV2LT5kZXZfcHJpdmF0ZTsKKworCXZpZF9lbmMg PSB0b19kcHVfZW5jb2Rlcl9waHlzX3ZpZChwaHlzX2VuYyk7CisJaW50ZiA9IHZpZF9lbmMtPmh3 X2ludGY7CisJY3RsID0gcGh5c19lbmMtPmh3X2N0bDsKKwlpZiAoIXZpZF9lbmMtPmh3X2ludGYg fHwgIXBoeXNfZW5jLT5od19jdGwpIHsKKwkJRFBVX0VSUk9SKCJpbnZhbGlkIGh3X2ludGYgJWQg aHdfY3RsICVkXG4iLAorCQkJCXZpZF9lbmMtPmh3X2ludGYgIT0gMCwgcGh5c19lbmMtPmh3X2N0 bCAhPSAwKTsKKwkJcmV0dXJuOworCX0KKworCURQVV9ERUJVR19WSURFTkModmlkX2VuYywgIlxu Iik7CisKKwlpZiAoV0FSTl9PTighdmlkX2VuYy0+aHdfaW50Zi0+b3BzLmVuYWJsZV90aW1pbmcp KQorCQlyZXR1cm47CisKKwlkcHVfZW5jb2Rlcl9oZWxwZXJfc3BsaXRfY29uZmlnKHBoeXNfZW5j LCB2aWRfZW5jLT5od19pbnRmLT5pZHgpOworCisJZHB1X2VuY29kZXJfcGh5c192aWRfc2V0dXBf dGltaW5nX2VuZ2luZShwaHlzX2VuYyk7CisKKwkvKgorCSAqIEZvciBzaW5nbGUgZmx1c2ggY2Fz ZXMgKGR1YWwtY3RsIG9yIHBwLXNwbGl0KSwgc2tpcCBzZXR0aW5nIHRoZQorCSAqIGZsdXNoIGJp dCBmb3IgdGhlIHNsYXZlIGludGYsIHNpbmNlIGJvdGggaW50ZnMgdXNlIHNhbWUgY3RsCisJICog YW5kIEhXIHdpbGwgb25seSBmbHVzaCB0aGUgbWFzdGVyLgorCSAqLworCWlmIChkcHVfZW5jb2Rl cl9waHlzX3ZpZF9uZWVkc19zaW5nbGVfZmx1c2gocGh5c19lbmMpICYmCisJCSFkcHVfZW5jb2Rl cl9waHlzX3ZpZF9pc19tYXN0ZXIocGh5c19lbmMpKQorCQlnb3RvIHNraXBfZmx1c2g7CisKKwlj dGwtPm9wcy5nZXRfYml0bWFza19pbnRmKGN0bCwgJmZsdXNoX21hc2ssIGludGYtPmlkeCk7CisJ Y3RsLT5vcHMudXBkYXRlX3BlbmRpbmdfZmx1c2goY3RsLCBmbHVzaF9tYXNrKTsKKworc2tpcF9m bHVzaDoKKwlEUFVfREVCVUdfVklERU5DKHZpZF9lbmMsICJ1cGRhdGUgcGVuZGluZyBmbHVzaCBj dGwgJWQgZmx1c2hfbWFzayAleFxuIiwKKwkJY3RsLT5pZHggLSBDVExfMCwgZmx1c2hfbWFzayk7 CisKKwkvKiBjdGxfZmx1c2ggJiB0aW1pbmcgZW5naW5lIGVuYWJsZSB3aWxsIGJlIHRyaWdnZXJl ZCBieSBmcmFtZXdvcmsgKi8KKwlpZiAocGh5c19lbmMtPmVuYWJsZV9zdGF0ZSA9PSBEUFVfRU5D X0RJU0FCTEVEKQorCQlwaHlzX2VuYy0+ZW5hYmxlX3N0YXRlID0gRFBVX0VOQ19FTkFCTElORzsK K30KKworc3RhdGljIHZvaWQgZHB1X2VuY29kZXJfcGh5c192aWRfZGVzdHJveShzdHJ1Y3QgZHB1 X2VuY29kZXJfcGh5cyAqcGh5c19lbmMpCit7CisJc3RydWN0IGRwdV9lbmNvZGVyX3BoeXNfdmlk ICp2aWRfZW5jOworCisJaWYgKCFwaHlzX2VuYykgeworCQlEUFVfRVJST1IoImludmFsaWQgZW5j b2RlclxuIik7CisJCXJldHVybjsKKwl9CisKKwl2aWRfZW5jID0gdG9fZHB1X2VuY29kZXJfcGh5 c192aWQocGh5c19lbmMpOworCURQVV9ERUJVR19WSURFTkModmlkX2VuYywgIlxuIik7CisJa2Zy ZWUodmlkX2VuYyk7Cit9CisKK3N0YXRpYyB2b2lkIGRwdV9lbmNvZGVyX3BoeXNfdmlkX2dldF9o d19yZXNvdXJjZXMoCisJCXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpwaHlzX2VuYywKKwkJc3Ry dWN0IGRwdV9lbmNvZGVyX2h3X3Jlc291cmNlcyAqaHdfcmVzLAorCQlzdHJ1Y3QgZHJtX2Nvbm5l Y3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5c192aWQg KnZpZF9lbmM7CisKKwlpZiAoIXBoeXNfZW5jIHx8ICFod19yZXMpIHsKKwkJRFBVX0VSUk9SKCJp bnZhbGlkIGFyZyhzKSwgZW5jICVkIGh3X3JlcyAlZCBjb25uX3N0YXRlICVkXG4iLAorCQkJCXBo eXNfZW5jICE9IDAsIGh3X3JlcyAhPSAwLCBjb25uX3N0YXRlICE9IDApOworCQlyZXR1cm47CisJ fQorCisJdmlkX2VuYyA9IHRvX2RwdV9lbmNvZGVyX3BoeXNfdmlkKHBoeXNfZW5jKTsKKwlpZiAo IXZpZF9lbmMtPmh3X2ludGYpIHsKKwkJRFBVX0VSUk9SKCJpbnZhbGlkIGFyZyhzKSwgaHdfaW50 ZlxuIik7CisJCXJldHVybjsKKwl9CisKKwlEUFVfREVCVUdfVklERU5DKHZpZF9lbmMsICJcbiIp OworCWh3X3Jlcy0+aW50ZnNbdmlkX2VuYy0+aHdfaW50Zi0+aWR4IC0gSU5URl8wXSA9IElOVEZf TU9ERV9WSURFTzsKK30KKworc3RhdGljIGludCBfZHB1X2VuY29kZXJfcGh5c192aWRfd2FpdF9m b3JfdmJsYW5rKAorCQlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqcGh5c19lbmMsIGJvb2wgbm90 aWZ5KQoreworCXN0cnVjdCBkcHVfZW5jb2Rlcl93YWl0X2luZm8gd2FpdF9pbmZvOworCWludCBy ZXQ7CisKKwlpZiAoIXBoeXNfZW5jKSB7CisJCXByX2VycigiaW52YWxpZCBlbmNvZGVyXG4iKTsK KwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJd2FpdF9pbmZvLndxID0gJnBoeXNfZW5jLT5wZW5k aW5nX2tpY2tvZmZfd3E7CisJd2FpdF9pbmZvLmF0b21pY19jbnQgPSAmcGh5c19lbmMtPnBlbmRp bmdfa2lja29mZl9jbnQ7CisJd2FpdF9pbmZvLnRpbWVvdXRfbXMgPSBLSUNLT0ZGX1RJTUVPVVRf TVM7CisKKwlpZiAoIWRwdV9lbmNvZGVyX3BoeXNfdmlkX2lzX21hc3RlcihwaHlzX2VuYykpIHsK KwkJaWYgKG5vdGlmeSAmJiBwaHlzX2VuYy0+cGFyZW50X29wcy5oYW5kbGVfZnJhbWVfZG9uZSkK KwkJCXBoeXNfZW5jLT5wYXJlbnRfb3BzLmhhbmRsZV9mcmFtZV9kb25lKAorCQkJCQlwaHlzX2Vu Yy0+cGFyZW50LCBwaHlzX2VuYywKKwkJCQkJRFBVX0VOQ09ERVJfRlJBTUVfRVZFTlRfRE9ORSk7 CisJCXJldHVybiAwOworCX0KKworCS8qIFdhaXQgZm9yIGtpY2tvZmYgdG8gY29tcGxldGUgKi8K KwlyZXQgPSBkcHVfZW5jb2Rlcl9oZWxwZXJfd2FpdF9mb3JfaXJxKHBoeXNfZW5jLCBJTlRSX0lE WF9WU1lOQywKKwkJCSZ3YWl0X2luZm8pOworCisJaWYgKHJldCA9PSAtRVRJTUVET1VUKSB7CisJ CWRwdV9lbmNvZGVyX2hlbHBlcl9yZXBvcnRfaXJxX3RpbWVvdXQocGh5c19lbmMsIElOVFJfSURY X1ZTWU5DKTsKKwl9IGVsc2UgaWYgKCFyZXQgJiYgbm90aWZ5ICYmIHBoeXNfZW5jLT5wYXJlbnRf b3BzLmhhbmRsZV9mcmFtZV9kb25lKQorCQlwaHlzX2VuYy0+cGFyZW50X29wcy5oYW5kbGVfZnJh bWVfZG9uZSgKKwkJCQlwaHlzX2VuYy0+cGFyZW50LCBwaHlzX2VuYywKKwkJCQlEUFVfRU5DT0RF Ul9GUkFNRV9FVkVOVF9ET05FKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZHB1 X2VuY29kZXJfcGh5c192aWRfd2FpdF9mb3JfdmJsYW5rKAorCQlzdHJ1Y3QgZHB1X2VuY29kZXJf cGh5cyAqcGh5c19lbmMpCit7CisJcmV0dXJuIF9kcHVfZW5jb2Rlcl9waHlzX3ZpZF93YWl0X2Zv cl92YmxhbmsocGh5c19lbmMsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBkcHVfZW5jb2Rlcl9w aHlzX3ZpZF9wcmVwYXJlX2Zvcl9raWNrb2ZmKAorCQlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAq cGh5c19lbmMsCisJCXN0cnVjdCBkcHVfZW5jb2Rlcl9raWNrb2ZmX3BhcmFtcyAqcGFyYW1zKQor eworCXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzX3ZpZCAqdmlkX2VuYzsKKwlzdHJ1Y3QgZHB1X2h3 X2N0bCAqY3RsOworCWludCByYzsKKworCWlmICghcGh5c19lbmMgfHwgIXBhcmFtcykgeworCQlE UFVfRVJST1IoImludmFsaWQgZW5jb2Rlci9wYXJhbWV0ZXJzXG4iKTsKKwkJcmV0dXJuOworCX0K Kwl2aWRfZW5jID0gdG9fZHB1X2VuY29kZXJfcGh5c192aWQocGh5c19lbmMpOworCisJY3RsID0g cGh5c19lbmMtPmh3X2N0bDsKKwlpZiAoIWN0bCB8fCAhY3RsLT5vcHMud2FpdF9yZXNldF9zdGF0 dXMpCisJCXJldHVybjsKKworCS8qCisJICogaHcgc3VwcG9ydHMgaGFyZHdhcmUgaW5pdGlhdGVk IGN0bCByZXNldCwgc28gYmVmb3JlIHdlIGtpY2tvZmYgYSBuZXcKKwkgKiBmcmFtZSwgbmVlZCB0 byBjaGVjayBhbmQgd2FpdCBmb3IgaHcgaW5pdGlhdGVkIGN0bCByZXNldCBjb21wbGV0aW9uCisJ ICovCisJcmMgPSBjdGwtPm9wcy53YWl0X3Jlc2V0X3N0YXR1cyhjdGwpOworCWlmIChyYykgewor CQlEUFVfRVJST1JfVklERU5DKHZpZF9lbmMsICJjdGwgJWQgcmVzZXQgZmFpbHVyZTogJWRcbiIs CisJCQkJY3RsLT5pZHgsIHJjKTsKKwkJZHB1X2VuY29kZXJfaGVscGVyX3VucmVnaXN0ZXJfaXJx KHBoeXNfZW5jLCBJTlRSX0lEWF9WU1lOQyk7CisJCWRwdV9kYmdfZHVtcChmYWxzZSwgX19mdW5j X18sIHRydWUsIHRydWUpOworCX0KK30KKworc3RhdGljIHZvaWQgZHB1X2VuY29kZXJfcGh5c192 aWRfZGlzYWJsZShzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqcGh5c19lbmMpCit7CisJc3RydWN0 IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdjsKKwlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5c192aWQgKnZp ZF9lbmM7CisJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOworCWludCByZXQ7CisKKwlpZiAoIXBo eXNfZW5jIHx8ICFwaHlzX2VuYy0+cGFyZW50IHx8ICFwaHlzX2VuYy0+cGFyZW50LT5kZXYgfHwK KwkJCSFwaHlzX2VuYy0+cGFyZW50LT5kZXYtPmRldl9wcml2YXRlKSB7CisJCURQVV9FUlJPUigi aW52YWxpZCBlbmNvZGVyL2RldmljZVxuIik7CisJCXJldHVybjsKKwl9CisJcHJpdiA9IHBoeXNf ZW5jLT5wYXJlbnQtPmRldi0+ZGV2X3ByaXZhdGU7CisKKwl2aWRfZW5jID0gdG9fZHB1X2VuY29k ZXJfcGh5c192aWQocGh5c19lbmMpOworCWlmICghdmlkX2VuYy0+aHdfaW50ZiB8fCAhcGh5c19l bmMtPmh3X2N0bCkgeworCQlEUFVfRVJST1IoImludmFsaWQgaHdfaW50ZiAlZCBod19jdGwgJWRc biIsCisJCQkJdmlkX2VuYy0+aHdfaW50ZiAhPSAwLCBwaHlzX2VuYy0+aHdfY3RsICE9IDApOwor CQlyZXR1cm47CisJfQorCisJRFBVX0RFQlVHX1ZJREVOQyh2aWRfZW5jLCAiXG4iKTsKKworCWlm IChXQVJOX09OKCF2aWRfZW5jLT5od19pbnRmLT5vcHMuZW5hYmxlX3RpbWluZykpCisJCXJldHVy bjsKKworCWlmIChwaHlzX2VuYy0+ZW5hYmxlX3N0YXRlID09IERQVV9FTkNfRElTQUJMRUQpIHsK KwkJRFBVX0VSUk9SKCJhbHJlYWR5IGRpc2FibGVkXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXNw aW5fbG9ja19pcnFzYXZlKHBoeXNfZW5jLT5lbmNfc3BpbmxvY2ssIGxvY2tfZmxhZ3MpOworCXZp ZF9lbmMtPmh3X2ludGYtPm9wcy5lbmFibGVfdGltaW5nKHZpZF9lbmMtPmh3X2ludGYsIDApOwor CWlmIChkcHVfZW5jb2Rlcl9waHlzX3ZpZF9pc19tYXN0ZXIocGh5c19lbmMpKQorCQlkcHVfZW5j b2Rlcl9waHlzX2luY19wZW5kaW5nKHBoeXNfZW5jKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3Jl KHBoeXNfZW5jLT5lbmNfc3BpbmxvY2ssIGxvY2tfZmxhZ3MpOworCisJLyoKKwkgKiBXYWl0IGZv ciBhIHZzeW5jIHNvIHdlIGtub3cgdGhlIEVOQUJMRT0wIGxhdGNoZWQgYmVmb3JlCisJICogdGhl IChjb25uZWN0b3IpIHNvdXJjZSBvZiB0aGUgdnN5bmMncyBnZXRzIGRpc2FibGVkLAorCSAqIG90 aGVyd2lzZSB3ZSBlbmQgdXAgaW4gYSBmdW5ueSBzdGF0ZSBpZiB3ZSByZS1lbmFibGUKKwkgKiBi ZWZvcmUgdGhlIGRpc2FibGUgbGF0Y2hlcywgd2hpY2ggcmVzdWx0cyB0aGF0IHNvbWUgb2YKKwkg KiB0aGUgc2V0dGluZ3MgY2hhbmdlcyBmb3IgdGhlIG5ldyBtb2Rlc2V0IChsaWtlIG5ldworCSAq IHNjYW5vdXQgYnVmZmVyKSBkb24ndCBsYXRjaCBwcm9wZXJseS4uCisJICovCisJaWYgKGRwdV9l bmNvZGVyX3BoeXNfdmlkX2lzX21hc3RlcihwaHlzX2VuYykpIHsKKwkJcmV0ID0gX2RwdV9lbmNv ZGVyX3BoeXNfdmlkX3dhaXRfZm9yX3ZibGFuayhwaHlzX2VuYywgZmFsc2UpOworCQlpZiAocmV0 KSB7CisJCQlhdG9taWNfc2V0KCZwaHlzX2VuYy0+cGVuZGluZ19raWNrb2ZmX2NudCwgMCk7CisJ CQlEUk1fRVJST1IoIndhaXQgZGlzYWJsZSBmYWlsZWQ6IGlkOiV1IGludGY6JWQgcmV0OiVkXG4i LAorCQkJCSAgRFJNSUQocGh5c19lbmMtPnBhcmVudCksCisJCQkJICB2aWRfZW5jLT5od19pbnRm LT5pZHggLSBJTlRGXzAsIHJldCk7CisJCX0KKwl9CisKKwlwaHlzX2VuYy0+ZW5hYmxlX3N0YXRl ID0gRFBVX0VOQ19ESVNBQkxFRDsKK30KKworc3RhdGljIHZvaWQgZHB1X2VuY29kZXJfcGh5c192 aWRfaGFuZGxlX3Bvc3Rfa2lja29mZigKKwkJc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKnBoeXNf ZW5jKQoreworCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKKwlzdHJ1Y3QgZHB1X2VuY29kZXJf cGh5c192aWQgKnZpZF9lbmM7CisKKwlpZiAoIXBoeXNfZW5jKSB7CisJCURQVV9FUlJPUigiaW52 YWxpZCBlbmNvZGVyXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXZpZF9lbmMgPSB0b19kcHVfZW5j b2Rlcl9waHlzX3ZpZChwaHlzX2VuYyk7CisJRFBVX0RFQlVHX1ZJREVOQyh2aWRfZW5jLCAiZW5h YmxlX3N0YXRlICVkXG4iLCBwaHlzX2VuYy0+ZW5hYmxlX3N0YXRlKTsKKworCS8qCisJICogVmlk ZW8gbW9kZSBtdXN0IGZsdXNoIENUTCBiZWZvcmUgZW5hYmxpbmcgdGltaW5nIGVuZ2luZQorCSAq IFZpZGVvIGVuY29kZXJzIG5lZWQgdG8gdHVybiBvbiB0aGVpciBpbnRlcmZhY2VzIG5vdworCSAq LworCWlmIChwaHlzX2VuYy0+ZW5hYmxlX3N0YXRlID09IERQVV9FTkNfRU5BQkxJTkcpIHsKKwkJ dHJhY2VfZHB1X2VuY19waHlzX3ZpZF9wb3N0X2tpY2tvZmYoRFJNSUQocGh5c19lbmMtPnBhcmVu dCksCisJCQkJICAgIHZpZF9lbmMtPmh3X2ludGYtPmlkeCAtIElOVEZfMCk7CisJCXNwaW5fbG9j a19pcnFzYXZlKHBoeXNfZW5jLT5lbmNfc3BpbmxvY2ssIGxvY2tfZmxhZ3MpOworCQl2aWRfZW5j LT5od19pbnRmLT5vcHMuZW5hYmxlX3RpbWluZyh2aWRfZW5jLT5od19pbnRmLCAxKTsKKwkJc3Bp bl91bmxvY2tfaXJxcmVzdG9yZShwaHlzX2VuYy0+ZW5jX3NwaW5sb2NrLCBsb2NrX2ZsYWdzKTsK KwkJcGh5c19lbmMtPmVuYWJsZV9zdGF0ZSA9IERQVV9FTkNfRU5BQkxFRDsKKwl9Cit9CisKK3N0 YXRpYyB2b2lkIGRwdV9lbmNvZGVyX3BoeXNfdmlkX2lycV9jb250cm9sKHN0cnVjdCBkcHVfZW5j b2Rlcl9waHlzICpwaHlzX2VuYywKKwkJYm9vbCBlbmFibGUpCit7CisJc3RydWN0IGRwdV9lbmNv ZGVyX3BoeXNfdmlkICp2aWRfZW5jOworCWludCByZXQ7CisKKwlpZiAoIXBoeXNfZW5jKQorCQly ZXR1cm47CisKKwl2aWRfZW5jID0gdG9fZHB1X2VuY29kZXJfcGh5c192aWQocGh5c19lbmMpOwor CisJdHJhY2VfZHB1X2VuY19waHlzX3ZpZF9pcnFfY3RybChEUk1JRChwaHlzX2VuYy0+cGFyZW50 KSwKKwkJCSAgICB2aWRfZW5jLT5od19pbnRmLT5pZHggLSBJTlRGXzAsCisJCQkgICAgZW5hYmxl LAorCQkJICAgIGF0b21pY19yZWFkKCZwaHlzX2VuYy0+dmJsYW5rX3JlZmNvdW50KSk7CisKKwlp ZiAoZW5hYmxlKSB7CisJCXJldCA9IGRwdV9lbmNvZGVyX3BoeXNfdmlkX2NvbnRyb2xfdmJsYW5r X2lycShwaHlzX2VuYywgdHJ1ZSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm47CisKKwkJZHB1X2Vu Y29kZXJfaGVscGVyX3JlZ2lzdGVyX2lycShwaHlzX2VuYywgSU5UUl9JRFhfVU5ERVJSVU4pOwor CX0gZWxzZSB7CisJCWRwdV9lbmNvZGVyX3BoeXNfdmlkX2NvbnRyb2xfdmJsYW5rX2lycShwaHlz X2VuYywgZmFsc2UpOworCQlkcHVfZW5jb2Rlcl9oZWxwZXJfdW5yZWdpc3Rlcl9pcnEocGh5c19l bmMsIElOVFJfSURYX1VOREVSUlVOKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRwdV9lbmNvZGVy X3BoeXNfdmlkX3NldHVwX21pc3Ioc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKnBoeXNfZW5jLAor CQkJCQkJYm9vbCBlbmFibGUsIHUzMiBmcmFtZV9jb3VudCkKK3sKKwlzdHJ1Y3QgZHB1X2VuY29k ZXJfcGh5c192aWQgKnZpZF9lbmM7CisKKwlpZiAoIXBoeXNfZW5jKQorCQlyZXR1cm47CisJdmlk X2VuYyA9IHRvX2RwdV9lbmNvZGVyX3BoeXNfdmlkKHBoeXNfZW5jKTsKKworCWlmICh2aWRfZW5j LT5od19pbnRmICYmIHZpZF9lbmMtPmh3X2ludGYtPm9wcy5zZXR1cF9taXNyKQorCQl2aWRfZW5j LT5od19pbnRmLT5vcHMuc2V0dXBfbWlzcih2aWRfZW5jLT5od19pbnRmLAorCQkJCQkJCWVuYWJs ZSwgZnJhbWVfY291bnQpOworfQorCitzdGF0aWMgdTMyIGRwdV9lbmNvZGVyX3BoeXNfdmlkX2Nv bGxlY3RfbWlzcihzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqcGh5c19lbmMpCit7CisJc3RydWN0 IGRwdV9lbmNvZGVyX3BoeXNfdmlkICp2aWRfZW5jOworCisJaWYgKCFwaHlzX2VuYykKKwkJcmV0 dXJuIDA7CisJdmlkX2VuYyA9IHRvX2RwdV9lbmNvZGVyX3BoeXNfdmlkKHBoeXNfZW5jKTsKKwor CXJldHVybiB2aWRfZW5jLT5od19pbnRmICYmIHZpZF9lbmMtPmh3X2ludGYtPm9wcy5jb2xsZWN0 X21pc3IgPworCQl2aWRfZW5jLT5od19pbnRmLT5vcHMuY29sbGVjdF9taXNyKHZpZF9lbmMtPmh3 X2ludGYpIDogMDsKK30KKworc3RhdGljIGludCBkcHVfZW5jb2Rlcl9waHlzX3ZpZF9nZXRfbGlu ZV9jb3VudCgKKwkJc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKnBoeXNfZW5jKQoreworCXN0cnVj dCBkcHVfZW5jb2Rlcl9waHlzX3ZpZCAqdmlkX2VuYzsKKworCWlmICghcGh5c19lbmMpCisJCXJl dHVybiAtRUlOVkFMOworCisJaWYgKCFkcHVfZW5jb2Rlcl9waHlzX3ZpZF9pc19tYXN0ZXIocGh5 c19lbmMpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXZpZF9lbmMgPSB0b19kcHVfZW5jb2Rlcl9w aHlzX3ZpZChwaHlzX2VuYyk7CisJaWYgKCF2aWRfZW5jLT5od19pbnRmIHx8ICF2aWRfZW5jLT5o d19pbnRmLT5vcHMuZ2V0X2xpbmVfY291bnQpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJu IHZpZF9lbmMtPmh3X2ludGYtPm9wcy5nZXRfbGluZV9jb3VudCh2aWRfZW5jLT5od19pbnRmKTsK K30KKworc3RhdGljIHZvaWQgZHB1X2VuY29kZXJfcGh5c192aWRfaW5pdF9vcHMoc3RydWN0IGRw dV9lbmNvZGVyX3BoeXNfb3BzICpvcHMpCit7CisJb3BzLT5pc19tYXN0ZXIgPSBkcHVfZW5jb2Rl cl9waHlzX3ZpZF9pc19tYXN0ZXI7CisJb3BzLT5tb2RlX3NldCA9IGRwdV9lbmNvZGVyX3BoeXNf dmlkX21vZGVfc2V0OworCW9wcy0+bW9kZV9maXh1cCA9IGRwdV9lbmNvZGVyX3BoeXNfdmlkX21v ZGVfZml4dXA7CisJb3BzLT5lbmFibGUgPSBkcHVfZW5jb2Rlcl9waHlzX3ZpZF9lbmFibGU7CisJ b3BzLT5kaXNhYmxlID0gZHB1X2VuY29kZXJfcGh5c192aWRfZGlzYWJsZTsKKwlvcHMtPmRlc3Ry b3kgPSBkcHVfZW5jb2Rlcl9waHlzX3ZpZF9kZXN0cm95OworCW9wcy0+Z2V0X2h3X3Jlc291cmNl cyA9IGRwdV9lbmNvZGVyX3BoeXNfdmlkX2dldF9od19yZXNvdXJjZXM7CisJb3BzLT5jb250cm9s X3ZibGFua19pcnEgPSBkcHVfZW5jb2Rlcl9waHlzX3ZpZF9jb250cm9sX3ZibGFua19pcnE7CisJ b3BzLT53YWl0X2Zvcl9jb21taXRfZG9uZSA9IGRwdV9lbmNvZGVyX3BoeXNfdmlkX3dhaXRfZm9y X3ZibGFuazsKKwlvcHMtPndhaXRfZm9yX3ZibGFuayA9IGRwdV9lbmNvZGVyX3BoeXNfdmlkX3dh aXRfZm9yX3ZibGFuazsKKwlvcHMtPndhaXRfZm9yX3R4X2NvbXBsZXRlID0gZHB1X2VuY29kZXJf cGh5c192aWRfd2FpdF9mb3JfdmJsYW5rOworCW9wcy0+aXJxX2NvbnRyb2wgPSBkcHVfZW5jb2Rl cl9waHlzX3ZpZF9pcnFfY29udHJvbDsKKwlvcHMtPnByZXBhcmVfZm9yX2tpY2tvZmYgPSBkcHVf ZW5jb2Rlcl9waHlzX3ZpZF9wcmVwYXJlX2Zvcl9raWNrb2ZmOworCW9wcy0+aGFuZGxlX3Bvc3Rf a2lja29mZiA9IGRwdV9lbmNvZGVyX3BoeXNfdmlkX2hhbmRsZV9wb3N0X2tpY2tvZmY7CisJb3Bz LT5uZWVkc19zaW5nbGVfZmx1c2ggPSBkcHVfZW5jb2Rlcl9waHlzX3ZpZF9uZWVkc19zaW5nbGVf Zmx1c2g7CisJb3BzLT5zZXR1cF9taXNyID0gZHB1X2VuY29kZXJfcGh5c192aWRfc2V0dXBfbWlz cjsKKwlvcHMtPmNvbGxlY3RfbWlzciA9IGRwdV9lbmNvZGVyX3BoeXNfdmlkX2NvbGxlY3RfbWlz cjsKKwlvcHMtPmh3X3Jlc2V0ID0gZHB1X2VuY29kZXJfaGVscGVyX2h3X3Jlc2V0OworCW9wcy0+ Z2V0X2xpbmVfY291bnQgPSBkcHVfZW5jb2Rlcl9waHlzX3ZpZF9nZXRfbGluZV9jb3VudDsKK30K Kworc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKmRwdV9lbmNvZGVyX3BoeXNfdmlkX2luaXQoCisJ CXN0cnVjdCBkcHVfZW5jX3BoeXNfaW5pdF9wYXJhbXMgKnApCit7CisJc3RydWN0IGRwdV9lbmNv ZGVyX3BoeXMgKnBoeXNfZW5jID0gTlVMTDsKKwlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5c192aWQg KnZpZF9lbmMgPSBOVUxMOworCXN0cnVjdCBkcHVfcm1faHdfaXRlciBpdGVyOworCXN0cnVjdCBk cHVfaHdfbWRwICpod19tZHA7CisJc3RydWN0IGRwdV9lbmNvZGVyX2lycSAqaXJxOworCWludCBp LCByZXQgPSAwOworCisJaWYgKCFwKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZmFpbDsK Kwl9CisKKwl2aWRfZW5jID0ga3phbGxvYyhzaXplb2YoKnZpZF9lbmMpLCBHRlBfS0VSTkVMKTsK KwlpZiAoIXZpZF9lbmMpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KKwor CXBoeXNfZW5jID0gJnZpZF9lbmMtPmJhc2U7CisKKwlod19tZHAgPSBkcHVfcm1fZ2V0X21kcCgm cC0+ZHB1X2ttcy0+cm0pOworCWlmIChJU19FUlJfT1JfTlVMTChod19tZHApKSB7CisJCXJldCA9 IFBUUl9FUlIoaHdfbWRwKTsKKwkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gZ2V0IG1kcHRvcFxuIik7 CisJCWdvdG8gZmFpbDsKKwl9CisJcGh5c19lbmMtPmh3X21kcHRvcCA9IGh3X21kcDsKKwlwaHlz X2VuYy0+aW50Zl9pZHggPSBwLT5pbnRmX2lkeDsKKworCS8qKgorCSAqIGh3X2ludGYgcmVzb3Vy Y2UgcGVybWFuZW50bHkgYXNzaWduZWQgdG8gdGhpcyBlbmNvZGVyCisJICogT3RoZXIgcmVzb3Vy Y2VzIGFsbG9jYXRlZCBhdCBhdG9taWMgY29tbWl0IHRpbWUgYnkgdXNlIGNhc2UKKwkgKi8KKwlk cHVfcm1faW5pdF9od19pdGVyKCZpdGVyLCAwLCBEUFVfSFdfQkxLX0lOVEYpOworCXdoaWxlIChk cHVfcm1fZ2V0X2h3KCZwLT5kcHVfa21zLT5ybSwgJml0ZXIpKSB7CisJCXN0cnVjdCBkcHVfaHdf aW50ZiAqaHdfaW50ZiA9IChzdHJ1Y3QgZHB1X2h3X2ludGYgKilpdGVyLmh3OworCisJCWlmICho d19pbnRmLT5pZHggPT0gcC0+aW50Zl9pZHgpIHsKKwkJCXZpZF9lbmMtPmh3X2ludGYgPSBod19p bnRmOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIXZpZF9lbmMtPmh3X2ludGYpIHsKKwkJ cmV0ID0gLUVJTlZBTDsKKwkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gZ2V0IGh3X2ludGZcbiIpOwor CQlnb3RvIGZhaWw7CisJfQorCisJRFBVX0RFQlVHX1ZJREVOQyh2aWRfZW5jLCAiXG4iKTsKKwor CWRwdV9lbmNvZGVyX3BoeXNfdmlkX2luaXRfb3BzKCZwaHlzX2VuYy0+b3BzKTsKKwlwaHlzX2Vu Yy0+cGFyZW50ID0gcC0+cGFyZW50OworCXBoeXNfZW5jLT5wYXJlbnRfb3BzID0gcC0+cGFyZW50 X29wczsKKwlwaHlzX2VuYy0+ZHB1X2ttcyA9IHAtPmRwdV9rbXM7CisJcGh5c19lbmMtPnNwbGl0 X3JvbGUgPSBwLT5zcGxpdF9yb2xlOworCXBoeXNfZW5jLT5pbnRmX21vZGUgPSBJTlRGX01PREVf VklERU87CisJcGh5c19lbmMtPmVuY19zcGlubG9jayA9IHAtPmVuY19zcGlubG9jazsKKwlmb3Ig KGkgPSAwOyBpIDwgSU5UUl9JRFhfTUFYOyBpKyspIHsKKwkJaXJxID0gJnBoeXNfZW5jLT5pcnFb aV07CisJCUlOSVRfTElTVF9IRUFEKCZpcnEtPmNiLmxpc3QpOworCQlpcnEtPmlycV9pZHggPSAt RUlOVkFMOworCQlpcnEtPmh3X2lkeCA9IC1FSU5WQUw7CisJCWlycS0+Y2IuYXJnID0gcGh5c19l bmM7CisJfQorCisJaXJxID0gJnBoeXNfZW5jLT5pcnFbSU5UUl9JRFhfVlNZTkNdOworCWlycS0+ bmFtZSA9ICJ2c3luY19pcnEiOworCWlycS0+aW50cl90eXBlID0gRFBVX0lSUV9UWVBFX0lOVEZf VlNZTkM7CisJaXJxLT5pbnRyX2lkeCA9IElOVFJfSURYX1ZTWU5DOworCWlycS0+Y2IuZnVuYyA9 IGRwdV9lbmNvZGVyX3BoeXNfdmlkX3ZibGFua19pcnE7CisKKwlpcnEgPSAmcGh5c19lbmMtPmly cVtJTlRSX0lEWF9VTkRFUlJVTl07CisJaXJxLT5uYW1lID0gInVuZGVycnVuIjsKKwlpcnEtPmlu dHJfdHlwZSA9IERQVV9JUlFfVFlQRV9JTlRGX1VOREVSX1JVTjsKKwlpcnEtPmludHJfaWR4ID0g SU5UUl9JRFhfVU5ERVJSVU47CisJaXJxLT5jYi5mdW5jID0gZHB1X2VuY29kZXJfcGh5c192aWRf dW5kZXJydW5faXJxOworCisJYXRvbWljX3NldCgmcGh5c19lbmMtPnZibGFua19yZWZjb3VudCwg MCk7CisJYXRvbWljX3NldCgmcGh5c19lbmMtPnBlbmRpbmdfa2lja29mZl9jbnQsIDApOworCWlu aXRfd2FpdHF1ZXVlX2hlYWQoJnBoeXNfZW5jLT5wZW5kaW5nX2tpY2tvZmZfd3EpOworCXBoeXNf ZW5jLT5lbmFibGVfc3RhdGUgPSBEUFVfRU5DX0RJU0FCTEVEOworCisJRFBVX0RFQlVHX1ZJREVO Qyh2aWRfZW5jLCAiY3JlYXRlZCBpbnRmIGlkeDolZFxuIiwgcC0+aW50Zl9pZHgpOworCisJcmV0 dXJuIHBoeXNfZW5jOworCitmYWlsOgorCURQVV9FUlJPUigiZmFpbGVkIHRvIGNyZWF0ZSBlbmNv ZGVyXG4iKTsKKwlpZiAodmlkX2VuYykKKwkJZHB1X2VuY29kZXJfcGh5c192aWRfZGVzdHJveShw aHlzX2VuYyk7CisKKwlyZXR1cm4gRVJSX1BUUihyZXQpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2Zvcm1hdHMuYyBiL2RyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9mb3JtYXRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAwLi40NGZlZmM5N2UxYjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfZm9ybWF0cy5jCkBAIC0wLDAgKzEsMTI3NiBAQAorLyogQ29w eXJpZ2h0IChjKSAyMDE1LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJl c2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVyc2lv biAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2RlZmluZSBwcl9mbXQoZm10KQkiW2RybTolczol ZF0gIiBmbXQsIF9fZnVuY19fLCBfX0xJTkVfXworCisjaW5jbHVkZSA8dWFwaS9kcm0vZHJtX2Zv dXJjYy5oPgorI2luY2x1ZGUgPHVhcGkvbWVkaWEvbXNtX21lZGlhX2luZm8uaD4KKworI2luY2x1 ZGUgImRwdV9rbXMuaCIKKyNpbmNsdWRlICJkcHVfZm9ybWF0cy5oIgorCisjZGVmaW5lIERQVV9V QldDX01FVEFfTUFDUk9fV19ICQkxNgorI2RlZmluZSBEUFVfVUJXQ19NRVRBX0JMT0NLX1NJWkUJ MjU2CisjZGVmaW5lIERQVV9VQldDX1BMQU5FX1NJWkVfQUxJR05NRU5UCTQwOTYKKworI2RlZmlu ZSBEUFVfVElMRV9IRUlHSFRfREVGQVVMVAkxCisjZGVmaW5lIERQVV9USUxFX0hFSUdIVF9USUxF RAk0CisjZGVmaW5lIERQVV9USUxFX0hFSUdIVF9VQldDCTQKKyNkZWZpbmUgRFBVX1RJTEVfSEVJ R0hUX05WMTIJOAorCisjZGVmaW5lIERQVV9NQVhfSU1HX1dJRFRICQkweDNGRkYKKyNkZWZpbmUg RFBVX01BWF9JTUdfSEVJR0hUCQkweDNGRkYKKworLyoqCisgKiBEUFUgc3VwcG9ydGVkIGZvcm1h dCBwYWNraW5nLCBicHAsIGFuZCBvdGhlciBmb3JtYXQKKyAqIGluZm9ybWF0aW9uLgorICogRFBV IGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIGludGVybGVhdmVkIFJHQiBmb3JtYXRzCisgKiBVQldD IHN1cHBvcnQgZm9yIGEgcGl4ZWwgZm9ybWF0IGlzIGluZGljYXRlZCBieSB0aGUgZmxhZywKKyAq IHRoZXJlIGlzIGFkZGl0aW9uYWwgbWV0YSBkYXRhIHBsYW5lIGZvciBzdWNoIGZvcm1hdHMKKyAq LworCisjZGVmaW5lIElOVEVSTEVBVkVEX1JHQl9GTVQoZm10LCBhLCByLCBnLCBiLCBlMCwgZTEs IGUyLCBlMywgdWMsIGFscGhhLCAgIFwKK2JwLCBmbGcsIGZtLCBucCkgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisJLmJhc2UucGl4ZWxfZm9ybWF0ID0gRFJNX0ZPUk1BVF8gIyMgZm10LCAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorCS5mZXRjaF9wbGFuZXMgPSBEUFVfUExBTkVfSU5URVJMRUFW RUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkuYWxwaGFfZW5hYmxlID0gYWxwaGEs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJLmVsZW1lbnQg PSB7IChlMCksIChlMSksIChlMiksIChlMykgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorCS5iaXRzID0geyBnLCBiLCByLCBhIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKwkuY2hyb21hX3NhbXBsZSA9IERQVV9DSFJPTUFfUkdCLCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJLnVucGFja19hbGlnbl9tc2IgPSAwLCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCS51bnBhY2tfdGlnaHQg PSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwku dW5wYWNrX2NvdW50ID0gdWMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisJLmJwcCA9IGJwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorCS5mZXRjaF9tb2RlID0gZm0sICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkuZmxhZyA9IHsoZmxnKX0sICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJLm51bV9w bGFuZXMgPSBucCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorCS50aWxlX2hlaWdodCA9IERQVV9USUxFX0hFSUdIVF9ERUZBVUxUICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBJTlRFUkxFQVZFRF9SR0JfRk1UX1RJTEVE KGZtdCwgYSwgciwgZywgYiwgZTAsIGUxLCBlMiwgZTMsIHVjLCAgICBcCithbHBoYSwgYnAsIGZs ZywgZm0sIG5wLCB0aCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorCS5iYXNlLnBpeGVsX2Zvcm1hdCA9IERSTV9GT1JN QVRfICMjIGZtdCwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkuZmV0Y2hfcGxhbmVzID0g RFBVX1BMQU5FX0lOVEVSTEVBVkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJLmFs cGhhX2VuYWJsZSA9IGFscGhhLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorCS5lbGVtZW50ID0geyAoZTApLCAoZTEpLCAoZTIpLCAoZTMpIH0sICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKwkuYml0cyA9IHsgZywgYiwgciwgYSB9LCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJLmNocm9tYV9zYW1wbGUgPSBEUFVf Q0hST01BX1JHQiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCS51bnBhY2tf YWxpZ25fbXNiID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKwkudW5wYWNrX3RpZ2h0ID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisJLnVucGFja19jb3VudCA9IHVjLCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCS5icHAgPSBicCwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkuZmV0Y2hfbW9kZSA9 IGZtLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJ LmZsYWcgPSB7KGZsZyl9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorCS5udW1fcGxhbmVzID0gbnAsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKwkudGlsZV9oZWlnaHQgPSB0aCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKworI2RlZmluZSBJTlRF UkxFQVZFRF9ZVVZfRk1UKGZtdCwgYSwgciwgZywgYiwgZTAsIGUxLCBlMiwgZTMsICAgICAgICAg ICAgICBcCithbHBoYSwgY2hyb21hLCBjb3VudCwgYnAsIGZsZywgZm0sIG5wKSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCS5iYXNlLnBp eGVsX2Zvcm1hdCA9IERSTV9GT1JNQVRfICMjIGZtdCwgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKwkuZmV0Y2hfcGxhbmVzID0gRFBVX1BMQU5FX0lOVEVSTEVBVkVELCAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisJLmFscGhhX2VuYWJsZSA9IGFscGhhLCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCS5lbGVtZW50ID0geyAoZTApLCAoZTEpLCAo ZTIpLCAoZTMpfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkuYml0cyA9IHsgZywg YiwgciwgYSB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJ LmNocm9tYV9zYW1wbGUgPSBjaHJvbWEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorCS51bnBhY2tfYWxpZ25fbXNiID0gMCwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKwkudW5wYWNrX3RpZ2h0ID0gMSwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJLnVucGFja19jb3VudCA9IGNv dW50LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCS5icHAg PSBicCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKwkuZmV0Y2hfbW9kZSA9IGZtLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisJLmZsYWcgPSB7KGZsZyl9LCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCS5udW1fcGxhbmVzID0gbnAsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkudGlsZV9oZWln aHQgPSBEUFVfVElMRV9IRUlHSFRfREVGQVVMVCAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Cit9CisKKyNkZWZpbmUgUFNFVURPX1lVVl9GTVQoZm10LCBhLCByLCBnLCBiLCBlMCwgZTEsIGNo cm9tYSwgZmxnLCBmbSwgbnApICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJLmJhc2UucGl4 ZWxfZm9ybWF0ID0gRFJNX0ZPUk1BVF8gIyMgZm10LCAgICAgICAgICAgICAgICAgICAgICAgICAg XAorCS5mZXRjaF9wbGFuZXMgPSBEUFVfUExBTkVfUFNFVURPX1BMQU5BUiwgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKwkuYWxwaGFfZW5hYmxlID0gZmFsc2UsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJLmVsZW1lbnQgPSB7IChlMCksIChlMSksIDAs IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCS5iaXRzID0geyBnLCBi LCByLCBhIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwku Y2hyb21hX3NhbXBsZSA9IGNocm9tYSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisJLnVucGFja19hbGlnbl9tc2IgPSAwLCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorCS51bnBhY2tfdGlnaHQgPSAxLCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkudW5wYWNrX2NvdW50ID0gMiwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJLmJwcCA9 IDIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorCS5mZXRjaF9tb2RlID0gZm0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKwkuZmxhZyA9IHsoZmxnKX0sICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJLm51bV9wbGFuZXMgPSBucCwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCS50aWxlX2hlaWdo dCA9IERQVV9USUxFX0hFSUdIVF9ERUZBVUxUICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK K30KKworI2RlZmluZSBQU0VVRE9fWVVWX0ZNVF9USUxFRChmbXQsIGEsIHIsIGcsIGIsIGUwLCBl MSwgY2hyb21hLCAgICAgICAgICAgICBcCitmbGcsIGZtLCBucCwgdGgpICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorCS5iYXNlLnBpeGVsX2Zvcm1hdCA9IERSTV9GT1JNQVRfICMjIGZtdCwgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKwkuZmV0Y2hfcGxhbmVzID0gRFBVX1BMQU5FX1BTRVVET19Q TEFOQVIsICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJLmFscGhhX2VuYWJsZSA9IGZhbHNl LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCS5lbGVtZW50 ID0geyAoZTApLCAoZTEpLCAwLCAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKwkuYml0cyA9IHsgZywgYiwgciwgYSB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisJLmNocm9tYV9zYW1wbGUgPSBjaHJvbWEsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCS51bnBhY2tfYWxpZ25fbXNiID0gMCwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkudW5wYWNrX3RpZ2h0 ID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJ LnVucGFja19jb3VudCA9IDIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorCS5icHAgPSAyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKwkuZmV0Y2hfbW9kZSA9IGZtLCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJLmZsYWcgPSB7KGZsZyl9LCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCS5udW1f cGxhbmVzID0gbnAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKwkudGlsZV9oZWlnaHQgPSB0aCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgUFNFVURPX1lVVl9GTVRfTE9PU0UoZm10 LCBhLCByLCBnLCBiLCBlMCwgZTEsIGNocm9tYSwgZmxnLCBmbSwgbnApXAoreyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisJLmJhc2UucGl4ZWxfZm9ybWF0ID0gRFJNX0ZPUk1BVF8gIyMgZm10LCAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorCS5mZXRjaF9wbGFuZXMgPSBEUFVfUExBTkVfUFNFVURPX1BM QU5BUiwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkuYWxwaGFfZW5hYmxlID0gZmFsc2Us ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJLmVsZW1lbnQg PSB7IChlMCksIChlMSksIDAsIDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorCS5iaXRzID0geyBnLCBiLCByLCBhIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKwkuY2hyb21hX3NhbXBsZSA9IGNocm9tYSwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJLnVucGFja19hbGlnbl9tc2IgPSAxLCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCS51bnBhY2tfdGlnaHQg PSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwku dW5wYWNrX2NvdW50ID0gMiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisJLmJwcCA9IDIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorCS5mZXRjaF9tb2RlID0gZm0sICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkuZmxhZyA9IHsoZmxnKX0sICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJLm51bV9w bGFuZXMgPSBucCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorCS50aWxlX2hlaWdodCA9IERQVV9USUxFX0hFSUdIVF9ERUZBVUxUICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBQU0VVRE9fWVVWX0ZNVF9MT09TRV9USUxF RChmbXQsIGEsIHIsIGcsIGIsIGUwLCBlMSwgY2hyb21hLCAgICAgICBcCitmbGcsIGZtLCBucCwg dGgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorCS5iYXNlLnBpeGVsX2Zvcm1hdCA9IERSTV9GT1JN QVRfICMjIGZtdCwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkuZmV0Y2hfcGxhbmVzID0g RFBVX1BMQU5FX1BTRVVET19QTEFOQVIsICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJLmFs cGhhX2VuYWJsZSA9IGZhbHNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorCS5lbGVtZW50ID0geyAoZTApLCAoZTEpLCAwLCAwIH0sICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKwkuYml0cyA9IHsgZywgYiwgciwgYSB9LCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJLmNocm9tYV9zYW1wbGUgPSBjaHJv bWEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCS51bnBhY2tf YWxpZ25fbXNiID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKwkudW5wYWNrX3RpZ2h0ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisJLnVucGFja19jb3VudCA9IDIsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCS5icHAgPSAyLCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkuZmV0Y2hfbW9kZSA9 IGZtLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJ LmZsYWcgPSB7KGZsZyl9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorCS5udW1fcGxhbmVzID0gbnAsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKwkudGlsZV9oZWlnaHQgPSB0aCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKworI2RlZmluZSBQTEFO QVJfWVVWX0ZNVChmbXQsIGEsIHIsIGcsIGIsIGUwLCBlMSwgZTIsIGFscGhhLCBjaHJvbWEsIGJw LCAgICBcCitmbGcsIGZtLCBucCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkuYmFzZS5waXhlbF9mb3Jt YXQgPSBEUk1fRk9STUFUXyAjIyBmbXQsICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJLmZl dGNoX3BsYW5lcyA9IERQVV9QTEFORV9QTEFOQVIsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorCS5hbHBoYV9lbmFibGUgPSBhbHBoYSwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKwkuZWxlbWVudCA9IHsgKGUwKSwgKGUxKSwgKGUyKSwgMCB9 LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJLmJpdHMgPSB7IGcsIGIsIHIsIGEg fSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCS5jaHJvbWFf c2FtcGxlID0gY2hyb21hLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKwkudW5wYWNrX2FsaWduX21zYiA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisJLnVucGFja190aWdodCA9IDEsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCS51bnBhY2tfY291bnQgPSAxLCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkuYnBwID0gYnAsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJ LmZldGNoX21vZGUgPSBmbSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorCS5mbGFnID0geyhmbGcpfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKwkubnVtX3BsYW5lcyA9IG5wLCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJLnRpbGVfaGVpZ2h0ID0gRFBV X1RJTEVfSEVJR0hUX0RFRkFVTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisv KgorICogc3RydWN0IGRwdV9tZWRpYV9jb2xvcl9tYXAgLSBtYXBzIGRybSBmb3JtYXQgdG8gbWVk aWEgZm9ybWF0CisgKiBAZm9ybWF0OiBEUk0gYmFzZSBwaXhlbCBmb3JtYXQKKyAqIEBjb2xvcjog TWVkaWEgQVBJIGNvbG9yIHJlbGF0ZWQgdG8gRFJNIGZvcm1hdAorICovCitzdHJ1Y3QgZHB1X21l ZGlhX2NvbG9yX21hcCB7CisJdWludDMyX3QgZm9ybWF0OworCXVpbnQzMl90IGNvbG9yOworfTsK Kworc3RhdGljIGNvbnN0IHN0cnVjdCBkcHVfZm9ybWF0IGRwdV9mb3JtYXRfbWFwW10gPSB7CisJ SU5URVJMRUFWRURfUkdCX0ZNVChBUkdCODg4OCwKKwkJQ09MT1JfOEJJVCwgQ09MT1JfOEJJVCwg Q09MT1JfOEJJVCwgQ09MT1JfOEJJVCwKKwkJQzFfQl9DYiwgQzBfR19ZLCBDMl9SX0NyLCBDM19B TFBIQSwgNCwKKwkJdHJ1ZSwgNCwgMCwKKwkJRFBVX0ZFVENIX0xJTkVBUiwgMSksCisKKwlJTlRF UkxFQVZFRF9SR0JfRk1UKEFCR1I4ODg4LAorCQlDT0xPUl84QklULCBDT0xPUl84QklULCBDT0xP Ul84QklULCBDT0xPUl84QklULAorCQlDMl9SX0NyLCBDMF9HX1ksIEMxX0JfQ2IsIEMzX0FMUEhB LCA0LAorCQl0cnVlLCA0LCAwLAorCQlEUFVfRkVUQ0hfTElORUFSLCAxKSwKKworCUlOVEVSTEVB VkVEX1JHQl9GTVQoWEJHUjg4ODgsCisJCUNPTE9SXzhCSVQsIENPTE9SXzhCSVQsIENPTE9SXzhC SVQsIENPTE9SXzhCSVQsCisJCUMyX1JfQ3IsIEMwX0dfWSwgQzFfQl9DYiwgQzNfQUxQSEEsIDQs CisJCXRydWUsIDQsIDAsCisJCURQVV9GRVRDSF9MSU5FQVIsIDEpLAorCisJSU5URVJMRUFWRURf UkdCX0ZNVChSR0JBODg4OCwKKwkJQ09MT1JfOEJJVCwgQ09MT1JfOEJJVCwgQ09MT1JfOEJJVCwg Q09MT1JfOEJJVCwKKwkJQzNfQUxQSEEsIEMxX0JfQ2IsIEMwX0dfWSwgQzJfUl9DciwgNCwKKwkJ dHJ1ZSwgNCwgMCwKKwkJRFBVX0ZFVENIX0xJTkVBUiwgMSksCisKKwlJTlRFUkxFQVZFRF9SR0Jf Rk1UKEJHUkE4ODg4LAorCQlDT0xPUl84QklULCBDT0xPUl84QklULCBDT0xPUl84QklULCBDT0xP Ul84QklULAorCQlDM19BTFBIQSwgQzJfUl9DciwgQzBfR19ZLCBDMV9CX0NiLCA0LAorCQl0cnVl LCA0LCAwLAorCQlEUFVfRkVUQ0hfTElORUFSLCAxKSwKKworCUlOVEVSTEVBVkVEX1JHQl9GTVQo QkdSWDg4ODgsCisJCUNPTE9SXzhCSVQsIENPTE9SXzhCSVQsIENPTE9SXzhCSVQsIENPTE9SXzhC SVQsCisJCUMzX0FMUEhBLCBDMl9SX0NyLCBDMF9HX1ksIEMxX0JfQ2IsIDQsCisJCWZhbHNlLCA0 LCAwLAorCQlEUFVfRkVUQ0hfTElORUFSLCAxKSwKKworCUlOVEVSTEVBVkVEX1JHQl9GTVQoWFJH Qjg4ODgsCisJCUNPTE9SXzhCSVQsIENPTE9SXzhCSVQsIENPTE9SXzhCSVQsIENPTE9SXzhCSVQs CisJCUMxX0JfQ2IsIEMwX0dfWSwgQzJfUl9DciwgQzNfQUxQSEEsIDQsCisJCWZhbHNlLCA0LCAw LAorCQlEUFVfRkVUQ0hfTElORUFSLCAxKSwKKworCUlOVEVSTEVBVkVEX1JHQl9GTVQoUkdCWDg4 ODgsCisJCUNPTE9SXzhCSVQsIENPTE9SXzhCSVQsIENPTE9SXzhCSVQsIENPTE9SXzhCSVQsCisJ CUMzX0FMUEhBLCBDMV9CX0NiLCBDMF9HX1ksIEMyX1JfQ3IsIDQsCisJCWZhbHNlLCA0LCAwLAor CQlEUFVfRkVUQ0hfTElORUFSLCAxKSwKKworCUlOVEVSTEVBVkVEX1JHQl9GTVQoUkdCODg4LAor CQkwLCBDT0xPUl84QklULCBDT0xPUl84QklULCBDT0xPUl84QklULAorCQlDMV9CX0NiLCBDMF9H X1ksIEMyX1JfQ3IsIDAsIDMsCisJCWZhbHNlLCAzLCAwLAorCQlEUFVfRkVUQ0hfTElORUFSLCAx KSwKKworCUlOVEVSTEVBVkVEX1JHQl9GTVQoQkdSODg4LAorCQkwLCBDT0xPUl84QklULCBDT0xP Ul84QklULCBDT0xPUl84QklULAorCQlDMl9SX0NyLCBDMF9HX1ksIEMxX0JfQ2IsIDAsIDMsCisJ CWZhbHNlLCAzLCAwLAorCQlEUFVfRkVUQ0hfTElORUFSLCAxKSwKKworCUlOVEVSTEVBVkVEX1JH Ql9GTVQoUkdCNTY1LAorCQkwLCBDT0xPUl81QklULCBDT0xPUl82QklULCBDT0xPUl81QklULAor CQlDMV9CX0NiLCBDMF9HX1ksIEMyX1JfQ3IsIDAsIDMsCisJCWZhbHNlLCAyLCAwLAorCQlEUFVf RkVUQ0hfTElORUFSLCAxKSwKKworCUlOVEVSTEVBVkVEX1JHQl9GTVQoQkdSNTY1LAorCQkwLCBD T0xPUl81QklULCBDT0xPUl82QklULCBDT0xPUl81QklULAorCQlDMl9SX0NyLCBDMF9HX1ksIEMx X0JfQ2IsIDAsIDMsCisJCWZhbHNlLCAyLCAwLAorCQlEUFVfRkVUQ0hfTElORUFSLCAxKSwKKwor CUlOVEVSTEVBVkVEX1JHQl9GTVQoQVJHQjE1NTUsCisJCUNPTE9SX0FMUEhBXzFCSVQsIENPTE9S XzVCSVQsIENPTE9SXzVCSVQsIENPTE9SXzVCSVQsCisJCUMxX0JfQ2IsIEMwX0dfWSwgQzJfUl9D ciwgQzNfQUxQSEEsIDQsCisJCXRydWUsIDIsIDAsCisJCURQVV9GRVRDSF9MSU5FQVIsIDEpLAor CisJSU5URVJMRUFWRURfUkdCX0ZNVChBQkdSMTU1NSwKKwkJQ09MT1JfQUxQSEFfMUJJVCwgQ09M T1JfNUJJVCwgQ09MT1JfNUJJVCwgQ09MT1JfNUJJVCwKKwkJQzJfUl9DciwgQzBfR19ZLCBDMV9C X0NiLCBDM19BTFBIQSwgNCwKKwkJdHJ1ZSwgMiwgMCwKKwkJRFBVX0ZFVENIX0xJTkVBUiwgMSks CisKKwlJTlRFUkxFQVZFRF9SR0JfRk1UKFJHQkE1NTUxLAorCQlDT0xPUl9BTFBIQV8xQklULCBD T0xPUl81QklULCBDT0xPUl81QklULCBDT0xPUl81QklULAorCQlDM19BTFBIQSwgQzFfQl9DYiwg QzBfR19ZLCBDMl9SX0NyLCA0LAorCQl0cnVlLCAyLCAwLAorCQlEUFVfRkVUQ0hfTElORUFSLCAx KSwKKworCUlOVEVSTEVBVkVEX1JHQl9GTVQoQkdSQTU1NTEsCisJCUNPTE9SX0FMUEhBXzFCSVQs IENPTE9SXzVCSVQsIENPTE9SXzVCSVQsIENPTE9SXzVCSVQsCisJCUMzX0FMUEhBLCBDMl9SX0Ny LCBDMF9HX1ksIEMxX0JfQ2IsIDQsCisJCXRydWUsIDIsIDAsCisJCURQVV9GRVRDSF9MSU5FQVIs IDEpLAorCisJSU5URVJMRUFWRURfUkdCX0ZNVChYUkdCMTU1NSwKKwkJQ09MT1JfQUxQSEFfMUJJ VCwgQ09MT1JfNUJJVCwgQ09MT1JfNUJJVCwgQ09MT1JfNUJJVCwKKwkJQzFfQl9DYiwgQzBfR19Z LCBDMl9SX0NyLCBDM19BTFBIQSwgNCwKKwkJZmFsc2UsIDIsIDAsCisJCURQVV9GRVRDSF9MSU5F QVIsIDEpLAorCisJSU5URVJMRUFWRURfUkdCX0ZNVChYQkdSMTU1NSwKKwkJQ09MT1JfQUxQSEFf MUJJVCwgQ09MT1JfNUJJVCwgQ09MT1JfNUJJVCwgQ09MT1JfNUJJVCwKKwkJQzJfUl9DciwgQzBf R19ZLCBDMV9CX0NiLCBDM19BTFBIQSwgNCwKKwkJZmFsc2UsIDIsIDAsCisJCURQVV9GRVRDSF9M SU5FQVIsIDEpLAorCisJSU5URVJMRUFWRURfUkdCX0ZNVChSR0JYNTU1MSwKKwkJQ09MT1JfQUxQ SEFfMUJJVCwgQ09MT1JfNUJJVCwgQ09MT1JfNUJJVCwgQ09MT1JfNUJJVCwKKwkJQzNfQUxQSEEs IEMxX0JfQ2IsIEMwX0dfWSwgQzJfUl9DciwgNCwKKwkJZmFsc2UsIDIsIDAsCisJCURQVV9GRVRD SF9MSU5FQVIsIDEpLAorCisJSU5URVJMRUFWRURfUkdCX0ZNVChCR1JYNTU1MSwKKwkJQ09MT1Jf QUxQSEFfMUJJVCwgQ09MT1JfNUJJVCwgQ09MT1JfNUJJVCwgQ09MT1JfNUJJVCwKKwkJQzNfQUxQ SEEsIEMyX1JfQ3IsIEMwX0dfWSwgQzFfQl9DYiwgNCwKKwkJZmFsc2UsIDIsIDAsCisJCURQVV9G RVRDSF9MSU5FQVIsIDEpLAorCisJSU5URVJMRUFWRURfUkdCX0ZNVChBUkdCNDQ0NCwKKwkJQ09M T1JfQUxQSEFfNEJJVCwgQ09MT1JfNEJJVCwgQ09MT1JfNEJJVCwgQ09MT1JfNEJJVCwKKwkJQzFf Ql9DYiwgQzBfR19ZLCBDMl9SX0NyLCBDM19BTFBIQSwgNCwKKwkJdHJ1ZSwgMiwgMCwKKwkJRFBV X0ZFVENIX0xJTkVBUiwgMSksCisKKwlJTlRFUkxFQVZFRF9SR0JfRk1UKEFCR1I0NDQ0LAorCQlD T0xPUl9BTFBIQV80QklULCBDT0xPUl80QklULCBDT0xPUl80QklULCBDT0xPUl80QklULAorCQlD Ml9SX0NyLCBDMF9HX1ksIEMxX0JfQ2IsIEMzX0FMUEhBLCA0LAorCQl0cnVlLCAyLCAwLAorCQlE UFVfRkVUQ0hfTElORUFSLCAxKSwKKworCUlOVEVSTEVBVkVEX1JHQl9GTVQoUkdCQTQ0NDQsCisJ CUNPTE9SX0FMUEhBXzRCSVQsIENPTE9SXzRCSVQsIENPTE9SXzRCSVQsIENPTE9SXzRCSVQsCisJ CUMzX0FMUEhBLCBDMV9CX0NiLCBDMF9HX1ksIEMyX1JfQ3IsIDQsCisJCXRydWUsIDIsIDAsCisJ CURQVV9GRVRDSF9MSU5FQVIsIDEpLAorCisJSU5URVJMRUFWRURfUkdCX0ZNVChCR1JBNDQ0NCwK KwkJQ09MT1JfQUxQSEFfNEJJVCwgQ09MT1JfNEJJVCwgQ09MT1JfNEJJVCwgQ09MT1JfNEJJVCwK KwkJQzNfQUxQSEEsIEMyX1JfQ3IsIEMwX0dfWSwgQzFfQl9DYiwgNCwKKwkJdHJ1ZSwgMiwgMCwK KwkJRFBVX0ZFVENIX0xJTkVBUiwgMSksCisKKwlJTlRFUkxFQVZFRF9SR0JfRk1UKFhSR0I0NDQ0 LAorCQlDT0xPUl9BTFBIQV80QklULCBDT0xPUl80QklULCBDT0xPUl80QklULCBDT0xPUl80QklU LAorCQlDMV9CX0NiLCBDMF9HX1ksIEMyX1JfQ3IsIEMzX0FMUEhBLCA0LAorCQlmYWxzZSwgMiwg MCwKKwkJRFBVX0ZFVENIX0xJTkVBUiwgMSksCisKKwlJTlRFUkxFQVZFRF9SR0JfRk1UKFhCR1I0 NDQ0LAorCQlDT0xPUl9BTFBIQV80QklULCBDT0xPUl80QklULCBDT0xPUl80QklULCBDT0xPUl80 QklULAorCQlDMl9SX0NyLCBDMF9HX1ksIEMxX0JfQ2IsIEMzX0FMUEhBLCA0LAorCQlmYWxzZSwg MiwgMCwKKwkJRFBVX0ZFVENIX0xJTkVBUiwgMSksCisKKwlJTlRFUkxFQVZFRF9SR0JfRk1UKFJH Qlg0NDQ0LAorCQlDT0xPUl9BTFBIQV80QklULCBDT0xPUl80QklULCBDT0xPUl80QklULCBDT0xP Ul80QklULAorCQlDM19BTFBIQSwgQzFfQl9DYiwgQzBfR19ZLCBDMl9SX0NyLCA0LAorCQlmYWxz ZSwgMiwgMCwKKwkJRFBVX0ZFVENIX0xJTkVBUiwgMSksCisKKwlJTlRFUkxFQVZFRF9SR0JfRk1U KEJHUlg0NDQ0LAorCQlDT0xPUl9BTFBIQV80QklULCBDT0xPUl80QklULCBDT0xPUl80QklULCBD T0xPUl80QklULAorCQlDM19BTFBIQSwgQzJfUl9DciwgQzBfR19ZLCBDMV9CX0NiLCA0LAorCQlm YWxzZSwgMiwgMCwKKwkJRFBVX0ZFVENIX0xJTkVBUiwgMSksCisKKwlJTlRFUkxFQVZFRF9SR0Jf Rk1UKEJHUkExMDEwMTAyLAorCQlDT0xPUl84QklULCBDT0xPUl84QklULCBDT0xPUl84QklULCBD T0xPUl84QklULAorCQlDM19BTFBIQSwgQzJfUl9DciwgQzBfR19ZLCBDMV9CX0NiLCA0LAorCQl0 cnVlLCA0LCBEUFVfRk9STUFUX0ZMQUdfRFgsCisJCURQVV9GRVRDSF9MSU5FQVIsIDEpLAorCisJ SU5URVJMRUFWRURfUkdCX0ZNVChSR0JBMTAxMDEwMiwKKwkJQ09MT1JfOEJJVCwgQ09MT1JfOEJJ VCwgQ09MT1JfOEJJVCwgQ09MT1JfOEJJVCwKKwkJQzNfQUxQSEEsIEMxX0JfQ2IsIEMwX0dfWSwg QzJfUl9DciwgNCwKKwkJdHJ1ZSwgNCwgRFBVX0ZPUk1BVF9GTEFHX0RYLAorCQlEUFVfRkVUQ0hf TElORUFSLCAxKSwKKworCUlOVEVSTEVBVkVEX1JHQl9GTVQoQUJHUjIxMDEwMTAsCisJCUNPTE9S XzhCSVQsIENPTE9SXzhCSVQsIENPTE9SXzhCSVQsIENPTE9SXzhCSVQsCisJCUMyX1JfQ3IsIEMw X0dfWSwgQzFfQl9DYiwgQzNfQUxQSEEsIDQsCisJCXRydWUsIDQsIERQVV9GT1JNQVRfRkxBR19E WCwKKwkJRFBVX0ZFVENIX0xJTkVBUiwgMSksCisKKwlJTlRFUkxFQVZFRF9SR0JfRk1UKEFSR0Iy MTAxMDEwLAorCQlDT0xPUl84QklULCBDT0xPUl84QklULCBDT0xPUl84QklULCBDT0xPUl84QklU LAorCQlDMV9CX0NiLCBDMF9HX1ksIEMyX1JfQ3IsIEMzX0FMUEhBLCA0LAorCQl0cnVlLCA0LCBE UFVfRk9STUFUX0ZMQUdfRFgsCisJCURQVV9GRVRDSF9MSU5FQVIsIDEpLAorCisJSU5URVJMRUFW RURfUkdCX0ZNVChYUkdCMjEwMTAxMCwKKwkJQ09MT1JfOEJJVCwgQ09MT1JfOEJJVCwgQ09MT1Jf OEJJVCwgQ09MT1JfOEJJVCwKKwkJQzFfQl9DYiwgQzBfR19ZLCBDMl9SX0NyLCBDM19BTFBIQSwg NCwKKwkJZmFsc2UsIDQsIERQVV9GT1JNQVRfRkxBR19EWCwKKwkJRFBVX0ZFVENIX0xJTkVBUiwg MSksCisKKwlJTlRFUkxFQVZFRF9SR0JfRk1UKEJHUlgxMDEwMTAyLAorCQlDT0xPUl84QklULCBD T0xPUl84QklULCBDT0xPUl84QklULCBDT0xPUl84QklULAorCQlDM19BTFBIQSwgQzJfUl9Dciwg QzBfR19ZLCBDMV9CX0NiLCA0LAorCQlmYWxzZSwgNCwgRFBVX0ZPUk1BVF9GTEFHX0RYLAorCQlE UFVfRkVUQ0hfTElORUFSLCAxKSwKKworCUlOVEVSTEVBVkVEX1JHQl9GTVQoWEJHUjIxMDEwMTAs CisJCUNPTE9SXzhCSVQsIENPTE9SXzhCSVQsIENPTE9SXzhCSVQsIENPTE9SXzhCSVQsCisJCUMy X1JfQ3IsIEMwX0dfWSwgQzFfQl9DYiwgQzNfQUxQSEEsIDQsCisJCWZhbHNlLCA0LCBEUFVfRk9S TUFUX0ZMQUdfRFgsCisJCURQVV9GRVRDSF9MSU5FQVIsIDEpLAorCisJSU5URVJMRUFWRURfUkdC X0ZNVChSR0JYMTAxMDEwMiwKKwkJQ09MT1JfOEJJVCwgQ09MT1JfOEJJVCwgQ09MT1JfOEJJVCwg Q09MT1JfOEJJVCwKKwkJQzNfQUxQSEEsIEMxX0JfQ2IsIEMwX0dfWSwgQzJfUl9DciwgNCwKKwkJ ZmFsc2UsIDQsIERQVV9GT1JNQVRfRkxBR19EWCwKKwkJRFBVX0ZFVENIX0xJTkVBUiwgMSksCisK KwlQU0VVRE9fWVVWX0ZNVChOVjEyLAorCQkwLCBDT0xPUl84QklULCBDT0xPUl84QklULCBDT0xP Ul84QklULAorCQlDMV9CX0NiLCBDMl9SX0NyLAorCQlEUFVfQ0hST01BXzQyMCwgRFBVX0ZPUk1B VF9GTEFHX1lVViwKKwkJRFBVX0ZFVENIX0xJTkVBUiwgMiksCisKKwlQU0VVRE9fWVVWX0ZNVChO VjIxLAorCQkwLCBDT0xPUl84QklULCBDT0xPUl84QklULCBDT0xPUl84QklULAorCQlDMl9SX0Ny LCBDMV9CX0NiLAorCQlEUFVfQ0hST01BXzQyMCwgRFBVX0ZPUk1BVF9GTEFHX1lVViwKKwkJRFBV X0ZFVENIX0xJTkVBUiwgMiksCisKKwlQU0VVRE9fWVVWX0ZNVChOVjE2LAorCQkwLCBDT0xPUl84 QklULCBDT0xPUl84QklULCBDT0xPUl84QklULAorCQlDMV9CX0NiLCBDMl9SX0NyLAorCQlEUFVf Q0hST01BX0gyVjEsIERQVV9GT1JNQVRfRkxBR19ZVVYsCisJCURQVV9GRVRDSF9MSU5FQVIsIDIp LAorCisJUFNFVURPX1lVVl9GTVQoTlY2MSwKKwkJMCwgQ09MT1JfOEJJVCwgQ09MT1JfOEJJVCwg Q09MT1JfOEJJVCwKKwkJQzJfUl9DciwgQzFfQl9DYiwKKwkJRFBVX0NIUk9NQV9IMlYxLCBEUFVf Rk9STUFUX0ZMQUdfWVVWLAorCQlEUFVfRkVUQ0hfTElORUFSLCAyKSwKKworCUlOVEVSTEVBVkVE X1lVVl9GTVQoVllVWSwKKwkJMCwgQ09MT1JfOEJJVCwgQ09MT1JfOEJJVCwgQ09MT1JfOEJJVCwK KwkJQzJfUl9DciwgQzBfR19ZLCBDMV9CX0NiLCBDMF9HX1ksCisJCWZhbHNlLCBEUFVfQ0hST01B X0gyVjEsIDQsIDIsIERQVV9GT1JNQVRfRkxBR19ZVVYsCisJCURQVV9GRVRDSF9MSU5FQVIsIDIp LAorCisJSU5URVJMRUFWRURfWVVWX0ZNVChVWVZZLAorCQkwLCBDT0xPUl84QklULCBDT0xPUl84 QklULCBDT0xPUl84QklULAorCQlDMV9CX0NiLCBDMF9HX1ksIEMyX1JfQ3IsIEMwX0dfWSwKKwkJ ZmFsc2UsIERQVV9DSFJPTUFfSDJWMSwgNCwgMiwgRFBVX0ZPUk1BVF9GTEFHX1lVViwKKwkJRFBV X0ZFVENIX0xJTkVBUiwgMiksCisKKwlJTlRFUkxFQVZFRF9ZVVZfRk1UKFlVWVYsCisJCTAsIENP TE9SXzhCSVQsIENPTE9SXzhCSVQsIENPTE9SXzhCSVQsCisJCUMwX0dfWSwgQzFfQl9DYiwgQzBf R19ZLCBDMl9SX0NyLAorCQlmYWxzZSwgRFBVX0NIUk9NQV9IMlYxLCA0LCAyLCBEUFVfRk9STUFU X0ZMQUdfWVVWLAorCQlEUFVfRkVUQ0hfTElORUFSLCAyKSwKKworCUlOVEVSTEVBVkVEX1lVVl9G TVQoWVZZVSwKKwkJMCwgQ09MT1JfOEJJVCwgQ09MT1JfOEJJVCwgQ09MT1JfOEJJVCwKKwkJQzBf R19ZLCBDMl9SX0NyLCBDMF9HX1ksIEMxX0JfQ2IsCisJCWZhbHNlLCBEUFVfQ0hST01BX0gyVjEs IDQsIDIsIERQVV9GT1JNQVRfRkxBR19ZVVYsCisJCURQVV9GRVRDSF9MSU5FQVIsIDIpLAorCisJ UExBTkFSX1lVVl9GTVQoWVVWNDIwLAorCQkwLCBDT0xPUl84QklULCBDT0xPUl84QklULCBDT0xP Ul84QklULAorCQlDMl9SX0NyLCBDMV9CX0NiLCBDMF9HX1ksCisJCWZhbHNlLCBEUFVfQ0hST01B XzQyMCwgMSwgRFBVX0ZPUk1BVF9GTEFHX1lVViwKKwkJRFBVX0ZFVENIX0xJTkVBUiwgMyksCisK KwlQTEFOQVJfWVVWX0ZNVChZVlU0MjAsCisJCTAsIENPTE9SXzhCSVQsIENPTE9SXzhCSVQsIENP TE9SXzhCSVQsCisJCUMxX0JfQ2IsIEMyX1JfQ3IsIEMwX0dfWSwKKwkJZmFsc2UsIERQVV9DSFJP TUFfNDIwLCAxLCBEUFVfRk9STUFUX0ZMQUdfWVVWLAorCQlEUFVfRkVUQ0hfTElORUFSLCAzKSwK K307CisKKy8qCisgKiBBNXggdGlsZSBmb3JtYXRzIHRhYmxlczoKKyAqIFRoZXNlIHRhYmxlcyBo b2xkIHRoZSBBNXggdGlsZSBmb3JtYXRzIHN1cHBvcnRlZC4KKyAqLworc3RhdGljIGNvbnN0IHN0 cnVjdCBkcHVfZm9ybWF0IGRwdV9mb3JtYXRfbWFwX3RpbGVbXSA9IHsKKwlJTlRFUkxFQVZFRF9S R0JfRk1UX1RJTEVEKEJHUjU2NSwKKwkJMCwgQ09MT1JfNUJJVCwgQ09MT1JfNkJJVCwgQ09MT1Jf NUJJVCwKKwkJQzJfUl9DciwgQzBfR19ZLCBDMV9CX0NiLCAwLCAzLAorCQlmYWxzZSwgMiwgMCwK KwkJRFBVX0ZFVENIX1VCV0MsIDEsIERQVV9USUxFX0hFSUdIVF9USUxFRCksCisKKwlJTlRFUkxF QVZFRF9SR0JfRk1UX1RJTEVEKEFSR0I4ODg4LAorCQlDT0xPUl84QklULCBDT0xPUl84QklULCBD T0xPUl84QklULCBDT0xPUl84QklULAorCQlDM19BTFBIQSwgQzJfUl9DciwgQzBfR19ZLCBDMV9C X0NiLCA0LAorCQl0cnVlLCA0LCAwLAorCQlEUFVfRkVUQ0hfVUJXQywgMSwgRFBVX1RJTEVfSEVJ R0hUX1RJTEVEKSwKKworCUlOVEVSTEVBVkVEX1JHQl9GTVRfVElMRUQoQUJHUjg4ODgsCisJCUNP TE9SXzhCSVQsIENPTE9SXzhCSVQsIENPTE9SXzhCSVQsIENPTE9SXzhCSVQsCisJCUMzX0FMUEhB LCBDMV9CX0NiLCBDMF9HX1ksIEMyX1JfQ3IsIDQsCisJCXRydWUsIDQsIDAsCisJCURQVV9GRVRD SF9VQldDLCAxLCBEUFVfVElMRV9IRUlHSFRfVElMRUQpLAorCisJSU5URVJMRUFWRURfUkdCX0ZN VF9USUxFRChYQkdSODg4OCwKKwkJQ09MT1JfOEJJVCwgQ09MT1JfOEJJVCwgQ09MT1JfOEJJVCwg Q09MT1JfOEJJVCwKKwkJQzJfUl9DciwgQzBfR19ZLCBDMV9CX0NiLCBDM19BTFBIQSwgNCwKKwkJ ZmFsc2UsIDQsIDAsCisJCURQVV9GRVRDSF9VQldDLCAxLCBEUFVfVElMRV9IRUlHSFRfVElMRUQp LAorCisJSU5URVJMRUFWRURfUkdCX0ZNVF9USUxFRChSR0JBODg4OCwKKwkJQ09MT1JfOEJJVCwg Q09MT1JfOEJJVCwgQ09MT1JfOEJJVCwgQ09MT1JfOEJJVCwKKwkJQzJfUl9DciwgQzBfR19ZLCBD MV9CX0NiLCBDM19BTFBIQSwgNCwKKwkJdHJ1ZSwgNCwgMCwKKwkJRFBVX0ZFVENIX1VCV0MsIDEs IERQVV9USUxFX0hFSUdIVF9USUxFRCksCisKKwlJTlRFUkxFQVZFRF9SR0JfRk1UX1RJTEVEKEJH UkE4ODg4LAorCQlDT0xPUl84QklULCBDT0xPUl84QklULCBDT0xPUl84QklULCBDT0xPUl84QklU LAorCQlDMV9CX0NiLCBDMF9HX1ksIEMyX1JfQ3IsIEMzX0FMUEhBLCA0LAorCQl0cnVlLCA0LCAw LAorCQlEUFVfRkVUQ0hfVUJXQywgMSwgRFBVX1RJTEVfSEVJR0hUX1RJTEVEKSwKKworCUlOVEVS TEVBVkVEX1JHQl9GTVRfVElMRUQoQkdSWDg4ODgsCisJCUNPTE9SXzhCSVQsIENPTE9SXzhCSVQs IENPTE9SXzhCSVQsIENPTE9SXzhCSVQsCisJCUMxX0JfQ2IsIEMwX0dfWSwgQzJfUl9DciwgQzNf QUxQSEEsIDQsCisJCWZhbHNlLCA0LCAwLAorCQlEUFVfRkVUQ0hfVUJXQywgMSwgRFBVX1RJTEVf SEVJR0hUX1RJTEVEKSwKKworCUlOVEVSTEVBVkVEX1JHQl9GTVRfVElMRUQoWFJHQjg4ODgsCisJ CUNPTE9SXzhCSVQsIENPTE9SXzhCSVQsIENPTE9SXzhCSVQsIENPTE9SXzhCSVQsCisJCUMzX0FM UEhBLCBDMl9SX0NyLCBDMF9HX1ksIEMxX0JfQ2IsIDQsCisJCWZhbHNlLCA0LCAwLAorCQlEUFVf RkVUQ0hfVUJXQywgMSwgRFBVX1RJTEVfSEVJR0hUX1RJTEVEKSwKKworCUlOVEVSTEVBVkVEX1JH Ql9GTVRfVElMRUQoUkdCWDg4ODgsCisJCUNPTE9SXzhCSVQsIENPTE9SXzhCSVQsIENPTE9SXzhC SVQsIENPTE9SXzhCSVQsCisJCUMyX1JfQ3IsIEMwX0dfWSwgQzFfQl9DYiwgQzNfQUxQSEEsIDQs CisJCWZhbHNlLCA0LCAwLAorCQlEUFVfRkVUQ0hfVUJXQywgMSwgRFBVX1RJTEVfSEVJR0hUX1RJ TEVEKSwKKworCUlOVEVSTEVBVkVEX1JHQl9GTVRfVElMRUQoQUJHUjIxMDEwMTAsCisJCUNPTE9S XzhCSVQsIENPTE9SXzhCSVQsIENPTE9SXzhCSVQsIENPTE9SXzhCSVQsCisJCUMyX1JfQ3IsIEMw X0dfWSwgQzFfQl9DYiwgQzNfQUxQSEEsIDQsCisJCXRydWUsIDQsIERQVV9GT1JNQVRfRkxBR19E WCwKKwkJRFBVX0ZFVENIX1VCV0MsIDEsIERQVV9USUxFX0hFSUdIVF9USUxFRCksCisKKwlJTlRF UkxFQVZFRF9SR0JfRk1UX1RJTEVEKFhCR1IyMTAxMDEwLAorCQlDT0xPUl84QklULCBDT0xPUl84 QklULCBDT0xPUl84QklULCBDT0xPUl84QklULAorCQlDMl9SX0NyLCBDMF9HX1ksIEMxX0JfQ2Is IEMzX0FMUEhBLCA0LAorCQl0cnVlLCA0LCBEUFVfRk9STUFUX0ZMQUdfRFgsCisJCURQVV9GRVRD SF9VQldDLCAxLCBEUFVfVElMRV9IRUlHSFRfVElMRUQpLAorCisJUFNFVURPX1lVVl9GTVRfVElM RUQoTlYxMiwKKwkJMCwgQ09MT1JfOEJJVCwgQ09MT1JfOEJJVCwgQ09MT1JfOEJJVCwKKwkJQzFf Ql9DYiwgQzJfUl9DciwKKwkJRFBVX0NIUk9NQV80MjAsIERQVV9GT1JNQVRfRkxBR19ZVVYsCisJ CURQVV9GRVRDSF9VQldDLCAyLCBEUFVfVElMRV9IRUlHSFRfTlYxMiksCisKKwlQU0VVRE9fWVVW X0ZNVF9USUxFRChOVjIxLAorCQkwLCBDT0xPUl84QklULCBDT0xPUl84QklULCBDT0xPUl84QklU LAorCQlDMl9SX0NyLCBDMV9CX0NiLAorCQlEUFVfQ0hST01BXzQyMCwgRFBVX0ZPUk1BVF9GTEFH X1lVViwKKwkJRFBVX0ZFVENIX1VCV0MsIDIsIERQVV9USUxFX0hFSUdIVF9OVjEyKSwKK307CisK K3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHB1X2Zvcm1hdCBkcHVfZm9ybWF0X21hcF9wMDEwX3RpbGVb XSA9IHsKKwlQU0VVRE9fWVVWX0ZNVF9MT09TRV9USUxFRChOVjEyLAorCQkwLCBDT0xPUl84QklU LCBDT0xPUl84QklULCBDT0xPUl84QklULAorCQlDMV9CX0NiLCBDMl9SX0NyLAorCQlEUFVfQ0hS T01BXzQyMCwgKERQVV9GT1JNQVRfRkxBR19ZVVYgfCBEUFVfRk9STUFUX0ZMQUdfRFgpLAorCQlE UFVfRkVUQ0hfVUJXQywgMiwgRFBVX1RJTEVfSEVJR0hUX05WMTIpLAorfTsKKworc3RhdGljIGNv bnN0IHN0cnVjdCBkcHVfZm9ybWF0IGRwdV9mb3JtYXRfbWFwX3RwMTBfdGlsZVtdID0geworCVBT RVVET19ZVVZfRk1UX1RJTEVEKE5WMTIsCisJCTAsIENPTE9SXzhCSVQsIENPTE9SXzhCSVQsIENP TE9SXzhCSVQsCisJCUMxX0JfQ2IsIEMyX1JfQ3IsCisJCURQVV9DSFJPTUFfNDIwLCAoRFBVX0ZP Uk1BVF9GTEFHX1lVViB8IERQVV9GT1JNQVRfRkxBR19EWCksCisJCURQVV9GRVRDSF9VQldDLCAy LCBEUFVfVElMRV9IRUlHSFRfTlYxMiksCit9OworCisvKgorICogVUJXQyBmb3JtYXRzIHRhYmxl OgorICogVGhpcyB0YWJsZSBob2xkcyB0aGUgVUJXQyBmb3JtYXRzIHN1cHBvcnRlZC4KKyAqIElm IGEgY29tcHJlc3Npb24gcmF0aW8gbmVlZHMgdG8gYmUgdXNlZCBmb3IgdGhpcyBvciBhbnkgb3Ro ZXIgZm9ybWF0LAorICogdGhlIGRhdGEgd2lsbCBiZSBwYXNzZWQgYnkgdXNlci1zcGFjZS4KKyAq Lworc3RhdGljIGNvbnN0IHN0cnVjdCBkcHVfZm9ybWF0IGRwdV9mb3JtYXRfbWFwX3Vid2NbXSA9 IHsKKwlJTlRFUkxFQVZFRF9SR0JfRk1UX1RJTEVEKEJHUjU2NSwKKwkJMCwgQ09MT1JfNUJJVCwg Q09MT1JfNkJJVCwgQ09MT1JfNUJJVCwKKwkJQzJfUl9DciwgQzBfR19ZLCBDMV9CX0NiLCAwLCAz LAorCQlmYWxzZSwgMiwgRFBVX0ZPUk1BVF9GTEFHX0NPTVBSRVNTRUQsCisJCURQVV9GRVRDSF9V QldDLCAyLCBEUFVfVElMRV9IRUlHSFRfVUJXQyksCisKKwlJTlRFUkxFQVZFRF9SR0JfRk1UX1RJ TEVEKEFCR1I4ODg4LAorCQlDT0xPUl84QklULCBDT0xPUl84QklULCBDT0xPUl84QklULCBDT0xP Ul84QklULAorCQlDMl9SX0NyLCBDMF9HX1ksIEMxX0JfQ2IsIEMzX0FMUEhBLCA0LAorCQl0cnVl LCA0LCBEUFVfRk9STUFUX0ZMQUdfQ09NUFJFU1NFRCwKKwkJRFBVX0ZFVENIX1VCV0MsIDIsIERQ VV9USUxFX0hFSUdIVF9VQldDKSwKKworCUlOVEVSTEVBVkVEX1JHQl9GTVRfVElMRUQoWEJHUjg4 ODgsCisJCUNPTE9SXzhCSVQsIENPTE9SXzhCSVQsIENPTE9SXzhCSVQsIENPTE9SXzhCSVQsCisJ CUMyX1JfQ3IsIEMwX0dfWSwgQzFfQl9DYiwgQzNfQUxQSEEsIDQsCisJCWZhbHNlLCA0LCBEUFVf Rk9STUFUX0ZMQUdfQ09NUFJFU1NFRCwKKwkJRFBVX0ZFVENIX1VCV0MsIDIsIERQVV9USUxFX0hF SUdIVF9VQldDKSwKKworCUlOVEVSTEVBVkVEX1JHQl9GTVRfVElMRUQoQUJHUjIxMDEwMTAsCisJ CUNPTE9SXzhCSVQsIENPTE9SXzhCSVQsIENPTE9SXzhCSVQsIENPTE9SXzhCSVQsCisJCUMyX1Jf Q3IsIEMwX0dfWSwgQzFfQl9DYiwgQzNfQUxQSEEsIDQsCisJCXRydWUsIDQsIERQVV9GT1JNQVRf RkxBR19EWCB8IERQVV9GT1JNQVRfRkxBR19DT01QUkVTU0VELAorCQlEUFVfRkVUQ0hfVUJXQywg MiwgRFBVX1RJTEVfSEVJR0hUX1VCV0MpLAorCisJSU5URVJMRUFWRURfUkdCX0ZNVF9USUxFRChY QkdSMjEwMTAxMCwKKwkJQ09MT1JfOEJJVCwgQ09MT1JfOEJJVCwgQ09MT1JfOEJJVCwgQ09MT1Jf OEJJVCwKKwkJQzJfUl9DciwgQzBfR19ZLCBDMV9CX0NiLCBDM19BTFBIQSwgNCwKKwkJdHJ1ZSwg NCwgRFBVX0ZPUk1BVF9GTEFHX0RYIHwgRFBVX0ZPUk1BVF9GTEFHX0NPTVBSRVNTRUQsCisJCURQ VV9GRVRDSF9VQldDLCAyLCBEUFVfVElMRV9IRUlHSFRfVUJXQyksCisKKwlQU0VVRE9fWVVWX0ZN VF9USUxFRChOVjEyLAorCQkwLCBDT0xPUl84QklULCBDT0xPUl84QklULCBDT0xPUl84QklULAor CQlDMV9CX0NiLCBDMl9SX0NyLAorCQlEUFVfQ0hST01BXzQyMCwgRFBVX0ZPUk1BVF9GTEFHX1lV ViB8CisJCQkJRFBVX0ZPUk1BVF9GTEFHX0NPTVBSRVNTRUQsCisJCURQVV9GRVRDSF9VQldDLCA0 LCBEUFVfVElMRV9IRUlHSFRfTlYxMiksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRwdV9m b3JtYXQgZHB1X2Zvcm1hdF9tYXBfcDAxMFtdID0geworCVBTRVVET19ZVVZfRk1UX0xPT1NFKE5W MTIsCisJCTAsIENPTE9SXzhCSVQsIENPTE9SXzhCSVQsIENPTE9SXzhCSVQsCisJCUMxX0JfQ2Is IEMyX1JfQ3IsCisJCURQVV9DSFJPTUFfNDIwLCAoRFBVX0ZPUk1BVF9GTEFHX1lVViB8IERQVV9G T1JNQVRfRkxBR19EWCksCisJCURQVV9GRVRDSF9MSU5FQVIsIDIpLAorfTsKKworc3RhdGljIGNv bnN0IHN0cnVjdCBkcHVfZm9ybWF0IGRwdV9mb3JtYXRfbWFwX3AwMTBfdWJ3Y1tdID0geworCVBT RVVET19ZVVZfRk1UX0xPT1NFX1RJTEVEKE5WMTIsCisJCTAsIENPTE9SXzhCSVQsIENPTE9SXzhC SVQsIENPTE9SXzhCSVQsCisJCUMxX0JfQ2IsIEMyX1JfQ3IsCisJCURQVV9DSFJPTUFfNDIwLCAo RFBVX0ZPUk1BVF9GTEFHX1lVViB8IERQVV9GT1JNQVRfRkxBR19EWCB8CisJCQkJRFBVX0ZPUk1B VF9GTEFHX0NPTVBSRVNTRUQpLAorCQlEUFVfRkVUQ0hfVUJXQywgNCwgRFBVX1RJTEVfSEVJR0hU X05WMTIpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcHVfZm9ybWF0IGRwdV9mb3JtYXRf bWFwX3RwMTBfdWJ3Y1tdID0geworCVBTRVVET19ZVVZfRk1UX1RJTEVEKE5WMTIsCisJCTAsIENP TE9SXzhCSVQsIENPTE9SXzhCSVQsIENPTE9SXzhCSVQsCisJCUMxX0JfQ2IsIEMyX1JfQ3IsCisJ CURQVV9DSFJPTUFfNDIwLCAoRFBVX0ZPUk1BVF9GTEFHX1lVViB8IERQVV9GT1JNQVRfRkxBR19E WCB8CisJCQkJRFBVX0ZPUk1BVF9GTEFHX0NPTVBSRVNTRUQpLAorCQlEUFVfRkVUQ0hfVUJXQywg NCwgRFBVX1RJTEVfSEVJR0hUX05WMTIpLAorfTsKKworLyogX2RwdV9nZXRfdl9oX3N1YnNhbXBs ZV9yYXRlIC0gR2V0IHN1YnNhbXBsZSByYXRlcyBmb3IgYWxsIGZvcm1hdHMgd2Ugc3VwcG9ydAor ICogICBOb3RlOiBOb3QgdXNpbmcgdGhlIGRybV9mb3JtYXRfKl9zdWJzYW1wbGluZyBzaW5jZSB3 ZSBoYXZlIGZvcm1hdHMKKyAqLworc3RhdGljIHZvaWQgX2RwdV9nZXRfdl9oX3N1YnNhbXBsZV9y YXRlKAorCWVudW0gZHB1X2Nocm9tYV9zYW1wX3R5cGUgY2hyb21hX3NhbXBsZSwKKwl1aW50MzJf dCAqdl9zYW1wbGUsCisJdWludDMyX3QgKmhfc2FtcGxlKQoreworCWlmICghdl9zYW1wbGUgfHwg IWhfc2FtcGxlKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKGNocm9tYV9zYW1wbGUpIHsKKwljYXNl IERQVV9DSFJPTUFfSDJWMToKKwkJKnZfc2FtcGxlID0gMTsKKwkJKmhfc2FtcGxlID0gMjsKKwkJ YnJlYWs7CisJY2FzZSBEUFVfQ0hST01BX0gxVjI6CisJCSp2X3NhbXBsZSA9IDI7CisJCSpoX3Nh bXBsZSA9IDE7CisJCWJyZWFrOworCWNhc2UgRFBVX0NIUk9NQV80MjA6CisJCSp2X3NhbXBsZSA9 IDI7CisJCSpoX3NhbXBsZSA9IDI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCSp2X3NhbXBsZSA9 IDE7CisJCSpoX3NhbXBsZSA9IDE7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBfZHB1 X2Zvcm1hdF9nZXRfbWVkaWFfY29sb3JfdWJ3Yyhjb25zdCBzdHJ1Y3QgZHB1X2Zvcm1hdCAqZm10 KQoreworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHB1X21lZGlhX2NvbG9yX21hcCBkcHVfbWVkaWFf dWJ3Y19tYXBbXSA9IHsKKwkJe0RSTV9GT1JNQVRfQUJHUjg4ODgsIENPTE9SX0ZNVF9SR0JBODg4 OF9VQldDfSwKKwkJe0RSTV9GT1JNQVRfWEJHUjg4ODgsIENPTE9SX0ZNVF9SR0JBODg4OF9VQldD fSwKKwkJe0RSTV9GT1JNQVRfQUJHUjIxMDEwMTAsIENPTE9SX0ZNVF9SR0JBMTAxMDEwMl9VQldD fSwKKwkJe0RSTV9GT1JNQVRfWEJHUjIxMDEwMTAsIENPTE9SX0ZNVF9SR0JBMTAxMDEwMl9VQldD fSwKKwkJe0RSTV9GT1JNQVRfQkdSNTY1LCBDT0xPUl9GTVRfUkdCNTY1X1VCV0N9LAorCX07CisJ aW50IGNvbG9yX2ZtdCA9IC0xOworCWludCBpOworCisJaWYgKGZtdC0+YmFzZS5waXhlbF9mb3Jt YXQgPT0gRFJNX0ZPUk1BVF9OVjEyKSB7CisJCWlmIChEUFVfRk9STUFUX0lTX0RYKGZtdCkpIHsK KwkJCWlmIChmbXQtPnVucGFja190aWdodCkKKwkJCQljb2xvcl9mbXQgPSBDT0xPUl9GTVRfTlYx Ml9CUFAxMF9VQldDOworCQkJZWxzZQorCQkJCWNvbG9yX2ZtdCA9IENPTE9SX0ZNVF9QMDEwX1VC V0M7CisJCX0gZWxzZQorCQkJY29sb3JfZm10ID0gQ09MT1JfRk1UX05WMTJfVUJXQzsKKwkJcmV0 dXJuIGNvbG9yX2ZtdDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkcHVfbWVk aWFfdWJ3Y19tYXApOyArK2kpCisJCWlmIChmbXQtPmJhc2UucGl4ZWxfZm9ybWF0ID09IGRwdV9t ZWRpYV91YndjX21hcFtpXS5mb3JtYXQpIHsKKwkJCWNvbG9yX2ZtdCA9IGRwdV9tZWRpYV91Yndj X21hcFtpXS5jb2xvcjsKKwkJCWJyZWFrOworCQl9CisJcmV0dXJuIGNvbG9yX2ZtdDsKK30KKwor c3RhdGljIGludCBfZHB1X2Zvcm1hdF9nZXRfcGxhbmVfc2l6ZXNfdWJ3YygKKwkJY29uc3Qgc3Ry dWN0IGRwdV9mb3JtYXQgKmZtdCwKKwkJY29uc3QgdWludDMyX3Qgd2lkdGgsCisJCWNvbnN0IHVp bnQzMl90IGhlaWdodCwKKwkJc3RydWN0IGRwdV9od19mbXRfbGF5b3V0ICpsYXlvdXQpCit7CisJ aW50IGk7CisJaW50IGNvbG9yOworCWJvb2wgbWV0YSA9IERQVV9GT1JNQVRfSVNfVUJXQyhmbXQp OworCisJbWVtc2V0KGxheW91dCwgMCwgc2l6ZW9mKHN0cnVjdCBkcHVfaHdfZm10X2xheW91dCkp OworCWxheW91dC0+Zm9ybWF0ID0gZm10OworCWxheW91dC0+d2lkdGggPSB3aWR0aDsKKwlsYXlv dXQtPmhlaWdodCA9IGhlaWdodDsKKwlsYXlvdXQtPm51bV9wbGFuZXMgPSBmbXQtPm51bV9wbGFu ZXM7CisKKwljb2xvciA9IF9kcHVfZm9ybWF0X2dldF9tZWRpYV9jb2xvcl91YndjKGZtdCk7CisJ aWYgKGNvbG9yIDwgMCkgeworCQlEUk1fRVJST1IoIlVCV0MgZm9ybWF0IG5vdCBzdXBwb3J0ZWQg Zm9yIGZtdDogJTQuNHNcbiIsCisJCQkoY2hhciAqKSZmbXQtPmJhc2UucGl4ZWxfZm9ybWF0KTsK KwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKERQVV9GT1JNQVRfSVNfWVVWKGxheW91dC0+ Zm9ybWF0KSkgeworCQl1aW50MzJfdCB5X3NjbGluZXMsIHV2X3NjbGluZXM7CisJCXVpbnQzMl90 IHlfbWV0YV9zY2FubGluZXMgPSAwOworCQl1aW50MzJfdCB1dl9tZXRhX3NjYW5saW5lcyA9IDA7 CisKKwkJbGF5b3V0LT5udW1fcGxhbmVzID0gMjsKKwkJbGF5b3V0LT5wbGFuZV9waXRjaFswXSA9 IFZFTlVTX1lfU1RSSURFKGNvbG9yLCB3aWR0aCk7CisJCXlfc2NsaW5lcyA9IFZFTlVTX1lfU0NB TkxJTkVTKGNvbG9yLCBoZWlnaHQpOworCQlsYXlvdXQtPnBsYW5lX3NpemVbMF0gPSBNU01fTUVE SUFfQUxJR04obGF5b3V0LT5wbGFuZV9waXRjaFswXSAqCisJCQl5X3NjbGluZXMsIERQVV9VQldD X1BMQU5FX1NJWkVfQUxJR05NRU5UKTsKKworCQlsYXlvdXQtPnBsYW5lX3BpdGNoWzFdID0gVkVO VVNfVVZfU1RSSURFKGNvbG9yLCB3aWR0aCk7CisJCXV2X3NjbGluZXMgPSBWRU5VU19VVl9TQ0FO TElORVMoY29sb3IsIGhlaWdodCk7CisJCWxheW91dC0+cGxhbmVfc2l6ZVsxXSA9IE1TTV9NRURJ QV9BTElHTihsYXlvdXQtPnBsYW5lX3BpdGNoWzFdICoKKwkJCXV2X3NjbGluZXMsIERQVV9VQldD X1BMQU5FX1NJWkVfQUxJR05NRU5UKTsKKworCQlpZiAoIW1ldGEpCisJCQlnb3RvIGRvbmU7CisK KwkJbGF5b3V0LT5udW1fcGxhbmVzICs9IDI7CisJCWxheW91dC0+cGxhbmVfcGl0Y2hbMl0gPSBW RU5VU19ZX01FVEFfU1RSSURFKGNvbG9yLCB3aWR0aCk7CisJCXlfbWV0YV9zY2FubGluZXMgPSBW RU5VU19ZX01FVEFfU0NBTkxJTkVTKGNvbG9yLCBoZWlnaHQpOworCQlsYXlvdXQtPnBsYW5lX3Np emVbMl0gPSBNU01fTUVESUFfQUxJR04obGF5b3V0LT5wbGFuZV9waXRjaFsyXSAqCisJCQl5X21l dGFfc2NhbmxpbmVzLCBEUFVfVUJXQ19QTEFORV9TSVpFX0FMSUdOTUVOVCk7CisKKwkJbGF5b3V0 LT5wbGFuZV9waXRjaFszXSA9IFZFTlVTX1VWX01FVEFfU1RSSURFKGNvbG9yLCB3aWR0aCk7CisJ CXV2X21ldGFfc2NhbmxpbmVzID0gVkVOVVNfVVZfTUVUQV9TQ0FOTElORVMoY29sb3IsIGhlaWdo dCk7CisJCWxheW91dC0+cGxhbmVfc2l6ZVszXSA9IE1TTV9NRURJQV9BTElHTihsYXlvdXQtPnBs YW5lX3BpdGNoWzNdICoKKwkJCXV2X21ldGFfc2NhbmxpbmVzLCBEUFVfVUJXQ19QTEFORV9TSVpF X0FMSUdOTUVOVCk7CisKKwl9IGVsc2UgeworCQl1aW50MzJfdCByZ2Jfc2NhbmxpbmVzLCByZ2Jf bWV0YV9zY2FubGluZXM7CisKKwkJbGF5b3V0LT5udW1fcGxhbmVzID0gMTsKKworCQlsYXlvdXQt PnBsYW5lX3BpdGNoWzBdID0gVkVOVVNfUkdCX1NUUklERShjb2xvciwgd2lkdGgpOworCQlyZ2Jf c2NhbmxpbmVzID0gVkVOVVNfUkdCX1NDQU5MSU5FUyhjb2xvciwgaGVpZ2h0KTsKKwkJbGF5b3V0 LT5wbGFuZV9zaXplWzBdID0gTVNNX01FRElBX0FMSUdOKGxheW91dC0+cGxhbmVfcGl0Y2hbMF0g KgorCQkJcmdiX3NjYW5saW5lcywgRFBVX1VCV0NfUExBTkVfU0laRV9BTElHTk1FTlQpOworCisJ CWlmICghbWV0YSkKKwkJCWdvdG8gZG9uZTsKKwkJbGF5b3V0LT5udW1fcGxhbmVzICs9IDI7CisJ CWxheW91dC0+cGxhbmVfcGl0Y2hbMl0gPSBWRU5VU19SR0JfTUVUQV9TVFJJREUoY29sb3IsIHdp ZHRoKTsKKwkJcmdiX21ldGFfc2NhbmxpbmVzID0gVkVOVVNfUkdCX01FVEFfU0NBTkxJTkVTKGNv bG9yLCBoZWlnaHQpOworCQlsYXlvdXQtPnBsYW5lX3NpemVbMl0gPSBNU01fTUVESUFfQUxJR04o bGF5b3V0LT5wbGFuZV9waXRjaFsyXSAqCisJCQlyZ2JfbWV0YV9zY2FubGluZXMsIERQVV9VQldD X1BMQU5FX1NJWkVfQUxJR05NRU5UKTsKKwl9CisKK2RvbmU6CisJZm9yIChpID0gMDsgaSA8IERQ VV9NQVhfUExBTkVTOyBpKyspCisJCWxheW91dC0+dG90YWxfc2l6ZSArPSBsYXlvdXQtPnBsYW5l X3NpemVbaV07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfZHB1X2Zvcm1hdF9nZXRf cGxhbmVfc2l6ZXNfbGluZWFyKAorCQljb25zdCBzdHJ1Y3QgZHB1X2Zvcm1hdCAqZm10LAorCQlj b25zdCB1aW50MzJfdCB3aWR0aCwKKwkJY29uc3QgdWludDMyX3QgaGVpZ2h0LAorCQlzdHJ1Y3Qg ZHB1X2h3X2ZtdF9sYXlvdXQgKmxheW91dCwKKwkJY29uc3QgdWludDMyX3QgKnBpdGNoZXMpCit7 CisJaW50IGk7CisKKwltZW1zZXQobGF5b3V0LCAwLCBzaXplb2Yoc3RydWN0IGRwdV9od19mbXRf bGF5b3V0KSk7CisJbGF5b3V0LT5mb3JtYXQgPSBmbXQ7CisJbGF5b3V0LT53aWR0aCA9IHdpZHRo OworCWxheW91dC0+aGVpZ2h0ID0gaGVpZ2h0OworCWxheW91dC0+bnVtX3BsYW5lcyA9IGZtdC0+ bnVtX3BsYW5lczsKKworCS8qIER1ZSB0byBtZW1zZXQgYWJvdmUsIG9ubHkgbmVlZCB0byBzZXQg cGxhbmVzIG9mIGludGVyZXN0ICovCisJaWYgKGZtdC0+ZmV0Y2hfcGxhbmVzID09IERQVV9QTEFO RV9JTlRFUkxFQVZFRCkgeworCQlsYXlvdXQtPm51bV9wbGFuZXMgPSAxOworCQlsYXlvdXQtPnBs YW5lX3NpemVbMF0gPSB3aWR0aCAqIGhlaWdodCAqIGxheW91dC0+Zm9ybWF0LT5icHA7CisJCWxh eW91dC0+cGxhbmVfcGl0Y2hbMF0gPSB3aWR0aCAqIGxheW91dC0+Zm9ybWF0LT5icHA7CisJfSBl bHNlIHsKKwkJdWludDMyX3Qgdl9zdWJzYW1wbGUsIGhfc3Vic2FtcGxlOworCQl1aW50MzJfdCBj aHJvbWFfc2FtcDsKKwkJdWludDMyX3QgYnBwID0gMTsKKworCQljaHJvbWFfc2FtcCA9IGZtdC0+ Y2hyb21hX3NhbXBsZTsKKwkJX2RwdV9nZXRfdl9oX3N1YnNhbXBsZV9yYXRlKGNocm9tYV9zYW1w LCAmdl9zdWJzYW1wbGUsCisJCQkJJmhfc3Vic2FtcGxlKTsKKworCQlpZiAod2lkdGggJSBoX3N1 YnNhbXBsZSB8fCBoZWlnaHQgJSB2X3N1YnNhbXBsZSkgeworCQkJRFJNX0VSUk9SKCJtaXNtYXRj aCBpbiBzdWJzYW1wbGUgdnMgZGltZW5zaW9uc1xuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJ fQorCisJCWlmICgoZm10LT5iYXNlLnBpeGVsX2Zvcm1hdCA9PSBEUk1fRk9STUFUX05WMTIpICYm CisJCQkoRFBVX0ZPUk1BVF9JU19EWChmbXQpKSkKKwkJCWJwcCA9IDI7CisJCWxheW91dC0+cGxh bmVfcGl0Y2hbMF0gPSB3aWR0aCAqIGJwcDsKKwkJbGF5b3V0LT5wbGFuZV9waXRjaFsxXSA9IGxh eW91dC0+cGxhbmVfcGl0Y2hbMF0gLyBoX3N1YnNhbXBsZTsKKwkJbGF5b3V0LT5wbGFuZV9zaXpl WzBdID0gbGF5b3V0LT5wbGFuZV9waXRjaFswXSAqIGhlaWdodDsKKwkJbGF5b3V0LT5wbGFuZV9z aXplWzFdID0gbGF5b3V0LT5wbGFuZV9waXRjaFsxXSAqCisJCQkJKGhlaWdodCAvIHZfc3Vic2Ft cGxlKTsKKworCQlpZiAoZm10LT5mZXRjaF9wbGFuZXMgPT0gRFBVX1BMQU5FX1BTRVVET19QTEFO QVIpIHsKKwkJCWxheW91dC0+bnVtX3BsYW5lcyA9IDI7CisJCQlsYXlvdXQtPnBsYW5lX3NpemVb MV0gKj0gMjsKKwkJCWxheW91dC0+cGxhbmVfcGl0Y2hbMV0gKj0gMjsKKwkJfSBlbHNlIHsKKwkJ CS8qIHBsYW5hciAqLworCQkJbGF5b3V0LT5udW1fcGxhbmVzID0gMzsKKwkJCWxheW91dC0+cGxh bmVfc2l6ZVsyXSA9IGxheW91dC0+cGxhbmVfc2l6ZVsxXTsKKwkJCWxheW91dC0+cGxhbmVfcGl0 Y2hbMl0gPSBsYXlvdXQtPnBsYW5lX3BpdGNoWzFdOworCQl9CisJfQorCisJLyoKKwkgKiBsaW5l YXIgZm9ybWF0OiBhbGxvdyB1c2VyIGFsbG9jYXRlZCBwaXRjaGVzIGlmIHRoZXkgYXJlIGdyZWF0 ZXIgdGhhbgorCSAqIHRoZSByZXF1aXJlbWVudC4KKwkgKiB1YndjIGZvcm1hdDogcGl0Y2ggdmFs dWVzIGFyZSBjb21wdXRlZCB1bmlmb3JtbHkgYWNyb3NzCisJICogYWxsIHRoZSBjb21wb25lbnRz IGJhc2VkIG9uIHVid2Mgc3BlY2lmaWNhdGlvbnMuCisJICovCisJZm9yIChpID0gMDsgaSA8IGxh eW91dC0+bnVtX3BsYW5lcyAmJiBpIDwgRFBVX01BWF9QTEFORVM7ICsraSkgeworCQlpZiAocGl0 Y2hlcyAmJiBsYXlvdXQtPnBsYW5lX3BpdGNoW2ldIDwgcGl0Y2hlc1tpXSkKKwkJCWxheW91dC0+ cGxhbmVfcGl0Y2hbaV0gPSBwaXRjaGVzW2ldOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBEUFVf TUFYX1BMQU5FUzsgaSsrKQorCQlsYXlvdXQtPnRvdGFsX3NpemUgKz0gbGF5b3V0LT5wbGFuZV9z aXplW2ldOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBkcHVfZm9ybWF0X2dldF9wbGFuZV9zaXpl cygKKwkJY29uc3Qgc3RydWN0IGRwdV9mb3JtYXQgKmZtdCwKKwkJY29uc3QgdWludDMyX3QgdywK KwkJY29uc3QgdWludDMyX3QgaCwKKwkJc3RydWN0IGRwdV9od19mbXRfbGF5b3V0ICpsYXlvdXQs CisJCWNvbnN0IHVpbnQzMl90ICpwaXRjaGVzKQoreworCWlmICghbGF5b3V0IHx8ICFmbXQpIHsK KwkJRFJNX0VSUk9SKCJpbnZhbGlkIHBvaW50ZXJcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9 CisKKwlpZiAoKHcgPiBEUFVfTUFYX0lNR19XSURUSCkgfHwgKGggPiBEUFVfTUFYX0lNR19IRUlH SFQpKSB7CisJCURSTV9FUlJPUigiaW1hZ2UgZGltZW5zaW9ucyBvdXRzaWRlIG1heCByYW5nZVxu Iik7CisJCXJldHVybiAtRVJBTkdFOworCX0KKworCWlmIChEUFVfRk9STUFUX0lTX1VCV0MoZm10 KSB8fCBEUFVfRk9STUFUX0lTX1RJTEUoZm10KSkKKwkJcmV0dXJuIF9kcHVfZm9ybWF0X2dldF9w bGFuZV9zaXplc191YndjKGZtdCwgdywgaCwgbGF5b3V0KTsKKworCXJldHVybiBfZHB1X2Zvcm1h dF9nZXRfcGxhbmVfc2l6ZXNfbGluZWFyKGZtdCwgdywgaCwgbGF5b3V0LCBwaXRjaGVzKTsKK30K KworaW50IGRwdV9mb3JtYXRfZ2V0X2Jsb2NrX3NpemUoY29uc3Qgc3RydWN0IGRwdV9mb3JtYXQg KmZtdCwKKwkJdWludDMyX3QgKncsIHVpbnQzMl90ICpoKQoreworCWlmICghZm10IHx8ICF3IHx8 ICFoKSB7CisJCURSTV9FUlJPUigiaW52YWxpZCBwb2ludGVyXG4iKTsKKwkJcmV0dXJuIC1FSU5W QUw7CisJfQorCisJLyogVFAxMCBpcyA5Nng5NiBhbmQgYWxsIG90aGVycyBhcmUgMTI4eDEyOCAq LworCWlmIChEUFVfRk9STUFUX0lTX1lVVihmbXQpICYmIERQVV9GT1JNQVRfSVNfRFgoZm10KSAm JgorCQkJKGZtdC0+bnVtX3BsYW5lcyA9PSAyKSAmJiBmbXQtPnVucGFja190aWdodCkKKwkJKncg PSAqaCA9IDk2OworCWVsc2UKKwkJKncgPSAqaCA9IDEyODsKKworCXJldHVybiAwOworfQorCit1 aW50MzJfdCBkcHVfZm9ybWF0X2dldF9mcmFtZWJ1ZmZlcl9zaXplKAorCQljb25zdCB1aW50MzJf dCBmb3JtYXQsCisJCWNvbnN0IHVpbnQzMl90IHdpZHRoLAorCQljb25zdCB1aW50MzJfdCBoZWln aHQsCisJCWNvbnN0IHVpbnQzMl90ICpwaXRjaGVzLAorCQljb25zdCB1aW50NjRfdCBtb2RpZmll cnMpCit7CisJY29uc3Qgc3RydWN0IGRwdV9mb3JtYXQgKmZtdDsKKwlzdHJ1Y3QgZHB1X2h3X2Zt dF9sYXlvdXQgbGF5b3V0OworCisJZm10ID0gZHB1X2dldF9kcHVfZm9ybWF0X2V4dChmb3JtYXQs IG1vZGlmaWVycyk7CisJaWYgKCFmbXQpCisJCXJldHVybiAwOworCisJaWYgKCFwaXRjaGVzKQor CQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChkcHVfZm9ybWF0X2dldF9wbGFuZV9zaXplcyhmbXQs IHdpZHRoLCBoZWlnaHQsICZsYXlvdXQsIHBpdGNoZXMpKQorCQlsYXlvdXQudG90YWxfc2l6ZSA9 IDA7CisKKwlyZXR1cm4gbGF5b3V0LnRvdGFsX3NpemU7Cit9CisKK3N0YXRpYyBpbnQgX2RwdV9m b3JtYXRfcG9wdWxhdGVfYWRkcnNfdWJ3YygKKwkJc3RydWN0IG1zbV9nZW1fYWRkcmVzc19zcGFj ZSAqYXNwYWNlLAorCQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKKwkJc3RydWN0IGRwdV9o d19mbXRfbGF5b3V0ICpsYXlvdXQpCit7CisJdWludDMyX3QgYmFzZV9hZGRyID0gMDsKKwlib29s IG1ldGE7CisKKwlpZiAoIWZiIHx8ICFsYXlvdXQpIHsKKwkJRFJNX0VSUk9SKCJpbnZhbGlkIHBv aW50ZXJzXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGFzcGFjZSkKKwkJYmFz ZV9hZGRyID0gbXNtX2ZyYW1lYnVmZmVyX2lvdmEoZmIsIGFzcGFjZSwgMCk7CisJaWYgKCFiYXNl X2FkZHIpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gcmV0cmlldmUgYmFzZSBhZGRyXG4iKTsK KwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJbWV0YSA9IERQVV9GT1JNQVRfSVNfVUJXQyhsYXlv dXQtPmZvcm1hdCk7CisKKwkvKiBQZXItZm9ybWF0IGxvZ2ljIGZvciB2ZXJpZnlpbmcgYWN0aXZl IHBsYW5lcyAqLworCWlmIChEUFVfRk9STUFUX0lTX1lVVihsYXlvdXQtPmZvcm1hdCkpIHsKKwkJ LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyog ICAgICBVQldDICAgICAgICAgICAgKiogICAgICAgICAgICAgICAgICAgICAgKi8KKwkJLyogICAg ICBidWZmZXIgICAgICAgICAgKiogICAgICBEUFUgUExBTkUgICAgICAgKi8KKwkJLyogICAgICBm b3JtYXQgICAgICAgICAgKiogICAgICAgICAgICAgICAgICAgICAgKi8KKwkJLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogLS0tLS0tLS0tLS0t LS0tLS0tLSAgKiogLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkJLyogfCAgICAgIFkgbWV0YSAg ICAgfCAgKiogfCAgICBZIGJpdHN0cmVhbSAgIHwgKi8KKwkJLyogfCAgICAgICBkYXRhICAgICAg fCAgKiogfCAgICAgICBwbGFuZSAgICAgIHwgKi8KKwkJLyogLS0tLS0tLS0tLS0tLS0tLS0tLSAg KiogLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkJLyogfCAgICBZIGJpdHN0cmVhbSAgfCAgKiog fCAgQ2JDciBiaXRzdHJlYW0gIHwgKi8KKwkJLyogfCAgICAgICBkYXRhICAgICAgfCAgKiogfCAg ICAgICBwbGFuZSAgICAgIHwgKi8KKwkJLyogLS0tLS0tLS0tLS0tLS0tLS0tLSAgKiogLS0tLS0t LS0tLS0tLS0tLS0tLS0gKi8KKwkJLyogfCAgIENiY3IgbWV0YWRhdGEgfCAgKiogfCAgICAgICBZ IG1ldGEgICAgIHwgKi8KKwkJLyogfCAgICAgICBkYXRhICAgICAgfCAgKiogfCAgICAgICBwbGFu ZSAgICAgIHwgKi8KKwkJLyogLS0tLS0tLS0tLS0tLS0tLS0tLSAgKiogLS0tLS0tLS0tLS0tLS0t LS0tLS0gKi8KKwkJLyogfCAgQ2JDciBiaXRzdHJlYW0gfCAgKiogfCAgICAgQ2JDciBtZXRhICAg IHwgKi8KKwkJLyogfCAgICAgICBkYXRhICAgICAgfCAgKiogfCAgICAgICBwbGFuZSAgICAgIHwg Ki8KKwkJLyogLS0tLS0tLS0tLS0tLS0tLS0tLSAgKiogLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8K KwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwor CQkvKiBjb25maWd1cmUgWSBiaXRzdHJlYW0gcGxhbmUgKi8KKwkJbGF5b3V0LT5wbGFuZV9hZGRy WzBdID0gYmFzZV9hZGRyICsgbGF5b3V0LT5wbGFuZV9zaXplWzJdOworCisJCS8qIGNvbmZpZ3Vy ZSBDYkNyIGJpdHN0cmVhbSBwbGFuZSAqLworCQlsYXlvdXQtPnBsYW5lX2FkZHJbMV0gPSBiYXNl X2FkZHIgKyBsYXlvdXQtPnBsYW5lX3NpemVbMF0KKwkJCSsgbGF5b3V0LT5wbGFuZV9zaXplWzJd ICsgbGF5b3V0LT5wbGFuZV9zaXplWzNdOworCisJCWlmICghbWV0YSkKKwkJCWdvdG8gZG9uZTsK KworCQkvKiBjb25maWd1cmUgWSBtZXRhZGF0YSBwbGFuZSAqLworCQlsYXlvdXQtPnBsYW5lX2Fk ZHJbMl0gPSBiYXNlX2FkZHI7CisKKwkJLyogY29uZmlndXJlIENiQ3IgbWV0YWRhdGEgcGxhbmUg Ki8KKwkJbGF5b3V0LT5wbGFuZV9hZGRyWzNdID0gYmFzZV9hZGRyICsgbGF5b3V0LT5wbGFuZV9z aXplWzBdCisJCQkrIGxheW91dC0+cGxhbmVfc2l6ZVsyXTsKKworCX0gZWxzZSB7CisJCS8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qICAgICAg VUJXQyAgICAgICAgICAgICoqICAgICAgICAgICAgICAgICAgICAgICovCisJCS8qICAgICAgYnVm ZmVyICAgICAgICAgICoqICAgICAgRFBVIFBMQU5FICAgICAgICovCisJCS8qICAgICAgZm9ybWF0 ICAgICAgICAgICoqICAgICAgICAgICAgICAgICAgICAgICovCisJCS8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIC0tLS0tLS0tLS0tLS0tLS0t LS0gICoqIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJCS8qIHwgICAgICBSR0IgbWV0YSAgIHwg ICoqIHwgICBSR0IgYml0c3RyZWFtICB8ICovCisJCS8qIHwgICAgICAgZGF0YSAgICAgIHwgICoq IHwgICAgICAgcGxhbmUgICAgICB8ICovCisJCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gICoqIC0t LS0tLS0tLS0tLS0tLS0tLS0tICovCisJCS8qIHwgIFJHQiBiaXRzdHJlYW0gIHwgICoqIHwgICAg ICAgTk9ORSAgICAgICB8ICovCisJCS8qIHwgICAgICAgZGF0YSAgICAgIHwgICoqIHwgICAgICAg ICAgICAgICAgICB8ICovCisJCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gICoqIC0tLS0tLS0tLS0t LS0tLS0tLS0tICovCisJCS8qICAgICAgICAgICAgICAgICAgICAgICoqIHwgICAgIFJHQiBtZXRh ICAgICB8ICovCisJCS8qICAgICAgICAgICAgICAgICAgICAgICoqIHwgICAgICAgcGxhbmUgICAg ICB8ICovCisJCS8qICAgICAgICAgICAgICAgICAgICAgICoqIC0tLS0tLS0tLS0tLS0tLS0tLS0t ICovCisJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov CisKKwkJbGF5b3V0LT5wbGFuZV9hZGRyWzBdID0gYmFzZV9hZGRyICsgbGF5b3V0LT5wbGFuZV9z aXplWzJdOworCQlsYXlvdXQtPnBsYW5lX2FkZHJbMV0gPSAwOworCisJCWlmICghbWV0YSkKKwkJ CWdvdG8gZG9uZTsKKworCQlsYXlvdXQtPnBsYW5lX2FkZHJbMl0gPSBiYXNlX2FkZHI7CisJCWxh eW91dC0+cGxhbmVfYWRkclszXSA9IDA7CisJfQorZG9uZToKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIGludCBfZHB1X2Zvcm1hdF9wb3B1bGF0ZV9hZGRyc19saW5lYXIoCisJCXN0cnVjdCBtc21f Z2VtX2FkZHJlc3Nfc3BhY2UgKmFzcGFjZSwKKwkJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIs CisJCXN0cnVjdCBkcHVfaHdfZm10X2xheW91dCAqbGF5b3V0KQoreworCXVuc2lnbmVkIGludCBp OworCisJLyogQ2FuIG5vdyBjaGVjayB0aGUgcGl0Y2hlcyBnaXZlbiB2cyBwaXRjaGVzIGV4cGVj dGVkICovCisJZm9yIChpID0gMDsgaSA8IGxheW91dC0+bnVtX3BsYW5lczsgKytpKSB7CisJCWlm IChsYXlvdXQtPnBsYW5lX3BpdGNoW2ldID4gZmItPnBpdGNoZXNbaV0pIHsKKwkJCURSTV9FUlJP UigicGxhbmUgJXUgZXhwZWN0ZWQgcGl0Y2ggJXUsIGZiICV1XG4iLAorCQkJCWksIGxheW91dC0+ cGxhbmVfcGl0Y2hbaV0sIGZiLT5waXRjaGVzW2ldKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9 CisJfQorCisJLyogUG9wdWxhdGUgYWRkcmVzc2VzIGZvciBzaW1wbGUgZm9ybWF0cyBoZXJlICov CisJZm9yIChpID0gMDsgaSA8IGxheW91dC0+bnVtX3BsYW5lczsgKytpKSB7CisJCWlmIChhc3Bh Y2UpCisJCQlsYXlvdXQtPnBsYW5lX2FkZHJbaV0gPQorCQkJCW1zbV9mcmFtZWJ1ZmZlcl9pb3Zh KGZiLCBhc3BhY2UsIGkpOworCQlpZiAoIWxheW91dC0+cGxhbmVfYWRkcltpXSkgeworCQkJRFJN X0VSUk9SKCJmYWlsZWQgdG8gcmV0cmlldmUgYmFzZSBhZGRyXG4iKTsKKwkJCXJldHVybiAtRUZB VUxUOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBkcHVfZm9ybWF0X3BvcHVsYXRl X2xheW91dCgKKwkJc3RydWN0IG1zbV9nZW1fYWRkcmVzc19zcGFjZSAqYXNwYWNlLAorCQlzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKKwkJc3RydWN0IGRwdV9od19mbXRfbGF5b3V0ICpsYXlv dXQpCit7CisJdWludDMyX3QgcGxhbmVfYWRkcltEUFVfTUFYX1BMQU5FU107CisJaW50IGksIHJl dDsKKworCWlmICghZmIgfHwgIWxheW91dCkgeworCQlEUk1fRVJST1IoImludmFsaWQgYXJndW1l bnRzXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKChmYi0+d2lkdGggPiBEUFVf TUFYX0lNR19XSURUSCkgfHwKKwkJCShmYi0+aGVpZ2h0ID4gRFBVX01BWF9JTUdfSEVJR0hUKSkg eworCQlEUk1fRVJST1IoImltYWdlIGRpbWVuc2lvbnMgb3V0c2lkZSBtYXggcmFuZ2VcbiIpOwor CQlyZXR1cm4gLUVSQU5HRTsKKwl9CisKKwlsYXlvdXQtPmZvcm1hdCA9IHRvX2RwdV9mb3JtYXQo bXNtX2ZyYW1lYnVmZmVyX2Zvcm1hdChmYikpOworCisJLyogUG9wdWxhdGUgdGhlIHBsYW5lIHNp emVzIGV0YyB2aWEgZ2V0X2Zvcm1hdCAqLworCXJldCA9IGRwdV9mb3JtYXRfZ2V0X3BsYW5lX3Np emVzKGxheW91dC0+Zm9ybWF0LCBmYi0+d2lkdGgsIGZiLT5oZWlnaHQsCisJCQlsYXlvdXQsIGZi LT5waXRjaGVzKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZm9yIChpID0gMDsgaSA8 IERQVV9NQVhfUExBTkVTOyArK2kpCisJCXBsYW5lX2FkZHJbaV0gPSBsYXlvdXQtPnBsYW5lX2Fk ZHJbaV07CisKKwkvKiBQb3B1bGF0ZSB0aGUgYWRkcmVzc2VzIGdpdmVuIHRoZSBmYiAqLworCWlm IChEUFVfRk9STUFUX0lTX1VCV0MobGF5b3V0LT5mb3JtYXQpIHx8CisJCQlEUFVfRk9STUFUX0lT X1RJTEUobGF5b3V0LT5mb3JtYXQpKQorCQlyZXQgPSBfZHB1X2Zvcm1hdF9wb3B1bGF0ZV9hZGRy c191YndjKGFzcGFjZSwgZmIsIGxheW91dCk7CisJZWxzZQorCQlyZXQgPSBfZHB1X2Zvcm1hdF9w b3B1bGF0ZV9hZGRyc19saW5lYXIoYXNwYWNlLCBmYiwgbGF5b3V0KTsKKworCS8qIGNoZWNrIGlm IGFueXRoaW5nIGNoYW5nZWQgKi8KKwlpZiAoIXJldCAmJiAhbWVtY21wKHBsYW5lX2FkZHIsIGxh eW91dC0+cGxhbmVfYWRkciwgc2l6ZW9mKHBsYW5lX2FkZHIpKSkKKwkJcmV0ID0gLUVBR0FJTjsK KworCXJldHVybiByZXQ7Cit9CisKK2ludCBkcHVfZm9ybWF0X2NoZWNrX21vZGlmaWVkX2Zvcm1h dCgKKwkJY29uc3Qgc3RydWN0IG1zbV9rbXMgKmttcywKKwkJY29uc3Qgc3RydWN0IG1zbV9mb3Jt YXQgKm1zbV9mbXQsCisJCWNvbnN0IHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQyICpjbWQsCisJCXN0 cnVjdCBkcm1fZ2VtX29iamVjdCAqKmJvcykKK3sKKwlpbnQgcmV0LCBpLCBudW1fYmFzZV9mbXRf cGxhbmVzOworCWNvbnN0IHN0cnVjdCBkcHVfZm9ybWF0ICpmbXQ7CisJc3RydWN0IGRwdV9od19m bXRfbGF5b3V0IGxheW91dDsKKwl1aW50MzJfdCBib3NfdG90YWxfc2l6ZSA9IDA7CisKKwlpZiAo IW1zbV9mbXQgfHwgIWNtZCB8fCAhYm9zKSB7CisJCURSTV9FUlJPUigiaW52YWxpZCBhcmd1bWVu dHNcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmbXQgPSB0b19kcHVfZm9ybWF0KG1z bV9mbXQpOworCW51bV9iYXNlX2ZtdF9wbGFuZXMgPSBkcm1fZm9ybWF0X251bV9wbGFuZXMoZm10 LT5iYXNlLnBpeGVsX2Zvcm1hdCk7CisKKwlyZXQgPSBkcHVfZm9ybWF0X2dldF9wbGFuZV9zaXpl cyhmbXQsIGNtZC0+d2lkdGgsIGNtZC0+aGVpZ2h0LAorCQkJJmxheW91dCwgY21kLT5waXRjaGVz KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZm9yIChpID0gMDsgaSA8IG51bV9iYXNl X2ZtdF9wbGFuZXM7IGkrKykgeworCQlpZiAoIWJvc1tpXSkgeworCQkJRFJNX0VSUk9SKCJpbnZh bGlkIGhhbmRsZSBmb3IgcGxhbmUgJWRcbiIsIGkpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0K KwkJaWYgKChpID09IDApIHx8IChib3NbaV0gIT0gYm9zWzBdKSkKKwkJCWJvc190b3RhbF9zaXpl ICs9IGJvc1tpXS0+c2l6ZTsKKwl9CisKKwlpZiAoYm9zX3RvdGFsX3NpemUgPCBsYXlvdXQudG90 YWxfc2l6ZSkgeworCQlEUk1fRVJST1IoImJ1ZmZlcnMgdG90YWwgc2l6ZSB0b28gc21hbGwgJXUg ZXhwZWN0ZWQgJXVcbiIsCisJCQkJYm9zX3RvdGFsX3NpemUsIGxheW91dC50b3RhbF9zaXplKTsK KwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2NvbnN0IHN0cnVjdCBk cHVfZm9ybWF0ICpkcHVfZ2V0X2RwdV9mb3JtYXRfZXh0KAorCQljb25zdCB1aW50MzJfdCBmb3Jt YXQsCisJCWNvbnN0IHVpbnQ2NF90IG1vZGlmaWVyKQoreworCXVpbnQzMl90IGkgPSAwOworCWNv bnN0IHN0cnVjdCBkcHVfZm9ybWF0ICpmbXQgPSBOVUxMOworCWNvbnN0IHN0cnVjdCBkcHVfZm9y bWF0ICptYXAgPSBOVUxMOworCXNzaXplX3QgbWFwX3NpemUgPSAwOworCisJLyoKKwkgKiBDdXJy ZW50bHkgb25seSBzdXBwb3J0IGV4YWN0bHkgemVybyBvciBvbmUgbW9kaWZpZXIuCisJICogQWxs IHBsYW5lcyB1c2UgdGhlIHNhbWUgbW9kaWZpZXIuCisJICovCisJRFBVX0RFQlVHKCJwbGFuZSBm b3JtYXQgbW9kaWZpZXIgMHglbGxYXG4iLCBtb2RpZmllcik7CisKKwlzd2l0Y2ggKG1vZGlmaWVy KSB7CisJY2FzZSAwOgorCQltYXAgPSBkcHVfZm9ybWF0X21hcDsKKwkJbWFwX3NpemUgPSBBUlJB WV9TSVpFKGRwdV9mb3JtYXRfbWFwKTsKKwkJYnJlYWs7CisJY2FzZSBEUk1fRk9STUFUX01PRF9R Q09NX0NPTVBSRVNTRUQ6CisJY2FzZSBEUk1fRk9STUFUX01PRF9RQ09NX0NPTVBSRVNTRUQgfCBE Uk1fRk9STUFUX01PRF9RQ09NX1RJTEU6CisJCW1hcCA9IGRwdV9mb3JtYXRfbWFwX3Vid2M7CisJ CW1hcF9zaXplID0gQVJSQVlfU0laRShkcHVfZm9ybWF0X21hcF91YndjKTsKKwkJRFBVX0RFQlVH KCJmb3VuZCBmbXQ6ICU0LjRzICBEUk1fRk9STUFUX01PRF9RQ09NX0NPTVBSRVNTRURcbiIsCisJ CQkJKGNoYXIgKikmZm9ybWF0KTsKKwkJYnJlYWs7CisJY2FzZSBEUk1fRk9STUFUX01PRF9RQ09N X0RYOgorCQltYXAgPSBkcHVfZm9ybWF0X21hcF9wMDEwOworCQltYXBfc2l6ZSA9IEFSUkFZX1NJ WkUoZHB1X2Zvcm1hdF9tYXBfcDAxMCk7CisJCURQVV9ERUJVRygiZm91bmQgZm10OiAlNC40cyBE Uk1fRk9STUFUX01PRF9RQ09NX0RYXG4iLAorCQkJCShjaGFyICopJmZvcm1hdCk7CisJCWJyZWFr OworCWNhc2UgKERSTV9GT1JNQVRfTU9EX1FDT01fRFggfCBEUk1fRk9STUFUX01PRF9RQ09NX0NP TVBSRVNTRUQpOgorCWNhc2UgKERSTV9GT1JNQVRfTU9EX1FDT01fRFggfCBEUk1fRk9STUFUX01P RF9RQ09NX0NPTVBSRVNTRUQgfAorCQkJRFJNX0ZPUk1BVF9NT0RfUUNPTV9USUxFKToKKwkJbWFw ID0gZHB1X2Zvcm1hdF9tYXBfcDAxMF91YndjOworCQltYXBfc2l6ZSA9IEFSUkFZX1NJWkUoZHB1 X2Zvcm1hdF9tYXBfcDAxMF91YndjKTsKKwkJRFBVX0RFQlVHKAorCQkJImZvdW5kIGZtdDogJTQu NHMgRFJNX0ZPUk1BVF9NT0RfUUNPTV9DT01QUkVTU0VEL0RYXG4iLAorCQkJCShjaGFyICopJmZv cm1hdCk7CisJCWJyZWFrOworCWNhc2UgKERSTV9GT1JNQVRfTU9EX1FDT01fRFggfCBEUk1fRk9S TUFUX01PRF9RQ09NX0NPTVBSRVNTRUQgfAorCQlEUk1fRk9STUFUX01PRF9RQ09NX1RJR0hUKToK KwljYXNlIChEUk1fRk9STUFUX01PRF9RQ09NX0RYIHwgRFJNX0ZPUk1BVF9NT0RfUUNPTV9DT01Q UkVTU0VEIHwKKwkJRFJNX0ZPUk1BVF9NT0RfUUNPTV9USUdIVCB8IERSTV9GT1JNQVRfTU9EX1FD T01fVElMRSk6CisJCW1hcCA9IGRwdV9mb3JtYXRfbWFwX3RwMTBfdWJ3YzsKKwkJbWFwX3NpemUg PSBBUlJBWV9TSVpFKGRwdV9mb3JtYXRfbWFwX3RwMTBfdWJ3Yyk7CisJCURQVV9ERUJVRygKKwkJ CSJmb3VuZCBmbXQ6ICU0LjRzIERSTV9GT1JNQVRfTU9EX1FDT01fQ09NUFJFU1NFRC9EWC9USUdI VFxuIiwKKwkJCQkoY2hhciAqKSZmb3JtYXQpOworCQlicmVhazsKKwljYXNlIERSTV9GT1JNQVRf TU9EX1FDT01fVElMRToKKwkJbWFwID0gZHB1X2Zvcm1hdF9tYXBfdGlsZTsKKwkJbWFwX3NpemUg PSBBUlJBWV9TSVpFKGRwdV9mb3JtYXRfbWFwX3RpbGUpOworCQlEUFVfREVCVUcoImZvdW5kIGZt dDogJTQuNHMgRFJNX0ZPUk1BVF9NT0RfUUNPTV9USUxFXG4iLAorCQkJCShjaGFyICopJmZvcm1h dCk7CisJCWJyZWFrOworCWNhc2UgKERSTV9GT1JNQVRfTU9EX1FDT01fVElMRSB8IERSTV9GT1JN QVRfTU9EX1FDT01fRFgpOgorCQltYXAgPSBkcHVfZm9ybWF0X21hcF9wMDEwX3RpbGU7CisJCW1h cF9zaXplID0gQVJSQVlfU0laRShkcHVfZm9ybWF0X21hcF9wMDEwX3RpbGUpOworCQlEUFVfREVC VUcoImZvdW5kIGZtdDogJTQuNHMgRFJNX0ZPUk1BVF9NT0RfUUNPTV9USUxFL0RYXG4iLAorCQkJ CShjaGFyICopJmZvcm1hdCk7CisJCWJyZWFrOworCWNhc2UgKERSTV9GT1JNQVRfTU9EX1FDT01f VElMRSB8IERSTV9GT1JNQVRfTU9EX1FDT01fRFggfAorCQkJRFJNX0ZPUk1BVF9NT0RfUUNPTV9U SUdIVCk6CisJCW1hcCA9IGRwdV9mb3JtYXRfbWFwX3RwMTBfdGlsZTsKKwkJbWFwX3NpemUgPSBB UlJBWV9TSVpFKGRwdV9mb3JtYXRfbWFwX3RwMTBfdGlsZSk7CisJCURQVV9ERUJVRygKKwkJCSJm b3VuZCBmbXQ6ICU0LjRzIERSTV9GT1JNQVRfTU9EX1FDT01fVElMRS9EWC9USUdIVFxuIiwKKwkJ CQkoY2hhciAqKSZmb3JtYXQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEUFVfRVJST1IoInVu c3VwcG9ydGVkIGZvcm1hdCBtb2RpZmllciAlbGxYXG4iLCBtb2RpZmllcik7CisJCXJldHVybiBO VUxMOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBtYXBfc2l6ZTsgaSsrKSB7CisJCWlmIChmb3Jt YXQgPT0gbWFwW2ldLmJhc2UucGl4ZWxfZm9ybWF0KSB7CisJCQlmbXQgPSAmbWFwW2ldOworCQkJ YnJlYWs7CisJCX0KKwl9CisKKwlpZiAoZm10ID09IE5VTEwpCisJCURQVV9FUlJPUigidW5zdXBw b3J0ZWQgZm10OiAlNC40cyBtb2RpZmllciAweCVsbFhcbiIsCisJCQkoY2hhciAqKSZmb3JtYXQs IG1vZGlmaWVyKTsKKwllbHNlCisJCURQVV9ERUJVRygiZm10ICU0LjRzIG1vZCAweCVsbFggdWJ3 YyAlZCB5dXYgJWRcbiIsCisJCQkJKGNoYXIgKikmZm9ybWF0LCBtb2RpZmllciwKKwkJCQlEUFVf Rk9STUFUX0lTX1VCV0MoZm10KSwKKwkJCQlEUFVfRk9STUFUX0lTX1lVVihmbXQpKTsKKworCXJl dHVybiBmbXQ7Cit9CisKK2NvbnN0IHN0cnVjdCBtc21fZm9ybWF0ICpkcHVfZ2V0X21zbV9mb3Jt YXQoCisJCXN0cnVjdCBtc21fa21zICprbXMsCisJCWNvbnN0IHVpbnQzMl90IGZvcm1hdCwKKwkJ Y29uc3QgdWludDY0X3QgbW9kaWZpZXJzKQoreworCWNvbnN0IHN0cnVjdCBkcHVfZm9ybWF0ICpm bXQgPSBkcHVfZ2V0X2RwdV9mb3JtYXRfZXh0KGZvcm1hdCwKKwkJCW1vZGlmaWVycyk7CisJaWYg KGZtdCkKKwkJcmV0dXJuICZmbXQtPmJhc2U7CisJcmV0dXJuIE5VTEw7Cit9CisKK3VpbnQzMl90 IGRwdV9wb3B1bGF0ZV9mb3JtYXRzKAorCQljb25zdCBzdHJ1Y3QgZHB1X2Zvcm1hdF9leHRlbmRl ZCAqZm9ybWF0X2xpc3QsCisJCXVpbnQzMl90ICpwaXhlbF9mb3JtYXRzLAorCQl1aW50NjRfdCAq cGl4ZWxfbW9kaWZpZXJzLAorCQl1aW50MzJfdCBwaXhlbF9mb3JtYXRzX21heCkKK3sKKwl1aW50 MzJfdCBpLCBmb3VyY2NfZm9ybWF0OworCisJaWYgKCFmb3JtYXRfbGlzdCB8fCAhcGl4ZWxfZm9y bWF0cykKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGkgPSAwLCBmb3VyY2NfZm9ybWF0ID0gMDsKKwkJ CWZvcm1hdF9saXN0LT5mb3VyY2NfZm9ybWF0ICYmIGkgPCBwaXhlbF9mb3JtYXRzX21heDsKKwkJ CSsrZm9ybWF0X2xpc3QpIHsKKwkJLyogdmVyaWZ5IGlmIGxpc3RlZCBmb3JtYXQgaXMgaW4gZHB1 X2Zvcm1hdF9tYXA/ICovCisKKwkJLyogb3B0aW9uYWxseSByZXR1cm4gbW9kaWZpZWQgZm9ybWF0 cyAqLworCQlpZiAocGl4ZWxfbW9kaWZpZXJzKSB7CisJCQkvKiBhc3N1bWUgc2FtZSBtb2RpZmll ciBmb3IgYWxsIGZiIHBsYW5lcyAqLworCQkJcGl4ZWxfZm9ybWF0c1tpXSA9IGZvcm1hdF9saXN0 LT5mb3VyY2NfZm9ybWF0OworCQkJcGl4ZWxfbW9kaWZpZXJzW2krK10gPSBmb3JtYXRfbGlzdC0+ bW9kaWZpZXI7CisJCX0gZWxzZSB7CisJCQkvKiBhc3N1bWUgYmFzZSBmb3JtYXRzIGdyb3VwZWQg dG9nZXRoZXIgKi8KKwkJCWlmIChmb3VyY2NfZm9ybWF0ICE9IGZvcm1hdF9saXN0LT5mb3VyY2Nf Zm9ybWF0KSB7CisJCQkJZm91cmNjX2Zvcm1hdCA9IGZvcm1hdF9saXN0LT5mb3VyY2NfZm9ybWF0 OworCQkJCXBpeGVsX2Zvcm1hdHNbaSsrXSA9IGZvdXJjY19mb3JtYXQ7CisJCQl9CisJCX0KKwl9 CisKKwlyZXR1cm4gaTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9mb3JtYXRzLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZm9y bWF0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYjU1YmZkMTNl Mjk2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X2Zvcm1hdHMuaApAQCAtMCwwICsxLDEzNiBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE1LTIwMTgs IFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg Ki8KKworI2lmbmRlZiBfRFBVX0ZPUk1BVFNfSAorI2RlZmluZSBfRFBVX0ZPUk1BVFNfSAorCisj aW5jbHVkZSA8ZHJtL2RybV9mb3VyY2MuaD4KKyNpbmNsdWRlICJtc21fZ2VtLmgiCisjaW5jbHVk ZSAiZHB1X2h3X21kc3MuaCIKKworLyoqCisgKiBkcHVfZ2V0X2RwdV9mb3JtYXRfZXh0KCkgLSBS ZXR1cm5zIGRwdSBmb3JtYXQgc3RydWN0dXJlIHBvaW50ZXIuCisgKiBAZm9ybWF0OiAgICAgICAg ICBEUk0gRm91ckNDIENvZGUKKyAqIEBtb2RpZmllcnM6ICAgICAgIGZvcm1hdCBtb2RpZmllciBh cnJheSBmcm9tIGNsaWVudCwgb25lIHBlciBwbGFuZQorICovCitjb25zdCBzdHJ1Y3QgZHB1X2Zv cm1hdCAqZHB1X2dldF9kcHVfZm9ybWF0X2V4dCgKKwkJY29uc3QgdWludDMyX3QgZm9ybWF0LAor CQljb25zdCB1aW50NjRfdCBtb2RpZmllcik7CisKKyNkZWZpbmUgZHB1X2dldF9kcHVfZm9ybWF0 KGYpIGRwdV9nZXRfZHB1X2Zvcm1hdF9leHQoZiwgMCkKKworLyoqCisgKiBkcHVfZ2V0X21zbV9m b3JtYXQgLSBnZXQgYW4gZHB1X2Zvcm1hdCBieSBpdHMgbXNtX2Zvcm1hdCBiYXNlCisgKiAgICAg ICAgICAgICAgICAgICAgIGNhbGxiYWNrIGZ1bmN0aW9uIHJlZ2lzdGVycyB3aXRoIHRoZSBtc21f a21zIGxheWVyCisgKiBAa21zOiAgICAgICAgICAgICBrbXMgZHJpdmVyCisgKiBAZm9ybWF0OiAg ICAgICAgICBEUk0gRm91ckNDIENvZGUKKyAqIEBtb2RpZmllcnM6ICAgICAgIGRhdGEgbGF5b3V0 IG1vZGlmaWVyCisgKi8KK2NvbnN0IHN0cnVjdCBtc21fZm9ybWF0ICpkcHVfZ2V0X21zbV9mb3Jt YXQoCisJCXN0cnVjdCBtc21fa21zICprbXMsCisJCWNvbnN0IHVpbnQzMl90IGZvcm1hdCwKKwkJ Y29uc3QgdWludDY0X3QgbW9kaWZpZXJzKTsKKworLyoqCisgKiBkcHVfcG9wdWxhdGVfZm9ybWF0 cyAtIHBvcHVsYXRlIHRoZSBnaXZlbiBhcnJheSB3aXRoIGZvdXJjYyBjb2RlcyBzdXBwb3J0ZWQK KyAqIEBmb3JtYXRfbGlzdDogICAgICAgcG9pbnRlciB0byBsaXN0IG9mIHBvc3NpYmxlIGZvcm1h dHMKKyAqIEBwaXhlbF9mb3JtYXRzOiAgICAgYXJyYXkgdG8gcG9wdWxhdGUgd2l0aCBmb3VyY2Mg Y29kZXMKKyAqIEBwaXhlbF9tb2RpZmllcnM6ICAgYXJyYXkgdG8gcG9wdWxhdGUgd2l0aCBkcm0g bW9kaWZpZXJzLCBjYW4gYmUgTlVMTAorICogQHBpeGVsX2Zvcm1hdHNfbWF4OiBsZW5ndGggb2Yg cGl4ZWwgZm9ybWF0cyBhcnJheQorICogUmV0dXJuOiBudW1iZXIgb2YgZWxlbWVudHMgcG9wdWxh dGVkCisgKi8KK3VpbnQzMl90IGRwdV9wb3B1bGF0ZV9mb3JtYXRzKAorCQljb25zdCBzdHJ1Y3Qg ZHB1X2Zvcm1hdF9leHRlbmRlZCAqZm9ybWF0X2xpc3QsCisJCXVpbnQzMl90ICpwaXhlbF9mb3Jt YXRzLAorCQl1aW50NjRfdCAqcGl4ZWxfbW9kaWZpZXJzLAorCQl1aW50MzJfdCBwaXhlbF9mb3Jt YXRzX21heCk7CisKKy8qKgorICogZHB1X2Zvcm1hdF9nZXRfcGxhbmVfc2l6ZXMgLSBjYWxjdWxh dGUgc2l6ZSBhbmQgbGF5b3V0IG9mIGdpdmVuIGJ1ZmZlciBmb3JtYXQKKyAqIEBmbXQ6ICAgICAg ICAgICAgIHBvaW50ZXIgdG8gZHB1X2Zvcm1hdAorICogQHc6ICAgICAgICAgICAgICAgd2lkdGgg b2YgdGhlIGJ1ZmZlcgorICogQGg6ICAgICAgICAgICAgICAgaGVpZ2h0IG9mIHRoZSBidWZmZXIK KyAqIEBsYXlvdXQ6ICAgICAgICAgIGxheW91dCBvZiB0aGUgYnVmZmVyCisgKiBAcGl0Y2hlczog ICAgICAgICBhcnJheSBvZiBzaXplIFtEUFVfTUFYX1BMQU5FU10gdG8gcG9wdWxhdGUKKyAqCQkg ICAgIHBpdGNoIGZvciBlYWNoIHBsYW5lCisgKgorICogUmV0dXJuOiBzaXplIG9mIHRoZSBidWZm ZXIKKyAqLworaW50IGRwdV9mb3JtYXRfZ2V0X3BsYW5lX3NpemVzKAorCQljb25zdCBzdHJ1Y3Qg ZHB1X2Zvcm1hdCAqZm10LAorCQljb25zdCB1aW50MzJfdCB3LAorCQljb25zdCB1aW50MzJfdCBo LAorCQlzdHJ1Y3QgZHB1X2h3X2ZtdF9sYXlvdXQgKmxheW91dCwKKwkJY29uc3QgdWludDMyX3Qg KnBpdGNoZXMpOworCisvKioKKyAqIGRwdV9mb3JtYXRfZ2V0X2Jsb2NrX3NpemUgLSBnZXQgYmxv Y2sgc2l6ZSBvZiBnaXZlbiBmb3JtYXQgd2hlbgorICoJb3BlcmF0aW5nIGluIGJsb2NrIG1vZGUK KyAqIEBmbXQ6ICAgICAgICAgICAgIHBvaW50ZXIgdG8gZHB1X2Zvcm1hdAorICogQHc6ICAgICAg ICAgICAgICAgcG9pbnRlciB0byB3aWR0aCBvZiB0aGUgYmxvY2sKKyAqIEBoOiAgICAgICAgICAg ICAgIHBvaW50ZXIgdG8gaGVpZ2h0IG9mIHRoZSBibG9jaworICoKKyAqIFJldHVybjogMCBpZiBz dWNjZXNzOyBlcnJvciBvb2RlIG90aGVyd2lzZQorICovCitpbnQgZHB1X2Zvcm1hdF9nZXRfYmxv Y2tfc2l6ZShjb25zdCBzdHJ1Y3QgZHB1X2Zvcm1hdCAqZm10LAorCQl1aW50MzJfdCAqdywgdWlu dDMyX3QgKmgpOworCisvKioKKyAqIGRwdV9mb3JtYXRfY2hlY2tfbW9kaWZpZWRfZm9ybWF0IC0g dmFsaWRhdGUgZm9ybWF0IGFuZCBidWZmZXJzIGZvcgorICogICAgICAgICAgICAgICAgICAgZHB1 IG5vbi1zdGFuZGFyZCwgaS5lLiBtb2RpZmllZCBmb3JtYXQKKyAqIEBrbXM6ICAgICAgICAgICAg IGttcyBkcml2ZXIKKyAqIEBtc21fZm10OiAgICAgICAgIHBvaW50ZXIgdG8gdGhlIG1zbV9mbXQg YmFzZSBwb2ludGVyIG9mIGFuIGRwdV9mb3JtYXQKKyAqIEBjbWQ6ICAgICAgICAgICAgIGZiX2Nt ZDIgc3RydWN0dXJlIHVzZXIgcmVxdWVzdAorICogQGJvczogICAgICAgICAgICAgZ2VtIGJ1ZmZl ciBvYmplY3QgbGlzdAorICoKKyAqIFJldHVybjogZXJyb3IgY29kZSBvbiBmYWlsdXJlLCAwIG9u IHN1Y2Nlc3MKKyAqLworaW50IGRwdV9mb3JtYXRfY2hlY2tfbW9kaWZpZWRfZm9ybWF0KAorCQlj b25zdCBzdHJ1Y3QgbXNtX2ttcyAqa21zLAorCQljb25zdCBzdHJ1Y3QgbXNtX2Zvcm1hdCAqbXNt X2ZtdCwKKwkJY29uc3Qgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKmNtZCwKKwkJc3RydWN0IGRy bV9nZW1fb2JqZWN0ICoqYm9zKTsKKworLyoqCisgKiBkcHVfZm9ybWF0X3BvcHVsYXRlX2xheW91 dCAtIHBvcHVsYXRlIHRoZSBnaXZlbiBmb3JtYXQgbGF5b3V0IGJhc2VkIG9uCisgKiAgICAgICAg ICAgICAgICAgICAgIG1tdSwgZmIsIGFuZCBmb3JtYXQgZm91bmQgaW4gdGhlIGZiCisgKiBAYXNw YWNlOiAgICAgICAgICAgIGFkZHJlc3Mgc3BhY2UgcG9pbnRlcgorICogQGZiOiAgICAgICAgICAg ICAgICBmcmFtZWJ1ZmZlciBwb2ludGVyCisgKiBAZm10bDogICAgICAgICAgICAgIGZvcm1hdCBs YXlvdXQgc3RydWN0dXJlIHRvIHBvcHVsYXRlCisgKgorICogUmV0dXJuOiBlcnJvciBjb2RlIG9u IGZhaWx1cmUsIC1FQUdBSU4gaWYgc3VjY2VzcyBidXQgdGhlIGFkZHJlc3NlcworICogICAgICAg ICBhcmUgdGhlIHNhbWUgYXMgYmVmb3JlIG9yIDAgaWYgbmV3IGFkZHJlc3NlcyB3ZXJlIHBvcHVs YXRlZAorICovCitpbnQgZHB1X2Zvcm1hdF9wb3B1bGF0ZV9sYXlvdXQoCisJCXN0cnVjdCBtc21f Z2VtX2FkZHJlc3Nfc3BhY2UgKmFzcGFjZSwKKwkJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIs CisJCXN0cnVjdCBkcHVfaHdfZm10X2xheW91dCAqZm10bCk7CisKKy8qKgorICogZHB1X2Zvcm1h dF9nZXRfZnJhbWVidWZmZXJfc2l6ZSAtIGdldCBmcmFtZWJ1ZmZlciBtZW1vcnkgc2l6ZQorICog QGZvcm1hdDogICAgICAgICAgICBEUk0gcGl4ZWwgZm9ybWF0CisgKiBAd2lkdGg6ICAgICAgICAg ICAgIHBpeGVsIHdpZHRoCisgKiBAaGVpZ2h0OiAgICAgICAgICAgIHBpeGVsIGhlaWdodAorICog QHBpdGNoZXM6ICAgICAgICAgICBhcnJheSBvZiBzaXplIFtEUFVfTUFYX1BMQU5FU10gdG8gcG9w dWxhdGUKKyAqCQkgICAgICAgcGl0Y2ggZm9yIGVhY2ggcGxhbmUKKyAqIEBtb2RpZmllcnM6ICAg ICAgICAgZHJtIG1vZGlmaWVyCisgKgorICogUmV0dXJuOiBtZW1vcnkgc2l6ZSByZXF1aXJlZCBm b3IgZnJhbWUgYnVmZmVyCisgKi8KK3VpbnQzMl90IGRwdV9mb3JtYXRfZ2V0X2ZyYW1lYnVmZmVy X3NpemUoCisJCWNvbnN0IHVpbnQzMl90IGZvcm1hdCwKKwkJY29uc3QgdWludDMyX3Qgd2lkdGgs CisJCWNvbnN0IHVpbnQzMl90IGhlaWdodCwKKwkJY29uc3QgdWludDMyX3QgKnBpdGNoZXMsCisJ CWNvbnN0IHVpbnQ2NF90IG1vZGlmaWVycyk7CisKKyNlbmRpZiAvKl9EUFVfRk9STUFUU19IICov CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfYmxrLmMg Yi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfYmxrLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi41OGQyOWU0M2ZhZWYKLS0tIC9kZXYvbnVsbAor KysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfYmxrLmMKQEAgLTAsMCAr MSwxNTUgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNy0yMDE4LCBUaGUgTGludXggRm91bmRhdGlv bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5k CisgKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNkZWZpbmUgcHJfZm10 KGZtdCkJIltkcm06JXM6JWRdICIgZm10LCBfX2Z1bmNfXywgX19MSU5FX18KKworI2luY2x1ZGUg PGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51 eC9zbGFiLmg+CisKKyNpbmNsdWRlICJkcHVfaHdfbWRzcy5oIgorI2luY2x1ZGUgImRwdV9od19i bGsuaCIKKworLyogU2VyaWFsaXphdGlvbiBsb2NrIGZvciBkcHVfaHdfYmxrX2xpc3QgKi8KK3N0 YXRpYyBERUZJTkVfTVVURVgoZHB1X2h3X2Jsa19sb2NrKTsKKworLyogTGlzdCBvZiBhbGwgaHcg YmxvY2sgb2JqZWN0cyAqLworc3RhdGljIExJU1RfSEVBRChkcHVfaHdfYmxrX2xpc3QpOworCisv KioKKyAqIGRwdV9od19ibGtfaW5pdCAtIGluaXRpYWxpemUgaHcgYmxvY2sgb2JqZWN0CisgKiBA dHlwZTogaHcgYmxvY2sgdHlwZSAtIGVudW0gZHB1X2h3X2Jsa190eXBlCisgKiBAaWQ6IGluc3Rh bmNlIGlkIG9mIHRoZSBodyBibG9jaworICogQG9wczogUG9pbnRlciB0byBibG9jayBvcGVyYXRp b25zCisgKiByZXR1cm46IDAgaWYgc3VjY2VzczsgZXJyb3IgY29kZSBvdGhlcndpc2UKKyAqLwor aW50IGRwdV9od19ibGtfaW5pdChzdHJ1Y3QgZHB1X2h3X2JsayAqaHdfYmxrLCB1MzIgdHlwZSwg aW50IGlkLAorCQlzdHJ1Y3QgZHB1X2h3X2Jsa19vcHMgKm9wcykKK3sKKwlpZiAoIWh3X2Jsaykg eworCQlwcl9lcnIoImludmFsaWQgcGFyYW1ldGVyc1xuIik7CisJCXJldHVybiAtRUlOVkFMOwor CX0KKworCUlOSVRfTElTVF9IRUFEKCZod19ibGstPmxpc3QpOworCWh3X2Jsay0+dHlwZSA9IHR5 cGU7CisJaHdfYmxrLT5pZCA9IGlkOworCWF0b21pY19zZXQoJmh3X2Jsay0+cmVmY291bnQsIDAp OworCisJaWYgKG9wcykKKwkJaHdfYmxrLT5vcHMgPSAqb3BzOworCisJbXV0ZXhfbG9jaygmZHB1 X2h3X2Jsa19sb2NrKTsKKwlsaXN0X2FkZCgmaHdfYmxrLT5saXN0LCAmZHB1X2h3X2Jsa19saXN0 KTsKKwltdXRleF91bmxvY2soJmRwdV9od19ibGtfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKwor LyoqCisgKiBkcHVfaHdfYmxrX2Rlc3Ryb3kgLSBkZXN0cm95IGh3IGJsb2NrIG9iamVjdC4KKyAq IEBod19ibGs6ICBwb2ludGVyIHRvIGh3IGJsb2NrIG9iamVjdAorICogcmV0dXJuOiBub25lCisg Ki8KK3ZvaWQgZHB1X2h3X2Jsa19kZXN0cm95KHN0cnVjdCBkcHVfaHdfYmxrICpod19ibGspCit7 CisJaWYgKCFod19ibGspIHsKKwkJcHJfZXJyKCJpbnZhbGlkIHBhcmFtZXRlcnNcbiIpOworCQly ZXR1cm47CisJfQorCisJaWYgKGF0b21pY19yZWFkKCZod19ibGstPnJlZmNvdW50KSkKKwkJcHJf ZXJyKCJod19ibGs6JWQuJWQgaW52YWxpZCByZWZjb3VudFxuIiwgaHdfYmxrLT50eXBlLAorCQkJ CWh3X2Jsay0+aWQpOworCisJbXV0ZXhfbG9jaygmZHB1X2h3X2Jsa19sb2NrKTsKKwlsaXN0X2Rl bCgmaHdfYmxrLT5saXN0KTsKKwltdXRleF91bmxvY2soJmRwdV9od19ibGtfbG9jayk7Cit9CisK Ky8qKgorICogZHB1X2h3X2Jsa19nZXQgLSBnZXQgaHdfYmxrIGZyb20gZnJlZSBwb29sCisgKiBA aHdfYmxrOiBpZiBzcGVjaWZpZWQsIGluY3JlbWVudCByZWZlcmVuY2UgY291bnQgb25seQorICog QHR5cGU6IGlmIGh3X2JsayBpcyBub3Qgc3BlY2lmaWVkLCBhbGxvY2F0ZSB0aGUgbmV4dCBhdmFp bGFibGUgb2YgdGhpcyB0eXBlCisgKiBAaWQ6IGlmIHNwZWNpZmllZCAoPj0gMCksIGFsbG9jYXRl IHRoZSBnaXZlbiBpbnN0YW5jZSBvZiB0aGUgYWJvdmUgdHlwZQorICogcmV0dXJuOiBwb2ludGVy IHRvIGh3IGJsb2NrIG9iamVjdAorICovCitzdHJ1Y3QgZHB1X2h3X2JsayAqZHB1X2h3X2Jsa19n ZXQoc3RydWN0IGRwdV9od19ibGsgKmh3X2JsaywgdTMyIHR5cGUsIGludCBpZCkKK3sKKwlzdHJ1 Y3QgZHB1X2h3X2JsayAqY3VycjsKKwlpbnQgcmMsIHJlZmNvdW50OworCisJaWYgKCFod19ibGsp IHsKKwkJbXV0ZXhfbG9jaygmZHB1X2h3X2Jsa19sb2NrKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRy eShjdXJyLCAmZHB1X2h3X2Jsa19saXN0LCBsaXN0KSB7CisJCQlpZiAoKGN1cnItPnR5cGUgIT0g dHlwZSkgfHwKKwkJCQkJKGlkID49IDAgJiYgY3Vyci0+aWQgIT0gaWQpIHx8CisJCQkJCShpZCA8 IDAgJiYKKwkJCQkJCWF0b21pY19yZWFkKCZjdXJyLT5yZWZjb3VudCkpKQorCQkJCWNvbnRpbnVl OworCisJCQlod19ibGsgPSBjdXJyOworCQkJYnJlYWs7CisJCX0KKwkJbXV0ZXhfdW5sb2NrKCZk cHVfaHdfYmxrX2xvY2spOworCX0KKworCWlmICghaHdfYmxrKSB7CisJCXByX2RlYnVnKCJubyBo d19ibGs6JWRcbiIsIHR5cGUpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZWZjb3VudCA9IGF0 b21pY19pbmNfcmV0dXJuKCZod19ibGstPnJlZmNvdW50KTsKKworCWlmIChyZWZjb3VudCA9PSAx ICYmIGh3X2Jsay0+b3BzLnN0YXJ0KSB7CisJCXJjID0gaHdfYmxrLT5vcHMuc3RhcnQoaHdfYmxr KTsKKwkJaWYgKHJjKSB7CisJCQlwcl9lcnIoImZhaWxlZCB0byBzdGFydCAgaHdfYmxrOiVkIHJj OiVkXG4iLCB0eXBlLCByYyk7CisJCQlnb3RvIGVycm9yX3N0YXJ0OworCQl9CisJfQorCisJcHJf ZGVidWcoImh3X2JsazolZC4lZCByZWZjb3VudDolZFxuIiwgaHdfYmxrLT50eXBlLAorCQkJaHdf YmxrLT5pZCwgcmVmY291bnQpOworCXJldHVybiBod19ibGs7CisKK2Vycm9yX3N0YXJ0OgorCWRw dV9od19ibGtfcHV0KGh3X2Jsayk7CisJcmV0dXJuIEVSUl9QVFIocmMpOworfQorCisvKioKKyAq IGRwdV9od19ibGtfcHV0IC0gcHV0IGh3X2JsayB0byBmcmVlIHBvb2wgaWYgZGVjcmVtZW50ZWQg cmVmY291bnQgaXMgemVybworICogQGh3X2JsazogaHcgYmxvY2sgdG8gYmUgZnJlZWQKKyAqIEBm cmVlX2JsazogZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gcmVmZXJlbmNlIGNvdW50IGdvZXMg dG8gemVybworICovCit2b2lkIGRwdV9od19ibGtfcHV0KHN0cnVjdCBkcHVfaHdfYmxrICpod19i bGspCit7CisJaWYgKCFod19ibGspIHsKKwkJcHJfZXJyKCJpbnZhbGlkIHBhcmFtZXRlcnNcbiIp OworCQlyZXR1cm47CisJfQorCisJcHJfZGVidWcoImh3X2JsazolZC4lZCByZWZjb3VudDolZFxu IiwgaHdfYmxrLT50eXBlLCBod19ibGstPmlkLAorCQkJYXRvbWljX3JlYWQoJmh3X2Jsay0+cmVm Y291bnQpKTsKKworCWlmICghYXRvbWljX3JlYWQoJmh3X2Jsay0+cmVmY291bnQpKSB7CisJCXBy X2VycigiaHdfYmxrOiVkLiVkIGludmFsaWQgcHV0XG4iLCBod19ibGstPnR5cGUsIGh3X2Jsay0+ aWQpOworCQlyZXR1cm47CisJfQorCisJaWYgKGF0b21pY19kZWNfcmV0dXJuKCZod19ibGstPnJl ZmNvdW50KSkKKwkJcmV0dXJuOworCisJaWYgKGh3X2Jsay0+b3BzLnN0b3ApCisJCWh3X2Jsay0+ b3BzLnN0b3AoaHdfYmxrKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9od19ibGsuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9o d19ibGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjBmNGNhOGFm MWVjNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9od19ibGsuaApAQCAtMCwwICsxLDUzIEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAxOCwg VGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgdmVyc2lvbiAyIGFuZAorICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq LworCisjaWZuZGVmIF9EUFVfSFdfQkxLX0gKKyNkZWZpbmUgX0RQVV9IV19CTEtfSAorCisjaW5j bHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8 bGludXgvYXRvbWljLmg+CisKK3N0cnVjdCBkcHVfaHdfYmxrOworCisvKioKKyAqIHN0cnVjdCBk cHVfaHdfYmxrX29wcyAtIGNvbW1vbiBoYXJkd2FyZSBibG9jayBvcGVyYXRpb25zCisgKiBAc3Rh cnQ6IHN0YXJ0IG9wZXJhdGlvbiBvbiBmaXJzdCBnZXQKKyAqIEBzdG9wOiBzdG9wIG9wZXJhdGlv biBvbiBsYXN0IHB1dAorICovCitzdHJ1Y3QgZHB1X2h3X2Jsa19vcHMgeworCWludCAoKnN0YXJ0 KShzdHJ1Y3QgZHB1X2h3X2JsayAqKTsKKwl2b2lkICgqc3RvcCkoc3RydWN0IGRwdV9od19ibGsg Kik7Cit9OworCisvKioKKyAqIHN0cnVjdCBkcHVfaHdfYmxrIC0gZGVmaW5pdGlvbiBvZiBoYXJk d2FyZSBibG9jayBvYmplY3QKKyAqIEBsaXN0OiBsaXN0IG9mIGhhcmR3YXJlIGJsb2NrcworICog QHR5cGU6IGhhcmR3YXJlIGJsb2NrIHR5cGUKKyAqIEBpZDogaW5zdGFuY2UgaWQKKyAqIEByZWZj b3VudDogcmVmZXJlbmNlL3VzYWdlIGNvdW50CisgKi8KK3N0cnVjdCBkcHVfaHdfYmxrIHsKKwlz dHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJdTMyIHR5cGU7CisJaW50IGlkOworCWF0b21pY190IHJl ZmNvdW50OworCXN0cnVjdCBkcHVfaHdfYmxrX29wcyBvcHM7Cit9OworCitpbnQgZHB1X2h3X2Js a19pbml0KHN0cnVjdCBkcHVfaHdfYmxrICpod19ibGssIHUzMiB0eXBlLCBpbnQgaWQsCisJCXN0 cnVjdCBkcHVfaHdfYmxrX29wcyAqb3BzKTsKK3ZvaWQgZHB1X2h3X2Jsa19kZXN0cm95KHN0cnVj dCBkcHVfaHdfYmxrICpod19ibGspOworCitzdHJ1Y3QgZHB1X2h3X2JsayAqZHB1X2h3X2Jsa19n ZXQoc3RydWN0IGRwdV9od19ibGsgKmh3X2JsaywgdTMyIHR5cGUsIGludCBpZCk7Cit2b2lkIGRw dV9od19ibGtfcHV0KHN0cnVjdCBkcHVfaHdfYmxrICpod19ibGspOworI2VuZGlmIC8qX0RQVV9I V19CTEtfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X2h3X2NhdGFsb2cuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jYXRh bG9nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4xNzkzY2ZkMjlh MDcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf aHdfY2F0YWxvZy5jCkBAIC0wLDAgKzEsNTExIEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAx OCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgdmVyc2lvbiAyIGFuZAorICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5 IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K KyAqLworCisjZGVmaW5lIHByX2ZtdChmbXQpCSJbZHJtOiVzOiVkXSAiIGZtdCwgX19mdW5jX18s IF9fTElORV9fCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2Fk ZHJlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlICJk cHVfaHdfbWRzcy5oIgorI2luY2x1ZGUgImRwdV9od19jYXRhbG9nLmgiCisjaW5jbHVkZSAiZHB1 X2h3X2NhdGFsb2dfZm9ybWF0LmgiCisjaW5jbHVkZSAiZHB1X2ttcy5oIgorCisjZGVmaW5lIFZJ R19TRE04NDVfTUFTSyBcCisJKEJJVChEUFVfU1NQUF9TUkMpIHwgQklUKERQVV9TU1BQX1NDQUxF Ul9RU0VFRDMpIHwgQklUKERQVV9TU1BQX1FPUykgfFwKKwlCSVQoRFBVX1NTUFBfQ1NDXzEwQklU KSB8IEJJVChEUFVfU1NQUF9DRFApIHwgQklUKERQVV9TU1BQX1FPU184TFZMKSB8XAorCUJJVChE UFVfU1NQUF9UU19QUkVGSUxMKSB8IEJJVChEUFVfU1NQUF9FWENMX1JFQ1QpKQorCisjZGVmaW5l IERNQV9TRE04NDVfTUFTSyBcCisJKEJJVChEUFVfU1NQUF9TUkMpIHwgQklUKERQVV9TU1BQX1FP UykgfCBCSVQoRFBVX1NTUFBfUU9TXzhMVkwpIHxcCisJQklUKERQVV9TU1BQX1RTX1BSRUZJTEwp IHwgQklUKERQVV9TU1BQX1RTX1BSRUZJTExfUkVDMSkgfFwKKwlCSVQoRFBVX1NTUFBfQ0RQKSB8 IEJJVChEUFVfU1NQUF9FWENMX1JFQ1QpKQorCisjZGVmaW5lIE1JWEVSX1NETTg0NV9NQVNLIFwK KwkoQklUKERQVV9NSVhFUl9TT1VSQ0VTUExJVCkgfCBCSVQoRFBVX0RJTV9MQVlFUikpCisKKyNk ZWZpbmUgUElOR1BPTkdfU0RNODQ1X01BU0sgQklUKERQVV9QSU5HUE9OR19ESVRIRVIpCisKKyNk ZWZpbmUgUElOR1BPTkdfU0RNODQ1X1NQTElUX01BU0sgXAorCShQSU5HUE9OR19TRE04NDVfTUFT SyB8IEJJVChEUFVfUElOR1BPTkdfVEUyKSkKKworI2RlZmluZSBERUZBVUxUX1BJWEVMX1JBTV9T SVpFCQkoNTAgKiAxMDI0KQorI2RlZmluZSBERUZBVUxUX0RQVV9MSU5FX1dJRFRICQkyMDQ4Cisj ZGVmaW5lIERFRkFVTFRfRFBVX09VVFBVVF9MSU5FX1dJRFRICTI1NjAKKworI2RlZmluZSBNQVhf SE9SWl9ERUNJTUFUSU9OCTQKKyNkZWZpbmUgTUFYX1ZFUlRfREVDSU1BVElPTgk0CisKKyNkZWZp bmUgTUFYX1VQU0NBTEVfUkFUSU8JMjAKKyNkZWZpbmUgTUFYX0RPV05TQ0FMRV9SQVRJTwk0Cisj ZGVmaW5lIFNTUFBfVU5JVFlfU0NBTEUJMQorCisjZGVmaW5lIFNUUkNBVChYLCBZKSAoWCBZKQor CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKgorICogRFBVIHN1YiBibG9ja3MgY29uZmlnCisgKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIERQVSB0b3AgbGV2 ZWwgY2FwcyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBkcHVfY2FwcyBzZG04NDVfZHB1X2NhcHMg PSB7CisJLm1heF9taXhlcl93aWR0aCA9IERFRkFVTFRfRFBVX09VVFBVVF9MSU5FX1dJRFRILAor CS5tYXhfbWl4ZXJfYmxlbmRzdGFnZXMgPSAweGIsCisJLnFzZWVkX3R5cGUgPSBEUFVfU1NQUF9T Q0FMRVJfUVNFRUQzLAorCS5zbWFydF9kbWFfcmV2ID0gRFBVX1NTUFBfU01BUlRfRE1BX1YyLAor CS51YndjX3ZlcnNpb24gPSBEUFVfSFdfVUJXQ19WRVJfMjAsCisJLmhhc19zcmNfc3BsaXQgPSB0 cnVlLAorCS5oYXNfZGltX2xheWVyID0gdHJ1ZSwKKwkuaGFzX2lkbGVfcGMgPSB0cnVlLAorfTsK Kworc3RhdGljIHN0cnVjdCBkcHVfbWRwX2NmZyBzZG04NDVfbWRwW10gPSB7CisJeworCS5uYW1l ID0gInRvcF8wIiwgLmlkID0gTURQX1RPUCwKKwkuYmFzZSA9IDB4MCwgLmxlbiA9IDB4NDVDLAor CS5mZWF0dXJlcyA9IDAsCisJLmhpZ2hlc3RfYmFua19iaXQgPSAweDIsCisJLmhhc19kZXN0X3Nj YWxlciA9IHRydWUsCisJLmNsa19jdHJsc1tEUFVfQ0xLX0NUUkxfVklHMF0gPSB7CisJCQkucmVn X29mZiA9IDB4MkFDLCAuYml0X29mZiA9IDB9LAorCS5jbGtfY3RybHNbRFBVX0NMS19DVFJMX1ZJ RzFdID0geworCQkJLnJlZ19vZmYgPSAweDJCNCwgLmJpdF9vZmYgPSAwfSwKKwkuY2xrX2N0cmxz W0RQVV9DTEtfQ1RSTF9WSUcyXSA9IHsKKwkJCS5yZWdfb2ZmID0gMHgyQkMsIC5iaXRfb2ZmID0g MH0sCisJLmNsa19jdHJsc1tEUFVfQ0xLX0NUUkxfVklHM10gPSB7CisJCQkucmVnX29mZiA9IDB4 MkM0LCAuYml0X29mZiA9IDB9LAorCS5jbGtfY3RybHNbRFBVX0NMS19DVFJMX0RNQTBdID0gewor CQkJLnJlZ19vZmYgPSAweDJBQywgLmJpdF9vZmYgPSA4fSwKKwkuY2xrX2N0cmxzW0RQVV9DTEtf Q1RSTF9ETUExXSA9IHsKKwkJCS5yZWdfb2ZmID0gMHgyQjQsIC5iaXRfb2ZmID0gOH0sCisJLmNs a19jdHJsc1tEUFVfQ0xLX0NUUkxfQ1VSU09SMF0gPSB7CisJCQkucmVnX29mZiA9IDB4MkJDLCAu Yml0X29mZiA9IDh9LAorCS5jbGtfY3RybHNbRFBVX0NMS19DVFJMX0NVUlNPUjFdID0geworCQkJ LnJlZ19vZmYgPSAweDJDNCwgLmJpdF9vZmYgPSA4fSwKKwl9LAorfTsKKworLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENU TCBzdWIgYmxvY2tzIGNvbmZpZworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IGRwdV9jdGxfY2ZnIHNk bTg0NV9jdGxbXSA9IHsKKwl7CisJLm5hbWUgPSAiY3RsXzAiLCAuaWQgPSBDVExfMCwKKwkuYmFz ZSA9IDB4MTAwMCwgLmxlbiA9IDB4RTQsCisJLmZlYXR1cmVzID0gQklUKERQVV9DVExfU1BMSVRf RElTUExBWSkKKwl9LAorCXsKKwkubmFtZSA9ICJjdGxfMSIsIC5pZCA9IENUTF8xLAorCS5iYXNl ID0gMHgxMjAwLCAubGVuID0gMHhFNCwKKwkuZmVhdHVyZXMgPSBCSVQoRFBVX0NUTF9TUExJVF9E SVNQTEFZKQorCX0sCisJeworCS5uYW1lID0gImN0bF8yIiwgLmlkID0gQ1RMXzIsCisJLmJhc2Ug PSAweDE0MDAsIC5sZW4gPSAweEU0LAorCS5mZWF0dXJlcyA9IDAKKwl9LAorCXsKKwkubmFtZSA9 ICJjdGxfMyIsIC5pZCA9IENUTF8zLAorCS5iYXNlID0gMHgxNjAwLCAubGVuID0gMHhFNCwKKwku ZmVhdHVyZXMgPSAwCisJfSwKKwl7CisJLm5hbWUgPSAiY3RsXzQiLCAuaWQgPSBDVExfNCwKKwku YmFzZSA9IDB4MTgwMCwgLmxlbiA9IDB4RTQsCisJLmZlYXR1cmVzID0gMAorCX0sCit9OworCisv KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKgorICogU1NQUCBzdWIgYmxvY2tzIGNvbmZpZworICoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFNTUFAgY29tbW9u IGNvbmZpZ3VyYXRpb24gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHB1X3NzcHBfYmxrc19jb21t b24gc2RtODQ1X3NzcHBfY29tbW9uID0geworCS5tYXhsaW5ld2lkdGggPSBERUZBVUxUX0RQVV9P VVRQVVRfTElORV9XSURUSCwKKwkucGl4ZWxfcmFtX3NpemUgPSBERUZBVUxUX1BJWEVMX1JBTV9T SVpFLAorCS5tYXhoZGVjaWV4cCA9IE1BWF9IT1JaX0RFQ0lNQVRJT04sCisJLm1heHZkZWNpZXhw ID0gTUFYX1ZFUlRfREVDSU1BVElPTiwKK307CisKKyNkZWZpbmUgX1ZJR19TQkxLKG51bSwgc2Rt YV9wcmkpIFwKKwl7IFwKKwkuY29tbW9uID0gJnNkbTg0NV9zc3BwX2NvbW1vbiwgXAorCS5tYXhk d25zY2FsZSA9IE1BWF9ET1dOU0NBTEVfUkFUSU8sIFwKKwkubWF4dXBzY2FsZSA9IE1BWF9VUFND QUxFX1JBVElPLCBcCisJLnNtYXJ0X2RtYV9wcmlvcml0eSA9IHNkbWFfcHJpLCBcCisJLnNyY19i bGsgPSB7Lm5hbWUgPSBTVFJDQVQoInNzcHBfc3JjXyIsIG51bSksIFwKKwkJLmlkID0gRFBVX1NT UFBfU1JDLCAuYmFzZSA9IDB4MDAsIC5sZW4gPSAweDE1MCx9LCBcCisJLnNjYWxlcl9ibGsgPSB7 Lm5hbWUgPSBTVFJDQVQoInNzcHBfc2NhbGVyIiwgbnVtKSwgXAorCQkuaWQgPSBEUFVfU1NQUF9T Q0FMRVJfUVNFRUQzLCBcCisJCS5iYXNlID0gMHhhMDAsIC5sZW4gPSAweGEwLH0sIFwKKwkuY3Nj X2JsayA9IHsubmFtZSA9IFNUUkNBVCgic3NwcF9jc2MiLCBudW0pLCBcCisJCS5pZCA9IERQVV9T U1BQX0NTQ18xMEJJVCwgXAorCQkuYmFzZSA9IDB4MWEwMCwgLmxlbiA9IDB4MTAwLH0sIFwKKwku Zm9ybWF0X2xpc3QgPSBwbGFuZV9mb3JtYXRzX3l1diwgXAorCS52aXJ0X2Zvcm1hdF9saXN0ID0g cGxhbmVfZm9ybWF0cywgXAorCX0KKworI2RlZmluZSBfRE1BX1NCTEsobnVtLCBzZG1hX3ByaSkg XAorCXsgXAorCS5jb21tb24gPSAmc2RtODQ1X3NzcHBfY29tbW9uLCBcCisJLm1heGR3bnNjYWxl ID0gU1NQUF9VTklUWV9TQ0FMRSwgXAorCS5tYXh1cHNjYWxlID0gU1NQUF9VTklUWV9TQ0FMRSwg XAorCS5zbWFydF9kbWFfcHJpb3JpdHkgPSBzZG1hX3ByaSwgXAorCS5zcmNfYmxrID0gey5uYW1l ID0gU1RSQ0FUKCJzc3BwX3NyY18iLCBudW0pLCBcCisJCS5pZCA9IERQVV9TU1BQX1NSQywgLmJh c2UgPSAweDAwLCAubGVuID0gMHgxNTAsfSwgXAorCS5mb3JtYXRfbGlzdCA9IHBsYW5lX2Zvcm1h dHMsIFwKKwkudmlydF9mb3JtYXRfbGlzdCA9IHBsYW5lX2Zvcm1hdHMsIFwKKwl9CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3QgZHB1X3NzcHBfc3ViX2Jsa3Mgc2RtODQ1X3ZpZ19zYmxrXzAgPSBfVklH X1NCTEsoIjAiLCA1KTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHB1X3NzcHBfc3ViX2Jsa3Mgc2Rt ODQ1X3ZpZ19zYmxrXzEgPSBfVklHX1NCTEsoIjEiLCA2KTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg ZHB1X3NzcHBfc3ViX2Jsa3Mgc2RtODQ1X3ZpZ19zYmxrXzIgPSBfVklHX1NCTEsoIjIiLCA3KTsK K3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHB1X3NzcHBfc3ViX2Jsa3Mgc2RtODQ1X3ZpZ19zYmxrXzMg PSBfVklHX1NCTEsoIjMiLCA4KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcHVfc3NwcF9zdWJf YmxrcyBzZG04NDVfZG1hX3NibGtfMCA9IF9ETUFfU0JMSygiOCIsIDEpOworc3RhdGljIGNvbnN0 IHN0cnVjdCBkcHVfc3NwcF9zdWJfYmxrcyBzZG04NDVfZG1hX3NibGtfMSA9IF9ETUFfU0JMSygi OSIsIDIpOworc3RhdGljIGNvbnN0IHN0cnVjdCBkcHVfc3NwcF9zdWJfYmxrcyBzZG04NDVfZG1h X3NibGtfMiA9IF9ETUFfU0JMSygiMTAiLCAzKTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHB1X3Nz cHBfc3ViX2Jsa3Mgc2RtODQ1X2RtYV9zYmxrXzMgPSBfRE1BX1NCTEsoIjExIiwgNCk7CisKKyNk ZWZpbmUgU1NQUF9WSUdfQkxLKF9uYW1lLCBfaWQsIF9iYXNlLCBfc2JsaywgX3hpbmlkLCBfY2xr Y3RybCkgXAorCXsgXAorCS5uYW1lID0gX25hbWUsIC5pZCA9IF9pZCwgXAorCS5iYXNlID0gX2Jh c2UsIC5sZW4gPSAweDFjOCwgXAorCS5mZWF0dXJlcyA9IFZJR19TRE04NDVfTUFTSywgXAorCS5z YmxrID0gJl9zYmxrLCBcCisJLnhpbl9pZCA9IF94aW5pZCwgXAorCS50eXBlID0gU1NQUF9UWVBF X1ZJRywgXAorCS5jbGtfY3RybCA9IF9jbGtjdHJsIFwKKwl9CisKKyNkZWZpbmUgU1NQUF9ETUFf QkxLKF9uYW1lLCBfaWQsIF9iYXNlLCBfc2JsaywgX3hpbmlkLCBfY2xrY3RybCkgXAorCXsgXAor CS5uYW1lID0gX25hbWUsIC5pZCA9IF9pZCwgXAorCS5iYXNlID0gX2Jhc2UsIC5sZW4gPSAweDFj OCwgXAorCS5mZWF0dXJlcyA9IERNQV9TRE04NDVfTUFTSywgXAorCS5zYmxrID0gJl9zYmxrLCBc CisJLnhpbl9pZCA9IF94aW5pZCwgXAorCS50eXBlID0gU1NQUF9UWVBFX0RNQSwgXAorCS5jbGtf Y3RybCA9IF9jbGtjdHJsIFwKKwl9CisKK3N0YXRpYyBzdHJ1Y3QgZHB1X3NzcHBfY2ZnIHNkbTg0 NV9zc3BwW10gPSB7CisJU1NQUF9WSUdfQkxLKCJzc3BwXzAiLCBTU1BQX1ZJRzAsIDB4NDAwMCwK KwkJc2RtODQ1X3ZpZ19zYmxrXzAsIDAsIERQVV9DTEtfQ1RSTF9WSUcwKSwKKwlTU1BQX1ZJR19C TEsoInNzcHBfMSIsIFNTUFBfVklHMSwgMHg2MDAwLAorCQlzZG04NDVfdmlnX3NibGtfMSwgNCwg RFBVX0NMS19DVFJMX1ZJRzEpLAorCVNTUFBfVklHX0JMSygic3NwcF8yIiwgU1NQUF9WSUcyLCAw eDgwMDAsCisJCXNkbTg0NV92aWdfc2Jsa18yLCA4LCBEUFVfQ0xLX0NUUkxfVklHMiksCisJU1NQ UF9WSUdfQkxLKCJzc3BwXzMiLCBTU1BQX1ZJRzMsIDB4YTAwMCwKKwkJc2RtODQ1X3ZpZ19zYmxr XzMsIDEyLCBEUFVfQ0xLX0NUUkxfVklHMyksCisJU1NQUF9ETUFfQkxLKCJzc3BwXzgiLCBTU1BQ X0RNQTAsIDB4MjQwMDAsCisJCXNkbTg0NV9kbWFfc2Jsa18wLCAxLCBEUFVfQ0xLX0NUUkxfRE1B MCksCisJU1NQUF9ETUFfQkxLKCJzc3BwXzkiLCBTU1BQX0RNQTEsIDB4MjYwMDAsCisJCXNkbTg0 NV9kbWFfc2Jsa18xLCA1LCBEUFVfQ0xLX0NUUkxfRE1BMSksCisJU1NQUF9ETUFfQkxLKCJzc3Bw XzEwIiwgU1NQUF9ETUEyLCAweDI4MDAwLAorCQlzZG04NDVfZG1hX3NibGtfMiwgOSwgRFBVX0NM S19DVFJMX0NVUlNPUjApLAorCVNTUFBfRE1BX0JMSygic3NwcF8xMSIsIFNTUFBfRE1BMywgMHgy YTAwMCwKKwkJc2RtODQ1X2RtYV9zYmxrXzMsIDEzLCBEUFVfQ0xLX0NUUkxfQ1VSU09SMSksCit9 OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKgorICogTUlYRVIgc3ViIGJsb2NrcyBjb25maWcKKyAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGNv bnN0IHN0cnVjdCBkcHVfbG1fc3ViX2Jsa3Mgc2RtODQ1X2xtX3NibGsgPSB7CisJLm1heHdpZHRo ID0gREVGQVVMVF9EUFVfT1VUUFVUX0xJTkVfV0lEVEgsCisJLm1heGJsZW5kc3RhZ2VzID0gMTEs IC8qIGV4Y2x1ZGluZyBiYXNlIGxheWVyICovCisJLmJsZW5kc3RhZ2VfYmFzZSA9IHsgLyogb2Zm c2V0cyByZWxhdGl2ZSB0byBtaXhlciBiYXNlICovCisJCTB4MjAsIDB4MzgsIDB4NTAsIDB4Njgs IDB4ODAsIDB4OTgsCisJCTB4YjAsIDB4YzgsIDB4ZTAsIDB4ZjgsIDB4MTEwCisJfSwKK307CisK KyNkZWZpbmUgTE1fQkxLKF9uYW1lLCBfaWQsIF9iYXNlLCBfZHMsIF9wcCwgX2xtcGFpcikgXAor CXsgXAorCS5uYW1lID0gX25hbWUsIC5pZCA9IF9pZCwgXAorCS5iYXNlID0gX2Jhc2UsIC5sZW4g PSAweDMyMCwgXAorCS5mZWF0dXJlcyA9IE1JWEVSX1NETTg0NV9NQVNLLCBcCisJLnNibGsgPSAm c2RtODQ1X2xtX3NibGssIFwKKwkuZHMgPSBfZHMsIFwKKwkucGluZ3BvbmcgPSBfcHAsIFwKKwku bG1fcGFpcl9tYXNrID0gKDEgPDwgX2xtcGFpcikgXAorCX0KKworc3RhdGljIHN0cnVjdCBkcHVf bG1fY2ZnIHNkbTg0NV9sbVtdID0geworCUxNX0JMSygibG1fMCIsIExNXzAsIDB4NDQwMDAsIERT XzAsIFBJTkdQT05HXzAsIExNXzEpLAorCUxNX0JMSygibG1fMSIsIExNXzEsIDB4NDUwMDAsIERT XzEsIFBJTkdQT05HXzEsIExNXzApLAorCUxNX0JMSygibG1fMiIsIExNXzIsIDB4NDYwMDAsIERT X01BWCwgUElOR1BPTkdfMiwgTE1fNSksCisJTE1fQkxLKCJsbV8zIiwgTE1fMywgMHgwLCBEU19N QVgsIFBJTkdQT05HX01BWCwgMCksCisJTE1fQkxLKCJsbV80IiwgTE1fNCwgMHgwLCBEU19NQVgs IFBJTkdQT05HX01BWCwgMCksCisJTE1fQkxLKCJsbV81IiwgTE1fNSwgMHg0OTAwMCwgRFNfTUFY LCBQSU5HUE9OR18zLCBMTV8yKSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEUyBzdWIgYmxvY2tzIGNvbmZp ZworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCitzdGF0aWMgY29uc3Qgc3RydWN0IGRwdV9kc190b3BfY2ZnIHNkbTg0NV9kc190 b3AgPSB7CisJLm5hbWUgPSAiZHNfdG9wXzAiLCAuaWQgPSBEU19UT1AsCisJLmJhc2UgPSAweDYw MDAwLCAubGVuID0gMHhjLAorCS5tYXhpbnB1dHdpZHRoID0gREVGQVVMVF9EUFVfTElORV9XSURU SCwKKwkubWF4b3V0cHV0d2lkdGggPSBERUZBVUxUX0RQVV9PVVRQVVRfTElORV9XSURUSCwKKwku bWF4dXBzY2FsZSA9IE1BWF9VUFNDQUxFX1JBVElPLAorfTsKKworI2RlZmluZSBEU19CTEsoX25h bWUsIF9pZCwgX2Jhc2UpIFwKKwl7XAorCS5uYW1lID0gX25hbWUsIC5pZCA9IF9pZCwgXAorCS5i YXNlID0gX2Jhc2UsIC5sZW4gPSAweDgwMCwgXAorCS5mZWF0dXJlcyA9IERQVV9TU1BQX1NDQUxF Ul9RU0VFRDMsIFwKKwkudG9wID0gJnNkbTg0NV9kc190b3AgXAorCX0KKworc3RhdGljIHN0cnVj dCBkcHVfZHNfY2ZnIHNkbTg0NV9kc1tdID0geworCURTX0JMSygiZHNfMCIsIERTXzAsIDB4ODAw KSwKKwlEU19CTEsoImRzXzEiLCBEU18xLCAweDEwMDApLAorfTsKKworLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFBJTkdQ T05HIHN1YiBibG9ja3MgY29uZmlnCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHB1X3Bp bmdwb25nX3N1Yl9ibGtzIHNkbTg0NV9wcF9zYmxrX3RlID0geworCS50ZTIgPSB7LmlkID0gRFBV X1BJTkdQT05HX1RFMiwgLmJhc2UgPSAweDIwMDAsIC5sZW4gPSAweDAsCisJCS52ZXJzaW9uID0g MHgxfSwKKwkuZGl0aGVyID0gey5pZCA9IERQVV9QSU5HUE9OR19ESVRIRVIsIC5iYXNlID0gMHgz MGUwLAorCQkubGVuID0gMHgyMCwgLnZlcnNpb24gPSAweDEwMDAwfSwKK307CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZHB1X3Bpbmdwb25nX3N1Yl9ibGtzIHNkbTg0NV9wcF9zYmxrID0geworCS5k aXRoZXIgPSB7LmlkID0gRFBVX1BJTkdQT05HX0RJVEhFUiwgLmJhc2UgPSAweDMwZTAsCisJCS5s ZW4gPSAweDIwLCAudmVyc2lvbiA9IDB4MTAwMDB9LAorfTsKKworI2RlZmluZSBQUF9CTEtfVEUo X25hbWUsIF9pZCwgX2Jhc2UpIFwKKwl7XAorCS5uYW1lID0gX25hbWUsIC5pZCA9IF9pZCwgXAor CS5iYXNlID0gX2Jhc2UsIC5sZW4gPSAweGQ0LCBcCisJLmZlYXR1cmVzID0gUElOR1BPTkdfU0RN ODQ1X1NQTElUX01BU0ssIFwKKwkuc2JsayA9ICZzZG04NDVfcHBfc2Jsa190ZSBcCisJfQorI2Rl ZmluZSBQUF9CTEsoX25hbWUsIF9pZCwgX2Jhc2UpIFwKKwl7XAorCS5uYW1lID0gX25hbWUsIC5p ZCA9IF9pZCwgXAorCS5iYXNlID0gX2Jhc2UsIC5sZW4gPSAweGQ0LCBcCisJLmZlYXR1cmVzID0g UElOR1BPTkdfU0RNODQ1X01BU0ssIFwKKwkuc2JsayA9ICZzZG04NDVfcHBfc2JsayBcCisJfQor CitzdGF0aWMgc3RydWN0IGRwdV9waW5ncG9uZ19jZmcgc2RtODQ1X3BwW10gPSB7CisJUFBfQkxL X1RFKCJwaW5ncG9uZ18wIiwgUElOR1BPTkdfMCwgMHg3MDAwMCksCisJUFBfQkxLX1RFKCJwaW5n cG9uZ18xIiwgUElOR1BPTkdfMSwgMHg3MDgwMCksCisJUFBfQkxLKCJwaW5ncG9uZ18yIiwgUElO R1BPTkdfMiwgMHg3MTAwMCksCisJUFBfQkxLKCJwaW5ncG9uZ18zIiwgUElOR1BPTkdfMywgMHg3 MTgwMCksCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKgorICogSU5URiBzdWIgYmxvY2tzIGNvbmZpZworICoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisj ZGVmaW5lIElOVEZfQkxLKF9uYW1lLCBfaWQsIF9iYXNlLCBfdHlwZSwgX2N0cmxfaWQpIFwKKwl7 XAorCS5uYW1lID0gX25hbWUsIC5pZCA9IF9pZCwgXAorCS5iYXNlID0gX2Jhc2UsIC5sZW4gPSAw eDI4MCwgXAorCS50eXBlID0gX3R5cGUsIFwKKwkuY29udHJvbGxlcl9pZCA9IF9jdHJsX2lkLCBc CisJLnByb2dfZmV0Y2hfbGluZXNfd29yc3RfY2FzZSA9IDI0IFwKKwl9CisKK3N0YXRpYyBzdHJ1 Y3QgZHB1X2ludGZfY2ZnIHNkbTg0NV9pbnRmW10gPSB7CisJSU5URl9CTEsoImludGZfMCIsIElO VEZfMCwgMHg2QTAwMCwgSU5URl9EUCwgMCksCisJSU5URl9CTEsoImludGZfMSIsIElOVEZfMSwg MHg2QTgwMCwgSU5URl9EU0ksIDApLAorCUlOVEZfQkxLKCJpbnRmXzIiLCBJTlRGXzIsIDB4NkIw MDAsIElOVEZfRFNJLCAxKSwKKwlJTlRGX0JMSygiaW50Zl8zIiwgSU5URl8zLCAweDZCODAwLCBJ TlRGX0RQLCAxKSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDRE0gc3ViIGJsb2NrcyBjb25maWcKKyAqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Lworc3RhdGljIHN0cnVjdCBkcHVfY2RtX2NmZyBzZG04NDVfY2RtW10gPSB7CisJeworCS5uYW1l ID0gImNkbV8wIiwgLmlkID0gQ0RNXzAsCisJLmJhc2UgPSAweDc5MjAwLCAubGVuID0gMHgyMjQs CisJLmZlYXR1cmVzID0gMCwKKwkuaW50Zl9jb25uZWN0ID0gQklUKElOVEZfMyksCisJfSwKK307 CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqCisgKiBWQklGIHN1YiBibG9ja3MgY29uZmlnCisgKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFZCSUYgUU9T IHJlbWFwICovCitzdGF0aWMgdTMyIHNkbTg0NV9ydF9wcmlfbHZsW10gPSB7MywgMywgNCwgNCwg NSwgNSwgNiwgNn07CitzdGF0aWMgdTMyIHNkbTg0NV9ucnRfcHJpX2x2bFtdID0gezMsIDMsIDMs IDMsIDMsIDMsIDMsIDN9OworCitzdGF0aWMgc3RydWN0IGRwdV92YmlmX2NmZyBzZG04NDVfdmJp ZltdID0geworCXsKKwkubmFtZSA9ICJ2YmlmXzAiLCAuaWQgPSBWQklGXzAsCisJLmJhc2UgPSAw LCAubGVuID0gMHgxMDQwLAorCS5mZWF0dXJlcyA9IEJJVChEUFVfVkJJRl9RT1NfUkVNQVApLAor CS54aW5faGFsdF90aW1lb3V0ID0gMHg0MDAwLAorCS5xb3NfcnRfdGJsID0geworCQkubnByaW9y aXR5X2x2bCA9IEFSUkFZX1NJWkUoc2RtODQ1X3J0X3ByaV9sdmwpLAorCQkucHJpb3JpdHlfbHZs ID0gc2RtODQ1X3J0X3ByaV9sdmwsCisJCX0sCisJLnFvc19ucnRfdGJsID0geworCQkubnByaW9y aXR5X2x2bCA9IEFSUkFZX1NJWkUoc2RtODQ1X25ydF9wcmlfbHZsKSwKKwkJLnByaW9yaXR5X2x2 bCA9IHNkbTg0NV9ucnRfcHJpX2x2bCwKKwkJfSwKKwkubWVtdHlwZV9jb3VudCA9IDE0LAorCS5t ZW10eXBlID0gezMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDN9LAorCX0s Cit9OworCitzdGF0aWMgc3RydWN0IGRwdV9yZWdfZG1hX2NmZyBzZG04NDVfcmVnZG1hID0gewor CS5iYXNlID0gMHgwLCAudmVyc2lvbiA9IDB4MSwgLnRyaWdnZXJfc2VsX29mZiA9IDB4MTE5Ywor fTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioKKyAqIFBFUkYgZGF0YSBjb25maWcKKyAqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBTU1BQIFFPUyBM VVRzICovCitzdGF0aWMgc3RydWN0IGRwdV9xb3NfbHV0X2VudHJ5IHNkbTg0NV9xb3NfbGluZWFy W10gPSB7CisJey5mbCA9IDQsIC5sdXQgPSAweDM1N30sCisJey5mbCA9IDUsIC5sdXQgPSAweDMz NTd9LAorCXsuZmwgPSA2LCAubHV0ID0gMHgyMzM1N30sCisJey5mbCA9IDcsIC5sdXQgPSAweDIy MzM1N30sCisJey5mbCA9IDgsIC5sdXQgPSAweDIyMjMzNTd9LAorCXsuZmwgPSA5LCAubHV0ID0g MHgyMjIyMzM1N30sCisJey5mbCA9IDEwLCAubHV0ID0gMHgyMjIyMjMzNTd9LAorCXsuZmwgPSAx MSwgLmx1dCA9IDB4MjIyMjIyMzM1N30sCisJey5mbCA9IDEyLCAubHV0ID0gMHgyMjIyMjIyMzM1 N30sCisJey5mbCA9IDEzLCAubHV0ID0gMHgyMjIyMjIyMjMzNTd9LAorCXsuZmwgPSAxNCwgLmx1 dCA9IDB4MTIyMjIyMjIyMzM1N30sCisJey5mbCA9IDAsIC5sdXQgPSAweDExMjIyMjIyMjIzMzU3 fQorfTsKKworc3RhdGljIHN0cnVjdCBkcHVfcW9zX2x1dF9lbnRyeSBzZG04NDVfcW9zX21hY3Jv dGlsZVtdID0geworCXsuZmwgPSAxMCwgLmx1dCA9IDB4MzQ0NTU2Njc3fSwKKwl7LmZsID0gMTEs IC5sdXQgPSAweDMzNDQ1NTY2Nzd9LAorCXsuZmwgPSAxMiwgLmx1dCA9IDB4MjMzNDQ1NTY2Nzd9 LAorCXsuZmwgPSAxMywgLmx1dCA9IDB4MjIzMzQ0NTU2Njc3fSwKKwl7LmZsID0gMTQsIC5sdXQg PSAweDEyMjMzNDQ1NTY2Nzd9LAorCXsuZmwgPSAwLCAubHV0ID0gMHgxMTIyMzMzNDQ1NTY2Nzd9 LAorfTsKKworc3RhdGljIHN0cnVjdCBkcHVfcW9zX2x1dF9lbnRyeSBzZG04NDVfcW9zX25ydFtd ID0geworCXsuZmwgPSAwLCAubHV0ID0gMHgwfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZHB1X3Bl cmZfY2ZnIHNkbTg0NV9wZXJmX2RhdGEgPSB7CisJLm1heF9id19sb3cgPSA2ODAwMDAwLAorCS5t YXhfYndfaGlnaCA9IDY4MDAwMDAsCisJLm1pbl9jb3JlX2liID0gMjQwMDAwMCwKKwkubWluX2xs Y2NfaWIgPSA4MDAwMDAsCisJLm1pbl9kcmFtX2liID0gODAwMDAwLAorCS5jb3JlX2liX2ZmID0g IjYuMCIsCisJLmNvcmVfY2xrX2ZmID0gIjEuMCIsCisJLmNvbXBfcmF0aW9fcnQgPQorCSJOVjEy LzUvMS8xLjIzIEFCMjQvNS8xLzEuMjMgWEIyNC81LzEvMS4yMyIsCisJLmNvbXBfcmF0aW9fbnJ0 ID0KKwkiTlYxMi81LzEvMS4yNSBBQjI0LzUvMS8xLjI1IFhCMjQvNS8xLzEuMjUiLAorCS51bmRl cnNpemVkX3ByZWZpbGxfbGluZXMgPSAyLAorCS54dHJhX3ByZWZpbGxfbGluZXMgPSAyLAorCS5k ZXN0X3NjYWxlX3ByZWZpbGxfbGluZXMgPSAzLAorCS5tYWNyb3RpbGVfcHJlZmlsbF9saW5lcyA9 IDQsCisJLnl1dl9udjEyX3ByZWZpbGxfbGluZXMgPSA4LAorCS5saW5lYXJfcHJlZmlsbF9saW5l cyA9IDEsCisJLmRvd25zY2FsaW5nX3ByZWZpbGxfbGluZXMgPSAxLAorCS5hbW9ydGl6YWJsZV90 aHJlc2hvbGQgPSAyNSwKKwkubWluX3ByZWZpbGxfbGluZXMgPSAyNCwKKwkuZGFuZ2VyX2x1dF90 YmwgPSB7MHhmLCAweGZmZmYsIDB4MH0sCisJLnFvc19sdXRfdGJsID0geworCQl7Lm5lbnRyeSA9 IEFSUkFZX1NJWkUoc2RtODQ1X3Fvc19saW5lYXIpLAorCQkuZW50cmllcyA9IHNkbTg0NV9xb3Nf bGluZWFyCisJCX0sCisJCXsubmVudHJ5ID0gQVJSQVlfU0laRShzZG04NDVfcW9zX21hY3JvdGls ZSksCisJCS5lbnRyaWVzID0gc2RtODQ1X3Fvc19tYWNyb3RpbGUKKwkJfSwKKwkJey5uZW50cnkg PSBBUlJBWV9TSVpFKHNkbTg0NV9xb3NfbnJ0KSwKKwkJLmVudHJpZXMgPSBzZG04NDVfcW9zX25y dAorCQl9LAorCX0sCisJLmNkcF9jZmcgPSB7CisJCXsucmRfZW5hYmxlID0gMSwgLndyX2VuYWJs ZSA9IDF9LAorCQl7LnJkX2VuYWJsZSA9IDEsIC53cl9lbmFibGUgPSAwfQorCX0sCit9OworCisv KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKgorICogSGFyZHdhcmUgY2F0YWxvZyBpbml0CisgKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIHNkbTg0NV9j ZmdfaW5pdCgpOiBwb3B1bGF0ZSBzZG04NDUgZHB1IHN1Yi1ibG9ja3MgcmVnIG9mZnNldHMKKyAq IGFuZCBpbnN0YW5jZSBjb3VudHMuCisgKi8KK3ZvaWQgc2RtODQ1X2NmZ19pbml0KHN0cnVjdCBk cHVfbWRzc19jZmcgKmRwdV9jZmcpCit7CisJKmRwdV9jZmcgPSAoc3RydWN0IGRwdV9tZHNzX2Nm Zyl7CisJCS5jYXBzID0gJnNkbTg0NV9kcHVfY2FwcywKKwkJLm1kcF9jb3VudCA9IEFSUkFZX1NJ WkUoc2RtODQ1X21kcCksCisJCS5tZHAgPSBzZG04NDVfbWRwLAorCQkuY3RsX2NvdW50ID0gQVJS QVlfU0laRShzZG04NDVfY3RsKSwKKwkJLmN0bCA9IHNkbTg0NV9jdGwsCisJCS5zc3BwX2NvdW50 ID0gQVJSQVlfU0laRShzZG04NDVfc3NwcCksCisJCS5zc3BwID0gc2RtODQ1X3NzcHAsCisJCS5t aXhlcl9jb3VudCA9IEFSUkFZX1NJWkUoc2RtODQ1X2xtKSwKKwkJLm1peGVyID0gc2RtODQ1X2xt LAorCQkuZHNfY291bnQgPSBBUlJBWV9TSVpFKHNkbTg0NV9kcyksCisJCS5kcyA9IHNkbTg0NV9k cywKKwkJLnBpbmdwb25nX2NvdW50ID0gQVJSQVlfU0laRShzZG04NDVfcHApLAorCQkucGluZ3Bv bmcgPSBzZG04NDVfcHAsCisJCS5jZG1fY291bnQgPSBBUlJBWV9TSVpFKHNkbTg0NV9jZG0pLAor CQkuY2RtID0gc2RtODQ1X2NkbSwKKwkJLmludGZfY291bnQgPSBBUlJBWV9TSVpFKHNkbTg0NV9p bnRmKSwKKwkJLmludGYgPSBzZG04NDVfaW50ZiwKKwkJLnZiaWZfY291bnQgPSBBUlJBWV9TSVpF KHNkbTg0NV92YmlmKSwKKwkJLnZiaWYgPSBzZG04NDVfdmJpZiwKKwkJLnJlZ19kbWFfY291bnQg PSAxLAorCQkuZG1hX2NmZyA9IHNkbTg0NV9yZWdkbWEsCisJCS5wZXJmID0gc2RtODQ1X3BlcmZf ZGF0YSwKKwl9OworfQorCitzdGF0aWMgc3RydWN0IGRwdV9tZHNzX2h3X2NmZ19oYW5kbGVyIGNm Z19oYW5kbGVyW10gPSB7CisJeyAuaHdfcmV2ID0gRFBVX0hXX1ZFUl80MDAsIC5jZmdfaW5pdCA9 IHNkbTg0NV9jZmdfaW5pdH0sCisJeyAuaHdfcmV2ID0gRFBVX0hXX1ZFUl80MDEsIC5jZmdfaW5p dCA9IHNkbTg0NV9jZmdfaW5pdH0sCit9OworCit2b2lkIGRwdV9od19jYXRhbG9nX2RlaW5pdChz dHJ1Y3QgZHB1X21kc3NfY2ZnICpkcHVfY2ZnKQoreworCWtmcmVlKGRwdV9jZmcpOworfQorCitz dHJ1Y3QgZHB1X21kc3NfY2ZnICpkcHVfaHdfY2F0YWxvZ19pbml0KHUzMiBod19yZXYpCit7CisJ aW50IGk7CisJc3RydWN0IGRwdV9tZHNzX2NmZyAqZHB1X2NmZzsKKworCWRwdV9jZmcgPSBremFs bG9jKHNpemVvZigqZHB1X2NmZyksIEdGUF9LRVJORUwpOworCWlmICghZHB1X2NmZykKKwkJcmV0 dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjZmdf aGFuZGxlcik7IGkrKykgeworCQlpZiAoY2ZnX2hhbmRsZXJbaV0uaHdfcmV2ID09IGh3X3Jldikg eworCQkJY2ZnX2hhbmRsZXJbaV0uY2ZnX2luaXQoZHB1X2NmZyk7CisJCQlkcHVfY2ZnLT5od3Zl cnNpb24gPSBod19yZXY7CisJCQlyZXR1cm4gZHB1X2NmZzsKKwkJfQorCX0KKworCURQVV9FUlJP UigidW5zdXBwb3J0ZWQgY2hpcHNldCBpZDolWFxuIiwgaHdfcmV2KTsKKwlkcHVfaHdfY2F0YWxv Z19kZWluaXQoZHB1X2NmZyk7CisJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7Cit9CisKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jYXRhbG9nLmggYi9k cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY2F0YWxvZy5oCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZjBjYjBkNGZjODBlCi0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2NhdGFsb2cuaApAQCAt MCwwICsxLDgwNCBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE1LTIwMTgsIFRoZSBMaW51eCBGb3Vu ZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24g MiBhbmQKKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBf RFBVX0hXX0NBVEFMT0dfSAorI2RlZmluZSBfRFBVX0hXX0NBVEFMT0dfSAorCisjaW5jbHVkZSA8 bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvYnVnLmg+CisjaW5jbHVkZSA8bGludXgv Yml0bWFwLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8ZHJtL2RybVAuaD4K KworLyoqCisgKiBNYXggaGFyZHdhcmUgYmxvY2sgY291bnQ6IEZvciBleDogbWF4IDEyIFNTUFAg cGlwZXMgb3IKKyAqIDUgY3RsIHBhdGhzLiBJbiBhbGwgY2FzZXMsIGl0IGNhbiBoYXZlIG1heCAx MiBoYXJkd2FyZSBibG9ja3MKKyAqIGJhc2VkIG9uIGN1cnJlbnQgZGVzaWduCisgKi8KKyNkZWZp bmUgTUFYX0JMT0NLUyAgICAxMgorCisjZGVmaW5lIERQVV9IV19WRVIoTUFKT1IsIE1JTk9SLCBT VEVQKSAoKChNQUpPUiAmIDB4RikgPDwgMjgpICAgIHxcCisJCSgoTUlOT1IgJiAweEZGRikgPDwg MTYpICB8XAorCQkoU1RFUCAmIDB4RkZGRikpCisKKyNkZWZpbmUgRFBVX0hXX01BSk9SKHJldikJ CSgocmV2KSA+PiAyOCkKKyNkZWZpbmUgRFBVX0hXX01JTk9SKHJldikJCSgoKHJldikgPj4gMTYp ICYgMHhGRkYpCisjZGVmaW5lIERQVV9IV19TVEVQKHJldikJCSgocmV2KSAmIDB4RkZGRikKKyNk ZWZpbmUgRFBVX0hXX01BSk9SX01JTk9SKHJldikJCSgocmV2KSA+PiAxNikKKworI2RlZmluZSBJ U19EUFVfTUFKT1JfTUlOT1JfU0FNRShyZXYxLCByZXYyKSAgIFwKKwkoRFBVX0hXX01BSk9SX01J Tk9SKChyZXYxKSkgPT0gRFBVX0hXX01BSk9SX01JTk9SKChyZXYyKSkpCisKKyNkZWZpbmUgRFBV X0hXX1ZFUl8xNzAJRFBVX0hXX1ZFUigxLCA3LCAwKSAvKiA4OTk2IHYxLjAgKi8KKyNkZWZpbmUg RFBVX0hXX1ZFUl8xNzEJRFBVX0hXX1ZFUigxLCA3LCAxKSAvKiA4OTk2IHYyLjAgKi8KKyNkZWZp bmUgRFBVX0hXX1ZFUl8xNzIJRFBVX0hXX1ZFUigxLCA3LCAyKSAvKiA4OTk2IHYzLjAgKi8KKyNk ZWZpbmUgRFBVX0hXX1ZFUl8zMDAJRFBVX0hXX1ZFUigzLCAwLCAwKSAvKiA4OTk4IHYxLjAgKi8K KyNkZWZpbmUgRFBVX0hXX1ZFUl8zMDEJRFBVX0hXX1ZFUigzLCAwLCAxKSAvKiA4OTk4IHYxLjEg Ki8KKyNkZWZpbmUgRFBVX0hXX1ZFUl80MDAJRFBVX0hXX1ZFUig0LCAwLCAwKSAvKiBzZG04NDUg djEuMCAqLworI2RlZmluZSBEUFVfSFdfVkVSXzQwMQlEUFVfSFdfVkVSKDQsIDAsIDEpIC8qIHNk bTg0NSB2Mi4wICovCisjZGVmaW5lIERQVV9IV19WRVJfNDEwCURQVV9IV19WRVIoNCwgMSwgMCkg Lyogc2RtNjcwIHYxLjAgKi8KKyNkZWZpbmUgRFBVX0hXX1ZFUl81MDAJRFBVX0hXX1ZFUig1LCAw LCAwKSAvKiBzZG04NTUgdjEuMCAqLworCisKKyNkZWZpbmUgSVNfTVNNODk5Nl9UQVJHRVQocmV2 KSBJU19EUFVfTUFKT1JfTUlOT1JfU0FNRSgocmV2KSwgRFBVX0hXX1ZFUl8xNzApCisjZGVmaW5l IElTX01TTTg5OThfVEFSR0VUKHJldikgSVNfRFBVX01BSk9SX01JTk9SX1NBTUUoKHJldiksIERQ VV9IV19WRVJfMzAwKQorI2RlZmluZSBJU19TRE04NDVfVEFSR0VUKHJldikgSVNfRFBVX01BSk9S X01JTk9SX1NBTUUoKHJldiksIERQVV9IV19WRVJfNDAwKQorI2RlZmluZSBJU19TRE02NzBfVEFS R0VUKHJldikgSVNfRFBVX01BSk9SX01JTk9SX1NBTUUoKHJldiksIERQVV9IV19WRVJfNDEwKQor I2RlZmluZSBJU19TRE04NTVfVEFSR0VUKHJldikgSVNfRFBVX01BSk9SX01JTk9SX1NBTUUoKHJl diksIERQVV9IV19WRVJfNTAwKQorCisKKyNkZWZpbmUgRFBVX0hXX0JMS19OQU1FX0xFTgkxNgor CisjZGVmaW5lIE1BWF9JTUdfV0lEVEggMHgzZmZmCisjZGVmaW5lIE1BWF9JTUdfSEVJR0hUIDB4 M2ZmZgorCisjZGVmaW5lIENSVENfRFVBTF9NSVhFUlMJMgorCisjZGVmaW5lIE1BWF9YSU5fQ09V TlQgMTYKKworLyoqCisgKiBTdXBwb3J0ZWQgVUJXQyBmZWF0dXJlIHZlcnNpb25zCisgKi8KK2Vu dW0geworCURQVV9IV19VQldDX1ZFUl8xMCA9IDB4MTAwLAorCURQVV9IV19VQldDX1ZFUl8yMCA9 IDB4MjAwLAorCURQVV9IV19VQldDX1ZFUl8zMCA9IDB4MzAwLAorfTsKKworI2RlZmluZSBJU19V QldDXzIwX1NVUFBPUlRFRChyZXYpICAgICAgICgocmV2KSA+PSBEUFVfSFdfVUJXQ19WRVJfMjAp CisKKy8qKgorICogTURQIFRPUCBCTE9DSyBmZWF0dXJlcworICogQERQVV9NRFBfUEFOSUNfUEVS X1BJUEUgUGFuaWMgY29uZmlndXJhdGlvbiBuZWVkcyB0byBiZSBiZSBkb25lIHBlciBwaXBlCisg KiBARFBVX01EUF8xMEJJVF9TVVBQT1JULCBDaGlwc2V0IHN1cHBvcnRzIDEwIGJpdCBwaXhlbCBm b3JtYXRzCisgKiBARFBVX01EUF9CV0MsICAgICAgICAgICBNRFNTIEhXIHN1cHBvcnRzIEJhbmR3 aWR0aCBjb21wcmVzc2lvbi4KKyAqIEBEUFVfTURQX1VCV0NfMV8wLCAgICAgIFRoaXMgY2hpcHNl dHMgc3VwcG9ydHMgVW5pdmVyc2FsIEJhbmR3aWR0aAorICogICAgICAgICAgICAgICAgICAgICAg ICAgY29tcHJlc3Npb24gaW5pdGlhbCByZXZpc2lvbgorICogQERQVV9NRFBfVUJXQ18xXzUsICAg ICAgVW5pdmVyc2FsIEJhbmR3aWR0aCBjb21wcmVzc2lvbiB2ZXJzaW9uIDEuNQorICogQERQVV9N RFBfTUFYICAgICAgICAgICAgTWF4aW11bSB2YWx1ZQorCisgKi8KK2VudW0geworCURQVV9NRFBf UEFOSUNfUEVSX1BJUEUgPSAweDEsCisJRFBVX01EUF8xMEJJVF9TVVBQT1JULAorCURQVV9NRFBf QldDLAorCURQVV9NRFBfVUJXQ18xXzAsCisJRFBVX01EUF9VQldDXzFfNSwKKwlEUFVfTURQX01B WAorfTsKKworLyoqCisgKiBTU1BQIHN1Yi1ibG9ja3MvZmVhdHVyZXMKKyAqIEBEUFVfU1NQUF9T UkMgICAgICAgICAgICAgU3JjIGFuZCBmZXRjaCBwYXJ0IG9mIHRoZSBwaXBlcywKKyAqIEBEUFVf U1NQUF9TQ0FMRVJfUVNFRUQyLCAgUVNFRUQyIGFsZ29yaXRobSBzdXBwb3J0CisgKiBARFBVX1NT UFBfU0NBTEVSX1FTRUVEMywgIFFTRUVEMyBhbG9nb3JpdGhtIHN1cHBvcnQKKyAqIEBEUFVfU1NQ UF9TQ0FMRVJfUkdCLCAgICAgUkdCIFNjYWxlciwgc3VwcG9ydGVkIGJ5IFJHQiBwaXBlcworICog QERQVV9TU1BQX0NTQywgICAgICAgICAgICBTdXBwb3J0IG9mIENvbG9yIHNwYWNlIGNvbnZlcmlv bgorICogQERQVV9TU1BQX0NTQ18xMEJJVCwgICAgICBTdXBwb3J0IG9mIDEwLWJpdCBDb2xvciBz cGFjZSBjb252ZXJzaW9uCisgKiBARFBVX1NTUFBfQ1VSU09SLCAgICAgICAgIFNTUFAgY2FuIGJl IHVzZWQgYXMgYSBjdXJzb3IgbGF5ZXIKKyAqIEBEUFVfU1NQUF9RT1MsICAgICAgICAgICAgU1NQ UCBzdXBwb3J0IFFvUyBjb250cm9sLCBkYW5nZXIvc2FmZS9jcmVxCisgKiBARFBVX1NTUFBfUU9T XzhMVkwsICAgICAgIFNTUFAgc3VwcG9ydCA4LWxldmVsIFFvUyBjb250cm9sCisgKiBARFBVX1NT UFBfRVhDTF9SRUNULCAgICAgIFNTUFAgc3VwcG9ydHMgZXhjbHVzaW9uIHJlY3QKKyAqIEBEUFVf U1NQUF9TTUFSVF9ETUFfVjEsICAgU21hcnRETUEgMS4wIHN1cHBvcnQKKyAqIEBEUFVfU1NQUF9T TUFSVF9ETUFfVjIsICAgU21hcnRETUEgMi4wIHN1cHBvcnQKKyAqIEBEUFVfU1NQUF9UU19QUkVG SUxMICAgICAgU3VwcG9ydHMgcHJlZmlsbCB3aXRoIHRyYWZmaWMgc2hhcGVyCisgKiBARFBVX1NT UFBfVFNfUFJFRklMTF9SRUMxIFN1cHBvcnRzIHByZWZpbGwgd2l0aCB0cmFmZmljIHNoYXBlciBt dWx0aXJlYworICogQERQVV9TU1BQX0NEUCAgICAgICAgICAgICBTdXBwb3J0cyBjbGllbnQgZHJp dmVuIHByZWZldGNoCisgKiBARFBVX1NTUFBfTUFYICAgICAgICAgICAgIG1heGltdW0gdmFsdWUK KyAqLworZW51bSB7CisJRFBVX1NTUFBfU1JDID0gMHgxLAorCURQVV9TU1BQX1NDQUxFUl9RU0VF RDIsCisJRFBVX1NTUFBfU0NBTEVSX1FTRUVEMywKKwlEUFVfU1NQUF9TQ0FMRVJfUkdCLAorCURQ VV9TU1BQX0NTQywKKwlEUFVfU1NQUF9DU0NfMTBCSVQsCisJRFBVX1NTUFBfQ1VSU09SLAorCURQ VV9TU1BQX1FPUywKKwlEUFVfU1NQUF9RT1NfOExWTCwKKwlEUFVfU1NQUF9FWENMX1JFQ1QsCisJ RFBVX1NTUFBfU01BUlRfRE1BX1YxLAorCURQVV9TU1BQX1NNQVJUX0RNQV9WMiwKKwlEUFVfU1NQ UF9UU19QUkVGSUxMLAorCURQVV9TU1BQX1RTX1BSRUZJTExfUkVDMSwKKwlEUFVfU1NQUF9DRFAs CisJRFBVX1NTUFBfTUFYCit9OworCisvKgorICogTUlYRVIgc3ViLWJsb2Nrcy9mZWF0dXJlcwor ICogQERQVV9NSVhFUl9MQVlFUiAgICAgICAgICAgTGF5ZXIgbWl4ZXIgbGF5ZXIgYmxlbmQgY29u ZmlndXJhdGlvbiwKKyAqIEBEUFVfTUlYRVJfU09VUkNFU1BMSVQgICAgIExheWVyIG1peGVyIHN1 cHBvcnRzIHNvdXJjZS1zcGxpdCBjb25maWd1cmF0aW9uCisgKiBARFBVX01JWEVSX0dDICAgICAg ICAgICAgICBHYW1tYSBjb3JyZWN0aW9uIGJsb2NrCisgKiBARFBVX0RJTV9MQVlFUiAgICAgICAg ICAgICBMYXllciBtaXhlciBzdXBwb3J0cyBkaW0gbGF5ZXIKKyAqIEBEUFVfTUlYRVJfTUFYICAg ICAgICAgICAgIG1heGltdW0gdmFsdWUKKyAqLworZW51bSB7CisJRFBVX01JWEVSX0xBWUVSID0g MHgxLAorCURQVV9NSVhFUl9TT1VSQ0VTUExJVCwKKwlEUFVfTUlYRVJfR0MsCisJRFBVX0RJTV9M QVlFUiwKKwlEUFVfTUlYRVJfTUFYCit9OworCisvKioKKyAqIFBJTkdQT05HIHN1Yi1ibG9ja3MK KyAqIEBEUFVfUElOR1BPTkdfVEUgICAgICAgICBUZWFyIGNoZWNrIGJsb2NrCisgKiBARFBVX1BJ TkdQT05HX1RFMiAgICAgICAgQWRkaXRpb25hbCB0ZWFyIGNoZWNrIGJsb2NrIGZvciBzcGxpdCBw aXBlcworICogQERQVV9QSU5HUE9OR19TUExJVCAgICAgIFBQIGJsb2NrIHN1cHBvcnRzIHNwbGl0 IGZpZm8KKyAqIEBEUFVfUElOR1BPTkdfU0xBVkUgICAgICBQUCBibG9jayBpcyBhIHN1aXRhYmxl IHNsYXZlIGZvciBzcGxpdCBmaWZvCisgKiBARFBVX1BJTkdQT05HX0RJVEhFUiwgICAgRGl0aGVy IGJsb2NrcworICogQERQVV9QSU5HUE9OR19NQVgKKyAqLworZW51bSB7CisJRFBVX1BJTkdQT05H X1RFID0gMHgxLAorCURQVV9QSU5HUE9OR19URTIsCisJRFBVX1BJTkdQT05HX1NQTElULAorCURQ VV9QSU5HUE9OR19TTEFWRSwKKwlEUFVfUElOR1BPTkdfRElUSEVSLAorCURQVV9QSU5HUE9OR19N QVgKK307CisKKy8qKgorICogQ1RMIHN1Yi1ibG9ja3MKKyAqIEBEUFVfQ1RMX1NQTElUX0RJU1BM QVkgICAgICAgQ1RMIHN1cHBvcnRzIHZpZGVvIG1vZGUgc3BsaXQgZGlzcGxheQorICogQERQVV9D VExfTUFYCisgKi8KK2VudW0geworCURQVV9DVExfU1BMSVRfRElTUExBWSA9IDB4MSwKKwlEUFVf Q1RMX01BWAorfTsKKworLyoqCisgKiBWQklGIHN1Yi1ibG9ja3MgYW5kIGZlYXR1cmVzCisgKiBA RFBVX1ZCSUZfUU9TX09UTElNICAgICAgICBWQklGIHN1cHBvcnRzIE9UIExpbWl0CisgKiBARFBV X1ZCSUZfUU9TX1JFTUFQICAgICAgICBWQklGIHN1cHBvcnRzIFFvUyBwcmlvcml0eSByZW1hcAor ICogQERQVV9WQklGX01BWCAgICAgICAgICAgICAgbWF4aW11bSB2YWx1ZQorICovCitlbnVtIHsK KwlEUFVfVkJJRl9RT1NfT1RMSU0gPSAweDEsCisJRFBVX1ZCSUZfUU9TX1JFTUFQLAorCURQVV9W QklGX01BWAorfTsKKworLyoqCisgKiBNQUNSTyBEUFVfSFdfQkxLX0lORk8gLSBpbmZvcm1hdGlv biBvZiBIVyBibG9ja3MgaW5zaWRlIERQVQorICogQG5hbWU6ICAgICAgICAgICAgICBzdHJpbmcg bmFtZSBmb3IgZGVidWcgcHVycG9zZXMKKyAqIEBpZDogICAgICAgICAgICAgICAgZW51bSBpZGVu dGlmeWluZyB0aGlzIGJsb2NrCisgKiBAYmFzZTogICAgICAgICAgICAgIHJlZ2lzdGVyIGJhc2Ug b2Zmc2V0IHRvIG1kc3MKKyAqIEBsZW46ICAgICAgICAgICAgICAgbGVuZ3RoIG9mIGhhcmR3YXJl IGJsb2NrCisgKiBAZmVhdHVyZXMgICAgICAgICAgIGJpdCBtYXNrIGlkZW50aWZ5aW5nIHN1Yi1i bG9ja3MvZmVhdHVyZXMKKyAqLworI2RlZmluZSBEUFVfSFdfQkxLX0lORk8gXAorCWNoYXIgbmFt ZVtEUFVfSFdfQkxLX05BTUVfTEVOXTsgXAorCXUzMiBpZDsgXAorCXUzMiBiYXNlOyBcCisJdTMy IGxlbjsgXAorCXVuc2lnbmVkIGxvbmcgZmVhdHVyZXMKKworLyoqCisgKiBNQUNSTyBEUFVfSFdf U1VCQkxLX0lORk8gLSBpbmZvcm1hdGlvbiBvZiBIVyBzdWItYmxvY2sgaW5zaWRlIERQVQorICog QG5hbWU6ICAgICAgICAgICAgICBzdHJpbmcgbmFtZSBmb3IgZGVidWcgcHVycG9zZXMKKyAqIEBp ZDogICAgICAgICAgICAgICAgZW51bSBpZGVudGlmeWluZyB0aGlzIHN1Yi1ibG9jaworICogQGJh c2U6ICAgICAgICAgICAgICBvZmZzZXQgb2YgdGhpcyBzdWItYmxvY2sgcmVsYXRpdmUgdG8gdGhl IGJsb2NrCisgKiAgICAgICAgICAgICAgICAgICAgIG9mZnNldAorICogQGxlbiAgICAgICAgICAg ICAgICByZWdpc3RlciBibG9jayBsZW5ndGggb2YgdGhpcyBzdWItYmxvY2sKKyAqLworI2RlZmlu ZSBEUFVfSFdfU1VCQkxLX0lORk8gXAorCWNoYXIgbmFtZVtEUFVfSFdfQkxLX05BTUVfTEVOXTsg XAorCXUzMiBpZDsgXAorCXUzMiBiYXNlOyBcCisJdTMyIGxlbgorCisvKioKKyAqIHN0cnVjdCBk cHVfc3JjX2JsazogU1NQUCBwYXJ0IG9mIHRoZSBzb3VyY2UgcGlwZXMKKyAqIEBpbmZvOiAgIEhX IHJlZ2lzdGVyIGFuZCBmZWF0dXJlcyBzdXBwb3J0ZWQgYnkgdGhpcyBzdWItYmxrCisgKi8KK3N0 cnVjdCBkcHVfc3JjX2JsayB7CisJRFBVX0hXX1NVQkJMS19JTkZPOworfTsKKworLyoqCisgKiBz dHJ1Y3QgZHB1X3NjYWxlcl9ibGs6IFNjYWxlciBpbmZvcm1hdGlvbgorICogQGluZm86ICAgSFcg cmVnaXN0ZXIgYW5kIGZlYXR1cmVzIHN1cHBvcnRlZCBieSB0aGlzIHN1Yi1ibGsKKyAqIEB2ZXJz aW9uOiBxc2VlZCBibG9jayByZXZpc2lvbgorICovCitzdHJ1Y3QgZHB1X3NjYWxlcl9ibGsgewor CURQVV9IV19TVUJCTEtfSU5GTzsKKwl1MzIgdmVyc2lvbjsKK307CisKK3N0cnVjdCBkcHVfY3Nj X2JsayB7CisJRFBVX0hXX1NVQkJMS19JTkZPOworfTsKKworLyoqCisgKiBzdHJ1Y3QgZHB1X3Bw X2JsayA6IFBpeGVsIHByb2Nlc3Npbmcgc3ViLWJsayBpbmZvcm1hdGlvbgorICogQGluZm86ICAg SFcgcmVnaXN0ZXIgYW5kIGZlYXR1cmVzIHN1cHBvcnRlZCBieSB0aGlzIHN1Yi1ibGsKKyAqIEB2 ZXJzaW9uOiBIVyBBbGdvcml0aG0gdmVyc2lvbgorICovCitzdHJ1Y3QgZHB1X3BwX2JsayB7CisJ RFBVX0hXX1NVQkJMS19JTkZPOworCXUzMiB2ZXJzaW9uOworfTsKKworLyoqCisgKiBzdHJ1Y3Qg ZHB1X2Zvcm1hdF9leHRlbmRlZCAtIGRlZmluZSBkcHUgc3BlY2lmaWMgcGl4ZWwgZm9ybWF0K21v ZGlmaWVyCisgKiBAZm91cmNjX2Zvcm1hdDogQmFzZSBGT1VSQ0MgcGl4ZWwgZm9ybWF0IGNvZGUK KyAqIEBtb2RpZmllcjogNjQtYml0IGRybSBmb3JtYXQgbW9kaWZpZXIsIHNhbWUgbW9kaWZpZXIg bXVzdCBiZSBhcHBsaWVkIHRvIGFsbAorICogICAgICAgICAgICBmcmFtZWJ1ZmZlciBwbGFuZXMK KyAqLworc3RydWN0IGRwdV9mb3JtYXRfZXh0ZW5kZWQgeworCXVpbnQzMl90IGZvdXJjY19mb3Jt YXQ7CisJdWludDY0X3QgbW9kaWZpZXI7Cit9OworCisvKioKKyAqIGVudW0gZHB1X3Fvc19sdXRf dXNhZ2UgLSBkZWZpbmUgUW9TIExVVCB1c2UgY2FzZXMKKyAqLworZW51bSBkcHVfcW9zX2x1dF91 c2FnZSB7CisJRFBVX1FPU19MVVRfVVNBR0VfTElORUFSLAorCURQVV9RT1NfTFVUX1VTQUdFX01B Q1JPVElMRSwKKwlEUFVfUU9TX0xVVF9VU0FHRV9OUlQsCisJRFBVX1FPU19MVVRfVVNBR0VfTUFY LAorfTsKKworLyoqCisgKiBzdHJ1Y3QgZHB1X3Fvc19sdXRfZW50cnkgLSBkZWZpbmUgUW9TIExV VCB0YWJsZSBlbnRyeQorICogQGZsOiBmaWxsIGxldmVsLCBvciB6ZXJvIG9uIGxhc3QgZW50cnkg dG8gaW5kaWNhdGUgZGVmYXVsdCBsdXQKKyAqIEBsdXQ6IGx1dCB0byB1c2UgaWYgZXF1YWwgdG8g b3IgbGVzcyB0aGFuIGZpbGwgbGV2ZWwKKyAqLworc3RydWN0IGRwdV9xb3NfbHV0X2VudHJ5IHsK Kwl1MzIgZmw7CisJdTY0IGx1dDsKK307CisKKy8qKgorICogc3RydWN0IGRwdV9xb3NfbHV0X3Ri bCAtIGRlZmluZSBRb1MgTFVUIHRhYmxlCisgKiBAbmVudHJ5OiBudW1iZXIgb2YgZW50cnkgaW4g dGhpcyB0YWJsZQorICogQGVudHJpZXM6IFBvaW50ZXIgdG8gdGFibGUgZW50cmllcworICovCitz dHJ1Y3QgZHB1X3Fvc19sdXRfdGJsIHsKKwl1MzIgbmVudHJ5OworCXN0cnVjdCBkcHVfcW9zX2x1 dF9lbnRyeSAqZW50cmllczsKK307CisKKy8qKgorICogc3RydWN0IGRwdV9jYXBzIC0gZGVmaW5l IERQVSBjYXBhYmlsaXRpZXMKKyAqIEBtYXhfbWl4ZXJfd2lkdGggICAgbWF4IGxheWVyIG1peGVy IGxpbmUgd2lkdGggc3VwcG9ydC4KKyAqIEBtYXhfbWl4ZXJfYmxlbmRzdGFnZXMgbWF4IGxheWVy IG1peGVyIGJsZW5kIHN0YWdlcyBvcgorICogICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRl ZCB6IG9yZGVyCisgKiBAcXNlZWRfdHlwZSAgICAgICAgIHFzZWVkMiBvciBxc2VlZDMgc3VwcG9y dC4KKyAqIEBzbWFydF9kbWFfcmV2ICAgICAgU3VwcG9ydGVkIHZlcnNpb24gb2YgU21hcnRETUEg ZmVhdHVyZS4KKyAqIEB1YndjX3ZlcnNpb24gICAgICAgVUJXQyBmZWF0dXJlIHZlcnNpb24gKDB4 MCBmb3Igbm90IHN1cHBvcnRlZCkKKyAqIEBoYXNfc3JjX3NwbGl0ICAgICAgc291cmNlIHNwbGl0 IGZlYXR1cmUgc3RhdHVzCisgKiBAaGFzX2RpbV9sYXllciAgICAgIGRpbSBsYXllciBmZWF0dXJl IHN0YXR1cworICogQGhhc19pZGxlX3BjICAgICAgICBpbmRpY2F0ZSBpZiBpZGxlIHBvd2VyIGNv bGxhcHNlIGZlYXR1cmUgaXMgc3VwcG9ydGVkCisgKi8KK3N0cnVjdCBkcHVfY2FwcyB7CisJdTMy IG1heF9taXhlcl93aWR0aDsKKwl1MzIgbWF4X21peGVyX2JsZW5kc3RhZ2VzOworCXUzMiBxc2Vl ZF90eXBlOworCXUzMiBzbWFydF9kbWFfcmV2OworCXUzMiB1YndjX3ZlcnNpb247CisJYm9vbCBo YXNfc3JjX3NwbGl0OworCWJvb2wgaGFzX2RpbV9sYXllcjsKKwlib29sIGhhc19pZGxlX3BjOwor fTsKKworLyoqCisgKiBzdHJ1Y3QgZHB1X3NzcHBfYmxrc19jb21tb24gOiBTU1BQIHN1Yi1ibG9j a3MgY29tbW9uIGNvbmZpZ3VyYXRpb24KKyAqIEBtYXh3aWR0aDogbWF4IHBpeGVsd2lkdGggc3Vw cG9ydGVkIGJ5IHRoaXMgcGlwZQorICogQHBpeGVsX3JhbV9zaXplOiBzaXplIG9mIGxhdGVuY3kg aGlkaW5nIGFuZCBkZS10aWxpbmcgYnVmZmVyIGluIGJ5dGVzCisgKiBAbWF4aGRlY2lleHA6IG1h eCBob3Jpem9udGFsIGRlY2ltYXRpb24gc3VwcG9ydGVkIGJ5IHRoaXMgcGlwZQorICoJCQkJKG1h eCBpcyAyXnZhbHVlKQorICogQG1heHZkZWNpZXhwOiBtYXggdmVydGljYWwgZGVjaW1hdGlvbiBz dXBwb3J0ZWQgYnkgdGhpcyBwaXBlCisgKgkJCQkobWF4IGlzIDJedmFsdWUpCisgKi8KK3N0cnVj dCBkcHVfc3NwcF9ibGtzX2NvbW1vbiB7CisJdTMyIG1heGxpbmV3aWR0aDsKKwl1MzIgcGl4ZWxf cmFtX3NpemU7CisJdTMyIG1heGhkZWNpZXhwOworCXUzMiBtYXh2ZGVjaWV4cDsKK307CisKKy8q KgorICogc3RydWN0IGRwdV9zc3BwX3N1Yl9ibGtzIDogU1NQUCBzdWItYmxvY2tzCisgKiBjb21t b246IFBvaW50ZXIgdG8gY29tbW9uIGNvbmZpZ3VyYXRpb25zIHNoYXJlZCBieSBzdWIgYmxvY2tz CisgKiBAY3JlcV92Ymxhbms6IGNyZXEgcHJpb3JpdHkgZHVyaW5nIHZlcnRpY2FsIGJsYW5raW5n CisgKiBAZGFuZ2VyX3ZibGFuazogZGFuZ2VyIHByaW9yaXR5IGR1cmluZyB2ZXJ0aWNhbCBibGFu a2luZworICogQG1heGR3bnNjYWxlOiBtYXggZG93bnNjYWxlIHJhdGlvIHN1cHBvcnRlZCh3aXRo b3V0IERFQ0lNQVRJT04pCisgKiBAbWF4dXBzY2FsZTogIG1heHVwc2NhbGUgcmF0aW8gc3VwcG9y dGVkCisgKiBAc21hcnRfZG1hX3ByaW9yaXR5OiBodyBwcmlvcml0eSBvZiByZWN0MSBvZiBtdWx0 aXJlY3QgcGlwZQorICogQG1heF9wZXJfcGlwZV9idzogbWF4aW11bSBhbGxvd2FibGUgYmFuZHdp ZHRoIG9mIHRoaXMgcGlwZSBpbiBrQnBzCisgKiBAc3JjX2JsazoKKyAqIEBzY2FsZXJfYmxrOgor ICogQGNzY19ibGs6CisgKiBAaHNpYzoKKyAqIEBtZW1jb2xvcjoKKyAqIEBwY2NfYmxrOgorICog QGlnY19ibGs6CisgKiBAZm9ybWF0X2xpc3Q6IFBvaW50ZXIgdG8gbGlzdCBvZiBzdXBwb3J0ZWQg Zm9ybWF0cworICogQHZpcnRfZm9ybWF0X2xpc3Q6IFBvaW50ZXIgdG8gbGlzdCBvZiBzdXBwb3J0 ZWQgZm9ybWF0cyBmb3IgdmlydHVhbCBwbGFuZXMKKyAqLworc3RydWN0IGRwdV9zc3BwX3N1Yl9i bGtzIHsKKwljb25zdCBzdHJ1Y3QgZHB1X3NzcHBfYmxrc19jb21tb24gKmNvbW1vbjsKKwl1MzIg Y3JlcV92Ymxhbms7CisJdTMyIGRhbmdlcl92Ymxhbms7CisJdTMyIG1heGR3bnNjYWxlOworCXUz MiBtYXh1cHNjYWxlOworCXUzMiBzbWFydF9kbWFfcHJpb3JpdHk7CisJdTMyIG1heF9wZXJfcGlw ZV9idzsKKwlzdHJ1Y3QgZHB1X3NyY19ibGsgc3JjX2JsazsKKwlzdHJ1Y3QgZHB1X3NjYWxlcl9i bGsgc2NhbGVyX2JsazsKKwlzdHJ1Y3QgZHB1X3BwX2JsayBjc2NfYmxrOworCXN0cnVjdCBkcHVf cHBfYmxrIGhzaWNfYmxrOworCXN0cnVjdCBkcHVfcHBfYmxrIG1lbWNvbG9yX2JsazsKKwlzdHJ1 Y3QgZHB1X3BwX2JsayBwY2NfYmxrOworCXN0cnVjdCBkcHVfcHBfYmxrIGlnY19ibGs7CisKKwlj b25zdCBzdHJ1Y3QgZHB1X2Zvcm1hdF9leHRlbmRlZCAqZm9ybWF0X2xpc3Q7CisJY29uc3Qgc3Ry dWN0IGRwdV9mb3JtYXRfZXh0ZW5kZWQgKnZpcnRfZm9ybWF0X2xpc3Q7Cit9OworCisvKioKKyAq IHN0cnVjdCBkcHVfbG1fc3ViX2Jsa3M6ICAgICAgaW5mb3JtYXRpb24gb2YgbWl4ZXIgYmxvY2sK KyAqIEBtYXh3aWR0aDogICAgICAgICAgICAgICBNYXggcGl4ZWwgd2lkdGggc3VwcG9ydGVkIGJ5 IHRoaXMgbWl4ZXIKKyAqIEBtYXhibGVuZHN0YWdlczogICAgICAgICBNYXggbnVtYmVyIG9mIGJs ZW5kLXN0YWdlcyBzdXBwb3J0ZWQKKyAqIEBibGVuZHN0YWdlX2Jhc2U6ICAgICAgICBCbGVuZC1z dGFnZSByZWdpc3RlciBiYXNlIG9mZnNldAorICogQGdjOiBnYW1tYSBjb3JyZWN0aW9uIGJsb2Nr CisgKi8KK3N0cnVjdCBkcHVfbG1fc3ViX2Jsa3MgeworCXUzMiBtYXh3aWR0aDsKKwl1MzIgbWF4 YmxlbmRzdGFnZXM7CisJdTMyIGJsZW5kc3RhZ2VfYmFzZVtNQVhfQkxPQ0tTXTsKKwlzdHJ1Y3Qg ZHB1X3BwX2JsayBnYzsKK307CisKK3N0cnVjdCBkcHVfcGluZ3Bvbmdfc3ViX2Jsa3MgeworCXN0 cnVjdCBkcHVfcHBfYmxrIHRlOworCXN0cnVjdCBkcHVfcHBfYmxrIHRlMjsKKwlzdHJ1Y3QgZHB1 X3BwX2JsayBkaXRoZXI7Cit9OworCisvKioKKyAqIGRwdV9jbGtfY3RybF90eXBlIC0gRGVmaW5l cyB0b3AgbGV2ZWwgY2xvY2sgY29udHJvbCBzaWduYWxzCisgKi8KK2VudW0gZHB1X2Nsa19jdHJs X3R5cGUgeworCURQVV9DTEtfQ1RSTF9OT05FLAorCURQVV9DTEtfQ1RSTF9WSUcwLAorCURQVV9D TEtfQ1RSTF9WSUcxLAorCURQVV9DTEtfQ1RSTF9WSUcyLAorCURQVV9DTEtfQ1RSTF9WSUczLAor CURQVV9DTEtfQ1RSTF9WSUc0LAorCURQVV9DTEtfQ1RSTF9SR0IwLAorCURQVV9DTEtfQ1RSTF9S R0IxLAorCURQVV9DTEtfQ1RSTF9SR0IyLAorCURQVV9DTEtfQ1RSTF9SR0IzLAorCURQVV9DTEtf Q1RSTF9ETUEwLAorCURQVV9DTEtfQ1RSTF9ETUExLAorCURQVV9DTEtfQ1RSTF9DVVJTT1IwLAor CURQVV9DTEtfQ1RSTF9DVVJTT1IxLAorCURQVV9DTEtfQ1RSTF9JTkxJTkVfUk9UMF9TU1BQLAor CURQVV9DTEtfQ1RSTF9NQVgsCit9OworCisvKiBzdHJ1Y3QgZHB1X2Nsa19jdHJsX3JlZyA6IENs b2NrIGNvbnRyb2wgcmVnaXN0ZXIKKyAqIEByZWdfb2ZmOiAgICAgICAgICAgcmVnaXN0ZXIgb2Zm c2V0CisgKiBAYml0X29mZjogICAgICAgICAgIGJpdCBvZmZzZXQKKyAqLworc3RydWN0IGRwdV9j bGtfY3RybF9yZWcgeworCXUzMiByZWdfb2ZmOworCXUzMiBiaXRfb2ZmOworfTsKKworLyogc3Ry dWN0IGRwdV9tZHBfY2ZnIDogTURQIFRPUC1CTEsgaW5zdGFuY2UgaW5mbworICogQGlkOiAgICAg ICAgICAgICAgICBpbmRleCBpZGVudGlmeWluZyB0aGlzIGJsb2NrCisgKiBAYmFzZTogICAgICAg ICAgICAgIHJlZ2lzdGVyIGJhc2Ugb2Zmc2V0IHRvIG1kc3MKKyAqIEBmZWF0dXJlcyAgICAgICAg ICAgYml0IG1hc2sgaWRlbnRpZnlpbmcgc3ViLWJsb2Nrcy9mZWF0dXJlcworICogQGhpZ2hlc3Rf YmFua19iaXQ6ICBVQldDIHBhcmFtZXRlcgorICogQHVid2Nfc3RhdGljOiAgICAgICB1YndjIHN0 YXRpYyBjb25maWd1cmF0aW9uCisgKiBAdWJ3Y19zd2l6emxlOiAgICAgIHVid2MgZGVmYXVsdCBz d2l6emxlIHNldHRpbmcKKyAqIEBoYXNfZGVzdF9zY2FsZXI6ICAgaW5kaWNhdGVzIHN1cHBvcnQg b2YgZGVzdGluYXRpb24gc2NhbGVyCisgKiBAY2xrX2N0cmxzICAgICAgICAgIGNsb2NrIGNvbnRy b2wgcmVnaXN0ZXIgZGVmaW5pdGlvbgorICovCitzdHJ1Y3QgZHB1X21kcF9jZmcgeworCURQVV9I V19CTEtfSU5GTzsKKwl1MzIgaGlnaGVzdF9iYW5rX2JpdDsKKwl1MzIgdWJ3Y19zdGF0aWM7CisJ dTMyIHVid2Nfc3dpenpsZTsKKwlib29sIGhhc19kZXN0X3NjYWxlcjsKKwlzdHJ1Y3QgZHB1X2Ns a19jdHJsX3JlZyBjbGtfY3RybHNbRFBVX0NMS19DVFJMX01BWF07Cit9OworCisvKiBzdHJ1Y3Qg ZHB1X21kcF9jZmcgOiBNRFAgVE9QLUJMSyBpbnN0YW5jZSBpbmZvCisgKiBAaWQ6ICAgICAgICAg ICAgICAgIGluZGV4IGlkZW50aWZ5aW5nIHRoaXMgYmxvY2sKKyAqIEBiYXNlOiAgICAgICAgICAg ICAgcmVnaXN0ZXIgYmFzZSBvZmZzZXQgdG8gbWRzcworICogQGZlYXR1cmVzICAgICAgICAgICBi aXQgbWFzayBpZGVudGlmeWluZyBzdWItYmxvY2tzL2ZlYXR1cmVzCisgKi8KK3N0cnVjdCBkcHVf Y3RsX2NmZyB7CisJRFBVX0hXX0JMS19JTkZPOworfTsKKworLyoqCisgKiBzdHJ1Y3QgZHB1X3Nz cHBfY2ZnIC0gaW5mb3JtYXRpb24gb2Ygc291cmNlIHBpcGVzCisgKiBAaWQ6ICAgICAgICAgICAg ICAgIGluZGV4IGlkZW50aWZ5aW5nIHRoaXMgYmxvY2sKKyAqIEBiYXNlICAgICAgICAgICAgICAg cmVnaXN0ZXIgb2Zmc2V0IG9mIHRoaXMgYmxvY2sKKyAqIEBmZWF0dXJlcyAgICAgICAgICAgYml0 IG1hc2sgaWRlbnRpZnlpbmcgc3ViLWJsb2Nrcy9mZWF0dXJlcworICogQHNibGs6ICAgICAgICAg ICAgICBTU1BQIHN1Yi1ibG9ja3MgaW5mb3JtYXRpb24KKyAqIEB4aW5faWQ6ICAgICAgICAgICAg YnVzIGNsaWVudCBpZGVudGlmaWVyCisgKiBAY2xrX2N0cmwgICAgICAgICAgIGNsb2NrIGNvbnRy b2wgaWRlbnRpZmllcgorICogQHR5cGUgICAgICAgICAgICAgICBzc3BwIHR5cGUgaWRlbnRpZmll cgorICovCitzdHJ1Y3QgZHB1X3NzcHBfY2ZnIHsKKwlEUFVfSFdfQkxLX0lORk87CisJY29uc3Qg c3RydWN0IGRwdV9zc3BwX3N1Yl9ibGtzICpzYmxrOworCXUzMiB4aW5faWQ7CisJZW51bSBkcHVf Y2xrX2N0cmxfdHlwZSBjbGtfY3RybDsKKwl1MzIgdHlwZTsKK307CisKKy8qKgorICogc3RydWN0 IGRwdV9sbV9jZmcgLSBpbmZvcm1hdGlvbiBvZiBsYXllciBtaXhlciBibG9ja3MKKyAqIEBpZDog ICAgICAgICAgICAgICAgaW5kZXggaWRlbnRpZnlpbmcgdGhpcyBibG9jaworICogQGJhc2UgICAg ICAgICAgICAgICByZWdpc3RlciBvZmZzZXQgb2YgdGhpcyBibG9jaworICogQGZlYXR1cmVzICAg ICAgICAgICBiaXQgbWFzayBpZGVudGlmeWluZyBzdWItYmxvY2tzL2ZlYXR1cmVzCisgKiBAc2Js azogICAgICAgICAgICAgIExNIFN1Yi1ibG9ja3MgaW5mb3JtYXRpb24KKyAqIEBwaW5ncG9uZzog ICAgICAgICAgSUQgb2YgY29ubmVjdGVkIFBpbmdQb25nLCBQSU5HUE9OR19NQVggaWYgdW5zdXBw b3J0ZWQKKyAqIEBkczogICAgICAgICAgICAgICAgSUQgb2YgY29ubmVjdGVkIERTLCBEU19NQVgg aWYgdW5zdXBwb3J0ZWQKKyAqIEBsbV9wYWlyX21hc2s6ICAgICAgQml0bWFzayBvZiBMTXMgdGhh dCBjYW4gYmUgY29udHJvbGxlZCBieSBzYW1lIENUTAorICovCitzdHJ1Y3QgZHB1X2xtX2NmZyB7 CisJRFBVX0hXX0JMS19JTkZPOworCWNvbnN0IHN0cnVjdCBkcHVfbG1fc3ViX2Jsa3MgKnNibGs7 CisJdTMyIHBpbmdwb25nOworCXUzMiBkczsKKwl1bnNpZ25lZCBsb25nIGxtX3BhaXJfbWFzazsK K307CisKKy8qKgorICogc3RydWN0IGRwdV9kc190b3BfY2ZnIC0gaW5mb3JtYXRpb24gb2YgZGVz dCBzY2FsZXIgdG9wCisgKiBAaWQgICAgICAgICAgICAgICBlbnVtIGlkZW50aWZ5aW5nIHRoaXMg YmxvY2sKKyAqIEBiYXNlICAgICAgICAgICAgIHJlZ2lzdGVyIG9mZnNldCBvZiB0aGlzIGJsb2Nr CisgKiBAZmVhdHVyZXMgICAgICAgICBiaXQgbWFzayBpZGVudGlmeWluZyBmZWF0dXJlcworICog QHZlcnNpb24gICAgICAgICAgaHcgdmVyc2lvbiBvZiBkZXN0IHNjYWxlcgorICogQG1heGlucHV0 d2lkdGggICAgbWF4aW11bSBpbnB1dCBsaW5lIHdpZHRoCisgKiBAbWF4b3V0cHV0d2lkdGggICBt YXhpbXVtIG91dHB1dCBsaW5lIHdpZHRoCisgKiBAbWF4dXBzY2FsZSAgICAgICBtYXhpbXVtIHVw c2NhbGUgcmF0aW8KKyAqLworc3RydWN0IGRwdV9kc190b3BfY2ZnIHsKKwlEUFVfSFdfQkxLX0lO Rk87CisJdTMyIHZlcnNpb247CisJdTMyIG1heGlucHV0d2lkdGg7CisJdTMyIG1heG91dHB1dHdp ZHRoOworCXUzMiBtYXh1cHNjYWxlOworfTsKKworLyoqCisgKiBzdHJ1Y3QgZHB1X2RzX2NmZyAt IGluZm9ybWF0aW9uIG9mIGRlc3Qgc2NhbGVyIGJsb2NrcworICogQGlkICAgICAgICAgIGVudW0g aWRlbnRpZnlpbmcgdGhpcyBibG9jaworICogQGJhc2UgICAgICAgIHJlZ2lzdGVyIG9mZnNldCB3 cnQgRFMgdG9wIG9mZnNldAorICogQGZlYXR1cmVzICAgIGJpdCBtYXNrIGlkZW50aWZ5aW5nIGZl YXR1cmVzCisgKiBAdmVyc2lvbiAgICAgaHcgdmVyc2lvbiBvZiB0aGUgcXNlZWQgYmxvY2sKKyAq IEB0b3AgICAgICAgICBEUyB0b3AgaW5mb3JtYXRpb24KKyAqLworc3RydWN0IGRwdV9kc19jZmcg eworCURQVV9IV19CTEtfSU5GTzsKKwl1MzIgdmVyc2lvbjsKKwljb25zdCBzdHJ1Y3QgZHB1X2Rz X3RvcF9jZmcgKnRvcDsKK307CisKKy8qKgorICogc3RydWN0IGRwdV9waW5ncG9uZ19jZmcgLSBp bmZvcm1hdGlvbiBvZiBQSU5HLVBPTkcgYmxvY2tzCisgKiBAaWQgICAgICAgICAgICAgICAgIGVu dW0gaWRlbnRpZnlpbmcgdGhpcyBibG9jaworICogQGJhc2UgICAgICAgICAgICAgICByZWdpc3Rl ciBvZmZzZXQgb2YgdGhpcyBibG9jaworICogQGZlYXR1cmVzICAgICAgICAgICBiaXQgbWFzayBp ZGVudGlmeWluZyBzdWItYmxvY2tzL2ZlYXR1cmVzCisgKiBAc2JsayAgICAgICAgICAgICAgIHN1 Yi1ibG9ja3MgaW5mb3JtYXRpb24KKyAqLworc3RydWN0IGRwdV9waW5ncG9uZ19jZmcgIHsKKwlE UFVfSFdfQkxLX0lORk87CisJY29uc3Qgc3RydWN0IGRwdV9waW5ncG9uZ19zdWJfYmxrcyAqc2Js azsKK307CisKKy8qKgorICogc3RydWN0IGRwdV9jZG1fY2ZnIC0gaW5mb3JtYXRpb24gb2YgY2hy b21hIGRvd24gYmxvY2tzCisgKiBAaWQgICAgICAgICAgICAgICAgIGVudW0gaWRlbnRpZnlpbmcg dGhpcyBibG9jaworICogQGJhc2UgICAgICAgICAgICAgICByZWdpc3RlciBvZmZzZXQgb2YgdGhp cyBibG9jaworICogQGZlYXR1cmVzICAgICAgICAgICBiaXQgbWFzayBpZGVudGlmeWluZyBzdWIt YmxvY2tzL2ZlYXR1cmVzCisgKiBAaW50Zl9jb25uZWN0ICAgICAgIEJpdG1hc2sgb2YgSU5URiBJ RHMgdGhpcyBDRE0gY2FuIGNvbm5lY3QgdG8KKyAqLworc3RydWN0IGRwdV9jZG1fY2ZnICAgewor CURQVV9IV19CTEtfSU5GTzsKKwl1bnNpZ25lZCBsb25nIGludGZfY29ubmVjdDsKK307CisKKy8q KgorICogc3RydWN0IGRwdV9pbnRmX2NmZyAtIGluZm9ybWF0aW9uIG9mIHRpbWluZyBlbmdpbmUg YmxvY2tzCisgKiBAaWQgICAgICAgICAgICAgICAgIGVudW0gaWRlbnRpZnlpbmcgdGhpcyBibG9j aworICogQGJhc2UgICAgICAgICAgICAgICByZWdpc3RlciBvZmZzZXQgb2YgdGhpcyBibG9jawor ICogQGZlYXR1cmVzICAgICAgICAgICBiaXQgbWFzayBpZGVudGlmeWluZyBzdWItYmxvY2tzL2Zl YXR1cmVzCisgKiBAdHlwZTogICAgICAgICAgICAgIEludGVyZmFjZSB0eXBlKERTSSwgRFAsIEhE TUkpCisgKiBAY29udHJvbGxlcl9pZDogICAgIENvbnRyb2xsZXIgSW5zdGFuY2UgSUQgaW4gY2Fz ZSBvZiBtdWx0aXBsZSBvZiBpbnRmIHR5cGUKKyAqIEBwcm9nX2ZldGNoX2xpbmVzX3dvcnN0X2Nh c2UJV29yc3QgY2FzZSBsYXRlbmN5IG51bSBsaW5lcyBuZWVkZWQgdG8gcHJlZmV0Y2gKKyAqLwor c3RydWN0IGRwdV9pbnRmX2NmZyAgeworCURQVV9IV19CTEtfSU5GTzsKKwl1MzIgdHlwZTsgICAv KiBpbnRlcmZhY2UgdHlwZSovCisJdTMyIGNvbnRyb2xsZXJfaWQ7CisJdTMyIHByb2dfZmV0Y2hf bGluZXNfd29yc3RfY2FzZTsKK307CisKKy8qKgorICogc3RydWN0IGRwdV92YmlmX2R5bmFtaWNf b3RfY2ZnIC0gZHluYW1pYyBPVCBzZXR0aW5nCisgKiBAcHBzICAgICAgICAgICAgICAgIHBpeGVs IHBlciBzZWNvbmRzCisgKiBAb3RfbGltaXQgICAgICAgICAgIE9UIGxpbWl0IHRvIHVzZSB1cCB0 byBzcGVjaWZpZWQgcGl4ZWwgcGVyIHNlY29uZAorICovCitzdHJ1Y3QgZHB1X3ZiaWZfZHluYW1p Y19vdF9jZmcgeworCXU2NCBwcHM7CisJdTMyIG90X2xpbWl0OworfTsKKworLyoqCisgKiBzdHJ1 Y3QgZHB1X3ZiaWZfZHluYW1pY19vdF90YmwgLSBkeW5hbWljIE9UIHNldHRpbmcgdGFibGUKKyAq IEBjb3VudCAgICAgICAgICAgICAgbGVuZ3RoIG9mIGNmZworICogQGNmZyAgICAgICAgICAgICAg ICBwb2ludGVyIHRvIGFycmF5IG9mIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3Mgd2l0aAorICogICAg ICAgICAgICAgICAgICAgICBhc2NlbmRpbmcgcmVxdWlyZW1lbnRzCisgKi8KK3N0cnVjdCBkcHVf dmJpZl9keW5hbWljX290X3RibCB7CisJdTMyIGNvdW50OworCXN0cnVjdCBkcHVfdmJpZl9keW5h bWljX290X2NmZyAqY2ZnOworfTsKKworLyoqCisgKiBzdHJ1Y3QgZHB1X3ZiaWZfcW9zX3RibCAt IFFvUyBwcmlvcml0eSB0YWJsZQorICogQG5wcmlvcml0eV9sdmwgICAgICBudW0gb2YgcHJpb3Jp dHkgbGV2ZWwKKyAqIEBwcmlvcml0eV9sdmwgICAgICAgcG9pbnRlciB0byBhcnJheSBvZiBwcmlv cml0eSBsZXZlbCBpbiBhc2NlbmRpbmcgb3JkZXIKKyAqLworc3RydWN0IGRwdV92YmlmX3Fvc190 YmwgeworCXUzMiBucHJpb3JpdHlfbHZsOworCXUzMiAqcHJpb3JpdHlfbHZsOworfTsKKworLyoq CisgKiBzdHJ1Y3QgZHB1X3ZiaWZfY2ZnIC0gaW5mb3JtYXRpb24gb2YgVkJJRiBibG9ja3MKKyAq IEBpZCAgICAgICAgICAgICAgICAgZW51bSBpZGVudGlmeWluZyB0aGlzIGJsb2NrCisgKiBAYmFz ZSAgICAgICAgICAgICAgIHJlZ2lzdGVyIG9mZnNldCBvZiB0aGlzIGJsb2NrCisgKiBAZmVhdHVy ZXMgICAgICAgICAgIGJpdCBtYXNrIGlkZW50aWZ5aW5nIHN1Yi1ibG9ja3MvZmVhdHVyZXMKKyAq IEBvdF9yZF9saW1pdCAgICAgICAgZGVmYXVsdCBPVCByZWFkIGxpbWl0CisgKiBAb3Rfd3JfbGlt aXQgICAgICAgIGRlZmF1bHQgT1Qgd3JpdGUgbGltaXQKKyAqIEB4aW5faGFsdF90aW1lb3V0ICAg bWF4aW11bSB0aW1lIChpbiB1c2VjKSBmb3IgeGluIHRvIGhhbHQKKyAqIEBkeW5hbWljX290X3Jk X3RibCAgZHluYW1pYyBPVCByZWFkIGNvbmZpZ3VyYXRpb24gdGFibGUKKyAqIEBkeW5hbWljX290 X3dyX3RibCAgZHluYW1pYyBPVCB3cml0ZSBjb25maWd1cmF0aW9uIHRhYmxlCisgKiBAcW9zX3J0 X3RibCAgICAgICAgIHJlYWwtdGltZSBRb1MgcHJpb3JpdHkgdGFibGUKKyAqIEBxb3NfbnJ0X3Ri bCAgICAgICAgbm9uLXJlYWwtdGltZSBRb1MgcHJpb3JpdHkgdGFibGUKKyAqIEBtZW10eXBlX2Nv dW50ICAgICAgbnVtYmVyIG9mIGRlZmluZWQgbWVtdHlwZXMKKyAqIEBtZW10eXBlICAgICAgICAg ICAgYXJyYXkgb2YgeGluIG1lbXR5cGUgZGVmaW5pdGlvbnMKKyAqLworc3RydWN0IGRwdV92Ymlm X2NmZyB7CisJRFBVX0hXX0JMS19JTkZPOworCXUzMiBkZWZhdWx0X290X3JkX2xpbWl0OworCXUz MiBkZWZhdWx0X290X3dyX2xpbWl0OworCXUzMiB4aW5faGFsdF90aW1lb3V0OworCXN0cnVjdCBk cHVfdmJpZl9keW5hbWljX290X3RibCBkeW5hbWljX290X3JkX3RibDsKKwlzdHJ1Y3QgZHB1X3Zi aWZfZHluYW1pY19vdF90YmwgZHluYW1pY19vdF93cl90Ymw7CisJc3RydWN0IGRwdV92YmlmX3Fv c190YmwgcW9zX3J0X3RibDsKKwlzdHJ1Y3QgZHB1X3ZiaWZfcW9zX3RibCBxb3NfbnJ0X3RibDsK Kwl1MzIgbWVtdHlwZV9jb3VudDsKKwl1MzIgbWVtdHlwZVtNQVhfWElOX0NPVU5UXTsKK307Cisv KioKKyAqIHN0cnVjdCBkcHVfcmVnX2RtYV9jZmcgLSBpbmZvcm1hdGlvbiBvZiBsdXQgZG1hIGJs b2NrcworICogQGlkICAgICAgICAgICAgICAgICBlbnVtIGlkZW50aWZ5aW5nIHRoaXMgYmxvY2sK KyAqIEBiYXNlICAgICAgICAgICAgICAgcmVnaXN0ZXIgb2Zmc2V0IG9mIHRoaXMgYmxvY2sKKyAq IEBmZWF0dXJlcyAgICAgICAgICAgYml0IG1hc2sgaWRlbnRpZnlpbmcgc3ViLWJsb2Nrcy9mZWF0 dXJlcworICogQHZlcnNpb24gICAgICAgICAgICB2ZXJzaW9uIG9mIGx1dGRtYSBodyBibG9jawor ICogQHRyaWdnZXJfc2VsX29mZiAgICBvZmZzZXQgdG8gdHJpZ2dlciBzZWxlY3QgcmVnaXN0ZXJz IG9mIGx1dGRtYQorICovCitzdHJ1Y3QgZHB1X3JlZ19kbWFfY2ZnIHsKKwlEUFVfSFdfQkxLX0lO Rk87CisJdTMyIHZlcnNpb247CisJdTMyIHRyaWdnZXJfc2VsX29mZjsKK307CisKKy8qKgorICog RGVmaW5lIENEUCB1c2UgY2FzZXMKKyAqIEBEUFVfUEVSRl9DRFBfVURBR0VfUlQ6IHJlYWwtdGlt ZSB1c2UgY2FzZXMKKyAqIEBEUFVfUEVSRl9DRFBfVVNBR0VfTlJUOiBub24gcmVhbC10aW1lIHVz ZSBjYXNlcyBzdWNoIGFzIFdGRAorICovCitlbnVtIHsKKwlEUFVfUEVSRl9DRFBfVVNBR0VfUlQs CisJRFBVX1BFUkZfQ0RQX1VTQUdFX05SVCwKKwlEUFVfUEVSRl9DRFBfVVNBR0VfTUFYCit9Owor CisvKioKKyAqIHN0cnVjdCBkcHVfcGVyZl9jZHBfY2ZnIC0gZGVmaW5lIENEUCB1c2UgY2FzZSBj b25maWd1cmF0aW9uCisgKiBAcmRfZW5hYmxlOiB0cnVlIGlmIHJlYWQgcGlwZSBDRFAgaXMgZW5h YmxlZAorICogQHdyX2VuYWJsZTogdHJ1ZSBpZiB3cml0ZSBwaXBlIENEUCBpcyBlbmFibGVkCisg Ki8KK3N0cnVjdCBkcHVfcGVyZl9jZHBfY2ZnIHsKKwlib29sIHJkX2VuYWJsZTsKKwlib29sIHdy X2VuYWJsZTsKK307CisKKy8qKgorICogc3RydWN0IGRwdV9wZXJmX2NmZyAtIHBlcmZvcm1hbmNl IGNvbnRyb2wgc2V0dGluZ3MKKyAqIEBtYXhfYndfbG93ICAgICAgICAgbG93IHRocmVzaG9sZCBv ZiBtYXhpbXVtIGJhbmR3aWR0aCAoa2JwcykKKyAqIEBtYXhfYndfaGlnaCAgICAgICAgaGlnaCB0 aHJlc2hvbGQgb2YgbWF4aW11bSBiYW5kd2lkdGggKGticHMpCisgKiBAbWluX2NvcmVfaWIgICAg ICAgIG1pbmltdW0gYmFuZHdpZHRoIGZvciBjb3JlIChrYnBzKQorICogQG1pbl9jb3JlX2liICAg ICAgICBtaW5pbXVtIG1ub2MgaWIgdm90ZSBpbiBrYnBzCisgKiBAbWluX2xsY2NfaWIgICAgICAg IG1pbmltdW0gbGxjYyBpYiB2b3RlIGluIGticHMKKyAqIEBtaW5fZHJhbV9pYiAgICAgICAgbWlu aW11bSBkcmFtIGliIHZvdGUgaW4ga2JwcworICogQGNvcmVfaWJfZmYgICAgICAgICBjb3JlIGlu c3RhbnRhbmVvdXMgYmFuZHdpZHRoIGZ1ZGdlIGZhY3RvcgorICogQGNvcmVfY2xrX2ZmICAgICAg ICBjb3JlIGNsb2NrIGZ1ZGdlIGZhY3RvcgorICogQGNvbXBfcmF0aW9fcnQgICAgICBzdHJpbmcg b2YgMCBvciBtb3JlIG9mIDxmb3VyY2M+Lzx2ZW4+Lzxtb2Q+Lzxjb21wIHJhdGlvPgorICogQGNv bXBfcmF0aW9fbnJ0ICAgICBzdHJpbmcgb2YgMCBvciBtb3JlIG9mIDxmb3VyY2M+Lzx2ZW4+Lzxt b2Q+Lzxjb21wIHJhdGlvPgorICogQHVuZGVyc2l6ZWRfcHJlZmlsbF9saW5lcyAgIHVuZGVyc2l6 ZWQgcHJlZmlsbCBpbiBsaW5lcworICogQHh0cmFfcHJlZmlsbF9saW5lcyAgICAgICAgIGV4dHJh IHByZWZpbGwgbGF0ZW5jeSBpbiBsaW5lcworICogQGRlc3Rfc2NhbGVfcHJlZmlsbF9saW5lcyAg IGRlc3RpbmF0aW9uIHNjYWxlciBsYXRlbmN5IGluIGxpbmVzCisgKiBAbWFjcm90aWxlX3BlcmZp bGxfbGluZXMgICAgbWFjcm90aWxlIGxhdGVuY3kgaW4gbGluZXMKKyAqIEB5dXZfbnYxMl9wcmVm aWxsX2xpbmVzICAgICB5dXZfbnYxMiBsYXRlbmN5IGluIGxpbmVzCisgKiBAbGluZWFyX3ByZWZp bGxfbGluZXMgICAgICAgbGluZWFyIGxhdGVuY3kgaW4gbGluZXMKKyAqIEBkb3duc2NhbGluZ19w cmVmaWxsX2xpbmVzICBkb3duc2NhbGluZyBsYXRlbmN5IGluIGxpbmVzCisgKiBAYW1vcnRpemFi bGVfdGhlc2hvbGQgbWluaW11bSB5IHBvc2l0aW9uIGZvciB0cmFmZmljIHNoYXBpbmcgcHJlZmls bAorICogQG1pbl9wcmVmaWxsX2xpbmVzICBtaW5pbXVtIHBpcGVsaW5lIGxhdGVuY3kgaW4gbGlu ZXMKKyAqIEBzYWZlX2x1dF90Ymw6IExVVCB0YWJsZXMgZm9yIHNhZmUgc2lnbmFscworICogQGRh bmdlcl9sdXRfdGJsOiBMVVQgdGFibGVzIGZvciBkYW5nZXIgc2lnbmFscworICogQHFvc19sdXRf dGJsOiBMVVQgdGFibGVzIGZvciBRb1Mgc2lnbmFscworICogQGNkcF9jZmcgICAgICAgICAgICBj ZHAgdXNlIGNhc2UgY29uZmlndXJhdGlvbnMKKyAqLworc3RydWN0IGRwdV9wZXJmX2NmZyB7CisJ dTMyIG1heF9id19sb3c7CisJdTMyIG1heF9id19oaWdoOworCXUzMiBtaW5fY29yZV9pYjsKKwl1 MzIgbWluX2xsY2NfaWI7CisJdTMyIG1pbl9kcmFtX2liOworCWNvbnN0IGNoYXIgKmNvcmVfaWJf ZmY7CisJY29uc3QgY2hhciAqY29yZV9jbGtfZmY7CisJY29uc3QgY2hhciAqY29tcF9yYXRpb19y dDsKKwljb25zdCBjaGFyICpjb21wX3JhdGlvX25ydDsKKwl1MzIgdW5kZXJzaXplZF9wcmVmaWxs X2xpbmVzOworCXUzMiB4dHJhX3ByZWZpbGxfbGluZXM7CisJdTMyIGRlc3Rfc2NhbGVfcHJlZmls bF9saW5lczsKKwl1MzIgbWFjcm90aWxlX3ByZWZpbGxfbGluZXM7CisJdTMyIHl1dl9udjEyX3By ZWZpbGxfbGluZXM7CisJdTMyIGxpbmVhcl9wcmVmaWxsX2xpbmVzOworCXUzMiBkb3duc2NhbGlu Z19wcmVmaWxsX2xpbmVzOworCXUzMiBhbW9ydGl6YWJsZV90aHJlc2hvbGQ7CisJdTMyIG1pbl9w cmVmaWxsX2xpbmVzOworCXUzMiBzYWZlX2x1dF90YmxbRFBVX1FPU19MVVRfVVNBR0VfTUFYXTsK Kwl1MzIgZGFuZ2VyX2x1dF90YmxbRFBVX1FPU19MVVRfVVNBR0VfTUFYXTsKKwlzdHJ1Y3QgZHB1 X3Fvc19sdXRfdGJsIHFvc19sdXRfdGJsW0RQVV9RT1NfTFVUX1VTQUdFX01BWF07CisJc3RydWN0 IGRwdV9wZXJmX2NkcF9jZmcgY2RwX2NmZ1tEUFVfUEVSRl9DRFBfVVNBR0VfTUFYXTsKK307CisK Ky8qKgorICogc3RydWN0IGRwdV9tZHNzX2NmZyAtIGluZm9ybWF0aW9uIG9mIE1EU1MgSFcKKyAq IFRoaXMgaXMgdGhlIG1haW4gY2F0YWxvZyBkYXRhIHN0cnVjdHVyZSByZXByZXNlbnRpbmcKKyAq IHRoaXMgSFcgdmVyc2lvbi4gQ29udGFpbnMgbnVtYmVyIG9mIGluc3RhbmNlcywKKyAqIHJlZ2lz dGVyIG9mZnNldHMsIGNhcGFiaWxpdGllcyBvZiB0aGUgYWxsIE1EU1MgSFcgc3ViLWJsb2Nrcy4K KyAqCisgKiBAZG1hX2Zvcm1hdHMgICAgICAgIFN1cHBvcnRlZCBmb3JtYXRzIGZvciBkbWEgcGlw ZQorICogQGN1cnNvcl9mb3JtYXRzICAgICBTdXBwb3J0ZWQgZm9ybWF0cyBmb3IgY3Vyc29yIHBp cGUKKyAqIEB2aWdfZm9ybWF0cyAgICAgICAgU3VwcG9ydGVkIGZvcm1hdHMgZm9yIHZpZyBwaXBl CisgKi8KK3N0cnVjdCBkcHVfbWRzc19jZmcgeworCXUzMiBod3ZlcnNpb247CisKKwljb25zdCBz dHJ1Y3QgZHB1X2NhcHMgKmNhcHM7CisKKwl1MzIgbWRwX2NvdW50OworCXN0cnVjdCBkcHVfbWRw X2NmZyAqbWRwOworCisJdTMyIGN0bF9jb3VudDsKKwlzdHJ1Y3QgZHB1X2N0bF9jZmcgKmN0bDsK KworCXUzMiBzc3BwX2NvdW50OworCXN0cnVjdCBkcHVfc3NwcF9jZmcgKnNzcHA7CisKKwl1MzIg bWl4ZXJfY291bnQ7CisJc3RydWN0IGRwdV9sbV9jZmcgKm1peGVyOworCisJdTMyIGRzX2NvdW50 OworCXN0cnVjdCBkcHVfZHNfY2ZnICpkczsKKworCXUzMiBwaW5ncG9uZ19jb3VudDsKKwlzdHJ1 Y3QgZHB1X3Bpbmdwb25nX2NmZyAqcGluZ3Bvbmc7CisKKwl1MzIgY2RtX2NvdW50OworCXN0cnVj dCBkcHVfY2RtX2NmZyAqY2RtOworCisJdTMyIGludGZfY291bnQ7CisJc3RydWN0IGRwdV9pbnRm X2NmZyAqaW50ZjsKKworCXUzMiB2YmlmX2NvdW50OworCXN0cnVjdCBkcHVfdmJpZl9jZmcgKnZi aWY7CisKKwl1MzIgcmVnX2RtYV9jb3VudDsKKwlzdHJ1Y3QgZHB1X3JlZ19kbWFfY2ZnIGRtYV9j Zmc7CisKKwl1MzIgYWRfY291bnQ7CisKKwkvKiBBZGQgYWRkaXRpb25hbCBibG9jayBkYXRhIHN0 cnVjdHVyZXMgaGVyZSAqLworCisJc3RydWN0IGRwdV9wZXJmX2NmZyBwZXJmOworCXN0cnVjdCBk cHVfZm9ybWF0X2V4dGVuZGVkICpkbWFfZm9ybWF0czsKKwlzdHJ1Y3QgZHB1X2Zvcm1hdF9leHRl bmRlZCAqY3Vyc29yX2Zvcm1hdHM7CisJc3RydWN0IGRwdV9mb3JtYXRfZXh0ZW5kZWQgKnZpZ19m b3JtYXRzOworfTsKKworc3RydWN0IGRwdV9tZHNzX2h3X2NmZ19oYW5kbGVyIHsKKwl1MzIgaHdf cmV2OworCXZvaWQgKCpjZmdfaW5pdCkoc3RydWN0IGRwdV9tZHNzX2NmZyAqZHB1X2NmZyk7Cit9 OworCisvKgorICogQWNjZXNzIE1hY3JvcworICovCisjZGVmaW5lIEJMS19NRFAocykgKChzKS0+ bWRwKQorI2RlZmluZSBCTEtfQ1RMKHMpICgocyktPmN0bCkKKyNkZWZpbmUgQkxLX1ZJRyhzKSAo KHMpLT52aWcpCisjZGVmaW5lIEJMS19SR0IocykgKChzKS0+cmdiKQorI2RlZmluZSBCTEtfRE1B KHMpICgocyktPmRtYSkKKyNkZWZpbmUgQkxLX0NVUlNPUihzKSAoKHMpLT5jdXJzb3IpCisjZGVm aW5lIEJMS19NSVhFUihzKSAoKHMpLT5taXhlcikKKyNkZWZpbmUgQkxLX0RTKHMpICgocyktPmRz KQorI2RlZmluZSBCTEtfUElOR1BPTkcocykgKChzKS0+cGluZ3BvbmcpCisjZGVmaW5lIEJMS19D RE0ocykgKChzKS0+Y2RtKQorI2RlZmluZSBCTEtfSU5URihzKSAoKHMpLT5pbnRmKQorI2RlZmlu ZSBCTEtfQUQocykgKChzKS0+YWQpCisKKy8qKgorICogZHB1X2h3X2NhdGFsb2dfaW5pdCAtIGRw dSBoYXJkd2FyZSBjYXRhbG9nIGluaXQgQVBJIHJldHJpZXZlcworICogaGFyZGNvZGVkIHRhcmdl dCBzcGVjaWZpYyBjYXRhbG9nIGluZm9ybWF0aW9uIGluIGNvbmZpZyBzdHJ1Y3R1cmUKKyAqIEBo d19yZXY6ICAgICAgIGNhbGxlciBuZWVkcyBwcm92aWRlIHRoZSBoYXJkd2FyZSByZXZpc2lvbi4K KyAqCisgKiBSZXR1cm46IGRwdSBjb25maWcgc3RydWN0dXJlCisgKi8KK3N0cnVjdCBkcHVfbWRz c19jZmcgKmRwdV9od19jYXRhbG9nX2luaXQodTMyIGh3X3Jldik7CisKKy8qKgorICogZHB1X2h3 X2NhdGFsb2dfZGVpbml0IC0gZHB1IGhhcmR3YXJlIGNhdGFsb2cgY2xlYW51cAorICogQGRwdV9j Zmc6ICAgICAgcG9pbnRlciByZXR1cm5lZCBmcm9tIGluaXQgZnVuY3Rpb24KKyAqLwordm9pZCBk cHVfaHdfY2F0YWxvZ19kZWluaXQoc3RydWN0IGRwdV9tZHNzX2NmZyAqZHB1X2NmZyk7CisKKy8q KgorICogZHB1X2h3X3NzcHBfbXVsdGlyZWN0X2VuYWJsZWQgLSBjaGVjayBtdWx0aXJlY3QgZW5h YmxlZCBmb3IgdGhlIHNzcHAKKyAqIEBjZmc6ICAgICAgICAgIHBvaW50ZXIgdG8gc3NwcCBjZmcK KyAqLworc3RhdGljIGlubGluZSBib29sIGRwdV9od19zc3BwX211bHRpcmVjdF9lbmFibGVkKGNv bnN0IHN0cnVjdCBkcHVfc3NwcF9jZmcgKmNmZykKK3sKKwlyZXR1cm4gdGVzdF9iaXQoRFBVX1NT UFBfU01BUlRfRE1BX1YxLCAmY2ZnLT5mZWF0dXJlcykgfHwKKwkJCSB0ZXN0X2JpdChEUFVfU1NQ UF9TTUFSVF9ETUFfVjIsICZjZmctPmZlYXR1cmVzKTsKK30KKyNlbmRpZiAvKiBfRFBVX0hXX0NB VEFMT0dfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X2h3X2NhdGFsb2dfZm9ybWF0LmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf aHdfY2F0YWxvZ19mb3JtYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MDAuLjAzMWM0MTE2MzA4OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9od19jYXRhbG9nX2Zvcm1hdC5oCkBAIC0wLDAgKzEsMTgyIEBACisvKiBD b3B5cmlnaHQgKGMpIDIwMTUtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMg cmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAorICogb25seSB2ZXJz aW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgor ICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSAiZHB1X2h3X21kc3MuaCIKKwor c3RhdGljIGNvbnN0IHN0cnVjdCBkcHVfZm9ybWF0X2V4dGVuZGVkIHBsYW5lX2Zvcm1hdHNbXSA9 IHsKKwl7RFJNX0ZPUk1BVF9BUkdCODg4OCwgMH0sCisJe0RSTV9GT1JNQVRfQUJHUjg4ODgsIDB9 LAorCXtEUk1fRk9STUFUX1JHQkE4ODg4LCAwfSwKKwl7RFJNX0ZPUk1BVF9BQkdSODg4OCwgRFJN X0ZPUk1BVF9NT0RfUUNPTV9DT01QUkVTU0VEfSwKKwl7RFJNX0ZPUk1BVF9CR1JBODg4OCwgMH0s CisJe0RSTV9GT1JNQVRfWFJHQjg4ODgsIDB9LAorCXtEUk1fRk9STUFUX1JHQlg4ODg4LCAwfSwK Kwl7RFJNX0ZPUk1BVF9CR1JYODg4OCwgMH0sCisJe0RSTV9GT1JNQVRfWEJHUjg4ODgsIDB9LAor CXtEUk1fRk9STUFUX1hCR1I4ODg4LCBEUk1fRk9STUFUX01PRF9RQ09NX0NPTVBSRVNTRUR9LAor CXtEUk1fRk9STUFUX1JHQjg4OCwgMH0sCisJe0RSTV9GT1JNQVRfQkdSODg4LCAwfSwKKwl7RFJN X0ZPUk1BVF9SR0I1NjUsIDB9LAorCXtEUk1fRk9STUFUX0JHUjU2NSwgRFJNX0ZPUk1BVF9NT0Rf UUNPTV9DT01QUkVTU0VEfSwKKwl7RFJNX0ZPUk1BVF9CR1I1NjUsIDB9LAorCXtEUk1fRk9STUFU X0FSR0IxNTU1LCAwfSwKKwl7RFJNX0ZPUk1BVF9BQkdSMTU1NSwgMH0sCisJe0RSTV9GT1JNQVRf UkdCQTU1NTEsIDB9LAorCXtEUk1fRk9STUFUX0JHUkE1NTUxLCAwfSwKKwl7RFJNX0ZPUk1BVF9Y UkdCMTU1NSwgMH0sCisJe0RSTV9GT1JNQVRfWEJHUjE1NTUsIDB9LAorCXtEUk1fRk9STUFUX1JH Qlg1NTUxLCAwfSwKKwl7RFJNX0ZPUk1BVF9CR1JYNTU1MSwgMH0sCisJe0RSTV9GT1JNQVRfQVJH QjQ0NDQsIDB9LAorCXtEUk1fRk9STUFUX0FCR1I0NDQ0LCAwfSwKKwl7RFJNX0ZPUk1BVF9SR0JB NDQ0NCwgMH0sCisJe0RSTV9GT1JNQVRfQkdSQTQ0NDQsIDB9LAorCXtEUk1fRk9STUFUX1hSR0I0 NDQ0LCAwfSwKKwl7RFJNX0ZPUk1BVF9YQkdSNDQ0NCwgMH0sCisJe0RSTV9GT1JNQVRfUkdCWDQ0 NDQsIDB9LAorCXtEUk1fRk9STUFUX0JHUlg0NDQ0LCAwfSwKKwl7MCwgMH0sCit9OworCitzdGF0 aWMgY29uc3Qgc3RydWN0IGRwdV9mb3JtYXRfZXh0ZW5kZWQgcGxhbmVfZm9ybWF0c195dXZbXSA9 IHsKKwl7RFJNX0ZPUk1BVF9BUkdCODg4OCwgMH0sCisJe0RSTV9GT1JNQVRfQUJHUjg4ODgsIDB9 LAorCXtEUk1fRk9STUFUX1JHQkE4ODg4LCAwfSwKKwl7RFJNX0ZPUk1BVF9CR1JYODg4OCwgMH0s CisJe0RSTV9GT1JNQVRfQUJHUjg4ODgsIERSTV9GT1JNQVRfTU9EX1FDT01fQ09NUFJFU1NFRH0s CisJe0RSTV9GT1JNQVRfQkdSQTg4ODgsIDB9LAorCXtEUk1fRk9STUFUX1hSR0I4ODg4LCAwfSwK Kwl7RFJNX0ZPUk1BVF9YQkdSODg4OCwgMH0sCisJe0RSTV9GT1JNQVRfUkdCWDg4ODgsIDB9LAor CXtEUk1fRk9STUFUX1hCR1I4ODg4LCBEUk1fRk9STUFUX01PRF9RQ09NX0NPTVBSRVNTRUR9LAor CXtEUk1fRk9STUFUX1JHQjg4OCwgMH0sCisJe0RSTV9GT1JNQVRfQkdSODg4LCAwfSwKKwl7RFJN X0ZPUk1BVF9SR0I1NjUsIDB9LAorCXtEUk1fRk9STUFUX0JHUjU2NSwgRFJNX0ZPUk1BVF9NT0Rf UUNPTV9DT01QUkVTU0VEfSwKKwl7RFJNX0ZPUk1BVF9CR1I1NjUsIDB9LAorCXtEUk1fRk9STUFU X0FSR0IxNTU1LCAwfSwKKwl7RFJNX0ZPUk1BVF9BQkdSMTU1NSwgMH0sCisJe0RSTV9GT1JNQVRf UkdCQTU1NTEsIDB9LAorCXtEUk1fRk9STUFUX0JHUkE1NTUxLCAwfSwKKwl7RFJNX0ZPUk1BVF9Y UkdCMTU1NSwgMH0sCisJe0RSTV9GT1JNQVRfWEJHUjE1NTUsIDB9LAorCXtEUk1fRk9STUFUX1JH Qlg1NTUxLCAwfSwKKwl7RFJNX0ZPUk1BVF9CR1JYNTU1MSwgMH0sCisJe0RSTV9GT1JNQVRfQVJH QjQ0NDQsIDB9LAorCXtEUk1fRk9STUFUX0FCR1I0NDQ0LCAwfSwKKwl7RFJNX0ZPUk1BVF9SR0JB NDQ0NCwgMH0sCisJe0RSTV9GT1JNQVRfQkdSQTQ0NDQsIDB9LAorCXtEUk1fRk9STUFUX1hSR0I0 NDQ0LCAwfSwKKwl7RFJNX0ZPUk1BVF9YQkdSNDQ0NCwgMH0sCisJe0RSTV9GT1JNQVRfUkdCWDQ0 NDQsIDB9LAorCXtEUk1fRk9STUFUX0JHUlg0NDQ0LCAwfSwKKworCXtEUk1fRk9STUFUX05WMTIs IDB9LAorCXtEUk1fRk9STUFUX05WMTIsIERSTV9GT1JNQVRfTU9EX1FDT01fQ09NUFJFU1NFRH0s CisJe0RSTV9GT1JNQVRfTlYyMSwgMH0sCisJe0RSTV9GT1JNQVRfTlYxNiwgMH0sCisJe0RSTV9G T1JNQVRfTlY2MSwgMH0sCisJe0RSTV9GT1JNQVRfVllVWSwgMH0sCisJe0RSTV9GT1JNQVRfVVlW WSwgMH0sCisJe0RSTV9GT1JNQVRfWVVZViwgMH0sCisJe0RSTV9GT1JNQVRfWVZZVSwgMH0sCisJ e0RSTV9GT1JNQVRfWVVWNDIwLCAwfSwKKwl7RFJNX0ZPUk1BVF9ZVlU0MjAsIDB9LAorCXswLCAw fSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHB1X2Zvcm1hdF9leHRlbmRlZCBjdXJzb3Jf Zm9ybWF0c1tdID0geworCXtEUk1fRk9STUFUX0FSR0I4ODg4LCAwfSwKKwl7RFJNX0ZPUk1BVF9B QkdSODg4OCwgMH0sCisJe0RSTV9GT1JNQVRfUkdCQTg4ODgsIDB9LAorCXtEUk1fRk9STUFUX0JH UkE4ODg4LCAwfSwKKwl7RFJNX0ZPUk1BVF9YUkdCODg4OCwgMH0sCisJe0RSTV9GT1JNQVRfQVJH QjE1NTUsIDB9LAorCXtEUk1fRk9STUFUX0FCR1IxNTU1LCAwfSwKKwl7RFJNX0ZPUk1BVF9SR0JB NTU1MSwgMH0sCisJe0RSTV9GT1JNQVRfQkdSQTU1NTEsIDB9LAorCXtEUk1fRk9STUFUX0FSR0I0 NDQ0LCAwfSwKKwl7RFJNX0ZPUk1BVF9BQkdSNDQ0NCwgMH0sCisJe0RSTV9GT1JNQVRfUkdCQTQ0 NDQsIDB9LAorCXtEUk1fRk9STUFUX0JHUkE0NDQ0LCAwfSwKKwl7MCwgMH0sCit9OworCitzdGF0 aWMgY29uc3Qgc3RydWN0IGRwdV9mb3JtYXRfZXh0ZW5kZWQgd2IyX2Zvcm1hdHNbXSA9IHsKKwl7 RFJNX0ZPUk1BVF9SR0I1NjUsIDB9LAorCXtEUk1fRk9STUFUX0JHUjU2NSwgRFJNX0ZPUk1BVF9N T0RfUUNPTV9DT01QUkVTU0VEfSwKKwl7RFJNX0ZPUk1BVF9SR0I4ODgsIDB9LAorCXtEUk1fRk9S TUFUX0FSR0I4ODg4LCAwfSwKKwl7RFJNX0ZPUk1BVF9SR0JBODg4OCwgMH0sCisJe0RSTV9GT1JN QVRfQUJHUjg4ODgsIERSTV9GT1JNQVRfTU9EX1FDT01fQ09NUFJFU1NFRH0sCisJe0RSTV9GT1JN QVRfWFJHQjg4ODgsIDB9LAorCXtEUk1fRk9STUFUX1JHQlg4ODg4LCAwfSwKKwl7RFJNX0ZPUk1B VF9YQkdSODg4OCwgRFJNX0ZPUk1BVF9NT0RfUUNPTV9DT01QUkVTU0VEfSwKKwl7RFJNX0ZPUk1B VF9BUkdCMTU1NSwgMH0sCisJe0RSTV9GT1JNQVRfUkdCQTU1NTEsIDB9LAorCXtEUk1fRk9STUFU X1hSR0IxNTU1LCAwfSwKKwl7RFJNX0ZPUk1BVF9SR0JYNTU1MSwgMH0sCisJe0RSTV9GT1JNQVRf QVJHQjQ0NDQsIDB9LAorCXtEUk1fRk9STUFUX1JHQkE0NDQ0LCAwfSwKKwl7RFJNX0ZPUk1BVF9S R0JYNDQ0NCwgMH0sCisJe0RSTV9GT1JNQVRfWFJHQjQ0NDQsIDB9LAorCisJe0RSTV9GT1JNQVRf QkdSNTY1LCAwfSwKKwl7RFJNX0ZPUk1BVF9CR1I4ODgsIDB9LAorCXtEUk1fRk9STUFUX0FCR1I4 ODg4LCAwfSwKKwl7RFJNX0ZPUk1BVF9CR1JBODg4OCwgMH0sCisJe0RSTV9GT1JNQVRfQkdSWDg4 ODgsIDB9LAorCXtEUk1fRk9STUFUX1hCR1I4ODg4LCAwfSwKKwl7RFJNX0ZPUk1BVF9BQkdSMTU1 NSwgMH0sCisJe0RSTV9GT1JNQVRfQkdSQTU1NTEsIDB9LAorCXtEUk1fRk9STUFUX1hCR1IxNTU1 LCAwfSwKKwl7RFJNX0ZPUk1BVF9CR1JYNTU1MSwgMH0sCisJe0RSTV9GT1JNQVRfQUJHUjQ0NDQs IDB9LAorCXtEUk1fRk9STUFUX0JHUkE0NDQ0LCAwfSwKKwl7RFJNX0ZPUk1BVF9CR1JYNDQ0NCwg MH0sCisJe0RSTV9GT1JNQVRfWEJHUjQ0NDQsIDB9LAorCisJe0RSTV9GT1JNQVRfWVVWNDIwLCAw fSwKKwl7RFJNX0ZPUk1BVF9OVjEyLCAwfSwKKwl7RFJNX0ZPUk1BVF9OVjEyLCBEUk1fRk9STUFU X01PRF9RQ09NX0NPTVBSRVNTRUR9LAorCXtEUk1fRk9STUFUX05WMTYsIDB9LAorCXtEUk1fRk9S TUFUX1lVWVYsIDB9LAorCisJezAsIDB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcHVf Zm9ybWF0X2V4dGVuZGVkIHJnYl8xMGJpdF9mb3JtYXRzW10gPSB7CisJe0RSTV9GT1JNQVRfQkdS QTEwMTAxMDIsIDB9LAorCXtEUk1fRk9STUFUX0JHUlgxMDEwMTAyLCAwfSwKKwl7RFJNX0ZPUk1B VF9SR0JBMTAxMDEwMiwgMH0sCisJe0RSTV9GT1JNQVRfUkdCWDEwMTAxMDIsIDB9LAorCXtEUk1f Rk9STUFUX0FCR1IyMTAxMDEwLCAwfSwKKwl7RFJNX0ZPUk1BVF9BQkdSMjEwMTAxMCwgRFJNX0ZP Uk1BVF9NT0RfUUNPTV9DT01QUkVTU0VEfSwKKwl7RFJNX0ZPUk1BVF9YQkdSMjEwMTAxMCwgMH0s CisJe0RSTV9GT1JNQVRfWEJHUjIxMDEwMTAsIERSTV9GT1JNQVRfTU9EX1FDT01fQ09NUFJFU1NF RH0sCisJe0RSTV9GT1JNQVRfQVJHQjIxMDEwMTAsIDB9LAorCXtEUk1fRk9STUFUX1hSR0IyMTAx MDEwLCAwfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHB1X2Zvcm1hdF9leHRlbmRlZCBw MDEwX2Zvcm1hdHNbXSA9IHsKKwl7RFJNX0ZPUk1BVF9OVjEyLCBEUk1fRk9STUFUX01PRF9RQ09N X0RYfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHB1X2Zvcm1hdF9leHRlbmRlZCBwMDEw X3Vid2NfZm9ybWF0c1tdID0geworCXtEUk1fRk9STUFUX05WMTIsIERSTV9GT1JNQVRfTU9EX1FD T01fRFggfAorCQlEUk1fRk9STUFUX01PRF9RQ09NX0NPTVBSRVNTRUR9LAorfTsKKworc3RhdGlj IGNvbnN0IHN0cnVjdCBkcHVfZm9ybWF0X2V4dGVuZGVkIHRwMTBfdWJ3Y19mb3JtYXRzW10gPSB7 CisJe0RSTV9GT1JNQVRfTlYxMiwgRFJNX0ZPUk1BVF9NT0RfUUNPTV9DT01QUkVTU0VEIHwKKwkJ RFJNX0ZPUk1BVF9NT0RfUUNPTV9EWCB8IERSTV9GT1JNQVRfTU9EX1FDT01fVElHSFR9LAorfTsK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jZG0uYyBi L2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jZG0uYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmRhNmYwNjA5YmU1ZgotLS0gL2Rldi9udWxsCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jZG0uYwpAQCAtMCwwICsx LDMyMyBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE1LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9u LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQK KyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgImRwdV9o d19tZHNzLmgiCisjaW5jbHVkZSAiZHB1X2h3aW8uaCIKKyNpbmNsdWRlICJkcHVfaHdfY2F0YWxv Zy5oIgorI2luY2x1ZGUgImRwdV9od19jZG0uaCIKKyNpbmNsdWRlICJkcHVfZGJnLmgiCisjaW5j bHVkZSAiZHB1X2ttcy5oIgorCisjZGVmaW5lIENETV9DU0NfMTBfT1BNT0RFICAgICAgICAgICAg ICAgICAgMHgwMDAKKyNkZWZpbmUgQ0RNX0NTQ18xMF9CQVNFICAgICAgICAgICAgICAgICAgICAw eDAwNAorCisjZGVmaW5lIENETV9DRFdOMl9PUF9NT0RFICAgICAgICAgICAgICAgICAgMHgxMDAK KyNkZWZpbmUgQ0RNX0NEV04yX0NMQU1QX09VVCAgICAgICAgICAgICAgICAweDEwNAorI2RlZmlu ZSBDRE1fQ0RXTjJfUEFSQU1TXzNEXzAgICAgICAgICAgICAgIDB4MTA4CisjZGVmaW5lIENETV9D RFdOMl9QQVJBTVNfM0RfMSAgICAgICAgICAgICAgMHgxMEMKKyNkZWZpbmUgQ0RNX0NEV04yX0NP RUZGX0NPU0lURV9IXzAgICAgICAgICAweDExMAorI2RlZmluZSBDRE1fQ0RXTjJfQ09FRkZfQ09T SVRFX0hfMSAgICAgICAgIDB4MTE0CisjZGVmaW5lIENETV9DRFdOMl9DT0VGRl9DT1NJVEVfSF8y ICAgICAgICAgMHgxMTgKKyNkZWZpbmUgQ0RNX0NEV04yX0NPRUZGX09GRlNJVEVfSF8wICAgICAg ICAweDExQworI2RlZmluZSBDRE1fQ0RXTjJfQ09FRkZfT0ZGU0lURV9IXzEgICAgICAgIDB4MTIw CisjZGVmaW5lIENETV9DRFdOMl9DT0VGRl9PRkZTSVRFX0hfMiAgICAgICAgMHgxMjQKKyNkZWZp bmUgQ0RNX0NEV04yX0NPRUZGX0NPU0lURV9WICAgICAgICAgICAweDEyOAorI2RlZmluZSBDRE1f Q0RXTjJfQ09FRkZfT0ZGU0lURV9WICAgICAgICAgIDB4MTJDCisjZGVmaW5lIENETV9DRFdOMl9P VVRfU0laRSAgICAgICAgICAgICAgICAgMHgxMzAKKworI2RlZmluZSBDRE1fSERNSV9QQUNLX09Q X01PREUgICAgICAgICAgICAgIDB4MjAwCisjZGVmaW5lIENETV9DU0NfMTBfTUFUUklYX0NPRUZG XzAgICAgICAgICAgMHgwMDQKKworLyoqCisgKiBIb3Jpem9udGFsIGNvZWZmaWNpZW50cyBmb3Ig Y29zaXRlIGNocm9tYSBkb3duc2NhbGUKKyAqIHMxMyByZXByZXNlbnRhdGlvbiBvZiBjb2VmZmlj aWVudHMKKyAqLworc3RhdGljIHUzMiBjb3NpdGVfaF9jb2VmZltdID0gezB4MDAwMDAwMTYsIDB4 MDAwMDAxY2MsIDB4MDEwMDAwOWV9OworCisvKioKKyAqIEhvcml6b250YWwgY29lZmZpY2llbnRz IGZvciBvZmZzaXRlIGNocm9tYSBkb3duc2NhbGUKKyAqLworc3RhdGljIHUzMiBvZmZzaXRlX2hf Y29lZmZbXSA9IHsweDAwMGIwMDA1LCAweDAxZGIwMWViLCAweDAwZTQwMDQ2fTsKKworLyoqCisg KiBWZXJ0aWNhbCBjb2VmZmljaWVudHMgZm9yIGNvc2l0ZSBjaHJvbWEgZG93bnNjYWxlCisgKi8K K3N0YXRpYyB1MzIgY29zaXRlX3ZfY29lZmZbXSA9IHsweDAwMDgwMDA0fTsKKy8qKgorICogVmVy dGljYWwgY29lZmZpY2llbnRzIGZvciBvZmZzaXRlIGNocm9tYSBkb3duc2NhbGUKKyAqLworc3Rh dGljIHUzMiBvZmZzaXRlX3ZfY29lZmZbXSA9IHsweDAwMDYwMDAyfTsKKworLyogTGltaXRlZCBS YW5nZSByZ2IyeXV2IGNvZWZmIHdpdGggY2xhbXAgYW5kIGJpYXMgdmFsdWVzIGZvciBDU0MgMTAg bW9kdWxlICovCitzdGF0aWMgc3RydWN0IGRwdV9jc2NfY2ZnIHJnYjJ5dXZfY2ZnID0geworCXsK KwkJMHgwMDgzLCAweDAxMDIsIDB4MDAzMiwKKwkJMHgxZmI1LCAweDFmNmMsIDB4MDBlMSwKKwkJ MHgwMGUxLCAweDFmNDUsIDB4MWZkYworCX0sCisJeyAweDAwLCAweDAwLCAweDAwIH0sCisJeyAw eDAwNDAsIDB4MDIwMCwgMHgwMjAwIH0sCisJeyAweDAwMCwgMHgzZmYsIDB4MDAwLCAweDNmZiwg MHgwMDAsIDB4M2ZmIH0sCisJeyAweDA0MCwgMHgzYWMsIDB4MDQwLCAweDNjMCwgMHgwNDAsIDB4 M2MwIH0sCit9OworCitzdGF0aWMgc3RydWN0IGRwdV9jZG1fY2ZnICpfY2RtX29mZnNldChlbnVt IGRwdV9jZG0gY2RtLAorCQlzdHJ1Y3QgZHB1X21kc3NfY2ZnICptLAorCQl2b2lkIF9faW9tZW0g KmFkZHIsCisJCXN0cnVjdCBkcHVfaHdfYmxrX3JlZ19tYXAgKmIpCit7CisJaW50IGk7CisKKwlm b3IgKGkgPSAwOyBpIDwgbS0+Y2RtX2NvdW50OyBpKyspIHsKKwkJaWYgKGNkbSA9PSBtLT5jZG1b aV0uaWQpIHsKKwkJCWItPmJhc2Vfb2ZmID0gYWRkcjsKKwkJCWItPmJsa19vZmYgPSBtLT5jZG1b aV0uYmFzZTsKKwkJCWItPmxlbmd0aCA9IG0tPmNkbVtpXS5sZW47CisJCQliLT5od3ZlcnNpb24g PSBtLT5od3ZlcnNpb247CisJCQliLT5sb2dfbWFzayA9IERQVV9EQkdfTUFTS19DRE07CisJCQly ZXR1cm4gJm0tPmNkbVtpXTsKKwkJfQorCX0KKworCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwor fQorCitzdGF0aWMgaW50IGRwdV9od19jZG1fc2V0dXBfY3NjXzEwYml0KHN0cnVjdCBkcHVfaHdf Y2RtICpjdHgsCisJCXN0cnVjdCBkcHVfY3NjX2NmZyAqZGF0YSkKK3sKKwlkcHVfaHdfY3NjX3Nl dHVwKCZjdHgtPmh3LCBDRE1fQ1NDXzEwX01BVFJJWF9DT0VGRl8wLCBkYXRhLCB0cnVlKTsKKwor CXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRwdV9od19jZG1fc2V0dXBfY2R3bihzdHJ1Y3Qg ZHB1X2h3X2NkbSAqY3R4LAorCQlzdHJ1Y3QgZHB1X2h3X2NkbV9jZmcgKmNmZykKK3sKKwlzdHJ1 Y3QgZHB1X2h3X2Jsa19yZWdfbWFwICpjID0gJmN0eC0+aHc7CisJdTMyIG9wbW9kZSA9IDA7CisJ dTMyIG91dF9zaXplID0gMDsKKworCWlmIChjZmctPm91dHB1dF9iaXRfZGVwdGggPT0gQ0RNX0NE V05fT1VUUFVUXzEwQklUKQorCQlvcG1vZGUgJj0gfkJJVCg3KTsKKwllbHNlCisJCW9wbW9kZSB8 PSBCSVQoNyk7CisKKwkvKiBFTkFCTEUgRFdOU19IIGJpdCAqLworCW9wbW9kZSB8PSBCSVQoMSk7 CisKKwlzd2l0Y2ggKGNmZy0+aF9jZHduX3R5cGUpIHsKKwljYXNlIENETV9DRFdOX0RJU0FCTEU6 CisJCS8qIENMRUFSIE1FVEhPRF9IIGZpZWxkICovCisJCW9wbW9kZSAmPSB+KDB4MTgpOworCQkv KiBDTEVBUiBEV05TX0ggYml0ICovCisJCW9wbW9kZSAmPSB+QklUKDEpOworCQlicmVhazsKKwlj YXNlIENETV9DRFdOX1BJWEVMX0RST1A6CisJCS8qIENsZWFyIE1FVEhPRF9IIGZpZWxkIChwaXhl bCBkcm9wIGlzIDApICovCisJCW9wbW9kZSAmPSB+KDB4MTgpOworCQlicmVhazsKKwljYXNlIENE TV9DRFdOX0FWRzoKKwkJLyogQ2xlYXIgTUVUSE9EX0ggZmllbGQgKEF2ZXJhZ2UgaXMgMHgxKSAq LworCQlvcG1vZGUgJj0gfigweDE4KTsKKwkJb3Btb2RlIHw9ICgweDEgPDwgMHgzKTsKKwkJYnJl YWs7CisJY2FzZSBDRE1fQ0RXTl9DT1NJVEU6CisJCS8qIENsZWFyIE1FVEhPRF9IIGZpZWxkIChB dmVyYWdlIGlzIDB4MikgKi8KKwkJb3Btb2RlICY9IH4oMHgxOCk7CisJCW9wbW9kZSB8PSAoMHgy IDw8IDB4Myk7CisJCS8qIENvLXNpdGUgaG9yaXpvbnRhbCBjb2VmZmljaWVudHMgKi8KKwkJRFBV X1JFR19XUklURShjLCBDRE1fQ0RXTjJfQ09FRkZfQ09TSVRFX0hfMCwKKwkJCQljb3NpdGVfaF9j b2VmZlswXSk7CisJCURQVV9SRUdfV1JJVEUoYywgQ0RNX0NEV04yX0NPRUZGX0NPU0lURV9IXzEs CisJCQkJY29zaXRlX2hfY29lZmZbMV0pOworCQlEUFVfUkVHX1dSSVRFKGMsIENETV9DRFdOMl9D T0VGRl9DT1NJVEVfSF8yLAorCQkJCWNvc2l0ZV9oX2NvZWZmWzJdKTsKKwkJYnJlYWs7CisJY2Fz ZSBDRE1fQ0RXTl9PRkZTSVRFOgorCQkvKiBDbGVhciBNRVRIT0RfSCBmaWVsZCAoQXZlcmFnZSBp cyAweDMpICovCisJCW9wbW9kZSAmPSB+KDB4MTgpOworCQlvcG1vZGUgfD0gKDB4MyA8PCAweDMp OworCisJCS8qIE9mZi1zaXRlIGhvcml6b250YWwgY29lZmZpY2llbnRzICovCisJCURQVV9SRUdf V1JJVEUoYywgQ0RNX0NEV04yX0NPRUZGX09GRlNJVEVfSF8wLAorCQkJCW9mZnNpdGVfaF9jb2Vm ZlswXSk7CisJCURQVV9SRUdfV1JJVEUoYywgQ0RNX0NEV04yX0NPRUZGX09GRlNJVEVfSF8xLAor CQkJCW9mZnNpdGVfaF9jb2VmZlsxXSk7CisJCURQVV9SRUdfV1JJVEUoYywgQ0RNX0NEV04yX0NP RUZGX09GRlNJVEVfSF8yLAorCQkJCW9mZnNpdGVfaF9jb2VmZlsyXSk7CisJCWJyZWFrOworCWRl ZmF1bHQ6CisJCXByX2VycigiJXMgaW52YWxpZCBob3J6IGRvd24gc2FtcGxpbmcgdHlwZVxuIiwg X19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBFTkFCTEUgRFdOU19WIGJp dCAqLworCW9wbW9kZSB8PSBCSVQoMik7CisKKwlzd2l0Y2ggKGNmZy0+dl9jZHduX3R5cGUpIHsK KwljYXNlIENETV9DRFdOX0RJU0FCTEU6CisJCS8qIENMRUFSIE1FVEhPRF9WIGZpZWxkICovCisJ CW9wbW9kZSAmPSB+KDB4NjApOworCQkvKiBDTEVBUiBEV05TX1YgYml0ICovCisJCW9wbW9kZSAm PSB+QklUKDIpOworCQlicmVhazsKKwljYXNlIENETV9DRFdOX1BJWEVMX0RST1A6CisJCS8qIENs ZWFyIE1FVEhPRF9WIGZpZWxkIChwaXhlbCBkcm9wIGlzIDApICovCisJCW9wbW9kZSAmPSB+KDB4 NjApOworCQlicmVhazsKKwljYXNlIENETV9DRFdOX0FWRzoKKwkJLyogQ2xlYXIgTUVUSE9EX1Yg ZmllbGQgKEF2ZXJhZ2UgaXMgMHgxKSAqLworCQlvcG1vZGUgJj0gfigweDYwKTsKKwkJb3Btb2Rl IHw9ICgweDEgPDwgMHg1KTsKKwkJYnJlYWs7CisJY2FzZSBDRE1fQ0RXTl9DT1NJVEU6CisJCS8q IENsZWFyIE1FVEhPRF9WIGZpZWxkIChBdmVyYWdlIGlzIDB4MikgKi8KKwkJb3Btb2RlICY9IH4o MHg2MCk7CisJCW9wbW9kZSB8PSAoMHgyIDw8IDB4NSk7CisJCS8qIENvLXNpdGUgdmVydGljYWwg Y29lZmZpY2llbnRzICovCisJCURQVV9SRUdfV1JJVEUoYywKKwkJCQlDRE1fQ0RXTjJfQ09FRkZf Q09TSVRFX1YsCisJCQkJY29zaXRlX3ZfY29lZmZbMF0pOworCQlicmVhazsKKwljYXNlIENETV9D RFdOX09GRlNJVEU6CisJCS8qIENsZWFyIE1FVEhPRF9WIGZpZWxkIChBdmVyYWdlIGlzIDB4Mykg Ki8KKwkJb3Btb2RlICY9IH4oMHg2MCk7CisJCW9wbW9kZSB8PSAoMHgzIDw8IDB4NSk7CisKKwkJ LyogT2ZmLXNpdGUgdmVydGljYWwgY29lZmZpY2llbnRzICovCisJCURQVV9SRUdfV1JJVEUoYywK KwkJCQlDRE1fQ0RXTjJfQ09FRkZfT0ZGU0lURV9WLAorCQkJCW9mZnNpdGVfdl9jb2VmZlswXSk7 CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChjZmct PnZfY2R3bl90eXBlIHx8IGNmZy0+aF9jZHduX3R5cGUpCisJCW9wbW9kZSB8PSBCSVQoMCk7IC8q IEVOIENEV04gbW9kdWxlICovCisJZWxzZQorCQlvcG1vZGUgJj0gfkJJVCgwKTsKKworCW91dF9z aXplID0gKGNmZy0+b3V0cHV0X3dpZHRoICYgMHhGRkZGKSB8CisJCSgoY2ZnLT5vdXRwdXRfaGVp Z2h0ICYgMHhGRkZGKSA8PCAxNik7CisJRFBVX1JFR19XUklURShjLCBDRE1fQ0RXTjJfT1VUX1NJ WkUsIG91dF9zaXplKTsKKwlEUFVfUkVHX1dSSVRFKGMsIENETV9DRFdOMl9PUF9NT0RFLCBvcG1v ZGUpOworCURQVV9SRUdfV1JJVEUoYywgQ0RNX0NEV04yX0NMQU1QX09VVCwKKwkJCSgoMHgzRkYg PDwgMTYpIHwgMHgwKSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGRwdV9od19jZG1fZW5hYmxl KHN0cnVjdCBkcHVfaHdfY2RtICpjdHgsCisJCXN0cnVjdCBkcHVfaHdfY2RtX2NmZyAqY2RtKQor eworCXN0cnVjdCBkcHVfaHdfYmxrX3JlZ19tYXAgKmMgPSAmY3R4LT5odzsKKwljb25zdCBzdHJ1 Y3QgZHB1X2Zvcm1hdCAqZm10ID0gY2RtLT5vdXRwdXRfZm10OworCXN0cnVjdCBjZG1fb3V0cHV0 X2NmZyBjZG1fY2ZnID0geyAwIH07CisJdTMyIG9wbW9kZSA9IDA7CisJdTMyIGNzYyA9IDA7CisK KwlpZiAoIURQVV9GT1JNQVRfSVNfWVVWKGZtdCkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYg KGNkbS0+b3V0cHV0X3R5cGUgPT0gQ0RNX0NEV05fT1VUUFVUX0hETUkpIHsKKwkJaWYgKGZtdC0+ Y2hyb21hX3NhbXBsZSAhPSBEUFVfQ0hST01BX0gxVjIpCisJCQlyZXR1cm4gLUVJTlZBTDsgLyp1 bnN1cHBvcnRlZCBmb3JtYXQgKi8KKwkJb3Btb2RlID0gQklUKDApOworCQlvcG1vZGUgfD0gKGZt dC0+Y2hyb21hX3NhbXBsZSA8PCAxKTsKKwkJY2RtX2NmZy5pbnRmX2VuID0gdHJ1ZTsKKwl9CisK Kwljc2MgfD0gQklUKDIpOworCWNzYyAmPSB+QklUKDEpOworCWNzYyB8PSBCSVQoMCk7CisKKwlp ZiAoY3R4LT5od19tZHAgJiYgY3R4LT5od19tZHAtPm9wcy5zZXR1cF9jZG1fb3V0cHV0KQorCQlj dHgtPmh3X21kcC0+b3BzLnNldHVwX2NkbV9vdXRwdXQoY3R4LT5od19tZHAsICZjZG1fY2ZnKTsK KworCURQVV9SRUdfV1JJVEUoYywgQ0RNX0NTQ18xMF9PUE1PREUsIGNzYyk7CisJRFBVX1JFR19X UklURShjLCBDRE1fSERNSV9QQUNLX09QX01PREUsIG9wbW9kZSk7CisJcmV0dXJuIDA7Cit9CisK K3ZvaWQgZHB1X2h3X2NkbV9kaXNhYmxlKHN0cnVjdCBkcHVfaHdfY2RtICpjdHgpCit7CisJc3Ry dWN0IGNkbV9vdXRwdXRfY2ZnIGNkbV9jZmcgPSB7IDAgfTsKKworCWlmIChjdHgtPmh3X21kcCAm JiBjdHgtPmh3X21kcC0+b3BzLnNldHVwX2NkbV9vdXRwdXQpCisJCWN0eC0+aHdfbWRwLT5vcHMu c2V0dXBfY2RtX291dHB1dChjdHgtPmh3X21kcCwgJmNkbV9jZmcpOworfQorCitzdGF0aWMgdm9p ZCBfc2V0dXBfY2RtX29wcyhzdHJ1Y3QgZHB1X2h3X2NkbV9vcHMgKm9wcywKKwl1bnNpZ25lZCBs b25nIGZlYXR1cmVzKQoreworCW9wcy0+c2V0dXBfY3NjX2RhdGEgPSBkcHVfaHdfY2RtX3NldHVw X2NzY18xMGJpdDsKKwlvcHMtPnNldHVwX2Nkd24gPSBkcHVfaHdfY2RtX3NldHVwX2Nkd247CisJ b3BzLT5lbmFibGUgPSBkcHVfaHdfY2RtX2VuYWJsZTsKKwlvcHMtPmRpc2FibGUgPSBkcHVfaHdf Y2RtX2Rpc2FibGU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHB1X2h3X2Jsa19vcHMgZHB1X2h3X29w cyA9IHsKKwkuc3RhcnQgPSBOVUxMLAorCS5zdG9wID0gTlVMTCwKK307CisKK3N0cnVjdCBkcHVf aHdfY2RtICpkcHVfaHdfY2RtX2luaXQoZW51bSBkcHVfY2RtIGlkeCwKKwkJdm9pZCBfX2lvbWVt ICphZGRyLAorCQlzdHJ1Y3QgZHB1X21kc3NfY2ZnICptLAorCQlzdHJ1Y3QgZHB1X2h3X21kcCAq aHdfbWRwKQoreworCXN0cnVjdCBkcHVfaHdfY2RtICpjOworCXN0cnVjdCBkcHVfY2RtX2NmZyAq Y2ZnOworCWludCByYzsKKworCWMgPSBremFsbG9jKHNpemVvZigqYyksIEdGUF9LRVJORUwpOwor CWlmICghYykKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwljZmcgPSBfY2RtX29mZnNl dChpZHgsIG0sIGFkZHIsICZjLT5odyk7CisJaWYgKElTX0VSUl9PUl9OVUxMKGNmZykpIHsKKwkJ a2ZyZWUoYyk7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0KKworCWMtPmlkeCA9IGlk eDsKKwljLT5jYXBzID0gY2ZnOworCV9zZXR1cF9jZG1fb3BzKCZjLT5vcHMsIGMtPmNhcHMtPmZl YXR1cmVzKTsKKwljLT5od19tZHAgPSBod19tZHA7CisKKwlyYyA9IGRwdV9od19ibGtfaW5pdCgm Yy0+YmFzZSwgRFBVX0hXX0JMS19DRE0sIGlkeCwgJmRwdV9od19vcHMpOworCWlmIChyYykgewor CQlEUFVfRVJST1IoImZhaWxlZCB0byBpbml0IGh3IGJsayAlZFxuIiwgcmMpOworCQlnb3RvIGJs a19pbml0X2Vycm9yOworCX0KKworCS8qCisJICogUGVyZm9ybSBhbnkgZGVmYXVsdCBpbml0aWFs aXphdGlvbiBmb3IgdGhlIGNocm9tYSBkb3duIG1vZHVsZQorCSAqIEBzZXR1cCBkZWZhdWx0IGNz YyBjb2VmZmljaWVudHMKKwkgKi8KKwlkcHVfaHdfY2RtX3NldHVwX2NzY18xMGJpdChjLCAmcmdi Mnl1dl9jZmcpOworCisJcmV0dXJuIGM7CisKK2Jsa19pbml0X2Vycm9yOgorCWt6ZnJlZShjKTsK KworCXJldHVybiBFUlJfUFRSKHJjKTsKK30KKwordm9pZCBkcHVfaHdfY2RtX2Rlc3Ryb3koc3Ry dWN0IGRwdV9od19jZG0gKmNkbSkKK3sKKwlpZiAoY2RtKQorCQlkcHVfaHdfYmxrX2Rlc3Ryb3ko JmNkbS0+YmFzZSk7CisJa2ZyZWUoY2RtKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9kcHUxL2RwdV9od19jZG0uaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9od19jZG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAu LjVjY2ViMWVjYjhlMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9od19jZG0uaApAQCAtMCwwICsxLDEzOSBAQAorLyogQ29weXJpZ2h0IChjKSAy MDE1LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK KyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCisgKi8KKworI2lmbmRlZiBfRFBVX0hXX0NETV9ICisjZGVmaW5lIF9EUFVfSFdfQ0RN X0gKKworI2luY2x1ZGUgImRwdV9od19tZHNzLmgiCisjaW5jbHVkZSAiZHB1X2h3X3RvcC5oIgor I2luY2x1ZGUgImRwdV9od19ibGsuaCIKKworc3RydWN0IGRwdV9od19jZG07CisKK3N0cnVjdCBk cHVfaHdfY2RtX2NmZyB7CisJdTMyIG91dHB1dF93aWR0aDsKKwl1MzIgb3V0cHV0X2hlaWdodDsK Kwl1MzIgb3V0cHV0X2JpdF9kZXB0aDsKKwl1MzIgaF9jZHduX3R5cGU7CisJdTMyIHZfY2R3bl90 eXBlOworCWNvbnN0IHN0cnVjdCBkcHVfZm9ybWF0ICpvdXRwdXRfZm10OworCXUzMiBvdXRwdXRf dHlwZTsKKwlpbnQgZmxhZ3M7Cit9OworCitlbnVtIGRwdV9od19jZHduX3R5cGUgeworCUNETV9D RFdOX0RJU0FCTEUsCisJQ0RNX0NEV05fUElYRUxfRFJPUCwKKwlDRE1fQ0RXTl9BVkcsCisJQ0RN X0NEV05fQ09TSVRFLAorCUNETV9DRFdOX09GRlNJVEUsCit9OworCitlbnVtIGRwdV9od19jZHdu X291dHB1dF90eXBlIHsKKwlDRE1fQ0RXTl9PVVRQVVRfSERNSSwKKwlDRE1fQ0RXTl9PVVRQVVRf V0IsCit9OworCitlbnVtIGRwdV9od19jZHduX291dHB1dF9iaXRfZGVwdGggeworCUNETV9DRFdO X09VVFBVVF84QklULAorCUNETV9DRFdOX09VVFBVVF8xMEJJVCwKK307CisKKy8qKgorICogc3Ry dWN0IGRwdV9od19jZG1fb3BzIDogSW50ZXJmYWNlIHRvIHRoZSBjaHJvbWEgZG93biBIdyBkcml2 ZXIgZnVuY3Rpb25zCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBBc3N1bXB0aW9uIGlzIHRo ZXNlIGZ1bmN0aW9ucyB3aWxsIGJlIGNhbGxlZCBhZnRlcgorICogICAgICAgICAgICAgICAgICAg ICAgICAgY2xvY2tzIGFyZSBlbmFibGVkCisgKiAgQHNldHVwX2NzYzogICAgICAgICAgICBQcm9n cmFtcyB0aGUgY3NjIG1hdHJpeAorICogIEBzZXR1cF9jZHduOiAgICAgICAgICAgU2V0cyB1cCB0 aGUgY2hyb21hIGRvd24gc3ViIG1vZHVsZQorICogIEBlbmFibGU6ICAgICAgICAgICAgICAgRW5h YmxlcyB0aGUgb3V0cHV0IHRvIGludGVyZmFjZSBhbmQgcHJvZ3JhbXMgdGhlCisgKiAgICAgICAg ICAgICAgICAgICAgICAgICBvdXRwdXQgcGFja2VyCisgKiAgQGRpc2FibGU6ICAgICAgICAgICAg ICBQdXRzIHRoZSBjZG0gaW4gYnlwYXNzIG1vZGUKKyAqLworc3RydWN0IGRwdV9od19jZG1fb3Bz IHsKKwkvKioKKwkgKiBQcm9ncmFtcyB0aGUgQ1NDIG1hdHJpeCBmb3IgY29udmVyc2lvbiBmcm9t IFJHQiBzcGFjZSB0byBZVVYgc3BhY2UsCisJICogaXQgaXMgb3B0aW9uYWwgdG8gY2FsbCB0aGlz IGZ1bmN0aW9uIGFzIHRoaXMgbWF0cml4IGlzIGF1dG9tYXRpY2FsbHkKKwkgKiBzZXQgZHVyaW5n IGluaXRpYWxpemF0aW9uLCB1c2VyIHNob3VsZCBjYWxsIHRoaXMgaWYgaXQgd2FudHMKKwkgKiB0 byBwcm9ncmFtIGEgZGlmZmVyZW50IG1hdHJpeCB0aGFuIGRlZmF1bHQgbWF0cml4LgorCSAqIEBj ZG06ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGNocm9tYSBkb3duIGNvbnRleHQgc3RydWN0dXJl CisJICogQGRhdGEgICAgICAgICAgUG9pbnRlciB0byBDU0MgY29uZmlndXJhdGlvbiBkYXRhCisJ ICogcmV0dXJuOiAgICAgICAgMCBpZiBzdWNjZXNzOyBlcnJvciBjb2RlIG90aGVyd2lzZQorCSAq LworCWludCAoKnNldHVwX2NzY19kYXRhKShzdHJ1Y3QgZHB1X2h3X2NkbSAqY2RtLAorCQkJc3Ry dWN0IGRwdV9jc2NfY2ZnICpkYXRhKTsKKworCS8qKgorCSAqIFByb2dyYW1zIHRoZSBDaHJvbWEg ZG93bnNhbXBsZSBwYXJ0LgorCSAqIEBjZG0gICAgICAgICBQb2ludGVyIHRvIGNocm9tYSBkb3du IGNvbnRleHQKKwkgKi8KKwlpbnQgKCpzZXR1cF9jZHduKShzdHJ1Y3QgZHB1X2h3X2NkbSAqY2Rt LAorCXN0cnVjdCBkcHVfaHdfY2RtX2NmZyAqY2ZnKTsKKworCS8qKgorCSAqIEVuYWJsZSB0aGUg Q0RNIG1vZHVsZQorCSAqIEBjZG0gICAgICAgICBQb2ludGVyIHRvIGNocm9tYSBkb3duIGNvbnRl eHQKKwkgKi8KKwlpbnQgKCplbmFibGUpKHN0cnVjdCBkcHVfaHdfY2RtICpjZG0sCisJc3RydWN0 IGRwdV9od19jZG1fY2ZnICpjZmcpOworCisJLyoqCisJICogRGlzYWJsZSB0aGUgQ0RNIG1vZHVs ZQorCSAqIEBjZG0gICAgICAgICBQb2ludGVyIHRvIGNocm9tYSBkb3duIGNvbnRleHQKKwkgKi8K Kwl2b2lkICgqZGlzYWJsZSkoc3RydWN0IGRwdV9od19jZG0gKmNkbSk7Cit9OworCitzdHJ1Y3Qg ZHB1X2h3X2NkbSB7CisJc3RydWN0IGRwdV9od19ibGsgYmFzZTsKKwlzdHJ1Y3QgZHB1X2h3X2Js a19yZWdfbWFwIGh3OworCisJLyogY2hyb21hIGRvd24gKi8KKwljb25zdCBzdHJ1Y3QgZHB1X2Nk bV9jZmcgKmNhcHM7CisJZW51bSAgZHB1X2NkbSAgaWR4OworCisJLyogbWRwIHRvcCBodyBkcml2 ZXIgKi8KKwlzdHJ1Y3QgZHB1X2h3X21kcCAqaHdfbWRwOworCisJLyogb3BzICovCisJc3RydWN0 IGRwdV9od19jZG1fb3BzIG9wczsKK307CisKKy8qKgorICogZHB1X2h3X2NkbSAtIGNvbnZlcnQg YmFzZSBvYmplY3QgZHB1X2h3X2Jhc2UgdG8gY29udGFpbmVyCisgKiBAaHc6IFBvaW50ZXIgdG8g YmFzZSBoYXJkd2FyZSBibG9jaworICogcmV0dXJuOiBQb2ludGVyIHRvIGhhcmR3YXJlIGJsb2Nr IGNvbnRhaW5lcgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkcHVfaHdfY2RtICp0b19kcHVf aHdfY2RtKHN0cnVjdCBkcHVfaHdfYmxrICpodykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGh3 LCBzdHJ1Y3QgZHB1X2h3X2NkbSwgYmFzZSk7Cit9CisKKy8qKgorICogZHB1X2h3X2NkbV9pbml0 IC0gaW5pdGlhbGl6ZXMgdGhlIGNkbSBodyBkcml2ZXIgb2JqZWN0LgorICogc2hvdWxkIGJlIGNh bGxlZCBvbmNlIGJlZm9yZSBhY2Nlc3NpbmcgZXZlcnkgY2RtLgorICogQGlkeDogIGNkbSBpbmRl eCBmb3Igd2hpY2ggZHJpdmVyIG9iamVjdCBpcyByZXF1aXJlZAorICogQGFkZHI6IG1hcHBlZCBy ZWdpc3RlciBpbyBhZGRyZXNzIG9mIE1EUAorICogQG0gOiAgIHBvaW50ZXIgdG8gbWRzcyBjYXRh bG9nIGRhdGEKKyAqIEBod19tZHA6ICBwb2ludGVyIHRvIG1kcCB0b3AgaHcgZHJpdmVyIG9iamVj dAorICovCitzdHJ1Y3QgZHB1X2h3X2NkbSAqZHB1X2h3X2NkbV9pbml0KGVudW0gZHB1X2NkbSBp ZHgsCisJCXZvaWQgX19pb21lbSAqYWRkciwKKwkJc3RydWN0IGRwdV9tZHNzX2NmZyAqbSwKKwkJ c3RydWN0IGRwdV9od19tZHAgKmh3X21kcCk7CisKKy8qKgorICogZHB1X2h3X2NkbV9kZXN0cm95 IC0gZGVzdHJveXMgQ0RNIGRyaXZlciBjb250ZXh0CisgKiBAY2RtOiAgIHBvaW50ZXIgdG8gQ0RN IGRyaXZlciBjb250ZXh0CisgKi8KK3ZvaWQgZHB1X2h3X2NkbV9kZXN0cm95KHN0cnVjdCBkcHVf aHdfY2RtICpjZG0pOworCisjZW5kaWYgLypfRFBVX0hXX0NETV9IICovCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY3RsLmMgYi9kcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY3RsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAwLi4wNmJlN2NmN2NlNTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY3RsLmMKQEAgLTAsMCArMSw1NDAgQEAKKy8qIENv cHlyaWdodCAoYykgMjAxNS0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCisgKiBvbmx5IHZlcnNp b24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisg KiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2lu Y2x1ZGUgImRwdV9od2lvLmgiCisjaW5jbHVkZSAiZHB1X2h3X2N0bC5oIgorI2luY2x1ZGUgImRw dV9kYmcuaCIKKyNpbmNsdWRlICJkcHVfa21zLmgiCisKKyNkZWZpbmUgICBDVExfTEFZRVIobG0p ICAgICAgICAgICAgICAgICBcCisJKCgobG0pID09IExNXzUpID8gKDB4MDI0KSA6ICgoKGxtKSAt IExNXzApICogMHgwMDQpKQorI2RlZmluZSAgIENUTF9MQVlFUl9FWFQobG0pICAgICAgICAgICAg IFwKKwkoMHg0MCArICgoKGxtKSAtIExNXzApICogMHgwMDQpKQorI2RlZmluZSAgIENUTF9MQVlF Ul9FWFQyKGxtKSAgICAgICAgICAgICBcCisJKDB4NzAgKyAoKChsbSkgLSBMTV8wKSAqIDB4MDA0 KSkKKyNkZWZpbmUgICBDVExfTEFZRVJfRVhUMyhsbSkgICAgICAgICAgICAgXAorCSgweEEwICsg KCgobG0pIC0gTE1fMCkgKiAweDAwNCkpCisjZGVmaW5lICAgQ1RMX1RPUCAgICAgICAgICAgICAg ICAgICAgICAgMHgwMTQKKyNkZWZpbmUgICBDVExfRkxVU0ggICAgICAgICAgICAgICAgICAgICAw eDAxOAorI2RlZmluZSAgIENUTF9TVEFSVCAgICAgICAgICAgICAgICAgICAgIDB4MDFDCisjZGVm aW5lICAgQ1RMX1BSRVBBUkUgICAgICAgICAgICAgICAgICAgMHgwZDAKKyNkZWZpbmUgICBDVExf U1dfUkVTRVQgICAgICAgICAgICAgICAgICAweDAzMAorI2RlZmluZSAgIENUTF9MQVlFUl9FWFRO X09GRlNFVCAgICAgICAgIDB4NDAKKworI2RlZmluZSBDVExfTUlYRVJfQk9SREVSX09VVCAgICAg ICAgICAgIEJJVCgyNCkKKyNkZWZpbmUgQ1RMX0ZMVVNIX01BU0tfQ1RMICAgICAgICAgICAgICBC SVQoMTcpCisKKyNkZWZpbmUgRFBVX1JFR19SRVNFVF9USU1FT1VUX1VTICAgICAgICAyMDAwCisK K3N0YXRpYyBzdHJ1Y3QgZHB1X2N0bF9jZmcgKl9jdGxfb2Zmc2V0KGVudW0gZHB1X2N0bCBjdGws CisJCXN0cnVjdCBkcHVfbWRzc19jZmcgKm0sCisJCXZvaWQgX19pb21lbSAqYWRkciwKKwkJc3Ry dWN0IGRwdV9od19ibGtfcmVnX21hcCAqYikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkg PCBtLT5jdGxfY291bnQ7IGkrKykgeworCQlpZiAoY3RsID09IG0tPmN0bFtpXS5pZCkgeworCQkJ Yi0+YmFzZV9vZmYgPSBhZGRyOworCQkJYi0+YmxrX29mZiA9IG0tPmN0bFtpXS5iYXNlOworCQkJ Yi0+bGVuZ3RoID0gbS0+Y3RsW2ldLmxlbjsKKwkJCWItPmh3dmVyc2lvbiA9IG0tPmh3dmVyc2lv bjsKKwkJCWItPmxvZ19tYXNrID0gRFBVX0RCR19NQVNLX0NUTDsKKwkJCXJldHVybiAmbS0+Y3Rs W2ldOworCQl9CisJfQorCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworfQorCitzdGF0aWMgaW50 IF9taXhlcl9zdGFnZXMoY29uc3Qgc3RydWN0IGRwdV9sbV9jZmcgKm1peGVyLCBpbnQgY291bnQs CisJCWVudW0gZHB1X2xtIGxtKQoreworCWludCBpOworCWludCBzdGFnZXMgPSAtRUlOVkFMOwor CisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJaWYgKGxtID09IG1peGVyW2ldLmlk KSB7CisJCQlzdGFnZXMgPSBtaXhlcltpXS5zYmxrLT5tYXhibGVuZHN0YWdlczsKKwkJCWJyZWFr OworCQl9CisJfQorCisJcmV0dXJuIHN0YWdlczsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRw dV9od19jdGxfdHJpZ2dlcl9zdGFydChzdHJ1Y3QgZHB1X2h3X2N0bCAqY3R4KQoreworCURQVV9S RUdfV1JJVEUoJmN0eC0+aHcsIENUTF9TVEFSVCwgMHgxKTsKK30KKworc3RhdGljIGlubGluZSB2 b2lkIGRwdV9od19jdGxfdHJpZ2dlcl9wZW5kaW5nKHN0cnVjdCBkcHVfaHdfY3RsICpjdHgpCit7 CisJRFBVX1JFR19XUklURSgmY3R4LT5odywgQ1RMX1BSRVBBUkUsIDB4MSk7Cit9CisKK3N0YXRp YyBpbmxpbmUgdm9pZCBkcHVfaHdfY3RsX2NsZWFyX3BlbmRpbmdfZmx1c2goc3RydWN0IGRwdV9o d19jdGwgKmN0eCkKK3sKKwljdHgtPnBlbmRpbmdfZmx1c2hfbWFzayA9IDB4MDsKK30KKworc3Rh dGljIGlubGluZSB2b2lkIGRwdV9od19jdGxfdXBkYXRlX3BlbmRpbmdfZmx1c2goc3RydWN0IGRw dV9od19jdGwgKmN0eCwKKwkJdTMyIGZsdXNoYml0cykKK3sKKwljdHgtPnBlbmRpbmdfZmx1c2hf bWFzayB8PSBmbHVzaGJpdHM7Cit9CisKK3N0YXRpYyB1MzIgZHB1X2h3X2N0bF9nZXRfcGVuZGlu Z19mbHVzaChzdHJ1Y3QgZHB1X2h3X2N0bCAqY3R4KQoreworCWlmICghY3R4KQorCQlyZXR1cm4g MHgwOworCisJcmV0dXJuIGN0eC0+cGVuZGluZ19mbHVzaF9tYXNrOworfQorCitzdGF0aWMgaW5s aW5lIHZvaWQgZHB1X2h3X2N0bF90cmlnZ2VyX2ZsdXNoKHN0cnVjdCBkcHVfaHdfY3RsICpjdHgp Cit7CisKKwlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBDVExfRkxVU0gsIGN0eC0+cGVuZGluZ19m bHVzaF9tYXNrKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgZHB1X2h3X2N0bF9nZXRfZmx1c2hf cmVnaXN0ZXIoc3RydWN0IGRwdV9od19jdGwgKmN0eCkKK3sKKwlzdHJ1Y3QgZHB1X2h3X2Jsa19y ZWdfbWFwICpjID0gJmN0eC0+aHc7CisKKwlyZXR1cm4gRFBVX1JFR19SRUFEKGMsIENUTF9GTFVT SCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgZHB1X2h3X2N0bF9nZXRfYml0bWFza19z c3BwKHN0cnVjdCBkcHVfaHdfY3RsICpjdHgsCisJZW51bSBkcHVfc3NwcCBzc3BwKQoreworCXVp bnQzMl90IGZsdXNoYml0cyA9IDA7CisKKwlzd2l0Y2ggKHNzcHApIHsKKwljYXNlIFNTUFBfVklH MDoKKwkJZmx1c2hiaXRzID0gIEJJVCgwKTsKKwkJYnJlYWs7CisJY2FzZSBTU1BQX1ZJRzE6CisJ CWZsdXNoYml0cyA9IEJJVCgxKTsKKwkJYnJlYWs7CisJY2FzZSBTU1BQX1ZJRzI6CisJCWZsdXNo Yml0cyA9IEJJVCgyKTsKKwkJYnJlYWs7CisJY2FzZSBTU1BQX1ZJRzM6CisJCWZsdXNoYml0cyA9 IEJJVCgxOCk7CisJCWJyZWFrOworCWNhc2UgU1NQUF9SR0IwOgorCQlmbHVzaGJpdHMgPSBCSVQo Myk7CisJCWJyZWFrOworCWNhc2UgU1NQUF9SR0IxOgorCQlmbHVzaGJpdHMgPSBCSVQoNCk7CisJ CWJyZWFrOworCWNhc2UgU1NQUF9SR0IyOgorCQlmbHVzaGJpdHMgPSBCSVQoNSk7CisJCWJyZWFr OworCWNhc2UgU1NQUF9SR0IzOgorCQlmbHVzaGJpdHMgPSBCSVQoMTkpOworCQlicmVhazsKKwlj YXNlIFNTUFBfRE1BMDoKKwkJZmx1c2hiaXRzID0gQklUKDExKTsKKwkJYnJlYWs7CisJY2FzZSBT U1BQX0RNQTE6CisJCWZsdXNoYml0cyA9IEJJVCgxMik7CisJCWJyZWFrOworCWNhc2UgU1NQUF9E TUEyOgorCQlmbHVzaGJpdHMgPSBCSVQoMjQpOworCQlicmVhazsKKwljYXNlIFNTUFBfRE1BMzoK KwkJZmx1c2hiaXRzID0gQklUKDI1KTsKKwkJYnJlYWs7CisJY2FzZSBTU1BQX0NVUlNPUjA6CisJ CWZsdXNoYml0cyA9IEJJVCgyMik7CisJCWJyZWFrOworCWNhc2UgU1NQUF9DVVJTT1IxOgorCQlm bHVzaGJpdHMgPSBCSVQoMjMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisK KwlyZXR1cm4gZmx1c2hiaXRzOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGRwdV9od19j dGxfZ2V0X2JpdG1hc2tfbWl4ZXIoc3RydWN0IGRwdV9od19jdGwgKmN0eCwKKwllbnVtIGRwdV9s bSBsbSkKK3sKKwl1aW50MzJfdCBmbHVzaGJpdHMgPSAwOworCisJc3dpdGNoIChsbSkgeworCWNh c2UgTE1fMDoKKwkJZmx1c2hiaXRzID0gQklUKDYpOworCQlicmVhazsKKwljYXNlIExNXzE6CisJ CWZsdXNoYml0cyA9IEJJVCg3KTsKKwkJYnJlYWs7CisJY2FzZSBMTV8yOgorCQlmbHVzaGJpdHMg PSBCSVQoOCk7CisJCWJyZWFrOworCWNhc2UgTE1fMzoKKwkJZmx1c2hiaXRzID0gQklUKDkpOwor CQlicmVhazsKKwljYXNlIExNXzQ6CisJCWZsdXNoYml0cyA9IEJJVCgxMCk7CisJCWJyZWFrOwor CWNhc2UgTE1fNToKKwkJZmx1c2hiaXRzID0gQklUKDIwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoK KwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZmx1c2hiaXRzIHw9IENUTF9GTFVTSF9NQVNLX0NU TDsKKworCXJldHVybiBmbHVzaGJpdHM7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRwdV9od19j dGxfZ2V0X2JpdG1hc2tfaW50ZihzdHJ1Y3QgZHB1X2h3X2N0bCAqY3R4LAorCQl1MzIgKmZsdXNo Yml0cywgZW51bSBkcHVfaW50ZiBpbnRmKQoreworCXN3aXRjaCAoaW50ZikgeworCWNhc2UgSU5U Rl8wOgorCQkqZmx1c2hiaXRzIHw9IEJJVCgzMSk7CisJCWJyZWFrOworCWNhc2UgSU5URl8xOgor CQkqZmx1c2hiaXRzIHw9IEJJVCgzMCk7CisJCWJyZWFrOworCWNhc2UgSU5URl8yOgorCQkqZmx1 c2hiaXRzIHw9IEJJVCgyOSk7CisJCWJyZWFrOworCWNhc2UgSU5URl8zOgorCQkqZmx1c2hiaXRz IHw9IEJJVCgyOCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0K KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgZHB1X2h3X2N0bF9nZXRfYml0bWFz a19jZG0oc3RydWN0IGRwdV9od19jdGwgKmN0eCwKKwkJdTMyICpmbHVzaGJpdHMsIGVudW0gZHB1 X2NkbSBjZG0pCit7CisJc3dpdGNoIChjZG0pIHsKKwljYXNlIENETV8wOgorCQkqZmx1c2hiaXRz IHw9IEJJVCgyNik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0K KwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBkcHVfaHdfY3RsX3BvbGxfcmVzZXRfc3RhdHVz KHN0cnVjdCBkcHVfaHdfY3RsICpjdHgsIHUzMiB0aW1lb3V0X3VzKQoreworCXN0cnVjdCBkcHVf aHdfYmxrX3JlZ19tYXAgKmMgPSAmY3R4LT5odzsKKwlrdGltZV90IHRpbWVvdXQ7CisJdTMyIHN0 YXR1czsKKworCXRpbWVvdXQgPSBrdGltZV9hZGRfdXMoa3RpbWVfZ2V0KCksIHRpbWVvdXRfdXMp OworCisJLyoKKwkgKiBpdCB0YWtlcyBhcm91bmQgMzB1cyB0byBoYXZlIG1kcCBmaW5pc2ggcmVz ZXR0aW5nIGl0cyBjdGwgcGF0aAorCSAqIHBvbGwgZXZlcnkgNTB1cyBzbyB0aGF0IHJlc2V0IHNo b3VsZCBiZSBjb21wbGV0ZWQgYXQgMXN0IHBvbGwKKwkgKi8KKwlkbyB7CisJCXN0YXR1cyA9IERQ VV9SRUdfUkVBRChjLCBDVExfU1dfUkVTRVQpOworCQlzdGF0dXMgJj0gMHgxOworCQlpZiAoc3Rh dHVzKQorCQkJdXNsZWVwX3JhbmdlKDIwLCA1MCk7CisJfSB3aGlsZSAoc3RhdHVzICYmIGt0aW1l X2NvbXBhcmVfc2FmZShrdGltZV9nZXQoKSwgdGltZW91dCkgPCAwKTsKKworCXJldHVybiBzdGF0 dXM7Cit9CisKK3N0YXRpYyBpbnQgZHB1X2h3X2N0bF9yZXNldF9jb250cm9sKHN0cnVjdCBkcHVf aHdfY3RsICpjdHgpCit7CisJc3RydWN0IGRwdV9od19ibGtfcmVnX21hcCAqYyA9ICZjdHgtPmh3 OworCisJcHJfZGVidWcoImlzc3VpbmcgaHcgY3RsIHJlc2V0IGZvciBjdGw6JWRcbiIsIGN0eC0+ aWR4KTsKKwlEUFVfUkVHX1dSSVRFKGMsIENUTF9TV19SRVNFVCwgMHgxKTsKKwlpZiAoZHB1X2h3 X2N0bF9wb2xsX3Jlc2V0X3N0YXR1cyhjdHgsIERQVV9SRUdfUkVTRVRfVElNRU9VVF9VUykpCisJ CXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHB1X2h3X2N0 bF93YWl0X3Jlc2V0X3N0YXR1cyhzdHJ1Y3QgZHB1X2h3X2N0bCAqY3R4KQoreworCXN0cnVjdCBk cHVfaHdfYmxrX3JlZ19tYXAgKmMgPSAmY3R4LT5odzsKKwl1MzIgc3RhdHVzOworCisJc3RhdHVz ID0gRFBVX1JFR19SRUFEKGMsIENUTF9TV19SRVNFVCk7CisJc3RhdHVzICY9IDB4MDE7CisJaWYg KCFzdGF0dXMpCisJCXJldHVybiAwOworCisJcHJfZGVidWcoImh3IGN0bCByZXNldCBpcyBzZXQg Zm9yIGN0bDolZFxuIiwgY3R4LT5pZHgpOworCWlmIChkcHVfaHdfY3RsX3BvbGxfcmVzZXRfc3Rh dHVzKGN0eCwgRFBVX1JFR19SRVNFVF9USU1FT1VUX1VTKSkgeworCQlwcl9lcnIoImh3IHJlY292 ZXJ5IGlzIG5vdCBjb21wbGV0ZSBmb3IgY3RsOiVkXG4iLCBjdHgtPmlkeCk7CisJCXJldHVybiAt RUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkcHVfaHdfY3RsX2Ns ZWFyX2FsbF9ibGVuZHN0YWdlcyhzdHJ1Y3QgZHB1X2h3X2N0bCAqY3R4KQoreworCXN0cnVjdCBk cHVfaHdfYmxrX3JlZ19tYXAgKmMgPSAmY3R4LT5odzsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7 IGkgPCBjdHgtPm1peGVyX2NvdW50OyBpKyspIHsKKwkJRFBVX1JFR19XUklURShjLCBDVExfTEFZ RVIoTE1fMCArIGkpLCAwKTsKKwkJRFBVX1JFR19XUklURShjLCBDVExfTEFZRVJfRVhUKExNXzAg KyBpKSwgMCk7CisJCURQVV9SRUdfV1JJVEUoYywgQ1RMX0xBWUVSX0VYVDIoTE1fMCArIGkpLCAw KTsKKwkJRFBVX1JFR19XUklURShjLCBDVExfTEFZRVJfRVhUMyhMTV8wICsgaSksIDApOworCX0K K30KKworc3RhdGljIHZvaWQgZHB1X2h3X2N0bF9zZXR1cF9ibGVuZHN0YWdlKHN0cnVjdCBkcHVf aHdfY3RsICpjdHgsCisJZW51bSBkcHVfbG0gbG0sIHN0cnVjdCBkcHVfaHdfc3RhZ2VfY2ZnICpz dGFnZV9jZmcpCit7CisJc3RydWN0IGRwdV9od19ibGtfcmVnX21hcCAqYyA9ICZjdHgtPmh3Owor CXUzMiBtaXhlcmNmZyA9IDAsIG1peGVyY2ZnX2V4dCA9IDAsIG1peCwgZXh0OworCXUzMiBtaXhl cmNmZ19leHQyID0gMCwgbWl4ZXJjZmdfZXh0MyA9IDA7CisJaW50IGksIGo7CisJdTggc3RhZ2Vz OworCWludCBwaXBlc19wZXJfc3RhZ2U7CisKKwlzdGFnZXMgPSBfbWl4ZXJfc3RhZ2VzKGN0eC0+ bWl4ZXJfaHdfY2FwcywgY3R4LT5taXhlcl9jb3VudCwgbG0pOworCWlmIChzdGFnZXMgPCAwKQor CQlyZXR1cm47CisKKwlpZiAodGVzdF9iaXQoRFBVX01JWEVSX1NPVVJDRVNQTElULAorCQkmY3R4 LT5taXhlcl9od19jYXBzLT5mZWF0dXJlcykpCisJCXBpcGVzX3Blcl9zdGFnZSA9IFBJUEVTX1BF Ul9TVEFHRTsKKwllbHNlCisJCXBpcGVzX3Blcl9zdGFnZSA9IDE7CisKKwltaXhlcmNmZyA9IENU TF9NSVhFUl9CT1JERVJfT1VUOyAvKiBhbHdheXMgc2V0IEJPUkRFUl9PVVQgKi8KKworCWlmICgh c3RhZ2VfY2ZnKQorCQlnb3RvIGV4aXQ7CisKKwlmb3IgKGkgPSAwOyBpIDw9IHN0YWdlczsgaSsr KSB7CisJCS8qIG92ZXJmbG93IHRvIGV4dCByZWdpc3RlciBpZiAnaSArIDEgPiA3JyAqLworCQlt aXggPSAoaSArIDEpICYgMHg3OworCQlleHQgPSBpID49IDc7CisKKwkJZm9yIChqID0gMCA7IGog PCBwaXBlc19wZXJfc3RhZ2U7IGorKykgeworCQkJZW51bSBkcHVfc3NwcF9tdWx0aXJlY3RfaW5k ZXggcmVjdF9pbmRleCA9CisJCQkJc3RhZ2VfY2ZnLT5tdWx0aXJlY3RfaW5kZXhbaV1bal07CisK KwkJCXN3aXRjaCAoc3RhZ2VfY2ZnLT5zdGFnZVtpXVtqXSkgeworCQkJY2FzZSBTU1BQX1ZJRzA6 CisJCQkJaWYgKHJlY3RfaW5kZXggPT0gRFBVX1NTUFBfUkVDVF8xKSB7CisJCQkJCW1peGVyY2Zn X2V4dDMgfD0gKChpICsgMSkgJiAweEYpIDw8IDA7CisJCQkJfSBlbHNlIHsKKwkJCQkJbWl4ZXJj ZmcgfD0gbWl4IDw8IDA7CisJCQkJCW1peGVyY2ZnX2V4dCB8PSBleHQgPDwgMDsKKwkJCQl9CisJ CQkJYnJlYWs7CisJCQljYXNlIFNTUFBfVklHMToKKwkJCQlpZiAocmVjdF9pbmRleCA9PSBEUFVf U1NQUF9SRUNUXzEpIHsKKwkJCQkJbWl4ZXJjZmdfZXh0MyB8PSAoKGkgKyAxKSAmIDB4RikgPDwg NDsKKwkJCQl9IGVsc2UgeworCQkJCQltaXhlcmNmZyB8PSBtaXggPDwgMzsKKwkJCQkJbWl4ZXJj ZmdfZXh0IHw9IGV4dCA8PCAyOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgU1NQUF9WSUcy OgorCQkJCWlmIChyZWN0X2luZGV4ID09IERQVV9TU1BQX1JFQ1RfMSkgeworCQkJCQltaXhlcmNm Z19leHQzIHw9ICgoaSArIDEpICYgMHhGKSA8PCA4OworCQkJCX0gZWxzZSB7CisJCQkJCW1peGVy Y2ZnIHw9IG1peCA8PCA2OworCQkJCQltaXhlcmNmZ19leHQgfD0gZXh0IDw8IDQ7CisJCQkJfQor CQkJCWJyZWFrOworCQkJY2FzZSBTU1BQX1ZJRzM6CisJCQkJaWYgKHJlY3RfaW5kZXggPT0gRFBV X1NTUFBfUkVDVF8xKSB7CisJCQkJCW1peGVyY2ZnX2V4dDMgfD0gKChpICsgMSkgJiAweEYpIDw8 IDEyOworCQkJCX0gZWxzZSB7CisJCQkJCW1peGVyY2ZnIHw9IG1peCA8PCAyNjsKKwkJCQkJbWl4 ZXJjZmdfZXh0IHw9IGV4dCA8PCA2OworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgU1NQUF9S R0IwOgorCQkJCW1peGVyY2ZnIHw9IG1peCA8PCA5OworCQkJCW1peGVyY2ZnX2V4dCB8PSBleHQg PDwgODsKKwkJCQlicmVhazsKKwkJCWNhc2UgU1NQUF9SR0IxOgorCQkJCW1peGVyY2ZnIHw9IG1p eCA8PCAxMjsKKwkJCQltaXhlcmNmZ19leHQgfD0gZXh0IDw8IDEwOworCQkJCWJyZWFrOworCQkJ Y2FzZSBTU1BQX1JHQjI6CisJCQkJbWl4ZXJjZmcgfD0gbWl4IDw8IDE1OworCQkJCW1peGVyY2Zn X2V4dCB8PSBleHQgPDwgMTI7CisJCQkJYnJlYWs7CisJCQljYXNlIFNTUFBfUkdCMzoKKwkJCQlt aXhlcmNmZyB8PSBtaXggPDwgMjk7CisJCQkJbWl4ZXJjZmdfZXh0IHw9IGV4dCA8PCAxNDsKKwkJ CQlicmVhazsKKwkJCWNhc2UgU1NQUF9ETUEwOgorCQkJCWlmIChyZWN0X2luZGV4ID09IERQVV9T U1BQX1JFQ1RfMSkgeworCQkJCQltaXhlcmNmZ19leHQyIHw9ICgoaSArIDEpICYgMHhGKSA8PCA4 OworCQkJCX0gZWxzZSB7CisJCQkJCW1peGVyY2ZnIHw9IG1peCA8PCAxODsKKwkJCQkJbWl4ZXJj ZmdfZXh0IHw9IGV4dCA8PCAxNjsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIFNTUFBfRE1B MToKKwkJCQlpZiAocmVjdF9pbmRleCA9PSBEUFVfU1NQUF9SRUNUXzEpIHsKKwkJCQkJbWl4ZXJj ZmdfZXh0MiB8PSAoKGkgKyAxKSAmIDB4RikgPDwgMTI7CisJCQkJfSBlbHNlIHsKKwkJCQkJbWl4 ZXJjZmcgfD0gbWl4IDw8IDIxOworCQkJCQltaXhlcmNmZ19leHQgfD0gZXh0IDw8IDE4OworCQkJ CX0KKwkJCQlicmVhazsKKwkJCWNhc2UgU1NQUF9ETUEyOgorCQkJCWlmIChyZWN0X2luZGV4ID09 IERQVV9TU1BQX1JFQ1RfMSkgeworCQkJCQltaXhlcmNmZ19leHQyIHw9ICgoaSArIDEpICYgMHhG KSA8PCAxNjsKKwkJCQl9IGVsc2UgeworCQkJCQltaXggfD0gKGkgKyAxKSAmIDB4RjsKKwkJCQkJ bWl4ZXJjZmdfZXh0MiB8PSBtaXggPDwgMDsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIFNT UFBfRE1BMzoKKwkJCQlpZiAocmVjdF9pbmRleCA9PSBEUFVfU1NQUF9SRUNUXzEpIHsKKwkJCQkJ bWl4ZXJjZmdfZXh0MiB8PSAoKGkgKyAxKSAmIDB4RikgPDwgMjA7CisJCQkJfSBlbHNlIHsKKwkJ CQkJbWl4IHw9IChpICsgMSkgJiAweEY7CisJCQkJCW1peGVyY2ZnX2V4dDIgfD0gbWl4IDw8IDQ7 CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBTU1BQX0NVUlNPUjA6CisJCQkJbWl4ZXJjZmdf ZXh0IHw9ICgoaSArIDEpICYgMHhGKSA8PCAyMDsKKwkJCQlicmVhazsKKwkJCWNhc2UgU1NQUF9D VVJTT1IxOgorCQkJCW1peGVyY2ZnX2V4dCB8PSAoKGkgKyAxKSAmIDB4RikgPDwgMjY7CisJCQkJ YnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCitleGl0Ogor CURQVV9SRUdfV1JJVEUoYywgQ1RMX0xBWUVSKGxtKSwgbWl4ZXJjZmcpOworCURQVV9SRUdfV1JJ VEUoYywgQ1RMX0xBWUVSX0VYVChsbSksIG1peGVyY2ZnX2V4dCk7CisJRFBVX1JFR19XUklURShj LCBDVExfTEFZRVJfRVhUMihsbSksIG1peGVyY2ZnX2V4dDIpOworCURQVV9SRUdfV1JJVEUoYywg Q1RMX0xBWUVSX0VYVDMobG0pLCBtaXhlcmNmZ19leHQzKTsKK30KKworc3RhdGljIHZvaWQgZHB1 X2h3X2N0bF9pbnRmX2NmZyhzdHJ1Y3QgZHB1X2h3X2N0bCAqY3R4LAorCQlzdHJ1Y3QgZHB1X2h3 X2ludGZfY2ZnICpjZmcpCit7CisJc3RydWN0IGRwdV9od19ibGtfcmVnX21hcCAqYyA9ICZjdHgt Pmh3OworCXUzMiBpbnRmX2NmZyA9IDA7CisKKwlpbnRmX2NmZyB8PSAoY2ZnLT5pbnRmICYgMHhG KSA8PCA0OworCisJaWYgKGNmZy0+bW9kZV8zZCkgeworCQlpbnRmX2NmZyB8PSBCSVQoMTkpOwor CQlpbnRmX2NmZyB8PSAoY2ZnLT5tb2RlXzNkIC0gMHgxKSA8PCAyMDsKKwl9CisKKwlzd2l0Y2gg KGNmZy0+aW50Zl9tb2RlX3NlbCkgeworCWNhc2UgRFBVX0NUTF9NT0RFX1NFTF9WSUQ6CisJCWlu dGZfY2ZnICY9IH5CSVQoMTcpOworCQlpbnRmX2NmZyAmPSB+KDB4MyA8PCAxNSk7CisJCWJyZWFr OworCWNhc2UgRFBVX0NUTF9NT0RFX1NFTF9DTUQ6CisJCWludGZfY2ZnIHw9IEJJVCgxNyk7CisJ CWludGZfY2ZnIHw9ICgoY2ZnLT5zdHJlYW1fc2VsICYgMHgzKSA8PCAxNSk7CisJCWJyZWFrOwor CWRlZmF1bHQ6CisJCXByX2VycigidW5rbm93biBpbnRlcmZhY2UgdHlwZSAlZFxuIiwgY2ZnLT5p bnRmX21vZGVfc2VsKTsKKwkJcmV0dXJuOworCX0KKworCURQVV9SRUdfV1JJVEUoYywgQ1RMX1RP UCwgaW50Zl9jZmcpOworfQorCitzdGF0aWMgdm9pZCBfc2V0dXBfY3RsX29wcyhzdHJ1Y3QgZHB1 X2h3X2N0bF9vcHMgKm9wcywKKwkJdW5zaWduZWQgbG9uZyBjYXApCit7CisJb3BzLT5jbGVhcl9w ZW5kaW5nX2ZsdXNoID0gZHB1X2h3X2N0bF9jbGVhcl9wZW5kaW5nX2ZsdXNoOworCW9wcy0+dXBk YXRlX3BlbmRpbmdfZmx1c2ggPSBkcHVfaHdfY3RsX3VwZGF0ZV9wZW5kaW5nX2ZsdXNoOworCW9w cy0+Z2V0X3BlbmRpbmdfZmx1c2ggPSBkcHVfaHdfY3RsX2dldF9wZW5kaW5nX2ZsdXNoOworCW9w cy0+dHJpZ2dlcl9mbHVzaCA9IGRwdV9od19jdGxfdHJpZ2dlcl9mbHVzaDsKKwlvcHMtPmdldF9m bHVzaF9yZWdpc3RlciA9IGRwdV9od19jdGxfZ2V0X2ZsdXNoX3JlZ2lzdGVyOworCW9wcy0+dHJp Z2dlcl9zdGFydCA9IGRwdV9od19jdGxfdHJpZ2dlcl9zdGFydDsKKwlvcHMtPnRyaWdnZXJfcGVu ZGluZyA9IGRwdV9od19jdGxfdHJpZ2dlcl9wZW5kaW5nOworCW9wcy0+c2V0dXBfaW50Zl9jZmcg PSBkcHVfaHdfY3RsX2ludGZfY2ZnOworCW9wcy0+cmVzZXQgPSBkcHVfaHdfY3RsX3Jlc2V0X2Nv bnRyb2w7CisJb3BzLT53YWl0X3Jlc2V0X3N0YXR1cyA9IGRwdV9od19jdGxfd2FpdF9yZXNldF9z dGF0dXM7CisJb3BzLT5jbGVhcl9hbGxfYmxlbmRzdGFnZXMgPSBkcHVfaHdfY3RsX2NsZWFyX2Fs bF9ibGVuZHN0YWdlczsKKwlvcHMtPnNldHVwX2JsZW5kc3RhZ2UgPSBkcHVfaHdfY3RsX3NldHVw X2JsZW5kc3RhZ2U7CisJb3BzLT5nZXRfYml0bWFza19zc3BwID0gZHB1X2h3X2N0bF9nZXRfYml0 bWFza19zc3BwOworCW9wcy0+Z2V0X2JpdG1hc2tfbWl4ZXIgPSBkcHVfaHdfY3RsX2dldF9iaXRt YXNrX21peGVyOworCW9wcy0+Z2V0X2JpdG1hc2tfaW50ZiA9IGRwdV9od19jdGxfZ2V0X2JpdG1h c2tfaW50ZjsKKwlvcHMtPmdldF9iaXRtYXNrX2NkbSA9IGRwdV9od19jdGxfZ2V0X2JpdG1hc2tf Y2RtOworfTsKKworc3RhdGljIHN0cnVjdCBkcHVfaHdfYmxrX29wcyBkcHVfaHdfb3BzID0gewor CS5zdGFydCA9IE5VTEwsCisJLnN0b3AgPSBOVUxMLAorfTsKKworc3RydWN0IGRwdV9od19jdGwg KmRwdV9od19jdGxfaW5pdChlbnVtIGRwdV9jdGwgaWR4LAorCQl2b2lkIF9faW9tZW0gKmFkZHIs CisJCXN0cnVjdCBkcHVfbWRzc19jZmcgKm0pCit7CisJc3RydWN0IGRwdV9od19jdGwgKmM7CisJ c3RydWN0IGRwdV9jdGxfY2ZnICpjZmc7CisJaW50IHJjOworCisJYyA9IGt6YWxsb2Moc2l6ZW9m KCpjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsK KworCWNmZyA9IF9jdGxfb2Zmc2V0KGlkeCwgbSwgYWRkciwgJmMtPmh3KTsKKwlpZiAoSVNfRVJS X09SX05VTEwoY2ZnKSkgeworCQlrZnJlZShjKTsKKwkJcHJfZXJyKCJmYWlsZWQgdG8gY3JlYXRl IGRwdV9od19jdGwgJWRcbiIsIGlkeCk7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0K KworCWMtPmNhcHMgPSBjZmc7CisJX3NldHVwX2N0bF9vcHMoJmMtPm9wcywgYy0+Y2Fwcy0+ZmVh dHVyZXMpOworCWMtPmlkeCA9IGlkeDsKKwljLT5taXhlcl9jb3VudCA9IG0tPm1peGVyX2NvdW50 OworCWMtPm1peGVyX2h3X2NhcHMgPSBtLT5taXhlcjsKKworCXJjID0gZHB1X2h3X2Jsa19pbml0 KCZjLT5iYXNlLCBEUFVfSFdfQkxLX0NUTCwgaWR4LCAmZHB1X2h3X29wcyk7CisJaWYgKHJjKSB7 CisJCURQVV9FUlJPUigiZmFpbGVkIHRvIGluaXQgaHcgYmxrICVkXG4iLCByYyk7CisJCWdvdG8g YmxrX2luaXRfZXJyb3I7CisJfQorCisJcmV0dXJuIGM7CisKK2Jsa19pbml0X2Vycm9yOgorCWt6 ZnJlZShjKTsKKworCXJldHVybiBFUlJfUFRSKHJjKTsKK30KKwordm9pZCBkcHVfaHdfY3RsX2Rl c3Ryb3koc3RydWN0IGRwdV9od19jdGwgKmN0eCkKK3sKKwlpZiAoY3R4KQorCQlkcHVfaHdfYmxr X2Rlc3Ryb3koJmN0eC0+YmFzZSk7CisJa2ZyZWUoY3R4KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jdGwuaCBiL2RyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9od19jdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMDAuLmM2NmE3MWY4YjgzOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9kcHUxL2RwdV9od19jdGwuaApAQCAtMCwwICsxLDIxOCBAQAorLyogQ29weXJp Z2h0IChjKSAyMDE1LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2Vy dmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVyc2lvbiAy IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfRFBVX0hXX0NUTF9ICisjZGVmaW5lIF9E UFVfSFdfQ1RMX0gKKworI2luY2x1ZGUgImRwdV9od19tZHNzLmgiCisjaW5jbHVkZSAiZHB1X2h3 X3V0aWwuaCIKKyNpbmNsdWRlICJkcHVfaHdfY2F0YWxvZy5oIgorI2luY2x1ZGUgImRwdV9od19z c3BwLmgiCisjaW5jbHVkZSAiZHB1X2h3X2Jsay5oIgorCisvKioKKyAqIGRwdV9jdGxfbW9kZV9z ZWw6IEludGVyZmFjZSBtb2RlIHNlbGVjdGlvbgorICogRFBVX0NUTF9NT0RFX1NFTF9WSUQ6ICAg IFZpZGVvIG1vZGUgaW50ZXJmYWNlCisgKiBEUFVfQ1RMX01PREVfU0VMX0NNRDogICAgQ29tbWFu ZCBtb2RlIGludGVyZmFjZQorICovCitlbnVtIGRwdV9jdGxfbW9kZV9zZWwgeworCURQVV9DVExf TU9ERV9TRUxfVklEID0gMCwKKwlEUFVfQ1RMX01PREVfU0VMX0NNRAorfTsKKworc3RydWN0IGRw dV9od19jdGw7CisvKioKKyAqIHN0cnVjdCBkcHVfaHdfc3RhZ2VfY2ZnIC0gYmxlbmRpbmcgc3Rh Z2UgY2ZnCisgKiBAc3RhZ2UgOiBTU1BQX0lEIGF0IGVhY2ggc3RhZ2UKKyAqIEBtdWx0aXJlY3Rf aW5kZXg6IGluZGV4IG9mIHRoZSByZWN0YW5nbGUgb2YgU1NQUC4KKyAqLworc3RydWN0IGRwdV9o d19zdGFnZV9jZmcgeworCWVudW0gZHB1X3NzcHAgc3RhZ2VbRFBVX1NUQUdFX01BWF1bUElQRVNf UEVSX1NUQUdFXTsKKwllbnVtIGRwdV9zc3BwX211bHRpcmVjdF9pbmRleCBtdWx0aXJlY3RfaW5k ZXgKKwkJCQkJW0RQVV9TVEFHRV9NQVhdW1BJUEVTX1BFUl9TVEFHRV07Cit9OworCisvKioKKyAq IHN0cnVjdCBkcHVfaHdfaW50Zl9jZmcgOkRlc2NyaWJlcyBob3cgdGhlIERQVSB3cml0ZXMgZGF0 YSB0byBvdXRwdXQgaW50ZXJmYWNlCisgKiBAaW50ZiA6ICAgICAgICAgICAgICAgICBJbnRlcmZh Y2UgaWQKKyAqIEBtb2RlXzNkOiAgICAgICAgICAgICAgIDNkIG11eCBjb25maWd1cmF0aW9uCisg KiBAaW50Zl9tb2RlX3NlbDogICAgICAgICBJbnRlcmZhY2UgbW9kZSwgY21kIC8gdmlkCisgKiBA c3RyZWFtX3NlbDogICAgICAgICAgICBTdHJlYW0gc2VsZWN0aW9uIGZvciBtdWx0aS1zdHJlYW0g aW50ZXJmYWNlcworICovCitzdHJ1Y3QgZHB1X2h3X2ludGZfY2ZnIHsKKwllbnVtIGRwdV9pbnRm IGludGY7CisJZW51bSBkcHVfM2RfYmxlbmRfbW9kZSBtb2RlXzNkOworCWVudW0gZHB1X2N0bF9t b2RlX3NlbCBpbnRmX21vZGVfc2VsOworCWludCBzdHJlYW1fc2VsOworfTsKKworLyoqCisgKiBz dHJ1Y3QgZHB1X2h3X2N0bF9vcHMgLSBJbnRlcmZhY2UgdG8gdGhlIHdiIEh3IGRyaXZlciBmdW5j dGlvbnMKKyAqIEFzc3VtcHRpb24gaXMgdGhlc2UgZnVuY3Rpb25zIHdpbGwgYmUgY2FsbGVkIGFm dGVyIGNsb2NrcyBhcmUgZW5hYmxlZAorICovCitzdHJ1Y3QgZHB1X2h3X2N0bF9vcHMgeworCS8q KgorCSAqIGtpY2tvZmYgaHcgb3BlcmF0aW9uIGZvciBTdyBjb250cm9sbGVkIGludGVyZmFjZXMK KwkgKiBEU0kgY21kIG1vZGUgYW5kIFdCIGludGVyZmFjZSBhcmUgU1cgY29udHJvbGxlZAorCSAq IEBjdHggICAgICAgOiBjdGwgcGF0aCBjdHggcG9pbnRlcgorCSAqLworCXZvaWQgKCp0cmlnZ2Vy X3N0YXJ0KShzdHJ1Y3QgZHB1X2h3X2N0bCAqY3R4KTsKKworCS8qKgorCSAqIGtpY2tvZmYgcHJl cGFyZSBpcyBpbiBwcm9ncmVzcyBodyBvcGVyYXRpb24gZm9yIHN3CisJICogY29udHJvbGxlZCBp bnRlcmZhY2VzOiBEU0kgY21kIG1vZGUgYW5kIFdCIGludGVyZmFjZQorCSAqIGFyZSBTVyBjb250 cm9sbGVkCisJICogQGN0eCAgICAgICA6IGN0bCBwYXRoIGN0eCBwb2ludGVyCisJICovCisJdm9p ZCAoKnRyaWdnZXJfcGVuZGluZykoc3RydWN0IGRwdV9od19jdGwgKmN0eCk7CisKKwkvKioKKwkg KiBDbGVhciB0aGUgdmFsdWUgb2YgdGhlIGNhY2hlZCBwZW5kaW5nX2ZsdXNoX21hc2sKKwkgKiBO byBlZmZlY3Qgb24gaGFyZHdhcmUKKwkgKiBAY3R4ICAgICAgIDogY3RsIHBhdGggY3R4IHBvaW50 ZXIKKwkgKi8KKwl2b2lkICgqY2xlYXJfcGVuZGluZ19mbHVzaCkoc3RydWN0IGRwdV9od19jdGwg KmN0eCk7CisKKwkvKioKKwkgKiBRdWVyeSB0aGUgdmFsdWUgb2YgdGhlIGNhY2hlZCBwZW5kaW5n X2ZsdXNoX21hc2sKKwkgKiBObyBlZmZlY3Qgb24gaGFyZHdhcmUKKwkgKiBAY3R4ICAgICAgIDog Y3RsIHBhdGggY3R4IHBvaW50ZXIKKwkgKi8KKwl1MzIgKCpnZXRfcGVuZGluZ19mbHVzaCkoc3Ry dWN0IGRwdV9od19jdGwgKmN0eCk7CisKKwkvKioKKwkgKiBPUiBpbiB0aGUgZ2l2ZW4gZmx1c2hi aXRzIHRvIHRoZSBjYWNoZWQgcGVuZGluZ19mbHVzaF9tYXNrCisJICogTm8gZWZmZWN0IG9uIGhh cmR3YXJlCisJICogQGN0eCAgICAgICA6IGN0bCBwYXRoIGN0eCBwb2ludGVyCisJICogQGZsdXNo Yml0cyA6IG1vZHVsZSBmbHVzaG1hc2sKKwkgKi8KKwl2b2lkICgqdXBkYXRlX3BlbmRpbmdfZmx1 c2gpKHN0cnVjdCBkcHVfaHdfY3RsICpjdHgsCisJCXUzMiBmbHVzaGJpdHMpOworCisJLyoqCisJ ICogV3JpdGUgdGhlIHZhbHVlIG9mIHRoZSBwZW5kaW5nX2ZsdXNoX21hc2sgdG8gaGFyZHdhcmUK KwkgKiBAY3R4ICAgICAgIDogY3RsIHBhdGggY3R4IHBvaW50ZXIKKwkgKi8KKwl2b2lkICgqdHJp Z2dlcl9mbHVzaCkoc3RydWN0IGRwdV9od19jdGwgKmN0eCk7CisKKwkvKioKKwkgKiBSZWFkIHRo ZSB2YWx1ZSBvZiB0aGUgZmx1c2ggcmVnaXN0ZXIKKwkgKiBAY3R4ICAgICAgIDogY3RsIHBhdGgg Y3R4IHBvaW50ZXIKKwkgKiBAUmV0dXJuOiB2YWx1ZSBvZiB0aGUgY3RsIGZsdXNoIHJlZ2lzdGVy LgorCSAqLworCXUzMiAoKmdldF9mbHVzaF9yZWdpc3Rlcikoc3RydWN0IGRwdV9od19jdGwgKmN0 eCk7CisKKwkvKioKKwkgKiBTZXR1cCBjdGxfcGF0aCBpbnRlcmZhY2UgY29uZmlnCisJICogQGN0 eAorCSAqIEBjZmcgICAgOiBpbnRlcmZhY2UgY29uZmlnIHN0cnVjdHVyZSBwb2ludGVyCisJICov CisJdm9pZCAoKnNldHVwX2ludGZfY2ZnKShzdHJ1Y3QgZHB1X2h3X2N0bCAqY3R4LAorCQlzdHJ1 Y3QgZHB1X2h3X2ludGZfY2ZnICpjZmcpOworCisJaW50ICgqcmVzZXQpKHN0cnVjdCBkcHVfaHdf Y3RsICpjKTsKKworCS8qCisJICogd2FpdF9yZXNldF9zdGF0dXMgLSBjaGVja3MgY3RsIHJlc2V0 IHN0YXR1cworCSAqIEBjdHggICAgICAgOiBjdGwgcGF0aCBjdHggcG9pbnRlcgorCSAqCisJICog VGhpcyBmdW5jdGlvbiBjaGVja3MgdGhlIGN0bCByZXNldCBzdGF0dXMgYml0LgorCSAqIElmIHRo ZSByZXNldCBiaXQgaXMgc2V0LCBpdCBrZWVwcyBwb2xsaW5nIHRoZSBzdGF0dXMgdGlsbCB0aGUg aHcKKwkgKiByZXNldCBpcyBjb21wbGV0ZS4KKwkgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3Mgb3Ig LWVycm9yIGlmIHJlc2V0IGluY29tcGxldGUgd2l0aGluIGludGVydmFsCisJICovCisJaW50ICgq d2FpdF9yZXNldF9zdGF0dXMpKHN0cnVjdCBkcHVfaHdfY3RsICpjdHgpOworCisJdWludDMyX3Qg KCpnZXRfYml0bWFza19zc3BwKShzdHJ1Y3QgZHB1X2h3X2N0bCAqY3R4LAorCQllbnVtIGRwdV9z c3BwIGJsayk7CisKKwl1aW50MzJfdCAoKmdldF9iaXRtYXNrX21peGVyKShzdHJ1Y3QgZHB1X2h3 X2N0bCAqY3R4LAorCQllbnVtIGRwdV9sbSBibGspOworCisJaW50ICgqZ2V0X2JpdG1hc2tfaW50 Zikoc3RydWN0IGRwdV9od19jdGwgKmN0eCwKKwkJdTMyICpmbHVzaGJpdHMsCisJCWVudW0gZHB1 X2ludGYgYmxrKTsKKworCWludCAoKmdldF9iaXRtYXNrX2NkbSkoc3RydWN0IGRwdV9od19jdGwg KmN0eCwKKwkJdTMyICpmbHVzaGJpdHMsCisJCWVudW0gZHB1X2NkbSBibGspOworCisJLyoqCisJ ICogU2V0IGFsbCBibGVuZCBzdGFnZXMgdG8gZGlzYWJsZWQKKwkgKiBAY3R4ICAgICAgIDogY3Rs IHBhdGggY3R4IHBvaW50ZXIKKwkgKi8KKwl2b2lkICgqY2xlYXJfYWxsX2JsZW5kc3RhZ2VzKShz dHJ1Y3QgZHB1X2h3X2N0bCAqY3R4KTsKKworCS8qKgorCSAqIENvbmZpZ3VyZSBsYXllciBtaXhl ciB0byBwaXBlIGNvbmZpZ3VyYXRpb24KKwkgKiBAY3R4ICAgICAgIDogY3RsIHBhdGggY3R4IHBv aW50ZXIKKwkgKiBAbG0gICAgICAgIDogbGF5ZXIgbWl4ZXIgZW51bWVyYXRpb24KKwkgKiBAY2Zn ICAgICAgIDogYmxlbmQgc3RhZ2UgY29uZmlndXJhdGlvbgorCSAqLworCXZvaWQgKCpzZXR1cF9i bGVuZHN0YWdlKShzdHJ1Y3QgZHB1X2h3X2N0bCAqY3R4LAorCQllbnVtIGRwdV9sbSBsbSwgc3Ry dWN0IGRwdV9od19zdGFnZV9jZmcgKmNmZyk7Cit9OworCisvKioKKyAqIHN0cnVjdCBkcHVfaHdf Y3RsIDogQ1RMIFBBVEggZHJpdmVyIG9iamVjdAorICogQGJhc2U6IGhhcmR3YXJlIGJsb2NrIGJh c2Ugc3RydWN0dXJlCisgKiBAaHc6IGJsb2NrIHJlZ2lzdGVyIG1hcCBvYmplY3QKKyAqIEBpZHg6 IGNvbnRyb2wgcGF0aCBpbmRleAorICogQGNhcHM6IGNvbnRyb2wgcGF0aCBjYXBhYmlsaXRpZXMK KyAqIEBtaXhlcl9jb3VudDogbnVtYmVyIG9mIG1peGVycworICogQG1peGVyX2h3X2NhcHM6IG1p eGVyIGhhcmR3YXJlIGNhcGFiaWxpdGllcworICogQHBlbmRpbmdfZmx1c2hfbWFzazogc3RvcmFn ZSBmb3IgcGVuZGluZyBjdGxfZmx1c2ggbWFuYWdlZCB2aWEgb3BzCisgKiBAb3BzOiBvcGVyYXRp b24gbGlzdAorICovCitzdHJ1Y3QgZHB1X2h3X2N0bCB7CisJc3RydWN0IGRwdV9od19ibGsgYmFz ZTsKKwlzdHJ1Y3QgZHB1X2h3X2Jsa19yZWdfbWFwIGh3OworCisJLyogY3RsIHBhdGggKi8KKwlp bnQgaWR4OworCWNvbnN0IHN0cnVjdCBkcHVfY3RsX2NmZyAqY2FwczsKKwlpbnQgbWl4ZXJfY291 bnQ7CisJY29uc3Qgc3RydWN0IGRwdV9sbV9jZmcgKm1peGVyX2h3X2NhcHM7CisJdTMyIHBlbmRp bmdfZmx1c2hfbWFzazsKKworCS8qIG9wcyAqLworCXN0cnVjdCBkcHVfaHdfY3RsX29wcyBvcHM7 Cit9OworCisvKioKKyAqIGRwdV9od19jdGwgLSBjb252ZXJ0IGJhc2Ugb2JqZWN0IGRwdV9od19i YXNlIHRvIGNvbnRhaW5lcgorICogQGh3OiBQb2ludGVyIHRvIGJhc2UgaGFyZHdhcmUgYmxvY2sK KyAqIHJldHVybjogUG9pbnRlciB0byBoYXJkd2FyZSBibG9jayBjb250YWluZXIKKyAqLworc3Rh dGljIGlubGluZSBzdHJ1Y3QgZHB1X2h3X2N0bCAqdG9fZHB1X2h3X2N0bChzdHJ1Y3QgZHB1X2h3 X2JsayAqaHcpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihodywgc3RydWN0IGRwdV9od19jdGws IGJhc2UpOworfQorCisvKioKKyAqIGRwdV9od19jdGxfaW5pdCgpOiBJbml0aWFsaXplcyB0aGUg Y3RsX3BhdGggaHcgZHJpdmVyIG9iamVjdC4KKyAqIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIGFj Y2Vzc2luZyBldmVyeSBjdGwgcGF0aCByZWdpc3RlcnMuCisgKiBAaWR4OiAgY3RsX3BhdGggaW5k ZXggZm9yIHdoaWNoIGRyaXZlciBvYmplY3QgaXMgcmVxdWlyZWQKKyAqIEBhZGRyOiBtYXBwZWQg cmVnaXN0ZXIgaW8gYWRkcmVzcyBvZiBNRFAKKyAqIEBtIDogICBwb2ludGVyIHRvIG1kc3MgY2F0 YWxvZyBkYXRhCisgKi8KK3N0cnVjdCBkcHVfaHdfY3RsICpkcHVfaHdfY3RsX2luaXQoZW51bSBk cHVfY3RsIGlkeCwKKwkJdm9pZCBfX2lvbWVtICphZGRyLAorCQlzdHJ1Y3QgZHB1X21kc3NfY2Zn ICptKTsKKworLyoqCisgKiBkcHVfaHdfY3RsX2Rlc3Ryb3koKTogRGVzdHJveXMgY3RsIGRyaXZl ciBjb250ZXh0CisgKiBzaG91bGQgYmUgY2FsbGVkIHRvIGZyZWUgdGhlIGNvbnRleHQKKyAqLwor dm9pZCBkcHVfaHdfY3RsX2Rlc3Ryb3koc3RydWN0IGRwdV9od19jdGwgKmN0eCk7CisKKyNlbmRp ZiAvKl9EUFVfSFdfQ1RMX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9od19pbnRlcnJ1cHRzLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfaHdfaW50ZXJydXB0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwMC4uYTdiY2VkMmUwNWJmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X2h3X2ludGVycnVwdHMuYwpAQCAtMCwwICsxLDEyMTMgQEAKKy8qIENv cHlyaWdodCAoYykgMjAxNi0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCisgKiBvbmx5IHZlcnNp b24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisg KiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNp bmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlICJkcHVfa21zLmgiCisjaW5jbHVkZSAi ZHB1X2h3X2ludGVycnVwdHMuaCIKKyNpbmNsdWRlICJkcHVfaHdfdXRpbC5oIgorI2luY2x1ZGUg ImRwdV9od19tZHNzLmgiCisKKy8qKgorICogUmVnaXN0ZXIgb2Zmc2V0cyBpbiBNRFNTIHJlZ2lz dGVyIGZpbGUgZm9yIHRoZSBpbnRlcnJ1cHQgcmVnaXN0ZXJzCisgKiB3LnIudC4gdG8gdGhlIE1E UCBiYXNlCisgKi8KKyNkZWZpbmUgTURQX1NTUFBfVE9QMF9PRkYJCTB4MAorI2RlZmluZSBNRFBf SU5URl8wX09GRgkJCTB4NkEwMDAKKyNkZWZpbmUgTURQX0lOVEZfMV9PRkYJCQkweDZBODAwCisj ZGVmaW5lIE1EUF9JTlRGXzJfT0ZGCQkJMHg2QjAwMAorI2RlZmluZSBNRFBfSU5URl8zX09GRgkJ CTB4NkI4MDAKKyNkZWZpbmUgTURQX0lOVEZfNF9PRkYJCQkweDZDMDAwCisjZGVmaW5lIE1EUF9B RDRfMF9PRkYJCQkweDdDMDAwCisjZGVmaW5lIE1EUF9BRDRfMV9PRkYJCQkweDdEMDAwCisjZGVm aW5lIE1EUF9BRDRfSU5UUl9FTl9PRkYJCTB4NDFjCisjZGVmaW5lIE1EUF9BRDRfSU5UUl9DTEVB Ul9PRkYJCTB4NDI0CisjZGVmaW5lIE1EUF9BRDRfSU5UUl9TVEFUVVNfT0ZGCQkweDQyMAorCisv KioKKyAqIFdCIGludGVycnVwdCBzdGF0dXMgYml0IGRlZmluaXRpb25zCisgKi8KKyNkZWZpbmUg RFBVX0lOVFJfV0JfMF9ET05FIEJJVCgwKQorI2RlZmluZSBEUFVfSU5UUl9XQl8xX0RPTkUgQklU KDEpCisjZGVmaW5lIERQVV9JTlRSX1dCXzJfRE9ORSBCSVQoNCkKKworLyoqCisgKiBXRE9HIHRp bWVyIGludGVycnVwdCBzdGF0dXMgYml0IGRlZmluaXRpb25zCisgKi8KKyNkZWZpbmUgRFBVX0lO VFJfV0RfVElNRVJfMF9ET05FIEJJVCgyKQorI2RlZmluZSBEUFVfSU5UUl9XRF9USU1FUl8xX0RP TkUgQklUKDMpCisjZGVmaW5lIERQVV9JTlRSX1dEX1RJTUVSXzJfRE9ORSBCSVQoNSkKKyNkZWZp bmUgRFBVX0lOVFJfV0RfVElNRVJfM19ET05FIEJJVCg2KQorI2RlZmluZSBEUFVfSU5UUl9XRF9U SU1FUl80X0RPTkUgQklUKDcpCisKKy8qKgorICogUGluZ3BvbmcgaW50ZXJydXB0IHN0YXR1cyBi aXQgZGVmaW5pdGlvbnMKKyAqLworI2RlZmluZSBEUFVfSU5UUl9QSU5HX1BPTkdfMF9ET05FIEJJ VCg4KQorI2RlZmluZSBEUFVfSU5UUl9QSU5HX1BPTkdfMV9ET05FIEJJVCg5KQorI2RlZmluZSBE UFVfSU5UUl9QSU5HX1BPTkdfMl9ET05FIEJJVCgxMCkKKyNkZWZpbmUgRFBVX0lOVFJfUElOR19Q T05HXzNfRE9ORSBCSVQoMTEpCisjZGVmaW5lIERQVV9JTlRSX1BJTkdfUE9OR18wX1JEX1BUUiBC SVQoMTIpCisjZGVmaW5lIERQVV9JTlRSX1BJTkdfUE9OR18xX1JEX1BUUiBCSVQoMTMpCisjZGVm aW5lIERQVV9JTlRSX1BJTkdfUE9OR18yX1JEX1BUUiBCSVQoMTQpCisjZGVmaW5lIERQVV9JTlRS X1BJTkdfUE9OR18zX1JEX1BUUiBCSVQoMTUpCisjZGVmaW5lIERQVV9JTlRSX1BJTkdfUE9OR18w X1dSX1BUUiBCSVQoMTYpCisjZGVmaW5lIERQVV9JTlRSX1BJTkdfUE9OR18xX1dSX1BUUiBCSVQo MTcpCisjZGVmaW5lIERQVV9JTlRSX1BJTkdfUE9OR18yX1dSX1BUUiBCSVQoMTgpCisjZGVmaW5l IERQVV9JTlRSX1BJTkdfUE9OR18zX1dSX1BUUiBCSVQoMTkpCisjZGVmaW5lIERQVV9JTlRSX1BJ TkdfUE9OR18wX0FVVE9SRUZSRVNIX0RPTkUgQklUKDIwKQorI2RlZmluZSBEUFVfSU5UUl9QSU5H X1BPTkdfMV9BVVRPUkVGUkVTSF9ET05FIEJJVCgyMSkKKyNkZWZpbmUgRFBVX0lOVFJfUElOR19Q T05HXzJfQVVUT1JFRlJFU0hfRE9ORSBCSVQoMjIpCisjZGVmaW5lIERQVV9JTlRSX1BJTkdfUE9O R18zX0FVVE9SRUZSRVNIX0RPTkUgQklUKDIzKQorCisvKioKKyAqIEludGVyZmFjZSBpbnRlcnJ1 cHQgc3RhdHVzIGJpdCBkZWZpbml0aW9ucworICovCisjZGVmaW5lIERQVV9JTlRSX0lOVEZfMF9V TkRFUlJVTiBCSVQoMjQpCisjZGVmaW5lIERQVV9JTlRSX0lOVEZfMV9VTkRFUlJVTiBCSVQoMjYp CisjZGVmaW5lIERQVV9JTlRSX0lOVEZfMl9VTkRFUlJVTiBCSVQoMjgpCisjZGVmaW5lIERQVV9J TlRSX0lOVEZfM19VTkRFUlJVTiBCSVQoMzApCisjZGVmaW5lIERQVV9JTlRSX0lOVEZfMF9WU1lO QyBCSVQoMjUpCisjZGVmaW5lIERQVV9JTlRSX0lOVEZfMV9WU1lOQyBCSVQoMjcpCisjZGVmaW5l IERQVV9JTlRSX0lOVEZfMl9WU1lOQyBCSVQoMjkpCisjZGVmaW5lIERQVV9JTlRSX0lOVEZfM19W U1lOQyBCSVQoMzEpCisKKy8qKgorICogUGluZ3BvbmcgU2Vjb25kYXJ5IGludGVycnVwdCBzdGF0 dXMgYml0IGRlZmluaXRpb25zCisgKi8KKyNkZWZpbmUgRFBVX0lOVFJfUElOR19QT05HX1MwX0FV VE9SRUZSRVNIX0RPTkUgQklUKDApCisjZGVmaW5lIERQVV9JTlRSX1BJTkdfUE9OR19TMF9XUl9Q VFIgQklUKDQpCisjZGVmaW5lIERQVV9JTlRSX1BJTkdfUE9OR19TMF9SRF9QVFIgQklUKDgpCisj ZGVmaW5lIERQVV9JTlRSX1BJTkdfUE9OR19TMF9URUFSX0RFVEVDVEVEIEJJVCgyMikKKyNkZWZp bmUgRFBVX0lOVFJfUElOR19QT05HX1MwX1RFX0RFVEVDVEVEIEJJVCgyOCkKKworLyoqCisgKiBQ aW5ncG9uZyBURUFSIGRldGVjdGlvbiBpbnRlcnJ1cHQgc3RhdHVzIGJpdCBkZWZpbml0aW9ucwor ICovCisjZGVmaW5lIERQVV9JTlRSX1BJTkdfUE9OR18wX1RFQVJfREVURUNURUQgQklUKDE2KQor I2RlZmluZSBEUFVfSU5UUl9QSU5HX1BPTkdfMV9URUFSX0RFVEVDVEVEIEJJVCgxNykKKyNkZWZp bmUgRFBVX0lOVFJfUElOR19QT05HXzJfVEVBUl9ERVRFQ1RFRCBCSVQoMTgpCisjZGVmaW5lIERQ VV9JTlRSX1BJTkdfUE9OR18zX1RFQVJfREVURUNURUQgQklUKDE5KQorCisvKioKKyAqIFBpbmdw b25nIFRFIGRldGVjdGlvbiBpbnRlcnJ1cHQgc3RhdHVzIGJpdCBkZWZpbml0aW9ucworICovCisj ZGVmaW5lIERQVV9JTlRSX1BJTkdfUE9OR18wX1RFX0RFVEVDVEVEIEJJVCgyNCkKKyNkZWZpbmUg RFBVX0lOVFJfUElOR19QT05HXzFfVEVfREVURUNURUQgQklUKDI1KQorI2RlZmluZSBEUFVfSU5U Ul9QSU5HX1BPTkdfMl9URV9ERVRFQ1RFRCBCSVQoMjYpCisjZGVmaW5lIERQVV9JTlRSX1BJTkdf UE9OR18zX1RFX0RFVEVDVEVEIEJJVCgyNykKKworLyoqCisgKiBDdGwgc3RhcnQgaW50ZXJydXB0 IHN0YXR1cyBiaXQgZGVmaW5pdGlvbnMKKyAqLworI2RlZmluZSBEUFVfSU5UUl9DVExfMF9TVEFS VCBCSVQoOSkKKyNkZWZpbmUgRFBVX0lOVFJfQ1RMXzFfU1RBUlQgQklUKDEwKQorI2RlZmluZSBE UFVfSU5UUl9DVExfMl9TVEFSVCBCSVQoMTEpCisjZGVmaW5lIERQVV9JTlRSX0NUTF8zX1NUQVJU IEJJVCgxMikKKyNkZWZpbmUgRFBVX0lOVFJfQ1RMXzRfU1RBUlQgQklUKDEzKQorCisvKioKKyAq IENvbmN1cnJlbnQgV0Igb3ZlcmZsb3cgaW50ZXJydXB0IHN0YXR1cyBiaXQgZGVmaW5pdGlvbnMK KyAqLworI2RlZmluZSBEUFVfSU5UUl9DV0JfMl9PVkVSRkxPVyBCSVQoMTQpCisjZGVmaW5lIERQ VV9JTlRSX0NXQl8zX09WRVJGTE9XIEJJVCgxNSkKKworLyoqCisgKiBIaXN0b2dyYW0gVklHIGRv bmUgaW50ZXJydXB0IHN0YXR1cyBiaXQgZGVmaW5pdGlvbnMKKyAqLworI2RlZmluZSBEUFVfSU5U Ul9ISVNUX1ZJR18wX0RPTkUgQklUKDApCisjZGVmaW5lIERQVV9JTlRSX0hJU1RfVklHXzFfRE9O RSBCSVQoNCkKKyNkZWZpbmUgRFBVX0lOVFJfSElTVF9WSUdfMl9ET05FIEJJVCg4KQorI2RlZmlu ZSBEUFVfSU5UUl9ISVNUX1ZJR18zX0RPTkUgQklUKDEwKQorCisvKioKKyAqIEhpc3RvZ3JhbSBW SUcgcmVzZXQgU2VxdWVuY2UgZG9uZSBpbnRlcnJ1cHQgc3RhdHVzIGJpdCBkZWZpbml0aW9ucwor ICovCisjZGVmaW5lIERQVV9JTlRSX0hJU1RfVklHXzBfUlNUU0VRX0RPTkUgQklUKDEpCisjZGVm aW5lIERQVV9JTlRSX0hJU1RfVklHXzFfUlNUU0VRX0RPTkUgQklUKDUpCisjZGVmaW5lIERQVV9J TlRSX0hJU1RfVklHXzJfUlNUU0VRX0RPTkUgQklUKDkpCisjZGVmaW5lIERQVV9JTlRSX0hJU1Rf VklHXzNfUlNUU0VRX0RPTkUgQklUKDExKQorCisvKioKKyAqIEhpc3RvZ3JhbSBEU1BQIGRvbmUg aW50ZXJydXB0IHN0YXR1cyBiaXQgZGVmaW5pdGlvbnMKKyAqLworI2RlZmluZSBEUFVfSU5UUl9I SVNUX0RTUFBfMF9ET05FIEJJVCgxMikKKyNkZWZpbmUgRFBVX0lOVFJfSElTVF9EU1BQXzFfRE9O RSBCSVQoMTYpCisjZGVmaW5lIERQVV9JTlRSX0hJU1RfRFNQUF8yX0RPTkUgQklUKDIwKQorI2Rl ZmluZSBEUFVfSU5UUl9ISVNUX0RTUFBfM19ET05FIEJJVCgyMikKKworLyoqCisgKiBIaXN0b2dy YW0gRFNQUCByZXNldCBTZXF1ZW5jZSBkb25lIGludGVycnVwdCBzdGF0dXMgYml0IGRlZmluaXRp b25zCisgKi8KKyNkZWZpbmUgRFBVX0lOVFJfSElTVF9EU1BQXzBfUlNUU0VRX0RPTkUgQklUKDEz KQorI2RlZmluZSBEUFVfSU5UUl9ISVNUX0RTUFBfMV9SU1RTRVFfRE9ORSBCSVQoMTcpCisjZGVm aW5lIERQVV9JTlRSX0hJU1RfRFNQUF8yX1JTVFNFUV9ET05FIEJJVCgyMSkKKyNkZWZpbmUgRFBV X0lOVFJfSElTVF9EU1BQXzNfUlNUU0VRX0RPTkUgQklUKDIzKQorCisvKioKKyAqIElOVEYgaW50 ZXJydXB0IHN0YXR1cyBiaXQgZGVmaW5pdGlvbnMKKyAqLworI2RlZmluZSBEUFVfSU5UUl9WSURF T19JTlRPX1NUQVRJQyBCSVQoMCkKKyNkZWZpbmUgRFBVX0lOVFJfVklERU9fT1VUT0ZfU1RBVElD IEJJVCgxKQorI2RlZmluZSBEUFVfSU5UUl9EU0lDTURfMF9JTlRPX1NUQVRJQyBCSVQoMikKKyNk ZWZpbmUgRFBVX0lOVFJfRFNJQ01EXzBfT1VUT0ZfU1RBVElDIEJJVCgzKQorI2RlZmluZSBEUFVf SU5UUl9EU0lDTURfMV9JTlRPX1NUQVRJQyBCSVQoNCkKKyNkZWZpbmUgRFBVX0lOVFJfRFNJQ01E XzFfT1VUT0ZfU1RBVElDIEJJVCg1KQorI2RlZmluZSBEUFVfSU5UUl9EU0lDTURfMl9JTlRPX1NU QVRJQyBCSVQoNikKKyNkZWZpbmUgRFBVX0lOVFJfRFNJQ01EXzJfT1VUT0ZfU1RBVElDIEJJVCg3 KQorI2RlZmluZSBEUFVfSU5UUl9QUk9HX0xJTkUgQklUKDgpCisKKy8qKgorICogQUQ0IGludGVy cnVwdCBzdGF0dXMgYml0IGRlZmluaXRpb25zCisgKi8KKyNkZWZpbmUgRFBVX0lOVFJfQlJJR0hU UFJfVVBEQVRFRCBCSVQoNCkKKyNkZWZpbmUgRFBVX0lOVFJfREFSS0VOSF9VUERBVEVEIEJJVCgz KQorI2RlZmluZSBEUFVfSU5UUl9TVFJFTl9PVVRST0lfVVBEQVRFRCBCSVQoMikKKyNkZWZpbmUg RFBVX0lOVFJfU1RSRU5fSU5ST0lfVVBEQVRFRCBCSVQoMSkKKyNkZWZpbmUgRFBVX0lOVFJfQkFD S0xJR0hUX1VQREFURUQgQklUKDApCisvKioKKyAqIHN0cnVjdCBkcHVfaW50cl9yZWcgLSBhcnJh eSBvZiBEUFUgcmVnaXN0ZXIgc2V0cworICogQGNscl9vZmY6CW9mZnNldCB0byBDTEVBUiByZWcK KyAqIEBlbl9vZmY6CW9mZnNldCB0byBFTkFCTEUgcmVnCisgKiBAc3RhdHVzX29mZjoJb2Zmc2V0 IHRvIFNUQVRVUyByZWcKKyAqLworc3RydWN0IGRwdV9pbnRyX3JlZyB7CisJdTMyIGNscl9vZmY7 CisJdTMyIGVuX29mZjsKKwl1MzIgc3RhdHVzX29mZjsKK307CisKKy8qKgorICogc3RydWN0IGRw dV9pcnFfdHlwZSAtIG1hcHMgZWFjaCBpcnEgd2l0aCBpL2YKKyAqIEBpbnRyX3R5cGU6CQl0eXBl IG9mIGludGVycnVwdCBsaXN0ZWQgaW4gZHB1X2ludHJfdHlwZQorICogQGluc3RhbmNlX2lkeDoJ aW5zdGFuY2UgaW5kZXggb2YgdGhlIGFzc29jaWF0ZWQgSFcgYmxvY2sgaW4gRFBVCisgKiBAaXJx X21hc2s6CQljb3JyZXNwb25kaW5nIGJpdCBpbiB0aGUgaW50ZXJydXB0IHN0YXR1cyByZWcKKyAq IEByZWdfaWR4OgkJd2hpY2ggcmVnIHNldCB0byB1c2UKKyAqLworc3RydWN0IGRwdV9pcnFfdHlw ZSB7CisJdTMyIGludHJfdHlwZTsKKwl1MzIgaW5zdGFuY2VfaWR4OworCXUzMiBpcnFfbWFzazsK Kwl1MzIgcmVnX2lkeDsKK307CisKKy8qKgorICogTGlzdCBvZiBEUFUgaW50ZXJydXB0IHJlZ2lz dGVycworICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGRwdV9pbnRyX3JlZyBkcHVfaW50cl9zZXRb XSA9IHsKKwl7CisJCU1EUF9TU1BQX1RPUDBfT0ZGK0lOVFJfQ0xFQVIsCisJCU1EUF9TU1BQX1RP UDBfT0ZGK0lOVFJfRU4sCisJCU1EUF9TU1BQX1RPUDBfT0ZGK0lOVFJfU1RBVFVTCisJfSwKKwl7 CisJCU1EUF9TU1BQX1RPUDBfT0ZGK0lOVFIyX0NMRUFSLAorCQlNRFBfU1NQUF9UT1AwX09GRitJ TlRSMl9FTiwKKwkJTURQX1NTUFBfVE9QMF9PRkYrSU5UUjJfU1RBVFVTCisJfSwKKwl7CisJCU1E UF9TU1BQX1RPUDBfT0ZGK0hJU1RfSU5UUl9DTEVBUiwKKwkJTURQX1NTUFBfVE9QMF9PRkYrSElT VF9JTlRSX0VOLAorCQlNRFBfU1NQUF9UT1AwX09GRitISVNUX0lOVFJfU1RBVFVTCisJfSwKKwl7 CisJCU1EUF9JTlRGXzBfT0ZGK0lOVEZfSU5UUl9DTEVBUiwKKwkJTURQX0lOVEZfMF9PRkYrSU5U Rl9JTlRSX0VOLAorCQlNRFBfSU5URl8wX09GRitJTlRGX0lOVFJfU1RBVFVTCisJfSwKKwl7CisJ CU1EUF9JTlRGXzFfT0ZGK0lOVEZfSU5UUl9DTEVBUiwKKwkJTURQX0lOVEZfMV9PRkYrSU5URl9J TlRSX0VOLAorCQlNRFBfSU5URl8xX09GRitJTlRGX0lOVFJfU1RBVFVTCisJfSwKKwl7CisJCU1E UF9JTlRGXzJfT0ZGK0lOVEZfSU5UUl9DTEVBUiwKKwkJTURQX0lOVEZfMl9PRkYrSU5URl9JTlRS X0VOLAorCQlNRFBfSU5URl8yX09GRitJTlRGX0lOVFJfU1RBVFVTCisJfSwKKwl7CisJCU1EUF9J TlRGXzNfT0ZGK0lOVEZfSU5UUl9DTEVBUiwKKwkJTURQX0lOVEZfM19PRkYrSU5URl9JTlRSX0VO LAorCQlNRFBfSU5URl8zX09GRitJTlRGX0lOVFJfU1RBVFVTCisJfSwKKwl7CisJCU1EUF9JTlRG XzRfT0ZGK0lOVEZfSU5UUl9DTEVBUiwKKwkJTURQX0lOVEZfNF9PRkYrSU5URl9JTlRSX0VOLAor CQlNRFBfSU5URl80X09GRitJTlRGX0lOVFJfU1RBVFVTCisJfSwKKwl7CisJCU1EUF9BRDRfMF9P RkYgKyBNRFBfQUQ0X0lOVFJfQ0xFQVJfT0ZGLAorCQlNRFBfQUQ0XzBfT0ZGICsgTURQX0FENF9J TlRSX0VOX09GRiwKKwkJTURQX0FENF8wX09GRiArIE1EUF9BRDRfSU5UUl9TVEFUVVNfT0ZGLAor CX0sCisJeworCQlNRFBfQUQ0XzFfT0ZGICsgTURQX0FENF9JTlRSX0NMRUFSX09GRiwKKwkJTURQ X0FENF8xX09GRiArIE1EUF9BRDRfSU5UUl9FTl9PRkYsCisJCU1EUF9BRDRfMV9PRkYgKyBNRFBf QUQ0X0lOVFJfU1RBVFVTX09GRiwKKwl9Cit9OworCisvKioKKyAqIElSUSBtYXBwaW5nIHRhYmxl IC0gdXNlIGZvciBsb29rdXAgYW4gaXJxX2lkeCBpbiB0aGlzIHRhYmxlIHRoYXQgaGF2ZQorICog ICAgICAgICAgICAgICAgICAgICBhIG1hdGNoaW5nIGludGVyZmFjZSB0eXBlIGFuZCBpbnN0YW5j ZSBpbmRleC4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBkcHVfaXJxX3R5cGUgZHB1X2lycV9t YXBbXSA9IHsKKwkvKiBCRUdJTiBNQVBfUkFOR0U6IDAtMzEsIElOVFIgKi8KKwkvKiBpcnFfaWR4 OiAwLTMgKi8KKwl7IERQVV9JUlFfVFlQRV9XQl9ST1RfQ09NUCwgV0JfMCwgRFBVX0lOVFJfV0Jf MF9ET05FLCAwfSwKKwl7IERQVV9JUlFfVFlQRV9XQl9ST1RfQ09NUCwgV0JfMSwgRFBVX0lOVFJf V0JfMV9ET05FLCAwfSwKKwl7IERQVV9JUlFfVFlQRV9XRF9USU1FUiwgV0RfVElNRVJfMCwgRFBV X0lOVFJfV0RfVElNRVJfMF9ET05FLCAwfSwKKwl7IERQVV9JUlFfVFlQRV9XRF9USU1FUiwgV0Rf VElNRVJfMSwgRFBVX0lOVFJfV0RfVElNRVJfMV9ET05FLCAwfSwKKwkvKiBpcnFfaWR4OiA0LTcg Ki8KKwl7IERQVV9JUlFfVFlQRV9XQl9XRkRfQ09NUCwgV0JfMiwgRFBVX0lOVFJfV0JfMl9ET05F LCAwfSwKKwl7IERQVV9JUlFfVFlQRV9XRF9USU1FUiwgV0RfVElNRVJfMiwgRFBVX0lOVFJfV0Rf VElNRVJfMl9ET05FLCAwfSwKKwl7IERQVV9JUlFfVFlQRV9XRF9USU1FUiwgV0RfVElNRVJfMywg RFBVX0lOVFJfV0RfVElNRVJfM19ET05FLCAwfSwKKwl7IERQVV9JUlFfVFlQRV9XRF9USU1FUiwg V0RfVElNRVJfNCwgRFBVX0lOVFJfV0RfVElNRVJfNF9ET05FLCAwfSwKKwkvKiBpcnFfaWR4OiA4 LTExICovCisJeyBEUFVfSVJRX1RZUEVfUElOR19QT05HX0NPTVAsIFBJTkdQT05HXzAsCisJCURQ VV9JTlRSX1BJTkdfUE9OR18wX0RPTkUsIDB9LAorCXsgRFBVX0lSUV9UWVBFX1BJTkdfUE9OR19D T01QLCBQSU5HUE9OR18xLAorCQlEUFVfSU5UUl9QSU5HX1BPTkdfMV9ET05FLCAwfSwKKwl7IERQ VV9JUlFfVFlQRV9QSU5HX1BPTkdfQ09NUCwgUElOR1BPTkdfMiwKKwkJRFBVX0lOVFJfUElOR19Q T05HXzJfRE9ORSwgMH0sCisJeyBEUFVfSVJRX1RZUEVfUElOR19QT05HX0NPTVAsIFBJTkdQT05H XzMsCisJCURQVV9JTlRSX1BJTkdfUE9OR18zX0RPTkUsIDB9LAorCS8qIGlycV9pZHg6IDEyLTE1 ICovCisJeyBEUFVfSVJRX1RZUEVfUElOR19QT05HX1JEX1BUUiwgUElOR1BPTkdfMCwKKwkJRFBV X0lOVFJfUElOR19QT05HXzBfUkRfUFRSLCAwfSwKKwl7IERQVV9JUlFfVFlQRV9QSU5HX1BPTkdf UkRfUFRSLCBQSU5HUE9OR18xLAorCQlEUFVfSU5UUl9QSU5HX1BPTkdfMV9SRF9QVFIsIDB9LAor CXsgRFBVX0lSUV9UWVBFX1BJTkdfUE9OR19SRF9QVFIsIFBJTkdQT05HXzIsCisJCURQVV9JTlRS X1BJTkdfUE9OR18yX1JEX1BUUiwgMH0sCisJeyBEUFVfSVJRX1RZUEVfUElOR19QT05HX1JEX1BU UiwgUElOR1BPTkdfMywKKwkJRFBVX0lOVFJfUElOR19QT05HXzNfUkRfUFRSLCAwfSwKKwkvKiBp cnFfaWR4OiAxNi0xOSAqLworCXsgRFBVX0lSUV9UWVBFX1BJTkdfUE9OR19XUl9QVFIsIFBJTkdQ T05HXzAsCisJCURQVV9JTlRSX1BJTkdfUE9OR18wX1dSX1BUUiwgMH0sCisJeyBEUFVfSVJRX1RZ UEVfUElOR19QT05HX1dSX1BUUiwgUElOR1BPTkdfMSwKKwkJRFBVX0lOVFJfUElOR19QT05HXzFf V1JfUFRSLCAwfSwKKwl7IERQVV9JUlFfVFlQRV9QSU5HX1BPTkdfV1JfUFRSLCBQSU5HUE9OR18y LAorCQlEUFVfSU5UUl9QSU5HX1BPTkdfMl9XUl9QVFIsIDB9LAorCXsgRFBVX0lSUV9UWVBFX1BJ TkdfUE9OR19XUl9QVFIsIFBJTkdQT05HXzMsCisJCURQVV9JTlRSX1BJTkdfUE9OR18zX1dSX1BU UiwgMH0sCisJLyogaXJxX2lkeDogMjAtMjMgKi8KKwl7IERQVV9JUlFfVFlQRV9QSU5HX1BPTkdf QVVUT19SRUYsIFBJTkdQT05HXzAsCisJCURQVV9JTlRSX1BJTkdfUE9OR18wX0FVVE9SRUZSRVNI X0RPTkUsIDB9LAorCXsgRFBVX0lSUV9UWVBFX1BJTkdfUE9OR19BVVRPX1JFRiwgUElOR1BPTkdf MSwKKwkJRFBVX0lOVFJfUElOR19QT05HXzFfQVVUT1JFRlJFU0hfRE9ORSwgMH0sCisJeyBEUFVf SVJRX1RZUEVfUElOR19QT05HX0FVVE9fUkVGLCBQSU5HUE9OR18yLAorCQlEUFVfSU5UUl9QSU5H X1BPTkdfMl9BVVRPUkVGUkVTSF9ET05FLCAwfSwKKwl7IERQVV9JUlFfVFlQRV9QSU5HX1BPTkdf QVVUT19SRUYsIFBJTkdQT05HXzMsCisJCURQVV9JTlRSX1BJTkdfUE9OR18zX0FVVE9SRUZSRVNI X0RPTkUsIDB9LAorCS8qIGlycV9pZHg6IDI0LTI3ICovCisJeyBEUFVfSVJRX1RZUEVfSU5URl9V TkRFUl9SVU4sIElOVEZfMCwgRFBVX0lOVFJfSU5URl8wX1VOREVSUlVOLCAwfSwKKwl7IERQVV9J UlFfVFlQRV9JTlRGX1ZTWU5DLCBJTlRGXzAsIERQVV9JTlRSX0lOVEZfMF9WU1lOQywgMH0sCisJ eyBEUFVfSVJRX1RZUEVfSU5URl9VTkRFUl9SVU4sIElOVEZfMSwgRFBVX0lOVFJfSU5URl8xX1VO REVSUlVOLCAwfSwKKwl7IERQVV9JUlFfVFlQRV9JTlRGX1ZTWU5DLCBJTlRGXzEsIERQVV9JTlRS X0lOVEZfMV9WU1lOQywgMH0sCisJLyogaXJxX2lkeDogMjgtMzEgKi8KKwl7IERQVV9JUlFfVFlQ RV9JTlRGX1VOREVSX1JVTiwgSU5URl8yLCBEUFVfSU5UUl9JTlRGXzJfVU5ERVJSVU4sIDB9LAor CXsgRFBVX0lSUV9UWVBFX0lOVEZfVlNZTkMsIElOVEZfMiwgRFBVX0lOVFJfSU5URl8yX1ZTWU5D LCAwfSwKKwl7IERQVV9JUlFfVFlQRV9JTlRGX1VOREVSX1JVTiwgSU5URl8zLCBEUFVfSU5UUl9J TlRGXzNfVU5ERVJSVU4sIDB9LAorCXsgRFBVX0lSUV9UWVBFX0lOVEZfVlNZTkMsIElOVEZfMywg RFBVX0lOVFJfSU5URl8zX1ZTWU5DLCAwfSwKKworCS8qIEJFR0lOIE1BUF9SQU5HRTogMzItNjQs IElOVFIyICovCisJLyogaXJxX2lkeDogMzItMzUgKi8KKwl7IERQVV9JUlFfVFlQRV9QSU5HX1BP TkdfQVVUT19SRUYsIFBJTkdQT05HX1MwLAorCQlEUFVfSU5UUl9QSU5HX1BPTkdfUzBfQVVUT1JF RlJFU0hfRE9ORSwgMX0sCisJeyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQsIDAsIDAsIDF9LAorCXsg RFBVX0lSUV9UWVBFX1JFU0VSVkVELCAwLCAwLCAxfSwKKwl7IERQVV9JUlFfVFlQRV9SRVNFUlZF RCwgMCwgMCwgMX0sCisJLyogaXJxX2lkeDogMzYtMzkgKi8KKwl7IERQVV9JUlFfVFlQRV9QSU5H X1BPTkdfV1JfUFRSLCBQSU5HUE9OR19TMCwKKwkJRFBVX0lOVFJfUElOR19QT05HX1MwX1dSX1BU UiwgMX0sCisJeyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQsIDAsIDAsIDF9LAorCXsgRFBVX0lSUV9U WVBFX1JFU0VSVkVELCAwLCAwLCAxfSwKKwl7IERQVV9JUlFfVFlQRV9SRVNFUlZFRCwgMCwgMCwg MX0sCisJLyogaXJxX2lkeDogNDAgKi8KKwl7IERQVV9JUlFfVFlQRV9QSU5HX1BPTkdfUkRfUFRS LCBQSU5HUE9OR19TMCwKKwkJRFBVX0lOVFJfUElOR19QT05HX1MwX1JEX1BUUiwgMX0sCisJLyog aXJxX2lkeDogNDEtNDUgKi8KKwl7IERQVV9JUlFfVFlQRV9DVExfU1RBUlQsIENUTF8wLAorCQlE UFVfSU5UUl9DVExfMF9TVEFSVCwgMX0sCisJeyBEUFVfSVJRX1RZUEVfQ1RMX1NUQVJULCBDVExf MSwKKwkJRFBVX0lOVFJfQ1RMXzFfU1RBUlQsIDF9LAorCXsgRFBVX0lSUV9UWVBFX0NUTF9TVEFS VCwgQ1RMXzIsCisJCURQVV9JTlRSX0NUTF8yX1NUQVJULCAxfSwKKwl7IERQVV9JUlFfVFlQRV9D VExfU1RBUlQsIENUTF8zLAorCQlEUFVfSU5UUl9DVExfM19TVEFSVCwgMX0sCisJeyBEUFVfSVJR X1RZUEVfQ1RMX1NUQVJULCBDVExfNCwKKwkJRFBVX0lOVFJfQ1RMXzRfU1RBUlQsIDF9LAorCS8q IGlycV9pZHg6IDQ2LTQ3ICovCisJeyBEUFVfSVJRX1RZUEVfQ1dCX09WRVJGTE9XLCBDV0JfMiwg RFBVX0lOVFJfQ1dCXzJfT1ZFUkZMT1csIDF9LAorCXsgRFBVX0lSUV9UWVBFX0NXQl9PVkVSRkxP VywgQ1dCXzMsIERQVV9JTlRSX0NXQl8zX09WRVJGTE9XLCAxfSwKKwkvKiBpcnFfaWR4OiA0OC01 MSAqLworCXsgRFBVX0lSUV9UWVBFX1BJTkdfUE9OR19URUFSX0NIRUNLLCBQSU5HUE9OR18wLAor CQlEUFVfSU5UUl9QSU5HX1BPTkdfMF9URUFSX0RFVEVDVEVELCAxfSwKKwl7IERQVV9JUlFfVFlQ RV9QSU5HX1BPTkdfVEVBUl9DSEVDSywgUElOR1BPTkdfMSwKKwkJRFBVX0lOVFJfUElOR19QT05H XzFfVEVBUl9ERVRFQ1RFRCwgMX0sCisJeyBEUFVfSVJRX1RZUEVfUElOR19QT05HX1RFQVJfQ0hF Q0ssIFBJTkdQT05HXzIsCisJCURQVV9JTlRSX1BJTkdfUE9OR18yX1RFQVJfREVURUNURUQsIDF9 LAorCXsgRFBVX0lSUV9UWVBFX1BJTkdfUE9OR19URUFSX0NIRUNLLCBQSU5HUE9OR18zLAorCQlE UFVfSU5UUl9QSU5HX1BPTkdfM19URUFSX0RFVEVDVEVELCAxfSwKKwkvKiBpcnFfaWR4OiA1Mi01 NSAqLworCXsgRFBVX0lSUV9UWVBFX1JFU0VSVkVELCAwLCAwLCAxfSwKKwl7IERQVV9JUlFfVFlQ RV9SRVNFUlZFRCwgMCwgMCwgMX0sCisJeyBEUFVfSVJRX1RZUEVfUElOR19QT05HX1RFQVJfQ0hF Q0ssIFBJTkdQT05HX1MwLAorCQlEUFVfSU5UUl9QSU5HX1BPTkdfUzBfVEVBUl9ERVRFQ1RFRCwg MX0sCisJeyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQsIDAsIDAsIDF9LAorCS8qIGlycV9pZHg6IDU2 LTU5ICovCisJeyBEUFVfSVJRX1RZUEVfUElOR19QT05HX1RFX0NIRUNLLCBQSU5HUE9OR18wLAor CQlEUFVfSU5UUl9QSU5HX1BPTkdfMF9URV9ERVRFQ1RFRCwgMX0sCisJeyBEUFVfSVJRX1RZUEVf UElOR19QT05HX1RFX0NIRUNLLCBQSU5HUE9OR18xLAorCQlEUFVfSU5UUl9QSU5HX1BPTkdfMV9U RV9ERVRFQ1RFRCwgMX0sCisJeyBEUFVfSVJRX1RZUEVfUElOR19QT05HX1RFX0NIRUNLLCBQSU5H UE9OR18yLAorCQlEUFVfSU5UUl9QSU5HX1BPTkdfMl9URV9ERVRFQ1RFRCwgMX0sCisJeyBEUFVf SVJRX1RZUEVfUElOR19QT05HX1RFX0NIRUNLLCBQSU5HUE9OR18zLAorCQlEUFVfSU5UUl9QSU5H X1BPTkdfM19URV9ERVRFQ1RFRCwgMX0sCisJLyogaXJxX2lkeDogNjAtNjMgKi8KKwl7IERQVV9J UlFfVFlQRV9QSU5HX1BPTkdfVEVfQ0hFQ0ssIFBJTkdQT05HX1MwLAorCQlEUFVfSU5UUl9QSU5H X1BPTkdfUzBfVEVfREVURUNURUQsIDF9LAorCXsgRFBVX0lSUV9UWVBFX1JFU0VSVkVELCAwLCAw LCAxfSwKKwl7IERQVV9JUlFfVFlQRV9SRVNFUlZFRCwgMCwgMCwgMX0sCisJeyBEUFVfSVJRX1RZ UEVfUkVTRVJWRUQsIDAsIDAsIDF9LAorCisJLyogQkVHSU4gTUFQX1JBTkdFOiA2NC05NSBISVNU ICovCisJLyogaXJxX2lkeDogNjQtNjcgKi8KKwl7IERQVV9JUlFfVFlQRV9ISVNUX1ZJR19ET05F LCBTU1BQX1ZJRzAsIERQVV9JTlRSX0hJU1RfVklHXzBfRE9ORSwgMn0sCisJeyBEUFVfSVJRX1RZ UEVfSElTVF9WSUdfUlNUU0VRLCBTU1BQX1ZJRzAsCisJCURQVV9JTlRSX0hJU1RfVklHXzBfUlNU U0VRX0RPTkUsIDJ9LAorCXsgRFBVX0lSUV9UWVBFX1JFU0VSVkVELCAwLCAwLCAyfSwKKwl7IERQ VV9JUlFfVFlQRV9SRVNFUlZFRCwgMCwgMCwgMn0sCisJLyogaXJxX2lkeDogNjgtNzEgKi8KKwl7 IERQVV9JUlFfVFlQRV9ISVNUX1ZJR19ET05FLCBTU1BQX1ZJRzEsIERQVV9JTlRSX0hJU1RfVklH XzFfRE9ORSwgMn0sCisJeyBEUFVfSVJRX1RZUEVfSElTVF9WSUdfUlNUU0VRLCBTU1BQX1ZJRzEs CisJCURQVV9JTlRSX0hJU1RfVklHXzFfUlNUU0VRX0RPTkUsIDJ9LAorCXsgRFBVX0lSUV9UWVBF X1JFU0VSVkVELCAwLCAwLCAyfSwKKwl7IERQVV9JUlFfVFlQRV9SRVNFUlZFRCwgMCwgMCwgMn0s CisJLyogaXJxX2lkeDogNzItNzUgKi8KKwl7IERQVV9JUlFfVFlQRV9ISVNUX1ZJR19ET05FLCBT U1BQX1ZJRzIsIERQVV9JTlRSX0hJU1RfVklHXzJfRE9ORSwgMn0sCisJeyBEUFVfSVJRX1RZUEVf SElTVF9WSUdfUlNUU0VRLCBTU1BQX1ZJRzIsCisJCURQVV9JTlRSX0hJU1RfVklHXzJfUlNUU0VR X0RPTkUsIDJ9LAorCXsgRFBVX0lSUV9UWVBFX0hJU1RfVklHX0RPTkUsIFNTUFBfVklHMywgRFBV X0lOVFJfSElTVF9WSUdfM19ET05FLCAyfSwKKwl7IERQVV9JUlFfVFlQRV9ISVNUX1ZJR19SU1RT RVEsIFNTUFBfVklHMywKKwkJRFBVX0lOVFJfSElTVF9WSUdfM19SU1RTRVFfRE9ORSwgMn0sCisJ LyogaXJxX2lkeDogNzYtNzkgKi8KKwl7IERQVV9JUlFfVFlQRV9ISVNUX0RTUFBfRE9ORSwgRFNQ UF8wLCBEUFVfSU5UUl9ISVNUX0RTUFBfMF9ET05FLCAyfSwKKwl7IERQVV9JUlFfVFlQRV9ISVNU X0RTUFBfUlNUU0VRLCBEU1BQXzAsCisJCURQVV9JTlRSX0hJU1RfRFNQUF8wX1JTVFNFUV9ET05F LCAyfSwKKwl7IERQVV9JUlFfVFlQRV9SRVNFUlZFRCwgMCwgMCwgMn0sCisJeyBEUFVfSVJRX1RZ UEVfUkVTRVJWRUQsIDAsIDAsIDJ9LAorCS8qIGlycV9pZHg6IDgwLTgzICovCisJeyBEUFVfSVJR X1RZUEVfSElTVF9EU1BQX0RPTkUsIERTUFBfMSwgRFBVX0lOVFJfSElTVF9EU1BQXzFfRE9ORSwg Mn0sCisJeyBEUFVfSVJRX1RZUEVfSElTVF9EU1BQX1JTVFNFUSwgRFNQUF8xLAorCQlEUFVfSU5U Ul9ISVNUX0RTUFBfMV9SU1RTRVFfRE9ORSwgMn0sCisJeyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQs IDAsIDAsIDJ9LAorCXsgRFBVX0lSUV9UWVBFX1JFU0VSVkVELCAwLCAwLCAyfSwKKwkvKiBpcnFf aWR4OiA4NC04NyAqLworCXsgRFBVX0lSUV9UWVBFX0hJU1RfRFNQUF9ET05FLCBEU1BQXzIsIERQ VV9JTlRSX0hJU1RfRFNQUF8yX0RPTkUsIDJ9LAorCXsgRFBVX0lSUV9UWVBFX0hJU1RfRFNQUF9S U1RTRVEsIERTUFBfMiwKKwkJRFBVX0lOVFJfSElTVF9EU1BQXzJfUlNUU0VRX0RPTkUsIDJ9LAor CXsgRFBVX0lSUV9UWVBFX0hJU1RfRFNQUF9ET05FLCBEU1BQXzMsIERQVV9JTlRSX0hJU1RfRFNQ UF8zX0RPTkUsIDJ9LAorCXsgRFBVX0lSUV9UWVBFX0hJU1RfRFNQUF9SU1RTRVEsIERTUFBfMywK KwkJRFBVX0lOVFJfSElTVF9EU1BQXzNfUlNUU0VRX0RPTkUsIDJ9LAorCS8qIGlycV9pZHg6IDg4 LTkxICovCisJeyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQsIDAsIDAsIDJ9LAorCXsgRFBVX0lSUV9U WVBFX1JFU0VSVkVELCAwLCAwLCAyfSwKKwl7IERQVV9JUlFfVFlQRV9SRVNFUlZFRCwgMCwgMCwg Mn0sCisJeyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQsIDAsIDAsIDJ9LAorCS8qIGlycV9pZHg6IDky LTk1ICovCisJeyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQsIDAsIDAsIDJ9LAorCXsgRFBVX0lSUV9U WVBFX1JFU0VSVkVELCAwLCAwLCAyfSwKKwl7IERQVV9JUlFfVFlQRV9SRVNFUlZFRCwgMCwgMCwg Mn0sCisJeyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQsIDAsIDAsIDJ9LAorCisJLyogQkVHSU4gTUFQ X1JBTkdFOiA5Ni0xMjcgSU5URl8wX0lOVFIgKi8KKwkvKiBpcnFfaWR4OiA5Ni05OSAqLworCXsg RFBVX0lSUV9UWVBFX1NGSV9WSURFT19JTiwgSU5URl8wLAorCQlEUFVfSU5UUl9WSURFT19JTlRP X1NUQVRJQywgM30sCisJeyBEUFVfSVJRX1RZUEVfU0ZJX1ZJREVPX09VVCwgSU5URl8wLAorCQlE UFVfSU5UUl9WSURFT19PVVRPRl9TVEFUSUMsIDN9LAorCXsgRFBVX0lSUV9UWVBFX1NGSV9DTURf MF9JTiwgSU5URl8wLAorCQlEUFVfSU5UUl9EU0lDTURfMF9JTlRPX1NUQVRJQywgM30sCisJeyBE UFVfSVJRX1RZUEVfU0ZJX0NNRF8wX09VVCwgSU5URl8wLAorCQlEUFVfSU5UUl9EU0lDTURfMF9P VVRPRl9TVEFUSUMsIDN9LAorCS8qIGlycV9pZHg6IDEwMC0xMDMgKi8KKwl7IERQVV9JUlFfVFlQ RV9TRklfQ01EXzFfSU4sIElOVEZfMCwKKwkJRFBVX0lOVFJfRFNJQ01EXzFfSU5UT19TVEFUSUMs IDN9LAorCXsgRFBVX0lSUV9UWVBFX1NGSV9DTURfMV9PVVQsIElOVEZfMCwKKwkJRFBVX0lOVFJf RFNJQ01EXzFfT1VUT0ZfU1RBVElDLCAzfSwKKwl7IERQVV9JUlFfVFlQRV9TRklfQ01EXzJfSU4s IElOVEZfMCwKKwkJRFBVX0lOVFJfRFNJQ01EXzJfSU5UT19TVEFUSUMsIDN9LAorCXsgRFBVX0lS UV9UWVBFX1NGSV9DTURfMl9PVVQsIElOVEZfMCwKKwkJRFBVX0lOVFJfRFNJQ01EXzJfT1VUT0Zf U1RBVElDLCAzfSwKKwkvKiBpcnFfaWR4OiAxMDQtMTA3ICovCisJeyBEUFVfSVJRX1RZUEVfUFJP R19MSU5FLCBJTlRGXzAsIERQVV9JTlRSX1BST0dfTElORSwgM30sCisJeyBEUFVfSVJRX1RZUEVf UkVTRVJWRUQsIDAsIDAsIDN9LAorCXsgRFBVX0lSUV9UWVBFX1JFU0VSVkVELCAwLCAwLCAzfSwK Kwl7IERQVV9JUlFfVFlQRV9SRVNFUlZFRCwgMCwgMCwgM30sCisJLyogaXJxX2lkeDogMTA4LTEx MSAqLworCXsgRFBVX0lSUV9UWVBFX1JFU0VSVkVELCAwLCAwLCAzfSwKKwl7IERQVV9JUlFfVFlQ RV9SRVNFUlZFRCwgMCwgMCwgM30sCisJeyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQsIDAsIDAsIDN9 LAorCXsgRFBVX0lSUV9UWVBFX1JFU0VSVkVELCAwLCAwLCAzfSwKKwkvKiBpcnFfaWR4OiAxMTIt MTE1ICovCisJeyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQsIDAsIDAsIDN9LAorCXsgRFBVX0lSUV9U WVBFX1JFU0VSVkVELCAwLCAwLCAzfSwKKwl7IERQVV9JUlFfVFlQRV9SRVNFUlZFRCwgMCwgMCwg M30sCisJeyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQsIDAsIDAsIDN9LAorCS8qIGlycV9pZHg6IDEx Ni0xMTkgKi8KKwl7IERQVV9JUlFfVFlQRV9SRVNFUlZFRCwgMCwgMCwgM30sCisJeyBEUFVfSVJR X1RZUEVfUkVTRVJWRUQsIDAsIDAsIDN9LAorCXsgRFBVX0lSUV9UWVBFX1JFU0VSVkVELCAwLCAw LCAzfSwKKwl7IERQVV9JUlFfVFlQRV9SRVNFUlZFRCwgMCwgMCwgM30sCisJLyogaXJxX2lkeDog MTIwLTEyMyAqLworCXsgRFBVX0lSUV9UWVBFX1JFU0VSVkVELCAwLCAwLCAzfSwKKwl7IERQVV9J UlFfVFlQRV9SRVNFUlZFRCwgMCwgMCwgM30sCisJeyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQsIDAs IDAsIDN9LAorCXsgRFBVX0lSUV9UWVBFX1JFU0VSVkVELCAwLCAwLCAzfSwKKwkvKiBpcnFfaWR4 OiAxMjQtMTI3ICovCisJeyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQsIDAsIDAsIDN9LAorCXsgRFBV X0lSUV9UWVBFX1JFU0VSVkVELCAwLCAwLCAzfSwKKwl7IERQVV9JUlFfVFlQRV9SRVNFUlZFRCwg MCwgMCwgM30sCisJeyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQsIDAsIDAsIDN9LAorCisJLyogQkVH SU4gTUFQX1JBTkdFOiAxMjgtMTU5IElOVEZfMV9JTlRSICovCisJLyogaXJxX2lkeDogMTI4LTEz MSAqLworCXsgRFBVX0lSUV9UWVBFX1NGSV9WSURFT19JTiwgSU5URl8xLAorCQlEUFVfSU5UUl9W SURFT19JTlRPX1NUQVRJQywgNH0sCisJeyBEUFVfSVJRX1RZUEVfU0ZJX1ZJREVPX09VVCwgSU5U Rl8xLAorCQlEUFVfSU5UUl9WSURFT19PVVRPRl9TVEFUSUMsIDR9LAorCXsgRFBVX0lSUV9UWVBF X1NGSV9DTURfMF9JTiwgSU5URl8xLAorCQlEUFVfSU5UUl9EU0lDTURfMF9JTlRPX1NUQVRJQywg NH0sCisJeyBEUFVfSVJRX1RZUEVfU0ZJX0NNRF8wX09VVCwgSU5URl8xLAorCQlEUFVfSU5UUl9E U0lDTURfMF9PVVRPRl9TVEFUSUMsIDR9LAorCS8qIGlycV9pZHg6IDEzMi0xMzUgKi8KKwl7IERQ VV9JUlFfVFlQRV9TRklfQ01EXzFfSU4sIElOVEZfMSwKKwkJRFBVX0lOVFJfRFNJQ01EXzFfSU5U T19TVEFUSUMsIDR9LAorCXsgRFBVX0lSUV9UWVBFX1NGSV9DTURfMV9PVVQsIElOVEZfMSwKKwkJ RFBVX0lOVFJfRFNJQ01EXzFfT1VUT0ZfU1RBVElDLCA0fSwKKwl7IERQVV9JUlFfVFlQRV9TRklf Q01EXzJfSU4sIElOVEZfMSwKKwkJRFBVX0lOVFJfRFNJQ01EXzJfSU5UT19TVEFUSUMsIDR9LAor CXsgRFBVX0lSUV9UWVBFX1NGSV9DTURfMl9PVVQsIElOVEZfMSwKKwkJRFBVX0lOVFJfRFNJQ01E XzJfT1VUT0ZfU1RBVElDLCA0fSwKKwkvKiBpcnFfaWR4OiAxMzYtMTM5ICovCisJeyBEUFVfSVJR X1RZUEVfUFJPR19MSU5FLCBJTlRGXzEsIERQVV9JTlRSX1BST0dfTElORSwgNH0sCisJeyBEUFVf SVJRX1RZUEVfUkVTRVJWRUQsIDAsIDAsIDR9LAorCXsgRFBVX0lSUV9UWVBFX1JFU0VSVkVELCAw LCAwLCA0fSwKKwl7IERQVV9JUlFfVFlQRV9SRVNFUlZFRCwgMCwgMCwgNH0sCisJLyogaXJxX2lk eDogMTQwLTE0MyAqLworCXsgRFBVX0lSUV9UWVBFX1JFU0VSVkVELCAwLCAwLCA0fSwKKwl7IERQ VV9JUlFfVFlQRV9SRVNFUlZFRCwgMCwgMCwgNH0sCisJeyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQs IDAsIDAsIDR9LAorCXsgRFBVX0lSUV9UWVBFX1JFU0VSVkVELCAwLCAwLCA0fSwKKwkvKiBpcnFf aWR4OiAxNDQtMTQ3ICovCisJeyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQsIDAsIDAsIDR9LAorCXsg RFBVX0lSUV9UWVBFX1JFU0VSVkVELCAwLCAwLCA0fSwKKwl7IERQVV9JUlFfVFlQRV9SRVNFUlZF RCwgMCwgMCwgNH0sCisJeyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQsIDAsIDAsIDR9LAorCS8qIGly cV9pZHg6IDE0OC0xNTEgKi8KKwl7IERQVV9JUlFfVFlQRV9SRVNFUlZFRCwgMCwgMCwgNH0sCisJ eyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQsIDAsIDAsIDR9LAorCXsgRFBVX0lSUV9UWVBFX1JFU0VS VkVELCAwLCAwLCA0fSwKKwl7IERQVV9JUlFfVFlQRV9SRVNFUlZFRCwgMCwgMCwgNH0sCisJLyog aXJxX2lkeDogMTUyLTE1NSAqLworCXsgRFBVX0lSUV9UWVBFX1JFU0VSVkVELCAwLCAwLCA0fSwK Kwl7IERQVV9JUlFfVFlQRV9SRVNFUlZFRCwgMCwgMCwgNH0sCisJeyBEUFVfSVJRX1RZUEVfUkVT RVJWRUQsIDAsIDAsIDR9LAorCXsgRFBVX0lSUV9UWVBFX1JFU0VSVkVELCAwLCAwLCA0fSwKKwkv KiBpcnFfaWR4OiAxNTYtMTU5ICovCisJeyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQsIDAsIDAsIDR9 LAorCXsgRFBVX0lSUV9UWVBFX1JFU0VSVkVELCAwLCAwLCA0fSwKKwl7IERQVV9JUlFfVFlQRV9S RVNFUlZFRCwgMCwgMCwgNH0sCisJeyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQsIDAsIDAsIDR9LAor CisJLyogQkVHSU4gTUFQX1JBTkdFOiAxNjAtMTkxIElOVEZfMl9JTlRSICovCisJLyogaXJxX2lk eDogMTYwLTE2MyAqLworCXsgRFBVX0lSUV9UWVBFX1NGSV9WSURFT19JTiwgSU5URl8yLAorCQlE UFVfSU5UUl9WSURFT19JTlRPX1NUQVRJQywgNX0sCisJeyBEUFVfSVJRX1RZUEVfU0ZJX1ZJREVP X09VVCwgSU5URl8yLAorCQlEUFVfSU5UUl9WSURFT19PVVRPRl9TVEFUSUMsIDV9LAorCXsgRFBV X0lSUV9UWVBFX1NGSV9DTURfMF9JTiwgSU5URl8yLAorCQlEUFVfSU5UUl9EU0lDTURfMF9JTlRP X1NUQVRJQywgNX0sCisJeyBEUFVfSVJRX1RZUEVfU0ZJX0NNRF8wX09VVCwgSU5URl8yLAorCQlE UFVfSU5UUl9EU0lDTURfMF9PVVRPRl9TVEFUSUMsIDV9LAorCS8qIGlycV9pZHg6IDE2NC0xNjcg Ki8KKwl7IERQVV9JUlFfVFlQRV9TRklfQ01EXzFfSU4sIElOVEZfMiwKKwkJRFBVX0lOVFJfRFNJ Q01EXzFfSU5UT19TVEFUSUMsIDV9LAorCXsgRFBVX0lSUV9UWVBFX1NGSV9DTURfMV9PVVQsIElO VEZfMiwKKwkJRFBVX0lOVFJfRFNJQ01EXzFfT1VUT0ZfU1RBVElDLCA1fSwKKwl7IERQVV9JUlFf VFlQRV9TRklfQ01EXzJfSU4sIElOVEZfMiwKKwkJRFBVX0lOVFJfRFNJQ01EXzJfSU5UT19TVEFU SUMsIDV9LAorCXsgRFBVX0lSUV9UWVBFX1NGSV9DTURfMl9PVVQsIElOVEZfMiwKKwkJRFBVX0lO VFJfRFNJQ01EXzJfT1VUT0ZfU1RBVElDLCA1fSwKKwkvKiBpcnFfaWR4OiAxNjgtMTcxICovCisJ eyBEUFVfSVJRX1RZUEVfUFJPR19MSU5FLCBJTlRGXzIsIERQVV9JTlRSX1BST0dfTElORSwgNX0s CisJeyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQsIDAsIDAsIDV9LAorCXsgRFBVX0lSUV9UWVBFX1JF U0VSVkVELCAwLCAwLCA1fSwKKwl7IERQVV9JUlFfVFlQRV9SRVNFUlZFRCwgMCwgMCwgNX0sCisJ LyogaXJxX2lkeDogMTcyLTE3NSAqLworCXsgRFBVX0lSUV9UWVBFX1JFU0VSVkVELCAwLCAwLCA1 fSwKKwl7IERQVV9JUlFfVFlQRV9SRVNFUlZFRCwgMCwgMCwgNX0sCisJeyBEUFVfSVJRX1RZUEVf UkVTRVJWRUQsIDAsIDAsIDV9LAorCXsgRFBVX0lSUV9UWVBFX1JFU0VSVkVELCAwLCAwLCA1fSwK KwkvKiBpcnFfaWR4OiAxNzYtMTc5ICovCisJeyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQsIDAsIDAs IDV9LAorCXsgRFBVX0lSUV9UWVBFX1JFU0VSVkVELCAwLCAwLCA1fSwKKwl7IERQVV9JUlFfVFlQ RV9SRVNFUlZFRCwgMCwgMCwgNX0sCisJeyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQsIDAsIDAsIDV9 LAorCS8qIGlycV9pZHg6IDE4MC0xODMgKi8KKwl7IERQVV9JUlFfVFlQRV9SRVNFUlZFRCwgMCwg MCwgNX0sCisJeyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQsIDAsIDAsIDV9LAorCXsgRFBVX0lSUV9U WVBFX1JFU0VSVkVELCAwLCAwLCA1fSwKKwl7IERQVV9JUlFfVFlQRV9SRVNFUlZFRCwgMCwgMCwg NX0sCisJLyogaXJxX2lkeDogMTg0LTE4NyAqLworCXsgRFBVX0lSUV9UWVBFX1JFU0VSVkVELCAw LCAwLCA1fSwKKwl7IERQVV9JUlFfVFlQRV9SRVNFUlZFRCwgMCwgMCwgNX0sCisJeyBEUFVfSVJR X1RZUEVfUkVTRVJWRUQsIDAsIDAsIDV9LAorCXsgRFBVX0lSUV9UWVBFX1JFU0VSVkVELCAwLCAw LCA1fSwKKwkvKiBpcnFfaWR4OiAxODgtMTkxICovCisJeyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQs IDAsIDAsIDV9LAorCXsgRFBVX0lSUV9UWVBFX1JFU0VSVkVELCAwLCAwLCA1fSwKKwl7IERQVV9J UlFfVFlQRV9SRVNFUlZFRCwgMCwgMCwgNX0sCisJeyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQsIDAs IDAsIDV9LAorCisJLyogQkVHSU4gTUFQX1JBTkdFOiAxOTItMjIzIElOVEZfM19JTlRSICovCisJ LyogaXJxX2lkeDogMTkyLTE5NSAqLworCXsgRFBVX0lSUV9UWVBFX1NGSV9WSURFT19JTiwgSU5U Rl8zLAorCQlEUFVfSU5UUl9WSURFT19JTlRPX1NUQVRJQywgNn0sCisJeyBEUFVfSVJRX1RZUEVf U0ZJX1ZJREVPX09VVCwgSU5URl8zLAorCQlEUFVfSU5UUl9WSURFT19PVVRPRl9TVEFUSUMsIDZ9 LAorCXsgRFBVX0lSUV9UWVBFX1NGSV9DTURfMF9JTiwgSU5URl8zLAorCQlEUFVfSU5UUl9EU0lD TURfMF9JTlRPX1NUQVRJQywgNn0sCisJeyBEUFVfSVJRX1RZUEVfU0ZJX0NNRF8wX09VVCwgSU5U Rl8zLAorCQlEUFVfSU5UUl9EU0lDTURfMF9PVVRPRl9TVEFUSUMsIDZ9LAorCS8qIGlycV9pZHg6 IDE5Ni0xOTkgKi8KKwl7IERQVV9JUlFfVFlQRV9TRklfQ01EXzFfSU4sIElOVEZfMywKKwkJRFBV X0lOVFJfRFNJQ01EXzFfSU5UT19TVEFUSUMsIDZ9LAorCXsgRFBVX0lSUV9UWVBFX1NGSV9DTURf MV9PVVQsIElOVEZfMywKKwkJRFBVX0lOVFJfRFNJQ01EXzFfT1VUT0ZfU1RBVElDLCA2fSwKKwl7 IERQVV9JUlFfVFlQRV9TRklfQ01EXzJfSU4sIElOVEZfMywKKwkJRFBVX0lOVFJfRFNJQ01EXzJf SU5UT19TVEFUSUMsIDZ9LAorCXsgRFBVX0lSUV9UWVBFX1NGSV9DTURfMl9PVVQsIElOVEZfMywK KwkJRFBVX0lOVFJfRFNJQ01EXzJfT1VUT0ZfU1RBVElDLCA2fSwKKwkvKiBpcnFfaWR4OiAyMDAt MjAzICovCisJeyBEUFVfSVJRX1RZUEVfUFJPR19MSU5FLCBJTlRGXzMsIERQVV9JTlRSX1BST0df TElORSwgNn0sCisJeyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQsIDAsIDAsIDZ9LAorCXsgRFBVX0lS UV9UWVBFX1JFU0VSVkVELCAwLCAwLCA2fSwKKwl7IERQVV9JUlFfVFlQRV9SRVNFUlZFRCwgMCwg MCwgNn0sCisJLyogaXJxX2lkeDogMjA0LTIwNyAqLworCXsgRFBVX0lSUV9UWVBFX1JFU0VSVkVE LCAwLCAwLCA2fSwKKwl7IERQVV9JUlFfVFlQRV9SRVNFUlZFRCwgMCwgMCwgNn0sCisJeyBEUFVf SVJRX1RZUEVfUkVTRVJWRUQsIDAsIDAsIDZ9LAorCXsgRFBVX0lSUV9UWVBFX1JFU0VSVkVELCAw LCAwLCA2fSwKKwkvKiBpcnFfaWR4OiAyMDgtMjExICovCisJeyBEUFVfSVJRX1RZUEVfUkVTRVJW RUQsIDAsIDAsIDZ9LAorCXsgRFBVX0lSUV9UWVBFX1JFU0VSVkVELCAwLCAwLCA2fSwKKwl7IERQ VV9JUlFfVFlQRV9SRVNFUlZFRCwgMCwgMCwgNn0sCisJeyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQs IDAsIDAsIDZ9LAorCS8qIGlycV9pZHg6IDIxMi0yMTUgKi8KKwl7IERQVV9JUlFfVFlQRV9SRVNF UlZFRCwgMCwgMCwgNn0sCisJeyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQsIDAsIDAsIDZ9LAorCXsg RFBVX0lSUV9UWVBFX1JFU0VSVkVELCAwLCAwLCA2fSwKKwl7IERQVV9JUlFfVFlQRV9SRVNFUlZF RCwgMCwgMCwgNn0sCisJLyogaXJxX2lkeDogMjE2LTIxOSAqLworCXsgRFBVX0lSUV9UWVBFX1JF U0VSVkVELCAwLCAwLCA2fSwKKwl7IERQVV9JUlFfVFlQRV9SRVNFUlZFRCwgMCwgMCwgNn0sCisJ eyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQsIDAsIDAsIDZ9LAorCXsgRFBVX0lSUV9UWVBFX1JFU0VS VkVELCAwLCAwLCA2fSwKKwkvKiBpcnFfaWR4OiAyMjAtMjIzICovCisJeyBEUFVfSVJRX1RZUEVf UkVTRVJWRUQsIDAsIDAsIDZ9LAorCXsgRFBVX0lSUV9UWVBFX1JFU0VSVkVELCAwLCAwLCA2fSwK Kwl7IERQVV9JUlFfVFlQRV9SRVNFUlZFRCwgMCwgMCwgNn0sCisJeyBEUFVfSVJRX1RZUEVfUkVT RVJWRUQsIDAsIDAsIDZ9LAorCisJLyogQkVHSU4gTUFQX1JBTkdFOiAyMjQtMjU1IElOVEZfNF9J TlRSICovCisJLyogaXJxX2lkeDogMjI0LTIyNyAqLworCXsgRFBVX0lSUV9UWVBFX1NGSV9WSURF T19JTiwgSU5URl80LAorCQlEUFVfSU5UUl9WSURFT19JTlRPX1NUQVRJQywgN30sCisJeyBEUFVf SVJRX1RZUEVfU0ZJX1ZJREVPX09VVCwgSU5URl80LAorCQlEUFVfSU5UUl9WSURFT19PVVRPRl9T VEFUSUMsIDd9LAorCXsgRFBVX0lSUV9UWVBFX1NGSV9DTURfMF9JTiwgSU5URl80LAorCQlEUFVf SU5UUl9EU0lDTURfMF9JTlRPX1NUQVRJQywgN30sCisJeyBEUFVfSVJRX1RZUEVfU0ZJX0NNRF8w X09VVCwgSU5URl80LAorCQlEUFVfSU5UUl9EU0lDTURfMF9PVVRPRl9TVEFUSUMsIDd9LAorCS8q IGlycV9pZHg6IDIyOC0yMzEgKi8KKwl7IERQVV9JUlFfVFlQRV9TRklfQ01EXzFfSU4sIElOVEZf NCwKKwkJRFBVX0lOVFJfRFNJQ01EXzFfSU5UT19TVEFUSUMsIDd9LAorCXsgRFBVX0lSUV9UWVBF X1NGSV9DTURfMV9PVVQsIElOVEZfNCwKKwkJRFBVX0lOVFJfRFNJQ01EXzFfT1VUT0ZfU1RBVElD LCA3fSwKKwl7IERQVV9JUlFfVFlQRV9TRklfQ01EXzJfSU4sIElOVEZfNCwKKwkJRFBVX0lOVFJf RFNJQ01EXzJfSU5UT19TVEFUSUMsIDd9LAorCXsgRFBVX0lSUV9UWVBFX1NGSV9DTURfMl9PVVQs IElOVEZfNCwKKwkJRFBVX0lOVFJfRFNJQ01EXzJfT1VUT0ZfU1RBVElDLCA3fSwKKwkvKiBpcnFf aWR4OiAyMzItMjM1ICovCisJeyBEUFVfSVJRX1RZUEVfUFJPR19MSU5FLCBJTlRGXzQsIERQVV9J TlRSX1BST0dfTElORSwgN30sCisJeyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQsIDAsIDAsIDd9LAor CXsgRFBVX0lSUV9UWVBFX1JFU0VSVkVELCAwLCAwLCA3fSwKKwl7IERQVV9JUlFfVFlQRV9SRVNF UlZFRCwgMCwgMCwgN30sCisJLyogaXJxX2lkeDogMjM2LTIzOSAqLworCXsgRFBVX0lSUV9UWVBF X1JFU0VSVkVELCAwLCAwLCA3fSwKKwl7IERQVV9JUlFfVFlQRV9SRVNFUlZFRCwgMCwgMCwgN30s CisJeyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQsIDAsIDAsIDd9LAorCXsgRFBVX0lSUV9UWVBFX1JF U0VSVkVELCAwLCAwLCA3fSwKKwkvKiBpcnFfaWR4OiAyNDAtMjQzICovCisJeyBEUFVfSVJRX1RZ UEVfUkVTRVJWRUQsIDAsIDAsIDd9LAorCXsgRFBVX0lSUV9UWVBFX1JFU0VSVkVELCAwLCAwLCA3 fSwKKwl7IERQVV9JUlFfVFlQRV9SRVNFUlZFRCwgMCwgMCwgN30sCisJeyBEUFVfSVJRX1RZUEVf UkVTRVJWRUQsIDAsIDAsIDd9LAorCS8qIGlycV9pZHg6IDI0NC0yNDcgKi8KKwl7IERQVV9JUlFf VFlQRV9SRVNFUlZFRCwgMCwgMCwgN30sCisJeyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQsIDAsIDAs IDd9LAorCXsgRFBVX0lSUV9UWVBFX1JFU0VSVkVELCAwLCAwLCA3fSwKKwl7IERQVV9JUlFfVFlQ RV9SRVNFUlZFRCwgMCwgMCwgN30sCisJLyogaXJxX2lkeDogMjQ4LTI1MSAqLworCXsgRFBVX0lS UV9UWVBFX1JFU0VSVkVELCAwLCAwLCA3fSwKKwl7IERQVV9JUlFfVFlQRV9SRVNFUlZFRCwgMCwg MCwgN30sCisJeyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQsIDAsIDAsIDd9LAorCXsgRFBVX0lSUV9U WVBFX1JFU0VSVkVELCAwLCAwLCA3fSwKKwkvKiBpcnFfaWR4OiAyNTItMjU1ICovCisJeyBEUFVf SVJRX1RZUEVfUkVTRVJWRUQsIDAsIDAsIDd9LAorCXsgRFBVX0lSUV9UWVBFX1JFU0VSVkVELCAw LCAwLCA3fSwKKwl7IERQVV9JUlFfVFlQRV9SRVNFUlZFRCwgMCwgMCwgN30sCisJeyBEUFVfSVJR X1RZUEVfUkVTRVJWRUQsIDAsIDAsIDd9LAorCisJLyogQkVHSU4gTUFQX1JBTkdFOiAyNTYtMjg3 IEFENF8wX0lOVFIgKi8KKwkvKiBpcnFfaWR4OiAyNTYtMjU5ICovCisJeyBEUFVfSVJRX1RZUEVf QUQ0X0JMX0RPTkUsIERTUFBfMCwgRFBVX0lOVFJfQkFDS0xJR0hUX1VQREFURUQsIDh9LAorCXsg RFBVX0lSUV9UWVBFX1JFU0VSVkVELCAwLCAwLCA4fSwKKwl7IERQVV9JUlFfVFlQRV9SRVNFUlZF RCwgMCwgMCwgOH0sCisJeyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQsIDAsIDAsIDh9LAorCS8qIGly cV9pZHg6IDI2MC0yNjMgKi8KKwl7IERQVV9JUlFfVFlQRV9SRVNFUlZFRCwgMCwgMCwgOH0sCisJ eyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQsIDAsIDAsIDh9LAorCXsgRFBVX0lSUV9UWVBFX1JFU0VS VkVELCAwLCAwLCA4fSwKKwl7IERQVV9JUlFfVFlQRV9SRVNFUlZFRCwgMCwgMCwgOH0sCisJLyog aXJxX2lkeDogMjY0LTI2NyAqLworCXsgRFBVX0lSUV9UWVBFX1JFU0VSVkVELCAwLCAwLCA4fSwK Kwl7IERQVV9JUlFfVFlQRV9SRVNFUlZFRCwgMCwgMCwgOH0sCisJeyBEUFVfSVJRX1RZUEVfUkVT RVJWRUQsIDAsIDAsIDh9LAorCXsgRFBVX0lSUV9UWVBFX1JFU0VSVkVELCAwLCAwLCA4fSwKKwkv KiBpcnFfaWR4OiAyNjgtMjcxICovCisJeyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQsIDAsIDAsIDh9 LAorCXsgRFBVX0lSUV9UWVBFX1JFU0VSVkVELCAwLCAwLCA4fSwKKwl7IERQVV9JUlFfVFlQRV9S RVNFUlZFRCwgMCwgMCwgOH0sCisJeyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQsIDAsIDAsIDh9LAor CS8qIGlycV9pZHg6IDI3Mi0yNzUgKi8KKwl7IERQVV9JUlFfVFlQRV9SRVNFUlZFRCwgMCwgMCwg OH0sCisJeyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQsIDAsIDAsIDh9LAorCXsgRFBVX0lSUV9UWVBF X1JFU0VSVkVELCAwLCAwLCA4fSwKKwl7IERQVV9JUlFfVFlQRV9SRVNFUlZFRCwgMCwgMCwgOH0s CisJLyogaXJxX2lkeDogMjc2LTI3OSAqLworCXsgRFBVX0lSUV9UWVBFX1JFU0VSVkVELCAwLCAw LCA4fSwKKwl7IERQVV9JUlFfVFlQRV9SRVNFUlZFRCwgMCwgMCwgOH0sCisJeyBEUFVfSVJRX1RZ UEVfUkVTRVJWRUQsIDAsIDAsIDh9LAorCXsgRFBVX0lSUV9UWVBFX1JFU0VSVkVELCAwLCAwLCA4 fSwKKwkvKiBpcnFfaWR4OiAyODAtMjgzICovCisJeyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQsIDAs IDAsIDh9LAorCXsgRFBVX0lSUV9UWVBFX1JFU0VSVkVELCAwLCAwLCA4fSwKKwl7IERQVV9JUlFf VFlQRV9SRVNFUlZFRCwgMCwgMCwgOH0sCisJeyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQsIDAsIDAs IDh9LAorCS8qIGlycV9pZHg6IDI4NC0yODcgKi8KKwl7IERQVV9JUlFfVFlQRV9SRVNFUlZFRCwg MCwgMCwgOH0sCisJeyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQsIDAsIDAsIDh9LAorCXsgRFBVX0lS UV9UWVBFX1JFU0VSVkVELCAwLCAwLCA4fSwKKwl7IERQVV9JUlFfVFlQRV9SRVNFUlZFRCwgMCwg MCwgOH0sCisKKwkvKiBCRUdJTiBNQVBfUkFOR0U6IDI4OC0zMTkgQUQ0XzFfSU5UUiAqLworCS8q IGlycV9pZHg6IDI4OC0yOTEgKi8KKwl7IERQVV9JUlFfVFlQRV9BRDRfQkxfRE9ORSwgRFNQUF8x LCBEUFVfSU5UUl9CQUNLTElHSFRfVVBEQVRFRCwgOX0sCisJeyBEUFVfSVJRX1RZUEVfUkVTRVJW RUQsIDAsIDAsIDl9LAorCXsgRFBVX0lSUV9UWVBFX1JFU0VSVkVELCAwLCAwLCA5fSwKKwl7IERQ VV9JUlFfVFlQRV9SRVNFUlZFRCwgMCwgMCwgOX0sCisJLyogaXJxX2lkeDogMjkyLTI5NSAqLwor CXsgRFBVX0lSUV9UWVBFX1JFU0VSVkVELCAwLCAwLCA5fSwKKwl7IERQVV9JUlFfVFlQRV9SRVNF UlZFRCwgMCwgMCwgOX0sCisJeyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQsIDAsIDAsIDl9LAorCXsg RFBVX0lSUV9UWVBFX1JFU0VSVkVELCAwLCAwLCA5fSwKKwkvKiBpcnFfaWR4OiAyOTYtMjk5ICov CisJeyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQsIDAsIDAsIDl9LAorCXsgRFBVX0lSUV9UWVBFX1JF U0VSVkVELCAwLCAwLCA5fSwKKwl7IERQVV9JUlFfVFlQRV9SRVNFUlZFRCwgMCwgMCwgOX0sCisJ eyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQsIDAsIDAsIDl9LAorCS8qIGlycV9pZHg6IDMwMC0zMDMg Ki8KKwl7IERQVV9JUlFfVFlQRV9SRVNFUlZFRCwgMCwgMCwgOX0sCisJeyBEUFVfSVJRX1RZUEVf UkVTRVJWRUQsIDAsIDAsIDl9LAorCXsgRFBVX0lSUV9UWVBFX1JFU0VSVkVELCAwLCAwLCA5fSwK Kwl7IERQVV9JUlFfVFlQRV9SRVNFUlZFRCwgMCwgMCwgOX0sCisJLyogaXJxX2lkeDogMzA0LTMw NyAqLworCXsgRFBVX0lSUV9UWVBFX1JFU0VSVkVELCAwLCAwLCA5fSwKKwl7IERQVV9JUlFfVFlQ RV9SRVNFUlZFRCwgMCwgMCwgOX0sCisJeyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQsIDAsIDAsIDl9 LAorCXsgRFBVX0lSUV9UWVBFX1JFU0VSVkVELCAwLCAwLCA5fSwKKwkvKiBpcnFfaWR4OiAzMDgt MzExICovCisJeyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQsIDAsIDAsIDl9LAorCXsgRFBVX0lSUV9U WVBFX1JFU0VSVkVELCAwLCAwLCA5fSwKKwl7IERQVV9JUlFfVFlQRV9SRVNFUlZFRCwgMCwgMCwg OX0sCisJeyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQsIDAsIDAsIDl9LAorCS8qIGlycV9pZHg6IDMx Mi0zMTUgKi8KKwl7IERQVV9JUlFfVFlQRV9SRVNFUlZFRCwgMCwgMCwgOX0sCisJeyBEUFVfSVJR X1RZUEVfUkVTRVJWRUQsIDAsIDAsIDl9LAorCXsgRFBVX0lSUV9UWVBFX1JFU0VSVkVELCAwLCAw LCA5fSwKKwl7IERQVV9JUlFfVFlQRV9SRVNFUlZFRCwgMCwgMCwgOX0sCisJLyogaXJxX2lkeDog MzE1LTMxOSAqLworCXsgRFBVX0lSUV9UWVBFX1JFU0VSVkVELCAwLCAwLCA5fSwKKwl7IERQVV9J UlFfVFlQRV9SRVNFUlZFRCwgMCwgMCwgOX0sCisJeyBEUFVfSVJRX1RZUEVfUkVTRVJWRUQsIDAs IDAsIDl9LAorCXsgRFBVX0lSUV9UWVBFX1JFU0VSVkVELCAwLCAwLCA5fSwKK307CisKK3N0YXRp YyBpbnQgZHB1X2h3X2ludHJfaXJxaWR4X2xvb2t1cChlbnVtIGRwdV9pbnRyX3R5cGUgaW50cl90 eXBlLAorCQl1MzIgaW5zdGFuY2VfaWR4KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8 IEFSUkFZX1NJWkUoZHB1X2lycV9tYXApOyBpKyspIHsKKwkJaWYgKGludHJfdHlwZSA9PSBkcHVf aXJxX21hcFtpXS5pbnRyX3R5cGUgJiYKKwkJCWluc3RhbmNlX2lkeCA9PSBkcHVfaXJxX21hcFtp XS5pbnN0YW5jZV9pZHgpCisJCQlyZXR1cm4gaTsKKwl9CisKKwlwcl9kZWJ1ZygiSVJRIGxvb2t1 cCBmYWlsISEgaW50cl90eXBlPSVkLCBpbnN0YW5jZV9pZHg9JWRcbiIsCisJCQlpbnRyX3R5cGUs IGluc3RhbmNlX2lkeCk7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyB2b2lkIGRwdV9o d19pbnRyX3NldF9tYXNrKHN0cnVjdCBkcHVfaHdfaW50ciAqaW50ciwgdWludDMyX3QgcmVnX29m ZiwKKwkJdWludDMyX3QgbWFzaykKK3sKKwlpZiAoIWludHIpCisJCXJldHVybjsKKworCURQVV9S RUdfV1JJVEUoJmludHItPmh3LCByZWdfb2ZmLCBtYXNrKTsKKworCS8qIGVuc3VyZSByZWdpc3Rl ciB3cml0ZXMgZ28gdGhyb3VnaCAqLworCXdtYigpOworfQorCitzdGF0aWMgdm9pZCBkcHVfaHdf aW50cl9kaXNwYXRjaF9pcnEoc3RydWN0IGRwdV9od19pbnRyICppbnRyLAorCQl2b2lkICgqY2Jm dW5jKSh2b2lkICosIGludCksCisJCXZvaWQgKmFyZykKK3sKKwlpbnQgcmVnX2lkeDsKKwlpbnQg aXJxX2lkeDsKKwlpbnQgc3RhcnRfaWR4OworCWludCBlbmRfaWR4OworCXUzMiBpcnFfc3RhdHVz OworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCisJaWYgKCFpbnRyKQorCQlyZXR1cm47CisK KwkvKgorCSAqIFRoZSBkaXNwYXRjaGVyIHdpbGwgc2F2ZSB0aGUgSVJRIHN0YXR1cyBiZWZvcmUg Y2FsbGluZyBoZXJlLgorCSAqIE5vdyBuZWVkIHRvIGdvIHRocm91Z2ggZWFjaCBJUlEgc3RhdHVz IGFuZCBmaW5kIG1hdGNoaW5nCisJICogaXJxIGxvb2t1cCBpbmRleC4KKwkgKi8KKwlzcGluX2xv Y2tfaXJxc2F2ZSgmaW50ci0+aXJxX2xvY2ssIGlycV9mbGFncyk7CisJZm9yIChyZWdfaWR4ID0g MDsgcmVnX2lkeCA8IEFSUkFZX1NJWkUoZHB1X2ludHJfc2V0KTsgcmVnX2lkeCsrKSB7CisJCWly cV9zdGF0dXMgPSBpbnRyLT5zYXZlX2lycV9zdGF0dXNbcmVnX2lkeF07CisKKwkJLyoKKwkJICog RWFjaCBJbnRlcnJ1cHQgcmVnaXN0ZXIgaGFzIGEgcmFuZ2Ugb2YgMzIgaW5kZXhlcywgYW5kCisJ CSAqIHRoYXQgaXMgc3RhdGljIGZvciBkcHVfaXJxX21hcC4KKwkJICovCisJCXN0YXJ0X2lkeCA9 IHJlZ19pZHggKiAzMjsKKwkJZW5kX2lkeCA9IHN0YXJ0X2lkeCArIDMyOworCisJCWlmIChzdGFy dF9pZHggPj0gQVJSQVlfU0laRShkcHVfaXJxX21hcCkgfHwKKwkJCQllbmRfaWR4ID4gQVJSQVlf U0laRShkcHVfaXJxX21hcCkpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBTZWFyY2ggdGhy b3VnaCBtYXRjaGluZyBpbnRyIHN0YXR1cyBmcm9tIGlycSBtYXAuCisJCSAqIHN0YXJ0X2lkeCBh bmQgZW5kX2lkeCBkZWZpbmVkIHRoZSBzZWFyY2ggcmFuZ2UgaW4KKwkJICogdGhlIGRwdV9pcnFf bWFwLgorCQkgKi8KKwkJZm9yIChpcnFfaWR4ID0gc3RhcnRfaWR4OworCQkJCShpcnFfaWR4IDwg ZW5kX2lkeCkgJiYgaXJxX3N0YXR1czsKKwkJCQlpcnFfaWR4KyspCisJCQlpZiAoKGlycV9zdGF0 dXMgJiBkcHVfaXJxX21hcFtpcnFfaWR4XS5pcnFfbWFzaykgJiYKKwkJCQkoZHB1X2lycV9tYXBb aXJxX2lkeF0ucmVnX2lkeCA9PSByZWdfaWR4KSkgeworCQkJCS8qCisJCQkJICogT25jZSBhIG1h dGNoIG9uIGlycSBtYXNrLCBwZXJmb3JtIGEgY2FsbGJhY2sKKwkJCQkgKiB0byB0aGUgZ2l2ZW4g Y2JmdW5jLiBjYmZ1bmMgd2lsbCB0YWtlIGNhcmUKKwkJCQkgKiB0aGUgaW50ZXJydXB0IHN0YXR1 cyBjbGVhcmluZy4gSWYgY2JmdW5jIGlzCisJCQkJICogbm90IHByb3ZpZGVkLCB0aGVuIHRoZSBp bnRlcnJ1cHQgY2xlYXJpbmcKKwkJCQkgKiBpcyBoZXJlLgorCQkJCSAqLworCQkJCWlmIChjYmZ1 bmMpCisJCQkJCWNiZnVuYyhhcmcsIGlycV9pZHgpOworCQkJCWVsc2UKKwkJCQkJaW50ci0+b3Bz LmNsZWFyX2ludHJfc3RhdHVzX25vbG9jaygKKwkJCQkJCQlpbnRyLCBpcnFfaWR4KTsKKworCQkJ CS8qCisJCQkJICogV2hlbiBjYWxsYmFjayBmaW5pc2gsIGNsZWFyIHRoZSBpcnFfc3RhdHVzCisJ CQkJICogd2l0aCB0aGUgbWF0Y2hpbmcgbWFzay4gT25jZSBpcnFfc3RhdHVzCisJCQkJICogaXMg YWxsIGNsZWFyZWQsIHRoZSBzZWFyY2ggY2FuIGJlIHN0b3BwZWQuCisJCQkJICovCisJCQkJaXJx X3N0YXR1cyAmPSB+ZHB1X2lycV9tYXBbaXJxX2lkeF0uaXJxX21hc2s7CisJCQl9CisJfQorCXNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJmludHItPmlycV9sb2NrLCBpcnFfZmxhZ3MpOworfQorCitz dGF0aWMgaW50IGRwdV9od19pbnRyX2VuYWJsZV9pcnEoc3RydWN0IGRwdV9od19pbnRyICppbnRy LCBpbnQgaXJxX2lkeCkKK3sKKwlpbnQgcmVnX2lkeDsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFn czsKKwljb25zdCBzdHJ1Y3QgZHB1X2ludHJfcmVnICpyZWc7CisJY29uc3Qgc3RydWN0IGRwdV9p cnFfdHlwZSAqaXJxOworCWNvbnN0IGNoYXIgKmRiZ3N0ciA9IE5VTEw7CisJdWludDMyX3QgY2Fj aGVfaXJxX21hc2s7CisKKwlpZiAoIWludHIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGly cV9pZHggPCAwIHx8IGlycV9pZHggPj0gQVJSQVlfU0laRShkcHVfaXJxX21hcCkpIHsKKwkJcHJf ZXJyKCJpbnZhbGlkIElSUSBpbmRleDogWyVkXVxuIiwgaXJxX2lkeCk7CisJCXJldHVybiAtRUlO VkFMOworCX0KKworCWlycSA9ICZkcHVfaXJxX21hcFtpcnFfaWR4XTsKKwlyZWdfaWR4ID0gaXJx LT5yZWdfaWR4OworCXJlZyA9ICZkcHVfaW50cl9zZXRbcmVnX2lkeF07CisKKwlzcGluX2xvY2tf aXJxc2F2ZSgmaW50ci0+aXJxX2xvY2ssIGlycV9mbGFncyk7CisJY2FjaGVfaXJxX21hc2sgPSBp bnRyLT5jYWNoZV9pcnFfbWFza1tyZWdfaWR4XTsKKwlpZiAoY2FjaGVfaXJxX21hc2sgJiBpcnEt PmlycV9tYXNrKSB7CisJCWRiZ3N0ciA9ICJEUFUgSVJRIGFscmVhZHkgc2V0OiI7CisJfSBlbHNl IHsKKwkJZGJnc3RyID0gIkRQVSBJUlEgZW5hYmxlZDoiOworCisJCWNhY2hlX2lycV9tYXNrIHw9 IGlycS0+aXJxX21hc2s7CisJCS8qIENsZWFuaW5nIGFueSBwZW5kaW5nIGludGVycnVwdCAqLwor CQlEUFVfUkVHX1dSSVRFKCZpbnRyLT5odywgcmVnLT5jbHJfb2ZmLCBpcnEtPmlycV9tYXNrKTsK KwkJLyogRW5hYmxpbmcgaW50ZXJydXB0cyB3aXRoIHRoZSBuZXcgbWFzayAqLworCQlEUFVfUkVH X1dSSVRFKCZpbnRyLT5odywgcmVnLT5lbl9vZmYsIGNhY2hlX2lycV9tYXNrKTsKKworCQkvKiBl bnN1cmUgcmVnaXN0ZXIgd3JpdGUgZ29lcyB0aHJvdWdoICovCisJCXdtYigpOworCisJCWludHIt PmNhY2hlX2lycV9tYXNrW3JlZ19pZHhdID0gY2FjaGVfaXJxX21hc2s7CisJfQorCXNwaW5fdW5s b2NrX2lycXJlc3RvcmUoJmludHItPmlycV9sb2NrLCBpcnFfZmxhZ3MpOworCisJcHJfZGVidWco IiVzIE1BU0s6MHglLjh4LCBDQUNIRS1NQVNLOjB4JS44eFxuIiwgZGJnc3RyLAorCQkJaXJxLT5p cnFfbWFzaywgY2FjaGVfaXJxX21hc2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg ZHB1X2h3X2ludHJfZGlzYWJsZV9pcnFfbm9sb2NrKHN0cnVjdCBkcHVfaHdfaW50ciAqaW50ciwg aW50IGlycV9pZHgpCit7CisJaW50IHJlZ19pZHg7CisJY29uc3Qgc3RydWN0IGRwdV9pbnRyX3Jl ZyAqcmVnOworCWNvbnN0IHN0cnVjdCBkcHVfaXJxX3R5cGUgKmlycTsKKwljb25zdCBjaGFyICpk YmdzdHIgPSBOVUxMOworCXVpbnQzMl90IGNhY2hlX2lycV9tYXNrOworCisJaWYgKCFpbnRyKQor CQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChpcnFfaWR4IDwgMCB8fCBpcnFfaWR4ID49IEFSUkFZ X1NJWkUoZHB1X2lycV9tYXApKSB7CisJCXByX2VycigiaW52YWxpZCBJUlEgaW5kZXg6IFslZF1c biIsIGlycV9pZHgpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpcnEgPSAmZHB1X2lycV9t YXBbaXJxX2lkeF07CisJcmVnX2lkeCA9IGlycS0+cmVnX2lkeDsKKwlyZWcgPSAmZHB1X2ludHJf c2V0W3JlZ19pZHhdOworCisJY2FjaGVfaXJxX21hc2sgPSBpbnRyLT5jYWNoZV9pcnFfbWFza1ty ZWdfaWR4XTsKKwlpZiAoKGNhY2hlX2lycV9tYXNrICYgaXJxLT5pcnFfbWFzaykgPT0gMCkgewor CQlkYmdzdHIgPSAiRFBVIElSUSBpcyBhbHJlYWR5IGNsZWFyZWQ6IjsKKwl9IGVsc2UgeworCQlk YmdzdHIgPSAiRFBVIElSUSBtYXNrIGRpc2FibGU6IjsKKworCQljYWNoZV9pcnFfbWFzayAmPSB+ aXJxLT5pcnFfbWFzazsKKwkJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGJhc2VkIG9uIHRoZSBuZXcg bWFzayAqLworCQlEUFVfUkVHX1dSSVRFKCZpbnRyLT5odywgcmVnLT5lbl9vZmYsIGNhY2hlX2ly cV9tYXNrKTsKKwkJLyogQ2xlYW5pbmcgYW55IHBlbmRpbmcgaW50ZXJydXB0ICovCisJCURQVV9S RUdfV1JJVEUoJmludHItPmh3LCByZWctPmNscl9vZmYsIGlycS0+aXJxX21hc2spOworCisJCS8q IGVuc3VyZSByZWdpc3RlciB3cml0ZSBnb2VzIHRocm91Z2ggKi8KKwkJd21iKCk7CisKKwkJaW50 ci0+Y2FjaGVfaXJxX21hc2tbcmVnX2lkeF0gPSBjYWNoZV9pcnFfbWFzazsKKwl9CisKKwlwcl9k ZWJ1ZygiJXMgTUFTSzoweCUuOHgsIENBQ0hFLU1BU0s6MHglLjh4XG4iLCBkYmdzdHIsCisJCQlp cnEtPmlycV9tYXNrLCBjYWNoZV9pcnFfbWFzayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBkcHVfaHdfaW50cl9kaXNhYmxlX2lycShzdHJ1Y3QgZHB1X2h3X2ludHIgKmludHIsIGlu dCBpcnFfaWR4KQoreworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCisJaWYgKCFpbnRyKQor CQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChpcnFfaWR4IDwgMCB8fCBpcnFfaWR4ID49IEFSUkFZ X1NJWkUoZHB1X2lycV9tYXApKSB7CisJCXByX2VycigiaW52YWxpZCBJUlEgaW5kZXg6IFslZF1c biIsIGlycV9pZHgpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2 ZSgmaW50ci0+aXJxX2xvY2ssIGlycV9mbGFncyk7CisJZHB1X2h3X2ludHJfZGlzYWJsZV9pcnFf bm9sb2NrKGludHIsIGlycV9pZHgpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmludHItPmly cV9sb2NrLCBpcnFfZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHB1X2h3 X2ludHJfY2xlYXJfaXJxcyhzdHJ1Y3QgZHB1X2h3X2ludHIgKmludHIpCit7CisJaW50IGk7CisK KwlpZiAoIWludHIpCisJCXJldHVybiAtRUlOVkFMOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZ X1NJWkUoZHB1X2ludHJfc2V0KTsgaSsrKQorCQlEUFVfUkVHX1dSSVRFKCZpbnRyLT5odywgZHB1 X2ludHJfc2V0W2ldLmNscl9vZmYsIDB4ZmZmZmZmZmYpOworCisJLyogZW5zdXJlIHJlZ2lzdGVy IHdyaXRlcyBnbyB0aHJvdWdoICovCisJd21iKCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBkcHVfaHdfaW50cl9kaXNhYmxlX2lycXMoc3RydWN0IGRwdV9od19pbnRyICppbnRyKQor eworCWludCBpOworCisJaWYgKCFpbnRyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZvciAoaSA9 IDA7IGkgPCBBUlJBWV9TSVpFKGRwdV9pbnRyX3NldCk7IGkrKykKKwkJRFBVX1JFR19XUklURSgm aW50ci0+aHcsIGRwdV9pbnRyX3NldFtpXS5lbl9vZmYsIDB4MDAwMDAwMDApOworCisJLyogZW5z dXJlIHJlZ2lzdGVyIHdyaXRlcyBnbyB0aHJvdWdoICovCisJd21iKCk7CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludCBkcHVfaHdfaW50cl9nZXRfdmFsaWRfaW50ZXJydXB0cyhzdHJ1Y3Qg ZHB1X2h3X2ludHIgKmludHIsCisJCXVpbnQzMl90ICptYXNrKQoreworCWlmICghaW50ciB8fCAh bWFzaykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkqbWFzayA9IElSUV9TT1VSQ0VfTURQIHwgSVJR X1NPVVJDRV9EU0kwIHwgSVJRX1NPVVJDRV9EU0kxCisJCXwgSVJRX1NPVVJDRV9IRE1JIHwgSVJR X1NPVVJDRV9FRFA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZHB1X2h3X2ludHJf Z2V0X2ludGVycnVwdF9zdGF0dXNlcyhzdHJ1Y3QgZHB1X2h3X2ludHIgKmludHIpCit7CisJaW50 IGk7CisJdTMyIGVuYWJsZV9tYXNrOworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCisJaWYg KCFpbnRyKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW50ci0+aXJxX2xvY2ss IGlycV9mbGFncyk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZHB1X2ludHJfc2V0KTsg aSsrKSB7CisJCS8qIFJlYWQgaW50ZXJydXB0IHN0YXR1cyAqLworCQlpbnRyLT5zYXZlX2lycV9z dGF0dXNbaV0gPSBEUFVfUkVHX1JFQUQoJmludHItPmh3LAorCQkJCWRwdV9pbnRyX3NldFtpXS5z dGF0dXNfb2ZmKTsKKworCQkvKiBSZWFkIGVuYWJsZSBtYXNrICovCisJCWVuYWJsZV9tYXNrID0g RFBVX1JFR19SRUFEKCZpbnRyLT5odywgZHB1X2ludHJfc2V0W2ldLmVuX29mZik7CisKKwkJLyog YW5kIGNsZWFyIHRoZSBpbnRlcnJ1cHQgKi8KKwkJaWYgKGludHItPnNhdmVfaXJxX3N0YXR1c1tp XSkKKwkJCURQVV9SRUdfV1JJVEUoJmludHItPmh3LCBkcHVfaW50cl9zZXRbaV0uY2xyX29mZiwK KwkJCQkJaW50ci0+c2F2ZV9pcnFfc3RhdHVzW2ldKTsKKworCQkvKiBGaW5hbGx5IHVwZGF0ZSBJ UlEgc3RhdHVzIGJhc2VkIG9uIGVuYWJsZSBtYXNrICovCisJCWludHItPnNhdmVfaXJxX3N0YXR1 c1tpXSAmPSBlbmFibGVfbWFzazsKKwl9CisKKwkvKiBlbnN1cmUgcmVnaXN0ZXIgd3JpdGVzIGdv IHRocm91Z2ggKi8KKwl3bWIoKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmludHItPmly cV9sb2NrLCBpcnFfZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBkcHVfaHdfaW50cl9jbGVhcl9p bnRyX3N0YXR1c19ub2xvY2soc3RydWN0IGRwdV9od19pbnRyICppbnRyLAorCQlpbnQgaXJxX2lk eCkKK3sKKwlpbnQgcmVnX2lkeDsKKworCWlmICghaW50cikKKwkJcmV0dXJuOworCisJcmVnX2lk eCA9IGRwdV9pcnFfbWFwW2lycV9pZHhdLnJlZ19pZHg7CisJRFBVX1JFR19XUklURSgmaW50ci0+ aHcsIGRwdV9pbnRyX3NldFtyZWdfaWR4XS5jbHJfb2ZmLAorCQkJZHB1X2lycV9tYXBbaXJxX2lk eF0uaXJxX21hc2spOworCisJLyogZW5zdXJlIHJlZ2lzdGVyIHdyaXRlcyBnbyB0aHJvdWdoICov CisJd21iKCk7Cit9CisKK3N0YXRpYyB2b2lkIGRwdV9od19pbnRyX2NsZWFyX2ludGVycnVwdF9z dGF0dXMoc3RydWN0IGRwdV9od19pbnRyICppbnRyLAorCQlpbnQgaXJxX2lkeCkKK3sKKwl1bnNp Z25lZCBsb25nIGlycV9mbGFnczsKKworCWlmICghaW50cikKKwkJcmV0dXJuOworCisJc3Bpbl9s b2NrX2lycXNhdmUoJmludHItPmlycV9sb2NrLCBpcnFfZmxhZ3MpOworCWRwdV9od19pbnRyX2Ns ZWFyX2ludHJfc3RhdHVzX25vbG9jayhpbnRyLCBpcnFfaWR4KTsKKwlzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZpbnRyLT5pcnFfbG9jaywgaXJxX2ZsYWdzKTsKK30KKworc3RhdGljIHUzMiBkcHVf aHdfaW50cl9nZXRfaW50cl9zdGF0dXNfbm9sb2NrKHN0cnVjdCBkcHVfaHdfaW50ciAqaW50ciwK KwkJaW50IGlycV9pZHgsIGJvb2wgY2xlYXIpCit7CisJaW50IHJlZ19pZHg7CisJdTMyIGludHJf c3RhdHVzOworCisJaWYgKCFpbnRyKQorCQlyZXR1cm4gMDsKKworCWlmIChpcnFfaWR4ID49IEFS UkFZX1NJWkUoZHB1X2lycV9tYXApIHx8IGlycV9pZHggPCAwKSB7CisJCXByX2VycigiaW52YWxp ZCBJUlEgaW5kZXg6IFslZF1cbiIsIGlycV9pZHgpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZWdf aWR4ID0gZHB1X2lycV9tYXBbaXJxX2lkeF0ucmVnX2lkeDsKKwlpbnRyX3N0YXR1cyA9IERQVV9S RUdfUkVBRCgmaW50ci0+aHcsCisJCQlkcHVfaW50cl9zZXRbcmVnX2lkeF0uc3RhdHVzX29mZikg JgorCQkJCQlkcHVfaXJxX21hcFtpcnFfaWR4XS5pcnFfbWFzazsKKwlpZiAoaW50cl9zdGF0dXMg JiYgY2xlYXIpCisJCURQVV9SRUdfV1JJVEUoJmludHItPmh3LCBkcHVfaW50cl9zZXRbcmVnX2lk eF0uY2xyX29mZiwKKwkJCQlpbnRyX3N0YXR1cyk7CisKKwkvKiBlbnN1cmUgcmVnaXN0ZXIgd3Jp dGVzIGdvIHRocm91Z2ggKi8KKwl3bWIoKTsKKworCXJldHVybiBpbnRyX3N0YXR1czsKK30KKwor c3RhdGljIHUzMiBkcHVfaHdfaW50cl9nZXRfaW50ZXJydXB0X3N0YXR1cyhzdHJ1Y3QgZHB1X2h3 X2ludHIgKmludHIsCisJCWludCBpcnFfaWR4LCBib29sIGNsZWFyKQoreworCWludCByZWdfaWR4 OworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCXUzMiBpbnRyX3N0YXR1czsKKworCWlmICgh aW50cikKKwkJcmV0dXJuIDA7CisKKwlpZiAoaXJxX2lkeCA+PSBBUlJBWV9TSVpFKGRwdV9pcnFf bWFwKSB8fCBpcnFfaWR4IDwgMCkgeworCQlwcl9lcnIoImludmFsaWQgSVJRIGluZGV4OiBbJWRd XG4iLCBpcnFfaWR4KTsKKwkJcmV0dXJuIDA7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlu dHItPmlycV9sb2NrLCBpcnFfZmxhZ3MpOworCisJcmVnX2lkeCA9IGRwdV9pcnFfbWFwW2lycV9p ZHhdLnJlZ19pZHg7CisJaW50cl9zdGF0dXMgPSBEUFVfUkVHX1JFQUQoJmludHItPmh3LAorCQkJ ZHB1X2ludHJfc2V0W3JlZ19pZHhdLnN0YXR1c19vZmYpICYKKwkJCQkJZHB1X2lycV9tYXBbaXJx X2lkeF0uaXJxX21hc2s7CisJaWYgKGludHJfc3RhdHVzICYmIGNsZWFyKQorCQlEUFVfUkVHX1dS SVRFKCZpbnRyLT5odywgZHB1X2ludHJfc2V0W3JlZ19pZHhdLmNscl9vZmYsCisJCQkJaW50cl9z dGF0dXMpOworCisJLyogZW5zdXJlIHJlZ2lzdGVyIHdyaXRlcyBnbyB0aHJvdWdoICovCisJd21i KCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnRyLT5pcnFfbG9jaywgaXJxX2ZsYWdz KTsKKworCXJldHVybiBpbnRyX3N0YXR1czsKK30KKworc3RhdGljIHZvaWQgX19zZXR1cF9pbnRy X29wcyhzdHJ1Y3QgZHB1X2h3X2ludHJfb3BzICpvcHMpCit7CisJb3BzLT5zZXRfbWFzayA9IGRw dV9od19pbnRyX3NldF9tYXNrOworCW9wcy0+aXJxX2lkeF9sb29rdXAgPSBkcHVfaHdfaW50cl9p cnFpZHhfbG9va3VwOworCW9wcy0+ZW5hYmxlX2lycSA9IGRwdV9od19pbnRyX2VuYWJsZV9pcnE7 CisJb3BzLT5kaXNhYmxlX2lycSA9IGRwdV9od19pbnRyX2Rpc2FibGVfaXJxOworCW9wcy0+ZGlz YWJsZV9pcnFfbm9sb2NrID0gZHB1X2h3X2ludHJfZGlzYWJsZV9pcnFfbm9sb2NrOworCW9wcy0+ ZGlzcGF0Y2hfaXJxcyA9IGRwdV9od19pbnRyX2Rpc3BhdGNoX2lycTsKKwlvcHMtPmNsZWFyX2Fs bF9pcnFzID0gZHB1X2h3X2ludHJfY2xlYXJfaXJxczsKKwlvcHMtPmRpc2FibGVfYWxsX2lycXMg PSBkcHVfaHdfaW50cl9kaXNhYmxlX2lycXM7CisJb3BzLT5nZXRfdmFsaWRfaW50ZXJydXB0cyA9 IGRwdV9od19pbnRyX2dldF92YWxpZF9pbnRlcnJ1cHRzOworCW9wcy0+Z2V0X2ludGVycnVwdF9z dGF0dXNlcyA9IGRwdV9od19pbnRyX2dldF9pbnRlcnJ1cHRfc3RhdHVzZXM7CisJb3BzLT5jbGVh cl9pbnRlcnJ1cHRfc3RhdHVzID0gZHB1X2h3X2ludHJfY2xlYXJfaW50ZXJydXB0X3N0YXR1czsK KwlvcHMtPmNsZWFyX2ludHJfc3RhdHVzX25vbG9jayA9IGRwdV9od19pbnRyX2NsZWFyX2ludHJf c3RhdHVzX25vbG9jazsKKwlvcHMtPmdldF9pbnRlcnJ1cHRfc3RhdHVzID0gZHB1X2h3X2ludHJf Z2V0X2ludGVycnVwdF9zdGF0dXM7CisJb3BzLT5nZXRfaW50cl9zdGF0dXNfbm9sb2NrID0gZHB1 X2h3X2ludHJfZ2V0X2ludHJfc3RhdHVzX25vbG9jazsKK30KKworc3RhdGljIHZvaWQgX19pbnRy X29mZnNldChzdHJ1Y3QgZHB1X21kc3NfY2ZnICptLAorCQl2b2lkIF9faW9tZW0gKmFkZHIsIHN0 cnVjdCBkcHVfaHdfYmxrX3JlZ19tYXAgKmh3KQoreworCWh3LT5iYXNlX29mZiA9IGFkZHI7CisJ aHctPmJsa19vZmYgPSBtLT5tZHBbMF0uYmFzZTsKKwlody0+aHd2ZXJzaW9uID0gbS0+aHd2ZXJz aW9uOworfQorCitzdHJ1Y3QgZHB1X2h3X2ludHIgKmRwdV9od19pbnRyX2luaXQodm9pZCBfX2lv bWVtICphZGRyLAorCQlzdHJ1Y3QgZHB1X21kc3NfY2ZnICptKQoreworCXN0cnVjdCBkcHVfaHdf aW50ciAqaW50cjsKKworCWlmICghYWRkciB8fCAhbSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZB TCk7CisKKwlpbnRyID0ga3phbGxvYyhzaXplb2YoKmludHIpLCBHRlBfS0VSTkVMKTsKKwlpZiAo IWludHIpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJX19pbnRyX29mZnNldChtLCBh ZGRyLCAmaW50ci0+aHcpOworCV9fc2V0dXBfaW50cl9vcHMoJmludHItPm9wcyk7CisKKwlpbnRy LT5pcnFfaWR4X3RibF9zaXplID0gQVJSQVlfU0laRShkcHVfaXJxX21hcCk7CisKKwlpbnRyLT5j YWNoZV9pcnFfbWFzayA9IGtjYWxsb2MoQVJSQVlfU0laRShkcHVfaW50cl9zZXQpLCBzaXplb2Yo dTMyKSwKKwkJCUdGUF9LRVJORUwpOworCWlmIChpbnRyLT5jYWNoZV9pcnFfbWFzayA9PSBOVUxM KSB7CisJCWtmcmVlKGludHIpOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwl9CisKKwlp bnRyLT5zYXZlX2lycV9zdGF0dXMgPSBrY2FsbG9jKEFSUkFZX1NJWkUoZHB1X2ludHJfc2V0KSwg c2l6ZW9mKHUzMiksCisJCQlHRlBfS0VSTkVMKTsKKwlpZiAoaW50ci0+c2F2ZV9pcnFfc3RhdHVz ID09IE5VTEwpIHsKKwkJa2ZyZWUoaW50ci0+Y2FjaGVfaXJxX21hc2spOworCQlrZnJlZShpbnRy KTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJfQorCisJc3Bpbl9sb2NrX2luaXQoJmlu dHItPmlycV9sb2NrKTsKKworCXJldHVybiBpbnRyOworfQorCit2b2lkIGRwdV9od19pbnRyX2Rl c3Ryb3koc3RydWN0IGRwdV9od19pbnRyICppbnRyKQoreworCWlmIChpbnRyKSB7CisJCWtmcmVl KGludHItPmNhY2hlX2lycV9tYXNrKTsKKwkJa2ZyZWUoaW50ci0+c2F2ZV9pcnFfc3RhdHVzKTsK KwkJa2ZyZWUoaW50cik7CisJfQorfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvZHB1MS9kcHVfaHdfaW50ZXJydXB0cy5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2h3X2ludGVycnVwdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMDAuLmI1MmNkY2E3ODYwNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9kcHUxL2RwdV9od19pbnRlcnJ1cHRzLmgKQEAgLTAsMCArMSwyNzggQEAKKy8q IENvcHlyaWdodCAoYykgMjAxNi0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0 cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCisgKiBvbmx5IHZl cnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAq CisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0RQVV9IV19JTlRFUlJVUFRT X0gKKyNkZWZpbmUgX0RQVV9IV19JTlRFUlJVUFRTX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVz Lmg+CisKKyNpbmNsdWRlICJkcHVfaHdpby5oIgorI2luY2x1ZGUgImRwdV9od19jYXRhbG9nLmgi CisjaW5jbHVkZSAiZHB1X2h3X3V0aWwuaCIKKyNpbmNsdWRlICJkcHVfaHdfbWRzcy5oIgorCisj ZGVmaW5lIElSUV9TT1VSQ0VfTURQCQlCSVQoMCkKKyNkZWZpbmUgSVJRX1NPVVJDRV9EU0kwCQlC SVQoNCkKKyNkZWZpbmUgSVJRX1NPVVJDRV9EU0kxCQlCSVQoNSkKKyNkZWZpbmUgSVJRX1NPVVJD RV9IRE1JCQlCSVQoOCkKKyNkZWZpbmUgSVJRX1NPVVJDRV9FRFAJCUJJVCgxMikKKyNkZWZpbmUg SVJRX1NPVVJDRV9NSEwJCUJJVCgxNikKKworLyoqCisgKiBkcHVfaW50cl90eXBlIC0gSFcgSW50 ZXJydXB0IFR5cGUKKyAqIEBEUFVfSVJRX1RZUEVfV0JfUk9UX0NPTVA6CQlXQiByb3RhdG9yIGRv bmUKKyAqIEBEUFVfSVJRX1RZUEVfV0JfV0ZEX0NPTVA6CQlXQiBXRkQgZG9uZQorICogQERQVV9J UlFfVFlQRV9QSU5HX1BPTkdfQ09NUDoJUGluZ1BvbmcgZG9uZQorICogQERQVV9JUlFfVFlQRV9Q SU5HX1BPTkdfUkRfUFRSOglQaW5nUG9uZyByZWFkIHBvaW50ZXIKKyAqIEBEUFVfSVJRX1RZUEVf UElOR19QT05HX1dSX1BUUjoJUGluZ1Bvbmcgd3JpdGUgcG9pbnRlcgorICogQERQVV9JUlFfVFlQ RV9QSU5HX1BPTkdfQVVUT19SRUY6CVBpbmdQb25nIGF1dG8gcmVmcmVzaAorICogQERQVV9JUlFf VFlQRV9QSU5HX1BPTkdfVEVBUl9DSEVDSzoJUGluZ1BvbmcgVGVhciBjaGVjaworICogQERQVV9J UlFfVFlQRV9QSU5HX1BPTkdfVEVfQ0hFQ0s6CVBpbmdQb25nIFRFIGRldGVjdGlvbgorICogQERQ VV9JUlFfVFlQRV9JTlRGX1VOREVSX1JVTjoJSU5URiB1bmRlcnJ1bgorICogQERQVV9JUlFfVFlQ RV9JTlRGX1ZTWU5DOgkJSU5URiBWU1lOQworICogQERQVV9JUlFfVFlQRV9DV0JfT1ZFUkZMT1c6 CQlDb25jdXJyZW50IFdCIG92ZXJmbG93CisgKiBARFBVX0lSUV9UWVBFX0hJU1RfVklHX0RPTkU6 CQlWSUcgSGlzdG9ncmFtIGRvbmUKKyAqIEBEUFVfSVJRX1RZUEVfSElTVF9WSUdfUlNUU0VROglW SUcgSGlzdG9ncmFtIHJlc2V0CisgKiBARFBVX0lSUV9UWVBFX0hJU1RfRFNQUF9ET05FOglEU1BQ IEhpc3RvZ3JhbSBkb25lCisgKiBARFBVX0lSUV9UWVBFX0hJU1RfRFNQUF9SU1RTRVE6CURTUFAg SGlzdG9ncmFtIHJlc2V0CisgKiBARFBVX0lSUV9UWVBFX1dEX1RJTUVSOgkJV2F0Y2hkb2cgdGlt ZXIKKyAqIEBEUFVfSVJRX1RZUEVfU0ZJX1ZJREVPX0lOOgkJVmlkZW8gc3RhdGljIGZyYW1lIElO VFIgaW50byBzdGF0aWMKKyAqIEBEUFVfSVJRX1RZUEVfU0ZJX1ZJREVPX09VVDoJCVZpZGVvIHN0 YXRpYyBmcmFtZSBJTlRSIG91dC1vZiBzdGF0aWMKKyAqIEBEUFVfSVJRX1RZUEVfU0ZJX0NNRF8w X0lOOgkJRFNJIENNRDAgc3RhdGljIGZyYW1lIElOVFIgaW50byBzdGF0aWMKKyAqIEBEUFVfSVJR X1RZUEVfU0ZJX0NNRF8wX09VVDoJCURTSSBDTUQwIHN0YXRpYyBmcmFtZSBJTlRSIG91dC1vZiBz dGF0aWMKKyAqIEBEUFVfSVJRX1RZUEVfU0ZJX0NNRF8xX0lOOgkJRFNJIENNRDEgc3RhdGljIGZy YW1lIElOVFIgaW50byBzdGF0aWMKKyAqIEBEUFVfSVJRX1RZUEVfU0ZJX0NNRF8xX09VVDoJCURT SSBDTUQxIHN0YXRpYyBmcmFtZSBJTlRSIG91dC1vZiBzdGF0aWMKKyAqIEBEUFVfSVJRX1RZUEVf U0ZJX0NNRF8yX0lOOgkJRFNJIENNRDIgc3RhdGljIGZyYW1lIElOVFIgaW50byBzdGF0aWMKKyAq IEBEUFVfSVJRX1RZUEVfU0ZJX0NNRF8yX09VVDoJCURTSSBDTUQyIHN0YXRpYyBmcmFtZSBJTlRS IG91dC1vZiBzdGF0aWMKKyAqIEBEUFVfSVJRX1RZUEVfUFJPR19MSU5FOgkJUHJvZ3JhbW1hYmxl IExpbmUgaW50ZXJydXB0CisgKiBARFBVX0lSUV9UWVBFX0FENF9CTF9ET05FOgkJQUQ0IGJhY2ts aWdodAorICogQERQVV9JUlFfVFlQRV9DVExfU1RBUlQ6CQlDb250cm9sIHN0YXJ0CisgKiBARFBV X0lSUV9UWVBFX1JFU0VSVkVEOgkJUmVzZXJ2ZWQgZm9yIGV4cGFuc2lvbgorICovCitlbnVtIGRw dV9pbnRyX3R5cGUgeworCURQVV9JUlFfVFlQRV9XQl9ST1RfQ09NUCwKKwlEUFVfSVJRX1RZUEVf V0JfV0ZEX0NPTVAsCisJRFBVX0lSUV9UWVBFX1BJTkdfUE9OR19DT01QLAorCURQVV9JUlFfVFlQ RV9QSU5HX1BPTkdfUkRfUFRSLAorCURQVV9JUlFfVFlQRV9QSU5HX1BPTkdfV1JfUFRSLAorCURQ VV9JUlFfVFlQRV9QSU5HX1BPTkdfQVVUT19SRUYsCisJRFBVX0lSUV9UWVBFX1BJTkdfUE9OR19U RUFSX0NIRUNLLAorCURQVV9JUlFfVFlQRV9QSU5HX1BPTkdfVEVfQ0hFQ0ssCisJRFBVX0lSUV9U WVBFX0lOVEZfVU5ERVJfUlVOLAorCURQVV9JUlFfVFlQRV9JTlRGX1ZTWU5DLAorCURQVV9JUlFf VFlQRV9DV0JfT1ZFUkZMT1csCisJRFBVX0lSUV9UWVBFX0hJU1RfVklHX0RPTkUsCisJRFBVX0lS UV9UWVBFX0hJU1RfVklHX1JTVFNFUSwKKwlEUFVfSVJRX1RZUEVfSElTVF9EU1BQX0RPTkUsCisJ RFBVX0lSUV9UWVBFX0hJU1RfRFNQUF9SU1RTRVEsCisJRFBVX0lSUV9UWVBFX1dEX1RJTUVSLAor CURQVV9JUlFfVFlQRV9TRklfVklERU9fSU4sCisJRFBVX0lSUV9UWVBFX1NGSV9WSURFT19PVVQs CisJRFBVX0lSUV9UWVBFX1NGSV9DTURfMF9JTiwKKwlEUFVfSVJRX1RZUEVfU0ZJX0NNRF8wX09V VCwKKwlEUFVfSVJRX1RZUEVfU0ZJX0NNRF8xX0lOLAorCURQVV9JUlFfVFlQRV9TRklfQ01EXzFf T1VULAorCURQVV9JUlFfVFlQRV9TRklfQ01EXzJfSU4sCisJRFBVX0lSUV9UWVBFX1NGSV9DTURf Ml9PVVQsCisJRFBVX0lSUV9UWVBFX1BST0dfTElORSwKKwlEUFVfSVJRX1RZUEVfQUQ0X0JMX0RP TkUsCisJRFBVX0lSUV9UWVBFX0NUTF9TVEFSVCwKKwlEUFVfSVJRX1RZUEVfUkVTRVJWRUQsCit9 OworCitzdHJ1Y3QgZHB1X2h3X2ludHI7CisKKy8qKgorICogSW50ZXJydXB0IG9wZXJhdGlvbnMu CisgKi8KK3N0cnVjdCBkcHVfaHdfaW50cl9vcHMgeworCS8qKgorCSAqIHNldF9tYXNrIC0gUHJv Z3JhbXMgdGhlIGdpdmVuIGludGVycnVwdCByZWdpc3RlciB3aXRoIHRoZQorCSAqICAgICAgICAg ICAgZ2l2ZW4gaW50ZXJydXB0IG1hc2suIFJlZ2lzdGVyIHZhbHVlIHdpbGwgZ2V0IG92ZXJ3cml0 dGVuLgorCSAqIEBpbnRyOglIVyBpbnRlcnJ1cHQgaGFuZGxlCisJICogQHJlZ19vZmY6CU1EU1Mg SFcgcmVnaXN0ZXIgb2Zmc2V0CisJICogQGlycW1hc2s6CUlSUSBtYXNrIHZhbHVlCisJICovCisJ dm9pZCAoKnNldF9tYXNrKSgKKwkJCXN0cnVjdCBkcHVfaHdfaW50ciAqaW50ciwKKwkJCXVpbnQz Ml90IHJlZywKKwkJCXVpbnQzMl90IGlycW1hc2spOworCisJLyoqCisJICogaXJxX2lkeF9sb29r dXAgLSBMb29rdXAgSVJRIGluZGV4IG9uIHRoZSBIVyBpbnRlcnJ1cHQgdHlwZQorCSAqICAgICAg ICAgICAgICAgICBVc2VkIGZvciBhbGwgaXJxIHJlbGF0ZWQgb3BzCisJICogQGludHJfdHlwZToJ CUludGVycnVwdCB0eXBlIGRlZmluZWQgaW4gZHB1X2ludHJfdHlwZQorCSAqIEBpbnN0YW5jZV9p ZHg6CUhXIGludGVycnVwdCBibG9jayBpbnN0YW5jZQorCSAqIEByZXR1cm46CQlpcnFfaWR4IG9y IC1FSU5WQUwgZm9yIGxvb2t1cCBmYWlsCisJICovCisJaW50ICgqaXJxX2lkeF9sb29rdXApKAor CQkJZW51bSBkcHVfaW50cl90eXBlIGludHJfdHlwZSwKKwkJCXUzMiBpbnN0YW5jZV9pZHgpOwor CisJLyoqCisJICogZW5hYmxlX2lycSAtIEVuYWJsZSBJUlEgYmFzZWQgb24gbG9va3VwIElSUSBp bmRleAorCSAqIEBpbnRyOglIVyBpbnRlcnJ1cHQgaGFuZGxlCisJICogQGlycV9pZHg6CUxvb2t1 cCBpcnEgaW5kZXggcmV0dXJuIGZyb20gaXJxX2lkeF9sb29rdXAKKwkgKiBAcmV0dXJuOgkwIGZv ciBzdWNjZXNzLCBvdGhlcndpc2UgZmFpbHVyZQorCSAqLworCWludCAoKmVuYWJsZV9pcnEpKAor CQkJc3RydWN0IGRwdV9od19pbnRyICppbnRyLAorCQkJaW50IGlycV9pZHgpOworCisJLyoqCisJ ICogZGlzYWJsZV9pcnEgLSBEaXNhYmxlIElSUSBiYXNlZCBvbiBsb29rdXAgSVJRIGluZGV4CisJ ICogQGludHI6CUhXIGludGVycnVwdCBoYW5kbGUKKwkgKiBAaXJxX2lkeDoJTG9va3VwIGlycSBp bmRleCByZXR1cm4gZnJvbSBpcnFfaWR4X2xvb2t1cAorCSAqIEByZXR1cm46CTAgZm9yIHN1Y2Nl c3MsIG90aGVyd2lzZSBmYWlsdXJlCisJICovCisJaW50ICgqZGlzYWJsZV9pcnEpKAorCQkJc3Ry dWN0IGRwdV9od19pbnRyICppbnRyLAorCQkJaW50IGlycV9pZHgpOworCisJLyoqCisJICogZGlz YWJsZV9pcnFfbm9sb2NrIC0gRGlzYWJsZSBJUlEgYmFzZWQgb24gSVJRIGluZGV4IHdpdGhvdXQg bG9jaworCSAqIEBpbnRyOglIVyBpbnRlcnJ1cHQgaGFuZGxlCisJICogQGlycV9pZHg6CUxvb2t1 cCBpcnEgaW5kZXggcmV0dXJuIGZyb20gaXJxX2lkeF9sb29rdXAKKwkgKiBAcmV0dXJuOgkwIGZv ciBzdWNjZXNzLCBvdGhlcndpc2UgZmFpbHVyZQorCSAqLworCWludCAoKmRpc2FibGVfaXJxX25v bG9jaykoCisJCQlzdHJ1Y3QgZHB1X2h3X2ludHIgKmludHIsCisJCQlpbnQgaXJxX2lkeCk7CisK KwkvKioKKwkgKiBjbGVhcl9hbGxfaXJxcyAtIENsZWFycyBhbGwgdGhlIGludGVycnVwdHMgKGku ZS4gYWNrbm93bGVkZ2VzCisJICogICAgICAgICAgICAgICAgICBhbnkgYXNzZXJ0ZWQgSVJRcyku IFVzZWZ1bCBkdXJpbmcgcmVzZXQuCisJICogQGludHI6CUhXIGludGVycnVwdCBoYW5kbGUKKwkg KiBAcmV0dXJuOgkwIGZvciBzdWNjZXNzLCBvdGhlcndpc2UgZmFpbHVyZQorCSAqLworCWludCAo KmNsZWFyX2FsbF9pcnFzKSgKKwkJCXN0cnVjdCBkcHVfaHdfaW50ciAqaW50cik7CisKKwkvKioK KwkgKiBkaXNhYmxlX2FsbF9pcnFzIC0gRGlzYWJsZXMgYWxsIHRoZSBpbnRlcnJ1cHRzLiBVc2Vm dWwgZHVyaW5nIHJlc2V0LgorCSAqIEBpbnRyOglIVyBpbnRlcnJ1cHQgaGFuZGxlCisJICogQHJl dHVybjoJMCBmb3Igc3VjY2Vzcywgb3RoZXJ3aXNlIGZhaWx1cmUKKwkgKi8KKwlpbnQgKCpkaXNh YmxlX2FsbF9pcnFzKSgKKwkJCXN0cnVjdCBkcHVfaHdfaW50ciAqaW50cik7CisKKwkvKioKKwkg KiBkaXNwYXRjaF9pcnFzIC0gSVJRIGRpc3BhdGNoZXIgd2lsbCBjYWxsIHRoZSBnaXZlbiBjYWxs YmFjaworCSAqICAgICAgICAgICAgICAgICBmdW5jdGlvbiB3aGVuIGEgbWF0Y2hpbmcgaW50ZXJy dXB0IHN0YXR1cyBiaXQgaXMKKwkgKiAgICAgICAgICAgICAgICAgZm91bmQgaW4gdGhlIGlycSBt YXBwaW5nIHRhYmxlLgorCSAqIEBpbnRyOglIVyBpbnRlcnJ1cHQgaGFuZGxlCisJICogQGNiZnVu YzoJQ2FsbGJhY2sgZnVuY3Rpb24gcG9pbnRlcgorCSAqIEBhcmc6CUFyZ3VtZW50IHRvIHBhc3Mg YmFjayBkdXJpbmcgY2FsbGJhY2sKKwkgKi8KKwl2b2lkICgqZGlzcGF0Y2hfaXJxcykoCisJCQlz dHJ1Y3QgZHB1X2h3X2ludHIgKmludHIsCisJCQl2b2lkICgqY2JmdW5jKSh2b2lkICphcmcsIGlu dCBpcnFfaWR4KSwKKwkJCXZvaWQgKmFyZyk7CisKKwkvKioKKwkgKiBnZXRfaW50ZXJydXB0X3N0 YXR1c2VzIC0gR2V0cyBhbmQgc3RvcmUgdmFsdWUgZnJvbSBhbGwgaW50ZXJydXB0CisJICogICAg ICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyByZWdpc3RlcnMgdGhhdCBhcmUgY3VycmVudGx5 IGZpcmVkLgorCSAqIEBpbnRyOglIVyBpbnRlcnJ1cHQgaGFuZGxlCisJICovCisJdm9pZCAoKmdl dF9pbnRlcnJ1cHRfc3RhdHVzZXMpKAorCQkJc3RydWN0IGRwdV9od19pbnRyICppbnRyKTsKKwor CS8qKgorCSAqIGNsZWFyX2ludGVycnVwdF9zdGF0dXMgLSBDbGVhcnMgSFcgaW50ZXJydXB0IHN0 YXR1cyBiYXNlZCBvbiBnaXZlbgorCSAqICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rdXAg SVJRIGluZGV4LgorCSAqIEBpbnRyOglIVyBpbnRlcnJ1cHQgaGFuZGxlCisJICogQGlycV9pZHg6 CUxvb2t1cCBpcnEgaW5kZXggcmV0dXJuIGZyb20gaXJxX2lkeF9sb29rdXAKKwkgKi8KKwl2b2lk ICgqY2xlYXJfaW50ZXJydXB0X3N0YXR1cykoCisJCQlzdHJ1Y3QgZHB1X2h3X2ludHIgKmludHIs CisJCQlpbnQgaXJxX2lkeCk7CisKKwkvKioKKwkgKiBjbGVhcl9pbnRyX3N0YXR1c19ub2xvY2so KSAtIGNsZWFycyB0aGUgSFcgaW50ZXJydXB0cyB3aXRob3V0IGxvY2sKKwkgKiBAaW50cjoJSFcg aW50ZXJydXB0IGhhbmRsZQorCSAqIEBpcnFfaWR4OglMb29rdXAgaXJxIGluZGV4IHJldHVybiBm cm9tIGlycV9pZHhfbG9va3VwCisJICovCisJdm9pZCAoKmNsZWFyX2ludHJfc3RhdHVzX25vbG9j aykoCisJCQlzdHJ1Y3QgZHB1X2h3X2ludHIgKmludHIsCisJCQlpbnQgaXJxX2lkeCk7CisKKwkv KioKKwkgKiBnZXRfaW50ZXJydXB0X3N0YXR1cyAtIEdldHMgSFcgaW50ZXJydXB0IHN0YXR1cywg YW5kIGNsZWFyIGlmIHNldCwKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIGdp dmVuIGxvb2t1cCBJUlEgaW5kZXguCisJICogQGludHI6CUhXIGludGVycnVwdCBoYW5kbGUKKwkg KiBAaXJxX2lkeDoJTG9va3VwIGlycSBpbmRleCByZXR1cm4gZnJvbSBpcnFfaWR4X2xvb2t1cAor CSAqIEBjbGVhcjoJVHJ1ZSB0byBjbGVhciBpcnEgYWZ0ZXIgcmVhZAorCSAqLworCXUzMiAoKmdl dF9pbnRlcnJ1cHRfc3RhdHVzKSgKKwkJCXN0cnVjdCBkcHVfaHdfaW50ciAqaW50ciwKKwkJCWlu dCBpcnFfaWR4LAorCQkJYm9vbCBjbGVhcik7CisKKwkvKioKKwkgKiBnZXRfaW50cl9zdGF0dXNf bm9sb2NrIC0gbm9sb2NrIHZlcnNpb24gb2YgZ2V0X2ludGVycnVwdF9zdGF0dXMKKwkgKiBAaW50 cjoJSFcgaW50ZXJydXB0IGhhbmRsZQorCSAqIEBpcnFfaWR4OglMb29rdXAgaXJxIGluZGV4IHJl dHVybiBmcm9tIGlycV9pZHhfbG9va3VwCisJICogQGNsZWFyOglUcnVlIHRvIGNsZWFyIGlycSBh ZnRlciByZWFkCisJICovCisJdTMyICgqZ2V0X2ludHJfc3RhdHVzX25vbG9jaykoCisJCQlzdHJ1 Y3QgZHB1X2h3X2ludHIgKmludHIsCisJCQlpbnQgaXJxX2lkeCwKKwkJCWJvb2wgY2xlYXIpOwor CisJLyoqCisJICogZ2V0X3ZhbGlkX2ludGVycnVwdHMgLSBHZXRzIGEgbWFzayBvZiBhbGwgdmFs aWQgaW50ZXJydXB0IHNvdXJjZXMKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhpbiBE UFUuIFRoZXNlIGFyZSBhY3R1YWxseSBzdGF0dXMgYml0cworCSAqICAgICAgICAgICAgICAgICAg ICAgICAgd2l0aGluIGludGVycnVwdCByZWdpc3RlcnMgdGhhdCBzcGVjaWZ5IHRoZQorCSAqICAg ICAgICAgICAgICAgICAgICAgICAgc291cmNlIG9mIHRoZSBpbnRlcnJ1cHQgaW4gSVJRcy4gRm9y IGV4YW1wbGUsCisJICogICAgICAgICAgICAgICAgICAgICAgICB2YWxpZCBpbnRlcnJ1cHQgc291 cmNlcyBjYW4gYmUgTURQLCBEU0ksCisJICogICAgICAgICAgICAgICAgICAgICAgICBIRE1JIGV0 Yy4KKwkgKiBAaW50cjoJSFcgaW50ZXJydXB0IGhhbmRsZQorCSAqIEBtYXNrOglSZXR1cm5pbmcg dGhlIGludGVycnVwdCBzb3VyY2UgTUFTSworCSAqIEByZXR1cm46CTAgZm9yIHN1Y2Nlc3MsIG90 aGVyd2lzZSBmYWlsdXJlCisJICovCisJaW50ICgqZ2V0X3ZhbGlkX2ludGVycnVwdHMpKAorCQkJ c3RydWN0IGRwdV9od19pbnRyICppbnRyLAorCQkJdWludDMyX3QgKm1hc2spOworfTsKKworLyoq CisgKiBzdHJ1Y3QgZHB1X2h3X2ludHI6IGh3IGludGVycnVwdHMgaGFuZGxpbmcgZGF0YSBzdHJ1 Y3R1cmUKKyAqIEBodzogICAgICAgICAgICAgICB2aXJ0dWFsIGFkZHJlc3MgbWFwcGluZworICog QG9wczogICAgICAgICAgICAgIGZ1bmN0aW9uIHBvaW50ZXIgbWFwcGluZyBmb3IgSVJRIGhhbmRs aW5nCisgKiBAY2FjaGVfaXJxX21hc2s6ICAgYXJyYXkgb2YgSVJRIGVuYWJsZSBtYXNrcyByZWcg c3RvcmFnZSBjcmVhdGVkIGR1cmluZyBpbml0CisgKiBAc2F2ZV9pcnFfc3RhdHVzOiAgYXJyYXkg b2YgSVJRIHN0YXR1cyByZWcgc3RvcmFnZSBjcmVhdGVkIGR1cmluZyBpbml0CisgKiBAaXJxX2lk eF90Ymxfc2l6ZTogdG90YWwgbnVtYmVyIG9mIGlycV9pZHggbWFwcGVkIGluIHRoZSBod19pbnRl cnJ1cHRzCisgKiBAaXJxX2xvY2s6ICAgICAgICAgc3BpbmxvY2sgZm9yIGFjY2Vzc2luZyBJUlEg cmVzb3VyY2VzCisgKi8KK3N0cnVjdCBkcHVfaHdfaW50ciB7CisJc3RydWN0IGRwdV9od19ibGtf cmVnX21hcCBodzsKKwlzdHJ1Y3QgZHB1X2h3X2ludHJfb3BzIG9wczsKKwl1MzIgKmNhY2hlX2ly cV9tYXNrOworCXUzMiAqc2F2ZV9pcnFfc3RhdHVzOworCXUzMiBpcnFfaWR4X3RibF9zaXplOwor CXNwaW5sb2NrX3QgaXJxX2xvY2s7Cit9OworCisvKioKKyAqIGRwdV9od19pbnRyX2luaXQoKTog SW5pdGlhbGl6ZXMgdGhlIGludGVycnVwdHMgaHcgb2JqZWN0CisgKiBAYWRkcjogbWFwcGVkIHJl Z2lzdGVyIGlvIGFkZHJlc3Mgb2YgTURQCisgKiBAbSA6ICAgcG9pbnRlciB0byBtZHNzIGNhdGFs b2cgZGF0YQorICovCitzdHJ1Y3QgZHB1X2h3X2ludHIgKmRwdV9od19pbnRyX2luaXQodm9pZCBf X2lvbWVtICphZGRyLAorCQlzdHJ1Y3QgZHB1X21kc3NfY2ZnICptKTsKKworLyoqCisgKiBkcHVf aHdfaW50cl9kZXN0cm95KCk6IENsZWFudXAgaW50ZXJydXRwcyBodyBvYmplY3QKKyAqIEBpbnRy OiBwb2ludGVyIHRvIGludGVycnVwdHMgaHcgb2JqZWN0CisgKi8KK3ZvaWQgZHB1X2h3X2ludHJf ZGVzdHJveShzdHJ1Y3QgZHB1X2h3X2ludHIgKmludHIpOworI2VuZGlmCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfaW50Zi5jIGIvZHJpdmVycy9ncHUv ZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2ludGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMDAuLmQyODBkZjU2MTNjOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19pbnRmLmMKQEAgLTAsMCArMSwzNDkgQEAKKy8q IENvcHlyaWdodCAoYykgMjAxNS0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0 cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCisgKiBvbmx5IHZl cnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAq CisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlICJkcHVfaHdpby5oIgorI2lu Y2x1ZGUgImRwdV9od19jYXRhbG9nLmgiCisjaW5jbHVkZSAiZHB1X2h3X2ludGYuaCIKKyNpbmNs dWRlICJkcHVfZGJnLmgiCisjaW5jbHVkZSAiZHB1X2ttcy5oIgorCisjZGVmaW5lIElOVEZfVElN SU5HX0VOR0lORV9FTiAgICAgICAgICAgMHgwMDAKKyNkZWZpbmUgSU5URl9DT05GSUcgICAgICAg ICAgICAgICAgICAgICAweDAwNAorI2RlZmluZSBJTlRGX0hTWU5DX0NUTCAgICAgICAgICAgICAg ICAgIDB4MDA4CisjZGVmaW5lIElOVEZfVlNZTkNfUEVSSU9EX0YwICAgICAgICAgICAgMHgwMEMK KyNkZWZpbmUgSU5URl9WU1lOQ19QRVJJT0RfRjEgICAgICAgICAgICAweDAxMAorI2RlZmluZSBJ TlRGX1ZTWU5DX1BVTFNFX1dJRFRIX0YwICAgICAgIDB4MDE0CisjZGVmaW5lIElOVEZfVlNZTkNf UFVMU0VfV0lEVEhfRjEgICAgICAgMHgwMTgKKyNkZWZpbmUgSU5URl9ESVNQTEFZX1ZfU1RBUlRf RjAgICAgICAgICAweDAxQworI2RlZmluZSBJTlRGX0RJU1BMQVlfVl9TVEFSVF9GMSAgICAgICAg IDB4MDIwCisjZGVmaW5lIElOVEZfRElTUExBWV9WX0VORF9GMCAgICAgICAgICAgMHgwMjQKKyNk ZWZpbmUgSU5URl9ESVNQTEFZX1ZfRU5EX0YxICAgICAgICAgICAweDAyOAorI2RlZmluZSBJTlRG X0FDVElWRV9WX1NUQVJUX0YwICAgICAgICAgIDB4MDJDCisjZGVmaW5lIElOVEZfQUNUSVZFX1Zf U1RBUlRfRjEgICAgICAgICAgMHgwMzAKKyNkZWZpbmUgSU5URl9BQ1RJVkVfVl9FTkRfRjAgICAg ICAgICAgICAweDAzNAorI2RlZmluZSBJTlRGX0FDVElWRV9WX0VORF9GMSAgICAgICAgICAgIDB4 MDM4CisjZGVmaW5lIElOVEZfRElTUExBWV9IQ1RMICAgICAgICAgICAgICAgMHgwM0MKKyNkZWZp bmUgSU5URl9BQ1RJVkVfSENUTCAgICAgICAgICAgICAgICAweDA0MAorI2RlZmluZSBJTlRGX0JP UkRFUl9DT0xPUiAgICAgICAgICAgICAgIDB4MDQ0CisjZGVmaW5lIElOVEZfVU5ERVJGTE9XX0NP TE9SICAgICAgICAgICAgMHgwNDgKKyNkZWZpbmUgSU5URl9IU1lOQ19TS0VXICAgICAgICAgICAg ICAgICAweDA0QworI2RlZmluZSBJTlRGX1BPTEFSSVRZX0NUTCAgICAgICAgICAgICAgIDB4MDUw CisjZGVmaW5lIElOVEZfVEVTVF9DVEwgICAgICAgICAgICAgICAgICAgMHgwNTQKKyNkZWZpbmUg SU5URl9UUF9DT0xPUjAgICAgICAgICAgICAgICAgICAweDA1OAorI2RlZmluZSBJTlRGX1RQX0NP TE9SMSAgICAgICAgICAgICAgICAgIDB4MDVDCisjZGVmaW5lIElOVEZfRlJBTUVfTElORV9DT1VO VF9FTiAgICAgICAgMHgwQTgKKyNkZWZpbmUgSU5URl9GUkFNRV9DT1VOVCAgICAgICAgICAgICAg ICAweDBBQworI2RlZmluZSAgIElOVEZfTElORV9DT1VOVCAgICAgICAgICAgICAgIDB4MEIwCisK KyNkZWZpbmUgICBJTlRGX0RFRkxJQ0tFUl9DT05GSUcgICAgICAgICAweDBGMAorI2RlZmluZSAg IElOVEZfREVGTElDS0VSX1NUUk5HX0NPRUZGICAgIDB4MEY0CisjZGVmaW5lICAgSU5URl9ERUZM SUNLRVJfV0VBS19DT0VGRiAgICAgMHgwRjgKKworI2RlZmluZSAgIElOVEZfRFNJX0NNRF9NT0RF X1RSSUdHRVJfRU4gIDB4MDg0CisjZGVmaW5lICAgSU5URl9QQU5FTF9GT1JNQVQgICAgICAgICAg ICAgMHgwOTAKKyNkZWZpbmUgICBJTlRGX1RQR19FTkFCTEUgICAgICAgICAgICAgICAweDEwMAor I2RlZmluZSAgIElOVEZfVFBHX01BSU5fQ09OVFJPTCAgICAgICAgIDB4MTA0CisjZGVmaW5lICAg SU5URl9UUEdfVklERU9fQ09ORklHICAgICAgICAgMHgxMDgKKyNkZWZpbmUgICBJTlRGX1RQR19D T01QT05FTlRfTElNSVRTICAgICAweDEwQworI2RlZmluZSAgIElOVEZfVFBHX1JFQ1RBTkdMRSAg ICAgICAgICAgIDB4MTEwCisjZGVmaW5lICAgSU5URl9UUEdfSU5JVElBTF9WQUxVRSAgICAgICAg MHgxMTQKKyNkZWZpbmUgICBJTlRGX1RQR19CTEtfV0hJVEVfUEFUVEVSTl9GUkFNRVMgICAweDEx OAorI2RlZmluZSAgIElOVEZfVFBHX1JHQl9NQVBQSU5HICAgICAgICAgIDB4MTFDCisjZGVmaW5l ICAgSU5URl9QUk9HX0ZFVENIX1NUQVJUICAgICAgICAgMHgxNzAKKyNkZWZpbmUgICBJTlRGX1BS T0dfUk9UX1NUQVJUICAgICAgICAgICAweDE3NAorCisjZGVmaW5lICAgSU5URl9GUkFNRV9MSU5F X0NPVU5UX0VOICAgICAgMHgwQTgKKyNkZWZpbmUgICBJTlRGX0ZSQU1FX0NPVU5UICAgICAgICAg ICAgICAweDBBQworI2RlZmluZSAgIElOVEZfTElORV9DT1VOVCAgICAgICAgICAgICAgIDB4MEIw CisKKyNkZWZpbmUgSU5URl9NSVNSX0NUUkwJCQkweDE4MAorI2RlZmluZSBJTlRGX01JU1JfU0lH TkFUVVJFCQkweDE4NAorCitzdGF0aWMgc3RydWN0IGRwdV9pbnRmX2NmZyAqX2ludGZfb2Zmc2V0 KGVudW0gZHB1X2ludGYgaW50ZiwKKwkJc3RydWN0IGRwdV9tZHNzX2NmZyAqbSwKKwkJdm9pZCBf X2lvbWVtICphZGRyLAorCQlzdHJ1Y3QgZHB1X2h3X2Jsa19yZWdfbWFwICpiKQoreworCWludCBp OworCisJZm9yIChpID0gMDsgaSA8IG0tPmludGZfY291bnQ7IGkrKykgeworCQlpZiAoKGludGYg PT0gbS0+aW50ZltpXS5pZCkgJiYKKwkJKG0tPmludGZbaV0udHlwZSAhPSBJTlRGX05PTkUpKSB7 CisJCQliLT5iYXNlX29mZiA9IGFkZHI7CisJCQliLT5ibGtfb2ZmID0gbS0+aW50ZltpXS5iYXNl OworCQkJYi0+bGVuZ3RoID0gbS0+aW50ZltpXS5sZW47CisJCQliLT5od3ZlcnNpb24gPSBtLT5o d3ZlcnNpb247CisJCQliLT5sb2dfbWFzayA9IERQVV9EQkdfTUFTS19JTlRGOworCQkJcmV0dXJu ICZtLT5pbnRmW2ldOworCQl9CisJfQorCisJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cit9CisK K3N0YXRpYyB2b2lkIGRwdV9od19pbnRmX3NldHVwX3RpbWluZ19lbmdpbmUoc3RydWN0IGRwdV9o d19pbnRmICpjdHgsCisJCWNvbnN0IHN0cnVjdCBpbnRmX3RpbWluZ19wYXJhbXMgKnAsCisJCWNv bnN0IHN0cnVjdCBkcHVfZm9ybWF0ICpmbXQpCit7CisJc3RydWN0IGRwdV9od19ibGtfcmVnX21h cCAqYyA9ICZjdHgtPmh3OworCXUzMiBoc3luY19wZXJpb2QsIHZzeW5jX3BlcmlvZDsKKwl1MzIg ZGlzcGxheV92X3N0YXJ0LCBkaXNwbGF5X3ZfZW5kOworCXUzMiBoc3luY19zdGFydF94LCBoc3lu Y19lbmRfeDsKKwl1MzIgYWN0aXZlX2hfc3RhcnQsIGFjdGl2ZV9oX2VuZDsKKwl1MzIgYWN0aXZl X3Zfc3RhcnQsIGFjdGl2ZV92X2VuZDsKKwl1MzIgYWN0aXZlX2hjdGwsIGRpc3BsYXlfaGN0bCwg aHN5bmNfY3RsOworCXUzMiBwb2xhcml0eV9jdGwsIGRlbl9wb2xhcml0eSwgaHN5bmNfcG9sYXJp dHksIHZzeW5jX3BvbGFyaXR5OworCXUzMiBwYW5lbF9mb3JtYXQ7CisJdTMyIGludGZfY2ZnOwor CisJLyogcmVhZCBpbnRlcmZhY2VfY2ZnICovCisJaW50Zl9jZmcgPSBEUFVfUkVHX1JFQUQoYywg SU5URl9DT05GSUcpOworCWhzeW5jX3BlcmlvZCA9IHAtPmhzeW5jX3B1bHNlX3dpZHRoICsgcC0+ aF9iYWNrX3BvcmNoICsgcC0+d2lkdGggKworCXAtPmhfZnJvbnRfcG9yY2g7CisJdnN5bmNfcGVy aW9kID0gcC0+dnN5bmNfcHVsc2Vfd2lkdGggKyBwLT52X2JhY2tfcG9yY2ggKyBwLT5oZWlnaHQg KworCXAtPnZfZnJvbnRfcG9yY2g7CisKKwlkaXNwbGF5X3Zfc3RhcnQgPSAoKHAtPnZzeW5jX3B1 bHNlX3dpZHRoICsgcC0+dl9iYWNrX3BvcmNoKSAqCisJaHN5bmNfcGVyaW9kKSArIHAtPmhzeW5j X3NrZXc7CisJZGlzcGxheV92X2VuZCA9ICgodnN5bmNfcGVyaW9kIC0gcC0+dl9mcm9udF9wb3Jj aCkgKiBoc3luY19wZXJpb2QpICsKKwlwLT5oc3luY19za2V3IC0gMTsKKworCWlmIChjdHgtPmNh cC0+dHlwZSA9PSBJTlRGX0VEUCB8fCBjdHgtPmNhcC0+dHlwZSA9PSBJTlRGX0RQKSB7CisJCWRp c3BsYXlfdl9zdGFydCArPSBwLT5oc3luY19wdWxzZV93aWR0aCArIHAtPmhfYmFja19wb3JjaDsK KwkJZGlzcGxheV92X2VuZCAtPSBwLT5oX2Zyb250X3BvcmNoOworCX0KKworCWhzeW5jX3N0YXJ0 X3ggPSBwLT5oX2JhY2tfcG9yY2ggKyBwLT5oc3luY19wdWxzZV93aWR0aDsKKwloc3luY19lbmRf eCA9IGhzeW5jX3BlcmlvZCAtIHAtPmhfZnJvbnRfcG9yY2ggLSAxOworCisJaWYgKHAtPndpZHRo ICE9IHAtPnhyZXMpIHsKKwkJYWN0aXZlX2hfc3RhcnQgPSBoc3luY19zdGFydF94OworCQlhY3Rp dmVfaF9lbmQgPSBhY3RpdmVfaF9zdGFydCArIHAtPnhyZXMgLSAxOworCX0gZWxzZSB7CisJCWFj dGl2ZV9oX3N0YXJ0ID0gMDsKKwkJYWN0aXZlX2hfZW5kID0gMDsKKwl9CisKKwlpZiAocC0+aGVp Z2h0ICE9IHAtPnlyZXMpIHsKKwkJYWN0aXZlX3Zfc3RhcnQgPSBkaXNwbGF5X3Zfc3RhcnQ7CisJ CWFjdGl2ZV92X2VuZCA9IGFjdGl2ZV92X3N0YXJ0ICsgKHAtPnlyZXMgKiBoc3luY19wZXJpb2Qp IC0gMTsKKwl9IGVsc2UgeworCQlhY3RpdmVfdl9zdGFydCA9IDA7CisJCWFjdGl2ZV92X2VuZCA9 IDA7CisJfQorCisJaWYgKGFjdGl2ZV9oX2VuZCkgeworCQlhY3RpdmVfaGN0bCA9IChhY3RpdmVf aF9lbmQgPDwgMTYpIHwgYWN0aXZlX2hfc3RhcnQ7CisJCWludGZfY2ZnIHw9IEJJVCgyOSk7CS8q IEFDVElWRV9IX0VOQUJMRSAqLworCX0gZWxzZSB7CisJCWFjdGl2ZV9oY3RsID0gMDsKKwl9CisK KwlpZiAoYWN0aXZlX3ZfZW5kKQorCQlpbnRmX2NmZyB8PSBCSVQoMzApOyAvKiBBQ1RJVkVfVl9F TkFCTEUgKi8KKworCWhzeW5jX2N0bCA9IChoc3luY19wZXJpb2QgPDwgMTYpIHwgcC0+aHN5bmNf cHVsc2Vfd2lkdGg7CisJZGlzcGxheV9oY3RsID0gKGhzeW5jX2VuZF94IDw8IDE2KSB8IGhzeW5j X3N0YXJ0X3g7CisKKwlkZW5fcG9sYXJpdHkgPSAwOworCWlmIChjdHgtPmNhcC0+dHlwZSA9PSBJ TlRGX0hETUkpIHsKKwkJaHN5bmNfcG9sYXJpdHkgPSBwLT55cmVzID49IDcyMCA/IDAgOiAxOwor CQl2c3luY19wb2xhcml0eSA9IHAtPnlyZXMgPj0gNzIwID8gMCA6IDE7CisJfSBlbHNlIHsKKwkJ aHN5bmNfcG9sYXJpdHkgPSAwOworCQl2c3luY19wb2xhcml0eSA9IDA7CisJfQorCXBvbGFyaXR5 X2N0bCA9IChkZW5fcG9sYXJpdHkgPDwgMikgfCAvKiAgREVOIFBvbGFyaXR5ICAqLworCQkodnN5 bmNfcG9sYXJpdHkgPDwgMSkgfCAvKiBWU1lOQyBQb2xhcml0eSAqLworCQkoaHN5bmNfcG9sYXJp dHkgPDwgMCk7ICAvKiBIU1lOQyBQb2xhcml0eSAqLworCisJaWYgKCFEUFVfRk9STUFUX0lTX1lV VihmbXQpKQorCQlwYW5lbF9mb3JtYXQgPSAoZm10LT5iaXRzW0MwX0dfWV0gfAorCQkJCShmbXQt PmJpdHNbQzFfQl9DYl0gPDwgMikgfAorCQkJCShmbXQtPmJpdHNbQzJfUl9Dcl0gPDwgNCkgfAor CQkJCSgweDIxIDw8IDgpKTsKKwllbHNlCisJCS8qIEludGVyZmFjZSB0cmVhdHMgYWxsIHRoZSBw aXhlbCBkYXRhIGluIFJHQjg4OCBmb3JtYXQgKi8KKwkJcGFuZWxfZm9ybWF0ID0gKENPTE9SXzhC SVQgfAorCQkJCShDT0xPUl84QklUIDw8IDIpIHwKKwkJCQkoQ09MT1JfOEJJVCA8PCA0KSB8CisJ CQkJKDB4MjEgPDwgOCkpOworCisJRFBVX1JFR19XUklURShjLCBJTlRGX0hTWU5DX0NUTCwgaHN5 bmNfY3RsKTsKKwlEUFVfUkVHX1dSSVRFKGMsIElOVEZfVlNZTkNfUEVSSU9EX0YwLCB2c3luY19w ZXJpb2QgKiBoc3luY19wZXJpb2QpOworCURQVV9SRUdfV1JJVEUoYywgSU5URl9WU1lOQ19QVUxT RV9XSURUSF9GMCwKKwkJCXAtPnZzeW5jX3B1bHNlX3dpZHRoICogaHN5bmNfcGVyaW9kKTsKKwlE UFVfUkVHX1dSSVRFKGMsIElOVEZfRElTUExBWV9IQ1RMLCBkaXNwbGF5X2hjdGwpOworCURQVV9S RUdfV1JJVEUoYywgSU5URl9ESVNQTEFZX1ZfU1RBUlRfRjAsIGRpc3BsYXlfdl9zdGFydCk7CisJ RFBVX1JFR19XUklURShjLCBJTlRGX0RJU1BMQVlfVl9FTkRfRjAsIGRpc3BsYXlfdl9lbmQpOwor CURQVV9SRUdfV1JJVEUoYywgSU5URl9BQ1RJVkVfSENUTCwgIGFjdGl2ZV9oY3RsKTsKKwlEUFVf UkVHX1dSSVRFKGMsIElOVEZfQUNUSVZFX1ZfU1RBUlRfRjAsIGFjdGl2ZV92X3N0YXJ0KTsKKwlE UFVfUkVHX1dSSVRFKGMsIElOVEZfQUNUSVZFX1ZfRU5EX0YwLCBhY3RpdmVfdl9lbmQpOworCURQ VV9SRUdfV1JJVEUoYywgSU5URl9CT1JERVJfQ09MT1IsIHAtPmJvcmRlcl9jbHIpOworCURQVV9S RUdfV1JJVEUoYywgSU5URl9VTkRFUkZMT1dfQ09MT1IsIHAtPnVuZGVyZmxvd19jbHIpOworCURQ VV9SRUdfV1JJVEUoYywgSU5URl9IU1lOQ19TS0VXLCBwLT5oc3luY19za2V3KTsKKwlEUFVfUkVH X1dSSVRFKGMsIElOVEZfUE9MQVJJVFlfQ1RMLCBwb2xhcml0eV9jdGwpOworCURQVV9SRUdfV1JJ VEUoYywgSU5URl9GUkFNRV9MSU5FX0NPVU5UX0VOLCAweDMpOworCURQVV9SRUdfV1JJVEUoYywg SU5URl9DT05GSUcsIGludGZfY2ZnKTsKKwlEUFVfUkVHX1dSSVRFKGMsIElOVEZfUEFORUxfRk9S TUFULCBwYW5lbF9mb3JtYXQpOworfQorCitzdGF0aWMgdm9pZCBkcHVfaHdfaW50Zl9lbmFibGVf dGltaW5nX2VuZ2luZSgKKwkJc3RydWN0IGRwdV9od19pbnRmICppbnRmLAorCQl1OCBlbmFibGUp Cit7CisJc3RydWN0IGRwdV9od19ibGtfcmVnX21hcCAqYyA9ICZpbnRmLT5odzsKKwkvKiBOb3Rl OiBEaXNwbGF5IGludGVyZmFjZSBzZWxlY3QgaXMgaGFuZGxlZCBpbiB0b3AgYmxvY2sgaHcgbGF5 ZXIgKi8KKwlEUFVfUkVHX1dSSVRFKGMsIElOVEZfVElNSU5HX0VOR0lORV9FTiwgZW5hYmxlICE9 IDApOworfQorCitzdGF0aWMgdm9pZCBkcHVfaHdfaW50Zl9zZXR1cF9wcmdfZmV0Y2goCisJCXN0 cnVjdCBkcHVfaHdfaW50ZiAqaW50ZiwKKwkJY29uc3Qgc3RydWN0IGludGZfcHJvZ19mZXRjaCAq ZmV0Y2gpCit7CisJc3RydWN0IGRwdV9od19ibGtfcmVnX21hcCAqYyA9ICZpbnRmLT5odzsKKwlp bnQgZmV0Y2hfZW5hYmxlOworCisJLyoKKwkgKiBGZXRjaCBzaG91bGQgYWx3YXlzIGJlIG91dHNp ZGUgdGhlIGFjdGl2ZSBsaW5lcy4gSWYgdGhlIGZldGNoaW5nCisJICogaXMgcHJvZ3JhbW1lZCB3 aXRoaW4gYWN0aXZlIHJlZ2lvbiwgaGFyZHdhcmUgYmVoYXZpb3IgaXMgdW5rbm93bi4KKwkgKi8K KworCWZldGNoX2VuYWJsZSA9IERQVV9SRUdfUkVBRChjLCBJTlRGX0NPTkZJRyk7CisJaWYgKGZl dGNoLT5lbmFibGUpIHsKKwkJZmV0Y2hfZW5hYmxlIHw9IEJJVCgzMSk7CisJCURQVV9SRUdfV1JJ VEUoYywgSU5URl9QUk9HX0ZFVENIX1NUQVJULAorCQkJCWZldGNoLT5mZXRjaF9zdGFydCk7CisJ fSBlbHNlIHsKKwkJZmV0Y2hfZW5hYmxlICY9IH5CSVQoMzEpOworCX0KKworCURQVV9SRUdfV1JJ VEUoYywgSU5URl9DT05GSUcsIGZldGNoX2VuYWJsZSk7Cit9CisKK3N0YXRpYyB2b2lkIGRwdV9o d19pbnRmX2dldF9zdGF0dXMoCisJCXN0cnVjdCBkcHVfaHdfaW50ZiAqaW50ZiwKKwkJc3RydWN0 IGludGZfc3RhdHVzICpzKQoreworCXN0cnVjdCBkcHVfaHdfYmxrX3JlZ19tYXAgKmMgPSAmaW50 Zi0+aHc7CisKKwlzLT5pc19lbiA9IERQVV9SRUdfUkVBRChjLCBJTlRGX1RJTUlOR19FTkdJTkVf RU4pOworCWlmIChzLT5pc19lbikgeworCQlzLT5mcmFtZV9jb3VudCA9IERQVV9SRUdfUkVBRChj LCBJTlRGX0ZSQU1FX0NPVU5UKTsKKwkJcy0+bGluZV9jb3VudCA9IERQVV9SRUdfUkVBRChjLCBJ TlRGX0xJTkVfQ09VTlQpOworCX0gZWxzZSB7CisJCXMtPmxpbmVfY291bnQgPSAwOworCQlzLT5m cmFtZV9jb3VudCA9IDA7CisJfQorfQorCitzdGF0aWMgdm9pZCBkcHVfaHdfaW50Zl9zZXR1cF9t aXNyKHN0cnVjdCBkcHVfaHdfaW50ZiAqaW50ZiwKKwkJCQkJCWJvb2wgZW5hYmxlLCB1MzIgZnJh bWVfY291bnQpCit7CisJc3RydWN0IGRwdV9od19ibGtfcmVnX21hcCAqYyA9ICZpbnRmLT5odzsK Kwl1MzIgY29uZmlnID0gMDsKKworCURQVV9SRUdfV1JJVEUoYywgSU5URl9NSVNSX0NUUkwsIE1J U1JfQ1RSTF9TVEFUVVNfQ0xFQVIpOworCS8qIGNsZWFyIG1pc3IgZGF0YSAqLworCXdtYigpOwor CisJaWYgKGVuYWJsZSkKKwkJY29uZmlnID0gKGZyYW1lX2NvdW50ICYgTUlTUl9GUkFNRV9DT1VO VF9NQVNLKSB8CisJCQlNSVNSX0NUUkxfRU5BQkxFIHwgSU5URl9NSVNSX0NUUkxfRlJFRV9SVU5f TUFTSzsKKworCURQVV9SRUdfV1JJVEUoYywgSU5URl9NSVNSX0NUUkwsIGNvbmZpZyk7Cit9CisK K3N0YXRpYyB1MzIgZHB1X2h3X2ludGZfY29sbGVjdF9taXNyKHN0cnVjdCBkcHVfaHdfaW50ZiAq aW50ZikKK3sKKwlzdHJ1Y3QgZHB1X2h3X2Jsa19yZWdfbWFwICpjID0gJmludGYtPmh3OworCisJ cmV0dXJuIERQVV9SRUdfUkVBRChjLCBJTlRGX01JU1JfU0lHTkFUVVJFKTsKK30KKworc3RhdGlj IHUzMiBkcHVfaHdfaW50Zl9nZXRfbGluZV9jb3VudChzdHJ1Y3QgZHB1X2h3X2ludGYgKmludGYp Cit7CisJc3RydWN0IGRwdV9od19ibGtfcmVnX21hcCAqYzsKKworCWlmICghaW50ZikKKwkJcmV0 dXJuIDA7CisKKwljID0gJmludGYtPmh3OworCisJcmV0dXJuIERQVV9SRUdfUkVBRChjLCBJTlRG X0xJTkVfQ09VTlQpOworfQorCitzdGF0aWMgdm9pZCBfc2V0dXBfaW50Zl9vcHMoc3RydWN0IGRw dV9od19pbnRmX29wcyAqb3BzLAorCQl1bnNpZ25lZCBsb25nIGNhcCkKK3sKKwlvcHMtPnNldHVw X3RpbWluZ19nZW4gPSBkcHVfaHdfaW50Zl9zZXR1cF90aW1pbmdfZW5naW5lOworCW9wcy0+c2V0 dXBfcHJnX2ZldGNoICA9IGRwdV9od19pbnRmX3NldHVwX3ByZ19mZXRjaDsKKwlvcHMtPmdldF9z dGF0dXMgPSBkcHVfaHdfaW50Zl9nZXRfc3RhdHVzOworCW9wcy0+ZW5hYmxlX3RpbWluZyA9IGRw dV9od19pbnRmX2VuYWJsZV90aW1pbmdfZW5naW5lOworCW9wcy0+c2V0dXBfbWlzciA9IGRwdV9o d19pbnRmX3NldHVwX21pc3I7CisJb3BzLT5jb2xsZWN0X21pc3IgPSBkcHVfaHdfaW50Zl9jb2xs ZWN0X21pc3I7CisJb3BzLT5nZXRfbGluZV9jb3VudCA9IGRwdV9od19pbnRmX2dldF9saW5lX2Nv dW50OworfQorCitzdGF0aWMgc3RydWN0IGRwdV9od19ibGtfb3BzIGRwdV9od19vcHMgPSB7CisJ LnN0YXJ0ID0gTlVMTCwKKwkuc3RvcCA9IE5VTEwsCit9OworCitzdHJ1Y3QgZHB1X2h3X2ludGYg KmRwdV9od19pbnRmX2luaXQoZW51bSBkcHVfaW50ZiBpZHgsCisJCXZvaWQgX19pb21lbSAqYWRk ciwKKwkJc3RydWN0IGRwdV9tZHNzX2NmZyAqbSkKK3sKKwlzdHJ1Y3QgZHB1X2h3X2ludGYgKmM7 CisJc3RydWN0IGRwdV9pbnRmX2NmZyAqY2ZnOworCWludCByYzsKKworCWMgPSBremFsbG9jKHNp emVvZigqYyksIEdGUF9LRVJORUwpOworCWlmICghYykKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01F TSk7CisKKwljZmcgPSBfaW50Zl9vZmZzZXQoaWR4LCBtLCBhZGRyLCAmYy0+aHcpOworCWlmIChJ U19FUlJfT1JfTlVMTChjZmcpKSB7CisJCWtmcmVlKGMpOworCQlwcl9lcnIoImZhaWxlZCB0byBj cmVhdGUgZHB1X2h3X2ludGYgJWRcbiIsIGlkeCk7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwp OworCX0KKworCS8qCisJICogQXNzaWduIG9wcworCSAqLworCWMtPmlkeCA9IGlkeDsKKwljLT5j YXAgPSBjZmc7CisJYy0+bWRzcyA9IG07CisJX3NldHVwX2ludGZfb3BzKCZjLT5vcHMsIGMtPmNh cC0+ZmVhdHVyZXMpOworCisJcmMgPSBkcHVfaHdfYmxrX2luaXQoJmMtPmJhc2UsIERQVV9IV19C TEtfSU5URiwgaWR4LCAmZHB1X2h3X29wcyk7CisJaWYgKHJjKSB7CisJCURQVV9FUlJPUigiZmFp bGVkIHRvIGluaXQgaHcgYmxrICVkXG4iLCByYyk7CisJCWdvdG8gYmxrX2luaXRfZXJyb3I7CisJ fQorCisJcmV0dXJuIGM7CisKK2Jsa19pbml0X2Vycm9yOgorCWt6ZnJlZShjKTsKKworCXJldHVy biBFUlJfUFRSKHJjKTsKK30KKwordm9pZCBkcHVfaHdfaW50Zl9kZXN0cm95KHN0cnVjdCBkcHVf aHdfaW50ZiAqaW50ZikKK3sKKwlpZiAoaW50ZikKKwkJZHB1X2h3X2Jsa19kZXN0cm95KCZpbnRm LT5iYXNlKTsKKwlrZnJlZShpbnRmKTsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X2h3X2ludGYuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9od19pbnRmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw Li5hNzlkNzM1ZGE2OGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvZHB1MS9kcHVfaHdfaW50Zi5oCkBAIC0wLDAgKzEsMTI4IEBACisvKiBDb3B5cmlnaHQgKGMp IDIwMTUtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg KgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAorICogb25seSB2ZXJzaW9uIDIgYXMgcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9EUFVfSFdfSU5URl9ICisjZGVmaW5lIF9EUFVfSFdf SU5URl9ICisKKyNpbmNsdWRlICJkcHVfaHdfY2F0YWxvZy5oIgorI2luY2x1ZGUgImRwdV9od19t ZHNzLmgiCisjaW5jbHVkZSAiZHB1X2h3X3V0aWwuaCIKKyNpbmNsdWRlICJkcHVfaHdfYmxrLmgi CisKK3N0cnVjdCBkcHVfaHdfaW50ZjsKKworLyogaW50ZiB0aW1pbmcgc2V0dGluZ3MgKi8KK3N0 cnVjdCBpbnRmX3RpbWluZ19wYXJhbXMgeworCXUzMiB3aWR0aDsJCS8qIGFjdGl2ZSB3aWR0aCAq LworCXUzMiBoZWlnaHQ7CQkvKiBhY3RpdmUgaGVpZ2h0ICovCisJdTMyIHhyZXM7CQkvKiBEaXNw bGF5IHBhbmVsIHdpZHRoICovCisJdTMyIHlyZXM7CQkvKiBEaXNwbGF5IHBhbmVsIGhlaWdodCAq LworCisJdTMyIGhfYmFja19wb3JjaDsKKwl1MzIgaF9mcm9udF9wb3JjaDsKKwl1MzIgdl9iYWNr X3BvcmNoOworCXUzMiB2X2Zyb250X3BvcmNoOworCXUzMiBoc3luY19wdWxzZV93aWR0aDsKKwl1 MzIgdnN5bmNfcHVsc2Vfd2lkdGg7CisJdTMyIGhzeW5jX3BvbGFyaXR5OworCXUzMiB2c3luY19w b2xhcml0eTsKKwl1MzIgYm9yZGVyX2NscjsKKwl1MzIgdW5kZXJmbG93X2NscjsKKwl1MzIgaHN5 bmNfc2tldzsKK307CisKK3N0cnVjdCBpbnRmX3Byb2dfZmV0Y2ggeworCXU4IGVuYWJsZTsKKwkv KiB2c3luYyBjb3VudGVyIGZvciB0aGUgZnJvbnQgcG9yY2ggcGl4ZWwgbGluZSAqLworCXUzMiBm ZXRjaF9zdGFydDsKK307CisKK3N0cnVjdCBpbnRmX3N0YXR1cyB7CisJdTggaXNfZW47CQkvKiBp bnRlcmZhY2UgdGltaW5nIGVuZ2luZSBpcyBlbmFibGVkIG9yIG5vdCAqLworCXUzMiBmcmFtZV9j b3VudDsJLyogZnJhbWUgY291bnQgc2luY2UgdGltaW5nIGVuZ2luZSBlbmFibGVkICovCisJdTMy IGxpbmVfY291bnQ7CQkvKiBjdXJyZW50IGxpbmUgY291bnQgaW5jbHVkaW5nIGJsYW5raW5nICov Cit9OworCisvKioKKyAqIHN0cnVjdCBkcHVfaHdfaW50Zl9vcHMgOiBJbnRlcmZhY2UgdG8gdGhl IGludGVyZmFjZSBIdyBkcml2ZXIgZnVuY3Rpb25zCisgKiAgQXNzdW1wdGlvbiBpcyB0aGVzZSBm dW5jdGlvbnMgd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgY2xvY2tzIGFyZSBlbmFibGVkCisgKiBAIHNl dHVwX3RpbWluZ19nZW4gOiBwcm9ncmFtcyB0aGUgdGltaW5nIGVuZ2luZQorICogQCBzZXR1cF9w cm9nX2ZldGNoIDogZW5hYmxlcy9kaXNhYmxlcyB0aGUgcHJvZ3JhbW1hYmxlIGZldGNoIGxvZ2lj CisgKiBAIGVuYWJsZV90aW1pbmc6IGVuYWJsZS9kaXNhYmxlIHRpbWluZyBlbmdpbmUKKyAqIEAg Z2V0X3N0YXR1czogcmV0dXJucyBpZiB0aW1pbmcgZW5naW5lIGlzIGVuYWJsZWQgb3Igbm90Cisg KiBAIHNldHVwX21pc3I6IGVuYWJsZXMvZGlzYWJsZXMgTUlTUiBpbiBIVyByZWdpc3RlcgorICog QCBjb2xsZWN0X21pc3I6IHJlYWRzIGFuZCBzdG9yZXMgTUlTUiBkYXRhIGZyb20gSFcgcmVnaXN0 ZXIKKyAqIEAgZ2V0X2xpbmVfY291bnQ6IHJlYWRzIGN1cnJlbnQgdmVydGljYWwgbGluZSBjb3Vu dGVyCisgKi8KK3N0cnVjdCBkcHVfaHdfaW50Zl9vcHMgeworCXZvaWQgKCpzZXR1cF90aW1pbmdf Z2VuKShzdHJ1Y3QgZHB1X2h3X2ludGYgKmludGYsCisJCQljb25zdCBzdHJ1Y3QgaW50Zl90aW1p bmdfcGFyYW1zICpwLAorCQkJY29uc3Qgc3RydWN0IGRwdV9mb3JtYXQgKmZtdCk7CisKKwl2b2lk ICgqc2V0dXBfcHJnX2ZldGNoKShzdHJ1Y3QgZHB1X2h3X2ludGYgKmludGYsCisJCQljb25zdCBz dHJ1Y3QgaW50Zl9wcm9nX2ZldGNoICpmZXRjaCk7CisKKwl2b2lkICgqZW5hYmxlX3RpbWluZyko c3RydWN0IGRwdV9od19pbnRmICppbnRmLAorCQkJdTggZW5hYmxlKTsKKworCXZvaWQgKCpnZXRf c3RhdHVzKShzdHJ1Y3QgZHB1X2h3X2ludGYgKmludGYsCisJCQlzdHJ1Y3QgaW50Zl9zdGF0dXMg KnN0YXR1cyk7CisKKwl2b2lkICgqc2V0dXBfbWlzcikoc3RydWN0IGRwdV9od19pbnRmICppbnRm LAorCQkJYm9vbCBlbmFibGUsIHUzMiBmcmFtZV9jb3VudCk7CisKKwl1MzIgKCpjb2xsZWN0X21p c3IpKHN0cnVjdCBkcHVfaHdfaW50ZiAqaW50Zik7CisKKwl1MzIgKCpnZXRfbGluZV9jb3VudCko c3RydWN0IGRwdV9od19pbnRmICppbnRmKTsKK307CisKK3N0cnVjdCBkcHVfaHdfaW50ZiB7CisJ c3RydWN0IGRwdV9od19ibGsgYmFzZTsKKwlzdHJ1Y3QgZHB1X2h3X2Jsa19yZWdfbWFwIGh3Owor CisJLyogaW50ZiAqLworCWVudW0gZHB1X2ludGYgaWR4OworCWNvbnN0IHN0cnVjdCBkcHVfaW50 Zl9jZmcgKmNhcDsKKwljb25zdCBzdHJ1Y3QgZHB1X21kc3NfY2ZnICptZHNzOworCisJLyogb3Bz ICovCisJc3RydWN0IGRwdV9od19pbnRmX29wcyBvcHM7Cit9OworCisvKioKKyAqIHRvX2RwdV9o d19pbnRmIC0gY29udmVydCBiYXNlIG9iamVjdCBkcHVfaHdfYmFzZSB0byBjb250YWluZXIKKyAq IEBodzogUG9pbnRlciB0byBiYXNlIGhhcmR3YXJlIGJsb2NrCisgKiByZXR1cm46IFBvaW50ZXIg dG8gaGFyZHdhcmUgYmxvY2sgY29udGFpbmVyCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRw dV9od19pbnRmICp0b19kcHVfaHdfaW50ZihzdHJ1Y3QgZHB1X2h3X2JsayAqaHcpCit7CisJcmV0 dXJuIGNvbnRhaW5lcl9vZihodywgc3RydWN0IGRwdV9od19pbnRmLCBiYXNlKTsKK30KKworLyoq CisgKiBkcHVfaHdfaW50Zl9pbml0KCk6IEluaXRpYWxpemVzIHRoZSBpbnRmIGRyaXZlciBmb3Ig dGhlIHBhc3NlZAorICogaW50ZXJmYWNlIGlkeC4KKyAqIEBpZHg6ICBpbnRlcmZhY2UgaW5kZXgg Zm9yIHdoaWNoIGRyaXZlciBvYmplY3QgaXMgcmVxdWlyZWQKKyAqIEBhZGRyOiBtYXBwZWQgcmVn aXN0ZXIgaW8gYWRkcmVzcyBvZiBNRFAKKyAqIEBtIDogICBwb2ludGVyIHRvIG1kc3MgY2F0YWxv ZyBkYXRhCisgKi8KK3N0cnVjdCBkcHVfaHdfaW50ZiAqZHB1X2h3X2ludGZfaW5pdChlbnVtIGRw dV9pbnRmIGlkeCwKKwkJdm9pZCBfX2lvbWVtICphZGRyLAorCQlzdHJ1Y3QgZHB1X21kc3NfY2Zn ICptKTsKKworLyoqCisgKiBkcHVfaHdfaW50Zl9kZXN0cm95KCk6IERlc3Ryb3lzIElOVEYgZHJp dmVyIGNvbnRleHQKKyAqIEBpbnRmOiAgIFBvaW50ZXIgdG8gSU5URiBkcml2ZXIgY29udGV4dAor ICovCit2b2lkIGRwdV9od19pbnRmX2Rlc3Ryb3koc3RydWN0IGRwdV9od19pbnRmICppbnRmKTsK KworI2VuZGlmIC8qX0RQVV9IV19JTlRGX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9kcHUxL2RwdV9od19sbS5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2h3X2xtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi40 YWI3MmIwZjA3YTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfaHdfbG0uYwpAQCAtMCwwICsxLDI2MSBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE1 LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCisgKi8KKworI2luY2x1ZGUgImRwdV9rbXMuaCIKKyNpbmNsdWRlICJkcHVfaHdfY2F0YWxv Zy5oIgorI2luY2x1ZGUgImRwdV9od2lvLmgiCisjaW5jbHVkZSAiZHB1X2h3X2xtLmgiCisjaW5j bHVkZSAiZHB1X2h3X21kc3MuaCIKKyNpbmNsdWRlICJkcHVfZGJnLmgiCisjaW5jbHVkZSAiZHB1 X2ttcy5oIgorCisjZGVmaW5lIExNX09QX01PREUgICAgICAgICAgICAgICAgICAgICAgICAweDAw CisjZGVmaW5lIExNX09VVF9TSVpFICAgICAgICAgICAgICAgICAgICAgICAweDA0CisjZGVmaW5l IExNX0JPUkRFUl9DT0xPUl8wICAgICAgICAgICAgICAgICAweDA4CisjZGVmaW5lIExNX0JPUkRF Ul9DT0xPUl8xICAgICAgICAgICAgICAgICAweDAxMAorCisvKiBUaGVzZSByZWdpc3RlciBhcmUg b2Zmc2V0IHRvIG1peGVyIGJhc2UgKyBzdGFnZSBiYXNlICovCisjZGVmaW5lIExNX0JMRU5EMF9P UCAgICAgICAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgTE1fQkxFTkQwX0NPTlNUX0FMUEhB ICAgICAgICAgICAgMHgwNAorI2RlZmluZSBMTV9GR19DT0xPUl9GSUxMX0NPTE9SXzAgICAgICAg ICAweDA4CisjZGVmaW5lIExNX0ZHX0NPTE9SX0ZJTExfQ09MT1JfMSAgICAgICAgIDB4MEMKKyNk ZWZpbmUgTE1fRkdfQ09MT1JfRklMTF9TSVpFICAgICAgICAgICAgMHgxMAorI2RlZmluZSBMTV9G R19DT0xPUl9GSUxMX1hZICAgICAgICAgICAgICAweDE0CisKKyNkZWZpbmUgTE1fQkxFTkQwX0ZH X0FMUEhBICAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBMTV9CTEVORDBfQkdfQUxQSEEgICAg ICAgICAgICAgICAweDA4CisKKyNkZWZpbmUgTE1fTUlTUl9DVFJMCQkJMHgzMTAKKyNkZWZpbmUg TE1fTUlTUl9TSUdOQVRVUkUJCTB4MzE0CisKK3N0YXRpYyBzdHJ1Y3QgZHB1X2xtX2NmZyAqX2xt X29mZnNldChlbnVtIGRwdV9sbSBtaXhlciwKKwkJc3RydWN0IGRwdV9tZHNzX2NmZyAqbSwKKwkJ dm9pZCBfX2lvbWVtICphZGRyLAorCQlzdHJ1Y3QgZHB1X2h3X2Jsa19yZWdfbWFwICpiKQorewor CWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG0tPm1peGVyX2NvdW50OyBpKyspIHsKKwkJaWYg KG1peGVyID09IG0tPm1peGVyW2ldLmlkKSB7CisJCQliLT5iYXNlX29mZiA9IGFkZHI7CisJCQli LT5ibGtfb2ZmID0gbS0+bWl4ZXJbaV0uYmFzZTsKKwkJCWItPmxlbmd0aCA9IG0tPm1peGVyW2ld LmxlbjsKKwkJCWItPmh3dmVyc2lvbiA9IG0tPmh3dmVyc2lvbjsKKwkJCWItPmxvZ19tYXNrID0g RFBVX0RCR19NQVNLX0xNOworCQkJcmV0dXJuICZtLT5taXhlcltpXTsKKwkJfQorCX0KKworCXJl dHVybiBFUlJfUFRSKC1FTk9NRU0pOworfQorCisvKioKKyAqIF9zdGFnZV9vZmZzZXQoKTogcmV0 dXJucyB0aGUgcmVsYXRpdmUgb2Zmc2V0IG9mIHRoZSBibGVuZCByZWdpc3RlcnMKKyAqIGZvciB0 aGUgc3RhZ2UgdG8gYmUgc2V0dXAKKyAqIEBjOiAgICAgbWl4ZXIgY3R4IGNvbnRhaW5zIHRoZSBt aXhlciB0byBiZSBwcm9ncmFtbWVkCisgKiBAc3RhZ2U6IHN0YWdlIGluZGV4IHRvIHNldHVwCisg Ki8KK3N0YXRpYyBpbmxpbmUgaW50IF9zdGFnZV9vZmZzZXQoc3RydWN0IGRwdV9od19taXhlciAq Y3R4LCBlbnVtIGRwdV9zdGFnZSBzdGFnZSkKK3sKKwljb25zdCBzdHJ1Y3QgZHB1X2xtX3N1Yl9i bGtzICpzYmxrID0gY3R4LT5jYXAtPnNibGs7CisJaW50IHJjOworCisJaWYgKHN0YWdlID09IERQ VV9TVEFHRV9CQVNFKQorCQlyYyA9IC1FSU5WQUw7CisJZWxzZSBpZiAoc3RhZ2UgPD0gc2Jsay0+ bWF4YmxlbmRzdGFnZXMpCisJCXJjID0gc2Jsay0+YmxlbmRzdGFnZV9iYXNlW3N0YWdlIC0gRFBV X1NUQUdFXzBdOworCWVsc2UKKwkJcmMgPSAtRUlOVkFMOworCisJcmV0dXJuIHJjOworfQorCitz dGF0aWMgdm9pZCBkcHVfaHdfbG1fc2V0dXBfb3V0KHN0cnVjdCBkcHVfaHdfbWl4ZXIgKmN0eCwK KwkJc3RydWN0IGRwdV9od19taXhlcl9jZmcgKm1peGVyKQoreworCXN0cnVjdCBkcHVfaHdfYmxr X3JlZ19tYXAgKmMgPSAmY3R4LT5odzsKKwl1MzIgb3V0c2l6ZTsKKwl1MzIgb3BfbW9kZTsKKwor CW9wX21vZGUgPSBEUFVfUkVHX1JFQUQoYywgTE1fT1BfTU9ERSk7CisKKwlvdXRzaXplID0gbWl4 ZXItPm91dF9oZWlnaHQgPDwgMTYgfCBtaXhlci0+b3V0X3dpZHRoOworCURQVV9SRUdfV1JJVEUo YywgTE1fT1VUX1NJWkUsIG91dHNpemUpOworCisJLyogU1BMSVRfTEVGVF9SSUdIVCAqLworCWlm IChtaXhlci0+cmlnaHRfbWl4ZXIpCisJCW9wX21vZGUgfD0gQklUKDMxKTsKKwllbHNlCisJCW9w X21vZGUgJj0gfkJJVCgzMSk7CisJRFBVX1JFR19XUklURShjLCBMTV9PUF9NT0RFLCBvcF9tb2Rl KTsKK30KKworc3RhdGljIHZvaWQgZHB1X2h3X2xtX3NldHVwX2JvcmRlcl9jb2xvcihzdHJ1Y3Qg ZHB1X2h3X21peGVyICpjdHgsCisJCXN0cnVjdCBkcHVfbWRzc19jb2xvciAqY29sb3IsCisJCXU4 IGJvcmRlcl9lbikKK3sKKwlzdHJ1Y3QgZHB1X2h3X2Jsa19yZWdfbWFwICpjID0gJmN0eC0+aHc7 CisKKwlpZiAoYm9yZGVyX2VuKSB7CisJCURQVV9SRUdfV1JJVEUoYywgTE1fQk9SREVSX0NPTE9S XzAsCisJCQkoY29sb3ItPmNvbG9yXzAgJiAweEZGRikgfAorCQkJKChjb2xvci0+Y29sb3JfMSAm IDB4RkZGKSA8PCAweDEwKSk7CisJCURQVV9SRUdfV1JJVEUoYywgTE1fQk9SREVSX0NPTE9SXzEs CisJCQkoY29sb3ItPmNvbG9yXzIgJiAweEZGRikgfAorCQkJKChjb2xvci0+Y29sb3JfMyAmIDB4 RkZGKSA8PCAweDEwKSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBkcHVfaHdfbG1fc2V0dXBfYmxl bmRfY29uZmlnX3NkbTg0NShzdHJ1Y3QgZHB1X2h3X21peGVyICpjdHgsCisJdTMyIHN0YWdlLCB1 MzIgZmdfYWxwaGEsIHUzMiBiZ19hbHBoYSwgdTMyIGJsZW5kX29wKQoreworCXN0cnVjdCBkcHVf aHdfYmxrX3JlZ19tYXAgKmMgPSAmY3R4LT5odzsKKwlpbnQgc3RhZ2Vfb2ZmOworCXUzMiBjb25z dF9hbHBoYTsKKworCWlmIChzdGFnZSA9PSBEUFVfU1RBR0VfQkFTRSkKKwkJcmV0dXJuOworCisJ c3RhZ2Vfb2ZmID0gX3N0YWdlX29mZnNldChjdHgsIHN0YWdlKTsKKwlpZiAoV0FSTl9PTihzdGFn ZV9vZmYgPCAwKSkKKwkJcmV0dXJuOworCisJY29uc3RfYWxwaGEgPSAoYmdfYWxwaGEgJiAweEZG KSB8ICgoZmdfYWxwaGEgJiAweEZGKSA8PCAxNik7CisJRFBVX1JFR19XUklURShjLCBMTV9CTEVO RDBfQ09OU1RfQUxQSEEgKyBzdGFnZV9vZmYsIGNvbnN0X2FscGhhKTsKKwlEUFVfUkVHX1dSSVRF KGMsIExNX0JMRU5EMF9PUCArIHN0YWdlX29mZiwgYmxlbmRfb3ApOworfQorCitzdGF0aWMgdm9p ZCBkcHVfaHdfbG1fc2V0dXBfYmxlbmRfY29uZmlnKHN0cnVjdCBkcHVfaHdfbWl4ZXIgKmN0eCwK Kwl1MzIgc3RhZ2UsIHUzMiBmZ19hbHBoYSwgdTMyIGJnX2FscGhhLCB1MzIgYmxlbmRfb3ApCit7 CisJc3RydWN0IGRwdV9od19ibGtfcmVnX21hcCAqYyA9ICZjdHgtPmh3OworCWludCBzdGFnZV9v ZmY7CisKKwlpZiAoc3RhZ2UgPT0gRFBVX1NUQUdFX0JBU0UpCisJCXJldHVybjsKKworCXN0YWdl X29mZiA9IF9zdGFnZV9vZmZzZXQoY3R4LCBzdGFnZSk7CisJaWYgKFdBUk5fT04oc3RhZ2Vfb2Zm IDwgMCkpCisJCXJldHVybjsKKworCURQVV9SRUdfV1JJVEUoYywgTE1fQkxFTkQwX0ZHX0FMUEhB ICsgc3RhZ2Vfb2ZmLCBmZ19hbHBoYSk7CisJRFBVX1JFR19XUklURShjLCBMTV9CTEVORDBfQkdf QUxQSEEgKyBzdGFnZV9vZmYsIGJnX2FscGhhKTsKKwlEUFVfUkVHX1dSSVRFKGMsIExNX0JMRU5E MF9PUCArIHN0YWdlX29mZiwgYmxlbmRfb3ApOworfQorCitzdGF0aWMgdm9pZCBkcHVfaHdfbG1f c2V0dXBfY29sb3IzKHN0cnVjdCBkcHVfaHdfbWl4ZXIgKmN0eCwKKwl1aW50MzJfdCBtaXhlcl9v cF9tb2RlKQoreworCXN0cnVjdCBkcHVfaHdfYmxrX3JlZ19tYXAgKmMgPSAmY3R4LT5odzsKKwlp bnQgb3BfbW9kZTsKKworCS8qIHJlYWQgdGhlIGV4aXN0aW5nIG9wX21vZGUgY29uZmlndXJhdGlv biAqLworCW9wX21vZGUgPSBEUFVfUkVHX1JFQUQoYywgTE1fT1BfTU9ERSk7CisKKwlvcF9tb2Rl ID0gKG9wX21vZGUgJiAoQklUKDMxKSB8IEJJVCgzMCkpKSB8IG1peGVyX29wX21vZGU7CisKKwlE UFVfUkVHX1dSSVRFKGMsIExNX09QX01PREUsIG9wX21vZGUpOworfQorCitzdGF0aWMgdm9pZCBk cHVfaHdfbG1fZ2Moc3RydWN0IGRwdV9od19taXhlciAqbWl4ZXIsCisJCQl2b2lkICpjZmcpCit7 Cit9CisKK3N0YXRpYyB2b2lkIGRwdV9od19sbV9zZXR1cF9taXNyKHN0cnVjdCBkcHVfaHdfbWl4 ZXIgKmN0eCwKKwkJCQlib29sIGVuYWJsZSwgdTMyIGZyYW1lX2NvdW50KQoreworCXN0cnVjdCBk cHVfaHdfYmxrX3JlZ19tYXAgKmMgPSAmY3R4LT5odzsKKwl1MzIgY29uZmlnID0gMDsKKworCURQ VV9SRUdfV1JJVEUoYywgTE1fTUlTUl9DVFJMLCBNSVNSX0NUUkxfU1RBVFVTX0NMRUFSKTsKKwkv KiBjbGVhciBtaXNyIGRhdGEgKi8KKwl3bWIoKTsKKworCWlmIChlbmFibGUpCisJCWNvbmZpZyA9 IChmcmFtZV9jb3VudCAmIE1JU1JfRlJBTUVfQ09VTlRfTUFTSykgfAorCQkJTUlTUl9DVFJMX0VO QUJMRSB8IElOVEZfTUlTUl9DVFJMX0ZSRUVfUlVOX01BU0s7CisKKwlEUFVfUkVHX1dSSVRFKGMs IExNX01JU1JfQ1RSTCwgY29uZmlnKTsKK30KKworc3RhdGljIHUzMiBkcHVfaHdfbG1fY29sbGVj dF9taXNyKHN0cnVjdCBkcHVfaHdfbWl4ZXIgKmN0eCkKK3sKKwlzdHJ1Y3QgZHB1X2h3X2Jsa19y ZWdfbWFwICpjID0gJmN0eC0+aHc7CisKKwlyZXR1cm4gRFBVX1JFR19SRUFEKGMsIExNX01JU1Jf U0lHTkFUVVJFKTsKK30KKworc3RhdGljIHZvaWQgX3NldHVwX21peGVyX29wcyhzdHJ1Y3QgZHB1 X21kc3NfY2ZnICptLAorCQlzdHJ1Y3QgZHB1X2h3X2xtX29wcyAqb3BzLAorCQl1bnNpZ25lZCBs b25nIGZlYXR1cmVzKQoreworCW9wcy0+c2V0dXBfbWl4ZXJfb3V0ID0gZHB1X2h3X2xtX3NldHVw X291dDsKKwlpZiAoSVNfU0RNODQ1X1RBUkdFVChtLT5od3ZlcnNpb24pIHx8IElTX1NETTY3MF9U QVJHRVQobS0+aHd2ZXJzaW9uKSkKKwkJb3BzLT5zZXR1cF9ibGVuZF9jb25maWcgPSBkcHVfaHdf bG1fc2V0dXBfYmxlbmRfY29uZmlnX3NkbTg0NTsKKwllbHNlCisJCW9wcy0+c2V0dXBfYmxlbmRf Y29uZmlnID0gZHB1X2h3X2xtX3NldHVwX2JsZW5kX2NvbmZpZzsKKwlvcHMtPnNldHVwX2FscGhh X291dCA9IGRwdV9od19sbV9zZXR1cF9jb2xvcjM7CisJb3BzLT5zZXR1cF9ib3JkZXJfY29sb3Ig PSBkcHVfaHdfbG1fc2V0dXBfYm9yZGVyX2NvbG9yOworCW9wcy0+c2V0dXBfZ2MgPSBkcHVfaHdf bG1fZ2M7CisJb3BzLT5zZXR1cF9taXNyID0gZHB1X2h3X2xtX3NldHVwX21pc3I7CisJb3BzLT5j b2xsZWN0X21pc3IgPSBkcHVfaHdfbG1fY29sbGVjdF9taXNyOworfTsKKworc3RhdGljIHN0cnVj dCBkcHVfaHdfYmxrX29wcyBkcHVfaHdfb3BzID0geworCS5zdGFydCA9IE5VTEwsCisJLnN0b3Ag PSBOVUxMLAorfTsKKworc3RydWN0IGRwdV9od19taXhlciAqZHB1X2h3X2xtX2luaXQoZW51bSBk cHVfbG0gaWR4LAorCQl2b2lkIF9faW9tZW0gKmFkZHIsCisJCXN0cnVjdCBkcHVfbWRzc19jZmcg Km0pCit7CisJc3RydWN0IGRwdV9od19taXhlciAqYzsKKwlzdHJ1Y3QgZHB1X2xtX2NmZyAqY2Zn OworCWludCByYzsKKworCWMgPSBremFsbG9jKHNpemVvZigqYyksIEdGUF9LRVJORUwpOworCWlm ICghYykKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwljZmcgPSBfbG1fb2Zmc2V0KGlk eCwgbSwgYWRkciwgJmMtPmh3KTsKKwlpZiAoSVNfRVJSX09SX05VTEwoY2ZnKSkgeworCQlrZnJl ZShjKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQorCisJLyogQXNzaWduIG9wcyAq LworCWMtPmlkeCA9IGlkeDsKKwljLT5jYXAgPSBjZmc7CisJX3NldHVwX21peGVyX29wcyhtLCAm Yy0+b3BzLCBjLT5jYXAtPmZlYXR1cmVzKTsKKworCXJjID0gZHB1X2h3X2Jsa19pbml0KCZjLT5i YXNlLCBEUFVfSFdfQkxLX0xNLCBpZHgsICZkcHVfaHdfb3BzKTsKKwlpZiAocmMpIHsKKwkJRFBV X0VSUk9SKCJmYWlsZWQgdG8gaW5pdCBodyBibGsgJWRcbiIsIHJjKTsKKwkJZ290byBibGtfaW5p dF9lcnJvcjsKKwl9CisKKwlyZXR1cm4gYzsKKworYmxrX2luaXRfZXJyb3I6CisJa3pmcmVlKGMp OworCisJcmV0dXJuIEVSUl9QVFIocmMpOworfQorCit2b2lkIGRwdV9od19sbV9kZXN0cm95KHN0 cnVjdCBkcHVfaHdfbWl4ZXIgKmxtKQoreworCWlmIChsbSkKKwkJZHB1X2h3X2Jsa19kZXN0cm95 KCZsbS0+YmFzZSk7CisJa2ZyZWUobG0pOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X2h3X2xtLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfaHdfbG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmUy OWU1ZGFiMzFiZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9od19sbS5oCkBAIC0wLDAgKzEsMTIyIEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTUt MjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAorICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVk IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KKyAqLworCisjaWZuZGVmIF9EUFVfSFdfTE1fSAorI2RlZmluZSBfRFBVX0hXX0xNX0gKKwor I2luY2x1ZGUgImRwdV9od19tZHNzLmgiCisjaW5jbHVkZSAiZHB1X2h3X3V0aWwuaCIKKyNpbmNs dWRlICJkcHVfaHdfYmxrLmgiCisKK3N0cnVjdCBkcHVfaHdfbWl4ZXI7CisKK3N0cnVjdCBkcHVf aHdfbWl4ZXJfY2ZnIHsKKwl1MzIgb3V0X3dpZHRoOworCXUzMiBvdXRfaGVpZ2h0OworCWJvb2wg cmlnaHRfbWl4ZXI7CisJaW50IGZsYWdzOworfTsKKworc3RydWN0IGRwdV9od19jb2xvcjNfY2Zn IHsKKwl1OCBrZWVwX2ZnW0RQVV9TVEFHRV9NQVhdOworfTsKKworLyoqCisgKgorICogc3RydWN0 IGRwdV9od19sbV9vcHMgOiBJbnRlcmZhY2UgdG8gdGhlIG1peGVyIEh3IGRyaXZlciBmdW5jdGlv bnMKKyAqICBBc3N1bXB0aW9uIGlzIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGJlIGNhbGxlZCBhZnRl ciBjbG9ja3MgYXJlIGVuYWJsZWQKKyAqLworc3RydWN0IGRwdV9od19sbV9vcHMgeworCS8qCisJ ICogU2V0cyB1cCBtaXhlciBvdXRwdXQgd2lkdGggYW5kIGhlaWdodAorCSAqIGFuZCBib3JkZXIg Y29sb3IgaWYgZW5hYmxlZAorCSAqLworCXZvaWQgKCpzZXR1cF9taXhlcl9vdXQpKHN0cnVjdCBk cHVfaHdfbWl4ZXIgKmN0eCwKKwkJc3RydWN0IGRwdV9od19taXhlcl9jZmcgKmNmZyk7CisKKwkv KgorCSAqIEFscGhhIGJsZW5kaW5nIGNvbmZpZ3VyYXRpb24KKwkgKiBmb3IgdGhlIHNwZWNpZmll ZCBzdGFnZQorCSAqLworCXZvaWQgKCpzZXR1cF9ibGVuZF9jb25maWcpKHN0cnVjdCBkcHVfaHdf bWl4ZXIgKmN0eCwgdWludDMyX3Qgc3RhZ2UsCisJCXVpbnQzMl90IGZnX2FscGhhLCB1aW50MzJf dCBiZ19hbHBoYSwgdWludDMyX3QgYmxlbmRfb3ApOworCisJLyoKKwkgKiBBbHBoYSBjb2xvciBj b21wb25lbnQgc2VsZWN0aW9uIGZyb20gZWl0aGVyIGZnIG9yIGJnCisJICovCisJdm9pZCAoKnNl dHVwX2FscGhhX291dCkoc3RydWN0IGRwdV9od19taXhlciAqY3R4LCB1aW50MzJfdCBtaXhlcl9v cCk7CisKKwkvKioKKwkgKiBzZXR1cF9ib3JkZXJfY29sb3IgOiBlbmFibGUvZGlzYWJsZSBib3Jk ZXIgY29sb3IKKwkgKi8KKwl2b2lkICgqc2V0dXBfYm9yZGVyX2NvbG9yKShzdHJ1Y3QgZHB1X2h3 X21peGVyICpjdHgsCisJCXN0cnVjdCBkcHVfbWRzc19jb2xvciAqY29sb3IsCisJCXU4IGJvcmRl cl9lbik7CisJLyoqCisJICogc2V0dXBfZ2MgOiBlbmFibGUvZGlzYWJsZSBnYW1tYSBjb3JyZWN0 aW9uIGZlYXR1cmUKKwkgKi8KKwl2b2lkICgqc2V0dXBfZ2MpKHN0cnVjdCBkcHVfaHdfbWl4ZXIg Km1peGVyLAorCQkJdm9pZCAqY2ZnKTsKKworCS8qIHNldHVwX21pc3I6IGVuYWJsZXMvZGlzYWJs ZXMgTUlTUiBpbiBIVyByZWdpc3RlciAqLworCXZvaWQgKCpzZXR1cF9taXNyKShzdHJ1Y3QgZHB1 X2h3X21peGVyICpjdHgsCisJCQlib29sIGVuYWJsZSwgdTMyIGZyYW1lX2NvdW50KTsKKworCS8q IGNvbGxlY3RfbWlzcjogcmVhZHMgYW5kIHN0b3JlcyBNSVNSIGRhdGEgZnJvbSBIVyByZWdpc3Rl ciAqLworCXUzMiAoKmNvbGxlY3RfbWlzcikoc3RydWN0IGRwdV9od19taXhlciAqY3R4KTsKK307 CisKK3N0cnVjdCBkcHVfaHdfbWl4ZXIgeworCXN0cnVjdCBkcHVfaHdfYmxrIGJhc2U7CisJc3Ry dWN0IGRwdV9od19ibGtfcmVnX21hcCBodzsKKworCS8qIGxtICovCisJZW51bSBkcHVfbG0gIGlk eDsKKwljb25zdCBzdHJ1Y3QgZHB1X2xtX2NmZyAgICpjYXA7CisJY29uc3Qgc3RydWN0IGRwdV9t ZHBfY2ZnICAqbWRwOworCWNvbnN0IHN0cnVjdCBkcHVfY3RsX2NmZyAgKmN0bDsKKworCS8qIG9w cyAqLworCXN0cnVjdCBkcHVfaHdfbG1fb3BzIG9wczsKKworCS8qIHN0b3JlIG1peGVyIGluZm8g c3BlY2lmaWMgdG8gZGlzcGxheSAqLworCXN0cnVjdCBkcHVfaHdfbWl4ZXJfY2ZnIGNmZzsKK307 CisKKy8qKgorICogdG9fZHB1X2h3X21peGVyIC0gY29udmVydCBiYXNlIG9iamVjdCBkcHVfaHdf YmFzZSB0byBjb250YWluZXIKKyAqIEBodzogUG9pbnRlciB0byBiYXNlIGhhcmR3YXJlIGJsb2Nr CisgKiByZXR1cm46IFBvaW50ZXIgdG8gaGFyZHdhcmUgYmxvY2sgY29udGFpbmVyCisgKi8KK3N0 YXRpYyBpbmxpbmUgc3RydWN0IGRwdV9od19taXhlciAqdG9fZHB1X2h3X21peGVyKHN0cnVjdCBk cHVfaHdfYmxrICpodykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGh3LCBzdHJ1Y3QgZHB1X2h3 X21peGVyLCBiYXNlKTsKK30KKworLyoqCisgKiBkcHVfaHdfbG1faW5pdCgpOiBJbml0aWFsaXpl cyB0aGUgbWl4ZXIgaHcgZHJpdmVyIG9iamVjdC4KKyAqIHNob3VsZCBiZSBjYWxsZWQgb25jZSBi ZWZvcmUgYWNjZXNzaW5nIGV2ZXJ5IG1peGVyLgorICogQGlkeDogIG1peGVyIGluZGV4IGZvciB3 aGljaCBkcml2ZXIgb2JqZWN0IGlzIHJlcXVpcmVkCisgKiBAYWRkcjogbWFwcGVkIHJlZ2lzdGVy IGlvIGFkZHJlc3Mgb2YgTURQCisgKiBAbSA6ICAgcG9pbnRlciB0byBtZHNzIGNhdGFsb2cgZGF0 YQorICovCitzdHJ1Y3QgZHB1X2h3X21peGVyICpkcHVfaHdfbG1faW5pdChlbnVtIGRwdV9sbSBp ZHgsCisJCXZvaWQgX19pb21lbSAqYWRkciwKKwkJc3RydWN0IGRwdV9tZHNzX2NmZyAqbSk7CisK Ky8qKgorICogZHB1X2h3X2xtX2Rlc3Ryb3koKTogRGVzdHJveXMgbGF5ZXIgbWl4ZXIgZHJpdmVy IGNvbnRleHQKKyAqIEBsbTogICBQb2ludGVyIHRvIExNIGRyaXZlciBjb250ZXh0CisgKi8KK3Zv aWQgZHB1X2h3X2xtX2Rlc3Ryb3koc3RydWN0IGRwdV9od19taXhlciAqbG0pOworCisjZW5kaWYg LypfRFBVX0hXX0xNX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9od19tZHNzLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdf bWRzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMzVlNmJmOTMw OTI0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X2h3X21kc3MuaApAQCAtMCwwICsxLDQ2NSBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE1LTIwMTgs IFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg Ki8KKworI2lmbmRlZiBfRFBVX0hXX01EU1NfSAorI2RlZmluZSBfRFBVX0hXX01EU1NfSAorCisj aW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisKKyNpbmNs dWRlICJtc21fZHJ2LmgiCisKKyNkZWZpbmUgRFBVX0RCR19OQU1FCQkJImRwdSIKKworI2RlZmlu ZSBEUFVfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgIDAKKworI2lmbmRlZiBEUFVfQ1NDX01B VFJJWF9DT0VGRl9TSVpFCisjZGVmaW5lIERQVV9DU0NfTUFUUklYX0NPRUZGX1NJWkUJOQorI2Vu ZGlmCisKKyNpZm5kZWYgRFBVX0NTQ19DTEFNUF9TSVpFCisjZGVmaW5lIERQVV9DU0NfQ0xBTVBf U0laRQkJNgorI2VuZGlmCisKKyNpZm5kZWYgRFBVX0NTQ19CSUFTX1NJWkUKKyNkZWZpbmUgRFBV X0NTQ19CSUFTX1NJWkUJCTMKKyNlbmRpZgorCisjaWZuZGVmIERQVV9NQVhfUExBTkVTCisjZGVm aW5lIERQVV9NQVhfUExBTkVTCQkJNAorI2VuZGlmCisKKyNkZWZpbmUgUElQRVNfUEVSX1NUQUdF CQkJMgorI2lmbmRlZiBEUFVfTUFYX0RFX0NVUlZFUworI2RlZmluZSBEUFVfTUFYX0RFX0NVUlZF UwkJMworI2VuZGlmCisKK2VudW0gZHB1X2Zvcm1hdF9mbGFncyB7CisJRFBVX0ZPUk1BVF9GTEFH X1lVVl9CSVQsCisJRFBVX0ZPUk1BVF9GTEFHX0RYX0JJVCwKKwlEUFVfRk9STUFUX0ZMQUdfQ09N UFJFU1NFRF9CSVQsCisJRFBVX0ZPUk1BVF9GTEFHX0JJVF9NQVgsCit9OworCisjZGVmaW5lIERQ VV9GT1JNQVRfRkxBR19ZVVYJCUJJVChEUFVfRk9STUFUX0ZMQUdfWVVWX0JJVCkKKyNkZWZpbmUg RFBVX0ZPUk1BVF9GTEFHX0RYCQlCSVQoRFBVX0ZPUk1BVF9GTEFHX0RYX0JJVCkKKyNkZWZpbmUg RFBVX0ZPUk1BVF9GTEFHX0NPTVBSRVNTRUQJQklUKERQVV9GT1JNQVRfRkxBR19DT01QUkVTU0VE X0JJVCkKKyNkZWZpbmUgRFBVX0ZPUk1BVF9JU19ZVVYoWCkJCVwKKwkodGVzdF9iaXQoRFBVX0ZP Uk1BVF9GTEFHX1lVVl9CSVQsIChYKS0+ZmxhZykpCisjZGVmaW5lIERQVV9GT1JNQVRfSVNfRFgo WCkJCVwKKwkodGVzdF9iaXQoRFBVX0ZPUk1BVF9GTEFHX0RYX0JJVCwgKFgpLT5mbGFnKSkKKyNk ZWZpbmUgRFBVX0ZPUk1BVF9JU19MSU5FQVIoWCkJCSgoWCktPmZldGNoX21vZGUgPT0gRFBVX0ZF VENIX0xJTkVBUikKKyNkZWZpbmUgRFBVX0ZPUk1BVF9JU19USUxFKFgpIFwKKwkoKChYKS0+ZmV0 Y2hfbW9kZSA9PSBEUFVfRkVUQ0hfVUJXQykgJiYgXAorCQkJIXRlc3RfYml0KERQVV9GT1JNQVRf RkxBR19DT01QUkVTU0VEX0JJVCwgKFgpLT5mbGFnKSkKKyNkZWZpbmUgRFBVX0ZPUk1BVF9JU19V QldDKFgpIFwKKwkoKChYKS0+ZmV0Y2hfbW9kZSA9PSBEUFVfRkVUQ0hfVUJXQykgJiYgXAorCQkJ dGVzdF9iaXQoRFBVX0ZPUk1BVF9GTEFHX0NPTVBSRVNTRURfQklULCAoWCktPmZsYWcpKQorCisj ZGVmaW5lIERQVV9CTEVORF9GR19BTFBIQV9GR19DT05TVAkoMCA8PCAwKQorI2RlZmluZSBEUFVf QkxFTkRfRkdfQUxQSEFfQkdfQ09OU1QJKDEgPDwgMCkKKyNkZWZpbmUgRFBVX0JMRU5EX0ZHX0FM UEhBX0ZHX1BJWEVMCSgyIDw8IDApCisjZGVmaW5lIERQVV9CTEVORF9GR19BTFBIQV9CR19QSVhF TAkoMyA8PCAwKQorI2RlZmluZSBEUFVfQkxFTkRfRkdfSU5WX0FMUEhBCQkoMSA8PCAyKQorI2Rl ZmluZSBEUFVfQkxFTkRfRkdfTU9EX0FMUEhBCQkoMSA8PCAzKQorI2RlZmluZSBEUFVfQkxFTkRf RkdfSU5WX01PRF9BTFBIQQkoMSA8PCA0KQorI2RlZmluZSBEUFVfQkxFTkRfRkdfVFJBTlNQX0VO CQkoMSA8PCA1KQorI2RlZmluZSBEUFVfQkxFTkRfQkdfQUxQSEFfRkdfQ09OU1QJKDAgPDwgOCkK KyNkZWZpbmUgRFBVX0JMRU5EX0JHX0FMUEhBX0JHX0NPTlNUCSgxIDw8IDgpCisjZGVmaW5lIERQ VV9CTEVORF9CR19BTFBIQV9GR19QSVhFTAkoMiA8PCA4KQorI2RlZmluZSBEUFVfQkxFTkRfQkdf QUxQSEFfQkdfUElYRUwJKDMgPDwgOCkKKyNkZWZpbmUgRFBVX0JMRU5EX0JHX0lOVl9BTFBIQQkJ KDEgPDwgMTApCisjZGVmaW5lIERQVV9CTEVORF9CR19NT0RfQUxQSEEJCSgxIDw8IDExKQorI2Rl ZmluZSBEUFVfQkxFTkRfQkdfSU5WX01PRF9BTFBIQQkoMSA8PCAxMikKKyNkZWZpbmUgRFBVX0JM RU5EX0JHX1RSQU5TUF9FTgkJKDEgPDwgMTMpCisKKyNkZWZpbmUgRFBVX1ZTWU5DMF9TT1VSQ0Vf R1BJTwkJMAorI2RlZmluZSBEUFVfVlNZTkMxX1NPVVJDRV9HUElPCQkxCisjZGVmaW5lIERQVV9W U1lOQzJfU09VUkNFX0dQSU8JCTIKKyNkZWZpbmUgRFBVX1ZTWU5DX1NPVVJDRV9JTlRGXzAJCTMK KyNkZWZpbmUgRFBVX1ZTWU5DX1NPVVJDRV9JTlRGXzEJCTQKKyNkZWZpbmUgRFBVX1ZTWU5DX1NP VVJDRV9JTlRGXzIJCTUKKyNkZWZpbmUgRFBVX1ZTWU5DX1NPVVJDRV9JTlRGXzMJCTYKKyNkZWZp bmUgRFBVX1ZTWU5DX1NPVVJDRV9XRF9USU1FUl80CTExCisjZGVmaW5lIERQVV9WU1lOQ19TT1VS Q0VfV0RfVElNRVJfMwkxMgorI2RlZmluZSBEUFVfVlNZTkNfU09VUkNFX1dEX1RJTUVSXzIJMTMK KyNkZWZpbmUgRFBVX1ZTWU5DX1NPVVJDRV9XRF9USU1FUl8xCTE0CisjZGVmaW5lIERQVV9WU1lO Q19TT1VSQ0VfV0RfVElNRVJfMAkxNQorCitlbnVtIGRwdV9od19ibGtfdHlwZSB7CisJRFBVX0hX X0JMS19UT1AgPSAwLAorCURQVV9IV19CTEtfU1NQUCwKKwlEUFVfSFdfQkxLX0xNLAorCURQVV9I V19CTEtfQ1RMLAorCURQVV9IV19CTEtfQ0RNLAorCURQVV9IV19CTEtfUElOR1BPTkcsCisJRFBV X0hXX0JMS19JTlRGLAorCURQVV9IV19CTEtfV0IsCisJRFBVX0hXX0JMS19NQVgsCit9OworCitl bnVtIGRwdV9tZHAgeworCU1EUF9UT1AgPSAweDEsCisJTURQX01BWCwKK307CisKK2VudW0gZHB1 X3NzcHAgeworCVNTUFBfTk9ORSwKKwlTU1BQX1ZJRzAsCisJU1NQUF9WSUcxLAorCVNTUFBfVklH MiwKKwlTU1BQX1ZJRzMsCisJU1NQUF9SR0IwLAorCVNTUFBfUkdCMSwKKwlTU1BQX1JHQjIsCisJ U1NQUF9SR0IzLAorCVNTUFBfRE1BMCwKKwlTU1BQX0RNQTEsCisJU1NQUF9ETUEyLAorCVNTUFBf RE1BMywKKwlTU1BQX0NVUlNPUjAsCisJU1NQUF9DVVJTT1IxLAorCVNTUFBfTUFYCit9OworCitl bnVtIGRwdV9zc3BwX3R5cGUgeworCVNTUFBfVFlQRV9WSUcsCisJU1NQUF9UWVBFX1JHQiwKKwlT U1BQX1RZUEVfRE1BLAorCVNTUFBfVFlQRV9DVVJTT1IsCisJU1NQUF9UWVBFX01BWAorfTsKKwor ZW51bSBkcHVfbG0geworCUxNXzAgPSAxLAorCUxNXzEsCisJTE1fMiwKKwlMTV8zLAorCUxNXzQs CisJTE1fNSwKKwlMTV82LAorCUxNX01BWAorfTsKKworZW51bSBkcHVfc3RhZ2UgeworCURQVV9T VEFHRV9CQVNFID0gMCwKKwlEUFVfU1RBR0VfMCwKKwlEUFVfU1RBR0VfMSwKKwlEUFVfU1RBR0Vf MiwKKwlEUFVfU1RBR0VfMywKKwlEUFVfU1RBR0VfNCwKKwlEUFVfU1RBR0VfNSwKKwlEUFVfU1RB R0VfNiwKKwlEUFVfU1RBR0VfNywKKwlEUFVfU1RBR0VfOCwKKwlEUFVfU1RBR0VfOSwKKwlEUFVf U1RBR0VfMTAsCisJRFBVX1NUQUdFX01BWAorfTsKK2VudW0gZHB1X2RzcHAgeworCURTUFBfMCA9 IDEsCisJRFNQUF8xLAorCURTUFBfMiwKKwlEU1BQXzMsCisJRFNQUF9NQVgKK307CisKK2VudW0g ZHB1X2RzIHsKKwlEU19UT1AsCisJRFNfMCwKKwlEU18xLAorCURTX01BWAorfTsKKworZW51bSBk cHVfY3RsIHsKKwlDVExfMCA9IDEsCisJQ1RMXzEsCisJQ1RMXzIsCisJQ1RMXzMsCisJQ1RMXzQs CisJQ1RMX01BWAorfTsKKworZW51bSBkcHVfY2RtIHsKKwlDRE1fMCA9IDEsCisJQ0RNXzEsCisJ Q0RNX01BWAorfTsKKworZW51bSBkcHVfcGluZ3BvbmcgeworCVBJTkdQT05HXzAgPSAxLAorCVBJ TkdQT05HXzEsCisJUElOR1BPTkdfMiwKKwlQSU5HUE9OR18zLAorCVBJTkdQT05HXzQsCisJUElO R1BPTkdfUzAsCisJUElOR1BPTkdfTUFYCit9OworCitlbnVtIGRwdV9pbnRmIHsKKwlJTlRGXzAg PSAxLAorCUlOVEZfMSwKKwlJTlRGXzIsCisJSU5URl8zLAorCUlOVEZfNCwKKwlJTlRGXzUsCisJ SU5URl82LAorCUlOVEZfTUFYCit9OworCitlbnVtIGRwdV9pbnRmX3R5cGUgeworCUlOVEZfTk9O RSA9IDB4MCwKKwlJTlRGX0RTSSA9IDB4MSwKKwlJTlRGX0hETUkgPSAweDMsCisJSU5URl9MQ0RD ID0gMHg1LAorCUlOVEZfRURQID0gMHg5LAorCUlOVEZfRFAgPSAweGEsCisJSU5URl9UWVBFX01B WCwKKworCS8qIHZpcnR1YWwgaW50ZXJmYWNlcyAqLworCUlOVEZfV0IgPSAweDEwMCwKK307CisK K2VudW0gZHB1X2ludGZfbW9kZSB7CisJSU5URl9NT0RFX05PTkUgPSAwLAorCUlOVEZfTU9ERV9D TUQsCisJSU5URl9NT0RFX1ZJREVPLAorCUlOVEZfTU9ERV9XQl9CTE9DSywKKwlJTlRGX01PREVf V0JfTElORSwKKwlJTlRGX01PREVfTUFYCit9OworCitlbnVtIGRwdV93YiB7CisJV0JfMCA9IDEs CisJV0JfMSwKKwlXQl8yLAorCVdCXzMsCisJV0JfTUFYCit9OworCitlbnVtIGRwdV9hZCB7CisJ QURfMCA9IDB4MSwKKwlBRF8xLAorCUFEX01BWAorfTsKKworZW51bSBkcHVfY3diIHsKKwlDV0Jf MCA9IDB4MSwKKwlDV0JfMSwKKwlDV0JfMiwKKwlDV0JfMywKKwlDV0JfTUFYCit9OworCitlbnVt IGRwdV93ZF90aW1lciB7CisJV0RfVElNRVJfMCA9IDB4MSwKKwlXRF9USU1FUl8xLAorCVdEX1RJ TUVSXzIsCisJV0RfVElNRVJfMywKKwlXRF9USU1FUl80LAorCVdEX1RJTUVSXzUsCisJV0RfVElN RVJfTUFYCit9OworCitlbnVtIGRwdV92YmlmIHsKKwlWQklGXzAsCisJVkJJRl8xLAorCVZCSUZf TUFYLAorCVZCSUZfUlQgPSBWQklGXzAsCisJVkJJRl9OUlQgPSBWQklGXzEKK307CisKK2VudW0g ZHB1X2lvbW11X2RvbWFpbiB7CisJRFBVX0lPTU1VX0RPTUFJTl9VTlNFQ1VSRSwKKwlEUFVfSU9N TVVfRE9NQUlOX1NFQ1VSRSwKKwlEUFVfSU9NTVVfRE9NQUlOX01BWAorfTsKKworLyoqCisgKiBE UFUgSFcsQ29tcG9uZW50IG9yZGVyIGNvbG9yIG1hcAorICovCitlbnVtIHsKKwlDMF9HX1kgPSAw LAorCUMxX0JfQ2IgPSAxLAorCUMyX1JfQ3IgPSAyLAorCUMzX0FMUEhBID0gMworfTsKKworLyoq CisgKiBlbnVtIGRwdV9wbGFuZV90eXBlIC0gZGVmaW5lcyBob3cgdGhlIGNvbG9yIGNvbXBvbmVu dCBwaXhlbCBwYWNraW5nCisgKiBARFBVX1BMQU5FX0lOVEVSTEVBVkVEICAgOiBDb2xvciBjb21w b25lbnRzIGluIHNpbmdsZSBwbGFuZQorICogQERQVV9QTEFORV9QTEFOQVIgICAgICAgIDogQ29s b3IgY29tcG9uZW50IGluIHNlcGFyYXRlIHBsYW5lcworICogQERQVV9QTEFORV9QU0VVRE9fUExB TkFSIDogQ2hyb21hIGNvbXBvbmVudHMgaW50ZXJsZWF2ZWQgaW4gc2VwYXJhdGUgcGxhbmUKKyAq LworZW51bSBkcHVfcGxhbmVfdHlwZSB7CisJRFBVX1BMQU5FX0lOVEVSTEVBVkVELAorCURQVV9Q TEFORV9QTEFOQVIsCisJRFBVX1BMQU5FX1BTRVVET19QTEFOQVIsCit9OworCisvKioKKyAqIGVu dW0gZHB1X2Nocm9tYV9zYW1wX3R5cGUgLSBjaHJvbWEgc3ViLXNhbXBsbmcgdHlwZQorICogQERQ VV9DSFJPTUFfUkdCICAgOiBObyBjaHJvbWEgc3Vic2FtcGxpbmcKKyAqIEBEUFVfQ0hST01BX0gy VjEgIDogQ2hyb21hIHBpeGVscyBhcmUgaG9yaXpvbnRhbGx5IHN1YnNhbXBsZWQKKyAqIEBEUFVf Q0hST01BX0gxVjIgIDogQ2hyb21hIHBpeGVscyBhcmUgdmVydGljYWxseSBzdWJzYW1wbGVkCisg KiBARFBVX0NIUk9NQV80MjAgICA6IDQyMCBzdWJzYW1wbGluZworICovCitlbnVtIGRwdV9jaHJv bWFfc2FtcF90eXBlIHsKKwlEUFVfQ0hST01BX1JHQiwKKwlEUFVfQ0hST01BX0gyVjEsCisJRFBV X0NIUk9NQV9IMVYyLAorCURQVV9DSFJPTUFfNDIwCit9OworCisvKioKKyAqIGRwdV9mZXRjaF90 eXBlIC0gRGVmaW5lcyBIb3cgRFBVIEhXIGZldGNoZXMgZGF0YQorICogQERQVV9GRVRDSF9MSU5F QVIgICA6IGZldGNoIGlzIGxpbmUgYnkgbGluZQorICogQERQVV9GRVRDSF9USUxFICAgICA6IGZl dGNoZXMgZGF0YSBpbiBaIG9yZGVyIGZyb20gYSB0aWxlCisgKiBARFBVX0ZFVENIX1VCV0MgICAg IDogZmV0Y2ggYW5kIGRlY29tcHJlc3MgZGF0YQorICovCitlbnVtIGRwdV9mZXRjaF90eXBlIHsK KwlEUFVfRkVUQ0hfTElORUFSLAorCURQVV9GRVRDSF9USUxFLAorCURQVV9GRVRDSF9VQldDCit9 OworCisvKioKKyAqIFZhbHVlIG9mIGVudW0gY2hvc2VuIHRvIGZpdCB0aGUgbnVtYmVyIG9mIGJp dHMKKyAqIGV4cGVjdGVkIGJ5IHRoZSBIVyBwcm9ncmFtbWluZy4KKyAqLworZW51bSB7CisJQ09M T1JfQUxQSEFfMUJJVCA9IDAsCisJQ09MT1JfQUxQSEFfNEJJVCA9IDEsCisJQ09MT1JfNEJJVCA9 IDAsCisJQ09MT1JfNUJJVCA9IDEsIC8qIE5vIDUtYml0IEFscGhhICovCisJQ09MT1JfNkJJVCA9 IDIsIC8qIDYtQml0IEFscGhhIGFsc28gPSAyICovCisJQ09MT1JfOEJJVCA9IDMsIC8qIDgtQml0 IEFscGhhIGFsc28gPSAzICovCit9OworCisvKioKKyAqIGVudW0gZHB1XzNkX2JsZW5kX21vZGUK KyAqIERlc3JpYmVzIGhvdyB0aGUgM2QgZGF0YSBpcyBibGVuZGVkCisgKiBAQkxFTkRfM0RfTk9O RSAgICAgIDogM2QgYmxlbmRpbmcgbm90IGVuYWJsZWQKKyAqIEBCTEVORF8zRF9GUkFNRV9JTlQg OiBGcmFtZSBpbnRlcmxlYXZpbmcKKyAqIEBCTEVORF8zRF9IX1JPV19JTlQgOiBIb3Jpem9udGFs IHJvdyBpbnRlcmxlYXZpbmcKKyAqIEBCTEVORF8zRF9WX1JPV19JTlQgOiB2ZXJ0aWNhbCByb3cg aW50ZXJsZWF2aW5nCisgKiBAQkxFTkRfM0RfQ09MX0lOVCAgIDogY29sdW1uIGludGVybGVhdmlu ZworICogQEJMRU5EXzNEX01BWCAgICAgICA6CisgKi8KK2VudW0gZHB1XzNkX2JsZW5kX21vZGUg eworCUJMRU5EXzNEX05PTkUgPSAwLAorCUJMRU5EXzNEX0ZSQU1FX0lOVCwKKwlCTEVORF8zRF9I X1JPV19JTlQsCisJQkxFTkRfM0RfVl9ST1dfSU5ULAorCUJMRU5EXzNEX0NPTF9JTlQsCisJQkxF TkRfM0RfTUFYCit9OworCisvKiogc3RydWN0IGRwdV9mb3JtYXQgLSBkZWZpbmVzIHRoZSBmb3Jt YXQgY29uZmlndXJhdGlvbiB3aGljaAorICogYWxsb3dzIERQVSBIVyB0byBjb3JyZWN0bHkgZmV0 Y2ggYW5kIGRlY29kZSB0aGUgZm9ybWF0CisgKiBAYmFzZTogYmFzZSBtc21fZm9ybWF0IHN0cnV0 dXJlIGNvbnRhaW5pbmcgZm91cmNjIGNvZGUKKyAqIEBmZXRjaF9wbGFuZXM6IGhvdyB0aGUgY29s b3IgY29tcG9uZW50cyBhcmUgcGFja2VkIGluIHBpeGVsIGZvcm1hdAorICogQGVsZW1lbnQ6IGVs ZW1lbnQgY29sb3Igb3JkZXJpbmcKKyAqIEBiaXRzOiBlbGVtZW50IGJpdCB3aWR0aHMKKyAqIEBj aHJvbWFfc2FtcGxlOiBjaHJvbWEgc3ViLXNhbXBsbmcgdHlwZQorICogQHVucGFja19hbGlnbl9t c2I6IHVucGFjayBhbGlnbmVkLCAwIHRvIExTQiwgMSB0byBNU0IKKyAqIEB1bnBhY2tfdGlnaHQ6 IDAgZm9yIGxvb3NlLCAxIGZvciB0aWdodAorICogQHVucGFja19jb3VudDogMCA9IDEgY29tcG9u ZW50LCAxID0gMiBjb21wb25lbnQKKyAqIEBicHA6IGJ5dGVzIHBlciBwaXhlbAorICogQGFscGhh X2VuYWJsZTogd2hldGhlciB0aGUgZm9ybWF0IGhhcyBhbiBhbHBoYSBjaGFubmVsCisgKiBAbnVt X3BsYW5lczogbnVtYmVyIG9mIHBsYW5lcyAoaW5jbHVkaW5nIG1ldGEgZGF0YSBwbGFuZXMpCisg KiBAZmV0Y2hfbW9kZTogbGluZWFyLCB0aWxlZCwgb3IgdWJ3YyBodyBmZXRjaCBiZWhhdmlvcgor ICogQGlzX3l1djogaXMgZm9ybWF0IGEgeXV2IHZhcmlhbnQKKyAqIEBmbGFnOiB1c2FnZSBiaXQg ZmxhZ3MKKyAqIEB0aWxlX3dpZHRoOiBmb3JtYXQgdGlsZSB3aWR0aAorICogQHRpbGVfaGVpZ2h0 OiBmb3JtYXQgdGlsZSBoZWlnaHQKKyAqLworc3RydWN0IGRwdV9mb3JtYXQgeworCXN0cnVjdCBt c21fZm9ybWF0IGJhc2U7CisJZW51bSBkcHVfcGxhbmVfdHlwZSBmZXRjaF9wbGFuZXM7CisJdTgg ZWxlbWVudFtEUFVfTUFYX1BMQU5FU107CisJdTggYml0c1tEUFVfTUFYX1BMQU5FU107CisJZW51 bSBkcHVfY2hyb21hX3NhbXBfdHlwZSBjaHJvbWFfc2FtcGxlOworCXU4IHVucGFja19hbGlnbl9t c2I7CisJdTggdW5wYWNrX3RpZ2h0OworCXU4IHVucGFja19jb3VudDsKKwl1OCBicHA7CisJdTgg YWxwaGFfZW5hYmxlOworCXU4IG51bV9wbGFuZXM7CisJZW51bSBkcHVfZmV0Y2hfdHlwZSBmZXRj aF9tb2RlOworCURFQ0xBUkVfQklUTUFQKGZsYWcsIERQVV9GT1JNQVRfRkxBR19CSVRfTUFYKTsK Kwl1MTYgdGlsZV93aWR0aDsKKwl1MTYgdGlsZV9oZWlnaHQ7Cit9OworI2RlZmluZSB0b19kcHVf Zm9ybWF0KHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgZHB1X2Zvcm1hdCwgYmFzZSkKKworLyoq CisgKiBzdHJ1Y3QgZHB1X2h3X2ZtdF9sYXlvdXQgLSBmb3JtYXQgaW5mb3JtYXRpb24gb2YgdGhl IHNvdXJjZSBwaXhlbCBkYXRhCisgKiBAZm9ybWF0OiBwaXhlbCBmb3JtYXQgcGFyYW1ldGVycwor ICogQG51bV9wbGFuZXM6IG51bWJlciBvZiBwbGFuZXMgKGluY2x1ZGluZyBtZXRhIGRhdGEgcGxh bmVzKQorICogQHdpZHRoOiBpbWFnZSB3aWR0aAorICogQGhlaWdodDogaW1hZ2UgaGVpZ2h0Cisg KiBAdG90YWxfc2l6ZTogdG90YWwgc2l6ZSBpbiBieXRlcworICogQHBsYW5lX2FkZHI6IGFkZHJl c3Mgb2YgZWFjaCBwbGFuZQorICogQHBsYW5lX3NpemU6IGxlbmd0aCBvZiBlYWNoIHBsYW5lCisg KiBAcGxhbmVfcGl0Y2g6IHBpdGNoIG9mIGVhY2ggcGxhbmUKKyAqLworc3RydWN0IGRwdV9od19m bXRfbGF5b3V0IHsKKwljb25zdCBzdHJ1Y3QgZHB1X2Zvcm1hdCAqZm9ybWF0OworCXVpbnQzMl90 IG51bV9wbGFuZXM7CisJdWludDMyX3Qgd2lkdGg7CisJdWludDMyX3QgaGVpZ2h0OworCXVpbnQz Ml90IHRvdGFsX3NpemU7CisJdWludDMyX3QgcGxhbmVfYWRkcltEUFVfTUFYX1BMQU5FU107CisJ dWludDMyX3QgcGxhbmVfc2l6ZVtEUFVfTUFYX1BMQU5FU107CisJdWludDMyX3QgcGxhbmVfcGl0 Y2hbRFBVX01BWF9QTEFORVNdOworfTsKKworc3RydWN0IGRwdV9jc2NfY2ZnIHsKKwkvKiBtYXRy aXggY29lZmZpY2llbnRzIGluIFMxNS4xNiBmb3JtYXQgKi8KKwl1aW50MzJfdCBjc2NfbXZbRFBV X0NTQ19NQVRSSVhfQ09FRkZfU0laRV07CisJdWludDMyX3QgY3NjX3ByZV9idltEUFVfQ1NDX0JJ QVNfU0laRV07CisJdWludDMyX3QgY3NjX3Bvc3RfYnZbRFBVX0NTQ19CSUFTX1NJWkVdOworCXVp bnQzMl90IGNzY19wcmVfbHZbRFBVX0NTQ19DTEFNUF9TSVpFXTsKKwl1aW50MzJfdCBjc2NfcG9z dF9sdltEUFVfQ1NDX0NMQU1QX1NJWkVdOworfTsKKworLyoqCisgKiBzdHJ1Y3QgZHB1X21kc3Nf Y29sb3IgLSBtZHNzIGNvbG9yIGRlc2NyaXB0aW9uCisgKiBjb2xvciAwIDogZ3JlZW4KKyAqIGNv bG9yIDEgOiBibHVlCisgKiBjb2xvciAyIDogcmVkCisgKiBjb2xvciAzIDogYWxwaGEKKyAqLwor c3RydWN0IGRwdV9tZHNzX2NvbG9yIHsKKwl1MzIgY29sb3JfMDsKKwl1MzIgY29sb3JfMTsKKwl1 MzIgY29sb3JfMjsKKwl1MzIgY29sb3JfMzsKK307CisKKy8qCisgKiBEZWZpbmUgYml0IG1hc2tz IGZvciBoL3cgbG9nZ2luZy4KKyAqLworI2RlZmluZSBEUFVfREJHX01BU0tfTk9ORSAgICAgKDEg PDwgMCkKKyNkZWZpbmUgRFBVX0RCR19NQVNLX0NETSAgICAgICgxIDw8IDEpCisjZGVmaW5lIERQ VV9EQkdfTUFTS19JTlRGICAgICAoMSA8PCAyKQorI2RlZmluZSBEUFVfREJHX01BU0tfTE0gICAg ICAgKDEgPDwgMykKKyNkZWZpbmUgRFBVX0RCR19NQVNLX0NUTCAgICAgICgxIDw8IDQpCisjZGVm aW5lIERQVV9EQkdfTUFTS19QSU5HUE9ORyAoMSA8PCA1KQorI2RlZmluZSBEUFVfREJHX01BU0tf U1NQUCAgICAgKDEgPDwgNikKKyNkZWZpbmUgRFBVX0RCR19NQVNLX1dCICAgICAgICgxIDw8IDcp CisjZGVmaW5lIERQVV9EQkdfTUFTS19UT1AgICAgICAoMSA8PCA4KQorI2RlZmluZSBEUFVfREJH X01BU0tfVkJJRiAgICAgKDEgPDwgOSkKKyNkZWZpbmUgRFBVX0RCR19NQVNLX1JPVCAgICAgICgx IDw8IDEwKQorCisjZW5kaWYgIC8qIF9EUFVfSFdfTURTU19IICovCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfcGluZ3BvbmcuYyBiL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19waW5ncG9uZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwMC4uY2MzYTYyMzkwM2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJp dmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3Bpbmdwb25nLmMKQEAgLTAsMCArMSwy NTAgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNS0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4g QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCisg KiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9p b3BvbGwuaD4KKworI2luY2x1ZGUgImRwdV9od19tZHNzLmgiCisjaW5jbHVkZSAiZHB1X2h3aW8u aCIKKyNpbmNsdWRlICJkcHVfaHdfY2F0YWxvZy5oIgorI2luY2x1ZGUgImRwdV9od19waW5ncG9u Zy5oIgorI2luY2x1ZGUgImRwdV9kYmcuaCIKKyNpbmNsdWRlICJkcHVfa21zLmgiCisjaW5jbHVk ZSAiZHB1X3RyYWNlLmgiCisKKyNkZWZpbmUgUFBfVEVBUl9DSEVDS19FTiAgICAgICAgICAgICAg ICAweDAwMAorI2RlZmluZSBQUF9TWU5DX0NPTkZJR19WU1lOQyAgICAgICAgICAgIDB4MDA0Cisj ZGVmaW5lIFBQX1NZTkNfQ09ORklHX0hFSUdIVCAgICAgICAgICAgMHgwMDgKKyNkZWZpbmUgUFBf U1lOQ19XUkNPVU5UICAgICAgICAgICAgICAgICAweDAwQworI2RlZmluZSBQUF9WU1lOQ19JTklU X1ZBTCAgICAgICAgICAgICAgIDB4MDEwCisjZGVmaW5lIFBQX0lOVF9DT1VOVF9WQUwgICAgICAg ICAgICAgICAgMHgwMTQKKyNkZWZpbmUgUFBfU1lOQ19USFJFU0ggICAgICAgICAgICAgICAgICAw eDAxOAorI2RlZmluZSBQUF9TVEFSVF9QT1MgICAgICAgICAgICAgICAgICAgIDB4MDFDCisjZGVm aW5lIFBQX1JEX1BUUl9JUlEgICAgICAgICAgICAgICAgICAgMHgwMjAKKyNkZWZpbmUgUFBfV1Jf UFRSX0lSUSAgICAgICAgICAgICAgICAgICAweDAyNAorI2RlZmluZSBQUF9PVVRfTElORV9DT1VO VCAgICAgICAgICAgICAgIDB4MDI4CisjZGVmaW5lIFBQX0xJTkVfQ09VTlQgICAgICAgICAgICAg ICAgICAgMHgwMkMKKworI2RlZmluZSBQUF9GQkNfTU9ERSAgICAgICAgICAgICAgICAgICAgIDB4 MDM0CisjZGVmaW5lIFBQX0ZCQ19CVURHRVRfQ1RMICAgICAgICAgICAgICAgMHgwMzgKKyNkZWZp bmUgUFBfRkJDX0xPU1NZX01PREUgICAgICAgICAgICAgICAweDAzQworCitzdGF0aWMgc3RydWN0 IGRwdV9waW5ncG9uZ19jZmcgKl9waW5ncG9uZ19vZmZzZXQoZW51bSBkcHVfcGluZ3BvbmcgcHAs CisJCXN0cnVjdCBkcHVfbWRzc19jZmcgKm0sCisJCXZvaWQgX19pb21lbSAqYWRkciwKKwkJc3Ry dWN0IGRwdV9od19ibGtfcmVnX21hcCAqYikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkg PCBtLT5waW5ncG9uZ19jb3VudDsgaSsrKSB7CisJCWlmIChwcCA9PSBtLT5waW5ncG9uZ1tpXS5p ZCkgeworCQkJYi0+YmFzZV9vZmYgPSBhZGRyOworCQkJYi0+YmxrX29mZiA9IG0tPnBpbmdwb25n W2ldLmJhc2U7CisJCQliLT5sZW5ndGggPSBtLT5waW5ncG9uZ1tpXS5sZW47CisJCQliLT5od3Zl cnNpb24gPSBtLT5od3ZlcnNpb247CisJCQliLT5sb2dfbWFzayA9IERQVV9EQkdfTUFTS19QSU5H UE9ORzsKKwkJCXJldHVybiAmbS0+cGluZ3BvbmdbaV07CisJCX0KKwl9CisKKwlyZXR1cm4gRVJS X1BUUigtRUlOVkFMKTsKK30KKworc3RhdGljIGludCBkcHVfaHdfcHBfc2V0dXBfdGVfY29uZmln KHN0cnVjdCBkcHVfaHdfcGluZ3BvbmcgKnBwLAorCQlzdHJ1Y3QgZHB1X2h3X3RlYXJfY2hlY2sg KnRlKQoreworCXN0cnVjdCBkcHVfaHdfYmxrX3JlZ19tYXAgKmM7CisJaW50IGNmZzsKKworCWlm ICghcHAgfHwgIXRlKQorCQlyZXR1cm4gLUVJTlZBTDsKKwljID0gJnBwLT5odzsKKworCWNmZyA9 IEJJVCgxOSk7IC8qVlNZTkNfQ09VTlRFUl9FTiAqLworCWlmICh0ZS0+aHdfdnN5bmNfbW9kZSkK KwkJY2ZnIHw9IEJJVCgyMCk7CisKKwljZmcgfD0gdGUtPnZzeW5jX2NvdW50OworCisJRFBVX1JF R19XUklURShjLCBQUF9TWU5DX0NPTkZJR19WU1lOQywgY2ZnKTsKKwlEUFVfUkVHX1dSSVRFKGMs IFBQX1NZTkNfQ09ORklHX0hFSUdIVCwgdGUtPnN5bmNfY2ZnX2hlaWdodCk7CisJRFBVX1JFR19X UklURShjLCBQUF9WU1lOQ19JTklUX1ZBTCwgdGUtPnZzeW5jX2luaXRfdmFsKTsKKwlEUFVfUkVH X1dSSVRFKGMsIFBQX1JEX1BUUl9JUlEsIHRlLT5yZF9wdHJfaXJxKTsKKwlEUFVfUkVHX1dSSVRF KGMsIFBQX1NUQVJUX1BPUywgdGUtPnN0YXJ0X3Bvcyk7CisJRFBVX1JFR19XUklURShjLCBQUF9T WU5DX1RIUkVTSCwKKwkJCSgodGUtPnN5bmNfdGhyZXNob2xkX2NvbnRpbnVlIDw8IDE2KSB8CisJ CQkgdGUtPnN5bmNfdGhyZXNob2xkX3N0YXJ0KSk7CisJRFBVX1JFR19XUklURShjLCBQUF9TWU5D X1dSQ09VTlQsCisJCQkodGUtPnN0YXJ0X3BvcyArIHRlLT5zeW5jX3RocmVzaG9sZF9zdGFydCAr IDEpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRwdV9od19wcF9wb2xsX3RpbWVv dXRfd3JfcHRyKHN0cnVjdCBkcHVfaHdfcGluZ3BvbmcgKnBwLAorCQl1MzIgdGltZW91dF91cykK K3sKKwlzdHJ1Y3QgZHB1X2h3X2Jsa19yZWdfbWFwICpjOworCXUzMiB2YWw7CisJaW50IHJjOwor CisJaWYgKCFwcCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljID0gJnBwLT5odzsKKwlyYyA9IHJl YWRsX3BvbGxfdGltZW91dChjLT5iYXNlX29mZiArIGMtPmJsa19vZmYgKyBQUF9MSU5FX0NPVU5U LAorCQkJdmFsLCAodmFsICYgMHhmZmZmKSA+PSAxLCAxMCwgdGltZW91dF91cyk7CisKKwlyZXR1 cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgZHB1X2h3X3BwX2VuYWJsZV90ZShzdHJ1Y3QgZHB1X2h3 X3Bpbmdwb25nICpwcCwgYm9vbCBlbmFibGUpCit7CisJc3RydWN0IGRwdV9od19ibGtfcmVnX21h cCAqYzsKKworCWlmICghcHApCisJCXJldHVybiAtRUlOVkFMOworCWMgPSAmcHAtPmh3OworCisJ RFBVX1JFR19XUklURShjLCBQUF9URUFSX0NIRUNLX0VOLCBlbmFibGUpOworCXJldHVybiAwOwor fQorCitzdGF0aWMgaW50IGRwdV9od19wcF9jb25uZWN0X2V4dGVybmFsX3RlKHN0cnVjdCBkcHVf aHdfcGluZ3BvbmcgKnBwLAorCQlib29sIGVuYWJsZV9leHRlcm5hbF90ZSkKK3sKKwlzdHJ1Y3Qg ZHB1X2h3X2Jsa19yZWdfbWFwICpjID0gJnBwLT5odzsKKwl1MzIgY2ZnOworCWludCBvcmlnOwor CisJaWYgKCFwcCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljID0gJnBwLT5odzsKKwljZmcgPSBE UFVfUkVHX1JFQUQoYywgUFBfU1lOQ19DT05GSUdfVlNZTkMpOworCW9yaWcgPSAoYm9vbCkoY2Zn ICYgQklUKDIwKSk7CisJaWYgKGVuYWJsZV9leHRlcm5hbF90ZSkKKwkJY2ZnIHw9IEJJVCgyMCk7 CisJZWxzZQorCQljZmcgJj0gfkJJVCgyMCk7CisJRFBVX1JFR19XUklURShjLCBQUF9TWU5DX0NP TkZJR19WU1lOQywgY2ZnKTsKKwl0cmFjZV9kcHVfcHBfY29ubmVjdF9leHRfdGUocHAtPmlkeCAt IFBJTkdQT05HXzAsIGNmZyk7CisKKwlyZXR1cm4gb3JpZzsKK30KKworc3RhdGljIGludCBkcHVf aHdfcHBfZ2V0X3ZzeW5jX2luZm8oc3RydWN0IGRwdV9od19waW5ncG9uZyAqcHAsCisJCXN0cnVj dCBkcHVfaHdfcHBfdnN5bmNfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgZHB1X2h3X2Jsa19yZWdf bWFwICpjOworCXUzMiB2YWw7CisKKwlpZiAoIXBwIHx8ICFpbmZvKQorCQlyZXR1cm4gLUVJTlZB TDsKKwljID0gJnBwLT5odzsKKworCXZhbCA9IERQVV9SRUdfUkVBRChjLCBQUF9WU1lOQ19JTklU X1ZBTCk7CisJaW5mby0+cmRfcHRyX2luaXRfdmFsID0gdmFsICYgMHhmZmZmOworCisJdmFsID0g RFBVX1JFR19SRUFEKGMsIFBQX0lOVF9DT1VOVF9WQUwpOworCWluZm8tPnJkX3B0cl9mcmFtZV9j b3VudCA9ICh2YWwgJiAweGZmZmYwMDAwKSA+PiAxNjsKKwlpbmZvLT5yZF9wdHJfbGluZV9jb3Vu dCA9IHZhbCAmIDB4ZmZmZjsKKworCXZhbCA9IERQVV9SRUdfUkVBRChjLCBQUF9MSU5FX0NPVU5U KTsKKwlpbmZvLT53cl9wdHJfbGluZV9jb3VudCA9IHZhbCAmIDB4ZmZmZjsKKworCXJldHVybiAw OworfQorCitzdGF0aWMgdTMyIGRwdV9od19wcF9nZXRfbGluZV9jb3VudChzdHJ1Y3QgZHB1X2h3 X3Bpbmdwb25nICpwcCkKK3sKKwlzdHJ1Y3QgZHB1X2h3X2Jsa19yZWdfbWFwICpjID0gJnBwLT5o dzsKKwl1MzIgaGVpZ2h0LCBpbml0OworCXUzMiBsaW5lID0gMHhGRkZGOworCisJaWYgKCFwcCkK KwkJcmV0dXJuIDA7CisJYyA9ICZwcC0+aHc7CisKKwlpbml0ID0gRFBVX1JFR19SRUFEKGMsIFBQ X1ZTWU5DX0lOSVRfVkFMKSAmIDB4RkZGRjsKKwloZWlnaHQgPSBEUFVfUkVHX1JFQUQoYywgUFBf U1lOQ19DT05GSUdfSEVJR0hUKSAmIDB4RkZGRjsKKworCWlmIChoZWlnaHQgPCBpbml0KQorCQln b3RvIGxpbmVfY291bnRfZXhpdDsKKworCWxpbmUgPSBEUFVfUkVHX1JFQUQoYywgUFBfSU5UX0NP VU5UX1ZBTCkgJiAweEZGRkY7CisKKwlpZiAobGluZSA8IGluaXQpCisJCWxpbmUgKz0gKDB4RkZG RiAtIGluaXQpOworCWVsc2UKKwkJbGluZSAtPSBpbml0OworCitsaW5lX2NvdW50X2V4aXQ6CisJ cmV0dXJuIGxpbmU7Cit9CisKK3N0YXRpYyB2b2lkIF9zZXR1cF9waW5ncG9uZ19vcHMoc3RydWN0 IGRwdV9od19waW5ncG9uZ19vcHMgKm9wcywKKwljb25zdCBzdHJ1Y3QgZHB1X3Bpbmdwb25nX2Nm ZyAqaHdfY2FwKQoreworCW9wcy0+c2V0dXBfdGVhcmNoZWNrID0gZHB1X2h3X3BwX3NldHVwX3Rl X2NvbmZpZzsKKwlvcHMtPmVuYWJsZV90ZWFyY2hlY2sgPSBkcHVfaHdfcHBfZW5hYmxlX3RlOwor CW9wcy0+Y29ubmVjdF9leHRlcm5hbF90ZSA9IGRwdV9od19wcF9jb25uZWN0X2V4dGVybmFsX3Rl OworCW9wcy0+Z2V0X3ZzeW5jX2luZm8gPSBkcHVfaHdfcHBfZ2V0X3ZzeW5jX2luZm87CisJb3Bz LT5wb2xsX3RpbWVvdXRfd3JfcHRyID0gZHB1X2h3X3BwX3BvbGxfdGltZW91dF93cl9wdHI7CisJ b3BzLT5nZXRfbGluZV9jb3VudCA9IGRwdV9od19wcF9nZXRfbGluZV9jb3VudDsKK307CisKK3N0 YXRpYyBzdHJ1Y3QgZHB1X2h3X2Jsa19vcHMgZHB1X2h3X29wcyA9IHsKKwkuc3RhcnQgPSBOVUxM LAorCS5zdG9wID0gTlVMTCwKK307CisKK3N0cnVjdCBkcHVfaHdfcGluZ3BvbmcgKmRwdV9od19w aW5ncG9uZ19pbml0KGVudW0gZHB1X3Bpbmdwb25nIGlkeCwKKwkJdm9pZCBfX2lvbWVtICphZGRy LAorCQlzdHJ1Y3QgZHB1X21kc3NfY2ZnICptKQoreworCXN0cnVjdCBkcHVfaHdfcGluZ3Bvbmcg KmM7CisJc3RydWN0IGRwdV9waW5ncG9uZ19jZmcgKmNmZzsKKwlpbnQgcmM7CisKKwljID0ga3ph bGxvYyhzaXplb2YoKmMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWMpCisJCXJldHVybiBFUlJfUFRS KC1FTk9NRU0pOworCisJY2ZnID0gX3Bpbmdwb25nX29mZnNldChpZHgsIG0sIGFkZHIsICZjLT5o dyk7CisJaWYgKElTX0VSUl9PUl9OVUxMKGNmZykpIHsKKwkJa2ZyZWUoYyk7CisJCXJldHVybiBF UlJfUFRSKC1FSU5WQUwpOworCX0KKworCWMtPmlkeCA9IGlkeDsKKwljLT5jYXBzID0gY2ZnOwor CV9zZXR1cF9waW5ncG9uZ19vcHMoJmMtPm9wcywgYy0+Y2Fwcyk7CisKKwlyYyA9IGRwdV9od19i bGtfaW5pdCgmYy0+YmFzZSwgRFBVX0hXX0JMS19QSU5HUE9ORywgaWR4LCAmZHB1X2h3X29wcyk7 CisJaWYgKHJjKSB7CisJCURQVV9FUlJPUigiZmFpbGVkIHRvIGluaXQgaHcgYmxrICVkXG4iLCBy Yyk7CisJCWdvdG8gYmxrX2luaXRfZXJyb3I7CisJfQorCisJcmV0dXJuIGM7CisKK2Jsa19pbml0 X2Vycm9yOgorCWt6ZnJlZShjKTsKKworCXJldHVybiBFUlJfUFRSKHJjKTsKK30KKwordm9pZCBk cHVfaHdfcGluZ3BvbmdfZGVzdHJveShzdHJ1Y3QgZHB1X2h3X3Bpbmdwb25nICpwcCkKK3sKKwlp ZiAocHApCisJCWRwdV9od19ibGtfZGVzdHJveSgmcHAtPmJhc2UpOworCWtmcmVlKHBwKTsKK30K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19waW5ncG9u Zy5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3Bpbmdwb25nLmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4zY2FjY2Q3ZDZhM2UKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfcGluZ3Bv bmcuaApAQCAtMCwwICsxLDEzNiBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE1LTIwMTgsIFRoZSBM aW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK KyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKwor I2lmbmRlZiBfRFBVX0hXX1BJTkdQT05HX0gKKyNkZWZpbmUgX0RQVV9IV19QSU5HUE9OR19ICisK KyNpbmNsdWRlICJkcHVfaHdfY2F0YWxvZy5oIgorI2luY2x1ZGUgImRwdV9od19tZHNzLmgiCisj aW5jbHVkZSAiZHB1X2h3X3V0aWwuaCIKKyNpbmNsdWRlICJkcHVfaHdfYmxrLmgiCisKK3N0cnVj dCBkcHVfaHdfcGluZ3Bvbmc7CisKK3N0cnVjdCBkcHVfaHdfdGVhcl9jaGVjayB7CisJLyoKKwkg KiBUaGlzIGlzIHJhdGlvIG9mIE1EUCBWU1lOQyBjbGsgZnJlcShIeikgdG8KKwkgKiByZWZyZXNo IHJhdGUgZGl2aWRlZCBieSBubyBvZiBsaW5lcworCSAqLworCXUzMiB2c3luY19jb3VudDsKKwl1 MzIgc3luY19jZmdfaGVpZ2h0OworCXUzMiB2c3luY19pbml0X3ZhbDsKKwl1MzIgc3luY190aHJl c2hvbGRfc3RhcnQ7CisJdTMyIHN5bmNfdGhyZXNob2xkX2NvbnRpbnVlOworCXUzMiBzdGFydF9w b3M7CisJdTMyIHJkX3B0cl9pcnE7CisJdTggaHdfdnN5bmNfbW9kZTsKK307CisKK3N0cnVjdCBk cHVfaHdfcHBfdnN5bmNfaW5mbyB7CisJdTMyIHJkX3B0cl9pbml0X3ZhbDsJLyogdmFsdWUgb2Yg cmQgcG9pbnRlciBhdCB2c3luYyBlZGdlICovCisJdTMyIHJkX3B0cl9mcmFtZV9jb3VudDsJLyog bnVtIGZyYW1lcyBzZW50IHNpbmNlIGVuYWJsaW5nIGludGVyZmFjZSAqLworCXUzMiByZF9wdHJf bGluZV9jb3VudDsJLyogY3VycmVudCBsaW5lIG9uIHBhbmVsIChyZCBwdHIpICovCisJdTMyIHdy X3B0cl9saW5lX2NvdW50OwkvKiBjdXJyZW50IGxpbmUgd2l0aGluIHBwIGZpZm8gKHdyIHB0cikg Ki8KK307CisKKy8qKgorICoKKyAqIHN0cnVjdCBkcHVfaHdfcGluZ3Bvbmdfb3BzIDogSW50ZXJm YWNlIHRvIHRoZSBwaW5ncG9uZyBIdyBkcml2ZXIgZnVuY3Rpb25zCisgKiAgQXNzdW1wdGlvbiBp cyB0aGVzZSBmdW5jdGlvbnMgd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgY2xvY2tzIGFyZSBlbmFibGVk CisgKiAgQHNldHVwX3RlYXJjaGVjayA6IHByb2dyYW0gdGVhciBjaGVjayB2YWx1ZXMKKyAqICBA ZW5hYmxlX3RlYXJjaGVjayA6IGVuYWJsZXMgdGVhciBjaGVjaworICogIEBnZXRfdnN5bmNfaW5m byA6IHJldHJpZXMgdGltaW5nIGluZm8gb2YgdGhlIHBhbmVsCisgKiAgQHNldHVwX2RpdGhlciA6 IGZ1bmN0aW9uIHRvIHByb2dyYW0gdGhlIGRpdGhlciBodyBibG9jaworICogIEBnZXRfbGluZV9j b3VudDogb2J0YWluIGN1cnJlbnQgdmVydGljYWwgbGluZSBjb3VudGVyCisgKi8KK3N0cnVjdCBk cHVfaHdfcGluZ3Bvbmdfb3BzIHsKKwkvKioKKwkgKiBlbmFibGVzIHZ5c25jIGdlbmVyYXRpb24g YW5kIHNldHMgdXAgaW5pdCB2YWx1ZSBvZgorCSAqIHJlYWQgcG9pbnRlciBhbmQgcHJvZ3JhbXMg dGhlIHRlYXIgY2hlY2sgY29maWd1cmF0aW9uCisJICovCisJaW50ICgqc2V0dXBfdGVhcmNoZWNr KShzdHJ1Y3QgZHB1X2h3X3Bpbmdwb25nICpwcCwKKwkJCXN0cnVjdCBkcHVfaHdfdGVhcl9jaGVj ayAqY2ZnKTsKKworCS8qKgorCSAqIGVuYWJsZXMgdGVhciBjaGVjayBibG9jaworCSAqLworCWlu dCAoKmVuYWJsZV90ZWFyY2hlY2spKHN0cnVjdCBkcHVfaHdfcGluZ3BvbmcgKnBwLAorCQkJYm9v bCBlbmFibGUpOworCisJLyoqCisJICogcmVhZCwgbW9kaWZ5LCB3cml0ZSB0byBlaXRoZXIgc2V0 IG9yIGNsZWFyIGxpc3RlbmluZyB0byBleHRlcm5hbCBURQorCSAqIEBSZXR1cm46IDEgaWYgVEUg d2FzIG9yaWdpbmFsbHkgY29ubmVjdGVkLCAwIGlmIG5vdCwgb3IgLUVSUk9SCisJICovCisJaW50 ICgqY29ubmVjdF9leHRlcm5hbF90ZSkoc3RydWN0IGRwdV9od19waW5ncG9uZyAqcHAsCisJCQli b29sIGVuYWJsZV9leHRlcm5hbF90ZSk7CisKKwkvKioKKwkgKiBwcm92aWRlcyB0aGUgcHJvZ3Jh bW1lZCBhbmQgY3VycmVudAorCSAqIGxpbmVfY291bnQKKwkgKi8KKwlpbnQgKCpnZXRfdnN5bmNf aW5mbykoc3RydWN0IGRwdV9od19waW5ncG9uZyAqcHAsCisJCQlzdHJ1Y3QgZHB1X2h3X3BwX3Zz eW5jX2luZm8gICppbmZvKTsKKworCS8qKgorCSAqIHBvbGwgdW50aWwgd3JpdGUgcG9pbnRlciB0 cmFuc21pc3Npb24gc3RhcnRzCisJICogQFJldHVybjogMCBvbiBzdWNjZXNzLCAtRVRJTUVET1VU IG9uIHRpbWVvdXQKKwkgKi8KKwlpbnQgKCpwb2xsX3RpbWVvdXRfd3JfcHRyKShzdHJ1Y3QgZHB1 X2h3X3Bpbmdwb25nICpwcCwgdTMyIHRpbWVvdXRfdXMpOworCisJLyoqCisJICogT2J0YWluIGN1 cnJlbnQgdmVydGljYWwgbGluZSBjb3VudGVyCisJICovCisJdTMyICgqZ2V0X2xpbmVfY291bnQp KHN0cnVjdCBkcHVfaHdfcGluZ3BvbmcgKnBwKTsKK307CisKK3N0cnVjdCBkcHVfaHdfcGluZ3Bv bmcgeworCXN0cnVjdCBkcHVfaHdfYmxrIGJhc2U7CisJc3RydWN0IGRwdV9od19ibGtfcmVnX21h cCBodzsKKworCS8qIHBpbmdwb25nICovCisJZW51bSBkcHVfcGluZ3BvbmcgaWR4OworCWNvbnN0 IHN0cnVjdCBkcHVfcGluZ3BvbmdfY2ZnICpjYXBzOworCisJLyogb3BzICovCisJc3RydWN0IGRw dV9od19waW5ncG9uZ19vcHMgb3BzOworfTsKKworLyoqCisgKiBkcHVfaHdfcGluZ3BvbmcgLSBj b252ZXJ0IGJhc2Ugb2JqZWN0IGRwdV9od19iYXNlIHRvIGNvbnRhaW5lcgorICogQGh3OiBQb2lu dGVyIHRvIGJhc2UgaGFyZHdhcmUgYmxvY2sKKyAqIHJldHVybjogUG9pbnRlciB0byBoYXJkd2Fy ZSBibG9jayBjb250YWluZXIKKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgZHB1X2h3X3Bpbmdw b25nICp0b19kcHVfaHdfcGluZ3Bvbmcoc3RydWN0IGRwdV9od19ibGsgKmh3KQoreworCXJldHVy biBjb250YWluZXJfb2YoaHcsIHN0cnVjdCBkcHVfaHdfcGluZ3BvbmcsIGJhc2UpOworfQorCisv KioKKyAqIGRwdV9od19waW5ncG9uZ19pbml0IC0gaW5pdGlhbGl6ZXMgdGhlIHBpbmdwb25nIGRy aXZlciBmb3IgdGhlIHBhc3NlZAorICoJcGluZ3BvbmcgaWR4LgorICogQGlkeDogIFBpbmdwb25n IGluZGV4IGZvciB3aGljaCBkcml2ZXIgb2JqZWN0IGlzIHJlcXVpcmVkCisgKiBAYWRkcjogTWFw cGVkIHJlZ2lzdGVyIGlvIGFkZHJlc3Mgb2YgTURQCisgKiBAbTogICAgUG9pbnRlciB0byBtZHNz IGNhdGFsb2cgZGF0YQorICogUmV0dXJuczogRXJyb3IgY29kZSBvciBhbGxvY2F0ZWQgZHB1X2h3 X3Bpbmdwb25nIGNvbnRleHQKKyAqLworc3RydWN0IGRwdV9od19waW5ncG9uZyAqZHB1X2h3X3Bp bmdwb25nX2luaXQoZW51bSBkcHVfcGluZ3BvbmcgaWR4LAorCQl2b2lkIF9faW9tZW0gKmFkZHIs CisJCXN0cnVjdCBkcHVfbWRzc19jZmcgKm0pOworCisvKioKKyAqIGRwdV9od19waW5ncG9uZ19k ZXN0cm95IC0gZGVzdHJveXMgcGluZ3BvbmcgZHJpdmVyIGNvbnRleHQKKyAqCXNob3VsZCBiZSBj YWxsZWQgdG8gZnJlZSB0aGUgY29udGV4dAorICogQHBwOiAgIFBvaW50ZXIgdG8gUFAgZHJpdmVy IGNvbnRleHQgcmV0dXJuZWQgYnkgZHB1X2h3X3Bpbmdwb25nX2luaXQKKyAqLwordm9pZCBkcHVf aHdfcGluZ3BvbmdfZGVzdHJveShzdHJ1Y3QgZHB1X2h3X3Bpbmdwb25nICpwcCk7CisKKyNlbmRp ZiAvKl9EUFVfSFdfUElOR1BPTkdfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X2h3X3NzcHAuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9od19zc3BwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5j MjViNTJhNmIyMTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfaHdfc3NwcC5jCkBAIC0wLDAgKzEsNzUzIEBACisvKiBDb3B5cmlnaHQgKGMpIDIw MTUtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAorICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlz aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKyAqLworCisjaW5jbHVkZSAiZHB1X2h3aW8uaCIKKyNpbmNsdWRlICJkcHVfaHdfY2F0 YWxvZy5oIgorI2luY2x1ZGUgImRwdV9od19sbS5oIgorI2luY2x1ZGUgImRwdV9od19zc3BwLmgi CisjaW5jbHVkZSAiZHB1X2RiZy5oIgorI2luY2x1ZGUgImRwdV9rbXMuaCIKKworI2RlZmluZSBE UFVfRkVUQ0hfQ09ORklHX1JFU0VUX1ZBTFVFICAgMHgwMDAwMDA4NworCisvKiBEUFVfU1NQUF9T UkMgKi8KKyNkZWZpbmUgU1NQUF9TUkNfU0laRSAgICAgICAgICAgICAgICAgICAgICAweDAwCisj ZGVmaW5lIFNTUFBfU1JDX1hZICAgICAgICAgICAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBT U1BQX09VVF9TSVpFICAgICAgICAgICAgICAgICAgICAgIDB4MGMKKyNkZWZpbmUgU1NQUF9PVVRf WFkgICAgICAgICAgICAgICAgICAgICAgICAweDEwCisjZGVmaW5lIFNTUFBfU1JDMF9BRERSICAg ICAgICAgICAgICAgICAgICAgMHgxNAorI2RlZmluZSBTU1BQX1NSQzFfQUREUiAgICAgICAgICAg ICAgICAgICAgIDB4MTgKKyNkZWZpbmUgU1NQUF9TUkMyX0FERFIgICAgICAgICAgICAgICAgICAg ICAweDFDCisjZGVmaW5lIFNTUFBfU1JDM19BRERSICAgICAgICAgICAgICAgICAgICAgMHgyMAor I2RlZmluZSBTU1BQX1NSQ19ZU1RSSURFMCAgICAgICAgICAgICAgICAgIDB4MjQKKyNkZWZpbmUg U1NQUF9TUkNfWVNUUklERTEgICAgICAgICAgICAgICAgICAweDI4CisjZGVmaW5lIFNTUFBfU1JD X0ZPUk1BVCAgICAgICAgICAgICAgICAgICAgMHgzMAorI2RlZmluZSBTU1BQX1NSQ19VTlBBQ0tf UEFUVEVSTiAgICAgICAgICAgIDB4MzQKKyNkZWZpbmUgU1NQUF9TUkNfT1BfTU9ERSAgICAgICAg ICAgICAgICAgICAweDM4CisKKy8qIFNTUFBfTVVMVElSRUNUKi8KKyNkZWZpbmUgU1NQUF9TUkNf U0laRV9SRUMxICAgICAgICAgICAgICAgICAweDE2QworI2RlZmluZSBTU1BQX1NSQ19YWV9SRUMx ICAgICAgICAgICAgICAgICAgIDB4MTY4CisjZGVmaW5lIFNTUFBfT1VUX1NJWkVfUkVDMSAgICAg ICAgICAgICAgICAgMHgxNjAKKyNkZWZpbmUgU1NQUF9PVVRfWFlfUkVDMSAgICAgICAgICAgICAg ICAgICAweDE2NAorI2RlZmluZSBTU1BQX1NSQ19GT1JNQVRfUkVDMSAgICAgICAgICAgICAgIDB4 MTc0CisjZGVmaW5lIFNTUFBfU1JDX1VOUEFDS19QQVRURVJOX1JFQzEgICAgICAgMHgxNzgKKyNk ZWZpbmUgU1NQUF9TUkNfT1BfTU9ERV9SRUMxICAgICAgICAgICAgICAweDE3QworI2RlZmluZSBT U1BQX01VTFRJUkVDVF9PUE1PREUgICAgICAgICAgICAgIDB4MTcwCisjZGVmaW5lIFNTUFBfU1JD X0NPTlNUQU5UX0NPTE9SX1JFQzEgICAgICAgMHgxODAKKyNkZWZpbmUgU1NQUF9FWENMX1JFQ19T SVpFX1JFQzEgICAgICAgICAgICAweDE4NAorI2RlZmluZSBTU1BQX0VYQ0xfUkVDX1hZX1JFQzEg ICAgICAgICAgICAgIDB4MTg4CisKKyNkZWZpbmUgTURTU19NRFBfT1BfREVJTlRFUkxBQ0UgICAg ICAgICAgICBCSVQoMjIpCisjZGVmaW5lIE1EU1NfTURQX09QX0RFSU5URVJMQUNFX09ERCAgICAg ICAgQklUKDIzKQorI2RlZmluZSBNRFNTX01EUF9PUF9JR0NfUk9NXzEgICAgICAgICAgICAgIEJJ VCgxOCkKKyNkZWZpbmUgTURTU19NRFBfT1BfSUdDX1JPTV8wICAgICAgICAgICAgICBCSVQoMTcp CisjZGVmaW5lIE1EU1NfTURQX09QX0lHQ19FTiAgICAgICAgICAgICAgICAgQklUKDE2KQorI2Rl ZmluZSBNRFNTX01EUF9PUF9GTElQX1VEICAgICAgICAgICAgICAgIEJJVCgxNCkKKyNkZWZpbmUg TURTU19NRFBfT1BfRkxJUF9MUiAgICAgICAgICAgICAgICBCSVQoMTMpCisjZGVmaW5lIE1EU1Nf TURQX09QX0JXQ19FTiAgICAgICAgICAgICAgICAgQklUKDApCisjZGVmaW5lIE1EU1NfTURQX09Q X1BFX09WRVJSSURFICAgICAgICAgICAgQklUKDMxKQorI2RlZmluZSBNRFNTX01EUF9PUF9CV0Nf TE9TU0xFU1MgICAgICAgICAgICgwIDw8IDEpCisjZGVmaW5lIE1EU1NfTURQX09QX0JXQ19RX0hJ R0ggICAgICAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgTURTU19NRFBfT1BfQldDX1FfTUVEICAg ICAgICAgICAgICAoMiA8PCAxKQorCisjZGVmaW5lIFNTUFBfU1JDX0NPTlNUQU5UX0NPTE9SICAg ICAgICAgICAgMHgzYworI2RlZmluZSBTU1BQX0VYQ0xfUkVDX0NUTCAgICAgICAgICAgICAgICAg IDB4NDAKKyNkZWZpbmUgU1NQUF9VQldDX1NUQVRJQ19DVFJMICAgICAgICAgICAgICAweDQ0Cisj ZGVmaW5lIFNTUFBfRkVUQ0hfQ09ORklHICAgICAgICAgICAgICAgICAgMHgwNDgKKyNkZWZpbmUg U1NQUF9EQU5HRVJfTFVUICAgICAgICAgICAgICAgICAgICAweDYwCisjZGVmaW5lIFNTUFBfU0FG RV9MVVQgICAgICAgICAgICAgICAgICAgICAgMHg2NAorI2RlZmluZSBTU1BQX0NSRVFfTFVUICAg ICAgICAgICAgICAgICAgICAgIDB4NjgKKyNkZWZpbmUgU1NQUF9RT1NfQ1RSTCAgICAgICAgICAg ICAgICAgICAgICAweDZDCisjZGVmaW5lIFNTUFBfREVDSU1BVElPTl9DT05GSUcgICAgICAgICAg ICAgMHhCNAorI2RlZmluZSBTU1BQX1NSQ19BRERSX1NXX1NUQVRVUyAgICAgICAgICAgIDB4NzAK KyNkZWZpbmUgU1NQUF9DUkVRX0xVVF8wICAgICAgICAgICAgICAgICAgICAweDc0CisjZGVmaW5l IFNTUFBfQ1JFUV9MVVRfMSAgICAgICAgICAgICAgICAgICAgMHg3OAorI2RlZmluZSBTU1BQX1NX X1BJWF9FWFRfQzBfTFIgICAgICAgICAgICAgIDB4MTAwCisjZGVmaW5lIFNTUFBfU1dfUElYX0VY VF9DMF9UQiAgICAgICAgICAgICAgMHgxMDQKKyNkZWZpbmUgU1NQUF9TV19QSVhfRVhUX0MwX1JF UV9QSVhFTFMgICAgICAweDEwOAorI2RlZmluZSBTU1BQX1NXX1BJWF9FWFRfQzFDMl9MUiAgICAg ICAgICAgIDB4MTEwCisjZGVmaW5lIFNTUFBfU1dfUElYX0VYVF9DMUMyX1RCICAgICAgICAgICAg MHgxMTQKKyNkZWZpbmUgU1NQUF9TV19QSVhfRVhUX0MxQzJfUkVRX1BJWEVMUyAgICAweDExOAor I2RlZmluZSBTU1BQX1NXX1BJWF9FWFRfQzNfTFIgICAgICAgICAgICAgIDB4MTIwCisjZGVmaW5l IFNTUFBfU1dfUElYX0VYVF9DM19UQiAgICAgICAgICAgICAgMHgxMjQKKyNkZWZpbmUgU1NQUF9T V19QSVhfRVhUX0MzX1JFUV9QSVhFTFMgICAgICAweDEyOAorI2RlZmluZSBTU1BQX1RSQUZGSUNf U0hBUEVSICAgICAgICAgICAgICAgIDB4MTMwCisjZGVmaW5lIFNTUFBfQ0RQX0NOVEwgICAgICAg ICAgICAgICAgICAgICAgMHgxMzQKKyNkZWZpbmUgU1NQUF9VQldDX0VSUk9SX1NUQVRVUyAgICAg ICAgICAgICAweDEzOAorI2RlZmluZSBTU1BQX1RSQUZGSUNfU0hBUEVSX1BSRUZJTEwgICAgICAg IDB4MTUwCisjZGVmaW5lIFNTUFBfVFJBRkZJQ19TSEFQRVJfUkVDMV9QUkVGSUxMICAgMHgxNTQK KyNkZWZpbmUgU1NQUF9UUkFGRklDX1NIQVBFUl9SRUMxICAgICAgICAgICAweDE1OAorI2RlZmlu ZSBTU1BQX0VYQ0xfUkVDX1NJWkUgICAgICAgICAgICAgICAgIDB4MUI0CisjZGVmaW5lIFNTUFBf RVhDTF9SRUNfWFkgICAgICAgICAgICAgICAgICAgMHgxQjgKKyNkZWZpbmUgU1NQUF9WSUdfT1Bf TU9ERSAgICAgICAgICAgICAgICAgICAweDAKKyNkZWZpbmUgU1NQUF9WSUdfQ1NDXzEwX09QX01P REUgICAgICAgICAgICAweDAKKyNkZWZpbmUgU1NQUF9UUkFGRklDX1NIQVBFUl9CUENfTUFYICAg ICAgICAweEZGCisKKy8qIFNTUFBfUU9TX0NUUkwgKi8KKyNkZWZpbmUgU1NQUF9RT1NfQ1RSTF9W QkxBTktfRU4gICAgICAgICAgICBCSVQoMTYpCisjZGVmaW5lIFNTUFBfUU9TX0NUUkxfREFOR0VS X1NBRkVfRU4gICAgICAgQklUKDApCisjZGVmaW5lIFNTUFBfUU9TX0NUUkxfREFOR0VSX1ZCTEFO S19NQVNLICAgMHgzCisjZGVmaW5lIFNTUFBfUU9TX0NUUkxfREFOR0VSX1ZCTEFOS19PRkYgICAg NAorI2RlZmluZSBTU1BQX1FPU19DVFJMX0NSRVFfVkJMQU5LX01BU0sgICAgIDB4MworI2RlZmlu ZSBTU1BQX1FPU19DVFJMX0NSRVFfVkJMQU5LX09GRiAgICAgIDIwCisKKy8qIERQVV9TU1BQX1ND QUxFUl9RU0VFRDIgKi8KKyNkZWZpbmUgU0NBTEVfQ09ORklHICAgICAgICAgICAgICAgICAgICAg ICAweDA0CisjZGVmaW5lIENPTVAwXzNfUEhBU0VfU1RFUF9YICAgICAgICAgICAgICAgMHgxMAor I2RlZmluZSBDT01QMF8zX1BIQVNFX1NURVBfWSAgICAgICAgICAgICAgIDB4MTQKKyNkZWZpbmUg Q09NUDFfMl9QSEFTRV9TVEVQX1ggICAgICAgICAgICAgICAweDE4CisjZGVmaW5lIENPTVAxXzJf UEhBU0VfU1RFUF9ZICAgICAgICAgICAgICAgMHgxYworI2RlZmluZSBDT01QMF8zX0lOSVRfUEhB U0VfWCAgICAgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgQ09NUDBfM19JTklUX1BIQVNFX1kgICAg ICAgICAgICAgICAweDI0CisjZGVmaW5lIENPTVAxXzJfSU5JVF9QSEFTRV9YICAgICAgICAgICAg ICAgMHgyOAorI2RlZmluZSBDT01QMV8yX0lOSVRfUEhBU0VfWSAgICAgICAgICAgICAgIDB4MkMK KyNkZWZpbmUgVklHXzBfUVNFRUQyX1NIQVJQICAgICAgICAgICAgICAgICAweDMwCisKKy8qCisg KiBEZWZpbml0aW9ucyBmb3IgVmlHIG9wIG1vZGVzCisgKi8KKyNkZWZpbmUgVklHX09QX0NTQ19E U1RfREFUQUZNVCBCSVQoMTkpCisjZGVmaW5lIFZJR19PUF9DU0NfU1JDX0RBVEFGTVQgQklUKDE4 KQorI2RlZmluZSBWSUdfT1BfQ1NDX0VOICAgICAgICAgIEJJVCgxNykKKyNkZWZpbmUgVklHX09Q X01FTV9QUk9UX0NPTlQgICBCSVQoMTUpCisjZGVmaW5lIFZJR19PUF9NRU1fUFJPVF9WQUwgICAg QklUKDE0KQorI2RlZmluZSBWSUdfT1BfTUVNX1BST1RfU0FUICAgIEJJVCgxMykKKyNkZWZpbmUg VklHX09QX01FTV9QUk9UX0hVRSAgICBCSVQoMTIpCisjZGVmaW5lIFZJR19PUF9ISVNUICAgICAg ICAgICAgQklUKDgpCisjZGVmaW5lIFZJR19PUF9TS1lfQ09MICAgICAgICAgQklUKDcpCisjZGVm aW5lIFZJR19PUF9GT0lMICAgICAgICAgICAgQklUKDYpCisjZGVmaW5lIFZJR19PUF9TS0lOX0NP TCAgICAgICAgQklUKDUpCisjZGVmaW5lIFZJR19PUF9QQV9FTiAgICAgICAgICAgQklUKDQpCisj ZGVmaW5lIFZJR19PUF9QQV9TQVRfWkVST19FWFAgQklUKDIpCisjZGVmaW5lIFZJR19PUF9NRU1f UFJPVF9CTEVORCAgQklUKDEpCisKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgQ1NDIDEwIG9wIG1v ZGVzCisgKi8KKyNkZWZpbmUgVklHX0NTQ18xMF9TUkNfREFUQUZNVCBCSVQoMSkKKyNkZWZpbmUg VklHX0NTQ18xMF9FTiAgICAgICAgICBCSVQoMCkKKyNkZWZpbmUgQ1NDXzEwQklUX09GRlNFVCAg ICAgICA0CisKKy8qIHRyYWZmaWMgc2hhcGVyIGNsb2NrIGluIEh6ICovCisjZGVmaW5lIFRTX0NM SwkJCTE5MjAwMDAwCisKK3N0YXRpYyBpbmxpbmUgaW50IF9zc3BwX3N1YmJsa19vZmZzZXQoc3Ry dWN0IGRwdV9od19waXBlICpjdHgsCisJCWludCBzX2lkLAorCQl1MzIgKmlkeCkKK3sKKwlpbnQg cmMgPSAwOworCWNvbnN0IHN0cnVjdCBkcHVfc3NwcF9zdWJfYmxrcyAqc2JsayA9IGN0eC0+Y2Fw LT5zYmxrOworCisJaWYgKCFjdHgpCisJCXJldHVybiAtRUlOVkFMOworCisJc3dpdGNoIChzX2lk KSB7CisJY2FzZSBEUFVfU1NQUF9TUkM6CisJCSppZHggPSBzYmxrLT5zcmNfYmxrLmJhc2U7CisJ CWJyZWFrOworCWNhc2UgRFBVX1NTUFBfU0NBTEVSX1FTRUVEMjoKKwljYXNlIERQVV9TU1BQX1ND QUxFUl9RU0VFRDM6CisJY2FzZSBEUFVfU1NQUF9TQ0FMRVJfUkdCOgorCQkqaWR4ID0gc2Jsay0+ c2NhbGVyX2Jsay5iYXNlOworCQlicmVhazsKKwljYXNlIERQVV9TU1BQX0NTQzoKKwljYXNlIERQ VV9TU1BQX0NTQ18xMEJJVDoKKwkJKmlkeCA9IHNibGstPmNzY19ibGsuYmFzZTsKKwkJYnJlYWs7 CisJZGVmYXVsdDoKKwkJcmMgPSAtRUlOVkFMOworCX0KKworCXJldHVybiByYzsKK30KKworc3Rh dGljIHZvaWQgZHB1X2h3X3NzcHBfc2V0dXBfbXVsdGlyZWN0KHN0cnVjdCBkcHVfaHdfcGlwZSAq Y3R4LAorCQllbnVtIGRwdV9zc3BwX211bHRpcmVjdF9pbmRleCBpbmRleCwKKwkJZW51bSBkcHVf c3NwcF9tdWx0aXJlY3RfbW9kZSBtb2RlKQoreworCXUzMiBtb2RlX21hc2s7CisJdTMyIGlkeDsK KworCWlmIChfc3NwcF9zdWJibGtfb2Zmc2V0KGN0eCwgRFBVX1NTUFBfU1JDLCAmaWR4KSkKKwkJ cmV0dXJuOworCisJaWYgKGluZGV4ID09IERQVV9TU1BQX1JFQ1RfU09MTykgeworCQkvKioKKwkJ ICogaWYgcmVjdCBpbmRleCBpcyBSRUNUX1NPTE8sIHdlIGNhbm5vdCBleHBlY3QgYQorCQkgKiB2 aXJ0dWFsIHBsYW5lIHNoYXJpbmcgdGhlIHNhbWUgU1NQUCBpZC4gU28gd2UgZ28KKwkJICogYW5k IGRpc2FibGUgbXVsdGlyZWN0CisJCSAqLworCQltb2RlX21hc2sgPSAwOworCX0gZWxzZSB7CisJ CW1vZGVfbWFzayA9IERQVV9SRUdfUkVBRCgmY3R4LT5odywgU1NQUF9NVUxUSVJFQ1RfT1BNT0RF ICsgaWR4KTsKKwkJbW9kZV9tYXNrIHw9IGluZGV4OworCQlpZiAobW9kZSA9PSBEUFVfU1NQUF9N VUxUSVJFQ1RfVElNRV9NWCkKKwkJCW1vZGVfbWFzayB8PSBCSVQoMik7CisJCWVsc2UKKwkJCW1v ZGVfbWFzayAmPSB+QklUKDIpOworCX0KKworCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIFNTUFBf TVVMVElSRUNUX09QTU9ERSArIGlkeCwgbW9kZV9tYXNrKTsKK30KKworc3RhdGljIHZvaWQgX3Nz cHBfc2V0dXBfb3Btb2RlKHN0cnVjdCBkcHVfaHdfcGlwZSAqY3R4LAorCQl1MzIgbWFzaywgdTgg ZW4pCit7CisJdTMyIGlkeDsKKwl1MzIgb3Btb2RlOworCisJaWYgKCF0ZXN0X2JpdChEUFVfU1NQ UF9TQ0FMRVJfUVNFRUQyLCAmY3R4LT5jYXAtPmZlYXR1cmVzKSB8fAorCQlfc3NwcF9zdWJibGtf b2Zmc2V0KGN0eCwgRFBVX1NTUFBfU0NBTEVSX1FTRUVEMiwgJmlkeCkgfHwKKwkJIXRlc3RfYml0 KERQVV9TU1BQX0NTQywgJmN0eC0+Y2FwLT5mZWF0dXJlcykpCisJCXJldHVybjsKKworCW9wbW9k ZSA9IERQVV9SRUdfUkVBRCgmY3R4LT5odywgU1NQUF9WSUdfT1BfTU9ERSArIGlkeCk7CisKKwlp ZiAoZW4pCisJCW9wbW9kZSB8PSBtYXNrOworCWVsc2UKKwkJb3Btb2RlICY9IH5tYXNrOworCisJ RFBVX1JFR19XUklURSgmY3R4LT5odywgU1NQUF9WSUdfT1BfTU9ERSArIGlkeCwgb3Btb2RlKTsK K30KKworc3RhdGljIHZvaWQgX3NzcHBfc2V0dXBfY3NjMTBfb3Btb2RlKHN0cnVjdCBkcHVfaHdf cGlwZSAqY3R4LAorCQl1MzIgbWFzaywgdTggZW4pCit7CisJdTMyIGlkeDsKKwl1MzIgb3Btb2Rl OworCisJaWYgKF9zc3BwX3N1YmJsa19vZmZzZXQoY3R4LCBEUFVfU1NQUF9DU0NfMTBCSVQsICZp ZHgpKQorCQlyZXR1cm47CisKKwlvcG1vZGUgPSBEUFVfUkVHX1JFQUQoJmN0eC0+aHcsIFNTUFBf VklHX0NTQ18xMF9PUF9NT0RFICsgaWR4KTsKKwlpZiAoZW4pCisJCW9wbW9kZSB8PSBtYXNrOwor CWVsc2UKKwkJb3Btb2RlICY9IH5tYXNrOworCisJRFBVX1JFR19XUklURSgmY3R4LT5odywgU1NQ UF9WSUdfQ1NDXzEwX09QX01PREUgKyBpZHgsIG9wbW9kZSk7Cit9CisKKy8qKgorICogU2V0dXAg c291cmNlIHBpeGVsIGZvcm1hdCwgZmxpcCwKKyAqLworc3RhdGljIHZvaWQgZHB1X2h3X3NzcHBf c2V0dXBfZm9ybWF0KHN0cnVjdCBkcHVfaHdfcGlwZSAqY3R4LAorCQljb25zdCBzdHJ1Y3QgZHB1 X2Zvcm1hdCAqZm10LCB1MzIgZmxhZ3MsCisJCWVudW0gZHB1X3NzcHBfbXVsdGlyZWN0X2luZGV4 IHJlY3RfbW9kZSkKK3sKKwlzdHJ1Y3QgZHB1X2h3X2Jsa19yZWdfbWFwICpjOworCXUzMiBjaHJv bWFfc2FtcCwgdW5wYWNrLCBzcmNfZm9ybWF0OworCXUzMiBvcG1vZGUgPSAwOworCXUzMiBmYXN0 X2NsZWFyID0gMDsKKwl1MzIgb3BfbW9kZV9vZmYsIHVucGFja19wYXRfb2ZmLCBmb3JtYXRfb2Zm OworCXUzMiBpZHg7CisKKwlpZiAoX3NzcHBfc3ViYmxrX29mZnNldChjdHgsIERQVV9TU1BQX1NS QywgJmlkeCkgfHwgIWZtdCkKKwkJcmV0dXJuOworCisJaWYgKHJlY3RfbW9kZSA9PSBEUFVfU1NQ UF9SRUNUX1NPTE8gfHwgcmVjdF9tb2RlID09IERQVV9TU1BQX1JFQ1RfMCkgeworCQlvcF9tb2Rl X29mZiA9IFNTUFBfU1JDX09QX01PREU7CisJCXVucGFja19wYXRfb2ZmID0gU1NQUF9TUkNfVU5Q QUNLX1BBVFRFUk47CisJCWZvcm1hdF9vZmYgPSBTU1BQX1NSQ19GT1JNQVQ7CisJfSBlbHNlIHsK KwkJb3BfbW9kZV9vZmYgPSBTU1BQX1NSQ19PUF9NT0RFX1JFQzE7CisJCXVucGFja19wYXRfb2Zm ID0gU1NQUF9TUkNfVU5QQUNLX1BBVFRFUk5fUkVDMTsKKwkJZm9ybWF0X29mZiA9IFNTUFBfU1JD X0ZPUk1BVF9SRUMxOworCX0KKworCWMgPSAmY3R4LT5odzsKKwlvcG1vZGUgPSBEUFVfUkVHX1JF QUQoYywgb3BfbW9kZV9vZmYgKyBpZHgpOworCW9wbW9kZSAmPSB+KE1EU1NfTURQX09QX0ZMSVBf TFIgfCBNRFNTX01EUF9PUF9GTElQX1VEIHwKKwkJCU1EU1NfTURQX09QX0JXQ19FTiB8IE1EU1Nf TURQX09QX1BFX09WRVJSSURFKTsKKworCWlmIChmbGFncyAmIERQVV9TU1BQX0ZMSVBfTFIpCisJ CW9wbW9kZSB8PSBNRFNTX01EUF9PUF9GTElQX0xSOworCWlmIChmbGFncyAmIERQVV9TU1BQX0ZM SVBfVUQpCisJCW9wbW9kZSB8PSBNRFNTX01EUF9PUF9GTElQX1VEOworCisJY2hyb21hX3NhbXAg PSBmbXQtPmNocm9tYV9zYW1wbGU7CisJaWYgKGZsYWdzICYgRFBVX1NTUFBfU09VUkNFX1JPVEFU RURfOTApIHsKKwkJaWYgKGNocm9tYV9zYW1wID09IERQVV9DSFJPTUFfSDJWMSkKKwkJCWNocm9t YV9zYW1wID0gRFBVX0NIUk9NQV9IMVYyOworCQllbHNlIGlmIChjaHJvbWFfc2FtcCA9PSBEUFVf Q0hST01BX0gxVjIpCisJCQljaHJvbWFfc2FtcCA9IERQVV9DSFJPTUFfSDJWMTsKKwl9CisKKwlz cmNfZm9ybWF0ID0gKGNocm9tYV9zYW1wIDw8IDIzKSB8IChmbXQtPmZldGNoX3BsYW5lcyA8PCAx OSkgfAorCQkoZm10LT5iaXRzW0MzX0FMUEhBXSA8PCA2KSB8IChmbXQtPmJpdHNbQzJfUl9Dcl0g PDwgNCkgfAorCQkoZm10LT5iaXRzW0MxX0JfQ2JdIDw8IDIpIHwgKGZtdC0+Yml0c1tDMF9HX1ld IDw8IDApOworCisJaWYgKGZsYWdzICYgRFBVX1NTUFBfUk9UXzkwKQorCQlzcmNfZm9ybWF0IHw9 IEJJVCgxMSk7IC8qIFJPVDkwICovCisKKwlpZiAoZm10LT5hbHBoYV9lbmFibGUgJiYgZm10LT5m ZXRjaF9wbGFuZXMgPT0gRFBVX1BMQU5FX0lOVEVSTEVBVkVEKQorCQlzcmNfZm9ybWF0IHw9IEJJ VCg4KTsgLyogU1JDQzNfRU4gKi8KKworCWlmIChmbGFncyAmIERQVV9TU1BQX1NPTElEX0ZJTEwp CisJCXNyY19mb3JtYXQgfD0gQklUKDIyKTsKKworCXVucGFjayA9IChmbXQtPmVsZW1lbnRbM10g PDwgMjQpIHwgKGZtdC0+ZWxlbWVudFsyXSA8PCAxNikgfAorCQkoZm10LT5lbGVtZW50WzFdIDw8 IDgpIHwgKGZtdC0+ZWxlbWVudFswXSA8PCAwKTsKKwlzcmNfZm9ybWF0IHw9ICgoZm10LT51bnBh Y2tfY291bnQgLSAxKSA8PCAxMikgfAorCQkoZm10LT51bnBhY2tfdGlnaHQgPDwgMTcpIHwKKwkJ KGZtdC0+dW5wYWNrX2FsaWduX21zYiA8PCAxOCkgfAorCQkoKGZtdC0+YnBwIC0gMSkgPDwgOSk7 CisKKwlpZiAoZm10LT5mZXRjaF9tb2RlICE9IERQVV9GRVRDSF9MSU5FQVIpIHsKKwkJaWYgKERQ VV9GT1JNQVRfSVNfVUJXQyhmbXQpKQorCQkJb3Btb2RlIHw9IE1EU1NfTURQX09QX0JXQ19FTjsK KwkJc3JjX2Zvcm1hdCB8PSAoZm10LT5mZXRjaF9tb2RlICYgMykgPDwgMzA7IC8qRlJBTUVfRk9S TUFUICovCisJCURQVV9SRUdfV1JJVEUoYywgU1NQUF9GRVRDSF9DT05GSUcsCisJCQlEUFVfRkVU Q0hfQ09ORklHX1JFU0VUX1ZBTFVFIHwKKwkJCWN0eC0+bWRwLT5oaWdoZXN0X2JhbmtfYml0IDw8 IDE4KTsKKwkJaWYgKElTX1VCV0NfMjBfU1VQUE9SVEVEKGN0eC0+Y2F0YWxvZy0+Y2Fwcy0+dWJ3 Y192ZXJzaW9uKSkgeworCQkJZmFzdF9jbGVhciA9IGZtdC0+YWxwaGFfZW5hYmxlID8gQklUKDMx KSA6IDA7CisJCQlEUFVfUkVHX1dSSVRFKGMsIFNTUFBfVUJXQ19TVEFUSUNfQ1RSTCwKKwkJCQkJ ZmFzdF9jbGVhciB8IChjdHgtPm1kcC0+dWJ3Y19zd2l6emxlKSB8CisJCQkJCShjdHgtPm1kcC0+ aGlnaGVzdF9iYW5rX2JpdCA8PCA0KSk7CisJCX0KKwl9CisKKwlvcG1vZGUgfD0gTURTU19NRFBf T1BfUEVfT1ZFUlJJREU7CisKKwkvKiBpZiB0aGlzIGlzIFlVViBwaXhlbCBmb3JtYXQsIGVuYWJs ZSBDU0MgKi8KKwlpZiAoRFBVX0ZPUk1BVF9JU19ZVVYoZm10KSkKKwkJc3JjX2Zvcm1hdCB8PSBC SVQoMTUpOworCisJaWYgKERQVV9GT1JNQVRfSVNfRFgoZm10KSkKKwkJc3JjX2Zvcm1hdCB8PSBC SVQoMTQpOworCisJLyogdXBkYXRlIHNjYWxlciBvcG1vZGUsIGlmIGFwcHJvcHJpYXRlICovCisJ aWYgKHRlc3RfYml0KERQVV9TU1BQX0NTQywgJmN0eC0+Y2FwLT5mZWF0dXJlcykpCisJCV9zc3Bw X3NldHVwX29wbW9kZShjdHgsIFZJR19PUF9DU0NfRU4gfCBWSUdfT1BfQ1NDX1NSQ19EQVRBRk1U LAorCQkJRFBVX0ZPUk1BVF9JU19ZVVYoZm10KSk7CisJZWxzZSBpZiAodGVzdF9iaXQoRFBVX1NT UFBfQ1NDXzEwQklULCAmY3R4LT5jYXAtPmZlYXR1cmVzKSkKKwkJX3NzcHBfc2V0dXBfY3NjMTBf b3Btb2RlKGN0eCwKKwkJCVZJR19DU0NfMTBfRU4gfCBWSUdfQ1NDXzEwX1NSQ19EQVRBRk1ULAor CQkJRFBVX0ZPUk1BVF9JU19ZVVYoZm10KSk7CisKKwlEUFVfUkVHX1dSSVRFKGMsIGZvcm1hdF9v ZmYgKyBpZHgsIHNyY19mb3JtYXQpOworCURQVV9SRUdfV1JJVEUoYywgdW5wYWNrX3BhdF9vZmYg KyBpZHgsIHVucGFjayk7CisJRFBVX1JFR19XUklURShjLCBvcF9tb2RlX29mZiArIGlkeCwgb3Bt b2RlKTsKKworCS8qIGNsZWFyIHByZXZpb3VzIFVCV0MgZXJyb3IgKi8KKwlEUFVfUkVHX1dSSVRF KGMsIFNTUFBfVUJXQ19FUlJPUl9TVEFUVVMgKyBpZHgsIEJJVCgzMSkpOworfQorCitzdGF0aWMg dm9pZCBkcHVfaHdfc3NwcF9zZXR1cF9wZV9jb25maWcoc3RydWN0IGRwdV9od19waXBlICpjdHgs CisJCXN0cnVjdCBkcHVfaHdfcGl4ZWxfZXh0ICpwZV9leHQpCit7CisJc3RydWN0IGRwdV9od19i bGtfcmVnX21hcCAqYzsKKwl1OCBjb2xvcjsKKwl1MzIgbHJfcGVbNF0sIHRiX3BlWzRdLCB0b3Rf cmVxX3BpeGVsc1s0XTsKKwljb25zdCB1MzIgYnl0ZW1hc2sgPSAweGZmOworCWNvbnN0IHUzMiBz aG9ydG1hc2sgPSAweGZmZmY7CisJdTMyIGlkeDsKKworCWlmIChfc3NwcF9zdWJibGtfb2Zmc2V0 KGN0eCwgRFBVX1NTUFBfU1JDLCAmaWR4KSB8fCAhcGVfZXh0KQorCQlyZXR1cm47CisKKwljID0g JmN0eC0+aHc7CisKKwkvKiBwcm9ncmFtIFNXIHBpeGVsIGV4dGVuc2lvbiBvdmVycmlkZSBmb3Ig YWxsIHBpcGVzKi8KKwlmb3IgKGNvbG9yID0gMDsgY29sb3IgPCBEUFVfTUFYX1BMQU5FUzsgY29s b3IrKykgeworCQkvKiBjb2xvciAyIGhhcyB0aGUgc2FtZSBzZXQgb2YgcmVnaXN0ZXJzIGFzIGNv bG9yIDEgKi8KKwkJaWYgKGNvbG9yID09IDIpCisJCQljb250aW51ZTsKKworCQlscl9wZVtjb2xv cl0gPSAoKHBlX2V4dC0+cmlnaHRfZnRjaFtjb2xvcl0gJiBieXRlbWFzaykgPDwgMjQpfAorCQkJ KChwZV9leHQtPnJpZ2h0X3JwdFtjb2xvcl0gJiBieXRlbWFzaykgPDwgMTYpfAorCQkJKChwZV9l eHQtPmxlZnRfZnRjaFtjb2xvcl0gJiBieXRlbWFzaykgPDwgOCl8CisJCQkocGVfZXh0LT5sZWZ0 X3JwdFtjb2xvcl0gJiBieXRlbWFzayk7CisKKwkJdGJfcGVbY29sb3JdID0gKChwZV9leHQtPmJ0 bV9mdGNoW2NvbG9yXSAmIGJ5dGVtYXNrKSA8PCAyNCl8CisJCQkoKHBlX2V4dC0+YnRtX3JwdFtj b2xvcl0gJiBieXRlbWFzaykgPDwgMTYpfAorCQkJKChwZV9leHQtPnRvcF9mdGNoW2NvbG9yXSAm IGJ5dGVtYXNrKSA8PCA4KXwKKwkJCShwZV9leHQtPnRvcF9ycHRbY29sb3JdICYgYnl0ZW1hc2sp OworCisJCXRvdF9yZXFfcGl4ZWxzW2NvbG9yXSA9ICgoKHBlX2V4dC0+cm9pX2hbY29sb3JdICsK KwkJCXBlX2V4dC0+bnVtX2V4dF9weGxzX3RvcFtjb2xvcl0gKworCQkJcGVfZXh0LT5udW1fZXh0 X3B4bHNfYnRtW2NvbG9yXSkgJiBzaG9ydG1hc2spIDw8IDE2KSB8CisJCQkoKHBlX2V4dC0+cm9p X3dbY29sb3JdICsKKwkJCXBlX2V4dC0+bnVtX2V4dF9weGxzX2xlZnRbY29sb3JdICsKKwkJCXBl X2V4dC0+bnVtX2V4dF9weGxzX3JpZ2h0W2NvbG9yXSkgJiBzaG9ydG1hc2spOworCX0KKworCS8q IGNvbG9yIDAgKi8KKwlEUFVfUkVHX1dSSVRFKGMsIFNTUFBfU1dfUElYX0VYVF9DMF9MUiArIGlk eCwgbHJfcGVbMF0pOworCURQVV9SRUdfV1JJVEUoYywgU1NQUF9TV19QSVhfRVhUX0MwX1RCICsg aWR4LCB0Yl9wZVswXSk7CisJRFBVX1JFR19XUklURShjLCBTU1BQX1NXX1BJWF9FWFRfQzBfUkVR X1BJWEVMUyArIGlkeCwKKwkJCXRvdF9yZXFfcGl4ZWxzWzBdKTsKKworCS8qIGNvbG9yIDEgYW5k IGNvbG9yIDIgKi8KKwlEUFVfUkVHX1dSSVRFKGMsIFNTUFBfU1dfUElYX0VYVF9DMUMyX0xSICsg aWR4LCBscl9wZVsxXSk7CisJRFBVX1JFR19XUklURShjLCBTU1BQX1NXX1BJWF9FWFRfQzFDMl9U QiArIGlkeCwgdGJfcGVbMV0pOworCURQVV9SRUdfV1JJVEUoYywgU1NQUF9TV19QSVhfRVhUX0Mx QzJfUkVRX1BJWEVMUyArIGlkeCwKKwkJCXRvdF9yZXFfcGl4ZWxzWzFdKTsKKworCS8qIGNvbG9y IDMgKi8KKwlEUFVfUkVHX1dSSVRFKGMsIFNTUFBfU1dfUElYX0VYVF9DM19MUiArIGlkeCwgbHJf cGVbM10pOworCURQVV9SRUdfV1JJVEUoYywgU1NQUF9TV19QSVhfRVhUX0MzX1RCICsgaWR4LCBs cl9wZVszXSk7CisJRFBVX1JFR19XUklURShjLCBTU1BQX1NXX1BJWF9FWFRfQzNfUkVRX1BJWEVM UyArIGlkeCwKKwkJCXRvdF9yZXFfcGl4ZWxzWzNdKTsKK30KKworc3RhdGljIHZvaWQgX2RwdV9o d19zc3BwX3NldHVwX3NjYWxlcjMoc3RydWN0IGRwdV9od19waXBlICpjdHgsCisJCXN0cnVjdCBk cHVfaHdfcGlwZV9jZmcgKnNzcHAsCisJCXN0cnVjdCBkcHVfaHdfcGl4ZWxfZXh0ICpwZSwKKwkJ dm9pZCAqc2NhbGVyX2NmZykKK3sKKwl1MzIgaWR4OworCXN0cnVjdCBkcHVfaHdfc2NhbGVyM19j ZmcgKnNjYWxlcjNfY2ZnID0gc2NhbGVyX2NmZzsKKworCSh2b2lkKXBlOworCWlmIChfc3NwcF9z dWJibGtfb2Zmc2V0KGN0eCwgRFBVX1NTUFBfU0NBTEVSX1FTRUVEMywgJmlkeCkgfHwgIXNzcHAK KwkJfHwgIXNjYWxlcjNfY2ZnIHx8ICFjdHggfHwgIWN0eC0+Y2FwIHx8ICFjdHgtPmNhcC0+c2Js aykKKwkJcmV0dXJuOworCisJZHB1X2h3X3NldHVwX3NjYWxlcjMoJmN0eC0+aHcsIHNjYWxlcjNf Y2ZnLCBpZHgsCisJCQljdHgtPmNhcC0+c2Jsay0+c2NhbGVyX2Jsay52ZXJzaW9uLAorCQkJc3Nw cC0+bGF5b3V0LmZvcm1hdCk7Cit9CisKK3N0YXRpYyB1MzIgX2RwdV9od19zc3BwX2dldF9zY2Fs ZXIzX3ZlcihzdHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCkKK3sKKwl1MzIgaWR4OworCisJaWYgKCFj dHggfHwgX3NzcHBfc3ViYmxrX29mZnNldChjdHgsIERQVV9TU1BQX1NDQUxFUl9RU0VFRDMsICZp ZHgpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBkcHVfaHdfZ2V0X3NjYWxlcjNfdmVyKCZjdHgt Pmh3LCBpZHgpOworfQorCisvKioKKyAqIGRwdV9od19zc3BwX3NldHVwX3JlY3RzKCkKKyAqLwor c3RhdGljIHZvaWQgZHB1X2h3X3NzcHBfc2V0dXBfcmVjdHMoc3RydWN0IGRwdV9od19waXBlICpj dHgsCisJCXN0cnVjdCBkcHVfaHdfcGlwZV9jZmcgKmNmZywKKwkJZW51bSBkcHVfc3NwcF9tdWx0 aXJlY3RfaW5kZXggcmVjdF9pbmRleCkKK3sKKwlzdHJ1Y3QgZHB1X2h3X2Jsa19yZWdfbWFwICpj OworCXUzMiBzcmNfc2l6ZSwgc3JjX3h5LCBkc3Rfc2l6ZSwgZHN0X3h5LCB5c3RyaWRlMCwgeXN0 cmlkZTE7CisJdTMyIHNyY19zaXplX29mZiwgc3JjX3h5X29mZiwgb3V0X3NpemVfb2ZmLCBvdXRf eHlfb2ZmOworCXUzMiBpZHg7CisKKwlpZiAoX3NzcHBfc3ViYmxrX29mZnNldChjdHgsIERQVV9T U1BQX1NSQywgJmlkeCkgfHwgIWNmZykKKwkJcmV0dXJuOworCisJYyA9ICZjdHgtPmh3OworCisJ aWYgKHJlY3RfaW5kZXggPT0gRFBVX1NTUFBfUkVDVF9TT0xPIHx8IHJlY3RfaW5kZXggPT0gRFBV X1NTUFBfUkVDVF8wKSB7CisJCXNyY19zaXplX29mZiA9IFNTUFBfU1JDX1NJWkU7CisJCXNyY194 eV9vZmYgPSBTU1BQX1NSQ19YWTsKKwkJb3V0X3NpemVfb2ZmID0gU1NQUF9PVVRfU0laRTsKKwkJ b3V0X3h5X29mZiA9IFNTUFBfT1VUX1hZOworCX0gZWxzZSB7CisJCXNyY19zaXplX29mZiA9IFNT UFBfU1JDX1NJWkVfUkVDMTsKKwkJc3JjX3h5X29mZiA9IFNTUFBfU1JDX1hZX1JFQzE7CisJCW91 dF9zaXplX29mZiA9IFNTUFBfT1VUX1NJWkVfUkVDMTsKKwkJb3V0X3h5X29mZiA9IFNTUFBfT1VU X1hZX1JFQzE7CisJfQorCisKKwkvKiBzcmMgYW5kIGRlc3QgcmVjdCBwcm9ncmFtbWluZyAqLwor CXNyY194eSA9IChjZmctPnNyY19yZWN0LnkxIDw8IDE2KSB8IGNmZy0+c3JjX3JlY3QueDE7CisJ c3JjX3NpemUgPSAoZHJtX3JlY3RfaGVpZ2h0KCZjZmctPnNyY19yZWN0KSA8PCAxNikgfAorCQkg ICBkcm1fcmVjdF93aWR0aCgmY2ZnLT5zcmNfcmVjdCk7CisJZHN0X3h5ID0gKGNmZy0+ZHN0X3Jl Y3QueTEgPDwgMTYpIHwgY2ZnLT5kc3RfcmVjdC54MTsKKwlkc3Rfc2l6ZSA9IChkcm1fcmVjdF9o ZWlnaHQoJmNmZy0+ZHN0X3JlY3QpIDw8IDE2KSB8CisJCWRybV9yZWN0X3dpZHRoKCZjZmctPmRz dF9yZWN0KTsKKworCWlmIChyZWN0X2luZGV4ID09IERQVV9TU1BQX1JFQ1RfU09MTykgeworCQl5 c3RyaWRlMCA9IChjZmctPmxheW91dC5wbGFuZV9waXRjaFswXSkgfAorCQkJKGNmZy0+bGF5b3V0 LnBsYW5lX3BpdGNoWzFdIDw8IDE2KTsKKwkJeXN0cmlkZTEgPSAoY2ZnLT5sYXlvdXQucGxhbmVf cGl0Y2hbMl0pIHwKKwkJCShjZmctPmxheW91dC5wbGFuZV9waXRjaFszXSA8PCAxNik7CisJfSBl bHNlIHsKKwkJeXN0cmlkZTAgPSBEUFVfUkVHX1JFQUQoYywgU1NQUF9TUkNfWVNUUklERTAgKyBp ZHgpOworCQl5c3RyaWRlMSA9IERQVV9SRUdfUkVBRChjLCBTU1BQX1NSQ19ZU1RSSURFMSArIGlk eCk7CisKKwkJaWYgKHJlY3RfaW5kZXggPT0gRFBVX1NTUFBfUkVDVF8wKSB7CisJCQl5c3RyaWRl MCA9ICh5c3RyaWRlMCAmIDB4RkZGRjAwMDApIHwKKwkJCQkoY2ZnLT5sYXlvdXQucGxhbmVfcGl0 Y2hbMF0gJiAweDAwMDBGRkZGKTsKKwkJCXlzdHJpZGUxID0gKHlzdHJpZGUxICYgMHhGRkZGMDAw MCl8CisJCQkJKGNmZy0+bGF5b3V0LnBsYW5lX3BpdGNoWzJdICYgMHgwMDAwRkZGRik7CisJCX0g ZWxzZSB7CisJCQl5c3RyaWRlMCA9ICh5c3RyaWRlMCAmIDB4MDAwMEZGRkYpIHwKKwkJCQkoKGNm Zy0+bGF5b3V0LnBsYW5lX3BpdGNoWzBdIDw8IDE2KSAmCisJCQkJIDB4RkZGRjAwMDApOworCQkJ eXN0cmlkZTEgPSAoeXN0cmlkZTEgJiAweDAwMDBGRkZGKSB8CisJCQkJKChjZmctPmxheW91dC5w bGFuZV9waXRjaFsyXSA8PCAxNikgJgorCQkJCSAweEZGRkYwMDAwKTsKKwkJfQorCX0KKworCS8q IHJlY3RhbmdsZSByZWdpc3RlciBwcm9ncmFtbWluZyAqLworCURQVV9SRUdfV1JJVEUoYywgc3Jj X3NpemVfb2ZmICsgaWR4LCBzcmNfc2l6ZSk7CisJRFBVX1JFR19XUklURShjLCBzcmNfeHlfb2Zm ICsgaWR4LCBzcmNfeHkpOworCURQVV9SRUdfV1JJVEUoYywgb3V0X3NpemVfb2ZmICsgaWR4LCBk c3Rfc2l6ZSk7CisJRFBVX1JFR19XUklURShjLCBvdXRfeHlfb2ZmICsgaWR4LCBkc3RfeHkpOwor CisJRFBVX1JFR19XUklURShjLCBTU1BQX1NSQ19ZU1RSSURFMCArIGlkeCwgeXN0cmlkZTApOwor CURQVV9SRUdfV1JJVEUoYywgU1NQUF9TUkNfWVNUUklERTEgKyBpZHgsIHlzdHJpZGUxKTsKK30K Kworc3RhdGljIHZvaWQgZHB1X2h3X3NzcHBfc2V0dXBfc291cmNlYWRkcmVzcyhzdHJ1Y3QgZHB1 X2h3X3BpcGUgKmN0eCwKKwkJc3RydWN0IGRwdV9od19waXBlX2NmZyAqY2ZnLAorCQllbnVtIGRw dV9zc3BwX211bHRpcmVjdF9pbmRleCByZWN0X21vZGUpCit7CisJaW50IGk7CisJdTMyIGlkeDsK KworCWlmIChfc3NwcF9zdWJibGtfb2Zmc2V0KGN0eCwgRFBVX1NTUFBfU1JDLCAmaWR4KSkKKwkJ cmV0dXJuOworCisJaWYgKHJlY3RfbW9kZSA9PSBEUFVfU1NQUF9SRUNUX1NPTE8pIHsKKwkJZm9y IChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2ZnLT5sYXlvdXQucGxhbmVfYWRkcik7IGkrKykKKwkJ CURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIFNTUFBfU1JDMF9BRERSICsgaWR4ICsgaSAqIDB4NCwK KwkJCQkJY2ZnLT5sYXlvdXQucGxhbmVfYWRkcltpXSk7CisJfSBlbHNlIGlmIChyZWN0X21vZGUg PT0gRFBVX1NTUFBfUkVDVF8wKSB7CisJCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIFNTUFBfU1JD MF9BRERSICsgaWR4LAorCQkJCWNmZy0+bGF5b3V0LnBsYW5lX2FkZHJbMF0pOworCQlEUFVfUkVH X1dSSVRFKCZjdHgtPmh3LCBTU1BQX1NSQzJfQUREUiArIGlkeCwKKwkJCQljZmctPmxheW91dC5w bGFuZV9hZGRyWzJdKTsKKwl9IGVsc2UgeworCQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBTU1BQ X1NSQzFfQUREUiArIGlkeCwKKwkJCQljZmctPmxheW91dC5wbGFuZV9hZGRyWzBdKTsKKwkJRFBV X1JFR19XUklURSgmY3R4LT5odywgU1NQUF9TUkMzX0FERFIgKyBpZHgsCisJCQkJY2ZnLT5sYXlv dXQucGxhbmVfYWRkclsyXSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBkcHVfaHdfc3NwcF9zZXR1 cF9jc2Moc3RydWN0IGRwdV9od19waXBlICpjdHgsCisJCXN0cnVjdCBkcHVfY3NjX2NmZyAqZGF0 YSkKK3sKKwl1MzIgaWR4OworCWJvb2wgY3NjMTAgPSBmYWxzZTsKKworCWlmIChfc3NwcF9zdWJi bGtfb2Zmc2V0KGN0eCwgRFBVX1NTUFBfQ1NDLCAmaWR4KSB8fCAhZGF0YSkKKwkJcmV0dXJuOwor CisJaWYgKHRlc3RfYml0KERQVV9TU1BQX0NTQ18xMEJJVCwgJmN0eC0+Y2FwLT5mZWF0dXJlcykp IHsKKwkJaWR4ICs9IENTQ18xMEJJVF9PRkZTRVQ7CisJCWNzYzEwID0gdHJ1ZTsKKwl9CisKKwlk cHVfaHdfY3NjX3NldHVwKCZjdHgtPmh3LCBpZHgsIGRhdGEsIGNzYzEwKTsKK30KKworc3RhdGlj IHZvaWQgZHB1X2h3X3NzcHBfc2V0dXBfc29saWRmaWxsKHN0cnVjdCBkcHVfaHdfcGlwZSAqY3R4 LCB1MzIgY29sb3IsIGVudW0KKwkJZHB1X3NzcHBfbXVsdGlyZWN0X2luZGV4IHJlY3RfaW5kZXgp Cit7CisJdTMyIGlkeDsKKworCWlmIChfc3NwcF9zdWJibGtfb2Zmc2V0KGN0eCwgRFBVX1NTUFBf U1JDLCAmaWR4KSkKKwkJcmV0dXJuOworCisJaWYgKHJlY3RfaW5kZXggPT0gRFBVX1NTUFBfUkVD VF9TT0xPIHx8IHJlY3RfaW5kZXggPT0gRFBVX1NTUFBfUkVDVF8wKQorCQlEUFVfUkVHX1dSSVRF KCZjdHgtPmh3LCBTU1BQX1NSQ19DT05TVEFOVF9DT0xPUiArIGlkeCwgY29sb3IpOworCWVsc2UK KwkJRFBVX1JFR19XUklURSgmY3R4LT5odywgU1NQUF9TUkNfQ09OU1RBTlRfQ09MT1JfUkVDMSAr IGlkeCwKKwkJCQljb2xvcik7Cit9CisKK3N0YXRpYyB2b2lkIGRwdV9od19zc3BwX3NldHVwX2Rh bmdlcl9zYWZlX2x1dChzdHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCwKKwkJc3RydWN0IGRwdV9od19w aXBlX3Fvc19jZmcgKmNmZykKK3sKKwl1MzIgaWR4OworCisJaWYgKF9zc3BwX3N1YmJsa19vZmZz ZXQoY3R4LCBEUFVfU1NQUF9TUkMsICZpZHgpKQorCQlyZXR1cm47CisKKwlEUFVfUkVHX1dSSVRF KCZjdHgtPmh3LCBTU1BQX0RBTkdFUl9MVVQgKyBpZHgsIGNmZy0+ZGFuZ2VyX2x1dCk7CisJRFBV X1JFR19XUklURSgmY3R4LT5odywgU1NQUF9TQUZFX0xVVCArIGlkeCwgY2ZnLT5zYWZlX2x1dCk7 Cit9CisKK3N0YXRpYyB2b2lkIGRwdV9od19zc3BwX3NldHVwX2NyZXFfbHV0KHN0cnVjdCBkcHVf aHdfcGlwZSAqY3R4LAorCQlzdHJ1Y3QgZHB1X2h3X3BpcGVfcW9zX2NmZyAqY2ZnKQoreworCXUz MiBpZHg7CisKKwlpZiAoX3NzcHBfc3ViYmxrX29mZnNldChjdHgsIERQVV9TU1BQX1NSQywgJmlk eCkpCisJCXJldHVybjsKKworCWlmIChjdHgtPmNhcCAmJiB0ZXN0X2JpdChEUFVfU1NQUF9RT1Nf OExWTCwgJmN0eC0+Y2FwLT5mZWF0dXJlcykpIHsKKwkJRFBVX1JFR19XUklURSgmY3R4LT5odywg U1NQUF9DUkVRX0xVVF8wICsgaWR4LCBjZmctPmNyZXFfbHV0KTsKKwkJRFBVX1JFR19XUklURSgm Y3R4LT5odywgU1NQUF9DUkVRX0xVVF8xICsgaWR4LAorCQkJCWNmZy0+Y3JlcV9sdXQgPj4gMzIp OworCX0gZWxzZSB7CisJCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIFNTUFBfQ1JFUV9MVVQgKyBp ZHgsIGNmZy0+Y3JlcV9sdXQpOworCX0KK30KKworc3RhdGljIHZvaWQgZHB1X2h3X3NzcHBfc2V0 dXBfcW9zX2N0cmwoc3RydWN0IGRwdV9od19waXBlICpjdHgsCisJCXN0cnVjdCBkcHVfaHdfcGlw ZV9xb3NfY2ZnICpjZmcpCit7CisJdTMyIGlkeDsKKwl1MzIgcW9zX2N0cmwgPSAwOworCisJaWYg KF9zc3BwX3N1YmJsa19vZmZzZXQoY3R4LCBEUFVfU1NQUF9TUkMsICZpZHgpKQorCQlyZXR1cm47 CisKKwlpZiAoY2ZnLT52YmxhbmtfZW4pIHsKKwkJcW9zX2N0cmwgfD0gKChjZmctPmNyZXFfdmJs YW5rICYKKwkJCQlTU1BQX1FPU19DVFJMX0NSRVFfVkJMQU5LX01BU0spIDw8CisJCQkJU1NQUF9R T1NfQ1RSTF9DUkVRX1ZCTEFOS19PRkYpOworCQlxb3NfY3RybCB8PSAoKGNmZy0+ZGFuZ2VyX3Zi bGFuayAmCisJCQkJU1NQUF9RT1NfQ1RSTF9EQU5HRVJfVkJMQU5LX01BU0spIDw8CisJCQkJU1NQ UF9RT1NfQ1RSTF9EQU5HRVJfVkJMQU5LX09GRik7CisJCXFvc19jdHJsIHw9IFNTUFBfUU9TX0NU UkxfVkJMQU5LX0VOOworCX0KKworCWlmIChjZmctPmRhbmdlcl9zYWZlX2VuKQorCQlxb3NfY3Ry bCB8PSBTU1BQX1FPU19DVFJMX0RBTkdFUl9TQUZFX0VOOworCisJRFBVX1JFR19XUklURSgmY3R4 LT5odywgU1NQUF9RT1NfQ1RSTCArIGlkeCwgcW9zX2N0cmwpOworfQorCitzdGF0aWMgdm9pZCBk cHVfaHdfc3NwcF9zZXR1cF9jZHAoc3RydWN0IGRwdV9od19waXBlICpjdHgsCisJCXN0cnVjdCBk cHVfaHdfcGlwZV9jZHBfY2ZnICpjZmcpCit7CisJdTMyIGlkeDsKKwl1MzIgY2RwX2NudGwgPSAw OworCisJaWYgKCFjdHggfHwgIWNmZykKKwkJcmV0dXJuOworCisJaWYgKF9zc3BwX3N1YmJsa19v ZmZzZXQoY3R4LCBEUFVfU1NQUF9TUkMsICZpZHgpKQorCQlyZXR1cm47CisKKwlpZiAoY2ZnLT5l bmFibGUpCisJCWNkcF9jbnRsIHw9IEJJVCgwKTsKKwlpZiAoY2ZnLT51YndjX21ldGFfZW5hYmxl KQorCQljZHBfY250bCB8PSBCSVQoMSk7CisJaWYgKGNmZy0+dGlsZV9hbW9ydGl6ZV9lbmFibGUp CisJCWNkcF9jbnRsIHw9IEJJVCgyKTsKKwlpZiAoY2ZnLT5wcmVsb2FkX2FoZWFkID09IERQVV9T U1BQX0NEUF9QUkVMT0FEX0FIRUFEXzY0KQorCQljZHBfY250bCB8PSBCSVQoMyk7CisKKwlEUFVf UkVHX1dSSVRFKCZjdHgtPmh3LCBTU1BQX0NEUF9DTlRMLCBjZHBfY250bCk7Cit9CisKK3N0YXRp YyB2b2lkIF9zZXR1cF9sYXllcl9vcHMoc3RydWN0IGRwdV9od19waXBlICpjLAorCQl1bnNpZ25l ZCBsb25nIGZlYXR1cmVzKQoreworCWlmICh0ZXN0X2JpdChEUFVfU1NQUF9TUkMsICZmZWF0dXJl cykpIHsKKwkJYy0+b3BzLnNldHVwX2Zvcm1hdCA9IGRwdV9od19zc3BwX3NldHVwX2Zvcm1hdDsK KwkJYy0+b3BzLnNldHVwX3JlY3RzID0gZHB1X2h3X3NzcHBfc2V0dXBfcmVjdHM7CisJCWMtPm9w cy5zZXR1cF9zb3VyY2VhZGRyZXNzID0gZHB1X2h3X3NzcHBfc2V0dXBfc291cmNlYWRkcmVzczsK KwkJYy0+b3BzLnNldHVwX3NvbGlkZmlsbCA9IGRwdV9od19zc3BwX3NldHVwX3NvbGlkZmlsbDsK KwkJYy0+b3BzLnNldHVwX3BlID0gZHB1X2h3X3NzcHBfc2V0dXBfcGVfY29uZmlnOworCX0KKwor CWlmICh0ZXN0X2JpdChEUFVfU1NQUF9RT1MsICZmZWF0dXJlcykpIHsKKwkJYy0+b3BzLnNldHVw X2Rhbmdlcl9zYWZlX2x1dCA9CisJCQlkcHVfaHdfc3NwcF9zZXR1cF9kYW5nZXJfc2FmZV9sdXQ7 CisJCWMtPm9wcy5zZXR1cF9jcmVxX2x1dCA9IGRwdV9od19zc3BwX3NldHVwX2NyZXFfbHV0Owor CQljLT5vcHMuc2V0dXBfcW9zX2N0cmwgPSBkcHVfaHdfc3NwcF9zZXR1cF9xb3NfY3RybDsKKwl9 CisKKwlpZiAodGVzdF9iaXQoRFBVX1NTUFBfQ1NDLCAmZmVhdHVyZXMpIHx8CisJCXRlc3RfYml0 KERQVV9TU1BQX0NTQ18xMEJJVCwgJmZlYXR1cmVzKSkKKwkJYy0+b3BzLnNldHVwX2NzYyA9IGRw dV9od19zc3BwX3NldHVwX2NzYzsKKworCWlmIChkcHVfaHdfc3NwcF9tdWx0aXJlY3RfZW5hYmxl ZChjLT5jYXApKQorCQljLT5vcHMuc2V0dXBfbXVsdGlyZWN0ID0gZHB1X2h3X3NzcHBfc2V0dXBf bXVsdGlyZWN0OworCisJaWYgKHRlc3RfYml0KERQVV9TU1BQX1NDQUxFUl9RU0VFRDMsICZmZWF0 dXJlcykpIHsKKwkJYy0+b3BzLnNldHVwX3NjYWxlciA9IF9kcHVfaHdfc3NwcF9zZXR1cF9zY2Fs ZXIzOworCQljLT5vcHMuZ2V0X3NjYWxlcl92ZXIgPSBfZHB1X2h3X3NzcHBfZ2V0X3NjYWxlcjNf dmVyOworCX0KKworCWlmICh0ZXN0X2JpdChEUFVfU1NQUF9DRFAsICZmZWF0dXJlcykpCisJCWMt Pm9wcy5zZXR1cF9jZHAgPSBkcHVfaHdfc3NwcF9zZXR1cF9jZHA7Cit9CisKK3N0YXRpYyBzdHJ1 Y3QgZHB1X3NzcHBfY2ZnICpfc3NwcF9vZmZzZXQoZW51bSBkcHVfc3NwcCBzc3BwLAorCQl2b2lk IF9faW9tZW0gKmFkZHIsCisJCXN0cnVjdCBkcHVfbWRzc19jZmcgKmNhdGFsb2csCisJCXN0cnVj dCBkcHVfaHdfYmxrX3JlZ19tYXAgKmIpCit7CisJaW50IGk7CisKKwlpZiAoKHNzcHAgPCBTU1BQ X01BWCkgJiYgY2F0YWxvZyAmJiBhZGRyICYmIGIpIHsKKwkJZm9yIChpID0gMDsgaSA8IGNhdGFs b2ctPnNzcHBfY291bnQ7IGkrKykgeworCQkJaWYgKHNzcHAgPT0gY2F0YWxvZy0+c3NwcFtpXS5p ZCkgeworCQkJCWItPmJhc2Vfb2ZmID0gYWRkcjsKKwkJCQliLT5ibGtfb2ZmID0gY2F0YWxvZy0+ c3NwcFtpXS5iYXNlOworCQkJCWItPmxlbmd0aCA9IGNhdGFsb2ctPnNzcHBbaV0ubGVuOworCQkJ CWItPmh3dmVyc2lvbiA9IGNhdGFsb2ctPmh3dmVyc2lvbjsKKwkJCQliLT5sb2dfbWFzayA9IERQ VV9EQkdfTUFTS19TU1BQOworCQkJCXJldHVybiAmY2F0YWxvZy0+c3NwcFtpXTsKKwkJCX0KKwkJ fQorCX0KKworCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworfQorCitzdGF0aWMgc3RydWN0IGRw dV9od19ibGtfb3BzIGRwdV9od19vcHMgPSB7CisJLnN0YXJ0ID0gTlVMTCwKKwkuc3RvcCA9IE5V TEwsCit9OworCitzdHJ1Y3QgZHB1X2h3X3BpcGUgKmRwdV9od19zc3BwX2luaXQoZW51bSBkcHVf c3NwcCBpZHgsCisJCXZvaWQgX19pb21lbSAqYWRkciwgc3RydWN0IGRwdV9tZHNzX2NmZyAqY2F0 YWxvZywKKwkJYm9vbCBpc192aXJ0dWFsX3BpcGUpCit7CisJc3RydWN0IGRwdV9od19waXBlICpo d19waXBlOworCXN0cnVjdCBkcHVfc3NwcF9jZmcgKmNmZzsKKwlpbnQgcmM7CisKKwlpZiAoIWFk ZHIgfHwgIWNhdGFsb2cpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJaHdfcGlwZSA9 IGt6YWxsb2Moc2l6ZW9mKCpod19waXBlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFod19waXBlKQor CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWNmZyA9IF9zc3BwX29mZnNldChpZHgsIGFk ZHIsIGNhdGFsb2csICZod19waXBlLT5odyk7CisJaWYgKElTX0VSUl9PUl9OVUxMKGNmZykpIHsK KwkJa2ZyZWUoaHdfcGlwZSk7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0KKworCS8q IEFzc2lnbiBvcHMgKi8KKwlod19waXBlLT5jYXRhbG9nID0gY2F0YWxvZzsKKwlod19waXBlLT5t ZHAgPSAmY2F0YWxvZy0+bWRwWzBdOworCWh3X3BpcGUtPmlkeCA9IGlkeDsKKwlod19waXBlLT5j YXAgPSBjZmc7CisJX3NldHVwX2xheWVyX29wcyhod19waXBlLCBod19waXBlLT5jYXAtPmZlYXR1 cmVzKTsKKworCXJjID0gZHB1X2h3X2Jsa19pbml0KCZod19waXBlLT5iYXNlLCBEUFVfSFdfQkxL X1NTUFAsIGlkeCwgJmRwdV9od19vcHMpOworCWlmIChyYykgeworCQlEUFVfRVJST1IoImZhaWxl ZCB0byBpbml0IGh3IGJsayAlZFxuIiwgcmMpOworCQlnb3RvIGJsa19pbml0X2Vycm9yOworCX0K KworCXJldHVybiBod19waXBlOworCitibGtfaW5pdF9lcnJvcjoKKwlremZyZWUoaHdfcGlwZSk7 CisKKwlyZXR1cm4gRVJSX1BUUihyYyk7Cit9CisKK3ZvaWQgZHB1X2h3X3NzcHBfZGVzdHJveShz dHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCkKK3sKKwlpZiAoY3R4KQorCQlkcHVfaHdfYmxrX2Rlc3Ry b3koJmN0eC0+YmFzZSk7CisJa2ZyZWUoY3R4KTsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3NzcHAuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9od19zc3BwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAwLi40ZDgxZTVmNWNlMWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0v bXNtL2Rpc3AvZHB1MS9kcHVfaHdfc3NwcC5oCkBAIC0wLDAgKzEsNDI0IEBACisvKiBDb3B5cmln aHQgKGMpIDIwMTUtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAorICogb25seSB2ZXJzaW9uIDIg YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhp cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9EUFVfSFdfU1NQUF9ICisjZGVmaW5lIF9E UFVfSFdfU1NQUF9ICisKKyNpbmNsdWRlICJkcHVfaHdfY2F0YWxvZy5oIgorI2luY2x1ZGUgImRw dV9od19tZHNzLmgiCisjaW5jbHVkZSAiZHB1X2h3X3V0aWwuaCIKKyNpbmNsdWRlICJkcHVfaHdf YmxrLmgiCisjaW5jbHVkZSAiZHB1X2Zvcm1hdHMuaCIKKworc3RydWN0IGRwdV9od19waXBlOwor CisvKioKKyAqIEZsYWdzCisgKi8KKyNkZWZpbmUgRFBVX1NTUFBfRkxJUF9MUgkJQklUKDApCisj ZGVmaW5lIERQVV9TU1BQX0ZMSVBfVUQJCUJJVCgxKQorI2RlZmluZSBEUFVfU1NQUF9TT1VSQ0Vf Uk9UQVRFRF85MAlCSVQoMikKKyNkZWZpbmUgRFBVX1NTUFBfUk9UXzkwCQkJQklUKDMpCisjZGVm aW5lIERQVV9TU1BQX1NPTElEX0ZJTEwJCUJJVCg0KQorCisvKioKKyAqIERlZmluZSBhbGwgc2Nh bGVyIGZlYXR1cmUgYml0cyBpbiBjYXRhbG9nCisgKi8KKyNkZWZpbmUgRFBVX1NTUFBfU0NBTEVS ICgoMVVMIDw8IERQVV9TU1BQX1NDQUxFUl9SR0IpIHwgXAorCSgxVUwgPDwgRFBVX1NTUFBfU0NB TEVSX1FTRUVEMikgfCBcCisJKDFVTCA8PCBEUFVfU1NQUF9TQ0FMRVJfUVNFRUQzKSkKKworLyoq CisgKiBDb21wb25lbnQgaW5kaWNlcworICovCitlbnVtIHsKKwlEUFVfU1NQUF9DT01QXzAsCisJ RFBVX1NTUFBfQ09NUF8xXzIsCisJRFBVX1NTUFBfQ09NUF8yLAorCURQVV9TU1BQX0NPTVBfMywK KworCURQVV9TU1BQX0NPTVBfTUFYCit9OworCisvKioKKyAqIERQVV9TU1BQX1JFQ1RfU09MTyAt IG11bHRpcmVjdCBkaXNhYmxlZAorICogRFBVX1NTUFBfUkVDVF8wIC0gcmVjdDAgb2YgYSBtdWx0 aXJlY3QgcGlwZQorICogRFBVX1NTUFBfUkVDVF8xIC0gcmVjdDEgb2YgYSBtdWx0aXJlY3QgcGlw ZQorICoKKyAqIE5vdGU6IEhXIHN1cHBvcnRzIG11bHRpcmVjdCB3aXRoIGVpdGhlciBSRUNUMCBv cgorICogUkVDVDEuIENvbnNpZGVyaW5nIG5vIGJlbmVmaXQgb2Ygc3VjaCBjb25maWdzIG92ZXIK KyAqIFNPTE8gbW9kZSBhbmQgdG8ga2VlcCB0aGUgcGxhbmUgbWFuYWdlbWVudCBzaW1wbGUsCisg KiB3ZSBkb250IHN1cHBvcnQgc2luZ2xlIHJlY3QgbXVsdGlyZWN0IGNvbmZpZ3MuCisgKi8KK2Vu dW0gZHB1X3NzcHBfbXVsdGlyZWN0X2luZGV4IHsKKwlEUFVfU1NQUF9SRUNUX1NPTE8gPSAwLAor CURQVV9TU1BQX1JFQ1RfMCwKKwlEUFVfU1NQUF9SRUNUXzEsCit9OworCitlbnVtIGRwdV9zc3Bw X211bHRpcmVjdF9tb2RlIHsKKwlEUFVfU1NQUF9NVUxUSVJFQ1RfTk9ORSA9IDAsCisJRFBVX1NT UFBfTVVMVElSRUNUX1BBUkFMTEVMLAorCURQVV9TU1BQX01VTFRJUkVDVF9USU1FX01YLAorfTsK KworZW51bSB7CisJRFBVX0ZSQU1FX0xJTkVBUiwKKwlEUFVfRlJBTUVfVElMRV9BNFgsCisJRFBV X0ZSQU1FX1RJTEVfQTVYLAorfTsKKworZW51bSBkcHVfaHdfZmlsdGVyIHsKKwlEUFVfU0NBTEVf RklMVEVSX05FQVJFU1QgPSAwLAorCURQVV9TQ0FMRV9GSUxURVJfQklMLAorCURQVV9TQ0FMRV9G SUxURVJfUENNTiwKKwlEUFVfU0NBTEVfRklMVEVSX0NBLAorCURQVV9TQ0FMRV9GSUxURVJfTUFY Cit9OworCitlbnVtIGRwdV9od19maWx0ZXJfYWxwYSB7CisJRFBVX1NDQUxFX0FMUEhBX1BJWEVM X1JFUCwKKwlEUFVfU0NBTEVfQUxQSEFfQklMCit9OworCitlbnVtIGRwdV9od19maWx0ZXJfeXV2 IHsKKwlEUFVfU0NBTEVfMkRfNFg0LAorCURQVV9TQ0FMRV8yRF9DSVIsCisJRFBVX1NDQUxFXzFE X1NFUCwKKwlEUFVfU0NBTEVfQklMCit9OworCitzdHJ1Y3QgZHB1X2h3X3NoYXJwX2NmZyB7CisJ dTMyIHN0cmVuZ3RoOworCXUzMiBlZGdlX3RocjsKKwl1MzIgc21vb3RoX3RocjsKKwl1MzIgbm9p c2VfdGhyOworfTsKKworc3RydWN0IGRwdV9od19waXhlbF9leHQgeworCS8qIHNjYWxpbmcgZmFj dG9ycyBhcmUgZW5hYmxlZCBmb3IgdGhpcyBpbnB1dCBsYXllciAqLworCXVpbnQ4X3QgZW5hYmxl X3B4bF9leHQ7CisKKwlpbnQgaW5pdF9waGFzZV94W0RQVV9NQVhfUExBTkVTXTsKKwlpbnQgcGhh c2Vfc3RlcF94W0RQVV9NQVhfUExBTkVTXTsKKwlpbnQgaW5pdF9waGFzZV95W0RQVV9NQVhfUExB TkVTXTsKKwlpbnQgcGhhc2Vfc3RlcF95W0RQVV9NQVhfUExBTkVTXTsKKworCS8qCisJICogTnVt YmVyIG9mIHBpeGVscyBleHRlbnNpb24gaW4gbGVmdCwgcmlnaHQsIHRvcCBhbmQgYm90dG9tIGRp cmVjdGlvbgorCSAqIGZvciBhbGwgY29sb3IgY29tcG9uZW50cy4gVGhpcyBwaXhlbCB2YWx1ZSBm b3IgZWFjaCBjb2xvciBjb21wb25lbnQKKwkgKiBzaG91bGQgYmUgc3VtIG9mIGZldGNoICsgcmVw ZWF0IHBpeGVscy4KKwkgKi8KKwlpbnQgbnVtX2V4dF9weGxzX2xlZnRbRFBVX01BWF9QTEFORVNd OworCWludCBudW1fZXh0X3B4bHNfcmlnaHRbRFBVX01BWF9QTEFORVNdOworCWludCBudW1fZXh0 X3B4bHNfdG9wW0RQVV9NQVhfUExBTkVTXTsKKwlpbnQgbnVtX2V4dF9weGxzX2J0bVtEUFVfTUFY X1BMQU5FU107CisKKwkvKgorCSAqIE51bWJlciBvZiBwaXhlbHMgbmVlZHMgdG8gYmUgb3ZlcmZl dGNoZWQgaW4gbGVmdCwgcmlnaHQsIHRvcCBhbmQKKwkgKiBib3R0b20gZGlyZWN0aW9ucyBmcm9t IHNvdXJjZSBpbWFnZSBmb3Igc2NhbGluZy4KKwkgKi8KKwlpbnQgbGVmdF9mdGNoW0RQVV9NQVhf UExBTkVTXTsKKwlpbnQgcmlnaHRfZnRjaFtEUFVfTUFYX1BMQU5FU107CisJaW50IHRvcF9mdGNo W0RQVV9NQVhfUExBTkVTXTsKKwlpbnQgYnRtX2Z0Y2hbRFBVX01BWF9QTEFORVNdOworCisJLyoK KwkgKiBOdW1iZXIgb2YgcGl4ZWxzIG5lZWRzIHRvIGJlIHJlcGVhdGVkIGluIGxlZnQsIHJpZ2h0 LCB0b3AgYW5kCisJICogYm90dG9tIGRpcmVjdGlvbnMgZm9yIHNjYWxpbmcuCisJICovCisJaW50 IGxlZnRfcnB0W0RQVV9NQVhfUExBTkVTXTsKKwlpbnQgcmlnaHRfcnB0W0RQVV9NQVhfUExBTkVT XTsKKwlpbnQgdG9wX3JwdFtEUFVfTUFYX1BMQU5FU107CisJaW50IGJ0bV9ycHRbRFBVX01BWF9Q TEFORVNdOworCisJdWludDMyX3Qgcm9pX3dbRFBVX01BWF9QTEFORVNdOworCXVpbnQzMl90IHJv aV9oW0RQVV9NQVhfUExBTkVTXTsKKworCS8qCisJICogRmlsdGVyIHR5cGUgdG8gYmUgdXNlZCBm b3Igc2NhbGluZyBpbiBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbAorCSAqIGRpcmVjdGlvbnMKKwkg Ki8KKwllbnVtIGRwdV9od19maWx0ZXIgaG9yel9maWx0ZXJbRFBVX01BWF9QTEFORVNdOworCWVu dW0gZHB1X2h3X2ZpbHRlciB2ZXJ0X2ZpbHRlcltEUFVfTUFYX1BMQU5FU107CisKK307CisKKy8q KgorICogc3RydWN0IGRwdV9od19waXBlX2NmZyA6IFBpcGUgZGVzY3JpcHRpb24KKyAqIEBsYXlv dXQ6ICAgIGZvcm1hdCBsYXlvdXQgaW5mb3JtYXRpb24gZm9yIHByb2dyYW1taW5nIGJ1ZmZlciB0 byBoYXJkd2FyZQorICogQHNyY19yZWN0OiAgc3JjIFJPSSwgY2FsbGVyIHRha2VzIGludG8gYWNj b3VudCB0aGUgZGlmZmVyZW50IG9wZXJhdGlvbnMKKyAqICAgICAgICAgICAgIHN1Y2ggYXMgZGVj aW1hdGlvbiwgZmxpcCBldGMgdG8gcHJvZ3JhbSB0aGlzIGZpZWxkCisgKiBAZGVzdF9yZWN0OiBk ZXN0aW5hdGlvbiBST0kuCisgKiBAaW5kZXg6ICAgICBpbmRleCBvZiB0aGUgcmVjdGFuZ2xlIG9m IFNTUFAKKyAqIEBtb2RlOiAgICAgIHBhcmFsbGVsIG9yIHRpbWUgbXVsdGlwbGV4IG11bHRpcmVj dCBtb2RlCisgKi8KK3N0cnVjdCBkcHVfaHdfcGlwZV9jZmcgeworCXN0cnVjdCBkcHVfaHdfZm10 X2xheW91dCBsYXlvdXQ7CisJc3RydWN0IGRybV9yZWN0IHNyY19yZWN0OworCXN0cnVjdCBkcm1f cmVjdCBkc3RfcmVjdDsKKwllbnVtIGRwdV9zc3BwX211bHRpcmVjdF9pbmRleCBpbmRleDsKKwll bnVtIGRwdV9zc3BwX211bHRpcmVjdF9tb2RlIG1vZGU7Cit9OworCisvKioKKyAqIHN0cnVjdCBk cHVfaHdfcGlwZV9xb3NfY2ZnIDogU291cmNlIHBpcGUgUW9TIGNvbmZpZ3VyYXRpb24KKyAqIEBk YW5nZXJfbHV0OiBMVVQgZm9yIGdlbmVyYXRlIGRhbmdlciBsZXZlbCBiYXNlZCBvbiBmaWxsIGxl dmVsCisgKiBAc2FmZV9sdXQ6IExVVCBmb3IgZ2VuZXJhdGUgc2FmZSBsZXZlbCBiYXNlZCBvbiBm aWxsIGxldmVsCisgKiBAY3JlcV9sdXQ6IExVVCBmb3IgZ2VuZXJhdGUgY3JlcSBsZXZlbCBiYXNl ZCBvbiBmaWxsIGxldmVsCisgKiBAY3JlcV92Ymxhbms6IGNyZXEgdmFsdWUgZ2VuZXJhdGVkIHRv IHZiaWYgZHVyaW5nIHZlcnRpY2FsIGJsYW5raW5nCisgKiBAZGFuZ2VyX3ZibGFuazogZGFuZ2Vy IHZhbHVlIGdlbmVyYXRlZCBkdXJpbmcgdmVydGljYWwgYmxhbmtpbmcKKyAqIEB2YmxhbmtfZW46 IGVuYWJsZSBjcmVxX3ZibGFuayBhbmQgZGFuZ2VyX3ZibGFuayBkdXJpbmcgdmJsYW5rCisgKiBA ZGFuZ2VyX3NhZmVfZW46IGVuYWJsZSBkYW5nZXIgc2FmZSBnZW5lcmF0aW9uCisgKi8KK3N0cnVj dCBkcHVfaHdfcGlwZV9xb3NfY2ZnIHsKKwl1MzIgZGFuZ2VyX2x1dDsKKwl1MzIgc2FmZV9sdXQ7 CisJdTY0IGNyZXFfbHV0OworCXUzMiBjcmVxX3ZibGFuazsKKwl1MzIgZGFuZ2VyX3ZibGFuazsK Kwlib29sIHZibGFua19lbjsKKwlib29sIGRhbmdlcl9zYWZlX2VuOworfTsKKworLyoqCisgKiBl bnVtIENEUCBwcmVsb2FkIGFoZWFkIGFkZHJlc3Mgc2l6ZQorICovCitlbnVtIHsKKwlEUFVfU1NQ UF9DRFBfUFJFTE9BRF9BSEVBRF8zMiwKKwlEUFVfU1NQUF9DRFBfUFJFTE9BRF9BSEVBRF82NAor fTsKKworLyoqCisgKiBzdHJ1Y3QgZHB1X2h3X3BpcGVfY2RwX2NmZyA6IENEUCBjb25maWd1cmF0 aW9uCisgKiBAZW5hYmxlOiB0cnVlIHRvIGVuYWJsZSBDRFAKKyAqIEB1YndjX21ldGFfZW5hYmxl OiB0cnVlIHRvIGVuYWJsZSB1YndjIG1ldGFkYXRhIHByZWxvYWQKKyAqIEB0aWxlX2Ftb3J0aXpl X2VuYWJsZTogdHJ1ZSB0byBlbmFibGUgYW1vcnRpemF0aW9uIGNvbnRyb2wgZm9yIHRpbGUgZm9y bWF0CisgKiBAcHJlbG9hZF9haGVhZDogbnVtYmVyIG9mIHJlcXVlc3QgdG8gcHJlbG9hZCBhaGVh ZAorICoJRFBVX1NTUFBfQ0RQX1BSRUxPQURfQUhFQURfMzIsCisgKglEUFVfU1NQUF9DRFBfUFJF TE9BRF9BSEVBRF82NAorICovCitzdHJ1Y3QgZHB1X2h3X3BpcGVfY2RwX2NmZyB7CisJYm9vbCBl bmFibGU7CisJYm9vbCB1YndjX21ldGFfZW5hYmxlOworCWJvb2wgdGlsZV9hbW9ydGl6ZV9lbmFi bGU7CisJdTMyIHByZWxvYWRfYWhlYWQ7Cit9OworCisvKioKKyAqIHN0cnVjdCBkcHVfaHdfcGlw ZV90c19jZmcgLSB0cmFmZmljIHNoYXBlciBjb25maWd1cmF0aW9uCisgKiBAc2l6ZTogc2l6ZSB0 byBwcmVmaWxsIGluIGJ5dGVzLCBvciB6ZXJvIHRvIGRpc2FibGUKKyAqIEB0aW1lOiB0aW1lIHRv IHByZWZpbGwgaW4gdXNlYywgb3IgemVybyB0byBkaXNhYmxlCisgKi8KK3N0cnVjdCBkcHVfaHdf cGlwZV90c19jZmcgeworCXU2NCBzaXplOworCXU2NCB0aW1lOworfTsKKworLyoqCisgKiBzdHJ1 Y3QgZHB1X2h3X3NzcHBfb3BzIC0gaW50ZXJmYWNlIHRvIHRoZSBTU1BQIEh3IGRyaXZlciBmdW5j dGlvbnMKKyAqIENhbGxlciBtdXN0IGNhbGwgdGhlIGluaXQgZnVuY3Rpb24gdG8gZ2V0IHRoZSBw aXBlIGNvbnRleHQgZm9yIGVhY2ggcGlwZQorICogQXNzdW1wdGlvbiBpcyB0aGVzZSBmdW5jdGlv bnMgd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgY2xvY2tzIGFyZSBlbmFibGVkCisgKi8KK3N0cnVjdCBk cHVfaHdfc3NwcF9vcHMgeworCS8qKgorCSAqIHNldHVwX2Zvcm1hdCAtIHNldHVwIHBpeGVsIGZv cm1hdCBjcm9wcGluZyByZWN0YW5nbGUsIGZsaXAKKwkgKiBAY3R4OiBQb2ludGVyIHRvIHBpcGUg Y29udGV4dAorCSAqIEBjZmc6IFBvaW50ZXIgdG8gcGlwZSBjb25maWcgc3RydWN0dXJlCisJICog QGZsYWdzOiBFeHRyYSBmbGFncyBmb3IgZm9ybWF0IGNvbmZpZworCSAqIEBpbmRleDogcmVjdGFu Z2xlIGluZGV4IGluIG11bHRpcmVjdAorCSAqLworCXZvaWQgKCpzZXR1cF9mb3JtYXQpKHN0cnVj dCBkcHVfaHdfcGlwZSAqY3R4LAorCQkJY29uc3Qgc3RydWN0IGRwdV9mb3JtYXQgKmZtdCwgdTMy IGZsYWdzLAorCQkJZW51bSBkcHVfc3NwcF9tdWx0aXJlY3RfaW5kZXggaW5kZXgpOworCisJLyoq CisJICogc2V0dXBfcmVjdHMgLSBzZXR1cCBwaXBlIFJPSSByZWN0YW5nbGVzCisJICogQGN0eDog UG9pbnRlciB0byBwaXBlIGNvbnRleHQKKwkgKiBAY2ZnOiBQb2ludGVyIHRvIHBpcGUgY29uZmln IHN0cnVjdHVyZQorCSAqIEBpbmRleDogcmVjdGFuZ2xlIGluZGV4IGluIG11bHRpcmVjdAorCSAq LworCXZvaWQgKCpzZXR1cF9yZWN0cykoc3RydWN0IGRwdV9od19waXBlICpjdHgsCisJCQlzdHJ1 Y3QgZHB1X2h3X3BpcGVfY2ZnICpjZmcsCisJCQllbnVtIGRwdV9zc3BwX211bHRpcmVjdF9pbmRl eCBpbmRleCk7CisKKwkvKioKKwkgKiBzZXR1cF9wZSAtIHNldHVwIHBpcGUgcGl4ZWwgZXh0ZW5z aW9uCisJICogQGN0eDogUG9pbnRlciB0byBwaXBlIGNvbnRleHQKKwkgKiBAcGVfZXh0OiBQb2lu dGVyIHRvIHBpeGVsIGV4dCBzZXR0aW5ncworCSAqLworCXZvaWQgKCpzZXR1cF9wZSkoc3RydWN0 IGRwdV9od19waXBlICpjdHgsCisJCQlzdHJ1Y3QgZHB1X2h3X3BpeGVsX2V4dCAqcGVfZXh0KTsK KworCS8qKgorCSAqIHNldHVwX3NvdXJjZWFkZHJlc3MgLSBzZXR1cCBwaXBlIHNvdXJjZSBhZGRy ZXNzZXMKKwkgKiBAY3R4OiBQb2ludGVyIHRvIHBpcGUgY29udGV4dAorCSAqIEBjZmc6IFBvaW50 ZXIgdG8gcGlwZSBjb25maWcgc3RydWN0dXJlCisJICogQGluZGV4OiByZWN0YW5nbGUgaW5kZXgg aW4gbXVsdGlyZWN0CisJICovCisJdm9pZCAoKnNldHVwX3NvdXJjZWFkZHJlc3MpKHN0cnVjdCBk cHVfaHdfcGlwZSAqY3R4LAorCQkJc3RydWN0IGRwdV9od19waXBlX2NmZyAqY2ZnLAorCQkJZW51 bSBkcHVfc3NwcF9tdWx0aXJlY3RfaW5kZXggaW5kZXgpOworCisJLyoqCisJICogc2V0dXBfY3Nj IC0gc2V0dXAgY29sb3Igc3BhY2UgY292ZXJzaW9uCisJICogQGN0eDogUG9pbnRlciB0byBwaXBl IGNvbnRleHQKKwkgKiBAZGF0YTogUG9pbnRlciB0byBjb25maWcgc3RydWN0dXJlCisJICovCisJ dm9pZCAoKnNldHVwX2NzYykoc3RydWN0IGRwdV9od19waXBlICpjdHgsIHN0cnVjdCBkcHVfY3Nj X2NmZyAqZGF0YSk7CisKKwkvKioKKwkgKiBzZXR1cF9zb2xpZGZpbGwgLSBlbmFibGUvZGlzYWJs ZSBjb2xvcmZpbGwKKwkgKiBAY3R4OiBQb2ludGVyIHRvIHBpcGUgY29udGV4dAorCSAqIEBjb25z dF9jb2xvcjogRmlsbCBjb2xvciB2YWx1ZQorCSAqIEBmbGFnczogUGlwZSBmbGFncworCSAqIEBp bmRleDogcmVjdGFuZ2xlIGluZGV4IGluIG11bHRpcmVjdAorCSAqLworCXZvaWQgKCpzZXR1cF9z b2xpZGZpbGwpKHN0cnVjdCBkcHVfaHdfcGlwZSAqY3R4LCB1MzIgY29sb3IsCisJCQllbnVtIGRw dV9zc3BwX211bHRpcmVjdF9pbmRleCBpbmRleCk7CisKKwkvKioKKwkgKiBzZXR1cF9tdWx0aXJl Y3QgLSBzZXR1cCBtdWx0aXJlY3QgY29uZmlndXJhdGlvbgorCSAqIEBjdHg6IFBvaW50ZXIgdG8g cGlwZSBjb250ZXh0CisJICogQGluZGV4OiByZWN0YW5nbGUgaW5kZXggaW4gbXVsdGlyZWN0CisJ ICogQG1vZGU6IHBhcmFsbGVsIGZldGNoIC8gdGltZSBtdWx0aXBsZXggbXVsdGlyZWN0IG1vZGUK KwkgKi8KKworCXZvaWQgKCpzZXR1cF9tdWx0aXJlY3QpKHN0cnVjdCBkcHVfaHdfcGlwZSAqY3R4 LAorCQkJZW51bSBkcHVfc3NwcF9tdWx0aXJlY3RfaW5kZXggaW5kZXgsCisJCQllbnVtIGRwdV9z c3BwX211bHRpcmVjdF9tb2RlIG1vZGUpOworCisJLyoqCisJICogc2V0dXBfc2hhcnBlbmluZyAt IHNldHVwIHNoYXJwZW5pbmcKKwkgKiBAY3R4OiBQb2ludGVyIHRvIHBpcGUgY29udGV4dAorCSAq IEBjZmc6IFBvaW50ZXIgdG8gY29uZmlnIHN0cnVjdHVyZQorCSAqLworCXZvaWQgKCpzZXR1cF9z aGFycGVuaW5nKShzdHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCwKKwkJCXN0cnVjdCBkcHVfaHdfc2hh cnBfY2ZnICpjZmcpOworCisJLyoqCisJICogc2V0dXBfZGFuZ2VyX3NhZmVfbHV0IC0gc2V0dXAg ZGFuZ2VyIHNhZmUgTFVUcworCSAqIEBjdHg6IFBvaW50ZXIgdG8gcGlwZSBjb250ZXh0CisJICog QGNmZzogUG9pbnRlciB0byBwaXBlIFFvUyBjb25maWd1cmF0aW9uCisJICoKKwkgKi8KKwl2b2lk ICgqc2V0dXBfZGFuZ2VyX3NhZmVfbHV0KShzdHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCwKKwkJCXN0 cnVjdCBkcHVfaHdfcGlwZV9xb3NfY2ZnICpjZmcpOworCisJLyoqCisJICogc2V0dXBfY3JlcV9s dXQgLSBzZXR1cCBDUkVRIExVVAorCSAqIEBjdHg6IFBvaW50ZXIgdG8gcGlwZSBjb250ZXh0CisJ ICogQGNmZzogUG9pbnRlciB0byBwaXBlIFFvUyBjb25maWd1cmF0aW9uCisJICoKKwkgKi8KKwl2 b2lkICgqc2V0dXBfY3JlcV9sdXQpKHN0cnVjdCBkcHVfaHdfcGlwZSAqY3R4LAorCQkJc3RydWN0 IGRwdV9od19waXBlX3Fvc19jZmcgKmNmZyk7CisKKwkvKioKKwkgKiBzZXR1cF9xb3NfY3RybCAt IHNldHVwIFFvUyBjb250cm9sCisJICogQGN0eDogUG9pbnRlciB0byBwaXBlIGNvbnRleHQKKwkg KiBAY2ZnOiBQb2ludGVyIHRvIHBpcGUgUW9TIGNvbmZpZ3VyYXRpb24KKwkgKgorCSAqLworCXZv aWQgKCpzZXR1cF9xb3NfY3RybCkoc3RydWN0IGRwdV9od19waXBlICpjdHgsCisJCQlzdHJ1Y3Qg ZHB1X2h3X3BpcGVfcW9zX2NmZyAqY2ZnKTsKKworCS8qKgorCSAqIHNldHVwX2hpc3RvZ3JhbSAt IHNldHVwIGhpc3RvZ3JhbXMKKwkgKiBAY3R4OiBQb2ludGVyIHRvIHBpcGUgY29udGV4dAorCSAq IEBjZmc6IFBvaW50ZXIgdG8gaGlzdG9ncmFtIGNvbmZpZ3VyYXRpb24KKwkgKi8KKwl2b2lkICgq c2V0dXBfaGlzdG9ncmFtKShzdHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCwKKwkJCXZvaWQgKmNmZyk7 CisKKwkvKioKKwkgKiBzZXR1cF9zY2FsZXIgLSBzZXR1cCBzY2FsZXIKKwkgKiBAY3R4OiBQb2lu dGVyIHRvIHBpcGUgY29udGV4dAorCSAqIEBwaXBlX2NmZzogUG9pbnRlciB0byBwaXBlIGNvbmZp Z3VyYXRpb24KKwkgKiBAcGVfY2ZnOiBQb2ludGVyIHRvIHBpeGVsIGV4dGVuc2lvbiBjb25maWd1 cmF0aW9uCisJICogQHNjYWxlcl9jZmc6IFBvaW50ZXIgdG8gc2NhbGVyIGNvbmZpZ3VyYXRpb24K KwkgKi8KKwl2b2lkICgqc2V0dXBfc2NhbGVyKShzdHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCwKKwkJ c3RydWN0IGRwdV9od19waXBlX2NmZyAqcGlwZV9jZmcsCisJCXN0cnVjdCBkcHVfaHdfcGl4ZWxf ZXh0ICpwZV9jZmcsCisJCXZvaWQgKnNjYWxlcl9jZmcpOworCisJLyoqCisJICogZ2V0X3NjYWxl cl92ZXIgLSBnZXQgc2NhbGVyIGgvdyB2ZXJzaW9uCisJICogQGN0eDogUG9pbnRlciB0byBwaXBl IGNvbnRleHQKKwkgKi8KKwl1MzIgKCpnZXRfc2NhbGVyX3Zlcikoc3RydWN0IGRwdV9od19waXBl ICpjdHgpOworCisJLyoqCisJICogc2V0dXBfY2RwIC0gc2V0dXAgY2xpZW50IGRyaXZlbiBwcmVm ZXRjaAorCSAqIEBjdHg6IFBvaW50ZXIgdG8gcGlwZSBjb250ZXh0CisJICogQGNmZzogUG9pbnRl ciB0byBjZHAgY29uZmlndXJhdGlvbgorCSAqLworCXZvaWQgKCpzZXR1cF9jZHApKHN0cnVjdCBk cHVfaHdfcGlwZSAqY3R4LAorCQkJc3RydWN0IGRwdV9od19waXBlX2NkcF9jZmcgKmNmZyk7Cit9 OworCisvKioKKyAqIHN0cnVjdCBkcHVfaHdfcGlwZSAtIHBpcGUgZGVzY3JpcHRpb24KKyAqIEBi YXNlOiBoYXJkd2FyZSBibG9jayBiYXNlIHN0cnVjdHVyZQorICogQGh3OiBibG9jayBoYXJkd2Fy ZSBkZXRhaWxzCisgKiBAY2F0YWxvZzogYmFjayBwb2ludGVyIHRvIGNhdGFsb2cKKyAqIEBtZHA6 IHBvaW50ZXIgdG8gYXNzb2NpYXRlZCBtZHAgcG9ydGlvbiBvZiB0aGUgY2F0YWxvZworICogQGlk eDogcGlwZSBpbmRleAorICogQGNhcDogcG9pbnRlciB0byBsYXllcl9jZmcKKyAqIEBvcHM6IHBv aW50ZXIgdG8gb3BlcmF0aW9ucyBwb3NzaWJsZSBmb3IgdGhpcyBwaXBlCisgKi8KK3N0cnVjdCBk cHVfaHdfcGlwZSB7CisJc3RydWN0IGRwdV9od19ibGsgYmFzZTsKKwlzdHJ1Y3QgZHB1X2h3X2Js a19yZWdfbWFwIGh3OworCXN0cnVjdCBkcHVfbWRzc19jZmcgKmNhdGFsb2c7CisJc3RydWN0IGRw dV9tZHBfY2ZnICptZHA7CisKKwkvKiBQaXBlICovCisJZW51bSBkcHVfc3NwcCBpZHg7CisJY29u c3Qgc3RydWN0IGRwdV9zc3BwX2NmZyAqY2FwOworCisJLyogT3BzICovCisJc3RydWN0IGRwdV9o d19zc3BwX29wcyBvcHM7Cit9OworCisvKioKKyAqIGRwdV9od19waXBlIC0gY29udmVydCBiYXNl IG9iamVjdCBkcHVfaHdfYmFzZSB0byBjb250YWluZXIKKyAqIEBodzogUG9pbnRlciB0byBiYXNl IGhhcmR3YXJlIGJsb2NrCisgKiByZXR1cm46IFBvaW50ZXIgdG8gaGFyZHdhcmUgYmxvY2sgY29u dGFpbmVyCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRwdV9od19waXBlICp0b19kcHVfaHdf cGlwZShzdHJ1Y3QgZHB1X2h3X2JsayAqaHcpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihodywg c3RydWN0IGRwdV9od19waXBlLCBiYXNlKTsKK30KKworLyoqCisgKiBkcHVfaHdfc3NwcF9pbml0 IC0gaW5pdGlhbGl6ZXMgdGhlIHNzcHAgaHcgZHJpdmVyIG9iamVjdC4KKyAqIFNob3VsZCBiZSBj YWxsZWQgb25jZSBiZWZvcmUgYWNjZXNzaW5nIGV2ZXJ5IHBpcGUuCisgKiBAaWR4OiAgUGlwZSBp bmRleCBmb3Igd2hpY2ggZHJpdmVyIG9iamVjdCBpcyByZXF1aXJlZAorICogQGFkZHI6IE1hcHBl ZCByZWdpc3RlciBpbyBhZGRyZXNzIG9mIE1EUAorICogQGNhdGFsb2cgOiBQb2ludGVyIHRvIG1k c3MgY2F0YWxvZyBkYXRhCisgKiBAaXNfdmlydHVhbF9waXBlOiBpcyB0aGlzIHBpcGUgdmlydHVh bCBwaXBlCisgKi8KK3N0cnVjdCBkcHVfaHdfcGlwZSAqZHB1X2h3X3NzcHBfaW5pdChlbnVtIGRw dV9zc3BwIGlkeCwKKwkJdm9pZCBfX2lvbWVtICphZGRyLCBzdHJ1Y3QgZHB1X21kc3NfY2ZnICpj YXRhbG9nLAorCQlib29sIGlzX3ZpcnR1YWxfcGlwZSk7CisKKy8qKgorICogZHB1X2h3X3NzcHBf ZGVzdHJveSgpOiBEZXN0cm95cyBTU1BQIGRyaXZlciBjb250ZXh0CisgKiBzaG91bGQgYmUgY2Fs bGVkIGR1cmluZyBIdyBwaXBlIGNsZWFudXAuCisgKiBAY3R4OiAgUG9pbnRlciB0byBTU1BQIGRy aXZlciBjb250ZXh0IHJldHVybmVkIGJ5IGRwdV9od19zc3BwX2luaXQKKyAqLwordm9pZCBkcHVf aHdfc3NwcF9kZXN0cm95KHN0cnVjdCBkcHVfaHdfcGlwZSAqY3R4KTsKKworI2VuZGlmIC8qX0RQ VV9IV19TU1BQX0ggKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2h3X3RvcC5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3Rv cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNDJmYzcyY2Y0OGRk Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3 X3RvcC5jCkBAIC0wLDAgKzEsMzk4IEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxOCwgVGhl IExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgdmVyc2lvbiAyIGFuZAorICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLwor CisjaW5jbHVkZSAiZHB1X2h3aW8uaCIKKyNpbmNsdWRlICJkcHVfaHdfY2F0YWxvZy5oIgorI2lu Y2x1ZGUgImRwdV9od190b3AuaCIKKyNpbmNsdWRlICJkcHVfZGJnLmgiCisjaW5jbHVkZSAiZHB1 X2ttcy5oIgorCisjZGVmaW5lIFNTUFBfU1BBUkUgICAgICAgICAgICAgICAgICAgICAgICAweDI4 CisjZGVmaW5lIFVCV0NfU1RBVElDICAgICAgICAgICAgICAgICAgICAgICAweDE0NAorCisjZGVm aW5lIEZMRF9TUExJVF9ESVNQTEFZX0NNRCAgICAgICAgICAgICBCSVQoMSkKKyNkZWZpbmUgRkxE X1NNQVJUX1BBTkVMX0ZSRUVfUlVOICAgICAgICAgIEJJVCgyKQorI2RlZmluZSBGTERfSU5URl8x X1NXX1RSR19NVVggICAgICAgICAgICAgQklUKDQpCisjZGVmaW5lIEZMRF9JTlRGXzJfU1dfVFJH X01VWCAgICAgICAgICAgICBCSVQoOCkKKyNkZWZpbmUgRkxEX1RFX0xJTkVfSU5URVJfV0FURVJM RVZFTF9NQVNLIDB4RkZGRgorCisjZGVmaW5lIERBTkdFUl9TVEFUVVMgICAgICAgICAgICAgICAg ICAgICAweDM2MAorI2RlZmluZSBTQUZFX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgMHgz NjQKKworI2RlZmluZSBURV9MSU5FX0lOVEVSVkFMICAgICAgICAgICAgICAgICAgMHgzRjQKKwor I2RlZmluZSBUUkFGRklDX1NIQVBFUl9FTiAgICAgICAgICAgICAgICAgQklUKDMxKQorI2RlZmlu ZSBUUkFGRklDX1NIQVBFUl9SRF9DTElFTlQobnVtKSAgICAgKDB4MDMwICsgKG51bSAqIDQpKQor I2RlZmluZSBUUkFGRklDX1NIQVBFUl9XUl9DTElFTlQobnVtKSAgICAgKDB4MDYwICsgKG51bSAq IDQpKQorI2RlZmluZSBUUkFGRklDX1NIQVBFUl9GSVhQT0lOVF9GQUNUT1IgICAgNAorCisjZGVm aW5lIE1EUF9XRF9USU1FUl8wX0NUTCAgICAgICAgICAgICAgICAweDM4MAorI2RlZmluZSBNRFBf V0RfVElNRVJfMF9DVEwyICAgICAgICAgICAgICAgMHgzODQKKyNkZWZpbmUgTURQX1dEX1RJTUVS XzBfTE9BRF9WQUxVRSAgICAgICAgIDB4Mzg4CisjZGVmaW5lIE1EUF9XRF9USU1FUl8xX0NUTCAg ICAgICAgICAgICAgICAweDM5MAorI2RlZmluZSBNRFBfV0RfVElNRVJfMV9DVEwyICAgICAgICAg ICAgICAgMHgzOTQKKyNkZWZpbmUgTURQX1dEX1RJTUVSXzFfTE9BRF9WQUxVRSAgICAgICAgIDB4 Mzk4CisjZGVmaW5lIE1EUF9XRF9USU1FUl8yX0NUTCAgICAgICAgICAgICAgICAweDQyMAorI2Rl ZmluZSBNRFBfV0RfVElNRVJfMl9DVEwyICAgICAgICAgICAgICAgMHg0MjQKKyNkZWZpbmUgTURQ X1dEX1RJTUVSXzJfTE9BRF9WQUxVRSAgICAgICAgIDB4NDI4CisjZGVmaW5lIE1EUF9XRF9USU1F Ul8zX0NUTCAgICAgICAgICAgICAgICAweDQzMAorI2RlZmluZSBNRFBfV0RfVElNRVJfM19DVEwy ICAgICAgICAgICAgICAgMHg0MzQKKyNkZWZpbmUgTURQX1dEX1RJTUVSXzNfTE9BRF9WQUxVRSAg ICAgICAgIDB4NDM4CisjZGVmaW5lIE1EUF9XRF9USU1FUl80X0NUTCAgICAgICAgICAgICAgICAw eDQ0MAorI2RlZmluZSBNRFBfV0RfVElNRVJfNF9DVEwyICAgICAgICAgICAgICAgMHg0NDQKKyNk ZWZpbmUgTURQX1dEX1RJTUVSXzRfTE9BRF9WQUxVRSAgICAgICAgIDB4NDQ4CisKKyNkZWZpbmUg TURQX1RJQ0tfQ09VTlQgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIFhPX0NMS19SQVRF ICAgICAgICAgICAgICAgICAgICAgICAxOTIwMAorI2RlZmluZSBNU19USUNLU19JTl9TRUMgICAg ICAgICAgICAgICAgICAgMTAwMAorCisjZGVmaW5lIENBTENVTEFURV9XRF9MT0FEX1ZBTFVFKGZw cykgXAorCSgodWludDMyX3QpKChNU19USUNLU19JTl9TRUMgKiBYT19DTEtfUkFURSkvKE1EUF9U SUNLX0NPVU5UICogZnBzKSkpCisKKyNkZWZpbmUgRENFX1NFTCAgICAgICAgICAgICAgICAgICAg ICAgICAgIDB4NDUwCisKK3N0YXRpYyB2b2lkIGRwdV9od19zZXR1cF9zcGxpdF9waXBlKHN0cnVj dCBkcHVfaHdfbWRwICptZHAsCisJCXN0cnVjdCBzcGxpdF9waXBlX2NmZyAqY2ZnKQoreworCXN0 cnVjdCBkcHVfaHdfYmxrX3JlZ19tYXAgKmM7CisJdTMyIHVwcGVyX3BpcGUgPSAwOworCXUzMiBs b3dlcl9waXBlID0gMDsKKworCWlmICghbWRwIHx8ICFjZmcpCisJCXJldHVybjsKKworCWMgPSAm bWRwLT5odzsKKworCWlmIChjZmctPmVuKSB7CisJCWlmIChjZmctPm1vZGUgPT0gSU5URl9NT0RF X0NNRCkgeworCQkJbG93ZXJfcGlwZSA9IEZMRF9TUExJVF9ESVNQTEFZX0NNRDsKKwkJCS8qIGlu dGVyZmFjZSBjb250cm9sbGluZyBzdyB0cmlnZ2VyICovCisJCQlpZiAoY2ZnLT5pbnRmID09IElO VEZfMikKKwkJCQlsb3dlcl9waXBlIHw9IEZMRF9JTlRGXzFfU1dfVFJHX01VWDsKKwkJCWVsc2UK KwkJCQlsb3dlcl9waXBlIHw9IEZMRF9JTlRGXzJfU1dfVFJHX01VWDsKKwkJCXVwcGVyX3BpcGUg PSBsb3dlcl9waXBlOworCQl9IGVsc2UgeworCQkJaWYgKGNmZy0+aW50ZiA9PSBJTlRGXzIpIHsK KwkJCQlsb3dlcl9waXBlID0gRkxEX0lOVEZfMV9TV19UUkdfTVVYOworCQkJCXVwcGVyX3BpcGUg PSBGTERfSU5URl8yX1NXX1RSR19NVVg7CisJCQl9IGVsc2UgeworCQkJCWxvd2VyX3BpcGUgPSBG TERfSU5URl8yX1NXX1RSR19NVVg7CisJCQkJdXBwZXJfcGlwZSA9IEZMRF9JTlRGXzFfU1dfVFJH X01VWDsKKwkJCX0KKwkJfQorCX0KKworCURQVV9SRUdfV1JJVEUoYywgU1NQUF9TUEFSRSwgY2Zn LT5zcGxpdF9mbHVzaF9lbiA/IDB4MSA6IDB4MCk7CisJRFBVX1JFR19XUklURShjLCBTUExJVF9E SVNQTEFZX0xPV0VSX1BJUEVfQ1RSTCwgbG93ZXJfcGlwZSk7CisJRFBVX1JFR19XUklURShjLCBT UExJVF9ESVNQTEFZX1VQUEVSX1BJUEVfQ1RSTCwgdXBwZXJfcGlwZSk7CisJRFBVX1JFR19XUklU RShjLCBTUExJVF9ESVNQTEFZX0VOLCBjZmctPmVuICYgMHgxKTsKK30KKworc3RhdGljIHZvaWQg ZHB1X2h3X3NldHVwX2NkbV9vdXRwdXQoc3RydWN0IGRwdV9od19tZHAgKm1kcCwKKwkJc3RydWN0 IGNkbV9vdXRwdXRfY2ZnICpjZmcpCit7CisJc3RydWN0IGRwdV9od19ibGtfcmVnX21hcCAqYzsK Kwl1MzIgb3V0X2N0bCA9IDA7CisKKwlpZiAoIW1kcCB8fCAhY2ZnKQorCQlyZXR1cm47CisKKwlj ID0gJm1kcC0+aHc7CisKKwlpZiAoY2ZnLT5pbnRmX2VuKQorCQlvdXRfY3RsIHw9IEJJVCgxOSk7 CisKKwlEUFVfUkVHX1dSSVRFKGMsIE1EUF9PVVRfQ1RMXzAsIG91dF9jdGwpOworfQorCitzdGF0 aWMgYm9vbCBkcHVfaHdfc2V0dXBfY2xrX2ZvcmNlX2N0cmwoc3RydWN0IGRwdV9od19tZHAgKm1k cCwKKwkJZW51bSBkcHVfY2xrX2N0cmxfdHlwZSBjbGtfY3RybCwgYm9vbCBlbmFibGUpCit7CisJ c3RydWN0IGRwdV9od19ibGtfcmVnX21hcCAqYzsKKwl1MzIgcmVnX29mZiwgYml0X29mZjsKKwl1 MzIgcmVnX3ZhbCwgbmV3X3ZhbDsKKwlib29sIGNsa19mb3JjZWRfb247CisKKwlpZiAoIW1kcCkK KwkJcmV0dXJuIGZhbHNlOworCisJYyA9ICZtZHAtPmh3OworCisJaWYgKGNsa19jdHJsIDw9IERQ VV9DTEtfQ1RSTF9OT05FIHx8IGNsa19jdHJsID49IERQVV9DTEtfQ1RSTF9NQVgpCisJCXJldHVy biBmYWxzZTsKKworCXJlZ19vZmYgPSBtZHAtPmNhcHMtPmNsa19jdHJsc1tjbGtfY3RybF0ucmVn X29mZjsKKwliaXRfb2ZmID0gbWRwLT5jYXBzLT5jbGtfY3RybHNbY2xrX2N0cmxdLmJpdF9vZmY7 CisKKwlyZWdfdmFsID0gRFBVX1JFR19SRUFEKGMsIHJlZ19vZmYpOworCisJaWYgKGVuYWJsZSkK KwkJbmV3X3ZhbCA9IHJlZ192YWwgfCBCSVQoYml0X29mZik7CisJZWxzZQorCQluZXdfdmFsID0g cmVnX3ZhbCAmIH5CSVQoYml0X29mZik7CisKKwlEUFVfUkVHX1dSSVRFKGMsIHJlZ19vZmYsIG5l d192YWwpOworCisJY2xrX2ZvcmNlZF9vbiA9ICEocmVnX3ZhbCAmIEJJVChiaXRfb2ZmKSk7CisK KwlyZXR1cm4gY2xrX2ZvcmNlZF9vbjsKK30KKworCitzdGF0aWMgdm9pZCBkcHVfaHdfZ2V0X2Rh bmdlcl9zdGF0dXMoc3RydWN0IGRwdV9od19tZHAgKm1kcCwKKwkJc3RydWN0IGRwdV9kYW5nZXJf c2FmZV9zdGF0dXMgKnN0YXR1cykKK3sKKwlzdHJ1Y3QgZHB1X2h3X2Jsa19yZWdfbWFwICpjOwor CXUzMiB2YWx1ZTsKKworCWlmICghbWRwIHx8ICFzdGF0dXMpCisJCXJldHVybjsKKworCWMgPSAm bWRwLT5odzsKKworCXZhbHVlID0gRFBVX1JFR19SRUFEKGMsIERBTkdFUl9TVEFUVVMpOworCXN0 YXR1cy0+bWRwID0gKHZhbHVlID4+IDApICYgMHgzOworCXN0YXR1cy0+c3NwcFtTU1BQX1ZJRzBd ID0gKHZhbHVlID4+IDQpICYgMHgzOworCXN0YXR1cy0+c3NwcFtTU1BQX1ZJRzFdID0gKHZhbHVl ID4+IDYpICYgMHgzOworCXN0YXR1cy0+c3NwcFtTU1BQX1ZJRzJdID0gKHZhbHVlID4+IDgpICYg MHgzOworCXN0YXR1cy0+c3NwcFtTU1BQX1ZJRzNdID0gKHZhbHVlID4+IDEwKSAmIDB4MzsKKwlz dGF0dXMtPnNzcHBbU1NQUF9SR0IwXSA9ICh2YWx1ZSA+PiAxMikgJiAweDM7CisJc3RhdHVzLT5z c3BwW1NTUFBfUkdCMV0gPSAodmFsdWUgPj4gMTQpICYgMHgzOworCXN0YXR1cy0+c3NwcFtTU1BQ X1JHQjJdID0gKHZhbHVlID4+IDE2KSAmIDB4MzsKKwlzdGF0dXMtPnNzcHBbU1NQUF9SR0IzXSA9 ICh2YWx1ZSA+PiAxOCkgJiAweDM7CisJc3RhdHVzLT5zc3BwW1NTUFBfRE1BMF0gPSAodmFsdWUg Pj4gMjApICYgMHgzOworCXN0YXR1cy0+c3NwcFtTU1BQX0RNQTFdID0gKHZhbHVlID4+IDIyKSAm IDB4MzsKKwlzdGF0dXMtPnNzcHBbU1NQUF9ETUEyXSA9ICh2YWx1ZSA+PiAyOCkgJiAweDM7CisJ c3RhdHVzLT5zc3BwW1NTUFBfRE1BM10gPSAodmFsdWUgPj4gMzApICYgMHgzOworCXN0YXR1cy0+ c3NwcFtTU1BQX0NVUlNPUjBdID0gKHZhbHVlID4+IDI0KSAmIDB4MzsKKwlzdGF0dXMtPnNzcHBb U1NQUF9DVVJTT1IxXSA9ICh2YWx1ZSA+PiAyNikgJiAweDM7Cit9CisKK3N0YXRpYyB2b2lkIGRw dV9od19zZXR1cF92c3luY19zb3VyY2Uoc3RydWN0IGRwdV9od19tZHAgKm1kcCwKKwkJc3RydWN0 IGRwdV92c3luY19zb3VyY2VfY2ZnICpjZmcpCit7CisJc3RydWN0IGRwdV9od19ibGtfcmVnX21h cCAqYzsKKwl1MzIgcmVnLCB3ZF9sb2FkX3ZhbHVlLCB3ZF9jdGwsIHdkX2N0bDIsIGk7CisJc3Rh dGljIGNvbnN0IHUzMiBwcF9vZmZzZXRbUElOR1BPTkdfTUFYXSA9IHsweEMsIDB4OCwgMHg0LCAw eDEzLCAweDE4fTsKKworCWlmICghbWRwIHx8ICFjZmcgfHwgKGNmZy0+cHBfY291bnQgPiBBUlJB WV9TSVpFKGNmZy0+cHBudW1iZXIpKSkKKwkJcmV0dXJuOworCisJYyA9ICZtZHAtPmh3OworCXJl ZyA9IERQVV9SRUdfUkVBRChjLCBNRFBfVlNZTkNfU0VMKTsKKwlmb3IgKGkgPSAwOyBpIDwgY2Zn LT5wcF9jb3VudDsgaSsrKSB7CisJCWludCBwcF9pZHggPSBjZmctPnBwbnVtYmVyW2ldIC0gUElO R1BPTkdfMDsKKworCQlpZiAocHBfaWR4ID49IEFSUkFZX1NJWkUocHBfb2Zmc2V0KSkKKwkJCWNv bnRpbnVlOworCisJCXJlZyAmPSB+KDB4ZiA8PCBwcF9vZmZzZXRbcHBfaWR4XSk7CisJCXJlZyB8 PSAoY2ZnLT52c3luY19zb3VyY2UgJiAweGYpIDw8IHBwX29mZnNldFtwcF9pZHhdOworCX0KKwlE UFVfUkVHX1dSSVRFKGMsIE1EUF9WU1lOQ19TRUwsIHJlZyk7CisKKwlpZiAoY2ZnLT52c3luY19z b3VyY2UgPj0gRFBVX1ZTWU5DX1NPVVJDRV9XRF9USU1FUl80ICYmCisJCQljZmctPnZzeW5jX3Nv dXJjZSA8PSBEUFVfVlNZTkNfU09VUkNFX1dEX1RJTUVSXzApIHsKKwkJc3dpdGNoIChjZmctPnZz eW5jX3NvdXJjZSkgeworCQljYXNlIERQVV9WU1lOQ19TT1VSQ0VfV0RfVElNRVJfNDoKKwkJCXdk X2xvYWRfdmFsdWUgPSBNRFBfV0RfVElNRVJfNF9MT0FEX1ZBTFVFOworCQkJd2RfY3RsID0gTURQ X1dEX1RJTUVSXzRfQ1RMOworCQkJd2RfY3RsMiA9IE1EUF9XRF9USU1FUl80X0NUTDI7CisJCQli cmVhazsKKwkJY2FzZSBEUFVfVlNZTkNfU09VUkNFX1dEX1RJTUVSXzM6CisJCQl3ZF9sb2FkX3Zh bHVlID0gTURQX1dEX1RJTUVSXzNfTE9BRF9WQUxVRTsKKwkJCXdkX2N0bCA9IE1EUF9XRF9USU1F Ul8zX0NUTDsKKwkJCXdkX2N0bDIgPSBNRFBfV0RfVElNRVJfM19DVEwyOworCQkJYnJlYWs7CisJ CWNhc2UgRFBVX1ZTWU5DX1NPVVJDRV9XRF9USU1FUl8yOgorCQkJd2RfbG9hZF92YWx1ZSA9IE1E UF9XRF9USU1FUl8yX0xPQURfVkFMVUU7CisJCQl3ZF9jdGwgPSBNRFBfV0RfVElNRVJfMl9DVEw7 CisJCQl3ZF9jdGwyID0gTURQX1dEX1RJTUVSXzJfQ1RMMjsKKwkJCWJyZWFrOworCQljYXNlIERQ VV9WU1lOQ19TT1VSQ0VfV0RfVElNRVJfMToKKwkJCXdkX2xvYWRfdmFsdWUgPSBNRFBfV0RfVElN RVJfMV9MT0FEX1ZBTFVFOworCQkJd2RfY3RsID0gTURQX1dEX1RJTUVSXzFfQ1RMOworCQkJd2Rf Y3RsMiA9IE1EUF9XRF9USU1FUl8xX0NUTDI7CisJCQlicmVhazsKKwkJY2FzZSBEUFVfVlNZTkNf U09VUkNFX1dEX1RJTUVSXzA6CisJCWRlZmF1bHQ6CisJCQl3ZF9sb2FkX3ZhbHVlID0gTURQX1dE X1RJTUVSXzBfTE9BRF9WQUxVRTsKKwkJCXdkX2N0bCA9IE1EUF9XRF9USU1FUl8wX0NUTDsKKwkJ CXdkX2N0bDIgPSBNRFBfV0RfVElNRVJfMF9DVEwyOworCQkJYnJlYWs7CisJCX0KKworCQlEUFVf UkVHX1dSSVRFKGMsIHdkX2xvYWRfdmFsdWUsCisJCQlDQUxDVUxBVEVfV0RfTE9BRF9WQUxVRShj ZmctPmZyYW1lX3JhdGUpKTsKKworCQlEUFVfUkVHX1dSSVRFKGMsIHdkX2N0bCwgQklUKDApKTsg LyogY2xlYXIgdGltZXIgKi8KKwkJcmVnID0gRFBVX1JFR19SRUFEKGMsIHdkX2N0bDIpOworCQly ZWcgfD0gQklUKDgpOwkJLyogZW5hYmxlIGhlYXJ0YmVhdCB0aW1lciAqLworCQlyZWcgfD0gQklU KDApOwkJLyogZW5hYmxlIFdEIHRpbWVyICovCisJCURQVV9SRUdfV1JJVEUoYywgd2RfY3RsMiwg cmVnKTsKKworCQkvKiBtYWtlIHN1cmUgdGhhdCB0aW1lcnMgYXJlIGVuYWJsZWQvZGlzYWJsZWQg Zm9yIHZzeW5jIHN0YXRlICovCisJCXdtYigpOworCX0KK30KKworc3RhdGljIHZvaWQgZHB1X2h3 X2dldF9zYWZlX3N0YXR1cyhzdHJ1Y3QgZHB1X2h3X21kcCAqbWRwLAorCQlzdHJ1Y3QgZHB1X2Rh bmdlcl9zYWZlX3N0YXR1cyAqc3RhdHVzKQoreworCXN0cnVjdCBkcHVfaHdfYmxrX3JlZ19tYXAg KmM7CisJdTMyIHZhbHVlOworCisJaWYgKCFtZHAgfHwgIXN0YXR1cykKKwkJcmV0dXJuOworCisJ YyA9ICZtZHAtPmh3OworCisJdmFsdWUgPSBEUFVfUkVHX1JFQUQoYywgU0FGRV9TVEFUVVMpOwor CXN0YXR1cy0+bWRwID0gKHZhbHVlID4+IDApICYgMHgxOworCXN0YXR1cy0+c3NwcFtTU1BQX1ZJ RzBdID0gKHZhbHVlID4+IDQpICYgMHgxOworCXN0YXR1cy0+c3NwcFtTU1BQX1ZJRzFdID0gKHZh bHVlID4+IDYpICYgMHgxOworCXN0YXR1cy0+c3NwcFtTU1BQX1ZJRzJdID0gKHZhbHVlID4+IDgp ICYgMHgxOworCXN0YXR1cy0+c3NwcFtTU1BQX1ZJRzNdID0gKHZhbHVlID4+IDEwKSAmIDB4MTsK KwlzdGF0dXMtPnNzcHBbU1NQUF9SR0IwXSA9ICh2YWx1ZSA+PiAxMikgJiAweDE7CisJc3RhdHVz LT5zc3BwW1NTUFBfUkdCMV0gPSAodmFsdWUgPj4gMTQpICYgMHgxOworCXN0YXR1cy0+c3NwcFtT U1BQX1JHQjJdID0gKHZhbHVlID4+IDE2KSAmIDB4MTsKKwlzdGF0dXMtPnNzcHBbU1NQUF9SR0Iz XSA9ICh2YWx1ZSA+PiAxOCkgJiAweDE7CisJc3RhdHVzLT5zc3BwW1NTUFBfRE1BMF0gPSAodmFs dWUgPj4gMjApICYgMHgxOworCXN0YXR1cy0+c3NwcFtTU1BQX0RNQTFdID0gKHZhbHVlID4+IDIy KSAmIDB4MTsKKwlzdGF0dXMtPnNzcHBbU1NQUF9ETUEyXSA9ICh2YWx1ZSA+PiAyOCkgJiAweDE7 CisJc3RhdHVzLT5zc3BwW1NTUFBfRE1BM10gPSAodmFsdWUgPj4gMzApICYgMHgxOworCXN0YXR1 cy0+c3NwcFtTU1BQX0NVUlNPUjBdID0gKHZhbHVlID4+IDI0KSAmIDB4MTsKKwlzdGF0dXMtPnNz cHBbU1NQUF9DVVJTT1IxXSA9ICh2YWx1ZSA+PiAyNikgJiAweDE7Cit9CisKK3ZvaWQgZHB1X2h3 X3Jlc2V0X3Vid2Moc3RydWN0IGRwdV9od19tZHAgKm1kcCwgc3RydWN0IGRwdV9tZHNzX2NmZyAq bSkKK3sKKwlzdHJ1Y3QgZHB1X2h3X2Jsa19yZWdfbWFwIGM7CisKKwlpZiAoIW1kcCB8fCAhbSkK KwkJcmV0dXJuOworCisJaWYgKCFJU19VQldDXzIwX1NVUFBPUlRFRChtLT5jYXBzLT51YndjX3Zl cnNpb24pKQorCQlyZXR1cm47CisKKwkvKiBmb3JjZSBibGsgb2Zmc2V0IHRvIHplcm8gdG8gYWNj ZXNzIGJlZ2lubmluZyBvZiByZWdpc3RlciByZWdpb24gKi8KKwljID0gbWRwLT5odzsKKwljLmJs a19vZmYgPSAweDA7CisJRFBVX1JFR19XUklURSgmYywgVUJXQ19TVEFUSUMsIG0tPm1kcFswXS51 YndjX3N0YXRpYyk7Cit9CisKK3N0YXRpYyB2b2lkIGRwdV9od19pbnRmX2F1ZGlvX3NlbGVjdChz dHJ1Y3QgZHB1X2h3X21kcCAqbWRwKQoreworCXN0cnVjdCBkcHVfaHdfYmxrX3JlZ19tYXAgKmM7 CisKKwlpZiAoIW1kcCkKKwkJcmV0dXJuOworCisJYyA9ICZtZHAtPmh3OworCisJRFBVX1JFR19X UklURShjLCBIRE1JX0RQX0NPUkVfU0VMRUNULCAweDEpOworfQorCitzdGF0aWMgdm9pZCBfc2V0 dXBfbWRwX29wcyhzdHJ1Y3QgZHB1X2h3X21kcF9vcHMgKm9wcywKKwkJdW5zaWduZWQgbG9uZyBj YXApCit7CisJb3BzLT5zZXR1cF9zcGxpdF9waXBlID0gZHB1X2h3X3NldHVwX3NwbGl0X3BpcGU7 CisJb3BzLT5zZXR1cF9jZG1fb3V0cHV0ID0gZHB1X2h3X3NldHVwX2NkbV9vdXRwdXQ7CisJb3Bz LT5zZXR1cF9jbGtfZm9yY2VfY3RybCA9IGRwdV9od19zZXR1cF9jbGtfZm9yY2VfY3RybDsKKwlv cHMtPmdldF9kYW5nZXJfc3RhdHVzID0gZHB1X2h3X2dldF9kYW5nZXJfc3RhdHVzOworCW9wcy0+ c2V0dXBfdnN5bmNfc291cmNlID0gZHB1X2h3X3NldHVwX3ZzeW5jX3NvdXJjZTsKKwlvcHMtPmdl dF9zYWZlX3N0YXR1cyA9IGRwdV9od19nZXRfc2FmZV9zdGF0dXM7CisJb3BzLT5yZXNldF91Yndj ID0gZHB1X2h3X3Jlc2V0X3Vid2M7CisJb3BzLT5pbnRmX2F1ZGlvX3NlbGVjdCA9IGRwdV9od19p bnRmX2F1ZGlvX3NlbGVjdDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcHVfbWRwX2NmZyAq X3RvcF9vZmZzZXQoZW51bSBkcHVfbWRwIG1kcCwKKwkJY29uc3Qgc3RydWN0IGRwdV9tZHNzX2Nm ZyAqbSwKKwkJdm9pZCBfX2lvbWVtICphZGRyLAorCQlzdHJ1Y3QgZHB1X2h3X2Jsa19yZWdfbWFw ICpiKQoreworCWludCBpOworCisJaWYgKCFtIHx8ICFhZGRyIHx8ICFiKQorCQlyZXR1cm4gRVJS X1BUUigtRUlOVkFMKTsKKworCWZvciAoaSA9IDA7IGkgPCBtLT5tZHBfY291bnQ7IGkrKykgewor CQlpZiAobWRwID09IG0tPm1kcFtpXS5pZCkgeworCQkJYi0+YmFzZV9vZmYgPSBhZGRyOworCQkJ Yi0+YmxrX29mZiA9IG0tPm1kcFtpXS5iYXNlOworCQkJYi0+bGVuZ3RoID0gbS0+bWRwW2ldLmxl bjsKKwkJCWItPmh3dmVyc2lvbiA9IG0tPmh3dmVyc2lvbjsKKwkJCWItPmxvZ19tYXNrID0gRFBV X0RCR19NQVNLX1RPUDsKKwkJCXJldHVybiAmbS0+bWRwW2ldOworCQl9CisJfQorCisJcmV0dXJu IEVSUl9QVFIoLUVJTlZBTCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHB1X2h3X2Jsa19vcHMgZHB1 X2h3X29wcyA9IHsKKwkuc3RhcnQgPSBOVUxMLAorCS5zdG9wID0gTlVMTCwKK307CisKK3N0cnVj dCBkcHVfaHdfbWRwICpkcHVfaHdfbWRwdG9wX2luaXQoZW51bSBkcHVfbWRwIGlkeCwKKwkJdm9p ZCBfX2lvbWVtICphZGRyLAorCQljb25zdCBzdHJ1Y3QgZHB1X21kc3NfY2ZnICptKQoreworCXN0 cnVjdCBkcHVfaHdfbWRwICptZHA7CisJY29uc3Qgc3RydWN0IGRwdV9tZHBfY2ZnICpjZmc7CisJ aW50IHJjOworCisJaWYgKCFhZGRyIHx8ICFtKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsK KworCW1kcCA9IGt6YWxsb2Moc2l6ZW9mKCptZHApLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1kcCkK KwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwljZmcgPSBfdG9wX29mZnNldChpZHgsIG0s IGFkZHIsICZtZHAtPmh3KTsKKwlpZiAoSVNfRVJSX09SX05VTEwoY2ZnKSkgeworCQlrZnJlZSht ZHApOworCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwl9CisKKwkvKgorCSAqIEFzc2lnbiBv cHMKKwkgKi8KKwltZHAtPmlkeCA9IGlkeDsKKwltZHAtPmNhcHMgPSBjZmc7CisJX3NldHVwX21k cF9vcHMoJm1kcC0+b3BzLCBtZHAtPmNhcHMtPmZlYXR1cmVzKTsKKworCXJjID0gZHB1X2h3X2Js a19pbml0KCZtZHAtPmJhc2UsIERQVV9IV19CTEtfVE9QLCBpZHgsICZkcHVfaHdfb3BzKTsKKwlp ZiAocmMpIHsKKwkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gaW5pdCBodyBibGsgJWRcbiIsIHJjKTsK KwkJZ290byBibGtfaW5pdF9lcnJvcjsKKwl9CisKKwlkcHVfZGJnX3NldF9kcHVfdG9wX29mZnNl dChtZHAtPmh3LmJsa19vZmYpOworCisJcmV0dXJuIG1kcDsKKworYmxrX2luaXRfZXJyb3I6CisJ a3pmcmVlKG1kcCk7CisKKwlyZXR1cm4gRVJSX1BUUihyYyk7Cit9CisKK3ZvaWQgZHB1X2h3X21k cF9kZXN0cm95KHN0cnVjdCBkcHVfaHdfbWRwICptZHApCit7CisJaWYgKG1kcCkKKwkJZHB1X2h3 X2Jsa19kZXN0cm95KCZtZHAtPmJhc2UpOworCWtmcmVlKG1kcCk7Cit9CisKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od190b3AuaCBiL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od190b3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMDAuLjg5OTkyNWFhYTZkNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od190b3AuaApAQCAtMCwwICsxLDIwMiBAQAorLyog Q29weXJpZ2h0IChjKSAyMDE1LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRz IHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVy c2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoK KyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfRFBVX0hXX1RPUF9ICisjZGVm aW5lIF9EUFVfSFdfVE9QX0gKKworI2luY2x1ZGUgImRwdV9od19jYXRhbG9nLmgiCisjaW5jbHVk ZSAiZHB1X2h3X21kc3MuaCIKKyNpbmNsdWRlICJkcHVfaHdfdXRpbC5oIgorI2luY2x1ZGUgImRw dV9od19ibGsuaCIKKworc3RydWN0IGRwdV9od19tZHA7CisKKy8qKgorICogc3RydWN0IHRyYWZm aWNfc2hhcGVyX2NmZzogdHJhZmZpYyBzaGFwZXIgY29uZmlndXJhdGlvbgorICogQGVuICAgICAg ICA6IGVuYWJsZS9kaXNhYmxlIHRyYWZmaWMgc2hhcGVyCisgKiBAcmRfY2xpZW50IDogdHJ1ZSBp ZiByZWFkIGNsaWVudDsgZmFsc2UgaWYgd3JpdGUgY2xpZW50CisgKiBAY2xpZW50X2lkIDogY2xp ZW50IGlkZW50aWZpZXIKKyAqIEBicGNfZGVub20gOiBkZW5vbWluYXRvciBvZiBieXRlIHBlciBj bGsKKyAqIEBicGNfbnVtZXIgOiBudW1lcmF0b3Igb2YgYnl0ZSBwZXIgY2xrCisgKi8KK3N0cnVj dCB0cmFmZmljX3NoYXBlcl9jZmcgeworCWJvb2wgZW47CisJYm9vbCByZF9jbGllbnQ7CisJdTMy IGNsaWVudF9pZDsKKwl1MzIgYnBjX2Rlbm9tOworCXU2NCBicGNfbnVtZXI7Cit9OworCisvKioK KyAqIHN0cnVjdCBzcGxpdF9waXBlX2NmZyAtIHBpcGUgY29uZmlndXJhdGlvbiBmb3IgZHVhbCBk aXNwbGF5IHBhbmVscworICogQGVuICAgICAgICA6IEVuYWJsZS9kaXNhYmxlIGR1YWwgcGlwZSBj b25mZ3VyYXRpb24KKyAqIEBtb2RlICAgICAgOiBQYW5lbCBpbnRlcmZhY2UgbW9kZQorICogQGlu dGYgICAgICA6IEludGVyZmFjZSBpZCBmb3IgbWFpbiBjb250cm9sIHBhdGgKKyAqIEBzcGxpdF9m bHVzaF9lbjogQWxsb3dzIGJvdGggdGhlIHBhdGhzIHRvIGJlIGZsdXNoZWQgd2hlbiBtYXN0ZXIg cGF0aCBpcworICogICAgICAgICAgICAgIGZsdXNoZWQKKyAqLworc3RydWN0IHNwbGl0X3BpcGVf Y2ZnIHsKKwlib29sIGVuOworCWVudW0gZHB1X2ludGZfbW9kZSBtb2RlOworCWVudW0gZHB1X2lu dGYgaW50ZjsKKwlib29sIHNwbGl0X2ZsdXNoX2VuOworfTsKKworLyoqCisgKiBzdHJ1Y3QgY2Rt X291dHB1dF9jZmc6IG91dHB1dCBjb25maWd1cmF0aW9uIGZvciBjZG0KKyAqIEBpbnRmX2VuICAg OiBlbmFibGUvZGlzYWJsZSBpbnRlcmZhY2Ugb3V0cHV0CisgKi8KK3N0cnVjdCBjZG1fb3V0cHV0 X2NmZyB7CisJYm9vbCBpbnRmX2VuOworfTsKKworLyoqCisgKiBzdHJ1Y3QgZHB1X2Rhbmdlcl9z YWZlX3N0YXR1czogZGFuZ2VyIGFuZCBzYWZlIHN0YXR1cyBzaWduYWxzCisgKiBAbWRwOiB0b3Ag bGV2ZWwgc3RhdHVzCisgKiBAc3NwcDogc291cmNlIHBpcGUgc3RhdHVzCisgKi8KK3N0cnVjdCBk cHVfZGFuZ2VyX3NhZmVfc3RhdHVzIHsKKwl1OCBtZHA7CisJdTggc3NwcFtTU1BQX01BWF07Cit9 OworCisvKioKKyAqIHN0cnVjdCBkcHVfdnN5bmNfc291cmNlX2NmZyAtIGNvbmZpZ3VyZSB2c3lu YyBzb3VyY2UgYW5kIGNvbmZpZ3VyZSB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgd2F0Y2hkb2cgdGltZXJzIGlmIHJlcXVpcmVkLgorICogQHBwX2NvdW50OiBudW1i ZXIgb2YgcGluZyBwb25ncyBhY3RpdmUKKyAqIEBmcmFtZV9yYXRlOiBEaXNwbGF5IGZyYW1lIHJh dGUKKyAqIEBwcG51bWJlcjogcGluZyBwb25nIGluZGV4IGFycmF5CisgKiBAdnN5bmNfc291cmNl OiB2c3luYyBzb3VyY2Ugc2VsZWN0aW9uCisgKi8KK3N0cnVjdCBkcHVfdnN5bmNfc291cmNlX2Nm ZyB7CisJdTMyIHBwX2NvdW50OworCXUzMiBmcmFtZV9yYXRlOworCXUzMiBwcG51bWJlcltQSU5H UE9OR19NQVhdOworCXUzMiB2c3luY19zb3VyY2U7Cit9OworCisvKioKKyAqIHN0cnVjdCBkcHVf aHdfbWRwX29wcyAtIGludGVyZmFjZSB0byB0aGUgTURQIFRPUCBIdyBkcml2ZXIgZnVuY3Rpb25z CisgKiBBc3N1bXB0aW9uIGlzIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGJlIGNhbGxlZCBhZnRlciBj bG9ja3MgYXJlIGVuYWJsZWQuCisgKiBAc2V0dXBfc3BsaXRfcGlwZSA6IFByb2dyYW1zIHRoZSBw aXBlIGNvbnRyb2wgcmVnaXN0ZXJzCisgKiBAc2V0dXBfcHBfc3BsaXQgOiBQcm9ncmFtcyB0aGUg cHAgc3BsaXQgY29udHJvbCByZWdpc3RlcnMKKyAqIEBzZXR1cF9jZG1fb3V0cHV0IDogcHJvZ3Jh bXMgY2RtIGNvbnRyb2wKKyAqIEBzZXR1cF90cmFmZmljX3NoYXBlciA6IHByb2dyYW1zIHRyYWZm aWMgc2hhcGVyIGNvbnRyb2wKKyAqLworc3RydWN0IGRwdV9od19tZHBfb3BzIHsKKwkvKiogc2V0 dXBfc3BsaXRfcGlwZSgpIDogUmVnc2l0ZXJzIGFyZSBub3QgZG91YmxlIGJ1ZmZlcmVkLCB0aGlz aworCSAqIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIHRpbWluZyBjb250cm9sIGVu YWJsZQorCSAqIEBtZHAgIDogbWRwIHRvcCBjb250ZXh0IGRyaXZlcgorCSAqIEBjZmcgIDogdXBw ZXIgYW5kIGxvd2VyIHBhcnQgb2YgcGlwZSBjb25maWd1cmF0aW9uCisJICovCisJdm9pZCAoKnNl dHVwX3NwbGl0X3BpcGUpKHN0cnVjdCBkcHVfaHdfbWRwICptZHAsCisJCQlzdHJ1Y3Qgc3BsaXRf cGlwZV9jZmcgKnApOworCisJLyoqCisJICogc2V0dXBfY2RtX291dHB1dCgpIDogU2V0dXAgc2Vs ZWN0aW9uIGNvbnRyb2wgb2YgdGhlIGNkbSBkYXRhIHBhdGgKKwkgKiBAbWRwICA6IG1kcCB0b3Ag Y29udGV4dCBkcml2ZXIKKwkgKiBAY2ZnICA6IGNkbSBvdXRwdXQgY29uZmlndXJhdGlvbgorCSAq LworCXZvaWQgKCpzZXR1cF9jZG1fb3V0cHV0KShzdHJ1Y3QgZHB1X2h3X21kcCAqbWRwLAorCQkJ c3RydWN0IGNkbV9vdXRwdXRfY2ZnICpjZmcpOworCisJLyoqCisJICogc2V0dXBfdHJhZmZpY19z aGFwZXIoKSA6IFNldHVwIHRyYWZmaWMgc2hhcGVyIGNvbnRyb2wKKwkgKiBAbWRwICA6IG1kcCB0 b3AgY29udGV4dCBkcml2ZXIKKwkgKiBAY2ZnICA6IHRyYWZmaWMgc2hhcGVyIGNvbmZpZ3VyYXRp b24KKwkgKi8KKwl2b2lkICgqc2V0dXBfdHJhZmZpY19zaGFwZXIpKHN0cnVjdCBkcHVfaHdfbWRw ICptZHAsCisJCQlzdHJ1Y3QgdHJhZmZpY19zaGFwZXJfY2ZnICpjZmcpOworCisJLyoqCisJICog c2V0dXBfY2xrX2ZvcmNlX2N0cmwgLSBzZXQgY2xvY2sgZm9yY2UgY29udHJvbAorCSAqIEBtZHA6 IG1kcCB0b3AgY29udGV4dCBkcml2ZXIKKwkgKiBAY2xrX2N0cmw6IGNsb2NrIHRvIGJlIGNvbnRy b2xsZWQKKwkgKiBAZW5hYmxlOiBmb3JjZSBvbiBlbmFibGUKKwkgKiBAcmV0dXJuOiBpZiB0aGUg Y2xvY2sgaXMgZm9yY2VkLW9uIGJ5IHRoaXMgZnVuY3Rpb24KKwkgKi8KKwlib29sICgqc2V0dXBf Y2xrX2ZvcmNlX2N0cmwpKHN0cnVjdCBkcHVfaHdfbWRwICptZHAsCisJCQllbnVtIGRwdV9jbGtf Y3RybF90eXBlIGNsa19jdHJsLCBib29sIGVuYWJsZSk7CisKKwkvKioKKwkgKiBnZXRfZGFuZ2Vy X3N0YXR1cyAtIGdldCBkYW5nZXIgc3RhdHVzCisJICogQG1kcDogbWRwIHRvcCBjb250ZXh0IGRy aXZlcgorCSAqIEBzdGF0dXM6IFBvaW50ZXIgdG8gZGFuZ2VyIHNhZmUgc3RhdHVzCisJICovCisJ dm9pZCAoKmdldF9kYW5nZXJfc3RhdHVzKShzdHJ1Y3QgZHB1X2h3X21kcCAqbWRwLAorCQkJc3Ry dWN0IGRwdV9kYW5nZXJfc2FmZV9zdGF0dXMgKnN0YXR1cyk7CisKKwkvKioKKwkgKiBzZXR1cF92 c3luY19zb3VyY2UgLSBzZXR1cCB2c3luYyBzb3VyY2UgY29uZmlndXJhdGlvbiBkZXRhaWxzCisJ ICogQG1kcDogbWRwIHRvcCBjb250ZXh0IGRyaXZlcgorCSAqIEBjZmc6IHZzeW5jIHNvdXJjZSBz ZWxlY3Rpb24gY29uZmlndXJhdGlvbgorCSAqLworCXZvaWQgKCpzZXR1cF92c3luY19zb3VyY2Up KHN0cnVjdCBkcHVfaHdfbWRwICptZHAsCisJCQkJc3RydWN0IGRwdV92c3luY19zb3VyY2VfY2Zn ICpjZmcpOworCisJLyoqCisJICogZ2V0X3NhZmVfc3RhdHVzIC0gZ2V0IHNhZmUgc3RhdHVzCisJ ICogQG1kcDogbWRwIHRvcCBjb250ZXh0IGRyaXZlcgorCSAqIEBzdGF0dXM6IFBvaW50ZXIgdG8g ZGFuZ2VyIHNhZmUgc3RhdHVzCisJICovCisJdm9pZCAoKmdldF9zYWZlX3N0YXR1cykoc3RydWN0 IGRwdV9od19tZHAgKm1kcCwKKwkJCXN0cnVjdCBkcHVfZGFuZ2VyX3NhZmVfc3RhdHVzICpzdGF0 dXMpOworCisJLyoqCisJICogcmVzZXRfdWJ3YyAtIHJlc2V0IHRvcCBsZXZlbCBVQldDIGNvbmZp Z3VyYXRpb24KKwkgKiBAbWRwOiBtZHAgdG9wIGNvbnRleHQgZHJpdmVyCisJICogQG06IHBvaW50 ZXIgdG8gbWRzcyBjYXRhbG9nIGRhdGEKKwkgKi8KKwl2b2lkICgqcmVzZXRfdWJ3Yykoc3RydWN0 IGRwdV9od19tZHAgKm1kcCwgc3RydWN0IGRwdV9tZHNzX2NmZyAqbSk7CisKKwkvKioKKwkgKiBp bnRmX2F1ZGlvX3NlbGVjdCAtIHNlbGVjdCB0aGUgZXh0ZXJuYWwgaW50ZXJmYWNlIGZvciBhdWRp bworCSAqIEBtZHA6IG1kcCB0b3AgY29udGV4dCBkcml2ZXIKKwkgKi8KKwl2b2lkICgqaW50Zl9h dWRpb19zZWxlY3QpKHN0cnVjdCBkcHVfaHdfbWRwICptZHApOworfTsKKworc3RydWN0IGRwdV9o d19tZHAgeworCXN0cnVjdCBkcHVfaHdfYmxrIGJhc2U7CisJc3RydWN0IGRwdV9od19ibGtfcmVn X21hcCBodzsKKworCS8qIHRvcCAqLworCWVudW0gZHB1X21kcCBpZHg7CisJY29uc3Qgc3RydWN0 IGRwdV9tZHBfY2ZnICpjYXBzOworCisJLyogb3BzICovCisJc3RydWN0IGRwdV9od19tZHBfb3Bz IG9wczsKK307CisKKy8qKgorICogdG9fZHB1X2h3X21kcCAtIGNvbnZlcnQgYmFzZSBvYmplY3Qg ZHB1X2h3X2Jhc2UgdG8gY29udGFpbmVyCisgKiBAaHc6IFBvaW50ZXIgdG8gYmFzZSBoYXJkd2Fy ZSBibG9jaworICogcmV0dXJuOiBQb2ludGVyIHRvIGhhcmR3YXJlIGJsb2NrIGNvbnRhaW5lcgor ICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkcHVfaHdfbWRwICp0b19kcHVfaHdfbWRwKHN0cnVj dCBkcHVfaHdfYmxrICpodykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGh3LCBzdHJ1Y3QgZHB1 X2h3X21kcCwgYmFzZSk7Cit9CisKKy8qKgorICogZHB1X2h3X21kcHRvcF9pbml0IC0gaW5pdGlh bGl6ZXMgdGhlIHRvcCBkcml2ZXIgZm9yIHRoZSBwYXNzZWQgaWR4CisgKiBAaWR4OiAgSW50ZXJm YWNlIGluZGV4IGZvciB3aGljaCBkcml2ZXIgb2JqZWN0IGlzIHJlcXVpcmVkCisgKiBAYWRkcjog TWFwcGVkIHJlZ2lzdGVyIGlvIGFkZHJlc3Mgb2YgTURQCisgKiBAbTogICAgUG9pbnRlciB0byBt ZHNzIGNhdGFsb2cgZGF0YQorICovCitzdHJ1Y3QgZHB1X2h3X21kcCAqZHB1X2h3X21kcHRvcF9p bml0KGVudW0gZHB1X21kcCBpZHgsCisJCXZvaWQgX19pb21lbSAqYWRkciwKKwkJY29uc3Qgc3Ry dWN0IGRwdV9tZHNzX2NmZyAqbSk7CisKK3ZvaWQgZHB1X2h3X21kcF9kZXN0cm95KHN0cnVjdCBk cHVfaHdfbWRwICptZHApOworCisjZW5kaWYgLypfRFBVX0hXX1RPUF9IICovCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfdXRpbC5jIGIvZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3V0aWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMDAuLjFiYTU3MWU5NGIzMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od191dGlsLmMKQEAgLTAsMCArMSw0NTIgQEAK Ky8qIENvcHlyaWdodCAoYykgMjAxNS0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJp Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCisgKiBvbmx5 IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4K KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjZGVmaW5lIHByX2ZtdChmbXQpCSJbZHJt OiVzOiVkXSAiIGZtdCwgX19mdW5jX18sIF9fTElORV9fCisKKyNpbmNsdWRlICJtc21fZHJ2Lmgi CisjaW5jbHVkZSAiZHB1X2ttcy5oIgorI2luY2x1ZGUgImRwdV9od19tZHNzLmgiCisjaW5jbHVk ZSAiZHB1X2h3X3V0aWwuaCIKKworLyogdXNpbmcgYSBmaWxlIHN0YXRpYyB2YXJpYWJsZXMgZm9y IGRlYnVnZnMgYWNjZXNzICovCitzdGF0aWMgdTMyIGRwdV9od191dGlsX2xvZ19tYXNrID0gRFBV X0RCR19NQVNLX05PTkU7CisKKy8qIERQVV9TQ0FMRVJfUVNFRUQzICovCisjZGVmaW5lIFFTRUVE M19IV19WRVJTSU9OICAgICAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBRU0VFRDNfT1BfTU9E RSAgICAgICAgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgUVNFRUQzX1JHQjJZX0NPRUZGICAg ICAgICAgICAgICAgICAweDA4CisjZGVmaW5lIFFTRUVEM19QSEFTRV9JTklUICAgICAgICAgICAg ICAgICAgMHgwQworI2RlZmluZSBRU0VFRDNfUEhBU0VfU1RFUF9ZX0ggICAgICAgICAgICAgIDB4 MTAKKyNkZWZpbmUgUVNFRUQzX1BIQVNFX1NURVBfWV9WICAgICAgICAgICAgICAweDE0CisjZGVm aW5lIFFTRUVEM19QSEFTRV9TVEVQX1VWX0ggICAgICAgICAgICAgMHgxOAorI2RlZmluZSBRU0VF RDNfUEhBU0VfU1RFUF9VVl9WICAgICAgICAgICAgIDB4MUMKKyNkZWZpbmUgUVNFRUQzX1BSRUxP QUQgICAgICAgICAgICAgICAgICAgICAweDIwCisjZGVmaW5lIFFTRUVEM19ERV9TSEFSUEVOICAg ICAgICAgICAgICAgICAgMHgyNAorI2RlZmluZSBRU0VFRDNfREVfU0hBUlBFTl9DVEwgICAgICAg ICAgICAgIDB4MjgKKyNkZWZpbmUgUVNFRUQzX0RFX1NIQVBFX0NUTCAgICAgICAgICAgICAgICAw eDJDCisjZGVmaW5lIFFTRUVEM19ERV9USFJFU0hPTEQgICAgICAgICAgICAgICAgMHgzMAorI2Rl ZmluZSBRU0VFRDNfREVfQURKVVNUX0RBVEFfMCAgICAgICAgICAgIDB4MzQKKyNkZWZpbmUgUVNF RUQzX0RFX0FESlVTVF9EQVRBXzEgICAgICAgICAgICAweDM4CisjZGVmaW5lIFFTRUVEM19ERV9B REpVU1RfREFUQV8yICAgICAgICAgICAgMHgzQworI2RlZmluZSBRU0VFRDNfU1JDX1NJWkVfWV9S R0JfQSAgICAgICAgICAgIDB4NDAKKyNkZWZpbmUgUVNFRUQzX1NSQ19TSVpFX1VWICAgICAgICAg ICAgICAgICAweDQ0CisjZGVmaW5lIFFTRUVEM19EU1RfU0laRSAgICAgICAgICAgICAgICAgICAg MHg0OAorI2RlZmluZSBRU0VFRDNfQ09FRl9MVVRfQ1RSTCAgICAgICAgICAgICAgIDB4NEMKKyNk ZWZpbmUgUVNFRUQzX0NPRUZfTFVUX1NXQVBfQklUICAgICAgICAgICAwCisjZGVmaW5lIFFTRUVE M19DT0VGX0xVVF9ESVJfQklUICAgICAgICAgICAgMQorI2RlZmluZSBRU0VFRDNfQ09FRl9MVVRf WV9DSVJfQklUICAgICAgICAgIDIKKyNkZWZpbmUgUVNFRUQzX0NPRUZfTFVUX1VWX0NJUl9CSVQg ICAgICAgICAzCisjZGVmaW5lIFFTRUVEM19DT0VGX0xVVF9ZX1NFUF9CSVQgICAgICAgICAgNAor I2RlZmluZSBRU0VFRDNfQ09FRl9MVVRfVVZfU0VQX0JJVCAgICAgICAgIDUKKyNkZWZpbmUgUVNF RUQzX0JVRkZFUl9DVFJMICAgICAgICAgICAgICAgICAweDUwCisjZGVmaW5lIFFTRUVEM19DTEtf Q1RSTDAgICAgICAgICAgICAgICAgICAgMHg1NAorI2RlZmluZSBRU0VFRDNfQ0xLX0NUUkwxICAg ICAgICAgICAgICAgICAgIDB4NTgKKyNkZWZpbmUgUVNFRUQzX0NMS19TVEFUVVMgICAgICAgICAg ICAgICAgICAweDVDCisjZGVmaW5lIFFTRUVEM19NSVNSX0NUUkwgICAgICAgICAgICAgICAgICAg MHg3MAorI2RlZmluZSBRU0VFRDNfTUlTUl9TSUdOQVRVUkVfMCAgICAgICAgICAgIDB4NzQKKyNk ZWZpbmUgUVNFRUQzX01JU1JfU0lHTkFUVVJFXzEgICAgICAgICAgICAweDc4CisjZGVmaW5lIFFT RUVEM19QSEFTRV9JTklUX1lfSCAgICAgICAgICAgICAgMHg5MAorI2RlZmluZSBRU0VFRDNfUEhB U0VfSU5JVF9ZX1YgICAgICAgICAgICAgIDB4OTQKKyNkZWZpbmUgUVNFRUQzX1BIQVNFX0lOSVRf VVZfSCAgICAgICAgICAgICAweDk4CisjZGVmaW5lIFFTRUVEM19QSEFTRV9JTklUX1VWX1YgICAg ICAgICAgICAgMHg5QworI2RlZmluZSBRU0VFRDNfQ09FRl9MVVQgICAgICAgICAgICAgICAgICAg IDB4MTAwCisjZGVmaW5lIFFTRUVEM19GSUxURVJTICAgICAgICAgICAgICAgICAgICAgNQorI2Rl ZmluZSBRU0VFRDNfTFVUX1JFR0lPTlMgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgUVNFRUQz X0NJUkNVTEFSX0xVVFMgICAgICAgICAgICAgICA5CisjZGVmaW5lIFFTRUVEM19TRVBBUkFCTEVf TFVUUyAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgUVNFRUQzX0xVVF9TSVpFICAgICAgICAgICAg ICAgICAgICA2MAorI2RlZmluZSBRU0VFRDNfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgIDIK KyNkZWZpbmUgUVNFRUQzX0RJUl9MVVRfU0laRSAgICAgICAgICAgICAgICAoMjAwICogc2l6ZW9m KHUzMikpCisjZGVmaW5lIFFTRUVEM19DSVJfTFVUX1NJWkUgXAorCShRU0VFRDNfTFVUX1NJWkUg KiBRU0VFRDNfQ0lSQ1VMQVJfTFVUUyAqIHNpemVvZih1MzIpKQorI2RlZmluZSBRU0VFRDNfU0VQ X0xVVF9TSVpFIFwKKwkoUVNFRUQzX0xVVF9TSVpFICogUVNFRUQzX1NFUEFSQUJMRV9MVVRTICog c2l6ZW9mKHUzMikpCisKK3ZvaWQgZHB1X3JlZ193cml0ZShzdHJ1Y3QgZHB1X2h3X2Jsa19yZWdf bWFwICpjLAorCQl1MzIgcmVnX29mZiwKKwkJdTMyIHZhbCwKKwkJY29uc3QgY2hhciAqbmFtZSkK K3sKKwkvKiBkb24ndCBuZWVkIHRvIG11dGV4IHByb3RlY3QgdGhpcyAqLworCWlmIChjLT5sb2df bWFzayAmIGRwdV9od191dGlsX2xvZ19tYXNrKQorCQlEUFVfREVCVUdfRFJJVkVSKCJbJXM6MHgl WF0gPD0gMHglWFxuIiwKKwkJCQluYW1lLCBjLT5ibGtfb2ZmICsgcmVnX29mZiwgdmFsKTsKKwl3 cml0ZWxfcmVsYXhlZCh2YWwsIGMtPmJhc2Vfb2ZmICsgYy0+YmxrX29mZiArIHJlZ19vZmYpOwor fQorCitpbnQgZHB1X3JlZ19yZWFkKHN0cnVjdCBkcHVfaHdfYmxrX3JlZ19tYXAgKmMsIHUzMiBy ZWdfb2ZmKQoreworCXJldHVybiByZWFkbF9yZWxheGVkKGMtPmJhc2Vfb2ZmICsgYy0+YmxrX29m ZiArIHJlZ19vZmYpOworfQorCit1MzIgKmRwdV9od191dGlsX2dldF9sb2dfbWFza19wdHIodm9p ZCkKK3sKKwlyZXR1cm4gJmRwdV9od191dGlsX2xvZ19tYXNrOworfQorCit2b2lkIGRwdV9zZXRf c2NhbGVyX3YyKHN0cnVjdCBkcHVfaHdfc2NhbGVyM19jZmcgKmNmZywKKwkJY29uc3Qgc3RydWN0 IGRwdV9kcm1fc2NhbGVyX3YyICpzY2FsZV92MikKK3sKKwlpbnQgaTsKKworCWNmZy0+ZW5hYmxl ID0gc2NhbGVfdjItPmVuYWJsZTsKKwljZmctPmRpcl9lbiA9IHNjYWxlX3YyLT5kaXJfZW47CisK Kwlmb3IgKGkgPSAwOyBpIDwgRFBVX01BWF9QTEFORVM7IGkrKykgeworCQljZmctPmluaXRfcGhh c2VfeFtpXSA9IHNjYWxlX3YyLT5pbml0X3BoYXNlX3hbaV07CisJCWNmZy0+cGhhc2Vfc3RlcF94 W2ldID0gc2NhbGVfdjItPnBoYXNlX3N0ZXBfeFtpXTsKKwkJY2ZnLT5pbml0X3BoYXNlX3lbaV0g PSBzY2FsZV92Mi0+aW5pdF9waGFzZV95W2ldOworCQljZmctPnBoYXNlX3N0ZXBfeVtpXSA9IHNj YWxlX3YyLT5waGFzZV9zdGVwX3lbaV07CisKKwkJY2ZnLT5wcmVsb2FkX3hbaV0gPSBzY2FsZV92 Mi0+cHJlbG9hZF94W2ldOworCQljZmctPnByZWxvYWRfeVtpXSA9IHNjYWxlX3YyLT5wcmVsb2Fk X3lbaV07CisJCWNmZy0+c3JjX3dpZHRoW2ldID0gc2NhbGVfdjItPnNyY193aWR0aFtpXTsKKwkJ Y2ZnLT5zcmNfaGVpZ2h0W2ldID0gc2NhbGVfdjItPnNyY19oZWlnaHRbaV07CisJfQorCisJY2Zn LT5kc3Rfd2lkdGggPSBzY2FsZV92Mi0+ZHN0X3dpZHRoOworCWNmZy0+ZHN0X2hlaWdodCA9IHNj YWxlX3YyLT5kc3RfaGVpZ2h0OworCisJY2ZnLT55X3JnYl9maWx0ZXJfY2ZnID0gc2NhbGVfdjIt PnlfcmdiX2ZpbHRlcl9jZmc7CisJY2ZnLT51dl9maWx0ZXJfY2ZnID0gc2NhbGVfdjItPnV2X2Zp bHRlcl9jZmc7CisJY2ZnLT5hbHBoYV9maWx0ZXJfY2ZnID0gc2NhbGVfdjItPmFscGhhX2ZpbHRl cl9jZmc7CisJY2ZnLT5ibGVuZF9jZmcgPSBzY2FsZV92Mi0+YmxlbmRfY2ZnOworCisJY2ZnLT5s dXRfZmxhZyA9IHNjYWxlX3YyLT5sdXRfZmxhZzsKKwljZmctPmRpcl9sdXRfaWR4ID0gc2NhbGVf djItPmRpcl9sdXRfaWR4OworCWNmZy0+eV9yZ2JfY2lyX2x1dF9pZHggPSBzY2FsZV92Mi0+eV9y Z2JfY2lyX2x1dF9pZHg7CisJY2ZnLT51dl9jaXJfbHV0X2lkeCA9IHNjYWxlX3YyLT51dl9jaXJf bHV0X2lkeDsKKwljZmctPnlfcmdiX3NlcF9sdXRfaWR4ID0gc2NhbGVfdjItPnlfcmdiX3NlcF9s dXRfaWR4OworCWNmZy0+dXZfc2VwX2x1dF9pZHggPSBzY2FsZV92Mi0+dXZfc2VwX2x1dF9pZHg7 CisKKwljZmctPmRlLmVuYWJsZSA9IHNjYWxlX3YyLT5kZS5lbmFibGU7CisJY2ZnLT5kZS5zaGFy cGVuX2xldmVsMSA9IHNjYWxlX3YyLT5kZS5zaGFycGVuX2xldmVsMTsKKwljZmctPmRlLnNoYXJw ZW5fbGV2ZWwyID0gc2NhbGVfdjItPmRlLnNoYXJwZW5fbGV2ZWwyOworCWNmZy0+ZGUuY2xpcCA9 IHNjYWxlX3YyLT5kZS5jbGlwOworCWNmZy0+ZGUubGltaXQgPSBzY2FsZV92Mi0+ZGUubGltaXQ7 CisJY2ZnLT5kZS50aHJfcXVpZXQgPSBzY2FsZV92Mi0+ZGUudGhyX3F1aWV0OworCWNmZy0+ZGUu dGhyX2RpZW91dCA9IHNjYWxlX3YyLT5kZS50aHJfZGllb3V0OworCWNmZy0+ZGUudGhyX2xvdyA9 IHNjYWxlX3YyLT5kZS50aHJfbG93OworCWNmZy0+ZGUudGhyX2hpZ2ggPSBzY2FsZV92Mi0+ZGUu dGhyX2hpZ2g7CisJY2ZnLT5kZS5wcmVjX3NoaWZ0ID0gc2NhbGVfdjItPmRlLnByZWNfc2hpZnQ7 CisKKwlmb3IgKGkgPSAwOyBpIDwgRFBVX01BWF9ERV9DVVJWRVM7IGkrKykgeworCQljZmctPmRl LmFkanVzdF9hW2ldID0gc2NhbGVfdjItPmRlLmFkanVzdF9hW2ldOworCQljZmctPmRlLmFkanVz dF9iW2ldID0gc2NhbGVfdjItPmRlLmFkanVzdF9iW2ldOworCQljZmctPmRlLmFkanVzdF9jW2ld ID0gc2NhbGVfdjItPmRlLmFkanVzdF9jW2ldOworCX0KK30KKworc3RhdGljIHZvaWQgX2RwdV9o d19zZXR1cF9zY2FsZXIzX2x1dChzdHJ1Y3QgZHB1X2h3X2Jsa19yZWdfbWFwICpjLAorCQlzdHJ1 Y3QgZHB1X2h3X3NjYWxlcjNfY2ZnICpzY2FsZXIzX2NmZywgdTMyIG9mZnNldCkKK3sKKwlpbnQg aSwgaiwgZmlsdGVyOworCWludCBjb25maWdfbHV0ID0gMHgwOworCXVuc2lnbmVkIGxvbmcgbHV0 X2ZsYWdzOworCXUzMiBsdXRfYWRkciwgbHV0X29mZnNldCwgbHV0X2xlbjsKKwl1MzIgKmx1dFtR U0VFRDNfRklMVEVSU10gPSB7TlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH07CisJc3RhdGlj IGNvbnN0IHVpbnQzMl90IG9mZl90YmxbUVNFRUQzX0ZJTFRFUlNdW1FTRUVEM19MVVRfUkVHSU9O U11bMl0gPSB7CisJCXt7MTgsIDB4MDAwfSwgezEyLCAweDEyMH0sIHsxMiwgMHgxRTB9LCB7OCwg MHgyQTB9IH0sCisJCXt7NiwgMHgzMjB9LCB7MywgMHgzRTB9LCB7MywgMHg0NDB9LCB7MywgMHg0 QTB9IH0sCisJCXt7NiwgMHg1MDB9LCB7MywgMHg1YzB9LCB7MywgMHg2MjB9LCB7MywgMHg2ODB9 IH0sCisJCXt7NiwgMHgzODB9LCB7MywgMHg0MTB9LCB7MywgMHg0NzB9LCB7MywgMHg0ZDB9IH0s CisJCXt7NiwgMHg1NjB9LCB7MywgMHg1ZjB9LCB7MywgMHg2NTB9LCB7MywgMHg2YjB9IH0sCisJ fTsKKworCWx1dF9mbGFncyA9ICh1bnNpZ25lZCBsb25nKSBzY2FsZXIzX2NmZy0+bHV0X2ZsYWc7 CisJaWYgKHRlc3RfYml0KFFTRUVEM19DT0VGX0xVVF9ESVJfQklULCAmbHV0X2ZsYWdzKSAmJgor CQkoc2NhbGVyM19jZmctPmRpcl9sZW4gPT0gUVNFRUQzX0RJUl9MVVRfU0laRSkpIHsKKwkJbHV0 WzBdID0gc2NhbGVyM19jZmctPmRpcl9sdXQ7CisJCWNvbmZpZ19sdXQgPSAxOworCX0KKwlpZiAo dGVzdF9iaXQoUVNFRUQzX0NPRUZfTFVUX1lfQ0lSX0JJVCwgJmx1dF9mbGFncykgJiYKKwkJKHNj YWxlcjNfY2ZnLT55X3JnYl9jaXJfbHV0X2lkeCA8IFFTRUVEM19DSVJDVUxBUl9MVVRTKSAmJgor CQkoc2NhbGVyM19jZmctPmNpcl9sZW4gPT0gUVNFRUQzX0NJUl9MVVRfU0laRSkpIHsKKwkJbHV0 WzFdID0gc2NhbGVyM19jZmctPmNpcl9sdXQgKworCQkJc2NhbGVyM19jZmctPnlfcmdiX2Npcl9s dXRfaWR4ICogUVNFRUQzX0xVVF9TSVpFOworCQljb25maWdfbHV0ID0gMTsKKwl9CisJaWYgKHRl c3RfYml0KFFTRUVEM19DT0VGX0xVVF9VVl9DSVJfQklULCAmbHV0X2ZsYWdzKSAmJgorCQkoc2Nh bGVyM19jZmctPnV2X2Npcl9sdXRfaWR4IDwgUVNFRUQzX0NJUkNVTEFSX0xVVFMpICYmCisJCShz Y2FsZXIzX2NmZy0+Y2lyX2xlbiA9PSBRU0VFRDNfQ0lSX0xVVF9TSVpFKSkgeworCQlsdXRbMl0g PSBzY2FsZXIzX2NmZy0+Y2lyX2x1dCArCisJCQlzY2FsZXIzX2NmZy0+dXZfY2lyX2x1dF9pZHgg KiBRU0VFRDNfTFVUX1NJWkU7CisJCWNvbmZpZ19sdXQgPSAxOworCX0KKwlpZiAodGVzdF9iaXQo UVNFRUQzX0NPRUZfTFVUX1lfU0VQX0JJVCwgJmx1dF9mbGFncykgJiYKKwkJKHNjYWxlcjNfY2Zn LT55X3JnYl9zZXBfbHV0X2lkeCA8IFFTRUVEM19TRVBBUkFCTEVfTFVUUykgJiYKKwkJKHNjYWxl cjNfY2ZnLT5zZXBfbGVuID09IFFTRUVEM19TRVBfTFVUX1NJWkUpKSB7CisJCWx1dFszXSA9IHNj YWxlcjNfY2ZnLT5zZXBfbHV0ICsKKwkJCXNjYWxlcjNfY2ZnLT55X3JnYl9zZXBfbHV0X2lkeCAq IFFTRUVEM19MVVRfU0laRTsKKwkJY29uZmlnX2x1dCA9IDE7CisJfQorCWlmICh0ZXN0X2JpdChR U0VFRDNfQ09FRl9MVVRfVVZfU0VQX0JJVCwgJmx1dF9mbGFncykgJiYKKwkJKHNjYWxlcjNfY2Zn LT51dl9zZXBfbHV0X2lkeCA8IFFTRUVEM19TRVBBUkFCTEVfTFVUUykgJiYKKwkJKHNjYWxlcjNf Y2ZnLT5zZXBfbGVuID09IFFTRUVEM19TRVBfTFVUX1NJWkUpKSB7CisJCWx1dFs0XSA9IHNjYWxl cjNfY2ZnLT5zZXBfbHV0ICsKKwkJCXNjYWxlcjNfY2ZnLT51dl9zZXBfbHV0X2lkeCAqIFFTRUVE M19MVVRfU0laRTsKKwkJY29uZmlnX2x1dCA9IDE7CisJfQorCisJaWYgKGNvbmZpZ19sdXQpIHsK KwkJZm9yIChmaWx0ZXIgPSAwOyBmaWx0ZXIgPCBRU0VFRDNfRklMVEVSUzsgZmlsdGVyKyspIHsK KwkJCWlmICghbHV0W2ZpbHRlcl0pCisJCQkJY29udGludWU7CisJCQlsdXRfb2Zmc2V0ID0gMDsK KwkJCWZvciAoaSA9IDA7IGkgPCBRU0VFRDNfTFVUX1JFR0lPTlM7IGkrKykgeworCQkJCWx1dF9h ZGRyID0gUVNFRUQzX0NPRUZfTFVUICsgb2Zmc2V0CisJCQkJCSsgb2ZmX3RibFtmaWx0ZXJdW2ld WzFdOworCQkJCWx1dF9sZW4gPSBvZmZfdGJsW2ZpbHRlcl1baV1bMF0gPDwgMjsKKwkJCQlmb3Ig KGogPSAwOyBqIDwgbHV0X2xlbjsgaisrKSB7CisJCQkJCURQVV9SRUdfV1JJVEUoYywKKwkJCQkJ CWx1dF9hZGRyLAorCQkJCQkJKGx1dFtmaWx0ZXJdKVtsdXRfb2Zmc2V0KytdKTsKKwkJCQkJbHV0 X2FkZHIgKz0gNDsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlpZiAodGVzdF9iaXQoUVNFRUQz X0NPRUZfTFVUX1NXQVBfQklULCAmbHV0X2ZsYWdzKSkKKwkJRFBVX1JFR19XUklURShjLCBRU0VF RDNfQ09FRl9MVVRfQ1RSTCArIG9mZnNldCwgQklUKDApKTsKKworfQorCitzdGF0aWMgdm9pZCBf ZHB1X2h3X3NldHVwX3NjYWxlcjNfZGUoc3RydWN0IGRwdV9od19ibGtfcmVnX21hcCAqYywKKwkJ c3RydWN0IGRwdV9od19zY2FsZXIzX2RlX2NmZyAqZGVfY2ZnLCB1MzIgb2Zmc2V0KQoreworCXUz MiBzaGFycF9sdmwsIHNoYXJwX2N0bCwgc2hhcGVfY3RsLCBkZV90aHI7CisJdTMyIGFkanVzdF9h LCBhZGp1c3RfYiwgYWRqdXN0X2M7CisKKwlpZiAoIWRlX2NmZy0+ZW5hYmxlKQorCQlyZXR1cm47 CisKKwlzaGFycF9sdmwgPSAoZGVfY2ZnLT5zaGFycGVuX2xldmVsMSAmIDB4MUZGKSB8CisJCSgo ZGVfY2ZnLT5zaGFycGVuX2xldmVsMiAmIDB4MUZGKSA8PCAxNik7CisKKwlzaGFycF9jdGwgPSAo KGRlX2NmZy0+bGltaXQgJiAweEYpIDw8IDkpIHwKKwkJKChkZV9jZmctPnByZWNfc2hpZnQgJiAw eDcpIDw8IDEzKSB8CisJCSgoZGVfY2ZnLT5jbGlwICYgMHg3KSA8PCAxNik7CisKKwlzaGFwZV9j dGwgPSAoZGVfY2ZnLT50aHJfcXVpZXQgJiAweEZGKSB8CisJCSgoZGVfY2ZnLT50aHJfZGllb3V0 ICYgMHgzRkYpIDw8IDE2KTsKKworCWRlX3RociA9IChkZV9jZmctPnRocl9sb3cgJiAweDNGRikg fAorCQkoKGRlX2NmZy0+dGhyX2hpZ2ggJiAweDNGRikgPDwgMTYpOworCisJYWRqdXN0X2EgPSAo ZGVfY2ZnLT5hZGp1c3RfYVswXSAmIDB4M0ZGKSB8CisJCSgoZGVfY2ZnLT5hZGp1c3RfYVsxXSAm IDB4M0ZGKSA8PCAxMCkgfAorCQkoKGRlX2NmZy0+YWRqdXN0X2FbMl0gJiAweDNGRikgPDwgMjAp OworCisJYWRqdXN0X2IgPSAoZGVfY2ZnLT5hZGp1c3RfYlswXSAmIDB4M0ZGKSB8CisJCSgoZGVf Y2ZnLT5hZGp1c3RfYlsxXSAmIDB4M0ZGKSA8PCAxMCkgfAorCQkoKGRlX2NmZy0+YWRqdXN0X2Jb Ml0gJiAweDNGRikgPDwgMjApOworCisJYWRqdXN0X2MgPSAoZGVfY2ZnLT5hZGp1c3RfY1swXSAm IDB4M0ZGKSB8CisJCSgoZGVfY2ZnLT5hZGp1c3RfY1sxXSAmIDB4M0ZGKSA8PCAxMCkgfAorCQko KGRlX2NmZy0+YWRqdXN0X2NbMl0gJiAweDNGRikgPDwgMjApOworCisJRFBVX1JFR19XUklURShj LCBRU0VFRDNfREVfU0hBUlBFTiArIG9mZnNldCwgc2hhcnBfbHZsKTsKKwlEUFVfUkVHX1dSSVRF KGMsIFFTRUVEM19ERV9TSEFSUEVOX0NUTCArIG9mZnNldCwgc2hhcnBfY3RsKTsKKwlEUFVfUkVH X1dSSVRFKGMsIFFTRUVEM19ERV9TSEFQRV9DVEwgKyBvZmZzZXQsIHNoYXBlX2N0bCk7CisJRFBV X1JFR19XUklURShjLCBRU0VFRDNfREVfVEhSRVNIT0xEICsgb2Zmc2V0LCBkZV90aHIpOworCURQ VV9SRUdfV1JJVEUoYywgUVNFRUQzX0RFX0FESlVTVF9EQVRBXzAgKyBvZmZzZXQsIGFkanVzdF9h KTsKKwlEUFVfUkVHX1dSSVRFKGMsIFFTRUVEM19ERV9BREpVU1RfREFUQV8xICsgb2Zmc2V0LCBh ZGp1c3RfYik7CisJRFBVX1JFR19XUklURShjLCBRU0VFRDNfREVfQURKVVNUX0RBVEFfMiArIG9m ZnNldCwgYWRqdXN0X2MpOworCit9CisKK3ZvaWQgZHB1X2h3X3NldHVwX3NjYWxlcjMoc3RydWN0 IGRwdV9od19ibGtfcmVnX21hcCAqYywKKwkJc3RydWN0IGRwdV9od19zY2FsZXIzX2NmZyAqc2Nh bGVyM19jZmcsCisJCXUzMiBzY2FsZXJfb2Zmc2V0LCB1MzIgc2NhbGVyX3ZlcnNpb24sCisJCWNv bnN0IHN0cnVjdCBkcHVfZm9ybWF0ICpmb3JtYXQpCit7CisJdTMyIG9wX21vZGUgPSAwOworCXUz MiBwaGFzZV9pbml0LCBwcmVsb2FkLCBzcmNfeV9yZ2IsIHNyY191diwgZHN0OworCisJaWYgKCFz Y2FsZXIzX2NmZy0+ZW5hYmxlKQorCQlnb3RvIGVuZDsKKworCW9wX21vZGUgfD0gQklUKDApOwor CW9wX21vZGUgfD0gKHNjYWxlcjNfY2ZnLT55X3JnYl9maWx0ZXJfY2ZnICYgMHgzKSA8PCAxNjsK KworCWlmIChmb3JtYXQgJiYgRFBVX0ZPUk1BVF9JU19ZVVYoZm9ybWF0KSkgeworCQlvcF9tb2Rl IHw9IEJJVCgxMik7CisJCW9wX21vZGUgfD0gKHNjYWxlcjNfY2ZnLT51dl9maWx0ZXJfY2ZnICYg MHgzKSA8PCAyNDsKKwl9CisKKwlvcF9tb2RlIHw9IChzY2FsZXIzX2NmZy0+YmxlbmRfY2ZnICYg MSkgPDwgMzE7CisJb3BfbW9kZSB8PSAoc2NhbGVyM19jZmctPmRpcl9lbikgPyBCSVQoNCkgOiAw OworCisJcHJlbG9hZCA9CisJCSgoc2NhbGVyM19jZmctPnByZWxvYWRfeFswXSAmIDB4N0YpIDw8 IDApIHwKKwkJKChzY2FsZXIzX2NmZy0+cHJlbG9hZF95WzBdICYgMHg3RikgPDwgOCkgfAorCQko KHNjYWxlcjNfY2ZnLT5wcmVsb2FkX3hbMV0gJiAweDdGKSA8PCAxNikgfAorCQkoKHNjYWxlcjNf Y2ZnLT5wcmVsb2FkX3lbMV0gJiAweDdGKSA8PCAyNCk7CisKKwlzcmNfeV9yZ2IgPSAoc2NhbGVy M19jZmctPnNyY193aWR0aFswXSAmIDB4MUZGRkYpIHwKKwkJKChzY2FsZXIzX2NmZy0+c3JjX2hl aWdodFswXSAmIDB4MUZGRkYpIDw8IDE2KTsKKworCXNyY191diA9IChzY2FsZXIzX2NmZy0+c3Jj X3dpZHRoWzFdICYgMHgxRkZGRikgfAorCQkoKHNjYWxlcjNfY2ZnLT5zcmNfaGVpZ2h0WzFdICYg MHgxRkZGRikgPDwgMTYpOworCisJZHN0ID0gKHNjYWxlcjNfY2ZnLT5kc3Rfd2lkdGggJiAweDFG RkZGKSB8CisJCSgoc2NhbGVyM19jZmctPmRzdF9oZWlnaHQgJiAweDFGRkZGKSA8PCAxNik7CisK KwlpZiAoc2NhbGVyM19jZmctPmRlLmVuYWJsZSkgeworCQlfZHB1X2h3X3NldHVwX3NjYWxlcjNf ZGUoYywgJnNjYWxlcjNfY2ZnLT5kZSwgc2NhbGVyX29mZnNldCk7CisJCW9wX21vZGUgfD0gQklU KDgpOworCX0KKworCWlmIChzY2FsZXIzX2NmZy0+bHV0X2ZsYWcpCisJCV9kcHVfaHdfc2V0dXBf c2NhbGVyM19sdXQoYywgc2NhbGVyM19jZmcsCisJCQkJCQkJCXNjYWxlcl9vZmZzZXQpOworCisJ aWYgKHNjYWxlcl92ZXJzaW9uID09IDB4MTAwMikgeworCQlwaGFzZV9pbml0ID0KKwkJCSgoc2Nh bGVyM19jZmctPmluaXRfcGhhc2VfeFswXSAmIDB4M0YpIDw8IDApIHwKKwkJCSgoc2NhbGVyM19j ZmctPmluaXRfcGhhc2VfeVswXSAmIDB4M0YpIDw8IDgpIHwKKwkJCSgoc2NhbGVyM19jZmctPmlu aXRfcGhhc2VfeFsxXSAmIDB4M0YpIDw8IDE2KSB8CisJCQkoKHNjYWxlcjNfY2ZnLT5pbml0X3Bo YXNlX3lbMV0gJiAweDNGKSA8PCAyNCk7CisJCURQVV9SRUdfV1JJVEUoYywgUVNFRUQzX1BIQVNF X0lOSVQgKyBzY2FsZXJfb2Zmc2V0LCBwaGFzZV9pbml0KTsKKwl9IGVsc2UgeworCQlEUFVfUkVH X1dSSVRFKGMsIFFTRUVEM19QSEFTRV9JTklUX1lfSCArIHNjYWxlcl9vZmZzZXQsCisJCQlzY2Fs ZXIzX2NmZy0+aW5pdF9waGFzZV94WzBdICYgMHgxRkZGRkYpOworCQlEUFVfUkVHX1dSSVRFKGMs IFFTRUVEM19QSEFTRV9JTklUX1lfViArIHNjYWxlcl9vZmZzZXQsCisJCQlzY2FsZXIzX2NmZy0+ aW5pdF9waGFzZV95WzBdICYgMHgxRkZGRkYpOworCQlEUFVfUkVHX1dSSVRFKGMsIFFTRUVEM19Q SEFTRV9JTklUX1VWX0ggKyBzY2FsZXJfb2Zmc2V0LAorCQkJc2NhbGVyM19jZmctPmluaXRfcGhh c2VfeFsxXSAmIDB4MUZGRkZGKTsKKwkJRFBVX1JFR19XUklURShjLCBRU0VFRDNfUEhBU0VfSU5J VF9VVl9WICsgc2NhbGVyX29mZnNldCwKKwkJCXNjYWxlcjNfY2ZnLT5pbml0X3BoYXNlX3lbMV0g JiAweDFGRkZGRik7CisJfQorCisJRFBVX1JFR19XUklURShjLCBRU0VFRDNfUEhBU0VfU1RFUF9Z X0ggKyBzY2FsZXJfb2Zmc2V0LAorCQlzY2FsZXIzX2NmZy0+cGhhc2Vfc3RlcF94WzBdICYgMHhG RkZGRkYpOworCisJRFBVX1JFR19XUklURShjLCBRU0VFRDNfUEhBU0VfU1RFUF9ZX1YgKyBzY2Fs ZXJfb2Zmc2V0LAorCQlzY2FsZXIzX2NmZy0+cGhhc2Vfc3RlcF95WzBdICYgMHhGRkZGRkYpOwor CisJRFBVX1JFR19XUklURShjLCBRU0VFRDNfUEhBU0VfU1RFUF9VVl9IICsgc2NhbGVyX29mZnNl dCwKKwkJc2NhbGVyM19jZmctPnBoYXNlX3N0ZXBfeFsxXSAmIDB4RkZGRkZGKTsKKworCURQVV9S RUdfV1JJVEUoYywgUVNFRUQzX1BIQVNFX1NURVBfVVZfViArIHNjYWxlcl9vZmZzZXQsCisJCXNj YWxlcjNfY2ZnLT5waGFzZV9zdGVwX3lbMV0gJiAweEZGRkZGRik7CisKKwlEUFVfUkVHX1dSSVRF KGMsIFFTRUVEM19QUkVMT0FEICsgc2NhbGVyX29mZnNldCwgcHJlbG9hZCk7CisKKwlEUFVfUkVH X1dSSVRFKGMsIFFTRUVEM19TUkNfU0laRV9ZX1JHQl9BICsgc2NhbGVyX29mZnNldCwgc3JjX3lf cmdiKTsKKworCURQVV9SRUdfV1JJVEUoYywgUVNFRUQzX1NSQ19TSVpFX1VWICsgc2NhbGVyX29m ZnNldCwgc3JjX3V2KTsKKworCURQVV9SRUdfV1JJVEUoYywgUVNFRUQzX0RTVF9TSVpFICsgc2Nh bGVyX29mZnNldCwgZHN0KTsKKworZW5kOgorCWlmIChmb3JtYXQgJiYgIURQVV9GT1JNQVRfSVNf RFgoZm9ybWF0KSkKKwkJb3BfbW9kZSB8PSBCSVQoMTQpOworCisJaWYgKGZvcm1hdCAmJiBmb3Jt YXQtPmFscGhhX2VuYWJsZSkgeworCQlvcF9tb2RlIHw9IEJJVCgxMCk7CisJCWlmIChzY2FsZXJf dmVyc2lvbiA9PSAweDEwMDIpCisJCQlvcF9tb2RlIHw9IChzY2FsZXIzX2NmZy0+YWxwaGFfZmls dGVyX2NmZyAmIDB4MSkgPDwgMzA7CisJCWVsc2UKKwkJCW9wX21vZGUgfD0gKHNjYWxlcjNfY2Zn LT5hbHBoYV9maWx0ZXJfY2ZnICYgMHgzKSA8PCAyOTsKKwl9CisKKwlEUFVfUkVHX1dSSVRFKGMs IFFTRUVEM19PUF9NT0RFICsgc2NhbGVyX29mZnNldCwgb3BfbW9kZSk7Cit9CisKK3UzMiBkcHVf aHdfZ2V0X3NjYWxlcjNfdmVyKHN0cnVjdCBkcHVfaHdfYmxrX3JlZ19tYXAgKmMsCisJCQl1MzIg c2NhbGVyX29mZnNldCkKK3sKKwlyZXR1cm4gRFBVX1JFR19SRUFEKGMsIFFTRUVEM19IV19WRVJT SU9OICsgc2NhbGVyX29mZnNldCk7Cit9CisKK3ZvaWQgZHB1X2h3X2NzY19zZXR1cChzdHJ1Y3Qg ZHB1X2h3X2Jsa19yZWdfbWFwICpjLAorCQl1MzIgY3NjX3JlZ19vZmYsCisJCXN0cnVjdCBkcHVf Y3NjX2NmZyAqZGF0YSwgYm9vbCBjc2MxMCkKK3sKKwlzdGF0aWMgY29uc3QgdTMyIG1hdHJpeF9z aGlmdCA9IDc7CisJdTMyIGNsYW1wX3NoaWZ0ID0gY3NjMTAgPyAxNiA6IDg7CisJdTMyIHZhbDsK KworCS8qIG1hdHJpeCBjb2VmZiAtIGNvbnZlcnQgUzE1LjE2IHRvIFM0LjkgKi8KKwl2YWwgPSAo KGRhdGEtPmNzY19tdlswXSA+PiBtYXRyaXhfc2hpZnQpICYgMHgxRkZGKSB8CisJCSgoKGRhdGEt PmNzY19tdlsxXSA+PiBtYXRyaXhfc2hpZnQpICYgMHgxRkZGKSA8PCAxNik7CisJRFBVX1JFR19X UklURShjLCBjc2NfcmVnX29mZiwgdmFsKTsKKwl2YWwgPSAoKGRhdGEtPmNzY19tdlsyXSA+PiBt YXRyaXhfc2hpZnQpICYgMHgxRkZGKSB8CisJCSgoKGRhdGEtPmNzY19tdlszXSA+PiBtYXRyaXhf c2hpZnQpICYgMHgxRkZGKSA8PCAxNik7CisJRFBVX1JFR19XUklURShjLCBjc2NfcmVnX29mZiAr IDB4NCwgdmFsKTsKKwl2YWwgPSAoKGRhdGEtPmNzY19tdls0XSA+PiBtYXRyaXhfc2hpZnQpICYg MHgxRkZGKSB8CisJCSgoKGRhdGEtPmNzY19tdls1XSA+PiBtYXRyaXhfc2hpZnQpICYgMHgxRkZG KSA8PCAxNik7CisJRFBVX1JFR19XUklURShjLCBjc2NfcmVnX29mZiArIDB4OCwgdmFsKTsKKwl2 YWwgPSAoKGRhdGEtPmNzY19tdls2XSA+PiBtYXRyaXhfc2hpZnQpICYgMHgxRkZGKSB8CisJCSgo KGRhdGEtPmNzY19tdls3XSA+PiBtYXRyaXhfc2hpZnQpICYgMHgxRkZGKSA8PCAxNik7CisJRFBV X1JFR19XUklURShjLCBjc2NfcmVnX29mZiArIDB4YywgdmFsKTsKKwl2YWwgPSAoZGF0YS0+Y3Nj X212WzhdID4+IG1hdHJpeF9zaGlmdCkgJiAweDFGRkY7CisJRFBVX1JFR19XUklURShjLCBjc2Nf cmVnX29mZiArIDB4MTAsIHZhbCk7CisKKwkvKiBQcmUgY2xhbXAgKi8KKwl2YWwgPSAoZGF0YS0+ Y3NjX3ByZV9sdlswXSA8PCBjbGFtcF9zaGlmdCkgfCBkYXRhLT5jc2NfcHJlX2x2WzFdOworCURQ VV9SRUdfV1JJVEUoYywgY3NjX3JlZ19vZmYgKyAweDE0LCB2YWwpOworCXZhbCA9IChkYXRhLT5j c2NfcHJlX2x2WzJdIDw8IGNsYW1wX3NoaWZ0KSB8IGRhdGEtPmNzY19wcmVfbHZbM107CisJRFBV X1JFR19XUklURShjLCBjc2NfcmVnX29mZiArIDB4MTgsIHZhbCk7CisJdmFsID0gKGRhdGEtPmNz Y19wcmVfbHZbNF0gPDwgY2xhbXBfc2hpZnQpIHwgZGF0YS0+Y3NjX3ByZV9sdls1XTsKKwlEUFVf UkVHX1dSSVRFKGMsIGNzY19yZWdfb2ZmICsgMHgxYywgdmFsKTsKKworCS8qIFBvc3QgY2xhbXAg Ki8KKwl2YWwgPSAoZGF0YS0+Y3NjX3Bvc3RfbHZbMF0gPDwgY2xhbXBfc2hpZnQpIHwgZGF0YS0+ Y3NjX3Bvc3RfbHZbMV07CisJRFBVX1JFR19XUklURShjLCBjc2NfcmVnX29mZiArIDB4MjAsIHZh bCk7CisJdmFsID0gKGRhdGEtPmNzY19wb3N0X2x2WzJdIDw8IGNsYW1wX3NoaWZ0KSB8IGRhdGEt PmNzY19wb3N0X2x2WzNdOworCURQVV9SRUdfV1JJVEUoYywgY3NjX3JlZ19vZmYgKyAweDI0LCB2 YWwpOworCXZhbCA9IChkYXRhLT5jc2NfcG9zdF9sdls0XSA8PCBjbGFtcF9zaGlmdCkgfCBkYXRh LT5jc2NfcG9zdF9sdls1XTsKKwlEUFVfUkVHX1dSSVRFKGMsIGNzY19yZWdfb2ZmICsgMHgyOCwg dmFsKTsKKworCS8qIFByZS1CaWFzICovCisJRFBVX1JFR19XUklURShjLCBjc2NfcmVnX29mZiAr IDB4MmMsIGRhdGEtPmNzY19wcmVfYnZbMF0pOworCURQVV9SRUdfV1JJVEUoYywgY3NjX3JlZ19v ZmYgKyAweDMwLCBkYXRhLT5jc2NfcHJlX2J2WzFdKTsKKwlEUFVfUkVHX1dSSVRFKGMsIGNzY19y ZWdfb2ZmICsgMHgzNCwgZGF0YS0+Y3NjX3ByZV9idlsyXSk7CisKKwkvKiBQb3N0LUJpYXMgKi8K KwlEUFVfUkVHX1dSSVRFKGMsIGNzY19yZWdfb2ZmICsgMHgzOCwgZGF0YS0+Y3NjX3Bvc3RfYnZb MF0pOworCURQVV9SRUdfV1JJVEUoYywgY3NjX3JlZ19vZmYgKyAweDNjLCBkYXRhLT5jc2NfcG9z dF9idlsxXSk7CisJRFBVX1JFR19XUklURShjLCBjc2NfcmVnX29mZiArIDB4NDAsIGRhdGEtPmNz Y19wb3N0X2J2WzJdKTsKK30KKworLyoqCisgKiBfZHB1X2NvcHlfZm9ybWF0cyAgIC0gY29weSBm b3JtYXRzIGZyb20gc3JjX2xpc3QgdG8gZHN0X2xpc3QKKyAqIEBkc3RfbGlzdDogICAgICAgICAg cG9pbnRlciB0byBkZXN0aW5hdGlvbiBsaXN0IHdoZXJlIHRvIGNvcHkgZm9ybWF0cworICogQGRz dF9saXN0X3NpemU6ICAgICBzaXplIG9mIGRlc3RpbmF0aW9uIGxpc3QKKyAqIEBkc3RfbGlzdF9w b3M6ICAgICAgc3RhcnRpbmcgcG9zaXRpb24gb24gdGhlIGxpc3Qgd2hlcmUgdG8gY29weSBmb3Jt YXRzCisgKiBAc3JjX2xpc3Q6ICAgICAgICAgIHBvaW50ZXIgdG8gc291cmNlIGxpc3Qgd2hlcmUg dG8gY29weSBmb3JtYXRzIGZyb20KKyAqIEBzcmNfbGlzdF9zaXplOiAgICAgc2l6ZSBvZiBzb3Vy Y2UgbGlzdAorICogUmV0dXJuOiBudW1iZXIgb2YgZWxlbWVudHMgcG9wdWxhdGVkCisgKi8KK3Vp bnQzMl90IGRwdV9jb3B5X2Zvcm1hdHMoCisJCXN0cnVjdCBkcHVfZm9ybWF0X2V4dGVuZGVkICpk c3RfbGlzdCwKKwkJdWludDMyX3QgZHN0X2xpc3Rfc2l6ZSwKKwkJdWludDMyX3QgZHN0X2xpc3Rf cG9zLAorCQljb25zdCBzdHJ1Y3QgZHB1X2Zvcm1hdF9leHRlbmRlZCAqc3JjX2xpc3QsCisJCXVp bnQzMl90IHNyY19saXN0X3NpemUpCit7CisJdWludDMyX3QgY3VyX3BvcywgaTsKKworCWlmICgh ZHN0X2xpc3QgfHwgIXNyY19saXN0IHx8IChkc3RfbGlzdF9wb3MgPj0gKGRzdF9saXN0X3NpemUg LSAxKSkpCisJCXJldHVybiAwOworCisJZm9yIChpID0gMCwgY3VyX3BvcyA9IGRzdF9saXN0X3Bv czsKKwkJKGN1cl9wb3MgPCAoZHN0X2xpc3Rfc2l6ZSAtIDEpKSAmJiAoaSA8IHNyY19saXN0X3Np emUpCisJCSYmIHNyY19saXN0W2ldLmZvdXJjY19mb3JtYXQ7ICsraSwgKytjdXJfcG9zKQorCQlk c3RfbGlzdFtjdXJfcG9zXSA9IHNyY19saXN0W2ldOworCisJZHN0X2xpc3RbY3VyX3Bvc10uZm91 cmNjX2Zvcm1hdCA9IDA7CisKKwlyZXR1cm4gaTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od191dGlsLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvZHB1MS9kcHVfaHdfdXRpbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwMC4uNDJmMWIyMjhkMzQyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X2h3X3V0aWwuaApAQCAtMCwwICsxLDM1OCBAQAorLyogQ29weXJpZ2h0 IChjKSAyMDE1LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVk LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVyc2lvbiAyIGFz IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfRFBVX0hXX1VUSUxfSAorI2RlZmluZSBfRFBV X0hXX1VUSUxfSAorCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFi Lmg+CisjaW5jbHVkZSAiZHB1X2h3X21kc3MuaCIKKworI2RlZmluZSBSRUdfTUFTSyhuKSAgICAg ICAgICAgICAgICAgICAgICgoQklUKG4pKSAtIDEpCitzdHJ1Y3QgZHB1X2Zvcm1hdF9leHRlbmRl ZDsKKworLyoKKyAqIFRoaXMgaXMgdGhlIGNvbW1vbiBzdHJ1Y3QgbWFpbnRhaW5lZCBieSBlYWNo IHN1YiBibG9jaworICogZm9yIG1hcHBpbmcgdGhlIHJlZ2lzdGVyIG9mZnNldHMgaW4gdGhpcyBi bG9jayB0byB0aGUKKyAqIGFic291bHV0ZSBJTyBhZGRyZXNzCisgKiBAYmFzZV9vZmY6ICAgICBt ZHAgcmVnaXN0ZXIgbWFwcGVkIG9mZnNldAorICogQGJsa19vZmY6ICAgICAgcGlwZSBvZmZzZXQg cmVsYXRpdmUgdG8gbWRzcyBvZmZzZXQKKyAqIEBsZW5ndGggICAgICAgIGxlbmd0aCBvZiByZWdp c3RlciBibG9jayBvZmZzZXQKKyAqIEB4aW5faWQgICAgICAgIHhpbiBpZAorICogQGh3dmVyc2lv biAgICAgbWRzcyBodyB2ZXJzaW9uIG51bWJlcgorICovCitzdHJ1Y3QgZHB1X2h3X2Jsa19yZWdf bWFwIHsKKwl2b2lkIF9faW9tZW0gKmJhc2Vfb2ZmOworCXUzMiBibGtfb2ZmOworCXUzMiBsZW5n dGg7CisJdTMyIHhpbl9pZDsKKwl1MzIgaHd2ZXJzaW9uOworCXUzMiBsb2dfbWFzazsKK307CisK Ky8qKgorICogc3RydWN0IGRwdV9od19zY2FsZXIzX2RlX2NmZyA6IFFTRUVEdjMgZGV0YWlsIGVu aGFuY2VyIGNvbmZpZ3VyYXRpb24KKyAqIEBlbmFibGU6ICAgICAgICAgZGV0YWlsIGVuaGFuY2Vy IGVuYWJsZS9kaXNhYmxlCisgKiBAc2hhcnBlbl9sZXZlbDE6IHNoYXJwZW5pbmcgc3RyZW5ndGgg Zm9yIG5vaXNlCisgKiBAc2hhcnBlbl9sZXZlbDI6IHNoYXJwZW5pbmcgc3RyZW5ndGggZm9yIHNp Z25hbAorICogQCBjbGlwOiAgICAgICAgICBjbGlwIHNoaWZ0CisgKiBAIGxpbWl0OiAgICAgICAg IGxpbWl0IHZhbHVlCisgKiBAIHRocl9xdWlldDogICAgIHF1aWV0IHRocmVzaG9sZAorICogQCB0 aHJfZGllb3V0OiAgICBkaWVvdXQgdGhyZXNob2xkCisgKiBAIHRocl9oaWdoOiAgICAgIGxvdyB0 aHJlc2hvbGQKKyAqIEAgdGhyX2hpZ2g6ICAgICAgaGlnaCB0aHJlc2hvbGQKKyAqIEAgcHJlY19z aGlmdDogICAgcHJlY2lzaW9uIHNoaWZ0CisgKiBAIGFkanVzdF9hOiAgICAgIEEtY29lZmZpY2ll bnRzIGZvciBtYXBwaW5nIGN1cnZlCisgKiBAIGFkanVzdF9iOiAgICAgIEItY29lZmZpY2llbnRz IGZvciBtYXBwaW5nIGN1cnZlCisgKiBAIGFkanVzdF9jOiAgICAgIEMtY29lZmZpY2llbnRzIGZv ciBtYXBwaW5nIGN1cnZlCisgKi8KK3N0cnVjdCBkcHVfaHdfc2NhbGVyM19kZV9jZmcgeworCXUz MiBlbmFibGU7CisJaW50MTZfdCBzaGFycGVuX2xldmVsMTsKKwlpbnQxNl90IHNoYXJwZW5fbGV2 ZWwyOworCXVpbnQxNl90IGNsaXA7CisJdWludDE2X3QgbGltaXQ7CisJdWludDE2X3QgdGhyX3F1 aWV0OworCXVpbnQxNl90IHRocl9kaWVvdXQ7CisJdWludDE2X3QgdGhyX2xvdzsKKwl1aW50MTZf dCB0aHJfaGlnaDsKKwl1aW50MTZfdCBwcmVjX3NoaWZ0OworCWludDE2X3QgYWRqdXN0X2FbRFBV X01BWF9ERV9DVVJWRVNdOworCWludDE2X3QgYWRqdXN0X2JbRFBVX01BWF9ERV9DVVJWRVNdOwor CWludDE2X3QgYWRqdXN0X2NbRFBVX01BWF9ERV9DVVJWRVNdOworfTsKKworCisvKioKKyAqIHN0 cnVjdCBkcHVfaHdfc2NhbGVyM19jZmcgOiBRU0VFRHYzIGNvbmZpZ3VyYXRpb24KKyAqIEBlbmFi bGU6ICAgICAgICBzY2FsZXIgZW5hYmxlCisgKiBAZGlyX2VuOiAgICAgICAgZGlyZWN0aW9uIGRl dGVjdGlvbiBibG9jayBlbmFibGUKKyAqIEAgaW5pdF9waGFzZV94OiBob3Jpem9udGFsIGluaXRp YWwgcGhhc2UKKyAqIEAgcGhhc2Vfc3RlcF94OiBob3Jpem9udGFsIHBoYXNlIHN0ZXAKKyAqIEAg aW5pdF9waGFzZV95OiB2ZXJ0aWNhbCBpbml0aWFsIHBoYXNlCisgKiBAIHBoYXNlX3N0ZXBfeTog dmVydGljYWwgcGhhc2Ugc3RlcAorICogQCBwcmVsb2FkX3g6ICAgIGhvcml6b250YWwgcHJlbG9h ZCB2YWx1ZQorICogQCBwcmVsb2FkX3k6ICAgIHZlcnRpY2FsIHByZWxvYWQgdmFsdWUKKyAqIEAg c3JjX3dpZHRoOiAgICBzb3VyY2Ugd2lkdGgKKyAqIEAgc3JjX2hlaWdodDogICBzb3VyY2UgaGVp Z2h0CisgKiBAIGRzdF93aWR0aDogICAgZGVzdGluYXRpb24gd2lkdGgKKyAqIEAgZHN0X2hlaWdo dDogICBkZXN0aW5hdGlvbiBoZWlnaHQKKyAqIEAgeV9yZ2JfZmlsdGVyX2NmZzogeS9yZ2IgcGxh bmUgZmlsdGVyIGNvbmZpZ3VyYXRpb24KKyAqIEAgdXZfZmlsdGVyX2NmZzogdXYgcGxhbmUgZmls dGVyIGNvbmZpZ3VyYXRpb24KKyAqIEAgYWxwaGFfZmlsdGVyX2NmZzogYWxwaGEgZmlsdGVyIGNv bmZpZ3VyYXRpb24KKyAqIEAgYmxlbmRfY2ZnOiAgICBibGVuZCBjb2VmZmljaWVudHMgY29uZmln dXJhdGlvbgorICogQCBsdXRfZmxhZzogICAgIHNjYWxlciBMVVQgdXBkYXRlIGZsYWdzCisgKiAg ICAgICAgICAgICAgICAgMHgxIHN3YXAgTFVUIGJhbmsKKyAqICAgICAgICAgICAgICAgICAweDIg dXBkYXRlIDJEIGZpbHRlciBMVVQKKyAqICAgICAgICAgICAgICAgICAweDQgdXBkYXRlIHkgY2ly Y3VsYXIgZmlsdGVyIExVVAorICogICAgICAgICAgICAgICAgIDB4OCB1cGRhdGUgdXYgY2lyY3Vs YXIgZmlsdGVyIExVVAorICogICAgICAgICAgICAgICAgIDB4MTAgdXBkYXRlIHkgc2VwYXJhYmxl IGZpbHRlciBMVVQKKyAqICAgICAgICAgICAgICAgICAweDIwIHVwZGF0ZSB1diBzZXBhcmFibGUg ZmlsdGVyIExVVAorICogQCBkaXJfbHV0X2lkeDogIDJEIGZpbHRlciBMVVQgaW5kZXgKKyAqIEAg eV9yZ2JfY2lyX2x1dF9pZHg6IHkgY2lyY3VsYXIgZmlsdGVyIExVVCBpbmRleAorICogQCB1dl9j aXJfbHV0X2lkeDogdXYgY2lyY3VsYXIgZmlsdGVyIExVVCBpbmRleAorICogQCB5X3JnYl9zZXBf bHV0X2lkeDogeSBjaXJjdWxhciBmaWx0ZXIgTFVUIGluZGV4CisgKiBAIHV2X3NlcF9sdXRfaWR4 OiB1diBzZXBhcmFibGUgZmlsdGVyIExVVCBpbmRleAorICogQCBkaXJfbHV0OiAgICAgIHBvaW50 ZXIgdG8gMkQgTFVUCisgKiBAIGNpcl9sdXQ6ICAgICAgcG9pbnRlciB0byBjaXJjdWxhciBmaWx0 ZXIgTFVUCisgKiBAIHNlcF9sdXQ6ICAgICAgcG9pbnRlciB0byBzZXBhcmFibGUgZmlsdGVyIExV VAorICogQCBkZTogZGV0YWlsIGVuaGFuY2VyIGNvbmZpZ3VyYXRpb24KKyAqLworc3RydWN0IGRw dV9od19zY2FsZXIzX2NmZyB7CisJdTMyIGVuYWJsZTsKKwl1MzIgZGlyX2VuOworCWludDMyX3Qg aW5pdF9waGFzZV94W0RQVV9NQVhfUExBTkVTXTsKKwlpbnQzMl90IHBoYXNlX3N0ZXBfeFtEUFVf TUFYX1BMQU5FU107CisJaW50MzJfdCBpbml0X3BoYXNlX3lbRFBVX01BWF9QTEFORVNdOworCWlu dDMyX3QgcGhhc2Vfc3RlcF95W0RQVV9NQVhfUExBTkVTXTsKKworCXUzMiBwcmVsb2FkX3hbRFBV X01BWF9QTEFORVNdOworCXUzMiBwcmVsb2FkX3lbRFBVX01BWF9QTEFORVNdOworCXUzMiBzcmNf d2lkdGhbRFBVX01BWF9QTEFORVNdOworCXUzMiBzcmNfaGVpZ2h0W0RQVV9NQVhfUExBTkVTXTsK KworCXUzMiBkc3Rfd2lkdGg7CisJdTMyIGRzdF9oZWlnaHQ7CisKKwl1MzIgeV9yZ2JfZmlsdGVy X2NmZzsKKwl1MzIgdXZfZmlsdGVyX2NmZzsKKwl1MzIgYWxwaGFfZmlsdGVyX2NmZzsKKwl1MzIg YmxlbmRfY2ZnOworCisJdTMyIGx1dF9mbGFnOworCXUzMiBkaXJfbHV0X2lkeDsKKworCXUzMiB5 X3JnYl9jaXJfbHV0X2lkeDsKKwl1MzIgdXZfY2lyX2x1dF9pZHg7CisJdTMyIHlfcmdiX3NlcF9s dXRfaWR4OworCXUzMiB1dl9zZXBfbHV0X2lkeDsKKwl1MzIgKmRpcl9sdXQ7CisJc2l6ZV90IGRp cl9sZW47CisJdTMyICpjaXJfbHV0OworCXNpemVfdCBjaXJfbGVuOworCXUzMiAqc2VwX2x1dDsK KwlzaXplX3Qgc2VwX2xlbjsKKworCS8qCisJICogRGV0YWlsIGVuaGFuY2VyIHNldHRpbmdzCisJ ICovCisJc3RydWN0IGRwdV9od19zY2FsZXIzX2RlX2NmZyBkZTsKK307CisKK3N0cnVjdCBkcHVf aHdfc2NhbGVyM19sdXRfY2ZnIHsKKwlib29sIGlzX2NvbmZpZ3VyZWQ7CisJdTMyICpkaXJfbHV0 OworCXNpemVfdCBkaXJfbGVuOworCXUzMiAqY2lyX2x1dDsKKwlzaXplX3QgY2lyX2xlbjsKKwl1 MzIgKnNlcF9sdXQ7CisJc2l6ZV90IHNlcF9sZW47Cit9OworCisvKioKKyAqIHN0cnVjdCBkcHVf ZHJtX3BpeF9leHRfdjEgLSB2ZXJzaW9uIDEgb2YgcGl4ZWwgZXh0IHN0cnVjdHVyZQorICogQG51 bV9leHRfcHhsc19scjogTnVtYmVyIG9mIHRvdGFsIGhvcml6b250YWwgcGl4ZWxzCisgKiBAbnVt X2V4dF9weGxzX3RiOiBOdW1iZXIgb2YgdG90YWwgdmVydGljYWwgbGluZXMKKyAqIEBsZWZ0X2Z0 Y2g6ICAgICAgIE51bWJlciBvZiBleHRyYSBwaXhlbHMgdG8gb3ZlcmZldGNoIGZyb20gbGVmdAor ICogQHJpZ2h0X2Z0Y2g6ICAgICAgTnVtYmVyIG9mIGV4dHJhIHBpeGVscyB0byBvdmVyZmV0Y2gg ZnJvbSByaWdodAorICogQHRvcF9mdGNoOiAgICAgICAgTnVtYmVyIG9mIGV4dHJhIGxpbmVzIHRv IG92ZXJmZXRjaCBmcm9tIHRvcAorICogQGJ0bV9mdGNoOiAgICAgICAgTnVtYmVyIG9mIGV4dHJh IGxpbmVzIHRvIG92ZXJmZXRjaCBmcm9tIGJvdHRvbQorICogQGxlZnRfcnB0OiAgICAgICAgTnVt YmVyIG9mIGV4dHJhIHBpeGVscyB0byByZXBlYXQgZnJvbSBsZWZ0CisgKiBAcmlnaHRfcnB0OiAg ICAgICBOdW1iZXIgb2YgZXh0cmEgcGl4ZWxzIHRvIHJlcGVhdCBmcm9tIHJpZ2h0CisgKiBAdG9w X3JwdDogICAgICAgICBOdW1iZXIgb2YgZXh0cmEgbGluZXMgdG8gcmVwZWF0IGZyb20gdG9wCisg KiBAYnRtX3JwdDogICAgICAgICBOdW1iZXIgb2YgZXh0cmEgbGluZXMgdG8gcmVwZWF0IGZyb20g Ym90dG9tCisgKi8KK3N0cnVjdCBkcHVfZHJtX3BpeF9leHRfdjEgeworCS8qCisJICogTnVtYmVy IG9mIHBpeGVscyBleHQgaW4gbGVmdCwgcmlnaHQsIHRvcCBhbmQgYm90dG9tIGRpcmVjdGlvbgor CSAqIGZvciBhbGwgY29sb3IgY29tcG9uZW50cy4KKwkgKi8KKwlpbnQzMl90IG51bV9leHRfcHhs c19scltEUFVfTUFYX1BMQU5FU107CisJaW50MzJfdCBudW1fZXh0X3B4bHNfdGJbRFBVX01BWF9Q TEFORVNdOworCisJLyoKKwkgKiBOdW1iZXIgb2YgcGl4ZWxzIG5lZWRzIHRvIGJlIG92ZXJmZXRj aGVkIGluIGxlZnQsIHJpZ2h0LCB0b3AKKwkgKiBhbmQgYm90dG9tIGRpcmVjdGlvbnMgZnJvbSBz b3VyY2UgaW1hZ2UgZm9yIHNjYWxpbmcuCisJICovCisJaW50MzJfdCBsZWZ0X2Z0Y2hbRFBVX01B WF9QTEFORVNdOworCWludDMyX3QgcmlnaHRfZnRjaFtEUFVfTUFYX1BMQU5FU107CisJaW50MzJf dCB0b3BfZnRjaFtEUFVfTUFYX1BMQU5FU107CisJaW50MzJfdCBidG1fZnRjaFtEUFVfTUFYX1BM QU5FU107CisJLyoKKwkgKiBOdW1iZXIgb2YgcGl4ZWxzIG5lZWRzIHRvIGJlIHJlcGVhdGVkIGlu IGxlZnQsIHJpZ2h0LCB0b3AgYW5kCisJICogYm90dG9tIGRpcmVjdGlvbnMgZm9yIHNjYWxpbmcu CisJICovCisJaW50MzJfdCBsZWZ0X3JwdFtEUFVfTUFYX1BMQU5FU107CisJaW50MzJfdCByaWdo dF9ycHRbRFBVX01BWF9QTEFORVNdOworCWludDMyX3QgdG9wX3JwdFtEUFVfTUFYX1BMQU5FU107 CisJaW50MzJfdCBidG1fcnB0W0RQVV9NQVhfUExBTkVTXTsKKworfTsKKworLyoqCisgKiBzdHJ1 Y3QgZHB1X2RybV9kZV92MSAtIHZlcnNpb24gMSBvZiBkZXRhaWwgZW5oYW5jZXIgc3RydWN0dXJl CisgKiBAZW5hYmxlOiAgICAgICAgIEVuYWJsZXMvZGlzYWJsZXMgZGV0YWlsIGVuaGFuY2VyCisg KiBAc2hhcnBlbl9sZXZlbDE6IFNoYXJwZW5pbmcgc3RyZW5ndGggZm9yIG5vaXNlCisgKiBAc2hh cnBlbl9sZXZlbDI6IFNoYXJwZW5pbmcgc3RyZW5ndGggZm9yIGNvbnRleHQKKyAqIEBjbGlwOiAg ICAgICAgICAgQ2xpcCBjb2VmZmljaWVudAorICogQGxpbWl0OiAgICAgICAgICBEZXRhaWwgZW5o YW5jZXIgbGltaXQgZmFjdG9yCisgKiBAdGhyX3F1aWV0OiAgICAgIFF1aXRlIHpvbmUgdGhyZXNo b2xkCisgKiBAdGhyX2RpZW91dDogICAgIERpZS1vdXQgem9uZSB0aHJlc2hvbGQKKyAqIEB0aHJf bG93OiAgICAgICAgTGluZWFyIHpvbmUgbGVmdCB0aHJlc2hvbGQKKyAqIEB0aHJfaGlnaDogICAg ICAgTGluZWFyIHpvbmUgcmlnaHQgdGhyZXNob2xkCisgKiBAcHJlY19zaGlmdDogICAgIERldGFp bCBlbmhhbmNlciBwcmVjaXNpb24KKyAqIEBhZGp1c3RfYTogICAgICAgTWFwcGluZyBjdXJ2ZXMg QSBjb2VmZmljaWVudHMKKyAqIEBhZGp1c3RfYjogICAgICAgTWFwcGluZyBjdXJ2ZXMgQiBjb2Vm ZmljaWVudHMKKyAqIEBhZGp1c3RfYzogICAgICAgTWFwcGluZyBjdXJ2ZXMgQyBjb2VmZmljaWVu dHMKKyAqLworc3RydWN0IGRwdV9kcm1fZGVfdjEgeworCXVpbnQzMl90IGVuYWJsZTsKKwlpbnQx Nl90IHNoYXJwZW5fbGV2ZWwxOworCWludDE2X3Qgc2hhcnBlbl9sZXZlbDI7CisJdWludDE2X3Qg Y2xpcDsKKwl1aW50MTZfdCBsaW1pdDsKKwl1aW50MTZfdCB0aHJfcXVpZXQ7CisJdWludDE2X3Qg dGhyX2RpZW91dDsKKwl1aW50MTZfdCB0aHJfbG93OworCXVpbnQxNl90IHRocl9oaWdoOworCXVp bnQxNl90IHByZWNfc2hpZnQ7CisJaW50MTZfdCBhZGp1c3RfYVtEUFVfTUFYX0RFX0NVUlZFU107 CisJaW50MTZfdCBhZGp1c3RfYltEUFVfTUFYX0RFX0NVUlZFU107CisJaW50MTZfdCBhZGp1c3Rf Y1tEUFVfTUFYX0RFX0NVUlZFU107Cit9OworCisvKioKKyAqIHN0cnVjdCBkcHVfZHJtX3NjYWxl cl92MiAtIHZlcnNpb24gMiBvZiBzdHJ1Y3QgZHB1X2RybV9zY2FsZXIKKyAqIEBlbmFibGU6ICAg ICAgICAgICAgU2NhbGVyIGVuYWJsZQorICogQGRpcl9lbjogICAgICAgICAgICBEZXRhaWwgZW5o YW5jZXIgZW5hYmxlCisgKiBAcGU6ICAgICAgICAgICAgICAgIFBpeGVsIGV4dGVuc2lvbiBzZXR0 aW5ncworICogQGhvcnpfZGVjaW1hdGU6ICAgICBIb3Jpem9udGFsIGRlY2ltYXRpb24gZmFjdG9y CisgKiBAdmVydF9kZWNpbWF0ZTogICAgIFZlcnRpY2FsIGRlY2ltYXRpb24gZmFjdG9yCisgKiBA aW5pdF9waGFzZV94OiAgICAgIEluaXRpYWwgc2NhbGVyIHBoYXNlIHZhbHVlcyBmb3IgeAorICog QHBoYXNlX3N0ZXBfeDogICAgICBQaGFzZSBzdGVwIHZhbHVlcyBmb3IgeAorICogQGluaXRfcGhh c2VfeTogICAgICBJbml0aWFsIHNjYWxlciBwaGFzZSB2YWx1ZXMgZm9yIHkKKyAqIEBwaGFzZV9z dGVwX3k6ICAgICAgUGhhc2Ugc3RlcCB2YWx1ZXMgZm9yIHkKKyAqIEBwcmVsb2FkX3g6ICAgICAg ICAgSG9yaXpvbnRhbCBwcmVsb2FkIHZhbHVlCisgKiBAcHJlbG9hZF95OiAgICAgICAgIFZlcnRp Y2FsIHByZWxvYWQgdmFsdWUKKyAqIEBzcmNfd2lkdGg6ICAgICAgICAgU291cmNlIHdpZHRoCisg KiBAc3JjX2hlaWdodDogICAgICAgIFNvdXJjZSBoZWlnaHQKKyAqIEBkc3Rfd2lkdGg6ICAgICAg ICAgRGVzdGluYXRpb24gd2lkdGgKKyAqIEBkc3RfaGVpZ2h0OiAgICAgICAgRGVzdGluYXRpb24g aGVpZ2h0CisgKiBAeV9yZ2JfZmlsdGVyX2NmZzogIFkvUkdCIHBsYW5lIGZpbHRlciBjb25maWd1 cmF0aW9uCisgKiBAdXZfZmlsdGVyX2NmZzogICAgIFVWIHBsYW5lIGZpbHRlciBjb25maWd1cmF0 aW9uCisgKiBAYWxwaGFfZmlsdGVyX2NmZzogIEFscGhhIGZpbHRlciBjb25maWd1cmF0aW9uCisg KiBAYmxlbmRfY2ZnOiAgICAgICAgIFNlbGVjdGlvbiBvZiBibGVuZCBjb2VmZmljaWVudHMKKyAq IEBsdXRfZmxhZzogICAgICAgICAgTFVUIGNvbmZpZ3VyYXRpb24gZmxhZ3MKKyAqIEBkaXJfbHV0 X2lkeDogICAgICAgMmQgNHg0IExVVCBpbmRleAorICogQHlfcmdiX2Npcl9sdXRfaWR4OiBZL1JH QiBjaXJjdWxhciBMVVQgaW5kZXgKKyAqIEB1dl9jaXJfbHV0X2lkeDogICAgVVYgY2lyY3VsYXIg TFVUIGluZGV4CisgKiBAeV9yZ2Jfc2VwX2x1dF9pZHg6IFkvUkdCIHNlcGFyYWJsZSBMVVQgaW5k ZXgKKyAqIEB1dl9zZXBfbHV0X2lkeDogICAgVVYgc2VwYXJhYmxlIExVVCBpbmRleAorICogQGRl OiAgICAgICAgICAgICAgICBEZXRhaWwgZW5oYW5jZXIgc2V0dGluZ3MKKyAqLworc3RydWN0IGRw dV9kcm1fc2NhbGVyX3YyIHsKKwkvKgorCSAqIEdlbmVyYWwgZGVmaW5pdGlvbnMKKwkgKi8KKwl1 aW50MzJfdCBlbmFibGU7CisJdWludDMyX3QgZGlyX2VuOworCisJLyoKKwkgKiBQaXggZXh0IHNl dHRpbmdzCisJICovCisJc3RydWN0IGRwdV9kcm1fcGl4X2V4dF92MSBwZTsKKworCS8qCisJICog RGVjaW1hdGlvbiBzZXR0aW5ncworCSAqLworCXVpbnQzMl90IGhvcnpfZGVjaW1hdGU7CisJdWlu dDMyX3QgdmVydF9kZWNpbWF0ZTsKKworCS8qCisJICogUGhhc2Ugc2V0dGluZ3MKKwkgKi8KKwlp bnQzMl90IGluaXRfcGhhc2VfeFtEUFVfTUFYX1BMQU5FU107CisJaW50MzJfdCBwaGFzZV9zdGVw X3hbRFBVX01BWF9QTEFORVNdOworCWludDMyX3QgaW5pdF9waGFzZV95W0RQVV9NQVhfUExBTkVT XTsKKwlpbnQzMl90IHBoYXNlX3N0ZXBfeVtEUFVfTUFYX1BMQU5FU107CisKKwl1aW50MzJfdCBw cmVsb2FkX3hbRFBVX01BWF9QTEFORVNdOworCXVpbnQzMl90IHByZWxvYWRfeVtEUFVfTUFYX1BM QU5FU107CisJdWludDMyX3Qgc3JjX3dpZHRoW0RQVV9NQVhfUExBTkVTXTsKKwl1aW50MzJfdCBz cmNfaGVpZ2h0W0RQVV9NQVhfUExBTkVTXTsKKworCXVpbnQzMl90IGRzdF93aWR0aDsKKwl1aW50 MzJfdCBkc3RfaGVpZ2h0OworCisJdWludDMyX3QgeV9yZ2JfZmlsdGVyX2NmZzsKKwl1aW50MzJf dCB1dl9maWx0ZXJfY2ZnOworCXVpbnQzMl90IGFscGhhX2ZpbHRlcl9jZmc7CisJdWludDMyX3Qg YmxlbmRfY2ZnOworCisJdWludDMyX3QgbHV0X2ZsYWc7CisJdWludDMyX3QgZGlyX2x1dF9pZHg7 CisKKwkvKiBmb3IgWShSR0IpIGFuZCBVViBwbGFuZXMqLworCXVpbnQzMl90IHlfcmdiX2Npcl9s dXRfaWR4OworCXVpbnQzMl90IHV2X2Npcl9sdXRfaWR4OworCXVpbnQzMl90IHlfcmdiX3NlcF9s dXRfaWR4OworCXVpbnQzMl90IHV2X3NlcF9sdXRfaWR4OworCisJLyoKKwkgKiBEZXRhaWwgZW5o YW5jZXIgc2V0dGluZ3MKKwkgKi8KKwlzdHJ1Y3QgZHB1X2RybV9kZV92MSBkZTsKK307CisKKwor dTMyICpkcHVfaHdfdXRpbF9nZXRfbG9nX21hc2tfcHRyKHZvaWQpOworCit2b2lkIGRwdV9yZWdf d3JpdGUoc3RydWN0IGRwdV9od19ibGtfcmVnX21hcCAqYywKKwkJdTMyIHJlZ19vZmYsCisJCXUz MiB2YWwsCisJCWNvbnN0IGNoYXIgKm5hbWUpOworaW50IGRwdV9yZWdfcmVhZChzdHJ1Y3QgZHB1 X2h3X2Jsa19yZWdfbWFwICpjLCB1MzIgcmVnX29mZik7CisKKyNkZWZpbmUgRFBVX1JFR19XUklU RShjLCBvZmYsIHZhbCkgZHB1X3JlZ193cml0ZShjLCBvZmYsIHZhbCwgI29mZikKKyNkZWZpbmUg RFBVX1JFR19SRUFEKGMsIG9mZikgZHB1X3JlZ19yZWFkKGMsIG9mZikKKworI2RlZmluZSBNSVNS X0ZSQU1FX0NPVU5UX01BU0sJCTB4RkYKKyNkZWZpbmUgTUlTUl9DVFJMX0VOQUJMRQkJQklUKDgp CisjZGVmaW5lIE1JU1JfQ1RSTF9TVEFUVVMJCUJJVCg5KQorI2RlZmluZSBNSVNSX0NUUkxfU1RB VFVTX0NMRUFSCQlCSVQoMTApCisjZGVmaW5lIElOVEZfTUlTUl9DVFJMX0ZSRUVfUlVOX01BU0sJ QklUKDMxKQorCit2b2lkICpkcHVfaHdfdXRpbF9nZXRfZGlyKHZvaWQpOworCit2b2lkIGRwdV9z ZXRfc2NhbGVyX3YyKHN0cnVjdCBkcHVfaHdfc2NhbGVyM19jZmcgKmNmZywKKwkJY29uc3Qgc3Ry dWN0IGRwdV9kcm1fc2NhbGVyX3YyICpzY2FsZV92Mik7CisKK3ZvaWQgZHB1X2h3X3NldHVwX3Nj YWxlcjMoc3RydWN0IGRwdV9od19ibGtfcmVnX21hcCAqYywKKwkJc3RydWN0IGRwdV9od19zY2Fs ZXIzX2NmZyAqc2NhbGVyM19jZmcsCisJCXUzMiBzY2FsZXJfb2Zmc2V0LCB1MzIgc2NhbGVyX3Zl cnNpb24sCisJCWNvbnN0IHN0cnVjdCBkcHVfZm9ybWF0ICpmb3JtYXQpOworCit1MzIgZHB1X2h3 X2dldF9zY2FsZXIzX3ZlcihzdHJ1Y3QgZHB1X2h3X2Jsa19yZWdfbWFwICpjLAorCQl1MzIgc2Nh bGVyX29mZnNldCk7CisKK3ZvaWQgZHB1X2h3X2NzY19zZXR1cChzdHJ1Y3QgZHB1X2h3X2Jsa19y ZWdfbWFwICAqYywKKwkJdTMyIGNzY19yZWdfb2ZmLAorCQlzdHJ1Y3QgZHB1X2NzY19jZmcgKmRh dGEsIGJvb2wgY3NjMTApOworCit1aW50MzJfdCBkcHVfY29weV9mb3JtYXRzKAorCQlzdHJ1Y3Qg ZHB1X2Zvcm1hdF9leHRlbmRlZCAqZHN0X2xpc3QsCisJCXVpbnQzMl90IGRzdF9saXN0X3NpemUs CisJCXVpbnQzMl90IGRzdF9saXN0X3BvcywKKwkJY29uc3Qgc3RydWN0IGRwdV9mb3JtYXRfZXh0 ZW5kZWQgKnNyY19saXN0LAorCQl1aW50MzJfdCBzcmNfbGlzdF9zaXplKTsKKworI2VuZGlmIC8q IF9EUFVfSFdfVVRJTF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfaHdfdmJpZi5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3 X3ZiaWYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmQ0MzkwNTUy NWY5MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9od192YmlmLmMKQEAgLTAsMCArMSwyNzUgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNS0yMDE4 LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSB2ZXJzaW9uIDIgYW5kCisgKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor ICovCisKKyNpbmNsdWRlICJkcHVfaHdpby5oIgorI2luY2x1ZGUgImRwdV9od19jYXRhbG9nLmgi CisjaW5jbHVkZSAiZHB1X2h3X3ZiaWYuaCIKKyNpbmNsdWRlICJkcHVfZGJnLmgiCisKKyNkZWZp bmUgVkJJRl9WRVJTSU9OCQkJMHgwMDAwCisjZGVmaW5lIFZCSUZfQ0xLX0ZPUkNFX0NUUkwwCQkw eDAwMDgKKyNkZWZpbmUgVkJJRl9DTEtfRk9SQ0VfQ1RSTDEJCTB4MDAwQworI2RlZmluZSBWQklG X1FPU19SRU1BUF8wMAkJMHgwMDIwCisjZGVmaW5lIFZCSUZfUU9TX1JFTUFQXzAxCQkweDAwMjQK KyNkZWZpbmUgVkJJRl9RT1NfUkVNQVBfMTAJCTB4MDAyOAorI2RlZmluZSBWQklGX1FPU19SRU1B UF8xMQkJMHgwMDJDCisjZGVmaW5lIFZCSUZfV1JJVEVfR0FUSEVSX0VOCQkweDAwQUMKKyNkZWZp bmUgVkJJRl9JTl9SRF9MSU1fQ09ORjAJCTB4MDBCMAorI2RlZmluZSBWQklGX0lOX1JEX0xJTV9D T05GMQkJMHgwMEI0CisjZGVmaW5lIFZCSUZfSU5fUkRfTElNX0NPTkYyCQkweDAwQjgKKyNkZWZp bmUgVkJJRl9JTl9XUl9MSU1fQ09ORjAJCTB4MDBDMAorI2RlZmluZSBWQklGX0lOX1dSX0xJTV9D T05GMQkJMHgwMEM0CisjZGVmaW5lIFZCSUZfSU5fV1JfTElNX0NPTkYyCQkweDAwQzgKKyNkZWZp bmUgVkJJRl9PVVRfUkRfTElNX0NPTkYwCQkweDAwRDAKKyNkZWZpbmUgVkJJRl9PVVRfV1JfTElN X0NPTkYwCQkweDAwRDQKKyNkZWZpbmUgVkJJRl9PVVRfQVhJX0FNRU1UWVBFX0NPTkYwCTB4MDE2 MAorI2RlZmluZSBWQklGX09VVF9BWElfQU1FTVRZUEVfQ09ORjEJMHgwMTY0CisjZGVmaW5lIFZC SUZfWElOX1BORF9FUlIJCTB4MDE5MAorI2RlZmluZSBWQklGX1hJTl9TUkNfRVJSCQkweDAxOTQK KyNkZWZpbmUgVkJJRl9YSU5fQ0xSX0VSUgkJMHgwMTlDCisjZGVmaW5lIFZCSUZfWElOX0hBTFRf Q1RSTDAJCTB4MDIwMAorI2RlZmluZSBWQklGX1hJTl9IQUxUX0NUUkwxCQkweDAyMDQKKyNkZWZp bmUgVkJJRl9YSU5MX1FPU19SUF9SRU1BUF8wMDAJMHgwNTUwCisjZGVmaW5lIFZCSUZfWElOTF9R T1NfTFZMX1JFTUFQXzAwMAkweDA1OTAKKworc3RhdGljIHZvaWQgZHB1X2h3X2NsZWFyX2Vycm9y cyhzdHJ1Y3QgZHB1X2h3X3ZiaWYgKnZiaWYsCisJCXUzMiAqcG5kX2Vycm9ycywgdTMyICpzcmNf ZXJyb3JzKQoreworCXN0cnVjdCBkcHVfaHdfYmxrX3JlZ19tYXAgKmM7CisJdTMyIHBuZCwgc3Jj OworCisJaWYgKCF2YmlmKQorCQlyZXR1cm47CisJYyA9ICZ2YmlmLT5odzsKKwlwbmQgPSBEUFVf UkVHX1JFQUQoYywgVkJJRl9YSU5fUE5EX0VSUik7CisJc3JjID0gRFBVX1JFR19SRUFEKGMsIFZC SUZfWElOX1NSQ19FUlIpOworCisJaWYgKHBuZF9lcnJvcnMpCisJCSpwbmRfZXJyb3JzID0gcG5k OworCWlmIChzcmNfZXJyb3JzKQorCQkqc3JjX2Vycm9ycyA9IHNyYzsKKworCURQVV9SRUdfV1JJ VEUoYywgVkJJRl9YSU5fQ0xSX0VSUiwgcG5kIHwgc3JjKTsKK30KKworc3RhdGljIHZvaWQgZHB1 X2h3X3NldF9tZW1fdHlwZShzdHJ1Y3QgZHB1X2h3X3ZiaWYgKnZiaWYsCisJCXUzMiB4aW5faWQs IHUzMiB2YWx1ZSkKK3sKKwlzdHJ1Y3QgZHB1X2h3X2Jsa19yZWdfbWFwICpjOworCXUzMiByZWdf b2ZmOworCXUzMiBiaXRfb2ZmOworCXUzMiByZWdfdmFsOworCisJLyoKKwkgKiBBc3N1bWUgNCBi aXRzIHBlciBiaXQgZmllbGQsIDggZmllbGRzIHBlciAzMi1iaXQgcmVnaXN0ZXIgc28KKwkgKiAx NiBiaXQgZmllbGRzIG1heGltdW0gYWNyb3NzIHR3byByZWdpc3RlcnMKKwkgKi8KKwlpZiAoIXZi aWYgfHwgeGluX2lkID49IE1BWF9YSU5fQ09VTlQgfHwgeGluX2lkID49IDE2KQorCQlyZXR1cm47 CisKKwljID0gJnZiaWYtPmh3OworCisJaWYgKHhpbl9pZCA+PSA4KSB7CisJCXhpbl9pZCAtPSA4 OworCQlyZWdfb2ZmID0gVkJJRl9PVVRfQVhJX0FNRU1UWVBFX0NPTkYxOworCX0gZWxzZSB7CisJ CXJlZ19vZmYgPSBWQklGX09VVF9BWElfQU1FTVRZUEVfQ09ORjA7CisJfQorCWJpdF9vZmYgPSAo eGluX2lkICYgMHg3KSAqIDQ7CisJcmVnX3ZhbCA9IERQVV9SRUdfUkVBRChjLCByZWdfb2ZmKTsK KwlyZWdfdmFsICY9IH4oMHg3IDw8IGJpdF9vZmYpOworCXJlZ192YWwgfD0gKHZhbHVlICYgMHg3 KSA8PCBiaXRfb2ZmOworCURQVV9SRUdfV1JJVEUoYywgcmVnX29mZiwgcmVnX3ZhbCk7Cit9CisK K3N0YXRpYyB2b2lkIGRwdV9od19zZXRfbGltaXRfY29uZihzdHJ1Y3QgZHB1X2h3X3ZiaWYgKnZi aWYsCisJCXUzMiB4aW5faWQsIGJvb2wgcmQsIHUzMiBsaW1pdCkKK3sKKwlzdHJ1Y3QgZHB1X2h3 X2Jsa19yZWdfbWFwICpjID0gJnZiaWYtPmh3OworCXUzMiByZWdfdmFsOworCXUzMiByZWdfb2Zm OworCXUzMiBiaXRfb2ZmOworCisJaWYgKHJkKQorCQlyZWdfb2ZmID0gVkJJRl9JTl9SRF9MSU1f Q09ORjA7CisJZWxzZQorCQlyZWdfb2ZmID0gVkJJRl9JTl9XUl9MSU1fQ09ORjA7CisKKwlyZWdf b2ZmICs9ICh4aW5faWQgLyA0KSAqIDQ7CisJYml0X29mZiA9ICh4aW5faWQgJSA0KSAqIDg7CisJ cmVnX3ZhbCA9IERQVV9SRUdfUkVBRChjLCByZWdfb2ZmKTsKKwlyZWdfdmFsICY9IH4oMHhGRiA8 PCBiaXRfb2ZmKTsKKwlyZWdfdmFsIHw9IChsaW1pdCkgPDwgYml0X29mZjsKKwlEUFVfUkVHX1dS SVRFKGMsIHJlZ19vZmYsIHJlZ192YWwpOworfQorCitzdGF0aWMgdTMyIGRwdV9od19nZXRfbGlt aXRfY29uZihzdHJ1Y3QgZHB1X2h3X3ZiaWYgKnZiaWYsCisJCXUzMiB4aW5faWQsIGJvb2wgcmQp Cit7CisJc3RydWN0IGRwdV9od19ibGtfcmVnX21hcCAqYyA9ICZ2YmlmLT5odzsKKwl1MzIgcmVn X3ZhbDsKKwl1MzIgcmVnX29mZjsKKwl1MzIgYml0X29mZjsKKwl1MzIgbGltaXQ7CisKKwlpZiAo cmQpCisJCXJlZ19vZmYgPSBWQklGX0lOX1JEX0xJTV9DT05GMDsKKwllbHNlCisJCXJlZ19vZmYg PSBWQklGX0lOX1dSX0xJTV9DT05GMDsKKworCXJlZ19vZmYgKz0gKHhpbl9pZCAvIDQpICogNDsK KwliaXRfb2ZmID0gKHhpbl9pZCAlIDQpICogODsKKwlyZWdfdmFsID0gRFBVX1JFR19SRUFEKGMs IHJlZ19vZmYpOworCWxpbWl0ID0gKHJlZ192YWwgPj4gYml0X29mZikgJiAweEZGOworCisJcmV0 dXJuIGxpbWl0OworfQorCitzdGF0aWMgdm9pZCBkcHVfaHdfc2V0X2hhbHRfY3RybChzdHJ1Y3Qg ZHB1X2h3X3ZiaWYgKnZiaWYsCisJCXUzMiB4aW5faWQsIGJvb2wgZW5hYmxlKQoreworCXN0cnVj dCBkcHVfaHdfYmxrX3JlZ19tYXAgKmMgPSAmdmJpZi0+aHc7CisJdTMyIHJlZ192YWw7CisKKwly ZWdfdmFsID0gRFBVX1JFR19SRUFEKGMsIFZCSUZfWElOX0hBTFRfQ1RSTDApOworCisJaWYgKGVu YWJsZSkKKwkJcmVnX3ZhbCB8PSBCSVQoeGluX2lkKTsKKwllbHNlCisJCXJlZ192YWwgJj0gfkJJ VCh4aW5faWQpOworCisJRFBVX1JFR19XUklURShjLCBWQklGX1hJTl9IQUxUX0NUUkwwLCByZWdf dmFsKTsKK30KKworc3RhdGljIGJvb2wgZHB1X2h3X2dldF9oYWx0X2N0cmwoc3RydWN0IGRwdV9o d192YmlmICp2YmlmLAorCQl1MzIgeGluX2lkKQoreworCXN0cnVjdCBkcHVfaHdfYmxrX3JlZ19t YXAgKmMgPSAmdmJpZi0+aHc7CisJdTMyIHJlZ192YWw7CisKKwlyZWdfdmFsID0gRFBVX1JFR19S RUFEKGMsIFZCSUZfWElOX0hBTFRfQ1RSTDEpOworCisJcmV0dXJuIChyZWdfdmFsICYgQklUKHhp bl9pZCkpID8gdHJ1ZSA6IGZhbHNlOworfQorCitzdGF0aWMgdm9pZCBkcHVfaHdfc2V0X3Fvc19y ZW1hcChzdHJ1Y3QgZHB1X2h3X3ZiaWYgKnZiaWYsCisJCXUzMiB4aW5faWQsIHUzMiBsZXZlbCwg dTMyIHJlbWFwX2xldmVsKQoreworCXN0cnVjdCBkcHVfaHdfYmxrX3JlZ19tYXAgKmM7CisJdTMy IHJlZ192YWwsIHJlZ192YWxfbHZsLCBtYXNrLCByZWdfaGlnaCwgcmVnX3NoaWZ0OworCisJaWYg KCF2YmlmKQorCQlyZXR1cm47CisKKwljID0gJnZiaWYtPmh3OworCisJcmVnX2hpZ2ggPSAoKHhp bl9pZCAmIDB4OCkgPj4gMykgKiA0ICsgKGxldmVsICogOCk7CisJcmVnX3NoaWZ0ID0gKHhpbl9p ZCAmIDB4NykgKiA0OworCisJcmVnX3ZhbCA9IERQVV9SRUdfUkVBRChjLCBWQklGX1hJTkxfUU9T X1JQX1JFTUFQXzAwMCArIHJlZ19oaWdoKTsKKwlyZWdfdmFsX2x2bCA9IERQVV9SRUdfUkVBRChj LCBWQklGX1hJTkxfUU9TX0xWTF9SRU1BUF8wMDAgKyByZWdfaGlnaCk7CisKKwltYXNrID0gMHg3 IDw8IHJlZ19zaGlmdDsKKworCXJlZ192YWwgJj0gfm1hc2s7CisJcmVnX3ZhbCB8PSAocmVtYXBf bGV2ZWwgPDwgcmVnX3NoaWZ0KSAmIG1hc2s7CisKKwlyZWdfdmFsX2x2bCAmPSB+bWFzazsKKwly ZWdfdmFsX2x2bCB8PSAocmVtYXBfbGV2ZWwgPDwgcmVnX3NoaWZ0KSAmIG1hc2s7CisKKwlEUFVf UkVHX1dSSVRFKGMsIFZCSUZfWElOTF9RT1NfUlBfUkVNQVBfMDAwICsgcmVnX2hpZ2gsIHJlZ192 YWwpOworCURQVV9SRUdfV1JJVEUoYywgVkJJRl9YSU5MX1FPU19MVkxfUkVNQVBfMDAwICsgcmVn X2hpZ2gsIHJlZ192YWxfbHZsKTsKK30KKworc3RhdGljIHZvaWQgZHB1X2h3X3NldF93cml0ZV9n YXRoZXJfZW4oc3RydWN0IGRwdV9od192YmlmICp2YmlmLCB1MzIgeGluX2lkKQoreworCXN0cnVj dCBkcHVfaHdfYmxrX3JlZ19tYXAgKmM7CisJdTMyIHJlZ192YWw7CisKKwlpZiAoIXZiaWYgfHwg eGluX2lkID49IE1BWF9YSU5fQ09VTlQpCisJCXJldHVybjsKKworCWMgPSAmdmJpZi0+aHc7CisK KwlyZWdfdmFsID0gRFBVX1JFR19SRUFEKGMsIFZCSUZfV1JJVEVfR0FUSEVSX0VOKTsKKwlyZWdf dmFsIHw9IEJJVCh4aW5faWQpOworCURQVV9SRUdfV1JJVEUoYywgVkJJRl9XUklURV9HQVRIRVJf RU4sIHJlZ192YWwpOworfQorCitzdGF0aWMgdm9pZCBfc2V0dXBfdmJpZl9vcHMoc3RydWN0IGRw dV9od192YmlmX29wcyAqb3BzLAorCQl1bnNpZ25lZCBsb25nIGNhcCkKK3sKKwlvcHMtPnNldF9s aW1pdF9jb25mID0gZHB1X2h3X3NldF9saW1pdF9jb25mOworCW9wcy0+Z2V0X2xpbWl0X2NvbmYg PSBkcHVfaHdfZ2V0X2xpbWl0X2NvbmY7CisJb3BzLT5zZXRfaGFsdF9jdHJsID0gZHB1X2h3X3Nl dF9oYWx0X2N0cmw7CisJb3BzLT5nZXRfaGFsdF9jdHJsID0gZHB1X2h3X2dldF9oYWx0X2N0cmw7 CisJaWYgKHRlc3RfYml0KERQVV9WQklGX1FPU19SRU1BUCwgJmNhcCkpCisJCW9wcy0+c2V0X3Fv c19yZW1hcCA9IGRwdV9od19zZXRfcW9zX3JlbWFwOworCW9wcy0+c2V0X21lbV90eXBlID0gZHB1 X2h3X3NldF9tZW1fdHlwZTsKKwlvcHMtPmNsZWFyX2Vycm9ycyA9IGRwdV9od19jbGVhcl9lcnJv cnM7CisJb3BzLT5zZXRfd3JpdGVfZ2F0aGVyX2VuID0gZHB1X2h3X3NldF93cml0ZV9nYXRoZXJf ZW47Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHB1X3ZiaWZfY2ZnICpfdG9wX29mZnNldChl bnVtIGRwdV92YmlmIHZiaWYsCisJCWNvbnN0IHN0cnVjdCBkcHVfbWRzc19jZmcgKm0sCisJCXZv aWQgX19pb21lbSAqYWRkciwKKwkJc3RydWN0IGRwdV9od19ibGtfcmVnX21hcCAqYikKK3sKKwlp bnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBtLT52YmlmX2NvdW50OyBpKyspIHsKKwkJaWYgKHZi aWYgPT0gbS0+dmJpZltpXS5pZCkgeworCQkJYi0+YmFzZV9vZmYgPSBhZGRyOworCQkJYi0+Ymxr X29mZiA9IG0tPnZiaWZbaV0uYmFzZTsKKwkJCWItPmxlbmd0aCA9IG0tPnZiaWZbaV0ubGVuOwor CQkJYi0+aHd2ZXJzaW9uID0gbS0+aHd2ZXJzaW9uOworCQkJYi0+bG9nX21hc2sgPSBEUFVfREJH X01BU0tfVkJJRjsKKwkJCXJldHVybiAmbS0+dmJpZltpXTsKKwkJfQorCX0KKworCXJldHVybiBF UlJfUFRSKC1FSU5WQUwpOworfQorCitzdHJ1Y3QgZHB1X2h3X3ZiaWYgKmRwdV9od192YmlmX2lu aXQoZW51bSBkcHVfdmJpZiBpZHgsCisJCXZvaWQgX19pb21lbSAqYWRkciwKKwkJY29uc3Qgc3Ry dWN0IGRwdV9tZHNzX2NmZyAqbSkKK3sKKwlzdHJ1Y3QgZHB1X2h3X3ZiaWYgKmM7CisJY29uc3Qg c3RydWN0IGRwdV92YmlmX2NmZyAqY2ZnOworCisJYyA9IGt6YWxsb2Moc2l6ZW9mKCpjKSwgR0ZQ X0tFUk5FTCk7CisJaWYgKCFjKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWNmZyA9 IF90b3Bfb2Zmc2V0KGlkeCwgbSwgYWRkciwgJmMtPmh3KTsKKwlpZiAoSVNfRVJSX09SX05VTEwo Y2ZnKSkgeworCQlrZnJlZShjKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQorCisJ LyoKKwkgKiBBc3NpZ24gb3BzCisJICovCisJYy0+aWR4ID0gaWR4OworCWMtPmNhcCA9IGNmZzsK Kwlfc2V0dXBfdmJpZl9vcHMoJmMtPm9wcywgYy0+Y2FwLT5mZWF0dXJlcyk7CisKKwkvKiBubyBu ZWVkIHRvIHJlZ2lzdGVyIHN1Yi1yYW5nZSBpbiBkcHUgZGJnLCBkdW1wIGVudGlyZSB2YmlmIGlv IGJhc2UgKi8KKworCXJldHVybiBjOworfQorCit2b2lkIGRwdV9od192YmlmX2Rlc3Ryb3koc3Ry dWN0IGRwdV9od192YmlmICp2YmlmKQoreworCWtmcmVlKHZiaWYpOworfQpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3ZiaWYuaCBiL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od192YmlmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAwLi40NzFmZjY3M2MwNDUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfdmJpZi5oCkBAIC0wLDAgKzEsMTI4IEBACisv KiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAorICogb25seSB2 ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisg KgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9EUFVfSFdfVkJJRl9ICisj ZGVmaW5lIF9EUFVfSFdfVkJJRl9ICisKKyNpbmNsdWRlICJkcHVfaHdfY2F0YWxvZy5oIgorI2lu Y2x1ZGUgImRwdV9od19tZHNzLmgiCisjaW5jbHVkZSAiZHB1X2h3X3V0aWwuaCIKKworc3RydWN0 IGRwdV9od192YmlmOworCisvKioKKyAqIHN0cnVjdCBkcHVfaHdfdmJpZl9vcHMgOiBJbnRlcmZh Y2UgdG8gdGhlIFZCSUYgaGFyZHdhcmUgZHJpdmVyIGZ1bmN0aW9ucworICogIEFzc3VtcHRpb24g aXMgdGhlc2UgZnVuY3Rpb25zIHdpbGwgYmUgY2FsbGVkIGFmdGVyIGNsb2NrcyBhcmUgZW5hYmxl ZAorICovCitzdHJ1Y3QgZHB1X2h3X3ZiaWZfb3BzIHsKKwkvKioKKwkgKiBzZXRfbGltaXRfY29u ZiAtIHNldCB0cmFuc2FjdGlvbiBsaW1pdCBjb25maWcKKwkgKiBAdmJpZjogdmJpZiBjb250ZXh0 IGRyaXZlcgorCSAqIEB4aW5faWQ6IGNsaWVudCBpbnRlcmZhY2UgaWRlbnRpZmllcgorCSAqIEBy ZDogdHJ1ZSBmb3IgcmVhZCBsaW1pdDsgZmFsc2UgZm9yIHdyaXRlIGxpbWl0CisJICogQGxpbWl0 OiBvdXRzdGFuZGluZyB0cmFuc2FjdGlvbiBsaW1pdAorCSAqLworCXZvaWQgKCpzZXRfbGltaXRf Y29uZikoc3RydWN0IGRwdV9od192YmlmICp2YmlmLAorCQkJdTMyIHhpbl9pZCwgYm9vbCByZCwg dTMyIGxpbWl0KTsKKworCS8qKgorCSAqIGdldF9saW1pdF9jb25mIC0gZ2V0IHRyYW5zYWN0aW9u IGxpbWl0IGNvbmZpZworCSAqIEB2YmlmOiB2YmlmIGNvbnRleHQgZHJpdmVyCisJICogQHhpbl9p ZDogY2xpZW50IGludGVyZmFjZSBpZGVudGlmaWVyCisJICogQHJkOiB0cnVlIGZvciByZWFkIGxp bWl0OyBmYWxzZSBmb3Igd3JpdGUgbGltaXQKKwkgKiBAcmV0dXJuOiBvdXRzdGFuZGluZyB0cmFu c2FjdGlvbiBsaW1pdAorCSAqLworCXUzMiAoKmdldF9saW1pdF9jb25mKShzdHJ1Y3QgZHB1X2h3 X3ZiaWYgKnZiaWYsCisJCQl1MzIgeGluX2lkLCBib29sIHJkKTsKKworCS8qKgorCSAqIHNldF9o YWx0X2N0cmwgLSBzZXQgaGFsdCBjb250cm9sCisJICogQHZiaWY6IHZiaWYgY29udGV4dCBkcml2 ZXIKKwkgKiBAeGluX2lkOiBjbGllbnQgaW50ZXJmYWNlIGlkZW50aWZpZXIKKwkgKiBAZW5hYmxl OiBoYWx0IGNvbnRyb2wgZW5hYmxlCisJICovCisJdm9pZCAoKnNldF9oYWx0X2N0cmwpKHN0cnVj dCBkcHVfaHdfdmJpZiAqdmJpZiwKKwkJCXUzMiB4aW5faWQsIGJvb2wgZW5hYmxlKTsKKworCS8q KgorCSAqIGdldF9oYWx0X2N0cmwgLSBnZXQgaGFsdCBjb250cm9sCisJICogQHZiaWY6IHZiaWYg Y29udGV4dCBkcml2ZXIKKwkgKiBAeGluX2lkOiBjbGllbnQgaW50ZXJmYWNlIGlkZW50aWZpZXIK KwkgKiBAcmV0dXJuOiBoYWx0IGNvbnRyb2wgZW5hYmxlCisJICovCisJYm9vbCAoKmdldF9oYWx0 X2N0cmwpKHN0cnVjdCBkcHVfaHdfdmJpZiAqdmJpZiwKKwkJCXUzMiB4aW5faWQpOworCisJLyoq CisJICogc2V0X3Fvc19yZW1hcCAtIHNldCBRb1MgcHJpb3JpdHkgcmVtYXAKKwkgKiBAdmJpZjog dmJpZiBjb250ZXh0IGRyaXZlcgorCSAqIEB4aW5faWQ6IGNsaWVudCBpbnRlcmZhY2UgaWRlbnRp ZmllcgorCSAqIEBsZXZlbDogcHJpb3JpdHkgbGV2ZWwKKwkgKiBAcmVtYXBfbGV2ZWw6IHJlbWFw cGVkIGxldmVsCisJICovCisJdm9pZCAoKnNldF9xb3NfcmVtYXApKHN0cnVjdCBkcHVfaHdfdmJp ZiAqdmJpZiwKKwkJCXUzMiB4aW5faWQsIHUzMiBsZXZlbCwgdTMyIHJlbWFwX2xldmVsKTsKKwor CS8qKgorCSAqIHNldF9tZW1fdHlwZSAtIHNldCBtZW1vcnkgdHlwZQorCSAqIEB2YmlmOiB2Ymlm IGNvbnRleHQgZHJpdmVyCisJICogQHhpbl9pZDogY2xpZW50IGludGVyZmFjZSBpZGVudGlmaWVy CisJICogQHZhbHVlOiBtZW1vcnkgdHlwZSB2YWx1ZQorCSAqLworCXZvaWQgKCpzZXRfbWVtX3R5 cGUpKHN0cnVjdCBkcHVfaHdfdmJpZiAqdmJpZiwKKwkJCXUzMiB4aW5faWQsIHUzMiB2YWx1ZSk7 CisKKwkvKioKKwkgKiBjbGVhcl9lcnJvcnMgLSBjbGVhciBhbnkgdmJpZiBlcnJvcnMKKwkgKglU aGlzIGZ1bmN0aW9uIGNsZWFycyBhbnkgZGV0ZWN0ZWQgcGVuZGluZy9zb3VyY2UgZXJyb3JzCisJ ICoJb24gdGhlIFZCSUYgaW50ZXJmYWNlLCBhbmQgb3B0aW9uYWxseSByZXR1cm5zIHRoZSBkZXRl Y3RlZAorCSAqCWVycm9yIG1hc2socykuCisJICogQHZiaWY6IHZiaWYgY29udGV4dCBkcml2ZXIK KwkgKiBAcG5kX2Vycm9yczogcG9pbnRlciB0byBwZW5kaW5nIGVycm9yIHJlcG9ydGluZyB2YXJp YWJsZQorCSAqIEBzcmNfZXJyb3JzOiBwb2ludGVyIHRvIHNvdXJjZSBlcnJvciByZXBvcnRpbmcg dmFyaWFibGUKKwkgKi8KKwl2b2lkICgqY2xlYXJfZXJyb3JzKShzdHJ1Y3QgZHB1X2h3X3ZiaWYg KnZiaWYsCisJCXUzMiAqcG5kX2Vycm9ycywgdTMyICpzcmNfZXJyb3JzKTsKKworCS8qKgorCSAq IHNldF93cml0ZV9nYXRoZXJfZW4gLSBzZXQgd3JpdGVfZ2F0aGVyIGVuYWJsZQorCSAqIEB2Ymlm OiB2YmlmIGNvbnRleHQgZHJpdmVyCisJICogQHhpbl9pZDogY2xpZW50IGludGVyZmFjZSBpZGVu dGlmaWVyCisJICovCisJdm9pZCAoKnNldF93cml0ZV9nYXRoZXJfZW4pKHN0cnVjdCBkcHVfaHdf dmJpZiAqdmJpZiwgdTMyIHhpbl9pZCk7Cit9OworCitzdHJ1Y3QgZHB1X2h3X3ZiaWYgeworCS8q IGJhc2UgKi8KKwlzdHJ1Y3QgZHB1X2h3X2Jsa19yZWdfbWFwIGh3OworCisJLyogdmJpZiAqLwor CWVudW0gZHB1X3ZiaWYgaWR4OworCWNvbnN0IHN0cnVjdCBkcHVfdmJpZl9jZmcgKmNhcDsKKwor CS8qIG9wcyAqLworCXN0cnVjdCBkcHVfaHdfdmJpZl9vcHMgb3BzOworfTsKKworLyoqCisgKiBk cHVfaHdfdmJpZl9pbml0IC0gaW5pdGlhbGl6ZXMgdGhlIHZiaWYgZHJpdmVyIGZvciB0aGUgcGFz c2VkIGludGVyZmFjZSBpZHgKKyAqIEBpZHg6ICBJbnRlcmZhY2UgaW5kZXggZm9yIHdoaWNoIGRy aXZlciBvYmplY3QgaXMgcmVxdWlyZWQKKyAqIEBhZGRyOiBNYXBwZWQgcmVnaXN0ZXIgaW8gYWRk cmVzcyBvZiBNRFNTCisgKiBAbTogICAgUG9pbnRlciB0byBtZHNzIGNhdGFsb2cgZGF0YQorICov CitzdHJ1Y3QgZHB1X2h3X3ZiaWYgKmRwdV9od192YmlmX2luaXQoZW51bSBkcHVfdmJpZiBpZHgs CisJCXZvaWQgX19pb21lbSAqYWRkciwKKwkJY29uc3Qgc3RydWN0IGRwdV9tZHNzX2NmZyAqbSk7 CisKK3ZvaWQgZHB1X2h3X3ZiaWZfZGVzdHJveShzdHJ1Y3QgZHB1X2h3X3ZiaWYgKnZiaWYpOwor CisjZW5kaWYgLypfRFBVX0hXX1ZCSUZfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X2h3aW8uaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9od2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi41YjJi YzliNjViMTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfaHdpby5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNS0yMDE4 LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSB2ZXJzaW9uIDIgYW5kCisgKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor ICovCisKKyNpZm5kZWYgX0RQVV9IV0lPX0gKKyNkZWZpbmUgX0RQVV9IV0lPX0gKKworI2luY2x1 ZGUgImRwdV9od191dGlsLmgiCisKKy8qKgorICogTURQIFRPUCBibG9jayBSZWdpc3RlciBhbmQg Yml0IGZpZWxkcyBhbmQgZGVmaW5lcworICovCisjZGVmaW5lIERJU1BfSU5URl9TRUwgICAgICAg ICAgICAgICAgICAgMHgwMDQKKyNkZWZpbmUgSU5UUl9FTiAgICAgICAgICAgICAgICAgICAgICAg ICAweDAxMAorI2RlZmluZSBJTlRSX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgIDB4MDE0Cisj ZGVmaW5lIElOVFJfQ0xFQVIgICAgICAgICAgICAgICAgICAgICAgMHgwMTgKKyNkZWZpbmUgSU5U UjJfRU4gICAgICAgICAgICAgICAgICAgICAgICAweDAwOAorI2RlZmluZSBJTlRSMl9TVEFUVVMg ICAgICAgICAgICAgICAgICAgIDB4MDBjCisjZGVmaW5lIElOVFIyX0NMRUFSICAgICAgICAgICAg ICAgICAgICAgMHgwMmMKKyNkZWZpbmUgSElTVF9JTlRSX0VOICAgICAgICAgICAgICAgICAgICAw eDAxYworI2RlZmluZSBISVNUX0lOVFJfU1RBVFVTICAgICAgICAgICAgICAgIDB4MDIwCisjZGVm aW5lIEhJU1RfSU5UUl9DTEVBUiAgICAgICAgICAgICAgICAgMHgwMjQKKyNkZWZpbmUgSU5URl9J TlRSX0VOICAgICAgICAgICAgICAgICAgICAweDFDMAorI2RlZmluZSBJTlRGX0lOVFJfU1RBVFVT ICAgICAgICAgICAgICAgIDB4MUM0CisjZGVmaW5lIElOVEZfSU5UUl9DTEVBUiAgICAgICAgICAg ICAgICAgMHgxQzgKKyNkZWZpbmUgU1BMSVRfRElTUExBWV9FTiAgICAgICAgICAgICAgICAweDJG NAorI2RlZmluZSBTUExJVF9ESVNQTEFZX1VQUEVSX1BJUEVfQ1RSTCAgIDB4MkY4CisjZGVmaW5l IERTUFBfSUdDX0NPTE9SMF9SQU1fTFVUTiAgICAgICAgMHgzMDAKKyNkZWZpbmUgRFNQUF9JR0Nf Q09MT1IxX1JBTV9MVVROICAgICAgICAweDMwNAorI2RlZmluZSBEU1BQX0lHQ19DT0xPUjJfUkFN X0xVVE4gICAgICAgIDB4MzA4CisjZGVmaW5lIEhXX0VWRU5UU19DVEwgICAgICAgICAgICAgICAg ICAgMHgzN0MKKyNkZWZpbmUgQ0xLX0NUUkwzICAgICAgICAgICAgICAgICAgICAgICAweDNBOAor I2RlZmluZSBDTEtfU1RBVFVTMyAgICAgICAgICAgICAgICAgICAgIDB4M0FDCisjZGVmaW5lIENM S19DVFJMNCAgICAgICAgICAgICAgICAgICAgICAgMHgzQjAKKyNkZWZpbmUgQ0xLX1NUQVRVUzQg ICAgICAgICAgICAgICAgICAgICAweDNCNAorI2RlZmluZSBDTEtfQ1RSTDUgICAgICAgICAgICAg ICAgICAgICAgIDB4M0I4CisjZGVmaW5lIENMS19TVEFUVVM1ICAgICAgICAgICAgICAgICAgICAg MHgzQkMKKyNkZWZpbmUgQ0xLX0NUUkw3ICAgICAgICAgICAgICAgICAgICAgICAweDNEMAorI2Rl ZmluZSBDTEtfU1RBVFVTNyAgICAgICAgICAgICAgICAgICAgIDB4M0Q0CisjZGVmaW5lIFNQTElU X0RJU1BMQVlfTE9XRVJfUElQRV9DVFJMICAgMHgzRjAKKyNkZWZpbmUgU1BMSVRfRElTUExBWV9U RV9MSU5FX0lOVEVSVkFMICAweDNGNAorI2RlZmluZSBJTlRGX1NXX1JFU0VUX01BU0sgICAgICAg ICAgICAgIDB4M0ZDCisjZGVmaW5lIEhETUlfRFBfQ09SRV9TRUxFQ1QgICAgICAgICAgICAgMHg0 MDgKKyNkZWZpbmUgTURQX09VVF9DVExfMCAgICAgICAgICAgICAgICAgICAweDQxMAorI2RlZmlu ZSBNRFBfVlNZTkNfU0VMICAgICAgICAgICAgICAgICAgIDB4NDE0CisjZGVmaW5lIERDRV9TRUwg ICAgICAgICAgICAgICAgICAgICAgICAgMHg0NTAKKworI2VuZGlmIC8qX0RQVV9IV0lPX0ggKi8K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9pb191dGlsLmMg Yi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaW9fdXRpbC5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZjdjYWVjMzAzM2I2Ci0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2lvX3V0aWwuYwpAQCAtMCww ICsxLDE4NiBAQAorLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTUsIDIwMTctMjAxOCwgVGhlIExp bnV4IEZvdW5kYXRpb24uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8K KworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1 ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlICJkcHVfaW9fdXRpbC5oIgorCit2b2lkIG1z bV9kc3NfcHV0X2NsayhzdHJ1Y3QgZHNzX2NsayAqY2xrX2FycnksIGludCBudW1fY2xrKQorewor CWludCBpOworCisJZm9yIChpID0gbnVtX2NsayAtIDE7IGkgPj0gMDsgaS0tKSB7CisJCWlmIChj bGtfYXJyeVtpXS5jbGspCisJCQljbGtfcHV0KGNsa19hcnJ5W2ldLmNsayk7CisJCWNsa19hcnJ5 W2ldLmNsayA9IE5VTEw7CisJfQorfQorCitpbnQgbXNtX2Rzc19nZXRfY2xrKHN0cnVjdCBkZXZp Y2UgKmRldiwgc3RydWN0IGRzc19jbGsgKmNsa19hcnJ5LCBpbnQgbnVtX2NsaykKK3sKKwlpbnQg aSwgcmMgPSAwOworCisJZm9yIChpID0gMDsgaSA8IG51bV9jbGs7IGkrKykgeworCQljbGtfYXJy eVtpXS5jbGsgPSBjbGtfZ2V0KGRldiwgY2xrX2FycnlbaV0uY2xrX25hbWUpOworCQlyYyA9IFBU Ul9SRVQoY2xrX2FycnlbaV0uY2xrKTsKKwkJaWYgKHJjKSB7CisJCQlERVZfRVJSKCIlcFMtPiVz OiAnJXMnIGdldCBmYWlsZWQuIHJjPSVkXG4iLAorCQkJCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVz cygwKSwgX19mdW5jX18sCisJCQkJY2xrX2FycnlbaV0uY2xrX25hbWUsIHJjKTsKKwkJCWdvdG8g ZXJyb3I7CisJCX0KKwl9CisKKwlyZXR1cm4gcmM7CisKK2Vycm9yOgorCWZvciAoaS0tOyBpID49 IDA7IGktLSkgeworCQlpZiAoY2xrX2FycnlbaV0uY2xrKQorCQkJY2xrX3B1dChjbGtfYXJyeVtp XS5jbGspOworCQljbGtfYXJyeVtpXS5jbGsgPSBOVUxMOworCX0KKworCXJldHVybiByYzsKK30K KworaW50IG1zbV9kc3NfY2xrX3NldF9yYXRlKHN0cnVjdCBkc3NfY2xrICpjbGtfYXJyeSwgaW50 IG51bV9jbGspCit7CisJaW50IGksIHJjID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fY2xr OyBpKyspIHsKKwkJaWYgKGNsa19hcnJ5W2ldLmNsaykgeworCQkJaWYgKGNsa19hcnJ5W2ldLnR5 cGUgIT0gRFNTX0NMS19BSEIpIHsKKwkJCQlERVZfREJHKCIlcFMtPiVzOiAnJXMnIHJhdGUgJWxk XG4iLAorCQkJCQlfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCksIF9fZnVuY19fLAorCQkJCQlj bGtfYXJyeVtpXS5jbGtfbmFtZSwKKwkJCQkJY2xrX2FycnlbaV0ucmF0ZSk7CisJCQkJcmMgPSBj bGtfc2V0X3JhdGUoY2xrX2FycnlbaV0uY2xrLAorCQkJCQljbGtfYXJyeVtpXS5yYXRlKTsKKwkJ CQlpZiAocmMpIHsKKwkJCQkJREVWX0VSUigiJXBTLT4lczogJXMgZmFpbGVkLiByYz0lZFxuIiwK KwkJCQkJCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSwKKwkJCQkJCV9fZnVuY19fLAorCQkJ CQkJY2xrX2FycnlbaV0uY2xrX25hbWUsIHJjKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQor CQl9IGVsc2UgeworCQkJREVWX0VSUigiJXBTLT4lczogJyVzJyBpcyBub3QgYXZhaWxhYmxlXG4i LAorCQkJCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSwgX19mdW5jX18sCisJCQkJY2xrX2Fy cnlbaV0uY2xrX25hbWUpOworCQkJcmMgPSAtRVBFUk07CisJCQlicmVhazsKKwkJfQorCX0KKwor CXJldHVybiByYzsKK30KKworaW50IG1zbV9kc3NfZW5hYmxlX2NsayhzdHJ1Y3QgZHNzX2NsayAq Y2xrX2FycnksIGludCBudW1fY2xrLCBpbnQgZW5hYmxlKQoreworCWludCBpLCByYyA9IDA7CisK KwlpZiAoZW5hYmxlKSB7CisJCWZvciAoaSA9IDA7IGkgPCBudW1fY2xrOyBpKyspIHsKKwkJCURF Vl9EQkcoIiVwUy0+JXM6IGVuYWJsZSAnJXMnXG4iLAorCQkJCV9fYnVpbHRpbl9yZXR1cm5fYWRk cmVzcygwKSwgX19mdW5jX18sCisJCQkJY2xrX2FycnlbaV0uY2xrX25hbWUpOworCQkJaWYgKGNs a19hcnJ5W2ldLmNsaykgeworCQkJCXJjID0gY2xrX3ByZXBhcmVfZW5hYmxlKGNsa19hcnJ5W2ld LmNsayk7CisJCQkJaWYgKHJjKQorCQkJCQlERVZfRVJSKCIlcFMtPiVzOiAlcyBlbiBmYWlsLiBy Yz0lZFxuIiwKKwkJCQkJCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSwKKwkJCQkJCV9fZnVu Y19fLAorCQkJCQkJY2xrX2FycnlbaV0uY2xrX25hbWUsIHJjKTsKKwkJCX0gZWxzZSB7CisJCQkJ REVWX0VSUigiJXBTLT4lczogJyVzJyBpcyBub3QgYXZhaWxhYmxlXG4iLAorCQkJCQlfX2J1aWx0 aW5fcmV0dXJuX2FkZHJlc3MoMCksIF9fZnVuY19fLAorCQkJCQljbGtfYXJyeVtpXS5jbGtfbmFt ZSk7CisJCQkJcmMgPSAtRVBFUk07CisJCQl9CisKKwkJCWlmIChyYykgeworCQkJCW1zbV9kc3Nf ZW5hYmxlX2NsaygmY2xrX2FycnlbaV0sCisJCQkJCWksIGZhbHNlKTsKKwkJCQlicmVhazsKKwkJ CX0KKwkJfQorCX0gZWxzZSB7CisJCWZvciAoaSA9IG51bV9jbGsgLSAxOyBpID49IDA7IGktLSkg eworCQkJREVWX0RCRygiJXBTLT4lczogZGlzYWJsZSAnJXMnXG4iLAorCQkJCV9fYnVpbHRpbl9y ZXR1cm5fYWRkcmVzcygwKSwgX19mdW5jX18sCisJCQkJY2xrX2FycnlbaV0uY2xrX25hbWUpOwor CisJCQlpZiAoY2xrX2FycnlbaV0uY2xrKQorCQkJCWNsa19kaXNhYmxlX3VucHJlcGFyZShjbGtf YXJyeVtpXS5jbGspOworCQkJZWxzZQorCQkJCURFVl9FUlIoIiVwUy0+JXM6ICclcycgaXMgbm90 IGF2YWlsYWJsZVxuIiwKKwkJCQkJX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApLCBfX2Z1bmNf XywKKwkJCQkJY2xrX2FycnlbaV0uY2xrX25hbWUpOworCQl9CisJfQorCisJcmV0dXJuIHJjOwor fQorCitpbnQgbXNtX2Rzc19wYXJzZV9jbG9jayhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2 LAorCQlzdHJ1Y3QgZHNzX21vZHVsZV9wb3dlciAqbXApCit7CisJdTMyIGksIHJjID0gMDsKKwlj b25zdCBjaGFyICpjbG9ja19uYW1lOworCXUzMiByYXRlID0gMDsKKwlpbnQgbnVtX2NsayA9IDA7 CisKKwlpZiAoIXBkZXYgfHwgIW1wKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1wLT5udW1fY2xr ID0gMDsKKwludW1fY2xrID0gb2ZfcHJvcGVydHlfY291bnRfc3RyaW5ncyhwZGV2LT5kZXYub2Zf bm9kZSwgImNsb2NrLW5hbWVzIik7CisJaWYgKG51bV9jbGsgPD0gMCkgeworCQlwcl9kZWJ1Zygi Y2xvY2tzIGFyZSBub3QgZGVmaW5lZFxuIik7CisJCXJldHVybiAwOworCX0KKworCW1wLT5jbGtf Y29uZmlnID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsCisJCQkJICAgICAgc2l6ZW9mKHN0cnVj dCBkc3NfY2xrKSAqIG51bV9jbGssCisJCQkJICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFtcC0+ Y2xrX2NvbmZpZykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2Ns azsgaSsrKSB7CisJCXJjID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmdfaW5kZXgocGRldi0+ZGV2 Lm9mX25vZGUsCisJCQkJCQkgICAiY2xvY2stbmFtZXMiLCBpLAorCQkJCQkJICAgJmNsb2NrX25h bWUpOworCQlpZiAocmMpCisJCQlicmVhazsKKwkJc3RybGNweShtcC0+Y2xrX2NvbmZpZ1tpXS5j bGtfbmFtZSwgY2xvY2tfbmFtZSwKKwkJCXNpemVvZihtcC0+Y2xrX2NvbmZpZ1tpXS5jbGtfbmFt ZSkpOworCisJCW1wLT5jbGtfY29uZmlnW2ldLnR5cGUgPSBEU1NfQ0xLX0FIQjsKKwkJcmMgPSBv Zl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRleChwZGV2LT5kZXYub2Zfbm9kZSwKKwkJCQkJCSJjbG9j ay1mcmVxdWVuY3kiLCBpLAorCQkJCQkJJnJhdGUpOworCQlpZiAocmMpCisJCQljb250aW51ZTsK KwkJbXAtPmNsa19jb25maWdbaV0ucmF0ZSA9IHJhdGU7CisJCWlmIChyYXRlKQorCQkJbXAtPmNs a19jb25maWdbaV0udHlwZSA9IERTU19DTEtfUENMSzsKKwl9CisKKwlpZiAoIXJjKQorCQltcC0+ bnVtX2NsayA9IG51bV9jbGs7CisKKwlyZXR1cm4gcmM7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaW9fdXRpbC5oIGIvZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X2lvX3V0aWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMDAuLmJjMDczODFkNzQyOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9kcHUxL2RwdV9pb191dGlsLmgKQEAgLTAsMCArMSw1NyBAQAorLyogQ29weXJp Z2h0IChjKSAyMDEyLCAyMDE3LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRz IHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVy c2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoK KyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0RQVV9JT19VVElMX0hfXwor I2RlZmluZSBfX0RQVV9JT19VVElMX0hfXworCisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2lu Y2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+ CisKKyNkZWZpbmUgREVWX0RCRyhmbXQsIGFyZ3MuLi4pICAgcHJfZGVidWcoZm10LCAjI2FyZ3Mp CisjZGVmaW5lIERFVl9JTkZPKGZtdCwgYXJncy4uLikgIHByX2luZm8oZm10LCAjI2FyZ3MpCisj ZGVmaW5lIERFVl9XQVJOKGZtdCwgYXJncy4uLikgIHByX3dhcm4oZm10LCAjI2FyZ3MpCisjZGVm aW5lIERFVl9FUlIoZm10LCBhcmdzLi4uKSAgIHByX2VycihmbXQsICMjYXJncykKKworc3RydWN0 IGRzc19ncGlvIHsKKwl1bnNpZ25lZCBpbnQgZ3BpbzsKKwl1bnNpZ25lZCBpbnQgdmFsdWU7CisJ Y2hhciBncGlvX25hbWVbMzJdOworfTsKKworZW51bSBkc3NfY2xrX3R5cGUgeworCURTU19DTEtf QUhCLCAvKiBubyBzZXQgcmF0ZS4gcmF0ZSBjb250cm9sbGVkIHRocm91Z2ggcnBtICovCisJRFNT X0NMS19QQ0xLLAorfTsKKworc3RydWN0IGRzc19jbGsgeworCXN0cnVjdCBjbGsgKmNsazsgLyog Y2xrIGhhbmRsZSAqLworCWNoYXIgY2xrX25hbWVbMzJdOworCWVudW0gZHNzX2Nsa190eXBlIHR5 cGU7CisJdW5zaWduZWQgbG9uZyByYXRlOworCXVuc2lnbmVkIGxvbmcgbWF4X3JhdGU7Cit9Owor CitzdHJ1Y3QgZHNzX21vZHVsZV9wb3dlciB7CisJdW5zaWduZWQgaW50IG51bV9ncGlvOworCXN0 cnVjdCBkc3NfZ3BpbyAqZ3Bpb19jb25maWc7CisJdW5zaWduZWQgaW50IG51bV9jbGs7CisJc3Ry dWN0IGRzc19jbGsgKmNsa19jb25maWc7Cit9OworCitpbnQgbXNtX2Rzc19nZXRfY2xrKHN0cnVj dCBkZXZpY2UgKmRldiwgc3RydWN0IGRzc19jbGsgKmNsa19hcnJ5LCBpbnQgbnVtX2Nsayk7Cit2 b2lkIG1zbV9kc3NfcHV0X2NsayhzdHJ1Y3QgZHNzX2NsayAqY2xrX2FycnksIGludCBudW1fY2xr KTsKK2ludCBtc21fZHNzX2Nsa19zZXRfcmF0ZShzdHJ1Y3QgZHNzX2NsayAqY2xrX2FycnksIGlu dCBudW1fY2xrKTsKK2ludCBtc21fZHNzX2VuYWJsZV9jbGsoc3RydWN0IGRzc19jbGsgKmNsa19h cnJ5LCBpbnQgbnVtX2NsaywgaW50IGVuYWJsZSk7CitpbnQgbXNtX2Rzc19wYXJzZV9jbG9jayhz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQlzdHJ1Y3QgZHNzX21vZHVsZV9wb3dlciAq bXApOworI2VuZGlmIC8qIF9fRFBVX0lPX1VUSUxfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvZHB1MS9kcHVfaXJxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw Li5kNWU2Y2UwMTQwY2YKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvZHB1MS9kcHVfaXJxLmMKQEAgLTAsMCArMSw2NiBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE1 LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCisgKi8KKworI2RlZmluZSBwcl9mbXQoZm10KQkiW2RybTolczolZF0gIiBmbXQsIF9fZnVu Y19fLCBfX0xJTkVfXworCisjaW5jbHVkZSA8bGludXgvaXJxZG9tYWluLmg+CisjaW5jbHVkZSA8 bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorCisjaW5jbHVkZSAiZHB1 X2lycS5oIgorI2luY2x1ZGUgImRwdV9jb3JlX2lycS5oIgorCitpcnFyZXR1cm5fdCBkcHVfaXJx KHN0cnVjdCBtc21fa21zICprbXMpCit7CisJc3RydWN0IGRwdV9rbXMgKmRwdV9rbXMgPSB0b19k cHVfa21zKGttcyk7CisKKwlyZXR1cm4gZHB1X2NvcmVfaXJxKGRwdV9rbXMpOworfQorCit2b2lk IGRwdV9pcnFfcHJlaW5zdGFsbChzdHJ1Y3QgbXNtX2ttcyAqa21zKQoreworCXN0cnVjdCBkcHVf a21zICpkcHVfa21zID0gdG9fZHB1X2ttcyhrbXMpOworCisJaWYgKCFkcHVfa21zLT5kZXYgfHwg IWRwdV9rbXMtPmRldi0+ZGV2KSB7CisJCXByX2VycigiaW52YWxpZCBkZXZpY2UgaGFuZGxlc1xu Iik7CisJCXJldHVybjsKKwl9CisKKwlkcHVfY29yZV9pcnFfcHJlaW5zdGFsbChkcHVfa21zKTsK K30KKworaW50IGRwdV9pcnFfcG9zdGluc3RhbGwoc3RydWN0IG1zbV9rbXMgKmttcykKK3sKKwlz dHJ1Y3QgZHB1X2ttcyAqZHB1X2ttcyA9IHRvX2RwdV9rbXMoa21zKTsKKwlpbnQgcmM7CisKKwlp ZiAoIWttcykgeworCQlEUFVfRVJST1IoImludmFsaWQgcGFyYW1ldGVyc1xuIik7CisJCXJldHVy biAtRUlOVkFMOworCX0KKworCXJjID0gZHB1X2NvcmVfaXJxX3Bvc3RpbnN0YWxsKGRwdV9rbXMp OworCisJcmV0dXJuIHJjOworfQorCit2b2lkIGRwdV9pcnFfdW5pbnN0YWxsKHN0cnVjdCBtc21f a21zICprbXMpCit7CisJc3RydWN0IGRwdV9rbXMgKmRwdV9rbXMgPSB0b19kcHVfa21zKGttcyk7 CisKKwlpZiAoIWttcykgeworCQlEUFVfRVJST1IoImludmFsaWQgcGFyYW1ldGVyc1xuIik7CisJ CXJldHVybjsKKwl9CisKKwlkcHVfY29yZV9pcnFfdW5pbnN0YWxsKGRwdV9rbXMpOworfQpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2lycS5oIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwMC4uM2UxNDdmNzE3NmUyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2lycS5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qIENv cHlyaWdodCAoYykgMjAxNS0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCisgKiBvbmx5IHZlcnNp b24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisg KiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19EUFVfSVJRX0hfXworI2RlZmlu ZSBfX0RQVV9JUlFfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxs aW51eC9pcnFkb21haW4uaD4KKworI2luY2x1ZGUgIm1zbV9rbXMuaCIKKworLyoqCisgKiBkcHVf aXJxX2NvbnRyb2xsZXIgLSBkZWZpbmUgTURTUyBsZXZlbCBpbnRlcnJ1cHQgY29udHJvbGxlciBj b250ZXh0CisgKiBAZW5hYmxlZF9tYXNrOgllbmFibGUgc3RhdHVzIG9mIE1EU1MgbGV2ZWwgaW50 ZXJydXB0CisgKiBAZG9tYWluOgkJaW50ZXJydXB0IGRvbWFpbiBvZiB0aGlzIGNvbnRyb2xsZXIK KyAqLworc3RydWN0IGRwdV9pcnFfY29udHJvbGxlciB7CisJdW5zaWduZWQgbG9uZyBlbmFibGVk X21hc2s7CisJc3RydWN0IGlycV9kb21haW4gKmRvbWFpbjsKK307CisKKy8qKgorICogZHB1X2ly cV9wcmVpbnN0YWxsIC0gcGVyZm9ybSBwcmUtaW5zdGFsbGF0aW9uIG9mIE1EU1MgSVJRIGhhbmRs ZXIKKyAqIEBrbXM6CQlwb2ludGVyIHRvIGttcyBjb250ZXh0CisgKiBAcmV0dXJuOgkJbm9uZQor ICovCit2b2lkIGRwdV9pcnFfcHJlaW5zdGFsbChzdHJ1Y3QgbXNtX2ttcyAqa21zKTsKKworLyoq CisgKiBkcHVfaXJxX3Bvc3RpbnN0YWxsIC0gcGVyZm9ybSBwb3N0LWluc3RhbGxhdGlvbiBvZiBN RFNTIElSUSBoYW5kbGVyCisgKiBAa21zOgkJcG9pbnRlciB0byBrbXMgY29udGV4dAorICogQHJl dHVybjoJCTAgaWYgc3VjY2VzczsgZXJyb3IgY29kZSBvdGhlcndpc2UKKyAqLworaW50IGRwdV9p cnFfcG9zdGluc3RhbGwoc3RydWN0IG1zbV9rbXMgKmttcyk7CisKKy8qKgorICogZHB1X2lycV91 bmluc3RhbGwgLSB1bmluc3RhbGwgTURTUyBJUlEgaGFuZGxlcgorICogQGRybV9kZXY6CQlwb2lu dGVyIHRvIGttcyBjb250ZXh0CisgKiBAcmV0dXJuOgkJbm9uZQorICovCit2b2lkIGRwdV9pcnFf dW5pbnN0YWxsKHN0cnVjdCBtc21fa21zICprbXMpOworCisvKioKKyAqIGRwdV9pcnEgLSBNRFNT IGxldmVsIElSUSBoYW5kbGVyCisgKiBAa21zOgkJcG9pbnRlciB0byBrbXMgY29udGV4dAorICog QHJldHVybjoJCWludGVycnVwdCBoYW5kbGluZyBzdGF0dXMKKyAqLworaXJxcmV0dXJuX3QgZHB1 X2lycShzdHJ1Y3QgbXNtX2ttcyAqa21zKTsKKworI2VuZGlmIC8qIF9fRFBVX0lSUV9IX18gKi8K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9rbXMuYyBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9rbXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMDAuLjc5MTEyMmYwZTlhOQotLS0gL2Rldi9udWxsCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9rbXMuYwpAQCAtMCwwICsxLDEzODAgQEAK Ky8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFs bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVkIEhhdAorICogQXV0 aG9yOiBSb2IgQ2xhcmsgPHJvYmRjbGFya0BnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkg aXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug dmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgK KyAqIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5z ZXMvPi4KKyAqLworCisjZGVmaW5lIHByX2ZtdChmbXQpCSJbZHJtOiVzOiVkXSAiIGZtdCwgX19m dW5jX18sIF9fTElORV9fCisKKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KKyNpbmNsdWRlIDxs aW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+CisjaW5jbHVkZSA8bGlu dXgvZG1hLWJ1Zi5oPgorCisjaW5jbHVkZSAibXNtX2Rydi5oIgorI2luY2x1ZGUgIm1zbV9tbXUu aCIKKyNpbmNsdWRlICJtc21fZ2VtLmgiCisKKyNpbmNsdWRlICJkcHVfa21zLmgiCisjaW5jbHVk ZSAiZHB1X2NvcmVfaXJxLmgiCisjaW5jbHVkZSAiZHB1X2Zvcm1hdHMuaCIKKyNpbmNsdWRlICJk cHVfaHdfdmJpZi5oIgorI2luY2x1ZGUgImRwdV92YmlmLmgiCisjaW5jbHVkZSAiZHB1X2VuY29k ZXIuaCIKKyNpbmNsdWRlICJkcHVfcGxhbmUuaCIKKyNpbmNsdWRlICJkcHVfY3J0Yy5oIgorCisj ZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFMKKyNpbmNsdWRlICJkcHVfdHJhY2UuaCIKKworc3Rh dGljIGNvbnN0IGNoYXIgKiBjb25zdCBpb21tdV9wb3J0c1tdID0geworCQkibWRwXzAiLAorfTsK KworLyoKKyAqIFRvIGVuYWJsZSBvdmVyYWxsIERSTSBkcml2ZXIgbG9nZ2luZworICogIyBlY2hv IDB4MiA+IC9zeXMvbW9kdWxlL2RybS9wYXJhbWV0ZXJzL2RlYnVnCisgKgorICogVG8gZW5hYmxl IERSTSBkcml2ZXIgaC93IGxvZ2dpbmcKKyAqICMgZWNobyA8bWFzaz4gPiAvc3lzL2tlcm5lbC9k ZWJ1Zy9kcmkvMC9kZWJ1Zy9od19sb2dfbWFzaworICoKKyAqIFNlZSBkcHVfaHdfbWRzcy5oIGZv ciBoL3cgbG9nZ2luZyBtYXNrIGRlZmluaXRpb25zIChzZWFyY2ggZm9yIERQVV9EQkdfTUFTS18p CisgKi8KKyNkZWZpbmUgRFBVX0RFQlVHRlNfRElSICJtc21fZHB1IgorI2RlZmluZSBEUFVfREVC VUdGU19IV01BU0tOQU1FICJod19sb2dfbWFzayIKKworc3RhdGljIGludCBkcHVfa21zX2h3X2lu aXQoc3RydWN0IG1zbV9rbXMgKmttcyk7CitzdGF0aWMgaW50IF9kcHVfa21zX21tdV9kZXN0cm95 KHN0cnVjdCBkcHVfa21zICpkcHVfa21zKTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZHB1X2lv bWFwX3NpemUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJCQkgICAgY29uc3QgY2hh ciAqbmFtZSkKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKworCXJlcyA9IHBsYXRmb3JtX2dl dF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sIG5hbWUpOworCWlmICghcmVz KSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGdldCBtZW1vcnkgcmVzb3VyY2U6ICVzXG4iLCBu YW1lKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIHJlc291cmNlX3NpemUocmVzKTsKK30K KworI2lmZGVmIENPTkZJR19ERUJVR19GUworc3RhdGljIGludCBfZHB1X2Rhbmdlcl9zaWduYWxf c3RhdHVzKHN0cnVjdCBzZXFfZmlsZSAqcywKKwkJYm9vbCBkYW5nZXJfc3RhdHVzKQoreworCXN0 cnVjdCBkcHVfa21zICprbXMgPSAoc3RydWN0IGRwdV9rbXMgKilzLT5wcml2YXRlOworCXN0cnVj dCBtc21fZHJtX3ByaXZhdGUgKnByaXY7CisJc3RydWN0IGRwdV9kYW5nZXJfc2FmZV9zdGF0dXMg c3RhdHVzOworCWludCBpOworCisJaWYgKCFrbXMgfHwgIWttcy0+ZGV2IHx8ICFrbXMtPmRldi0+ ZGV2X3ByaXZhdGUgfHwgIWttcy0+aHdfbWRwKSB7CisJCURQVV9FUlJPUigiaW52YWxpZCBhcmco cylcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlwcml2ID0ga21zLT5kZXYtPmRldl9wcml2YXRl OworCW1lbXNldCgmc3RhdHVzLCAwLCBzaXplb2Yoc3RydWN0IGRwdV9kYW5nZXJfc2FmZV9zdGF0 dXMpKTsKKworCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJmttcy0+cGRldi0+ZGV2KTsKKwlpZiAoZGFu Z2VyX3N0YXR1cykgeworCQlzZXFfcHV0cyhzLCAiXG5EYW5nZXIgc2lnbmFsIHN0YXR1czpcbiIp OworCQlpZiAoa21zLT5od19tZHAtPm9wcy5nZXRfZGFuZ2VyX3N0YXR1cykKKwkJCWttcy0+aHdf bWRwLT5vcHMuZ2V0X2Rhbmdlcl9zdGF0dXMoa21zLT5od19tZHAsCisJCQkJCSZzdGF0dXMpOwor CX0gZWxzZSB7CisJCXNlcV9wdXRzKHMsICJcblNhZmUgc2lnbmFsIHN0YXR1czpcbiIpOworCQlp ZiAoa21zLT5od19tZHAtPm9wcy5nZXRfZGFuZ2VyX3N0YXR1cykKKwkJCWttcy0+aHdfbWRwLT5v cHMuZ2V0X2Rhbmdlcl9zdGF0dXMoa21zLT5od19tZHAsCisJCQkJCSZzdGF0dXMpOworCX0KKwlw bV9ydW50aW1lX3B1dF9zeW5jKCZrbXMtPnBkZXYtPmRldik7CisKKwlzZXFfcHJpbnRmKHMsICJN RFAgICAgIDogIDB4JXhcbiIsIHN0YXR1cy5tZHApOworCisJZm9yIChpID0gU1NQUF9WSUcwOyBp IDwgU1NQUF9NQVg7IGkrKykKKwkJc2VxX3ByaW50ZihzLCAiU1NQUCVkICAgOiAgMHgleCAgXHQi LCBpIC0gU1NQUF9WSUcwLAorCQkJCXN0YXR1cy5zc3BwW2ldKTsKKwlzZXFfcHV0cyhzLCAiXG4i KTsKKworCXJldHVybiAwOworfQorCisjZGVmaW5lIERFRklORV9EUFVfREVCVUdGU19TRVFfRk9Q UyhfX3ByZWZpeCkJCQkJXAorc3RhdGljIGludCBfX3ByZWZpeCAjIyBfb3BlbihzdHJ1Y3QgaW5v ZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkJXAorewkJCQkJCQkJCVwKKwlyZXR1cm4gc2lu Z2xlX29wZW4oZmlsZSwgX19wcmVmaXggIyMgX3Nob3csIGlub2RlLT5pX3ByaXZhdGUpOwlcCit9 CQkJCQkJCQkJXAorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgX19wcmVmaXgg IyMgX2ZvcHMgPSB7CQlcCisJLm93bmVyID0gVEhJU19NT0RVTEUsCQkJCQkJXAorCS5vcGVuID0g X19wcmVmaXggIyMgX29wZW4sCQkJCQlcCisJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwJCQkJ CVwKKwkucmVhZCA9IHNlcV9yZWFkLAkJCQkJCVwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAkJCQkJ CVwKK30KKworc3RhdGljIGludCBkcHVfZGVidWdmc19kYW5nZXJfc3RhdHNfc2hvdyhzdHJ1Y3Qg c2VxX2ZpbGUgKnMsIHZvaWQgKnYpCit7CisJcmV0dXJuIF9kcHVfZGFuZ2VyX3NpZ25hbF9zdGF0 dXMocywgdHJ1ZSk7Cit9CitERUZJTkVfRFBVX0RFQlVHRlNfU0VRX0ZPUFMoZHB1X2RlYnVnZnNf ZGFuZ2VyX3N0YXRzKTsKKworc3RhdGljIGludCBkcHVfZGVidWdmc19zYWZlX3N0YXRzX3Nob3co c3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2KQoreworCXJldHVybiBfZHB1X2Rhbmdlcl9zaWdu YWxfc3RhdHVzKHMsIGZhbHNlKTsKK30KK0RFRklORV9EUFVfREVCVUdGU19TRVFfRk9QUyhkcHVf ZGVidWdmc19zYWZlX3N0YXRzKTsKKworc3RhdGljIHZvaWQgZHB1X2RlYnVnZnNfZGFuZ2VyX2Rl c3Ryb3koc3RydWN0IGRwdV9rbXMgKmRwdV9rbXMpCit7CisJZGVidWdmc19yZW1vdmVfcmVjdXJz aXZlKGRwdV9rbXMtPmRlYnVnZnNfZGFuZ2VyKTsKKwlkcHVfa21zLT5kZWJ1Z2ZzX2RhbmdlciA9 IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgZHB1X2RlYnVnZnNfZGFuZ2VyX2luaXQoc3RydWN0IGRw dV9rbXMgKmRwdV9rbXMsCisJCXN0cnVjdCBkZW50cnkgKnBhcmVudCkKK3sKKwlkcHVfa21zLT5k ZWJ1Z2ZzX2RhbmdlciA9IGRlYnVnZnNfY3JlYXRlX2RpcigiZGFuZ2VyIiwKKwkJCXBhcmVudCk7 CisJaWYgKCFkcHVfa21zLT5kZWJ1Z2ZzX2RhbmdlcikgeworCQlEUFVfRVJST1IoImZhaWxlZCB0 byBjcmVhdGUgZGFuZ2VyIGRlYnVnZnNcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlk ZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJkYW5nZXJfc3RhdHVzIiwgMDYwMCwgZHB1X2ttcy0+ZGVidWdm c19kYW5nZXIsCisJCQlkcHVfa21zLCAmZHB1X2RlYnVnZnNfZGFuZ2VyX3N0YXRzX2ZvcHMpOwor CWRlYnVnZnNfY3JlYXRlX2ZpbGUoInNhZmVfc3RhdHVzIiwgMDYwMCwgZHB1X2ttcy0+ZGVidWdm c19kYW5nZXIsCisJCQlkcHVfa21zLCAmZHB1X2RlYnVnZnNfc2FmZV9zdGF0c19mb3BzKTsKKwor CXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9kcHVfZGVidWdmc19zaG93X3JlZ3NldDMyKHN0 cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHB1X2RlYnVnZnNfcmVn c2V0MzIgKnJlZ3NldDsKKwlzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttczsKKwlzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2OworCXN0cnVjdCBtc21fZHJtX3ByaXZhdGUgKnByaXY7CisJdm9pZCBfX2lvbWVt ICpiYXNlOworCXVpbnQzMl90IGksIGFkZHI7CisKKwlpZiAoIXMgfHwgIXMtPnByaXZhdGUpCisJ CXJldHVybiAwOworCisJcmVnc2V0ID0gcy0+cHJpdmF0ZTsKKworCWRwdV9rbXMgPSByZWdzZXQt PmRwdV9rbXM7CisJaWYgKCFkcHVfa21zIHx8ICFkcHVfa21zLT5tbWlvKQorCQlyZXR1cm4gMDsK KworCWRldiA9IGRwdV9rbXMtPmRldjsKKwlpZiAoIWRldikKKwkJcmV0dXJuIDA7CisKKwlwcml2 ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpZiAoIXByaXYpCisJCXJldHVybiAwOworCisJYmFzZSA9 IGRwdV9rbXMtPm1taW8gKyByZWdzZXQtPm9mZnNldDsKKworCS8qIGluc2VydCBwYWRkaW5nIHNw YWNlcywgaWYgbmVlZGVkICovCisJaWYgKHJlZ3NldC0+b2Zmc2V0ICYgMHhGKSB7CisJCXNlcV9w cmludGYocywgIlsleF0iLCByZWdzZXQtPm9mZnNldCAmIH4weEYpOworCQlmb3IgKGkgPSAwOyBp IDwgKHJlZ3NldC0+b2Zmc2V0ICYgMHhGKTsgaSArPSA0KQorCQkJc2VxX3B1dHMocywgIiAgICAg ICAgICIpOworCX0KKworCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJmRwdV9rbXMtPnBkZXYtPmRldik7 CisKKwkvKiBtYWluIHJlZ2lzdGVyIG91dHB1dCAqLworCWZvciAoaSA9IDA7IGkgPCByZWdzZXQt PmJsa19sZW47IGkgKz0gNCkgeworCQlhZGRyID0gcmVnc2V0LT5vZmZzZXQgKyBpOworCQlpZiAo KGFkZHIgJiAweEYpID09IDB4MCkKKwkJCXNlcV9wcmludGYocywgaSA/ICJcblsleF0iIDogIlsl eF0iLCBhZGRyKTsKKwkJc2VxX3ByaW50ZihzLCAiICUwOHgiLCByZWFkbF9yZWxheGVkKGJhc2Ug KyBpKSk7CisJfQorCXNlcV9wdXRzKHMsICJcbiIpOworCXBtX3J1bnRpbWVfcHV0X3N5bmMoJmRw dV9rbXMtPnBkZXYtPmRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkcHVfZGVi dWdmc19vcGVuX3JlZ3NldDMyKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCXN0cnVjdCBmaWxlICpm aWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBfZHB1X2RlYnVnZnNfc2hvd19yZWdz ZXQzMiwgaW5vZGUtPmlfcHJpdmF0ZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9v cGVyYXRpb25zIGRwdV9mb3BzX3JlZ3NldDMyID0geworCS5vcGVuID0JCWRwdV9kZWJ1Z2ZzX29w ZW5fcmVnc2V0MzIsCisJLnJlYWQgPQkJc2VxX3JlYWQsCisJLmxsc2VlayA9CXNlcV9sc2VlaywK KwkucmVsZWFzZSA9CXNpbmdsZV9yZWxlYXNlLAorfTsKKwordm9pZCBkcHVfZGVidWdmc19zZXR1 cF9yZWdzZXQzMihzdHJ1Y3QgZHB1X2RlYnVnZnNfcmVnc2V0MzIgKnJlZ3NldCwKKwkJdWludDMy X3Qgb2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgsIHN0cnVjdCBkcHVfa21zICpkcHVfa21zKQorewor CWlmIChyZWdzZXQpIHsKKwkJcmVnc2V0LT5vZmZzZXQgPSBvZmZzZXQ7CisJCXJlZ3NldC0+Ymxr X2xlbiA9IGxlbmd0aDsKKwkJcmVnc2V0LT5kcHVfa21zID0gZHB1X2ttczsKKwl9Cit9CisKK3Zv aWQgKmRwdV9kZWJ1Z2ZzX2NyZWF0ZV9yZWdzZXQzMihjb25zdCBjaGFyICpuYW1lLCB1bW9kZV90 IG1vZGUsCisJCXZvaWQgKnBhcmVudCwgc3RydWN0IGRwdV9kZWJ1Z2ZzX3JlZ3NldDMyICpyZWdz ZXQpCit7CisJaWYgKCFuYW1lIHx8ICFyZWdzZXQgfHwgIXJlZ3NldC0+ZHB1X2ttcyB8fCAhcmVn c2V0LT5ibGtfbGVuKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIG1ha2Ugc3VyZSBvZmZzZXQgaXMg YSBtdWx0aXBsZSBvZiA0ICovCisJcmVnc2V0LT5vZmZzZXQgPSByb3VuZF9kb3duKHJlZ3NldC0+ b2Zmc2V0LCA0KTsKKworCXJldHVybiBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKG5hbWUsIG1vZGUsIHBh cmVudCwKKwkJCXJlZ3NldCwgJmRwdV9mb3BzX3JlZ3NldDMyKTsKK30KKworc3RhdGljIGludCBf ZHB1X2RlYnVnZnNfaW5pdChzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttcykKK3sKKwl2b2lkICpwOwor CWludCByYzsKKworCXAgPSBkcHVfaHdfdXRpbF9nZXRfbG9nX21hc2tfcHRyKCk7CisKKwlpZiAo IWRwdV9rbXMgfHwgIXApCisJCXJldHVybiAtRUlOVkFMOworCisJZHB1X2ttcy0+ZGVidWdmc19y b290ID0gZGVidWdmc19jcmVhdGVfZGlyKCJkZWJ1ZyIsCisJCQkJCSAgIGRwdV9rbXMtPmRldi0+ cHJpbWFyeS0+ZGVidWdmc19yb290KTsKKwlpZiAoSVNfRVJSX09SX05VTEwoZHB1X2ttcy0+ZGVi dWdmc19yb290KSkgeworCQlEUk1fRVJST1IoImRlYnVnZnMgY3JlYXRlX2RpciBmYWlsZWQgJWxk XG4iLAorCQkJICBQVFJfRVJSKGRwdV9rbXMtPmRlYnVnZnNfcm9vdCkpOworCQlyZXR1cm4gUFRS X0VSUihkcHVfa21zLT5kZWJ1Z2ZzX3Jvb3QpOworCX0KKworCXJjID0gZHB1X2RiZ19kZWJ1Z2Zz X3JlZ2lzdGVyKGRwdV9rbXMtPmRlYnVnZnNfcm9vdCk7CisJaWYgKHJjKSB7CisJCURSTV9FUlJP UigiZmFpbGVkIHRvIHJlZyBkcHUgZGJnIGRlYnVnZnM6ICVkXG4iLCByYyk7CisJCXJldHVybiBy YzsKKwl9CisKKwkvKiBhbGxvdyByb290IHRvIGJlIE5VTEwgKi8KKwlkZWJ1Z2ZzX2NyZWF0ZV94 MzIoRFBVX0RFQlVHRlNfSFdNQVNLTkFNRSwgMDYwMCwgZHB1X2ttcy0+ZGVidWdmc19yb290LCBw KTsKKworCSh2b2lkKSBkcHVfZGVidWdmc19kYW5nZXJfaW5pdChkcHVfa21zLCBkcHVfa21zLT5k ZWJ1Z2ZzX3Jvb3QpOworCSh2b2lkKSBkcHVfZGVidWdmc192YmlmX2luaXQoZHB1X2ttcywgZHB1 X2ttcy0+ZGVidWdmc19yb290KTsKKwkodm9pZCkgZHB1X2RlYnVnZnNfY29yZV9pcnFfaW5pdChk cHVfa21zLCBkcHVfa21zLT5kZWJ1Z2ZzX3Jvb3QpOworCisJcmMgPSBkcHVfY29yZV9wZXJmX2Rl YnVnZnNfaW5pdCgmZHB1X2ttcy0+cGVyZiwgZHB1X2ttcy0+ZGVidWdmc19yb290KTsKKwlpZiAo cmMpIHsKKwkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gaW5pdCBwZXJmICVkXG4iLCByYyk7CisJCXJl dHVybiByYzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX2RwdV9kZWJ1Z2Zz X2Rlc3Ryb3koc3RydWN0IGRwdV9rbXMgKmRwdV9rbXMpCit7CisJLyogZG9uJ3QgbmVlZCB0byBO VUxMIGNoZWNrIGRlYnVnZnNfcm9vdCAqLworCWlmIChkcHVfa21zKSB7CisJCWRwdV9kZWJ1Z2Zz X3ZiaWZfZGVzdHJveShkcHVfa21zKTsKKwkJZHB1X2RlYnVnZnNfZGFuZ2VyX2Rlc3Ryb3koZHB1 X2ttcyk7CisJCWRwdV9kZWJ1Z2ZzX2NvcmVfaXJxX2Rlc3Ryb3koZHB1X2ttcyk7CisJCWRlYnVn ZnNfcmVtb3ZlX3JlY3Vyc2l2ZShkcHVfa21zLT5kZWJ1Z2ZzX3Jvb3QpOworCX0KK30KKyNlbHNl CitzdGF0aWMgdm9pZCBfZHB1X2RlYnVnZnNfZGVzdHJveShzdHJ1Y3QgZHB1X2ttcyAqZHB1X2tt cykKK3sKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IGRwdV9rbXNfZW5hYmxlX3ZibGFuayhzdHJ1 Y3QgbXNtX2ttcyAqa21zLCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJcmV0dXJuIGRwdV9j cnRjX3ZibGFuayhjcnRjLCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQgZHB1X2ttc19kaXNhYmxl X3ZibGFuayhzdHJ1Y3QgbXNtX2ttcyAqa21zLCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJ ZHB1X2NydGNfdmJsYW5rKGNydGMsIGZhbHNlKTsKK30KKworc3RhdGljIHZvaWQgZHB1X2ttc19w cmVwYXJlX2NvbW1pdChzdHJ1Y3QgbXNtX2ttcyAqa21zLAorCQlzdHJ1Y3QgZHJtX2F0b21pY19z dGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IGRwdV9rbXMgKmRwdV9rbXM7CisJc3RydWN0IG1zbV9k cm1fcHJpdmF0ZSAqcHJpdjsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OworCXN0cnVjdCBkcm1f ZW5jb2RlciAqZW5jb2RlcjsKKworCWlmICgha21zKQorCQlyZXR1cm47CisJZHB1X2ttcyA9IHRv X2RwdV9rbXMoa21zKTsKKwlkZXYgPSBkcHVfa21zLT5kZXY7CisKKwlpZiAoIWRldiB8fCAhZGV2 LT5kZXZfcHJpdmF0ZSkKKwkJcmV0dXJuOworCXByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXBt X3J1bnRpbWVfZ2V0X3N5bmMoJmRwdV9rbXMtPnBkZXYtPmRldik7CisKKwlsaXN0X2Zvcl9lYWNo X2VudHJ5KGVuY29kZXIsICZkZXYtPm1vZGVfY29uZmlnLmVuY29kZXJfbGlzdCwgaGVhZCkKKwkJ aWYgKGVuY29kZXItPmNydGMgIT0gTlVMTCkKKwkJCWRwdV9lbmNvZGVyX3ByZXBhcmVfY29tbWl0 KGVuY29kZXIpOworfQorCisvKgorICogT3ZlcnJpZGUgdGhlIGVuY29kZXIgZW5hYmxlIHNpbmNl IHdlIG5lZWQgdG8gc2V0dXAgdGhlIGlubGluZSByb3RhdG9yIGFuZCBkbworICogc29tZSBjcnRj IG1hZ2ljIGJlZm9yZSBlbmFibGluZyBhbnkgYnJpZGdlIHRoYXQgbWlnaHQgYmUgcHJlc2VudC4K KyAqLwordm9pZCBkcHVfa21zX2VuY29kZXJfZW5hYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5j b2RlcikKK3sKKwljb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzICpmdW5jcyA9 IGVuY29kZXItPmhlbHBlcl9wcml2YXRlOworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IGVuY29k ZXItPmNydGM7CisKKwkvKiBGb3J3YXJkIHRoaXMgZW5hYmxlIGNhbGwgdG8gdGhlIGNvbW1pdCBo b29rICovCisJaWYgKGZ1bmNzICYmIGZ1bmNzLT5jb21taXQpCisJCWZ1bmNzLT5jb21taXQoZW5j b2Rlcik7CisKKwlpZiAoY3J0YyAmJiBjcnRjLT5zdGF0ZS0+YWN0aXZlKSB7CisJCXRyYWNlX2Rw dV9rbXNfZW5jX2VuYWJsZShEUk1JRChjcnRjKSk7CisJCWRwdV9jcnRjX2NvbW1pdF9raWNrb2Zm KGNydGMpOworCX0KK30KKworc3RhdGljIHZvaWQgZHB1X2ttc19jb21taXQoc3RydWN0IG1zbV9r bXMgKmttcywgc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBkcm1f Y3J0YyAqY3J0YzsKKwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7CisJaW50IGk7 CisKKwlmb3JfZWFjaF9uZXdfY3J0Y19pbl9zdGF0ZShzdGF0ZSwgY3J0YywgY3J0Y19zdGF0ZSwg aSkgeworCQkvKiBJZiBtb2Rlc2V0IGlzIHJlcXVpcmVkLCBraWNrb2ZmIGlzIHJ1biBpbiBlbmNv ZGVyX2VuYWJsZSAqLworCQlpZiAoZHJtX2F0b21pY19jcnRjX25lZWRzX21vZGVzZXQoY3J0Y19z dGF0ZSkpCisJCQljb250aW51ZTsKKworCQlpZiAoY3J0Yy0+c3RhdGUtPmFjdGl2ZSkgeworCQkJ dHJhY2VfZHB1X2ttc19jb21taXQoRFJNSUQoY3J0YykpOworCQkJZHB1X2NydGNfY29tbWl0X2tp Y2tvZmYoY3J0Yyk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRwdV9rbXNfY29tcGxldGVf Y29tbWl0KHN0cnVjdCBtc21fa21zICprbXMsCisJCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpv bGRfc3RhdGUpCit7CisJc3RydWN0IGRwdV9rbXMgKmRwdV9rbXM7CisJc3RydWN0IG1zbV9kcm1f cHJpdmF0ZSAqcHJpdjsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisJc3RydWN0IGRybV9jcnRj X3N0YXRlICpvbGRfY3J0Y19zdGF0ZTsKKwlpbnQgaTsKKworCWlmICgha21zIHx8ICFvbGRfc3Rh dGUpCisJCXJldHVybjsKKwlkcHVfa21zID0gdG9fZHB1X2ttcyhrbXMpOworCisJaWYgKCFkcHVf a21zLT5kZXYgfHwgIWRwdV9rbXMtPmRldi0+ZGV2X3ByaXZhdGUpCisJCXJldHVybjsKKwlwcml2 ID0gZHB1X2ttcy0+ZGV2LT5kZXZfcHJpdmF0ZTsKKworCURQVV9BVFJBQ0VfQkVHSU4oImttc19j b21wbGV0ZV9jb21taXQiKTsKKworCWZvcl9lYWNoX29sZF9jcnRjX2luX3N0YXRlKG9sZF9zdGF0 ZSwgY3J0Yywgb2xkX2NydGNfc3RhdGUsIGkpCisJCWRwdV9jcnRjX2NvbXBsZXRlX2NvbW1pdChj cnRjLCBvbGRfY3J0Y19zdGF0ZSk7CisKKwlwbV9ydW50aW1lX3B1dF9zeW5jKCZkcHVfa21zLT5w ZGV2LT5kZXYpOworCisJRFBVX0FUUkFDRV9FTkQoImttc19jb21wbGV0ZV9jb21taXQiKTsKK30K Kworc3RhdGljIHZvaWQgZHB1X2ttc193YWl0X2Zvcl9jb21taXRfZG9uZShzdHJ1Y3QgbXNtX2tt cyAqa21zLAorCQlzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IGRybV9lbmNvZGVy ICplbmNvZGVyOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7CisJaW50IHJldDsKKworCWlmICgh a21zIHx8ICFjcnRjIHx8ICFjcnRjLT5zdGF0ZSkgeworCQlEUFVfRVJST1IoImludmFsaWQgcGFy YW1zXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWRldiA9IGNydGMtPmRldjsKKworCWlmICghY3J0 Yy0+c3RhdGUtPmVuYWJsZSkgeworCQlEUFVfREVCVUcoIltjcnRjOiVkXSBub3QgZW5hYmxlXG4i LCBjcnRjLT5iYXNlLmlkKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghY3J0Yy0+c3RhdGUtPmFj dGl2ZSkgeworCQlEUFVfREVCVUcoIltjcnRjOiVkXSBub3QgYWN0aXZlXG4iLCBjcnRjLT5iYXNl LmlkKTsKKwkJcmV0dXJuOworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZW5jb2RlciwgJmRl di0+bW9kZV9jb25maWcuZW5jb2Rlcl9saXN0LCBoZWFkKSB7CisJCWlmIChlbmNvZGVyLT5jcnRj ICE9IGNydGMpCisJCQljb250aW51ZTsKKwkJLyoKKwkJICogV2FpdCBmb3IgcG9zdC1mbHVzaCBp ZiBuZWNlc3NhcnkgdG8gZGVsYXkgYmVmb3JlCisJCSAqIHBsYW5lX2NsZWFudXAuIEZvciBleGFt cGxlLCB3YWl0IGZvciB2c3luYyBpbiBjYXNlIG9mIHZpZGVvCisJCSAqIG1vZGUgcGFuZWxzLiBU aGlzIG1heSBiZSBhIG5vLW9wIGZvciBjb21tYW5kIG1vZGUgcGFuZWxzLgorCQkgKi8KKwkJdHJh Y2VfZHB1X2ttc193YWl0X2Zvcl9jb21taXRfZG9uZShEUk1JRChjcnRjKSk7CisJCXJldCA9IGRw dV9lbmNvZGVyX3dhaXRfZm9yX2V2ZW50KGVuY29kZXIsIE1TTV9FTkNfQ09NTUlUX0RPTkUpOwor CQlpZiAocmV0ICYmIHJldCAhPSAtRVdPVUxEQkxPQ0spIHsKKwkJCURQVV9FUlJPUigid2FpdCBm b3IgY29tbWl0IGRvbmUgcmV0dXJuZWQgJWRcbiIsIHJldCk7CisJCQlicmVhazsKKwkJfQorCX0K K30KKworc3RhdGljIHZvaWQgX2RwdV9rbXNfaW5pdGlhbGl6ZV9kc2koc3RydWN0IGRybV9kZXZp Y2UgKmRldiwKKwkJCQkgICAgc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdiwKKwkJCQkgICAg c3RydWN0IGRwdV9rbXMgKmRwdV9rbXMpCit7CisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVy ID0gTlVMTDsKKwlpbnQgaSwgcmM7CisKKwkvKlRPRE86IFN1cHBvcnQgdHdvIGluZGVwZW5kZW50 IERTSSBjb25uZWN0b3JzICovCisJZW5jb2RlciA9IGRwdV9lbmNvZGVyX2luaXQoZGV2LCBEUk1f TU9ERV9DT05ORUNUT1JfRFNJKTsKKwlpZiAoSVNfRVJSX09SX05VTEwoZW5jb2RlcikpIHsKKwkJ RFBVX0VSUk9SKCJlbmNvZGVyIGluaXQgZmFpbGVkIGZvciBkc2kgZGlzcGxheVxuIik7CisJCXJl dHVybjsKKwl9CisKKwlwcml2LT5lbmNvZGVyc1twcml2LT5udW1fZW5jb2RlcnMrK10gPSBlbmNv ZGVyOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHJpdi0+ZHNpKTsgaSsrKSB7CisJ CWlmICghcHJpdi0+ZHNpW2ldKSB7CisJCQlEUFVfREVCVUcoImludmFsaWQgbXNtX2RzaSBmb3Ig Y3RybCAlZFxuIiwgaSk7CisJCQlyZXR1cm47CisJCX0KKworCQlyYyA9IG1zbV9kc2lfbW9kZXNl dF9pbml0KHByaXYtPmRzaVtpXSwgZGV2LCBlbmNvZGVyKTsKKwkJaWYgKHJjKSB7CisJCQlEUFVf RVJST1IoIm1vZGVzZXRfaW5pdCBmYWlsZWQgZm9yIGRzaVslZF0sIHJjID0gJWRcbiIsCisJCQkJ aSwgcmMpOworCQkJY29udGludWU7CisJCX0KKwl9Cit9CisKKy8qKgorICogX2RwdV9rbXNfc2V0 dXBfZGlzcGxheXMgLSBjcmVhdGUgZW5jb2RlcnMsIGJyaWRnZXMgYW5kIGNvbm5lY3RvcnMKKyAq ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHVuZGVybHlpbmcgZGlzcGxheXMKKyAqIEBk ZXY6ICAgICAgICBQb2ludGVyIHRvIGRybSBkZXZpY2Ugc3RydWN0dXJlCisgKiBAcHJpdjogICAg ICAgUG9pbnRlciB0byBwcml2YXRlIGRybSBkZXZpY2UgZGF0YQorICogQGRwdV9rbXM6ICAgIFBv aW50ZXIgdG8gZHB1IGttcyBzdHJ1Y3R1cmUKKyAqIFJldHVybnM6ICAgICBaZXJvIG9uIHN1Y2Nl c3MKKyAqLworc3RhdGljIHZvaWQgX2RwdV9rbXNfc2V0dXBfZGlzcGxheXMoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwKKwkJCQkgICAgc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdiwKKwkJCQkg ICAgc3RydWN0IGRwdV9rbXMgKmRwdV9rbXMpCit7CisJX2RwdV9rbXNfaW5pdGlhbGl6ZV9kc2ko ZGV2LCBwcml2LCBkcHVfa21zKTsKKworCS8qKgorCSAqIEV4dGVuZCB0aGlzIGZ1bmN0aW9uIHRv IGluaXRpYWxpemUgb3RoZXIKKwkgKiB0eXBlcyBvZiBkaXNwbGF5cworCSAqLworfQorCitzdGF0 aWMgdm9pZCBfZHB1X2ttc19kcm1fb2JqX2Rlc3Ryb3koc3RydWN0IGRwdV9rbXMgKmRwdV9rbXMp Cit7CisJc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdjsKKwlpbnQgaTsKKworCWlmICghZHB1 X2ttcykgeworCQlEUFVfRVJST1IoImludmFsaWQgZHB1X2ttc1xuIik7CisJCXJldHVybjsKKwl9 IGVsc2UgaWYgKCFkcHVfa21zLT5kZXYpIHsKKwkJRFBVX0VSUk9SKCJpbnZhbGlkIGRldlxuIik7 CisJCXJldHVybjsKKwl9IGVsc2UgaWYgKCFkcHVfa21zLT5kZXYtPmRldl9wcml2YXRlKSB7CisJ CURQVV9FUlJPUigiaW52YWxpZCBkZXZfcHJpdmF0ZVxuIik7CisJCXJldHVybjsKKwl9CisJcHJp diA9IGRwdV9rbXMtPmRldi0+ZGV2X3ByaXZhdGU7CisKKwlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+ bnVtX2NydGNzOyBpKyspCisJCXByaXYtPmNydGNzW2ldLT5mdW5jcy0+ZGVzdHJveShwcml2LT5j cnRjc1tpXSk7CisJcHJpdi0+bnVtX2NydGNzID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBwcml2 LT5udW1fcGxhbmVzOyBpKyspCisJCXByaXYtPnBsYW5lc1tpXS0+ZnVuY3MtPmRlc3Ryb3kocHJp di0+cGxhbmVzW2ldKTsKKwlwcml2LT5udW1fcGxhbmVzID0gMDsKKworCWZvciAoaSA9IDA7IGkg PCBwcml2LT5udW1fY29ubmVjdG9yczsgaSsrKQorCQlwcml2LT5jb25uZWN0b3JzW2ldLT5mdW5j cy0+ZGVzdHJveShwcml2LT5jb25uZWN0b3JzW2ldKTsKKwlwcml2LT5udW1fY29ubmVjdG9ycyA9 IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+bnVtX2VuY29kZXJzOyBpKyspCisJCXByaXYt PmVuY29kZXJzW2ldLT5mdW5jcy0+ZGVzdHJveShwcml2LT5lbmNvZGVyc1tpXSk7CisJcHJpdi0+ bnVtX2VuY29kZXJzID0gMDsKK30KKworc3RhdGljIGludCBfZHB1X2ttc19kcm1fb2JqX2luaXQo c3RydWN0IGRwdV9rbXMgKmRwdV9rbXMpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKKwlz dHJ1Y3QgZHJtX3BsYW5lICpwcmltYXJ5X3BsYW5lc1tNQVhfUExBTkVTXSwgKnBsYW5lOworCXN0 cnVjdCBkcm1fY3J0YyAqY3J0YzsKKworCXN0cnVjdCBtc21fZHJtX3ByaXZhdGUgKnByaXY7CisJ c3RydWN0IGRwdV9tZHNzX2NmZyAqY2F0YWxvZzsKKworCWludCBwcmltYXJ5X3BsYW5lc19pZHgg PSAwLCBpLCByZXQ7CisJaW50IG1heF9jcnRjX2NvdW50OworCisJaWYgKCFkcHVfa21zIHx8ICFk cHVfa21zLT5kZXYgfHwgIWRwdV9rbXMtPmRldi0+ZGV2KSB7CisJCURQVV9FUlJPUigiaW52YWxp ZCBkcHVfa21zXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGV2ID0gZHB1X2ttcy0+ ZGV2OworCXByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWNhdGFsb2cgPSBkcHVfa21zLT5jYXRh bG9nOworCisJLyoKKwkgKiBDcmVhdGUgZW5jb2RlciBhbmQgcXVlcnkgZGlzcGxheSBkcml2ZXJz IHRvIGNyZWF0ZQorCSAqIGJyaWRnZXMgYW5kIGNvbm5lY3RvcnMKKwkgKi8KKwlfZHB1X2ttc19z ZXR1cF9kaXNwbGF5cyhkZXYsIHByaXYsIGRwdV9rbXMpOworCisJbWF4X2NydGNfY291bnQgPSBt aW4oY2F0YWxvZy0+bWl4ZXJfY291bnQsIHByaXYtPm51bV9lbmNvZGVycyk7CisKKwkvKiBDcmVh dGUgdGhlIHBsYW5lcyAqLworCWZvciAoaSA9IDA7IGkgPCBjYXRhbG9nLT5zc3BwX2NvdW50OyBp KyspIHsKKwkJYm9vbCBwcmltYXJ5ID0gdHJ1ZTsKKworCQlpZiAoY2F0YWxvZy0+c3NwcFtpXS5m ZWF0dXJlcyAmIEJJVChEUFVfU1NQUF9DVVJTT1IpCisJCQl8fCBwcmltYXJ5X3BsYW5lc19pZHgg Pj0gbWF4X2NydGNfY291bnQpCisJCQlwcmltYXJ5ID0gZmFsc2U7CisKKwkJcGxhbmUgPSBkcHVf cGxhbmVfaW5pdChkZXYsIGNhdGFsb2ctPnNzcHBbaV0uaWQsIHByaW1hcnksCisJCQkJKDFVTCA8 PCBtYXhfY3J0Y19jb3VudCkgLSAxLCAwKTsKKwkJaWYgKElTX0VSUihwbGFuZSkpIHsKKwkJCURQ VV9FUlJPUigiZHB1X3BsYW5lX2luaXQgZmFpbGVkXG4iKTsKKwkJCXJldCA9IFBUUl9FUlIocGxh bmUpOworCQkJZ290byBmYWlsOworCQl9CisJCXByaXYtPnBsYW5lc1twcml2LT5udW1fcGxhbmVz KytdID0gcGxhbmU7CisKKwkJaWYgKHByaW1hcnkpCisJCQlwcmltYXJ5X3BsYW5lc1twcmltYXJ5 X3BsYW5lc19pZHgrK10gPSBwbGFuZTsKKwl9CisKKwltYXhfY3J0Y19jb3VudCA9IG1pbihtYXhf Y3J0Y19jb3VudCwgcHJpbWFyeV9wbGFuZXNfaWR4KTsKKworCS8qIENyZWF0ZSBvbmUgQ1JUQyBw ZXIgZW5jb2RlciAqLworCWZvciAoaSA9IDA7IGkgPCBtYXhfY3J0Y19jb3VudDsgaSsrKSB7CisJ CWNydGMgPSBkcHVfY3J0Y19pbml0KGRldiwgcHJpbWFyeV9wbGFuZXNbaV0pOworCQlpZiAoSVNf RVJSKGNydGMpKSB7CisJCQlyZXQgPSBQVFJfRVJSKGNydGMpOworCQkJZ290byBmYWlsOworCQl9 CisJCXByaXYtPmNydGNzW3ByaXYtPm51bV9jcnRjcysrXSA9IGNydGM7CisJfQorCisJLyogQWxs IENSVENzIGFyZSBjb21wYXRpYmxlIHdpdGggYWxsIGVuY29kZXJzICovCisJZm9yIChpID0gMDsg aSA8IHByaXYtPm51bV9lbmNvZGVyczsgaSsrKQorCQlwcml2LT5lbmNvZGVyc1tpXS0+cG9zc2li bGVfY3J0Y3MgPSAoMSA8PCBwcml2LT5udW1fY3J0Y3MpIC0gMTsKKworCXJldHVybiAwOworZmFp bDoKKwlfZHB1X2ttc19kcm1fb2JqX2Rlc3Ryb3koZHB1X2ttcyk7CisJcmV0dXJuIHJldDsKK30K KworI2lmZGVmIENPTkZJR19ERUJVR19GUworc3RhdGljIGludCBkcHVfa21zX2RlYnVnZnNfaW5p dChzdHJ1Y3QgbXNtX2ttcyAqa21zLCBzdHJ1Y3QgZHJtX21pbm9yICptaW5vcikKK3sKKwlzdHJ1 Y3QgZHB1X2ttcyAqZHB1X2ttcyA9IHRvX2RwdV9rbXMoa21zKTsKKwlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2OworCWludCByYzsKKworCWlmICghZHB1X2ttcyB8fCAhZHB1X2ttcy0+ZGV2IHx8ICFk cHVfa21zLT5kZXYtPmRldikgeworCQlEUFVfRVJST1IoImludmFsaWQgZHB1X2ttc1xuIik7CisJ CXJldHVybiAtRUlOVkFMOworCX0KKworCWRldiA9IGRwdV9rbXMtPmRldjsKKworCXJjID0gX2Rw dV9kZWJ1Z2ZzX2luaXQoZHB1X2ttcyk7CisJaWYgKHJjKQorCQlEUFVfRVJST1IoImRwdV9kZWJ1 Z2ZzIGluaXQgZmFpbGVkOiAlZFxuIiwgcmMpOworCisJcmV0dXJuIHJjOworfQorI2VuZGlmCisK K3N0YXRpYyBsb25nIGRwdV9rbXNfcm91bmRfcGl4Y2xrKHN0cnVjdCBtc21fa21zICprbXMsIHVu c2lnbmVkIGxvbmcgcmF0ZSwKKwkJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXJl dHVybiByYXRlOworfQorCitzdGF0aWMgdm9pZCBfZHB1X2ttc19od19kZXN0cm95KHN0cnVjdCBk cHVfa21zICpkcHVfa21zKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7CisJaW50IGk7CisK KwlkZXYgPSBkcHVfa21zLT5kZXY7CisJaWYgKCFkZXYpCisJCXJldHVybjsKKworCWlmIChkcHVf a21zLT5od19pbnRyKQorCQlkcHVfaHdfaW50cl9kZXN0cm95KGRwdV9rbXMtPmh3X2ludHIpOwor CWRwdV9rbXMtPmh3X2ludHIgPSBOVUxMOworCisJaWYgKGRwdV9rbXMtPnBvd2VyX2V2ZW50KQor CQlkcHVfcG93ZXJfaGFuZGxlX3VucmVnaXN0ZXJfZXZlbnQoCisJCQkJJmRwdV9rbXMtPnBoYW5k bGUsIGRwdV9rbXMtPnBvd2VyX2V2ZW50KTsKKworCS8qIHNhZmUgdG8gY2FsbCB0aGVzZSBtb3Jl IHRoYW4gb25jZSBkdXJpbmcgc2h1dGRvd24gKi8KKwlfZHB1X2RlYnVnZnNfZGVzdHJveShkcHVf a21zKTsKKwlfZHB1X2ttc19tbXVfZGVzdHJveShkcHVfa21zKTsKKworCWlmIChkcHVfa21zLT5j YXRhbG9nKSB7CisJCWZvciAoaSA9IDA7IGkgPCBkcHVfa21zLT5jYXRhbG9nLT52YmlmX2NvdW50 OyBpKyspIHsKKwkJCXUzMiB2YmlmX2lkeCA9IGRwdV9rbXMtPmNhdGFsb2ctPnZiaWZbaV0uaWQ7 CisKKwkJCWlmICgodmJpZl9pZHggPCBWQklGX01BWCkgJiYgZHB1X2ttcy0+aHdfdmJpZlt2Ymlm X2lkeF0pCisJCQkJZHB1X2h3X3ZiaWZfZGVzdHJveShkcHVfa21zLT5od192YmlmW3ZiaWZfaWR4 XSk7CisJCX0KKwl9CisKKwlpZiAoZHB1X2ttcy0+cm1faW5pdCkKKwkJZHB1X3JtX2Rlc3Ryb3ko JmRwdV9rbXMtPnJtKTsKKwlkcHVfa21zLT5ybV9pbml0ID0gZmFsc2U7CisKKwlpZiAoZHB1X2tt cy0+Y2F0YWxvZykKKwkJZHB1X2h3X2NhdGFsb2dfZGVpbml0KGRwdV9rbXMtPmNhdGFsb2cpOwor CWRwdV9rbXMtPmNhdGFsb2cgPSBOVUxMOworCisJaWYgKGRwdV9rbXMtPmNvcmVfY2xpZW50KQor CQlkcHVfcG93ZXJfY2xpZW50X2Rlc3Ryb3koJmRwdV9rbXMtPnBoYW5kbGUsCisJCQlkcHVfa21z LT5jb3JlX2NsaWVudCk7CisJZHB1X2ttcy0+Y29yZV9jbGllbnQgPSBOVUxMOworCisJaWYgKGRw dV9rbXMtPnZiaWZbVkJJRl9OUlRdKQorCQlkZXZtX2lvdW5tYXAoJmRwdV9rbXMtPnBkZXYtPmRl diwgZHB1X2ttcy0+dmJpZltWQklGX05SVF0pOworCWRwdV9rbXMtPnZiaWZbVkJJRl9OUlRdID0g TlVMTDsKKworCWlmIChkcHVfa21zLT52YmlmW1ZCSUZfUlRdKQorCQlkZXZtX2lvdW5tYXAoJmRw dV9rbXMtPnBkZXYtPmRldiwgZHB1X2ttcy0+dmJpZltWQklGX1JUXSk7CisJZHB1X2ttcy0+dmJp ZltWQklGX1JUXSA9IE5VTEw7CisKKwlpZiAoZHB1X2ttcy0+bW1pbykKKwkJZGV2bV9pb3VubWFw KCZkcHVfa21zLT5wZGV2LT5kZXYsIGRwdV9rbXMtPm1taW8pOworCWRwdV9rbXMtPm1taW8gPSBO VUxMOworfQorCitzdGF0aWMgdm9pZCBkcHVfa21zX2Rlc3Ryb3koc3RydWN0IG1zbV9rbXMgKmtt cykKK3sKKwlzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttczsKKworCWlmICgha21zKSB7CisJCURQVV9F UlJPUigiaW52YWxpZCBrbXNcbiIpOworCQlyZXR1cm47CisJfQorCisJZHB1X2ttcyA9IHRvX2Rw dV9rbXMoa21zKTsKKworCWRwdV9kYmdfZGVzdHJveSgpOworCV9kcHVfa21zX2h3X2Rlc3Ryb3ko ZHB1X2ttcyk7Cit9CisKK3N0YXRpYyB2b2lkIGRwdV9rbXNfcHJlY2xvc2Uoc3RydWN0IG1zbV9r bXMgKmttcywgc3RydWN0IGRybV9maWxlICpmaWxlKQoreworCXN0cnVjdCBkcHVfa21zICpkcHVf a21zID0gdG9fZHB1X2ttcyhrbXMpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkcHVfa21z LT5kZXY7CisJc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7 CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+bnVtX2NydGNzOyBp KyspCisJCWRwdV9jcnRjX2NhbmNlbF9wZW5kaW5nX2ZsaXAocHJpdi0+Y3J0Y3NbaV0sIGZpbGUp OworfQorCitzdGF0aWMgaW50IGRwdV9rbXNfcG1fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYp Cit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRkZXY7CisJc3RydWN0IGRybV9tb2Rlc2V0X2FjcXVp cmVfY3R4IGN0eDsKKwlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGU7CisJc3RydWN0IGRw dV9rbXMgKmRwdV9rbXM7CisJaW50IHJldCA9IDAsIG51bV9jcnRjcyA9IDA7CisKKwlpZiAoIWRl dikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJ aWYgKCFkZGV2IHx8ICFkZGV2X3RvX21zbV9rbXMoZGRldikpCisJCXJldHVybiAtRUlOVkFMOwor CisJZHB1X2ttcyA9IHRvX2RwdV9rbXMoZGRldl90b19tc21fa21zKGRkZXYpKTsKKworCS8qIGRp c2FibGUgaG90LXBsdWcgcG9sbGluZyAqLworCWRybV9rbXNfaGVscGVyX3BvbGxfZGlzYWJsZShk ZGV2KTsKKworCS8qIGFjcXVpcmUgbW9kZXNldCBsb2NrKHMpICovCisJZHJtX21vZGVzZXRfYWNx dWlyZV9pbml0KCZjdHgsIDApOworCityZXRyeToKKwlEUFVfQVRSQUNFX0JFR0lOKCJrbXNfcG1f c3VzcGVuZCIpOworCisJcmV0ID0gZHJtX21vZGVzZXRfbG9ja19hbGxfY3R4KGRkZXYsICZjdHgp OworCWlmIChyZXQpCisJCWdvdG8gdW5sb2NrOworCisJLyogc2F2ZSBjdXJyZW50IHN0YXRlIGZv ciByZXN1bWUgKi8KKwlpZiAoZHB1X2ttcy0+c3VzcGVuZF9zdGF0ZSkKKwkJZHJtX2F0b21pY19z dGF0ZV9wdXQoZHB1X2ttcy0+c3VzcGVuZF9zdGF0ZSk7CisJZHB1X2ttcy0+c3VzcGVuZF9zdGF0 ZSA9IGRybV9hdG9taWNfaGVscGVyX2R1cGxpY2F0ZV9zdGF0ZShkZGV2LCAmY3R4KTsKKwlpZiAo SVNfRVJSX09SX05VTEwoZHB1X2ttcy0+c3VzcGVuZF9zdGF0ZSkpIHsKKwkJRFJNX0VSUk9SKCJm YWlsZWQgdG8gYmFjayB1cCBzdXNwZW5kIHN0YXRlXG4iKTsKKwkJZHB1X2ttcy0+c3VzcGVuZF9z dGF0ZSA9IE5VTEw7CisJCWdvdG8gdW5sb2NrOworCX0KKworCS8qIGNyZWF0ZSBhdG9taWMgc3Rh dGUgdG8gZGlzYWJsZSBhbGwgQ1JUQ3MgKi8KKwlzdGF0ZSA9IGRybV9hdG9taWNfc3RhdGVfYWxs b2MoZGRldik7CisJaWYgKElTX0VSUl9PUl9OVUxMKHN0YXRlKSkgeworCQlEUk1fRVJST1IoImZh aWxlZCB0byBhbGxvY2F0ZSBjcnRjIGRpc2FibGUgc3RhdGVcbiIpOworCQlnb3RvIHVubG9jazsK Kwl9CisKKwlzdGF0ZS0+YWNxdWlyZV9jdHggPSAmY3R4OworCisJLyogY2hlY2sgZm9yIG5vdGhp bmcgdG8gZG8gKi8KKwlpZiAobnVtX2NydGNzID09IDApIHsKKwkJRFJNX0RFQlVHKCJhbGwgY3J0 Y3MgYXJlIGFscmVhZHkgaW4gdGhlIG9mZiBzdGF0ZVxuIik7CisJCWRybV9hdG9taWNfc3RhdGVf cHV0KHN0YXRlKTsKKwkJZ290byBzdXNwZW5kZWQ7CisJfQorCisJLyogY29tbWl0IHRoZSAiZGlz YWJsZSBhbGwiIHN0YXRlICovCisJcmV0ID0gZHJtX2F0b21pY19jb21taXQoc3RhdGUpOworCWlm IChyZXQgPCAwKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGRpc2FibGUgY3J0Y3MsICVkXG4i LCByZXQpOworCQlkcm1fYXRvbWljX3N0YXRlX3B1dChzdGF0ZSk7CisJCWdvdG8gdW5sb2NrOwor CX0KKworc3VzcGVuZGVkOgorCWRwdV9rbXMtPnN1c3BlbmRfYmxvY2sgPSB0cnVlOworCit1bmxv Y2s6CisJaWYgKHJldCA9PSAtRURFQURMSykgeworCQlkcm1fbW9kZXNldF9iYWNrb2ZmKCZjdHgp OworCQlnb3RvIHJldHJ5OworCX0KKwlkcm1fbW9kZXNldF9kcm9wX2xvY2tzKCZjdHgpOworCWRy bV9tb2Rlc2V0X2FjcXVpcmVfZmluaSgmY3R4KTsKKworCURQVV9BVFJBQ0VfRU5EKCJrbXNfcG1f c3VzcGVuZCIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRwdV9rbXNfcG1fcmVzdW1l KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldjsKKwlzdHJ1 Y3QgZHB1X2ttcyAqZHB1X2ttczsKKwlpbnQgcmV0OworCisJaWYgKCFkZXYpCisJCXJldHVybiAt RUlOVkFMOworCisJZGRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWlmICghZGRldiB8fCAh ZGRldl90b19tc21fa21zKGRkZXYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRwdV9rbXMgPSB0 b19kcHVfa21zKGRkZXZfdG9fbXNtX2ttcyhkZGV2KSk7CisKKwlEUFVfQVRSQUNFX0JFR0lOKCJr bXNfcG1fcmVzdW1lIik7CisKKwlkcm1fbW9kZV9jb25maWdfcmVzZXQoZGRldik7CisKKwlkcm1f bW9kZXNldF9sb2NrX2FsbChkZGV2KTsKKworCWRwdV9rbXMtPnN1c3BlbmRfYmxvY2sgPSBmYWxz ZTsKKworCWlmIChkcHVfa21zLT5zdXNwZW5kX3N0YXRlKSB7CisJCWRwdV9rbXMtPnN1c3BlbmRf c3RhdGUtPmFjcXVpcmVfY3R4ID0KKwkJCWRkZXYtPm1vZGVfY29uZmlnLmFjcXVpcmVfY3R4Owor CQlyZXQgPSBkcm1fYXRvbWljX2NvbW1pdChkcHVfa21zLT5zdXNwZW5kX3N0YXRlKTsKKwkJaWYg KHJldCA8IDApIHsKKwkJCURSTV9FUlJPUigiZmFpbGVkIHRvIHJlc3RvcmUgc3RhdGUsICVkXG4i LCByZXQpOworCQkJZHJtX2F0b21pY19zdGF0ZV9wdXQoZHB1X2ttcy0+c3VzcGVuZF9zdGF0ZSk7 CisJCX0KKwkJZHB1X2ttcy0+c3VzcGVuZF9zdGF0ZSA9IE5VTEw7CisJfQorCWRybV9tb2Rlc2V0 X3VubG9ja19hbGwoZGRldik7CisKKwkvKiBlbmFibGUgaG90LXBsdWcgcG9sbGluZyAqLworCWRy bV9rbXNfaGVscGVyX3BvbGxfZW5hYmxlKGRkZXYpOworCisJRFBVX0FUUkFDRV9FTkQoImttc19w bV9yZXN1bWUiKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBfZHB1X2ttc19zZXRfZW5jb2Rlcl9t b2RlKHN0cnVjdCBtc21fa21zICprbXMsCisJCQkJIHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rl ciwKKwkJCQkgYm9vbCBjbWRfbW9kZSkKK3sKKwlzdHJ1Y3QgbXNtX2Rpc3BsYXlfaW5mbyBpbmZv OworCXN0cnVjdCBtc21fZHJtX3ByaXZhdGUgKnByaXYgPSBlbmNvZGVyLT5kZXYtPmRldl9wcml2 YXRlOworCWludCBpLCByYyA9IDA7CisKKwltZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7 CisKKwlpbmZvLmludGZfdHlwZSA9IGVuY29kZXItPmVuY29kZXJfdHlwZTsKKwlpbmZvLmNhcGFi aWxpdGllcyA9IGNtZF9tb2RlID8gTVNNX0RJU1BMQVlfQ0FQX0NNRF9NT0RFIDoKKwkJCU1TTV9E SVNQTEFZX0NBUF9WSURfTU9ERTsKKworCS8qIFRPRE86IE5vIHN1cHBvcnQgZm9yIERTSSBzd2Fw ICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHJpdi0+ZHNpKTsgaSsrKSB7CisJCWlm IChwcml2LT5kc2lbaV0pIHsKKwkJCWluZm8uaF90aWxlX2luc3RhbmNlW2luZm8ubnVtX29mX2hf dGlsZXNdID0gaTsKKwkJCWluZm8ubnVtX29mX2hfdGlsZXMrKzsKKwkJfQorCX0KKworCXJjID0g ZHB1X2VuY29kZXJfc2V0dXAoZW5jb2Rlci0+ZGV2LCBlbmNvZGVyLCAmaW5mbyk7CisJaWYgKHJj KQorCQlEUFVfRVJST1IoImZhaWxlZCB0byBzZXR1cCBEUFUgZW5jb2RlciAlZDogcmM6JWRcbiIs CisJCQllbmNvZGVyLT5iYXNlLmlkLCByYyk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXNt X2ttc19mdW5jcyBrbXNfZnVuY3MgPSB7CisJLmh3X2luaXQgICAgICAgICA9IGRwdV9rbXNfaHdf aW5pdCwKKwkuaXJxX3ByZWluc3RhbGwgID0gZHB1X2lycV9wcmVpbnN0YWxsLAorCS5pcnFfcG9z dGluc3RhbGwgPSBkcHVfaXJxX3Bvc3RpbnN0YWxsLAorCS5pcnFfdW5pbnN0YWxsICAgPSBkcHVf aXJxX3VuaW5zdGFsbCwKKwkuaXJxICAgICAgICAgICAgID0gZHB1X2lycSwKKwkucHJlY2xvc2Ug ICAgICAgID0gZHB1X2ttc19wcmVjbG9zZSwKKwkucHJlcGFyZV9jb21taXQgID0gZHB1X2ttc19w cmVwYXJlX2NvbW1pdCwKKwkuY29tbWl0ICAgICAgICAgID0gZHB1X2ttc19jb21taXQsCisJLmNv bXBsZXRlX2NvbW1pdCA9IGRwdV9rbXNfY29tcGxldGVfY29tbWl0LAorCS53YWl0X2Zvcl9jcnRj X2NvbW1pdF9kb25lID0gZHB1X2ttc193YWl0X2Zvcl9jb21taXRfZG9uZSwKKwkuZW5hYmxlX3Zi bGFuayAgID0gZHB1X2ttc19lbmFibGVfdmJsYW5rLAorCS5kaXNhYmxlX3ZibGFuayAgPSBkcHVf a21zX2Rpc2FibGVfdmJsYW5rLAorCS5jaGVja19tb2RpZmllZF9mb3JtYXQgPSBkcHVfZm9ybWF0 X2NoZWNrX21vZGlmaWVkX2Zvcm1hdCwKKwkuZ2V0X2Zvcm1hdCAgICAgID0gZHB1X2dldF9tc21f Zm9ybWF0LAorCS5yb3VuZF9waXhjbGsgICAgPSBkcHVfa21zX3JvdW5kX3BpeGNsaywKKwkucG1f c3VzcGVuZCAgICAgID0gZHB1X2ttc19wbV9zdXNwZW5kLAorCS5wbV9yZXN1bWUgICAgICAgPSBk cHVfa21zX3BtX3Jlc3VtZSwKKwkuZGVzdHJveSAgICAgICAgID0gZHB1X2ttc19kZXN0cm95LAor CS5zZXRfZW5jb2Rlcl9tb2RlID0gX2RwdV9rbXNfc2V0X2VuY29kZXJfbW9kZSwKKyNpZmRlZiBD T05GSUdfREVCVUdfRlMKKwkuZGVidWdmc19pbml0ICAgID0gZHB1X2ttc19kZWJ1Z2ZzX2luaXQs CisjZW5kaWYKK307CisKKy8qIHRoZSBjYWxsZXIgYXBpIG5lZWRzIHRvIHR1cm4gb24gY2xvY2sg YmVmb3JlIGNhbGxpbmcgaXQgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfZHB1X2ttc19jb3JlX2h3 X3Jldl9pbml0KHN0cnVjdCBkcHVfa21zICpkcHVfa21zKQoreworCWRwdV9rbXMtPmNvcmVfcmV2 ID0gcmVhZGxfcmVsYXhlZChkcHVfa21zLT5tbWlvICsgMHgwKTsKK30KKworc3RhdGljIGludCBf ZHB1X2ttc19tbXVfZGVzdHJveShzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttcykKK3sKKwlzdHJ1Y3Qg bXNtX21tdSAqbW11OworCisJbW11ID0gZHB1X2ttcy0+YmFzZS5hc3BhY2UtPm1tdTsKKworCW1t dS0+ZnVuY3MtPmRldGFjaChtbXUsIChjb25zdCBjaGFyICoqKWlvbW11X3BvcnRzLAorCQkJQVJS QVlfU0laRShpb21tdV9wb3J0cykpOworCW1zbV9nZW1fYWRkcmVzc19zcGFjZV9wdXQoZHB1X2tt cy0+YmFzZS5hc3BhY2UpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX2RwdV9rbXNf bW11X2luaXQoc3RydWN0IGRwdV9rbXMgKmRwdV9rbXMpCit7CisJc3RydWN0IGlvbW11X2RvbWFp biAqZG9tYWluOworCXN0cnVjdCBtc21fZ2VtX2FkZHJlc3Nfc3BhY2UgKmFzcGFjZTsKKwlpbnQg cmV0OworCisJZG9tYWluID0gaW9tbXVfZG9tYWluX2FsbG9jKCZwbGF0Zm9ybV9idXNfdHlwZSk7 CisJaWYgKCFkb21haW4pCisJCXJldHVybiAwOworCisJYXNwYWNlID0gbXNtX2dlbV9hZGRyZXNz X3NwYWNlX2NyZWF0ZShkcHVfa21zLT5kZXYtPmRldiwKKwkJCWRvbWFpbiwgImRwdTEiKTsKKwlp ZiAoSVNfRVJSKGFzcGFjZSkpIHsKKwkJcmV0ID0gUFRSX0VSUihhc3BhY2UpOworCQlnb3RvIGZh aWw7CisJfQorCisJZHB1X2ttcy0+YmFzZS5hc3BhY2UgPSBhc3BhY2U7CisKKwlyZXQgPSBhc3Bh Y2UtPm1tdS0+ZnVuY3MtPmF0dGFjaChhc3BhY2UtPm1tdSwgaW9tbXVfcG9ydHMsCisJCQlBUlJB WV9TSVpFKGlvbW11X3BvcnRzKSk7CisJaWYgKHJldCkgeworCQlEUFVfRVJST1IoImZhaWxlZCB0 byBhdHRhY2ggaW9tbXUgJWRcbiIsIHJldCk7CisJCW1zbV9nZW1fYWRkcmVzc19zcGFjZV9wdXQo YXNwYWNlKTsKKwkJZ290byBmYWlsOworCX0KKworCXJldHVybiAwOworZmFpbDoKKwlfZHB1X2tt c19tbXVfZGVzdHJveShkcHVfa21zKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1 Y3QgZHNzX2NsayAqX2RwdV9rbXNfZ2V0X2NsayhzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttcywKKwkJ Y2hhciAqY2xvY2tfbmFtZSkKK3sKKwlzdHJ1Y3QgZHNzX21vZHVsZV9wb3dlciAqbXAgPSAmZHB1 X2ttcy0+bXA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbXAtPm51bV9jbGs7IGkrKykg eworCQlpZiAoIXN0cmNtcChtcC0+Y2xrX2NvbmZpZ1tpXS5jbGtfbmFtZSwgY2xvY2tfbmFtZSkp CisJCQlyZXR1cm4gJm1wLT5jbGtfY29uZmlnW2ldOworCX0KKworCXJldHVybiBOVUxMOworfQor Cit1NjQgZHB1X2ttc19nZXRfY2xrX3JhdGUoc3RydWN0IGRwdV9rbXMgKmRwdV9rbXMsIGNoYXIg KmNsb2NrX25hbWUpCit7CisJc3RydWN0IGRzc19jbGsgKmNsazsKKworCWNsayA9IF9kcHVfa21z X2dldF9jbGsoZHB1X2ttcywgY2xvY2tfbmFtZSk7CisJaWYgKCFjbGspCisJCXJldHVybiAtRUlO VkFMOworCisJcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPmNsayk7Cit9CisKK3N0YXRpYyB2b2lk IGRwdV9rbXNfaGFuZGxlX3Bvd2VyX2V2ZW50KHUzMiBldmVudF90eXBlLCB2b2lkICp1c3IpCit7 CisJc3RydWN0IGRwdV9rbXMgKmRwdV9rbXMgPSB1c3I7CisKKwlpZiAoIWRwdV9rbXMpCisJCXJl dHVybjsKKworCWlmIChldmVudF90eXBlID09IERQVV9QT1dFUl9FVkVOVF9QT1NUX0VOQUJMRSkK KwkJZHB1X3ZiaWZfaW5pdF9tZW10eXBlcyhkcHVfa21zKTsKK30KKworc3RhdGljIGludCBkcHVf a21zX2h3X2luaXQoc3RydWN0IG1zbV9rbXMgKmttcykKK3sKKwlzdHJ1Y3QgZHB1X2ttcyAqZHB1 X2ttczsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OworCXN0cnVjdCBtc21fZHJtX3ByaXZhdGUg KnByaXY7CisJaW50IGksIHJjID0gLUVJTlZBTDsKKworCWlmICgha21zKSB7CisJCURQVV9FUlJP UigiaW52YWxpZCBrbXNcbiIpOworCQlnb3RvIGVuZDsKKwl9CisKKwlkcHVfa21zID0gdG9fZHB1 X2ttcyhrbXMpOworCWRldiA9IGRwdV9rbXMtPmRldjsKKwlpZiAoIWRldikgeworCQlEUFVfRVJS T1IoImludmFsaWQgZGV2aWNlXG4iKTsKKwkJZ290byBlbmQ7CisJfQorCisJcmMgPSBkcHVfZGJn X2luaXQoJmRwdV9rbXMtPnBkZXYtPmRldik7CisJaWYgKHJjKSB7CisJCURSTV9FUlJPUigiZmFp bGVkIHRvIGluaXQgZHB1IGRiZzogJWRcbiIsIHJjKTsKKwkJZ290byBlbmQ7CisJfQorCisJcHJp diA9IGRldi0+ZGV2X3ByaXZhdGU7CisJaWYgKCFwcml2KSB7CisJCURQVV9FUlJPUigiaW52YWxp ZCBwcml2YXRlIGRhdGFcbiIpOworCQlnb3RvIGRiZ19kZXN0cm95OworCX0KKworCWRwdV9rbXMt Pm1taW8gPSBtc21faW9yZW1hcChkcHVfa21zLT5wZGV2LCAibWRwX3BoeXMiLCAibWRwX3BoeXMi KTsKKwlpZiAoSVNfRVJSKGRwdV9rbXMtPm1taW8pKSB7CisJCXJjID0gUFRSX0VSUihkcHVfa21z LT5tbWlvKTsKKwkJRFBVX0VSUk9SKCJtZHAgcmVnaXN0ZXIgbWVtb3J5IG1hcCBmYWlsZWQ6ICVk XG4iLCByYyk7CisJCWRwdV9rbXMtPm1taW8gPSBOVUxMOworCQlnb3RvIGVycm9yOworCX0KKwlE Uk1fREVCVUcoIm1hcHBlZCBkcHUgYWRkcmVzcyBzcGFjZSBAJXBLXG4iLCBkcHVfa21zLT5tbWlv KTsKKwlkcHVfa21zLT5tbWlvX2xlbiA9IGRwdV9pb21hcF9zaXplKGRwdV9rbXMtPnBkZXYsICJt ZHBfcGh5cyIpOworCisJZHB1X2ttcy0+dmJpZltWQklGX1JUXSA9IG1zbV9pb3JlbWFwKGRwdV9r bXMtPnBkZXYsICJ2YmlmX3BoeXMiLAorCQkJCQkJCQkidmJpZl9waHlzIik7CisJaWYgKElTX0VS UihkcHVfa21zLT52YmlmW1ZCSUZfUlRdKSkgeworCQlyYyA9IFBUUl9FUlIoZHB1X2ttcy0+dmJp ZltWQklGX1JUXSk7CisJCURQVV9FUlJPUigidmJpZiByZWdpc3RlciBtZW1vcnkgbWFwIGZhaWxl ZDogJWRcbiIsIHJjKTsKKwkJZHB1X2ttcy0+dmJpZltWQklGX1JUXSA9IE5VTEw7CisJCWdvdG8g ZXJyb3I7CisJfQorCWRwdV9rbXMtPnZiaWZfbGVuW1ZCSUZfUlRdID0gZHB1X2lvbWFwX3NpemUo ZHB1X2ttcy0+cGRldiwgInZiaWZfcGh5cyIpOworCWRwdV9rbXMtPnZiaWZbVkJJRl9OUlRdID0g bXNtX2lvcmVtYXAoZHB1X2ttcy0+cGRldiwgInZiaWZfbnJ0X3BoeXMiLAorCQkJCQkJCQkidmJp Zl9ucnRfcGh5cyIpOworCWlmIChJU19FUlIoZHB1X2ttcy0+dmJpZltWQklGX05SVF0pKSB7CisJ CWRwdV9rbXMtPnZiaWZbVkJJRl9OUlRdID0gTlVMTDsKKwkJRFBVX0RFQlVHKCJWQklGIE5SVCBp cyBub3QgZGVmaW5lZCIpOworCX0gZWxzZSB7CisJCWRwdV9rbXMtPnZiaWZfbGVuW1ZCSUZfTlJU XSA9IGRwdV9pb21hcF9zaXplKGRwdV9rbXMtPnBkZXYsCisJCQkJCQkJICAgICAidmJpZl9ucnRf cGh5cyIpOworCX0KKworCWRwdV9rbXMtPnJlZ19kbWEgPSBtc21faW9yZW1hcChkcHVfa21zLT5w ZGV2LCAicmVnZG1hX3BoeXMiLAorCQkJCQkJCQkicmVnZG1hX3BoeXMiKTsKKwlpZiAoSVNfRVJS KGRwdV9rbXMtPnJlZ19kbWEpKSB7CisJCWRwdV9rbXMtPnJlZ19kbWEgPSBOVUxMOworCQlEUFVf REVCVUcoIlJFR19ETUEgaXMgbm90IGRlZmluZWQiKTsKKwl9IGVsc2UgeworCQlkcHVfa21zLT5y ZWdfZG1hX2xlbiA9IGRwdV9pb21hcF9zaXplKGRwdV9rbXMtPnBkZXYsCisJCQkJCQkgICAgICAi cmVnZG1hX3BoeXMiKTsKKwl9CisKKwlkcHVfa21zLT5jb3JlX2NsaWVudCA9IGRwdV9wb3dlcl9j bGllbnRfY3JlYXRlKCZkcHVfa21zLT5waGFuZGxlLAorCQkJCQkiY29yZSIpOworCWlmIChJU19F UlJfT1JfTlVMTChkcHVfa21zLT5jb3JlX2NsaWVudCkpIHsKKwkJcmMgPSBQVFJfRVJSKGRwdV9r bXMtPmNvcmVfY2xpZW50KTsKKwkJaWYgKCFkcHVfa21zLT5jb3JlX2NsaWVudCkKKwkJCXJjID0g LUVJTlZBTDsKKwkJRFBVX0VSUk9SKCJkcHUgcG93ZXIgY2xpZW50IGNyZWF0ZSBmYWlsZWQ6ICVk XG4iLCByYyk7CisJCWRwdV9rbXMtPmNvcmVfY2xpZW50ID0gTlVMTDsKKwkJZ290byBlcnJvcjsK Kwl9CisKKwlwbV9ydW50aW1lX2dldF9zeW5jKCZkcHVfa21zLT5wZGV2LT5kZXYpOworCisJX2Rw dV9rbXNfY29yZV9od19yZXZfaW5pdChkcHVfa21zKTsKKworCXByX2luZm8oImRwdSBoYXJkd2Fy ZSByZXZpc2lvbjoweCV4XG4iLCBkcHVfa21zLT5jb3JlX3Jldik7CisKKwlkcHVfa21zLT5jYXRh bG9nID0gZHB1X2h3X2NhdGFsb2dfaW5pdChkcHVfa21zLT5jb3JlX3Jldik7CisJaWYgKElTX0VS Ul9PUl9OVUxMKGRwdV9rbXMtPmNhdGFsb2cpKSB7CisJCXJjID0gUFRSX0VSUihkcHVfa21zLT5j YXRhbG9nKTsKKwkJaWYgKCFkcHVfa21zLT5jYXRhbG9nKQorCQkJcmMgPSAtRUlOVkFMOworCQlE UFVfRVJST1IoImNhdGFsb2cgaW5pdCBmYWlsZWQ6ICVkXG4iLCByYyk7CisJCWRwdV9rbXMtPmNh dGFsb2cgPSBOVUxMOworCQlnb3RvIHBvd2VyX2Vycm9yOworCX0KKworCWRwdV9kYmdfaW5pdF9k YmdfYnVzZXMoZHB1X2ttcy0+Y29yZV9yZXYpOworCisJLyoKKwkgKiBOb3cgd2UgbmVlZCB0byBy ZWFkIHRoZSBIVyBjYXRhbG9nIGFuZCBpbml0aWFsaXplIHJlc291cmNlcyBzdWNoIGFzCisJICog Y2xvY2tzLCByZWd1bGF0b3JzLCBHRFNDL01NQUdJQywgaW9yZW1hcCB0aGUgcmVnaXN0ZXIgcmFu Z2VzIGV0YworCSAqLworCXJjID0gX2RwdV9rbXNfbW11X2luaXQoZHB1X2ttcyk7CisJaWYgKHJj KSB7CisJCURQVV9FUlJPUigiZHB1X2ttc19tbXVfaW5pdCBmYWlsZWQ6ICVkXG4iLCByYyk7CisJ CWdvdG8gcG93ZXJfZXJyb3I7CisJfQorCisJcmMgPSBkcHVfcm1faW5pdCgmZHB1X2ttcy0+cm0s IGRwdV9rbXMtPmNhdGFsb2csIGRwdV9rbXMtPm1taW8sCisJCQlkcHVfa21zLT5kZXYpOworCWlm IChyYykgeworCQlEUFVfRVJST1IoInJtIGluaXQgZmFpbGVkOiAlZFxuIiwgcmMpOworCQlnb3Rv IHBvd2VyX2Vycm9yOworCX0KKworCWRwdV9rbXMtPnJtX2luaXQgPSB0cnVlOworCisJZHB1X2tt cy0+aHdfbWRwID0gZHB1X3JtX2dldF9tZHAoJmRwdV9rbXMtPnJtKTsKKwlpZiAoSVNfRVJSX09S X05VTEwoZHB1X2ttcy0+aHdfbWRwKSkgeworCQlyYyA9IFBUUl9FUlIoZHB1X2ttcy0+aHdfbWRw KTsKKwkJaWYgKCFkcHVfa21zLT5od19tZHApCisJCQlyYyA9IC1FSU5WQUw7CisJCURQVV9FUlJP UigiZmFpbGVkIHRvIGdldCBod19tZHA6ICVkXG4iLCByYyk7CisJCWRwdV9rbXMtPmh3X21kcCA9 IE5VTEw7CisJCWdvdG8gcG93ZXJfZXJyb3I7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGRwdV9r bXMtPmNhdGFsb2ctPnZiaWZfY291bnQ7IGkrKykgeworCQl1MzIgdmJpZl9pZHggPSBkcHVfa21z LT5jYXRhbG9nLT52YmlmW2ldLmlkOworCisJCWRwdV9rbXMtPmh3X3ZiaWZbaV0gPSBkcHVfaHdf dmJpZl9pbml0KHZiaWZfaWR4LAorCQkJCWRwdV9rbXMtPnZiaWZbdmJpZl9pZHhdLCBkcHVfa21z LT5jYXRhbG9nKTsKKwkJaWYgKElTX0VSUl9PUl9OVUxMKGRwdV9rbXMtPmh3X3ZiaWZbdmJpZl9p ZHhdKSkgeworCQkJcmMgPSBQVFJfRVJSKGRwdV9rbXMtPmh3X3ZiaWZbdmJpZl9pZHhdKTsKKwkJ CWlmICghZHB1X2ttcy0+aHdfdmJpZlt2YmlmX2lkeF0pCisJCQkJcmMgPSAtRUlOVkFMOworCQkJ RFBVX0VSUk9SKCJmYWlsZWQgdG8gaW5pdCB2YmlmICVkOiAlZFxuIiwgdmJpZl9pZHgsIHJjKTsK KwkJCWRwdV9rbXMtPmh3X3ZiaWZbdmJpZl9pZHhdID0gTlVMTDsKKwkJCWdvdG8gcG93ZXJfZXJy b3I7CisJCX0KKwl9CisKKwlyYyA9IGRwdV9jb3JlX3BlcmZfaW5pdCgmZHB1X2ttcy0+cGVyZiwg ZGV2LCBkcHVfa21zLT5jYXRhbG9nLAorCQkJJmRwdV9rbXMtPnBoYW5kbGUsCisJCQlfZHB1X2tt c19nZXRfY2xrKGRwdV9rbXMsICJjb3JlIikpOworCWlmIChyYykgeworCQlEUFVfRVJST1IoImZh aWxlZCB0byBpbml0IHBlcmYgJWRcbiIsIHJjKTsKKwkJZ290byBwZXJmX2VycjsKKwl9CisKKwlk cHVfa21zLT5od19pbnRyID0gZHB1X2h3X2ludHJfaW5pdChkcHVfa21zLT5tbWlvLCBkcHVfa21z LT5jYXRhbG9nKTsKKwlpZiAoSVNfRVJSX09SX05VTEwoZHB1X2ttcy0+aHdfaW50cikpIHsKKwkJ cmMgPSBQVFJfRVJSKGRwdV9rbXMtPmh3X2ludHIpOworCQlEUFVfRVJST1IoImh3X2ludHIgaW5p dCBmYWlsZWQ6ICVkXG4iLCByYyk7CisJCWRwdV9rbXMtPmh3X2ludHIgPSBOVUxMOworCQlnb3Rv IGh3X2ludHJfaW5pdF9lcnI7CisJfQorCisJLyoKKwkgKiBfZHB1X2ttc19kcm1fb2JqX2luaXQg c2hvdWxkIGNyZWF0ZSB0aGUgRFJNIHJlbGF0ZWQgb2JqZWN0cworCSAqIGkuZS4gQ1JUQ3MsIHBs YW5lcywgZW5jb2RlcnMsIGNvbm5lY3RvcnMgYW5kIHNvIGZvcnRoCisJICovCisJcmMgPSBfZHB1 X2ttc19kcm1fb2JqX2luaXQoZHB1X2ttcyk7CisJaWYgKHJjKSB7CisJCURQVV9FUlJPUigibW9k ZXNldCBpbml0IGZhaWxlZDogJWRcbiIsIHJjKTsKKwkJZ290byBkcm1fb2JqX2luaXRfZXJyOwor CX0KKworCWRldi0+bW9kZV9jb25maWcubWluX3dpZHRoID0gMDsKKwlkZXYtPm1vZGVfY29uZmln Lm1pbl9oZWlnaHQgPSAwOworCisJLyoKKwkgKiBtYXggY3J0YyB3aWR0aCBpcyBlcXVhbCB0byB0 aGUgbWF4IG1peGVyIHdpZHRoICogMiBhbmQgbWF4IGhlaWdodCBpcworCSAqIGlzIDRLCisJICov CisJZGV2LT5tb2RlX2NvbmZpZy5tYXhfd2lkdGggPQorCQkJZHB1X2ttcy0+Y2F0YWxvZy0+Y2Fw cy0+bWF4X21peGVyX3dpZHRoICogMjsKKwlkZXYtPm1vZGVfY29uZmlnLm1heF9oZWlnaHQgPSA0 MDk2OworCisJLyoKKwkgKiBTdXBwb3J0IGZvcm1hdCBtb2RpZmllcnMgZm9yIGNvbXByZXNzaW9u IGV0Yy4KKwkgKi8KKwlkZXYtPm1vZGVfY29uZmlnLmFsbG93X2ZiX21vZGlmaWVycyA9IHRydWU7 CisKKwkvKgorCSAqIEhhbmRsZSAocmUpaW5pdGlhbGl6YXRpb25zIGR1cmluZyBwb3dlciBlbmFi bGUKKwkgKi8KKwlkcHVfa21zX2hhbmRsZV9wb3dlcl9ldmVudChEUFVfUE9XRVJfRVZFTlRfUE9T VF9FTkFCTEUsIGRwdV9rbXMpOworCWRwdV9rbXMtPnBvd2VyX2V2ZW50ID0gZHB1X3Bvd2VyX2hh bmRsZV9yZWdpc3Rlcl9ldmVudCgKKwkJCSZkcHVfa21zLT5waGFuZGxlLAorCQkJRFBVX1BPV0VS X0VWRU5UX1BPU1RfRU5BQkxFLAorCQkJZHB1X2ttc19oYW5kbGVfcG93ZXJfZXZlbnQsIGRwdV9r bXMsICJrbXMiKTsKKworCXBtX3J1bnRpbWVfcHV0X3N5bmMoJmRwdV9rbXMtPnBkZXYtPmRldik7 CisKKwlyZXR1cm4gMDsKKworZHJtX29ial9pbml0X2VycjoKKwlkcHVfY29yZV9wZXJmX2Rlc3Ry b3koJmRwdV9rbXMtPnBlcmYpOworaHdfaW50cl9pbml0X2VycjoKK3BlcmZfZXJyOgorcG93ZXJf ZXJyb3I6CisJcG1fcnVudGltZV9wdXRfc3luYygmZHB1X2ttcy0+cGRldi0+ZGV2KTsKK2Vycm9y OgorCV9kcHVfa21zX2h3X2Rlc3Ryb3koZHB1X2ttcyk7CitkYmdfZGVzdHJveToKKwlkcHVfZGJn X2Rlc3Ryb3koKTsKK2VuZDoKKwlyZXR1cm4gcmM7Cit9CisKK3N0cnVjdCBtc21fa21zICpkcHVf a21zX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXNtX2RybV9wcml2 YXRlICpwcml2OworCXN0cnVjdCBkcHVfa21zICpkcHVfa21zOworCWludCBpcnE7CisKKwlpZiAo IWRldiB8fCAhZGV2LT5kZXZfcHJpdmF0ZSkgeworCQlEUFVfRVJST1IoImRybSBkZXZpY2Ugbm9k ZSBpbnZhbGlkXG4iKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQorCisJcHJpdiA9 IGRldi0+ZGV2X3ByaXZhdGU7CisJZHB1X2ttcyA9IHRvX2RwdV9rbXMocHJpdi0+a21zKTsKKwor CWlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKGRwdV9rbXMtPnBkZXYtPmRldi5vZl9ub2RlLCAw KTsKKwlpZiAoaXJxIDwgMCkgeworCQlEUFVfRVJST1IoImZhaWxlZCB0byBnZXQgaXJxOiAlZFxu IiwgaXJxKTsKKwkJcmV0dXJuIEVSUl9QVFIoaXJxKTsKKwl9CisJZHB1X2ttcy0+YmFzZS5pcnEg PSBpcnE7CisKKwlyZXR1cm4gJmRwdV9rbXMtPmJhc2U7Cit9CisKK3N0YXRpYyBpbnQgZHB1X2Jp bmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsIHZvaWQgKmRhdGEp Cit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRkZXYgPSBkZXZfZ2V0X2RydmRhdGEobWFzdGVyKTsK KwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7 CisJc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdiA9IGRkZXYtPmRldl9wcml2YXRlOworCXN0 cnVjdCBkcHVfa21zICpkcHVfa21zOworCXN0cnVjdCBkc3NfbW9kdWxlX3Bvd2VyICptcDsKKwlp bnQgcmV0ID0gMDsKKworCWRwdV9rbXMgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9m KCpkcHVfa21zKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkcHVfa21zKQorCQlyZXR1cm4gLUVOT01F TTsKKworCW1wID0gJmRwdV9rbXMtPm1wOworCXJldCA9IG1zbV9kc3NfcGFyc2VfY2xvY2socGRl diwgbXApOworCWlmIChyZXQpIHsKKwkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gcGFyc2UgY2xvY2tz LCByZXQ9JWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gbXNtX2Rzc19n ZXRfY2xrKCZwZGV2LT5kZXYsIG1wLT5jbGtfY29uZmlnLCBtcC0+bnVtX2Nsayk7CisJaWYgKHJl dCkgeworCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgY2xvY2tzLCByZXQ9JWRcbiIsIHJldCk7CisJ CWdvdG8gY2xrX2dldF9lcnJvcjsKKwl9CisKKwlyZXQgPSBtc21fZHNzX2Nsa19zZXRfcmF0ZSht cC0+Y2xrX2NvbmZpZywgbXAtPm51bV9jbGspOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJmYWls ZWQgdG8gc2V0IGNsb2NrIHJhdGUsIHJldD0lZFxuIiwgcmV0KTsKKwkJZ290byBjbGtfcmF0ZV9l cnJvcjsKKwl9CisKKwlkcHVfcG93ZXJfcmVzb3VyY2VfaW5pdChwZGV2LCAmZHB1X2ttcy0+cGhh bmRsZSk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkcHVfa21zKTsKKworCW1zbV9r bXNfaW5pdCgmZHB1X2ttcy0+YmFzZSwgJmttc19mdW5jcyk7CisJZHB1X2ttcy0+ZGV2ID0gZGRl djsKKwlkcHVfa21zLT5wZGV2ID0gcGRldjsKKworCXBtX3J1bnRpbWVfZW5hYmxlKCZwZGV2LT5k ZXYpOworCWRwdV9rbXMtPnJwbV9lbmFibGVkID0gdHJ1ZTsKKworCXByaXYtPmttcyA9ICZkcHVf a21zLT5iYXNlOworCXJldHVybiByZXQ7CisKK2Nsa19yYXRlX2Vycm9yOgorCW1zbV9kc3NfcHV0 X2NsayhtcC0+Y2xrX2NvbmZpZywgbXAtPm51bV9jbGspOworY2xrX2dldF9lcnJvcjoKKwlkZXZt X2tmcmVlKCZwZGV2LT5kZXYsIG1wLT5jbGtfY29uZmlnKTsKKwltcC0+bnVtX2NsayA9IDA7CisJ cmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZHB1X3VuYmluZChzdHJ1Y3QgZGV2aWNlICpk ZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3Rlciwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IGRwdV9r bXMgKmRwdV9rbXMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgZHNzX21v ZHVsZV9wb3dlciAqbXAgPSAmZHB1X2ttcy0+bXA7CisKKwlkcHVfcG93ZXJfcmVzb3VyY2VfZGVp bml0KHBkZXYsICZkcHVfa21zLT5waGFuZGxlKTsKKwltc21fZHNzX3B1dF9jbGsobXAtPmNsa19j b25maWcsIG1wLT5udW1fY2xrKTsKKwlkZXZtX2tmcmVlKCZwZGV2LT5kZXYsIG1wLT5jbGtfY29u ZmlnKTsKKwltcC0+bnVtX2NsayA9IDA7CisKKwlpZiAoZHB1X2ttcy0+cnBtX2VuYWJsZWQpCisJ CXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVj dCBjb21wb25lbnRfb3BzIGRwdV9vcHMgPSB7CisJLmJpbmQgICA9IGRwdV9iaW5kLAorCS51bmJp bmQgPSBkcHVfdW5iaW5kLAorfTsKKworc3RhdGljIGludCBkcHVfZGV2X3Byb2JlKHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIGNvbXBvbmVudF9hZGQoJnBkZXYtPmRl diwgJmRwdV9vcHMpOworfQorCitzdGF0aWMgaW50IGRwdV9kZXZfcmVtb3ZlKHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJY29tcG9uZW50X2RlbCgmcGRldi0+ZGV2LCAmZHB1X29w cyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHB1X3J1bnRpbWVfc3VzcGVuZChzdHJ1 Y3QgZGV2aWNlICpkZXYpCit7CisJaW50IHJjID0gLTE7CisJc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBkcHVfa21zICpkcHVf a21zID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRk ZXY7CisJc3RydWN0IGRzc19tb2R1bGVfcG93ZXIgKm1wID0gJmRwdV9rbXMtPm1wOworCisJZGRl diA9IGRwdV9rbXMtPmRldjsKKwlpZiAoIWRkZXYpIHsKKwkJRFBVX0VSUk9SKCJpbnZhbGlkIGRy bV9kZXZpY2VcbiIpOworCQlnb3RvIGV4aXQ7CisJfQorCisJcmMgPSBkcHVfcG93ZXJfcmVzb3Vy Y2VfZW5hYmxlKCZkcHVfa21zLT5waGFuZGxlLAorCQkJZHB1X2ttcy0+Y29yZV9jbGllbnQsIGZh bHNlKTsKKwlpZiAocmMpCisJCURQVV9FUlJPUigicmVzb3VyY2UgZGlzYWJsZSBmYWlsZWQ6ICVk XG4iLCByYyk7CisKKwlyYyA9IG1zbV9kc3NfZW5hYmxlX2NsayhtcC0+Y2xrX2NvbmZpZywgbXAt Pm51bV9jbGssIGZhbHNlKTsKKwlpZiAocmMpCisJCURQVV9FUlJPUigiY2xvY2sgZGlzYWJsZSBm YWlsZWQgcmM6JWRcbiIsIHJjKTsKKworZXhpdDoKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBp bnQgZHB1X3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgcmMgPSAt MTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRl dik7CisJc3RydWN0IGRwdV9rbXMgKmRwdV9rbXMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2 KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldjsKKwlzdHJ1Y3QgZHNzX21vZHVsZV9wb3dlciAq bXAgPSAmZHB1X2ttcy0+bXA7CisKKwlkZGV2ID0gZHB1X2ttcy0+ZGV2OworCWlmICghZGRldikg eworCQlEUFVfRVJST1IoImludmFsaWQgZHJtX2RldmljZVxuIik7CisJCWdvdG8gZXhpdDsKKwl9 CisKKwlyYyA9IG1zbV9kc3NfZW5hYmxlX2NsayhtcC0+Y2xrX2NvbmZpZywgbXAtPm51bV9jbGss IHRydWUpOworCWlmIChyYykgeworCQlEUFVfRVJST1IoImNsb2NrIGVuYWJsZSBmYWlsZWQgcmM6 JWRcbiIsIHJjKTsKKwkJZ290byBleGl0OworCX0KKworCXJjID0gZHB1X3Bvd2VyX3Jlc291cmNl X2VuYWJsZSgmZHB1X2ttcy0+cGhhbmRsZSwKKwkJCWRwdV9rbXMtPmNvcmVfY2xpZW50LCB0cnVl KTsKKwlpZiAocmMpCisJCURQVV9FUlJPUigicmVzb3VyY2UgZW5hYmxlIGZhaWxlZDogJWRcbiIs IHJjKTsKKworZXhpdDoKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2 X3BtX29wcyBkcHVfcG1fb3BzID0geworCVNFVF9SVU5USU1FX1BNX09QUyhkcHVfcnVudGltZV9z dXNwZW5kLCBkcHVfcnVudGltZV9yZXN1bWUsIE5VTEwpCit9OworCitzdGF0aWMgY29uc3Qgc3Ry dWN0IG9mX2RldmljZV9pZCBkcHVfZHRfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gInFj b20sZHB1IiwgfSwKKwl7fQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGRwdV9kdF9tYXRj aCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGRwdV9kcml2ZXIgPSB7CisJLnBy b2JlID0gZHB1X2Rldl9wcm9iZSwKKwkucmVtb3ZlID0gZHB1X2Rldl9yZW1vdmUsCisJLmRyaXZl ciA9IHsKKwkJLm5hbWUgPSAibXNtX2RwdSIsCisJCS5vZl9tYXRjaF90YWJsZSA9IGRwdV9kdF9t YXRjaCwKKwkJLnBtID0gJmRwdV9wbV9vcHMsCisJfSwKK307CisKK3ZvaWQgX19pbml0IG1zbV9k cHVfcmVnaXN0ZXIodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmRwdV9kcml2 ZXIpOworfQorCit2b2lkIF9fZXhpdCBtc21fZHB1X3VucmVnaXN0ZXIodm9pZCkKK3sKKwlwbGF0 Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZHB1X2RyaXZlcik7Cit9CmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21zLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvZHB1MS9kcHVfa21zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwLi40MDdjMWVkMjdmZTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvZHB1MS9kcHVfa21zLmgKQEAgLTAsMCArMSw0MDIgQEAKKy8qCisgKiBDb3B5cmlnaHQg KGMpIDIwMTUtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVkIEhhdAorICogQXV0aG9yOiBSb2IgQ2xhcmsgPHJv YmRjbGFya0BnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxp c2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwg YnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9y ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbS4g IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaWZu ZGVmIF9fRFBVX0tNU19IX18KKyNkZWZpbmUgX19EUFVfS01TX0hfXworCisjaW5jbHVkZSAibXNt X2Rydi5oIgorI2luY2x1ZGUgIm1zbV9rbXMuaCIKKyNpbmNsdWRlICJtc21fbW11LmgiCisjaW5j bHVkZSAibXNtX2dlbS5oIgorI2luY2x1ZGUgImRwdV9kYmcuaCIKKyNpbmNsdWRlICJkcHVfaHdf Y2F0YWxvZy5oIgorI2luY2x1ZGUgImRwdV9od19jdGwuaCIKKyNpbmNsdWRlICJkcHVfaHdfbG0u aCIKKyNpbmNsdWRlICJkcHVfaHdfaW50ZXJydXB0cy5oIgorI2luY2x1ZGUgImRwdV9od190b3Au aCIKKyNpbmNsdWRlICJkcHVfcm0uaCIKKyNpbmNsdWRlICJkcHVfcG93ZXJfaGFuZGxlLmgiCisj aW5jbHVkZSAiZHB1X2lycS5oIgorI2luY2x1ZGUgImRwdV9jb3JlX3BlcmYuaCIKKworI2RlZmlu ZSBEUk1JRCh4KSAoKHgpID8gKHgpLT5iYXNlLmlkIDogLTEpCisKKy8qKgorICogRFBVX0RFQlVH IC0gbWFjcm8gZm9yIGttcy9wbGFuZS9jcnRjL2VuY29kZXIvY29ubmVjdG9yIGxvZ3MKKyAqIEBm bXQ6IFBvaW50ZXIgdG8gZm9ybWF0IHN0cmluZworICovCisjZGVmaW5lIERQVV9ERUJVRyhmbXQs IC4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJ ZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKwkJaWYgKHVubGlrZWx5KGRybV9kZWJ1ZyAmIERSTV9VVF9LTVMpKSAgICAg ICAgICAgICAgICAgICAgICBcCisJCQlEUk1fREVCVUcoZm10LCAjI19fVkFfQVJHU19fKTsgXAor CQllbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKwkJCXByX2RlYnVnKGZtdCwgIyNfX1ZBX0FSR1NfXyk7ICAgICAgICAgICAgICAgICAg ICAgIFwKKwl9IHdoaWxlICgwKQorCisvKioKKyAqIERQVV9ERUJVR19EUklWRVIgLSBtYWNybyBm b3IgaGFyZHdhcmUgZHJpdmVyIGxvZ2dpbmcKKyAqIEBmbXQ6IFBvaW50ZXIgdG8gZm9ybWF0IHN0 cmluZworICovCisjZGVmaW5lIERQVV9ERUJVR19EUklWRVIoZm10LCAuLi4pICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJZG8geyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJaWYgKHVubGlr ZWx5KGRybV9kZWJ1ZyAmIERSTV9VVF9EUklWRVIpKSAgICAgICAgICAgICAgICAgICBcCisJCQlE Uk1fRVJST1IoZm10LCAjI19fVkFfQVJHU19fKTsgXAorCQllbHNlICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCXByX2RlYnVnKGZtdCwg IyNfX1ZBX0FSR1NfXyk7ICAgICAgICAgICAgICAgICAgICAgIFwKKwl9IHdoaWxlICgwKQorCisj ZGVmaW5lIERQVV9FUlJPUihmbXQsIC4uLikgcHJfZXJyKCJbZHB1IGVycm9yXSIgZm10LCAjI19f VkFfQVJHU19fKQorCisvKioKKyAqIGt0aW1lX2NvbXBhcmVfc2FmZSAtIGNvbXBhcmUgdHdvIGt0 aW1lIHN0cnVjdHVyZXMKKyAqCVRoaXMgbWFjcm8gaXMgc2ltaWxhciB0byB0aGUgc3RhbmRhcmQg a3RpbWVfY29tcGFyZSgpIGZ1bmN0aW9uLCBidXQKKyAqCWF0dGVtcHRzIHRvIGFsc28gaGFuZGxl IGt0aW1lIG92ZXJmbG93cy4KKyAqIEBBOiBGaXJzdCBrdGltZSB2YWx1ZQorICogQEI6IFNlY29u ZCBrdGltZSB2YWx1ZQorICogUmV0dXJuczogLTEgaWYgQSA8IEIsIDAgaWYgQSA9PSBCLCAxIGlm IEEgPiBCCisgKi8KKyNkZWZpbmUga3RpbWVfY29tcGFyZV9zYWZlKEEsIEIpIFwKKwlrdGltZV9j b21wYXJlKGt0aW1lX3N1YigoQSksIChCKSksIGt0aW1lX3NldCgwLCAwKSkKKworI2RlZmluZSBE UFVfTkFNRV9TSVpFICAxMgorCisvKiB0aW1lb3V0IGluIGZyYW1lcyB3YWl0aW5nIGZvciBmcmFt ZSBkb25lICovCisjZGVmaW5lIERQVV9GUkFNRV9ET05FX1RJTUVPVVQJNjAKKworLyoKKyAqIHN0 cnVjdCBkcHVfaXJxX2NhbGxiYWNrIC0gSVJRIGNhbGxiYWNrIGhhbmRsZXJzCisgKiBAbGlzdDog bGlzdCB0byBjYWxsYmFjaworICogQGZ1bmM6IGludHIgaGFuZGxlcgorICogQGFyZzogYXJndW1l bnQgZm9yIHRoZSBoYW5kbGVyCisgKi8KK3N0cnVjdCBkcHVfaXJxX2NhbGxiYWNrIHsKKwlzdHJ1 Y3QgbGlzdF9oZWFkIGxpc3Q7CisJdm9pZCAoKmZ1bmMpKHZvaWQgKmFyZywgaW50IGlycV9pZHgp OworCXZvaWQgKmFyZzsKK307CisKKy8qKgorICogc3RydWN0IGRwdV9pcnE6IElSUSBzdHJ1Y3R1 cmUgY29udGFpbnMgY2FsbGJhY2sgcmVnaXN0cmF0aW9uIGluZm8KKyAqIEB0b3RhbF9pcnE6ICAg IHRvdGFsIG51bWJlciBvZiBpcnFfaWR4IG9idGFpbmVkIGZyb20gSFcgaW50ZXJydXB0cyBtYXBw aW5nCisgKiBAaXJxX2NiX3RibDogICBhcnJheSBvZiBJUlEgY2FsbGJhY2tzIHNldHRpbmcKKyAq IEBlbmFibGVfY291bnRzIGFycmF5IG9mIElSUSBlbmFibGUgY291bnRzCisgKiBAY2JfbG9jazog ICAgICBjYWxsYmFjayBsb2NrCisgKiBAZGVidWdmc19maWxlOiBkZWJ1Z2ZzIGZpbGUgZm9yIGly cSBzdGF0aXN0aWNzCisgKi8KK3N0cnVjdCBkcHVfaXJxIHsKKwl1MzIgdG90YWxfaXJxczsKKwlz dHJ1Y3QgbGlzdF9oZWFkICppcnFfY2JfdGJsOworCWF0b21pY190ICplbmFibGVfY291bnRzOwor CWF0b21pY190ICppcnFfY291bnRzOworCXNwaW5sb2NrX3QgY2JfbG9jazsKKwlzdHJ1Y3QgZGVu dHJ5ICpkZWJ1Z2ZzX2ZpbGU7Cit9OworCitzdHJ1Y3QgZHB1X2ttcyB7CisJc3RydWN0IG1zbV9r bXMgYmFzZTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OworCWludCBjb3JlX3JldjsKKwlzdHJ1 Y3QgZHB1X21kc3NfY2ZnICpjYXRhbG9nOworCisJc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUgcGhh bmRsZTsKKwlzdHJ1Y3QgZHB1X3Bvd2VyX2NsaWVudCAqY29yZV9jbGllbnQ7CisJc3RydWN0IGRw dV9wb3dlcl9ldmVudCAqcG93ZXJfZXZlbnQ7CisKKwkvKiBkaXJlY3RvcnkgZW50cnkgZm9yIGRl YnVnZnMgKi8KKwlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3Jvb3Q7CisJc3RydWN0IGRlbnRyeSAq ZGVidWdmc19kYW5nZXI7CisJc3RydWN0IGRlbnRyeSAqZGVidWdmc192YmlmOworCisJLyogaW8v cmVnaXN0ZXIgc3BhY2VzOiAqLworCXZvaWQgX19pb21lbSAqbW1pbywgKnZiaWZbVkJJRl9NQVhd LCAqcmVnX2RtYTsKKwl1bnNpZ25lZCBsb25nIG1taW9fbGVuLCB2YmlmX2xlbltWQklGX01BWF0s IHJlZ19kbWFfbGVuOworCisJc3RydWN0IHJlZ3VsYXRvciAqdmRkOworCXN0cnVjdCByZWd1bGF0 b3IgKm1tYWdpYzsKKwlzdHJ1Y3QgcmVndWxhdG9yICp2ZW51czsKKworCXN0cnVjdCBkcHVfaHdf aW50ciAqaHdfaW50cjsKKwlzdHJ1Y3QgZHB1X2lycSBpcnFfb2JqOworCisJc3RydWN0IGRwdV9j b3JlX3BlcmYgcGVyZjsKKworCS8qIHNhdmVkIGF0b21pYyBzdGF0ZSBkdXJpbmcgc3lzdGVtIHN1 c3BlbmQgKi8KKwlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3VzcGVuZF9zdGF0ZTsKKwlib29s IHN1c3BlbmRfYmxvY2s7CisKKwlzdHJ1Y3QgZHB1X3JtIHJtOworCWJvb2wgcm1faW5pdDsKKwor CXN0cnVjdCBkcHVfaHdfdmJpZiAqaHdfdmJpZltWQklGX01BWF07CisJc3RydWN0IGRwdV9od19t ZHAgKmh3X21kcDsKKworCWJvb2wgaGFzX2Rhbmdlcl9jdHJsOworCisJc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldjsKKwlib29sIHJwbV9lbmFibGVkOworCXN0cnVjdCBkc3NfbW9kdWxlX3Bv d2VyIG1wOworfTsKKworc3RydWN0IHZzeW5jX2luZm8geworCXUzMiBmcmFtZV9jb3VudDsKKwl1 MzIgbGluZV9jb3VudDsKK307CisKKyNkZWZpbmUgdG9fZHB1X2ttcyh4KSBjb250YWluZXJfb2Yo eCwgc3RydWN0IGRwdV9rbXMsIGJhc2UpCisKKy8qIGdldCBzdHJ1Y3QgbXNtX2ttcyAqIGZyb20g ZHJtX2RldmljZSAqICovCisjZGVmaW5lIGRkZXZfdG9fbXNtX2ttcyhEKSAoKEQpICYmIChEKS0+ ZGV2X3ByaXZhdGUgPyBcCisJCSgoc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqKSgoRCktPmRldl9w cml2YXRlKSktPmttcyA6IE5VTEwpCisKKy8qKgorICogZHB1X2ttc19pc19zdXNwZW5kX3N0YXRl IC0gd2hldGhlciBvciBub3QgdGhlIHN5c3RlbSBpcyBwbSBzdXNwZW5kZWQKKyAqIEBkZXY6IFBv aW50ZXIgdG8gZHJtIGRldmljZQorICogUmV0dXJuOiBTdXNwZW5kIHN0YXR1cworICovCitzdGF0 aWMgaW5saW5lIGJvb2wgZHB1X2ttc19pc19zdXNwZW5kX3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYpCit7CisJaWYgKCFkZGV2X3RvX21zbV9rbXMoZGV2KSkKKwkJcmV0dXJuIGZhbHNlOwor CisJcmV0dXJuIHRvX2RwdV9rbXMoZGRldl90b19tc21fa21zKGRldikpLT5zdXNwZW5kX3N0YXRl ICE9IE5VTEw7Cit9CisKKy8qKgorICogZHB1X2ttc19pc19zdXNwZW5kX2Jsb2NrZWQgLSB3aGV0 aGVyIG9yIG5vdCBjb21taXRzIGFyZSBibG9ja2VkIGR1ZSB0byBwbQorICoJCQkJc3VzcGVuZCBz dGF0dXMKKyAqIEBkZXY6IFBvaW50ZXIgdG8gZHJtIGRldmljZQorICogUmV0dXJuOiBUcnVlIGlm IGNvbW1pdHMgc2hvdWxkIGJlIHJlamVjdGVkIGR1ZSB0byBwbSBzdXNwZW5kCisgKi8KK3N0YXRp YyBpbmxpbmUgYm9vbCBkcHVfa21zX2lzX3N1c3BlbmRfYmxvY2tlZChzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2KQoreworCWlmICghZHB1X2ttc19pc19zdXNwZW5kX3N0YXRlKGRldikpCisJCXJldHVy biBmYWxzZTsKKworCXJldHVybiB0b19kcHVfa21zKGRkZXZfdG9fbXNtX2ttcyhkZXYpKS0+c3Vz cGVuZF9ibG9jazsKK30KKworLyoqCisgKiBEZWJ1Z2ZzIGZ1bmN0aW9ucyAtIGV4dHJhIGhlbHBl ciBmdW5jdGlvbnMgZm9yIGRlYnVnZnMgc3VwcG9ydAorICoKKyAqIE1haW4gZGVidWdmcyBkb2N1 bWVudGF0aW9uIGlzIGxvY2F0ZWQgYXQsCisgKgorICogRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVt cy9kZWJ1Z2ZzLnR4dAorICoKKyAqIEBkcHVfZGVidWdmc19zZXR1cF9yZWdzZXQzMjogSW5pdGlh bGl6ZSBkYXRhIGZvciBkcHVfZGVidWdmc19jcmVhdGVfcmVnc2V0MzIKKyAqIEBkcHVfZGVidWdm c19jcmVhdGVfcmVnc2V0MzI6IENyZWF0ZSAzMi1iaXQgcmVnaXN0ZXIgZHVtcCBmaWxlCisgKiBA ZHB1X2RlYnVnZnNfZ2V0X3Jvb3Q6IEdldCByb290IGRlbnRyeSBmb3IgRFBVX0tNUydzIGRlYnVn ZnMgbm9kZQorICovCisKKy8qKgorICogQ29tcGFuaW9uIHN0cnVjdHVyZSBmb3IgZHB1X2RlYnVn ZnNfY3JlYXRlX3JlZ3NldDMyLiBEbyBub3QgaW5pdGlhbGl6ZSB0aGUKKyAqIG1lbWJlcnMgb2Yg dGhpcyBzdHJ1Y3R1cmUgZXhwbGljaXRseTsgdXNlIGRwdV9kZWJ1Z2ZzX3NldHVwX3JlZ3NldDMy IGluc3RlYWQuCisgKi8KK3N0cnVjdCBkcHVfZGVidWdmc19yZWdzZXQzMiB7CisJdWludDMyX3Qg b2Zmc2V0OworCXVpbnQzMl90IGJsa19sZW47CisJc3RydWN0IGRwdV9rbXMgKmRwdV9rbXM7Cit9 OworCisvKioKKyAqIGRwdV9kZWJ1Z2ZzX3NldHVwX3JlZ3NldDMyIC0gSW5pdGlhbGl6ZSByZWdp c3RlciBibG9jayBkZWZpbml0aW9uIGZvciBkZWJ1Z2ZzCisgKiBUaGlzIGZ1bmN0aW9uIGlzIG1l YW50IHRvIGluaXRpYWxpemUgZHB1X2RlYnVnZnNfcmVnc2V0MzIgc3RydWN0dXJlcyBmb3IgdXNl CisgKiB3aXRoIGRwdV9kZWJ1Z2ZzX2NyZWF0ZV9yZWdzZXQzMi4KKyAqIEByZWdzZXQ6IG9wYXF1 ZSByZWdpc3RlciBkZWZpbml0aW9uIHN0cnVjdHVyZQorICogQG9mZnNldDogc3ViLWJsb2NrIG9m ZnNldAorICogQGxlbmd0aDogc3ViLWJsb2NrIGxlbmd0aCwgaW4gYnl0ZXMKKyAqIEBkcHVfa21z OiBwb2ludGVyIHRvIGRwdSBrbXMgc3RydWN0dXJlCisgKi8KK3ZvaWQgZHB1X2RlYnVnZnNfc2V0 dXBfcmVnc2V0MzIoc3RydWN0IGRwdV9kZWJ1Z2ZzX3JlZ3NldDMyICpyZWdzZXQsCisJCXVpbnQz Ml90IG9mZnNldCwgdWludDMyX3QgbGVuZ3RoLCBzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttcyk7CisK Ky8qKgorICogZHB1X2RlYnVnZnNfY3JlYXRlX3JlZ3NldDMyIC0gQ3JlYXRlIHJlZ2lzdGVyIHJl YWQgYmFjayBmaWxlIGZvciBkZWJ1Z2ZzCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBhbG1vc3Qg aWRlbnRpY2FsIHRvIHRoZSBzdGFuZGFyZCBkZWJ1Z2ZzX2NyZWF0ZV9yZWdzZXQzMigpCisgKiBm dW5jdGlvbiwgd2l0aCB0aGUgbWFpbiBkaWZmZXJlbmNlIGJlaW5nIHRoYXQgYSBsaXN0IG9mIHJl Z2lzdGVyCisgKiBuYW1lcy9vZmZzZXRzIGRvIG5vdCBuZWVkIHRvIGJlIHByb3ZpZGVkLiBUaGUg J3JlYWQnIGZ1bmN0aW9uIHNpbXBseSBvdXRwdXRzCisgKiBzZXF1ZW50aWFsIHJlZ2lzdGVyIHZh bHVlcyBvdmVyIGEgc3BlY2lmaWVkIHJhbmdlLgorICoKKyAqIFNpbWlsYXIgdG8gdGhlIHJlbGF0 ZWQgZGVidWdmc19jcmVhdGVfcmVnc2V0MzIgQVBJLCB0aGUgc3RydWN0dXJlIHBvaW50ZWQgdG8K KyAqIGJ5IHJlZ3NldCBuZWVkcyB0byBwZXJzaXN0IGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIGNy ZWF0ZWQgZmlsZS4gVGhlIGNhbGxpbmcKKyAqIGNvZGUgaXMgcmVzcG9uc2libGUgZm9yIGluaXRp YWxpemF0aW9uL21hbmFnZW1lbnQgb2YgdGhpcyBzdHJ1Y3R1cmUuCisgKgorICogVGhlIHN0cnVj dHVyZSBwb2ludGVkIHRvIGJ5IHJlZ3NldCBpcyBtZWFudCB0byBiZSBvcGFxdWUuIFBsZWFzZSB1 c2UKKyAqIGRwdV9kZWJ1Z2ZzX3NldHVwX3JlZ3NldDMyIHRvIGluaXRpYWxpemUgaXQuCisgKgor ICogQG5hbWU6ICAgRmlsZSBuYW1lIHdpdGhpbiBkZWJ1Z2ZzCisgKiBAbW9kZTogICBGaWxlIG1v ZGUgd2l0aGluIGRlYnVnZnMKKyAqIEBwYXJlbnQ6IFBhcmVudCBkaXJlY3RvcnkgZW50cnkgd2l0 aGluIGRlYnVnZnMsIGNhbiBiZSBOVUxMCisgKiBAcmVnc2V0OiBQb2ludGVyIHRvIHBlcnNpc3Rl bnQgcmVnaXN0ZXIgYmxvY2sgZGVmaW5pdGlvbgorICoKKyAqIFJldHVybjogZGVudHJ5IHBvaW50 ZXIgZm9yIG5ld2x5IGNyZWF0ZWQgZmlsZSwgdXNlIGVpdGhlciBkZWJ1Z2ZzX3JlbW92ZSgpCisg KiAgICAgICAgIG9yIGRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZSgpIChvbiBhIHBhcmVudCBkaXJl Y3RvcnkpIHRvIHJlbW92ZSB0aGUKKyAqICAgICAgICAgZmlsZQorICovCit2b2lkICpkcHVfZGVi dWdmc19jcmVhdGVfcmVnc2V0MzIoY29uc3QgY2hhciAqbmFtZSwgdW1vZGVfdCBtb2RlLAorCQl2 b2lkICpwYXJlbnQsIHN0cnVjdCBkcHVfZGVidWdmc19yZWdzZXQzMiAqcmVnc2V0KTsKKworLyoq CisgKiBkcHVfZGVidWdmc19nZXRfcm9vdCAtIFJldHVybiByb290IGRpcmVjdG9yeSBlbnRyeSBm b3IgS01TJ3MgZGVidWdmcworICoKKyAqIFRoZSByZXR1cm4gdmFsdWUgc2hvdWxkIGJlIHBhc3Nl ZCBhcyB0aGUgJ3BhcmVudCcgYXJndW1lbnQgdG8gc3Vic2VxdWVudAorICogZGVidWdmcyBjcmVh dGUgY2FsbHMuCisgKgorICogQGRwdV9rbXM6IFBvaW50ZXIgdG8gRFBVJ3MgS01TIHN0cnVjdHVy ZQorICoKKyAqIFJldHVybjogZGVudHJ5IHBvaW50ZXIgZm9yIERQVSdzIGRlYnVnZnMgbG9jYXRp b24KKyAqLwordm9pZCAqZHB1X2RlYnVnZnNfZ2V0X3Jvb3Qoc3RydWN0IGRwdV9rbXMgKmRwdV9r bXMpOworCisvKioKKyAqIERQVSBpbmZvIG1hbmFnZW1lbnQgZnVuY3Rpb25zCisgKiBUaGVzZSBm dW5jdGlvbnMvZGVmaW5pdGlvbnMgYWxsb3cgZm9yIGJ1aWxkaW5nIHVwIGEgJ2RwdV9pbmZvJyBz dHJ1Y3R1cmUKKyAqIGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgImtleT12YWx1ZVxuIiBlbnRyaWVz LgorICovCisjZGVmaW5lIERQVV9LTVNfSU5GT19NQVhfU0laRQk0MDk2CisKKy8qKgorICogc3Ry dWN0IGRwdV9rbXNfaW5mbyAtIGNvbm5lY3RvciBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgY29udGFp bmVyCisgKiBAZGF0YTogQXJyYXkgb2YgaW5mb3JtYXRpb24gY2hhcmFjdGVyIGRhdGEKKyAqIEBs ZW46IEN1cnJlbnQgbGVuZ3RoIG9mIGluZm9ybWF0aW9uIGRhdGEKKyAqIEBzdGFnZWRfbGVuOiBU ZW1wb3JhcnkgZGF0YSBidWZmZXIgbGVuZ3RoLCBjb21taXQgdG8KKyAqICAgICAgICAgICAgICBs ZW4gdXNpbmcgZHB1X2ttc19pbmZvX3N0b3AKKyAqIEBzdGFydDogV2hldGhlciBvciBub3QgYSBw YXJ0aWFsIGRhdGEgZW50cnkgd2FzIGp1c3Qgc3RhcnRlZAorICovCitzdHJ1Y3QgZHB1X2ttc19p bmZvIHsKKwljaGFyIGRhdGFbRFBVX0tNU19JTkZPX01BWF9TSVpFXTsKKwl1aW50MzJfdCBsZW47 CisJdWludDMyX3Qgc3RhZ2VkX2xlbjsKKwlib29sIHN0YXJ0OworfTsKKworLyoqCisgKiBEUFVf S01TX0lORk9fREFUQSAtIE1hY3JvIGZvciBhY2Nlc3NpbmcgZHB1X2ttc19pbmZvIGRhdGEgYnl0 ZXMKKyAqIEBTOiBQb2ludGVyIHRvIGRwdV9rbXNfaW5mbyBzdHJ1Y3R1cmUKKyAqIFJldHVybnM6 IFBvaW50ZXIgdG8gYnl0ZSBkYXRhCisgKi8KKyNkZWZpbmUgRFBVX0tNU19JTkZPX0RBVEEoUykg ICAgKChTKSA/ICgoc3RydWN0IGRwdV9rbXNfaW5mbyAqKShTKSktPmRhdGEgOiAwKQorCisvKioK KyAqIERQVV9LTVNfSU5GT19EQVRBTEVOIC0gTWFjcm8gZm9yIGFjY2Vzc2luZyBkcHVfa21zX2lu Zm8gZGF0YSBsZW5ndGgKKyAqCQkJaXQgYWRkcyBhbiBleHRyYSBjaGFyYWN0ZXIgbGVuZ3RoIHRv IGNvdW50IG51bGwuCisgKiBAUzogUG9pbnRlciB0byBkcHVfa21zX2luZm8gc3RydWN0dXJlCisg KiBSZXR1cm5zOiBTaXplIG9mIGF2YWlsYWJsZSBieXRlIGRhdGEKKyAqLworI2RlZmluZSBEUFVf S01TX0lORk9fREFUQUxFTihTKSAoKFMpID8gKChzdHJ1Y3QgZHB1X2ttc19pbmZvICopKFMpKS0+ bGVuICsgMSBcCisJCQkJCQkJOiAwKQorCisvKioKKyAqIGRwdV9rbXNfaW5mb19yZXNldCAtIHJl c2V0IGRwdV9rbXNfaW5mbyBzdHJ1Y3R1cmUKKyAqIEBpbmZvOiBQb2ludGVyIHRvIGRwdV9rbXNf aW5mbyBzdHJ1Y3R1cmUKKyAqLwordm9pZCBkcHVfa21zX2luZm9fcmVzZXQoc3RydWN0IGRwdV9r bXNfaW5mbyAqaW5mbyk7CisKKy8qKgorICogZHB1X2ttc19pbmZvX2FkZF9rZXlpbnQgLSBhZGQg aW50ZWdlciB2YWx1ZSB0byAnZHB1X2ttc19pbmZvJworICogQGluZm86IFBvaW50ZXIgdG8gZHB1 X2ttc19pbmZvIHN0cnVjdHVyZQorICogQGtleTogUG9pbnRlciB0byBrZXkgc3RyaW5nCisgKiBA dmFsdWU6IFNpZ25lZCA2NC1iaXQgaW50ZWdlciB2YWx1ZQorICovCit2b2lkIGRwdV9rbXNfaW5m b19hZGRfa2V5aW50KHN0cnVjdCBkcHVfa21zX2luZm8gKmluZm8sCisJCWNvbnN0IGNoYXIgKmtl eSwKKwkJaW50NjRfdCB2YWx1ZSk7CisKKy8qKgorICogZHB1X2ttc19pbmZvX2FkZF9rZXlzdHIg LSBhZGQgc3RyaW5nIHZhbHVlIHRvICdkcHVfa21zX2luZm8nCisgKiBAaW5mbzogUG9pbnRlciB0 byBkcHVfa21zX2luZm8gc3RydWN0dXJlCisgKiBAa2V5OiBQb2ludGVyIHRvIGtleSBzdHJpbmcK KyAqIEB2YWx1ZTogUG9pbnRlciB0byBzdHJpbmcgdmFsdWUKKyAqLwordm9pZCBkcHVfa21zX2lu Zm9fYWRkX2tleXN0cihzdHJ1Y3QgZHB1X2ttc19pbmZvICppbmZvLAorCQljb25zdCBjaGFyICpr ZXksCisJCWNvbnN0IGNoYXIgKnZhbHVlKTsKKworLyoqCisgKiBkcHVfa21zX2luZm9fc3RhcnQg LSBiZWdpbiBhZGRpbmcga2V5IHRvICdkcHVfa21zX2luZm8nCisgKiBVc2FnZToKKyAqICAgICAg ZHB1X2ttc19pbmZvX3N0YXJ0KGtleSkKKyAqICAgICAgZHB1X2ttc19pbmZvX2FwcGVuZCh2YWxf MSkKKyAqICAgICAgLi4uCisgKiAgICAgIGRwdV9rbXNfaW5mb19hcHBlbmQodmFsX24pCisgKiAg ICAgIGRwdV9rbXNfaW5mb19zdG9wCisgKiBAaW5mbzogUG9pbnRlciB0byBkcHVfa21zX2luZm8g c3RydWN0dXJlCisgKiBAa2V5OiBQb2ludGVyIHRvIGtleSBzdHJpbmcKKyAqLwordm9pZCBkcHVf a21zX2luZm9fc3RhcnQoc3RydWN0IGRwdV9rbXNfaW5mbyAqaW5mbywKKwkJY29uc3QgY2hhciAq a2V5KTsKKworLyoqCisgKiBkcHVfa21zX2luZm9fYXBwZW5kIC0gYXBwZW5kIHZhbHVlIHN0cmlu ZyB0byAnZHB1X2ttc19pbmZvJworICogVXNhZ2U6CisgKiAgICAgIGRwdV9rbXNfaW5mb19zdGFy dChrZXkpCisgKiAgICAgIGRwdV9rbXNfaW5mb19hcHBlbmQodmFsXzEpCisgKiAgICAgIC4uLgor ICogICAgICBkcHVfa21zX2luZm9fYXBwZW5kKHZhbF9uKQorICogICAgICBkcHVfa21zX2luZm9f c3RvcAorICogQGluZm86IFBvaW50ZXIgdG8gZHB1X2ttc19pbmZvIHN0cnVjdHVyZQorICogQHN0 cjogUG9pbnRlciB0byBwYXJ0aWFsIHZhbHVlIHN0cmluZworICovCit2b2lkIGRwdV9rbXNfaW5m b19hcHBlbmQoc3RydWN0IGRwdV9rbXNfaW5mbyAqaW5mbywKKwkJY29uc3QgY2hhciAqc3RyKTsK KworLyoqCisgKiBkcHVfa21zX2luZm9fYXBwZW5kX2Zvcm1hdCAtIGFwcGVuZCBmb3JtYXQgY29k ZSBzdHJpbmcgdG8gJ2RwdV9rbXNfaW5mbycKKyAqIFVzYWdlOgorICogICAgICBkcHVfa21zX2lu Zm9fc3RhcnQoa2V5KQorICogICAgICBkcHVfa21zX2luZm9fYXBwZW5kX2Zvcm1hdChmb3VyY2Ms IG1vZGlmaWVyKQorICogICAgICAuLi4KKyAqICAgICAgZHB1X2ttc19pbmZvX3N0b3AKKyAqIEBp bmZvOiBQb2ludGVyIHRvIGRwdV9rbXNfaW5mbyBzdHJ1Y3R1cmUKKyAqIEBwaXhlbF9mb3JtYXQ6 IEZPVVJDQyBmb3JtYXQgY29kZQorICogQG1vZGlmaWVyOiA2NC1iaXQgZHJtIGZvcm1hdCBtb2Rp ZmllcgorICovCit2b2lkIGRwdV9rbXNfaW5mb19hcHBlbmRfZm9ybWF0KHN0cnVjdCBkcHVfa21z X2luZm8gKmluZm8sCisJCXVpbnQzMl90IHBpeGVsX2Zvcm1hdCwKKwkJdWludDY0X3QgbW9kaWZp ZXIpOworCisvKioKKyAqIGRwdV9rbXNfaW5mb19zdG9wIC0gZmluaXNoIGFkZGluZyBrZXkgdG8g J2RwdV9rbXNfaW5mbycKKyAqIFVzYWdlOgorICogICAgICBkcHVfa21zX2luZm9fc3RhcnQoa2V5 KQorICogICAgICBkcHVfa21zX2luZm9fYXBwZW5kKHZhbF8xKQorICogICAgICAuLi4KKyAqICAg ICAgZHB1X2ttc19pbmZvX2FwcGVuZCh2YWxfbikKKyAqICAgICAgZHB1X2ttc19pbmZvX3N0b3AK KyAqIEBpbmZvOiBQb2ludGVyIHRvIGRwdV9rbXNfaW5mbyBzdHJ1Y3R1cmUKKyAqLwordm9pZCBk cHVfa21zX2luZm9fc3RvcChzdHJ1Y3QgZHB1X2ttc19pbmZvICppbmZvKTsKKworLyoqCisgKiBW YmxhbmsgZW5hYmxlL2Rpc2FibGUgZnVuY3Rpb25zCisgKi8KK2ludCBkcHVfZW5hYmxlX3ZibGFu ayhzdHJ1Y3QgbXNtX2ttcyAqa21zLCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwordm9pZCBkcHVf ZGlzYWJsZV92Ymxhbmsoc3RydWN0IG1zbV9rbXMgKmttcywgc3RydWN0IGRybV9jcnRjICpjcnRj KTsKKwordm9pZCBkcHVfa21zX2VuY29kZXJfZW5hYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5j b2Rlcik7CisKKy8qKgorICogZHB1X2ttc19nZXRfY2xrX3JhdGUoKSAtIGdldCB0aGUgY2xvY2sg cmF0ZQorICogQGRwdV9rbXM6ICBwb2luZXIgdG8gZHB1X2ttcyBzdHJ1Y3R1cmUKKyAqIEBjbG9j a19uYW1lOiBjbG9jayBuYW1lIHRvIGdldCB0aGUgcmF0ZQorICoKKyAqIFJldHVybjogY3VycmVu dCBjbG9jayByYXRlCisgKi8KK3U2NCBkcHVfa21zX2dldF9jbGtfcmF0ZShzdHJ1Y3QgZHB1X2tt cyAqZHB1X2ttcywgY2hhciAqY2xvY2tfbmFtZSk7CisKKyNlbmRpZiAvKiBfX2RwdV9rbXNfSF9f ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21zX3V0 aWxzLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21zX3V0aWxzLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5hODBiM2RhNWE5ZmUKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21zX3V0aWxz LmMKQEAgLTAsMCArMSwxNTMgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNS0yMDE4LCBUaGUgTGlu dXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQor ICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2 ZXJzaW9uIDIgYW5kCisgKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisg KiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNk ZWZpbmUgcHJfZm10KGZtdCkJImRwdS1rbXNfdXRpbHM6WyVzXSAiIGZtdCwgX19mdW5jX18KKwor I2luY2x1ZGUgImRwdV9rbXMuaCIKKwordm9pZCBkcHVfa21zX2luZm9fcmVzZXQoc3RydWN0IGRw dV9rbXNfaW5mbyAqaW5mbykKK3sKKwlpZiAoaW5mbykgeworCQlpbmZvLT5sZW4gPSAwOworCQlp bmZvLT5zdGFnZWRfbGVuID0gMDsKKwl9Cit9CisKK3ZvaWQgZHB1X2ttc19pbmZvX2FkZF9rZXlp bnQoc3RydWN0IGRwdV9rbXNfaW5mbyAqaW5mbywKKwkJY29uc3QgY2hhciAqa2V5LAorCQlpbnQ2 NF90IHZhbHVlKQoreworCXVpbnQzMl90IGxlbjsKKworCWlmIChpbmZvICYmIGtleSkgeworCQls ZW4gPSBzbnByaW50ZihpbmZvLT5kYXRhICsgaW5mby0+bGVuLAorCQkJCURQVV9LTVNfSU5GT19N QVhfU0laRSAtIGluZm8tPmxlbiwKKwkJCQkiJXM9JWxsZFxuIiwKKwkJCQlrZXksCisJCQkJdmFs dWUpOworCisJCS8qIGNoZWNrIGlmIHNucHJpbnRmIHRydW5jYXRlZCB0aGUgc3RyaW5nICovCisJ CWlmICgoaW5mby0+bGVuICsgbGVuKSA8IERQVV9LTVNfSU5GT19NQVhfU0laRSkKKwkJCWluZm8t PmxlbiArPSBsZW47CisJfQorfQorCit2b2lkIGRwdV9rbXNfaW5mb19hZGRfa2V5c3RyKHN0cnVj dCBkcHVfa21zX2luZm8gKmluZm8sCisJCWNvbnN0IGNoYXIgKmtleSwKKwkJY29uc3QgY2hhciAq dmFsdWUpCit7CisJdWludDMyX3QgbGVuOworCisJaWYgKGluZm8gJiYga2V5ICYmIHZhbHVlKSB7 CisJCWxlbiA9IHNucHJpbnRmKGluZm8tPmRhdGEgKyBpbmZvLT5sZW4sCisJCQkJRFBVX0tNU19J TkZPX01BWF9TSVpFIC0gaW5mby0+bGVuLAorCQkJCSIlcz0lc1xuIiwKKwkJCQlrZXksCisJCQkJ dmFsdWUpOworCisJCS8qIGNoZWNrIGlmIHNucHJpbnRmIHRydW5jYXRlZCB0aGUgc3RyaW5nICov CisJCWlmICgoaW5mby0+bGVuICsgbGVuKSA8IERQVV9LTVNfSU5GT19NQVhfU0laRSkKKwkJCWlu Zm8tPmxlbiArPSBsZW47CisJfQorfQorCit2b2lkIGRwdV9rbXNfaW5mb19zdGFydChzdHJ1Y3Qg ZHB1X2ttc19pbmZvICppbmZvLAorCQljb25zdCBjaGFyICprZXkpCit7CisJdWludDMyX3QgbGVu OworCisJaWYgKGluZm8gJiYga2V5KSB7CisJCWxlbiA9IHNucHJpbnRmKGluZm8tPmRhdGEgKyBp bmZvLT5sZW4sCisJCQkJRFBVX0tNU19JTkZPX01BWF9TSVpFIC0gaW5mby0+bGVuLAorCQkJCSIl cz0iLAorCQkJCWtleSk7CisKKwkJaW5mby0+c3RhcnQgPSB0cnVlOworCisJCS8qIGNoZWNrIGlm IHNucHJpbnRmIHRydW5jYXRlZCB0aGUgc3RyaW5nICovCisJCWlmICgoaW5mby0+bGVuICsgbGVu KSA8IERQVV9LTVNfSU5GT19NQVhfU0laRSkKKwkJCWluZm8tPnN0YWdlZF9sZW4gPSBpbmZvLT5s ZW4gKyBsZW47CisJfQorfQorCit2b2lkIGRwdV9rbXNfaW5mb19hcHBlbmQoc3RydWN0IGRwdV9r bXNfaW5mbyAqaW5mbywKKwkJY29uc3QgY2hhciAqc3RyKQoreworCXVpbnQzMl90IGxlbjsKKwor CWlmIChpbmZvKSB7CisJCWxlbiA9IHNucHJpbnRmKGluZm8tPmRhdGEgKyBpbmZvLT5zdGFnZWRf bGVuLAorCQkJCURQVV9LTVNfSU5GT19NQVhfU0laRSAtIGluZm8tPnN0YWdlZF9sZW4sCisJCQkJ IiVzIiwKKwkJCQlzdHIpOworCisJCS8qIGNoZWNrIGlmIHNucHJpbnRmIHRydW5jYXRlZCB0aGUg c3RyaW5nICovCisJCWlmICgoaW5mby0+c3RhZ2VkX2xlbiArIGxlbikgPCBEUFVfS01TX0lORk9f TUFYX1NJWkUpIHsKKwkJCWluZm8tPnN0YWdlZF9sZW4gKz0gbGVuOworCQkJaW5mby0+c3RhcnQg PSBmYWxzZTsKKwkJfQorCX0KK30KKwordm9pZCBkcHVfa21zX2luZm9fYXBwZW5kX2Zvcm1hdChz dHJ1Y3QgZHB1X2ttc19pbmZvICppbmZvLAorCQl1aW50MzJfdCBwaXhlbF9mb3JtYXQsCisJCXVp bnQ2NF90IG1vZGlmaWVyKQoreworCXVpbnQzMl90IGxlbjsKKworCWlmICghaW5mbykKKwkJcmV0 dXJuOworCisJaWYgKG1vZGlmaWVyKSB7CisJCWxlbiA9IHNucHJpbnRmKGluZm8tPmRhdGEgKyBp bmZvLT5zdGFnZWRfbGVuLAorCQkJCURQVV9LTVNfSU5GT19NQVhfU0laRSAtIGluZm8tPnN0YWdl ZF9sZW4sCisJCQkJaW5mby0+c3RhcnQgPworCQkJCSIlYyVjJWMlYy8lbGxYLyVsbFgiIDogIiAl YyVjJWMlYy8lbGxYLyVsbFgiLAorCQkJCShwaXhlbF9mb3JtYXQgPj4gMCkgJiAweEZGLAorCQkJ CShwaXhlbF9mb3JtYXQgPj4gOCkgJiAweEZGLAorCQkJCShwaXhlbF9mb3JtYXQgPj4gMTYpICYg MHhGRiwKKwkJCQkocGl4ZWxfZm9ybWF0ID4+IDI0KSAmIDB4RkYsCisJCQkJKG1vZGlmaWVyID4+ IDU2KSAmIDB4RkYsCisJCQkJbW9kaWZpZXIgJiAoKDFVTEwgPDwgNTYpIC0gMSkpOworCX0gZWxz ZSB7CisJCWxlbiA9IHNucHJpbnRmKGluZm8tPmRhdGEgKyBpbmZvLT5zdGFnZWRfbGVuLAorCQkJ CURQVV9LTVNfSU5GT19NQVhfU0laRSAtIGluZm8tPnN0YWdlZF9sZW4sCisJCQkJaW5mby0+c3Rh cnQgPworCQkJCSIlYyVjJWMlYyIgOiAiICVjJWMlYyVjIiwKKwkJCQkocGl4ZWxfZm9ybWF0ID4+ IDApICYgMHhGRiwKKwkJCQkocGl4ZWxfZm9ybWF0ID4+IDgpICYgMHhGRiwKKwkJCQkocGl4ZWxf Zm9ybWF0ID4+IDE2KSAmIDB4RkYsCisJCQkJKHBpeGVsX2Zvcm1hdCA+PiAyNCkgJiAweEZGKTsK Kwl9CisKKwkvKiBjaGVjayBpZiBzbnByaW50ZiB0cnVuY2F0ZWQgdGhlIHN0cmluZyAqLworCWlm ICgoaW5mby0+c3RhZ2VkX2xlbiArIGxlbikgPCBEUFVfS01TX0lORk9fTUFYX1NJWkUpIHsKKwkJ aW5mby0+c3RhZ2VkX2xlbiArPSBsZW47CisJCWluZm8tPnN0YXJ0ID0gZmFsc2U7CisJfQorfQor Cit2b2lkIGRwdV9rbXNfaW5mb19zdG9wKHN0cnVjdCBkcHVfa21zX2luZm8gKmluZm8pCit7CisJ dWludDMyX3QgbGVuOworCisJaWYgKGluZm8pIHsKKwkJLyogaW5zZXJ0IGZpbmFsIGRlbGltaXRl ciAqLworCQlsZW4gPSBzbnByaW50ZihpbmZvLT5kYXRhICsgaW5mby0+c3RhZ2VkX2xlbiwKKwkJ CQlEUFVfS01TX0lORk9fTUFYX1NJWkUgLSBpbmZvLT5zdGFnZWRfbGVuLAorCQkJCSJcbiIpOwor CisJCS8qIGNoZWNrIGlmIHNucHJpbnRmIHRydW5jYXRlZCB0aGUgc3RyaW5nICovCisJCWlmICgo aW5mby0+c3RhZ2VkX2xlbiArIGxlbikgPCBEUFVfS01TX0lORk9fTUFYX1NJWkUpCisJCQlpbmZv LT5sZW4gPSBpbmZvLT5zdGFnZWRfbGVuICsgbGVuOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9tZHNzLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvZHB1MS9kcHVfbWRzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwMC4uNTE5MWM3N2NkOTA3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X21kc3MuYwpAQCAtMCwwICsxLDI1OSBAQAorLyoKKyAqIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgsIFRoZSBMaW51 eCBGb3VuZGF0aW9uCisgKi8KKworI2luY2x1ZGUgImRwdV9rbXMuaCIKKworI2RlZmluZSB0b19k cHVfbWRzcyh4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IGRwdV9tZHNzLCBiYXNlKQorCisjZGVm aW5lIEhXX0lOVFJfU1RBVFVTCQkJMHgwMDEwCisKK3N0cnVjdCBkcHVfbWRzcyB7CisJc3RydWN0 IG1zbV9tZHNzIGJhc2U7CisJdm9pZCBfX2lvbWVtICptbWlvOworCXVuc2lnbmVkIGxvbmcgbW1p b19sZW47CisJdTMyIGh3dmVyc2lvbjsKKwlzdHJ1Y3QgZHNzX21vZHVsZV9wb3dlciBtcDsKKwlz dHJ1Y3QgZHB1X2lycV9jb250cm9sbGVyIGlycV9jb250cm9sbGVyOworfTsKKworc3RhdGljIGly cXJldHVybl90IGRwdV9tZHNzX2lycShpbnQgaXJxLCB2b2lkICphcmcpCit7CisJc3RydWN0IGRw dV9tZHNzICpkcHVfbWRzcyA9IGFyZzsKKwl1MzIgaW50ZXJydXB0czsKKworCWludGVycnVwdHMg PSByZWFkbF9yZWxheGVkKGRwdV9tZHNzLT5tbWlvICsgSFdfSU5UUl9TVEFUVVMpOworCisJd2hp bGUgKGludGVycnVwdHMpIHsKKwkJaXJxX2h3X251bWJlcl90IGh3aXJxID0gZmxzKGludGVycnVw dHMpIC0gMTsKKwkJdW5zaWduZWQgaW50IG1hcHBpbmc7CisJCWludCByYzsKKworCQltYXBwaW5n ID0gaXJxX2ZpbmRfbWFwcGluZyhkcHVfbWRzcy0+aXJxX2NvbnRyb2xsZXIuZG9tYWluLAorCQkJ CQkgICBod2lycSk7CisJCWlmIChtYXBwaW5nID09IDApIHsKKwkJCURSTV9FUlJPUigiY291bGRu J3QgZmluZCBpcnEgbWFwcGluZyBmb3IgJWx1XG4iLCBod2lycSk7CisJCQlyZXR1cm4gSVJRX05P TkU7CisJCX0KKworCQlyYyA9IGdlbmVyaWNfaGFuZGxlX2lycShtYXBwaW5nKTsKKwkJaWYgKHJj IDwgMCkgeworCQkJRFJNX0VSUk9SKCJoYW5kbGUgaXJxIGZhaWw6IGlycT0lbHUgbWFwcGluZz0l dSByYz0lZFxuIiwKKwkJCQkgIGh3aXJxLCBtYXBwaW5nLCByYyk7CisJCQlyZXR1cm4gSVJRX05P TkU7CisJCX0KKworCQlpbnRlcnJ1cHRzICY9IH4oMSA8PCBod2lycSk7CisJfQorCisJcmV0dXJu IElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBkcHVfbWRzc19pcnFfbWFzayhzdHJ1Y3Qg aXJxX2RhdGEgKmlycWQpCit7CisJc3RydWN0IGRwdV9tZHNzICpkcHVfbWRzcyA9IGlycV9kYXRh X2dldF9pcnFfY2hpcF9kYXRhKGlycWQpOworCisJLyogbWVtb3J5IGJhcnJpZXIgKi8KKwlzbXBf bWJfX2JlZm9yZV9hdG9taWMoKTsKKwljbGVhcl9iaXQoaXJxZC0+aHdpcnEsICZkcHVfbWRzcy0+ aXJxX2NvbnRyb2xsZXIuZW5hYmxlZF9tYXNrKTsKKwkvKiBtZW1vcnkgYmFycmllciAqLworCXNt cF9tYl9fYWZ0ZXJfYXRvbWljKCk7Cit9CisKK3N0YXRpYyB2b2lkIGRwdV9tZHNzX2lycV91bm1h c2soc3RydWN0IGlycV9kYXRhICppcnFkKQoreworCXN0cnVjdCBkcHVfbWRzcyAqZHB1X21kc3Mg PSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShpcnFkKTsKKworCS8qIG1lbW9yeSBiYXJyaWVy ICovCisJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CisJc2V0X2JpdChpcnFkLT5od2lycSwgJmRw dV9tZHNzLT5pcnFfY29udHJvbGxlci5lbmFibGVkX21hc2spOworCS8qIG1lbW9yeSBiYXJyaWVy ICovCisJc21wX21iX19hZnRlcl9hdG9taWMoKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hp cCBkcHVfbWRzc19pcnFfY2hpcCA9IHsKKwkubmFtZSA9ICJkcHVfbWRzcyIsCisJLmlycV9tYXNr ID0gZHB1X21kc3NfaXJxX21hc2ssCisJLmlycV91bm1hc2sgPSBkcHVfbWRzc19pcnFfdW5tYXNr LAorfTsKKworc3RhdGljIGludCBkcHVfbWRzc19pcnFkb21haW5fbWFwKHN0cnVjdCBpcnFfZG9t YWluICpkb21haW4sCisJCXVuc2lnbmVkIGludCBpcnEsIGlycV9od19udW1iZXJfdCBod2lycSkK K3sKKwlzdHJ1Y3QgZHB1X21kc3MgKmRwdV9tZHNzID0gZG9tYWluLT5ob3N0X2RhdGE7CisJaW50 IHJldDsKKworCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihpcnEsICZkcHVfbWRzc19pcnFfY2hp cCwgaGFuZGxlX2xldmVsX2lycSk7CisJcmV0ID0gaXJxX3NldF9jaGlwX2RhdGEoaXJxLCBkcHVf bWRzcyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGlycV9kb21h aW5fb3BzIGRwdV9tZHNzX2lycWRvbWFpbl9vcHMgPSB7CisJLm1hcCA9IGRwdV9tZHNzX2lycWRv bWFpbl9tYXAsCisJLnhsYXRlID0gaXJxX2RvbWFpbl94bGF0ZV9vbmVjZWxsLAorfTsKKworc3Rh dGljIGludCBfZHB1X21kc3NfaXJxX2RvbWFpbl9hZGQoc3RydWN0IGRwdV9tZHNzICpkcHVfbWRz cykKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IGlycV9kb21haW4gKmRvbWFpbjsK KworCWRldiA9IGRwdV9tZHNzLT5iYXNlLmRldi0+ZGV2OworCisJZG9tYWluID0gaXJxX2RvbWFp bl9hZGRfbGluZWFyKGRldi0+b2Zfbm9kZSwgMzIsCisJCQkmZHB1X21kc3NfaXJxZG9tYWluX29w cywgZHB1X21kc3MpOworCWlmICghZG9tYWluKSB7CisJCURQVV9FUlJPUigiZmFpbGVkIHRvIGFk ZCBpcnFfZG9tYWluXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZHB1X21kc3MtPmly cV9jb250cm9sbGVyLmVuYWJsZWRfbWFzayA9IDA7CisJZHB1X21kc3MtPmlycV9jb250cm9sbGVy LmRvbWFpbiA9IGRvbWFpbjsKKworCXJldHVybiAwOworfQorCitpbnQgX2RwdV9tZHNzX2lycV9k b21haW5fZmluaShzdHJ1Y3QgZHB1X21kc3MgKmRwdV9tZHNzKQoreworCWlmIChkcHVfbWRzcy0+ aXJxX2NvbnRyb2xsZXIuZG9tYWluKSB7CisJCWlycV9kb21haW5fcmVtb3ZlKGRwdV9tZHNzLT5p cnFfY29udHJvbGxlci5kb21haW4pOworCQlkcHVfbWRzcy0+aXJxX2NvbnRyb2xsZXIuZG9tYWlu ID0gTlVMTDsKKwl9CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW50IGRwdV9tZHNzX2VuYWJsZShz dHJ1Y3QgbXNtX21kc3MgKm1kc3MpCit7CisJc3RydWN0IGRwdV9tZHNzICpkcHVfbWRzcyA9IHRv X2RwdV9tZHNzKG1kc3MpOworCXN0cnVjdCBkc3NfbW9kdWxlX3Bvd2VyICptcCA9ICZkcHVfbWRz cy0+bXA7CisJaW50IHJldDsKKworCXJldCA9IG1zbV9kc3NfZW5hYmxlX2NsayhtcC0+Y2xrX2Nv bmZpZywgbXAtPm51bV9jbGssIHRydWUpOworCWlmIChyZXQpCisJCURQVV9FUlJPUigiY2xvY2sg ZW5hYmxlIGZhaWxlZCwgcmV0OiVkXG4iLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3Rh dGljIGludCBkcHVfbWRzc19kaXNhYmxlKHN0cnVjdCBtc21fbWRzcyAqbWRzcykKK3sKKwlzdHJ1 Y3QgZHB1X21kc3MgKmRwdV9tZHNzID0gdG9fZHB1X21kc3MobWRzcyk7CisJc3RydWN0IGRzc19t b2R1bGVfcG93ZXIgKm1wID0gJmRwdV9tZHNzLT5tcDsKKwlpbnQgcmV0OworCisJcmV0ID0gbXNt X2Rzc19lbmFibGVfY2xrKG1wLT5jbGtfY29uZmlnLCBtcC0+bnVtX2NsaywgZmFsc2UpOworCWlm IChyZXQpCisJCURQVV9FUlJPUigiY2xvY2sgZGlzYWJsZSBmYWlsZWQsIHJldDolZFxuIiwgcmV0 KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGRwdV9tZHNzX2Rlc3Ryb3koc3Ry dWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0g dG9fcGxhdGZvcm1fZGV2aWNlKGRldi0+ZGV2KTsKKwlzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpw cml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHB1X21kc3MgKmRwdV9tZHNzID0gdG9f ZHB1X21kc3MocHJpdi0+bWRzcyk7CisJc3RydWN0IGRzc19tb2R1bGVfcG93ZXIgKm1wID0gJmRw dV9tZHNzLT5tcDsKKworCV9kcHVfbWRzc19pcnFfZG9tYWluX2ZpbmkoZHB1X21kc3MpOworCisJ bXNtX2Rzc19wdXRfY2xrKG1wLT5jbGtfY29uZmlnLCBtcC0+bnVtX2Nsayk7CisJZGV2bV9rZnJl ZSgmcGRldi0+ZGV2LCBtcC0+Y2xrX2NvbmZpZyk7CisKKwlpZiAoZHB1X21kc3MtPm1taW8pCisJ CWRldm1faW91bm1hcCgmcGRldi0+ZGV2LCBkcHVfbWRzcy0+bW1pbyk7CisJZHB1X21kc3MtPm1t aW8gPSBOVUxMOworCisJcG1fcnVudGltZV9kaXNhYmxlKGRldi0+ZGV2KTsKKwlwcml2LT5tZHNz ID0gTlVMTDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBtc21fbWRzc19mdW5jcyBtZHNzX2Z1 bmNzID0geworCS5lbmFibGUJPSBkcHVfbWRzc19lbmFibGUsCisJLmRpc2FibGUgPSBkcHVfbWRz c19kaXNhYmxlLAorCS5kZXN0cm95ID0gZHB1X21kc3NfZGVzdHJveSwKK307CisKK2ludCBkcHVf bWRzc19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYtPmRldik7CisJc3RydWN0IG1zbV9k cm1fcHJpdmF0ZSAqcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IHJlc291cmNlICpy ZXM7CisJc3RydWN0IGRwdV9tZHNzICpkcHVfbWRzczsKKwlzdHJ1Y3QgZHNzX21vZHVsZV9wb3dl ciAqbXA7CisJaW50IHJldCA9IDA7CisKKwlkcHVfbWRzcyA9IGRldm1fa3phbGxvYyhkZXYtPmRl diwgc2l6ZW9mKCpkcHVfbWRzcyksIEdGUF9LRVJORUwpOworCWlmICghZHB1X21kc3MpCisJCXJl dHVybiAtRU5PTUVNOworCisJZHB1X21kc3MtPm1taW8gPSBtc21faW9yZW1hcChwZGV2LCAibWRz c19waHlzIiwgIm1kc3NfcGh5cyIpOworCWlmIChJU19FUlIoZHB1X21kc3MtPm1taW8pKQorCQly ZXR1cm4gUFRSX0VSUihkcHVfbWRzcy0+bW1pbyk7CisKKwlEUk1fREVCVUcoIm1hcHBlZCBtZHNz IGFkZHJlc3Mgc3BhY2UgQCVwS1xuIiwgZHB1X21kc3MtPm1taW8pOworCisJcmVzID0gcGxhdGZv cm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgIm1kc3NfcGh5cyIp OworCWlmICghcmVzKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGdldCBtZW1vcnkgcmVzb3Vy Y2UgZm9yIG1kc3NfcGh5c1xuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlkcHVfbWRzcy0+ bW1pb19sZW4gPSByZXNvdXJjZV9zaXplKHJlcyk7CisKKwltcCA9ICZkcHVfbWRzcy0+bXA7CisJ cmV0ID0gbXNtX2Rzc19wYXJzZV9jbG9jayhwZGV2LCBtcCk7CisJaWYgKHJldCkgeworCQlEUFVf RVJST1IoImZhaWxlZCB0byBwYXJzZSBjbG9ja3MsIHJldD0lZFxuIiwgcmV0KTsKKwkJZ290byBj bGtfcGFyc2VfZXJyOworCX0KKworCXJldCA9IG1zbV9kc3NfZ2V0X2NsaygmcGRldi0+ZGV2LCBt cC0+Y2xrX2NvbmZpZywgbXAtPm51bV9jbGspOworCWlmIChyZXQpIHsKKwkJRFBVX0VSUk9SKCJm YWlsZWQgdG8gZ2V0IGNsb2NrcywgcmV0PSVkXG4iLCByZXQpOworCQlnb3RvIGNsa19nZXRfZXJy b3I7CisJfQorCisJcmV0ID0gbXNtX2Rzc19jbGtfc2V0X3JhdGUobXAtPmNsa19jb25maWcsIG1w LT5udW1fY2xrKTsKKwlpZiAocmV0KSB7CisJCURQVV9FUlJPUigiZmFpbGVkIHRvIHNldCBjbG9j ayByYXRlLCByZXQ9JWRcbiIsIHJldCk7CisJCWdvdG8gY2xrX3JhdGVfZXJyb3I7CisJfQorCisJ ZHB1X21kc3MtPmJhc2UuZGV2ID0gZGV2OworCWRwdV9tZHNzLT5iYXNlLmZ1bmNzID0gJm1kc3Nf ZnVuY3M7CisKKwlyZXQgPSBfZHB1X21kc3NfaXJxX2RvbWFpbl9hZGQoZHB1X21kc3MpOworCWlm IChyZXQpCisJCWdvdG8gaXJxX2RvbWFpbl9lcnJvcjsKKworCXJldCA9IGRldm1fcmVxdWVzdF9p cnEoZGV2LT5kZXYsIHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCksCisJCQlkcHVfbWRzc19pcnEs IDAsICJkcHVfbWRzc19pc3IiLCBkcHVfbWRzcyk7CisJaWYgKHJldCkgeworCQlEUFVfRVJST1Io ImZhaWxlZCB0byBpbml0IGlycTogJWRcbiIsIHJldCk7CisJCWdvdG8gaXJxX2Vycm9yOworCX0K KworCXBtX3J1bnRpbWVfZW5hYmxlKGRldi0+ZGV2KTsKKworCXBtX3J1bnRpbWVfZ2V0X3N5bmMo ZGV2LT5kZXYpOworCWRwdV9tZHNzLT5od3ZlcnNpb24gPSByZWFkbF9yZWxheGVkKGRwdV9tZHNz LT5tbWlvKTsKKwlwbV9ydW50aW1lX3B1dF9zeW5jKGRldi0+ZGV2KTsKKworCXByaXYtPm1kc3Mg PSAmZHB1X21kc3MtPmJhc2U7CisKKwlyZXR1cm4gcmV0OworCitpcnFfZXJyb3I6CisJX2RwdV9t ZHNzX2lycV9kb21haW5fZmluaShkcHVfbWRzcyk7CitpcnFfZG9tYWluX2Vycm9yOgorY2xrX3Jh dGVfZXJyb3I6CisJbXNtX2Rzc19wdXRfY2xrKG1wLT5jbGtfY29uZmlnLCBtcC0+bnVtX2Nsayk7 CitjbGtfZ2V0X2Vycm9yOgorCWRldm1fa2ZyZWUoJnBkZXYtPmRldiwgbXAtPmNsa19jb25maWcp OworY2xrX3BhcnNlX2VycjoKKwlpZiAoZHB1X21kc3MtPm1taW8pCisJCWRldm1faW91bm1hcCgm cGRldi0+ZGV2LCBkcHVfbWRzcy0+bW1pbyk7CisJZHB1X21kc3MtPm1taW8gPSBOVUxMOworCXJl dHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfcGxhbmUuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wbGFuZS5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZDNkN2ViZjBjMzk0Ci0tLSAv ZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3BsYW5lLmMK QEAgLTAsMCArMSwxOTYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTggVGhlIExp bnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw MTMgUmVkIEhhdAorICogQXV0aG9yOiBSb2IgQ2xhcmsgPHJvYmRjbGFya0BnbWFpbC5jb20+Cisg KgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJ TElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8v d3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjZGVmaW5lIHByX2ZtdChmbXQpCSJbZHJt OiVzOiVkXSAiIGZtdCwgX19mdW5jX18sIF9fTElORV9fCisKKyNpbmNsdWRlIDxsaW51eC9kZWJ1 Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgorCisjaW5jbHVkZSAibXNtX2Rydi5o IgorI2luY2x1ZGUgImRwdV9rbXMuaCIKKyNpbmNsdWRlICJkcHVfZm9ybWF0cy5oIgorI2luY2x1 ZGUgImRwdV9od19zc3BwLmgiCisjaW5jbHVkZSAiZHB1X2h3X2NhdGFsb2dfZm9ybWF0LmgiCisj aW5jbHVkZSAiZHB1X3RyYWNlLmgiCisjaW5jbHVkZSAiZHB1X2NydGMuaCIKKyNpbmNsdWRlICJk cHVfdmJpZi5oIgorI2luY2x1ZGUgImRwdV9wbGFuZS5oIgorCisjZGVmaW5lIERQVV9ERUJVR19Q TEFORShwbCwgZm10LCAuLi4pIERQVV9ERUJVRygicGxhbmUlZCAiIGZtdCxcCisJCShwbCkgPyAo cGwpLT5iYXNlLmJhc2UuaWQgOiAtMSwgIyNfX1ZBX0FSR1NfXykKKworI2RlZmluZSBEUFVfRVJS T1JfUExBTkUocGwsIGZtdCwgLi4uKSBEUFVfRVJST1IoInBsYW5lJWQgIiBmbXQsXAorCQkocGwp ID8gKHBsKS0+YmFzZS5iYXNlLmlkIDogLTEsICMjX19WQV9BUkdTX18pCisKKyNkZWZpbmUgREVD SU1BVEVEX0RJTUVOU0lPTihkaW0sIGRlY2kpICgoKGRpbSkgKyAoKDEgPDwgKGRlY2kpKSAtIDEp KSA+PiAoZGVjaSkpCisjZGVmaW5lIFBIQVNFX1NURVBfU0hJRlQJMjEKKyNkZWZpbmUgUEhBU0Vf U1RFUF9VTklUX1NDQUxFICAgKChpbnQpICgxIDw8IFBIQVNFX1NURVBfU0hJRlQpKQorI2RlZmlu ZSBQSEFTRV9SRVNJRFVBTAkJMTUKKworI2RlZmluZSBTSEFSUF9TVFJFTkdUSF9ERUZBVUxUCTMy CisjZGVmaW5lIFNIQVJQX0VER0VfVEhSX0RFRkFVTFQJMTEyCisjZGVmaW5lIFNIQVJQX1NNT09U SF9USFJfREVGQVVMVAk4CisjZGVmaW5lIFNIQVJQX05PSVNFX1RIUl9ERUZBVUxUCTIKKworI2Rl ZmluZSBEUFVfTkFNRV9TSVpFICAxMgorCisjZGVmaW5lIERQVV9QTEFORV9DT0xPUl9GSUxMX0ZM QUcJQklUKDMxKQorI2RlZmluZSBEUFVfWlBPU19NQVggMjU1CisKKy8qIG11bHRpcmVjdCByZWN0 IGluZGV4ICovCitlbnVtIHsKKwlSMCwKKwlSMSwKKwlSX01BWAorfTsKKworI2RlZmluZSBEUFVf UVNFRUQzX0RFRkFVTFRfUFJFTE9BRF9IIDB4NAorI2RlZmluZSBEUFVfUVNFRUQzX0RFRkFVTFRf UFJFTE9BRF9WIDB4MworCisjZGVmaW5lIERFRkFVTFRfUkVGUkVTSF9SQVRFCTYwCisKKy8qKgor ICogZW51bSBkcHVfcGxhbmVfcW9zIC0gRGlmZmVyZW50IHFvcyBjb25maWd1cmF0aW9ucyBmb3Ig ZWFjaCBwaXBlCisgKgorICogQERQVV9QTEFORV9RT1NfVkJMQU5LX0NUUkw6IFNldHVwIFZCTEFO SyBxb3MgZm9yIHRoZSBwaXBlLgorICogQERQVV9QTEFORV9RT1NfVkJMQU5LX0FNT1JUSVpFOiBF bmFibGVzIEFtb3J0aXphdGlvbiB3aXRoaW4gcGlwZS4KKyAqCXRoaXMgY29uZmlndXJhdGlvbiBp cyBtdXR1YWxseSBleGNsdXNpdmUgZnJvbSBWQkxBTktfQ1RSTC4KKyAqIEBEUFVfUExBTkVfUU9T X1BBTklDX0NUUkw6IFNldHVwIHBhbmljIGZvciB0aGUgcGlwZS4KKyAqLworZW51bSBkcHVfcGxh bmVfcW9zIHsKKwlEUFVfUExBTkVfUU9TX1ZCTEFOS19DVFJMID0gQklUKDApLAorCURQVV9QTEFO RV9RT1NfVkJMQU5LX0FNT1JUSVpFID0gQklUKDEpLAorCURQVV9QTEFORV9RT1NfUEFOSUNfQ1RS TCA9IEJJVCgyKSwKK307CisKKy8qCisgKiBzdHJ1Y3QgZHB1X3BsYW5lIC0gbG9jYWwgZHB1IHBs YW5lIHN0cnVjdHVyZQorICogQGFzcGFjZTogYWRkcmVzcyBzcGFjZSBwb2ludGVyCisgKiBAY3Nj X3B0cjogUG9pbnRzIHRvIGRwdV9jc2NfY2ZnIHN0cnVjdHVyZSB0byB1c2UgZm9yIGN1cnJlbnQK KyAqIEBtcGxhbmVfbGlzdDogTGlzdCBvZiBtdWx0aXJlY3QgcGxhbmVzIG9mIHRoZSBzYW1lIHBp cGUKKyAqIEBjYXRhbG9nOiBQb2ludHMgdG8gZHB1IGNhdGFsb2cgc3RydWN0dXJlCisgKiBAcmV2 YWxpZGF0ZTogZm9yY2UgcmV2YWxpZGF0aW9uIG9mIGFsbCB0aGUgcGxhbmUgcHJvcGVydGllcwor ICovCitzdHJ1Y3QgZHB1X3BsYW5lIHsKKwlzdHJ1Y3QgZHJtX3BsYW5lIGJhc2U7CisKKwlzdHJ1 Y3QgbXV0ZXggbG9jazsKKworCWVudW0gZHB1X3NzcHAgcGlwZTsKKwl1aW50MzJfdCBmZWF0dXJl czsgICAgICAvKiBjYXBhYmlsaXRpZXMgZnJvbSBjYXRhbG9nICovCisJdWludDMyX3QgbmZvcm1h dHM7CisJdWludDMyX3QgZm9ybWF0c1s2NF07CisKKwlzdHJ1Y3QgZHB1X2h3X3BpcGUgKnBpcGVf aHc7CisJc3RydWN0IGRwdV9od19waXBlX2NmZyBwaXBlX2NmZzsKKwlzdHJ1Y3QgZHB1X2h3X3Bp cGVfcW9zX2NmZyBwaXBlX3Fvc19jZmc7CisJdWludDMyX3QgY29sb3JfZmlsbDsKKwlib29sIGlz X2Vycm9yOworCWJvb2wgaXNfcnRfcGlwZTsKKwlib29sIGlzX3ZpcnR1YWw7CisJc3RydWN0IGxp c3RfaGVhZCBtcGxhbmVfbGlzdDsKKwlzdHJ1Y3QgZHB1X21kc3NfY2ZnICpjYXRhbG9nOworCisJ c3RydWN0IGRwdV9jc2NfY2ZnICpjc2NfcHRyOworCisJY29uc3Qgc3RydWN0IGRwdV9zc3BwX3N1 Yl9ibGtzICpwaXBlX3NibGs7CisJY2hhciBwaXBlX25hbWVbRFBVX05BTUVfU0laRV07CisKKwkv KiBkZWJ1Z2ZzIHJlbGF0ZWQgc3R1ZmYgKi8KKwlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3Jvb3Q7 CisJc3RydWN0IGRwdV9kZWJ1Z2ZzX3JlZ3NldDMyIGRlYnVnZnNfc3JjOworCXN0cnVjdCBkcHVf ZGVidWdmc19yZWdzZXQzMiBkZWJ1Z2ZzX3NjYWxlcjsKKwlzdHJ1Y3QgZHB1X2RlYnVnZnNfcmVn c2V0MzIgZGVidWdmc19jc2M7CisJYm9vbCBkZWJ1Z2ZzX2RlZmF1bHRfc2NhbGU7Cit9OworCisj ZGVmaW5lIHRvX2RwdV9wbGFuZSh4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IGRwdV9wbGFuZSwg YmFzZSkKKworc3RhdGljIHN0cnVjdCBkcHVfa21zICpfZHB1X3BsYW5lX2dldF9rbXMoc3RydWN0 IGRybV9wbGFuZSAqcGxhbmUpCit7CisJc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdjsKKwor CWlmICghcGxhbmUgfHwgIXBsYW5lLT5kZXYpCisJCXJldHVybiBOVUxMOworCXByaXYgPSBwbGFu ZS0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlpZiAoIXByaXYpCisJCXJldHVybiBOVUxMOworCXJldHVy biB0b19kcHVfa21zKHByaXYtPmttcyk7Cit9CisKK3N0YXRpYyBib29sIGRwdV9wbGFuZV9lbmFi bGVkKHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQoreworCXJldHVybiBzdGF0ZSAmJiBz dGF0ZS0+ZmIgJiYgc3RhdGUtPmNydGM7Cit9CisKK3N0YXRpYyBib29sIGRwdV9wbGFuZV9zc3Bw X2VuYWJsZWQoc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCit7CisJcmV0dXJuIHN0YXRl ICYmIHN0YXRlLT5jcnRjOworfQorCisvKioKKyAqIF9kcHVfcGxhbmVfY2FsY19maWxsX2xldmVs IC0gY2FsY3VsYXRlIGZpbGwgbGV2ZWwgb2YgdGhlIGdpdmVuIHNvdXJjZSBmb3JtYXQKKyAqIEBw bGFuZToJCVBvaW50ZXIgdG8gZHJtIHBsYW5lCisgKiBAZm10OgkJUG9pbnRlciB0byBzb3VyY2Ug YnVmZmVyIGZvcm1hdAorICogQHNyY193ZGl0aDoJCXdpZHRoIG9mIHNvdXJjZSBidWZmZXIKKyAq IFJldHVybjogZmlsbCBsZXZlbCBjb3JyZXNwb25kaW5nIHRvIHRoZSBzb3VyY2UgYnVmZmVyL2Zv cm1hdCBvciAwIGlmIGVycm9yCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9kcHVfcGxhbmVfY2Fs Y19maWxsX2xldmVsKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAorCQljb25zdCBzdHJ1Y3QgZHB1 X2Zvcm1hdCAqZm10LCB1MzIgc3JjX3dpZHRoKQoreworCXN0cnVjdCBkcHVfcGxhbmUgKnBkcHUs ICp0bXA7CisJc3RydWN0IGRwdV9wbGFuZV9zdGF0ZSAqcHN0YXRlOworCXUzMiBmaXhlZF9idWZm X3NpemU7CisJdTMyIHRvdGFsX2ZsOworCisJaWYgKCFwbGFuZSB8fCAhZm10IHx8ICFwbGFuZS0+ c3RhdGUgfHwgIXNyY193aWR0aCB8fCAhZm10LT5icHApIHsKKwkJRFBVX0VSUk9SKCJpbnZhbGlk IGFyZ3VtZW50c1xuIik7CisJCXJldHVybiAwOworCX0KKworCXBkcHUgPSB0b19kcHVfcGxhbmUo cGxhbmUpOworCXBzdGF0ZSA9IHRvX2RwdV9wbGFuZV9zdGF0ZShwbGFuZS0+c3RhdGUpOworCWZp eGVkX2J1ZmZfc2l6ZSA9IHBkcHUtPnBpcGVfc2Jsay0+Y29tbW9uLT5waXhlbF9yYW1fc2l6ZTsK KworCWxpc3RfZm9yX2VhY2hfZW50cnkodG1wLCAmcGRwdS0+bXBsYW5lX2xpc3QsIG1wbGFuZV9s aXN0KSB7CisJCWlmICghZHB1X3BsYW5lX2VuYWJsZWQodG1wLT5iYXNlLnN0YXRlKSkKKwkJCWNv bnRpbnVlOworCQlEUFVfREVCVUcoInBsYW5lJWQvJWQgc3JjX3dpZHRoOiVkLyVkXG4iLAorCQkJ CXBkcHUtPmJhc2UuYmFzZS5pZCwgdG1wLT5iYXNlLmJhc2UuaWQsCisJCQkJc3JjX3dpZHRoLAor CQkJCWRybV9yZWN0X3dpZHRoKCZ0bXAtPnBpcGVfY2ZnLnNyY19yZWN0KSk7CisJCXNyY193aWR0 aCA9IG1heF90KHUzMiwgc3JjX3dpZHRoLAorCQkJCSAgZHJtX3JlY3Rfd2lkdGgoJnRtcC0+cGlw ZV9jZmcuc3JjX3JlY3QpKTsKKwl9CisKKwlpZiAoZm10LT5mZXRjaF9wbGFuZXMgPT0gRFBVX1BM QU5FX1BTRVVET19QTEFOQVIpIHsKKwkJaWYgKGZtdC0+Y2hyb21hX3NhbXBsZSA9PSBEUFVfQ0hS T01BXzQyMCkgeworCQkJLyogTlYxMiAqLworCQkJdG90YWxfZmwgPSAoZml4ZWRfYnVmZl9zaXpl IC8gMikgLworCQkJCSgoc3JjX3dpZHRoICsgMzIpICogZm10LT5icHApOworCQl9IGVsc2Ugewor CQkJLyogbm9uIE5WMTIgKi8KKwkJCXRvdGFsX2ZsID0gKGZpeGVkX2J1ZmZfc2l6ZSAvIDIpICog MiAvCisJCQkJKChzcmNfd2lkdGggKyAzMikgKiBmbXQtPmJwcCk7CisJCX0KKwl9IGVsc2Ugewor CQlpZiAocHN0YXRlLT5tdWx0aXJlY3RfbW9kZSA9PSBEUFVfU1NQUF9NVUxUSVJFQ1RfUEFSQUxM RUwpIHsKKwkJCXRvdGFsX2ZsID0gKGZpeGVkX2J1ZmZfc2l6ZSAvIDIpICogMiAvCisJCQkJKChz cmNfd2lkdGggKyAzMikgKiBmbXQtPmJwcCk7CisJCX0gZWxzZSB7CisJCQl0b3RhbF9mbCA9IChm aXhlZF9idWZmX3NpemUpICogMiAvCisJCQkJKChzcmNfd2lkdGggKyAzMikgKiBmbXQtPmJwcCk7 CisJCX0KKwl9CisKKwlEUFVfREVCVUcoInBsYW5lJXU6IHBudW06JWQgZm10OiAlNC40cyB3OiV1 IGZsOiV1XG4iLAorCQkJcGxhbmUtPmJhc2UuaWQsIHBkcHUtPnBpcGUgLSBTU1BQX1ZJRzAsCisJ CQkoY2hhciAqKSZmbXQtPmJhc2UucGl4ZWxfZm9ybWF0LAorCQkJc3JjX3dpZHRoLCB0b3RhbF9m bCk7CisKKwlyZXR1cm4gdG90YWxfZmw7Cit9CisKKy8qKgorICogX2RwdV9wbGFuZV9nZXRfcW9z X2x1dCAtIGdldCBMVVQgbWFwcGluZyBiYXNlZCBvbiBmaWxsIGxldmVsCisgKiBAdGJsOgkJUG9p bnRlciB0byBMVVQgdGFibGUKKyAqIEB0b3RhbF9mbDoJCWZpbGwgbGV2ZWwKKyAqIFJldHVybjog TFVUIHNldHRpbmcgY29ycmVzcG9uZGluZyB0byB0aGUgZmlsbCBsZXZlbAorICovCitzdGF0aWMg dTY0IF9kcHVfcGxhbmVfZ2V0X3Fvc19sdXQoY29uc3Qgc3RydWN0IGRwdV9xb3NfbHV0X3RibCAq dGJsLAorCQl1MzIgdG90YWxfZmwpCit7CisJaW50IGk7CisKKwlpZiAoIXRibCB8fCAhdGJsLT5u ZW50cnkgfHwgIXRibC0+ZW50cmllcykKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGkgPSAwOyBpIDwg dGJsLT5uZW50cnk7IGkrKykKKwkJaWYgKHRvdGFsX2ZsIDw9IHRibC0+ZW50cmllc1tpXS5mbCkK KwkJCXJldHVybiB0YmwtPmVudHJpZXNbaV0ubHV0OworCisJLyogaWYgbGFzdCBmbCBpcyB6ZXJv LCB1c2UgYXMgZGVmYXVsdCAqLworCWlmICghdGJsLT5lbnRyaWVzW2ktMV0uZmwpCisJCXJldHVy biB0YmwtPmVudHJpZXNbaS0xXS5sdXQ7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBfZHB1 X3BsYW5lX3NldF9xb3NfbHV0IC0gc2V0IFFvUyBMVVQgb2YgdGhlIGdpdmVuIHBsYW5lCisgKiBA cGxhbmU6CQlQb2ludGVyIHRvIGRybSBwbGFuZQorICogQGZiOgkJCVBvaW50ZXIgdG8gZnJhbWVi dWZmZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBwbGFuZQorICovCitzdGF0aWMgdm9pZCBf ZHB1X3BsYW5lX3NldF9xb3NfbHV0KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAorCQlzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyICpmYikKK3sKKwlzdHJ1Y3QgZHB1X3BsYW5lICpwZHB1OworCWNvbnN0 IHN0cnVjdCBkcHVfZm9ybWF0ICpmbXQgPSBOVUxMOworCXU2NCBxb3NfbHV0OworCXUzMiB0b3Rh bF9mbCA9IDAsIGx1dF91c2FnZTsKKworCWlmICghcGxhbmUgfHwgIWZiKSB7CisJCURQVV9FUlJP UigiaW52YWxpZCBhcmd1bWVudHMgcGxhbmUgJWQgZmIgJWRcbiIsCisJCQkJcGxhbmUgIT0gMCwg ZmIgIT0gMCk7CisJCXJldHVybjsKKwl9CisKKwlwZHB1ID0gdG9fZHB1X3BsYW5lKHBsYW5lKTsK KworCWlmICghcGRwdS0+cGlwZV9odyB8fCAhcGRwdS0+cGlwZV9zYmxrIHx8ICFwZHB1LT5jYXRh bG9nKSB7CisJCURQVV9FUlJPUigiaW52YWxpZCBhcmd1bWVudHNcbiIpOworCQlyZXR1cm47CisJ fSBlbHNlIGlmICghcGRwdS0+cGlwZV9ody0+b3BzLnNldHVwX2NyZXFfbHV0KSB7CisJCXJldHVy bjsKKwl9CisKKwlpZiAoIXBkcHUtPmlzX3J0X3BpcGUpIHsKKwkJbHV0X3VzYWdlID0gRFBVX1FP U19MVVRfVVNBR0VfTlJUOworCX0gZWxzZSB7CisJCWZtdCA9IGRwdV9nZXRfZHB1X2Zvcm1hdF9l eHQoCisJCQkJZmItPmZvcm1hdC0+Zm9ybWF0LAorCQkJCWZiLT5tb2RpZmllcik7CisJCXRvdGFs X2ZsID0gX2RwdV9wbGFuZV9jYWxjX2ZpbGxfbGV2ZWwocGxhbmUsIGZtdCwKKwkJCQlkcm1fcmVj dF93aWR0aCgmcGRwdS0+cGlwZV9jZmcuc3JjX3JlY3QpKTsKKworCQlpZiAoZm10ICYmIERQVV9G T1JNQVRfSVNfTElORUFSKGZtdCkpCisJCQlsdXRfdXNhZ2UgPSBEUFVfUU9TX0xVVF9VU0FHRV9M SU5FQVI7CisJCWVsc2UKKwkJCWx1dF91c2FnZSA9IERQVV9RT1NfTFVUX1VTQUdFX01BQ1JPVElM RTsKKwl9CisKKwlxb3NfbHV0ID0gX2RwdV9wbGFuZV9nZXRfcW9zX2x1dCgKKwkJCSZwZHB1LT5j YXRhbG9nLT5wZXJmLnFvc19sdXRfdGJsW2x1dF91c2FnZV0sIHRvdGFsX2ZsKTsKKworCXBkcHUt PnBpcGVfcW9zX2NmZy5jcmVxX2x1dCA9IHFvc19sdXQ7CisKKwl0cmFjZV9kcHVfcGVyZl9zZXRf cW9zX2x1dHMocGRwdS0+cGlwZSAtIFNTUFBfVklHMCwKKwkJCShmbXQpID8gZm10LT5iYXNlLnBp eGVsX2Zvcm1hdCA6IDAsCisJCQlwZHB1LT5pc19ydF9waXBlLCB0b3RhbF9mbCwgcW9zX2x1dCwg bHV0X3VzYWdlKTsKKworCURQVV9ERUJVRygicGxhbmUldTogcG51bTolZCBmbXQ6ICU0LjRzIHJ0 OiVkIGZsOiV1IGx1dDoweCVsbHhcbiIsCisJCQlwbGFuZS0+YmFzZS5pZCwKKwkJCXBkcHUtPnBp cGUgLSBTU1BQX1ZJRzAsCisJCQlmbXQgPyAoY2hhciAqKSZmbXQtPmJhc2UucGl4ZWxfZm9ybWF0 IDogTlVMTCwKKwkJCXBkcHUtPmlzX3J0X3BpcGUsIHRvdGFsX2ZsLCBxb3NfbHV0KTsKKworCXBk cHUtPnBpcGVfaHctPm9wcy5zZXR1cF9jcmVxX2x1dChwZHB1LT5waXBlX2h3LCAmcGRwdS0+cGlw ZV9xb3NfY2ZnKTsKK30KKworLyoqCisgKiBfZHB1X3BsYW5lX3NldF9wYW5pY19sdXQgLSBzZXQg ZGFuZ2VyL3NhZmUgTFVUIG9mIHRoZSBnaXZlbiBwbGFuZQorICogQHBsYW5lOgkJUG9pbnRlciB0 byBkcm0gcGxhbmUKKyAqIEBmYjoJCQlQb2ludGVyIHRvIGZyYW1lYnVmZmVyIGFzc29jaWF0ZWQg d2l0aCB0aGUgZ2l2ZW4gcGxhbmUKKyAqLworc3RhdGljIHZvaWQgX2RwdV9wbGFuZV9zZXRfZGFu Z2VyX2x1dChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJc3RydWN0IGRybV9mcmFtZWJ1ZmZl ciAqZmIpCit7CisJc3RydWN0IGRwdV9wbGFuZSAqcGRwdTsKKwljb25zdCBzdHJ1Y3QgZHB1X2Zv cm1hdCAqZm10ID0gTlVMTDsKKwl1MzIgZGFuZ2VyX2x1dCwgc2FmZV9sdXQ7CisKKwlpZiAoIXBs YW5lIHx8ICFmYikgeworCQlEUFVfRVJST1IoImludmFsaWQgYXJndW1lbnRzXG4iKTsKKwkJcmV0 dXJuOworCX0KKworCXBkcHUgPSB0b19kcHVfcGxhbmUocGxhbmUpOworCisJaWYgKCFwZHB1LT5w aXBlX2h3IHx8ICFwZHB1LT5waXBlX3NibGsgfHwgIXBkcHUtPmNhdGFsb2cpIHsKKwkJRFBVX0VS Uk9SKCJpbnZhbGlkIGFyZ3VtZW50c1xuIik7CisJCXJldHVybjsKKwl9IGVsc2UgaWYgKCFwZHB1 LT5waXBlX2h3LT5vcHMuc2V0dXBfZGFuZ2VyX3NhZmVfbHV0KSB7CisJCXJldHVybjsKKwl9CisK KwlpZiAoIXBkcHUtPmlzX3J0X3BpcGUpIHsKKwkJZGFuZ2VyX2x1dCA9IHBkcHUtPmNhdGFsb2ct PnBlcmYuZGFuZ2VyX2x1dF90YmwKKwkJCQlbRFBVX1FPU19MVVRfVVNBR0VfTlJUXTsKKwkJc2Fm ZV9sdXQgPSBwZHB1LT5jYXRhbG9nLT5wZXJmLnNhZmVfbHV0X3RibAorCQkJCVtEUFVfUU9TX0xV VF9VU0FHRV9OUlRdOworCX0gZWxzZSB7CisJCWZtdCA9IGRwdV9nZXRfZHB1X2Zvcm1hdF9leHQo CisJCQkJZmItPmZvcm1hdC0+Zm9ybWF0LAorCQkJCWZiLT5tb2RpZmllcik7CisKKwkJaWYgKGZt dCAmJiBEUFVfRk9STUFUX0lTX0xJTkVBUihmbXQpKSB7CisJCQlkYW5nZXJfbHV0ID0gcGRwdS0+ Y2F0YWxvZy0+cGVyZi5kYW5nZXJfbHV0X3RibAorCQkJCQlbRFBVX1FPU19MVVRfVVNBR0VfTElO RUFSXTsKKwkJCXNhZmVfbHV0ID0gcGRwdS0+Y2F0YWxvZy0+cGVyZi5zYWZlX2x1dF90YmwKKwkJ CQkJW0RQVV9RT1NfTFVUX1VTQUdFX0xJTkVBUl07CisJCX0gZWxzZSB7CisJCQlkYW5nZXJfbHV0 ID0gcGRwdS0+Y2F0YWxvZy0+cGVyZi5kYW5nZXJfbHV0X3RibAorCQkJCQlbRFBVX1FPU19MVVRf VVNBR0VfTUFDUk9USUxFXTsKKwkJCXNhZmVfbHV0ID0gcGRwdS0+Y2F0YWxvZy0+cGVyZi5zYWZl X2x1dF90YmwKKwkJCQkJW0RQVV9RT1NfTFVUX1VTQUdFX01BQ1JPVElMRV07CisJCX0KKwl9CisK KwlwZHB1LT5waXBlX3Fvc19jZmcuZGFuZ2VyX2x1dCA9IGRhbmdlcl9sdXQ7CisJcGRwdS0+cGlw ZV9xb3NfY2ZnLnNhZmVfbHV0ID0gc2FmZV9sdXQ7CisKKwl0cmFjZV9kcHVfcGVyZl9zZXRfZGFu Z2VyX2x1dHMocGRwdS0+cGlwZSAtIFNTUFBfVklHMCwKKwkJCShmbXQpID8gZm10LT5iYXNlLnBp eGVsX2Zvcm1hdCA6IDAsCisJCQkoZm10KSA/IGZtdC0+ZmV0Y2hfbW9kZSA6IDAsCisJCQlwZHB1 LT5waXBlX3Fvc19jZmcuZGFuZ2VyX2x1dCwKKwkJCXBkcHUtPnBpcGVfcW9zX2NmZy5zYWZlX2x1 dCk7CisKKwlEUFVfREVCVUcoInBsYW5lJXU6IHBudW06JWQgZm10OiAlNC40cyBtb2RlOiVkIGx1 dHNbMHgleCwgMHgleF1cbiIsCisJCXBsYW5lLT5iYXNlLmlkLAorCQlwZHB1LT5waXBlIC0gU1NQ UF9WSUcwLAorCQlmbXQgPyAoY2hhciAqKSZmbXQtPmJhc2UucGl4ZWxfZm9ybWF0IDogTlVMTCwK KwkJZm10ID8gZm10LT5mZXRjaF9tb2RlIDogLTEsCisJCXBkcHUtPnBpcGVfcW9zX2NmZy5kYW5n ZXJfbHV0LAorCQlwZHB1LT5waXBlX3Fvc19jZmcuc2FmZV9sdXQpOworCisJcGRwdS0+cGlwZV9o dy0+b3BzLnNldHVwX2Rhbmdlcl9zYWZlX2x1dChwZHB1LT5waXBlX2h3LAorCQkJJnBkcHUtPnBp cGVfcW9zX2NmZyk7Cit9CisKKy8qKgorICogX2RwdV9wbGFuZV9zZXRfcW9zX2N0cmwgLSBzZXQg UW9TIGNvbnRyb2wgb2YgdGhlIGdpdmVuIHBsYW5lCisgKiBAcGxhbmU6CQlQb2ludGVyIHRvIGRy bSBwbGFuZQorICogQGVuYWJsZToJCXRydWUgdG8gZW5hYmxlIFFvUyBjb250cm9sCisgKiBAZmxh Z3M6CQlRb1MgY29udHJvbCBtb2RlIChlbnVtIGRwdV9wbGFuZV9xb3MpCisgKi8KK3N0YXRpYyB2 b2lkIF9kcHVfcGxhbmVfc2V0X3Fvc19jdHJsKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAorCWJv b2wgZW5hYmxlLCB1MzIgZmxhZ3MpCit7CisJc3RydWN0IGRwdV9wbGFuZSAqcGRwdTsKKworCWlm ICghcGxhbmUpIHsKKwkJRFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50c1xuIik7CisJCXJldHVy bjsKKwl9CisKKwlwZHB1ID0gdG9fZHB1X3BsYW5lKHBsYW5lKTsKKworCWlmICghcGRwdS0+cGlw ZV9odyB8fCAhcGRwdS0+cGlwZV9zYmxrKSB7CisJCURQVV9FUlJPUigiaW52YWxpZCBhcmd1bWVu dHNcbiIpOworCQlyZXR1cm47CisJfSBlbHNlIGlmICghcGRwdS0+cGlwZV9ody0+b3BzLnNldHVw X3Fvc19jdHJsKSB7CisJCXJldHVybjsKKwl9CisKKwlpZiAoZmxhZ3MgJiBEUFVfUExBTkVfUU9T X1ZCTEFOS19DVFJMKSB7CisJCXBkcHUtPnBpcGVfcW9zX2NmZy5jcmVxX3ZibGFuayA9IHBkcHUt PnBpcGVfc2Jsay0+Y3JlcV92Ymxhbms7CisJCXBkcHUtPnBpcGVfcW9zX2NmZy5kYW5nZXJfdmJs YW5rID0KKwkJCQlwZHB1LT5waXBlX3NibGstPmRhbmdlcl92Ymxhbms7CisJCXBkcHUtPnBpcGVf cW9zX2NmZy52YmxhbmtfZW4gPSBlbmFibGU7CisJfQorCisJaWYgKGZsYWdzICYgRFBVX1BMQU5F X1FPU19WQkxBTktfQU1PUlRJWkUpIHsKKwkJLyogdGhpcyBmZWF0dXJlIG92ZXJydWxlcyBwcmV2 aW91cyBWQkxBTktfQ1RSTCAqLworCQlwZHB1LT5waXBlX3Fvc19jZmcudmJsYW5rX2VuID0gZmFs c2U7CisJCXBkcHUtPnBpcGVfcW9zX2NmZy5jcmVxX3ZibGFuayA9IDA7IC8qIGNsZWFyIHZibGFu ayBiaXRzICovCisJfQorCisJaWYgKGZsYWdzICYgRFBVX1BMQU5FX1FPU19QQU5JQ19DVFJMKQor CQlwZHB1LT5waXBlX3Fvc19jZmcuZGFuZ2VyX3NhZmVfZW4gPSBlbmFibGU7CisKKwlpZiAoIXBk cHUtPmlzX3J0X3BpcGUpIHsKKwkJcGRwdS0+cGlwZV9xb3NfY2ZnLnZibGFua19lbiA9IGZhbHNl OworCQlwZHB1LT5waXBlX3Fvc19jZmcuZGFuZ2VyX3NhZmVfZW4gPSBmYWxzZTsKKwl9CisKKwlE UFVfREVCVUcoInBsYW5lJXU6IHBudW06JWQgZHM6JWQgdmI6JWQgcHJpWzB4JXgsIDB4JXhdIGlz X3J0OiVkXG4iLAorCQlwbGFuZS0+YmFzZS5pZCwKKwkJcGRwdS0+cGlwZSAtIFNTUFBfVklHMCwK KwkJcGRwdS0+cGlwZV9xb3NfY2ZnLmRhbmdlcl9zYWZlX2VuLAorCQlwZHB1LT5waXBlX3Fvc19j ZmcudmJsYW5rX2VuLAorCQlwZHB1LT5waXBlX3Fvc19jZmcuY3JlcV92YmxhbmssCisJCXBkcHUt PnBpcGVfcW9zX2NmZy5kYW5nZXJfdmJsYW5rLAorCQlwZHB1LT5pc19ydF9waXBlKTsKKworCXBk cHUtPnBpcGVfaHctPm9wcy5zZXR1cF9xb3NfY3RybChwZHB1LT5waXBlX2h3LAorCQkJJnBkcHUt PnBpcGVfcW9zX2NmZyk7Cit9CisKK2ludCBkcHVfcGxhbmVfZGFuZ2VyX3NpZ25hbF9jdHJsKHN0 cnVjdCBkcm1fcGxhbmUgKnBsYW5lLCBib29sIGVuYWJsZSkKK3sKKwlzdHJ1Y3QgZHB1X3BsYW5l ICpwZHB1OworCXN0cnVjdCBtc21fZHJtX3ByaXZhdGUgKnByaXY7CisJc3RydWN0IGRwdV9rbXMg KmRwdV9rbXM7CisKKwlpZiAoIXBsYW5lIHx8ICFwbGFuZS0+ZGV2KSB7CisJCURQVV9FUlJPUigi aW52YWxpZCBhcmd1bWVudHNcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwcml2ID0g cGxhbmUtPmRldi0+ZGV2X3ByaXZhdGU7CisJaWYgKCFwcml2IHx8ICFwcml2LT5rbXMpIHsKKwkJ RFBVX0VSUk9SKCJpbnZhbGlkIEtNUyByZWZlcmVuY2VcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsK Kwl9CisKKwlkcHVfa21zID0gdG9fZHB1X2ttcyhwcml2LT5rbXMpOworCXBkcHUgPSB0b19kcHVf cGxhbmUocGxhbmUpOworCisJaWYgKCFwZHB1LT5pc19ydF9waXBlKQorCQlnb3RvIGVuZDsKKwor CXBtX3J1bnRpbWVfZ2V0X3N5bmMoJmRwdV9rbXMtPnBkZXYtPmRldik7CisJX2RwdV9wbGFuZV9z ZXRfcW9zX2N0cmwocGxhbmUsIGVuYWJsZSwgRFBVX1BMQU5FX1FPU19QQU5JQ19DVFJMKTsKKwlw bV9ydW50aW1lX3B1dF9zeW5jKCZkcHVfa21zLT5wZGV2LT5kZXYpOworCitlbmQ6CisJcmV0dXJu IDA7Cit9CisKKy8qKgorICogX2RwdV9wbGFuZV9zZXRfb3RfbGltaXQgLSBzZXQgT1QgbGltaXQg Zm9yIHRoZSBnaXZlbiBwbGFuZQorICogQHBsYW5lOgkJUG9pbnRlciB0byBkcm0gcGxhbmUKKyAq IEBjcnRjOgkJUG9pbnRlciB0byBkcm0gY3J0YworICovCitzdGF0aWMgdm9pZCBfZHB1X3BsYW5l X3NldF9vdF9saW1pdChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJc3RydWN0IGRybV9jcnRj ICpjcnRjKQoreworCXN0cnVjdCBkcHVfcGxhbmUgKnBkcHU7CisJc3RydWN0IGRwdV92YmlmX3Nl dF9vdF9wYXJhbXMgb3RfcGFyYW1zOworCXN0cnVjdCBtc21fZHJtX3ByaXZhdGUgKnByaXY7CisJ c3RydWN0IGRwdV9rbXMgKmRwdV9rbXM7CisKKwlpZiAoIXBsYW5lIHx8ICFwbGFuZS0+ZGV2IHx8 ICFjcnRjKSB7CisJCURQVV9FUlJPUigiaW52YWxpZCBhcmd1bWVudHMgcGxhbmUgJWQgY3J0YyAl ZFxuIiwKKwkJCQlwbGFuZSAhPSAwLCBjcnRjICE9IDApOworCQlyZXR1cm47CisJfQorCisJcHJp diA9IHBsYW5lLT5kZXYtPmRldl9wcml2YXRlOworCWlmICghcHJpdiB8fCAhcHJpdi0+a21zKSB7 CisJCURQVV9FUlJPUigiaW52YWxpZCBLTVMgcmVmZXJlbmNlXG4iKTsKKwkJcmV0dXJuOworCX0K KworCWRwdV9rbXMgPSB0b19kcHVfa21zKHByaXYtPmttcyk7CisJcGRwdSA9IHRvX2RwdV9wbGFu ZShwbGFuZSk7CisJaWYgKCFwZHB1LT5waXBlX2h3KSB7CisJCURQVV9FUlJPUigiaW52YWxpZCBw aXBlIHJlZmVyZW5jZVxuIik7CisJCXJldHVybjsKKwl9CisKKwltZW1zZXQoJm90X3BhcmFtcywg MCwgc2l6ZW9mKG90X3BhcmFtcykpOworCW90X3BhcmFtcy54aW5faWQgPSBwZHB1LT5waXBlX2h3 LT5jYXAtPnhpbl9pZDsKKwlvdF9wYXJhbXMubnVtID0gcGRwdS0+cGlwZV9ody0+aWR4IC0gU1NQ UF9OT05FOworCW90X3BhcmFtcy53aWR0aCA9IGRybV9yZWN0X3dpZHRoKCZwZHB1LT5waXBlX2Nm Zy5zcmNfcmVjdCk7CisJb3RfcGFyYW1zLmhlaWdodCA9IGRybV9yZWN0X2hlaWdodCgmcGRwdS0+ cGlwZV9jZmcuc3JjX3JlY3QpOworCW90X3BhcmFtcy5pc193ZmQgPSAhcGRwdS0+aXNfcnRfcGlw ZTsKKwlvdF9wYXJhbXMuZnJhbWVfcmF0ZSA9IGNydGMtPm1vZGUudnJlZnJlc2g7CisJb3RfcGFy YW1zLnZiaWZfaWR4ID0gVkJJRl9SVDsKKwlvdF9wYXJhbXMuY2xrX2N0cmwgPSBwZHB1LT5waXBl X2h3LT5jYXAtPmNsa19jdHJsOworCW90X3BhcmFtcy5yZCA9IHRydWU7CisKKwlkcHVfdmJpZl9z ZXRfb3RfbGltaXQoZHB1X2ttcywgJm90X3BhcmFtcyk7Cit9CisKKy8qKgorICogX2RwdV9wbGFu ZV9zZXRfdmJpZl9xb3MgLSBzZXQgdmJpZiBRb1MgZm9yIHRoZSBnaXZlbiBwbGFuZQorICogQHBs YW5lOgkJUG9pbnRlciB0byBkcm0gcGxhbmUKKyAqLworc3RhdGljIHZvaWQgX2RwdV9wbGFuZV9z ZXRfcW9zX3JlbWFwKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQoreworCXN0cnVjdCBkcHVfcGxh bmUgKnBkcHU7CisJc3RydWN0IGRwdV92YmlmX3NldF9xb3NfcGFyYW1zIHFvc19wYXJhbXM7CisJ c3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdjsKKwlzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttczsK KworCWlmICghcGxhbmUgfHwgIXBsYW5lLT5kZXYpIHsKKwkJRFBVX0VSUk9SKCJpbnZhbGlkIGFy Z3VtZW50c1xuIik7CisJCXJldHVybjsKKwl9CisKKwlwcml2ID0gcGxhbmUtPmRldi0+ZGV2X3By aXZhdGU7CisJaWYgKCFwcml2IHx8ICFwcml2LT5rbXMpIHsKKwkJRFBVX0VSUk9SKCJpbnZhbGlk IEtNUyByZWZlcmVuY2VcbiIpOworCQlyZXR1cm47CisJfQorCisJZHB1X2ttcyA9IHRvX2RwdV9r bXMocHJpdi0+a21zKTsKKwlwZHB1ID0gdG9fZHB1X3BsYW5lKHBsYW5lKTsKKwlpZiAoIXBkcHUt PnBpcGVfaHcpIHsKKwkJRFBVX0VSUk9SKCJpbnZhbGlkIHBpcGUgcmVmZXJlbmNlXG4iKTsKKwkJ cmV0dXJuOworCX0KKworCW1lbXNldCgmcW9zX3BhcmFtcywgMCwgc2l6ZW9mKHFvc19wYXJhbXMp KTsKKwlxb3NfcGFyYW1zLnZiaWZfaWR4ID0gVkJJRl9SVDsKKwlxb3NfcGFyYW1zLmNsa19jdHJs ID0gcGRwdS0+cGlwZV9ody0+Y2FwLT5jbGtfY3RybDsKKwlxb3NfcGFyYW1zLnhpbl9pZCA9IHBk cHUtPnBpcGVfaHctPmNhcC0+eGluX2lkOworCXFvc19wYXJhbXMubnVtID0gcGRwdS0+cGlwZV9o dy0+aWR4IC0gU1NQUF9WSUcwOworCXFvc19wYXJhbXMuaXNfcnQgPSBwZHB1LT5pc19ydF9waXBl OworCisJRFBVX0RFQlVHKCJwbGFuZSVkIHBpcGU6JWQgdmJpZjolZCB4aW46JWQgcnQ6JWQsIGNs a19jdHJsOiVkXG4iLAorCQkJcGxhbmUtPmJhc2UuaWQsIHFvc19wYXJhbXMubnVtLAorCQkJcW9z X3BhcmFtcy52YmlmX2lkeCwKKwkJCXFvc19wYXJhbXMueGluX2lkLCBxb3NfcGFyYW1zLmlzX3J0 LAorCQkJcW9zX3BhcmFtcy5jbGtfY3RybCk7CisKKwlkcHVfdmJpZl9zZXRfcW9zX3JlbWFwKGRw dV9rbXMsICZxb3NfcGFyYW1zKTsKK30KKworLyoqCisgKiBfZHB1X3BsYW5lX2dldF9hc3BhY2U6 IGdldHMgdGhlIGFkZHJlc3Mgc3BhY2UKKyAqLworc3RhdGljIGludCBfZHB1X3BsYW5lX2dldF9h c3BhY2UoCisJCXN0cnVjdCBkcHVfcGxhbmUgKnBkcHUsCisJCXN0cnVjdCBkcHVfcGxhbmVfc3Rh dGUgKnBzdGF0ZSwKKwkJc3RydWN0IG1zbV9nZW1fYWRkcmVzc19zcGFjZSAqKmFzcGFjZSkKK3sK KwlzdHJ1Y3QgZHB1X2ttcyAqa21zOworCisJaWYgKCFwZHB1IHx8ICFwc3RhdGUgfHwgIWFzcGFj ZSkgeworCQlEUFVfRVJST1IoImludmFsaWQgcGFyYW1ldGVyc1xuIik7CisJCXJldHVybiAtRUlO VkFMOworCX0KKworCWttcyA9IF9kcHVfcGxhbmVfZ2V0X2ttcygmcGRwdS0+YmFzZSk7CisJaWYg KCFrbXMpIHsKKwkJRFBVX0VSUk9SKCJpbnZhbGlkIGttc1xuIik7CisJCXJldHVybiAtRUlOVkFM OworCX0KKworCSphc3BhY2UgPSBrbXMtPmJhc2UuYXNwYWNlOworCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbmxpbmUgdm9pZCBfZHB1X3BsYW5lX3NldF9zY2Fub3V0KHN0cnVjdCBkcm1fcGxh bmUgKnBsYW5lLAorCQlzdHJ1Y3QgZHB1X3BsYW5lX3N0YXRlICpwc3RhdGUsCisJCXN0cnVjdCBk cHVfaHdfcGlwZV9jZmcgKnBpcGVfY2ZnLAorCQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikK K3sKKwlzdHJ1Y3QgZHB1X3BsYW5lICpwZHB1OworCXN0cnVjdCBtc21fZ2VtX2FkZHJlc3Nfc3Bh Y2UgKmFzcGFjZSA9IE5VTEw7CisJaW50IHJldDsKKworCWlmICghcGxhbmUgfHwgIXBzdGF0ZSB8 fCAhcGlwZV9jZmcgfHwgIWZiKSB7CisJCURQVV9FUlJPUigKKwkJCSJpbnZhbGlkIGFyZyhzKSwg cGxhbmUgJWQgc3RhdGUgJWQgY2ZnICVkIGZiICVkXG4iLAorCQkJcGxhbmUgIT0gMCwgcHN0YXRl ICE9IDAsIHBpcGVfY2ZnICE9IDAsIGZiICE9IDApOworCQlyZXR1cm47CisJfQorCisJcGRwdSA9 IHRvX2RwdV9wbGFuZShwbGFuZSk7CisJaWYgKCFwZHB1LT5waXBlX2h3KSB7CisJCURQVV9FUlJP Ul9QTEFORShwZHB1LCAiaW52YWxpZCBwaXBlX2h3XG4iKTsKKwkJcmV0dXJuOworCX0KKworCXJl dCA9IF9kcHVfcGxhbmVfZ2V0X2FzcGFjZShwZHB1LCBwc3RhdGUsICZhc3BhY2UpOworCWlmIChy ZXQpIHsKKwkJRFBVX0VSUk9SX1BMQU5FKHBkcHUsICJGYWlsZWQgdG8gZ2V0IGFzcGFjZSAlZFxu IiwgcmV0KTsKKwkJcmV0dXJuOworCX0KKworCXJldCA9IGRwdV9mb3JtYXRfcG9wdWxhdGVfbGF5 b3V0KGFzcGFjZSwgZmIsICZwaXBlX2NmZy0+bGF5b3V0KTsKKwlpZiAocmV0ID09IC1FQUdBSU4p CisJCURQVV9ERUJVR19QTEFORShwZHB1LCAibm90IHVwZGF0aW5nIHNhbWUgc3JjIGFkZHJzXG4i KTsKKwllbHNlIGlmIChyZXQpCisJCURQVV9FUlJPUl9QTEFORShwZHB1LCAiZmFpbGVkIHRvIGdl dCBmb3JtYXQgbGF5b3V0LCAlZFxuIiwgcmV0KTsKKwllbHNlIGlmIChwZHB1LT5waXBlX2h3LT5v cHMuc2V0dXBfc291cmNlYWRkcmVzcykgeworCQl0cmFjZV9kcHVfcGxhbmVfc2V0X3NjYW5vdXQo cGRwdS0+cGlwZV9ody0+aWR4LAorCQkJCQkgICAgJnBpcGVfY2ZnLT5sYXlvdXQsCisJCQkJCSAg ICBwc3RhdGUtPm11bHRpcmVjdF9pbmRleCk7CisJCXBkcHUtPnBpcGVfaHctPm9wcy5zZXR1cF9z b3VyY2VhZGRyZXNzKHBkcHUtPnBpcGVfaHcsIHBpcGVfY2ZnLAorCQkJCQkJcHN0YXRlLT5tdWx0 aXJlY3RfaW5kZXgpOworCX0KK30KKworc3RhdGljIHZvaWQgX2RwdV9wbGFuZV9zZXR1cF9zY2Fs ZXIzKHN0cnVjdCBkcHVfcGxhbmUgKnBkcHUsCisJCXN0cnVjdCBkcHVfcGxhbmVfc3RhdGUgKnBz dGF0ZSwKKwkJdWludDMyX3Qgc3JjX3csIHVpbnQzMl90IHNyY19oLCB1aW50MzJfdCBkc3Rfdywg dWludDMyX3QgZHN0X2gsCisJCXN0cnVjdCBkcHVfaHdfc2NhbGVyM19jZmcgKnNjYWxlX2NmZywK KwkJY29uc3Qgc3RydWN0IGRwdV9mb3JtYXQgKmZtdCwKKwkJdWludDMyX3QgY2hyb21hX3N1YnNt cGxfaCwgdWludDMyX3QgY2hyb21hX3N1YnNtcGxfdikKK3sKKwl1aW50MzJfdCBpOworCisJaWYg KCFwZHB1IHx8ICFwc3RhdGUgfHwgIXNjYWxlX2NmZyB8fCAhZm10IHx8ICFjaHJvbWFfc3Vic21w bF9oIHx8CisJCQkhY2hyb21hX3N1YnNtcGxfdikgeworCQlEUFVfRVJST1IoCisJCQkicGRwdSAl ZCBwc3RhdGUgJWQgc2NhbGVfY2ZnICVkIGZtdCAlZCBzbXBfaCAlZCBzbXBfdiAlZFxuIiwKKwkJ CSEhcGRwdSwgISFwc3RhdGUsICEhc2NhbGVfY2ZnLCAhIWZtdCwgY2hyb21hX3N1YnNtcGxfaCwK KwkJCWNocm9tYV9zdWJzbXBsX3YpOworCQlyZXR1cm47CisJfQorCisJbWVtc2V0KHNjYWxlX2Nm ZywgMCwgc2l6ZW9mKCpzY2FsZV9jZmcpKTsKKwltZW1zZXQoJnBzdGF0ZS0+cGl4ZWxfZXh0LCAw LCBzaXplb2Yoc3RydWN0IGRwdV9od19waXhlbF9leHQpKTsKKworCXNjYWxlX2NmZy0+cGhhc2Vf c3RlcF94W0RQVV9TU1BQX0NPTVBfMF0gPQorCQltdWx0X2ZyYWMoKDEgPDwgUEhBU0VfU1RFUF9T SElGVCksIHNyY193LCBkc3Rfdyk7CisJc2NhbGVfY2ZnLT5waGFzZV9zdGVwX3lbRFBVX1NTUFBf Q09NUF8wXSA9CisJCW11bHRfZnJhYygoMSA8PCBQSEFTRV9TVEVQX1NISUZUKSwgc3JjX2gsIGRz dF9oKTsKKworCisJc2NhbGVfY2ZnLT5waGFzZV9zdGVwX3lbRFBVX1NTUFBfQ09NUF8xXzJdID0K KwkJc2NhbGVfY2ZnLT5waGFzZV9zdGVwX3lbRFBVX1NTUFBfQ09NUF8wXSAvIGNocm9tYV9zdWJz bXBsX3Y7CisJc2NhbGVfY2ZnLT5waGFzZV9zdGVwX3hbRFBVX1NTUFBfQ09NUF8xXzJdID0KKwkJ c2NhbGVfY2ZnLT5waGFzZV9zdGVwX3hbRFBVX1NTUFBfQ09NUF8wXSAvIGNocm9tYV9zdWJzbXBs X2g7CisKKwlzY2FsZV9jZmctPnBoYXNlX3N0ZXBfeFtEUFVfU1NQUF9DT01QXzJdID0KKwkJc2Nh bGVfY2ZnLT5waGFzZV9zdGVwX3hbRFBVX1NTUFBfQ09NUF8xXzJdOworCXNjYWxlX2NmZy0+cGhh c2Vfc3RlcF95W0RQVV9TU1BQX0NPTVBfMl0gPQorCQlzY2FsZV9jZmctPnBoYXNlX3N0ZXBfeVtE UFVfU1NQUF9DT01QXzFfMl07CisKKwlzY2FsZV9jZmctPnBoYXNlX3N0ZXBfeFtEUFVfU1NQUF9D T01QXzNdID0KKwkJc2NhbGVfY2ZnLT5waGFzZV9zdGVwX3hbRFBVX1NTUFBfQ09NUF8wXTsKKwlz Y2FsZV9jZmctPnBoYXNlX3N0ZXBfeVtEUFVfU1NQUF9DT01QXzNdID0KKwkJc2NhbGVfY2ZnLT5w aGFzZV9zdGVwX3lbRFBVX1NTUFBfQ09NUF8wXTsKKworCWZvciAoaSA9IDA7IGkgPCBEUFVfTUFY X1BMQU5FUzsgaSsrKSB7CisJCXNjYWxlX2NmZy0+c3JjX3dpZHRoW2ldID0gc3JjX3c7CisJCXNj YWxlX2NmZy0+c3JjX2hlaWdodFtpXSA9IHNyY19oOworCQlpZiAoaSA9PSBEUFVfU1NQUF9DT01Q XzFfMiB8fCBpID09IERQVV9TU1BQX0NPTVBfMikgeworCQkJc2NhbGVfY2ZnLT5zcmNfd2lkdGhb aV0gLz0gY2hyb21hX3N1YnNtcGxfaDsKKwkJCXNjYWxlX2NmZy0+c3JjX2hlaWdodFtpXSAvPSBj aHJvbWFfc3Vic21wbF92OworCQl9CisJCXNjYWxlX2NmZy0+cHJlbG9hZF94W2ldID0gRFBVX1FT RUVEM19ERUZBVUxUX1BSRUxPQURfSDsKKwkJc2NhbGVfY2ZnLT5wcmVsb2FkX3lbaV0gPSBEUFVf UVNFRUQzX0RFRkFVTFRfUFJFTE9BRF9WOworCQlwc3RhdGUtPnBpeGVsX2V4dC5udW1fZXh0X3B4 bHNfdG9wW2ldID0KKwkJCXNjYWxlX2NmZy0+c3JjX2hlaWdodFtpXTsKKwkJcHN0YXRlLT5waXhl bF9leHQubnVtX2V4dF9weGxzX2xlZnRbaV0gPQorCQkJc2NhbGVfY2ZnLT5zcmNfd2lkdGhbaV07 CisJfQorCWlmICghKERQVV9GT1JNQVRfSVNfWVVWKGZtdCkpICYmIChzcmNfaCA9PSBkc3RfaCkK KwkJJiYgKHNyY193ID09IGRzdF93KSkKKwkJcmV0dXJuOworCisJc2NhbGVfY2ZnLT5kc3Rfd2lk dGggPSBkc3RfdzsKKwlzY2FsZV9jZmctPmRzdF9oZWlnaHQgPSBkc3RfaDsKKwlzY2FsZV9jZmct PnlfcmdiX2ZpbHRlcl9jZmcgPSBEUFVfU0NBTEVfQklMOworCXNjYWxlX2NmZy0+dXZfZmlsdGVy X2NmZyA9IERQVV9TQ0FMRV9CSUw7CisJc2NhbGVfY2ZnLT5hbHBoYV9maWx0ZXJfY2ZnID0gRFBV X1NDQUxFX0FMUEhBX0JJTDsKKwlzY2FsZV9jZmctPmx1dF9mbGFnID0gMDsKKwlzY2FsZV9jZmct PmJsZW5kX2NmZyA9IDE7CisJc2NhbGVfY2ZnLT5lbmFibGUgPSAxOworfQorCitzdGF0aWMgaW5s aW5lIHZvaWQgX2RwdV9wbGFuZV9zZXR1cF9jc2Moc3RydWN0IGRwdV9wbGFuZSAqcGRwdSkKK3sK KwlzdGF0aWMgY29uc3Qgc3RydWN0IGRwdV9jc2NfY2ZnIGRwdV9jc2NfWVVWMlJHQl82MDFMID0g eworCQl7CisJCQkvKiBTMTUuMTYgZm9ybWF0ICovCisJCQkweDAwMDEyQTAwLCAweDAwMDAwMDAw LCAweDAwMDE5ODgwLAorCQkJMHgwMDAxMkEwMCwgMHhGRkZGOUI4MCwgMHhGRkZGMzAwMCwKKwkJ CTB4MDAwMTJBMDAsIDB4MDAwMjA0ODAsIDB4MDAwMDAwMDAsCisJCX0sCisJCS8qIHNpZ25lZCBi aWFzICovCisJCXsgMHhmZmYwLCAweGZmODAsIDB4ZmY4MCx9LAorCQl7IDB4MCwgMHgwLCAweDAs fSwKKwkJLyogdW5zaWduZWQgY2xhbXAgKi8KKwkJeyAweDEwLCAweGViLCAweDEwLCAweGYwLCAw eDEwLCAweGYwLH0sCisJCXsgMHgwMCwgMHhmZiwgMHgwMCwgMHhmZiwgMHgwMCwgMHhmZix9LAor CX07CisJc3RhdGljIGNvbnN0IHN0cnVjdCBkcHVfY3NjX2NmZyBkcHVfY3NjMTBfWVVWMlJHQl82 MDFMID0geworCQl7CisJCQkvKiBTMTUuMTYgZm9ybWF0ICovCisJCQkweDAwMDEyQTAwLCAweDAw MDAwMDAwLCAweDAwMDE5ODgwLAorCQkJMHgwMDAxMkEwMCwgMHhGRkZGOUI4MCwgMHhGRkZGMzAw MCwKKwkJCTB4MDAwMTJBMDAsIDB4MDAwMjA0ODAsIDB4MDAwMDAwMDAsCisJCQl9LAorCQkvKiBz aWduZWQgYmlhcyAqLworCQl7IDB4ZmZjMCwgMHhmZTAwLCAweGZlMDAsfSwKKwkJeyAweDAsIDB4 MCwgMHgwLH0sCisJCS8qIHVuc2lnbmVkIGNsYW1wICovCisJCXsgMHg0MCwgMHgzYWMsIDB4NDAs IDB4M2MwLCAweDQwLCAweDNjMCx9LAorCQl7IDB4MDAsIDB4M2ZmLCAweDAwLCAweDNmZiwgMHgw MCwgMHgzZmYsfSwKKwl9OworCisJaWYgKCFwZHB1KSB7CisJCURQVV9FUlJPUigiaW52YWxpZCBw bGFuZVxuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoQklUKERQVV9TU1BQX0NTQ18xMEJJVCkg JiBwZHB1LT5mZWF0dXJlcykKKwkJcGRwdS0+Y3NjX3B0ciA9IChzdHJ1Y3QgZHB1X2NzY19jZmcg KikmZHB1X2NzYzEwX1lVVjJSR0JfNjAxTDsKKwllbHNlCisJCXBkcHUtPmNzY19wdHIgPSAoc3Ry dWN0IGRwdV9jc2NfY2ZnICopJmRwdV9jc2NfWVVWMlJHQl82MDFMOworCisJRFBVX0RFQlVHX1BM QU5FKHBkcHUsICJ1c2luZyAweCVYIDB4JVggMHglWC4uLlxuIiwKKwkJCXBkcHUtPmNzY19wdHIt PmNzY19tdlswXSwKKwkJCXBkcHUtPmNzY19wdHItPmNzY19tdlsxXSwKKwkJCXBkcHUtPmNzY19w dHItPmNzY19tdlsyXSk7Cit9CisKK3N0YXRpYyB2b2lkIF9kcHVfcGxhbmVfc2V0dXBfc2NhbGVy KHN0cnVjdCBkcHVfcGxhbmUgKnBkcHUsCisJCXN0cnVjdCBkcHVfcGxhbmVfc3RhdGUgKnBzdGF0 ZSwKKwkJY29uc3Qgc3RydWN0IGRwdV9mb3JtYXQgKmZtdCwgYm9vbCBjb2xvcl9maWxsKQorewor CXN0cnVjdCBkcHVfaHdfcGl4ZWxfZXh0ICpwZTsKKwl1aW50MzJfdCBjaHJvbWFfc3Vic21wbF9o LCBjaHJvbWFfc3Vic21wbF92OworCisJaWYgKCFwZHB1IHx8ICFmbXQgfHwgIXBzdGF0ZSkgewor CQlEUFVfRVJST1IoImludmFsaWQgYXJnKHMpLCBwbGFuZSAlZCBmbXQgJWQgc3RhdGUgJWRcbiIs CisJCQkJcGRwdSAhPSAwLCBmbXQgIT0gMCwgcHN0YXRlICE9IDApOworCQlyZXR1cm47CisJfQor CisJcGUgPSAmcHN0YXRlLT5waXhlbF9leHQ7CisKKwkvKiBkb24ndCBjaHJvbWEgc3Vic2FtcGxl IGlmIGRlY2ltYXRpbmcgKi8KKwljaHJvbWFfc3Vic21wbF9oID0KKwkJZHJtX2Zvcm1hdF9ob3J6 X2Nocm9tYV9zdWJzYW1wbGluZyhmbXQtPmJhc2UucGl4ZWxfZm9ybWF0KTsKKwljaHJvbWFfc3Vi c21wbF92ID0KKwkJZHJtX2Zvcm1hdF92ZXJ0X2Nocm9tYV9zdWJzYW1wbGluZyhmbXQtPmJhc2Uu cGl4ZWxfZm9ybWF0KTsKKworCS8qIHVwZGF0ZSBzY2FsZXIuIGNhbGN1bGF0ZSBkZWZhdWx0IGNv bmZpZyBmb3IgUVNFRUQzICovCisJX2RwdV9wbGFuZV9zZXR1cF9zY2FsZXIzKHBkcHUsIHBzdGF0 ZSwKKwkJCWRybV9yZWN0X3dpZHRoKCZwZHB1LT5waXBlX2NmZy5zcmNfcmVjdCksCisJCQlkcm1f cmVjdF9oZWlnaHQoJnBkcHUtPnBpcGVfY2ZnLnNyY19yZWN0KSwKKwkJCWRybV9yZWN0X3dpZHRo KCZwZHB1LT5waXBlX2NmZy5kc3RfcmVjdCksCisJCQlkcm1fcmVjdF9oZWlnaHQoJnBkcHUtPnBp cGVfY2ZnLmRzdF9yZWN0KSwKKwkJCSZwc3RhdGUtPnNjYWxlcjNfY2ZnLCBmbXQsCisJCQljaHJv bWFfc3Vic21wbF9oLCBjaHJvbWFfc3Vic21wbF92KTsKK30KKworLyoqCisgKiBfZHB1X3BsYW5l X2NvbG9yX2ZpbGwgLSBlbmFibGVzIGNvbG9yIGZpbGwgb24gcGxhbmUKKyAqIEBwZHB1OiAgIFBv aW50ZXIgdG8gRFBVIHBsYW5lIG9iamVjdAorICogQGNvbG9yOiAgUkdCIGZpbGwgY29sb3IgdmFs dWUsIFsyMy4uMTZdIEJsdWUsIFsxNS4uOF0gR3JlZW4sIFs3Li4wXSBSZWQKKyAqIEBhbHBoYTog IDgtYml0IGZpbGwgYWxwaGEgdmFsdWUsIDI1NSBzZWxlY3RzIDEwMCUgYWxwaGEKKyAqIFJldHVy bnM6IDAgb24gc3VjY2VzcworICovCitzdGF0aWMgaW50IF9kcHVfcGxhbmVfY29sb3JfZmlsbChz dHJ1Y3QgZHB1X3BsYW5lICpwZHB1LAorCQl1aW50MzJfdCBjb2xvciwgdWludDMyX3QgYWxwaGEp Cit7CisJY29uc3Qgc3RydWN0IGRwdV9mb3JtYXQgKmZtdDsKKwljb25zdCBzdHJ1Y3QgZHJtX3Bs YW5lICpwbGFuZTsKKwlzdHJ1Y3QgZHB1X3BsYW5lX3N0YXRlICpwc3RhdGU7CisKKwlpZiAoIXBk cHUgfHwgIXBkcHUtPmJhc2Uuc3RhdGUpIHsKKwkJRFBVX0VSUk9SKCJpbnZhbGlkIHBsYW5lXG4i KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFwZHB1LT5waXBlX2h3KSB7CisJCURQ VV9FUlJPUl9QTEFORShwZHB1LCAiaW52YWxpZCBwbGFuZSBoL3cgcG9pbnRlclxuIik7CisJCXJl dHVybiAtRUlOVkFMOworCX0KKworCXBsYW5lID0gJnBkcHUtPmJhc2U7CisJcHN0YXRlID0gdG9f ZHB1X3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7CisKKwlEUFVfREVCVUdfUExBTkUocGRwdSwg IlxuIik7CisKKwkvKgorCSAqIHNlbGVjdCBmaWxsIGZvcm1hdCB0byBtYXRjaCB1c2VyIHByb3Bl cnR5IGV4cGVjdGF0aW9uLAorCSAqIGgvdyBvbmx5IHN1cHBvcnRzIFJHQiB2YXJpYW50cworCSAq LworCWZtdCA9IGRwdV9nZXRfZHB1X2Zvcm1hdChEUk1fRk9STUFUX0FCR1I4ODg4KTsKKworCS8q IHVwZGF0ZSBzc3BwICovCisJaWYgKGZtdCAmJiBwZHB1LT5waXBlX2h3LT5vcHMuc2V0dXBfc29s aWRmaWxsKSB7CisJCXBkcHUtPnBpcGVfaHctPm9wcy5zZXR1cF9zb2xpZGZpbGwocGRwdS0+cGlw ZV9odywKKwkJCQkoY29sb3IgJiAweEZGRkZGRikgfCAoKGFscGhhICYgMHhGRikgPDwgMjQpLAor CQkJCXBzdGF0ZS0+bXVsdGlyZWN0X2luZGV4KTsKKworCQkvKiBvdmVycmlkZSBzY2FsZXIvZGVj aW1hdGlvbiBpZiBzb2xpZCBmaWxsICovCisJCXBkcHUtPnBpcGVfY2ZnLnNyY19yZWN0LngxID0g MDsKKwkJcGRwdS0+cGlwZV9jZmcuc3JjX3JlY3QueTEgPSAwOworCQlwZHB1LT5waXBlX2NmZy5z cmNfcmVjdC54MiA9CisJCQlkcm1fcmVjdF93aWR0aCgmcGRwdS0+cGlwZV9jZmcuZHN0X3JlY3Qp OworCQlwZHB1LT5waXBlX2NmZy5zcmNfcmVjdC55MiA9CisJCQlkcm1fcmVjdF9oZWlnaHQoJnBk cHUtPnBpcGVfY2ZnLmRzdF9yZWN0KTsKKwkJX2RwdV9wbGFuZV9zZXR1cF9zY2FsZXIocGRwdSwg cHN0YXRlLCBmbXQsIHRydWUpOworCisJCWlmIChwZHB1LT5waXBlX2h3LT5vcHMuc2V0dXBfZm9y bWF0KQorCQkJcGRwdS0+cGlwZV9ody0+b3BzLnNldHVwX2Zvcm1hdChwZHB1LT5waXBlX2h3LAor CQkJCQlmbXQsIERQVV9TU1BQX1NPTElEX0ZJTEwsCisJCQkJCXBzdGF0ZS0+bXVsdGlyZWN0X2lu ZGV4KTsKKworCQlpZiAocGRwdS0+cGlwZV9ody0+b3BzLnNldHVwX3JlY3RzKQorCQkJcGRwdS0+ cGlwZV9ody0+b3BzLnNldHVwX3JlY3RzKHBkcHUtPnBpcGVfaHcsCisJCQkJCSZwZHB1LT5waXBl X2NmZywKKwkJCQkJcHN0YXRlLT5tdWx0aXJlY3RfaW5kZXgpOworCisJCWlmIChwZHB1LT5waXBl X2h3LT5vcHMuc2V0dXBfcGUpCisJCQlwZHB1LT5waXBlX2h3LT5vcHMuc2V0dXBfcGUocGRwdS0+ cGlwZV9odywKKwkJCQkJJnBzdGF0ZS0+cGl4ZWxfZXh0KTsKKworCQlpZiAocGRwdS0+cGlwZV9o dy0+b3BzLnNldHVwX3NjYWxlciAmJgorCQkJCXBzdGF0ZS0+bXVsdGlyZWN0X2luZGV4ICE9IERQ VV9TU1BQX1JFQ1RfMSkKKwkJCXBkcHUtPnBpcGVfaHctPm9wcy5zZXR1cF9zY2FsZXIocGRwdS0+ cGlwZV9odywKKwkJCQkJJnBkcHUtPnBpcGVfY2ZnLCAmcHN0YXRlLT5waXhlbF9leHQsCisJCQkJ CSZwc3RhdGUtPnNjYWxlcjNfY2ZnKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBkcHVf cGxhbmVfY2xlYXJfbXVsdGlyZWN0KGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKmRybV9z dGF0ZSkKK3sKKwlzdHJ1Y3QgZHB1X3BsYW5lX3N0YXRlICpwc3RhdGU7CisKKwlpZiAoIWRybV9z dGF0ZSkKKwkJcmV0dXJuOworCisJcHN0YXRlID0gdG9fZHB1X3BsYW5lX3N0YXRlKGRybV9zdGF0 ZSk7CisKKwlwc3RhdGUtPm11bHRpcmVjdF9pbmRleCA9IERQVV9TU1BQX1JFQ1RfU09MTzsKKwlw c3RhdGUtPm11bHRpcmVjdF9tb2RlID0gRFBVX1NTUFBfTVVMVElSRUNUX05PTkU7Cit9CisKK2lu dCBkcHVfcGxhbmVfdmFsaWRhdGVfbXVsdGlyZWN0X3YyKHN0cnVjdCBkcHVfbXVsdGlyZWN0X3Bs YW5lX3N0YXRlcyAqcGxhbmUpCit7CisJc3RydWN0IGRwdV9wbGFuZV9zdGF0ZSAqcHN0YXRlW1Jf TUFYXTsKKwljb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpkcm1fc3RhdGVbUl9NQVhdOwor CXN0cnVjdCBkcm1fcmVjdCBzcmNbUl9NQVhdLCBkc3RbUl9NQVhdOworCXN0cnVjdCBkcHVfcGxh bmUgKmRwdV9wbGFuZVtSX01BWF07CisJY29uc3Qgc3RydWN0IGRwdV9mb3JtYXQgKmZtdFtSX01B WF07CisJaW50IGksIGJ1ZmZlcl9saW5lczsKKwl1bnNpZ25lZCBpbnQgbWF4X3RpbGVfaGVpZ2h0 ID0gMTsKKwlib29sIHBhcmFsbGVsX2ZldGNoX3F1YWxpZmllZCA9IHRydWU7CisJYm9vbCBoYXNf dGlsZWRfcmVjdCA9IGZhbHNlOworCisJZm9yIChpID0gMDsgaSA8IFJfTUFYOyBpKyspIHsKKwkJ Y29uc3Qgc3RydWN0IG1zbV9mb3JtYXQgKm1zbV9mbXQ7CisKKwkJZHJtX3N0YXRlW2ldID0gaSA/ IHBsYW5lLT5yMSA6IHBsYW5lLT5yMDsKKwkJbXNtX2ZtdCA9IG1zbV9mcmFtZWJ1ZmZlcl9mb3Jt YXQoZHJtX3N0YXRlW2ldLT5mYik7CisJCWZtdFtpXSA9IHRvX2RwdV9mb3JtYXQobXNtX2ZtdCk7 CisKKwkJaWYgKERQVV9GT1JNQVRfSVNfVUJXQyhmbXRbaV0pKSB7CisJCQloYXNfdGlsZWRfcmVj dCA9IHRydWU7CisJCQlpZiAoZm10W2ldLT50aWxlX2hlaWdodCA+IG1heF90aWxlX2hlaWdodCkK KwkJCQltYXhfdGlsZV9oZWlnaHQgPSBmbXRbaV0tPnRpbGVfaGVpZ2h0OworCQl9CisJfQorCisJ Zm9yIChpID0gMDsgaSA8IFJfTUFYOyBpKyspIHsKKwkJaW50IHdpZHRoX3RocmVzaG9sZDsKKwor CQlwc3RhdGVbaV0gPSB0b19kcHVfcGxhbmVfc3RhdGUoZHJtX3N0YXRlW2ldKTsKKwkJZHB1X3Bs YW5lW2ldID0gdG9fZHB1X3BsYW5lKGRybV9zdGF0ZVtpXS0+cGxhbmUpOworCisJCWlmIChwc3Rh dGVbaV0gPT0gTlVMTCkgeworCQkJRFBVX0VSUk9SKCJEUFUgcGxhbmUgc3RhdGUgb2YgcGxhbmUg aWQgJWQgaXMgTlVMTFxuIiwKKwkJCQlkcm1fc3RhdGVbaV0tPnBsYW5lLT5iYXNlLmlkKTsKKwkJ CXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJc3JjW2ldLngxID0gZHJtX3N0YXRlW2ldLT5zcmNf eCA+PiAxNjsKKwkJc3JjW2ldLnkxID0gZHJtX3N0YXRlW2ldLT5zcmNfeSA+PiAxNjsKKwkJc3Jj W2ldLngyID0gc3JjW2ldLngxICsgKGRybV9zdGF0ZVtpXS0+c3JjX3cgPj4gMTYpOworCQlzcmNb aV0ueTIgPSBzcmNbaV0ueTEgKyAoZHJtX3N0YXRlW2ldLT5zcmNfaCA+PiAxNik7CisKKwkJZHN0 W2ldID0gZHJtX3BsYW5lX3N0YXRlX2Rlc3QoZHJtX3N0YXRlW2ldKTsKKworCQlpZiAoZHJtX3Jl Y3RfY2FsY19oc2NhbGUoJnNyY1tpXSwgJmRzdFtpXSwgMSwgMSkgIT0gMSB8fAorCQkgICAgZHJt X3JlY3RfY2FsY192c2NhbGUoJnNyY1tpXSwgJmRzdFtpXSwgMSwgMSkgIT0gMSkgeworCQkJRFBV X0VSUk9SX1BMQU5FKGRwdV9wbGFuZVtpXSwKKwkJCQkic2NhbGluZyBpcyBub3Qgc3VwcG9ydGVk IGluIG11bHRpcmVjdCBtb2RlXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYg KERQVV9GT1JNQVRfSVNfWVVWKGZtdFtpXSkpIHsKKwkJCURQVV9FUlJPUl9QTEFORShkcHVfcGxh bmVbaV0sCisJCQkJIlVuc3VwcG9ydGVkIGZvcm1hdCBmb3IgbXVsdGlyZWN0IG1vZGVcbiIpOwor CQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQkvKioKKwkJICogU1NQUCBQRF9NRU0gaXMgc3Bs aXQgaGFsZiAtIG9uZSBmb3IgZWFjaCBSRUNULgorCQkgKiBUaWxlZCBmb3JtYXRzIG5lZWQgNSBs aW5lcyBvZiBidWZmZXJpbmcgd2hpbGUgZmV0Y2hpbmcKKwkJICogd2hlcmVhcyBsaW5lYXIgZm9y bWF0cyBuZWVkIG9ubHkgMiBsaW5lcy4KKwkJICogU28gd2UgY2Fubm90IHN1cHBvcnQgbW9yZSB0 aGFuIGhhbGYgb2YgdGhlIHN1cHBvcnRlZCBTU1BQCisJCSAqIHdpZHRoIGZvciB0aWxlZCBmb3Jt YXRzLgorCQkgKi8KKwkJd2lkdGhfdGhyZXNob2xkID0gZHB1X3BsYW5lW2ldLT5waXBlX3NibGst PmNvbW1vbi0+bWF4bGluZXdpZHRoOworCQlpZiAoaGFzX3RpbGVkX3JlY3QpCisJCQl3aWR0aF90 aHJlc2hvbGQgLz0gMjsKKworCQlpZiAocGFyYWxsZWxfZmV0Y2hfcXVhbGlmaWVkICYmCisJCSAg ICBkcm1fcmVjdF93aWR0aCgmc3JjW2ldKSA+IHdpZHRoX3RocmVzaG9sZCkKKwkJCXBhcmFsbGVs X2ZldGNoX3F1YWxpZmllZCA9IGZhbHNlOworCisJfQorCisJLyogVmFsaWRhdGUgUkVDVCdzIGFu ZCBzZXQgdGhlIG1vZGUgKi8KKworCS8qIFByZWZlciBQQVJBTExFTCBGRVRDSCBNb2RlIG92ZXIg VElNRV9NWCBNb2RlICovCisJaWYgKHBhcmFsbGVsX2ZldGNoX3F1YWxpZmllZCkgeworCQlwc3Rh dGVbUjBdLT5tdWx0aXJlY3RfbW9kZSA9IERQVV9TU1BQX01VTFRJUkVDVF9QQVJBTExFTDsKKwkJ cHN0YXRlW1IxXS0+bXVsdGlyZWN0X21vZGUgPSBEUFVfU1NQUF9NVUxUSVJFQ1RfUEFSQUxMRUw7 CisKKwkJZ290byBkb25lOworCX0KKworCS8qIFRJTUVfTVggTW9kZSAqLworCWJ1ZmZlcl9saW5l cyA9IDIgKiBtYXhfdGlsZV9oZWlnaHQ7CisKKwlpZiAoZHN0W1IxXS55MSA+PSBkc3RbUjBdLnky ICsgYnVmZmVyX2xpbmVzIHx8CisJICAgIGRzdFtSMF0ueTEgPj0gZHN0W1IxXS55MiArIGJ1ZmZl cl9saW5lcykgeworCQlwc3RhdGVbUjBdLT5tdWx0aXJlY3RfbW9kZSA9IERQVV9TU1BQX01VTFRJ UkVDVF9USU1FX01YOworCQlwc3RhdGVbUjFdLT5tdWx0aXJlY3RfbW9kZSA9IERQVV9TU1BQX01V TFRJUkVDVF9USU1FX01YOworCX0gZWxzZSB7CisJCURQVV9FUlJPUigKKwkJCSJObyBtdWx0aXJl Y3QgbW9kZSBwb3NzaWJsZSBmb3IgdGhlIHBsYW5lcyAoJWQgLSAlZClcbiIsCisJCQlkcm1fc3Rh dGVbUjBdLT5wbGFuZS0+YmFzZS5pZCwKKwkJCWRybV9zdGF0ZVtSMV0tPnBsYW5lLT5iYXNlLmlk KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCitkb25lOgorCWlmIChkcHVfcGxhbmVbUjBdLT5p c192aXJ0dWFsKSB7CisJCXBzdGF0ZVtSMF0tPm11bHRpcmVjdF9pbmRleCA9IERQVV9TU1BQX1JF Q1RfMTsKKwkJcHN0YXRlW1IxXS0+bXVsdGlyZWN0X2luZGV4ID0gRFBVX1NTUFBfUkVDVF8wOwor CX0gZWxzZSB7CisJCXBzdGF0ZVtSMF0tPm11bHRpcmVjdF9pbmRleCA9IERQVV9TU1BQX1JFQ1Rf MDsKKwkJcHN0YXRlW1IxXS0+bXVsdGlyZWN0X2luZGV4ID0gRFBVX1NTUFBfUkVDVF8xOworCX07 CisKKwlEUFVfREVCVUdfUExBTkUoZHB1X3BsYW5lW1IwXSwgIlIwOiAlZCAtICVkXG4iLAorCQlw c3RhdGVbUjBdLT5tdWx0aXJlY3RfbW9kZSwgcHN0YXRlW1IwXS0+bXVsdGlyZWN0X2luZGV4KTsK KwlEUFVfREVCVUdfUExBTkUoZHB1X3BsYW5lW1IxXSwgIlIxOiAlZCAtICVkXG4iLAorCQlwc3Rh dGVbUjFdLT5tdWx0aXJlY3RfbW9kZSwgcHN0YXRlW1IxXS0+bXVsdGlyZWN0X2luZGV4KTsKKwly ZXR1cm4gMDsKK30KKworLyoqCisgKiBkcHVfcGxhbmVfZ2V0X2N0bF9mbHVzaCAtIGdldCBjb250 cm9sIGZsdXNoIGZvciB0aGUgZ2l2ZW4gcGxhbmUKKyAqIEBwbGFuZTogUG9pbnRlciB0byBkcm0g cGxhbmUgc3RydWN0dXJlCisgKiBAY3RsOiBQb2ludGVyIHRvIGhhcmR3YXJlIGNvbnRyb2wgZHJp dmVyCisgKiBAZmx1c2hfc3NwcDogUG9pbnRlciB0byBzc3BwIGZsdXNoIGNvbnRyb2wgd29yZAor ICovCit2b2lkIGRwdV9wbGFuZV9nZXRfY3RsX2ZsdXNoKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5l LCBzdHJ1Y3QgZHB1X2h3X2N0bCAqY3RsLAorCQl1MzIgKmZsdXNoX3NzcHApCit7CisJc3RydWN0 IGRwdV9wbGFuZV9zdGF0ZSAqcHN0YXRlOworCisJaWYgKCFwbGFuZSB8fCAhZmx1c2hfc3NwcCkg eworCQlEUFVfRVJST1IoImludmFsaWQgcGFyYW1ldGVyc1xuIik7CisJCXJldHVybjsKKwl9CisK Kwlwc3RhdGUgPSB0b19kcHVfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKKworCSpmbHVzaF9z c3BwID0gY3RsLT5vcHMuZ2V0X2JpdG1hc2tfc3NwcChjdGwsIGRwdV9wbGFuZV9waXBlKHBsYW5l KSk7Cit9CisKK3N0YXRpYyBpbnQgZHB1X3BsYW5lX3ByZXBhcmVfZmIoc3RydWN0IGRybV9wbGFu ZSAqcGxhbmUsCisJCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm5ld19zdGF0ZSkKK3sKKwlzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IG5ld19zdGF0ZS0+ZmI7CisJc3RydWN0IGRwdV9wbGFu ZSAqcGRwdSA9IHRvX2RwdV9wbGFuZShwbGFuZSk7CisJc3RydWN0IGRwdV9wbGFuZV9zdGF0ZSAq cHN0YXRlID0gdG9fZHB1X3BsYW5lX3N0YXRlKG5ld19zdGF0ZSk7CisJc3RydWN0IGRwdV9od19m bXRfbGF5b3V0IGxheW91dDsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlzdHJ1Y3Qg bXNtX2dlbV9vYmplY3QgKm1zbV9vYmo7CisJc3RydWN0IGRtYV9mZW5jZSAqZmVuY2U7CisJc3Ry dWN0IG1zbV9nZW1fYWRkcmVzc19zcGFjZSAqYXNwYWNlOworCWludCByZXQ7CisKKwlpZiAoIW5l d19zdGF0ZS0+ZmIpCisJCXJldHVybiAwOworCisJRFBVX0RFQlVHX1BMQU5FKHBkcHUsICJGQlsl dV1cbiIsIGZiLT5iYXNlLmlkKTsKKworCXJldCA9IF9kcHVfcGxhbmVfZ2V0X2FzcGFjZShwZHB1 LCBwc3RhdGUsICZhc3BhY2UpOworCWlmIChyZXQpIHsKKwkJRFBVX0VSUk9SX1BMQU5FKHBkcHUs ICJGYWlsZWQgdG8gZ2V0IGFzcGFjZVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogY2Fj aGUgYXNwYWNlICovCisJcHN0YXRlLT5hc3BhY2UgPSBhc3BhY2U7CisKKwkvKgorCSAqIFRPRE86 IE5lZWQgdG8gc29ydCBvdXQgdGhlIG1zbV9mcmFtZWJ1ZmZlcl9wcmVwYXJlKCkgY2FsbCBiZWxv dyBzbworCSAqICAgICAgIHdlIGNhbiB1c2UgbXNtX2F0b21pY19wcmVwYXJlX2ZiKCkgaW5zdGVh ZCBvZiBkb2luZyB0aGUKKwkgKiAgICAgICBpbXBsaWNpdCBmZW5jZSBhbmQgZmIgcHJlcGFyZSBi eSBoYW5kIGhlcmUuCisJICovCisJb2JqID0gbXNtX2ZyYW1lYnVmZmVyX2JvKG5ld19zdGF0ZS0+ ZmIsIDApOworCW1zbV9vYmogPSB0b19tc21fYm8ob2JqKTsKKwlmZW5jZSA9IHJlc2VydmF0aW9u X29iamVjdF9nZXRfZXhjbF9yY3UobXNtX29iai0+cmVzdik7CisJaWYgKGZlbmNlKQorCQlkcm1f YXRvbWljX3NldF9mZW5jZV9mb3JfcGxhbmUobmV3X3N0YXRlLCBmZW5jZSk7CisKKwlpZiAocHN0 YXRlLT5hc3BhY2UpIHsKKwkJcmV0ID0gbXNtX2ZyYW1lYnVmZmVyX3ByZXBhcmUobmV3X3N0YXRl LT5mYiwKKwkJCQlwc3RhdGUtPmFzcGFjZSk7CisJCWlmIChyZXQpIHsKKwkJCURQVV9FUlJPUigi ZmFpbGVkIHRvIHByZXBhcmUgZnJhbWVidWZmZXJcbiIpOworCQkJcmV0dXJuIHJldDsKKwkJfQor CX0KKworCS8qIHZhbGlkYXRlIGZyYW1lYnVmZmVyIGxheW91dCBiZWZvcmUgY29tbWl0ICovCisJ cmV0ID0gZHB1X2Zvcm1hdF9wb3B1bGF0ZV9sYXlvdXQocHN0YXRlLT5hc3BhY2UsCisJCQluZXdf c3RhdGUtPmZiLCAmbGF5b3V0KTsKKwlpZiAocmV0KSB7CisJCURQVV9FUlJPUl9QTEFORShwZHB1 LCAiZmFpbGVkIHRvIGdldCBmb3JtYXQgbGF5b3V0LCAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJl dDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZHB1X3BsYW5lX2NsZWFudXBf ZmIoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCisJCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm9s ZF9zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHB1X3BsYW5lICpwZHB1ID0gdG9fZHB1X3BsYW5lKHBsYW5l KTsKKwlzdHJ1Y3QgZHB1X3BsYW5lX3N0YXRlICpvbGRfcHN0YXRlOworCisJaWYgKCFvbGRfc3Rh dGUgfHwgIW9sZF9zdGF0ZS0+ZmIpCisJCXJldHVybjsKKworCW9sZF9wc3RhdGUgPSB0b19kcHVf cGxhbmVfc3RhdGUob2xkX3N0YXRlKTsKKworCURQVV9ERUJVR19QTEFORShwZHB1LCAiRkJbJXVd XG4iLCBvbGRfc3RhdGUtPmZiLT5iYXNlLmlkKTsKKworCW1zbV9mcmFtZWJ1ZmZlcl9jbGVhbnVw KG9sZF9zdGF0ZS0+ZmIsIG9sZF9wc3RhdGUtPmFzcGFjZSk7Cit9CisKK3N0YXRpYyBib29sIGRw dV9wbGFuZV92YWxpZGF0ZV9zcmMoc3RydWN0IGRybV9yZWN0ICpzcmMsCisJCQkJICAgc3RydWN0 IGRybV9yZWN0ICpmYl9yZWN0LAorCQkJCSAgIHVpbnQzMl90IG1pbl9zcmNfc2l6ZSkKK3sKKwkv KiBFbnN1cmUgZmIgc2l6ZSBpcyBzdXBwb3J0ZWQgKi8KKwlpZiAoZHJtX3JlY3Rfd2lkdGgoZmJf cmVjdCkgPiBNQVhfSU1HX1dJRFRIIHx8CisJICAgIGRybV9yZWN0X2hlaWdodChmYl9yZWN0KSA+ IE1BWF9JTUdfSEVJR0hUKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBFbnN1cmUgc3JjIHJlY3Qg aXMgYWJvdmUgdGhlIG1pbmltdW0gc2l6ZSAqLworCWlmIChkcm1fcmVjdF93aWR0aChzcmMpIDwg bWluX3NyY19zaXplIHx8CisJICAgIGRybV9yZWN0X2hlaWdodChzcmMpIDwgbWluX3NyY19zaXpl KQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBFbnN1cmUgc3JjIGlzIGZ1bGx5IGVuY2Fwc3VsYXRl ZCBpbiBmYiAqLworCXJldHVybiBkcm1fcmVjdF9pbnRlcnNlY3QoZmJfcmVjdCwgc3JjKSAmJgor CQlkcm1fcmVjdF9lcXVhbHMoZmJfcmVjdCwgc3JjKTsKK30KKworc3RhdGljIGludCBkcHVfcGxh bmVfc3NwcF9hdG9taWNfY2hlY2soc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCisJCXN0cnVjdCBk cm1fcGxhbmVfc3RhdGUgKnN0YXRlKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBkcHVfcGxh bmUgKnBkcHU7CisJc3RydWN0IGRwdV9wbGFuZV9zdGF0ZSAqcHN0YXRlOworCWNvbnN0IHN0cnVj dCBkcHVfZm9ybWF0ICpmbXQ7CisJc3RydWN0IGRybV9yZWN0IHNyYywgZHN0LCBmYl9yZWN0ID0g eyAwIH07CisJdWludDMyX3QgbWF4X3Vwc2NhbGUgPSAxLCBtYXhfZG93bnNjYWxlID0gMTsKKwl1 aW50MzJfdCBtaW5fc3JjX3NpemUsIG1heF9saW5ld2lkdGg7CisJaW50IGhzY2FsZSA9IDEsIHZz Y2FsZSA9IDE7CisKKwlpZiAoIXBsYW5lIHx8ICFzdGF0ZSkgeworCQlEUFVfRVJST1IoImludmFs aWQgYXJnKHMpLCBwbGFuZSAlZCBzdGF0ZSAlZFxuIiwKKwkJCQlwbGFuZSAhPSAwLCBzdGF0ZSAh PSAwKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBleGl0OworCX0KKworCXBkcHUgPSB0b19k cHVfcGxhbmUocGxhbmUpOworCXBzdGF0ZSA9IHRvX2RwdV9wbGFuZV9zdGF0ZShzdGF0ZSk7CisK KwlpZiAoIXBkcHUtPnBpcGVfc2JsaykgeworCQlEUFVfRVJST1JfUExBTkUocGRwdSwgImludmFs aWQgY2F0YWxvZ1xuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlz cmMueDEgPSBzdGF0ZS0+c3JjX3ggPj4gMTY7CisJc3JjLnkxID0gc3RhdGUtPnNyY195ID4+IDE2 OworCXNyYy54MiA9IHNyYy54MSArIChzdGF0ZS0+c3JjX3cgPj4gMTYpOworCXNyYy55MiA9IHNy Yy55MSArIChzdGF0ZS0+c3JjX2ggPj4gMTYpOworCisJZHN0ID0gZHJtX3BsYW5lX3N0YXRlX2Rl c3Qoc3RhdGUpOworCisJZmJfcmVjdC54MiA9IHN0YXRlLT5mYi0+d2lkdGg7CisJZmJfcmVjdC55 MiA9IHN0YXRlLT5mYi0+aGVpZ2h0OworCisJbWF4X2xpbmV3aWR0aCA9IHBkcHUtPnBpcGVfc2Js ay0+Y29tbW9uLT5tYXhsaW5ld2lkdGg7CisKKwlpZiAocGRwdS0+ZmVhdHVyZXMgJiBEUFVfU1NQ UF9TQ0FMRVIpIHsKKwkJbWF4X2Rvd25zY2FsZSA9IHBkcHUtPnBpcGVfc2Jsay0+bWF4ZHduc2Nh bGU7CisJCW1heF91cHNjYWxlID0gcGRwdS0+cGlwZV9zYmxrLT5tYXh1cHNjYWxlOworCX0KKwlp ZiAoZHJtX3JlY3Rfd2lkdGgoJnNyYykgPCBkcm1fcmVjdF93aWR0aCgmZHN0KSkKKwkJaHNjYWxl ID0gZHJtX3JlY3RfY2FsY19oc2NhbGUoJnNyYywgJmRzdCwgMSwgbWF4X3Vwc2NhbGUpOworCWVs c2UKKwkJaHNjYWxlID0gZHJtX3JlY3RfY2FsY19oc2NhbGUoJmRzdCwgJnNyYywgMSwgbWF4X2Rv d25zY2FsZSk7CisJaWYgKGRybV9yZWN0X2hlaWdodCgmc3JjKSA8IGRybV9yZWN0X2hlaWdodCgm ZHN0KSkKKwkJdnNjYWxlID0gZHJtX3JlY3RfY2FsY192c2NhbGUoJnNyYywgJmRzdCwgMSwgbWF4 X3Vwc2NhbGUpOworCWVsc2UKKwkJdnNjYWxlID0gZHJtX3JlY3RfY2FsY192c2NhbGUoJmRzdCwg JnNyYywgMSwgbWF4X2Rvd25zY2FsZSk7CisKKwlEUFVfREVCVUdfUExBTkUocGRwdSwgImNoZWNr ICVkIC0+ICVkXG4iLAorCQlkcHVfcGxhbmVfZW5hYmxlZChwbGFuZS0+c3RhdGUpLCBkcHVfcGxh bmVfZW5hYmxlZChzdGF0ZSkpOworCisJaWYgKCFkcHVfcGxhbmVfZW5hYmxlZChzdGF0ZSkpCisJ CWdvdG8gZXhpdDsKKworCWZtdCA9IHRvX2RwdV9mb3JtYXQobXNtX2ZyYW1lYnVmZmVyX2Zvcm1h dChzdGF0ZS0+ZmIpKTsKKworCW1pbl9zcmNfc2l6ZSA9IERQVV9GT1JNQVRfSVNfWVVWKGZtdCkg PyAyIDogMTsKKworCWlmIChEUFVfRk9STUFUX0lTX1lVVihmbXQpICYmCisJCSghKHBkcHUtPmZl YXR1cmVzICYgRFBVX1NTUFBfU0NBTEVSKSB8fAorCQkgIShwZHB1LT5mZWF0dXJlcyAmIChCSVQo RFBVX1NTUFBfQ1NDKQorCQkgfCBCSVQoRFBVX1NTUFBfQ1NDXzEwQklUKSkpKSkgeworCQlEUFVf RVJST1JfUExBTkUocGRwdSwKKwkJCQkicGxhbmUgZG9lc24ndCBoYXZlIHNjYWxlci9jc2MgZm9y IHl1dlxuIik7CisJCXJldCA9IC1FSU5WQUw7CisKKwkvKiBjaGVjayBzcmMgYm91bmRzICovCisJ fSBlbHNlIGlmICghZHB1X3BsYW5lX3ZhbGlkYXRlX3NyYygmc3JjLCAmZmJfcmVjdCwgbWluX3Ny Y19zaXplKSkgeworCQlEUFVfRVJST1JfUExBTkUocGRwdSwgImludmFsaWQgc291cmNlICIgRFJN X1JFQ1RfRk1UICJcbiIsCisJCQkJRFJNX1JFQ1RfQVJHKCZzcmMpKTsKKwkJcmV0ID0gLUUyQklH OworCisJLyogdmFsaWQgeXV2IGltYWdlICovCisJfSBlbHNlIGlmIChEUFVfRk9STUFUX0lTX1lV VihmbXQpICYmCisJCSAgIChzcmMueDEgJiAweDEgfHwgc3JjLnkxICYgMHgxIHx8CisJCSAgICBk cm1fcmVjdF93aWR0aCgmc3JjKSAmIDB4MSB8fAorCQkgICAgZHJtX3JlY3RfaGVpZ2h0KCZzcmMp ICYgMHgxKSkgeworCQlEUFVfRVJST1JfUExBTkUocGRwdSwgImludmFsaWQgeXV2IHNvdXJjZSAi IERSTV9SRUNUX0ZNVCAiXG4iLAorCQkJCURSTV9SRUNUX0FSRygmc3JjKSk7CisJCXJldCA9IC1F SU5WQUw7CisKKwkvKiBtaW4gZHN0IHN1cHBvcnQgKi8KKwl9IGVsc2UgaWYgKGRybV9yZWN0X3dp ZHRoKCZkc3QpIDwgMHgxIHx8IGRybV9yZWN0X2hlaWdodCgmZHN0KSA8IDB4MSkgeworCQlEUFVf RVJST1JfUExBTkUocGRwdSwgImludmFsaWQgZGVzdCByZWN0ICIgRFJNX1JFQ1RfRk1UICJcbiIs CisJCQkJRFJNX1JFQ1RfQVJHKCZkc3QpKTsKKwkJcmV0ID0gLUVJTlZBTDsKKworCS8qIGNoZWNr IGRlY2ltYXRlZCBzb3VyY2Ugd2lkdGggKi8KKwl9IGVsc2UgaWYgKGRybV9yZWN0X3dpZHRoKCZz cmMpID4gbWF4X2xpbmV3aWR0aCkgeworCQlEUFVfRVJST1JfUExBTkUocGRwdSwgImludmFsaWQg c3JjICIgRFJNX1JFQ1RfRk1UICIgbGluZToldVxuIiwKKwkJCQlEUk1fUkVDVF9BUkcoJnNyYyks IG1heF9saW5ld2lkdGgpOworCQlyZXQgPSAtRTJCSUc7CisKKwkvKiBjaGVjayBzY2FsZXIgY2Fw YWJpbGl0eSAqLworCX0gZWxzZSBpZiAoaHNjYWxlIDwgMCB8fCB2c2NhbGUgPCAwKSB7CisJCURQ VV9FUlJPUl9QTEFORShwZHB1LCAiaW52YWxpZCBzY2FsaW5nIHJlcXVlc3RlZCBzcmM9IgorCQkJ CURSTV9SRUNUX0ZNVCAiIGRzdD0iIERSTV9SRUNUX0ZNVCAiXG4iLAorCQkJCURSTV9SRUNUX0FS Rygmc3JjKSwgRFJNX1JFQ1RfQVJHKCZkc3QpKTsKKwkJcmV0ID0gLUUyQklHOworCX0KKworZXhp dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRwdV9wbGFuZV9hdG9taWNfY2hlY2so c3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCisJCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRl KQoreworCWlmICghc3RhdGUtPmZiKQorCQlyZXR1cm4gMDsKKworCURQVV9ERUJVR19QTEFORSh0 b19kcHVfcGxhbmUocGxhbmUpLCAiXG4iKTsKKworCXJldHVybiBkcHVfcGxhbmVfc3NwcF9hdG9t aWNfY2hlY2socGxhbmUsIHN0YXRlKTsKK30KKwordm9pZCBkcHVfcGxhbmVfZmx1c2goc3RydWN0 IGRybV9wbGFuZSAqcGxhbmUpCit7CisJc3RydWN0IGRwdV9wbGFuZSAqcGRwdTsKKwlzdHJ1Y3Qg ZHB1X3BsYW5lX3N0YXRlICpwc3RhdGU7CisKKwlpZiAoIXBsYW5lIHx8ICFwbGFuZS0+c3RhdGUp IHsKKwkJRFBVX0VSUk9SKCJpbnZhbGlkIHBsYW5lXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXBk cHUgPSB0b19kcHVfcGxhbmUocGxhbmUpOworCXBzdGF0ZSA9IHRvX2RwdV9wbGFuZV9zdGF0ZShw bGFuZS0+c3RhdGUpOworCisJLyoKKwkgKiBUaGVzZSB1cGRhdGVzIGhhdmUgdG8gYmUgZG9uZSBp bW1lZGlhdGVseSBiZWZvcmUgdGhlIHBsYW5lIGZsdXNoCisJICogdGltaW5nLCBhbmQgbWF5IG5v dCBiZSBtb3ZlZCB0byB0aGUgYXRvbWljX3VwZGF0ZS9tb2RlX3NldCBmdW5jdGlvbnMuCisJICov CisJaWYgKHBkcHUtPmlzX2Vycm9yKQorCQkvKiBmb3JjZSB3aGl0ZSBmcmFtZSB3aXRoIDEwMCUg YWxwaGEgcGlwZSBvdXRwdXQgb24gZXJyb3IgKi8KKwkJX2RwdV9wbGFuZV9jb2xvcl9maWxsKHBk cHUsIDB4RkZGRkZGLCAweEZGKTsKKwllbHNlIGlmIChwZHB1LT5jb2xvcl9maWxsICYgRFBVX1BM QU5FX0NPTE9SX0ZJTExfRkxBRykKKwkJLyogZm9yY2UgMTAwJSBhbHBoYSAqLworCQlfZHB1X3Bs YW5lX2NvbG9yX2ZpbGwocGRwdSwgcGRwdS0+Y29sb3JfZmlsbCwgMHhGRik7CisJZWxzZSBpZiAo cGRwdS0+cGlwZV9odyAmJiBwZHB1LT5jc2NfcHRyICYmIHBkcHUtPnBpcGVfaHctPm9wcy5zZXR1 cF9jc2MpCisJCXBkcHUtPnBpcGVfaHctPm9wcy5zZXR1cF9jc2MocGRwdS0+cGlwZV9odywgcGRw dS0+Y3NjX3B0cik7CisKKwkvKiBmbGFnIGgvdyBmbHVzaCBjb21wbGV0ZSAqLworCWlmIChwbGFu ZS0+c3RhdGUpCisJCXBzdGF0ZS0+cGVuZGluZyA9IGZhbHNlOworfQorCisvKioKKyAqIGRwdV9w bGFuZV9zZXRfZXJyb3I6IGVuYWJsZS9kaXNhYmxlIGVycm9yIGNvbmRpdGlvbgorICogQHBsYW5l OiBwb2ludGVyIHRvIGRybV9wbGFuZSBzdHJ1Y3R1cmUKKyAqLwordm9pZCBkcHVfcGxhbmVfc2V0 X2Vycm9yKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLCBib29sIGVycm9yKQoreworCXN0cnVjdCBk cHVfcGxhbmUgKnBkcHU7CisKKwlpZiAoIXBsYW5lKQorCQlyZXR1cm47CisKKwlwZHB1ID0gdG9f ZHB1X3BsYW5lKHBsYW5lKTsKKwlwZHB1LT5pc19lcnJvciA9IGVycm9yOworfQorCitzdGF0aWMg aW50IGRwdV9wbGFuZV9zc3BwX2F0b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUs CisJCQkJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqb2xkX3N0YXRlKQoreworCXVpbnQzMl90IG5w bGFuZXMsIHNyY19mbGFnczsKKwlzdHJ1Y3QgZHB1X3BsYW5lICpwZHB1OworCXN0cnVjdCBkcm1f cGxhbmVfc3RhdGUgKnN0YXRlOworCXN0cnVjdCBkcHVfcGxhbmVfc3RhdGUgKnBzdGF0ZTsKKwlz dHJ1Y3QgZHB1X3BsYW5lX3N0YXRlICpvbGRfcHN0YXRlOworCWNvbnN0IHN0cnVjdCBkcHVfZm9y bWF0ICpmbXQ7CisJc3RydWN0IGRybV9jcnRjICpjcnRjOworCXN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmZiOworCXN0cnVjdCBkcm1fcmVjdCBzcmMsIGRzdDsKKworCWlmICghcGxhbmUpIHsKKwkJ RFBVX0VSUk9SKCJpbnZhbGlkIHBsYW5lXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfSBlbHNl IGlmICghcGxhbmUtPnN0YXRlKSB7CisJCURQVV9FUlJPUigiaW52YWxpZCBwbGFuZSBzdGF0ZVxu Iik7CisJCXJldHVybiAtRUlOVkFMOworCX0gZWxzZSBpZiAoIW9sZF9zdGF0ZSkgeworCQlEUFVf RVJST1IoImludmFsaWQgb2xkIHN0YXRlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJ cGRwdSA9IHRvX2RwdV9wbGFuZShwbGFuZSk7CisJc3RhdGUgPSBwbGFuZS0+c3RhdGU7CisKKwlw c3RhdGUgPSB0b19kcHVfcGxhbmVfc3RhdGUoc3RhdGUpOworCisJb2xkX3BzdGF0ZSA9IHRvX2Rw dV9wbGFuZV9zdGF0ZShvbGRfc3RhdGUpOworCisJY3J0YyA9IHN0YXRlLT5jcnRjOworCWZiID0g c3RhdGUtPmZiOworCWlmICghY3J0YyB8fCAhZmIpIHsKKwkJRFBVX0VSUk9SX1BMQU5FKHBkcHUs ICJpbnZhbGlkIGNydGMgJWQgb3IgZmIgJWRcbiIsCisJCQkJY3J0YyAhPSAwLCBmYiAhPSAwKTsK KwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWZtdCA9IHRvX2RwdV9mb3JtYXQobXNtX2ZyYW1lYnVm ZmVyX2Zvcm1hdChmYikpOworCW5wbGFuZXMgPSBmbXQtPm51bV9wbGFuZXM7CisKKwltZW1zZXQo JihwZHB1LT5waXBlX2NmZyksIDAsIHNpemVvZihzdHJ1Y3QgZHB1X2h3X3BpcGVfY2ZnKSk7CisK KwlfZHB1X3BsYW5lX3NldF9zY2Fub3V0KHBsYW5lLCBwc3RhdGUsICZwZHB1LT5waXBlX2NmZywg ZmIpOworCisJcHN0YXRlLT5wZW5kaW5nID0gdHJ1ZTsKKworCXBkcHUtPmlzX3J0X3BpcGUgPSAo ZHB1X2NydGNfZ2V0X2NsaWVudF90eXBlKGNydGMpICE9IE5SVF9DTElFTlQpOworCV9kcHVfcGxh bmVfc2V0X3Fvc19jdHJsKHBsYW5lLCBmYWxzZSwgRFBVX1BMQU5FX1FPU19QQU5JQ19DVFJMKTsK KworCXNyYy54MSA9IHN0YXRlLT5zcmNfeCA+PiAxNjsKKwlzcmMueTEgPSBzdGF0ZS0+c3JjX3kg Pj4gMTY7CisJc3JjLngyID0gc3JjLngxICsgKHN0YXRlLT5zcmNfdyA+PiAxNik7CisJc3JjLnky ID0gc3JjLnkxICsgKHN0YXRlLT5zcmNfaCA+PiAxNik7CisKKwlkc3QgPSBkcm1fcGxhbmVfc3Rh dGVfZGVzdChzdGF0ZSk7CisKKwlEUFVfREVCVUdfUExBTkUocGRwdSwgIkZCWyV1XSAiIERSTV9S RUNUX0ZNVCAiLT5jcnRjJXUgIiBEUk1fUkVDVF9GTVQKKwkJCSIsICU0LjRzIHVid2MgJWRcbiIs IGZiLT5iYXNlLmlkLCBEUk1fUkVDVF9BUkcoJnNyYyksCisJCQljcnRjLT5iYXNlLmlkLCBEUk1f UkVDVF9BUkcoJmRzdCksCisJCQkoY2hhciAqKSZmbXQtPmJhc2UucGl4ZWxfZm9ybWF0LAorCQkJ RFBVX0ZPUk1BVF9JU19VQldDKGZtdCkpOworCisJcGRwdS0+cGlwZV9jZmcuc3JjX3JlY3QgPSBz cmM7CisJcGRwdS0+cGlwZV9jZmcuZHN0X3JlY3QgPSBkc3Q7CisKKwlfZHB1X3BsYW5lX3NldHVw X3NjYWxlcihwZHB1LCBwc3RhdGUsIGZtdCwgZmFsc2UpOworCisJLyogb3ZlcnJpZGUgZm9yIGNv bG9yIGZpbGwgKi8KKwlpZiAocGRwdS0+Y29sb3JfZmlsbCAmIERQVV9QTEFORV9DT0xPUl9GSUxM X0ZMQUcpIHsKKwkJLyogc2tpcCByZW1haW5pbmcgcHJvY2Vzc2luZyBvbiBjb2xvciBmaWxsICov CisJCXJldHVybiAwOworCX0KKworCWlmIChwZHB1LT5waXBlX2h3LT5vcHMuc2V0dXBfcmVjdHMp IHsKKwkJcGRwdS0+cGlwZV9ody0+b3BzLnNldHVwX3JlY3RzKHBkcHUtPnBpcGVfaHcsCisJCQkJ JnBkcHUtPnBpcGVfY2ZnLAorCQkJCXBzdGF0ZS0+bXVsdGlyZWN0X2luZGV4KTsKKwl9CisKKwlp ZiAocGRwdS0+cGlwZV9ody0+b3BzLnNldHVwX3BlICYmCisJCQkocHN0YXRlLT5tdWx0aXJlY3Rf aW5kZXggIT0gRFBVX1NTUFBfUkVDVF8xKSkKKwkJcGRwdS0+cGlwZV9ody0+b3BzLnNldHVwX3Bl KHBkcHUtPnBpcGVfaHcsCisJCQkJJnBzdGF0ZS0+cGl4ZWxfZXh0KTsKKworCS8qKgorCSAqIHdo ZW4gcHJvZ3JhbW1lZCBpbiBtdWx0aXJlY3QgbW9kZSwgc2NhbGFyIGJsb2NrIHdpbGwgYmUKKwkg KiBieXBhc3NlZC4gU3RpbGwgd2UgbmVlZCB0byB1cGRhdGUgYWxwaGEgYW5kIGJpdHdpZHRoCisJ ICogT05MWSBmb3IgUkVDVDAKKwkgKi8KKwlpZiAocGRwdS0+cGlwZV9ody0+b3BzLnNldHVwX3Nj YWxlciAmJgorCQkJcHN0YXRlLT5tdWx0aXJlY3RfaW5kZXggIT0gRFBVX1NTUFBfUkVDVF8xKQor CQlwZHB1LT5waXBlX2h3LT5vcHMuc2V0dXBfc2NhbGVyKHBkcHUtPnBpcGVfaHcsCisJCQkJJnBk cHUtPnBpcGVfY2ZnLCAmcHN0YXRlLT5waXhlbF9leHQsCisJCQkJJnBzdGF0ZS0+c2NhbGVyM19j ZmcpOworCisJaWYgKHBkcHUtPnBpcGVfaHctPm9wcy5zZXR1cF9tdWx0aXJlY3QpCisJCXBkcHUt PnBpcGVfaHctPm9wcy5zZXR1cF9tdWx0aXJlY3QoCisJCQkJcGRwdS0+cGlwZV9odywKKwkJCQlw c3RhdGUtPm11bHRpcmVjdF9pbmRleCwKKwkJCQlwc3RhdGUtPm11bHRpcmVjdF9tb2RlKTsKKwor CWlmIChwZHB1LT5waXBlX2h3LT5vcHMuc2V0dXBfZm9ybWF0KSB7CisJCXNyY19mbGFncyA9IDB4 MDsKKworCQkvKiB1cGRhdGUgZm9ybWF0ICovCisJCXBkcHUtPnBpcGVfaHctPm9wcy5zZXR1cF9m b3JtYXQocGRwdS0+cGlwZV9odywgZm10LCBzcmNfZmxhZ3MsCisJCQkJcHN0YXRlLT5tdWx0aXJl Y3RfaW5kZXgpOworCisJCWlmIChwZHB1LT5waXBlX2h3LT5vcHMuc2V0dXBfY2RwKSB7CisJCQlz dHJ1Y3QgZHB1X2h3X3BpcGVfY2RwX2NmZyAqY2RwX2NmZyA9ICZwc3RhdGUtPmNkcF9jZmc7CisK KwkJCW1lbXNldChjZHBfY2ZnLCAwLCBzaXplb2Yoc3RydWN0IGRwdV9od19waXBlX2NkcF9jZmcp KTsKKworCQkJY2RwX2NmZy0+ZW5hYmxlID0gcGRwdS0+Y2F0YWxvZy0+cGVyZi5jZHBfY2ZnCisJ CQkJCVtEUFVfUEVSRl9DRFBfVVNBR0VfUlRdLnJkX2VuYWJsZTsKKwkJCWNkcF9jZmctPnVid2Nf bWV0YV9lbmFibGUgPQorCQkJCQlEUFVfRk9STUFUX0lTX1VCV0MoZm10KTsKKwkJCWNkcF9jZmct PnRpbGVfYW1vcnRpemVfZW5hYmxlID0KKwkJCQkJRFBVX0ZPUk1BVF9JU19VQldDKGZtdCkgfHwK KwkJCQkJRFBVX0ZPUk1BVF9JU19USUxFKGZtdCk7CisJCQljZHBfY2ZnLT5wcmVsb2FkX2FoZWFk ID0gRFBVX1NTUFBfQ0RQX1BSRUxPQURfQUhFQURfNjQ7CisKKwkJCXBkcHUtPnBpcGVfaHctPm9w cy5zZXR1cF9jZHAocGRwdS0+cGlwZV9odywgY2RwX2NmZyk7CisJCX0KKworCQkvKiB1cGRhdGUg Y3NjICovCisJCWlmIChEUFVfRk9STUFUX0lTX1lVVihmbXQpKQorCQkJX2RwdV9wbGFuZV9zZXR1 cF9jc2MocGRwdSk7CisJCWVsc2UKKwkJCXBkcHUtPmNzY19wdHIgPSAwOworCX0KKworCV9kcHVf cGxhbmVfc2V0X3Fvc19sdXQocGxhbmUsIGZiKTsKKwlfZHB1X3BsYW5lX3NldF9kYW5nZXJfbHV0 KHBsYW5lLCBmYik7CisKKwlpZiAocGxhbmUtPnR5cGUgIT0gRFJNX1BMQU5FX1RZUEVfQ1VSU09S KSB7CisJCV9kcHVfcGxhbmVfc2V0X3Fvc19jdHJsKHBsYW5lLCB0cnVlLCBEUFVfUExBTkVfUU9T X1BBTklDX0NUUkwpOworCQlfZHB1X3BsYW5lX3NldF9vdF9saW1pdChwbGFuZSwgY3J0Yyk7CisJ fQorCisJX2RwdV9wbGFuZV9zZXRfcW9zX3JlbWFwKHBsYW5lKTsKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIHZvaWQgX2RwdV9wbGFuZV9hdG9taWNfZGlzYWJsZShzdHJ1Y3QgZHJtX3BsYW5lICpw bGFuZSwKKwkJCQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpvbGRfc3RhdGUpCit7CisJc3RydWN0 IGRwdV9wbGFuZSAqcGRwdTsKKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZTsKKwlzdHJ1 Y3QgZHB1X3BsYW5lX3N0YXRlICpwc3RhdGU7CisKKwlpZiAoIXBsYW5lKSB7CisJCURQVV9FUlJP UigiaW52YWxpZCBwbGFuZVxuIik7CisJCXJldHVybjsKKwl9IGVsc2UgaWYgKCFwbGFuZS0+c3Rh dGUpIHsKKwkJRFBVX0VSUk9SKCJpbnZhbGlkIHBsYW5lIHN0YXRlXG4iKTsKKwkJcmV0dXJuOwor CX0gZWxzZSBpZiAoIW9sZF9zdGF0ZSkgeworCQlEUFVfRVJST1IoImludmFsaWQgb2xkIHN0YXRl XG4iKTsKKwkJcmV0dXJuOworCX0KKworCXBkcHUgPSB0b19kcHVfcGxhbmUocGxhbmUpOworCXN0 YXRlID0gcGxhbmUtPnN0YXRlOworCXBzdGF0ZSA9IHRvX2RwdV9wbGFuZV9zdGF0ZShzdGF0ZSk7 CisKKwl0cmFjZV9kcHVfcGxhbmVfZGlzYWJsZShEUk1JRChwbGFuZSksIGlzX2RwdV9wbGFuZV92 aXJ0dWFsKHBsYW5lKSwKKwkJCQlwc3RhdGUtPm11bHRpcmVjdF9tb2RlKTsKKworCXBzdGF0ZS0+ cGVuZGluZyA9IHRydWU7CisKKwlpZiAoaXNfZHB1X3BsYW5lX3ZpcnR1YWwocGxhbmUpICYmCisJ CQlwZHB1LT5waXBlX2h3ICYmIHBkcHUtPnBpcGVfaHctPm9wcy5zZXR1cF9tdWx0aXJlY3QpCisJ CXBkcHUtPnBpcGVfaHctPm9wcy5zZXR1cF9tdWx0aXJlY3QocGRwdS0+cGlwZV9odywKKwkJCQlE UFVfU1NQUF9SRUNUX1NPTE8sIERQVV9TU1BQX01VTFRJUkVDVF9OT05FKTsKK30KKworc3RhdGlj IHZvaWQgZHB1X3BsYW5lX2F0b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCisJ CQkJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqb2xkX3N0YXRlKQoreworCXN0cnVjdCBkcHVfcGxh bmUgKnBkcHU7CisJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGU7CisKKwlpZiAoIXBsYW5l KSB7CisJCURQVV9FUlJPUigiaW52YWxpZCBwbGFuZVxuIik7CisJCXJldHVybjsKKwl9IGVsc2Ug aWYgKCFwbGFuZS0+c3RhdGUpIHsKKwkJRFBVX0VSUk9SKCJpbnZhbGlkIHBsYW5lIHN0YXRlXG4i KTsKKwkJcmV0dXJuOworCX0KKworCXBkcHUgPSB0b19kcHVfcGxhbmUocGxhbmUpOworCXBkcHUt PmlzX2Vycm9yID0gZmFsc2U7CisJc3RhdGUgPSBwbGFuZS0+c3RhdGU7CisKKwlEUFVfREVCVUdf UExBTkUocGRwdSwgIlxuIik7CisKKwlpZiAoIWRwdV9wbGFuZV9zc3BwX2VuYWJsZWQoc3RhdGUp KSB7CisJCV9kcHVfcGxhbmVfYXRvbWljX2Rpc2FibGUocGxhbmUsIG9sZF9zdGF0ZSk7CisJfSBl bHNlIHsKKwkJaW50IHJldDsKKworCQlyZXQgPSBkcHVfcGxhbmVfc3NwcF9hdG9taWNfdXBkYXRl KHBsYW5lLCBvbGRfc3RhdGUpOworCQkvKiBhdG9taWNfY2hlY2sgc2hvdWxkIGhhdmUgZW5zdXJl ZCB0aGF0IHRoaXMgZG9lc24ndCBmYWlsICovCisJCVdBUk5fT04ocmV0IDwgMCk7CisJfQorfQor Cit2b2lkIGRwdV9wbGFuZV9yZXN0b3JlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQoreworCXN0 cnVjdCBkcHVfcGxhbmUgKnBkcHU7CisKKwlpZiAoIXBsYW5lIHx8ICFwbGFuZS0+c3RhdGUpIHsK KwkJRFBVX0VSUk9SKCJpbnZhbGlkIHBsYW5lXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXBkcHUg PSB0b19kcHVfcGxhbmUocGxhbmUpOworCisJRFBVX0RFQlVHX1BMQU5FKHBkcHUsICJcbiIpOwor CisJLyogbGFzdCBwbGFuZSBzdGF0ZSBpcyBzYW1lIGFzIGN1cnJlbnQgc3RhdGUgKi8KKwlkcHVf cGxhbmVfYXRvbWljX3VwZGF0ZShwbGFuZSwgcGxhbmUtPnN0YXRlKTsKK30KKworc3RhdGljIHZv aWQgZHB1X3BsYW5lX2Rlc3Ryb3koc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCit7CisJc3RydWN0 IGRwdV9wbGFuZSAqcGRwdSA9IHBsYW5lID8gdG9fZHB1X3BsYW5lKHBsYW5lKSA6IE5VTEw7CisK KwlEUFVfREVCVUdfUExBTkUocGRwdSwgIlxuIik7CisKKwlpZiAocGRwdSkgeworCQlfZHB1X3Bs YW5lX3NldF9xb3NfY3RybChwbGFuZSwgZmFsc2UsIERQVV9QTEFORV9RT1NfUEFOSUNfQ1RSTCk7 CisKKwkJbXV0ZXhfZGVzdHJveSgmcGRwdS0+bG9jayk7CisKKwkJZHJtX3BsYW5lX2hlbHBlcl9k aXNhYmxlKHBsYW5lKTsKKworCQkvKiB0aGlzIHdpbGwgZGVzdHJveSB0aGUgc3RhdGVzIGFzIHdl bGwgKi8KKwkJZHJtX3BsYW5lX2NsZWFudXAocGxhbmUpOworCisJCWlmIChwZHB1LT5waXBlX2h3 KQorCQkJZHB1X2h3X3NzcHBfZGVzdHJveShwZHB1LT5waXBlX2h3KTsKKworCQlrZnJlZShwZHB1 KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRwdV9wbGFuZV9kZXN0cm95X3N0YXRlKHN0cnVjdCBk cm1fcGxhbmUgKnBsYW5lLAorCQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKK3sKKwlz dHJ1Y3QgZHB1X3BsYW5lX3N0YXRlICpwc3RhdGU7CisKKwlpZiAoIXBsYW5lIHx8ICFzdGF0ZSkg eworCQlEUFVfRVJST1IoImludmFsaWQgYXJnKHMpLCBwbGFuZSAlZCBzdGF0ZSAlZFxuIiwKKwkJ CQlwbGFuZSAhPSAwLCBzdGF0ZSAhPSAwKTsKKwkJcmV0dXJuOworCX0KKworCXBzdGF0ZSA9IHRv X2RwdV9wbGFuZV9zdGF0ZShzdGF0ZSk7CisKKwkvKiByZW1vdmUgcmVmIGNvdW50IGZvciBmcmFt ZSBidWZmZXJzICovCisJaWYgKHN0YXRlLT5mYikKKwkJZHJtX2ZyYW1lYnVmZmVyX3B1dChzdGF0 ZS0+ZmIpOworCisJa2ZyZWUocHN0YXRlKTsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fcGxhbmVf c3RhdGUgKgorZHB1X3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFu ZSkKK3sKKwlzdHJ1Y3QgZHB1X3BsYW5lICpwZHB1OworCXN0cnVjdCBkcHVfcGxhbmVfc3RhdGUg KnBzdGF0ZTsKKwlzdHJ1Y3QgZHB1X3BsYW5lX3N0YXRlICpvbGRfc3RhdGU7CisKKwlpZiAoIXBs YW5lKSB7CisJCURQVV9FUlJPUigiaW52YWxpZCBwbGFuZVxuIik7CisJCXJldHVybiBOVUxMOwor CX0gZWxzZSBpZiAoIXBsYW5lLT5zdGF0ZSkgeworCQlEUFVfRVJST1IoImludmFsaWQgcGxhbmUg c3RhdGVcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlvbGRfc3RhdGUgPSB0b19kcHVfcGxh bmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKKwlwZHB1ID0gdG9fZHB1X3BsYW5lKHBsYW5lKTsKKwlw c3RhdGUgPSBrbWVtZHVwKG9sZF9zdGF0ZSwgc2l6ZW9mKCpvbGRfc3RhdGUpLCBHRlBfS0VSTkVM KTsKKwlpZiAoIXBzdGF0ZSkgeworCQlEUFVfRVJST1JfUExBTkUocGRwdSwgImZhaWxlZCB0byBh bGxvY2F0ZSBzdGF0ZVxuIik7CisJCXJldHVybiBOVUxMOworCX0KKworCURQVV9ERUJVR19QTEFO RShwZHB1LCAiXG4iKTsKKworCXBzdGF0ZS0+cGVuZGluZyA9IGZhbHNlOworCisJX19kcm1fYXRv bWljX2hlbHBlcl9wbGFuZV9kdXBsaWNhdGVfc3RhdGUocGxhbmUsICZwc3RhdGUtPmJhc2UpOwor CisJcmV0dXJuICZwc3RhdGUtPmJhc2U7Cit9CisKK3N0YXRpYyB2b2lkIGRwdV9wbGFuZV9yZXNl dChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKK3sKKwlzdHJ1Y3QgZHB1X3BsYW5lICpwZHB1Owor CXN0cnVjdCBkcHVfcGxhbmVfc3RhdGUgKnBzdGF0ZTsKKworCWlmICghcGxhbmUpIHsKKwkJRFBV X0VSUk9SKCJpbnZhbGlkIHBsYW5lXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXBkcHUgPSB0b19k cHVfcGxhbmUocGxhbmUpOworCURQVV9ERUJVR19QTEFORShwZHB1LCAiXG4iKTsKKworCS8qIHJl bW92ZSBwcmV2aW91cyBzdGF0ZSwgaWYgcHJlc2VudCAqLworCWlmIChwbGFuZS0+c3RhdGUpIHsK KwkJZHB1X3BsYW5lX2Rlc3Ryb3lfc3RhdGUocGxhbmUsIHBsYW5lLT5zdGF0ZSk7CisJCXBsYW5l LT5zdGF0ZSA9IDA7CisJfQorCisJcHN0YXRlID0ga3phbGxvYyhzaXplb2YoKnBzdGF0ZSksIEdG UF9LRVJORUwpOworCWlmICghcHN0YXRlKSB7CisJCURQVV9FUlJPUl9QTEFORShwZHB1LCAiZmFp bGVkIHRvIGFsbG9jYXRlIHN0YXRlXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXBzdGF0ZS0+YmFz ZS5wbGFuZSA9IHBsYW5lOworCisJcGxhbmUtPnN0YXRlID0gJnBzdGF0ZS0+YmFzZTsKK30KKwor I2lmZGVmIENPTkZJR19ERUJVR19GUworc3RhdGljIHNzaXplX3QgX2RwdV9wbGFuZV9kYW5nZXJf cmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCWNoYXIgX191c2VyICpidWZmLCBzaXplX3QgY291 bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgZHB1X2ttcyAqa21zID0gZmlsZS0+cHJpdmF0 ZV9kYXRhOworCXN0cnVjdCBkcHVfbWRzc19jZmcgKmNmZyA9IGttcy0+Y2F0YWxvZzsKKwlpbnQg bGVuID0gMDsKKwljaGFyIGJ1Zls0MF0gPSB7J1wwJ307CisKKwlpZiAoIWNmZykKKwkJcmV0dXJu IC1FTk9ERVY7CisKKwlpZiAoKnBwb3MpCisJCXJldHVybiAwOyAvKiB0aGUgZW5kICovCisKKwls ZW4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWRcbiIsICFrbXMtPmhhc19kYW5nZXJf Y3RybCk7CisJaWYgKGxlbiA8IDAgfHwgbGVuID49IHNpemVvZihidWYpKQorCQlyZXR1cm4gMDsK KworCWlmICgoY291bnQgPCBzaXplb2YoYnVmKSkgfHwgY29weV90b191c2VyKGJ1ZmYsIGJ1Ziwg bGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwkqcHBvcyArPSBsZW47ICAgLyogaW5jcmVhc2Ug b2Zmc2V0ICovCisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgdm9pZCBfZHB1X3BsYW5lX3Nl dF9kYW5nZXJfc3RhdGUoc3RydWN0IGRwdV9rbXMgKmttcywgYm9vbCBlbmFibGUpCit7CisJc3Ry dWN0IGRybV9wbGFuZSAqcGxhbmU7CisKKwlkcm1fZm9yX2VhY2hfcGxhbmUocGxhbmUsIGttcy0+ ZGV2KSB7CisJCWlmIChwbGFuZS0+ZmIgJiYgcGxhbmUtPnN0YXRlKSB7CisJCQlkcHVfcGxhbmVf ZGFuZ2VyX3NpZ25hbF9jdHJsKHBsYW5lLCBlbmFibGUpOworCQkJRFBVX0RFQlVHKCJwbGFuZTol ZCBpbWc6JWR4JWQgIiwKKwkJCQlwbGFuZS0+YmFzZS5pZCwgcGxhbmUtPmZiLT53aWR0aCwKKwkJ CQlwbGFuZS0+ZmItPmhlaWdodCk7CisJCQlEUFVfREVCVUcoInNyY1slZCwlZCwlZCwlZF0gZHN0 WyVkLCVkLCVkLCVkXVxuIiwKKwkJCQlwbGFuZS0+c3RhdGUtPnNyY194ID4+IDE2LAorCQkJCXBs YW5lLT5zdGF0ZS0+c3JjX3kgPj4gMTYsCisJCQkJcGxhbmUtPnN0YXRlLT5zcmNfdyA+PiAxNiwK KwkJCQlwbGFuZS0+c3RhdGUtPnNyY19oID4+IDE2LAorCQkJCXBsYW5lLT5zdGF0ZS0+Y3J0Y194 LCBwbGFuZS0+c3RhdGUtPmNydGNfeSwKKwkJCQlwbGFuZS0+c3RhdGUtPmNydGNfdywgcGxhbmUt PnN0YXRlLT5jcnRjX2gpOworCQl9IGVsc2UgeworCQkJRFBVX0RFQlVHKCJJbmFjdGl2ZSBwbGFu ZTolZFxuIiwgcGxhbmUtPmJhc2UuaWQpOworCQl9CisJfQorfQorCitzdGF0aWMgc3NpemVfdCBf ZHB1X3BsYW5lX2Rhbmdlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJICAgIGNvbnN0IGNo YXIgX191c2VyICp1c2VyX2J1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3Ry dWN0IGRwdV9rbXMgKmttcyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZHB1X21kc3Nf Y2ZnICpjZmcgPSBrbXMtPmNhdGFsb2c7CisJaW50IGRpc2FibGVfcGFuaWM7CisJY2hhciBidWZb MTBdOworCisJaWYgKCFjZmcpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKGNvdW50ID49IHNp emVvZihidWYpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChjb3B5X2Zyb21fdXNlcihidWYs IHVzZXJfYnVmLCBjb3VudCkpCisJCXJldHVybiAtRUZBVUxUOworCisJYnVmW2NvdW50XSA9IDA7 CS8qIGVuZCBvZiBzdHJpbmcgKi8KKworCWlmIChrc3RydG9pbnQoYnVmLCAwLCAmZGlzYWJsZV9w YW5pYykpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKGRpc2FibGVfcGFuaWMpIHsKKwkJLyog RGlzYWJsZSBwYW5pYyBzaWduYWwgZm9yIGFsbCBhY3RpdmUgcGlwZXMgKi8KKwkJRFBVX0RFQlVH KCJEaXNhYmxpbmcgZGFuZ2VyOlxuIik7CisJCV9kcHVfcGxhbmVfc2V0X2Rhbmdlcl9zdGF0ZShr bXMsIGZhbHNlKTsKKwkJa21zLT5oYXNfZGFuZ2VyX2N0cmwgPSBmYWxzZTsKKwl9IGVsc2Ugewor CQkvKiBFbmFibGUgcGFuaWMgc2lnbmFsIGZvciBhbGwgYWN0aXZlIHBpcGVzICovCisJCURQVV9E RUJVRygiRW5hYmxpbmcgZGFuZ2VyOlxuIik7CisJCWttcy0+aGFzX2Rhbmdlcl9jdHJsID0gdHJ1 ZTsKKwkJX2RwdV9wbGFuZV9zZXRfZGFuZ2VyX3N0YXRlKGttcywgdHJ1ZSk7CisJfQorCisJcmV0 dXJuIGNvdW50OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkcHVf cGxhbmVfZGFuZ2VyX2VuYWJsZSA9IHsKKwkub3BlbiA9IHNpbXBsZV9vcGVuLAorCS5yZWFkID0g X2RwdV9wbGFuZV9kYW5nZXJfcmVhZCwKKwkud3JpdGUgPSBfZHB1X3BsYW5lX2Rhbmdlcl93cml0 ZSwKK307CisKK3N0YXRpYyBpbnQgX2RwdV9wbGFuZV9pbml0X2RlYnVnZnMoc3RydWN0IGRybV9w bGFuZSAqcGxhbmUpCit7CisJc3RydWN0IGRwdV9wbGFuZSAqcGRwdTsKKwlzdHJ1Y3QgZHB1X2tt cyAqa21zOworCXN0cnVjdCBtc21fZHJtX3ByaXZhdGUgKnByaXY7CisJY29uc3Qgc3RydWN0IGRw dV9zc3BwX3N1Yl9ibGtzICpzYmxrID0gMDsKKwljb25zdCBzdHJ1Y3QgZHB1X3NzcHBfY2ZnICpj ZmcgPSAwOworCisJaWYgKCFwbGFuZSB8fCAhcGxhbmUtPmRldikgeworCQlEUFVfRVJST1IoImlu dmFsaWQgYXJndW1lbnRzXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcHJpdiA9IHBs YW5lLT5kZXYtPmRldl9wcml2YXRlOworCWlmICghcHJpdiB8fCAhcHJpdi0+a21zKSB7CisJCURQ VV9FUlJPUigiaW52YWxpZCBLTVMgcmVmZXJlbmNlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJ fQorCisJa21zID0gdG9fZHB1X2ttcyhwcml2LT5rbXMpOworCXBkcHUgPSB0b19kcHVfcGxhbmUo cGxhbmUpOworCisJaWYgKHBkcHUgJiYgcGRwdS0+cGlwZV9odykKKwkJY2ZnID0gcGRwdS0+cGlw ZV9ody0+Y2FwOworCWlmIChjZmcpCisJCXNibGsgPSBjZmctPnNibGs7CisKKwlpZiAoIXNibGsp CisJCXJldHVybiAwOworCisJLyogY3JlYXRlIG92ZXJhbGwgc3ViLWRpcmVjdG9yeSBmb3IgdGhl IHBpcGUgKi8KKwlwZHB1LT5kZWJ1Z2ZzX3Jvb3QgPQorCQlkZWJ1Z2ZzX2NyZWF0ZV9kaXIocGRw dS0+cGlwZV9uYW1lLAorCQkJCXBsYW5lLT5kZXYtPnByaW1hcnktPmRlYnVnZnNfcm9vdCk7CisK KwlpZiAoIXBkcHUtPmRlYnVnZnNfcm9vdCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBkb24n dCBlcnJvciBjaGVjayB0aGVzZSAqLworCWRlYnVnZnNfY3JlYXRlX3gzMigiZmVhdHVyZXMiLCAw NjAwLAorCQkJcGRwdS0+ZGVidWdmc19yb290LCAmcGRwdS0+ZmVhdHVyZXMpOworCisJLyogYWRk IHJlZ2lzdGVyIGR1bXAgc3VwcG9ydCAqLworCWRwdV9kZWJ1Z2ZzX3NldHVwX3JlZ3NldDMyKCZw ZHB1LT5kZWJ1Z2ZzX3NyYywKKwkJCXNibGstPnNyY19ibGsuYmFzZSArIGNmZy0+YmFzZSwKKwkJ CXNibGstPnNyY19ibGsubGVuLAorCQkJa21zKTsKKwlkcHVfZGVidWdmc19jcmVhdGVfcmVnc2V0 MzIoInNyY19ibGsiLCAwNDAwLAorCQkJcGRwdS0+ZGVidWdmc19yb290LCAmcGRwdS0+ZGVidWdm c19zcmMpOworCisJaWYgKGNmZy0+ZmVhdHVyZXMgJiBCSVQoRFBVX1NTUFBfU0NBTEVSX1FTRUVE MykgfHwKKwkJCWNmZy0+ZmVhdHVyZXMgJiBCSVQoRFBVX1NTUFBfU0NBTEVSX1FTRUVEMikpIHsK KwkJZHB1X2RlYnVnZnNfc2V0dXBfcmVnc2V0MzIoJnBkcHUtPmRlYnVnZnNfc2NhbGVyLAorCQkJ CXNibGstPnNjYWxlcl9ibGsuYmFzZSArIGNmZy0+YmFzZSwKKwkJCQlzYmxrLT5zY2FsZXJfYmxr LmxlbiwKKwkJCQlrbXMpOworCQlkcHVfZGVidWdmc19jcmVhdGVfcmVnc2V0MzIoInNjYWxlcl9i bGsiLCAwNDAwLAorCQkJCXBkcHUtPmRlYnVnZnNfcm9vdCwKKwkJCQkmcGRwdS0+ZGVidWdmc19z Y2FsZXIpOworCQlkZWJ1Z2ZzX2NyZWF0ZV9ib29sKCJkZWZhdWx0X3NjYWxpbmciLAorCQkJCTA2 MDAsCisJCQkJcGRwdS0+ZGVidWdmc19yb290LAorCQkJCSZwZHB1LT5kZWJ1Z2ZzX2RlZmF1bHRf c2NhbGUpOworCX0KKworCWlmIChjZmctPmZlYXR1cmVzICYgQklUKERQVV9TU1BQX0NTQykgfHwK KwkJCWNmZy0+ZmVhdHVyZXMgJiBCSVQoRFBVX1NTUFBfQ1NDXzEwQklUKSkgeworCQlkcHVfZGVi dWdmc19zZXR1cF9yZWdzZXQzMigmcGRwdS0+ZGVidWdmc19jc2MsCisJCQkJc2Jsay0+Y3NjX2Js ay5iYXNlICsgY2ZnLT5iYXNlLAorCQkJCXNibGstPmNzY19ibGsubGVuLAorCQkJCWttcyk7CisJ CWRwdV9kZWJ1Z2ZzX2NyZWF0ZV9yZWdzZXQzMigiY3NjX2JsayIsIDA0MDAsCisJCQkJcGRwdS0+ ZGVidWdmc19yb290LCAmcGRwdS0+ZGVidWdmc19jc2MpOworCX0KKworCWRlYnVnZnNfY3JlYXRl X3UzMigieGluX2lkIiwKKwkJCTA0MDAsCisJCQlwZHB1LT5kZWJ1Z2ZzX3Jvb3QsCisJCQkodTMy ICopICZjZmctPnhpbl9pZCk7CisJZGVidWdmc19jcmVhdGVfdTMyKCJjbGtfY3RybCIsCisJCQkw NDAwLAorCQkJcGRwdS0+ZGVidWdmc19yb290LAorCQkJKHUzMiAqKSAmY2ZnLT5jbGtfY3RybCk7 CisJZGVidWdmc19jcmVhdGVfeDMyKCJjcmVxX3ZibGFuayIsCisJCQkwNjAwLAorCQkJcGRwdS0+ ZGVidWdmc19yb290LAorCQkJKHUzMiAqKSAmc2Jsay0+Y3JlcV92YmxhbmspOworCWRlYnVnZnNf Y3JlYXRlX3gzMigiZGFuZ2VyX3ZibGFuayIsCisJCQkwNjAwLAorCQkJcGRwdS0+ZGVidWdmc19y b290LAorCQkJKHUzMiAqKSAmc2Jsay0+ZGFuZ2VyX3ZibGFuayk7CisKKwlkZWJ1Z2ZzX2NyZWF0 ZV9maWxlKCJkaXNhYmxlX2RhbmdlciIsCisJCQkwNjAwLAorCQkJcGRwdS0+ZGVidWdmc19yb290 LAorCQkJa21zLCAmZHB1X3BsYW5lX2Rhbmdlcl9lbmFibGUpOworCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyB2b2lkIF9kcHVfcGxhbmVfZGVzdHJveV9kZWJ1Z2ZzKHN0cnVjdCBkcm1fcGxhbmUg KnBsYW5lKQoreworCXN0cnVjdCBkcHVfcGxhbmUgKnBkcHU7CisKKwlpZiAoIXBsYW5lKQorCQly ZXR1cm47CisJcGRwdSA9IHRvX2RwdV9wbGFuZShwbGFuZSk7CisKKwlkZWJ1Z2ZzX3JlbW92ZV9y ZWN1cnNpdmUocGRwdS0+ZGVidWdmc19yb290KTsKK30KKyNlbHNlCitzdGF0aWMgaW50IF9kcHVf cGxhbmVfaW5pdF9kZWJ1Z2ZzKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQoreworCXJldHVybiAw OworfQorc3RhdGljIHZvaWQgX2RwdV9wbGFuZV9kZXN0cm95X2RlYnVnZnMoc3RydWN0IGRybV9w bGFuZSAqcGxhbmUpCit7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBkcHVfcGxhbmVfbGF0ZV9y ZWdpc3RlcihzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKK3sKKwlyZXR1cm4gX2RwdV9wbGFuZV9p bml0X2RlYnVnZnMocGxhbmUpOworfQorCitzdGF0aWMgdm9pZCBkcHVfcGxhbmVfZWFybHlfdW5y ZWdpc3RlcihzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKK3sKKwlfZHB1X3BsYW5lX2Rlc3Ryb3lf ZGVidWdmcyhwbGFuZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNz IGRwdV9wbGFuZV9mdW5jcyA9IHsKKwkJLnVwZGF0ZV9wbGFuZSA9IGRybV9hdG9taWNfaGVscGVy X3VwZGF0ZV9wbGFuZSwKKwkJLmRpc2FibGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl9kaXNh YmxlX3BsYW5lLAorCQkuZGVzdHJveSA9IGRwdV9wbGFuZV9kZXN0cm95LAorCQkucmVzZXQgPSBk cHVfcGxhbmVfcmVzZXQsCisJCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHB1X3BsYW5lX2R1 cGxpY2F0ZV9zdGF0ZSwKKwkJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHB1X3BsYW5lX2Rlc3Ry b3lfc3RhdGUsCisJCS5sYXRlX3JlZ2lzdGVyID0gZHB1X3BsYW5lX2xhdGVfcmVnaXN0ZXIsCisJ CS5lYXJseV91bnJlZ2lzdGVyID0gZHB1X3BsYW5lX2Vhcmx5X3VucmVnaXN0ZXIsCit9OworCitz dGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9oZWxwZXJfZnVuY3MgZHB1X3BsYW5lX2hlbHBl cl9mdW5jcyA9IHsKKwkJLnByZXBhcmVfZmIgPSBkcHVfcGxhbmVfcHJlcGFyZV9mYiwKKwkJLmNs ZWFudXBfZmIgPSBkcHVfcGxhbmVfY2xlYW51cF9mYiwKKwkJLmF0b21pY19jaGVjayA9IGRwdV9w bGFuZV9hdG9taWNfY2hlY2ssCisJCS5hdG9taWNfdXBkYXRlID0gZHB1X3BsYW5lX2F0b21pY191 cGRhdGUsCit9OworCitlbnVtIGRwdV9zc3BwIGRwdV9wbGFuZV9waXBlKHN0cnVjdCBkcm1fcGxh bmUgKnBsYW5lKQoreworCXJldHVybiBwbGFuZSA/IHRvX2RwdV9wbGFuZShwbGFuZSktPnBpcGUg OiBTU1BQX05PTkU7Cit9CisKK2Jvb2wgaXNfZHB1X3BsYW5lX3ZpcnR1YWwoc3RydWN0IGRybV9w bGFuZSAqcGxhbmUpCit7CisJcmV0dXJuIHBsYW5lID8gdG9fZHB1X3BsYW5lKHBsYW5lKS0+aXNf dmlydHVhbCA6IGZhbHNlOworfQorCisvKiBpbml0aWFsaXplIHBsYW5lICovCitzdHJ1Y3QgZHJt X3BsYW5lICpkcHVfcGxhbmVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQl1aW50MzJf dCBwaXBlLCBib29sIHByaW1hcnlfcGxhbmUsCisJCXVuc2lnbmVkIGxvbmcgcG9zc2libGVfY3J0 Y3MsIHUzMiBtYXN0ZXJfcGxhbmVfaWQpCit7CisJc3RydWN0IGRybV9wbGFuZSAqcGxhbmUgPSBO VUxMLCAqbWFzdGVyX3BsYW5lID0gTlVMTDsKKwljb25zdCBzdHJ1Y3QgZHB1X2Zvcm1hdF9leHRl bmRlZCAqZm9ybWF0X2xpc3Q7CisJc3RydWN0IGRwdV9wbGFuZSAqcGRwdTsKKwlzdHJ1Y3QgbXNt X2RybV9wcml2YXRlICpwcml2OworCXN0cnVjdCBkcHVfa21zICprbXM7CisJZW51bSBkcm1fcGxh bmVfdHlwZSB0eXBlOworCWludCB6cG9zX21heCA9IERQVV9aUE9TX01BWDsKKwlpbnQgcmV0ID0g LUVJTlZBTDsKKworCWlmICghZGV2KSB7CisJCURQVV9FUlJPUigiWyV1XWRldmljZSBpcyBOVUxM XG4iLCBwaXBlKTsKKwkJZ290byBleGl0OworCX0KKworCXByaXYgPSBkZXYtPmRldl9wcml2YXRl OworCWlmICghcHJpdikgeworCQlEUFVfRVJST1IoIlsldV1wcml2YXRlIGRhdGEgaXMgTlVMTFxu IiwgcGlwZSk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAoIXByaXYtPmttcykgeworCQlEUFVf RVJST1IoIlsldV1pbnZhbGlkIEtNUyByZWZlcmVuY2VcbiIsIHBpcGUpOworCQlnb3RvIGV4aXQ7 CisJfQorCWttcyA9IHRvX2RwdV9rbXMocHJpdi0+a21zKTsKKworCWlmICgha21zLT5jYXRhbG9n KSB7CisJCURQVV9FUlJPUigiWyV1XWludmFsaWQgY2F0YWxvZyByZWZlcmVuY2VcbiIsIHBpcGUp OworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogY3JlYXRlIGFuZCB6ZXJvIGxvY2FsIHN0cnVjdHVy ZSAqLworCXBkcHUgPSBremFsbG9jKHNpemVvZigqcGRwdSksIEdGUF9LRVJORUwpOworCWlmICgh cGRwdSkgeworCQlEUFVfRVJST1IoIlsldV1mYWlsZWQgdG8gYWxsb2NhdGUgbG9jYWwgcGxhbmUg c3RydWN0XG4iLCBwaXBlKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBleGl0OworCX0KKwor CS8qIGNhY2hlIGxvY2FsIHN0dWZmIGZvciBsYXRlciAqLworCXBsYW5lID0gJnBkcHUtPmJhc2U7 CisJcGRwdS0+cGlwZSA9IHBpcGU7CisJcGRwdS0+aXNfdmlydHVhbCA9IChtYXN0ZXJfcGxhbmVf aWQgIT0gMCk7CisJSU5JVF9MSVNUX0hFQUQoJnBkcHUtPm1wbGFuZV9saXN0KTsKKwltYXN0ZXJf cGxhbmUgPSBkcm1fcGxhbmVfZmluZChkZXYsIE5VTEwsIG1hc3Rlcl9wbGFuZV9pZCk7CisJaWYg KG1hc3Rlcl9wbGFuZSkgeworCQlzdHJ1Y3QgZHB1X3BsYW5lICptcGRwdSA9IHRvX2RwdV9wbGFu ZShtYXN0ZXJfcGxhbmUpOworCisJCWxpc3RfYWRkX3RhaWwoJnBkcHUtPm1wbGFuZV9saXN0LCAm bXBkcHUtPm1wbGFuZV9saXN0KTsKKwl9CisKKwkvKiBpbml0aWFsaXplIHVuZGVybHlpbmcgaC93 IGRyaXZlciAqLworCXBkcHUtPnBpcGVfaHcgPSBkcHVfaHdfc3NwcF9pbml0KHBpcGUsIGttcy0+ bW1pbywga21zLT5jYXRhbG9nLAorCQkJCQkJCW1hc3Rlcl9wbGFuZV9pZCAhPSAwKTsKKwlpZiAo SVNfRVJSKHBkcHUtPnBpcGVfaHcpKSB7CisJCURQVV9FUlJPUigiWyV1XVNTUFAgaW5pdCBmYWls ZWRcbiIsIHBpcGUpOworCQlyZXQgPSBQVFJfRVJSKHBkcHUtPnBpcGVfaHcpOworCQlnb3RvIGNs ZWFuX3BsYW5lOworCX0gZWxzZSBpZiAoIXBkcHUtPnBpcGVfaHctPmNhcCB8fCAhcGRwdS0+cGlw ZV9ody0+Y2FwLT5zYmxrKSB7CisJCURQVV9FUlJPUigiWyV1XVNTUFAgaW5pdCByZXR1cm5lZCBp bnZhbGlkIGNmZ1xuIiwgcGlwZSk7CisJCWdvdG8gY2xlYW5fc3NwcDsKKwl9CisKKwkvKiBjYWNo ZSBmZWF0dXJlcyBtYXNrIGZvciBsYXRlciAqLworCXBkcHUtPmZlYXR1cmVzID0gcGRwdS0+cGlw ZV9ody0+Y2FwLT5mZWF0dXJlczsKKwlwZHB1LT5waXBlX3NibGsgPSBwZHB1LT5waXBlX2h3LT5j YXAtPnNibGs7CisJaWYgKCFwZHB1LT5waXBlX3NibGspIHsKKwkJRFBVX0VSUk9SKCJbJXVdaW52 YWxpZCBzYmxrXG4iLCBwaXBlKTsKKwkJZ290byBjbGVhbl9zc3BwOworCX0KKworCWlmICghbWFz dGVyX3BsYW5lX2lkKQorCQlmb3JtYXRfbGlzdCA9IHBkcHUtPnBpcGVfc2Jsay0+Zm9ybWF0X2xp c3Q7CisJZWxzZQorCQlmb3JtYXRfbGlzdCA9IHBkcHUtPnBpcGVfc2Jsay0+dmlydF9mb3JtYXRf bGlzdDsKKworCXBkcHUtPm5mb3JtYXRzID0gZHB1X3BvcHVsYXRlX2Zvcm1hdHMoZm9ybWF0X2xp c3QsCisJCQkJcGRwdS0+Zm9ybWF0cywKKwkJCQkwLAorCQkJCUFSUkFZX1NJWkUocGRwdS0+Zm9y bWF0cykpOworCisJaWYgKCFwZHB1LT5uZm9ybWF0cykgeworCQlEUFVfRVJST1IoIlsldV1ubyB2 YWxpZCBmb3JtYXRzIGZvciBwbGFuZVxuIiwgcGlwZSk7CisJCWdvdG8gY2xlYW5fc3NwcDsKKwl9 CisKKwlpZiAocGRwdS0+ZmVhdHVyZXMgJiBCSVQoRFBVX1NTUFBfQ1VSU09SKSkKKwkJdHlwZSA9 IERSTV9QTEFORV9UWVBFX0NVUlNPUjsKKwllbHNlIGlmIChwcmltYXJ5X3BsYW5lKQorCQl0eXBl ID0gRFJNX1BMQU5FX1RZUEVfUFJJTUFSWTsKKwllbHNlCisJCXR5cGUgPSBEUk1fUExBTkVfVFlQ RV9PVkVSTEFZOworCXJldCA9IGRybV91bml2ZXJzYWxfcGxhbmVfaW5pdChkZXYsIHBsYW5lLCAw eGZmLCAmZHB1X3BsYW5lX2Z1bmNzLAorCQkJCXBkcHUtPmZvcm1hdHMsIHBkcHUtPm5mb3JtYXRz LAorCQkJCU5VTEwsIHR5cGUsIE5VTEwpOworCWlmIChyZXQpCisJCWdvdG8gY2xlYW5fc3NwcDsK KworCXBkcHUtPmNhdGFsb2cgPSBrbXMtPmNhdGFsb2c7CisKKwlpZiAoa21zLT5jYXRhbG9nLT5t aXhlcl9jb3VudCAmJgorCQlrbXMtPmNhdGFsb2ctPm1peGVyWzBdLnNibGstPm1heGJsZW5kc3Rh Z2VzKSB7CisJCXpwb3NfbWF4ID0ga21zLT5jYXRhbG9nLT5taXhlclswXS5zYmxrLT5tYXhibGVu ZHN0YWdlcyAtIDE7CisJCWlmICh6cG9zX21heCA+IERQVV9TVEFHRV9NQVggLSBEUFVfU1RBR0Vf MCAtIDEpCisJCQl6cG9zX21heCA9IERQVV9TVEFHRV9NQVggLSBEUFVfU1RBR0VfMCAtIDE7CisJ fQorCisJcmV0ID0gZHJtX3BsYW5lX2NyZWF0ZV96cG9zX3Byb3BlcnR5KHBsYW5lLCAwLCAwLCB6 cG9zX21heCk7CisJaWYgKHJldCkKKwkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gaW5zdGFsbCB6cG9z IHByb3BlcnR5LCByYyA9ICVkXG4iLCByZXQpOworCisJLyogc3VjY2VzcyEgZmluYWxpemUgaW5p dGlhbGl6YXRpb24gKi8KKwlkcm1fcGxhbmVfaGVscGVyX2FkZChwbGFuZSwgJmRwdV9wbGFuZV9o ZWxwZXJfZnVuY3MpOworCisJLyogc2F2ZSB1c2VyIGZyaWVuZGx5IHBpcGUgbmFtZSBmb3IgbGF0 ZXIgKi8KKwlzbnByaW50ZihwZHB1LT5waXBlX25hbWUsIERQVV9OQU1FX1NJWkUsICJwbGFuZSV1 IiwgcGxhbmUtPmJhc2UuaWQpOworCisJbXV0ZXhfaW5pdCgmcGRwdS0+bG9jayk7CisKKwlEUFVf REVCVUcoIiVzIGNyZWF0ZWQgZm9yIHBpcGU6JXUgaWQ6JXUgdmlydHVhbDoldVxuIiwgcGRwdS0+ cGlwZV9uYW1lLAorCQkJCQlwaXBlLCBwbGFuZS0+YmFzZS5pZCwgbWFzdGVyX3BsYW5lX2lkKTsK KwlyZXR1cm4gcGxhbmU7CisKK2NsZWFuX3NzcHA6CisJaWYgKHBkcHUgJiYgcGRwdS0+cGlwZV9o dykKKwkJZHB1X2h3X3NzcHBfZGVzdHJveShwZHB1LT5waXBlX2h3KTsKK2NsZWFuX3BsYW5lOgor CWtmcmVlKHBkcHUpOworZXhpdDoKKwlyZXR1cm4gRVJSX1BUUihyZXQpOworfQpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3BsYW5lLmggYi9kcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcGxhbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMDAuLmY2ZmU2ZGRjN2EzYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wbGFuZS5oCkBAIC0wLDAgKzEsMTc1IEBACisvKgor ICogQ29weXJpZ2h0IChjKSAyMDE1LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmln aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlZCBIYXQKKyAqIEF1dGhvcjog Um9iIENsYXJrIDxyb2JkY2xhcmtAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Cisg KiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNp b24gMiBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisg KgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0 aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4u CisgKi8KKworI2lmbmRlZiBfRFBVX1BMQU5FX0hfCisjZGVmaW5lIF9EUFVfUExBTkVfSF8KKwor I2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgorCisjaW5jbHVkZSAiZHB1X2ttcy5oIgorI2luY2x1 ZGUgImRwdV9od19tZHNzLmgiCisjaW5jbHVkZSAiZHB1X2h3X3NzcHAuaCIKKworLyoqCisgKiBz dHJ1Y3QgZHB1X3BsYW5lX3N0YXRlOiBEZWZpbmUgZHB1IGV4dGVuc2lvbiBvZiBkcm0gcGxhbmUg c3RhdGUgb2JqZWN0CisgKiBAYmFzZToJYmFzZSBkcm0gcGxhbmUgc3RhdGUgb2JqZWN0CisgKiBA cHJvcGVydHlfc3RhdGU6IExvY2FsIHN0b3JhZ2UgZm9yIG1zbV9wcm9wIHByb3BlcnRpZXMKKyAq IEBwcm9wZXJ0eV92YWx1ZXM6CWNhY2hlZCBwbGFuZSBwcm9wZXJ0eSB2YWx1ZXMKKyAqIEBhc3Bh Y2U6CXBvaW50ZXIgdG8gYWRkcmVzcyBzcGFjZSBmb3IgaW5wdXQvb3V0cHV0IGJ1ZmZlcnMKKyAq IEBpbnB1dF9mZW5jZToJZGVyZWZlcmVuY2VkIGlucHV0IGZlbmNlIHBvaW50ZXIKKyAqIEBzdGFn ZToJYXNzaWduZWQgYnkgY3J0YyBibGVuZGVyCisgKiBAbXVsdGlyZWN0X2luZGV4OiBpbmRleCBv ZiB0aGUgcmVjdGFuZ2xlIG9mIFNTUFAKKyAqIEBtdWx0aXJlY3RfbW9kZTogcGFyYWxsZWwgb3Ig dGltZSBtdWx0aXBsZXggbXVsdGlyZWN0IG1vZGUKKyAqIEBwZW5kaW5nOgl3aGV0aGVyIHRoZSBj dXJyZW50IHVwZGF0ZSBpcyBzdGlsbCBwZW5kaW5nCisgKiBAc2NhbGVyM19jZmc6IGNvbmZpZ3Vy YXRpb24gZGF0YSBmb3Igc2NhbGVyMworICogQHBpeGVsX2V4dDogY29uZmlndXJhdGlvbiBkYXRh IGZvciBwaXhlbCBleHRlbnNpb25zCisgKiBAc2NhbGVyX2NoZWNrX3N0YXRlOiBpbmRpY2F0ZXMg c3RhdHVzIG9mIHVzZXIgcHJvdmlkZWQgcGl4ZWwgZXh0ZW5zaW9uIGRhdGEKKyAqIEBjZHBfY2Zn OglDRFAgY29uZmlndXJhdGlvbgorICovCitzdHJ1Y3QgZHB1X3BsYW5lX3N0YXRlIHsKKwlzdHJ1 Y3QgZHJtX3BsYW5lX3N0YXRlIGJhc2U7CisJc3RydWN0IG1zbV9nZW1fYWRkcmVzc19zcGFjZSAq YXNwYWNlOworCXZvaWQgKmlucHV0X2ZlbmNlOworCWVudW0gZHB1X3N0YWdlIHN0YWdlOworCXVp bnQzMl90IG11bHRpcmVjdF9pbmRleDsKKwl1aW50MzJfdCBtdWx0aXJlY3RfbW9kZTsKKwlib29s IHBlbmRpbmc7CisKKwkvKiBzY2FsZXIgY29uZmlndXJhdGlvbiAqLworCXN0cnVjdCBkcHVfaHdf c2NhbGVyM19jZmcgc2NhbGVyM19jZmc7CisJc3RydWN0IGRwdV9od19waXhlbF9leHQgcGl4ZWxf ZXh0OworCisJc3RydWN0IGRwdV9od19waXBlX2NkcF9jZmcgY2RwX2NmZzsKK307CisKKy8qKgor ICogc3RydWN0IGRwdV9tdWx0aXJlY3RfcGxhbmVfc3RhdGVzOiBEZWZpbmVzIG11bHRpcmVjdCBw YWlyIG9mIGRybSBwbGFuZSBzdGF0ZXMKKyAqIEByMDogZHJtIHBsYW5lIGNvbmZpZ3VyZWQgb24g cmVjdCAwCisgKiBAcjE6IGRybSBwbGFuZSBjb25maWd1cmVkIG9uIHJlY3QgMQorICovCitzdHJ1 Y3QgZHB1X211bHRpcmVjdF9wbGFuZV9zdGF0ZXMgeworCWNvbnN0IHN0cnVjdCBkcm1fcGxhbmVf c3RhdGUgKnIwOworCWNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnIxOworfTsKKworI2Rl ZmluZSB0b19kcHVfcGxhbmVfc3RhdGUoeCkgXAorCWNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgZHB1 X3BsYW5lX3N0YXRlLCBiYXNlKQorCisvKioKKyAqIGRwdV9wbGFuZV9waXBlIC0gcmV0dXJuIHNz cHAgaWRlbnRpZmllciBmb3IgdGhlIGdpdmVuIHBsYW5lCisgKiBAcGxhbmU6ICAgUG9pbnRlciB0 byBEUk0gcGxhbmUgb2JqZWN0CisgKiBSZXR1cm5zOiBzc3BwIGlkZW50aWZpZXIgb2YgdGhlIGdp dmVuIHBsYW5lCisgKi8KK2VudW0gZHB1X3NzcHAgZHB1X3BsYW5lX3BpcGUoc3RydWN0IGRybV9w bGFuZSAqcGxhbmUpOworCisvKioKKyAqIGlzX2RwdV9wbGFuZV92aXJ0dWFsIC0gY2hlY2sgZm9y IHZpcnR1YWwgcGxhbmUKKyAqIEBwbGFuZTogUG9pbnRlciB0byBEUk0gcGxhbmUgb2JqZWN0Cisg KiByZXR1cm5zOiB0cnVlIC0gaWYgdGhlIHBsYW5lIGlzIHZpcnR1YWwKKyAqICAgICAgICAgIGZh bHNlIC0gaWYgdGhlIHBsYW5lIGlzIHByaW1hcnkKKyAqLworYm9vbCBpc19kcHVfcGxhbmVfdmly dHVhbChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSk7CisKKy8qKgorICogZHB1X3BsYW5lX2dldF9j dGxfZmx1c2ggLSBnZXQgY29udHJvbCBmbHVzaCBtYXNrCisgKiBAcGxhbmU6ICAgUG9pbnRlciB0 byBEUk0gcGxhbmUgb2JqZWN0CisgKiBAY3RsOiBQb2ludGVyIHRvIGNvbnRyb2wgaGFyZHdhcmUK KyAqIEBmbHVzaF9zc3BwOiBQb2ludGVyIHRvIHNzcHAgZmx1c2ggY29udHJvbCB3b3JkCisgKi8K K3ZvaWQgZHB1X3BsYW5lX2dldF9jdGxfZmx1c2goc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsIHN0 cnVjdCBkcHVfaHdfY3RsICpjdGwsCisJCXUzMiAqZmx1c2hfc3NwcCk7CisKKy8qKgorICogZHB1 X3BsYW5lX3Jlc3RvcmUgLSByZXN0b3JlIGh3IHN0YXRlIGlmIHByZXZpb3VzbHkgcG93ZXIgY29s bGFwc2VkCisgKiBAcGxhbmU6IFBvaW50ZXIgdG8gZHJtIHBsYW5lIHN0cnVjdHVyZQorICovCit2 b2lkIGRwdV9wbGFuZV9yZXN0b3JlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKTsKKworLyoqCisg KiBkcHVfcGxhbmVfZmx1c2ggLSBmaW5hbCBwbGFuZSBvcGVyYXRpb25zIGJlZm9yZSBjb21taXQg Zmx1c2gKKyAqIEBwbGFuZTogUG9pbnRlciB0byBkcm0gcGxhbmUgc3RydWN0dXJlCisgKi8KK3Zv aWQgZHB1X3BsYW5lX2ZsdXNoKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKTsKKworLyoqCisgKiBk cHVfcGxhbmVfa2lja29mZiAtIGZpbmFsIHBsYW5lIG9wZXJhdGlvbnMgYmVmb3JlIGNvbW1pdCBr aWNrb2ZmCisgKiBAcGxhbmU6IFBvaW50ZXIgdG8gZHJtIHBsYW5lIHN0cnVjdHVyZQorICovCit2 b2lkIGRwdV9wbGFuZV9raWNrb2ZmKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKTsKKworLyoqCisg KiBkcHVfcGxhbmVfc2V0X2Vycm9yOiBlbmFibGUvZGlzYWJsZSBlcnJvciBjb25kaXRpb24KKyAq IEBwbGFuZTogcG9pbnRlciB0byBkcm1fcGxhbmUgc3RydWN0dXJlCisgKi8KK3ZvaWQgZHB1X3Bs YW5lX3NldF9lcnJvcihzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwgYm9vbCBlcnJvcik7CisKKy8q KgorICogZHB1X3BsYW5lX2luaXQgLSBjcmVhdGUgbmV3IGRwdSBwbGFuZSBmb3IgdGhlIGdpdmVu IHBpcGUKKyAqIEBkZXY6ICAgUG9pbnRlciB0byBEUk0gZGV2aWNlCisgKiBAcGlwZTogIGRwdSBo YXJkd2FyZSBwaXBlIGlkZW50aWZpZXIKKyAqIEBwcmltYXJ5X3BsYW5lOiB0cnVlIGlmIHRoaXMg cGlwZSBpcyBwcmltYXJ5IHBsYW5lIGZvciBjcnRjCisgKiBAcG9zc2libGVfY3J0Y3M6IGJpdG1h c2sgb2YgY3J0YyB0aGF0IGNhbiBiZSBhdHRhY2hlZCB0byB0aGUgZ2l2ZW4gcGlwZQorICogQG1h c3Rlcl9wbGFuZV9pZDogcHJpbWFyeSBwbGFuZSBpZCBvZiBhIG11bHRpcmVjdCBwaXBlLiAwIHZh bHVlIHBhc3NlZCBmb3IKKyAqICAgICAgICAgICAgICAgICAgIGEgcmVndWxhciBwbGFuZSBpbml0 aWFsaXphdGlvbi4gQSBub24temVybyBwcmltYXJ5IHBsYW5lCisgKiAgICAgICAgICAgICAgICAg ICBpZCB3aWxsIGJlIHBhc3NlZCBmb3IgYSB2aXJ0dWFsIHBpcGUgaW5pdGlhbGl6YXRpb24uCisg KgorICovCitzdHJ1Y3QgZHJtX3BsYW5lICpkcHVfcGxhbmVfaW5pdChzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LAorCQl1aW50MzJfdCBwaXBlLCBib29sIHByaW1hcnlfcGxhbmUsCisJCXVuc2lnbmVk IGxvbmcgcG9zc2libGVfY3J0Y3MsIHUzMiBtYXN0ZXJfcGxhbmVfaWQpOworCisvKioKKyAqIGRw dV9wbGFuZV92YWxpZGF0ZV9tdWx0aXJlY3RpX3YyIC0gdmFsaWRhdGUgdGhlIG11bHRpcmVjdCBw bGFuZXMKKyAqCQkJCSAgICAgIGFnYWluc3QgaHcgbGltaXRhdGlvbnMKKyAqIEBwbGFuZTogZHJt IHBsYXRlIHN0YXRlcyBvZiB0aGUgbXVsdGlyZWN0IHBhaXIKKyAqLworaW50IGRwdV9wbGFuZV92 YWxpZGF0ZV9tdWx0aXJlY3RfdjIoc3RydWN0IGRwdV9tdWx0aXJlY3RfcGxhbmVfc3RhdGVzICpw bGFuZSk7CisKKy8qKgorICogZHB1X3BsYW5lX2NsZWFyX211bHRpcmVjdCAtIGNsZWFyIG11bHRp cmVjdCBiaXRzIGZvciB0aGUgZ2l2ZW4gcGlwZQorICogQGRybV9zdGF0ZTogUG9pbnRlciB0byBE Uk0gcGxhbmUgc3RhdGUKKyAqLwordm9pZCBkcHVfcGxhbmVfY2xlYXJfbXVsdGlyZWN0KGNvbnN0 IHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKmRybV9zdGF0ZSk7CisKKy8qKgorICogZHB1X3BsYW5l X3dhaXRfaW5wdXRfZmVuY2UgLSB3YWl0IGZvciBpbnB1dCBmZW5jZSBvYmplY3QKKyAqIEBwbGFu ZTogICBQb2ludGVyIHRvIERSTSBwbGFuZSBvYmplY3QKKyAqIEB3YWl0X21zOiBXYWl0IHRpbWVv dXQgdmFsdWUKKyAqIFJldHVybnM6IFplcm8gb24gc3VjY2VzcworICovCitpbnQgZHB1X3BsYW5l X3dhaXRfaW5wdXRfZmVuY2Uoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsIHVpbnQzMl90IHdhaXRf bXMpOworCisvKioKKyAqIGRwdV9wbGFuZV9jb2xvcl9maWxsIC0gZW5hYmxlcyBjb2xvciBmaWxs IG9uIHBsYW5lCisgKiBAcGxhbmU6ICBQb2ludGVyIHRvIERSTSBwbGFuZSBvYmplY3QKKyAqIEBj b2xvcjogIFJHQiBmaWxsIGNvbG9yIHZhbHVlLCBbMjMuLjE2XSBCbHVlLCBbMTUuLjhdIEdyZWVu LCBbNy4uMF0gUmVkCisgKiBAYWxwaGE6ICA4LWJpdCBmaWxsIGFscGhhIHZhbHVlLCAyNTUgc2Vs ZWN0cyAxMDAlIGFscGhhCisgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MKKyAqLworaW50IGRwdV9w bGFuZV9jb2xvcl9maWxsKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAorCQl1aW50MzJfdCBjb2xv ciwgdWludDMyX3QgYWxwaGEpOworCisvKioKKyAqIGRwdV9wbGFuZV9zZXRfcmV2YWxpZGF0ZSAt IHNldHMgcmV2YWxpZGF0ZSBmbGFnIHdoaWNoIGZvcmNlcyBhIGZ1bGwKKyAqCXZhbGlkYXRpb24g b2YgdGhlIHBsYW5lIHByb3BlcnRpZXMgaW4gdGhlIG5leHQgYXRvbWljIGNoZWNrCisgKiBAcGxh bmU6IFBvaW50ZXIgdG8gRFJNIHBsYW5lIG9iamVjdAorICogQGVuYWJsZTogQm9vbGVhbiB0byBz ZXQvdW5zZXQgdGhlIGZsYWcKKyAqLwordm9pZCBkcHVfcGxhbmVfc2V0X3JldmFsaWRhdGUoc3Ry dWN0IGRybV9wbGFuZSAqcGxhbmUsIGJvb2wgZW5hYmxlKTsKKworI2VuZGlmIC8qIF9EUFVfUExB TkVfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9w b3dlcl9oYW5kbGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wb3dlcl9o YW5kbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmE2OGYxMjQ5 Mzg4YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9wb3dlcl9oYW5kbGUuYwpAQCAtMCwwICsxLDI0OSBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE0 LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCisgKgorICovCisKKyNkZWZpbmUgcHJfZm10KGZtdCkJIltkcm06JXM6JWRdOiAiIGZtdCwg X19mdW5jX18sIF9fTElORV9fCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRl IDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4 L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgv bXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorCisjaW5jbHVkZSAiZHB1 X3Bvd2VyX2hhbmRsZS5oIgorI2luY2x1ZGUgImRwdV90cmFjZS5oIgorCitzdGF0aWMgY29uc3Qg Y2hhciAqZGF0YV9idXNfbmFtZVtEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfTUFYXSA9IHsKKwlb RFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEX01OT0NdID0gInFjb20sZHB1LWRhdGEtYnVzIiwKKwlb RFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEX0xMQ0NdID0gInFjb20sZHB1LWxsY2MtYnVzIiwKKwlb RFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEX0VCSV0gPSAicWNvbSxkcHUtZWJpLWJ1cyIsCit9Owor Citjb25zdCBjaGFyICpkcHVfcG93ZXJfaGFuZGxlX2dldF9kYnVzX25hbWUodTMyIGJ1c19pZCkK K3sKKwlpZiAoYnVzX2lkIDwgRFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEX01BWCkKKwkJcmV0dXJu IGRhdGFfYnVzX25hbWVbYnVzX2lkXTsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9p ZCBkcHVfcG93ZXJfZXZlbnRfdHJpZ2dlcl9sb2NrZWQoc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUg KnBoYW5kbGUsCisJCXUzMiBldmVudF90eXBlKQoreworCXN0cnVjdCBkcHVfcG93ZXJfZXZlbnQg KmV2ZW50OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJnBoYW5kbGUtPmV2ZW50X2xp c3QsIGxpc3QpIHsKKwkJaWYgKGV2ZW50LT5ldmVudF90eXBlICYgZXZlbnRfdHlwZSkKKwkJCWV2 ZW50LT5jYl9mbmMoZXZlbnRfdHlwZSwgZXZlbnQtPnVzcik7CisJfQorfQorCitzdHJ1Y3QgZHB1 X3Bvd2VyX2NsaWVudCAqZHB1X3Bvd2VyX2NsaWVudF9jcmVhdGUoCisJc3RydWN0IGRwdV9wb3dl cl9oYW5kbGUgKnBoYW5kbGUsIGNoYXIgKmNsaWVudF9uYW1lKQoreworCXN0cnVjdCBkcHVfcG93 ZXJfY2xpZW50ICpjbGllbnQ7CisJc3RhdGljIHUzMiBpZDsKKworCWlmICghY2xpZW50X25hbWUg fHwgIXBoYW5kbGUpIHsKKwkJcHJfZXJyKCJjbGllbnQgbmFtZSBpcyBudWxsIG9yIGludmFsaWQg cG93ZXIgZGF0YVxuIik7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0KKworCWNsaWVu dCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkcHVfcG93ZXJfY2xpZW50KSwgR0ZQX0tFUk5FTCk7 CisJaWYgKCFjbGllbnQpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJbXV0ZXhfbG9j aygmcGhhbmRsZS0+cGhhbmRsZV9sb2NrKTsKKwlzdHJsY3B5KGNsaWVudC0+bmFtZSwgY2xpZW50 X25hbWUsIE1BWF9DTElFTlRfTkFNRV9MRU4pOworCWNsaWVudC0+dXNlY2FzZV9uZHggPSBWT1RF X0lOREVYX0RJU0FCTEU7CisJY2xpZW50LT5pZCA9IGlkOworCWNsaWVudC0+YWN0aXZlID0gdHJ1 ZTsKKwlwcl9kZWJ1ZygiY2xpZW50ICVzIGNyZWF0ZWQ6JXBLIGlkIDolZFxuIiwgY2xpZW50X25h bWUsCisJCWNsaWVudCwgaWQpOworCWlkKys7CisJbGlzdF9hZGQoJmNsaWVudC0+bGlzdCwgJnBo YW5kbGUtPnBvd2VyX2NsaWVudF9jbGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZwaGFuZGxlLT5waGFu ZGxlX2xvY2spOworCisJcmV0dXJuIGNsaWVudDsKK30KKwordm9pZCBkcHVfcG93ZXJfY2xpZW50 X2Rlc3Ryb3koc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUgKnBoYW5kbGUsCisJc3RydWN0IGRwdV9w b3dlcl9jbGllbnQgKmNsaWVudCkKK3sKKwlpZiAoIWNsaWVudCAgfHwgIXBoYW5kbGUpIHsKKwkJ cHJfZXJyKCJyZWcgYnVzIHZvdGU6IGludmFsaWQgY2xpZW50IGhhbmRsZVxuIik7CisJfSBlbHNl IGlmICghY2xpZW50LT5hY3RpdmUpIHsKKwkJcHJfZXJyKCJkcHUgcG93ZXIgZGVpbml0IGFscmVh ZHkgZG9uZVxuIik7CisJCWtmcmVlKGNsaWVudCk7CisJfSBlbHNlIHsKKwkJcHJfZGVidWcoImJ1 cyB2b3RlIGNsaWVudCAlcyBkZXN0cm95ZWQ6JXBLIGlkOiV1XG4iLAorCQkJY2xpZW50LT5uYW1l LCBjbGllbnQsIGNsaWVudC0+aWQpOworCQltdXRleF9sb2NrKCZwaGFuZGxlLT5waGFuZGxlX2xv Y2spOworCQlsaXN0X2RlbF9pbml0KCZjbGllbnQtPmxpc3QpOworCQltdXRleF91bmxvY2soJnBo YW5kbGUtPnBoYW5kbGVfbG9jayk7CisJCWtmcmVlKGNsaWVudCk7CisJfQorfQorCit2b2lkIGRw dV9wb3dlcl9yZXNvdXJjZV9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJc3Ry dWN0IGRwdV9wb3dlcl9oYW5kbGUgKnBoYW5kbGUpCit7CisJcGhhbmRsZS0+ZGV2ID0gJnBkZXYt PmRldjsKKworCUlOSVRfTElTVF9IRUFEKCZwaGFuZGxlLT5wb3dlcl9jbGllbnRfY2xpc3QpOwor CUlOSVRfTElTVF9IRUFEKCZwaGFuZGxlLT5ldmVudF9saXN0KTsKKworCW11dGV4X2luaXQoJnBo YW5kbGUtPnBoYW5kbGVfbG9jayk7Cit9CisKK3ZvaWQgZHB1X3Bvd2VyX3Jlc291cmNlX2RlaW5p dChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCXN0cnVjdCBkcHVfcG93ZXJfaGFuZGxl ICpwaGFuZGxlKQoreworCXN0cnVjdCBkcHVfcG93ZXJfY2xpZW50ICpjdXJyX2NsaWVudCwgKm5l eHRfY2xpZW50OworCXN0cnVjdCBkcHVfcG93ZXJfZXZlbnQgKmN1cnJfZXZlbnQsICpuZXh0X2V2 ZW50OworCisJaWYgKCFwaGFuZGxlIHx8ICFwZGV2KSB7CisJCXByX2VycigiaW52YWxpZCBpbnB1 dCBwYXJhbVxuIik7CisJCXJldHVybjsKKwl9CisKKwltdXRleF9sb2NrKCZwaGFuZGxlLT5waGFu ZGxlX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjdXJyX2NsaWVudCwgbmV4dF9j bGllbnQsCisJCQkmcGhhbmRsZS0+cG93ZXJfY2xpZW50X2NsaXN0LCBsaXN0KSB7CisJCXByX2Vy cigiY2xpZW5kOiVzLSVkIHN0aWxsIHJlZ2lzdGVyZWQgd2l0aCByZWZjb3VudDolZFxuIiwKKwkJ CQljdXJyX2NsaWVudC0+bmFtZSwgY3Vycl9jbGllbnQtPmlkLAorCQkJCWN1cnJfY2xpZW50LT5y ZWZjb3VudCk7CisJCWN1cnJfY2xpZW50LT5hY3RpdmUgPSBmYWxzZTsKKwkJbGlzdF9kZWwoJmN1 cnJfY2xpZW50LT5saXN0KTsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY3Vycl9l dmVudCwgbmV4dF9ldmVudCwKKwkJCSZwaGFuZGxlLT5ldmVudF9saXN0LCBsaXN0KSB7CisJCXBy X2VycigiZXZlbnQ6JWQsIGNsaWVudDolcyBzdGlsbCByZWdpc3RlcmVkXG4iLAorCQkJCWN1cnJf ZXZlbnQtPmV2ZW50X3R5cGUsCisJCQkJY3Vycl9ldmVudC0+Y2xpZW50X25hbWUpOworCQljdXJy X2V2ZW50LT5hY3RpdmUgPSBmYWxzZTsKKwkJbGlzdF9kZWwoJmN1cnJfZXZlbnQtPmxpc3QpOwor CX0KKwltdXRleF91bmxvY2soJnBoYW5kbGUtPnBoYW5kbGVfbG9jayk7Cit9CisKK2ludCBkcHVf cG93ZXJfcmVzb3VyY2VfZW5hYmxlKHN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwaGFuZGxlLAor CXN0cnVjdCBkcHVfcG93ZXJfY2xpZW50ICpwY2xpZW50LCBib29sIGVuYWJsZSkKK3sKKwlib29s IGNoYW5nZWQgPSBmYWxzZTsKKwl1MzIgbWF4X3VzZWNhc2VfbmR4ID0gVk9URV9JTkRFWF9ESVNB QkxFLCBwcmV2X3VzZWNhc2VfbmR4OworCXN0cnVjdCBkcHVfcG93ZXJfY2xpZW50ICpjbGllbnQ7 CisKKwlpZiAoIXBoYW5kbGUgfHwgIXBjbGllbnQpIHsKKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0 IGFyZ3VtZW50XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbXV0ZXhfbG9jaygmcGhh bmRsZS0+cGhhbmRsZV9sb2NrKTsKKwlpZiAoZW5hYmxlKQorCQlwY2xpZW50LT5yZWZjb3VudCsr OworCWVsc2UgaWYgKHBjbGllbnQtPnJlZmNvdW50KQorCQlwY2xpZW50LT5yZWZjb3VudC0tOwor CisJaWYgKHBjbGllbnQtPnJlZmNvdW50KQorCQlwY2xpZW50LT51c2VjYXNlX25keCA9IFZPVEVf SU5ERVhfTE9XOworCWVsc2UKKwkJcGNsaWVudC0+dXNlY2FzZV9uZHggPSBWT1RFX0lOREVYX0RJ U0FCTEU7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsaWVudCwgJnBoYW5kbGUtPnBvd2VyX2Ns aWVudF9jbGlzdCwgbGlzdCkgeworCQlpZiAoY2xpZW50LT51c2VjYXNlX25keCA8IFZPVEVfSU5E RVhfTUFYICYmCisJCSAgICBjbGllbnQtPnVzZWNhc2VfbmR4ID4gbWF4X3VzZWNhc2VfbmR4KQor CQkJbWF4X3VzZWNhc2VfbmR4ID0gY2xpZW50LT51c2VjYXNlX25keDsKKwl9CisKKwlpZiAocGhh bmRsZS0+Y3VycmVudF91c2VjYXNlX25keCAhPSBtYXhfdXNlY2FzZV9uZHgpIHsKKwkJY2hhbmdl ZCA9IHRydWU7CisJCXByZXZfdXNlY2FzZV9uZHggPSBwaGFuZGxlLT5jdXJyZW50X3VzZWNhc2Vf bmR4OworCQlwaGFuZGxlLT5jdXJyZW50X3VzZWNhc2VfbmR4ID0gbWF4X3VzZWNhc2VfbmR4Owor CX0KKworCXByX2RlYnVnKCIlcFM6IGNoYW5nZWQ9JWQgY3VycmVudCBpZHg9JWQgcmVxdWVzdCBj bGllbnQgJXMgaWQ6JXUgZW5hYmxlOiVkIHJlZmNvdW50OiVkXG4iLAorCQlfX2J1aWx0aW5fcmV0 dXJuX2FkZHJlc3MoMCksIGNoYW5nZWQsIG1heF91c2VjYXNlX25keCwKKwkJcGNsaWVudC0+bmFt ZSwgcGNsaWVudC0+aWQsIGVuYWJsZSwgcGNsaWVudC0+cmVmY291bnQpOworCisJaWYgKCFjaGFu Z2VkKQorCQlnb3RvIGVuZDsKKworCWlmIChlbmFibGUpIHsKKwkJZHB1X3Bvd2VyX2V2ZW50X3Ry aWdnZXJfbG9ja2VkKHBoYW5kbGUsCisJCQkJRFBVX1BPV0VSX0VWRU5UX1BSRV9FTkFCTEUpOwor CQlkcHVfcG93ZXJfZXZlbnRfdHJpZ2dlcl9sb2NrZWQocGhhbmRsZSwKKwkJCQlEUFVfUE9XRVJf RVZFTlRfUE9TVF9FTkFCTEUpOworCisJfSBlbHNlIHsKKwkJZHB1X3Bvd2VyX2V2ZW50X3RyaWdn ZXJfbG9ja2VkKHBoYW5kbGUsCisJCQkJRFBVX1BPV0VSX0VWRU5UX1BSRV9ESVNBQkxFKTsKKwkJ ZHB1X3Bvd2VyX2V2ZW50X3RyaWdnZXJfbG9ja2VkKHBoYW5kbGUsCisJCQkJRFBVX1BPV0VSX0VW RU5UX1BPU1RfRElTQUJMRSk7CisJfQorCitlbmQ6CisJbXV0ZXhfdW5sb2NrKCZwaGFuZGxlLT5w aGFuZGxlX2xvY2spOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgZHB1X3Bvd2VyX2V2ZW50ICpk cHVfcG93ZXJfaGFuZGxlX3JlZ2lzdGVyX2V2ZW50KAorCQlzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRs ZSAqcGhhbmRsZSwKKwkJdTMyIGV2ZW50X3R5cGUsIHZvaWQgKCpjYl9mbmMpKHUzMiBldmVudF90 eXBlLCB2b2lkICp1c3IpLAorCQl2b2lkICp1c3IsIGNoYXIgKmNsaWVudF9uYW1lKQoreworCXN0 cnVjdCBkcHVfcG93ZXJfZXZlbnQgKmV2ZW50OworCisJaWYgKCFwaGFuZGxlKSB7CisJCXByX2Vy cigiaW52YWxpZCBwb3dlciBoYW5kbGVcbiIpOworCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsK Kwl9IGVsc2UgaWYgKCFjYl9mbmMgfHwgIWV2ZW50X3R5cGUpIHsKKwkJcHJfZXJyKCJubyBjYWxs YmFjayBmbmMgb3IgZXZlbnQgdHlwZVxuIik7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwor CX0KKworCWV2ZW50ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRwdV9wb3dlcl9ldmVudCksIEdG UF9LRVJORUwpOworCWlmICghZXZlbnQpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJ ZXZlbnQtPmV2ZW50X3R5cGUgPSBldmVudF90eXBlOworCWV2ZW50LT5jYl9mbmMgPSBjYl9mbmM7 CisJZXZlbnQtPnVzciA9IHVzcjsKKwlzdHJsY3B5KGV2ZW50LT5jbGllbnRfbmFtZSwgY2xpZW50 X25hbWUsIE1BWF9DTElFTlRfTkFNRV9MRU4pOworCWV2ZW50LT5hY3RpdmUgPSB0cnVlOworCisJ bXV0ZXhfbG9jaygmcGhhbmRsZS0+cGhhbmRsZV9sb2NrKTsKKwlsaXN0X2FkZCgmZXZlbnQtPmxp c3QsICZwaGFuZGxlLT5ldmVudF9saXN0KTsKKwltdXRleF91bmxvY2soJnBoYW5kbGUtPnBoYW5k bGVfbG9jayk7CisKKwlyZXR1cm4gZXZlbnQ7Cit9CisKK3ZvaWQgZHB1X3Bvd2VyX2hhbmRsZV91 bnJlZ2lzdGVyX2V2ZW50KAorCQlzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSwKKwkJ c3RydWN0IGRwdV9wb3dlcl9ldmVudCAqZXZlbnQpCit7CisJaWYgKCFwaGFuZGxlIHx8ICFldmVu dCkgeworCQlwcl9lcnIoImludmFsaWQgcGhhbmRsZSBvciBldmVudFxuIik7CisJfSBlbHNlIGlm ICghZXZlbnQtPmFjdGl2ZSkgeworCQlwcl9lcnIoInBvd2VyIGhhbmRsZSBkZWluaXQgYWxyZWFk eSBkb25lXG4iKTsKKwkJa2ZyZWUoZXZlbnQpOworCX0gZWxzZSB7CisJCW11dGV4X2xvY2soJnBo YW5kbGUtPnBoYW5kbGVfbG9jayk7CisJCWxpc3RfZGVsX2luaXQoJmV2ZW50LT5saXN0KTsKKwkJ bXV0ZXhfdW5sb2NrKCZwaGFuZGxlLT5waGFuZGxlX2xvY2spOworCQlrZnJlZShldmVudCk7CisJ fQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3Bvd2Vy X2hhbmRsZS5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3Bvd2VyX2hhbmRs ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMzQ0Zjc0NDY0ZWNh Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3Bv d2VyX2hhbmRsZS5oCkBAIC0wLDAgKzEsMjI1IEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAx OCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgdmVyc2lvbiAyIGFuZAorICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5 IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K KyAqCisgKi8KKworI2lmbmRlZiBfRFBVX1BPV0VSX0hBTkRMRV9IXworI2RlZmluZSBfRFBVX1BP V0VSX0hBTkRMRV9IXworCisjZGVmaW5lIE1BWF9DTElFTlRfTkFNRV9MRU4gMTI4CisKKyNkZWZp bmUgRFBVX1BPV0VSX0hBTkRMRV9FTkFCTEVfQlVTX0FCX1FVT1RBCTAKKyNkZWZpbmUgRFBVX1BP V0VSX0hBTkRMRV9ESVNBQkxFX0JVU19BQl9RVU9UQQkwCisjZGVmaW5lIERQVV9QT1dFUl9IQU5E TEVfRU5BQkxFX0JVU19JQl9RVU9UQQkxNjAwMDAwMDAwCisjZGVmaW5lIERQVV9QT1dFUl9IQU5E TEVfRElTQUJMRV9CVVNfSUJfUVVPVEEJMAorCisjaW5jbHVkZSAiZHB1X2lvX3V0aWwuaCIKKwor LyogZXZlbnQgd2lsbCBiZSB0cmlnZ2VyZWQgYmVmb3JlIHBvd2VyIGhhbmRsZXIgZGlzYWJsZSAq LworI2RlZmluZSBEUFVfUE9XRVJfRVZFTlRfUFJFX0RJU0FCTEUJMHgxCisKKy8qIGV2ZW50IHdp bGwgYmUgdHJpZ2dlcmVkIGFmdGVyIHBvd2VyIGhhbmRsZXIgZGlzYWJsZSAqLworI2RlZmluZSBE UFVfUE9XRVJfRVZFTlRfUE9TVF9ESVNBQkxFCTB4MgorCisvKiBldmVudCB3aWxsIGJlIHRyaWdn ZXJlZCBiZWZvcmUgcG93ZXIgaGFuZGxlciBlbmFibGUgKi8KKyNkZWZpbmUgRFBVX1BPV0VSX0VW RU5UX1BSRV9FTkFCTEUJMHg0CisKKy8qIGV2ZW50IHdpbGwgYmUgdHJpZ2dlcmVkIGFmdGVyIHBv d2VyIGhhbmRsZXIgZW5hYmxlICovCisjZGVmaW5lIERQVV9QT1dFUl9FVkVOVF9QT1NUX0VOQUJM RQkweDgKKworLyoqCisgKiBtZHNzX2J1c192b3RlX3R5cGU6IHJlZ2lzdGVyIGJ1cyB2b3RlIHR5 cGUKKyAqIFZPVEVfSU5ERVhfRElTQUJMRTogcmVtb3ZlcyB0aGUgY2xpZW50IHZvdGUKKyAqIFZP VEVfSU5ERVhfTE9XOiBrZWVwcyB0aGUgbG93ZXN0IHZvdGUgZm9yIHJlZ2lzdGVyIGJ1cworICog Vk9URV9JTkRFWF9NQVg6IGludmFsaWQKKyAqLworZW51bSBtZHNzX2J1c192b3RlX3R5cGUgewor CVZPVEVfSU5ERVhfRElTQUJMRSwKKwlWT1RFX0lOREVYX0xPVywKKwlWT1RFX0lOREVYX01BWCwK K307CisKKy8qKgorICogZW51bSBkcHVfcG93ZXJfaGFuZGxlX2RhdGFfYnVzX2NsaWVudCAtIHR5 cGUgb2YgYXhpIGJ1cyBjbGllbnRzCisgKiBARFBVX1BPV0VSX0hBTkRMRV9EQVRBX0JVU19DTElF TlRfUlQ6IGNvcmUgcmVhbC10aW1lIGJ1cyBjbGllbnQKKyAqIEBEUFVfUE9XRVJfSEFORExFX0RB VEFfQlVTX0NMSUVOVF9OUlQ6IGNvcmUgbm9uLXJlYWwtdGltZSBidXMgY2xpZW50CisgKiBARFBV X1BPV0VSX0hBTkRMRV9EQVRBX0JVU19DTElFTlRfTUFYOiBtYXhpbXVtIG51bWJlciBvZiBidXMg Y2xpZW50IHR5cGUKKyAqLworZW51bSBkcHVfcG93ZXJfaGFuZGxlX2RhdGFfYnVzX2NsaWVudCB7 CisJRFBVX1BPV0VSX0hBTkRMRV9EQVRBX0JVU19DTElFTlRfUlQsCisJRFBVX1BPV0VSX0hBTkRM RV9EQVRBX0JVU19DTElFTlRfTlJULAorCURQVV9QT1dFUl9IQU5ETEVfREFUQV9CVVNfQ0xJRU5U X01BWAorfTsKKworLyoqCisgKiBlbnVtIERQVV9QT1dFUl9IQU5ETEVfREJVU19JRCAtIGRhdGEg YnVzIGlkZW50aWZpZXIKKyAqIEBEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfTU5PQzogRFBVL01O T0MgZGF0YSBidXMKKyAqIEBEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfTExDQzogTU5PQy9MTEND IGRhdGEgYnVzCisgKiBARFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEX0VCSTogTExDQy9FQkkgZGF0 YSBidXMKKyAqLworZW51bSBEUFVfUE9XRVJfSEFORExFX0RCVVNfSUQgeworCURQVV9QT1dFUl9I QU5ETEVfREJVU19JRF9NTk9DLAorCURQVV9QT1dFUl9IQU5ETEVfREJVU19JRF9MTENDLAorCURQ VV9QT1dFUl9IQU5ETEVfREJVU19JRF9FQkksCisJRFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEX01B WCwKK307CisKKy8qKgorICogc3RydWN0IGRwdV9wb3dlcl9jbGllbnQ6IHN0b3JlcyB0aGUgcG93 ZXIgY2xpZW50IGZvciBkcHUgZHJpdmVyCisgKiBAbmFtZToJbmFtZSBvZiB0aGUgY2xpZW50Cisg KiBAdXNlY2FzZV9uZHg6IGN1cnJlbnQgcmVncyBidXMgdm90ZSB0eXBlCisgKiBAcmVmY291bnQ6 CWN1cnJlbnQgcmVmY291bnQgaWYgbXVsdGlwbGUgbW9kdWxlcyBhcmUgdXNpbmcgc2FtZQorICog ICAgICAgICAgICAgIHNhbWUgY2xpZW50IGZvciBlbmFibGUvZGlzYWJsZS4gUG93ZXIgbW9kdWxl IHdpbGwKKyAqICAgICAgICAgICAgICBhZ2dyZWdhdGUgdGhlIHJlZmNvdW50IGFuZCB2b3RlIGFj Y29yZGluZ2x5IGZvciB0aGlzCisgKiAgICAgICAgICAgICAgY2xpZW50LgorICogQGlkOgkJYXNz aWduZWQgZHVyaW5nIGNyZWF0ZS4gaGVscHMgZm9yIGRlYnVnZ2luZy4KKyAqIEBsaXN0OglsaXN0 IHRvIGF0dGFjaCBwb3dlciBoYW5kbGUgbWFzdGVyIGxpc3QKKyAqIEBhYjogICAgICAgICBhcmJp dHJhdGVkIGJhbmR3aWR0aCBmb3IgZWFjaCBidXMgY2xpZW50CisgKiBAaWI6ICAgICAgICAgaW5z dGFudGFuZW91cyBiYW5kd2lkdGggZm9yIGVhY2ggYnVzIGNsaWVudAorICogQGFjdGl2ZToJaW5p ZGNhdGVzIHRoZSBzdGF0ZSBvZiBkcHUgcG93ZXIgaGFuZGxlCisgKi8KK3N0cnVjdCBkcHVfcG93 ZXJfY2xpZW50IHsKKwljaGFyIG5hbWVbTUFYX0NMSUVOVF9OQU1FX0xFTl07CisJc2hvcnQgdXNl Y2FzZV9uZHg7CisJc2hvcnQgcmVmY291bnQ7CisJdTMyIGlkOworCXN0cnVjdCBsaXN0X2hlYWQg bGlzdDsKKwl1NjQgYWJbRFBVX1BPV0VSX0hBTkRMRV9EQVRBX0JVU19DTElFTlRfTUFYXTsKKwl1 NjQgaWJbRFBVX1BPV0VSX0hBTkRMRV9EQVRBX0JVU19DTElFTlRfTUFYXTsKKwlib29sIGFjdGl2 ZTsKK307CisKKy8qCisgKiBzdHJ1Y3QgZHB1X3Bvd2VyX2V2ZW50IC0gbG9jYWwgZXZlbnQgcmVn aXN0cmF0aW9uIHN0cnVjdHVyZQorICogQGNsaWVudF9uYW1lOiBuYW1lIG9mIHRoZSBjbGllbnQg cmVnaXN0ZXJpbmcKKyAqIEBjYl9mbmM6IHBvaW50ZXIgdG8gZGVzaXJlZCBjYWxsYmFjayBmdW5j dGlvbgorICogQHVzcjogdXNlciBwb2ludGVyIHRvIHBhc3MgdG8gY2FsbGJhY2sgZXZlbnQgdHJp Z2dlcgorICogQGV2ZW50OiByZWZlciB0byBEUFVfUE9XRVJfSEFORExFX0VWRU5UXyoKKyAqIEBs aXN0OiBsaXN0IHRvIGF0dGFjaCBldmVudCBtYXN0ZXIgbGlzdAorICogQGFjdGl2ZTogaW5kaWNh dGVzIHRoZSBzdGF0ZSBvZiBkcHUgcG93ZXIgaGFuZGxlCisgKi8KK3N0cnVjdCBkcHVfcG93ZXJf ZXZlbnQgeworCWNoYXIgY2xpZW50X25hbWVbTUFYX0NMSUVOVF9OQU1FX0xFTl07CisJdm9pZCAo KmNiX2ZuYykodTMyIGV2ZW50X3R5cGUsIHZvaWQgKnVzcik7CisJdm9pZCAqdXNyOworCXUzMiBl dmVudF90eXBlOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlib29sIGFjdGl2ZTsKK307CisK Ky8qKgorICogc3RydWN0IGRwdV9wb3dlcl9oYW5kbGU6IHBvd2VyIGhhbmRsZSBtYWluIHN0cnVj dAorICogQGNsaWVudF9jbGlzdDogbWFzdGVyIGxpc3QgdG8gc3RvcmUgYWxsIGNsaWVudHMKKyAq IEBwaGFuZGxlX2xvY2s6IGxvY2sgdG8gc3luY2hyb25pemUgdGhlIGVuYWJsZS9kaXNhYmxlCisg KiBAZGV2OiBwb2ludGVyIHRvIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEB1c2VjYXNlX25keDogY3Vy cmVudCB1c2VjYXNlIGluZGV4CisgKiBAZXZlbnRfbGlzdDogY3VycmVudCBwb3dlciBoYW5kbGUg ZXZlbnQgbGlzdAorICovCitzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSB7CisJc3RydWN0IGxpc3Rf aGVhZCBwb3dlcl9jbGllbnRfY2xpc3Q7CisJc3RydWN0IG11dGV4IHBoYW5kbGVfbG9jazsKKwlz dHJ1Y3QgZGV2aWNlICpkZXY7CisJdTMyIGN1cnJlbnRfdXNlY2FzZV9uZHg7CisJc3RydWN0IGxp c3RfaGVhZCBldmVudF9saXN0OworfTsKKworLyoqCisgKiBkcHVfcG93ZXJfcmVzb3VyY2VfaW5p dCgpIC0gaW5pdGlhbGl6ZXMgdGhlIGRwdSBwb3dlciBoYW5kbGUKKyAqIEBwZGV2OiAgIHBsYXRm b3JtIGRldmljZSB0byBzZWFyY2ggdGhlIHBvd2VyIHJlc291cmNlcworICogQHBkYXRhOiAgcG93 ZXIgaGFuZGxlIHRvIHN0b3JlIHRoZSBwb3dlciByZXNvdXJjZXMKKyAqLwordm9pZCBkcHVfcG93 ZXJfcmVzb3VyY2VfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCXN0cnVjdCBk cHVfcG93ZXJfaGFuZGxlICpwZGF0YSk7CisKKy8qKgorICogZHB1X3Bvd2VyX3Jlc291cmNlX2Rl aW5pdCgpIC0gcmVsZWFzZSB0aGUgZHB1IHBvd2VyIGhhbmRsZQorICogQHBkZXY6ICAgcGxhdGZv cm0gZGV2aWNlIGZvciBwb3dlciByZXNvdXJjZXMKKyAqIEBwZGF0YTogIHBvd2VyIGhhbmRsZSBj b250YWluaW5nIHRoZSByZXNvdXJjZXMKKyAqCisgKiBSZXR1cm46IGVycm9yIGNvZGUuCisgKi8K K3ZvaWQgZHB1X3Bvd2VyX3Jlc291cmNlX2RlaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2LAorCXN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwZGF0YSk7CisKKy8qKgorICogZHB1X3Bv d2VyX2NsaWVudF9jcmVhdGUoKSAtIGNyZWF0ZSB0aGUgY2xpZW50IG9uIHBvd2VyIGhhbmRsZQor ICogQHBkYXRhOiAgcG93ZXIgaGFuZGxlIGNvbnRhaW5pbmcgdGhlIHJlc291cmNlcworICogQGNs aWVudF9uYW1lOiBuZXcgY2xpZW50IG5hbWUgZm9yIHJlZ2lzdHJhdGlvbgorICoKKyAqIFJldHVy bjogZXJyb3IgY29kZS4KKyAqLworc3RydWN0IGRwdV9wb3dlcl9jbGllbnQgKmRwdV9wb3dlcl9j bGllbnRfY3JlYXRlKHN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwZGF0YSwKKwljaGFyICpjbGll bnRfbmFtZSk7CisKKy8qKgorICogZHB1X3Bvd2VyX2NsaWVudF9kZXN0cm95KCkgLSBkZXN0cm95 IHRoZSBjbGllbnQgb24gcG93ZXIgaGFuZGxlCisgKiBAcGRhdGE6ICBwb3dlciBoYW5kbGUgY29u dGFpbmluZyB0aGUgcmVzb3VyY2VzCisgKiBAY2xpZW50X25hbWU6IG5ldyBjbGllbnQgbmFtZSBm b3IgcmVnaXN0cmF0aW9uCisgKgorICogUmV0dXJuOiBub25lCisgKi8KK3ZvaWQgZHB1X3Bvd2Vy X2NsaWVudF9kZXN0cm95KHN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwaGFuZGxlLAorCXN0cnVj dCBkcHVfcG93ZXJfY2xpZW50ICpjbGllbnQpOworCisvKioKKyAqIGRwdV9wb3dlcl9yZXNvdXJj ZV9lbmFibGUoKSAtIGVuYWJsZS9kaXNhYmxlIHRoZSBwb3dlciByZXNvdXJjZXMKKyAqIEBwZGF0 YTogIHBvd2VyIGhhbmRsZSBjb250YWluaW5nIHRoZSByZXNvdXJjZXMKKyAqIEBjbGllbnQ6IGNs aWVudCBpbmZvcm1hdGlvbiB0byBlbmFibGUvZGlzYWJsZSBpdHMgdm90ZQorICogQGVuYWJsZTog Ym9vbGVhbiByZXF1ZXN0IGZvciBlbmFibGUvZGlzYWJsZQorICoKKyAqIFJldHVybjogZXJyb3Ig Y29kZS4KKyAqLworaW50IGRwdV9wb3dlcl9yZXNvdXJjZV9lbmFibGUoc3RydWN0IGRwdV9wb3dl cl9oYW5kbGUgKnBkYXRhLAorCXN0cnVjdCBkcHVfcG93ZXJfY2xpZW50ICpwY2xpZW50LCBib29s IGVuYWJsZSk7CisKKy8qKgorICogZHB1X3Bvd2VyX2RhdGFfYnVzX2JhbmR3aWR0aF9jdHJsKCkg LSBjb250cm9sIGRhdGEgYnVzIGJhbmR3aWR0aCBlbmFibGUKKyAqIEBwaGFuZGxlOiAgcG93ZXIg aGFuZGxlIGNvbnRhaW5pbmcgdGhlIHJlc291cmNlcworICogQGNsaWVudDogY2xpZW50IGluZm9y bWF0aW9uIHRvIGJhbmR3aWR0aCBjb250cm9sCisgKiBAZW5hYmxlOiB0cnVlIHRvIGVuYWJsZSBi YW5kd2lkdGggZm9yIGRhdGEgYmFzZQorICoKKyAqIFJldHVybjogbm9uZQorICovCit2b2lkIGRw dV9wb3dlcl9kYXRhX2J1c19iYW5kd2lkdGhfY3RybChzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAq cGhhbmRsZSwKKwkJc3RydWN0IGRwdV9wb3dlcl9jbGllbnQgKnBjbGllbnQsIGludCBlbmFibGUp OworCisvKioKKyAqIGRwdV9wb3dlcl9oYW5kbGVfcmVnaXN0ZXJfZXZlbnQgLSByZWdpc3RlciBh IGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBhbiBldmVudC4KKyAqCUNsaWVudHMgY2FuIHJlZ2lzdGVy IGZvciBtdWx0aXBsZSBldmVudHMgd2l0aCBhIHNpbmdsZSByZWdpc3Rlci4KKyAqCUFueSBibG9j ayB3aXRoIGFjY2VzcyB0byBwaGFuZGxlIGNhbiByZWdpc3RlciBmb3IgdGhlIGV2ZW50CisgKglu b3RpZmljYXRpb24uCisgKiBAcGhhbmRsZToJcG93ZXIgaGFuZGxlIGNvbnRhaW5pbmcgdGhlIHJl c291cmNlcworICogQGV2ZW50X3R5cGU6CWV2ZW50IHR5cGUgdG8gcmVnaXN0ZXI7IHJlZmVyIERQ VV9QT1dFUl9IQU5ETEVfRVZFTlRfKgorICogQGNiX2ZuYzoJcG9pbnRlciB0byBkZXNpcmVkIGNh bGxiYWNrIGZ1bmN0aW9uCisgKiBAdXNyOgl1c2VyIHBvaW50ZXIgdG8gcGFzcyB0byBjYWxsYmFj ayBvbiBldmVudCB0cmlnZ2VyCisgKgorICogUmV0dXJuOglldmVudCBwb2ludGVyIGlmIHN1Y2Nl c3MsIG9yIGVycm9yIGNvZGUgb3RoZXJ3aXNlCisgKi8KK3N0cnVjdCBkcHVfcG93ZXJfZXZlbnQg KmRwdV9wb3dlcl9oYW5kbGVfcmVnaXN0ZXJfZXZlbnQoCisJCXN0cnVjdCBkcHVfcG93ZXJfaGFu ZGxlICpwaGFuZGxlLAorCQl1MzIgZXZlbnRfdHlwZSwgdm9pZCAoKmNiX2ZuYykodTMyIGV2ZW50 X3R5cGUsIHZvaWQgKnVzciksCisJCXZvaWQgKnVzciwgY2hhciAqY2xpZW50X25hbWUpOworLyoq CisgKiBkcHVfcG93ZXJfaGFuZGxlX3VucmVnaXN0ZXJfZXZlbnQgLSB1bnJlZ2lzdGVyIGNhbGxi YWNrIGZvciBldmVudChzKQorICogQHBoYW5kbGU6CXBvd2VyIGhhbmRsZSBjb250YWluaW5nIHRo ZSByZXNvdXJjZXMKKyAqIEBldmVudDoJZXZlbnQgcG9pbnRlciByZXR1cm5lZCBhZnRlciBwb3dl ciBoYW5kbGUgcmVnaXN0ZXIKKyAqLwordm9pZCBkcHVfcG93ZXJfaGFuZGxlX3VucmVnaXN0ZXJf ZXZlbnQoc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUgKnBoYW5kbGUsCisJCXN0cnVjdCBkcHVfcG93 ZXJfZXZlbnQgKmV2ZW50KTsKKworLyoqCisgKiBkcHVfcG93ZXJfaGFuZGxlX2dldF9kYnVzX25h bWUgLSBnZXQgbmFtZSBvZiBnaXZlbiBkYXRhIGJ1cyBpZGVudGlmaWVyCisgKiBAYnVzX2lkOglk YXRhIGJ1cyBpZGVudGlmaWVyCisgKiBSZXR1cm46CVBvaW50ZXIgdG8gbmFtZSBzdHJpbmcgaWYg c3VjY2VzczsgTlVMTCBvdGhlcndpc2UKKyAqLworY29uc3QgY2hhciAqZHB1X3Bvd2VyX2hhbmRs ZV9nZXRfZGJ1c19uYW1lKHUzMiBidXNfaWQpOworCisjZW5kaWYgLyogX0RQVV9QT1dFUl9IQU5E TEVfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9y bS5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3JtLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4xM2MwYTM2ZDRlZjkKLS0tIC9kZXYvbnVsbAor KysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcm0uYwpAQCAtMCwwICsxLDEw NzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRp b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFu ZAorICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2RlZmluZSBw cl9mbXQoZm10KQkiW2RybTolc10gIiBmbXQsIF9fZnVuY19fCisjaW5jbHVkZSAiZHB1X2ttcy5o IgorI2luY2x1ZGUgImRwdV9od19sbS5oIgorI2luY2x1ZGUgImRwdV9od19jdGwuaCIKKyNpbmNs dWRlICJkcHVfaHdfY2RtLmgiCisjaW5jbHVkZSAiZHB1X2h3X3Bpbmdwb25nLmgiCisjaW5jbHVk ZSAiZHB1X2h3X2ludGYuaCIKKyNpbmNsdWRlICJkcHVfZW5jb2Rlci5oIgorI2luY2x1ZGUgImRw dV90cmFjZS5oIgorCisjZGVmaW5lIFJFU0VSVkVEX0JZX09USEVSKGgsIHIpIFwKKwkoKGgpLT5y c3ZwICYmICgoaCktPnJzdnAtPmVuY19pZCAhPSAociktPmVuY19pZCkpCisKKyNkZWZpbmUgUk1f UlFfTE9DSyhyKSAoKHIpLT50b3BfY3RybCAmIEJJVChEUFVfUk1fVE9QQ1RMX1JFU0VSVkVfTE9D SykpCisjZGVmaW5lIFJNX1JRX0NMRUFSKHIpICgociktPnRvcF9jdHJsICYgQklUKERQVV9STV9U T1BDVExfUkVTRVJWRV9DTEVBUikpCisjZGVmaW5lIFJNX1JRX0RTKHIpICgociktPnRvcF9jdHJs ICYgQklUKERQVV9STV9UT1BDVExfRFMpKQorI2RlZmluZSBSTV9JU19UT1BPTE9HWV9NQVRDSCh0 LCByKSAoKHQpLm51bV9sbSA9PSAocikubnVtX2xtICYmIFwKKwkJCQkodCkubnVtX2NvbXBfZW5j ID09IChyKS5udW1fZW5jICYmIFwKKwkJCQkodCkubnVtX2ludGYgPT0gKHIpLm51bV9pbnRmKQor CitzdHJ1Y3QgZHB1X3JtX3RvcG9sb2d5X2RlZiB7CisJZW51bSBkcHVfcm1fdG9wb2xvZ3lfbmFt ZSB0b3BfbmFtZTsKKwlpbnQgbnVtX2xtOworCWludCBudW1fY29tcF9lbmM7CisJaW50IG51bV9p bnRmOworCWludCBudW1fY3RsOworCWludCBuZWVkc19zcGxpdF9kaXNwbGF5OworfTsKKworc3Rh dGljIGNvbnN0IHN0cnVjdCBkcHVfcm1fdG9wb2xvZ3lfZGVmIGdfdG9wX3RhYmxlW10gPSB7CisJ eyAgIERQVV9STV9UT1BPTE9HWV9OT05FLCAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgZmFs c2UgfSwKKwl7ICAgRFBVX1JNX1RPUE9MT0dZX1NJTkdMRVBJUEUsICAgICAgICAgICAxLCAwLCAx LCAxLCBmYWxzZSB9LAorCXsgICBEUFVfUk1fVE9QT0xPR1lfRFVBTFBJUEUsICAgICAgICAgICAg IDIsIDAsIDIsIDIsIHRydWUgIH0sCisJeyAgIERQVV9STV9UT1BPTE9HWV9EVUFMUElQRV8zRE1F UkdFLCAgICAgMiwgMCwgMSwgMSwgZmFsc2UgfSwKK307CisKKy8qKgorICogc3RydWN0IGRwdV9y bV9yZXF1aXJlbWVudHMgLSBSZXNlcnZhdGlvbiByZXF1aXJlbWVudHMgcGFyYW1ldGVyIGJ1bmRs ZQorICogQHRvcF9jdHJsOiAgdG9wb2xvZ3kgY29udHJvbCBwcmVmZXJlbmNlIGZyb20ga2VybmVs IGNsaWVudAorICogQHRvcDogICAgICAgc2VsZWN0ZWQgdG9wb2xvZ3kgZm9yIHRoZSBkaXNwbGF5 CisgKiBAaHdfcmVzOgkgICBIYXJkd2FyZSByZXNvdXJjZXMgcmVxdWlyZWQgYXMgcmVwb3J0ZWQg YnkgdGhlIGVuY29kZXJzCisgKi8KK3N0cnVjdCBkcHVfcm1fcmVxdWlyZW1lbnRzIHsKKwl1aW50 NjRfdCB0b3BfY3RybDsKKwljb25zdCBzdHJ1Y3QgZHB1X3JtX3RvcG9sb2d5X2RlZiAqdG9wb2xv Z3k7CisJc3RydWN0IGRwdV9lbmNvZGVyX2h3X3Jlc291cmNlcyBod19yZXM7Cit9OworCisvKioK KyAqIHN0cnVjdCBkcHVfcm1fcnN2cCAtIFVzZSBDYXNlIFJlc2VydmF0aW9uIHRhZ2dpbmcgc3Ry dWN0dXJlCisgKglVc2VkIHRvIHRhZyBIVyBibG9ja3MgYXMgcmVzZXJ2ZWQgYnkgYSBDUlRDLT5F bmNvZGVyLT5Db25uZWN0b3IgY2hhaW4KKyAqCUJ5IHVzaW5nIGFzIGEgdGFnLCByYXRoZXIgdGhh biBsaXN0cyBvZiBwb2ludGVycyB0byBIVyBibG9ja3MgdXNlZAorICoJd2UgY2FuIGF2b2lkIHNv bWUgbGlzdCBtYW5hZ2VtZW50IHNpbmNlIHdlIGRvbid0IGtub3cgaG93IG1hbnkgYmxvY2tzCisg KglvZiBlYWNoIHR5cGUgYSBnaXZlbiB1c2UgY2FzZSBtYXkgcmVxdWlyZS4KKyAqIEBsaXN0OglM aXN0IGhlYWQgZm9yIGxpc3Qgb2YgYWxsIHJlc2VydmF0aW9ucworICogQHNlcToJR2xvYmFsIFJT VlAgc2VxdWVuY2UgbnVtYmVyIGZvciBkZWJ1Z2dpbmcsIGVzcGVjaWFsbHkgZm9yCisgKgkJZGlm ZmVyZW50aWF0aW5nIGRpZmZlcmVuY3QgYWxsb2NhdGlvbnMgZm9yIHNhbWUgZW5jb2Rlci4KKyAq IEBlbmNfaWQ6CVJlc2VydmF0aW9ucyBhcmUgdHJhY2tlZCBieSBFbmNvZGVyIERSTSBvYmplY3Qg SUQuCisgKgkJQ1JUQ3MgbWF5IGJlIGNvbm5lY3RlZCB0byBtdWx0aXBsZSBFbmNvZGVycy4KKyAq CQlBbiBlbmNvZGVyIG9yIGNvbm5lY3RvciBpZCBpZGVudGlmaWVzIHRoZSBkaXNwbGF5IHBhdGgu CisgKiBAdG9wb2xvZ3kJRFJNPC0+SFcgdG9wb2xvZ3kgdXNlIGNhc2UKKyAqLworc3RydWN0IGRw dV9ybV9yc3ZwIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJdWludDMyX3Qgc2VxOworCXVp bnQzMl90IGVuY19pZDsKKwllbnVtIGRwdV9ybV90b3BvbG9neV9uYW1lIHRvcG9sb2d5OworfTsK KworLyoqCisgKiBzdHJ1Y3QgZHB1X3JtX2h3X2JsayAtIGhhcmR3YXJlIGJsb2NrIHRyYWNraW5n IGxpc3QgbWVtYmVyCisgKiBAbGlzdDoJTGlzdCBoZWFkIGZvciBsaXN0IG9mIGFsbCBoYXJkd2Fy ZSBibG9ja3MgdHJhY2tpbmcgaXRlbXMKKyAqIEByc3ZwOglQb2ludGVyIHRvIHVzZSBjYXNlIHJl c2VydmF0aW9uIGlmIHJlc2VydmVkIGJ5IGEgY2xpZW50CisgKiBAcnN2cF9ueHQ6CVRlbXBvcmFy eSBwb2ludGVyIHVzZWQgZHVyaW5nIHJlc2VydmF0aW9uIHRvIHRoZSBpbmNvbWluZworICoJCXJl cXVlc3QuIFdpbGwgYmUgc3dhcHBlZCBpbnRvIHJzdnAgaWYgcHJvcG9zYWwgaXMgYWNjZXB0ZWQK KyAqIEB0eXBlOglUeXBlIG9mIGhhcmR3YXJlIGJsb2NrIHRoaXMgc3RydWN0dXJlIHRyYWNrcwor ICogQGlkOgkJSGFyZHdhcmUgSUQgbnVtYmVyLCB3aXRoaW4gaXQncyBvd24gc3BhY2UsIGllLiBM TV9YCisgKiBAY2F0YWxvZzoJUG9pbnRlciB0byB0aGUgaGFyZHdhcmUgY2F0YWxvZyBlbnRyeSBm b3IgdGhpcyBibG9jaworICogQGh3OgkJUG9pbnRlciB0byB0aGUgaGFyZHdhcmUgcmVnaXN0ZXIg YWNjZXNzIG9iamVjdCBmb3IgdGhpcyBibG9jaworICovCitzdHJ1Y3QgZHB1X3JtX2h3X2JsayB7 CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBkcHVfcm1fcnN2cCAqcnN2cDsKKwlz dHJ1Y3QgZHB1X3JtX3JzdnAgKnJzdnBfbnh0OworCWVudW0gZHB1X2h3X2Jsa190eXBlIHR5cGU7 CisJdWludDMyX3QgaWQ7CisJc3RydWN0IGRwdV9od19ibGsgKmh3OworfTsKKworLyoqCisgKiBk cHVfcm1fZGJnX3JzdnBfc3RhZ2UgLSBlbnVtIG9mIHN0ZXBzIGluIG1ha2luZyByZXNlcnZhdGlv biBmb3IgZXZlbnQgbG9nZ2luZworICovCitlbnVtIGRwdV9ybV9kYmdfcnN2cF9zdGFnZSB7CisJ RFBVX1JNX1NUQUdFX0JFR0lOLAorCURQVV9STV9TVEFHRV9BRlRFUl9DTEVBUiwKKwlEUFVfUk1f U1RBR0VfQUZURVJfUlNWUE5FWFQsCisJRFBVX1JNX1NUQUdFX0ZJTkFMCit9OworCitzdGF0aWMg dm9pZCBfZHB1X3JtX3ByaW50X3JzdnBzKAorCQlzdHJ1Y3QgZHB1X3JtICpybSwKKwkJZW51bSBk cHVfcm1fZGJnX3JzdnBfc3RhZ2Ugc3RhZ2UpCit7CisJc3RydWN0IGRwdV9ybV9yc3ZwICpyc3Zw OworCXN0cnVjdCBkcHVfcm1faHdfYmxrICpibGs7CisJZW51bSBkcHVfaHdfYmxrX3R5cGUgdHlw ZTsKKworCURQVV9ERUJVRygiJWRcbiIsIHN0YWdlKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnko cnN2cCwgJnJtLT5yc3ZwcywgbGlzdCkgeworCQlEUk1fREVCVUdfS01TKCIlZCByc3ZwW3MldWUl dV0gdG9wb2xvZ3kgJWRcbiIsIHN0YWdlLCByc3ZwLT5zZXEsCisJCQkgICAgICByc3ZwLT5lbmNf aWQsIHJzdnAtPnRvcG9sb2d5KTsKKwl9CisKKwlmb3IgKHR5cGUgPSAwOyB0eXBlIDwgRFBVX0hX X0JMS19NQVg7IHR5cGUrKykgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJsaywgJnJtLT5od19i bGtzW3R5cGVdLCBsaXN0KSB7CisJCQlpZiAoIWJsay0+cnN2cCAmJiAhYmxrLT5yc3ZwX254dCkK KwkJCQljb250aW51ZTsKKworCQkJRFJNX0RFQlVHX0tNUygiJWQgcnN2cFtzJXVlJXUtPnMldWUl dV0gJWQgJWRcbiIsIHN0YWdlLAorCQkJCShibGstPnJzdnApID8gYmxrLT5yc3ZwLT5zZXEgOiAw LAorCQkJCShibGstPnJzdnApID8gYmxrLT5yc3ZwLT5lbmNfaWQgOiAwLAorCQkJCShibGstPnJz dnBfbnh0KSA/IGJsay0+cnN2cF9ueHQtPnNlcSA6IDAsCisJCQkJKGJsay0+cnN2cF9ueHQpID8g YmxrLT5yc3ZwX254dC0+ZW5jX2lkIDogMCwKKwkJCQlibGstPnR5cGUsIGJsay0+aWQpOworCQl9 CisJfQorfQorCitzdHJ1Y3QgZHB1X2h3X21kcCAqZHB1X3JtX2dldF9tZHAoc3RydWN0IGRwdV9y bSAqcm0pCit7CisJcmV0dXJuIHJtLT5od19tZHA7Cit9CisKK2VudW0gZHB1X3JtX3RvcG9sb2d5 X25hbWUKK2RwdV9ybV9nZXRfdG9wb2xvZ3lfbmFtZShzdHJ1Y3QgbXNtX2Rpc3BsYXlfdG9wb2xv Z3kgdG9wb2xvZ3kpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgRFBVX1JNX1RPUE9M T0dZX01BWDsgaSsrKQorCQlpZiAoUk1fSVNfVE9QT0xPR1lfTUFUQ0goZ190b3BfdGFibGVbaV0s IHRvcG9sb2d5KSkKKwkJCXJldHVybiBnX3RvcF90YWJsZVtpXS50b3BfbmFtZTsKKworCXJldHVy biBEUFVfUk1fVE9QT0xPR1lfTk9ORTsKK30KKwordm9pZCBkcHVfcm1faW5pdF9od19pdGVyKAor CQlzdHJ1Y3QgZHB1X3JtX2h3X2l0ZXIgKml0ZXIsCisJCXVpbnQzMl90IGVuY19pZCwKKwkJZW51 bSBkcHVfaHdfYmxrX3R5cGUgdHlwZSkKK3sKKwltZW1zZXQoaXRlciwgMCwgc2l6ZW9mKCppdGVy KSk7CisJaXRlci0+ZW5jX2lkID0gZW5jX2lkOworCWl0ZXItPnR5cGUgPSB0eXBlOworfQorCitz dGF0aWMgYm9vbCBfZHB1X3JtX2dldF9od19sb2NrZWQoc3RydWN0IGRwdV9ybSAqcm0sIHN0cnVj dCBkcHVfcm1faHdfaXRlciAqaSkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpibGtfbGlzdDsKKwor CWlmICghcm0gfHwgIWkgfHwgaS0+dHlwZSA+PSBEUFVfSFdfQkxLX01BWCkgeworCQlEUFVfRVJS T1IoImludmFsaWQgcm1cbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJaS0+aHcgPSBOVUxM OworCWJsa19saXN0ID0gJnJtLT5od19ibGtzW2ktPnR5cGVdOworCisJaWYgKGktPmJsayAmJiAo JmktPmJsay0+bGlzdCA9PSBibGtfbGlzdCkpIHsKKwkJRFBVX0RFQlVHKCJhdHRlbXB0IHJlc3Vt ZSBpdGVyYXRpb24gcGFzdCBsYXN0XG4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWktPmJs ayA9IGxpc3RfcHJlcGFyZV9lbnRyeShpLT5ibGssIGJsa19saXN0LCBsaXN0KTsKKworCWxpc3Rf Zm9yX2VhY2hfZW50cnlfY29udGludWUoaS0+YmxrLCBibGtfbGlzdCwgbGlzdCkgeworCQlzdHJ1 Y3QgZHB1X3JtX3JzdnAgKnJzdnAgPSBpLT5ibGstPnJzdnA7CisKKwkJaWYgKGktPmJsay0+dHlw ZSAhPSBpLT50eXBlKSB7CisJCQlEUFVfRVJST1IoImZvdW5kIGluY29ycmVjdCBibG9jayB0eXBl ICVkIG9uICVkIGxpc3RcbiIsCisJCQkJCWktPmJsay0+dHlwZSwgaS0+dHlwZSk7CisJCQlyZXR1 cm4gZmFsc2U7CisJCX0KKworCQlpZiAoKGktPmVuY19pZCA9PSAwKSB8fCAocnN2cCAmJiByc3Zw LT5lbmNfaWQgPT0gaS0+ZW5jX2lkKSkgeworCQkJaS0+aHcgPSBpLT5ibGstPmh3OworCQkJRFBV X0RFQlVHKCJmb3VuZCB0eXBlICVkIGlkICVkIGZvciBlbmMgJWRcbiIsCisJCQkJCWktPnR5cGUs IGktPmJsay0+aWQsIGktPmVuY19pZCk7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCX0KKworCURQ VV9ERUJVRygibm8gbWF0Y2gsIHR5cGUgJWQgZm9yIGVuYyAlZFxuIiwgaS0+dHlwZSwgaS0+ZW5j X2lkKTsKKworCXJldHVybiBmYWxzZTsKK30KKworYm9vbCBkcHVfcm1fZ2V0X2h3KHN0cnVjdCBk cHVfcm0gKnJtLCBzdHJ1Y3QgZHB1X3JtX2h3X2l0ZXIgKmkpCit7CisJYm9vbCByZXQ7CisKKwlt dXRleF9sb2NrKCZybS0+cm1fbG9jayk7CisJcmV0ID0gX2RwdV9ybV9nZXRfaHdfbG9ja2VkKHJt LCBpKTsKKwltdXRleF91bmxvY2soJnJtLT5ybV9sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisK K3N0YXRpYyB2b2lkIF9kcHVfcm1faHdfZGVzdHJveShlbnVtIGRwdV9od19ibGtfdHlwZSB0eXBl LCB2b2lkICpodykKK3sKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIERQVV9IV19CTEtfTE06CisJ CWRwdV9od19sbV9kZXN0cm95KGh3KTsKKwkJYnJlYWs7CisJY2FzZSBEUFVfSFdfQkxLX0NUTDoK KwkJZHB1X2h3X2N0bF9kZXN0cm95KGh3KTsKKwkJYnJlYWs7CisJY2FzZSBEUFVfSFdfQkxLX0NE TToKKwkJZHB1X2h3X2NkbV9kZXN0cm95KGh3KTsKKwkJYnJlYWs7CisJY2FzZSBEUFVfSFdfQkxL X1BJTkdQT05HOgorCQlkcHVfaHdfcGluZ3BvbmdfZGVzdHJveShodyk7CisJCWJyZWFrOworCWNh c2UgRFBVX0hXX0JMS19JTlRGOgorCQlkcHVfaHdfaW50Zl9kZXN0cm95KGh3KTsKKwkJYnJlYWs7 CisJY2FzZSBEUFVfSFdfQkxLX1NTUFA6CisJCS8qIFNTUFBzIGFyZSBub3QgbWFuYWdlZCBieSB0 aGUgcmVzb3VyY2UgbWFuYWdlciAqLworCWNhc2UgRFBVX0hXX0JMS19UT1A6CisJCS8qIFRvcCBp cyBhIHNpbmdsZXRvbiwgbm90IG1hbmFnZWQgaW4gaHdfYmxrcyBsaXN0ICovCisJY2FzZSBEUFVf SFdfQkxLX01BWDoKKwlkZWZhdWx0OgorCQlEUFVfRVJST1IoInVuc3VwcG9ydGVkIGJsb2NrIHR5 cGUgJWRcbiIsIHR5cGUpOworCQlicmVhazsKKwl9Cit9CisKK2ludCBkcHVfcm1fZGVzdHJveShz dHJ1Y3QgZHB1X3JtICpybSkKK3sKKworCXN0cnVjdCBkcHVfcm1fcnN2cCAqcnN2cF9jdXIsICpy c3ZwX254dDsKKwlzdHJ1Y3QgZHB1X3JtX2h3X2JsayAqaHdfY3VyLCAqaHdfbnh0OworCWVudW0g ZHB1X2h3X2Jsa190eXBlIHR5cGU7CisKKwlpZiAoIXJtKSB7CisJCURQVV9FUlJPUigiaW52YWxp ZCBybVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnlf c2FmZShyc3ZwX2N1ciwgcnN2cF9ueHQsICZybS0+cnN2cHMsIGxpc3QpIHsKKwkJbGlzdF9kZWwo JnJzdnBfY3VyLT5saXN0KTsKKwkJa2ZyZWUocnN2cF9jdXIpOworCX0KKworCisJZm9yICh0eXBl ID0gMDsgdHlwZSA8IERQVV9IV19CTEtfTUFYOyB0eXBlKyspIHsKKwkJbGlzdF9mb3JfZWFjaF9l bnRyeV9zYWZlKGh3X2N1ciwgaHdfbnh0LCAmcm0tPmh3X2Jsa3NbdHlwZV0sCisJCQkJbGlzdCkg eworCQkJbGlzdF9kZWwoJmh3X2N1ci0+bGlzdCk7CisJCQlfZHB1X3JtX2h3X2Rlc3Ryb3koaHdf Y3VyLT50eXBlLCBod19jdXItPmh3KTsKKwkJCWtmcmVlKGh3X2N1cik7CisJCX0KKwl9CisKKwlk cHVfaHdfbWRwX2Rlc3Ryb3kocm0tPmh3X21kcCk7CisJcm0tPmh3X21kcCA9IE5VTEw7CisKKwlt dXRleF9kZXN0cm95KCZybS0+cm1fbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu dCBfZHB1X3JtX2h3X2Jsa19jcmVhdGUoCisJCXN0cnVjdCBkcHVfcm0gKnJtLAorCQlzdHJ1Y3Qg ZHB1X21kc3NfY2ZnICpjYXQsCisJCXZvaWQgX19pb21lbSAqbW1pbywKKwkJZW51bSBkcHVfaHdf YmxrX3R5cGUgdHlwZSwKKwkJdWludDMyX3QgaWQsCisJCXZvaWQgKmh3X2NhdGFsb2dfaW5mbykK K3sKKwlzdHJ1Y3QgZHB1X3JtX2h3X2JsayAqYmxrOworCXN0cnVjdCBkcHVfaHdfbWRwICpod19t ZHA7CisJdm9pZCAqaHc7CisKKwlod19tZHAgPSBybS0+aHdfbWRwOworCisJc3dpdGNoICh0eXBl KSB7CisJY2FzZSBEUFVfSFdfQkxLX0xNOgorCQlodyA9IGRwdV9od19sbV9pbml0KGlkLCBtbWlv LCBjYXQpOworCQlicmVhazsKKwljYXNlIERQVV9IV19CTEtfQ1RMOgorCQlodyA9IGRwdV9od19j dGxfaW5pdChpZCwgbW1pbywgY2F0KTsKKwkJYnJlYWs7CisJY2FzZSBEUFVfSFdfQkxLX0NETToK KwkJaHcgPSBkcHVfaHdfY2RtX2luaXQoaWQsIG1taW8sIGNhdCwgaHdfbWRwKTsKKwkJYnJlYWs7 CisJY2FzZSBEUFVfSFdfQkxLX1BJTkdQT05HOgorCQlodyA9IGRwdV9od19waW5ncG9uZ19pbml0 KGlkLCBtbWlvLCBjYXQpOworCQlicmVhazsKKwljYXNlIERQVV9IV19CTEtfSU5URjoKKwkJaHcg PSBkcHVfaHdfaW50Zl9pbml0KGlkLCBtbWlvLCBjYXQpOworCQlicmVhazsKKwljYXNlIERQVV9I V19CTEtfU1NQUDoKKwkJLyogU1NQUHMgYXJlIG5vdCBtYW5hZ2VkIGJ5IHRoZSByZXNvdXJjZSBt YW5hZ2VyICovCisJY2FzZSBEUFVfSFdfQkxLX1RPUDoKKwkJLyogVG9wIGlzIGEgc2luZ2xldG9u LCBub3QgbWFuYWdlZCBpbiBod19ibGtzIGxpc3QgKi8KKwljYXNlIERQVV9IV19CTEtfTUFYOgor CWRlZmF1bHQ6CisJCURQVV9FUlJPUigidW5zdXBwb3J0ZWQgYmxvY2sgdHlwZSAlZFxuIiwgdHlw ZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChJU19FUlJfT1JfTlVMTChodykpIHsK KwkJRFBVX0VSUk9SKCJmYWlsZWQgaHcgb2JqZWN0IGNyZWF0aW9uOiB0eXBlICVkLCBlcnIgJWxk XG4iLAorCQkJCXR5cGUsIFBUUl9FUlIoaHcpKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJ YmxrID0ga3phbGxvYyhzaXplb2YoKmJsayksIEdGUF9LRVJORUwpOworCWlmICghYmxrKSB7CisJ CV9kcHVfcm1faHdfZGVzdHJveSh0eXBlLCBodyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwor CWJsay0+dHlwZSA9IHR5cGU7CisJYmxrLT5pZCA9IGlkOworCWJsay0+aHcgPSBodzsKKwlsaXN0 X2FkZF90YWlsKCZibGstPmxpc3QsICZybS0+aHdfYmxrc1t0eXBlXSk7CisKKwlyZXR1cm4gMDsK K30KKworaW50IGRwdV9ybV9pbml0KHN0cnVjdCBkcHVfcm0gKnJtLAorCQlzdHJ1Y3QgZHB1X21k c3NfY2ZnICpjYXQsCisJCXZvaWQgX19pb21lbSAqbW1pbywKKwkJc3RydWN0IGRybV9kZXZpY2Ug KmRldikKK3sKKwlpbnQgcmMsIGk7CisJZW51bSBkcHVfaHdfYmxrX3R5cGUgdHlwZTsKKworCWlm ICghcm0gfHwgIWNhdCB8fCAhbW1pbyB8fCAhZGV2KSB7CisJCURQVV9FUlJPUigiaW52YWxpZCBr bXNcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBDbGVhciwgc2V0dXAgbGlzdHMg Ki8KKwltZW1zZXQocm0sIDAsIHNpemVvZigqcm0pKTsKKworCW11dGV4X2luaXQoJnJtLT5ybV9s b2NrKTsKKworCUlOSVRfTElTVF9IRUFEKCZybS0+cnN2cHMpOworCWZvciAodHlwZSA9IDA7IHR5 cGUgPCBEUFVfSFdfQkxLX01BWDsgdHlwZSsrKQorCQlJTklUX0xJU1RfSEVBRCgmcm0tPmh3X2Js a3NbdHlwZV0pOworCisJcm0tPmRldiA9IGRldjsKKworCS8qIFNvbWUgb2YgdGhlIHN1Yi1ibG9j a3MgcmVxdWlyZSBhbiBtZHB0b3AgdG8gYmUgY3JlYXRlZCAqLworCXJtLT5od19tZHAgPSBkcHVf aHdfbWRwdG9wX2luaXQoTURQX1RPUCwgbW1pbywgY2F0KTsKKwlpZiAoSVNfRVJSX09SX05VTEwo cm0tPmh3X21kcCkpIHsKKwkJcmMgPSBQVFJfRVJSKHJtLT5od19tZHApOworCQlybS0+aHdfbWRw ID0gTlVMTDsKKwkJRFBVX0VSUk9SKCJmYWlsZWQ6IG1kcCBodyBub3QgYXZhaWxhYmxlXG4iKTsK KwkJZ290byBmYWlsOworCX0KKworCS8qIEludGVycm9nYXRlIEhXIGNhdGFsb2cgYW5kIGNyZWF0 ZSB0cmFja2luZyBpdGVtcyBmb3IgaHcgYmxvY2tzICovCisJZm9yIChpID0gMDsgaSA8IGNhdC0+ bWl4ZXJfY291bnQ7IGkrKykgeworCQlzdHJ1Y3QgZHB1X2xtX2NmZyAqbG0gPSAmY2F0LT5taXhl cltpXTsKKworCQlpZiAobG0tPnBpbmdwb25nID09IFBJTkdQT05HX01BWCkgeworCQkJRFBVX0RF QlVHKCJza2lwIG1peGVyICVkIHdpdGhvdXQgcGluZ3BvbmdcbiIsIGxtLT5pZCk7CisJCQljb250 aW51ZTsKKwkJfQorCisJCXJjID0gX2RwdV9ybV9od19ibGtfY3JlYXRlKHJtLCBjYXQsIG1taW8s IERQVV9IV19CTEtfTE0sCisJCQkJY2F0LT5taXhlcltpXS5pZCwgJmNhdC0+bWl4ZXJbaV0pOwor CQlpZiAocmMpIHsKKwkJCURQVV9FUlJPUigiZmFpbGVkOiBsbSBodyBub3QgYXZhaWxhYmxlXG4i KTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCisJCWlmICghcm0tPmxtX21heF93aWR0aCkgeworCQkJ cm0tPmxtX21heF93aWR0aCA9IGxtLT5zYmxrLT5tYXh3aWR0aDsKKwkJfSBlbHNlIGlmIChybS0+ bG1fbWF4X3dpZHRoICE9IGxtLT5zYmxrLT5tYXh3aWR0aCkgeworCQkJLyoKKwkJCSAqIERvbid0 IGV4cGVjdCB0byBoYXZlIGh3IHdoZXJlIGxtIG1heCB3aWR0aHMgZGlmZmVyLgorCQkJICogSWYg Zm91bmQsIHRha2UgdGhlIG1pbi4KKwkJCSAqLworCQkJRFBVX0VSUk9SKCJ1bnN1cHBvcnRlZDog bG0gbWF4d2lkdGggZGlmZmVyc1xuIik7CisJCQlpZiAocm0tPmxtX21heF93aWR0aCA+IGxtLT5z YmxrLT5tYXh3aWR0aCkKKwkJCQlybS0+bG1fbWF4X3dpZHRoID0gbG0tPnNibGstPm1heHdpZHRo OworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IGNhdC0+cGluZ3BvbmdfY291bnQ7IGkrKykg eworCQlyYyA9IF9kcHVfcm1faHdfYmxrX2NyZWF0ZShybSwgY2F0LCBtbWlvLCBEUFVfSFdfQkxL X1BJTkdQT05HLAorCQkJCWNhdC0+cGluZ3BvbmdbaV0uaWQsICZjYXQtPnBpbmdwb25nW2ldKTsK KwkJaWYgKHJjKSB7CisJCQlEUFVfRVJST1IoImZhaWxlZDogcHAgaHcgbm90IGF2YWlsYWJsZVxu Iik7CisJCQlnb3RvIGZhaWw7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgY2F0LT5pbnRm X2NvdW50OyBpKyspIHsKKwkJaWYgKGNhdC0+aW50ZltpXS50eXBlID09IElOVEZfTk9ORSkgewor CQkJRFBVX0RFQlVHKCJza2lwIGludGYgJWQgd2l0aCB0eXBlIG5vbmVcbiIsIGkpOworCQkJY29u dGludWU7CisJCX0KKworCQlyYyA9IF9kcHVfcm1faHdfYmxrX2NyZWF0ZShybSwgY2F0LCBtbWlv LCBEUFVfSFdfQkxLX0lOVEYsCisJCQkJY2F0LT5pbnRmW2ldLmlkLCAmY2F0LT5pbnRmW2ldKTsK KwkJaWYgKHJjKSB7CisJCQlEUFVfRVJST1IoImZhaWxlZDogaW50ZiBodyBub3QgYXZhaWxhYmxl XG4iKTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCBjYXQtPmN0 bF9jb3VudDsgaSsrKSB7CisJCXJjID0gX2RwdV9ybV9od19ibGtfY3JlYXRlKHJtLCBjYXQsIG1t aW8sIERQVV9IV19CTEtfQ1RMLAorCQkJCWNhdC0+Y3RsW2ldLmlkLCAmY2F0LT5jdGxbaV0pOwor CQlpZiAocmMpIHsKKwkJCURQVV9FUlJPUigiZmFpbGVkOiBjdGwgaHcgbm90IGF2YWlsYWJsZVxu Iik7CisJCQlnb3RvIGZhaWw7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgY2F0LT5jZG1f Y291bnQ7IGkrKykgeworCQlyYyA9IF9kcHVfcm1faHdfYmxrX2NyZWF0ZShybSwgY2F0LCBtbWlv LCBEUFVfSFdfQkxLX0NETSwKKwkJCQljYXQtPmNkbVtpXS5pZCwgJmNhdC0+Y2RtW2ldKTsKKwkJ aWYgKHJjKSB7CisJCQlEUFVfRVJST1IoImZhaWxlZDogY2RtIGh3IG5vdCBhdmFpbGFibGVcbiIp OworCQkJZ290byBmYWlsOworCQl9CisJfQorCisJcmV0dXJuIDA7CisKK2ZhaWw6CisJZHB1X3Jt X2Rlc3Ryb3kocm0pOworCisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIF9kcHVfcm1fY2hlY2tf bG1fYW5kX2dldF9jb25uZWN0ZWRfYmxrcyAtIGNoZWNrIGlmIHByb3Bvc2VkIGxheWVyIG1peGVy IG1lZXRzCisgKglwcm9wb3NlZCB1c2UgY2FzZSByZXF1aXJlbWVudHMsIGluY2wuIGhhcmR3aXJl ZCBkZXBlbmRlbnQgYmxvY2tzIGxpa2UKKyAqCXBpbmdwb25nCisgKiBAcm06IGRwdSByZXNvdXJj ZSBtYW5hZ2VyIGhhbmRsZQorICogQHJzdnA6IHJlc2VydmF0aW9uIGN1cnJlbnRseSBiZWluZyBj cmVhdGVkCisgKiBAcmVxczogcHJvcG9zZWQgdXNlIGNhc2UgcmVxdWlyZW1lbnRzCisgKiBAbG06 IHByb3Bvc2VkIGxheWVyIG1peGVyLCBmdW5jdGlvbiBjaGVja3MgaWYgbG0sIGFuZCBhbGwgb3Ro ZXIgaGFyZHdpcmVkCisgKiAgICAgIGJsb2NrcyBjb25uZWN0ZWQgdG8gdGhlIGxtIChwcCkgaXMg YXZhaWxhYmxlIGFuZCBhcHByb3ByaWF0ZQorICogQHBwOiBvdXRwdXQgcGFyYW1ldGVyLCBwaW5n cG9uZyBibG9jayBhdHRhY2hlZCB0byB0aGUgbGF5ZXIgbWl4ZXIuCisgKiAgICAgIE5VTEwgaWYg cHAgd2FzIG5vdCBhdmFpbGFibGUsIG9yIG5vdCBtYXRjaGluZyByZXF1aXJlbWVudHMuCisgKiBA cHJpbWFyeV9sbTogaWYgbm9uLW51bGwsIHRoaXMgZnVuY3Rpb24gY2hlY2sgaWYgbG0gaXMgY29t cGF0aWJsZSBwcmltYXJ5X2xtCisgKiAgICAgICAgICAgICAgYXMgd2VsbCBhcyBzYXRpc2Z5aW5n IGFsbCBvdGhlciByZXF1aXJlbWVudHMKKyAqIEBSZXR1cm46IHRydWUgaWYgbG0gbWF0Y2hlcyBh bGwgcmVxdWlyZW1lbnRzLCBmYWxzZSBvdGhlcndpc2UKKyAqLworc3RhdGljIGJvb2wgX2RwdV9y bV9jaGVja19sbV9hbmRfZ2V0X2Nvbm5lY3RlZF9ibGtzKAorCQlzdHJ1Y3QgZHB1X3JtICpybSwK KwkJc3RydWN0IGRwdV9ybV9yc3ZwICpyc3ZwLAorCQlzdHJ1Y3QgZHB1X3JtX3JlcXVpcmVtZW50 cyAqcmVxcywKKwkJc3RydWN0IGRwdV9ybV9od19ibGsgKmxtLAorCQlzdHJ1Y3QgZHB1X3JtX2h3 X2JsayAqKnBwLAorCQlzdHJ1Y3QgZHB1X3JtX2h3X2JsayAqcHJpbWFyeV9sbSkKK3sKKwljb25z dCBzdHJ1Y3QgZHB1X2xtX2NmZyAqbG1fY2ZnID0gdG9fZHB1X2h3X21peGVyKGxtLT5odyktPmNh cDsKKwlzdHJ1Y3QgZHB1X3JtX2h3X2l0ZXIgaXRlcjsKKworCSpwcCA9IE5VTEw7CisKKwlEUFVf REVCVUcoImNoZWNrIGxtICVkIHBwICVkXG4iLAorCQkJICAgbG1fY2ZnLT5pZCwgbG1fY2ZnLT5w aW5ncG9uZyk7CisKKwkvKiBDaGVjayBpZiB0aGlzIGxheWVyIG1peGVyIGlzIGEgcGVlciBvZiB0 aGUgcHJvcG9zZWQgcHJpbWFyeSBMTSAqLworCWlmIChwcmltYXJ5X2xtKSB7CisJCWNvbnN0IHN0 cnVjdCBkcHVfbG1fY2ZnICpwcmltX2xtX2NmZyA9CisJCQkJdG9fZHB1X2h3X21peGVyKHByaW1h cnlfbG0tPmh3KS0+Y2FwOworCisJCWlmICghdGVzdF9iaXQobG1fY2ZnLT5pZCwgJnByaW1fbG1f Y2ZnLT5sbV9wYWlyX21hc2spKSB7CisJCQlEUFVfREVCVUcoImxtICVkIG5vdCBwZWVyIG9mIGxt ICVkXG4iLCBsbV9jZmctPmlkLAorCQkJCQlwcmltX2xtX2NmZy0+aWQpOworCQkJcmV0dXJuIGZh bHNlOworCQl9CisJfQorCisJLyogQWxyZWFkeSByZXNlcnZlZD8gKi8KKwlpZiAoUkVTRVJWRURf QllfT1RIRVIobG0sIHJzdnApKSB7CisJCURQVV9ERUJVRygibG0gJWQgYWxyZWFkeSByZXNlcnZl ZFxuIiwgbG1fY2ZnLT5pZCk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlkcHVfcm1faW5pdF9o d19pdGVyKCZpdGVyLCAwLCBEUFVfSFdfQkxLX1BJTkdQT05HKTsKKwl3aGlsZSAoX2RwdV9ybV9n ZXRfaHdfbG9ja2VkKHJtLCAmaXRlcikpIHsKKwkJaWYgKGl0ZXIuYmxrLT5pZCA9PSBsbV9jZmct PnBpbmdwb25nKSB7CisJCQkqcHAgPSBpdGVyLmJsazsKKwkJCWJyZWFrOworCQl9CisJfQorCisJ aWYgKCEqcHApIHsKKwkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gZ2V0IHBwIG9uIGxtICVkXG4iLCBs bV9jZmctPnBpbmdwb25nKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmIChSRVNFUlZFRF9C WV9PVEhFUigqcHAsIHJzdnApKSB7CisJCURQVV9ERUJVRygibG0gJWQgcHAgJWQgYWxyZWFkeSBy ZXNlcnZlZFxuIiwgbG0tPmlkLAorCQkJCSgqcHApLT5pZCk7CisJCXJldHVybiBmYWxzZTsKKwl9 CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGludCBfZHB1X3JtX3Jlc2VydmVfbG1zKAor CQlzdHJ1Y3QgZHB1X3JtICpybSwKKwkJc3RydWN0IGRwdV9ybV9yc3ZwICpyc3ZwLAorCQlzdHJ1 Y3QgZHB1X3JtX3JlcXVpcmVtZW50cyAqcmVxcykKKworeworCXN0cnVjdCBkcHVfcm1faHdfYmxr ICpsbVtNQVhfQkxPQ0tTXTsKKwlzdHJ1Y3QgZHB1X3JtX2h3X2JsayAqcHBbTUFYX0JMT0NLU107 CisJc3RydWN0IGRwdV9ybV9od19pdGVyIGl0ZXJfaSwgaXRlcl9qOworCWludCBsbV9jb3VudCA9 IDA7CisJaW50IGksIHJjID0gMDsKKworCWlmICghcmVxcy0+dG9wb2xvZ3ktPm51bV9sbSkgewor CQlEUFVfRVJST1IoImludmFsaWQgbnVtYmVyIG9mIGxtOiAlZFxuIiwgcmVxcy0+dG9wb2xvZ3kt Pm51bV9sbSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIEZpbmQgYSBwcmltYXJ5IG1p eGVyICovCisJZHB1X3JtX2luaXRfaHdfaXRlcigmaXRlcl9pLCAwLCBEUFVfSFdfQkxLX0xNKTsK Kwl3aGlsZSAobG1fY291bnQgIT0gcmVxcy0+dG9wb2xvZ3ktPm51bV9sbSAmJgorCQkJX2RwdV9y bV9nZXRfaHdfbG9ja2VkKHJtLCAmaXRlcl9pKSkgeworCQltZW1zZXQoJmxtLCAwLCBzaXplb2Yo bG0pKTsKKwkJbWVtc2V0KCZwcCwgMCwgc2l6ZW9mKHBwKSk7CisKKwkJbG1fY291bnQgPSAwOwor CQlsbVtsbV9jb3VudF0gPSBpdGVyX2kuYmxrOworCisJCWlmICghX2RwdV9ybV9jaGVja19sbV9h bmRfZ2V0X2Nvbm5lY3RlZF9ibGtzKAorCQkJCXJtLCByc3ZwLCByZXFzLCBsbVtsbV9jb3VudF0s CisJCQkJJnBwW2xtX2NvdW50XSwgTlVMTCkpCisJCQljb250aW51ZTsKKworCQkrK2xtX2NvdW50 OworCisJCS8qIFZhbGlkIHByaW1hcnkgbWl4ZXIgZm91bmQsIGZpbmQgbWF0Y2hpbmcgcGVlcnMg Ki8KKwkJZHB1X3JtX2luaXRfaHdfaXRlcigmaXRlcl9qLCAwLCBEUFVfSFdfQkxLX0xNKTsKKwor CQl3aGlsZSAobG1fY291bnQgIT0gcmVxcy0+dG9wb2xvZ3ktPm51bV9sbSAmJgorCQkJCV9kcHVf cm1fZ2V0X2h3X2xvY2tlZChybSwgJml0ZXJfaikpIHsKKwkJCWlmIChpdGVyX2kuYmxrID09IGl0 ZXJfai5ibGspCisJCQkJY29udGludWU7CisKKwkJCWlmICghX2RwdV9ybV9jaGVja19sbV9hbmRf Z2V0X2Nvbm5lY3RlZF9ibGtzKAorCQkJCQlybSwgcnN2cCwgcmVxcywgaXRlcl9qLmJsaywKKwkJ CQkJJnBwW2xtX2NvdW50XSwgaXRlcl9pLmJsaykpCisJCQkJY29udGludWU7CisKKwkJCWxtW2xt X2NvdW50XSA9IGl0ZXJfai5ibGs7CisJCQkrK2xtX2NvdW50OworCQl9CisJfQorCisJaWYgKGxt X2NvdW50ICE9IHJlcXMtPnRvcG9sb2d5LT5udW1fbG0pIHsKKwkJRFBVX0RFQlVHKCJ1bmFibGUg dG8gZmluZCBhcHByb3ByaWF0ZSBtaXhlcnNcbiIpOworCQlyZXR1cm4gLUVOQVZBSUw7CisJfQor CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobG0pOyBpKyspIHsKKwkJaWYgKCFsbVtpXSkK KwkJCWJyZWFrOworCisJCWxtW2ldLT5yc3ZwX254dCA9IHJzdnA7CisJCXBwW2ldLT5yc3ZwX254 dCA9IHJzdnA7CisKKwkJdHJhY2VfZHB1X3JtX3Jlc2VydmVfbG1zKGxtW2ldLT5pZCwgbG1baV0t PnR5cGUsIHJzdnAtPmVuY19pZCwKKwkJCQkJIHBwW2ldLT5pZCk7CisJfQorCisJcmV0dXJuIHJj OworfQorCitzdGF0aWMgaW50IF9kcHVfcm1fcmVzZXJ2ZV9jdGxzKAorCQlzdHJ1Y3QgZHB1X3Jt ICpybSwKKwkJc3RydWN0IGRwdV9ybV9yc3ZwICpyc3ZwLAorCQljb25zdCBzdHJ1Y3QgZHB1X3Jt X3RvcG9sb2d5X2RlZiAqdG9wKQoreworCXN0cnVjdCBkcHVfcm1faHdfYmxrICpjdGxzW01BWF9C TE9DS1NdOworCXN0cnVjdCBkcHVfcm1faHdfaXRlciBpdGVyOworCWludCBpID0gMDsKKworCW1l bXNldCgmY3RscywgMCwgc2l6ZW9mKGN0bHMpKTsKKworCWRwdV9ybV9pbml0X2h3X2l0ZXIoJml0 ZXIsIDAsIERQVV9IV19CTEtfQ1RMKTsKKwl3aGlsZSAoX2RwdV9ybV9nZXRfaHdfbG9ja2VkKHJt LCAmaXRlcikpIHsKKwkJY29uc3Qgc3RydWN0IGRwdV9od19jdGwgKmN0bCA9IHRvX2RwdV9od19j dGwoaXRlci5ibGstPmh3KTsKKwkJdW5zaWduZWQgbG9uZyBmZWF0dXJlcyA9IGN0bC0+Y2Fwcy0+ ZmVhdHVyZXM7CisJCWJvb2wgaGFzX3NwbGl0X2Rpc3BsYXk7CisKKwkJaWYgKFJFU0VSVkVEX0JZ X09USEVSKGl0ZXIuYmxrLCByc3ZwKSkKKwkJCWNvbnRpbnVlOworCisJCWhhc19zcGxpdF9kaXNw bGF5ID0gQklUKERQVV9DVExfU1BMSVRfRElTUExBWSkgJiBmZWF0dXJlczsKKworCQlEUFVfREVC VUcoImN0bCAlZCBjYXBzIDB4JWxYXG4iLCBpdGVyLmJsay0+aWQsIGZlYXR1cmVzKTsKKworCQlp ZiAodG9wLT5uZWVkc19zcGxpdF9kaXNwbGF5ICE9IGhhc19zcGxpdF9kaXNwbGF5KQorCQkJY29u dGludWU7CisKKwkJY3Rsc1tpXSA9IGl0ZXIuYmxrOworCQlEUFVfREVCVUcoImN0bCAlZCBtYXRj aFxuIiwgaXRlci5ibGstPmlkKTsKKworCQlpZiAoKytpID09IHRvcC0+bnVtX2N0bCkKKwkJCWJy ZWFrOworCX0KKworCWlmIChpICE9IHRvcC0+bnVtX2N0bCkKKwkJcmV0dXJuIC1FTkFWQUlMOwor CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3RscykgJiYgaSA8IHRvcC0+bnVtX2N0bDsg aSsrKSB7CisJCWN0bHNbaV0tPnJzdnBfbnh0ID0gcnN2cDsKKwkJdHJhY2VfZHB1X3JtX3Jlc2Vy dmVfY3RscyhjdGxzW2ldLT5pZCwgY3Rsc1tpXS0+dHlwZSwKKwkJCQkJICByc3ZwLT5lbmNfaWQp OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9kcHVfcm1fcmVzZXJ2ZV9jZG0o CisJCXN0cnVjdCBkcHVfcm0gKnJtLAorCQlzdHJ1Y3QgZHB1X3JtX3JzdnAgKnJzdnAsCisJCXVp bnQzMl90IGlkLAorCQllbnVtIGRwdV9od19ibGtfdHlwZSB0eXBlKQoreworCXN0cnVjdCBkcHVf cm1faHdfaXRlciBpdGVyOworCisJRFJNX0RFQlVHX0tNUygidHlwZSAlZCBpZCAlZFxuIiwgdHlw ZSwgaWQpOworCisJZHB1X3JtX2luaXRfaHdfaXRlcigmaXRlciwgMCwgRFBVX0hXX0JMS19DRE0p OworCXdoaWxlIChfZHB1X3JtX2dldF9od19sb2NrZWQocm0sICZpdGVyKSkgeworCQljb25zdCBz dHJ1Y3QgZHB1X2h3X2NkbSAqY2RtID0gdG9fZHB1X2h3X2NkbShpdGVyLmJsay0+aHcpOworCQlj b25zdCBzdHJ1Y3QgZHB1X2NkbV9jZmcgKmNhcHMgPSBjZG0tPmNhcHM7CisJCWJvb2wgbWF0Y2gg PSBmYWxzZTsKKworCQlpZiAoUkVTRVJWRURfQllfT1RIRVIoaXRlci5ibGssIHJzdnApKQorCQkJ Y29udGludWU7CisKKwkJaWYgKHR5cGUgPT0gRFBVX0hXX0JMS19JTlRGICYmIGlkICE9IElOVEZf TUFYKQorCQkJbWF0Y2ggPSB0ZXN0X2JpdChpZCwgJmNhcHMtPmludGZfY29ubmVjdCk7CisKKwkJ RFJNX0RFQlVHX0tNUygiaXRlcjogdHlwZTolZCBpZDolZCBlbmM6JWQgY2RtOiVsdSBtYXRjaDol ZFxuIiwKKwkJCSAgICAgIGl0ZXIuYmxrLT50eXBlLCBpdGVyLmJsay0+aWQsIHJzdnAtPmVuY19p ZCwKKwkJCSAgICAgIGNhcHMtPmludGZfY29ubmVjdCwgbWF0Y2gpOworCisJCWlmICghbWF0Y2gp CisJCQljb250aW51ZTsKKworCQl0cmFjZV9kcHVfcm1fcmVzZXJ2ZV9jZG0oaXRlci5ibGstPmlk LCBpdGVyLmJsay0+dHlwZSwKKwkJCQkJIHJzdnAtPmVuY19pZCk7CisJCWl0ZXIuYmxrLT5yc3Zw X254dCA9IHJzdnA7CisJCWJyZWFrOworCX0KKworCWlmICghaXRlci5odykgeworCQlEUFVfRVJS T1IoImNvdWxkbid0IHJlc2VydmUgY2RtIGZvciB0eXBlICVkIGlkICVkXG4iLCB0eXBlLCBpZCk7 CisJCXJldHVybiAtRU5BVkFJTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBf ZHB1X3JtX3Jlc2VydmVfaW50ZigKKwkJc3RydWN0IGRwdV9ybSAqcm0sCisJCXN0cnVjdCBkcHVf cm1fcnN2cCAqcnN2cCwKKwkJdWludDMyX3QgaWQsCisJCWVudW0gZHB1X2h3X2Jsa190eXBlIHR5 cGUsCisJCWJvb2wgbmVlZHNfY2RtKQoreworCXN0cnVjdCBkcHVfcm1faHdfaXRlciBpdGVyOwor CWludCByZXQgPSAwOworCisJLyogRmluZCB0aGUgYmxvY2sgZW50cnkgaW4gdGhlIHJtLCBhbmQg bm90ZSB0aGUgcmVzZXJ2YXRpb24gKi8KKwlkcHVfcm1faW5pdF9od19pdGVyKCZpdGVyLCAwLCB0 eXBlKTsKKwl3aGlsZSAoX2RwdV9ybV9nZXRfaHdfbG9ja2VkKHJtLCAmaXRlcikpIHsKKwkJaWYg KGl0ZXIuYmxrLT5pZCAhPSBpZCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChSRVNFUlZFRF9CWV9P VEhFUihpdGVyLmJsaywgcnN2cCkpIHsKKwkJCURQVV9FUlJPUigidHlwZSAlZCBpZCAlZCBhbHJl YWR5IHJlc2VydmVkXG4iLCB0eXBlLCBpZCk7CisJCQlyZXR1cm4gLUVOQVZBSUw7CisJCX0KKwor CQlpdGVyLmJsay0+cnN2cF9ueHQgPSByc3ZwOworCQl0cmFjZV9kcHVfcm1fcmVzZXJ2ZV9pbnRm KGl0ZXIuYmxrLT5pZCwgaXRlci5ibGstPnR5cGUsCisJCQkJCSAgcnN2cC0+ZW5jX2lkKTsKKwkJ YnJlYWs7CisJfQorCisJLyogU2hvdWxkbid0IGhhcHBlbiBzaW5jZSBpbnRmcyBhcmUgZml4ZWQg YXQgcHJvYmUgKi8KKwlpZiAoIWl0ZXIuaHcpIHsKKwkJRFBVX0VSUk9SKCJjb3VsZG4ndCBmaW5k IHR5cGUgJWQgaWQgJWRcbiIsIHR5cGUsIGlkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJ aWYgKG5lZWRzX2NkbSkKKwkJcmV0ID0gX2RwdV9ybV9yZXNlcnZlX2NkbShybSwgcnN2cCwgaWQs IHR5cGUpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfZHB1X3JtX3Jlc2VydmVf aW50Zl9yZWxhdGVkX2h3KAorCQlzdHJ1Y3QgZHB1X3JtICpybSwKKwkJc3RydWN0IGRwdV9ybV9y c3ZwICpyc3ZwLAorCQlzdHJ1Y3QgZHB1X2VuY29kZXJfaHdfcmVzb3VyY2VzICpod19yZXMpCit7 CisJaW50IGksIHJldCA9IDA7CisJdTMyIGlkOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJ WkUoaHdfcmVzLT5pbnRmcyk7IGkrKykgeworCQlpZiAoaHdfcmVzLT5pbnRmc1tpXSA9PSBJTlRG X01PREVfTk9ORSkKKwkJCWNvbnRpbnVlOworCQlpZCA9IGkgKyBJTlRGXzA7CisJCXJldCA9IF9k cHVfcm1fcmVzZXJ2ZV9pbnRmKHJtLCByc3ZwLCBpZCwKKwkJCQlEUFVfSFdfQkxLX0lOVEYsIGh3 X3Jlcy0+bmVlZHNfY2RtKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0 dXJuIHJldDsKK30KKworc3RhdGljIGludCBfZHB1X3JtX21ha2VfbmV4dF9yc3ZwKAorCQlzdHJ1 Y3QgZHB1X3JtICpybSwKKwkJc3RydWN0IGRybV9lbmNvZGVyICplbmMsCisJCXN0cnVjdCBkcm1f Y3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNv bm5fc3RhdGUsCisJCXN0cnVjdCBkcHVfcm1fcnN2cCAqcnN2cCwKKwkJc3RydWN0IGRwdV9ybV9y ZXF1aXJlbWVudHMgKnJlcXMpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgZHB1X3JtX3RvcG9sb2d5 X2RlZiB0b3BvbG9neTsKKworCS8qIENyZWF0ZSByZXNlcnZhdGlvbiBpbmZvLCB0YWcgcmVzZXJ2 ZWQgYmxvY2tzIHdpdGggaXQgYXMgd2UgZ28gKi8KKwlyc3ZwLT5zZXEgPSArK3JtLT5yc3ZwX25l eHRfc2VxOworCXJzdnAtPmVuY19pZCA9IGVuYy0+YmFzZS5pZDsKKwlyc3ZwLT50b3BvbG9neSA9 IHJlcXMtPnRvcG9sb2d5LT50b3BfbmFtZTsKKwlsaXN0X2FkZF90YWlsKCZyc3ZwLT5saXN0LCAm cm0tPnJzdnBzKTsKKworCXJldCA9IF9kcHVfcm1fcmVzZXJ2ZV9sbXMocm0sIHJzdnAsIHJlcXMp OworCWlmIChyZXQpIHsKKwkJRFBVX0VSUk9SKCJ1bmFibGUgdG8gZmluZCBhcHByb3ByaWF0ZSBt aXhlcnNcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qCisJICogRG8gYXNzaWdubWVudCBw cmVmZXJyaW5nIHRvIGdpdmUgYXdheSBsb3ctcmVzb3VyY2UgQ1RMcyBmaXJzdDoKKwkgKiAtIENo ZWNrIG1peGVycyB3aXRob3V0IFNwbGl0IERpc3BsYXkKKwkgKiAtIE9ubHkgdGhlbiBhbGxvdyB0 byBncmFiIGZyb20gQ1RMcyB3aXRoIHNwbGl0IGRpc3BsYXkgY2FwYWJpbGl0eQorCSAqLworCV9k cHVfcm1fcmVzZXJ2ZV9jdGxzKHJtLCByc3ZwLCByZXFzLT50b3BvbG9neSk7CisJaWYgKHJldCAm JiAhcmVxcy0+dG9wb2xvZ3ktPm5lZWRzX3NwbGl0X2Rpc3BsYXkpIHsKKwkJbWVtY3B5KCZ0b3Bv bG9neSwgcmVxcy0+dG9wb2xvZ3ksIHNpemVvZih0b3BvbG9neSkpOworCQl0b3BvbG9neS5uZWVk c19zcGxpdF9kaXNwbGF5ID0gdHJ1ZTsKKwkJX2RwdV9ybV9yZXNlcnZlX2N0bHMocm0sIHJzdnAs ICZ0b3BvbG9neSk7CisJfQorCWlmIChyZXQpIHsKKwkJRFBVX0VSUk9SKCJ1bmFibGUgdG8gZmlu ZCBhcHByb3ByaWF0ZSBDVExcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIEFzc2lnbiBJ TlRGcyBhbmQgYmxrcyB3aG9zZSB1c2FnZSBpcyB0aWVkIHRvIHRoZW06IENUTCAmIENETSAqLwor CXJldCA9IF9kcHVfcm1fcmVzZXJ2ZV9pbnRmX3JlbGF0ZWRfaHcocm0sIHJzdnAsICZyZXFzLT5o d19yZXMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gcmV0OworfQorCitz dGF0aWMgaW50IF9kcHVfcm1fcG9wdWxhdGVfcmVxdWlyZW1lbnRzKAorCQlzdHJ1Y3QgZHB1X3Jt ICpybSwKKwkJc3RydWN0IGRybV9lbmNvZGVyICplbmMsCisJCXN0cnVjdCBkcm1fY3J0Y19zdGF0 ZSAqY3J0Y19zdGF0ZSwKKwkJc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUs CisJCXN0cnVjdCBkcHVfcm1fcmVxdWlyZW1lbnRzICpyZXFzLAorCQlzdHJ1Y3QgbXNtX2Rpc3Bs YXlfdG9wb2xvZ3kgcmVxX3RvcG9sb2d5KQoreworCWludCBpOworCisJbWVtc2V0KHJlcXMsIDAs IHNpemVvZigqcmVxcykpOworCisJZHB1X2VuY29kZXJfZ2V0X2h3X3Jlc291cmNlcyhlbmMsICZy ZXFzLT5od19yZXMsIGNvbm5fc3RhdGUpOworCisJZm9yIChpID0gMDsgaSA8IERQVV9STV9UT1BP TE9HWV9NQVg7IGkrKykgeworCQlpZiAoUk1fSVNfVE9QT0xPR1lfTUFUQ0goZ190b3BfdGFibGVb aV0sCisJCQkJCXJlcV90b3BvbG9neSkpIHsKKwkJCXJlcXMtPnRvcG9sb2d5ID0gJmdfdG9wX3Rh YmxlW2ldOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIXJlcXMtPnRvcG9sb2d5KSB7CisJ CURQVV9FUlJPUigiaW52YWxpZCB0b3BvbG9neSBmb3IgdGhlIGRpc3BsYXlcbiIpOworCQlyZXR1 cm4gLUVJTlZBTDsKKwl9CisKKwkvKioKKwkgKiBTZXQgdGhlIHJlcXVpcmVtZW50IGJhc2VkIG9u IGNhcHMgaWYgbm90IHNldCBmcm9tIHVzZXIgc3BhY2UKKwkgKiBUaGlzIHdpbGwgZW5zdXJlIHRv IHNlbGVjdCBMTSB0aWVkIHdpdGggRFMgYmxvY2tzCisJICogQ3VycmVudGx5LCBEUyBibG9ja3Mg YXJlIHRpZWQgd2l0aCBMTSAwIGFuZCBMTSAxIChwcmltYXJ5IGRpc3BsYXkpCisJICovCisJaWYg KCFSTV9SUV9EUyhyZXFzKSAmJiBybS0+aHdfbWRwLT5jYXBzLT5oYXNfZGVzdF9zY2FsZXIgJiYK KwkJY29ubl9zdGF0ZS0+Y29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05O RUNUT1JfRFNJKQorCQlyZXFzLT50b3BfY3RybCB8PSBCSVQoRFBVX1JNX1RPUENUTF9EUyk7CisK KwlEUk1fREVCVUdfS01TKCJ0b3BfY3RybDogMHglbGxYIG51bV9oX3RpbGVzOiAlZFxuIiwgcmVx cy0+dG9wX2N0cmwsCisJCSAgICAgIHJlcXMtPmh3X3Jlcy5kaXNwbGF5X251bV9vZl9oX3RpbGVz KTsKKwlEUk1fREVCVUdfS01TKCJudW1fbG06ICVkIG51bV9jdGw6ICVkIHRvcG9sb2d5OiAlZCBz cGxpdF9kaXNwbGF5OiAlZFxuIiwKKwkJICAgICAgcmVxcy0+dG9wb2xvZ3ktPm51bV9sbSwgcmVx cy0+dG9wb2xvZ3ktPm51bV9jdGwsCisJCSAgICAgIHJlcXMtPnRvcG9sb2d5LT50b3BfbmFtZSwK KwkJICAgICAgcmVxcy0+dG9wb2xvZ3ktPm5lZWRzX3NwbGl0X2Rpc3BsYXkpOworCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHB1X3JtX3JzdnAgKl9kcHVfcm1fZ2V0X3JzdnAoCisJ CXN0cnVjdCBkcHVfcm0gKnJtLAorCQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuYykKK3sKKwlzdHJ1 Y3QgZHB1X3JtX3JzdnAgKmk7CisKKwlpZiAoIXJtIHx8ICFlbmMpIHsKKwkJRFBVX0VSUk9SKCJp bnZhbGlkIHBhcmFtc1xuIik7CisJCXJldHVybiBOVUxMOworCX0KKworCWlmIChsaXN0X2VtcHR5 KCZybS0+cnN2cHMpKQorCQlyZXR1cm4gTlVMTDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoaSwg JnJtLT5yc3ZwcywgbGlzdCkKKwkJaWYgKGktPmVuY19pZCA9PSBlbmMtPmJhc2UuaWQpCisJCQly ZXR1cm4gaTsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGRybV9jb25uZWN0 b3IgKl9kcHVfcm1fZ2V0X2Nvbm5lY3RvcigKKwkJc3RydWN0IGRybV9lbmNvZGVyICplbmMpCit7 CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm4gPSBOVUxMOworCXN0cnVjdCBsaXN0X2hlYWQg KmNvbm5lY3Rvcl9saXN0ID0KKwkJCSZlbmMtPmRldi0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xp c3Q7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm4sIGNvbm5lY3Rvcl9saXN0LCBoZWFkKQor CQlpZiAoY29ubi0+ZW5jb2RlciA9PSBlbmMpCisJCQlyZXR1cm4gY29ubjsKKworCXJldHVybiBO VUxMOworfQorCisvKioKKyAqIF9kcHVfcm1fcmVsZWFzZV9yc3ZwIC0gcmVsZWFzZSByZXNvdXJj ZXMgYW5kIHJlbGVhc2UgYSByZXNlcnZhdGlvbgorICogQHJtOglLTVMgaGFuZGxlCisgKiBAcnN2 cDoJUlNWUCBwb2ludGVyIHRvIHJlbGVhc2UgYW5kIHJlbGVhc2UgcmVzb3VyY2VzIGZvcgorICov CitzdGF0aWMgdm9pZCBfZHB1X3JtX3JlbGVhc2VfcnN2cCgKKwkJc3RydWN0IGRwdV9ybSAqcm0s CisJCXN0cnVjdCBkcHVfcm1fcnN2cCAqcnN2cCwKKwkJc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm4pCit7CisJc3RydWN0IGRwdV9ybV9yc3ZwICpyc3ZwX2MsICpyc3ZwX247CisJc3RydWN0IGRw dV9ybV9od19ibGsgKmJsazsKKwllbnVtIGRwdV9od19ibGtfdHlwZSB0eXBlOworCisJaWYgKCFy c3ZwKQorCQlyZXR1cm47CisKKwlEUFVfREVCVUcoInJlbCByc3ZwICVkIGVuYyAlZFxuIiwgcnN2 cC0+c2VxLCByc3ZwLT5lbmNfaWQpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJzdnBf YywgcnN2cF9uLCAmcm0tPnJzdnBzLCBsaXN0KSB7CisJCWlmIChyc3ZwID09IHJzdnBfYykgewor CQkJbGlzdF9kZWwoJnJzdnBfYy0+bGlzdCk7CisJCQlicmVhazsKKwkJfQorCX0KKworCWZvciAo dHlwZSA9IDA7IHR5cGUgPCBEUFVfSFdfQkxLX01BWDsgdHlwZSsrKSB7CisJCWxpc3RfZm9yX2Vh Y2hfZW50cnkoYmxrLCAmcm0tPmh3X2Jsa3NbdHlwZV0sIGxpc3QpIHsKKwkJCWlmIChibGstPnJz dnAgPT0gcnN2cCkgeworCQkJCWJsay0+cnN2cCA9IE5VTEw7CisJCQkJRFBVX0RFQlVHKCJyZWwg cnN2cCAlZCBlbmMgJWQgJWQgJWRcbiIsCisJCQkJCQlyc3ZwLT5zZXEsIHJzdnAtPmVuY19pZCwK KwkJCQkJCWJsay0+dHlwZSwgYmxrLT5pZCk7CisJCQl9CisJCQlpZiAoYmxrLT5yc3ZwX254dCA9 PSByc3ZwKSB7CisJCQkJYmxrLT5yc3ZwX254dCA9IE5VTEw7CisJCQkJRFBVX0RFQlVHKCJyZWwg cnN2cF9ueHQgJWQgZW5jICVkICVkICVkXG4iLAorCQkJCQkJcnN2cC0+c2VxLCByc3ZwLT5lbmNf aWQsCisJCQkJCQlibGstPnR5cGUsIGJsay0+aWQpOworCQkJfQorCQl9CisJfQorCisJa2ZyZWUo cnN2cCk7Cit9CisKK3ZvaWQgZHB1X3JtX3JlbGVhc2Uoc3RydWN0IGRwdV9ybSAqcm0sIHN0cnVj dCBkcm1fZW5jb2RlciAqZW5jKQoreworCXN0cnVjdCBkcHVfcm1fcnN2cCAqcnN2cDsKKwlzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciAqY29ubjsKKworCWlmICghcm0gfHwgIWVuYykgeworCQlEUFVfRVJS T1IoImludmFsaWQgcGFyYW1zXG4iKTsKKwkJcmV0dXJuOworCX0KKworCW11dGV4X2xvY2soJnJt LT5ybV9sb2NrKTsKKworCXJzdnAgPSBfZHB1X3JtX2dldF9yc3ZwKHJtLCBlbmMpOworCWlmICgh cnN2cCkgeworCQlEUFVfRVJST1IoImZhaWxlZCB0byBmaW5kIHJzdnAgZm9yIGVuYyAlZFxuIiwg ZW5jLT5iYXNlLmlkKTsKKwkJZ290byBlbmQ7CisJfQorCisJY29ubiA9IF9kcHVfcm1fZ2V0X2Nv bm5lY3RvcihlbmMpOworCWlmICghY29ubikgeworCQlEUFVfRVJST1IoImZhaWxlZCB0byBnZXQg Y29ubmVjdG9yIGZvciBlbmMgJWRcbiIsIGVuYy0+YmFzZS5pZCk7CisJCWdvdG8gZW5kOworCX0K KworCV9kcHVfcm1fcmVsZWFzZV9yc3ZwKHJtLCByc3ZwLCBjb25uKTsKK2VuZDoKKwltdXRleF91 bmxvY2soJnJtLT5ybV9sb2NrKTsKK30KKworc3RhdGljIGludCBfZHB1X3JtX2NvbW1pdF9yc3Zw KAorCQlzdHJ1Y3QgZHB1X3JtICpybSwKKwkJc3RydWN0IGRwdV9ybV9yc3ZwICpyc3ZwLAorCQlz dHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHB1X3Jt X2h3X2JsayAqYmxrOworCWVudW0gZHB1X2h3X2Jsa190eXBlIHR5cGU7CisJaW50IHJldCA9IDA7 CisKKwkvKiBTd2FwIG5leHQgcnN2cCB0byBiZSB0aGUgYWN0aXZlICovCisJZm9yICh0eXBlID0g MDsgdHlwZSA8IERQVV9IV19CTEtfTUFYOyB0eXBlKyspIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRy eShibGssICZybS0+aHdfYmxrc1t0eXBlXSwgbGlzdCkgeworCQkJaWYgKGJsay0+cnN2cF9ueHQp IHsKKwkJCQlibGstPnJzdnAgPSBibGstPnJzdnBfbnh0OworCQkJCWJsay0+cnN2cF9ueHQgPSBO VUxMOworCQkJfQorCQl9CisJfQorCisJaWYgKCFyZXQpCisJCURSTV9ERUJVR19LTVMoInJzcnYg ZW5jICVkIHRvcG9sb2d5ICVkXG4iLCByc3ZwLT5lbmNfaWQsCisJCQkgICAgICByc3ZwLT50b3Bv bG9neSk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgZHB1X3JtX3Jlc2VydmUoCisJCXN0cnVj dCBkcHVfcm0gKnJtLAorCQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuYywKKwkJc3RydWN0IGRybV9j cnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29u bl9zdGF0ZSwKKwkJc3RydWN0IG1zbV9kaXNwbGF5X3RvcG9sb2d5IHRvcG9sb2d5LAorCQlib29s IHRlc3Rfb25seSkKK3sKKwlzdHJ1Y3QgZHB1X3JtX3JzdnAgKnJzdnBfY3VyLCAqcnN2cF9ueHQ7 CisJc3RydWN0IGRwdV9ybV9yZXF1aXJlbWVudHMgcmVxczsKKwlpbnQgcmV0OworCisJaWYgKCFy bSB8fCAhZW5jIHx8ICFjcnRjX3N0YXRlIHx8ICFjb25uX3N0YXRlKSB7CisJCURQVV9FUlJPUigi aW52YWxpZCBhcmd1bWVudHNcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBDaGVj ayBpZiB0aGlzIGlzIGp1c3QgYSBwYWdlLWZsaXAgKi8KKwlpZiAoIWRybV9hdG9taWNfY3J0Y19u ZWVkc19tb2Rlc2V0KGNydGNfc3RhdGUpKQorCQlyZXR1cm4gMDsKKworCURSTV9ERUJVR19LTVMo InJlc2VydmluZyBodyBmb3IgY29ubiAlZCBlbmMgJWQgY3J0YyAlZCB0ZXN0X29ubHkgJWRcbiIs CisJCSAgICAgIGNvbm5fc3RhdGUtPmNvbm5lY3Rvci0+YmFzZS5pZCwgZW5jLT5iYXNlLmlkLAor CQkgICAgICBjcnRjX3N0YXRlLT5jcnRjLT5iYXNlLmlkLCB0ZXN0X29ubHkpOworCisJbXV0ZXhf bG9jaygmcm0tPnJtX2xvY2spOworCisJX2RwdV9ybV9wcmludF9yc3ZwcyhybSwgRFBVX1JNX1NU QUdFX0JFR0lOKTsKKworCXJldCA9IF9kcHVfcm1fcG9wdWxhdGVfcmVxdWlyZW1lbnRzKHJtLCBl bmMsIGNydGNfc3RhdGUsCisJCQljb25uX3N0YXRlLCAmcmVxcywgdG9wb2xvZ3kpOworCWlmIChy ZXQpIHsKKwkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gcG9wdWxhdGUgaHcgcmVxdWlyZW1lbnRzXG4i KTsKKwkJZ290byBlbmQ7CisJfQorCisJLyoKKwkgKiBXZSBvbmx5IHN1cHBvcnQgb25lIGFjdGl2 ZSByZXNlcnZhdGlvbiBwZXItaHctYmxvY2suIEJ1dCB0byBpbXBsZW1lbnQKKwkgKiB0cmFuc2Fj dGlvbmFsIHNlbWFudGljcyBmb3IgdGVzdC1vbmx5LCBhbmQgZm9yIGFsbG93aW5nIGZhaWx1cmUg d2hpbGUKKwkgKiBtb2RpZnlpbmcgeW91ciBleGlzdGluZyByZXNlcnZhdGlvbiwgb3ZlciB0aGUg Y291cnNlIG9mIHRoaXMKKwkgKiBmdW5jdGlvbiB3ZSBjYW4gaGF2ZSB0d28gcmVzZXJ2YXRpb25z OgorCSAqIEN1cnJlbnQ6IEV4aXN0aW5nIHJlc2VydmF0aW9uCisJICogTmV4dDogUHJvcG9zZWQg cmVzZXJ2YXRpb24uIFRoZSBwcm9wb3NlZCByZXNlcnZhdGlvbiBtYXkgZmFpbCwgb3IgbWF5CisJ ICogICAgICAgYmUgZGlzY2FyZGVkIGlmIGluIHRlc3Qtb25seSBtb2RlLgorCSAqIElmIHJlc2Vy dmF0aW9uIGlzIHN1Y2Nlc3NmdWwsIGFuZCB3ZSdyZSBub3QgaW4gdGVzdC1vbmx5LCB0aGVuIHdl CisJICogcmVwbGFjZSB0aGUgY3VycmVudCB3aXRoIHRoZSBuZXh0LgorCSAqLworCXJzdnBfbnh0 ID0ga3phbGxvYyhzaXplb2YoKnJzdnBfbnh0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyc3ZwX254 dCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVuZDsKKwl9CisKKwlyc3ZwX2N1ciA9IF9k cHVfcm1fZ2V0X3JzdnAocm0sIGVuYyk7CisKKwkvKgorCSAqIFVzZXIgY2FuIHJlcXVlc3QgdGhh dCB3ZSBjbGVhciBvdXQgYW55IHJlc2VydmF0aW9uIGR1cmluZyB0aGUKKwkgKiBhdG9taWNfY2hl Y2sgcGhhc2UgYnkgdXNpbmcgdGhpcyBDTEVBUiBiaXQKKwkgKi8KKwlpZiAocnN2cF9jdXIgJiYg dGVzdF9vbmx5ICYmIFJNX1JRX0NMRUFSKCZyZXFzKSkgeworCQlEUFVfREVCVUcoInRlc3Rfb25s eSAmIENMRUFSOiBjbGVhciByc3ZwW3MlZGUlZF1cbiIsCisJCQkJcnN2cF9jdXItPnNlcSwgcnN2 cF9jdXItPmVuY19pZCk7CisJCV9kcHVfcm1fcmVsZWFzZV9yc3ZwKHJtLCByc3ZwX2N1ciwgY29u bl9zdGF0ZS0+Y29ubmVjdG9yKTsKKwkJcnN2cF9jdXIgPSBOVUxMOworCQlfZHB1X3JtX3ByaW50 X3JzdnBzKHJtLCBEUFVfUk1fU1RBR0VfQUZURVJfQ0xFQVIpOworCX0KKworCS8qIENoZWNrIHRo ZSBwcm9wb3NlZCByZXNlcnZhdGlvbiwgc3RvcmUgaXQgaW4gaHcncyAibmV4dCIgZmllbGQgKi8K KwlyZXQgPSBfZHB1X3JtX21ha2VfbmV4dF9yc3ZwKHJtLCBlbmMsIGNydGNfc3RhdGUsIGNvbm5f c3RhdGUsCisJCQlyc3ZwX254dCwgJnJlcXMpOworCisJX2RwdV9ybV9wcmludF9yc3ZwcyhybSwg RFBVX1JNX1NUQUdFX0FGVEVSX1JTVlBORVhUKTsKKworCWlmIChyZXQpIHsKKwkJRFBVX0VSUk9S KCJmYWlsZWQgdG8gcmVzZXJ2ZSBodyByZXNvdXJjZXM6ICVkXG4iLCByZXQpOworCQlfZHB1X3Jt X3JlbGVhc2VfcnN2cChybSwgcnN2cF9ueHQsIGNvbm5fc3RhdGUtPmNvbm5lY3Rvcik7CisJfSBl bHNlIGlmICh0ZXN0X29ubHkgJiYgIVJNX1JRX0xPQ0soJnJlcXMpKSB7CisJCS8qCisJCSAqIE5v cm1hbGx5LCBpZiB0ZXN0X29ubHksIHRlc3QgdGhlIHJlc2VydmF0aW9uIGFuZCB0aGVuIHVuZG8K KwkJICogSG93ZXZlciwgaWYgdGhlIHVzZXIgcmVxdWVzdHMgTE9DSywgdGhlbiBrZWVwIHRoZSBy ZXNlcnZhdGlvbgorCQkgKiBtYWRlIGR1cmluZyB0aGUgYXRvbWljX2NoZWNrIHBoYXNlLgorCQkg Ki8KKwkJRFBVX0RFQlVHKCJ0ZXN0X29ubHk6IGRpc2NhcmQgdGVzdCByc3ZwW3MlZGUlZF1cbiIs CisJCQkJcnN2cF9ueHQtPnNlcSwgcnN2cF9ueHQtPmVuY19pZCk7CisJCV9kcHVfcm1fcmVsZWFz ZV9yc3ZwKHJtLCByc3ZwX254dCwgY29ubl9zdGF0ZS0+Y29ubmVjdG9yKTsKKwl9IGVsc2Ugewor CQlpZiAodGVzdF9vbmx5ICYmIFJNX1JRX0xPQ0soJnJlcXMpKQorCQkJRFBVX0RFQlVHKCJ0ZXN0 X29ubHkgJiBMT0NLOiBsb2NrIHJzdnBbcyVkZSVkXVxuIiwKKwkJCQkJcnN2cF9ueHQtPnNlcSwg cnN2cF9ueHQtPmVuY19pZCk7CisKKwkJX2RwdV9ybV9yZWxlYXNlX3JzdnAocm0sIHJzdnBfY3Vy LCBjb25uX3N0YXRlLT5jb25uZWN0b3IpOworCisJCXJldCA9IF9kcHVfcm1fY29tbWl0X3JzdnAo cm0sIHJzdnBfbnh0LCBjb25uX3N0YXRlKTsKKwl9CisKKwlfZHB1X3JtX3ByaW50X3JzdnBzKHJt LCBEUFVfUk1fU1RBR0VfRklOQUwpOworCitlbmQ6CisJbXV0ZXhfdW5sb2NrKCZybS0+cm1fbG9j ayk7CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X3JtLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcm0u aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmVmM2Y2N2JlZGFhMAot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9ybS5o CkBAIC0wLDAgKzEsMTk5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTgsIFRoZSBM aW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK KyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICov CisKKyNpZm5kZWYgX19EUFVfUk1fSF9fCisjZGVmaW5lIF9fRFBVX1JNX0hfXworCisjaW5jbHVk ZSA8bGludXgvbGlzdC5oPgorCisjaW5jbHVkZSAibXNtX2ttcy5oIgorI2luY2x1ZGUgImRwdV9o d190b3AuaCIKKworLyoqCisgKiBlbnVtIGRwdV9ybV90b3BvbG9neV9uYW1lIC0gSFcgcmVzb3Vy Y2UgdXNlIGNhc2UgaW4gdXNlIGJ5IGNvbm5lY3RvcgorICogQERQVV9STV9UT1BPTE9HWV9OT05F OiAgICAgICAgICAgICAgICAgTm8gdG9wb2xvZ3kgaW4gdXNlIGN1cnJlbnRseQorICogQERQVV9S TV9UT1BPTE9HWV9TSU5HTEVQSVBFOiAgICAgICAgICAgMSBMTSwgMSBQUCwgMSBJTlRGL1dCCisg KiBARFBVX1JNX1RPUE9MT0dZX0RVQUxQSVBFOiAgICAgICAgICAgICAyIExNLCAyIFBQLCAyIElO VEYvV0IKKyAqIEBEUFVfUk1fVE9QT0xPR1lfRFVBTFBJUEVfM0RNRVJHRTogICAgIDIgTE0sIDIg UFAsIDNETXV4LCAxIElOVEYvV0IKKyAqLworZW51bSBkcHVfcm1fdG9wb2xvZ3lfbmFtZSB7CisJ RFBVX1JNX1RPUE9MT0dZX05PTkUgPSAwLAorCURQVV9STV9UT1BPTE9HWV9TSU5HTEVQSVBFLAor CURQVV9STV9UT1BPTE9HWV9EVUFMUElQRSwKKwlEUFVfUk1fVE9QT0xPR1lfRFVBTFBJUEVfM0RN RVJHRSwKKwlEUFVfUk1fVE9QT0xPR1lfTUFYLAorfTsKKworLyoqCisgKiBlbnVtIGRwdV9ybV90 b3BvbG9neV9jb250cm9sIC0gSFcgcmVzb3VyY2UgdXNlIGNhc2UgaW4gdXNlIGJ5IGNvbm5lY3Rv cgorICogQERQVV9STV9UT1BDVExfUkVTRVJWRV9MT0NLOiBJZiBzZXQsIGluIEF0b21pY1Rlc3Qg cGhhc2UsIGFmdGVyIGEgc3VjY2Vzc2Z1bAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0ZXN0LCByZXNlcnZlIHRoZSByZXNvdXJjZXMgZm9yIHRoaXMgZGlzcGxheS4KKyAqICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsIGJlaGF2aW9yIHdvdWxkIG5vdCBpbXBhY3Qg dGhlIHJlc2VydmF0aW9uCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgZHVy aW5nIHRoZSBBdG9taWNUZXN0IHBoYXNlLgorICogQERQVV9STV9UT1BDVExfUkVTRVJWRV9DTEVB UjogSWYgc2V0LCBpbiBBdG9taWNUZXN0IHBoYXNlLCBiZWZvcmUgdGVzdGluZywKKyAqICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2UgYW55IHJlc2VydmF0aW9uIGhlbGQgYnkg dGhpcyBkaXNwbGF5LgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9ybWFsIGJl aGF2aW9yIHdvdWxkIG5vdCBpbXBhY3QgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICByZXNlcnZhdGlvbiBsaXN0IGR1cmluZyB0aGUgQXRvbWljVGVzdCBwaGFzZS4KKyAqIEBE UFVfUk1fVE9QQ1RMX0RTICA6IFJlcXVpcmUgbGF5ZXIgbWl4ZXJzIHdpdGggRFMgY2FwYWJpbGl0 aWVzCisgKi8KK2VudW0gZHB1X3JtX3RvcG9sb2d5X2NvbnRyb2wgeworCURQVV9STV9UT1BDVExf UkVTRVJWRV9MT0NLLAorCURQVV9STV9UT1BDVExfUkVTRVJWRV9DTEVBUiwKKwlEUFVfUk1fVE9Q Q1RMX0RTLAorfTsKKworLyoqCisgKiBzdHJ1Y3QgZHB1X3JtIC0gRFBVIGR5bmFtaWMgaGFyZHdh cmUgcmVzb3VyY2UgbWFuYWdlcgorICogQGRldjogZGV2aWNlIGhhbmRsZSBmb3IgZXZlbnQgbG9n Z2luZyBwdXJwb3NlcworICogQHJzdnBzOiBsaXN0IG9mIGhhcmR3YXJlIHJlc2VydmF0aW9ucyBi eSBlYWNoIGNydGMtPmVuY29kZXItPmNvbm5lY3RvcgorICogQGh3X2Jsa3M6IGFycmF5IG9mIGxp c3RzIG9mIGhhcmR3YXJlIHJlc291cmNlcyBwcmVzZW50IGluIHRoZSBzeXN0ZW0sIG9uZQorICoJ bGlzdCBwZXIgdHlwZSBvZiBoYXJkd2FyZSBibG9jaworICogQGh3X21kcDogaGFyZHdhcmUgb2Jq ZWN0IGZvciBtZHBfdG9wCisgKiBAbG1fbWF4X3dpZHRoOiBjYWNoZWQgbGF5ZXIgbWl4ZXIgbWF4 aW11bSB3aWR0aAorICogQHJzdnBfbmV4dF9zZXE6IHNlcXVlbmNlIG51bWJlciBmb3IgbmV4dCBy ZXNlcnZhdGlvbiBmb3IgZGVidWdnaW5nIHB1cnBvc2VzCisgKiBAcm1fbG9jazogcmVzb3VyY2Ug bWFuYWdlciBtdXRleAorICovCitzdHJ1Y3QgZHB1X3JtIHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2OworCXN0cnVjdCBsaXN0X2hlYWQgcnN2cHM7CisJc3RydWN0IGxpc3RfaGVhZCBod19ibGtz W0RQVV9IV19CTEtfTUFYXTsKKwlzdHJ1Y3QgZHB1X2h3X21kcCAqaHdfbWRwOworCXVpbnQzMl90 IGxtX21heF93aWR0aDsKKwl1aW50MzJfdCByc3ZwX25leHRfc2VxOworCXN0cnVjdCBtdXRleCBy bV9sb2NrOworfTsKKworLyoqCisgKiAgc3RydWN0IGRwdV9ybV9od19ibGsgLSByZXNvdXJjZSBt YW5hZ2VyIGludGVybmFsIHN0cnVjdHVyZQorICoJZm9yd2FyZCBkZWNsYXJhdGlvbiBmb3Igc2lu Z2xlIGl0ZXJhdG9yIGRlZmluaXRpb24gd2l0aG91dCB2b2lkIHBvaW50ZXIKKyAqLworc3RydWN0 IGRwdV9ybV9od19ibGs7CisKKy8qKgorICogc3RydWN0IGRwdV9ybV9od19pdGVyIC0gaXRlcmF0 b3IgZm9yIHVzZSB3aXRoIGRwdV9ybQorICogQGh3OiBkcHVfaHcgb2JqZWN0IHJlcXVlc3RlZCwg b3IgTlVMTCBvbiBmYWlsdXJlCisgKiBAYmxrOiBkcHVfcm0gaW50ZXJuYWwgYmxvY2sgcmVwcmVz ZW50YXRpb24uIENsaWVudHMgaWdub3JlLiBVc2VkIGFzIGl0ZXJhdG9yLgorICogQGVuY19pZDog RFJNIElEIG9mIEVuY29kZXIgY2xpZW50IHdpc2hlcyB0byBzZWFyY2ggZm9yLCBvciAwIGZvciBB bnkgRW5jb2RlcgorICogQHR5cGU6IEhhcmR3YXJlIEJsb2NrIFR5cGUgY2xpZW50IHdpc2hlcyB0 byBzZWFyY2ggZm9yLgorICovCitzdHJ1Y3QgZHB1X3JtX2h3X2l0ZXIgeworCXZvaWQgKmh3Owor CXN0cnVjdCBkcHVfcm1faHdfYmxrICpibGs7CisJdWludDMyX3QgZW5jX2lkOworCWVudW0gZHB1 X2h3X2Jsa190eXBlIHR5cGU7Cit9OworCisvKioKKyAqIGRwdV9ybV9pbml0IC0gUmVhZCBoYXJk d2FyZSBjYXRhbG9nIGFuZCBjcmVhdGUgcmVzZXJ2YXRpb24gdHJhY2tpbmcgb2JqZWN0cworICoJ Zm9yIGFsbCBIVyBibG9ja3MuCisgKiBAcm06IERQVSBSZXNvdXJjZSBNYW5hZ2VyIGhhbmRsZQor ICogQGNhdDogUG9pbnRlciB0byBoYXJkd2FyZSBjYXRhbG9nCisgKiBAbW1pbzogbWFwcGVkIHJl Z2lzdGVyIGlvIGFkZHJlc3Mgb2YgTURQCisgKiBAZGV2OiBkZXZpY2UgaGFuZGxlIGZvciBldmVu dCBsb2dnaW5nIHB1cnBvc2VzCisgKiBAUmV0dXJuOiAwIG9uIFN1Y2Nlc3Mgb3RoZXJ3aXNlIC1F UlJPUgorICovCitpbnQgZHB1X3JtX2luaXQoc3RydWN0IGRwdV9ybSAqcm0sCisJCXN0cnVjdCBk cHVfbWRzc19jZmcgKmNhdCwKKwkJdm9pZCAqbW1pbywKKwkJc3RydWN0IGRybV9kZXZpY2UgKmRl dik7CisKKy8qKgorICogZHB1X3JtX2Rlc3Ryb3kgLSBGcmVlIGFsbCBtZW1vcnkgYWxsb2NhdGVk IGJ5IGRwdV9ybV9pbml0CisgKiBAcm06IERQVSBSZXNvdXJjZSBNYW5hZ2VyIGhhbmRsZQorICog QFJldHVybjogMCBvbiBTdWNjZXNzIG90aGVyd2lzZSAtRVJST1IKKyAqLworaW50IGRwdV9ybV9k ZXN0cm95KHN0cnVjdCBkcHVfcm0gKnJtKTsKKworLyoqCisgKiBkcHVfcm1fcmVzZXJ2ZSAtIEdp dmVuIGEgQ1JUQy0+RW5jb2Rlci0+Q29ubmVjdG9yIGRpc3BsYXkgY2hhaW4sIGFuYWx5emUKKyAq CXRoZSB1c2UgY29ubmVjdGlvbnMgYW5kIHVzZXIgcmVxdWlyZW1lbnRzLCBzcGVjaWZpZWQgdGhy b3VnaCByZWxhdGVkCisgKgl0b3BvbG9neSBjb250cm9sIHByb3BlcnRpZXMsIGFuZCByZXNlcnZl IGhhcmR3YXJlIGJsb2NrcyB0byB0aGF0CisgKglkaXNwbGF5IGNoYWluLgorICoJSFcgYmxvY2tz IGNhbiB0aGVuIGJlIGFjY2Vzc2VkIHRocm91Z2ggZHB1X3JtX2dldF8qIGZ1bmN0aW9ucy4KKyAq CUhXIFJlc2VydmF0aW9ucyBzaG91bGQgYmUgcmVsZWFzZWQgdmlhIGRwdV9ybV9yZWxlYXNlX2h3 LgorICogQHJtOiBEUFUgUmVzb3VyY2UgTWFuYWdlciBoYW5kbGUKKyAqIEBkcm1fZW5jOiBEUk0g RW5jb2RlciBoYW5kbGUKKyAqIEBjcnRjX3N0YXRlOiBQcm9wb3NlZCBBdG9taWMgRFJNIENSVEMg U3RhdGUgaGFuZGxlCisgKiBAY29ubl9zdGF0ZTogUHJvcG9zZWQgQXRvbWljIERSTSBDb25uZWN0 b3IgU3RhdGUgaGFuZGxlCisgKiBAdG9wb2xvZ3k6IFBvaW50ZXIgdG8gdG9wb2xvZ3kgaW5mbyBm b3IgdGhlIGRpc3BsYXkKKyAqIEB0ZXN0X29ubHk6IEF0b21pYy1UZXN0IHBoYXNlLCBkaXNjYXJk IHJlc3VsdHMgKHVubGVzcyBwcm9wZXJ0eSBvdmVycmlkZXMpCisgKiBAUmV0dXJuOiAwIG9uIFN1 Y2Nlc3Mgb3RoZXJ3aXNlIC1FUlJPUgorICovCitpbnQgZHB1X3JtX3Jlc2VydmUoc3RydWN0IGRw dV9ybSAqcm0sCisJCXN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYywKKwkJc3RydWN0IGRybV9j cnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29u bl9zdGF0ZSwKKwkJc3RydWN0IG1zbV9kaXNwbGF5X3RvcG9sb2d5IHRvcG9sb2d5LAorCQlib29s IHRlc3Rfb25seSk7CisKKy8qKgorICogZHB1X3JtX3Jlc2VydmUgLSBHaXZlbiB0aGUgZW5jb2Rl ciBmb3IgdGhlIGRpc3BsYXkgY2hhaW4sIHJlbGVhc2UgYW55CisgKglIVyBibG9ja3MgcHJldmlv dXNseSByZXNlcnZlZCBmb3IgdGhhdCB1c2UgY2FzZS4KKyAqIEBybTogRFBVIFJlc291cmNlIE1h bmFnZXIgaGFuZGxlCisgKiBAZW5jOiBEUk0gRW5jb2RlciBoYW5kbGUKKyAqIEBSZXR1cm46IDAg b24gU3VjY2VzcyBvdGhlcndpc2UgLUVSUk9SCisgKi8KK3ZvaWQgZHB1X3JtX3JlbGVhc2Uoc3Ry dWN0IGRwdV9ybSAqcm0sIHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jKTsKKworLyoqCisgKiBkcHVf cm1fZ2V0X21kcCAtIFJldHJpZXZlIEhXIGJsb2NrIGZvciBNRFAgVE9QLgorICoJVGhpcyBpcyBu ZXZlciByZXNlcnZlZCwgYW5kIGlzIHVzYWJsZSBieSBhbnkgZGlzcGxheS4KKyAqIEBybTogRFBV IFJlc291cmNlIE1hbmFnZXIgaGFuZGxlCisgKiBAUmV0dXJuOiBQb2ludGVyIHRvIGh3IGJsb2Nr IG9yIE5VTEwKKyAqLworc3RydWN0IGRwdV9od19tZHAgKmRwdV9ybV9nZXRfbWRwKHN0cnVjdCBk cHVfcm0gKnJtKTsKKworLyoqCisgKiBkcHVfcm1faW5pdF9od19pdGVyIC0gc2V0dXAgZ2l2ZW4g aXRlcmF0b3IgZm9yIG5ldyBpdGVyYXRpb24gb3ZlciBodyBsaXN0CisgKgl1c2luZyBkcHVfcm1f Z2V0X2h3CisgKiBAaXRlcjogaXRlciBvYmplY3QgdG8gaW5pdGlhbGl6ZQorICogQGVuY19pZDog RFJNIElEIG9mIEVuY29kZXIgY2xpZW50IHdpc2hlcyB0byBzZWFyY2ggZm9yLCBvciAwIGZvciBB bnkgRW5jb2RlcgorICogQHR5cGU6IEhhcmR3YXJlIEJsb2NrIFR5cGUgY2xpZW50IHdpc2hlcyB0 byBzZWFyY2ggZm9yLgorICovCit2b2lkIGRwdV9ybV9pbml0X2h3X2l0ZXIoCisJCXN0cnVjdCBk cHVfcm1faHdfaXRlciAqaXRlciwKKwkJdWludDMyX3QgZW5jX2lkLAorCQllbnVtIGRwdV9od19i bGtfdHlwZSB0eXBlKTsKKy8qKgorICogZHB1X3JtX2dldF9odyAtIHJldHJpZXZlIHJlc2VydmVk IGh3IG9iamVjdCBnaXZlbiBlbmNvZGVyIGFuZCBodyB0eXBlCisgKglNZWFudCB0byBkbyBhIHNp bmdsZSBwYXNzIHRocm91Z2ggdGhlIGhhcmR3YXJlIGxpc3QgdG8gaXRlcmF0aXZlbHkKKyAqCXJl dHJpZXZlIGhhcmR3YXJlIGJsb2NrcyBvZiBhIGdpdmVuIHR5cGUgZm9yIGEgZ2l2ZW4gZW5jb2Rl ci4KKyAqCUluaXRpYWxpemUgYW4gaXRlcmF0b3Igb2JqZWN0LgorICoJU2V0IGh3IGJsb2NrIHR5 cGUgb2YgaW50ZXJlc3QuIFNldCBlbmNvZGVyIGlkIG9mIGludGVyZXN0LCAwIGZvciBhbnkuCisg KglGdW5jdGlvbiByZXR1cm5zIGZpcnN0IGh3IG9mIHR5cGUgZm9yIHRoYXQgZW5jb2Rlci4KKyAq CVN1YnNlcXVlbnQgY2FsbHMgd2lsbCByZXR1cm4gdGhlIG5leHQgcmVzZXJ2ZWQgaHcgb2YgdGhh dCB0eXBlIGluLW9yZGVyLgorICoJSXRlcmF0b3IgSFcgcG9pbnRlciB3aWxsIGJlIG51bGwgb24g ZmFpbHVyZSB0byBmaW5kIGh3LgorICogQHJtOiBEUFUgUmVzb3VyY2UgTWFuYWdlciBoYW5kbGUK KyAqIEBpdGVyOiBpdGVyYXRvciBvYmplY3QKKyAqIEBSZXR1cm46IHRydWUgb24gbWF0Y2ggZm91 bmQsIGZhbHNlIG9uIG5vIG1hdGNoIGZvdW5kCisgKi8KK2Jvb2wgZHB1X3JtX2dldF9odyhzdHJ1 Y3QgZHB1X3JtICpybSwgc3RydWN0IGRwdV9ybV9od19pdGVyICppdGVyKTsKKworLyoqCisgKiBk cHVfcm1fY2hlY2tfcHJvcGVydHlfdG9wY3RsIC0gdmFsaWRhdGUgcHJvcGVydHkgYml0bWFzayBi ZWZvcmUgaXQgaXMgc2V0CisgKiBAdmFsOiB1c2VyJ3MgcHJvcG9zZWQgdG9wb2xvZ3kgY29udHJv bCBiaXRtYXNrCisgKiBAUmV0dXJuOiAwIG9uIHN1Y2Nlc3Mgb3IgZXJyb3IKKyAqLworaW50IGRw dV9ybV9jaGVja19wcm9wZXJ0eV90b3BjdGwodWludDY0X3QgdmFsKTsKKworLyoqCisgKiBkcHVf cm1fZ2V0X3RvcG9sb2d5X25hbWUgLSByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSB0aGUgZ2l2ZW4g dG9wb2xvZ3kKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb24KKyAqIEB0 b3BvbG9neTogdG9wb2xvZ3kgZGVmaW5pdGlvbgorICogQFJldHVybjogbmFtZSBvZiB0aGUgdG9w b2xvZ3kKKyAqLworZW51bSBkcHVfcm1fdG9wb2xvZ3lfbmFtZQorZHB1X3JtX2dldF90b3BvbG9n eV9uYW1lKHN0cnVjdCBtc21fZGlzcGxheV90b3BvbG9neSB0b3BvbG9neSk7CisKKyNlbmRpZiAv KiBfX0RQVV9STV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV90cmFjZS5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3RyYWNl LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi43NmVmYzY5MGNjZTMK LS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfdHJh Y2UuaApAQCAtMCwwICsxLDEwMTEgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNC0yMDE4LCBUaGUg TGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSB2ZXJzaW9uIDIgYW5kCisgKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl CisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisK KyNpZiAhZGVmaW5lZChfRFBVX1RSQUNFX0hfKSB8fCBkZWZpbmVkKFRSQUNFX0hFQURFUl9NVUxU SV9SRUFEKQorI2RlZmluZSBfRFBVX1RSQUNFX0hfCisKKyNpbmNsdWRlIDxsaW51eC9zdHJpbmdp ZnkuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9p bnQuaD4KKworI2luY2x1ZGUgPGRybS9kcm1fcmVjdC5oPgorI2luY2x1ZGUgImRwdV9jcnRjLmgi CisjaW5jbHVkZSAiZHB1X2VuY29kZXJfcGh5cy5oIgorI2luY2x1ZGUgImRwdV9od19tZHNzLmgi CisjaW5jbHVkZSAiZHB1X2h3X3ZiaWYuaCIKKyNpbmNsdWRlICJkcHVfcGxhbmUuaCIKKworI3Vu ZGVmIFRSQUNFX1NZU1RFTQorI2RlZmluZSBUUkFDRV9TWVNURU0gZHB1CisjdW5kZWYgVFJBQ0Vf SU5DTFVERV9GSUxFCisjZGVmaW5lIFRSQUNFX0lOQ0xVREVfRklMRSBkcHVfdHJhY2UKKworVFJB Q0VfRVZFTlQoZHB1X3BlcmZfc2V0X3Fvc19sdXRzLAorCVRQX1BST1RPKHUzMiBwbnVtLCB1MzIg Zm10LCBib29sIHJ0LCB1MzIgZmwsCisJCXUzMiBsdXQsIHUzMiBsdXRfdXNhZ2UpLAorCVRQX0FS R1MocG51bSwgZm10LCBydCwgZmwsIGx1dCwgbHV0X3VzYWdlKSwKKwlUUF9TVFJVQ1RfX2VudHJ5 KAorCQkJX19maWVsZCh1MzIsIHBudW0pCisJCQlfX2ZpZWxkKHUzMiwgZm10KQorCQkJX19maWVs ZChib29sLCBydCkKKwkJCV9fZmllbGQodTMyLCBmbCkKKwkJCV9fZmllbGQodTY0LCBsdXQpCisJ CQlfX2ZpZWxkKHUzMiwgbHV0X3VzYWdlKQorCSksCisJVFBfZmFzdF9hc3NpZ24oCisJCQlfX2Vu dHJ5LT5wbnVtID0gcG51bTsKKwkJCV9fZW50cnktPmZtdCA9IGZtdDsKKwkJCV9fZW50cnktPnJ0 ID0gcnQ7CisJCQlfX2VudHJ5LT5mbCA9IGZsOworCQkJX19lbnRyeS0+bHV0ID0gbHV0OworCQkJ X19lbnRyeS0+bHV0X3VzYWdlID0gbHV0X3VzYWdlOworCSksCisJVFBfcHJpbnRrKCJwbnVtPSVk IGZtdD0leCBydD0lZCBmbD0lZCBsdXQ9MHglbGx4IGx1dF91c2FnZT0lZCIsCisJCQlfX2VudHJ5 LT5wbnVtLCBfX2VudHJ5LT5mbXQsCisJCQlfX2VudHJ5LT5ydCwgX19lbnRyeS0+ZmwsCisJCQlf X2VudHJ5LT5sdXQsIF9fZW50cnktPmx1dF91c2FnZSkKKyk7CisKK1RSQUNFX0VWRU5UKGRwdV9w ZXJmX3NldF9kYW5nZXJfbHV0cywKKwlUUF9QUk9UTyh1MzIgcG51bSwgdTMyIGZtdCwgdTMyIG1v ZGUsIHUzMiBkYW5nZXJfbHV0LAorCQl1MzIgc2FmZV9sdXQpLAorCVRQX0FSR1MocG51bSwgZm10 LCBtb2RlLCBkYW5nZXJfbHV0LCBzYWZlX2x1dCksCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJCV9f ZmllbGQodTMyLCBwbnVtKQorCQkJX19maWVsZCh1MzIsIGZtdCkKKwkJCV9fZmllbGQodTMyLCBt b2RlKQorCQkJX19maWVsZCh1MzIsIGRhbmdlcl9sdXQpCisJCQlfX2ZpZWxkKHUzMiwgc2FmZV9s dXQpCisJKSwKKwlUUF9mYXN0X2Fzc2lnbigKKwkJCV9fZW50cnktPnBudW0gPSBwbnVtOworCQkJ X19lbnRyeS0+Zm10ID0gZm10OworCQkJX19lbnRyeS0+bW9kZSA9IG1vZGU7CisJCQlfX2VudHJ5 LT5kYW5nZXJfbHV0ID0gZGFuZ2VyX2x1dDsKKwkJCV9fZW50cnktPnNhZmVfbHV0ID0gc2FmZV9s dXQ7CisJKSwKKwlUUF9wcmludGsoInBudW09JWQgZm10PSV4IG1vZGU9JWQgbHV0c1sweCV4LCAw eCV4XSIsCisJCQlfX2VudHJ5LT5wbnVtLCBfX2VudHJ5LT5mbXQsCisJCQlfX2VudHJ5LT5tb2Rl LCBfX2VudHJ5LT5kYW5nZXJfbHV0LAorCQkJX19lbnRyeS0+c2FmZV9sdXQpCispOworCitUUkFD RV9FVkVOVChkcHVfcGVyZl9zZXRfb3QsCisJVFBfUFJPVE8odTMyIHBudW0sIHUzMiB4aW5faWQs IHUzMiByZF9saW0sIHUzMiB2YmlmX2lkeCksCisJVFBfQVJHUyhwbnVtLCB4aW5faWQsIHJkX2xp bSwgdmJpZl9pZHgpLAorCVRQX1NUUlVDVF9fZW50cnkoCisJCQlfX2ZpZWxkKHUzMiwgcG51bSkK KwkJCV9fZmllbGQodTMyLCB4aW5faWQpCisJCQlfX2ZpZWxkKHUzMiwgcmRfbGltKQorCQkJX19m aWVsZCh1MzIsIHZiaWZfaWR4KQorCSksCisJVFBfZmFzdF9hc3NpZ24oCisJCQlfX2VudHJ5LT5w bnVtID0gcG51bTsKKwkJCV9fZW50cnktPnhpbl9pZCA9IHhpbl9pZDsKKwkJCV9fZW50cnktPnJk X2xpbSA9IHJkX2xpbTsKKwkJCV9fZW50cnktPnZiaWZfaWR4ID0gdmJpZl9pZHg7CisJKSwKKwlU UF9wcmludGsoInBudW06JWQgeGluX2lkOiVkIG90OiVkIHZiaWY6JWQiLAorCQkJX19lbnRyeS0+ cG51bSwgX19lbnRyeS0+eGluX2lkLCBfX2VudHJ5LT5yZF9saW0sCisJCQlfX2VudHJ5LT52Ymlm X2lkeCkKKykKKworVFJBQ0VfRVZFTlQoZHB1X3BlcmZfdXBkYXRlX2J1cywKKwlUUF9QUk9UTyhp bnQgY2xpZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgYWJfcXVvdGEsCisJdW5zaWduZWQgbG9uZyBs b25nIGliX3F1b3RhKSwKKwlUUF9BUkdTKGNsaWVudCwgYWJfcXVvdGEsIGliX3F1b3RhKSwKKwlU UF9TVFJVQ1RfX2VudHJ5KAorCQkJX19maWVsZChpbnQsIGNsaWVudCkKKwkJCV9fZmllbGQodTY0 LCBhYl9xdW90YSkKKwkJCV9fZmllbGQodTY0LCBpYl9xdW90YSkKKwkpLAorCVRQX2Zhc3RfYXNz aWduKAorCQkJX19lbnRyeS0+Y2xpZW50ID0gY2xpZW50OworCQkJX19lbnRyeS0+YWJfcXVvdGEg PSBhYl9xdW90YTsKKwkJCV9fZW50cnktPmliX3F1b3RhID0gaWJfcXVvdGE7CisJKSwKKwlUUF9w cmludGsoIlJlcXVlc3QgY2xpZW50OiVkIGFiPSVsbHUgaWI9JWxsdSIsCisJCQlfX2VudHJ5LT5j bGllbnQsCisJCQlfX2VudHJ5LT5hYl9xdW90YSwKKwkJCV9fZW50cnktPmliX3F1b3RhKQorKQor CisKK1RSQUNFX0VWRU5UKGRwdV9jbWRfcmVsZWFzZV9idywKKwlUUF9QUk9UTyh1MzIgY3J0Y19p ZCksCisJVFBfQVJHUyhjcnRjX2lkKSwKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQkJX19maWVsZCh1 MzIsIGNydGNfaWQpCisJKSwKKwlUUF9mYXN0X2Fzc2lnbigKKwkJCV9fZW50cnktPmNydGNfaWQg PSBjcnRjX2lkOworCSksCisJVFBfcHJpbnRrKCJjcnRjOiVkIiwgX19lbnRyeS0+Y3J0Y19pZCkK Kyk7CisKK1RSQUNFX0VWRU5UKHRyYWNpbmdfbWFya193cml0ZSwKKwlUUF9QUk9UTyhpbnQgcGlk LCBjb25zdCBjaGFyICpuYW1lLCBib29sIHRyYWNlX2JlZ2luKSwKKwlUUF9BUkdTKHBpZCwgbmFt ZSwgdHJhY2VfYmVnaW4pLAorCVRQX1NUUlVDVF9fZW50cnkoCisJCQlfX2ZpZWxkKGludCwgcGlk KQorCQkJX19zdHJpbmcodHJhY2VfbmFtZSwgbmFtZSkKKwkJCV9fZmllbGQoYm9vbCwgdHJhY2Vf YmVnaW4pCisJKSwKKwlUUF9mYXN0X2Fzc2lnbigKKwkJCV9fZW50cnktPnBpZCA9IHBpZDsKKwkJ CV9fYXNzaWduX3N0cih0cmFjZV9uYW1lLCBuYW1lKTsKKwkJCV9fZW50cnktPnRyYWNlX2JlZ2lu ID0gdHJhY2VfYmVnaW47CisJKSwKKwlUUF9wcmludGsoIiVzfCVkfCVzIiwgX19lbnRyeS0+dHJh Y2VfYmVnaW4gPyAiQiIgOiAiRSIsCisJCV9fZW50cnktPnBpZCwgX19nZXRfc3RyKHRyYWNlX25h bWUpKQorKQorCitUUkFDRV9FVkVOVChkcHVfdHJhY2VfY291bnRlciwKKwlUUF9QUk9UTyhpbnQg cGlkLCBjaGFyICpuYW1lLCBpbnQgdmFsdWUpLAorCVRQX0FSR1MocGlkLCBuYW1lLCB2YWx1ZSks CisJVFBfU1RSVUNUX19lbnRyeSgKKwkJCV9fZmllbGQoaW50LCBwaWQpCisJCQlfX3N0cmluZyhj b3VudGVyX25hbWUsIG5hbWUpCisJCQlfX2ZpZWxkKGludCwgdmFsdWUpCisJKSwKKwlUUF9mYXN0 X2Fzc2lnbigKKwkJCV9fZW50cnktPnBpZCA9IGN1cnJlbnQtPnRnaWQ7CisJCQlfX2Fzc2lnbl9z dHIoY291bnRlcl9uYW1lLCBuYW1lKTsKKwkJCV9fZW50cnktPnZhbHVlID0gdmFsdWU7CisJKSwK KwlUUF9wcmludGsoIiVkfCVzfCVkIiwgX19lbnRyeS0+cGlkLAorCQkJX19nZXRfc3RyKGNvdW50 ZXJfbmFtZSksIF9fZW50cnktPnZhbHVlKQorKQorCitUUkFDRV9FVkVOVChkcHVfcGVyZl9jcnRj X3VwZGF0ZSwKKwlUUF9QUk9UTyh1MzIgY3J0YywgdTY0IGJ3X2N0bF9tbm9jLCB1NjQgYndfY3Rs X2xsY2MsCisJCQl1NjQgYndfY3RsX2ViaSwgdTMyIGNvcmVfY2xrX3JhdGUsCisJCQlib29sIHN0 b3BfcmVxLCB1MzIgdXBkYXRlX2J1cywgdTMyIHVwZGF0ZV9jbGspLAorCVRQX0FSR1MoY3J0Yywg YndfY3RsX21ub2MsIGJ3X2N0bF9sbGNjLCBid19jdGxfZWJpLCBjb3JlX2Nsa19yYXRlLAorCQlz dG9wX3JlcSwgdXBkYXRlX2J1cywgdXBkYXRlX2NsayksCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJ CV9fZmllbGQodTMyLCBjcnRjKQorCQkJX19maWVsZCh1NjQsIGJ3X2N0bF9tbm9jKQorCQkJX19m aWVsZCh1NjQsIGJ3X2N0bF9sbGNjKQorCQkJX19maWVsZCh1NjQsIGJ3X2N0bF9lYmkpCisJCQlf X2ZpZWxkKHUzMiwgY29yZV9jbGtfcmF0ZSkKKwkJCV9fZmllbGQoYm9vbCwgc3RvcF9yZXEpCisJ CQlfX2ZpZWxkKHUzMiwgdXBkYXRlX2J1cykKKwkJCV9fZmllbGQodTMyLCB1cGRhdGVfY2xrKQor CSksCisJVFBfZmFzdF9hc3NpZ24oCisJCQlfX2VudHJ5LT5jcnRjID0gY3J0YzsKKwkJCV9fZW50 cnktPmJ3X2N0bF9tbm9jID0gYndfY3RsX21ub2M7CisJCQlfX2VudHJ5LT5id19jdGxfbGxjYyA9 IGJ3X2N0bF9sbGNjOworCQkJX19lbnRyeS0+YndfY3RsX2ViaSA9IGJ3X2N0bF9lYmk7CisJCQlf X2VudHJ5LT5jb3JlX2Nsa19yYXRlID0gY29yZV9jbGtfcmF0ZTsKKwkJCV9fZW50cnktPnN0b3Bf cmVxID0gc3RvcF9yZXE7CisJCQlfX2VudHJ5LT51cGRhdGVfYnVzID0gdXBkYXRlX2J1czsKKwkJ CV9fZW50cnktPnVwZGF0ZV9jbGsgPSB1cGRhdGVfY2xrOworCSksCisJIFRQX3ByaW50aygKKwkJ ImNydGM9JWQgYndfbW5vYz0lbGx1IGJ3X2xsY2M9JWxsdSBid19lYmk9JWxsdSBjbGtfcmF0ZT0l dSBzdG9wX3JlcT0lZCB1X2J1cz0lZCB1X2Nsaz0lZCIsCisJCQlfX2VudHJ5LT5jcnRjLAorCQkJ X19lbnRyeS0+YndfY3RsX21ub2MsCisJCQlfX2VudHJ5LT5id19jdGxfbGxjYywKKwkJCV9fZW50 cnktPmJ3X2N0bF9lYmksCisJCQlfX2VudHJ5LT5jb3JlX2Nsa19yYXRlLAorCQkJX19lbnRyeS0+ c3RvcF9yZXEsCisJCQlfX2VudHJ5LT51cGRhdGVfYnVzLAorCQkJX19lbnRyeS0+dXBkYXRlX2Ns aykKKyk7CisKK0RFQ0xBUkVfRVZFTlRfQ0xBU1MoZHB1X2VuY19pcnFfdGVtcGxhdGUsCisJVFBf UFJPVE8odWludDMyX3QgZHJtX2lkLCBlbnVtIGRwdV9pbnRyX2lkeCBpbnRyX2lkeCwgaW50IGh3 X2lkeCwKKwkJIGludCBpcnFfaWR4KSwKKwlUUF9BUkdTKGRybV9pZCwgaW50cl9pZHgsIGh3X2lk eCwgaXJxX2lkeCksCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJdWludDMyX3QsCQlk cm1faWQJCSkKKwkJX19maWVsZCgJZW51bSBkcHVfaW50cl9pZHgsCWludHJfaWR4CSkKKwkJX19m aWVsZCgJaW50LAkJCWh3X2lkeAkJKQorCQlfX2ZpZWxkKAlpbnQsCQkJaXJxX2lkeAkJKQorCSks CisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmRybV9pZCA9IGRybV9pZDsKKwkJX19lbnRy eS0+aW50cl9pZHggPSBpbnRyX2lkeDsKKwkJX19lbnRyeS0+aHdfaWR4ID0gaHdfaWR4OworCQlf X2VudHJ5LT5pcnFfaWR4ID0gaXJxX2lkeDsKKwkpLAorCVRQX3ByaW50aygiaWQ9JXUsIGludHI9 JWQsIGh3PSVkLCBpcnE9JWQiLAorCQkgIF9fZW50cnktPmRybV9pZCwgX19lbnRyeS0+aW50cl9p ZHgsIF9fZW50cnktPmh3X2lkeCwKKwkJICBfX2VudHJ5LT5pcnFfaWR4KQorKTsKK0RFRklORV9F VkVOVChkcHVfZW5jX2lycV90ZW1wbGF0ZSwgZHB1X2VuY19pcnFfcmVnaXN0ZXJfc3VjY2VzcywK KwlUUF9QUk9UTyh1aW50MzJfdCBkcm1faWQsIGVudW0gZHB1X2ludHJfaWR4IGludHJfaWR4LCBp bnQgaHdfaWR4LAorCQkgaW50IGlycV9pZHgpLAorCVRQX0FSR1MoZHJtX2lkLCBpbnRyX2lkeCwg aHdfaWR4LCBpcnFfaWR4KQorKTsKK0RFRklORV9FVkVOVChkcHVfZW5jX2lycV90ZW1wbGF0ZSwg ZHB1X2VuY19pcnFfdW5yZWdpc3Rlcl9zdWNjZXNzLAorCVRQX1BST1RPKHVpbnQzMl90IGRybV9p ZCwgZW51bSBkcHVfaW50cl9pZHggaW50cl9pZHgsIGludCBod19pZHgsCisJCSBpbnQgaXJxX2lk eCksCisJVFBfQVJHUyhkcm1faWQsIGludHJfaWR4LCBod19pZHgsIGlycV9pZHgpCispOworCitU UkFDRV9FVkVOVChkcHVfZW5jX2lycV93YWl0X3N1Y2Nlc3MsCisJVFBfUFJPVE8odWludDMyX3Qg ZHJtX2lkLCBlbnVtIGRwdV9pbnRyX2lkeCBpbnRyX2lkeCwgaW50IGh3X2lkeCwKKwkJIGludCBp cnFfaWR4LCBlbnVtIGRwdV9waW5ncG9uZyBwcF9pZHgsIGludCBhdG9taWNfY250KSwKKwlUUF9B UkdTKGRybV9pZCwgaW50cl9pZHgsIGh3X2lkeCwgaXJxX2lkeCwgcHBfaWR4LCBhdG9taWNfY250 KSwKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAl1aW50MzJfdCwJCWRybV9pZAkJKQor CQlfX2ZpZWxkKAllbnVtIGRwdV9pbnRyX2lkeCwJaW50cl9pZHgJKQorCQlfX2ZpZWxkKAlpbnQs CQkJaHdfaWR4CQkpCisJCV9fZmllbGQoCWludCwJCQlpcnFfaWR4CQkpCisJCV9fZmllbGQoCWVu dW0gZHB1X3Bpbmdwb25nLAlwcF9pZHgJCSkKKwkJX19maWVsZCgJaW50LAkJCWF0b21pY19jbnQJ KQorCSksCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmRybV9pZCA9IGRybV9pZDsKKwkJ X19lbnRyeS0+aW50cl9pZHggPSBpbnRyX2lkeDsKKwkJX19lbnRyeS0+aHdfaWR4ID0gaHdfaWR4 OworCQlfX2VudHJ5LT5pcnFfaWR4ID0gaXJxX2lkeDsKKwkJX19lbnRyeS0+cHBfaWR4ID0gcHBf aWR4OworCQlfX2VudHJ5LT5hdG9taWNfY250ID0gYXRvbWljX2NudDsKKwkpLAorCVRQX3ByaW50 aygiaWQ9JXUsIGludHI9JWQsIGh3PSVkLCBpcnE9JWQsIHBwPSVkLCBhdG9taWNfY250PSVkIiwK KwkJICBfX2VudHJ5LT5kcm1faWQsIF9fZW50cnktPmludHJfaWR4LCBfX2VudHJ5LT5od19pZHgs CisJCSAgX19lbnRyeS0+aXJxX2lkeCwgX19lbnRyeS0+cHBfaWR4LCBfX2VudHJ5LT5hdG9taWNf Y250KQorKTsKKworREVDTEFSRV9FVkVOVF9DTEFTUyhkcHVfZHJtX29ial90ZW1wbGF0ZSwKKwlU UF9QUk9UTyh1aW50MzJfdCBkcm1faWQpLAorCVRQX0FSR1MoZHJtX2lkKSwKKwlUUF9TVFJVQ1Rf X2VudHJ5KAorCQlfX2ZpZWxkKAl1aW50MzJfdCwJCWRybV9pZAkJKQorCSksCisJVFBfZmFzdF9h c3NpZ24oCisJCV9fZW50cnktPmRybV9pZCA9IGRybV9pZDsKKwkpLAorCVRQX3ByaW50aygiaWQ9 JXUiLCBfX2VudHJ5LT5kcm1faWQpCispOworREVGSU5FX0VWRU5UKGRwdV9kcm1fb2JqX3RlbXBs YXRlLCBkcHVfZW5jX2F0b21pY19jaGVjaywKKwlUUF9QUk9UTyh1aW50MzJfdCBkcm1faWQpLAor CVRQX0FSR1MoZHJtX2lkKQorKTsKK0RFRklORV9FVkVOVChkcHVfZHJtX29ial90ZW1wbGF0ZSwg ZHB1X2VuY19tb2RlX3NldCwKKwlUUF9QUk9UTyh1aW50MzJfdCBkcm1faWQpLAorCVRQX0FSR1Mo ZHJtX2lkKQorKTsKK0RFRklORV9FVkVOVChkcHVfZHJtX29ial90ZW1wbGF0ZSwgZHB1X2VuY19k aXNhYmxlLAorCVRQX1BST1RPKHVpbnQzMl90IGRybV9pZCksCisJVFBfQVJHUyhkcm1faWQpCisp OworREVGSU5FX0VWRU5UKGRwdV9kcm1fb2JqX3RlbXBsYXRlLCBkcHVfZW5jX2tpY2tvZmYsCisJ VFBfUFJPVE8odWludDMyX3QgZHJtX2lkKSwKKwlUUF9BUkdTKGRybV9pZCkKKyk7CitERUZJTkVf RVZFTlQoZHB1X2RybV9vYmpfdGVtcGxhdGUsIGRwdV9lbmNfcHJlcGFyZV9raWNrb2ZmLAorCVRQ X1BST1RPKHVpbnQzMl90IGRybV9pZCksCisJVFBfQVJHUyhkcm1faWQpCispOworREVGSU5FX0VW RU5UKGRwdV9kcm1fb2JqX3RlbXBsYXRlLCBkcHVfZW5jX3ByZXBhcmVfa2lja29mZl9yZXNldCwK KwlUUF9QUk9UTyh1aW50MzJfdCBkcm1faWQpLAorCVRQX0FSR1MoZHJtX2lkKQorKTsKK0RFRklO RV9FVkVOVChkcHVfZHJtX29ial90ZW1wbGF0ZSwgZHB1X2NydGNfY29tcGxldGVfZmxpcCwKKwlU UF9QUk9UTyh1aW50MzJfdCBkcm1faWQpLAorCVRQX0FSR1MoZHJtX2lkKQorKTsKK0RFRklORV9F VkVOVChkcHVfZHJtX29ial90ZW1wbGF0ZSwgZHB1X2NydGNfdmJsYW5rX2NiLAorCVRQX1BST1RP KHVpbnQzMl90IGRybV9pZCksCisJVFBfQVJHUyhkcm1faWQpCispOworREVGSU5FX0VWRU5UKGRw dV9kcm1fb2JqX3RlbXBsYXRlLCBkcHVfY3J0Y19jb21wbGV0ZV9jb21taXQsCisJVFBfUFJPVE8o dWludDMyX3QgZHJtX2lkKSwKKwlUUF9BUkdTKGRybV9pZCkKKyk7CitERUZJTkVfRVZFTlQoZHB1 X2RybV9vYmpfdGVtcGxhdGUsIGRwdV9rbXNfZW5jX2VuYWJsZSwKKwlUUF9QUk9UTyh1aW50MzJf dCBkcm1faWQpLAorCVRQX0FSR1MoZHJtX2lkKQorKTsKK0RFRklORV9FVkVOVChkcHVfZHJtX29i al90ZW1wbGF0ZSwgZHB1X2ttc19jb21taXQsCisJVFBfUFJPVE8odWludDMyX3QgZHJtX2lkKSwK KwlUUF9BUkdTKGRybV9pZCkKKyk7CitERUZJTkVfRVZFTlQoZHB1X2RybV9vYmpfdGVtcGxhdGUs IGRwdV9rbXNfd2FpdF9mb3JfY29tbWl0X2RvbmUsCisJVFBfUFJPVE8odWludDMyX3QgZHJtX2lk KSwKKwlUUF9BUkdTKGRybV9pZCkKKyk7CisKK1RSQUNFX0VWRU5UKGRwdV9lbmNfZW5hYmxlLAor CVRQX1BST1RPKHVpbnQzMl90IGRybV9pZCwgaW50IGhkaXNwbGF5LCBpbnQgdmRpc3BsYXkpLAor CVRQX0FSR1MoZHJtX2lkLCBoZGlzcGxheSwgdmRpc3BsYXkpLAorCVRQX1NUUlVDVF9fZW50cnko CisJCV9fZmllbGQoCXVpbnQzMl90LAkJZHJtX2lkCQkpCisJCV9fZmllbGQoCWludCwJCQloZGlz cGxheQkpCisJCV9fZmllbGQoCWludCwJCQl2ZGlzcGxheQkpCisJKSwKKwlUUF9mYXN0X2Fzc2ln bigKKwkJX19lbnRyeS0+ZHJtX2lkID0gZHJtX2lkOworCQlfX2VudHJ5LT5oZGlzcGxheSA9IGhk aXNwbGF5OworCQlfX2VudHJ5LT52ZGlzcGxheSA9IHZkaXNwbGF5OworCSksCisJVFBfcHJpbnRr KCJpZD0ldSwgbW9kZT0lZHglZCIsCisJCSAgX19lbnRyeS0+ZHJtX2lkLCBfX2VudHJ5LT5oZGlz cGxheSwgX19lbnRyeS0+dmRpc3BsYXkpCispOworCitERUNMQVJFX0VWRU5UX0NMQVNTKGRwdV9l bmNfa2V5dmFsX3RlbXBsYXRlLAorCVRQX1BST1RPKHVpbnQzMl90IGRybV9pZCwgaW50IHZhbCks CisJVFBfQVJHUyhkcm1faWQsIHZhbCksCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJ dWludDMyX3QsCWRybV9pZAkpCisJCV9fZmllbGQoCWludCwJCXZhbAkpCisJKSwKKwlUUF9mYXN0 X2Fzc2lnbigKKwkJX19lbnRyeS0+ZHJtX2lkID0gZHJtX2lkOworCQlfX2VudHJ5LT52YWwgPSB2 YWw7CisJKSwKKwlUUF9wcmludGsoImlkPSV1LCB2YWw9JWQiLCBfX2VudHJ5LT5kcm1faWQsIF9f ZW50cnktPnZhbCkKKyk7CitERUZJTkVfRVZFTlQoZHB1X2VuY19rZXl2YWxfdGVtcGxhdGUsIGRw dV9lbmNfdW5kZXJydW5fY2IsCisJVFBfUFJPVE8odWludDMyX3QgZHJtX2lkLCBpbnQgY291bnQp LAorCVRQX0FSR1MoZHJtX2lkLCBjb3VudCkKKyk7CitERUZJTkVfRVZFTlQoZHB1X2VuY19rZXl2 YWxfdGVtcGxhdGUsIGRwdV9lbmNfdHJpZ2dlcl9zdGFydCwKKwlUUF9QUk9UTyh1aW50MzJfdCBk cm1faWQsIGludCBjdGxfaWR4KSwKKwlUUF9BUkdTKGRybV9pZCwgY3RsX2lkeCkKKyk7CisKK1RS QUNFX0VWRU5UKGRwdV9lbmNfYXRvbWljX2NoZWNrX2ZsYWdzLAorCVRQX1BST1RPKHVpbnQzMl90 IGRybV9pZCwgdW5zaWduZWQgaW50IGZsYWdzLCBpbnQgcHJpdmF0ZV9mbGFncyksCisJVFBfQVJH Uyhkcm1faWQsIGZsYWdzLCBwcml2YXRlX2ZsYWdzKSwKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlf X2ZpZWxkKAl1aW50MzJfdCwJCWRybV9pZAkJKQorCQlfX2ZpZWxkKAl1bnNpZ25lZCBpbnQsCQlm bGFncwkJKQorCQlfX2ZpZWxkKAlpbnQsCQkJcHJpdmF0ZV9mbGFncwkpCisJKSwKKwlUUF9mYXN0 X2Fzc2lnbigKKwkJX19lbnRyeS0+ZHJtX2lkID0gZHJtX2lkOworCQlfX2VudHJ5LT5mbGFncyA9 IGZsYWdzOworCQlfX2VudHJ5LT5wcml2YXRlX2ZsYWdzID0gcHJpdmF0ZV9mbGFnczsKKwkpLAor CVRQX3ByaW50aygiaWQ9JXUsIGZsYWdzPSV1LCBwcml2YXRlX2ZsYWdzPSVkIiwKKwkJICBfX2Vu dHJ5LT5kcm1faWQsIF9fZW50cnktPmZsYWdzLCBfX2VudHJ5LT5wcml2YXRlX2ZsYWdzKQorKTsK KworREVDTEFSRV9FVkVOVF9DTEFTUyhkcHVfZW5jX2lkX2VuYWJsZV90ZW1wbGF0ZSwKKwlUUF9Q Uk9UTyh1aW50MzJfdCBkcm1faWQsIGJvb2wgZW5hYmxlKSwKKwlUUF9BUkdTKGRybV9pZCwgZW5h YmxlKSwKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAl1aW50MzJfdCwJCWRybV9pZAkJ KQorCQlfX2ZpZWxkKAlib29sLAkJCWVuYWJsZQkJKQorCSksCisJVFBfZmFzdF9hc3NpZ24oCisJ CV9fZW50cnktPmRybV9pZCA9IGRybV9pZDsKKwkJX19lbnRyeS0+ZW5hYmxlID0gZW5hYmxlOwor CSksCisJVFBfcHJpbnRrKCJpZD0ldSwgZW5hYmxlPSVzIiwKKwkJICBfX2VudHJ5LT5kcm1faWQs IF9fZW50cnktPmVuYWJsZSA/ICJ0cnVlIiA6ICJmYWxzZSIpCispOworREVGSU5FX0VWRU5UKGRw dV9lbmNfaWRfZW5hYmxlX3RlbXBsYXRlLCBkcHVfZW5jX3JjX2hlbHBlciwKKwlUUF9QUk9UTyh1 aW50MzJfdCBkcm1faWQsIGJvb2wgZW5hYmxlKSwKKwlUUF9BUkdTKGRybV9pZCwgZW5hYmxlKQor KTsKK0RFRklORV9FVkVOVChkcHVfZW5jX2lkX2VuYWJsZV90ZW1wbGF0ZSwgZHB1X2VuY192Ymxh bmtfY2IsCisJVFBfUFJPVE8odWludDMyX3QgZHJtX2lkLCBib29sIGVuYWJsZSksCisJVFBfQVJH Uyhkcm1faWQsIGVuYWJsZSkKKyk7CitERUZJTkVfRVZFTlQoZHB1X2VuY19pZF9lbmFibGVfdGVt cGxhdGUsIGRwdV9lbmNfZnJhbWVfZXZlbnRfY2IsCisJVFBfUFJPVE8odWludDMyX3QgZHJtX2lk LCBib29sIGVuYWJsZSksCisJVFBfQVJHUyhkcm1faWQsIGVuYWJsZSkKKyk7CitERUZJTkVfRVZF TlQoZHB1X2VuY19pZF9lbmFibGVfdGVtcGxhdGUsIGRwdV9lbmNfcGh5c19jbWRfY29ubmVjdF90 ZSwKKwlUUF9QUk9UTyh1aW50MzJfdCBkcm1faWQsIGJvb2wgZW5hYmxlKSwKKwlUUF9BUkdTKGRy bV9pZCwgZW5hYmxlKQorKTsKKworVFJBQ0VfRVZFTlQoZHB1X2VuY19yYywKKwlUUF9QUk9UTyh1 aW50MzJfdCBkcm1faWQsIHUzMiBzd19ldmVudCwgYm9vbCBpZGxlX3BjX3N1cHBvcnRlZCwKKwkJ IGludCByY19zdGF0ZSwgY29uc3QgY2hhciAqc3RhZ2UpLAorCVRQX0FSR1MoZHJtX2lkLCBzd19l dmVudCwgaWRsZV9wY19zdXBwb3J0ZWQsIHJjX3N0YXRlLCBzdGFnZSksCisJVFBfU1RSVUNUX19l bnRyeSgKKwkJX19maWVsZCgJdWludDMyX3QsCWRybV9pZAkJCSkKKwkJX19maWVsZCgJdTMyLAkJ c3dfZXZlbnQJCSkKKwkJX19maWVsZCgJYm9vbCwJCWlkbGVfcGNfc3VwcG9ydGVkCSkKKwkJX19m aWVsZCgJaW50LAkJcmNfc3RhdGUJCSkKKwkJX19zdHJpbmcoCXN0YWdlX3N0ciwJc3RhZ2UJCQkp CisJKSwKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+ZHJtX2lkID0gZHJtX2lkOworCQlf X2VudHJ5LT5zd19ldmVudCA9IHN3X2V2ZW50OworCQlfX2VudHJ5LT5pZGxlX3BjX3N1cHBvcnRl ZCA9IGlkbGVfcGNfc3VwcG9ydGVkOworCQlfX2VudHJ5LT5yY19zdGF0ZSA9IHJjX3N0YXRlOwor CQlfX2Fzc2lnbl9zdHIoc3RhZ2Vfc3RyLCBzdGFnZSk7CisJKSwKKwlUUF9wcmludGsoIiVzOiBp ZDoldSwgc3dfZXZlbnQ6JWQsIGlkbGVfcGNfc3VwcG9ydGVkOiVzLCByY19zdGF0ZTolZFxuIiwK KwkJICBfX2dldF9zdHIoc3RhZ2Vfc3RyKSwgX19lbnRyeS0+ZHJtX2lkLCBfX2VudHJ5LT5zd19l dmVudCwKKwkJICBfX2VudHJ5LT5pZGxlX3BjX3N1cHBvcnRlZCA/ICJ0cnVlIiA6ICJmYWxzZSIs CisJCSAgX19lbnRyeS0+cmNfc3RhdGUpCispOworCitUUkFDRV9FVkVOVChkcHVfZW5jX2ZyYW1l X2RvbmVfY2Jfbm90X2J1c3ksCisJVFBfUFJPVE8odWludDMyX3QgZHJtX2lkLCB1MzIgZXZlbnQs IGVudW0gZHB1X2ludGYgaW50Zl9pZHgpLAorCVRQX0FSR1MoZHJtX2lkLCBldmVudCwgaW50Zl9p ZHgpLAorCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCXVpbnQzMl90LAlkcm1faWQJCSkK KwkJX19maWVsZCgJdTMyLAkJZXZlbnQJCSkKKwkJX19maWVsZCgJZW51bSBkcHVfaW50ZiwJaW50 Zl9pZHgJKQorCSksCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmRybV9pZCA9IGRybV9p ZDsKKwkJX19lbnRyeS0+ZXZlbnQgPSBldmVudDsKKwkJX19lbnRyeS0+aW50Zl9pZHggPSBpbnRm X2lkeDsKKwkpLAorCVRQX3ByaW50aygiaWQ9JXUsIGV2ZW50PSV1LCBpbnRmPSVkIiwgX19lbnRy eS0+ZHJtX2lkLCBfX2VudHJ5LT5ldmVudCwKKwkJICBfX2VudHJ5LT5pbnRmX2lkeCkKKyk7CisK K1RSQUNFX0VWRU5UKGRwdV9lbmNfZnJhbWVfZG9uZV9jYiwKKwlUUF9QUk9UTyh1aW50MzJfdCBk cm1faWQsIHVuc2lnbmVkIGludCBpZHgsCisJCSB1bnNpZ25lZCBsb25nIGZyYW1lX2J1c3lfbWFz ayksCisJVFBfQVJHUyhkcm1faWQsIGlkeCwgZnJhbWVfYnVzeV9tYXNrKSwKKwlUUF9TVFJVQ1Rf X2VudHJ5KAorCQlfX2ZpZWxkKAl1aW50MzJfdCwJCWRybV9pZAkJKQorCQlfX2ZpZWxkKAl1bnNp Z25lZCBpbnQsCQlpZHgJCSkKKwkJX19maWVsZCgJdW5zaWduZWQgbG9uZywJCWZyYW1lX2J1c3lf bWFzawkpCisJKSwKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+ZHJtX2lkID0gZHJtX2lk OworCQlfX2VudHJ5LT5pZHggPSBpZHg7CisJCV9fZW50cnktPmZyYW1lX2J1c3lfbWFzayA9IGZy YW1lX2J1c3lfbWFzazsKKwkpLAorCVRQX3ByaW50aygiaWQ9JXUsIGlkeD0ldSwgZnJhbWVfYnVz eV9tYXNrPSVseCIsIF9fZW50cnktPmRybV9pZCwKKwkJICBfX2VudHJ5LT5pZHgsIF9fZW50cnkt PmZyYW1lX2J1c3lfbWFzaykKKyk7CisKK1RSQUNFX0VWRU5UKGRwdV9lbmNfdHJpZ2dlcl9mbHVz aCwKKwlUUF9QUk9UTyh1aW50MzJfdCBkcm1faWQsIGVudW0gZHB1X2ludGYgaW50Zl9pZHgsCisJ CSBpbnQgcGVuZGluZ19raWNrb2ZmX2NudCwgaW50IGN0bF9pZHgsIHUzMiBwZW5kaW5nX2ZsdXNo X3JldCksCisJVFBfQVJHUyhkcm1faWQsIGludGZfaWR4LCBwZW5kaW5nX2tpY2tvZmZfY250LCBj dGxfaWR4LAorCQlwZW5kaW5nX2ZsdXNoX3JldCksCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19m aWVsZCgJdWludDMyX3QsCWRybV9pZAkJCSkKKwkJX19maWVsZCgJZW51bSBkcHVfaW50ZiwJaW50 Zl9pZHgJCSkKKwkJX19maWVsZCgJaW50LAkJcGVuZGluZ19raWNrb2ZmX2NudAkpCisJCV9fZmll bGQoCWludCwJCWN0bF9pZHgJCQkpCisJCV9fZmllbGQoCXUzMiwJCXBlbmRpbmdfZmx1c2hfcmV0 CSkKKwkpLAorCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5kcm1faWQgPSBkcm1faWQ7CisJ CV9fZW50cnktPmludGZfaWR4ID0gaW50Zl9pZHg7CisJCV9fZW50cnktPnBlbmRpbmdfa2lja29m Zl9jbnQgPSBwZW5kaW5nX2tpY2tvZmZfY250OworCQlfX2VudHJ5LT5jdGxfaWR4ID0gY3RsX2lk eDsKKwkJX19lbnRyeS0+cGVuZGluZ19mbHVzaF9yZXQgPSBwZW5kaW5nX2ZsdXNoX3JldDsKKwkp LAorCVRQX3ByaW50aygiaWQ9JXUsIGludGZfaWR4PSVkLCBwZW5kaW5nX2tpY2tvZmZfY250PSVk IGN0bF9pZHg9JWQgIgorCQkgICJwZW5kaW5nX2ZsdXNoX3JldD0ldSIsIF9fZW50cnktPmRybV9p ZCwKKwkJICBfX2VudHJ5LT5pbnRmX2lkeCwgX19lbnRyeS0+cGVuZGluZ19raWNrb2ZmX2NudCwK KwkJICBfX2VudHJ5LT5jdGxfaWR4LCBfX2VudHJ5LT5wZW5kaW5nX2ZsdXNoX3JldCkKKyk7CisK K0RFQ0xBUkVfRVZFTlRfQ0xBU1MoZHB1X2VuY19rdGltZV90ZW1wbGF0ZSwKKwlUUF9QUk9UTyh1 aW50MzJfdCBkcm1faWQsIGt0aW1lX3QgdGltZSksCisJVFBfQVJHUyhkcm1faWQsIHRpbWUpLAor CVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCXVpbnQzMl90LAlkcm1faWQJKQorCQlfX2Zp ZWxkKAlrdGltZV90LAl0aW1lCSkKKwkpLAorCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5k cm1faWQgPSBkcm1faWQ7CisJCV9fZW50cnktPnRpbWUgPSB0aW1lOworCSksCisJVFBfcHJpbnRr KCJpZD0ldSwgdGltZT0lbGxkIiwgX19lbnRyeS0+ZHJtX2lkLAorCQkgIGt0aW1lX3RvX21zKF9f ZW50cnktPnRpbWUpKQorKTsKK0RFRklORV9FVkVOVChkcHVfZW5jX2t0aW1lX3RlbXBsYXRlLCBk cHVfZW5jX3ZzeW5jX2V2ZW50X3dvcmssCisJVFBfUFJPVE8odWludDMyX3QgZHJtX2lkLCBrdGlt ZV90IHRpbWUpLAorCVRQX0FSR1MoZHJtX2lkLCB0aW1lKQorKTsKK0RFRklORV9FVkVOVChkcHVf ZW5jX2t0aW1lX3RlbXBsYXRlLCBkcHVfZW5jX2Vhcmx5X2tpY2tvZmYsCisJVFBfUFJPVE8odWlu dDMyX3QgZHJtX2lkLCBrdGltZV90IHRpbWUpLAorCVRQX0FSR1MoZHJtX2lkLCB0aW1lKQorKTsK KworREVDTEFSRV9FVkVOVF9DTEFTUyhkcHVfaWRfZXZlbnRfdGVtcGxhdGUsCisJVFBfUFJPVE8o dWludDMyX3QgZHJtX2lkLCB1MzIgZXZlbnQpLAorCVRQX0FSR1MoZHJtX2lkLCBldmVudCksCisJ VFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJdWludDMyX3QsCWRybV9pZAkpCisJCV9fZmll bGQoCXUzMiwJCWV2ZW50CSkKKwkpLAorCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5kcm1f aWQgPSBkcm1faWQ7CisJCV9fZW50cnktPmV2ZW50ID0gZXZlbnQ7CisJKSwKKwlUUF9wcmludGso ImlkPSV1LCBldmVudD0ldSIsIF9fZW50cnktPmRybV9pZCwgX19lbnRyeS0+ZXZlbnQpCispOwor REVGSU5FX0VWRU5UKGRwdV9pZF9ldmVudF90ZW1wbGF0ZSwgZHB1X2VuY19mcmFtZV9kb25lX3Rp bWVvdXQsCisJVFBfUFJPVE8odWludDMyX3QgZHJtX2lkLCB1MzIgZXZlbnQpLAorCVRQX0FSR1Mo ZHJtX2lkLCBldmVudCkKKyk7CitERUZJTkVfRVZFTlQoZHB1X2lkX2V2ZW50X3RlbXBsYXRlLCBk cHVfY3J0Y19mcmFtZV9ldmVudF9jYiwKKwlUUF9QUk9UTyh1aW50MzJfdCBkcm1faWQsIHUzMiBl dmVudCksCisJVFBfQVJHUyhkcm1faWQsIGV2ZW50KQorKTsKK0RFRklORV9FVkVOVChkcHVfaWRf ZXZlbnRfdGVtcGxhdGUsIGRwdV9jcnRjX2hhbmRsZV9wb3dlcl9ldmVudCwKKwlUUF9QUk9UTyh1 aW50MzJfdCBkcm1faWQsIHUzMiBldmVudCksCisJVFBfQVJHUyhkcm1faWQsIGV2ZW50KQorKTsK K0RFRklORV9FVkVOVChkcHVfaWRfZXZlbnRfdGVtcGxhdGUsIGRwdV9jcnRjX2ZyYW1lX2V2ZW50 X2RvbmUsCisJVFBfUFJPVE8odWludDMyX3QgZHJtX2lkLCB1MzIgZXZlbnQpLAorCVRQX0FSR1Mo ZHJtX2lkLCBldmVudCkKKyk7CitERUZJTkVfRVZFTlQoZHB1X2lkX2V2ZW50X3RlbXBsYXRlLCBk cHVfY3J0Y19mcmFtZV9ldmVudF9tb3JlX3BlbmRpbmcsCisJVFBfUFJPVE8odWludDMyX3QgZHJt X2lkLCB1MzIgZXZlbnQpLAorCVRQX0FSR1MoZHJtX2lkLCBldmVudCkKKyk7CisKK1RSQUNFX0VW RU5UKGRwdV9lbmNfd2FpdF9ldmVudF90aW1lb3V0LAorCVRQX1BST1RPKHVpbnQzMl90IGRybV9p ZCwgaW50MzJfdCBod19pZCwgaW50IHJjLCBzNjQgdGltZSwKKwkJIHM2NCBleHBlY3RlZF90aW1l LCBpbnQgYXRvbWljX2NudCksCisJVFBfQVJHUyhkcm1faWQsIGh3X2lkLCByYywgdGltZSwgZXhw ZWN0ZWRfdGltZSwgYXRvbWljX2NudCksCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJ dWludDMyX3QsCWRybV9pZAkJKQorCQlfX2ZpZWxkKAlpbnQzMl90LAlod19pZAkJKQorCQlfX2Zp ZWxkKAlpbnQsCQlyYwkJKQorCQlfX2ZpZWxkKAlzNjQsCQl0aW1lCQkpCisJCV9fZmllbGQoCXM2 NCwJCWV4cGVjdGVkX3RpbWUJKQorCQlfX2ZpZWxkKAlpbnQsCQlhdG9taWNfY250CSkKKwkpLAor CVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5kcm1faWQgPSBkcm1faWQ7CisJCV9fZW50cnkt Pmh3X2lkID0gaHdfaWQ7CisJCV9fZW50cnktPnJjID0gcmM7CisJCV9fZW50cnktPnRpbWUgPSB0 aW1lOworCQlfX2VudHJ5LT5leHBlY3RlZF90aW1lID0gZXhwZWN0ZWRfdGltZTsKKwkJX19lbnRy eS0+YXRvbWljX2NudCA9IGF0b21pY19jbnQ7CisJKSwKKwlUUF9wcmludGsoImlkPSV1LCBod19p ZD0lZCwgcmM9JWQsIHRpbWU9JWxsZCwgZXhwZWN0ZWQ9JWxsZCBjbnQ9JWQiLAorCQkgIF9fZW50 cnktPmRybV9pZCwgX19lbnRyeS0+aHdfaWQsIF9fZW50cnktPnJjLCBfX2VudHJ5LT50aW1lLAor CQkgIF9fZW50cnktPmV4cGVjdGVkX3RpbWUsIF9fZW50cnktPmF0b21pY19jbnQpCispOworCitU UkFDRV9FVkVOVChkcHVfZW5jX3BoeXNfY21kX2lycV9jdHJsLAorCVRQX1BST1RPKHVpbnQzMl90 IGRybV9pZCwgZW51bSBkcHVfcGluZ3BvbmcgcHAsIGJvb2wgZW5hYmxlLAorCQkgaW50IHJlZmNu dCksCisJVFBfQVJHUyhkcm1faWQsIHBwLCBlbmFibGUsIHJlZmNudCksCisJVFBfU1RSVUNUX19l bnRyeSgKKwkJX19maWVsZCgJdWludDMyX3QsCQlkcm1faWQJKQorCQlfX2ZpZWxkKAllbnVtIGRw dV9waW5ncG9uZywJcHAJKQorCQlfX2ZpZWxkKAlib29sLAkJCWVuYWJsZQkpCisJCV9fZmllbGQo CWludCwJCQlyZWZjbnQJKQorCSksCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmRybV9p ZCA9IGRybV9pZDsKKwkJX19lbnRyeS0+cHAgPSBwcDsKKwkJX19lbnRyeS0+ZW5hYmxlID0gZW5h YmxlOworCQlfX2VudHJ5LT5yZWZjbnQgPSByZWZjbnQ7CisJKSwKKwlUUF9wcmludGsoImlkPSV1 LCBwcD0lZCwgZW5hYmxlPSVzLCByZWZjbnQ9JWQiLCBfX2VudHJ5LT5kcm1faWQsCisJCSAgX19l bnRyeS0+cHAsIF9fZW50cnktPmVuYWJsZSA/ICJ0cnVlIiA6ICJmYWxzZSIsCisJCSAgX19lbnRy eS0+cmVmY250KQorKTsKKworVFJBQ0VfRVZFTlQoZHB1X2VuY19waHlzX2NtZF9wcF90eF9kb25l LAorCVRQX1BST1RPKHVpbnQzMl90IGRybV9pZCwgZW51bSBkcHVfcGluZ3BvbmcgcHAsIGludCBu ZXdfY291bnQsCisJCSB1MzIgZXZlbnQpLAorCVRQX0FSR1MoZHJtX2lkLCBwcCwgbmV3X2NvdW50 LCBldmVudCksCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJdWludDMyX3QsCQlkcm1f aWQJCSkKKwkJX19maWVsZCgJZW51bSBkcHVfcGluZ3BvbmcsCXBwCQkpCisJCV9fZmllbGQoCWlu dCwJCQluZXdfY291bnQJKQorCQlfX2ZpZWxkKAl1MzIsCQkJZXZlbnQJCSkKKwkpLAorCVRQX2Zh c3RfYXNzaWduKAorCQlfX2VudHJ5LT5kcm1faWQgPSBkcm1faWQ7CisJCV9fZW50cnktPnBwID0g cHA7CisJCV9fZW50cnktPm5ld19jb3VudCA9IG5ld19jb3VudDsKKwkJX19lbnRyeS0+ZXZlbnQg PSBldmVudDsKKwkpLAorCVRQX3ByaW50aygiaWQ9JXUsIHBwPSVkLCBuZXdfY291bnQ9JWQsIGV2 ZW50PSV1IiwgX19lbnRyeS0+ZHJtX2lkLAorCQkgIF9fZW50cnktPnBwLCBfX2VudHJ5LT5uZXdf Y291bnQsIF9fZW50cnktPmV2ZW50KQorKTsKKworVFJBQ0VfRVZFTlQoZHB1X2VuY19waHlzX2Nt ZF9wZG9uZV90aW1lb3V0LAorCVRQX1BST1RPKHVpbnQzMl90IGRybV9pZCwgZW51bSBkcHVfcGlu Z3BvbmcgcHAsIGludCB0aW1lb3V0X2NvdW50LAorCQkgaW50IGtpY2tvZmZfY291bnQsIHUzMiBl dmVudCksCisJVFBfQVJHUyhkcm1faWQsIHBwLCB0aW1lb3V0X2NvdW50LCBraWNrb2ZmX2NvdW50 LCBldmVudCksCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJdWludDMyX3QsCQlkcm1f aWQJCSkKKwkJX19maWVsZCgJZW51bSBkcHVfcGluZ3BvbmcsCXBwCQkpCisJCV9fZmllbGQoCWlu dCwJCQl0aW1lb3V0X2NvdW50CSkKKwkJX19maWVsZCgJaW50LAkJCWtpY2tvZmZfY291bnQJKQor CQlfX2ZpZWxkKAl1MzIsCQkJZXZlbnQJCSkKKwkpLAorCVRQX2Zhc3RfYXNzaWduKAorCQlfX2Vu dHJ5LT5kcm1faWQgPSBkcm1faWQ7CisJCV9fZW50cnktPnBwID0gcHA7CisJCV9fZW50cnktPnRp bWVvdXRfY291bnQgPSB0aW1lb3V0X2NvdW50OworCQlfX2VudHJ5LT5raWNrb2ZmX2NvdW50ID0g a2lja29mZl9jb3VudDsKKwkJX19lbnRyeS0+ZXZlbnQgPSBldmVudDsKKwkpLAorCVRQX3ByaW50 aygiaWQ9JXUsIHBwPSVkLCB0aW1lb3V0X2NvdW50PSVkLCBraWNrb2ZmX2NvdW50PSVkLCBldmVu dD0ldSIsCisJCSAgX19lbnRyeS0+ZHJtX2lkLCBfX2VudHJ5LT5wcCwgX19lbnRyeS0+dGltZW91 dF9jb3VudCwKKwkJICBfX2VudHJ5LT5raWNrb2ZmX2NvdW50LCBfX2VudHJ5LT5ldmVudCkKKyk7 CisKK1RSQUNFX0VWRU5UKGRwdV9lbmNfcGh5c192aWRfcG9zdF9raWNrb2ZmLAorCVRQX1BST1RP KHVpbnQzMl90IGRybV9pZCwgZW51bSBkcHVfaW50ZiBpbnRmX2lkeCksCisJVFBfQVJHUyhkcm1f aWQsIGludGZfaWR4KSwKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAl1aW50MzJfdCwJ ZHJtX2lkCQkJKQorCQlfX2ZpZWxkKAllbnVtIGRwdV9pbnRmLAlpbnRmX2lkeAkJKQorCSksCisJ VFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmRybV9pZCA9IGRybV9pZDsKKwkJX19lbnRyeS0+ aW50Zl9pZHggPSBpbnRmX2lkeDsKKwkpLAorCVRQX3ByaW50aygiaWQ9JXUsIGludGZfaWR4PSVk IiwgX19lbnRyeS0+ZHJtX2lkLCBfX2VudHJ5LT5pbnRmX2lkeCkKKyk7CisKK1RSQUNFX0VWRU5U KGRwdV9lbmNfcGh5c192aWRfaXJxX2N0cmwsCisJVFBfUFJPVE8odWludDMyX3QgZHJtX2lkLCBl bnVtIGRwdV9pbnRmIGludGZfaWR4LCBib29sIGVuYWJsZSwKKwkJIGludCByZWZjbnQpLAorCVRQ X0FSR1MoZHJtX2lkLCBpbnRmX2lkeCwgZW5hYmxlLCByZWZjbnQpLAorCVRQX1NUUlVDVF9fZW50 cnkoCisJCV9fZmllbGQoCXVpbnQzMl90LAlkcm1faWQJCSkKKwkJX19maWVsZCgJZW51bSBkcHVf aW50ZiwJaW50Zl9pZHgJKQorCQlfX2ZpZWxkKAlib29sLAkJZW5hYmxlCQkpCisJCV9fZmllbGQo CWludCwJCXJlZmNudAkJKQorCSksCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmRybV9p ZCA9IGRybV9pZDsKKwkJX19lbnRyeS0+aW50Zl9pZHggPSBpbnRmX2lkeDsKKwkJX19lbnRyeS0+ ZW5hYmxlID0gZW5hYmxlOworCQlfX2VudHJ5LT5yZWZjbnQgPSByZWZjbnQ7CisJKSwKKwlUUF9w cmludGsoImlkPSV1LCBpbnRmX2lkeD0lZCBlbmFibGU9JXMgcmVmY250PSVkIiwgX19lbnRyeS0+ ZHJtX2lkLAorCQkgIF9fZW50cnktPmludGZfaWR4LCBfX2VudHJ5LT5lbmFibGUgPyAidHJ1ZSIg OiAiZmFsc2UiLAorCQkgIF9fZW50cnktPmRybV9pZCkKKyk7CisKK1RSQUNFX0VWRU5UKGRwdV9j cnRjX3NldHVwX21peGVyLAorCVRQX1BST1RPKHVpbnQzMl90IGNydGNfaWQsIHVpbnQzMl90IHBs YW5lX2lkLAorCQkgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUsIHN0cnVjdCBkcHVfcGxh bmVfc3RhdGUgKnBzdGF0ZSwKKwkJIHVpbnQzMl90IHN0YWdlX2lkeCwgZW51bSBkcHVfc3NwcCBz c3BwLCB1aW50MzJfdCBwaXhlbF9mb3JtYXQsCisJCSB1aW50NjRfdCBtb2RpZmllciksCisJVFBf QVJHUyhjcnRjX2lkLCBwbGFuZV9pZCwgc3RhdGUsIHBzdGF0ZSwgc3RhZ2VfaWR4LCBzc3BwLAor CQlwaXhlbF9mb3JtYXQsIG1vZGlmaWVyKSwKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxk KAl1aW50MzJfdCwJCWNydGNfaWQJCSkKKwkJX19maWVsZCgJdWludDMyX3QsCQlwbGFuZV9pZAkp CisJCV9fZmllbGQoCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUqLHN0YXRlCQkpCisJCV9fZmllbGQo CXN0cnVjdCBkcHVfcGxhbmVfc3RhdGUqLHBzdGF0ZQkJKQorCQlfX2ZpZWxkKAl1aW50MzJfdCwJ CXN0YWdlX2lkeAkpCisJCV9fZmllbGQoCWVudW0gZHB1X3NzcHAsCQlzc3BwCQkpCisJCV9fZmll bGQoCXVpbnQzMl90LAkJcGl4ZWxfZm9ybWF0CSkKKwkJX19maWVsZCgJdWludDY0X3QsCQltb2Rp ZmllcgkpCisJKSwKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+Y3J0Y19pZCA9IGNydGNf aWQ7CisJCV9fZW50cnktPnBsYW5lX2lkID0gcGxhbmVfaWQ7CisJCV9fZW50cnktPnN0YXRlID0g c3RhdGU7CisJCV9fZW50cnktPnBzdGF0ZSA9IHBzdGF0ZTsKKwkJX19lbnRyeS0+c3RhZ2VfaWR4 ID0gc3RhZ2VfaWR4OworCQlfX2VudHJ5LT5zc3BwID0gc3NwcDsKKwkJX19lbnRyeS0+cGl4ZWxf Zm9ybWF0ID0gcGl4ZWxfZm9ybWF0OworCQlfX2VudHJ5LT5tb2RpZmllciA9IG1vZGlmaWVyOwor CSksCisJVFBfcHJpbnRrKCJjcnRjX2lkOiV1IHBsYW5lX2lkOiV1IGZiX2lkOiV1IHNyYzp7JXV4 JXUrJXV4JXV9ICIKKwkJICAiZHN0OnsldXgldSsldXgldX0gc3RhZ2VfaWR4OiV1IHN0YWdlOiVk LCBzc3BwOiVkICIKKwkJICAibXVsdGlyZWN0X2luZGV4OiVkIG11bHRpcmVjdF9tb2RlOiV1IHBp eF9mb3JtYXQ6JXUgIgorCQkgICJtb2RpZmllcjolbGx1IiwKKwkJICBfX2VudHJ5LT5jcnRjX2lk LCBfX2VudHJ5LT5wbGFuZV9pZCwKKwkJICBfX2VudHJ5LT5zdGF0ZS0+ZmIgPyBfX2VudHJ5LT5z dGF0ZS0+ZmItPmJhc2UuaWQgOiAtMSwKKwkJICBfX2VudHJ5LT5zdGF0ZS0+c3JjX3cgPj4gMTYs ICBfX2VudHJ5LT5zdGF0ZS0+c3JjX2ggPj4gMTYsCisJCSAgX19lbnRyeS0+c3RhdGUtPnNyY194 ID4+IDE2LCAgX19lbnRyeS0+c3RhdGUtPnNyY195ID4+IDE2LAorCQkgIF9fZW50cnktPnN0YXRl LT5jcnRjX3csICBfX2VudHJ5LT5zdGF0ZS0+Y3J0Y19oLAorCQkgIF9fZW50cnktPnN0YXRlLT5j cnRjX3gsICBfX2VudHJ5LT5zdGF0ZS0+Y3J0Y195LAorCQkgIF9fZW50cnktPnN0YWdlX2lkeCwg X19lbnRyeS0+cHN0YXRlLT5zdGFnZSwgX19lbnRyeS0+c3NwcCwKKwkJICBfX2VudHJ5LT5wc3Rh dGUtPm11bHRpcmVjdF9pbmRleCwKKwkJICBfX2VudHJ5LT5wc3RhdGUtPm11bHRpcmVjdF9tb2Rl LCBfX2VudHJ5LT5waXhlbF9mb3JtYXQsCisJCSAgX19lbnRyeS0+bW9kaWZpZXIpCispOworCitU UkFDRV9FVkVOVChkcHVfY3J0Y19zZXR1cF9sbV9ib3VuZHMsCisJVFBfUFJPVE8odWludDMyX3Qg ZHJtX2lkLCBpbnQgbWl4ZXIsIHN0cnVjdCBkcm1fcmVjdCAqYm91bmRzKSwKKwlUUF9BUkdTKGRy bV9pZCwgbWl4ZXIsIGJvdW5kcyksCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJdWlu dDMyX3QsCQlkcm1faWQJKQorCQlfX2ZpZWxkKAlpbnQsCQkJbWl4ZXIJKQorCQlfX2ZpZWxkKAlz dHJ1Y3QgZHJtX3JlY3QgKiwJYm91bmRzCSkKKwkpLAorCVRQX2Zhc3RfYXNzaWduKAorCQlfX2Vu dHJ5LT5kcm1faWQgPSBkcm1faWQ7CisJCV9fZW50cnktPm1peGVyID0gbWl4ZXI7CisJCV9fZW50 cnktPmJvdW5kcyA9IGJvdW5kczsKKwkpLAorCVRQX3ByaW50aygiaWQ6JXUgbWl4ZXI6JWQgYm91 bmRzOiIgRFJNX1JFQ1RfRk1ULCBfX2VudHJ5LT5kcm1faWQsCisJCSAgX19lbnRyeS0+bWl4ZXIs IERSTV9SRUNUX0FSRyhfX2VudHJ5LT5ib3VuZHMpKQorKTsKKworVFJBQ0VfRVZFTlQoZHB1X2Ny dGNfdmJsYW5rX2VuYWJsZSwKKwlUUF9QUk9UTyh1aW50MzJfdCBkcm1faWQsIHVpbnQzMl90IGVu Y19pZCwgYm9vbCBlbmFibGUsCisJCSBzdHJ1Y3QgZHB1X2NydGMgKmNydGMpLAorCVRQX0FSR1Mo ZHJtX2lkLCBlbmNfaWQsIGVuYWJsZSwgY3J0YyksCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19m aWVsZCgJdWludDMyX3QsCQlkcm1faWQJKQorCQlfX2ZpZWxkKAl1aW50MzJfdCwJCWVuY19pZAkp CisJCV9fZmllbGQoCWJvb2wsCQkJZW5hYmxlCSkKKwkJX19maWVsZCgJc3RydWN0IGRwdV9jcnRj ICosCWNydGMJKQorCSksCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmRybV9pZCA9IGRy bV9pZDsKKwkJX19lbnRyeS0+ZW5jX2lkID0gZW5jX2lkOworCQlfX2VudHJ5LT5lbmFibGUgPSBl bmFibGU7CisJCV9fZW50cnktPmNydGMgPSBjcnRjOworCSksCisJVFBfcHJpbnRrKCJpZDoldSBl bmNvZGVyOiV1IGVuYWJsZTolcyBzdGF0ZXtlbmFibGVkOiVzIHN1c3BlbmQ6JXMgIgorCQkgICJ2 YmxhbmtfcmVxOiVzfSIsCisJCSAgX19lbnRyeS0+ZHJtX2lkLCBfX2VudHJ5LT5lbmNfaWQsCisJ CSAgX19lbnRyeS0+ZW5hYmxlID8gInRydWUiIDogImZhbHNlIiwKKwkJICBfX2VudHJ5LT5jcnRj LT5lbmFibGVkID8gInRydWUiIDogImZhbHNlIiwKKwkJICBfX2VudHJ5LT5jcnRjLT5zdXNwZW5k ID8gInRydWUiIDogImZhbHNlIiwKKwkJICBfX2VudHJ5LT5jcnRjLT52YmxhbmtfcmVxdWVzdGVk ID8gInRydWUiIDogImZhbHNlIikKKyk7CisKK0RFQ0xBUkVfRVZFTlRfQ0xBU1MoZHB1X2NydGNf ZW5hYmxlX3RlbXBsYXRlLAorCVRQX1BST1RPKHVpbnQzMl90IGRybV9pZCwgYm9vbCBlbmFibGUs IHN0cnVjdCBkcHVfY3J0YyAqY3J0YyksCisJVFBfQVJHUyhkcm1faWQsIGVuYWJsZSwgY3J0Yyks CisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJdWludDMyX3QsCQlkcm1faWQJKQorCQlf X2ZpZWxkKAlib29sLAkJCWVuYWJsZQkpCisJCV9fZmllbGQoCXN0cnVjdCBkcHVfY3J0YyAqLAlj cnRjCSkKKwkpLAorCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5kcm1faWQgPSBkcm1faWQ7 CisJCV9fZW50cnktPmVuYWJsZSA9IGVuYWJsZTsKKwkJX19lbnRyeS0+Y3J0YyA9IGNydGM7CisJ KSwKKwlUUF9wcmludGsoImlkOiV1IGVuYWJsZTolcyBzdGF0ZXtlbmFibGVkOiVzIHN1c3BlbmQ6 JXMgdmJsYW5rX3JlcTolc30iLAorCQkgIF9fZW50cnktPmRybV9pZCwgX19lbnRyeS0+ZW5hYmxl ID8gInRydWUiIDogImZhbHNlIiwKKwkJICBfX2VudHJ5LT5jcnRjLT5lbmFibGVkID8gInRydWUi IDogImZhbHNlIiwKKwkJICBfX2VudHJ5LT5jcnRjLT5zdXNwZW5kID8gInRydWUiIDogImZhbHNl IiwKKwkJICBfX2VudHJ5LT5jcnRjLT52YmxhbmtfcmVxdWVzdGVkID8gInRydWUiIDogImZhbHNl IikKKyk7CitERUZJTkVfRVZFTlQoZHB1X2NydGNfZW5hYmxlX3RlbXBsYXRlLCBkcHVfY3J0Y19z ZXRfc3VzcGVuZCwKKwlUUF9QUk9UTyh1aW50MzJfdCBkcm1faWQsIGJvb2wgZW5hYmxlLCBzdHJ1 Y3QgZHB1X2NydGMgKmNydGMpLAorCVRQX0FSR1MoZHJtX2lkLCBlbmFibGUsIGNydGMpCispOwor REVGSU5FX0VWRU5UKGRwdV9jcnRjX2VuYWJsZV90ZW1wbGF0ZSwgZHB1X2NydGNfZW5hYmxlLAor CVRQX1BST1RPKHVpbnQzMl90IGRybV9pZCwgYm9vbCBlbmFibGUsIHN0cnVjdCBkcHVfY3J0YyAq Y3J0YyksCisJVFBfQVJHUyhkcm1faWQsIGVuYWJsZSwgY3J0YykKKyk7CitERUZJTkVfRVZFTlQo ZHB1X2NydGNfZW5hYmxlX3RlbXBsYXRlLCBkcHVfY3J0Y19kaXNhYmxlLAorCVRQX1BST1RPKHVp bnQzMl90IGRybV9pZCwgYm9vbCBlbmFibGUsIHN0cnVjdCBkcHVfY3J0YyAqY3J0YyksCisJVFBf QVJHUyhkcm1faWQsIGVuYWJsZSwgY3J0YykKKyk7CitERUZJTkVfRVZFTlQoZHB1X2NydGNfZW5h YmxlX3RlbXBsYXRlLCBkcHVfY3J0Y192YmxhbmssCisJVFBfUFJPVE8odWludDMyX3QgZHJtX2lk LCBib29sIGVuYWJsZSwgc3RydWN0IGRwdV9jcnRjICpjcnRjKSwKKwlUUF9BUkdTKGRybV9pZCwg ZW5hYmxlLCBjcnRjKQorKTsKKworVFJBQ0VfRVZFTlQoZHB1X2NydGNfZGlzYWJsZV9mcmFtZV9w ZW5kaW5nLAorCVRQX1BST1RPKHVpbnQzMl90IGRybV9pZCwgaW50IGZyYW1lX3BlbmRpbmcpLAor CVRQX0FSR1MoZHJtX2lkLCBmcmFtZV9wZW5kaW5nKSwKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlf X2ZpZWxkKAl1aW50MzJfdCwJCWRybV9pZAkJKQorCQlfX2ZpZWxkKAlpbnQsCQkJZnJhbWVfcGVu ZGluZwkpCisJKSwKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+ZHJtX2lkID0gZHJtX2lk OworCQlfX2VudHJ5LT5mcmFtZV9wZW5kaW5nID0gZnJhbWVfcGVuZGluZzsKKwkpLAorCVRQX3By aW50aygiaWQ6JXUgZnJhbWVfcGVuZGluZzolZCIsIF9fZW50cnktPmRybV9pZCwKKwkJICBfX2Vu dHJ5LT5mcmFtZV9wZW5kaW5nKQorKTsKKworVFJBQ0VfRVZFTlQoZHB1X3BsYW5lX3NldF9zY2Fu b3V0LAorCVRQX1BST1RPKGVudW0gZHB1X3NzcHAgaW5kZXgsIHN0cnVjdCBkcHVfaHdfZm10X2xh eW91dCAqbGF5b3V0LAorCQkgZW51bSBkcHVfc3NwcF9tdWx0aXJlY3RfaW5kZXggbXVsdGlyZWN0 X2luZGV4KSwKKwlUUF9BUkdTKGluZGV4LCBsYXlvdXQsIG11bHRpcmVjdF9pbmRleCksCisJVFBf U1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJZW51bSBkcHVfc3NwcCwJCQlpbmRleAkpCisJCV9f ZmllbGQoCXN0cnVjdCBkcHVfaHdfZm10X2xheW91dCosCWxheW91dAkpCisJCV9fZmllbGQoCWVu dW0gZHB1X3NzcHBfbXVsdGlyZWN0X2luZGV4LAltdWx0aXJlY3RfaW5kZXgpCisJKSwKKwlUUF9m YXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+aW5kZXggPSBpbmRleDsKKwkJX19lbnRyeS0+bGF5b3V0 ID0gbGF5b3V0OworCQlfX2VudHJ5LT5tdWx0aXJlY3RfaW5kZXggPSBtdWx0aXJlY3RfaW5kZXg7 CisJKSwKKwlUUF9wcmludGsoImluZGV4OiVkIGxheW91dDp7JXV4JXUgQCBbJXUvJXUsICV1LyV1 LCAldS8ldSwgJXUvJXVdfSAiCisJCSAgIm11bHRpcmVjdF9pbmRleDolZCIsIF9fZW50cnktPmlu ZGV4LCBfX2VudHJ5LT5sYXlvdXQtPndpZHRoLAorCQkgIF9fZW50cnktPmxheW91dC0+aGVpZ2h0 LCBfX2VudHJ5LT5sYXlvdXQtPnBsYW5lX2FkZHJbMF0sCisJCSAgX19lbnRyeS0+bGF5b3V0LT5w bGFuZV9zaXplWzBdLAorCQkgIF9fZW50cnktPmxheW91dC0+cGxhbmVfYWRkclsxXSwKKwkJICBf X2VudHJ5LT5sYXlvdXQtPnBsYW5lX3NpemVbMV0sCisJCSAgX19lbnRyeS0+bGF5b3V0LT5wbGFu ZV9hZGRyWzJdLAorCQkgIF9fZW50cnktPmxheW91dC0+cGxhbmVfc2l6ZVsyXSwKKwkJICBfX2Vu dHJ5LT5sYXlvdXQtPnBsYW5lX2FkZHJbM10sCisJCSAgX19lbnRyeS0+bGF5b3V0LT5wbGFuZV9z aXplWzNdLCBfX2VudHJ5LT5tdWx0aXJlY3RfaW5kZXgpCispOworCitUUkFDRV9FVkVOVChkcHVf cGxhbmVfZGlzYWJsZSwKKwlUUF9QUk9UTyh1aW50MzJfdCBkcm1faWQsIGJvb2wgaXNfdmlydHVh bCwgdWludDMyX3QgbXVsdGlyZWN0X21vZGUpLAorCVRQX0FSR1MoZHJtX2lkLCBpc192aXJ0dWFs LCBtdWx0aXJlY3RfbW9kZSksCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJdWludDMy X3QsCQlkcm1faWQJCSkKKwkJX19maWVsZCgJYm9vbCwJCQlpc192aXJ0dWFsCSkKKwkJX19maWVs ZCgJdWludDMyX3QsCQltdWx0aXJlY3RfbW9kZQkpCisJKSwKKwlUUF9mYXN0X2Fzc2lnbigKKwkJ X19lbnRyeS0+ZHJtX2lkID0gZHJtX2lkOworCQlfX2VudHJ5LT5pc192aXJ0dWFsID0gaXNfdmly dHVhbDsKKwkJX19lbnRyeS0+bXVsdGlyZWN0X21vZGUgPSBtdWx0aXJlY3RfbW9kZTsKKwkpLAor CVRQX3ByaW50aygiaWQ6JXUgaXNfdmlydHVhbDolcyBtdWx0aXJlY3RfbW9kZToldSIsIF9fZW50 cnktPmRybV9pZCwKKwkJICBfX2VudHJ5LT5pc192aXJ0dWFsID8gInRydWUiIDogImZhbHNlIiwK KwkJICBfX2VudHJ5LT5tdWx0aXJlY3RfbW9kZSkKKyk7CisKK0RFQ0xBUkVfRVZFTlRfQ0xBU1Mo ZHB1X3JtX2l0ZXJfdGVtcGxhdGUsCisJVFBfUFJPVE8odWludDMyX3QgaWQsIGVudW0gZHB1X2h3 X2Jsa190eXBlIHR5cGUsIHVpbnQzMl90IGVuY19pZCksCisJVFBfQVJHUyhpZCwgdHlwZSwgZW5j X2lkKSwKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAl1aW50MzJfdCwJCWlkCSkKKwkJ X19maWVsZCgJZW51bSBkcHVfaHdfYmxrX3R5cGUsCXR5cGUJKQorCQlfX2ZpZWxkKAl1aW50MzJf dCwJCWVuY19pZAkpCisJKSwKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+aWQgPSBpZDsK KwkJX19lbnRyeS0+dHlwZSA9IHR5cGU7CisJCV9fZW50cnktPmVuY19pZCA9IGVuY19pZDsKKwkp LAorCVRQX3ByaW50aygiaWQ6JWQgdHlwZTolZCBlbmNfaWQ6JXUiLCBfX2VudHJ5LT5pZCwgX19l bnRyeS0+dHlwZSwKKwkJICBfX2VudHJ5LT5lbmNfaWQpCispOworREVGSU5FX0VWRU5UKGRwdV9y bV9pdGVyX3RlbXBsYXRlLCBkcHVfcm1fcmVzZXJ2ZV9jZG0sCisJVFBfUFJPVE8odWludDMyX3Qg aWQsIGVudW0gZHB1X2h3X2Jsa190eXBlIHR5cGUsIHVpbnQzMl90IGVuY19pZCksCisJVFBfQVJH UyhpZCwgdHlwZSwgZW5jX2lkKQorKTsKK0RFRklORV9FVkVOVChkcHVfcm1faXRlcl90ZW1wbGF0 ZSwgZHB1X3JtX3Jlc2VydmVfaW50ZiwKKwlUUF9QUk9UTyh1aW50MzJfdCBpZCwgZW51bSBkcHVf aHdfYmxrX3R5cGUgdHlwZSwgdWludDMyX3QgZW5jX2lkKSwKKwlUUF9BUkdTKGlkLCB0eXBlLCBl bmNfaWQpCispOworREVGSU5FX0VWRU5UKGRwdV9ybV9pdGVyX3RlbXBsYXRlLCBkcHVfcm1fcmVz ZXJ2ZV9jdGxzLAorCVRQX1BST1RPKHVpbnQzMl90IGlkLCBlbnVtIGRwdV9od19ibGtfdHlwZSB0 eXBlLCB1aW50MzJfdCBlbmNfaWQpLAorCVRQX0FSR1MoaWQsIHR5cGUsIGVuY19pZCkKKyk7CisK K1RSQUNFX0VWRU5UKGRwdV9ybV9yZXNlcnZlX2xtcywKKwlUUF9QUk9UTyh1aW50MzJfdCBpZCwg ZW51bSBkcHVfaHdfYmxrX3R5cGUgdHlwZSwgdWludDMyX3QgZW5jX2lkLAorCQkgdWludDMyX3Qg cHBfaWQpLAorCVRQX0FSR1MoaWQsIHR5cGUsIGVuY19pZCwgcHBfaWQpLAorCVRQX1NUUlVDVF9f ZW50cnkoCisJCV9fZmllbGQoCXVpbnQzMl90LAkJaWQJKQorCQlfX2ZpZWxkKAllbnVtIGRwdV9o d19ibGtfdHlwZSwJdHlwZQkpCisJCV9fZmllbGQoCXVpbnQzMl90LAkJZW5jX2lkCSkKKwkJX19m aWVsZCgJdWludDMyX3QsCQlwcF9pZAkpCisJKSwKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRy eS0+aWQgPSBpZDsKKwkJX19lbnRyeS0+dHlwZSA9IHR5cGU7CisJCV9fZW50cnktPmVuY19pZCA9 IGVuY19pZDsKKwkJX19lbnRyeS0+cHBfaWQgPSBwcF9pZDsKKwkpLAorCVRQX3ByaW50aygiaWQ6 JWQgdHlwZTolZCBlbmNfaWQ6JXUgcHBfaWQ6JXUiLCBfX2VudHJ5LT5pZCwKKwkJICBfX2VudHJ5 LT50eXBlLCBfX2VudHJ5LT5lbmNfaWQsIF9fZW50cnktPnBwX2lkKQorKTsKKworVFJBQ0VfRVZF TlQoZHB1X3ZiaWZfd2FpdF94aW5faGFsdF9mYWlsLAorCVRQX1BST1RPKGVudW0gZHB1X3ZiaWYg aW5kZXgsIHUzMiB4aW5faWQpLAorCVRQX0FSR1MoaW5kZXgsIHhpbl9pZCksCisJVFBfU1RSVUNU X19lbnRyeSgKKwkJX19maWVsZCgJZW51bSBkcHVfdmJpZiwJaW5kZXgJKQorCQlfX2ZpZWxkKAl1 MzIsCQl4aW5faWQJKQorCSksCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmluZGV4ID0g aW5kZXg7CisJCV9fZW50cnktPnhpbl9pZCA9IHhpbl9pZDsKKwkpLAorCVRQX3ByaW50aygiaW5k ZXg6JWQgeGluX2lkOiV1IiwgX19lbnRyeS0+aW5kZXgsIF9fZW50cnktPnhpbl9pZCkKKyk7CisK K1RSQUNFX0VWRU5UKGRwdV9wcF9jb25uZWN0X2V4dF90ZSwKKwlUUF9QUk9UTyhlbnVtIGRwdV9w aW5ncG9uZyBwcCwgdTMyIGNmZyksCisJVFBfQVJHUyhwcCwgY2ZnKSwKKwlUUF9TVFJVQ1RfX2Vu dHJ5KAorCQlfX2ZpZWxkKAllbnVtIGRwdV9waW5ncG9uZywJcHAJKQorCQlfX2ZpZWxkKAl1MzIs CQkJY2ZnCSkKKwkpLAorCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5wcCA9IHBwOworCQlf X2VudHJ5LT5jZmcgPSBjZmc7CisJKSwKKwlUUF9wcmludGsoInBwOiVkIGNmZzoldSIsIF9fZW50 cnktPnBwLCBfX2VudHJ5LT5jZmcpCispOworCitERUNMQVJFX0VWRU5UX0NMQVNTKGRwdV9jb3Jl X2lycV9pZHhfY250X3RlbXBsYXRlLAorCVRQX1BST1RPKGludCBpcnFfaWR4LCBpbnQgZW5hYmxl X2NvdW50KSwKKwlUUF9BUkdTKGlycV9pZHgsIGVuYWJsZV9jb3VudCksCisJVFBfU1RSVUNUX19l bnRyeSgKKwkJX19maWVsZCgJaW50LAlpcnFfaWR4CQkpCisJCV9fZmllbGQoCWludCwJZW5hYmxl X2NvdW50CSkKKwkpLAorCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5pcnFfaWR4ID0gaXJx X2lkeDsKKwkJX19lbnRyeS0+ZW5hYmxlX2NvdW50ID0gZW5hYmxlX2NvdW50OworCSksCisJVFBf cHJpbnRrKCJpcnFfaWR4OiVkIGVuYWJsZV9jb3VudDoldSIsIF9fZW50cnktPmlycV9pZHgsCisJ CSAgX19lbnRyeS0+ZW5hYmxlX2NvdW50KQorKTsKK0RFRklORV9FVkVOVChkcHVfY29yZV9pcnFf aWR4X2NudF90ZW1wbGF0ZSwgZHB1X2NvcmVfaXJxX2VuYWJsZV9pZHgsCisJVFBfUFJPVE8oaW50 IGlycV9pZHgsIGludCBlbmFibGVfY291bnQpLAorCVRQX0FSR1MoaXJxX2lkeCwgZW5hYmxlX2Nv dW50KQorKTsKK0RFRklORV9FVkVOVChkcHVfY29yZV9pcnFfaWR4X2NudF90ZW1wbGF0ZSwgZHB1 X2NvcmVfaXJxX2Rpc2FibGVfaWR4LAorCVRQX1BST1RPKGludCBpcnFfaWR4LCBpbnQgZW5hYmxl X2NvdW50KSwKKwlUUF9BUkdTKGlycV9pZHgsIGVuYWJsZV9jb3VudCkKKyk7CitERUZJTkVfRVZF TlQoZHB1X2NvcmVfaXJxX2lkeF9jbnRfdGVtcGxhdGUsIGRwdV9jb3JlX2lycV9kaXNhYmxlX25v bG9jaywKKwlUUF9QUk9UTyhpbnQgaXJxX2lkeCwgaW50IGVuYWJsZV9jb3VudCksCisJVFBfQVJH UyhpcnFfaWR4LCBlbmFibGVfY291bnQpCispOworCitERUNMQVJFX0VWRU5UX0NMQVNTKGRwdV9j b3JlX2lycV9jYWxsYmFja190ZW1wbGF0ZSwKKwlUUF9QUk9UTyhpbnQgaXJxX2lkeCwgc3RydWN0 IGRwdV9pcnFfY2FsbGJhY2sgKmNhbGxiYWNrKSwKKwlUUF9BUkdTKGlycV9pZHgsIGNhbGxiYWNr KSwKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAlpbnQsCQkJCWlycV9pZHgJKQorCQlf X2ZpZWxkKAlzdHJ1Y3QgZHB1X2lycV9jYWxsYmFjayAqLAljYWxsYmFjaykKKwkpLAorCVRQX2Zh c3RfYXNzaWduKAorCQlfX2VudHJ5LT5pcnFfaWR4ID0gaXJxX2lkeDsKKwkJX19lbnRyeS0+Y2Fs bGJhY2sgPSBjYWxsYmFjazsKKwkpLAorCVRQX3ByaW50aygiaXJxX2lkeDolZCBjYWxsYmFjazol cEsiLCBfX2VudHJ5LT5pcnFfaWR4LAorCQkgIF9fZW50cnktPmNhbGxiYWNrKQorKTsKK0RFRklO RV9FVkVOVChkcHVfY29yZV9pcnFfY2FsbGJhY2tfdGVtcGxhdGUsIGRwdV9jb3JlX2lycV9yZWdp c3Rlcl9jYWxsYmFjaywKKwlUUF9QUk9UTyhpbnQgaXJxX2lkeCwgc3RydWN0IGRwdV9pcnFfY2Fs bGJhY2sgKmNhbGxiYWNrKSwKKwlUUF9BUkdTKGlycV9pZHgsIGNhbGxiYWNrKQorKTsKK0RFRklO RV9FVkVOVChkcHVfY29yZV9pcnFfY2FsbGJhY2tfdGVtcGxhdGUsIGRwdV9jb3JlX2lycV91bnJl Z2lzdGVyX2NhbGxiYWNrLAorCVRQX1BST1RPKGludCBpcnFfaWR4LCBzdHJ1Y3QgZHB1X2lycV9j YWxsYmFjayAqY2FsbGJhY2spLAorCVRQX0FSR1MoaXJxX2lkeCwgY2FsbGJhY2spCispOworCitU UkFDRV9FVkVOVChkcHVfY29yZV9wZXJmX3VwZGF0ZV9jbGssCisJVFBfUFJPVE8oc3RydWN0IGRy bV9kZXZpY2UgKmRldiwgYm9vbCBzdG9wX3JlcSwgdTY0IGNsa19yYXRlKSwKKwlUUF9BUkdTKGRl diwgc3RvcF9yZXEsIGNsa19yYXRlKSwKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAlz dHJ1Y3QgZHJtX2RldmljZSAqLAlkZXYJCSkKKwkJX19maWVsZCgJYm9vbCwJCQlzdG9wX3JlcQkp CisJCV9fZmllbGQoCXU2NCwJCQljbGtfcmF0ZQkpCisJKSwKKwlUUF9mYXN0X2Fzc2lnbigKKwkJ X19lbnRyeS0+ZGV2ID0gZGV2OworCQlfX2VudHJ5LT5zdG9wX3JlcSA9IHN0b3BfcmVxOworCQlf X2VudHJ5LT5jbGtfcmF0ZSA9IGNsa19yYXRlOworCSksCisJVFBfcHJpbnRrKCJkZXY6JXMgc3Rv cF9yZXE6JXMgY2xrX3JhdGU6JWxsdSIsIF9fZW50cnktPmRldi0+dW5pcXVlLAorCQkgIF9fZW50 cnktPnN0b3BfcmVxID8gInRydWUiIDogImZhbHNlIiwgX19lbnRyeS0+Y2xrX3JhdGUpCispOwor CisjZGVmaW5lIERQVV9BVFJBQ0VfRU5EKG5hbWUpIHRyYWNlX3RyYWNpbmdfbWFya193cml0ZShj dXJyZW50LT50Z2lkLCBuYW1lLCAwKQorI2RlZmluZSBEUFVfQVRSQUNFX0JFR0lOKG5hbWUpIHRy YWNlX3RyYWNpbmdfbWFya193cml0ZShjdXJyZW50LT50Z2lkLCBuYW1lLCAxKQorI2RlZmluZSBE UFVfQVRSQUNFX0ZVTkMoKSBEUFVfQVRSQUNFX0JFR0lOKF9fZnVuY19fKQorCisjZGVmaW5lIERQ VV9BVFJBQ0VfSU5UKG5hbWUsIHZhbHVlKSBcCisJdHJhY2VfZHB1X3RyYWNlX2NvdW50ZXIoY3Vy cmVudC0+dGdpZCwgbmFtZSwgdmFsdWUpCisKKyNlbmRpZiAvKiBfRFBVX1RSQUNFX0hfICovCisK Ky8qIFRoaXMgcGFydCBtdXN0IGJlIG91dHNpZGUgcHJvdGVjdGlvbiAqLworI3VuZGVmIFRSQUNF X0lOQ0xVREVfUEFUSAorI2RlZmluZSBUUkFDRV9JTkNMVURFX1BBVEggLgorI2luY2x1ZGUgPHRy YWNlL2RlZmluZV90cmFjZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X3ZiaWYuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV92Ymlm LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4yOTU1MjgyOTIyOTYK LS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfdmJp Zi5jCkBAIC0wLDAgKzEsMzg0IEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxOCwgVGhlIExp bnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK KyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug dmVyc2lvbiAyIGFuZAorICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor ICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisj ZGVmaW5lIHByX2ZtdChmbXQpCSJbZHJtOiVzOiVkXSAiIGZtdCwgX19mdW5jX18sIF9fTElORV9f CisKKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisKKyNpbmNsdWRlICJkcHVfdmJpZi5oIgor I2luY2x1ZGUgImRwdV9od192YmlmLmgiCisjaW5jbHVkZSAiZHB1X3RyYWNlLmgiCisKKy8qKgor ICogX2RwdV92YmlmX3dhaXRfZm9yX3hpbl9oYWx0IC0gd2FpdCBmb3IgdGhlIHhpbiB0byBoYWx0 CisgKiBAdmJpZjoJUG9pbnRlciB0byBoYXJkd2FyZSB2YmlmIGRyaXZlcgorICogQHhpbl9pZDoJ Q2xpZW50IGludGVyZmFjZSBpZGVudGlmaWVyCisgKiBAcmV0dXJuOgkwIGlmIHN1Y2Nlc3M7IGVy cm9yIGNvZGUgb3RoZXJ3aXNlCisgKi8KK3N0YXRpYyBpbnQgX2RwdV92YmlmX3dhaXRfZm9yX3hp bl9oYWx0KHN0cnVjdCBkcHVfaHdfdmJpZiAqdmJpZiwgdTMyIHhpbl9pZCkKK3sKKwlrdGltZV90 IHRpbWVvdXQ7CisJYm9vbCBzdGF0dXM7CisJaW50IHJjOworCisJaWYgKCF2YmlmIHx8ICF2Ymlm LT5jYXAgfHwgIXZiaWYtPm9wcy5nZXRfaGFsdF9jdHJsKSB7CisJCURQVV9FUlJPUigiaW52YWxp ZCBhcmd1bWVudHMgdmJpZiAlZFxuIiwgdmJpZiAhPSAwKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJ fQorCisJdGltZW91dCA9IGt0aW1lX2FkZF91cyhrdGltZV9nZXQoKSwgdmJpZi0+Y2FwLT54aW5f aGFsdF90aW1lb3V0KTsKKwlmb3IgKDs7KSB7CisJCXN0YXR1cyA9IHZiaWYtPm9wcy5nZXRfaGFs dF9jdHJsKHZiaWYsIHhpbl9pZCk7CisJCWlmIChzdGF0dXMpCisJCQlicmVhazsKKwkJaWYgKGt0 aW1lX2NvbXBhcmVfc2FmZShrdGltZV9nZXQoKSwgdGltZW91dCkgPiAwKSB7CisJCQlzdGF0dXMg PSB2YmlmLT5vcHMuZ2V0X2hhbHRfY3RybCh2YmlmLCB4aW5faWQpOworCQkJYnJlYWs7CisJCX0K KwkJdXNsZWVwX3JhbmdlKDUwMSwgMTAwMCk7CisJfQorCisJaWYgKCFzdGF0dXMpIHsKKwkJcmMg PSAtRVRJTUVET1VUOworCQlEUFVfRVJST1IoIlZCSUYgJWQgY2xpZW50ICVkIG5vdCBoYWx0aW5n LiBUSU1FRE9VVC5cbiIsCisJCQkJdmJpZi0+aWR4IC0gVkJJRl8wLCB4aW5faWQpOworCX0gZWxz ZSB7CisJCXJjID0gMDsKKwkJRFBVX0RFQlVHKCJWQklGICVkIGNsaWVudCAlZCBpcyBoYWx0ZWRc biIsCisJCQkJdmJpZi0+aWR4IC0gVkJJRl8wLCB4aW5faWQpOworCX0KKworCXJldHVybiByYzsK K30KKworLyoqCisgKiBfZHB1X3ZiaWZfYXBwbHlfZHluYW1pY19vdF9saW1pdCAtIGRldGVybWlu ZSBPVCBiYXNlZCBvbiB1c2VjYXNlIHBhcmFtZXRlcnMKKyAqIEB2YmlmOglQb2ludGVyIHRvIGhh cmR3YXJlIHZiaWYgZHJpdmVyCisgKiBAb3RfbGltOglQb2ludGVyIHRvIE9UIGxpbWl0IHRvIGJl IG1vZGlmaWVkCisgKiBAcGFyYW1zOglQb2ludGVyIHRvIHVzZWNhc2UgcGFyYW1ldGVycworICov CitzdGF0aWMgdm9pZCBfZHB1X3ZiaWZfYXBwbHlfZHluYW1pY19vdF9saW1pdChzdHJ1Y3QgZHB1 X2h3X3ZiaWYgKnZiaWYsCisJCXUzMiAqb3RfbGltLCBzdHJ1Y3QgZHB1X3ZiaWZfc2V0X290X3Bh cmFtcyAqcGFyYW1zKQoreworCXU2NCBwcHM7CisJY29uc3Qgc3RydWN0IGRwdV92YmlmX2R5bmFt aWNfb3RfdGJsICp0Ymw7CisJdTMyIGk7CisKKwlpZiAoIXZiaWYgfHwgISh2YmlmLT5jYXAtPmZl YXR1cmVzICYgQklUKERQVV9WQklGX1FPU19PVExJTSkpKQorCQlyZXR1cm47CisKKwkvKiBEeW5h bWljIE9UIHNldHRpbmcgZG9uZSBvbmx5IGZvciBXRkQgKi8KKwlpZiAoIXBhcmFtcy0+aXNfd2Zk KQorCQlyZXR1cm47CisKKwlwcHMgPSBwYXJhbXMtPmZyYW1lX3JhdGU7CisJcHBzICo9IHBhcmFt cy0+d2lkdGg7CisJcHBzICo9IHBhcmFtcy0+aGVpZ2h0OworCisJdGJsID0gcGFyYW1zLT5yZCA/ ICZ2YmlmLT5jYXAtPmR5bmFtaWNfb3RfcmRfdGJsIDoKKwkJCSZ2YmlmLT5jYXAtPmR5bmFtaWNf b3Rfd3JfdGJsOworCisJZm9yIChpID0gMDsgaSA8IHRibC0+Y291bnQ7IGkrKykgeworCQlpZiAo cHBzIDw9IHRibC0+Y2ZnW2ldLnBwcykgeworCQkJKm90X2xpbSA9IHRibC0+Y2ZnW2ldLm90X2xp bWl0OworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlEUFVfREVCVUcoInZiaWY6JWQgeGluOiVkIHc6 JWQgaDolZCBmcHM6JWQgcHBzOiVsbHUgb3Q6JXVcbiIsCisJCQl2YmlmLT5pZHggLSBWQklGXzAs IHBhcmFtcy0+eGluX2lkLAorCQkJcGFyYW1zLT53aWR0aCwgcGFyYW1zLT5oZWlnaHQsIHBhcmFt cy0+ZnJhbWVfcmF0ZSwKKwkJCXBwcywgKm90X2xpbSk7Cit9CisKKy8qKgorICogX2RwdV92Ymlm X2dldF9vdF9saW1pdCAtIGdldCBPVCBiYXNlZCBvbiB1c2VjYXNlICYgY29uZmlndXJhdGlvbiBw YXJhbWV0ZXJzCisgKiBAdmJpZjoJUG9pbnRlciB0byBoYXJkd2FyZSB2YmlmIGRyaXZlcgorICog QHBhcmFtczoJUG9pbnRlciB0byB1c2VjYXNlIHBhcmFtZXRlcnMKKyAqIEByZXR1cm46CU9UIGxp bWl0CisgKi8KK3N0YXRpYyB1MzIgX2RwdV92YmlmX2dldF9vdF9saW1pdChzdHJ1Y3QgZHB1X2h3 X3ZiaWYgKnZiaWYsCisJc3RydWN0IGRwdV92YmlmX3NldF9vdF9wYXJhbXMgKnBhcmFtcykKK3sK Kwl1MzIgb3RfbGltID0gMDsKKwl1MzIgdmFsOworCisJaWYgKCF2YmlmIHx8ICF2YmlmLT5jYXAp IHsKKwkJRFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50cyB2YmlmICVkXG4iLCB2YmlmICE9IDAp OworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodmJpZi0+Y2FwLT5kZWZhdWx0X290X3dy X2xpbWl0ICYmICFwYXJhbXMtPnJkKQorCQlvdF9saW0gPSB2YmlmLT5jYXAtPmRlZmF1bHRfb3Rf d3JfbGltaXQ7CisJZWxzZSBpZiAodmJpZi0+Y2FwLT5kZWZhdWx0X290X3JkX2xpbWl0ICYmIHBh cmFtcy0+cmQpCisJCW90X2xpbSA9IHZiaWYtPmNhcC0+ZGVmYXVsdF9vdF9yZF9saW1pdDsKKwor CS8qCisJICogSWYgZGVmYXVsdCBvdCBpcyBub3Qgc2V0IGZyb20gZHQvY2F0YWxvZywKKwkgKiB0 aGVuIGRvIG5vdCBjb25maWd1cmUgaXQuCisJICovCisJaWYgKG90X2xpbSA9PSAwKQorCQlnb3Rv IGV4aXQ7CisKKwkvKiBNb2RpZnkgdGhlIGxpbWl0cyBpZiB0aGUgdGFyZ2V0IGFuZCB0aGUgdXNl IGNhc2UgcmVxdWlyZXMgaXQgKi8KKwlfZHB1X3ZiaWZfYXBwbHlfZHluYW1pY19vdF9saW1pdCh2 YmlmLCAmb3RfbGltLCBwYXJhbXMpOworCisJaWYgKHZiaWYgJiYgdmJpZi0+b3BzLmdldF9saW1p dF9jb25mKSB7CisJCXZhbCA9IHZiaWYtPm9wcy5nZXRfbGltaXRfY29uZih2YmlmLAorCQkJCXBh cmFtcy0+eGluX2lkLCBwYXJhbXMtPnJkKTsKKwkJaWYgKHZhbCA9PSBvdF9saW0pCisJCQlvdF9s aW0gPSAwOworCX0KKworZXhpdDoKKwlEUFVfREVCVUcoInZiaWY6JWQgeGluOiVkIG90X2xpbTol ZFxuIiwKKwkJCXZiaWYtPmlkeCAtIFZCSUZfMCwgcGFyYW1zLT54aW5faWQsIG90X2xpbSk7CisJ cmV0dXJuIG90X2xpbTsKK30KKworLyoqCisgKiBkcHVfdmJpZl9zZXRfb3RfbGltaXQgLSBzZXQg T1QgYmFzZWQgb24gdXNlY2FzZSAmIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycworICogQHZiaWY6 CVBvaW50ZXIgdG8gaGFyZHdhcmUgdmJpZiBkcml2ZXIKKyAqIEBwYXJhbXM6CVBvaW50ZXIgdG8g dXNlY2FzZSBwYXJhbWV0ZXJzCisgKgorICogTm90ZSB0aGlzIGZ1bmN0aW9uIHdvdWxkIGJsb2Nr IHdhaXRpbmcgZm9yIGJ1cyBoYWx0LgorICovCit2b2lkIGRwdV92YmlmX3NldF9vdF9saW1pdChz dHJ1Y3QgZHB1X2ttcyAqZHB1X2ttcywKKwkJc3RydWN0IGRwdV92YmlmX3NldF9vdF9wYXJhbXMg KnBhcmFtcykKK3sKKwlzdHJ1Y3QgZHB1X2h3X3ZiaWYgKnZiaWYgPSBOVUxMOworCXN0cnVjdCBk cHVfaHdfbWRwICptZHA7CisJYm9vbCBmb3JjZWRfb24gPSBmYWxzZTsKKwl1MzIgb3RfbGltOwor CWludCByZXQsIGk7CisKKwlpZiAoIWRwdV9rbXMpIHsKKwkJRFBVX0VSUk9SKCJpbnZhbGlkIGFy Z3VtZW50c1xuIik7CisJCXJldHVybjsKKwl9CisJbWRwID0gZHB1X2ttcy0+aHdfbWRwOworCisJ Zm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZHB1X2ttcy0+aHdfdmJpZik7IGkrKykgeworCQlp ZiAoZHB1X2ttcy0+aHdfdmJpZltpXSAmJgorCQkJCWRwdV9rbXMtPmh3X3ZiaWZbaV0tPmlkeCA9 PSBwYXJhbXMtPnZiaWZfaWR4KQorCQkJdmJpZiA9IGRwdV9rbXMtPmh3X3ZiaWZbaV07CisJfQor CisJaWYgKCF2YmlmIHx8ICFtZHApIHsKKwkJRFBVX0RFQlVHKCJpbnZhbGlkIGFyZ3VtZW50cyB2 YmlmICVkIG1kcCAlZFxuIiwKKwkJCQl2YmlmICE9IDAsIG1kcCAhPSAwKTsKKwkJcmV0dXJuOwor CX0KKworCWlmICghbWRwLT5vcHMuc2V0dXBfY2xrX2ZvcmNlX2N0cmwgfHwKKwkJCSF2YmlmLT5v cHMuc2V0X2xpbWl0X2NvbmYgfHwKKwkJCSF2YmlmLT5vcHMuc2V0X2hhbHRfY3RybCkKKwkJcmV0 dXJuOworCisJLyogc2V0IHdyaXRlX2dhdGhlcl9lbiBmb3IgYWxsIHdyaXRlIGNsaWVudHMgKi8K KwlpZiAodmJpZi0+b3BzLnNldF93cml0ZV9nYXRoZXJfZW4gJiYgIXBhcmFtcy0+cmQpCisJCXZi aWYtPm9wcy5zZXRfd3JpdGVfZ2F0aGVyX2VuKHZiaWYsIHBhcmFtcy0+eGluX2lkKTsKKworCW90 X2xpbSA9IF9kcHVfdmJpZl9nZXRfb3RfbGltaXQodmJpZiwgcGFyYW1zKSAmIDB4RkY7CisKKwlp ZiAob3RfbGltID09IDApCisJCWdvdG8gZXhpdDsKKworCXRyYWNlX2RwdV9wZXJmX3NldF9vdChw YXJhbXMtPm51bSwgcGFyYW1zLT54aW5faWQsIG90X2xpbSwKKwkJcGFyYW1zLT52YmlmX2lkeCk7 CisKKwlmb3JjZWRfb24gPSBtZHAtPm9wcy5zZXR1cF9jbGtfZm9yY2VfY3RybChtZHAsIHBhcmFt cy0+Y2xrX2N0cmwsIHRydWUpOworCisJdmJpZi0+b3BzLnNldF9saW1pdF9jb25mKHZiaWYsIHBh cmFtcy0+eGluX2lkLCBwYXJhbXMtPnJkLCBvdF9saW0pOworCisJdmJpZi0+b3BzLnNldF9oYWx0 X2N0cmwodmJpZiwgcGFyYW1zLT54aW5faWQsIHRydWUpOworCisJcmV0ID0gX2RwdV92YmlmX3dh aXRfZm9yX3hpbl9oYWx0KHZiaWYsIHBhcmFtcy0+eGluX2lkKTsKKwlpZiAocmV0KQorCQl0cmFj ZV9kcHVfdmJpZl93YWl0X3hpbl9oYWx0X2ZhaWwodmJpZi0+aWR4LCBwYXJhbXMtPnhpbl9pZCk7 CisKKwl2YmlmLT5vcHMuc2V0X2hhbHRfY3RybCh2YmlmLCBwYXJhbXMtPnhpbl9pZCwgZmFsc2Up OworCisJaWYgKGZvcmNlZF9vbikKKwkJbWRwLT5vcHMuc2V0dXBfY2xrX2ZvcmNlX2N0cmwobWRw LCBwYXJhbXMtPmNsa19jdHJsLCBmYWxzZSk7CitleGl0OgorCXJldHVybjsKK30KKwordm9pZCBk cHVfdmJpZl9zZXRfcW9zX3JlbWFwKHN0cnVjdCBkcHVfa21zICpkcHVfa21zLAorCQlzdHJ1Y3Qg ZHB1X3ZiaWZfc2V0X3Fvc19wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3QgZHB1X2h3X3ZiaWYg KnZiaWYgPSBOVUxMOworCXN0cnVjdCBkcHVfaHdfbWRwICptZHA7CisJYm9vbCBmb3JjZWRfb24g PSBmYWxzZTsKKwljb25zdCBzdHJ1Y3QgZHB1X3ZiaWZfcW9zX3RibCAqcW9zX3RibDsKKwlpbnQg aTsKKworCWlmICghZHB1X2ttcyB8fCAhcGFyYW1zIHx8ICFkcHVfa21zLT5od19tZHApIHsKKwkJ RFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50c1xuIik7CisJCXJldHVybjsKKwl9CisJbWRwID0g ZHB1X2ttcy0+aHdfbWRwOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZHB1X2ttcy0+ aHdfdmJpZik7IGkrKykgeworCQlpZiAoZHB1X2ttcy0+aHdfdmJpZltpXSAmJgorCQkJCWRwdV9r bXMtPmh3X3ZiaWZbaV0tPmlkeCA9PSBwYXJhbXMtPnZiaWZfaWR4KSB7CisJCQl2YmlmID0gZHB1 X2ttcy0+aHdfdmJpZltpXTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCF2YmlmIHx8ICF2 YmlmLT5jYXApIHsKKwkJRFBVX0VSUk9SKCJpbnZhbGlkIHZiaWYgJWRcbiIsIHBhcmFtcy0+dmJp Zl9pZHgpOworCQlyZXR1cm47CisJfQorCisJaWYgKCF2YmlmLT5vcHMuc2V0X3Fvc19yZW1hcCB8 fCAhbWRwLT5vcHMuc2V0dXBfY2xrX2ZvcmNlX2N0cmwpIHsKKwkJRFBVX0RFQlVHKCJxb3MgcmVt YXAgbm90IHN1cHBvcnRlZFxuIik7CisJCXJldHVybjsKKwl9CisKKwlxb3NfdGJsID0gcGFyYW1z LT5pc19ydCA/ICZ2YmlmLT5jYXAtPnFvc19ydF90YmwgOgorCQkJJnZiaWYtPmNhcC0+cW9zX25y dF90Ymw7CisKKwlpZiAoIXFvc190YmwtPm5wcmlvcml0eV9sdmwgfHwgIXFvc190YmwtPnByaW9y aXR5X2x2bCkgeworCQlEUFVfREVCVUcoInFvcyB0Ymwgbm90IGRlZmluZWRcbiIpOworCQlyZXR1 cm47CisJfQorCisJZm9yY2VkX29uID0gbWRwLT5vcHMuc2V0dXBfY2xrX2ZvcmNlX2N0cmwobWRw LCBwYXJhbXMtPmNsa19jdHJsLCB0cnVlKTsKKworCWZvciAoaSA9IDA7IGkgPCBxb3NfdGJsLT5u cHJpb3JpdHlfbHZsOyBpKyspIHsKKwkJRFBVX0RFQlVHKCJ2YmlmOiVkIHhpbjolZCBsdmw6JWQv JWRcbiIsCisJCQkJcGFyYW1zLT52YmlmX2lkeCwgcGFyYW1zLT54aW5faWQsIGksCisJCQkJcW9z X3RibC0+cHJpb3JpdHlfbHZsW2ldKTsKKwkJdmJpZi0+b3BzLnNldF9xb3NfcmVtYXAodmJpZiwg cGFyYW1zLT54aW5faWQsIGksCisJCQkJcW9zX3RibC0+cHJpb3JpdHlfbHZsW2ldKTsKKwl9CisK KwlpZiAoZm9yY2VkX29uKQorCQltZHAtPm9wcy5zZXR1cF9jbGtfZm9yY2VfY3RybChtZHAsIHBh cmFtcy0+Y2xrX2N0cmwsIGZhbHNlKTsKK30KKwordm9pZCBkcHVfdmJpZl9jbGVhcl9lcnJvcnMo c3RydWN0IGRwdV9rbXMgKmRwdV9rbXMpCit7CisJc3RydWN0IGRwdV9od192YmlmICp2YmlmOwor CXUzMiBpLCBwbmQsIHNyYzsKKworCWlmICghZHB1X2ttcykgeworCQlEUFVfRVJST1IoImludmFs aWQgYXJndW1lbnRcbiIpOworCQlyZXR1cm47CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFSUkFZ X1NJWkUoZHB1X2ttcy0+aHdfdmJpZik7IGkrKykgeworCQl2YmlmID0gZHB1X2ttcy0+aHdfdmJp ZltpXTsKKwkJaWYgKHZiaWYgJiYgdmJpZi0+b3BzLmNsZWFyX2Vycm9ycykgeworCQkJdmJpZi0+ b3BzLmNsZWFyX2Vycm9ycyh2YmlmLCAmcG5kLCAmc3JjKTsKKwkJCWlmIChwbmQgfHwgc3JjKSB7 CisJCQkJRFJNX0RFQlVHX0tNUygiVkJJRiAlZDogcG5kIDB4JVgsIHNyYyAweCVYXG4iLAorCQkJ CQkgICAgICB2YmlmLT5pZHggLSBWQklGXzAsIHBuZCwgc3JjKTsKKwkJCX0KKwkJfQorCX0KK30K Kwordm9pZCBkcHVfdmJpZl9pbml0X21lbXR5cGVzKHN0cnVjdCBkcHVfa21zICpkcHVfa21zKQor eworCXN0cnVjdCBkcHVfaHdfdmJpZiAqdmJpZjsKKwlpbnQgaSwgajsKKworCWlmICghZHB1X2tt cykgeworCQlEUFVfRVJST1IoImludmFsaWQgYXJndW1lbnRcbiIpOworCQlyZXR1cm47CisJfQor CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZHB1X2ttcy0+aHdfdmJpZik7IGkrKykgewor CQl2YmlmID0gZHB1X2ttcy0+aHdfdmJpZltpXTsKKwkJaWYgKHZiaWYgJiYgdmJpZi0+Y2FwICYm IHZiaWYtPm9wcy5zZXRfbWVtX3R5cGUpIHsKKwkJCWZvciAoaiA9IDA7IGogPCB2YmlmLT5jYXAt Pm1lbXR5cGVfY291bnQ7IGorKykKKwkJCQl2YmlmLT5vcHMuc2V0X21lbV90eXBlKAorCQkJCQkJ dmJpZiwgaiwgdmJpZi0+Y2FwLT5tZW10eXBlW2pdKTsKKwkJfQorCX0KK30KKworI2lmZGVmIENP TkZJR19ERUJVR19GUwordm9pZCBkcHVfZGVidWdmc192YmlmX2Rlc3Ryb3koc3RydWN0IGRwdV9r bXMgKmRwdV9rbXMpCit7CisJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGRwdV9rbXMtPmRlYnVn ZnNfdmJpZik7CisJZHB1X2ttcy0+ZGVidWdmc192YmlmID0gTlVMTDsKK30KKworaW50IGRwdV9k ZWJ1Z2ZzX3ZiaWZfaW5pdChzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttcywgc3RydWN0IGRlbnRyeSAq ZGVidWdmc19yb290KQoreworCWNoYXIgdmJpZl9uYW1lWzMyXTsKKwlzdHJ1Y3QgZGVudHJ5ICpk ZWJ1Z2ZzX3ZiaWY7CisJaW50IGksIGo7CisKKwlkcHVfa21zLT5kZWJ1Z2ZzX3ZiaWYgPSBkZWJ1 Z2ZzX2NyZWF0ZV9kaXIoInZiaWYiLCBkZWJ1Z2ZzX3Jvb3QpOworCWlmICghZHB1X2ttcy0+ZGVi dWdmc192YmlmKSB7CisJCURQVV9FUlJPUigiZmFpbGVkIHRvIGNyZWF0ZSB2YmlmIGRlYnVnZnNc biIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgZHB1X2ttcy0+ Y2F0YWxvZy0+dmJpZl9jb3VudDsgaSsrKSB7CisJCXN0cnVjdCBkcHVfdmJpZl9jZmcgKnZiaWYg PSAmZHB1X2ttcy0+Y2F0YWxvZy0+dmJpZltpXTsKKworCQlzbnByaW50Zih2YmlmX25hbWUsIHNp emVvZih2YmlmX25hbWUpLCAiJWQiLCB2YmlmLT5pZCk7CisKKwkJZGVidWdmc192YmlmID0gZGVi dWdmc19jcmVhdGVfZGlyKHZiaWZfbmFtZSwKKwkJCQlkcHVfa21zLT5kZWJ1Z2ZzX3ZiaWYpOwor CisJCWRlYnVnZnNfY3JlYXRlX3UzMigiZmVhdHVyZXMiLCAwNjAwLCBkZWJ1Z2ZzX3ZiaWYsCisJ CQkodTMyICopJnZiaWYtPmZlYXR1cmVzKTsKKworCQlkZWJ1Z2ZzX2NyZWF0ZV91MzIoInhpbl9o YWx0X3RpbWVvdXQiLCAwNDAwLCBkZWJ1Z2ZzX3ZiaWYsCisJCQkodTMyICopJnZiaWYtPnhpbl9o YWx0X3RpbWVvdXQpOworCisJCWRlYnVnZnNfY3JlYXRlX3UzMigiZGVmYXVsdF9yZF9vdF9saW1p dCIsIDA0MDAsIGRlYnVnZnNfdmJpZiwKKwkJCSh1MzIgKikmdmJpZi0+ZGVmYXVsdF9vdF9yZF9s aW1pdCk7CisKKwkJZGVidWdmc19jcmVhdGVfdTMyKCJkZWZhdWx0X3dyX290X2xpbWl0IiwgMDQw MCwgZGVidWdmc192YmlmLAorCQkJKHUzMiAqKSZ2YmlmLT5kZWZhdWx0X290X3dyX2xpbWl0KTsK KworCQlmb3IgKGogPSAwOyBqIDwgdmJpZi0+ZHluYW1pY19vdF9yZF90YmwuY291bnQ7IGorKykg eworCQkJc3RydWN0IGRwdV92YmlmX2R5bmFtaWNfb3RfY2ZnICpjZmcgPQorCQkJCQkmdmJpZi0+ ZHluYW1pY19vdF9yZF90YmwuY2ZnW2pdOworCisJCQlzbnByaW50Zih2YmlmX25hbWUsIHNpemVv Zih2YmlmX25hbWUpLAorCQkJCQkiZHluYW1pY19vdF9yZF8lZF9wcHMiLCBqKTsKKwkJCWRlYnVn ZnNfY3JlYXRlX3U2NCh2YmlmX25hbWUsIDA0MDAsIGRlYnVnZnNfdmJpZiwKKwkJCQkJKHU2NCAq KSZjZmctPnBwcyk7CisJCQlzbnByaW50Zih2YmlmX25hbWUsIHNpemVvZih2YmlmX25hbWUpLAor CQkJCQkiZHluYW1pY19vdF9yZF8lZF9vdF9saW1pdCIsIGopOworCQkJZGVidWdmc19jcmVhdGVf dTMyKHZiaWZfbmFtZSwgMDQwMCwgZGVidWdmc192YmlmLAorCQkJCQkodTMyICopJmNmZy0+b3Rf bGltaXQpOworCQl9CisKKwkJZm9yIChqID0gMDsgaiA8IHZiaWYtPmR5bmFtaWNfb3Rfd3JfdGJs LmNvdW50OyBqKyspIHsKKwkJCXN0cnVjdCBkcHVfdmJpZl9keW5hbWljX290X2NmZyAqY2ZnID0K KwkJCQkJJnZiaWYtPmR5bmFtaWNfb3Rfd3JfdGJsLmNmZ1tqXTsKKworCQkJc25wcmludGYodmJp Zl9uYW1lLCBzaXplb2YodmJpZl9uYW1lKSwKKwkJCQkJImR5bmFtaWNfb3Rfd3JfJWRfcHBzIiwg aik7CisJCQlkZWJ1Z2ZzX2NyZWF0ZV91NjQodmJpZl9uYW1lLCAwNDAwLCBkZWJ1Z2ZzX3ZiaWYs CisJCQkJCSh1NjQgKikmY2ZnLT5wcHMpOworCQkJc25wcmludGYodmJpZl9uYW1lLCBzaXplb2Yo dmJpZl9uYW1lKSwKKwkJCQkJImR5bmFtaWNfb3Rfd3JfJWRfb3RfbGltaXQiLCBqKTsKKwkJCWRl YnVnZnNfY3JlYXRlX3UzMih2YmlmX25hbWUsIDA0MDAsIGRlYnVnZnNfdmJpZiwKKwkJCQkJKHUz MiAqKSZjZmctPm90X2xpbWl0KTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorI2VuZGlmCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfdmJpZi5oIGIvZHJp dmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3ZiaWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMDAuLmYxN2FmNTJkYmJkNQotLS0gL2Rldi9udWxsCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV92YmlmLmgKQEAgLTAsMCArMSw5NCBAQAor LyogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmln aHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkg dmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgor ICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0RQVV9WQklGX0hfXwor I2RlZmluZSBfX0RQVV9WQklGX0hfXworCisjaW5jbHVkZSAiZHB1X2ttcy5oIgorCitzdHJ1Y3Qg ZHB1X3ZiaWZfc2V0X290X3BhcmFtcyB7CisJdTMyIHhpbl9pZDsKKwl1MzIgbnVtOworCXUzMiB3 aWR0aDsKKwl1MzIgaGVpZ2h0OworCXUzMiBmcmFtZV9yYXRlOworCWJvb2wgcmQ7CisJYm9vbCBp c193ZmQ7CisJdTMyIHZiaWZfaWR4OworCXUzMiBjbGtfY3RybDsKK307CisKK3N0cnVjdCBkcHVf dmJpZl9zZXRfbWVtdHlwZV9wYXJhbXMgeworCXUzMiB4aW5faWQ7CisJdTMyIHZiaWZfaWR4Owor CXUzMiBjbGtfY3RybDsKKwlib29sIGlzX2NhY2hlYWJsZTsKK307CisKKy8qKgorICogc3RydWN0 IGRwdV92YmlmX3NldF9xb3NfcGFyYW1zIC0gUW9TIHJlbWFwcGVyIHBhcmFtZXRlcgorICogQHZi aWZfaWR4OiB2YmlmIGlkZW50aWZpZXIKKyAqIEB4aW5faWQ6IGNsaWVudCBpbnRlcmZhY2UgaWRl bnRpZmllcgorICogQGNsa19jdHJsOiBjbG9jayBjb250cm9sIGlkZW50aWZpZXIgb2YgdGhlIHhp bgorICogQG51bTogcGlwZSBpZGVudGlmaWVyIChkZWJ1ZyBvbmx5KQorICogQGlzX3J0OiB0cnVl IGlmIHBpcGUgaXMgdXNlZCBpbiByZWFsLXRpbWUgdXNlIGNhc2UKKyAqLworc3RydWN0IGRwdV92 YmlmX3NldF9xb3NfcGFyYW1zIHsKKwl1MzIgdmJpZl9pZHg7CisJdTMyIHhpbl9pZDsKKwl1MzIg Y2xrX2N0cmw7CisJdTMyIG51bTsKKwlib29sIGlzX3J0OworfTsKKworLyoqCisgKiBkcHVfdmJp Zl9zZXRfb3RfbGltaXQgLSBzZXQgT1QgbGltaXQgZm9yIHZiaWYgY2xpZW50CisgKiBAZHB1X2tt czoJRFBVIGhhbmRsZXIKKyAqIEBwYXJhbXM6CVBvaW50ZXIgdG8gT1QgY29uZmlndXJhdGlvbiBw YXJhbWV0ZXJzCisgKi8KK3ZvaWQgZHB1X3ZiaWZfc2V0X290X2xpbWl0KHN0cnVjdCBkcHVfa21z ICpkcHVfa21zLAorCQlzdHJ1Y3QgZHB1X3ZiaWZfc2V0X290X3BhcmFtcyAqcGFyYW1zKTsKKwor LyoqCisgKiBkcHVfdmJpZl9zZXRfcW9zX3JlbWFwIC0gc2V0IFFvUyBwcmlvcml0eSBsZXZlbCBy ZW1hcAorICogQGRwdV9rbXM6CURQVSBoYW5kbGVyCisgKiBAcGFyYW1zOglQb2ludGVyIHRvIFFv UyBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMKKyAqLwordm9pZCBkcHVfdmJpZl9zZXRfcW9zX3Jl bWFwKHN0cnVjdCBkcHVfa21zICpkcHVfa21zLAorCQlzdHJ1Y3QgZHB1X3ZiaWZfc2V0X3Fvc19w YXJhbXMgKnBhcmFtcyk7CisKKy8qKgorICogZHB1X3ZiaWZfY2xlYXJfZXJyb3JzIC0gY2xlYXIg YW55IHZiaWYgZXJyb3JzCisgKiBAZHB1X2ttczoJRFBVIGhhbmRsZXIKKyAqLwordm9pZCBkcHVf dmJpZl9jbGVhcl9lcnJvcnMoc3RydWN0IGRwdV9rbXMgKmRwdV9rbXMpOworCisvKioKKyAqIGRw dV92YmlmX2luaXRfbWVtdHlwZXMgLSBpbml0aWFsaXplIHhpbiBtZW1vcnkgdHlwZXMgZm9yIHZi aWYKKyAqIEBkcHVfa21zOglEUFUgaGFuZGxlcgorICovCit2b2lkIGRwdV92YmlmX2luaXRfbWVt dHlwZXMoc3RydWN0IGRwdV9rbXMgKmRwdV9rbXMpOworCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZT CitpbnQgZHB1X2RlYnVnZnNfdmJpZl9pbml0KHN0cnVjdCBkcHVfa21zICpkcHVfa21zLCBzdHJ1 Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3Jvb3QpOwordm9pZCBkcHVfZGVidWdmc192YmlmX2Rlc3Ryb3ko c3RydWN0IGRwdV9rbXMgKmRwdV9rbXMpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGRwdV9k ZWJ1Z2ZzX3ZiaWZfaW5pdChzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttcywKKwkJc3RydWN0IGRlbnRy eSAqZGVidWdmc19yb290KQoreworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSB2b2lkIGRw dV9kZWJ1Z2ZzX3ZiaWZfZGVzdHJveShzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttcykKK3sKK30KKyNl bmRpZgorI2VuZGlmIC8qIF9fRFBVX1ZCSUZfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vbXNtL21zbV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5jCmluZGV4 IGNkMDk1OTc4MzIwMy4uMmM3NmFiYzEzNTA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v bXNtL21zbV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuYwpAQCAtMSw0 ICsxLDUgQEAKIC8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxOCwgVGhlIExpbnV4IEZvdW5k YXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVkIEhh dAogICogQXV0aG9yOiBSb2IgQ2xhcmsgPHJvYmRjbGFya0BnbWFpbC5jb20+CiAgKgpAQCAtMTUs NiArMTYsOCBAQAogICogdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251 Lm9yZy9saWNlbnNlcy8+LgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5j bHVkZSA8dWFwaS9saW51eC9zY2hlZC90eXBlcy5oPgogI2luY2x1ZGUgPGRybS9kcm1fb2YuaD4K IAogI2luY2x1ZGUgIm1zbV9kcnYuaCIKQEAgLTE0OSw3ICsxNTIsNyBAQCBzdHJ1Y3QgdmJsYW5r X2V2ZW50IHsKIAlib29sIGVuYWJsZTsKIH07CiAKLXN0YXRpYyB2b2lkIHZibGFua19jdHJsX3dv cmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCitzdGF0aWMgdm9pZCB2YmxhbmtfY3RybF93 b3JrZXIoc3RydWN0IGt0aHJlYWRfd29yayAqd29yaykKIHsKIAlzdHJ1Y3QgbXNtX3ZibGFua19j dHJsICp2YmxfY3RybCA9IGNvbnRhaW5lcl9vZih3b3JrLAogCQkJCQkJc3RydWN0IG1zbV92Ymxh bmtfY3RybCwgd29yayk7CkBAIC0xOTcsNyArMjAwLDggQEAgc3RhdGljIGludCB2YmxhbmtfY3Ry bF9xdWV1ZV93b3JrKHN0cnVjdCBtc21fZHJtX3ByaXZhdGUgKnByaXYsCiAJbGlzdF9hZGRfdGFp bCgmdmJsX2V2LT5ub2RlLCAmdmJsX2N0cmwtPmV2ZW50X2xpc3QpOwogCXNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoJnZibF9jdHJsLT5sb2NrLCBmbGFncyk7CiAKLQlxdWV1ZV93b3JrKHByaXYtPndx LCAmdmJsX2N0cmwtPndvcmspOworCWt0aHJlYWRfcXVldWVfd29yaygmcHJpdi0+ZGlzcF90aHJl YWRbY3J0Y19pZF0ud29ya2VyLAorCQkJJnZibF9jdHJsLT53b3JrKTsKIAogCXJldHVybiAwOwog fQpAQCAtMjExLDE3ICsyMTUsMzMgQEAgc3RhdGljIGludCBtc21fZHJtX3VuaW5pdChzdHJ1Y3Qg ZGV2aWNlICpkZXYpCiAJc3RydWN0IG1zbV9tZHNzICptZHNzID0gcHJpdi0+bWRzczsKIAlzdHJ1 Y3QgbXNtX3ZibGFua19jdHJsICp2YmxfY3RybCA9ICZwcml2LT52YmxhbmtfY3RybDsKIAlzdHJ1 Y3QgdmJsYW5rX2V2ZW50ICp2YmxfZXYsICp0bXA7CisJaW50IGk7CiAKIAkvKiBXZSBtdXN0IGNh bmNlbCBhbmQgY2xlYW51cCBhbnkgcGVuZGluZyB2YmxhbmsgZW5hYmxlL2Rpc2FibGUKIAkgKiB3 b3JrIGJlZm9yZSBkcm1faXJxX3VuaW5zdGFsbCgpIHRvIGF2b2lkIHdvcmsgcmUtZW5hYmxpbmcg YW4KIAkgKiBpcnEgYWZ0ZXIgdW5pbnN0YWxsIGhhcyBkaXNhYmxlZCBpdC4KIAkgKi8KLQljYW5j ZWxfd29ya19zeW5jKCZ2YmxfY3RybC0+d29yayk7CisJa3RocmVhZF9mbHVzaF93b3JrKCZ2Ymxf Y3RybC0+d29yayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHZibF9ldiwgdG1wLCAmdmJs X2N0cmwtPmV2ZW50X2xpc3QsIG5vZGUpIHsKIAkJbGlzdF9kZWwoJnZibF9ldi0+bm9kZSk7CiAJ CWtmcmVlKHZibF9ldik7CiAJfQogCisJLyogY2xlYW4gdXAgZGlzcGxheSBjb21taXQvZXZlbnQg d29ya2VyIHRocmVhZHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+bnVtX2NydGNzOyBpKysp IHsKKwkJaWYgKHByaXYtPmRpc3BfdGhyZWFkW2ldLnRocmVhZCkgeworCQkJa3RocmVhZF9mbHVz aF93b3JrZXIoJnByaXYtPmRpc3BfdGhyZWFkW2ldLndvcmtlcik7CisJCQlrdGhyZWFkX3N0b3Ao cHJpdi0+ZGlzcF90aHJlYWRbaV0udGhyZWFkKTsKKwkJCXByaXYtPmRpc3BfdGhyZWFkW2ldLnRo cmVhZCA9IE5VTEw7CisJCX0KKworCQlpZiAocHJpdi0+ZXZlbnRfdGhyZWFkW2ldLnRocmVhZCkg eworCQkJa3RocmVhZF9mbHVzaF93b3JrZXIoJnByaXYtPmV2ZW50X3RocmVhZFtpXS53b3JrZXIp OworCQkJa3RocmVhZF9zdG9wKHByaXYtPmV2ZW50X3RocmVhZFtpXS50aHJlYWQpOworCQkJcHJp di0+ZXZlbnRfdGhyZWFkW2ldLnRocmVhZCA9IE5VTEw7CisJCX0KKwl9CisKIAltc21fZ2VtX3No cmlua2VyX2NsZWFudXAoZGRldik7CiAKIAlkcm1fa21zX2hlbHBlcl9wb2xsX2ZpbmkoZGRldik7 CkBAIC0yNjksNiArMjg5LDcgQEAgc3RhdGljIGludCBtc21fZHJtX3VuaW5pdChzdHJ1Y3QgZGV2 aWNlICpkZXYpCiAKICNkZWZpbmUgS01TX01EUDQgNAogI2RlZmluZSBLTVNfTURQNSA1CisjZGVm aW5lIEtNU19EUFUgIDMKIAogc3RhdGljIGludCBnZXRfbWRwX3ZlcihzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpwZGV2KQogewpAQCAtMzYwLDcgKzM4MSw4IEBAIHN0YXRpYyBpbnQgbXNtX2RybV9p bml0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRybV9kcml2ZXIgKmRydikKIAlzdHJ1Y3Qg bXNtX2RybV9wcml2YXRlICpwcml2OwogCXN0cnVjdCBtc21fa21zICprbXM7CiAJc3RydWN0IG1z bV9tZHNzICptZHNzOwotCWludCByZXQ7CisJaW50IHJldCwgaTsKKwlzdHJ1Y3Qgc2NoZWRfcGFy YW0gcGFyYW07CiAKIAlkZGV2ID0gZHJtX2Rldl9hbGxvYyhkcnYsIGRldik7CiAJaWYgKElTX0VS UihkZGV2KSkgewpAQCAtMzc5LDcgKzQwMSwxNyBAQCBzdGF0aWMgaW50IG1zbV9kcm1faW5pdChz dHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZHJpdmVyICpkcnYpCiAJZGRldi0+ZGV2X3By aXZhdGUgPSBwcml2OwogCXByaXYtPmRldiA9IGRkZXY7CiAKLQlyZXQgPSBtZHA1X21kc3NfaW5p dChkZGV2KTsKKwlzd2l0Y2ggKGdldF9tZHBfdmVyKHBkZXYpKSB7CisJY2FzZSBLTVNfTURQNToK KwkJcmV0ID0gbWRwNV9tZHNzX2luaXQoZGRldik7CisJCWJyZWFrOworCWNhc2UgS01TX0RQVToK KwkJcmV0ID0gZHB1X21kc3NfaW5pdChkZGV2KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0 ID0gMDsKKwkJYnJlYWs7CisJfQogCWlmIChyZXQpCiAJCWdvdG8gZXJyX2ZyZWVfcHJpdjsKIApA QCAtMzg5LDcgKzQyMSw3IEBAIHN0YXRpYyBpbnQgbXNtX2RybV9pbml0KHN0cnVjdCBkZXZpY2Ug KmRldiwgc3RydWN0IGRybV9kcml2ZXIgKmRydikKIAogCUlOSVRfTElTVF9IRUFEKCZwcml2LT5p bmFjdGl2ZV9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmcHJpdi0+dmJsYW5rX2N0cmwuZXZlbnRf bGlzdCk7Ci0JSU5JVF9XT1JLKCZwcml2LT52YmxhbmtfY3RybC53b3JrLCB2YmxhbmtfY3RybF93 b3JrZXIpOworCWt0aHJlYWRfaW5pdF93b3JrKCZwcml2LT52YmxhbmtfY3RybC53b3JrLCB2Ymxh bmtfY3RybF93b3JrZXIpOwogCXNwaW5fbG9ja19pbml0KCZwcml2LT52YmxhbmtfY3RybC5sb2Nr KTsKIAogCWRybV9tb2RlX2NvbmZpZ19pbml0KGRkZXYpOwpAQCAtNDEzLDYgKzQ0NSwxMCBAQCBz dGF0aWMgaW50IG1zbV9kcm1faW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZHJp dmVyICpkcnYpCiAJY2FzZSBLTVNfTURQNToKIAkJa21zID0gbWRwNV9rbXNfaW5pdChkZGV2KTsK IAkJYnJlYWs7CisJY2FzZSBLTVNfRFBVOgorCQlrbXMgPSBkcHVfa21zX2luaXQoZGRldik7CisJ CXByaXYtPmttcyA9IGttczsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJa21zID0gRVJSX1BUUigt RU5PREVWKTsKIAkJYnJlYWs7CkBAIC00NDQsNiArNDgwLDc5IEBAIHN0YXRpYyBpbnQgbXNtX2Ry bV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRybV9kcml2ZXIgKmRydikKIAlkZGV2 LT5tb2RlX2NvbmZpZy5mdW5jcyA9ICZtb2RlX2NvbmZpZ19mdW5jczsKIAlkZGV2LT5tb2RlX2Nv bmZpZy5oZWxwZXJfcHJpdmF0ZSA9ICZtb2RlX2NvbmZpZ19oZWxwZXJfZnVuY3M7CiAKKwkvKioK KwkgKiB0aGlzIHByaW9yaXR5IHdhcyBmb3VuZCBkdXJpbmcgZW1waXJpYyB0ZXN0aW5nIHRvIGhh dmUgYXBwcm9wcmlhdGUKKwkgKiByZWFsdGltZSBzY2hlZHVsaW5nIHRvIHByb2Nlc3MgZGlzcGxh eSB1cGRhdGVzIGFuZCBpbnRlcmFjdCB3aXRoCisJICogb3RoZXIgcmVhbCB0aW1lIGFuZCBub3Jt YWwgcHJpb3JpdHkgdGFzaworCSAqLworCXBhcmFtLnNjaGVkX3ByaW9yaXR5ID0gMTY7CisJZm9y IChpID0gMDsgaSA8IHByaXYtPm51bV9jcnRjczsgaSsrKSB7CisKKwkJLyogaW5pdGlhbGl6ZSBk aXNwbGF5IHRocmVhZCAqLworCQlwcml2LT5kaXNwX3RocmVhZFtpXS5jcnRjX2lkID0gcHJpdi0+ Y3J0Y3NbaV0tPmJhc2UuaWQ7CisJCWt0aHJlYWRfaW5pdF93b3JrZXIoJnByaXYtPmRpc3BfdGhy ZWFkW2ldLndvcmtlcik7CisJCXByaXYtPmRpc3BfdGhyZWFkW2ldLmRldiA9IGRkZXY7CisJCXBy aXYtPmRpc3BfdGhyZWFkW2ldLnRocmVhZCA9CisJCQlrdGhyZWFkX3J1bihrdGhyZWFkX3dvcmtl cl9mbiwKKwkJCQkmcHJpdi0+ZGlzcF90aHJlYWRbaV0ud29ya2VyLAorCQkJCSJjcnRjX2NvbW1p dDolZCIsIHByaXYtPmRpc3BfdGhyZWFkW2ldLmNydGNfaWQpOworCQlyZXQgPSBzY2hlZF9zZXRz Y2hlZHVsZXIocHJpdi0+ZGlzcF90aHJlYWRbaV0udGhyZWFkLAorCQkJCQkJCVNDSEVEX0ZJRk8s ICZwYXJhbSk7CisJCWlmIChyZXQpCisJCQlwcl93YXJuKCJkaXNwbGF5IHRocmVhZCBwcmlvcml0 eSB1cGRhdGUgZmFpbGVkOiAlZFxuIiwKKwkJCQkJCQkJCXJldCk7CisKKwkJaWYgKElTX0VSUihw cml2LT5kaXNwX3RocmVhZFtpXS50aHJlYWQpKSB7CisJCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0 byBjcmVhdGUgY3J0Y19jb21taXQga3RocmVhZFxuIik7CisJCQlwcml2LT5kaXNwX3RocmVhZFtp XS50aHJlYWQgPSBOVUxMOworCQl9CisKKwkJLyogaW5pdGlhbGl6ZSBldmVudCB0aHJlYWQgKi8K KwkJcHJpdi0+ZXZlbnRfdGhyZWFkW2ldLmNydGNfaWQgPSBwcml2LT5jcnRjc1tpXS0+YmFzZS5p ZDsKKwkJa3RocmVhZF9pbml0X3dvcmtlcigmcHJpdi0+ZXZlbnRfdGhyZWFkW2ldLndvcmtlcik7 CisJCXByaXYtPmV2ZW50X3RocmVhZFtpXS5kZXYgPSBkZGV2OworCQlwcml2LT5ldmVudF90aHJl YWRbaV0udGhyZWFkID0KKwkJCWt0aHJlYWRfcnVuKGt0aHJlYWRfd29ya2VyX2ZuLAorCQkJCSZw cml2LT5ldmVudF90aHJlYWRbaV0ud29ya2VyLAorCQkJCSJjcnRjX2V2ZW50OiVkIiwgcHJpdi0+ ZXZlbnRfdGhyZWFkW2ldLmNydGNfaWQpOworCQkvKioKKwkJICogZXZlbnQgdGhyZWFkIHNob3Vs ZCBhbHNvIHJ1biBhdCBzYW1lIHByaW9yaXR5IGFzIGRpc3BfdGhyZWFkCisJCSAqIGJlY2F1c2Ug aXQgaXMgaGFuZGxpbmcgZnJhbWVfZG9uZSBldmVudHMuIEEgbG93ZXIgcHJpb3JpdHkKKwkJICog ZXZlbnQgdGhyZWFkIGFuZCBoaWdoZXIgcHJpb3JpdHkgZGlzcF90aHJlYWQgY2FuIGNhdXNlcwor CQkgKiBmcmFtZV9wZW5kaW5nIGNvdW50ZXJzIGJleW9uZCAyLiBUaGlzIGNhbiBsZWFkIHRvIGNv bW1pdAorCQkgKiBmYWlsdXJlIGF0IGNydGMgY29tbWl0IGxldmVsLgorCQkgKi8KKwkJcmV0ID0g c2NoZWRfc2V0c2NoZWR1bGVyKHByaXYtPmV2ZW50X3RocmVhZFtpXS50aHJlYWQsCisJCQkJCQkJ U0NIRURfRklGTywgJnBhcmFtKTsKKwkJaWYgKHJldCkKKwkJCXByX3dhcm4oImRpc3BsYXkgZXZl bnQgdGhyZWFkIHByaW9yaXR5IHVwZGF0ZSBmYWlsZWQ6ICVkXG4iLAorCQkJCQkJCQkJcmV0KTsK KworCQlpZiAoSVNfRVJSKHByaXYtPmV2ZW50X3RocmVhZFtpXS50aHJlYWQpKSB7CisJCQlkZXZf ZXJyKGRldiwgImZhaWxlZCB0byBjcmVhdGUgY3J0Y19ldmVudCBrdGhyZWFkXG4iKTsKKwkJCXBy aXYtPmV2ZW50X3RocmVhZFtpXS50aHJlYWQgPSBOVUxMOworCQl9CisKKwkJaWYgKCghcHJpdi0+ ZGlzcF90aHJlYWRbaV0udGhyZWFkKSB8fAorCQkJCSFwcml2LT5ldmVudF90aHJlYWRbaV0udGhy ZWFkKSB7CisJCQkvKiBjbGVhbiB1cCBwcmV2aW91c2x5IGNyZWF0ZWQgdGhyZWFkcyBpZiBhbnkg Ki8KKwkJCWZvciAoIDsgaSA+PSAwOyBpLS0pIHsKKwkJCQlpZiAocHJpdi0+ZGlzcF90aHJlYWRb aV0udGhyZWFkKSB7CisJCQkJCWt0aHJlYWRfc3RvcCgKKwkJCQkJCXByaXYtPmRpc3BfdGhyZWFk W2ldLnRocmVhZCk7CisJCQkJCXByaXYtPmRpc3BfdGhyZWFkW2ldLnRocmVhZCA9IE5VTEw7CisJ CQkJfQorCisJCQkJaWYgKHByaXYtPmV2ZW50X3RocmVhZFtpXS50aHJlYWQpIHsKKwkJCQkJa3Ro cmVhZF9zdG9wKAorCQkJCQkJcHJpdi0+ZXZlbnRfdGhyZWFkW2ldLnRocmVhZCk7CisJCQkJCXBy aXYtPmV2ZW50X3RocmVhZFtpXS50aHJlYWQgPSBOVUxMOworCQkJCX0KKwkJCX0KKwkJCWdvdG8g ZXJyX21zbV91bmluaXQ7CisJCX0KKwl9CisKIAlyZXQgPSBkcm1fdmJsYW5rX2luaXQoZGRldiwg cHJpdi0+bnVtX2NydGNzKTsKIAlpZiAocmV0IDwgMCkgewogCQlkZXZfZXJyKGRldiwgImZhaWxl ZCB0byBpbml0aWFsaXplIHZibGFua1xuIik7CkBAIC0xMDY5LDEyICsxMTc4LDEzIEBAIHN0YXRp YyBpbnQgYWRkX2Rpc3BsYXlfY29tcG9uZW50cyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJaW50IHJl dDsKIAogCS8qCi0JICogTURQNSBiYXNlZCBkZXZpY2VzIGRvbid0IGhhdmUgYSBmbGF0IGhpZXJh cmNoeS4gVGhlcmUgaXMgYSB0b3AgbGV2ZWwKLQkgKiBwYXJlbnQ6IE1EU1MsIGFuZCBjaGlsZHJl bjogTURQNSwgRFNJLCBIRE1JLCBlRFAgZXRjLiBQb3B1bGF0ZSB0aGUKLQkgKiBjaGlsZHJlbiBk ZXZpY2VzLCBmaW5kIHRoZSBNRFA1IG5vZGUsIGFuZCB0aGVuIGFkZCB0aGUgaW50ZXJmYWNlcwot CSAqIHRvIG91ciBjb21wb25lbnRzIGxpc3QuCisJICogTURQNS9EUFUgYmFzZWQgZGV2aWNlcyBk b24ndCBoYXZlIGEgZmxhdCBoaWVyYXJjaHkuIFRoZXJlIGlzIGEgdG9wCisJICogbGV2ZWwgcGFy ZW50OiBNRFNTLCBhbmQgY2hpbGRyZW46IE1EUDUvRFBVLCBEU0ksIEhETUksIGVEUCBldGMuCisJ ICogUG9wdWxhdGUgdGhlIGNoaWxkcmVuIGRldmljZXMsIGZpbmQgdGhlIE1EUDUvRFBVIG5vZGUs IGFuZCB0aGVuIGFkZAorCSAqIHRoZSBpbnRlcmZhY2VzIHRvIG91ciBjb21wb25lbnRzIGxpc3Qu CiAJICovCi0JaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKGRldi0+b2Zfbm9kZSwgInFjb20s bWRzcyIpKSB7CisJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKGRldi0+b2Zfbm9kZSwgInFj b20sbWRzcyIpIHx8CisJICAgIG9mX2RldmljZV9pc19jb21wYXRpYmxlKGRldi0+b2Zfbm9kZSwg InFjb20sZHB1LW1kc3MiKSkgewogCQlyZXQgPSBvZl9wbGF0Zm9ybV9wb3B1bGF0ZShkZXYtPm9m X25vZGUsIE5VTEwsIE5VTEwsIGRldik7CiAJCWlmIChyZXQpIHsKIAkJCWRldl9lcnIoZGV2LCAi ZmFpbGVkIHRvIHBvcHVsYXRlIGNoaWxkcmVuIGRldmljZXNcbiIpOwpAQCAtMTE4Niw2ICsxMjk2 LDcgQEAgc3RhdGljIGludCBtc21fcGRldl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldikKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGR0X21hdGNoW10gPSB7CiAJ eyAuY29tcGF0aWJsZSA9ICJxY29tLG1kcDQiLCAuZGF0YSA9ICh2b2lkICopS01TX01EUDQgfSwK IAl7IC5jb21wYXRpYmxlID0gInFjb20sbWRzcyIsIC5kYXRhID0gKHZvaWQgKilLTVNfTURQNSB9 LAorCXsgLmNvbXBhdGlibGUgPSAicWNvbSxkcHUtbWRzcyIsIC5kYXRhID0gKHZvaWQgKilLTVNf RFBVIH0sCiAJe30KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBkdF9tYXRjaCk7CkBAIC0x MjA3LDYgKzEzMTgsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBtc21fZHJtX3JlZ2lzdGVyKHZvaWQp CiAKIAlEQkcoImluaXQiKTsKIAltc21fbWRwX3JlZ2lzdGVyKCk7CisJbXNtX2RwdV9yZWdpc3Rl cigpOwogCW1zbV9kc2lfcmVnaXN0ZXIoKTsKIAltc21fZWRwX3JlZ2lzdGVyKCk7CiAJbXNtX2hk bWlfcmVnaXN0ZXIoKTsKQEAgLTEyMjMsNiArMTMzNSw3IEBAIHN0YXRpYyB2b2lkIF9fZXhpdCBt c21fZHJtX3VucmVnaXN0ZXIodm9pZCkKIAltc21fZWRwX3VucmVnaXN0ZXIoKTsKIAltc21fZHNp X3VucmVnaXN0ZXIoKTsKIAltc21fbWRwX3VucmVnaXN0ZXIoKTsKKwltc21fZHB1X3VucmVnaXN0 ZXIoKTsKIH0KIAogbW9kdWxlX2luaXQobXNtX2RybV9yZWdpc3Rlcik7CmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Ry di5oCmluZGV4IDNiMjA2YWU2NDIzZi4uMGNiYTg2ZWQzZjU0IDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vbXNtL21zbV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYu aApAQCAtMSw0ICsxLDUgQEAKIC8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxOCwgVGhlIExp bnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIw MTMgUmVkIEhhdAogICogQXV0aG9yOiBSb2IgQ2xhcmsgPHJvYmRjbGFya0BnbWFpbC5jb20+CiAg KgpAQCAtMzMsNiArMzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L29mX2dyYXBoLmg+CiAjaW5jbHVk ZSA8bGludXgvb2ZfZGV2aWNlLmg+CiAjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisjaW5jbHVkZSA8 bGludXgva3RocmVhZC5oPgogCiAjaW5jbHVkZSA8ZHJtL2RybVAuaD4KICNpbmNsdWRlIDxkcm0v ZHJtX2F0b21pYy5oPgpAQCAtNTUsNyArNTcsNyBAQCBzdHJ1Y3QgbXNtX2dlbV9hZGRyZXNzX3Nw YWNlOwogc3RydWN0IG1zbV9nZW1fdm1hOwogCiAjZGVmaW5lIE1BWF9DUlRDUyAgICAgIDgKLSNk ZWZpbmUgTUFYX1BMQU5FUyAgICAgMTYKKyNkZWZpbmUgTUFYX1BMQU5FUyAgICAgMjAKICNkZWZp bmUgTUFYX0VOQ09ERVJTICAgOAogI2RlZmluZSBNQVhfQlJJREdFUyAgICA4CiAjZGVmaW5lIE1B WF9DT05ORUNUT1JTIDgKQEAgLTc0LDEyICs3Niw3NyBAQCBlbnVtIG1zbV9tZHBfcGxhbmVfcHJv cGVydHkgewogfTsKIAogc3RydWN0IG1zbV92YmxhbmtfY3RybCB7Ci0Jc3RydWN0IHdvcmtfc3Ry dWN0IHdvcms7CisJc3RydWN0IGt0aHJlYWRfd29yayB3b3JrOwogCXN0cnVjdCBsaXN0X2hlYWQg ZXZlbnRfbGlzdDsKIAlzcGlubG9ja190IGxvY2s7CiB9OwogCiAjZGVmaW5lIE1TTV9HUFVfTUFY X1JJTkdTIDQKKyNkZWZpbmUgTUFYX0hfVElMRVNfUEVSX0RJU1BMQVkgMgorCisvKioKKyAqIGVu dW0gbXNtX2Rpc3BsYXlfY2FwcyAtIGZlYXR1cmVzL2NhcGFiaWxpdGllcyBzdXBwb3J0ZWQgYnkg ZGlzcGxheXMKKyAqIEBNU01fRElTUExBWV9DQVBfVklEX01PREU6ICAgICAgICAgICBWaWRlbyBv ciAiYWN0aXZlIiBtb2RlIHN1cHBvcnRlZAorICogQE1TTV9ESVNQTEFZX0NBUF9DTURfTU9ERTog ICAgICAgICAgIENvbW1hbmQgbW9kZSBzdXBwb3J0ZWQKKyAqIEBNU01fRElTUExBWV9DQVBfSE9U X1BMVUc6ICAgICAgICAgICBIb3QgcGx1ZyBkZXRlY3Rpb24gc3VwcG9ydGVkCisgKiBATVNNX0RJ U1BMQVlfQ0FQX0VESUQ6ICAgICAgICAgICAgICAgRURJRCBzdXBwb3J0ZWQKKyAqLworZW51bSBt c21fZGlzcGxheV9jYXBzIHsKKwlNU01fRElTUExBWV9DQVBfVklEX01PREUJPSBCSVQoMCksCisJ TVNNX0RJU1BMQVlfQ0FQX0NNRF9NT0RFCT0gQklUKDEpLAorCU1TTV9ESVNQTEFZX0NBUF9IT1Rf UExVRwk9IEJJVCgyKSwKKwlNU01fRElTUExBWV9DQVBfRURJRAkJPSBCSVQoMyksCit9OworCisv KioKKyAqIGVudW0gbXNtX2V2ZW50X3dhaXQgLSB0eXBlIG9mIEhXIGV2ZW50cyB0byB3YWl0IGZv cgorICogQE1TTV9FTkNfQ09NTUlUX0RPTkUgLSB3YWl0IGZvciB0aGUgZHJpdmVyIHRvIGZsdXNo IHRoZSByZWdpc3RlcnMgdG8gSFcKKyAqIEBNU01fRU5DX1RYX0NPTVBMRVRFIC0gd2FpdCBmb3Ig dGhlIEhXIHRvIHRyYW5zZmVyIHRoZSBmcmFtZSB0byBwYW5lbAorICogQE1TTV9FTkNfVkJMQU5L IC0gd2FpdCBmb3IgdGhlIEhXIFZCTEFOSyBldmVudCAoZm9yIGRyaXZlci1pbnRlcm5hbCB3YWl0 ZXJzKQorICovCitlbnVtIG1zbV9ldmVudF93YWl0IHsKKwlNU01fRU5DX0NPTU1JVF9ET05FID0g MCwKKwlNU01fRU5DX1RYX0NPTVBMRVRFLAorCU1TTV9FTkNfVkJMQU5LLAorfTsKKworLyoqCisg KiBzdHJ1Y3QgbXNtX2Rpc3BsYXlfdG9wb2xvZ3kgLSBkZWZpbmVzIGEgZGlzcGxheSB0b3BvbG9n eSBwaXBlbGluZQorICogQG51bV9sbTogICAgICAgbnVtYmVyIG9mIGxheWVyIG1peGVycyB1c2Vk CisgKiBAbnVtX2VuYzogICAgICBudW1iZXIgb2YgY29tcHJlc3Npb24gZW5jb2RlciBibG9ja3Mg dXNlZAorICogQG51bV9pbnRmOiAgICAgbnVtYmVyIG9mIGludGVyZmFjZXMgdGhlIHBhbmVsIGlz IG1vdW50ZWQgb24KKyAqLworc3RydWN0IG1zbV9kaXNwbGF5X3RvcG9sb2d5IHsKKwl1MzIgbnVt X2xtOworCXUzMiBudW1fZW5jOworCXUzMiBudW1faW50ZjsKK307CisKKy8qKgorICogc3RydWN0 IG1zbV9kaXNwbGF5X2luZm8gLSBkZWZpbmVzIGRpc3BsYXkgcHJvcGVydGllcworICogQGludGZf dHlwZTogICAgICAgICAgRFJNX01PREVfQ09OTkVDVE9SXyBkaXNwbGF5IHR5cGUKKyAqIEBjYXBh YmlsaXRpZXM6ICAgICAgIEJpdG1hc2sgb2YgZGlzcGxheSBmbGFncworICogQG51bV9vZl9oX3Rp bGVzOiAgICAgTnVtYmVyIG9mIGhvcml6b250YWwgdGlsZXMgaW4gY2FzZSBvZiBzcGxpdCBpbnRl cmZhY2UKKyAqIEBoX3RpbGVfaW5zdGFuY2U6ICAgIENvbnRyb2xsZXIgaW5zdGFuY2UgdXNlZCBw ZXIgdGlsZS4gTnVtYmVyIG9mIGVsZW1lbnRzIGlzCisgKiAgICAgICAgICAgICAgICAgICAgICBi YXNlZCBvbiBudW1fb2ZfaF90aWxlcworICogQGlzX3RlX3VzaW5nX3dhdGNoZG9nX3RpbWVyOiAg Qm9vbGVhbiB0byBpbmRpY2F0ZSB3YXRjaGRvZyBURSBpcworICoJCQkJIHVzZWQgaW5zdGVhZCBv ZiBwYW5lbCBURSBpbiBjbWQgbW9kZSBwYW5lbHMKKyAqLworc3RydWN0IG1zbV9kaXNwbGF5X2lu Zm8geworCWludCBpbnRmX3R5cGU7CisJdWludDMyX3QgY2FwYWJpbGl0aWVzOworCXVpbnQzMl90 IG51bV9vZl9oX3RpbGVzOworCXVpbnQzMl90IGhfdGlsZV9pbnN0YW5jZVtNQVhfSF9USUxFU19Q RVJfRElTUExBWV07CisJYm9vbCBpc190ZV91c2luZ193YXRjaGRvZ190aW1lcjsKK307CisKKy8q IENvbW1pdC9FdmVudCB0aHJlYWQgc3BlY2lmaWMgc3RydWN0dXJlICovCitzdHJ1Y3QgbXNtX2Ry bV90aHJlYWQgeworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7CisJc3RydWN0IHRhc2tfc3RydWN0 ICp0aHJlYWQ7CisJdW5zaWduZWQgaW50IGNydGNfaWQ7CisJc3RydWN0IGt0aHJlYWRfd29ya2Vy IHdvcmtlcjsKK307CiAKIHN0cnVjdCBtc21fZHJtX3ByaXZhdGUgewogCkBAIC05MCw3ICsxNTcs NyBAQCBzdHJ1Y3QgbXNtX2RybV9wcml2YXRlIHsKIAkvKiBzdWJvcmRpbmF0ZSBkZXZpY2VzLCBp ZiBwcmVzZW50OiAqLwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmdwdV9wZGV2OwogCi0JLyog dG9wIGxldmVsIE1EU1Mgd3JhcHBlciBkZXZpY2UgKGZvciBNRFA1IG9ubHkpICovCisJLyogdG9w IGxldmVsIE1EU1Mgd3JhcHBlciBkZXZpY2UgKGZvciBNRFA1L0RQVSBvbmx5KSAqLwogCXN0cnVj dCBtc21fbWRzcyAqbWRzczsKIAogCS8qIHBvc3NpYmx5IHRoaXMgc2hvdWxkIGJlIGluIHRoZSBr bXMgY29tcG9uZW50LCBidXQgaXQgaXMKQEAgLTEyOCw2ICsxOTUsOSBAQCBzdHJ1Y3QgbXNtX2Ry bV9wcml2YXRlIHsKIAl1bnNpZ25lZCBpbnQgbnVtX2NydGNzOwogCXN0cnVjdCBkcm1fY3J0YyAq Y3J0Y3NbTUFYX0NSVENTXTsKIAorCXN0cnVjdCBtc21fZHJtX3RocmVhZCBkaXNwX3RocmVhZFtN QVhfQ1JUQ1NdOworCXN0cnVjdCBtc21fZHJtX3RocmVhZCBldmVudF90aHJlYWRbTUFYX0NSVENT XTsKKwogCXVuc2lnbmVkIGludCBudW1fZW5jb2RlcnM7CiAJc3RydWN0IGRybV9lbmNvZGVyICpl bmNvZGVyc1tNQVhfRU5DT0RFUlNdOwogCkBAIC0xODAsNiArMjUwLDkgQEAgc3RydWN0IG1zbV9n ZW1fYWRkcmVzc19zcGFjZSAqCiBtc21fZ2VtX2FkZHJlc3Nfc3BhY2VfY3JlYXRlKHN0cnVjdCBk ZXZpY2UgKmRldiwgc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLAogCQljb25zdCBjaGFyICpu YW1lKTsKIAoraW50IG1zbV9yZWdpc3Rlcl9tbXUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3Ry dWN0IG1zbV9tbXUgKm1tdSk7Cit2b2lkIG1zbV91bnJlZ2lzdGVyX21tdShzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LCBzdHJ1Y3QgbXNtX21tdSAqbW11KTsKKwogdm9pZCBtc21fZ2VtX3N1Ym1pdF9m cmVlKHN0cnVjdCBtc21fZ2VtX3N1Ym1pdCAqc3VibWl0KTsKIGludCBtc21faW9jdGxfZ2VtX3N1 Ym1pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQlzdHJ1Y3QgZHJtX2Zp bGUgKmZpbGUpOwpAQCAtMjkxLDYgKzM2NCw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1zbV9kc2lf bW9kZXNldF9pbml0KHN0cnVjdCBtc21fZHNpICptc21fZHNpLAogCiB2b2lkIF9faW5pdCBtc21f bWRwX3JlZ2lzdGVyKHZvaWQpOwogdm9pZCBfX2V4aXQgbXNtX21kcF91bnJlZ2lzdGVyKHZvaWQp Owordm9pZCBfX2luaXQgbXNtX2RwdV9yZWdpc3Rlcih2b2lkKTsKK3ZvaWQgX19leGl0IG1zbV9k cHVfdW5yZWdpc3Rlcih2b2lkKTsKIAogI2lmZGVmIENPTkZJR19ERUJVR19GUwogdm9pZCBtc21f Z2VtX2Rlc2NyaWJlKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBzdHJ1Y3Qgc2VxX2ZpbGUg Km0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fa21zLmggYi9kcml2ZXJz L2dwdS9kcm0vbXNtL21zbV9rbXMuaAppbmRleCAzNjIwMWY0M2ZhMzEuLmZmOGViMGRkZTYwNiAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fa21zLmgKKysrIGIvZHJpdmVycy9n cHUvZHJtL21zbS9tc21fa21zLmgKQEAgLTEsNCArMSw1IEBACiAvKgorICogQ29weXJpZ2h0IChj KSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog ICogQ29weXJpZ2h0IChDKSAyMDEzIFJlZCBIYXQKICAqIEF1dGhvcjogUm9iIENsYXJrIDxyb2Jk Y2xhcmtAZ21haWwuY29tPgogICoKQEAgLTUxLDYgKzUyLDExIEBAIHN0cnVjdCBtc21fa21zX2Z1 bmNzIHsKIAljb25zdCBzdHJ1Y3QgbXNtX2Zvcm1hdCAqKCpnZXRfZm9ybWF0KShzdHJ1Y3QgbXNt X2ttcyAqa21zLAogCQkJCQljb25zdCB1aW50MzJfdCBmb3JtYXQsCiAJCQkJCWNvbnN0IHVpbnQ2 NF90IG1vZGlmaWVycyk7CisJLyogZG8gZm9ybWF0IGNoZWNraW5nIG9uIGZvcm1hdCBtb2RpZmll ZCB0aHJvdWdoIGZiX2NtZDIgbW9kaWZpZXJzICovCisJaW50ICgqY2hlY2tfbW9kaWZpZWRfZm9y bWF0KShjb25zdCBzdHJ1Y3QgbXNtX2ttcyAqa21zLAorCQkJY29uc3Qgc3RydWN0IG1zbV9mb3Jt YXQgKm1zbV9mbXQsCisJCQljb25zdCBzdHJ1Y3QgZHJtX21vZGVfZmJfY21kMiAqY21kLAorCQkJ c3RydWN0IGRybV9nZW1fb2JqZWN0ICoqYm9zKTsKIAkvKiBtaXNjOiAqLwogCWxvbmcgKCpyb3Vu ZF9waXhjbGspKHN0cnVjdCBtc21fa21zICprbXMsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKIAkJCXN0 cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rlcik7CkBAIC05MSw2ICs5Nyw3IEBAIHN0YXRpYyBpbmxp bmUgdm9pZCBtc21fa21zX2luaXQoc3RydWN0IG1zbV9rbXMgKmttcywKIAogc3RydWN0IG1zbV9r bXMgKm1kcDRfa21zX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBzdHJ1Y3QgbXNtX2tt cyAqbWRwNV9rbXNfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK3N0cnVjdCBtc21fa21z ICpkcHVfa21zX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiAKIHN0cnVjdCBtc21fbWRz c19mdW5jcyB7CiAJaW50ICgqZW5hYmxlKShzdHJ1Y3QgbXNtX21kc3MgKm1kc3MpOwpAQCAtMTA0 LDUgKzExMSw2IEBAIHN0cnVjdCBtc21fbWRzcyB7CiB9OwogCiBpbnQgbWRwNV9tZHNzX2luaXQo c3RydWN0IGRybV9kZXZpY2UgKmRldik7CitpbnQgZHB1X21kc3NfaW5pdChzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2KTsKIAogI2VuZGlmIC8qIF9fTVNNX0tNU19IX18gKi8KZGlmZiAtLWdpdCBhL2lu Y2x1ZGUvdWFwaS9tZWRpYS9tc21fbWVkaWFfaW5mby5oIGIvaW5jbHVkZS91YXBpL21lZGlhL21z bV9tZWRpYV9pbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi40 ZjEyZTVjNTM0YzgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3VhcGkvbWVkaWEvbXNtX21l ZGlhX2luZm8uaApAQCAtMCwwICsxLDEzNzYgQEAKKyNpZm5kZWYgX19NRURJQV9JTkZPX0hfXwor I2RlZmluZSBfX01FRElBX0lORk9fSF9fCisKKyNpZm5kZWYgTVNNX01FRElBX0FMSUdOCisjZGVm aW5lIE1TTV9NRURJQV9BTElHTihfX3N6LCBfX2FsaWduKSAoKChfX2FsaWduKSAmICgoX19hbGln bikgLSAxKSkgP1wKKwkoKCgoX19zeikgKyAoX19hbGlnbikgLSAxKSAvIChfX2FsaWduKSkgKiAo X19hbGlnbikpIDpcCisJKCgoX19zeikgKyAoX19hbGlnbikgLSAxKSAmICh+KChfX2FsaWduKSAt IDEpKSkpCisjZW5kaWYKKworI2lmbmRlZiBNU01fTUVESUFfUk9VTkRVUAorI2RlZmluZSBNU01f TUVESUFfUk9VTkRVUChfX3N6LCBfX3IpICgoKF9fc3opICsgKChfX3IpIC0gMSkpIC8gKF9fcikp CisjZW5kaWYKKworI2lmbmRlZiBNU01fTUVESUFfTUFYCisjZGVmaW5lIE1TTV9NRURJQV9NQVgo X19hLCBfX2IpICgoX19hKSA+IChfX2IpPyhfX2EpOihfX2IpKQorI2VuZGlmCisKK2VudW0gY29s b3JfZm10cyB7CisJLyogVmVudXMgTlYxMjoKKwkgKiBZVVYgNDoyOjAgaW1hZ2Ugd2l0aCBhIHBs YW5lIG9mIDggYml0IFkgc2FtcGxlcyBmb2xsb3dlZAorCSAqIGJ5IGFuIGludGVybGVhdmVkIFUv ViBwbGFuZSBjb250YWluaW5nIDggYml0IDJ4MiBzdWJzYW1wbGVkCisJICogY29sb3VyIGRpZmZl cmVuY2Ugc2FtcGxlcy4KKwkgKgorCSAqIDwtLS0tLS0tLSBZL1VWX1N0cmlkZSAtLS0tLS0tLT4K KwkgKiA8LS0tLS0tLSBXaWR0aCAtLS0tLS0tPgorCSAqIFkgWSBZIFkgWSBZIFkgWSBZIFkgWSBZ IC4gLiAuIC4gIF4gICAgICAgICAgIF4KKwkgKiBZIFkgWSBZIFkgWSBZIFkgWSBZIFkgWSAuIC4g LiAuICB8ICAgICAgICAgICB8CisJICogWSBZIFkgWSBZIFkgWSBZIFkgWSBZIFkgLiAuIC4gLiAg SGVpZ2h0ICAgICAgfAorCSAqIFkgWSBZIFkgWSBZIFkgWSBZIFkgWSBZIC4gLiAuIC4gIHwgICAg ICAgICAgWV9TY2FubGluZXMKKwkgKiBZIFkgWSBZIFkgWSBZIFkgWSBZIFkgWSAuIC4gLiAuICB8 ICAgICAgICAgICB8CisJICogWSBZIFkgWSBZIFkgWSBZIFkgWSBZIFkgLiAuIC4gLiAgfCAgICAg ICAgICAgfAorCSAqIFkgWSBZIFkgWSBZIFkgWSBZIFkgWSBZIC4gLiAuIC4gIHwgICAgICAgICAg IHwKKwkgKiBZIFkgWSBZIFkgWSBZIFkgWSBZIFkgWSAuIC4gLiAuICBWICAgICAgICAgICB8CisJ ICogLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgICAgICAgICAgICAgfAorCSAqIC4g LiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gICAgICAgICAgICAgIHwKKwkgKiAuIC4gLiAu IC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAgICAgICAgICAgICB8CisJICogLiAuIC4gLiAuIC4g LiAuIC4gLiAuIC4gLiAuIC4gLiAgICAgICAgICAgICAgVgorCSAqIFUgViBVIFYgVSBWIFUgViBV IFYgVSBWIC4gLiAuIC4gIF4KKwkgKiBVIFYgVSBWIFUgViBVIFYgVSBWIFUgViAuIC4gLiAuICB8 CisJICogVSBWIFUgViBVIFYgVSBWIFUgViBVIFYgLiAuIC4gLiAgfAorCSAqIFUgViBVIFYgVSBW IFUgViBVIFYgVSBWIC4gLiAuIC4gIFVWX1NjYW5saW5lcworCSAqIC4gLiAuIC4gLiAuIC4gLiAu IC4gLiAuIC4gLiAuIC4gIHwKKwkgKiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICBW CisJICogLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgLS0+IEJ1ZmZlciBzaXplIGFs aWdubWVudAorCSAqCisJICogWV9TdHJpZGUgOiBXaWR0aCBhbGlnbmVkIHRvIDEyOAorCSAqIFVW X1N0cmlkZSA6IFdpZHRoIGFsaWduZWQgdG8gMTI4CisJICogWV9TY2FubGluZXM6IEhlaWdodCBh bGlnbmVkIHRvIDMyCisJICogVVZfU2NhbmxpbmVzOiBIZWlnaHQvMiBhbGlnbmVkIHRvIDE2CisJ ICogRXh0cmFkYXRhOiBBcmJpdHJhcnkgKHNvZnR3YXJlLWltcG9zZWQpIHBhZGRpbmcKKwkgKiBU b3RhbCBzaXplID0gYWxpZ24oKFlfU3RyaWRlICogWV9TY2FubGluZXMKKwkgKiAgICAgICAgICAr IFVWX1N0cmlkZSAqIFVWX1NjYW5saW5lcworCSAqICAgICAgICAgICsgbWF4KEV4dHJhZGF0YSwg WV9TdHJpZGUgKiA4KSwgNDA5NikKKwkgKi8KKwlDT0xPUl9GTVRfTlYxMiwKKworCS8qIFZlbnVz IE5WMjE6CisJICogWVVWIDQ6MjowIGltYWdlIHdpdGggYSBwbGFuZSBvZiA4IGJpdCBZIHNhbXBs ZXMgZm9sbG93ZWQKKwkgKiBieSBhbiBpbnRlcmxlYXZlZCBWL1UgcGxhbmUgY29udGFpbmluZyA4 IGJpdCAyeDIgc3Vic2FtcGxlZAorCSAqIGNvbG91ciBkaWZmZXJlbmNlIHNhbXBsZXMuCisJICoK KwkgKiA8LS0tLS0tLS0gWS9VVl9TdHJpZGUgLS0tLS0tLS0+CisJICogPC0tLS0tLS0gV2lkdGgg LS0tLS0tLT4KKwkgKiBZIFkgWSBZIFkgWSBZIFkgWSBZIFkgWSAuIC4gLiAuICBeICAgICAgICAg ICBeCisJICogWSBZIFkgWSBZIFkgWSBZIFkgWSBZIFkgLiAuIC4gLiAgfCAgICAgICAgICAgfAor CSAqIFkgWSBZIFkgWSBZIFkgWSBZIFkgWSBZIC4gLiAuIC4gIEhlaWdodCAgICAgIHwKKwkgKiBZ IFkgWSBZIFkgWSBZIFkgWSBZIFkgWSAuIC4gLiAuICB8ICAgICAgICAgIFlfU2NhbmxpbmVzCisJ ICogWSBZIFkgWSBZIFkgWSBZIFkgWSBZIFkgLiAuIC4gLiAgfCAgICAgICAgICAgfAorCSAqIFkg WSBZIFkgWSBZIFkgWSBZIFkgWSBZIC4gLiAuIC4gIHwgICAgICAgICAgIHwKKwkgKiBZIFkgWSBZ IFkgWSBZIFkgWSBZIFkgWSAuIC4gLiAuICB8ICAgICAgICAgICB8CisJICogWSBZIFkgWSBZIFkg WSBZIFkgWSBZIFkgLiAuIC4gLiAgViAgICAgICAgICAgfAorCSAqIC4gLiAuIC4gLiAuIC4gLiAu IC4gLiAuIC4gLiAuIC4gICAgICAgICAgICAgIHwKKwkgKiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4g LiAuIC4gLiAuICAgICAgICAgICAgICB8CisJICogLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAu IC4gLiAgICAgICAgICAgICAgfAorCSAqIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4g ICAgICAgICAgICAgIFYKKwkgKiBWIFUgViBVIFYgVSBWIFUgViBVIFYgVSAuIC4gLiAuICBeCisJ ICogViBVIFYgVSBWIFUgViBVIFYgVSBWIFUgLiAuIC4gLiAgfAorCSAqIFYgVSBWIFUgViBVIFYg VSBWIFUgViBVIC4gLiAuIC4gIHwKKwkgKiBWIFUgViBVIFYgVSBWIFUgViBVIFYgVSAuIC4gLiAu ICBVVl9TY2FubGluZXMKKwkgKiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICB8CisJ ICogLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgVgorCSAqIC4gLiAuIC4gLiAuIC4g LiAuIC4gLiAuIC4gLiAuIC4gIC0tPiBQYWRkaW5nICYgQnVmZmVyIHNpemUgYWxpZ25tZW50CisJ ICoKKwkgKiBZX1N0cmlkZSA6IFdpZHRoIGFsaWduZWQgdG8gMTI4CisJICogVVZfU3RyaWRlIDog V2lkdGggYWxpZ25lZCB0byAxMjgKKwkgKiBZX1NjYW5saW5lczogSGVpZ2h0IGFsaWduZWQgdG8g MzIKKwkgKiBVVl9TY2FubGluZXM6IEhlaWdodC8yIGFsaWduZWQgdG8gMTYKKwkgKiBFeHRyYWRh dGE6IEFyYml0cmFyeSAoc29mdHdhcmUtaW1wb3NlZCkgcGFkZGluZworCSAqIFRvdGFsIHNpemUg PSBhbGlnbigoWV9TdHJpZGUgKiBZX1NjYW5saW5lcworCSAqICAgICAgICAgICsgVVZfU3RyaWRl ICogVVZfU2NhbmxpbmVzCisJICogICAgICAgICAgKyBtYXgoRXh0cmFkYXRhLCBZX1N0cmlkZSAq IDgpLCA0MDk2KQorCSAqLworCUNPTE9SX0ZNVF9OVjIxLAorCS8qIFZlbnVzIE5WMTJfTVZUQjoK KwkgKiBUd28gWVVWIDQ6MjowIGltYWdlcy92aWV3cyBvbmUgYWZ0ZXIgdGhlIG90aGVyCisJICog aW4gYSB0b3AtYm90dG9tIGxheW91dCwgc2FtZSBhcyBOVjEyCisJICogd2l0aCBhIHBsYW5lIG9m IDggYml0IFkgc2FtcGxlcyBmb2xsb3dlZAorCSAqIGJ5IGFuIGludGVybGVhdmVkIFUvViBwbGFu ZSBjb250YWluaW5nIDggYml0IDJ4MiBzdWJzYW1wbGVkCisJICogY29sb3VyIGRpZmZlcmVuY2Ug c2FtcGxlcy4KKwkgKgorCSAqCisJICogPC0tLS0tLS0tIFkvVVZfU3RyaWRlIC0tLS0tLS0tPgor CSAqIDwtLS0tLS0tIFdpZHRoIC0tLS0tLS0+CisJICogWSBZIFkgWSBZIFkgWSBZIFkgWSBZIFkg LiAuIC4gLiAgXiAgICAgICAgICAgXiAgICAgICAgICAgICAgIF4KKwkgKiBZIFkgWSBZIFkgWSBZ IFkgWSBZIFkgWSAuIC4gLiAuICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgfAorCSAqIFkg WSBZIFkgWSBZIFkgWSBZIFkgWSBZIC4gLiAuIC4gIEhlaWdodCAgICAgIHwgICAgICAgICAgICAg ICB8CisJICogWSBZIFkgWSBZIFkgWSBZIFkgWSBZIFkgLiAuIC4gLiAgfCAgICAgICAgICBZX1Nj YW5saW5lcyAgICAgIHwKKwkgKiBZIFkgWSBZIFkgWSBZIFkgWSBZIFkgWSAuIC4gLiAuICB8ICAg ICAgICAgICB8ICAgICAgICAgICAgICAgfAorCSAqIFkgWSBZIFkgWSBZIFkgWSBZIFkgWSBZIC4g LiAuIC4gIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICB8CisJICogWSBZIFkgWSBZIFkgWSBZ IFkgWSBZIFkgLiAuIC4gLiAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwKKwkgKiBZIFkg WSBZIFkgWSBZIFkgWSBZIFkgWSAuIC4gLiAuICBWICAgICAgICAgICB8ICAgICAgICAgICAgICAg fAorCSAqIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gICAgICAgICAgICAgIHwgICAg ICAgICAgICAgVmlld18xCisJICogLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgICAg ICAgICAgICAgfCAgICAgICAgICAgICAgIHwKKwkgKiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAu IC4gLiAuICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfAorCSAqIC4gLiAuIC4gLiAuIC4g LiAuIC4gLiAuIC4gLiAuIC4gICAgICAgICAgICAgIFYgICAgICAgICAgICAgICB8CisJICogVSBW IFUgViBVIFYgVSBWIFUgViBVIFYgLiAuIC4gLiAgXiAgICAgICAgICAgICAgICAgICAgICAgICAg IHwKKwkgKiBVIFYgVSBWIFUgViBVIFYgVSBWIFUgViAuIC4gLiAuICB8ICAgICAgICAgICAgICAg ICAgICAgICAgICAgfAorCSAqIFUgViBVIFYgVSBWIFUgViBVIFYgVSBWIC4gLiAuIC4gIHwgICAg ICAgICAgICAgICAgICAgICAgICAgICB8CisJICogVSBWIFUgViBVIFYgVSBWIFUgViBVIFYgLiAu IC4gLiAgVVZfU2NhbmxpbmVzICAgICAgICAgICAgICAgIHwKKwkgKiAuIC4gLiAuIC4gLiAuIC4g LiAuIC4gLiAuIC4gLiAuICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSAqIC4gLiAu IC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIFYgICAgICAgICAgICAgICAgICAgICAgICAgICBW CisJICogWSBZIFkgWSBZIFkgWSBZIFkgWSBZIFkgLiAuIC4gLiAgXiAgICAgICAgICAgXiAgICAg ICAgICAgICAgIF4KKwkgKiBZIFkgWSBZIFkgWSBZIFkgWSBZIFkgWSAuIC4gLiAuICB8ICAgICAg ICAgICB8ICAgICAgICAgICAgICAgfAorCSAqIFkgWSBZIFkgWSBZIFkgWSBZIFkgWSBZIC4gLiAu IC4gIEhlaWdodCAgICAgIHwgICAgICAgICAgICAgICB8CisJICogWSBZIFkgWSBZIFkgWSBZIFkg WSBZIFkgLiAuIC4gLiAgfCAgICAgICAgICBZX1NjYW5saW5lcyAgICAgIHwKKwkgKiBZIFkgWSBZ IFkgWSBZIFkgWSBZIFkgWSAuIC4gLiAuICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgfAor CSAqIFkgWSBZIFkgWSBZIFkgWSBZIFkgWSBZIC4gLiAuIC4gIHwgICAgICAgICAgIHwgICAgICAg ICAgICAgICB8CisJICogWSBZIFkgWSBZIFkgWSBZIFkgWSBZIFkgLiAuIC4gLiAgfCAgICAgICAg ICAgfCAgICAgICAgICAgICAgIHwKKwkgKiBZIFkgWSBZIFkgWSBZIFkgWSBZIFkgWSAuIC4gLiAu ICBWICAgICAgICAgICB8ICAgICAgICAgICAgICAgfAorCSAqIC4gLiAuIC4gLiAuIC4gLiAuIC4g LiAuIC4gLiAuIC4gICAgICAgICAgICAgIHwgICAgICAgICAgICAgVmlld18yCisJICogLiAuIC4g LiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwK KwkgKiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAgICAgICAgICAgICB8ICAgICAg ICAgICAgICAgfAorCSAqIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gICAgICAgICAg ICAgIFYgICAgICAgICAgICAgICB8CisJICogVSBWIFUgViBVIFYgVSBWIFUgViBVIFYgLiAuIC4g LiAgXiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgKiBVIFYgVSBWIFUgViBVIFYgVSBW IFUgViAuIC4gLiAuICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSAqIFUgViBVIFYg VSBWIFUgViBVIFYgVSBWIC4gLiAuIC4gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJ ICogVSBWIFUgViBVIFYgVSBWIFUgViBVIFYgLiAuIC4gLiAgVVZfU2NhbmxpbmVzICAgICAgICAg ICAgICAgIHwKKwkgKiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICB8ICAgICAgICAg ICAgICAgICAgICAgICAgICAgfAorCSAqIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4g IFYgICAgICAgICAgICAgICAgICAgICAgICAgICBWCisJICogLiAuIC4gLiAuIC4gLiAuIC4gLiAu IC4gLiAuIC4gLiAgLS0+IEJ1ZmZlciBzaXplIGFsaWdubWVudAorCSAqCisJICogWV9TdHJpZGUg OiBXaWR0aCBhbGlnbmVkIHRvIDEyOAorCSAqIFVWX1N0cmlkZSA6IFdpZHRoIGFsaWduZWQgdG8g MTI4CisJICogWV9TY2FubGluZXM6IEhlaWdodCBhbGlnbmVkIHRvIDMyCisJICogVVZfU2Nhbmxp bmVzOiBIZWlnaHQvMiBhbGlnbmVkIHRvIDE2CisJICogVmlld18xIGJlZ2luIGF0OiAwICh6ZXJv KQorCSAqIFZpZXdfMiBiZWdpbiBhdDogWV9TdHJpZGUgKiBZX1NjYW5saW5lcyArIFVWX1N0cmlk ZSAqIFVWX1NjYW5saW5lcworCSAqIEV4dHJhZGF0YTogQXJiaXRyYXJ5IChzb2Z0d2FyZS1pbXBv c2VkKSBwYWRkaW5nCisJICogVG90YWwgc2l6ZSA9IGFsaWduKCgyKihZX1N0cmlkZSAqIFlfU2Nh bmxpbmVzKQorCSAqICAgICAgICAgICsgMiooVVZfU3RyaWRlICogVVZfU2NhbmxpbmVzKSArIEV4 dHJhZGF0YSksIDQwOTYpCisJICovCisJQ09MT1JfRk1UX05WMTJfTVZUQiwKKwkvKgorCSAqIFRo ZSBidWZmZXIgY2FuIGJlIG9mIDIgdHlwZXM6CisJICogKDEpIFZlbnVzIE5WMTIgVUJXQyBQcm9n cmVzc2l2ZQorCSAqICgyKSBWZW51cyBOVjEyIFVCV0MgSW50ZXJsYWNlZAorCSAqCisJICogKDEp IFZlbnVzIE5WMTIgVUJXQyBQcm9ncmVzc2l2ZSBCdWZmZXIgRm9ybWF0OgorCSAqIENvbXByZXNz ZWQgTWFjcm8tdGlsZSBmb3JtYXQgZm9yIE5WMTIuCisJICogQ29udGFpbnMgNCBwbGFuZXMgaW4g dGhlIGZvbGxvd2luZyBvcmRlciAtCisJICogKEEpIFlfTWV0YV9QbGFuZQorCSAqIChCKSBZX1VC V0NfUGxhbmUKKwkgKiAoQykgVVZfTWV0YV9QbGFuZQorCSAqIChEKSBVVl9VQldDX1BsYW5lCisJ ICoKKwkgKiBZX01ldGFfUGxhbmUgY29uc2lzdHMgb2YgbWV0YSBpbmZvcm1hdGlvbiB0byBkZWNv ZGUgY29tcHJlc3NlZAorCSAqIHRpbGUgZGF0YSBpbiBZX1VCV0NfUGxhbmUuCisJICogWV9VQldD X1BsYW5lIGNvbnNpc3RzIG9mIFkgZGF0YSBpbiBjb21wcmVzc2VkIG1hY3JvLXRpbGUgZm9ybWF0 LgorCSAqIFVCV0MgZGVjb2RlciBibG9jayB3aWxsIHVzZSB0aGUgWV9NZXRhX1BsYW5lIGRhdGEg dG9nZXRoZXIgd2l0aAorCSAqIFlfVUJXQ19QbGFuZSBkYXRhIHRvIHByb2R1Y2UgbG9zcy1sZXNz IHVuY29tcHJlc3NlZCA4IGJpdCBZIHNhbXBsZXMuCisJICoKKwkgKiBVVl9NZXRhX1BsYW5lIGNv bnNpc3RzIG9mIG1ldGEgaW5mb3JtYXRpb24gdG8gZGVjb2RlIGNvbXByZXNzZWQKKwkgKiB0aWxl IGRhdGEgaW4gVVZfVUJXQ19QbGFuZS4KKwkgKiBVVl9VQldDX1BsYW5lIGNvbnNpc3RzIG9mIFVW IGRhdGEgaW4gY29tcHJlc3NlZCBtYWNyby10aWxlIGZvcm1hdC4KKwkgKiBVQldDIGRlY29kZXIg YmxvY2sgd2lsbCB1c2UgVVZfTWV0YV9QbGFuZSBkYXRhIHRvZ2V0aGVyIHdpdGgKKwkgKiBVVl9V QldDX1BsYW5lIGRhdGEgdG8gcHJvZHVjZSBsb3NzLWxlc3MgdW5jb21wcmVzc2VkIDggYml0IDJ4 MgorCSAqIHN1YnNhbXBsZWQgY29sb3IgZGlmZmVyZW5jZSBzYW1wbGVzLgorCSAqCisJICogRWFj aCB0aWxlIGluIFlfVUJXQ19QbGFuZS9VVl9VQldDX1BsYW5lIGlzIGluZGVwZW5kZW50bHkgZGVj b2RhYmxlCisJICogYW5kIHJhbmRvbWx5IGFjY2Vzc2libGUuIFRoZXJlIGlzIG5vIGRlcGVuZGVu Y3kgYmV0d2VlbiB0aWxlcy4KKwkgKgorCSAqIDwtLS0tLSBZX01ldGFfU3RyaWRlIC0tLS0+CisJ ICogPC0tLS0tLS0tIFdpZHRoIC0tLS0tLT4KKwkgKiBNIE0gTSBNIE0gTSBNIE0gTSBNIE0gTSAu IC4gICAgICBeICAgICAgICAgICBeCisJICogTSBNIE0gTSBNIE0gTSBNIE0gTSBNIE0gLiAuICAg ICAgfCAgICAgICAgICAgfAorCSAqIE0gTSBNIE0gTSBNIE0gTSBNIE0gTSBNIC4gLiAgICAgIEhl aWdodCAgICAgIHwKKwkgKiBNIE0gTSBNIE0gTSBNIE0gTSBNIE0gTSAuIC4gICAgICB8ICAgICAg ICAgTWV0YV9ZX1NjYW5saW5lcworCSAqIE0gTSBNIE0gTSBNIE0gTSBNIE0gTSBNIC4gLiAgICAg IHwgICAgICAgICAgIHwKKwkgKiBNIE0gTSBNIE0gTSBNIE0gTSBNIE0gTSAuIC4gICAgICB8ICAg ICAgICAgICB8CisJICogTSBNIE0gTSBNIE0gTSBNIE0gTSBNIE0gLiAuICAgICAgfCAgICAgICAg ICAgfAorCSAqIE0gTSBNIE0gTSBNIE0gTSBNIE0gTSBNIC4gLiAgICAgIFYgICAgICAgICAgIHwK KwkgKiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gICAgICAgICAgICAgICAgICB8CisJICog LiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAgICAgICAgICAgICAgICAgfAorCSAqIC4gLiAu IC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgICAgIC0tLS0tLS0+IEJ1ZmZlciBzaXplIGFsaWduZWQg dG8gNGsKKwkgKiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gICAgICAgICAgICAgICAgICBW CisJICogPC0tQ29tcHJlc3NlZCB0aWxlIFkgU3RyaWRlLS0tPgorCSAqIDwtLS0tLS0tIFdpZHRo IC0tLS0tLS0+CisJICogWSogWSogWSogWSogWSogWSogWSogWSogLiAuIC4gLiAgXiAgICAgICAg ICAgXgorCSAqIFkqIFkqIFkqIFkqIFkqIFkqIFkqIFkqIC4gLiAuIC4gIHwgICAgICAgICAgIHwK KwkgKiBZKiBZKiBZKiBZKiBZKiBZKiBZKiBZKiAuIC4gLiAuICBIZWlnaHQgICAgICB8CisJICog WSogWSogWSogWSogWSogWSogWSogWSogLiAuIC4gLiAgfCAgICAgICAgTWFjcm9fdGlsZV9ZX1Nj YW5saW5lcworCSAqIFkqIFkqIFkqIFkqIFkqIFkqIFkqIFkqIC4gLiAuIC4gIHwgICAgICAgICAg IHwKKwkgKiBZKiBZKiBZKiBZKiBZKiBZKiBZKiBZKiAuIC4gLiAuICB8ICAgICAgICAgICB8CisJ ICogWSogWSogWSogWSogWSogWSogWSogWSogLiAuIC4gLiAgfCAgICAgICAgICAgfAorCSAqIFkq IFkqIFkqIFkqIFkqIFkqIFkqIFkqIC4gLiAuIC4gIFYgICAgICAgICAgIHwKKwkgKiAuIC4gLiAu IC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAgICAgICAgICAgICB8CisJICogLiAuIC4gLiAuIC4g LiAuIC4gLiAuIC4gLiAuIC4gLiAgICAgICAgICAgICAgfAorCSAqIC4gLiAuIC4gLiAuIC4gLiAu IC4gLiAuIC4gLiAuIC4gIC0tLS0tLS0+IEJ1ZmZlciBzaXplIGFsaWduZWQgdG8gNGsKKwkgKiAu IC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAgICAgICAgICAgICBWCisJICogPC0tLS0t IFVWX01ldGFfU3RyaWRlIC0tLS0+CisJICogTSBNIE0gTSBNIE0gTSBNIE0gTSBNIE0gLiAuICAg ICAgXgorCSAqIE0gTSBNIE0gTSBNIE0gTSBNIE0gTSBNIC4gLiAgICAgIHwKKwkgKiBNIE0gTSBN IE0gTSBNIE0gTSBNIE0gTSAuIC4gICAgICB8CisJICogTSBNIE0gTSBNIE0gTSBNIE0gTSBNIE0g LiAuICAgICAgTV9VVl9TY2FubGluZXMKKwkgKiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4g ICAgICB8CisJICogLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAgICAgVgorCSAqIC4gLiAu IC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgICAgIC0tLS0tLS0+IEJ1ZmZlciBzaXplIGFsaWduZWQg dG8gNGsKKwkgKiA8LS1Db21wcmVzc2VkIHRpbGUgVVYgU3RyaWRlLS0tPgorCSAqIFUqIFYqIFUq IFYqIFUqIFYqIFUqIFYqIC4gLiAuIC4gIF4KKwkgKiBVKiBWKiBVKiBWKiBVKiBWKiBVKiBWKiAu IC4gLiAuICB8CisJICogVSogViogVSogViogVSogViogVSogViogLiAuIC4gLiAgfAorCSAqIFUq IFYqIFUqIFYqIFUqIFYqIFUqIFYqIC4gLiAuIC4gIFVWX1NjYW5saW5lcworCSAqIC4gLiAuIC4g LiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIHwKKwkgKiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAu IC4gLiAuICBWCisJICogLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgLS0tLS0tLT4g QnVmZmVyIHNpemUgYWxpZ25lZCB0byA0aworCSAqCisJICogWV9TdHJpZGUgPSBhbGlnbihXaWR0 aCwgMTI4KQorCSAqIFVWX1N0cmlkZSA9IGFsaWduKFdpZHRoLCAxMjgpCisJICogWV9TY2FubGlu ZXMgPSBhbGlnbihIZWlnaHQsIDMyKQorCSAqIFVWX1NjYW5saW5lcyA9IGFsaWduKEhlaWdodC8y LCAxNikKKwkgKiBZX1VCV0NfUGxhbmVfc2l6ZSA9IGFsaWduKFlfU3RyaWRlICogWV9TY2FubGlu ZXMsIDQwOTYpCisJICogVVZfVUJXQ19QbGFuZV9zaXplID0gYWxpZ24oVVZfU3RyaWRlICogVVZf U2NhbmxpbmVzLCA0MDk2KQorCSAqIFlfTWV0YV9TdHJpZGUgPSBhbGlnbihyb3VuZHVwKFdpZHRo LCBZX1RpbGVXaWR0aCksIDY0KQorCSAqIFlfTWV0YV9TY2FubGluZXMgPSBhbGlnbihyb3VuZHVw KEhlaWdodCwgWV9UaWxlSGVpZ2h0KSwgMTYpCisJICogWV9NZXRhX1BsYW5lX3NpemUgPSBhbGln bihZX01ldGFfU3RyaWRlICogWV9NZXRhX1NjYW5saW5lcywgNDA5NikKKwkgKiBVVl9NZXRhX1N0 cmlkZSA9IGFsaWduKHJvdW5kdXAoV2lkdGgsIFVWX1RpbGVXaWR0aCksIDY0KQorCSAqIFVWX01l dGFfU2NhbmxpbmVzID0gYWxpZ24ocm91bmR1cChIZWlnaHQsIFVWX1RpbGVIZWlnaHQpLCAxNikK KwkgKiBVVl9NZXRhX1BsYW5lX3NpemUgPSBhbGlnbihVVl9NZXRhX1N0cmlkZSAqIFVWX01ldGFf U2NhbmxpbmVzLCA0MDk2KQorCSAqIEV4dHJhZGF0YSA9IDhrCisJICoKKwkgKiBUb3RhbCBzaXpl ID0gYWxpZ24oIFlfVUJXQ19QbGFuZV9zaXplICsgVVZfVUJXQ19QbGFuZV9zaXplICsKKwkgKiAg ICAgICAgICAgWV9NZXRhX1BsYW5lX3NpemUgKyBVVl9NZXRhX1BsYW5lX3NpemUKKwkgKiAgICAg ICAgICAgKyBtYXgoRXh0cmFkYXRhLCBZX1N0cmlkZSAqIDQ4KSwgNDA5NikKKwkgKgorCSAqCisJ ICogKDIpIFZlbnVzIE5WMTIgVUJXQyBJbnRlcmxhY2VkIEJ1ZmZlciBGb3JtYXQ6CisJICogQ29t cHJlc3NlZCBNYWNyby10aWxlIGZvcm1hdCBmb3IgTlYxMiBpbnRlcmxhY2VkLgorCSAqIENvbnRh aW5zIDggcGxhbmVzIGluIHRoZSBmb2xsb3dpbmcgb3JkZXIgLQorCSAqIChBKSBZX01ldGFfVG9w X0ZpZWxkX1BsYW5lCisJICogKEIpIFlfVUJXQ19Ub3BfRmllbGRfUGxhbmUKKwkgKiAoQykgVVZf TWV0YV9Ub3BfRmllbGRfUGxhbmUKKwkgKiAoRCkgVVZfVUJXQ19Ub3BfRmllbGRfUGxhbmUKKwkg KiAoRSkgWV9NZXRhX0JvdHRvbV9GaWVsZF9QbGFuZQorCSAqIChGKSBZX1VCV0NfQm90dG9tX0Zp ZWxkX1BsYW5lCisJICogKEcpIFVWX01ldGFfQm90dG9tX0ZpZWxkX1BsYW5lCisJICogKEgpIFVW X1VCV0NfQm90dG9tX0ZpZWxkX1BsYW5lCisJICogWV9NZXRhX1RvcF9GaWVsZF9QbGFuZSBjb25z aXN0cyBvZiBtZXRhIGluZm9ybWF0aW9uIHRvIGRlY29kZQorCSAqIGNvbXByZXNzZWQgdGlsZSBk YXRhIGZvciBZX1VCV0NfVG9wX0ZpZWxkX1BsYW5lLgorCSAqIFlfVUJXQ19Ub3BfRmllbGRfUGxh bmUgY29uc2lzdHMgb2YgWSBkYXRhIGluIGNvbXByZXNzZWQgbWFjcm8tdGlsZQorCSAqIGZvcm1h dCBmb3IgdG9wIGZpZWxkIG9mIGFuIGludGVybGFjZWQgZnJhbWUuCisJICogVUJXQyBkZWNvZGVy IGJsb2NrIHdpbGwgdXNlIHRoZSBZX01ldGFfVG9wX0ZpZWxkX1BsYW5lIGRhdGEgdG9nZXRoZXIK KwkgKiB3aXRoIFlfVUJXQ19Ub3BfRmllbGRfUGxhbmUgZGF0YSB0byBwcm9kdWNlIGxvc3MtbGVz cyB1bmNvbXByZXNzZWQKKwkgKiA4IGJpdCBZIHNhbXBsZXMgZm9yIHRvcCBmaWVsZCBvZiBhbiBp bnRlcmxhY2VkIGZyYW1lLgorCSAqCisJICogVVZfTWV0YV9Ub3BfRmllbGRfUGxhbmUgY29uc2lz dHMgb2YgbWV0YSBpbmZvcm1hdGlvbiB0byBkZWNvZGUKKwkgKiBjb21wcmVzc2VkIHRpbGUgZGF0 YSBpbiBVVl9VQldDX1RvcF9GaWVsZF9QbGFuZS4KKwkgKiBVVl9VQldDX1RvcF9GaWVsZF9QbGFu ZSBjb25zaXN0cyBvZiBVViBkYXRhIGluIGNvbXByZXNzZWQgbWFjcm8tdGlsZQorCSAqIGZvcm1h dCBmb3IgdG9wIGZpZWxkIG9mIGFuIGludGVybGFjZWQgZnJhbWUuCisJICogVUJXQyBkZWNvZGVy IGJsb2NrIHdpbGwgdXNlIFVWX01ldGFfVG9wX0ZpZWxkX1BsYW5lIGRhdGEgdG9nZXRoZXIKKwkg KiB3aXRoIFVWX1VCV0NfVG9wX0ZpZWxkX1BsYW5lIGRhdGEgdG8gcHJvZHVjZSBsb3NzLWxlc3Mg dW5jb21wcmVzc2VkCisJICogOCBiaXQgc3Vic2FtcGxlZCBjb2xvciBkaWZmZXJlbmNlIHNhbXBs ZXMgZm9yIHRvcCBmaWVsZCBvZiBhbgorCSAqIGludGVybGFjZWQgZnJhbWUuCisJICoKKwkgKiBF YWNoIHRpbGUgaW4gWV9VQldDX1RvcF9GaWVsZF9QbGFuZS9VVl9VQldDX1RvcF9GaWVsZF9QbGFu ZSBpcworCSAqIGluZGVwZW5kZW50bHkgZGVjb2RhYmxlIGFuZCByYW5kb21seSBhY2Nlc3NpYmxl LiBUaGVyZSBpcyBubworCSAqIGRlcGVuZGVuY3kgYmV0d2VlbiB0aWxlcy4KKwkgKgorCSAqIFlf TWV0YV9Cb3R0b21fRmllbGRfUGxhbmUgY29uc2lzdHMgb2YgbWV0YSBpbmZvcm1hdGlvbiB0byBk ZWNvZGUKKwkgKiBjb21wcmVzc2VkIHRpbGUgZGF0YSBmb3IgWV9VQldDX0JvdHRvbV9GaWVsZF9Q bGFuZS4KKwkgKiBZX1VCV0NfQm90dG9tX0ZpZWxkX1BsYW5lIGNvbnNpc3RzIG9mIFkgZGF0YSBp biBjb21wcmVzc2VkIG1hY3JvLXRpbGUKKwkgKiBmb3JtYXQgZm9yIGJvdHRvbSBmaWVsZCBvZiBh biBpbnRlcmxhY2VkIGZyYW1lLgorCSAqIFVCV0MgZGVjb2RlciBibG9jayB3aWxsIHVzZSB0aGUg WV9NZXRhX0JvdHRvbV9GaWVsZF9QbGFuZSBkYXRhCisJICogdG9nZXRoZXIgd2l0aCBZX1VCV0Nf Qm90dG9tX0ZpZWxkX1BsYW5lIGRhdGEgdG8gcHJvZHVjZSBsb3NzLWxlc3MKKwkgKiB1bmNvbXBy ZXNzZWQgOCBiaXQgWSBzYW1wbGVzIGZvciBib3R0b20gZmllbGQgb2YgYW4gaW50ZXJsYWNlZCBm cmFtZS4KKwkgKgorCSAqIFVWX01ldGFfQm90dG9tX0ZpZWxkX1BsYW5lIGNvbnNpc3RzIG9mIG1l dGEgaW5mb3JtYXRpb24gdG8gZGVjb2RlCisJICogY29tcHJlc3NlZCB0aWxlIGRhdGEgaW4gVVZf VUJXQ19Cb3R0b21fRmllbGRfUGxhbmUuCisJICogVVZfVUJXQ19Cb3R0b21fRmllbGRfUGxhbmUg Y29uc2lzdHMgb2YgVVYgZGF0YSBpbiBjb21wcmVzc2VkCisJICogbWFjcm8tdGlsZSBmb3JtYXQg Zm9yIGJvdHRvbSBmaWVsZCBvZiBhbiBpbnRlcmxhY2VkIGZyYW1lLgorCSAqIFVCV0MgZGVjb2Rl ciBibG9jayB3aWxsIHVzZSBVVl9NZXRhX0JvdHRvbV9GaWVsZF9QbGFuZSBkYXRhIHRvZ2V0aGVy CisJICogd2l0aCBVVl9VQldDX0JvdHRvbV9GaWVsZF9QbGFuZSBkYXRhIHRvIHByb2R1Y2UgbG9z cy1sZXNzCisJICogdW5jb21wcmVzc2VkIDggYml0IHN1YnNhbXBsZWQgY29sb3IgZGlmZmVyZW5j ZSBzYW1wbGVzIGZvciBib3R0b20KKwkgKiBmaWVsZCBvZiBhbiBpbnRlcmxhY2VkIGZyYW1lLgor CSAqCisJICogRWFjaCB0aWxlIGluIFlfVUJXQ19Cb3R0b21fRmllbGRfUGxhbmUvVVZfVUJXQ19C b3R0b21fRmllbGRfUGxhbmUgaXMKKwkgKiBpbmRlcGVuZGVudGx5IGRlY29kYWJsZSBhbmQgcmFu ZG9tbHkgYWNjZXNzaWJsZS4gVGhlcmUgaXMgbm8KKwkgKiBkZXBlbmRlbmN5IGJldHdlZW4gdGls ZXMuCisJICoKKwkgKiA8LS0tLS1ZX1RGX01ldGFfU3RyaWRlLS0tLT4KKwkgKiA8LS0tLS0tLS0g V2lkdGggLS0tLS0tPgorCSAqIE0gTSBNIE0gTSBNIE0gTSBNIE0gTSBNIC4gLiAgICAgIF4gICAg ICAgICAgIF4KKwkgKiBNIE0gTSBNIE0gTSBNIE0gTSBNIE0gTSAuIC4gICAgICB8ICAgICAgICAg ICB8CisJICogTSBNIE0gTSBNIE0gTSBNIE0gTSBNIE0gLiAuIEhhbGZfaGVpZ2h0ICAgICAgfAor CSAqIE0gTSBNIE0gTSBNIE0gTSBNIE0gTSBNIC4gLiAgICAgIHwgICAgICAgICBNZXRhX1lfVEZf U2NhbmxpbmVzCisJICogTSBNIE0gTSBNIE0gTSBNIE0gTSBNIE0gLiAuICAgICAgfCAgICAgICAg ICAgfAorCSAqIE0gTSBNIE0gTSBNIE0gTSBNIE0gTSBNIC4gLiAgICAgIHwgICAgICAgICAgIHwK KwkgKiBNIE0gTSBNIE0gTSBNIE0gTSBNIE0gTSAuIC4gICAgICB8ICAgICAgICAgICB8CisJICog TSBNIE0gTSBNIE0gTSBNIE0gTSBNIE0gLiAuICAgICAgViAgICAgICAgICAgfAorCSAqIC4gLiAu IC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgICAgICAgICAgICAgICAgIHwKKwkgKiAuIC4gLiAuIC4g LiAuIC4gLiAuIC4gLiAuIC4gICAgICAgICAgICAgICAgICB8CisJICogLiAuIC4gLiAuIC4gLiAu IC4gLiAuIC4gLiAuICAgICAgLS0tLS0tLT4gQnVmZmVyIHNpemUgYWxpZ25lZCB0byA0aworCSAq IC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgICAgICAgICAgICAgICAgIFYKKwkgKiA8LUNv bXByZXNzZWQgdGlsZSBZX1RGIFN0cmlkZS0+CisJICogPC0tLS0tLS0gV2lkdGggLS0tLS0tLT4K KwkgKiBZKiBZKiBZKiBZKiBZKiBZKiBZKiBZKiAuIC4gLiAuICBeICAgICAgICAgICBeCisJICog WSogWSogWSogWSogWSogWSogWSogWSogLiAuIC4gLiAgfCAgICAgICAgICAgfAorCSAqIFkqIFkq IFkqIFkqIFkqIFkqIFkqIFkqIC4gLiAuIC4gSGFsZl9oZWlnaHQgIHwKKwkgKiBZKiBZKiBZKiBZ KiBZKiBZKiBZKiBZKiAuIC4gLiAuICB8ICAgICAgICBNYWNyb190aWxlX1lfVEZfU2NhbmxpbmVz CisJICogWSogWSogWSogWSogWSogWSogWSogWSogLiAuIC4gLiAgfCAgICAgICAgICAgfAorCSAq IFkqIFkqIFkqIFkqIFkqIFkqIFkqIFkqIC4gLiAuIC4gIHwgICAgICAgICAgIHwKKwkgKiBZKiBZ KiBZKiBZKiBZKiBZKiBZKiBZKiAuIC4gLiAuICB8ICAgICAgICAgICB8CisJICogWSogWSogWSog WSogWSogWSogWSogWSogLiAuIC4gLiAgViAgICAgICAgICAgfAorCSAqIC4gLiAuIC4gLiAuIC4g LiAuIC4gLiAuIC4gLiAuIC4gICAgICAgICAgICAgIHwKKwkgKiAuIC4gLiAuIC4gLiAuIC4gLiAu IC4gLiAuIC4gLiAuICAgICAgICAgICAgICB8CisJICogLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4g LiAuIC4gLiAgLS0tLS0tLT4gQnVmZmVyIHNpemUgYWxpZ25lZCB0byA0aworCSAqIC4gLiAuIC4g LiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gICAgICAgICAgICAgIFYKKwkgKiA8LS0tLVVWX1RGX01l dGFfU3RyaWRlLS0tLT4KKwkgKiBNIE0gTSBNIE0gTSBNIE0gTSBNIE0gTSAuIC4gICAgICBeCisJ ICogTSBNIE0gTSBNIE0gTSBNIE0gTSBNIE0gLiAuICAgICAgfAorCSAqIE0gTSBNIE0gTSBNIE0g TSBNIE0gTSBNIC4gLiAgICAgIHwKKwkgKiBNIE0gTSBNIE0gTSBNIE0gTSBNIE0gTSAuIC4gICAg ICBNX1VWX1RGX1NjYW5saW5lcworCSAqIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgICAg IHwKKwkgKiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gICAgICBWCisJICogLiAuIC4gLiAu IC4gLiAuIC4gLiAuIC4gLiAuICAgICAgLS0tLS0tLT4gQnVmZmVyIHNpemUgYWxpZ25lZCB0byA0 aworCSAqIDwtQ29tcHJlc3NlZCB0aWxlIFVWX1RGIFN0cmlkZS0+CisJICogVSogViogVSogViog VSogViogVSogViogLiAuIC4gLiAgXgorCSAqIFUqIFYqIFUqIFYqIFUqIFYqIFUqIFYqIC4gLiAu IC4gIHwKKwkgKiBVKiBWKiBVKiBWKiBVKiBWKiBVKiBWKiAuIC4gLiAuICB8CisJICogVSogViog VSogViogVSogViogVSogViogLiAuIC4gLiAgVVZfVEZfU2NhbmxpbmVzCisJICogLiAuIC4gLiAu IC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgfAorCSAqIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4g LiAuIC4gIFYKKwkgKiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAtLS0tLS0tPiBC dWZmZXIgc2l6ZSBhbGlnbmVkIHRvIDRrCisJICogPC0tLS0tWV9CRl9NZXRhX1N0cmlkZS0tLS0+ CisJICogPC0tLS0tLS0tIFdpZHRoIC0tLS0tLT4KKwkgKiBNIE0gTSBNIE0gTSBNIE0gTSBNIE0g TSAuIC4gICAgICBeICAgICAgICAgICBeCisJICogTSBNIE0gTSBNIE0gTSBNIE0gTSBNIE0gLiAu ICAgICAgfCAgICAgICAgICAgfAorCSAqIE0gTSBNIE0gTSBNIE0gTSBNIE0gTSBNIC4gLiBIYWxm X2hlaWdodCAgICAgIHwKKwkgKiBNIE0gTSBNIE0gTSBNIE0gTSBNIE0gTSAuIC4gICAgICB8ICAg ICAgICAgTWV0YV9ZX0JGX1NjYW5saW5lcworCSAqIE0gTSBNIE0gTSBNIE0gTSBNIE0gTSBNIC4g LiAgICAgIHwgICAgICAgICAgIHwKKwkgKiBNIE0gTSBNIE0gTSBNIE0gTSBNIE0gTSAuIC4gICAg ICB8ICAgICAgICAgICB8CisJICogTSBNIE0gTSBNIE0gTSBNIE0gTSBNIE0gLiAuICAgICAgfCAg ICAgICAgICAgfAorCSAqIE0gTSBNIE0gTSBNIE0gTSBNIE0gTSBNIC4gLiAgICAgIFYgICAgICAg ICAgIHwKKwkgKiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gICAgICAgICAgICAgICAgICB8 CisJICogLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAgICAgICAgICAgICAgICAgfAorCSAq IC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgICAgIC0tLS0tLS0+IEJ1ZmZlciBzaXplIGFs aWduZWQgdG8gNGsKKwkgKiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gICAgICAgICAgICAg ICAgICBWCisJICogPC1Db21wcmVzc2VkIHRpbGUgWV9CRiBTdHJpZGUtPgorCSAqIDwtLS0tLS0t IFdpZHRoIC0tLS0tLS0+CisJICogWSogWSogWSogWSogWSogWSogWSogWSogLiAuIC4gLiAgXiAg ICAgICAgICAgXgorCSAqIFkqIFkqIFkqIFkqIFkqIFkqIFkqIFkqIC4gLiAuIC4gIHwgICAgICAg ICAgIHwKKwkgKiBZKiBZKiBZKiBZKiBZKiBZKiBZKiBZKiAuIC4gLiAuIEhhbGZfaGVpZ2h0ICB8 CisJICogWSogWSogWSogWSogWSogWSogWSogWSogLiAuIC4gLiAgfCAgICAgICAgTWFjcm9fdGls ZV9ZX0JGX1NjYW5saW5lcworCSAqIFkqIFkqIFkqIFkqIFkqIFkqIFkqIFkqIC4gLiAuIC4gIHwg ICAgICAgICAgIHwKKwkgKiBZKiBZKiBZKiBZKiBZKiBZKiBZKiBZKiAuIC4gLiAuICB8ICAgICAg ICAgICB8CisJICogWSogWSogWSogWSogWSogWSogWSogWSogLiAuIC4gLiAgfCAgICAgICAgICAg fAorCSAqIFkqIFkqIFkqIFkqIFkqIFkqIFkqIFkqIC4gLiAuIC4gIFYgICAgICAgICAgIHwKKwkg KiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAgICAgICAgICAgICB8CisJICogLiAu IC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgICAgICAgICAgICAgfAorCSAqIC4gLiAuIC4g LiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIC0tLS0tLS0+IEJ1ZmZlciBzaXplIGFsaWduZWQgdG8g NGsKKwkgKiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAgICAgICAgICAgICBWCisJ ICogPC0tLS1VVl9CRl9NZXRhX1N0cmlkZS0tLS0+CisJICogTSBNIE0gTSBNIE0gTSBNIE0gTSBN IE0gLiAuICAgICAgXgorCSAqIE0gTSBNIE0gTSBNIE0gTSBNIE0gTSBNIC4gLiAgICAgIHwKKwkg KiBNIE0gTSBNIE0gTSBNIE0gTSBNIE0gTSAuIC4gICAgICB8CisJICogTSBNIE0gTSBNIE0gTSBN IE0gTSBNIE0gLiAuICAgICAgTV9VVl9CRl9TY2FubGluZXMKKwkgKiAuIC4gLiAuIC4gLiAuIC4g LiAuIC4gLiAuIC4gICAgICB8CisJICogLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAgICAg VgorCSAqIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgICAgIC0tLS0tLS0+IEJ1ZmZlciBz aXplIGFsaWduZWQgdG8gNGsKKwkgKiA8LUNvbXByZXNzZWQgdGlsZSBVVl9CRiBTdHJpZGUtPgor CSAqIFUqIFYqIFUqIFYqIFUqIFYqIFUqIFYqIC4gLiAuIC4gIF4KKwkgKiBVKiBWKiBVKiBWKiBV KiBWKiBVKiBWKiAuIC4gLiAuICB8CisJICogVSogViogVSogViogVSogViogVSogViogLiAuIC4g LiAgfAorCSAqIFUqIFYqIFUqIFYqIFUqIFYqIFUqIFYqIC4gLiAuIC4gIFVWX0JGX1NjYW5saW5l cworCSAqIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIHwKKwkgKiAuIC4gLiAuIC4g LiAuIC4gLiAuIC4gLiAuIC4gLiAuICBWCisJICogLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAu IC4gLiAgLS0tLS0tLT4gQnVmZmVyIHNpemUgYWxpZ25lZCB0byA0aworCSAqCisJICogSGFsZl9o ZWlnaHQgPSAoSGVpZ2h0KzEpPj4xCisJICogWV9URl9TdHJpZGUgPSBhbGlnbihXaWR0aCwgMTI4 KQorCSAqIFVWX1RGX1N0cmlkZSA9IGFsaWduKFdpZHRoLCAxMjgpCisJICogWV9URl9TY2FubGlu ZXMgPSBhbGlnbihIYWxmX2hlaWdodCwgMzIpCisJICogVVZfVEZfU2NhbmxpbmVzID0gYWxpZ24o KEhhbGZfaGVpZ2h0KzEpLzIsIDMyKQorCSAqIFlfVUJXQ19URl9QbGFuZV9zaXplID0gYWxpZ24o WV9URl9TdHJpZGUgKiBZX1RGX1NjYW5saW5lcywgNDA5NikKKwkgKiBVVl9VQldDX1RGX1BsYW5l X3NpemUgPSBhbGlnbihVVl9URl9TdHJpZGUgKiBVVl9URl9TY2FubGluZXMsIDQwOTYpCisJICog WV9URl9NZXRhX1N0cmlkZSA9IGFsaWduKHJvdW5kdXAoV2lkdGgsIFlfVGlsZVdpZHRoKSwgNjQp CisJICogWV9URl9NZXRhX1NjYW5saW5lcyA9IGFsaWduKHJvdW5kdXAoSGFsZl9oZWlnaHQsIFlf VGlsZUhlaWdodCksIDE2KQorCSAqIFlfVEZfTWV0YV9QbGFuZV9zaXplID0KKwkgKiAgICAgYWxp Z24oWV9URl9NZXRhX1N0cmlkZSAqIFlfVEZfTWV0YV9TY2FubGluZXMsIDQwOTYpCisJICogVVZf VEZfTWV0YV9TdHJpZGUgPSBhbGlnbihyb3VuZHVwKFdpZHRoLCBVVl9UaWxlV2lkdGgpLCA2NCkK KwkgKiBVVl9URl9NZXRhX1NjYW5saW5lcyA9IGFsaWduKHJvdW5kdXAoSGFsZl9oZWlnaHQsIFVW X1RpbGVIZWlnaHQpLCAxNikKKwkgKiBVVl9URl9NZXRhX1BsYW5lX3NpemUgPQorCSAqICAgICBh bGlnbihVVl9URl9NZXRhX1N0cmlkZSAqIFVWX1RGX01ldGFfU2NhbmxpbmVzLCA0MDk2KQorCSAq IFlfQkZfU3RyaWRlID0gYWxpZ24oV2lkdGgsIDEyOCkKKwkgKiBVVl9CRl9TdHJpZGUgPSBhbGln bihXaWR0aCwgMTI4KQorCSAqIFlfQkZfU2NhbmxpbmVzID0gYWxpZ24oSGFsZl9oZWlnaHQsIDMy KQorCSAqIFVWX0JGX1NjYW5saW5lcyA9IGFsaWduKChIYWxmX2hlaWdodCsxKS8yLCAzMikKKwkg KiBZX1VCV0NfQkZfUGxhbmVfc2l6ZSA9IGFsaWduKFlfQkZfU3RyaWRlICogWV9CRl9TY2FubGlu ZXMsIDQwOTYpCisJICogVVZfVUJXQ19CRl9QbGFuZV9zaXplID0gYWxpZ24oVVZfQkZfU3RyaWRl ICogVVZfQkZfU2NhbmxpbmVzLCA0MDk2KQorCSAqIFlfQkZfTWV0YV9TdHJpZGUgPSBhbGlnbihy b3VuZHVwKFdpZHRoLCBZX1RpbGVXaWR0aCksIDY0KQorCSAqIFlfQkZfTWV0YV9TY2FubGluZXMg PSBhbGlnbihyb3VuZHVwKEhhbGZfaGVpZ2h0LCBZX1RpbGVIZWlnaHQpLCAxNikKKwkgKiBZX0JG X01ldGFfUGxhbmVfc2l6ZSA9CisJICogICAgIGFsaWduKFlfQkZfTWV0YV9TdHJpZGUgKiBZX0JG X01ldGFfU2NhbmxpbmVzLCA0MDk2KQorCSAqIFVWX0JGX01ldGFfU3RyaWRlID0gYWxpZ24ocm91 bmR1cChXaWR0aCwgVVZfVGlsZVdpZHRoKSwgNjQpCisJICogVVZfQkZfTWV0YV9TY2FubGluZXMg PSBhbGlnbihyb3VuZHVwKEhhbGZfaGVpZ2h0LCBVVl9UaWxlSGVpZ2h0KSwgMTYpCisJICogVVZf QkZfTWV0YV9QbGFuZV9zaXplID0KKwkgKiAgICAgYWxpZ24oVVZfQkZfTWV0YV9TdHJpZGUgKiBV Vl9CRl9NZXRhX1NjYW5saW5lcywgNDA5NikKKwkgKiBFeHRyYWRhdGEgPSA4aworCSAqCisJICog VG90YWwgc2l6ZSA9IGFsaWduKCBZX1VCV0NfVEZfUGxhbmVfc2l6ZSArIFVWX1VCV0NfVEZfUGxh bmVfc2l6ZSArCisJICogICAgICAgICAgIFlfVEZfTWV0YV9QbGFuZV9zaXplICsgVVZfVEZfTWV0 YV9QbGFuZV9zaXplICsKKwkgKgkJCSBZX1VCV0NfQkZfUGxhbmVfc2l6ZSArIFVWX1VCV0NfQkZf UGxhbmVfc2l6ZSArCisJICogICAgICAgICAgIFlfQkZfTWV0YV9QbGFuZV9zaXplICsgVVZfQkZf TWV0YV9QbGFuZV9zaXplICsKKwkgKiAgICAgICAgICAgKyBtYXgoRXh0cmFkYXRhLCBZX1RGX1N0 cmlkZSAqIDQ4KSwgNDA5NikKKwkgKi8KKwlDT0xPUl9GTVRfTlYxMl9VQldDLAorCS8qIFZlbnVz IE5WMTIgMTAtYml0IFVCV0M6CisJICogQ29tcHJlc3NlZCBNYWNyby10aWxlIGZvcm1hdCBmb3Ig TlYxMi4KKwkgKiBDb250YWlucyA0IHBsYW5lcyBpbiB0aGUgZm9sbG93aW5nIG9yZGVyIC0KKwkg KiAoQSkgWV9NZXRhX1BsYW5lCisJICogKEIpIFlfVUJXQ19QbGFuZQorCSAqIChDKSBVVl9NZXRh X1BsYW5lCisJICogKEQpIFVWX1VCV0NfUGxhbmUKKwkgKgorCSAqIFlfTWV0YV9QbGFuZSBjb25z aXN0cyBvZiBtZXRhIGluZm9ybWF0aW9uIHRvIGRlY29kZSBjb21wcmVzc2VkCisJICogdGlsZSBk YXRhIGluIFlfVUJXQ19QbGFuZS4KKwkgKiBZX1VCV0NfUGxhbmUgY29uc2lzdHMgb2YgWSBkYXRh IGluIGNvbXByZXNzZWQgbWFjcm8tdGlsZSBmb3JtYXQuCisJICogVUJXQyBkZWNvZGVyIGJsb2Nr IHdpbGwgdXNlIHRoZSBZX01ldGFfUGxhbmUgZGF0YSB0b2dldGhlciB3aXRoCisJICogWV9VQldD X1BsYW5lIGRhdGEgdG8gcHJvZHVjZSBsb3NzLWxlc3MgdW5jb21wcmVzc2VkIDEwIGJpdCBZIHNh bXBsZXMuCisJICoKKwkgKiBVVl9NZXRhX1BsYW5lIGNvbnNpc3RzIG9mIG1ldGEgaW5mb3JtYXRp b24gdG8gZGVjb2RlIGNvbXByZXNzZWQKKwkgKiB0aWxlIGRhdGEgaW4gVVZfVUJXQ19QbGFuZS4K KwkgKiBVVl9VQldDX1BsYW5lIGNvbnNpc3RzIG9mIFVWIGRhdGEgaW4gY29tcHJlc3NlZCBtYWNy by10aWxlIGZvcm1hdC4KKwkgKiBVQldDIGRlY29kZXIgYmxvY2sgd2lsbCB1c2UgVVZfTWV0YV9Q bGFuZSBkYXRhIHRvZ2V0aGVyIHdpdGgKKwkgKiBVVl9VQldDX1BsYW5lIGRhdGEgdG8gcHJvZHVj ZSBsb3NzLWxlc3MgdW5jb21wcmVzc2VkIDEwIGJpdCAyeDIKKwkgKiBzdWJzYW1wbGVkIGNvbG9y IGRpZmZlcmVuY2Ugc2FtcGxlcy4KKwkgKgorCSAqIEVhY2ggdGlsZSBpbiBZX1VCV0NfUGxhbmUv VVZfVUJXQ19QbGFuZSBpcyBpbmRlcGVuZGVudGx5IGRlY29kYWJsZQorCSAqIGFuZCByYW5kb21s eSBhY2Nlc3NpYmxlLiBUaGVyZSBpcyBubyBkZXBlbmRlbmN5IGJldHdlZW4gdGlsZXMuCisJICoK KwkgKiA8LS0tLS0gWV9NZXRhX1N0cmlkZSAtLS0tLT4KKwkgKiA8LS0tLS0tLS0gV2lkdGggLS0t LS0tPgorCSAqIE0gTSBNIE0gTSBNIE0gTSBNIE0gTSBNIC4gLiAgICAgIF4gICAgICAgICAgIF4K KwkgKiBNIE0gTSBNIE0gTSBNIE0gTSBNIE0gTSAuIC4gICAgICB8ICAgICAgICAgICB8CisJICog TSBNIE0gTSBNIE0gTSBNIE0gTSBNIE0gLiAuICAgICAgSGVpZ2h0ICAgICAgfAorCSAqIE0gTSBN IE0gTSBNIE0gTSBNIE0gTSBNIC4gLiAgICAgIHwgICAgICAgICBNZXRhX1lfU2NhbmxpbmVzCisJ ICogTSBNIE0gTSBNIE0gTSBNIE0gTSBNIE0gLiAuICAgICAgfCAgICAgICAgICAgfAorCSAqIE0g TSBNIE0gTSBNIE0gTSBNIE0gTSBNIC4gLiAgICAgIHwgICAgICAgICAgIHwKKwkgKiBNIE0gTSBN IE0gTSBNIE0gTSBNIE0gTSAuIC4gICAgICB8ICAgICAgICAgICB8CisJICogTSBNIE0gTSBNIE0g TSBNIE0gTSBNIE0gLiAuICAgICAgViAgICAgICAgICAgfAorCSAqIC4gLiAuIC4gLiAuIC4gLiAu IC4gLiAuIC4gLiAgICAgICAgICAgICAgICAgIHwKKwkgKiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4g LiAuIC4gICAgICAgICAgICAgICAgICB8CisJICogLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAu ICAgICAgLS0tLS0tLT4gQnVmZmVyIHNpemUgYWxpZ25lZCB0byA0aworCSAqIC4gLiAuIC4gLiAu IC4gLiAuIC4gLiAuIC4gLiAgICAgICAgICAgICAgICAgIFYKKwkgKiA8LS1Db21wcmVzc2VkIHRp bGUgWSBTdHJpZGUtLS0+CisJICogPC0tLS0tLS0gV2lkdGggLS0tLS0tLT4KKwkgKiBZKiBZKiBZ KiBZKiBZKiBZKiBZKiBZKiAuIC4gLiAuICBeICAgICAgICAgICBeCisJICogWSogWSogWSogWSog WSogWSogWSogWSogLiAuIC4gLiAgfCAgICAgICAgICAgfAorCSAqIFkqIFkqIFkqIFkqIFkqIFkq IFkqIFkqIC4gLiAuIC4gIEhlaWdodCAgICAgIHwKKwkgKiBZKiBZKiBZKiBZKiBZKiBZKiBZKiBZ KiAuIC4gLiAuICB8ICAgICAgICBNYWNyb190aWxlX1lfU2NhbmxpbmVzCisJICogWSogWSogWSog WSogWSogWSogWSogWSogLiAuIC4gLiAgfCAgICAgICAgICAgfAorCSAqIFkqIFkqIFkqIFkqIFkq IFkqIFkqIFkqIC4gLiAuIC4gIHwgICAgICAgICAgIHwKKwkgKiBZKiBZKiBZKiBZKiBZKiBZKiBZ KiBZKiAuIC4gLiAuICB8ICAgICAgICAgICB8CisJICogWSogWSogWSogWSogWSogWSogWSogWSog LiAuIC4gLiAgViAgICAgICAgICAgfAorCSAqIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAu IC4gICAgICAgICAgICAgIHwKKwkgKiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAg ICAgICAgICAgICB8CisJICogLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgLS0tLS0t LT4gQnVmZmVyIHNpemUgYWxpZ25lZCB0byA0aworCSAqIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAu IC4gLiAuIC4gICAgICAgICAgICAgIFYKKwkgKiA8LS0tLS0gVVZfTWV0YV9TdHJpZGUgLS0tLT4K KwkgKiBNIE0gTSBNIE0gTSBNIE0gTSBNIE0gTSAuIC4gICAgICBeCisJICogTSBNIE0gTSBNIE0g TSBNIE0gTSBNIE0gLiAuICAgICAgfAorCSAqIE0gTSBNIE0gTSBNIE0gTSBNIE0gTSBNIC4gLiAg ICAgIHwKKwkgKiBNIE0gTSBNIE0gTSBNIE0gTSBNIE0gTSAuIC4gICAgICBNX1VWX1NjYW5saW5l cworCSAqIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgICAgIHwKKwkgKiAuIC4gLiAuIC4g LiAuIC4gLiAuIC4gLiAuIC4gICAgICBWCisJICogLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAu ICAgICAgLS0tLS0tLT4gQnVmZmVyIHNpemUgYWxpZ25lZCB0byA0aworCSAqIDwtLUNvbXByZXNz ZWQgdGlsZSBVViBTdHJpZGUtLS0+CisJICogVSogViogVSogViogVSogViogVSogViogLiAuIC4g LiAgXgorCSAqIFUqIFYqIFUqIFYqIFUqIFYqIFUqIFYqIC4gLiAuIC4gIHwKKwkgKiBVKiBWKiBV KiBWKiBVKiBWKiBVKiBWKiAuIC4gLiAuICB8CisJICogVSogViogVSogViogVSogViogVSogViog LiAuIC4gLiAgVVZfU2NhbmxpbmVzCisJICogLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4g LiAgfAorCSAqIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIFYKKwkgKiAuIC4gLiAu IC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAtLS0tLS0tPiBCdWZmZXIgc2l6ZSBhbGlnbmVkIHRv IDRrCisJICoKKwkgKgorCSAqIFlfU3RyaWRlID0gYWxpZ24oV2lkdGggKiA0LzMsIDEyOCkKKwkg KiBVVl9TdHJpZGUgPSBhbGlnbihXaWR0aCAqIDQvMywgMTI4KQorCSAqIFlfU2NhbmxpbmVzID0g YWxpZ24oSGVpZ2h0LCAzMikKKwkgKiBVVl9TY2FubGluZXMgPSBhbGlnbihIZWlnaHQvMiwgMTYp CisJICogWV9VQldDX1BsYW5lX1NpemUgPSBhbGlnbihZX1N0cmlkZSAqIFlfU2NhbmxpbmVzLCA0 MDk2KQorCSAqIFVWX1VCV0NfUGxhbmVfU2l6ZSA9IGFsaWduKFVWX1N0cmlkZSAqIFVWX1NjYW5s aW5lcywgNDA5NikKKwkgKiBZX01ldGFfU3RyaWRlID0gYWxpZ24ocm91bmR1cChXaWR0aCwgWV9U aWxlV2lkdGgpLCA2NCkKKwkgKiBZX01ldGFfU2NhbmxpbmVzID0gYWxpZ24ocm91bmR1cChIZWln aHQsIFlfVGlsZUhlaWdodCksIDE2KQorCSAqIFlfTWV0YV9QbGFuZV9zaXplID0gYWxpZ24oWV9N ZXRhX1N0cmlkZSAqIFlfTWV0YV9TY2FubGluZXMsIDQwOTYpCisJICogVVZfTWV0YV9TdHJpZGUg PSBhbGlnbihyb3VuZHVwKFdpZHRoLCBVVl9UaWxlV2lkdGgpLCA2NCkKKwkgKiBVVl9NZXRhX1Nj YW5saW5lcyA9IGFsaWduKHJvdW5kdXAoSGVpZ2h0LCBVVl9UaWxlSGVpZ2h0KSwgMTYpCisJICog VVZfTWV0YV9QbGFuZV9zaXplID0gYWxpZ24oVVZfTWV0YV9TdHJpZGUgKiBVVl9NZXRhX1NjYW5s aW5lcywgNDA5NikKKwkgKiBFeHRyYWRhdGEgPSA4aworCSAqCisJICogVG90YWwgc2l6ZSA9IGFs aWduKFlfVUJXQ19QbGFuZV9zaXplICsgVVZfVUJXQ19QbGFuZV9zaXplICsKKwkgKiAgICAgICAg ICAgWV9NZXRhX1BsYW5lX3NpemUgKyBVVl9NZXRhX1BsYW5lX3NpemUKKwkgKiAgICAgICAgICAg KyBtYXgoRXh0cmFkYXRhLCBZX1N0cmlkZSAqIDQ4KSwgNDA5NikKKwkgKi8KKwlDT0xPUl9GTVRf TlYxMl9CUFAxMF9VQldDLAorCS8qIFZlbnVzIFJHQkE4ODg4IGZvcm1hdDoKKwkgKiBDb250YWlu cyAxIHBsYW5lIGluIHRoZSBmb2xsb3dpbmcgb3JkZXIgLQorCSAqIChBKSBSR0JBIHBsYW5lCisJ ICoKKwkgKiA8LS0tLS0tLS0gUkdCX1N0cmlkZSAtLS0tLS0tLT4KKwkgKiA8LS0tLS0tLSBXaWR0 aCAtLS0tLS0tPgorCSAqIFIgUiBSIFIgUiBSIFIgUiBSIFIgUiBSIC4gLiAuIC4gIF4gICAgICAg ICAgIF4KKwkgKiBSIFIgUiBSIFIgUiBSIFIgUiBSIFIgUiAuIC4gLiAuICB8ICAgICAgICAgICB8 CisJICogUiBSIFIgUiBSIFIgUiBSIFIgUiBSIFIgLiAuIC4gLiAgSGVpZ2h0ICAgICAgfAorCSAq IFIgUiBSIFIgUiBSIFIgUiBSIFIgUiBSIC4gLiAuIC4gIHwgICAgICAgUkdCX1NjYW5saW5lcwor CSAqIFIgUiBSIFIgUiBSIFIgUiBSIFIgUiBSIC4gLiAuIC4gIHwgICAgICAgICAgIHwKKwkgKiBS IFIgUiBSIFIgUiBSIFIgUiBSIFIgUiAuIC4gLiAuICB8ICAgICAgICAgICB8CisJICogUiBSIFIg UiBSIFIgUiBSIFIgUiBSIFIgLiAuIC4gLiAgfCAgICAgICAgICAgfAorCSAqIFIgUiBSIFIgUiBS IFIgUiBSIFIgUiBSIC4gLiAuIC4gIFYgICAgICAgICAgIHwKKwkgKiAuIC4gLiAuIC4gLiAuIC4g LiAuIC4gLiAuIC4gLiAuICAgICAgICAgICAgICB8CisJICogLiAuIC4gLiAuIC4gLiAuIC4gLiAu IC4gLiAuIC4gLiAgICAgICAgICAgICAgfAorCSAqIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4g LiAuIC4gICAgICAgICAgICAgIHwKKwkgKiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAu ICAgICAgICAgICAgICBWCisJICoKKwkgKiBSR0JfU3RyaWRlID0gYWxpZ24oV2lkdGggKiA0LCAx MjgpCisJICogUkdCX1NjYW5saW5lcyA9IGFsaWduKEhlaWdodCwgMzIpCisJICogUkdCX1BsYW5l X3NpemUgPSBhbGlnbihSR0JfU3RyaWRlICogUkdCX1NjYW5saW5lcywgNDA5NikKKwkgKiBFeHRy YWRhdGEgPSA4aworCSAqCisJICogVG90YWwgc2l6ZSA9IGFsaWduKFJHQl9QbGFuZV9zaXplICsg RXh0cmFkYXRhLCA0MDk2KQorCSAqLworCUNPTE9SX0ZNVF9SR0JBODg4OCwKKwkvKiBWZW51cyBS R0JBODg4OCBVQldDIGZvcm1hdDoKKwkgKiBDb250YWlucyAyIHBsYW5lcyBpbiB0aGUgZm9sbG93 aW5nIG9yZGVyIC0KKwkgKiAoQSkgTWV0YSBwbGFuZQorCSAqIChCKSBSR0JBIHBsYW5lCisJICoK KwkgKiA8LS0tIFJHQl9NZXRhX1N0cmlkZSAtLS0tPgorCSAqIDwtLS0tLS0tLSBXaWR0aCAtLS0t LS0+CisJICogTSBNIE0gTSBNIE0gTSBNIE0gTSBNIE0gLiAuICAgICAgXiAgICAgICAgICAgXgor CSAqIE0gTSBNIE0gTSBNIE0gTSBNIE0gTSBNIC4gLiAgICAgIHwgICAgICAgICAgIHwKKwkgKiBN IE0gTSBNIE0gTSBNIE0gTSBNIE0gTSAuIC4gICAgICBIZWlnaHQgICAgICB8CisJICogTSBNIE0g TSBNIE0gTSBNIE0gTSBNIE0gLiAuICAgICAgfCAgICAgICBNZXRhX1JHQl9TY2FubGluZXMKKwkg KiBNIE0gTSBNIE0gTSBNIE0gTSBNIE0gTSAuIC4gICAgICB8ICAgICAgICAgICB8CisJICogTSBN IE0gTSBNIE0gTSBNIE0gTSBNIE0gLiAuICAgICAgfCAgICAgICAgICAgfAorCSAqIE0gTSBNIE0g TSBNIE0gTSBNIE0gTSBNIC4gLiAgICAgIHwgICAgICAgICAgIHwKKwkgKiBNIE0gTSBNIE0gTSBN IE0gTSBNIE0gTSAuIC4gICAgICBWICAgICAgICAgICB8CisJICogLiAuIC4gLiAuIC4gLiAuIC4g LiAuIC4gLiAuICAgICAgICAgICAgICAgICAgfAorCSAqIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAu IC4gLiAgICAgICAgICAgICAgICAgIHwKKwkgKiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4g ICAgICAtLS0tLS0tPiBCdWZmZXIgc2l6ZSBhbGlnbmVkIHRvIDRrCisJICogLiAuIC4gLiAuIC4g LiAuIC4gLiAuIC4gLiAuICAgICAgICAgICAgICAgICAgVgorCSAqIDwtLS0tLS0tLSBSR0JfU3Ry aWRlIC0tLS0tLS0tPgorCSAqIDwtLS0tLS0tIFdpZHRoIC0tLS0tLS0+CisJICogUiBSIFIgUiBS IFIgUiBSIFIgUiBSIFIgLiAuIC4gLiAgXiAgICAgICAgICAgXgorCSAqIFIgUiBSIFIgUiBSIFIg UiBSIFIgUiBSIC4gLiAuIC4gIHwgICAgICAgICAgIHwKKwkgKiBSIFIgUiBSIFIgUiBSIFIgUiBS IFIgUiAuIC4gLiAuICBIZWlnaHQgICAgICB8CisJICogUiBSIFIgUiBSIFIgUiBSIFIgUiBSIFIg LiAuIC4gLiAgfCAgICAgICBSR0JfU2NhbmxpbmVzCisJICogUiBSIFIgUiBSIFIgUiBSIFIgUiBS IFIgLiAuIC4gLiAgfCAgICAgICAgICAgfAorCSAqIFIgUiBSIFIgUiBSIFIgUiBSIFIgUiBSIC4g LiAuIC4gIHwgICAgICAgICAgIHwKKwkgKiBSIFIgUiBSIFIgUiBSIFIgUiBSIFIgUiAuIC4gLiAu ICB8ICAgICAgICAgICB8CisJICogUiBSIFIgUiBSIFIgUiBSIFIgUiBSIFIgLiAuIC4gLiAgViAg ICAgICAgICAgfAorCSAqIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gICAgICAgICAg ICAgIHwKKwkgKiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAgICAgICAgICAgICB8 CisJICogLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgICAtLS0tLS0tPiBCdWZmZXIg c2l6ZSBhbGlnbmVkIHRvIDRrCisJICogLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAg ICAgICAgICAgICAgVgorCSAqCisJICogUkdCX1N0cmlkZSA9IGFsaWduKFdpZHRoICogNCwgMTI4 KQorCSAqIFJHQl9TY2FubGluZXMgPSBhbGlnbihIZWlnaHQsIDMyKQorCSAqIFJHQl9QbGFuZV9z aXplID0gYWxpZ24oUkdCX1N0cmlkZSAqIFJHQl9TY2FubGluZXMsIDQwOTYpCisJICogUkdCX01l dGFfU3RyaWRlID0gYWxpZ24ocm91bmR1cChXaWR0aCwgUkdCX1RpbGVXaWR0aCksIDY0KQorCSAq IFJHQl9NZXRhX1NjYW5saW5lID0gYWxpZ24ocm91bmR1cChIZWlnaHQsIFJHQl9UaWxlSGVpZ2h0 KSwgMTYpCisJICogUkdCX01ldGFfUGxhbmVfc2l6ZSA9IGFsaWduKFJHQl9NZXRhX1N0cmlkZSAq CisJICoJCVJHQl9NZXRhX1NjYW5saW5lcywgNDA5NikKKwkgKiBFeHRyYWRhdGEgPSA4aworCSAq CisJICogVG90YWwgc2l6ZSA9IGFsaWduKFJHQl9NZXRhX1BsYW5lX3NpemUgKyBSR0JfUGxhbmVf c2l6ZSArCisJICoJCUV4dHJhZGF0YSwgNDA5NikKKwkgKi8KKwlDT0xPUl9GTVRfUkdCQTg4ODhf VUJXQywKKwkvKiBWZW51cyBSR0JBMTAxMDEwMiBVQldDIGZvcm1hdDoKKwkgKiBDb250YWlucyAy IHBsYW5lcyBpbiB0aGUgZm9sbG93aW5nIG9yZGVyIC0KKwkgKiAoQSkgTWV0YSBwbGFuZQorCSAq IChCKSBSR0JBIHBsYW5lCisJICoKKwkgKiA8LS0tIFJHQl9NZXRhX1N0cmlkZSAtLS0tPgorCSAq IDwtLS0tLS0tLSBXaWR0aCAtLS0tLS0+CisJICogTSBNIE0gTSBNIE0gTSBNIE0gTSBNIE0gLiAu ICAgICAgXiAgICAgICAgICAgXgorCSAqIE0gTSBNIE0gTSBNIE0gTSBNIE0gTSBNIC4gLiAgICAg IHwgICAgICAgICAgIHwKKwkgKiBNIE0gTSBNIE0gTSBNIE0gTSBNIE0gTSAuIC4gICAgICBIZWln aHQgICAgICB8CisJICogTSBNIE0gTSBNIE0gTSBNIE0gTSBNIE0gLiAuICAgICAgfCAgICAgICBN ZXRhX1JHQl9TY2FubGluZXMKKwkgKiBNIE0gTSBNIE0gTSBNIE0gTSBNIE0gTSAuIC4gICAgICB8 ICAgICAgICAgICB8CisJICogTSBNIE0gTSBNIE0gTSBNIE0gTSBNIE0gLiAuICAgICAgfCAgICAg ICAgICAgfAorCSAqIE0gTSBNIE0gTSBNIE0gTSBNIE0gTSBNIC4gLiAgICAgIHwgICAgICAgICAg IHwKKwkgKiBNIE0gTSBNIE0gTSBNIE0gTSBNIE0gTSAuIC4gICAgICBWICAgICAgICAgICB8CisJ ICogLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAgICAgICAgICAgICAgICAgfAorCSAqIC4g LiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgICAgICAgICAgICAgICAgIHwKKwkgKiAuIC4gLiAu IC4gLiAuIC4gLiAuIC4gLiAuIC4gICAgICAtLS0tLS0tPiBCdWZmZXIgc2l6ZSBhbGlnbmVkIHRv IDRrCisJICogLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAgICAgICAgICAgICAgICAgVgor CSAqIDwtLS0tLS0tLSBSR0JfU3RyaWRlIC0tLS0tLS0tPgorCSAqIDwtLS0tLS0tIFdpZHRoIC0t LS0tLS0+CisJICogUiBSIFIgUiBSIFIgUiBSIFIgUiBSIFIgLiAuIC4gLiAgXiAgICAgICAgICAg XgorCSAqIFIgUiBSIFIgUiBSIFIgUiBSIFIgUiBSIC4gLiAuIC4gIHwgICAgICAgICAgIHwKKwkg KiBSIFIgUiBSIFIgUiBSIFIgUiBSIFIgUiAuIC4gLiAuICBIZWlnaHQgICAgICB8CisJICogUiBS IFIgUiBSIFIgUiBSIFIgUiBSIFIgLiAuIC4gLiAgfCAgICAgICBSR0JfU2NhbmxpbmVzCisJICog UiBSIFIgUiBSIFIgUiBSIFIgUiBSIFIgLiAuIC4gLiAgfCAgICAgICAgICAgfAorCSAqIFIgUiBS IFIgUiBSIFIgUiBSIFIgUiBSIC4gLiAuIC4gIHwgICAgICAgICAgIHwKKwkgKiBSIFIgUiBSIFIg UiBSIFIgUiBSIFIgUiAuIC4gLiAuICB8ICAgICAgICAgICB8CisJICogUiBSIFIgUiBSIFIgUiBS IFIgUiBSIFIgLiAuIC4gLiAgViAgICAgICAgICAgfAorCSAqIC4gLiAuIC4gLiAuIC4gLiAuIC4g LiAuIC4gLiAuIC4gICAgICAgICAgICAgIHwKKwkgKiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAu IC4gLiAuICAgICAgICAgICAgICB8CisJICogLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4g LiAgICAtLS0tLS0tPiBCdWZmZXIgc2l6ZSBhbGlnbmVkIHRvIDRrCisJICogLiAuIC4gLiAuIC4g LiAuIC4gLiAuIC4gLiAuIC4gLiAgICAgICAgICAgICAgVgorCSAqCisJICogUkdCX1N0cmlkZSA9 IGFsaWduKFdpZHRoICogNCwgMjU2KQorCSAqIFJHQl9TY2FubGluZXMgPSBhbGlnbihIZWlnaHQs IDE2KQorCSAqIFJHQl9QbGFuZV9zaXplID0gYWxpZ24oUkdCX1N0cmlkZSAqIFJHQl9TY2FubGlu ZXMsIDQwOTYpCisJICogUkdCX01ldGFfU3RyaWRlID0gYWxpZ24ocm91bmR1cChXaWR0aCwgUkdC X1RpbGVXaWR0aCksIDY0KQorCSAqIFJHQl9NZXRhX1NjYW5saW5lID0gYWxpZ24ocm91bmR1cChI ZWlnaHQsIFJHQl9UaWxlSGVpZ2h0KSwgMTYpCisJICogUkdCX01ldGFfUGxhbmVfc2l6ZSA9IGFs aWduKFJHQl9NZXRhX1N0cmlkZSAqCisJICoJCVJHQl9NZXRhX1NjYW5saW5lcywgNDA5NikKKwkg KiBFeHRyYWRhdGEgPSA4aworCSAqCisJICogVG90YWwgc2l6ZSA9IGFsaWduKFJHQl9NZXRhX1Bs YW5lX3NpemUgKyBSR0JfUGxhbmVfc2l6ZSArCisJICoJCUV4dHJhZGF0YSwgNDA5NikKKwkgKi8K KwlDT0xPUl9GTVRfUkdCQTEwMTAxMDJfVUJXQywKKwkvKiBWZW51cyBSR0I1NjUgVUJXQyBmb3Jt YXQ6CisJICogQ29udGFpbnMgMiBwbGFuZXMgaW4gdGhlIGZvbGxvd2luZyBvcmRlciAtCisJICog KEEpIE1ldGEgcGxhbmUKKwkgKiAoQikgUkdCIHBsYW5lCisJICoKKwkgKiA8LS0tIFJHQl9NZXRh X1N0cmlkZSAtLS0tPgorCSAqIDwtLS0tLS0tLSBXaWR0aCAtLS0tLS0+CisJICogTSBNIE0gTSBN IE0gTSBNIE0gTSBNIE0gLiAuICAgICAgXiAgICAgICAgICAgXgorCSAqIE0gTSBNIE0gTSBNIE0g TSBNIE0gTSBNIC4gLiAgICAgIHwgICAgICAgICAgIHwKKwkgKiBNIE0gTSBNIE0gTSBNIE0gTSBN IE0gTSAuIC4gICAgICBIZWlnaHQgICAgICB8CisJICogTSBNIE0gTSBNIE0gTSBNIE0gTSBNIE0g LiAuICAgICAgfCAgICAgICBNZXRhX1JHQl9TY2FubGluZXMKKwkgKiBNIE0gTSBNIE0gTSBNIE0g TSBNIE0gTSAuIC4gICAgICB8ICAgICAgICAgICB8CisJICogTSBNIE0gTSBNIE0gTSBNIE0gTSBN IE0gLiAuICAgICAgfCAgICAgICAgICAgfAorCSAqIE0gTSBNIE0gTSBNIE0gTSBNIE0gTSBNIC4g LiAgICAgIHwgICAgICAgICAgIHwKKwkgKiBNIE0gTSBNIE0gTSBNIE0gTSBNIE0gTSAuIC4gICAg ICBWICAgICAgICAgICB8CisJICogLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAgICAgICAg ICAgICAgICAgfAorCSAqIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgICAgICAgICAgICAg ICAgIHwKKwkgKiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gICAgICAtLS0tLS0tPiBCdWZm ZXIgc2l6ZSBhbGlnbmVkIHRvIDRrCisJICogLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAg ICAgICAgICAgICAgICAgVgorCSAqIDwtLS0tLS0tLSBSR0JfU3RyaWRlIC0tLS0tLS0tPgorCSAq IDwtLS0tLS0tIFdpZHRoIC0tLS0tLS0+CisJICogUiBSIFIgUiBSIFIgUiBSIFIgUiBSIFIgLiAu IC4gLiAgXiAgICAgICAgICAgXgorCSAqIFIgUiBSIFIgUiBSIFIgUiBSIFIgUiBSIC4gLiAuIC4g IHwgICAgICAgICAgIHwKKwkgKiBSIFIgUiBSIFIgUiBSIFIgUiBSIFIgUiAuIC4gLiAuICBIZWln aHQgICAgICB8CisJICogUiBSIFIgUiBSIFIgUiBSIFIgUiBSIFIgLiAuIC4gLiAgfCAgICAgICBS R0JfU2NhbmxpbmVzCisJICogUiBSIFIgUiBSIFIgUiBSIFIgUiBSIFIgLiAuIC4gLiAgfCAgICAg ICAgICAgfAorCSAqIFIgUiBSIFIgUiBSIFIgUiBSIFIgUiBSIC4gLiAuIC4gIHwgICAgICAgICAg IHwKKwkgKiBSIFIgUiBSIFIgUiBSIFIgUiBSIFIgUiAuIC4gLiAuICB8ICAgICAgICAgICB8CisJ ICogUiBSIFIgUiBSIFIgUiBSIFIgUiBSIFIgLiAuIC4gLiAgViAgICAgICAgICAgfAorCSAqIC4g LiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gICAgICAgICAgICAgIHwKKwkgKiAuIC4gLiAu IC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAgICAgICAgICAgICB8CisJICogLiAuIC4gLiAuIC4g LiAuIC4gLiAuIC4gLiAuIC4gLiAgICAtLS0tLS0tPiBCdWZmZXIgc2l6ZSBhbGlnbmVkIHRvIDRr CisJICogLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgICAgICAgICAgICAgVgorCSAq CisJICogUkdCX1N0cmlkZSA9IGFsaWduKFdpZHRoICogMiwgMTI4KQorCSAqIFJHQl9TY2FubGlu ZXMgPSBhbGlnbihIZWlnaHQsIDE2KQorCSAqIFJHQl9QbGFuZV9zaXplID0gYWxpZ24oUkdCX1N0 cmlkZSAqIFJHQl9TY2FubGluZXMsIDQwOTYpCisJICogUkdCX01ldGFfU3RyaWRlID0gYWxpZ24o cm91bmR1cChXaWR0aCwgUkdCX1RpbGVXaWR0aCksIDY0KQorCSAqIFJHQl9NZXRhX1NjYW5saW5l ID0gYWxpZ24ocm91bmR1cChIZWlnaHQsIFJHQl9UaWxlSGVpZ2h0KSwgMTYpCisJICogUkdCX01l dGFfUGxhbmVfc2l6ZSA9IGFsaWduKFJHQl9NZXRhX1N0cmlkZSAqCisJICoJCVJHQl9NZXRhX1Nj YW5saW5lcywgNDA5NikKKwkgKiBFeHRyYWRhdGEgPSA4aworCSAqCisJICogVG90YWwgc2l6ZSA9 IGFsaWduKFJHQl9NZXRhX1BsYW5lX3NpemUgKyBSR0JfUGxhbmVfc2l6ZSArCisJICoJCUV4dHJh ZGF0YSwgNDA5NikKKwkgKi8KKwlDT0xPUl9GTVRfUkdCNTY1X1VCV0MsCisJLyogUDAxMCBVQldD OgorCSAqIENvbXByZXNzZWQgTWFjcm8tdGlsZSBmb3JtYXQgZm9yIE5WMTIuCisJICogQ29udGFp bnMgNCBwbGFuZXMgaW4gdGhlIGZvbGxvd2luZyBvcmRlciAtCisJICogKEEpIFlfTWV0YV9QbGFu ZQorCSAqIChCKSBZX1VCV0NfUGxhbmUKKwkgKiAoQykgVVZfTWV0YV9QbGFuZQorCSAqIChEKSBV Vl9VQldDX1BsYW5lCisJICoKKwkgKiBZX01ldGFfUGxhbmUgY29uc2lzdHMgb2YgbWV0YSBpbmZv cm1hdGlvbiB0byBkZWNvZGUgY29tcHJlc3NlZAorCSAqIHRpbGUgZGF0YSBpbiBZX1VCV0NfUGxh bmUuCisJICogWV9VQldDX1BsYW5lIGNvbnNpc3RzIG9mIFkgZGF0YSBpbiBjb21wcmVzc2VkIG1h Y3JvLXRpbGUgZm9ybWF0LgorCSAqIFVCV0MgZGVjb2RlciBibG9jayB3aWxsIHVzZSB0aGUgWV9N ZXRhX1BsYW5lIGRhdGEgdG9nZXRoZXIgd2l0aAorCSAqIFlfVUJXQ19QbGFuZSBkYXRhIHRvIHBy b2R1Y2UgbG9zcy1sZXNzIHVuY29tcHJlc3NlZCAxMCBiaXQgWSBzYW1wbGVzLgorCSAqCisJICog VVZfTWV0YV9QbGFuZSBjb25zaXN0cyBvZiBtZXRhIGluZm9ybWF0aW9uIHRvIGRlY29kZSBjb21w cmVzc2VkCisJICogdGlsZSBkYXRhIGluIFVWX1VCV0NfUGxhbmUuCisJICogVVZfVUJXQ19QbGFu ZSBjb25zaXN0cyBvZiBVViBkYXRhIGluIGNvbXByZXNzZWQgbWFjcm8tdGlsZSBmb3JtYXQuCisJ ICogVUJXQyBkZWNvZGVyIGJsb2NrIHdpbGwgdXNlIFVWX01ldGFfUGxhbmUgZGF0YSB0b2dldGhl ciB3aXRoCisJICogVVZfVUJXQ19QbGFuZSBkYXRhIHRvIHByb2R1Y2UgbG9zcy1sZXNzIHVuY29t cHJlc3NlZCAxMCBiaXQgMngyCisJICogc3Vic2FtcGxlZCBjb2xvciBkaWZmZXJlbmNlIHNhbXBs ZXMuCisJICoKKwkgKiBFYWNoIHRpbGUgaW4gWV9VQldDX1BsYW5lL1VWX1VCV0NfUGxhbmUgaXMg aW5kZXBlbmRlbnRseSBkZWNvZGFibGUKKwkgKiBhbmQgcmFuZG9tbHkgYWNjZXNzaWJsZS4gVGhl cmUgaXMgbm8gZGVwZW5kZW5jeSBiZXR3ZWVuIHRpbGVzLgorCSAqCisJICogPC0tLS0tIFlfTWV0 YV9TdHJpZGUgLS0tLS0+CisJICogPC0tLS0tLS0tIFdpZHRoIC0tLS0tLT4KKwkgKiBNIE0gTSBN IE0gTSBNIE0gTSBNIE0gTSAuIC4gICAgICBeICAgICAgICAgICBeCisJICogTSBNIE0gTSBNIE0g TSBNIE0gTSBNIE0gLiAuICAgICAgfCAgICAgICAgICAgfAorCSAqIE0gTSBNIE0gTSBNIE0gTSBN IE0gTSBNIC4gLiAgICAgIEhlaWdodCAgICAgIHwKKwkgKiBNIE0gTSBNIE0gTSBNIE0gTSBNIE0g TSAuIC4gICAgICB8ICAgICAgICAgTWV0YV9ZX1NjYW5saW5lcworCSAqIE0gTSBNIE0gTSBNIE0g TSBNIE0gTSBNIC4gLiAgICAgIHwgICAgICAgICAgIHwKKwkgKiBNIE0gTSBNIE0gTSBNIE0gTSBN IE0gTSAuIC4gICAgICB8ICAgICAgICAgICB8CisJICogTSBNIE0gTSBNIE0gTSBNIE0gTSBNIE0g LiAuICAgICAgfCAgICAgICAgICAgfAorCSAqIE0gTSBNIE0gTSBNIE0gTSBNIE0gTSBNIC4gLiAg ICAgIFYgICAgICAgICAgIHwKKwkgKiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gICAgICAg ICAgICAgICAgICB8CisJICogLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAgICAgICAgICAg ICAgICAgfAorCSAqIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgICAgIC0tLS0tLS0+IEJ1 ZmZlciBzaXplIGFsaWduZWQgdG8gNGsKKwkgKiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4g ICAgICAgICAgICAgICAgICBWCisJICogPC0tQ29tcHJlc3NlZCB0aWxlIFkgU3RyaWRlLS0tPgor CSAqIDwtLS0tLS0tIFdpZHRoIC0tLS0tLS0+CisJICogWSogWSogWSogWSogWSogWSogWSogWSog LiAuIC4gLiAgXiAgICAgICAgICAgXgorCSAqIFkqIFkqIFkqIFkqIFkqIFkqIFkqIFkqIC4gLiAu IC4gIHwgICAgICAgICAgIHwKKwkgKiBZKiBZKiBZKiBZKiBZKiBZKiBZKiBZKiAuIC4gLiAuICBI ZWlnaHQgICAgICB8CisJICogWSogWSogWSogWSogWSogWSogWSogWSogLiAuIC4gLiAgfCAgICAg ICAgTWFjcm9fdGlsZV9ZX1NjYW5saW5lcworCSAqIFkqIFkqIFkqIFkqIFkqIFkqIFkqIFkqIC4g LiAuIC4gIHwgICAgICAgICAgIHwKKwkgKiBZKiBZKiBZKiBZKiBZKiBZKiBZKiBZKiAuIC4gLiAu ICB8ICAgICAgICAgICB8CisJICogWSogWSogWSogWSogWSogWSogWSogWSogLiAuIC4gLiAgfCAg ICAgICAgICAgfAorCSAqIFkqIFkqIFkqIFkqIFkqIFkqIFkqIFkqIC4gLiAuIC4gIFYgICAgICAg ICAgIHwKKwkgKiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAgICAgICAgICAgICB8 CisJICogLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgICAgICAgICAgICAgfAorCSAq IC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIC0tLS0tLS0+IEJ1ZmZlciBzaXplIGFs aWduZWQgdG8gNGsKKwkgKiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICAgICAgICAg ICAgICBWCisJICogPC0tLS0tIFVWX01ldGFfU3RyaWRlIC0tLS0+CisJICogTSBNIE0gTSBNIE0g TSBNIE0gTSBNIE0gLiAuICAgICAgXgorCSAqIE0gTSBNIE0gTSBNIE0gTSBNIE0gTSBNIC4gLiAg ICAgIHwKKwkgKiBNIE0gTSBNIE0gTSBNIE0gTSBNIE0gTSAuIC4gICAgICB8CisJICogTSBNIE0g TSBNIE0gTSBNIE0gTSBNIE0gLiAuICAgICAgTV9VVl9TY2FubGluZXMKKwkgKiAuIC4gLiAuIC4g LiAuIC4gLiAuIC4gLiAuIC4gICAgICB8CisJICogLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAu ICAgICAgVgorCSAqIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAgICAgIC0tLS0tLS0+IEJ1 ZmZlciBzaXplIGFsaWduZWQgdG8gNGsKKwkgKiA8LS1Db21wcmVzc2VkIHRpbGUgVVYgU3RyaWRl LS0tPgorCSAqIFUqIFYqIFUqIFYqIFUqIFYqIFUqIFYqIC4gLiAuIC4gIF4KKwkgKiBVKiBWKiBV KiBWKiBVKiBWKiBVKiBWKiAuIC4gLiAuICB8CisJICogVSogViogVSogViogVSogViogVSogViog LiAuIC4gLiAgfAorCSAqIFUqIFYqIFUqIFYqIFUqIFYqIFUqIFYqIC4gLiAuIC4gIFVWX1NjYW5s aW5lcworCSAqIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIHwKKwkgKiAuIC4gLiAu IC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICBWCisJICogLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4g LiAuIC4gLiAgLS0tLS0tLT4gQnVmZmVyIHNpemUgYWxpZ25lZCB0byA0aworCSAqCisJICoKKwkg KiBZX1N0cmlkZSA9IGFsaWduKFdpZHRoICogMiwgMjU2KQorCSAqIFVWX1N0cmlkZSA9IGFsaWdu KFdpZHRoICogMiwgMjU2KQorCSAqIFlfU2NhbmxpbmVzID0gYWxpZ24oSGVpZ2h0LCAxNikKKwkg KiBVVl9TY2FubGluZXMgPSBhbGlnbihIZWlnaHQvMiwgMTYpCisJICogWV9VQldDX1BsYW5lX1Np emUgPSBhbGlnbihZX1N0cmlkZSAqIFlfU2NhbmxpbmVzLCA0MDk2KQorCSAqIFVWX1VCV0NfUGxh bmVfU2l6ZSA9IGFsaWduKFVWX1N0cmlkZSAqIFVWX1NjYW5saW5lcywgNDA5NikKKwkgKiBZX01l dGFfU3RyaWRlID0gYWxpZ24ocm91bmR1cChXaWR0aCwgWV9UaWxlV2lkdGgpLCA2NCkKKwkgKiBZ X01ldGFfU2NhbmxpbmVzID0gYWxpZ24ocm91bmR1cChIZWlnaHQsIFlfVGlsZUhlaWdodCksIDE2 KQorCSAqIFlfTWV0YV9QbGFuZV9zaXplID0gYWxpZ24oWV9NZXRhX1N0cmlkZSAqIFlfTWV0YV9T Y2FubGluZXMsIDQwOTYpCisJICogVVZfTWV0YV9TdHJpZGUgPSBhbGlnbihyb3VuZHVwKFdpZHRo LCBVVl9UaWxlV2lkdGgpLCA2NCkKKwkgKiBVVl9NZXRhX1NjYW5saW5lcyA9IGFsaWduKHJvdW5k dXAoSGVpZ2h0LCBVVl9UaWxlSGVpZ2h0KSwgMTYpCisJICogVVZfTWV0YV9QbGFuZV9zaXplID0g YWxpZ24oVVZfTWV0YV9TdHJpZGUgKiBVVl9NZXRhX1NjYW5saW5lcywgNDA5NikKKwkgKiBFeHRy YWRhdGEgPSA4aworCSAqCisJICogVG90YWwgc2l6ZSA9IGFsaWduKFlfVUJXQ19QbGFuZV9zaXpl ICsgVVZfVUJXQ19QbGFuZV9zaXplICsKKwkgKiAgICAgICAgICAgWV9NZXRhX1BsYW5lX3NpemUg KyBVVl9NZXRhX1BsYW5lX3NpemUKKwkgKiAgICAgICAgICAgKyBtYXgoRXh0cmFkYXRhLCBZX1N0 cmlkZSAqIDQ4KSwgNDA5NikKKwkgKi8KKwlDT0xPUl9GTVRfUDAxMF9VQldDLAorCS8qIFZlbnVz IFAwMTA6CisJICogWVVWIDQ6MjowIGltYWdlIHdpdGggYSBwbGFuZSBvZiAxMCBiaXQgWSBzYW1w bGVzIGZvbGxvd2VkCisJICogYnkgYW4gaW50ZXJsZWF2ZWQgVS9WIHBsYW5lIGNvbnRhaW5pbmcg MTAgYml0IDJ4MiBzdWJzYW1wbGVkCisJICogY29sb3VyIGRpZmZlcmVuY2Ugc2FtcGxlcy4KKwkg KgorCSAqIDwtLS0tLS0tLSBZL1VWX1N0cmlkZSAtLS0tLS0tLT4KKwkgKiA8LS0tLS0tLSBXaWR0 aCAtLS0tLS0tPgorCSAqIFkgWSBZIFkgWSBZIFkgWSBZIFkgWSBZIC4gLiAuIC4gIF4gICAgICAg ICAgIF4KKwkgKiBZIFkgWSBZIFkgWSBZIFkgWSBZIFkgWSAuIC4gLiAuICB8ICAgICAgICAgICB8 CisJICogWSBZIFkgWSBZIFkgWSBZIFkgWSBZIFkgLiAuIC4gLiAgSGVpZ2h0ICAgICAgfAorCSAq IFkgWSBZIFkgWSBZIFkgWSBZIFkgWSBZIC4gLiAuIC4gIHwgICAgICAgICAgWV9TY2FubGluZXMK KwkgKiBZIFkgWSBZIFkgWSBZIFkgWSBZIFkgWSAuIC4gLiAuICB8ICAgICAgICAgICB8CisJICog WSBZIFkgWSBZIFkgWSBZIFkgWSBZIFkgLiAuIC4gLiAgfCAgICAgICAgICAgfAorCSAqIFkgWSBZ IFkgWSBZIFkgWSBZIFkgWSBZIC4gLiAuIC4gIHwgICAgICAgICAgIHwKKwkgKiBZIFkgWSBZIFkg WSBZIFkgWSBZIFkgWSAuIC4gLiAuICBWICAgICAgICAgICB8CisJICogLiAuIC4gLiAuIC4gLiAu IC4gLiAuIC4gLiAuIC4gLiAgICAgICAgICAgICAgfAorCSAqIC4gLiAuIC4gLiAuIC4gLiAuIC4g LiAuIC4gLiAuIC4gICAgICAgICAgICAgIHwKKwkgKiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAu IC4gLiAuICAgICAgICAgICAgICB8CisJICogLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4g LiAgICAgICAgICAgICAgVgorCSAqIFUgViBVIFYgVSBWIFUgViBVIFYgVSBWIC4gLiAuIC4gIF4K KwkgKiBVIFYgVSBWIFUgViBVIFYgVSBWIFUgViAuIC4gLiAuICB8CisJICogVSBWIFUgViBVIFYg VSBWIFUgViBVIFYgLiAuIC4gLiAgfAorCSAqIFUgViBVIFYgVSBWIFUgViBVIFYgVSBWIC4gLiAu IC4gIFVWX1NjYW5saW5lcworCSAqIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gIHwK KwkgKiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuICBWCisJICogLiAuIC4gLiAuIC4g LiAuIC4gLiAuIC4gLiAuIC4gLiAgLS0+IEJ1ZmZlciBzaXplIGFsaWdubWVudAorCSAqCisJICog WV9TdHJpZGUgOiBXaWR0aCAqIDIgYWxpZ25lZCB0byAxMjgKKwkgKiBVVl9TdHJpZGUgOiBXaWR0 aCAqIDIgYWxpZ25lZCB0byAxMjgKKwkgKiBZX1NjYW5saW5lczogSGVpZ2h0IGFsaWduZWQgdG8g MzIKKwkgKiBVVl9TY2FubGluZXM6IEhlaWdodC8yIGFsaWduZWQgdG8gMTYKKwkgKiBFeHRyYWRh dGE6IEFyYml0cmFyeSAoc29mdHdhcmUtaW1wb3NlZCkgcGFkZGluZworCSAqIFRvdGFsIHNpemUg PSBhbGlnbigoWV9TdHJpZGUgKiBZX1NjYW5saW5lcworCSAqICAgICAgICAgICsgVVZfU3RyaWRl ICogVVZfU2NhbmxpbmVzCisJICogICAgICAgICAgKyBtYXgoRXh0cmFkYXRhLCBZX1N0cmlkZSAq IDgpLCA0MDk2KQorCSAqLworCUNPTE9SX0ZNVF9QMDEwLAorfTsKKworI2RlZmluZSBDT0xPUl9G TVRfUkdCQTEwMTAxMDJfVUJXQwlDT0xPUl9GTVRfUkdCQTEwMTAxMDJfVUJXQworI2RlZmluZSBD T0xPUl9GTVRfUkdCNTY1X1VCV0MJCUNPTE9SX0ZNVF9SR0I1NjVfVUJXQworI2RlZmluZSBDT0xP Ul9GTVRfUDAxMF9VQldDCQlDT0xPUl9GTVRfUDAxMF9VQldDCisjZGVmaW5lIENPTE9SX0ZNVF9Q MDEwCQlDT0xPUl9GTVRfUDAxMAorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBWRU5VU19F WFRSQURBVEFfU0laRShpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisJKHZvaWQpaGVpZ2h0Owor CSh2b2lkKXdpZHRoOworCisJLyoKKwkgKiBJbiB0aGUgZnV0dXJlLCBjYWxjdWxhdGUgdGhlIHNp emUgYmFzZWQgb24gdGhlIHcvaCBidXQganVzdAorCSAqIGhhcmRjb2RlIGl0IGZvciBub3cgc2lu Y2UgMTZLIHNhdGlzZmllcyBhbGwgY3VycmVudCB1c2VjYXNlcy4KKwkgKi8KKwlyZXR1cm4gMTYg KiAxMDI0OworfQorCisvKgorICogRnVuY3Rpb24gYXJndW1lbnRzOgorICogQGNvbG9yX2ZtdAor ICogQHdpZHRoCisgKiBQcm9ncmVzc2l2ZTogd2lkdGgKKyAqIEludGVybGFjZWQ6IHdpZHRoCisg Ki8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IFZFTlVTX1lfU1RSSURFKGludCBjb2xvcl9m bXQsIGludCB3aWR0aCkKK3sKKwl1bnNpZ25lZCBpbnQgYWxpZ25tZW50LCBzdHJpZGUgPSAwOwor CisJaWYgKCF3aWR0aCkKKwkJZ290byBpbnZhbGlkX2lucHV0OworCisJc3dpdGNoIChjb2xvcl9m bXQpIHsKKwljYXNlIENPTE9SX0ZNVF9OVjIxOgorCWNhc2UgQ09MT1JfRk1UX05WMTI6CisJY2Fz ZSBDT0xPUl9GTVRfTlYxMl9NVlRCOgorCWNhc2UgQ09MT1JfRk1UX05WMTJfVUJXQzoKKwkJYWxp Z25tZW50ID0gMTI4OworCQlzdHJpZGUgPSBNU01fTUVESUFfQUxJR04od2lkdGgsIGFsaWdubWVu dCk7CisJCWJyZWFrOworCWNhc2UgQ09MT1JfRk1UX05WMTJfQlBQMTBfVUJXQzoKKwkJYWxpZ25t ZW50ID0gMjU2OworCQlzdHJpZGUgPSBNU01fTUVESUFfQUxJR04od2lkdGgsIDE5Mik7CisJCXN0 cmlkZSA9IE1TTV9NRURJQV9BTElHTihzdHJpZGUgKiA0LzMsIGFsaWdubWVudCk7CisJCWJyZWFr OworCWNhc2UgQ09MT1JfRk1UX1AwMTBfVUJXQzoKKwkJYWxpZ25tZW50ID0gMjU2OworCQlzdHJp ZGUgPSBNU01fTUVESUFfQUxJR04od2lkdGggKiAyLCBhbGlnbm1lbnQpOworCQlicmVhazsKKwlj YXNlIENPTE9SX0ZNVF9QMDEwOgorCQlhbGlnbm1lbnQgPSAxMjg7CisJCXN0cmlkZSA9IE1TTV9N RURJQV9BTElHTih3aWR0aCoyLCBhbGlnbm1lbnQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQli cmVhazsKKwl9CitpbnZhbGlkX2lucHV0OgorCXJldHVybiBzdHJpZGU7Cit9CisKKy8qCisgKiBG dW5jdGlvbiBhcmd1bWVudHM6CisgKiBAY29sb3JfZm10CisgKiBAd2lkdGgKKyAqIFByb2dyZXNz aXZlOiB3aWR0aAorICogSW50ZXJsYWNlZDogd2lkdGgKKyAqLworc3RhdGljIGlubGluZSB1bnNp Z25lZCBpbnQgVkVOVVNfVVZfU1RSSURFKGludCBjb2xvcl9mbXQsIGludCB3aWR0aCkKK3sKKwl1 bnNpZ25lZCBpbnQgYWxpZ25tZW50LCBzdHJpZGUgPSAwOworCisJaWYgKCF3aWR0aCkKKwkJZ290 byBpbnZhbGlkX2lucHV0OworCisJc3dpdGNoIChjb2xvcl9mbXQpIHsKKwljYXNlIENPTE9SX0ZN VF9OVjIxOgorCWNhc2UgQ09MT1JfRk1UX05WMTI6CisJY2FzZSBDT0xPUl9GTVRfTlYxMl9NVlRC OgorCWNhc2UgQ09MT1JfRk1UX05WMTJfVUJXQzoKKwkJYWxpZ25tZW50ID0gMTI4OworCQlzdHJp ZGUgPSBNU01fTUVESUFfQUxJR04od2lkdGgsIGFsaWdubWVudCk7CisJCWJyZWFrOworCWNhc2Ug Q09MT1JfRk1UX05WMTJfQlBQMTBfVUJXQzoKKwkJYWxpZ25tZW50ID0gMjU2OworCQlzdHJpZGUg PSBNU01fTUVESUFfQUxJR04od2lkdGgsIDE5Mik7CisJCXN0cmlkZSA9IE1TTV9NRURJQV9BTElH TihzdHJpZGUgKiA0LzMsIGFsaWdubWVudCk7CisJCWJyZWFrOworCWNhc2UgQ09MT1JfRk1UX1Aw MTBfVUJXQzoKKwkJYWxpZ25tZW50ID0gMjU2OworCQlzdHJpZGUgPSBNU01fTUVESUFfQUxJR04o d2lkdGggKiAyLCBhbGlnbm1lbnQpOworCQlicmVhazsKKwljYXNlIENPTE9SX0ZNVF9QMDEwOgor CQlhbGlnbm1lbnQgPSAxMjg7CisJCXN0cmlkZSA9IE1TTV9NRURJQV9BTElHTih3aWR0aCoyLCBh bGlnbm1lbnQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CitpbnZhbGlkX2lu cHV0OgorCXJldHVybiBzdHJpZGU7Cit9CisKKy8qCisgKiBGdW5jdGlvbiBhcmd1bWVudHM6Cisg KiBAY29sb3JfZm10CisgKiBAaGVpZ2h0CisgKiBQcm9ncmVzc2l2ZTogaGVpZ2h0CisgKiBJbnRl cmxhY2VkOiAoaGVpZ2h0KzEpPj4xCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IFZF TlVTX1lfU0NBTkxJTkVTKGludCBjb2xvcl9mbXQsIGludCBoZWlnaHQpCit7CisJdW5zaWduZWQg aW50IGFsaWdubWVudCwgc2NsaW5lcyA9IDA7CisKKwlpZiAoIWhlaWdodCkKKwkJZ290byBpbnZh bGlkX2lucHV0OworCisJc3dpdGNoIChjb2xvcl9mbXQpIHsKKwljYXNlIENPTE9SX0ZNVF9OVjIx OgorCWNhc2UgQ09MT1JfRk1UX05WMTI6CisJY2FzZSBDT0xPUl9GTVRfTlYxMl9NVlRCOgorCWNh c2UgQ09MT1JfRk1UX05WMTJfVUJXQzoKKwljYXNlIENPTE9SX0ZNVF9QMDEwOgorCQlhbGlnbm1l bnQgPSAzMjsKKwkJYnJlYWs7CisJY2FzZSBDT0xPUl9GTVRfTlYxMl9CUFAxMF9VQldDOgorCWNh c2UgQ09MT1JfRk1UX1AwMTBfVUJXQzoKKwkJYWxpZ25tZW50ID0gMTY7CisJCWJyZWFrOworCWRl ZmF1bHQ6CisJCXJldHVybiAwOworCX0KKwlzY2xpbmVzID0gTVNNX01FRElBX0FMSUdOKGhlaWdo dCwgYWxpZ25tZW50KTsKK2ludmFsaWRfaW5wdXQ6CisJcmV0dXJuIHNjbGluZXM7Cit9CisKKy8q CisgKiBGdW5jdGlvbiBhcmd1bWVudHM6CisgKiBAY29sb3JfZm10CisgKiBAaGVpZ2h0CisgKiBQ cm9ncmVzc2l2ZTogaGVpZ2h0CisgKiBJbnRlcmxhY2VkOiAoaGVpZ2h0KzEpPj4xCisgKi8KK3N0 YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IFZFTlVTX1VWX1NDQU5MSU5FUyhpbnQgY29sb3JfZm10 LCBpbnQgaGVpZ2h0KQoreworCXVuc2lnbmVkIGludCBhbGlnbm1lbnQsIHNjbGluZXMgPSAwOwor CisJaWYgKCFoZWlnaHQpCisJCWdvdG8gaW52YWxpZF9pbnB1dDsKKworCXN3aXRjaCAoY29sb3Jf Zm10KSB7CisJY2FzZSBDT0xPUl9GTVRfTlYyMToKKwljYXNlIENPTE9SX0ZNVF9OVjEyOgorCWNh c2UgQ09MT1JfRk1UX05WMTJfTVZUQjoKKwljYXNlIENPTE9SX0ZNVF9OVjEyX0JQUDEwX1VCV0M6 CisJY2FzZSBDT0xPUl9GTVRfUDAxMF9VQldDOgorCWNhc2UgQ09MT1JfRk1UX1AwMTA6CisJCWFs aWdubWVudCA9IDE2OworCQlicmVhazsKKwljYXNlIENPTE9SX0ZNVF9OVjEyX1VCV0M6CisJCWFs aWdubWVudCA9IDMyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlnb3RvIGludmFsaWRfaW5wdXQ7 CisJfQorCisJc2NsaW5lcyA9IE1TTV9NRURJQV9BTElHTigoaGVpZ2h0KzEpPj4xLCBhbGlnbm1l bnQpOworCitpbnZhbGlkX2lucHV0OgorCXJldHVybiBzY2xpbmVzOworfQorCisvKgorICogRnVu Y3Rpb24gYXJndW1lbnRzOgorICogQGNvbG9yX2ZtdAorICogQHdpZHRoCisgKiBQcm9ncmVzc2l2 ZTogd2lkdGgKKyAqIEludGVybGFjZWQ6IHdpZHRoCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWdu ZWQgaW50IFZFTlVTX1lfTUVUQV9TVFJJREUoaW50IGNvbG9yX2ZtdCwgaW50IHdpZHRoKQorewor CWludCB5X3RpbGVfd2lkdGggPSAwLCB5X21ldGFfc3RyaWRlID0gMDsKKworCWlmICghd2lkdGgp CisJCWdvdG8gaW52YWxpZF9pbnB1dDsKKworCXN3aXRjaCAoY29sb3JfZm10KSB7CisJY2FzZSBD T0xPUl9GTVRfTlYxMl9VQldDOgorCWNhc2UgQ09MT1JfRk1UX1AwMTBfVUJXQzoKKwkJeV90aWxl X3dpZHRoID0gMzI7CisJCWJyZWFrOworCWNhc2UgQ09MT1JfRk1UX05WMTJfQlBQMTBfVUJXQzoK KwkJeV90aWxlX3dpZHRoID0gNDg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWdvdG8gaW52YWxp ZF9pbnB1dDsKKwl9CisKKwl5X21ldGFfc3RyaWRlID0gTVNNX01FRElBX1JPVU5EVVAod2lkdGgs IHlfdGlsZV93aWR0aCk7CisJeV9tZXRhX3N0cmlkZSA9IE1TTV9NRURJQV9BTElHTih5X21ldGFf c3RyaWRlLCA2NCk7CisKK2ludmFsaWRfaW5wdXQ6CisJcmV0dXJuIHlfbWV0YV9zdHJpZGU7Cit9 CisKKy8qCisgKiBGdW5jdGlvbiBhcmd1bWVudHM6CisgKiBAY29sb3JfZm10CisgKiBAaGVpZ2h0 CisgKiBQcm9ncmVzc2l2ZTogaGVpZ2h0CisgKiBJbnRlcmxhY2VkOiAoaGVpZ2h0KzEpPj4xCisg Ki8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IFZFTlVTX1lfTUVUQV9TQ0FOTElORVMoaW50 IGNvbG9yX2ZtdCwgaW50IGhlaWdodCkKK3sKKwlpbnQgeV90aWxlX2hlaWdodCA9IDAsIHlfbWV0 YV9zY2FubGluZXMgPSAwOworCisJaWYgKCFoZWlnaHQpCisJCWdvdG8gaW52YWxpZF9pbnB1dDsK KworCXN3aXRjaCAoY29sb3JfZm10KSB7CisJY2FzZSBDT0xPUl9GTVRfTlYxMl9VQldDOgorCQl5 X3RpbGVfaGVpZ2h0ID0gODsKKwkJYnJlYWs7CisJY2FzZSBDT0xPUl9GTVRfTlYxMl9CUFAxMF9V QldDOgorCWNhc2UgQ09MT1JfRk1UX1AwMTBfVUJXQzoKKwkJeV90aWxlX2hlaWdodCA9IDQ7CisJ CWJyZWFrOworCWRlZmF1bHQ6CisJCWdvdG8gaW52YWxpZF9pbnB1dDsKKwl9CisKKwl5X21ldGFf c2NhbmxpbmVzID0gTVNNX01FRElBX1JPVU5EVVAoaGVpZ2h0LCB5X3RpbGVfaGVpZ2h0KTsKKwl5 X21ldGFfc2NhbmxpbmVzID0gTVNNX01FRElBX0FMSUdOKHlfbWV0YV9zY2FubGluZXMsIDE2KTsK KworaW52YWxpZF9pbnB1dDoKKwlyZXR1cm4geV9tZXRhX3NjYW5saW5lczsKK30KKworLyoKKyAq IEZ1bmN0aW9uIGFyZ3VtZW50czoKKyAqIEBjb2xvcl9mbXQKKyAqIEB3aWR0aAorICogUHJvZ3Jl c3NpdmU6IHdpZHRoCisgKiBJbnRlcmxhY2VkOiB3aWR0aAorICovCitzdGF0aWMgaW5saW5lIHVu c2lnbmVkIGludCBWRU5VU19VVl9NRVRBX1NUUklERShpbnQgY29sb3JfZm10LCBpbnQgd2lkdGgp Cit7CisJaW50IHV2X3RpbGVfd2lkdGggPSAwLCB1dl9tZXRhX3N0cmlkZSA9IDA7CisKKwlpZiAo IXdpZHRoKQorCQlnb3RvIGludmFsaWRfaW5wdXQ7CisKKwlzd2l0Y2ggKGNvbG9yX2ZtdCkgewor CWNhc2UgQ09MT1JfRk1UX05WMTJfVUJXQzoKKwljYXNlIENPTE9SX0ZNVF9QMDEwX1VCV0M6CisJ CXV2X3RpbGVfd2lkdGggPSAxNjsKKwkJYnJlYWs7CisJY2FzZSBDT0xPUl9GTVRfTlYxMl9CUFAx MF9VQldDOgorCQl1dl90aWxlX3dpZHRoID0gMjQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWdv dG8gaW52YWxpZF9pbnB1dDsKKwl9CisKKwl1dl9tZXRhX3N0cmlkZSA9IE1TTV9NRURJQV9ST1VO RFVQKCh3aWR0aCsxKT4+MSwgdXZfdGlsZV93aWR0aCk7CisJdXZfbWV0YV9zdHJpZGUgPSBNU01f TUVESUFfQUxJR04odXZfbWV0YV9zdHJpZGUsIDY0KTsKKworaW52YWxpZF9pbnB1dDoKKwlyZXR1 cm4gdXZfbWV0YV9zdHJpZGU7Cit9CisKKy8qCisgKiBGdW5jdGlvbiBhcmd1bWVudHM6CisgKiBA Y29sb3JfZm10CisgKiBAaGVpZ2h0CisgKiBQcm9ncmVzc2l2ZTogaGVpZ2h0CisgKiBJbnRlcmxh Y2VkOiAoaGVpZ2h0KzEpPj4xCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IFZFTlVT X1VWX01FVEFfU0NBTkxJTkVTKGludCBjb2xvcl9mbXQsIGludCBoZWlnaHQpCit7CisJaW50IHV2 X3RpbGVfaGVpZ2h0ID0gMCwgdXZfbWV0YV9zY2FubGluZXMgPSAwOworCisJaWYgKCFoZWlnaHQp CisJCWdvdG8gaW52YWxpZF9pbnB1dDsKKworCXN3aXRjaCAoY29sb3JfZm10KSB7CisJY2FzZSBD T0xPUl9GTVRfTlYxMl9VQldDOgorCQl1dl90aWxlX2hlaWdodCA9IDg7CisJCWJyZWFrOworCWNh c2UgQ09MT1JfRk1UX05WMTJfQlBQMTBfVUJXQzoKKwljYXNlIENPTE9SX0ZNVF9QMDEwX1VCV0M6 CisJCXV2X3RpbGVfaGVpZ2h0ID0gNDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZ290byBpbnZh bGlkX2lucHV0OworCX0KKworCXV2X21ldGFfc2NhbmxpbmVzID0gTVNNX01FRElBX1JPVU5EVVAo KGhlaWdodCsxKT4+MSwgdXZfdGlsZV9oZWlnaHQpOworCXV2X21ldGFfc2NhbmxpbmVzID0gTVNN X01FRElBX0FMSUdOKHV2X21ldGFfc2NhbmxpbmVzLCAxNik7CisKK2ludmFsaWRfaW5wdXQ6CisJ cmV0dXJuIHV2X21ldGFfc2NhbmxpbmVzOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGlu dCBWRU5VU19SR0JfU1RSSURFKGludCBjb2xvcl9mbXQsIGludCB3aWR0aCkKK3sKKwl1bnNpZ25l ZCBpbnQgYWxpZ25tZW50ID0gMCwgc3RyaWRlID0gMCwgYnBwID0gNDsKKworCWlmICghd2lkdGgp CisJCWdvdG8gaW52YWxpZF9pbnB1dDsKKworCXN3aXRjaCAoY29sb3JfZm10KSB7CisJY2FzZSBD T0xPUl9GTVRfUkdCQTg4ODg6CisJCWFsaWdubWVudCA9IDEyODsKKwkJYnJlYWs7CisJY2FzZSBD T0xPUl9GTVRfUkdCNTY1X1VCV0M6CisJCWFsaWdubWVudCA9IDI1NjsKKwkJYnBwID0gMjsKKwkJ YnJlYWs7CisJY2FzZSBDT0xPUl9GTVRfUkdCQTg4ODhfVUJXQzoKKwljYXNlIENPTE9SX0ZNVF9S R0JBMTAxMDEwMl9VQldDOgorCQlhbGlnbm1lbnQgPSAyNTY7CisJCWJyZWFrOworCWRlZmF1bHQ6 CisJCWdvdG8gaW52YWxpZF9pbnB1dDsKKwl9CisKKwlzdHJpZGUgPSBNU01fTUVESUFfQUxJR04o d2lkdGggKiBicHAsIGFsaWdubWVudCk7CisKK2ludmFsaWRfaW5wdXQ6CisJcmV0dXJuIHN0cmlk ZTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgVkVOVVNfUkdCX1NDQU5MSU5FUyhp bnQgY29sb3JfZm10LCBpbnQgaGVpZ2h0KQoreworCXVuc2lnbmVkIGludCBhbGlnbm1lbnQgPSAw LCBzY2FubGluZXMgPSAwOworCisJaWYgKCFoZWlnaHQpCisJCWdvdG8gaW52YWxpZF9pbnB1dDsK KworCXN3aXRjaCAoY29sb3JfZm10KSB7CisJY2FzZSBDT0xPUl9GTVRfUkdCQTg4ODg6CisJCWFs aWdubWVudCA9IDMyOworCQlicmVhazsKKwljYXNlIENPTE9SX0ZNVF9SR0JBODg4OF9VQldDOgor CWNhc2UgQ09MT1JfRk1UX1JHQkExMDEwMTAyX1VCV0M6CisJY2FzZSBDT0xPUl9GTVRfUkdCNTY1 X1VCV0M6CisJCWFsaWdubWVudCA9IDE2OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlnb3RvIGlu dmFsaWRfaW5wdXQ7CisJfQorCisJc2NhbmxpbmVzID0gTVNNX01FRElBX0FMSUdOKGhlaWdodCwg YWxpZ25tZW50KTsKKworaW52YWxpZF9pbnB1dDoKKwlyZXR1cm4gc2NhbmxpbmVzOworfQorCitz dGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBWRU5VU19SR0JfTUVUQV9TVFJJREUoaW50IGNvbG9y X2ZtdCwgaW50IHdpZHRoKQoreworCWludCByZ2JfdGlsZV93aWR0aCA9IDAsIHJnYl9tZXRhX3N0 cmlkZSA9IDA7CisKKwlpZiAoIXdpZHRoKQorCQlnb3RvIGludmFsaWRfaW5wdXQ7CisKKwlzd2l0 Y2ggKGNvbG9yX2ZtdCkgeworCWNhc2UgQ09MT1JfRk1UX1JHQkE4ODg4X1VCV0M6CisJY2FzZSBD T0xPUl9GTVRfUkdCQTEwMTAxMDJfVUJXQzoKKwljYXNlIENPTE9SX0ZNVF9SR0I1NjVfVUJXQzoK KwkJcmdiX3RpbGVfd2lkdGggPSAxNjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZ290byBpbnZh bGlkX2lucHV0OworCX0KKworCXJnYl9tZXRhX3N0cmlkZSA9IE1TTV9NRURJQV9ST1VORFVQKHdp ZHRoLCByZ2JfdGlsZV93aWR0aCk7CisJcmdiX21ldGFfc3RyaWRlID0gTVNNX01FRElBX0FMSUdO KHJnYl9tZXRhX3N0cmlkZSwgNjQpOworCitpbnZhbGlkX2lucHV0OgorCXJldHVybiByZ2JfbWV0 YV9zdHJpZGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IFZFTlVTX1JHQl9NRVRB X1NDQU5MSU5FUyhpbnQgY29sb3JfZm10LCBpbnQgaGVpZ2h0KQoreworCWludCByZ2JfdGlsZV9o ZWlnaHQgPSAwLCByZ2JfbWV0YV9zY2FubGluZXMgPSAwOworCisJaWYgKCFoZWlnaHQpCisJCWdv dG8gaW52YWxpZF9pbnB1dDsKKworCXN3aXRjaCAoY29sb3JfZm10KSB7CisJY2FzZSBDT0xPUl9G TVRfUkdCQTg4ODhfVUJXQzoKKwljYXNlIENPTE9SX0ZNVF9SR0JBMTAxMDEwMl9VQldDOgorCWNh c2UgQ09MT1JfRk1UX1JHQjU2NV9VQldDOgorCQlyZ2JfdGlsZV9oZWlnaHQgPSA0OworCQlicmVh azsKKwlkZWZhdWx0OgorCQlnb3RvIGludmFsaWRfaW5wdXQ7CisJfQorCisJcmdiX21ldGFfc2Nh bmxpbmVzID0gTVNNX01FRElBX1JPVU5EVVAoaGVpZ2h0LCByZ2JfdGlsZV9oZWlnaHQpOworCXJn Yl9tZXRhX3NjYW5saW5lcyA9IE1TTV9NRURJQV9BTElHTihyZ2JfbWV0YV9zY2FubGluZXMsIDE2 KTsKKworaW52YWxpZF9pbnB1dDoKKwlyZXR1cm4gcmdiX21ldGFfc2NhbmxpbmVzOworfQorCisv KgorICogRnVuY3Rpb24gYXJndW1lbnRzOgorICogQGNvbG9yX2ZtdAorICogQHdpZHRoCisgKiBQ cm9ncmVzc2l2ZTogd2lkdGgKKyAqIEludGVybGFjZWQ6IHdpZHRoCisgKiBAaGVpZ2h0CisgKiBQ cm9ncmVzc2l2ZTogaGVpZ2h0CisgKiBJbnRlcmxhY2VkOiBoZWlnaHQKKyAqLworc3RhdGljIGlu bGluZSB1bnNpZ25lZCBpbnQgVkVOVVNfQlVGRkVSX1NJWkUoCisJaW50IGNvbG9yX2ZtdCwgaW50 IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworCWNvbnN0IHVuc2lnbmVkIGludCBleHRyYV9zaXplID0g VkVOVVNfRVhUUkFEQVRBX1NJWkUod2lkdGgsIGhlaWdodCk7CisJdW5zaWduZWQgaW50IHV2X2Fs aWdubWVudCA9IDAsIHNpemUgPSAwOworCXVuc2lnbmVkIGludCB5X3BsYW5lLCB1dl9wbGFuZSwg eV9zdHJpZGUsCisJCXV2X3N0cmlkZSwgeV9zY2xpbmVzLCB1dl9zY2xpbmVzOworCXVuc2lnbmVk IGludCB5X3Vid2NfcGxhbmUgPSAwLCB1dl91YndjX3BsYW5lID0gMDsKKwl1bnNpZ25lZCBpbnQg eV9tZXRhX3N0cmlkZSA9IDAsIHlfbWV0YV9zY2FubGluZXMgPSAwOworCXVuc2lnbmVkIGludCB1 dl9tZXRhX3N0cmlkZSA9IDAsIHV2X21ldGFfc2NhbmxpbmVzID0gMDsKKwl1bnNpZ25lZCBpbnQg eV9tZXRhX3BsYW5lID0gMCwgdXZfbWV0YV9wbGFuZSA9IDA7CisJdW5zaWduZWQgaW50IHJnYl9z dHJpZGUgPSAwLCByZ2Jfc2NhbmxpbmVzID0gMDsKKwl1bnNpZ25lZCBpbnQgcmdiX3BsYW5lID0g MCwgcmdiX3Vid2NfcGxhbmUgPSAwLCByZ2JfbWV0YV9wbGFuZSA9IDA7CisJdW5zaWduZWQgaW50 IHJnYl9tZXRhX3N0cmlkZSA9IDAsIHJnYl9tZXRhX3NjYW5saW5lcyA9IDA7CisKKwlpZiAoIXdp ZHRoIHx8ICFoZWlnaHQpCisJCWdvdG8gaW52YWxpZF9pbnB1dDsKKworCXlfc3RyaWRlID0gVkVO VVNfWV9TVFJJREUoY29sb3JfZm10LCB3aWR0aCk7CisJdXZfc3RyaWRlID0gVkVOVVNfVVZfU1RS SURFKGNvbG9yX2ZtdCwgd2lkdGgpOworCXlfc2NsaW5lcyA9IFZFTlVTX1lfU0NBTkxJTkVTKGNv bG9yX2ZtdCwgaGVpZ2h0KTsKKwl1dl9zY2xpbmVzID0gVkVOVVNfVVZfU0NBTkxJTkVTKGNvbG9y X2ZtdCwgaGVpZ2h0KTsKKwlyZ2Jfc3RyaWRlID0gVkVOVVNfUkdCX1NUUklERShjb2xvcl9mbXQs IHdpZHRoKTsKKwlyZ2Jfc2NhbmxpbmVzID0gVkVOVVNfUkdCX1NDQU5MSU5FUyhjb2xvcl9mbXQs IGhlaWdodCk7CisKKwlzd2l0Y2ggKGNvbG9yX2ZtdCkgeworCWNhc2UgQ09MT1JfRk1UX05WMjE6 CisJY2FzZSBDT0xPUl9GTVRfTlYxMjoKKwljYXNlIENPTE9SX0ZNVF9QMDEwOgorCQl1dl9hbGln bm1lbnQgPSA0MDk2OworCQl5X3BsYW5lID0geV9zdHJpZGUgKiB5X3NjbGluZXM7CisJCXV2X3Bs YW5lID0gdXZfc3RyaWRlICogdXZfc2NsaW5lcyArIHV2X2FsaWdubWVudDsKKwkJc2l6ZSA9IHlf cGxhbmUgKyB1dl9wbGFuZSArCisJCQkJTVNNX01FRElBX01BWChleHRyYV9zaXplLCA4ICogeV9z dHJpZGUpOworCQlzaXplID0gTVNNX01FRElBX0FMSUdOKHNpemUsIDQwOTYpOworCQlicmVhazsK KwljYXNlIENPTE9SX0ZNVF9OVjEyX01WVEI6CisJCXV2X2FsaWdubWVudCA9IDQwOTY7CisJCXlf cGxhbmUgPSB5X3N0cmlkZSAqIHlfc2NsaW5lczsKKwkJdXZfcGxhbmUgPSB1dl9zdHJpZGUgKiB1 dl9zY2xpbmVzICsgdXZfYWxpZ25tZW50OworCQlzaXplID0geV9wbGFuZSArIHV2X3BsYW5lOwor CQlzaXplID0gMiAqIHNpemUgKyBleHRyYV9zaXplOworCQlzaXplID0gTVNNX01FRElBX0FMSUdO KHNpemUsIDQwOTYpOworCQlicmVhazsKKwljYXNlIENPTE9SX0ZNVF9OVjEyX1VCV0M6CisJCXlf c2NsaW5lcyA9IFZFTlVTX1lfU0NBTkxJTkVTKGNvbG9yX2ZtdCwgKGhlaWdodCsxKT4+MSk7CisJ CXlfdWJ3Y19wbGFuZSA9IE1TTV9NRURJQV9BTElHTih5X3N0cmlkZSAqIHlfc2NsaW5lcywgNDA5 Nik7CisJCXV2X3NjbGluZXMgPSBWRU5VU19VVl9TQ0FOTElORVMoY29sb3JfZm10LCAoaGVpZ2h0 KzEpPj4xKTsKKwkJdXZfdWJ3Y19wbGFuZSA9IE1TTV9NRURJQV9BTElHTih1dl9zdHJpZGUgKiB1 dl9zY2xpbmVzLCA0MDk2KTsKKwkJeV9tZXRhX3N0cmlkZSA9IFZFTlVTX1lfTUVUQV9TVFJJREUo Y29sb3JfZm10LCB3aWR0aCk7CisJCXlfbWV0YV9zY2FubGluZXMgPQorCQkJVkVOVVNfWV9NRVRB X1NDQU5MSU5FUyhjb2xvcl9mbXQsIChoZWlnaHQrMSk+PjEpOworCQl5X21ldGFfcGxhbmUgPSBN U01fTUVESUFfQUxJR04oCisJCQl5X21ldGFfc3RyaWRlICogeV9tZXRhX3NjYW5saW5lcywgNDA5 Nik7CisJCXV2X21ldGFfc3RyaWRlID0gVkVOVVNfVVZfTUVUQV9TVFJJREUoY29sb3JfZm10LCB3 aWR0aCk7CisJCXV2X21ldGFfc2NhbmxpbmVzID0KKwkJCVZFTlVTX1VWX01FVEFfU0NBTkxJTkVT KGNvbG9yX2ZtdCwgKGhlaWdodCsxKT4+MSk7CisJCXV2X21ldGFfcGxhbmUgPSBNU01fTUVESUFf QUxJR04odXZfbWV0YV9zdHJpZGUgKgorCQkJdXZfbWV0YV9zY2FubGluZXMsIDQwOTYpOworCisJ CXNpemUgPSAoeV91YndjX3BsYW5lICsgdXZfdWJ3Y19wbGFuZSArIHlfbWV0YV9wbGFuZSArCisJ CQl1dl9tZXRhX3BsYW5lKSoyICsKKwkJCU1TTV9NRURJQV9NQVgoZXh0cmFfc2l6ZSArIDgxOTIs IDQ4ICogeV9zdHJpZGUpOworCQlzaXplID0gTVNNX01FRElBX0FMSUdOKHNpemUsIDQwOTYpOwor CQlicmVhazsKKwljYXNlIENPTE9SX0ZNVF9OVjEyX0JQUDEwX1VCV0M6CisJCXlfdWJ3Y19wbGFu ZSA9IE1TTV9NRURJQV9BTElHTih5X3N0cmlkZSAqIHlfc2NsaW5lcywgNDA5Nik7CisJCXV2X3Vi d2NfcGxhbmUgPSBNU01fTUVESUFfQUxJR04odXZfc3RyaWRlICogdXZfc2NsaW5lcywgNDA5Nik7 CisJCXlfbWV0YV9zdHJpZGUgPSBWRU5VU19ZX01FVEFfU1RSSURFKGNvbG9yX2ZtdCwgd2lkdGgp OworCQl5X21ldGFfc2NhbmxpbmVzID0gVkVOVVNfWV9NRVRBX1NDQU5MSU5FUyhjb2xvcl9mbXQs IGhlaWdodCk7CisJCXlfbWV0YV9wbGFuZSA9IE1TTV9NRURJQV9BTElHTigKKwkJCQl5X21ldGFf c3RyaWRlICogeV9tZXRhX3NjYW5saW5lcywgNDA5Nik7CisJCXV2X21ldGFfc3RyaWRlID0gVkVO VVNfVVZfTUVUQV9TVFJJREUoY29sb3JfZm10LCB3aWR0aCk7CisJCXV2X21ldGFfc2NhbmxpbmVz ID0gVkVOVVNfVVZfTUVUQV9TQ0FOTElORVMoY29sb3JfZm10LCBoZWlnaHQpOworCQl1dl9tZXRh X3BsYW5lID0gTVNNX01FRElBX0FMSUdOKHV2X21ldGFfc3RyaWRlICoKKwkJCQkJdXZfbWV0YV9z Y2FubGluZXMsIDQwOTYpOworCisJCXNpemUgPSB5X3Vid2NfcGxhbmUgKyB1dl91YndjX3BsYW5l ICsgeV9tZXRhX3BsYW5lICsKKwkJCXV2X21ldGFfcGxhbmUgKworCQkJTVNNX01FRElBX01BWChl eHRyYV9zaXplICsgODE5MiwgNDggKiB5X3N0cmlkZSk7CisJCXNpemUgPSBNU01fTUVESUFfQUxJ R04oc2l6ZSwgNDA5Nik7CisJCWJyZWFrOworCWNhc2UgQ09MT1JfRk1UX1AwMTBfVUJXQzoKKwkJ eV91YndjX3BsYW5lID0gTVNNX01FRElBX0FMSUdOKHlfc3RyaWRlICogeV9zY2xpbmVzLCA0MDk2 KTsKKwkJdXZfdWJ3Y19wbGFuZSA9IE1TTV9NRURJQV9BTElHTih1dl9zdHJpZGUgKiB1dl9zY2xp bmVzLCA0MDk2KTsKKwkJeV9tZXRhX3N0cmlkZSA9IFZFTlVTX1lfTUVUQV9TVFJJREUoY29sb3Jf Zm10LCB3aWR0aCk7CisJCXlfbWV0YV9zY2FubGluZXMgPSBWRU5VU19ZX01FVEFfU0NBTkxJTkVT KGNvbG9yX2ZtdCwgaGVpZ2h0KTsKKwkJeV9tZXRhX3BsYW5lID0gTVNNX01FRElBX0FMSUdOKAor CQkJCXlfbWV0YV9zdHJpZGUgKiB5X21ldGFfc2NhbmxpbmVzLCA0MDk2KTsKKwkJdXZfbWV0YV9z dHJpZGUgPSBWRU5VU19VVl9NRVRBX1NUUklERShjb2xvcl9mbXQsIHdpZHRoKTsKKwkJdXZfbWV0 YV9zY2FubGluZXMgPSBWRU5VU19VVl9NRVRBX1NDQU5MSU5FUyhjb2xvcl9mbXQsIGhlaWdodCk7 CisJCXV2X21ldGFfcGxhbmUgPSBNU01fTUVESUFfQUxJR04odXZfbWV0YV9zdHJpZGUgKgorCQkJ CQl1dl9tZXRhX3NjYW5saW5lcywgNDA5Nik7CisKKwkJc2l6ZSA9IHlfdWJ3Y19wbGFuZSArIHV2 X3Vid2NfcGxhbmUgKyB5X21ldGFfcGxhbmUgKworCQkJdXZfbWV0YV9wbGFuZTsKKwkJc2l6ZSA9 IE1TTV9NRURJQV9BTElHTihzaXplLCA0MDk2KTsKKwkJYnJlYWs7CisJY2FzZSBDT0xPUl9GTVRf UkdCQTg4ODg6CisJCXJnYl9wbGFuZSA9IE1TTV9NRURJQV9BTElHTihyZ2Jfc3RyaWRlICAqIHJn Yl9zY2FubGluZXMsIDQwOTYpOworCQlzaXplID0gcmdiX3BsYW5lOworCQlzaXplID0gIE1TTV9N RURJQV9BTElHTihzaXplLCA0MDk2KTsKKwkJYnJlYWs7CisJY2FzZSBDT0xPUl9GTVRfUkdCQTg4 ODhfVUJXQzoKKwljYXNlIENPTE9SX0ZNVF9SR0JBMTAxMDEwMl9VQldDOgorCWNhc2UgQ09MT1Jf Rk1UX1JHQjU2NV9VQldDOgorCQlyZ2JfdWJ3Y19wbGFuZSA9IE1TTV9NRURJQV9BTElHTihyZ2Jf c3RyaWRlICogcmdiX3NjYW5saW5lcywKKwkJCQkJCQk0MDk2KTsKKwkJcmdiX21ldGFfc3RyaWRl ID0gVkVOVVNfUkdCX01FVEFfU1RSSURFKGNvbG9yX2ZtdCwgd2lkdGgpOworCQlyZ2JfbWV0YV9z Y2FubGluZXMgPSBWRU5VU19SR0JfTUVUQV9TQ0FOTElORVMoY29sb3JfZm10LAorCQkJCQloZWln aHQpOworCQlyZ2JfbWV0YV9wbGFuZSA9IE1TTV9NRURJQV9BTElHTihyZ2JfbWV0YV9zdHJpZGUg KgorCQkJCQlyZ2JfbWV0YV9zY2FubGluZXMsIDQwOTYpOworCQlzaXplID0gcmdiX3Vid2NfcGxh bmUgKyByZ2JfbWV0YV9wbGFuZTsKKwkJc2l6ZSA9IE1TTV9NRURJQV9BTElHTihzaXplLCA0MDk2 KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQoraW52YWxpZF9pbnB1dDoKKwly ZXR1cm4gc2l6ZTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgVkVOVVNfVklFVzJf T0ZGU0VUKAorCWludCBjb2xvcl9mbXQsIGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKwl1bnNp Z25lZCBpbnQgb2Zmc2V0ID0gMDsKKwl1bnNpZ25lZCBpbnQgeV9wbGFuZSwgdXZfcGxhbmUsIHlf c3RyaWRlLAorCQl1dl9zdHJpZGUsIHlfc2NsaW5lcywgdXZfc2NsaW5lczsKKwlpZiAoIXdpZHRo IHx8ICFoZWlnaHQpCisJCWdvdG8gaW52YWxpZF9pbnB1dDsKKworCXlfc3RyaWRlID0gVkVOVVNf WV9TVFJJREUoY29sb3JfZm10LCB3aWR0aCk7CisJdXZfc3RyaWRlID0gVkVOVVNfVVZfU1RSSURF KGNvbG9yX2ZtdCwgd2lkdGgpOworCXlfc2NsaW5lcyA9IFZFTlVTX1lfU0NBTkxJTkVTKGNvbG9y X2ZtdCwgaGVpZ2h0KTsKKwl1dl9zY2xpbmVzID0gVkVOVVNfVVZfU0NBTkxJTkVTKGNvbG9yX2Zt dCwgaGVpZ2h0KTsKKwlzd2l0Y2ggKGNvbG9yX2ZtdCkgeworCWNhc2UgQ09MT1JfRk1UX05WMTJf TVZUQjoKKwkJeV9wbGFuZSA9IHlfc3RyaWRlICogeV9zY2xpbmVzOworCQl1dl9wbGFuZSA9IHV2 X3N0cmlkZSAqIHV2X3NjbGluZXM7CisJCW9mZnNldCA9IHlfcGxhbmUgKyB1dl9wbGFuZTsKKwkJ YnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQoraW52YWxpZF9pbnB1dDoKKwlyZXR1cm4g b2Zmc2V0OworfQorCisjZW5kaWYKLS0gClNlYW4gUGF1bCwgU29mdHdhcmUgRW5naW5lZXIsIEdv b2dsZSAvIENocm9taXVtIE9TCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpGcmVlZHJlbm8gbWFpbGluZyBsaXN0CkZyZWVkcmVub0BsaXN0cy5mcmVlZGVz a3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9m cmVlZHJlbm8K