From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dan Carpenter Subject: Re: [PATCH 1/2] staging: net: wireless: add ESP8089 WiFi driver Date: Tue, 25 Jul 2017 13:31:41 +0300 Message-ID: <20170725103140.sr5caiqq45c7gcfv@mwanda> References: <20170721143502.1991-1-quentin.schulz@free-electrons.com> <20170721143502.1991-2-quentin.schulz@free-electrons.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20170721143502.1991-2-quentin.schulz@free-electrons.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: driverdev-devel-bounces@linuxdriverproject.org Sender: "devel" To: Quentin Schulz Cc: devel@driverdev.osuosl.org, ulf.hansson@linaro.org, baolin.wang@linaro.org, gregkh@linuxfoundation.org, linus.walleij@linaro.org, linux-mmc@vger.kernel.org, adrian.hunter@intel.com, linux-kernel@vger.kernel.org, hdegoede@redhat.com, wens@csie.org, icenowy@aosc.xyz, maxime.ripard@free-electrons.com, shawn.lin@rock-chips.com List-Id: linux-mmc@vger.kernel.org WWVhaC4gIFRoaXMgZmVlbHMgbGlrZSBpdCBjb3VsZCBnbyBpbnRvIHRoZSBtYWluIGxpbnV4LXdp cmVsZXNzIHRyZWUKd2l0aCBhIGxpdHRsZSB3b3JrLiAgSSBwdXQgc29tZSByYW5kb20gcmV2aWV3 IGNvbW1lbnRzIGlubGluZS4gIE5vdGhpbmcKc3VwZXIgZHJhc3RpYyBzdGFuZHMgb3V0LgoKcmVn YXJkcywKZGFuIGNhcnBlbnRlcgoKCk9uIEZyaSwgSnVsIDIxLCAyMDE3IGF0IDA0OjM1OjAxUE0g KzAyMDAsIFF1ZW50aW4gU2NodWx6IHdyb3RlOgo+IFRoZSBFc3ByZXNzaWYgRVNQODA4OSBXaUZp IGNoaXBzIGNhbiBiZSBvZnRlbiBmb3VuZCBpbiBjaGVhcCB0YWJsZXRzLgo+IFRoZXJlIGlzIG9u ZSBpbiBBMjMgUG9sYXJvaWQgdGFibGV0cyBmb3IgZXhhbXBsZS4KPiAKPiBUaGUgY2hpcCBpcyBv ZnRlbiBlbWJlZGRlZCBhcyBhbiBlTU1DIFNESU8gZGV2aWNlLgo+IAo+IFRoZSBjb2RlIHdhcyB0 YWtlbiBmcm9tIGFuIG91dC1vZi10cmVlIHJlcG9zaXRvcnkgYW5kIGhhcyBzZWVuIGEgZmlyc3QK PiBwYXNzIGluIHRoZSBjbGVhbnVwIHByb2Nlc3MuCj4gCj4gQXQgdGhlIG1vbWVudCwgdGhlcmUg aXMgbm8gcHVibGljbHkgYXZhaWxhYmxlIGRhdGFzaGVldCBmb3IgdGhpcyBjaGlwLgo+IAo+IENj OiBIYW5zIGRlIEdvZWRlIDxoZGVnb2VkZUByZWRoYXQuY29tPgo+IENjOiBJY2Vub3d5IFpoZW5n IDxpY2Vub3d5QGFvc2MueHl6Pgo+IFNpZ25lZC1vZmYtYnk6IFF1ZW50aW4gU2NodWx6IDxxdWVu dGluLnNjaHVsekBmcmVlLWVsZWN0cm9ucy5jb20+Cj4gLS0tCj4gIGRyaXZlcnMvc3RhZ2luZy9L Y29uZmlnICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKPiAgZHJpdmVycy9zdGFnaW5nL01h a2VmaWxlICAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwo+ICBkcml2ZXJzL3N0YWdpbmcvZXNw ODA4OS9LY29uZmlnICAgICAgICAgICAgIHwgICAxMyArCj4gIGRyaXZlcnMvc3RhZ2luZy9lc3A4 MDg5L01ha2VmaWxlICAgICAgICAgICAgfCAgICA3ICsKPiAgZHJpdmVycy9zdGFnaW5nL2VzcDgw ODkvZXNwX2N0cmwuYyAgICAgICAgICB8ICA1MjcgKysrKysrKysKPiAgZHJpdmVycy9zdGFnaW5n L2VzcDgwODkvZXNwX2N0cmwuaCAgICAgICAgICB8ICAgNDggKwo+ICBkcml2ZXJzL3N0YWdpbmcv ZXNwODA4OS9lc3BfZGVidWcuYyAgICAgICAgIHwgIDI0NyArKysrCj4gIGRyaXZlcnMvc3RhZ2lu Zy9lc3A4MDg5L2VzcF9kZWJ1Zy5oICAgICAgICAgfCAgIDY5ICsrCj4gIGRyaXZlcnMvc3RhZ2lu Zy9lc3A4MDg5L2VzcF9maWxlLmMgICAgICAgICAgfCAgMjIxICsrKysKPiAgZHJpdmVycy9zdGFn aW5nL2VzcDgwODkvZXNwX2ZpbGUuaCAgICAgICAgICB8ICAgMzAgKwo+ICBkcml2ZXJzL3N0YWdp bmcvZXNwODA4OS9lc3BfaW5pdF9kYXRhLmggICAgIHwgICAxNyArCj4gIGRyaXZlcnMvc3RhZ2lu Zy9lc3A4MDg5L2VzcF9pby5jICAgICAgICAgICAgfCAgMjk0ICsrKysrCj4gIGRyaXZlcnMvc3Rh Z2luZy9lc3A4MDg5L2VzcF9tYWM4MDIxMS5jICAgICAgfCAxNDk2ICsrKysrKysrKysrKysrKysr KysrKysrCj4gIGRyaXZlcnMvc3RhZ2luZy9lc3A4MDg5L2VzcF9tYWM4MDIxMS5oICAgICAgfCAg IDMzICsKPiAgZHJpdmVycy9zdGFnaW5nL2VzcDgwODkvZXNwX21haW4uYyAgICAgICAgICB8ICAx OTkgKysrKwo+ICBkcml2ZXJzL3N0YWdpbmcvZXNwODA4OS9lc3BfcHViLmggICAgICAgICAgIHwg IDE4OCArKysKPiAgZHJpdmVycy9zdGFnaW5nL2VzcDgwODkvZXNwX3NpZi5oICAgICAgICAgICB8 ICAxMzEgKysKPiAgZHJpdmVycy9zdGFnaW5nL2VzcDgwODkvZXNwX3NpcC5jICAgICAgICAgICB8 IDE3MTggKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIGRyaXZlcnMvc3RhZ2luZy9lc3A4 MDg5L2VzcF9zaXAuaCAgICAgICAgICAgfCAgMTUwICsrKwo+ICBkcml2ZXJzL3N0YWdpbmcvZXNw ODA4OS9lc3BfdXRpbHMuYyAgICAgICAgIHwgIDEzMyArKysKPiAgZHJpdmVycy9zdGFnaW5nL2Vz cDgwODkvZXNwX3V0aWxzLmggICAgICAgICB8ICAgMjcgKwo+ICBkcml2ZXJzL3N0YWdpbmcvZXNw ODA4OS9lc3Bfd2wuaCAgICAgICAgICAgIHwgICAzNSArCj4gIGRyaXZlcnMvc3RhZ2luZy9lc3A4 MDg5L2VzcF93bWFjLmggICAgICAgICAgfCAgIDg3ICsrCj4gIGRyaXZlcnMvc3RhZ2luZy9lc3A4 MDg5L3NkaW9fc2lmX2VzcC5jICAgICAgfCAgNTUyICsrKysrKysrKwo+ICBkcml2ZXJzL3N0YWdp bmcvZXNwODA4OS9zaXAyX2NvbW1vbi5oICAgICAgIHwgIDM4OCArKysrKysKPiAgZHJpdmVycy9z dGFnaW5nL2VzcDgwODkvc2xjX2hvc3RfcmVnaXN0ZXIuaCB8ICAyNjMgKysrKwo+ICAyNiBmaWxl cyBjaGFuZ2VkLCA2ODc2IGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvc3RhZ2luZy9lc3A4MDg5L0tjb25maWcKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv c3RhZ2luZy9lc3A4MDg5L01ha2VmaWxlCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0 YWdpbmcvZXNwODA4OS9lc3BfY3RybC5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0 YWdpbmcvZXNwODA4OS9lc3BfY3RybC5oCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0 YWdpbmcvZXNwODA4OS9lc3BfZGVidWcuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9z dGFnaW5nL2VzcDgwODkvZXNwX2RlYnVnLmgKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv c3RhZ2luZy9lc3A4MDg5L2VzcF9maWxlLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv c3RhZ2luZy9lc3A4MDg5L2VzcF9maWxlLmgKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv c3RhZ2luZy9lc3A4MDg5L2VzcF9pbml0X2RhdGEuaAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9zdGFnaW5nL2VzcDgwODkvZXNwX2lvLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvc3RhZ2luZy9lc3A4MDg5L2VzcF9tYWM4MDIxMS5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL3N0YWdpbmcvZXNwODA4OS9lc3BfbWFjODAyMTEuaAo+ICBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9zdGFnaW5nL2VzcDgwODkvZXNwX21haW4uYwo+ICBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9zdGFnaW5nL2VzcDgwODkvZXNwX3B1Yi5oCj4gIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL3N0YWdpbmcvZXNwODA4OS9lc3Bfc2lmLmgKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvc3RhZ2luZy9lc3A4MDg5L2VzcF9zaXAuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9zdGFnaW5nL2VzcDgwODkvZXNwX3NpcC5oCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL3N0YWdpbmcvZXNwODA4OS9lc3BfdXRpbHMuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9zdGFnaW5nL2VzcDgwODkvZXNwX3V0aWxzLmgKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvc3RhZ2luZy9lc3A4MDg5L2VzcF93bC5oCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL3N0YWdpbmcvZXNwODA4OS9lc3Bfd21hYy5oCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL3N0YWdpbmcvZXNwODA4OS9zZGlvX3NpZl9lc3AuYwo+ICBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9zdGFnaW5nL2VzcDgwODkvc2lwMl9jb21tb24uaAo+ICBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9zdGFnaW5nL2VzcDgwODkvc2xjX2hvc3RfcmVnaXN0ZXIuaAo+IAo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9LY29u ZmlnCj4gaW5kZXggZTk3ZDcyZTNiYzQwLi4wYmQwMDc4Mzc0MjkgMTAwNjQ0Cj4gLS0tIGEvZHJp dmVycy9zdGFnaW5nL0tjb25maWcKPiArKysgYi9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZwo+IEBA IC0xMTQsNCArMTE0LDYgQEAgc291cmNlICJkcml2ZXJzL3N0YWdpbmcvdmJveHZpZGVvL0tjb25m aWciCj4gIAo+ICBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9waTQzMy9LY29uZmlnIgo+ICAKPiAr c291cmNlICJkcml2ZXJzL3N0YWdpbmcvZXNwODA4OS9LY29uZmlnIgo+ICsKPiAgZW5kaWYgIyBT VEFHSU5HCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZSBiL2RyaXZlcnMv c3RhZ2luZy9NYWtlZmlsZQo+IGluZGV4IDk5M2VkMGMxNTU2Yy4uMjNjZmExMjU4YzRlIDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvc3RhZ2lu Zy9NYWtlZmlsZQo+IEBAIC00NiwzICs0Niw0IEBAIG9iai0kKENPTkZJR19CQ00yODM1X1ZDSElR KQkrPSB2YzA0X3NlcnZpY2VzLwo+ICBvYmotJChDT05GSUdfQ1JZUFRPX0RFVl9DQ1JFRSkJKz0g Y2NyZWUvCj4gIG9iai0kKENPTkZJR19EUk1fVkJPWFZJREVPKQkrPSB2Ym94dmlkZW8vCj4gIG9i ai0kKENPTkZJR19QSTQzMykJCSs9IHBpNDMzLwo+ICtvYmotJChDT05GSUdfRVNQODA4OSkJCSs9 IGVzcDgwODkvCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lc3A4MDg5L0tjb25maWcg Yi9kcml2ZXJzL3N0YWdpbmcvZXNwODA4OS9LY29uZmlnCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQK PiBpbmRleCAwMDAwMDAwMDAwMDAuLjhmZGQ4ZmE4MjhhZAo+IC0tLSAvZGV2L251bGwKPiArKysg Yi9kcml2ZXJzL3N0YWdpbmcvZXNwODA4OS9LY29uZmlnCj4gQEAgLTAsMCArMSwxMyBAQAo+ICtj b25maWcgRVNQODA4OQo+ICsJdHJpc3RhdGUgIkVzcHJlc3NpZiBFU1A4MDg5IFNESU8gV2lGaSIK PiArCWRlcGVuZHMgb24gTUFDODAyMTEKPiArCS0tLWhlbHAtLS0KPiArCSAgRVNQODA4OSBpcyBh IGxvdy1idWRnZXQgMi40R0h6IFdpRmkgY2hpcCBieSBFc3ByZXNzaWYsIHVzZWQgaW4gbWFueQo+ ICsJICBjaGVhcCB0YWJsZXRzIHdpdGggQWxsd2lubmVyIG9yIFJvY2tjaGlwIFNvQwo+ICsKPiAr Y29uZmlnIEVTUDgwODlfREVCVUdfRlMKPiArCWJvb2wgIkVuYWJsZSBEZWJ1Z0ZTIHN1cHBvcnQg Zm9yIEVTUDgwODkiCj4gKwlkZXBlbmRzIG9uIEVTUDgwODkKPiArCWRlZmF1bHQgeQo+ICsJLS0t aGVscC0tLQo+ICsJICBEZWJ1Z0ZTIHN1cHBvcnQgZm9yIEVTUDgwODkKPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9zdGFnaW5nL2VzcDgwODkvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvZXNwODA4 OS9NYWtlZmlsZQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi44 MjdjNjZkOGI1ZDUKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9zdGFnaW5nL2VzcDgw ODkvTWFrZWZpbGUKPiBAQCAtMCwwICsxLDcgQEAKPiArTU9EVUxFX05BTUUgPSBlc3A4MDg5Cj4g Kwo+ICskKE1PRFVMRV9OQU1FKS15IDo9IGVzcF9kZWJ1Zy5vIHNkaW9fc2lmX2VzcC5vIGVzcF9p by5vIFwKPiArICAgIGVzcF9maWxlLm8gZXNwX21haW4ubyBlc3Bfc2lwLm8gZXNwX2N0cmwubyBc Cj4gKyAgICBlc3BfbWFjODAyMTEubyBlc3BfZGVidWcubyBlc3BfdXRpbHMubwo+ICsKPiArb2Jq LSQoQ09ORklHX0VTUDgwODkpIDo9IGVzcDgwODkubwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3N0 YWdpbmcvZXNwODA4OS9lc3BfY3RybC5jIGIvZHJpdmVycy9zdGFnaW5nL2VzcDgwODkvZXNwX2N0 cmwuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5lNWE5NWU3 YjMxM2YKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9zdGFnaW5nL2VzcDgwODkvZXNw X2N0cmwuYwo+IEBAIC0wLDAgKzEsNTI3IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAw OSAtIDIwMTQgRXNwcmVzc2lmIFN5c3RlbS4KPiArICogQ29weXJpZ2h0IChjKSAyMDE3IEZyZWUg RWxlY3Ryb25zCj4gKyAqICAgICAgUXVlbnRpbiBTY2h1bHogPHF1ZW50aW4uc2NodWx6QGZyZWUt ZWxlY3Ryb25zLmNvbT4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKPiArICogdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVi bGlzaGVkIGJ5IHRoZQo+ICsgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCj4gKyAqCj4gKyAq Lwo+ICsKPiArI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgo+ICsjaW5jbHVkZSA8bmV0L2NmZzgw MjExLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2Jp dG9wcy5oPgo+ICsjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KPiArCj4gKyNpbmNsdWRlICJl c3BfaW5pdF9kYXRhLmgiCj4gKyNpbmNsdWRlICJlc3BfcHViLmgiCj4gKyNpbmNsdWRlICJlc3Bf c2lwLmgiCj4gKyNpbmNsdWRlICJlc3BfY3RybC5oIgo+ICsjaW5jbHVkZSAiZXNwX3NpZi5oIgo+ ICsjaW5jbHVkZSAiZXNwX2RlYnVnLmgiCj4gKyNpbmNsdWRlICJlc3Bfd21hYy5oIgo+ICsjaW5j bHVkZSAiZXNwX3V0aWxzLmgiCj4gKyNpbmNsdWRlICJlc3Bfd2wuaCIKPiArI2luY2x1ZGUgImVz cF9maWxlLmgiCj4gKyNpbmNsdWRlICJlc3BfdmVyc2lvbi5oIgo+ICsKPiArI2RlZmluZSBEUklW RVJfVkVSIDB4YmRmNTA4N2MzZGVibGwKPiArCj4gK3N0YXRpYyB2b2lkIGVzcF90eF9iYV9zZXNz aW9uX29wKHN0cnVjdCBlc3Bfc2lwICpzaXAsIHN0cnVjdCBlc3Bfbm9kZSAqbm9kZSwKPiArCQkJ CSBlbnVtIHRyY19hbXBkdV9zdGF0ZSBzdGF0ZSwgdTggdGlkKQo+ICt7Cj4gKwlzdHJ1Y3QgZXNw X3R4X3RpZCAqdHh0aWQgPSAmbm9kZS0+dGlkW3RpZF07Cj4gKwo+ICsJaWYgKHN0YXRlICE9IFRS Q19UWF9BTVBEVV9TVE9QUEVEICYmIHN0YXRlICE9IFRSQ19UWF9BTVBEVV9PUEVSQVRJT05BTCkK PiArCQlyZXR1cm47Cj4gKwo+ICsJaWYgKHN0YXRlID09IFRSQ19UWF9BTVBEVV9TVE9QUEVEKSB7 Cj4gKwkJaWYgKHR4dGlkLT5zdGF0ZSAhPSBFU1BfVElEX1NUQVRFX09QRVJBVElPTkFMKSB7Cj4g KwkJCWRldl9lcnIoc2lwLT5lcHViLT5kZXYsCj4gKwkJCQkiJXMgdGlkICVkIFRYQU1QRFUgR09U IFNUT1AgRVZUIElOIFdST05HIFNUQVRFICVkXG4iLAo+ICsJCQkJX19mdW5jX18sIHRpZCwgdHh0 aWQtPnN0YXRlKTsKPiArCQkJcmV0dXJuOwo+ICsJCX0KPiArCj4gKwkJZGV2X2RiZyhzaXAtPmVw dWItPmRldiwJIiVzIHRpZCAlZCBUWEFNUERVIEdPVCBTVE9QIEVWVFxuIiwKPiArCQkJX19mdW5j X18sIHRpZCk7Cj4gKwo+ICsJCXNwaW5fbG9ja19iaCgmc2lwLT5lcHViLT50eF9hbXBkdV9sb2Nr KTsKPiArCQl0eHRpZC0+c3RhdGUgPSBFU1BfVElEX1NUQVRFX1dBSVRfU1RPUDsKPiArCQlzcGlu X3VubG9ja19iaCgmc2lwLT5lcHViLT50eF9hbXBkdV9sb2NrKTsKPiArCj4gKwkJaWVlZTgwMjEx X3N0b3BfdHhfYmFfc2Vzc2lvbihub2RlLT5zdGEsICh1MTYpdGlkKTsKPiArCQlyZXR1cm47Cj4g Kwl9Cj4gKwo+ICsJaWYgKHR4dGlkLT5zdGF0ZSA9PSBFU1BfVElEX1NUQVRFX1NUT1ApIHsKPiAr CQlkZXZfZGJnKHNpcC0+ZXB1Yi0+ZGV2LAkiJXMgdGlkICVkIFRYQU1QRFUgR09UIE9QRVJBVElP TkFMXG4iLAo+ICsJCQlfX2Z1bmNfXywgdGlkKTsKPiArCj4gKwkJc3Bpbl9sb2NrX2JoKCZzaXAt PmVwdWItPnR4X2FtcGR1X2xvY2spOwo+ICsJCXR4dGlkLT5zdGF0ZSA9IEVTUF9USURfU1RBVEVf VFJJR0dFUjsKPiArCQlzcGluX3VubG9ja19iaCgmc2lwLT5lcHViLT50eF9hbXBkdV9sb2NrKTsK PiArCj4gKwkJaWVlZTgwMjExX3N0YXJ0X3R4X2JhX3Nlc3Npb24obm9kZS0+c3RhLCAodTE2KXRp ZCwgMCk7Cj4gKwkJcmV0dXJuOwo+ICsJfSBlbHNlIGlmICh0eHRpZC0+c3RhdGUgPT0gRVNQX1RJ RF9TVEFURV9PUEVSQVRJT05BTCkgewo+ICsJCXNpcF9zZW5kX2FtcGR1X2FjdGlvbihzaXAtPmVw dWIsIFNJUF9BTVBEVV9UWF9PUEVSQVRJT05BTCwKPiArCQkJCSAgICAgIG5vZGUtPnN0YS0+YWRk ciwgdGlkLCBub2RlLT5pZmlkeCwgMCk7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCWRldl9l cnIoc2lwLT5lcHViLT5kZXYsCj4gKwkJIiVzIHRpZCAlZCBUWEFNUERVIEdPVCBPUEVSQVRJT05B TCBFVlQgSU4gV1JPTkcgU1RBVEUgJWRcbiIsCj4gKwkJX19mdW5jX18sIHRpZCwgdHh0aWQtPnN0 YXRlKTsKPiArfQo+ICsKPiAraW50IHNpcF9wYXJzZV9ldmVudHMoc3RydWN0IGVzcF9zaXAgKnNp cCwgdTggKmJ1ZikKPiArewo+ICsJc3RydWN0IHNpcF9oZHIgKmhkciA9IChzdHJ1Y3Qgc2lwX2hk ciAqKWJ1ZjsKPiArCXN0cnVjdCBzaXBfZXZ0X2Jvb3R1cDIgKmJvb3R1cF9ldnQ7Cj4gKwlzdHJ1 Y3Qgc2lwX2V2dF9zY2FuX3JlcG9ydCAqcmVwb3J0Owo+ICsJc3RydWN0IHNpcF9ldnRfcm9jICpy b2M7Cj4gKwlzdHJ1Y3Qgc2lwX2V2dF90cmNfYW1wZHUgKmFtcGR1Owo+ICsJc3RydWN0IHNpcF9l dnRfbm9pc2VmbG9vciAqbm9pc2VmbG9vcjsKPiArCXN0cnVjdCBlc3Bfbm9kZSAqbm9kZTsKPiAr CWNoYXIgKmVwOwo+ICsJdTggKnA7Cj4gKwl1MTYgKmxlbjsKPiArCWludCBpOwo+ICsKPiArCXN3 aXRjaCAoaGRyLT5jX2V2dGlkKSB7Cj4gKwljYXNlIFNJUF9FVlRfVEFSR0VUX09OOgo+ICsJCS8q IHVzZSByeCB3b3JrIHF1ZXVlIHRvIHNlbmQuLi4gKi8KPiArCQlpZiAoYXRvbWljX3JlYWQoJnNp cC0+c3RhdGUpID09IFNJUF9QUkVQQVJFX0JPT1QgfHwKPiArCQkgICAgYXRvbWljX3JlYWQoJnNp cC0+c3RhdGUpID09IFNJUF9CT09UKSB7Cj4gKwkJCWF0b21pY19zZXQoJnNpcC0+c3RhdGUsIFNJ UF9TRU5EX0lOSVQpOwo+ICsJCQlxdWV1ZV93b3JrKHNpcC0+ZXB1Yi0+ZXNwX3drcSwgJnNpcC0+ cnhfcHJvY2Vzc193b3JrKTsKPiArCQkJYnJlYWs7Cj4gKwkJfQo+ICsJCWRldl9lcnIoc2lwLT5l cHViLT5kZXYsCSIlcyBib290IGR1cmluZyB3cm9uZyBzdGF0ZSAlZFxuIiwKPiArCQkJX19mdW5j X18sIGF0b21pY19yZWFkKCZzaXAtPnN0YXRlKSk7Cj4gKwkJYnJlYWs7Cj4gKwo+ICsJY2FzZSBT SVBfRVZUX0JPT1RVUDoKPiArCQlib290dXBfZXZ0ID0gKHN0cnVjdCBzaXBfZXZ0X2Jvb3R1cDIg KikoYnVmICsgU0lQX0NUUkxfSERSX0xFTik7Cj4gKwo+ICsJCWtmcmVlKHNpcC0+cmF3YnVmKTsK PiArCj4gKwkJc2lwX3Bvc3RfaW5pdChzaXAsIGJvb3R1cF9ldnQpOwo+ICsJCWlmIChnbF9ib290 dXBfY3BseCkKPiArCQkJY29tcGxldGUoZ2xfYm9vdHVwX2NwbHgpOwo+ICsKPiArCQlicmVhazsK PiArCj4gKwljYXNlIFNJUF9FVlRfUkVTRVRUSU5HOgo+ICsJCXNpcC0+ZXB1Yi0+d2FpdF9yZXNl dCA9IDE7Cj4gKwkJaWYgKGdsX2Jvb3R1cF9jcGx4KQo+ICsJCQljb21wbGV0ZShnbF9ib290dXBf Y3BseCk7Cj4gKwkJYnJlYWs7Cj4gKwo+ICsJY2FzZSBTSVBfRVZUX1NDQU5fUkVTVUxUOgo+ICsJ CWlmICghYXRvbWljX3JlYWQoJnNpcC0+ZXB1Yi0+d2wub2ZmKSkgewo+ICsJCQlyZXBvcnQgPSAo c3RydWN0IHNpcF9ldnRfc2Nhbl9yZXBvcnQgKikoYnVmICsgU0lQX0NUUkxfSERSX0xFTik7Cj4g KwkJCXNpcF9zY2FuZG9uZV9wcm9jZXNzKHNpcCwgcmVwb3J0KTsKPiArCQkJYnJlYWs7Cj4gKwkJ fQo+ICsKPiArCQlkZXZfZXJyKHNpcC0+ZXB1Yi0+ZGV2LAkiJXMgc2NhbiByZXN1bHQgd2hpbGUg d2xhbiBvZmZcbiIsCj4gKwkJCV9fZnVuY19fKTsKPiArCQlicmVhazsKPiArCj4gKwljYXNlIFNJ UF9FVlRfUk9DOgo+ICsJCXJvYyA9IChzdHJ1Y3Qgc2lwX2V2dF9yb2MgKikoYnVmICsgU0lQX0NU UkxfSERSX0xFTik7Cj4gKwkJZXNwX3JvY2RvbmVfcHJvY2VzcyhzaXAtPmVwdWItPmh3LCByb2Mp Owo+ICsJCWJyZWFrOwo+ICsKPiArCWNhc2UgU0lQX0VWVF9TTlBSSU5URl9UT19IT1NUOgo+ICsJ CXAgPSBidWYgKyBzaXplb2Yoc3RydWN0IHNpcF9oZHIpICsgc2l6ZW9mKHUxNik7Cj4gKwkJbGVu ID0gKHUxNiAqKShidWYgKyBzaXplb2Yoc3RydWN0IHNpcF9oZHIpKTsKPiArCQlkZXZfZGJnKHNp cC0+ZXB1Yi0+ZGV2LCAiZXNwX2hvc3Q6JWxseFxuZXNwX3RhcmdldDogJS4qc1xuIiwKPiArCQkJ RFJJVkVSX1ZFUiwgKmxlbiwgcCk7Cj4gKwo+ICsJCWlmICghKmxlbiB8fCBzaXAtPmVwdWItPnNk aW9fc3RhdGUgIT0gRVNQX1NESU9fU1RBVEVfRklSU1RfSU5JVCkKPiArCQkJYnJlYWs7Cj4gKwo+ ICsJCWRldl9kYmcoc2lwLT5lcHViLT5kZXYsCj4gKwkJCSJTTlBSSU5URiBUTyBIT1NUOiBlc3Bf aG9zdDolbGx4XG5lc3BfdGFyZ2V0OiAlLipzXG4iLAo+ICsJCQlEUklWRVJfVkVSLCAqbGVuLCBw KTsKPiArCQlicmVhazsKPiArCj4gKwljYXNlIFNJUF9FVlRfVFJDX0FNUERVOgo+ICsJCWlmIChh dG9taWNfcmVhZCgmc2lwLT5lcHViLT53bC5vZmYpKSB7Cj4gKwkJCWRldl9lcnIoc2lwLT5lcHVi LT5kZXYsCj4gKwkJCQkiJXMgc2NhbiByZXN1bHQgd2hpbGUgd2xhbiBvZmZcbiIsIF9fZnVuY19f KTsKPiArCQkJYnJlYWs7Cj4gKwkJfQo+ICsKPiArCQlhbXBkdSA9IChzdHJ1Y3Qgc2lwX2V2dF90 cmNfYW1wZHUgKikoYnVmICsgU0lQX0NUUkxfSERSX0xFTik7Cj4gKwkJbm9kZSA9IGVzcF9nZXRf bm9kZV9ieV9hZGRyKHNpcC0+ZXB1YiwgYW1wZHUtPmFkZHIpOwo+ICsJCWlmICghbm9kZSkKPiAr CQkJYnJlYWs7Cj4gKwkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKPiArCQkJaWYgKGFtcGR1LT50 aWQgJiBCSVQoaSkpCj4gKwkJCQllc3BfdHhfYmFfc2Vzc2lvbl9vcChzaXAsIG5vZGUsIGFtcGR1 LT5zdGF0ZSwKPiArCQkJCQkJICAgICBpKTsKPiArCQlicmVhazsKPiArCj4gKwljYXNlIFNJUF9F VlRfSU5JVF9FUDoKPiArCQllcCA9IChjaGFyICopKGJ1ZiArIFNJUF9DVFJMX0hEUl9MRU4pOwo+ ICsJCWRldl9kYmcoc2lwLT5lcHViLT5kZXYsICJQaHkgSW5pdDogJXNcbiIsIGVwKTsKPiArCQli cmVhazsKPiArCj4gKwljYXNlIFNJUF9FVlRfTk9JU0VGTE9PUjoKPiArCQlub2lzZWZsb29yID0g KHN0cnVjdCBzaXBfZXZ0X25vaXNlZmxvb3IgKikoYnVmICsgU0lQX0NUUkxfSERSX0xFTik7Cj4g KwkJYXRvbWljX3NldCgmc2lwLT5ub2lzZV9mbG9vciwgbm9pc2VmbG9vci0+bm9pc2VfZmxvb3Ip Owo+ICsJCWJyZWFrOwo+ICsKPiArCWRlZmF1bHQ6Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJ cmV0dXJuIDA7Cj4gK30KPiArCj4gKy8qIEZJWE1FOiB1Z2x5IGFmICovCj4gK3ZvaWQgc2lwX3Nl bmRfY2hpcF9pbml0KHN0cnVjdCBlc3Bfc2lwICpzaXApCj4gK3sKPiArCXNpemVfdCBzaXplID0g c2l6ZW9mKGVzcF9pbml0X2RhdGEpOwo+ICsKPiArCWZpeF9pbml0X2RhdGEoZXNwX2luaXRfZGF0 YSwgc2l6ZSk7Cj4gKwlhdG9taWNfc3ViKDEsICZzaXAtPnR4X2NyZWRpdHMpOwo+ICsJc2lwX3Nl bmRfY21kKHNpcCwgU0lQX0NNRF9JTklULCBzaXplLCAodm9pZCAqKWVzcF9pbml0X2RhdGEpOwo+ ICt9Cj4gKwo+ICtpbnQgc2lwX3NlbmRfY29uZmlnKHN0cnVjdCBlc3BfcHViICplcHViLCBzdHJ1 Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYpCj4gK3sKPiArCXN0cnVjdCBza19idWZmICpza2I7Cj4g KwlzdHJ1Y3Qgc2lwX2NtZF9jb25maWcgKmNvbmZpZ2NtZDsKPiArCj4gKwlza2IgPSBzaXBfYWxs b2NfY3RybF9za2J1ZihlcHViLT5zaXAsIHNpemVvZihzdHJ1Y3Qgc2lwX2NtZF9jb25maWcpICsK PiArCQkJCSAgIHNpemVvZihzdHJ1Y3Qgc2lwX2hkciksIFNJUF9DTURfQ09ORklHKTsKPiArCWlm ICghc2tiKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWRldl9kYmcoZXB1Yi0+ZGV2LCAi JXMgY29uZmlnIGNlbnRlciBmcmVxICVkXG4iLCBfX2Z1bmNfXywKPiArCQljb25mLT5jaGFuZGVm LmNoYW4tPmNlbnRlcl9mcmVxKTsKPiArCj4gKwljb25maWdjbWQgPSAoc3RydWN0IHNpcF9jbWRf Y29uZmlnICopKHNrYi0+ZGF0YSArIHNpemVvZihzdHJ1Y3Qgc2lwX2hkcikpOwo+ICsJY29uZmln Y21kLT5jZW50ZXJfZnJlcSA9IGNvbmYtPmNoYW5kZWYuY2hhbi0+Y2VudGVyX2ZyZXE7Cj4gKwlj b25maWdjbWQtPmR1cmF0aW9uID0gMDsKPiArCj4gKwlyZXR1cm4gc2lwX2NtZF9lbnF1ZXVlKGVw dWItPnNpcCwgc2tiLCBFTlFVRVVFX1BSSU9SX1RBSUwpOwo+ICt9Cj4gKwo+ICtpbnQgc2lwX3Nl bmRfYnNzX2luZm9fdXBkYXRlKHN0cnVjdCBlc3BfcHViICplcHViLCBzdHJ1Y3QgZXNwX3ZpZiAq ZXZpZiwKPiArCQkJICAgICB1OCAqYnNzaWQsIGludCBhc3NvYykKPiArewo+ICsJc3RydWN0IHNr X2J1ZmYgKnNrYjsKPiArCXN0cnVjdCBzaXBfY21kX2Jzc19pbmZvX3VwZGF0ZSAqYnNzY21kOwo+ ICsKPiArCXNrYiA9IHNpcF9hbGxvY19jdHJsX3NrYnVmKGVwdWItPnNpcCwKPiArCQkJCSAgIHNp emVvZihzdHJ1Y3Qgc2lwX2NtZF9ic3NfaW5mb191cGRhdGUpICsKPiArCQkJCSAgIHNpemVvZihz dHJ1Y3Qgc2lwX2hkciksCj4gKwkJCQkgICBTSVBfQ01EX0JTU19JTkZPX1VQREFURSk7Cj4gKwlp ZiAoIXNrYikKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlic3NjbWQgPSAoc3RydWN0IHNp cF9jbWRfYnNzX2luZm9fdXBkYXRlICopKHNrYi0+ZGF0YSArIHNpemVvZihzdHJ1Y3Qgc2lwX2hk cikpOwo+ICsKPiArCWlmIChhc3NvYyA9PSAyKQkvL2hhY2sgZm9yIHNvZnRBUCBtb2RlCj4gKwkJ YnNzY21kLT5iZWFjb25faW50ID0gZXZpZi0+YmVhY29uX2ludGVydmFsOwo+ICsJZWxzZSBpZiAo YXNzb2MgPT0gMSkKPiArCQlzZXRfYml0KEVTUF9XTF9GTEFHX0NPTk5FQ1QsICZlcHViLT53bC5m bGFncyk7Cj4gKwllbHNlCj4gKwkJY2xlYXJfYml0KEVTUF9XTF9GTEFHX0NPTk5FQ1QsICZlcHVi LT53bC5mbGFncyk7Cj4gKwo+ICsJYnNzY21kLT5ic3NpZF9ubyA9IGV2aWYtPmluZGV4Owo+ICsJ YnNzY21kLT5pc2Fzc29jID0gYXNzb2M7Cj4gKwlic3NjbWQtPmJlYWNvbl9pbnQgPSBldmlmLT5i ZWFjb25faW50ZXJ2YWw7Cj4gKwltZW1jcHkoYnNzY21kLT5ic3NpZCwgYnNzaWQsIEVUSF9BTEVO KTsKPiArCj4gKwlyZXR1cm4gc2lwX2NtZF9lbnF1ZXVlKGVwdWItPnNpcCwgc2tiLCBFTlFVRVVF X1BSSU9SX1RBSUwpOwo+ICt9Cj4gKwo+ICtpbnQgc2lwX3NlbmRfd21tX3BhcmFtcyhzdHJ1Y3Qg ZXNwX3B1YiAqZXB1YiwgdTggYWNpLAo+ICsJCQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1 ZXVlX3BhcmFtcyAqcGFyYW1zKQo+ICt7Cj4gKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwo+ICsJc3Ry dWN0IHNpcF9jbWRfc2V0X3dtbV9wYXJhbXMgKmJzc2NtZDsKPiArCj4gKwlza2IgPSBzaXBfYWxs b2NfY3RybF9za2J1ZihlcHViLT5zaXAsCj4gKwkJCQkgICBzaXplb2Yoc3RydWN0IHNpcF9jbWRf c2V0X3dtbV9wYXJhbXMpICsKPiArCQkJCSAgIHNpemVvZihzdHJ1Y3Qgc2lwX2hkciksCj4gKwkJ CQkgICBTSVBfQ01EX1NFVF9XTU1fUEFSQU0pOwo+ICsJaWYgKCFza2IpCj4gKwkJcmV0dXJuIC1F Tk9NRU07Cj4gKwo+ICsJYnNzY21kID0gKHN0cnVjdCBzaXBfY21kX3NldF93bW1fcGFyYW1zICop KHNrYi0+ZGF0YSArIHNpemVvZihzdHJ1Y3Qgc2lwX2hkcikpOwo+ICsJYnNzY21kLT5hY2kgPSBh Y2k7Cj4gKwlic3NjbWQtPmFpZnMgPSBwYXJhbXMtPmFpZnM7Cj4gKwlic3NjbWQtPnR4b3BfdXMg PSBwYXJhbXMtPnR4b3AgKiAzMjsKPiArCWJzc2NtZC0+ZWN3X21pbiA9IDMyIC0gX19idWlsdGlu X2NseihwYXJhbXMtPmN3X21pbik7Cj4gKwlic3NjbWQtPmVjd19tYXggPSAzMiAtIF9fYnVpbHRp bl9jbHoocGFyYW1zLT5jd19tYXgpOwo+ICsKPiArCXJldHVybiBzaXBfY21kX2VucXVldWUoZXB1 Yi0+c2lwLCBza2IsIEVOUVVFVUVfUFJJT1JfVEFJTCk7Cj4gK30KPiArCj4gK2ludCBzaXBfc2Vu ZF9hbXBkdV9hY3Rpb24oc3RydWN0IGVzcF9wdWIgKmVwdWIsIHU4IGFjdGlvbl9udW0sIGNvbnN0 IHU4ICphZGRyLAo+ICsJCQkgIHUxNiB0aWQsIHUxNiBzc24sIHU4IGJ1Zl9zaXplKQo+ICt7Cj4g KwlpbnQgaW5kZXggPSAwOwo+ICsJc3RydWN0IHNrX2J1ZmYgKnNrYjsKPiArCXN0cnVjdCBzaXBf Y21kX2FtcGR1X2FjdGlvbiAqYWN0aW9uOwo+ICsKPiArCWlmIChhY3Rpb25fbnVtID09IFNJUF9B TVBEVV9SWF9TVEFSVCkKPiArCQlpbmRleCA9IGVzcF9nZXRfZW1wdHlfcnhhbXBkdShlcHViLCBh ZGRyLCB0aWQpOwo+ICsJZWxzZSBpZiAoYWN0aW9uX251bSA9PSBTSVBfQU1QRFVfUlhfU1RPUCkK PiArCQlpbmRleCA9IGVzcF9nZXRfZXhpc3RfcnhhbXBkdShlcHViLCBhZGRyLCB0aWQpOwo+ICsK PiArCWlmIChpbmRleCA8IDApCj4gKwkJcmV0dXJuIC1FQUNDRVM7Cj4gKwo+ICsJc2tiID0gc2lw X2FsbG9jX2N0cmxfc2tidWYoZXB1Yi0+c2lwLAo+ICsJCQkJICAgc2l6ZW9mKHN0cnVjdCBzaXBf Y21kX2FtcGR1X2FjdGlvbikgKwo+ICsJCQkJICAgc2l6ZW9mKHN0cnVjdCBzaXBfaGRyKSwKPiAr CQkJCSAgIFNJUF9DTURfQU1QRFVfQUNUSU9OKTsKPiArCWlmICghc2tiKQo+ICsJCXJldHVybiAt RU5PTUVNOwo+ICsKPiArCWFjdGlvbiA9IChzdHJ1Y3Qgc2lwX2NtZF9hbXBkdV9hY3Rpb24gKiko c2tiLT5kYXRhICsgc2l6ZW9mKHN0cnVjdCBzaXBfaGRyKSk7Cj4gKwlhY3Rpb24tPmFjdGlvbiA9 IGFjdGlvbl9udW07Cj4gKwkvL2ZvciBUWCwgaXQgbWVhbnMgaW50ZXJmYWNlIGluZGV4Cj4gKwlh Y3Rpb24tPmluZGV4ID0gc3NuOwo+ICsKPiArCXN3aXRjaCAoYWN0aW9uX251bSkgewo+ICsJY2Fz ZSBTSVBfQU1QRFVfUlhfU1RBUlQ6Cj4gKwkJYWN0aW9uLT5zc24gPSBzc247Cj4gKwljYXNlIFNJ UF9BTVBEVV9SWF9TVE9QOgo+ICsJCWFjdGlvbi0+aW5kZXggPSBpbmRleDsKPiArCWNhc2UgU0lQ X0FNUERVX1RYX09QRVJBVElPTkFMOgo+ICsJY2FzZSBTSVBfQU1QRFVfVFhfU1RPUDoKPiArCQlh Y3Rpb24tPndpbl9zaXplID0gYnVmX3NpemU7Cj4gKwkJYWN0aW9uLT50aWQgPSB0aWQ7Cj4gKwkJ bWVtY3B5KGFjdGlvbi0+YWRkciwgYWRkciwgRVRIX0FMRU4pOwo+ICsJCWJyZWFrOwo+ICsJfQo+ ICsKPiArCXJldHVybiBzaXBfY21kX2VucXVldWUoZXB1Yi0+c2lwLCBza2IsIEVOUVVFVUVfUFJJ T1JfVEFJTCk7Cj4gK30KPiArCj4gKyNpZmRlZiBIV19TQ0FOCj4gKy8qIHNlbmQgY21kIHRvIHRh cmdldCwgaWYgYWJvcnRlZCBpcyB0cnVlLCBpbmZvcm0gdGFyZ2V0IHN0b3Agc2NhbiwgcmVwb3J0 IHNjYW4gY29tcGxldGUgaW1lZGlhdGVseQo+ICsgKiByZXR1cm4gMTogY29tcGxldGUgb3Zlciwg MDogc3VjY2Vzcywgc3RpbGwgaGF2ZSBuZXh0IHNjYW4sIC0xOiBoYXJkd2FyZSBmYWlsdXJlCj4g KyAqLwo+ICtpbnQgc2lwX3NlbmRfc2NhbihzdHJ1Y3QgZXNwX3B1YiAqZXB1YikKPiArewo+ICsJ c3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqc2Nhbl9yZXEgPSBlcHViLT53bC5zY2FuX3Jl cTsKPiArCXN0cnVjdCBza19idWZmICpza2I7Cj4gKwlzdHJ1Y3Qgc2lwX2NtZF9zY2FuICpzY2Fu Y21kOwo+ICsJdTggKnB0cjsKPiArCWludCBpOwo+ICsJdTggYXBwZW5kX2xlbiwgc3NpZF9sZW47 Cj4gKwo+ICsJRVNTRVJUKHNjYW5fcmVxKTsKPiArCWlmICghc2Nhbl9yZXEtPm5fc3NpZHMpCj4g KwkJc3NpZF9sZW4gPSAwOwo+ICsJZWxzZSBpZiAoc2Nhbl9yZXEtPm5fc3NpZHMgPT0gMSkKPiAr CQlzc2lkX2xlbiA9IHNjYW5fcmVxLT5zc2lkcy0+c3NpZF9sZW47Cj4gKwkvKiBMaW1pdCB0byB0 d28gU1NJRHMgKi8KPiArCWVsc2UKPiArCQlzc2lkX2xlbiA9IHNjYW5fcmVxLT5zc2lkcy0+c3Np ZF9sZW4gKwo+ICsJCQkoc2Nhbl9yZXEtPnNzaWRzICsgMSktPnNzaWRfbGVuOwo+ICsKPiArCWFw cGVuZF9sZW4gPSBzc2lkX2xlbiArIHNjYW5fcmVxLT5uX2NoYW5uZWxzICsgc2Nhbl9yZXEtPmll X2xlbjsKPiArCj4gKwlza2IgPSBzaXBfYWxsb2NfY3RybF9za2J1ZihlcHViLT5zaXAsIHNpemVv ZihzdHJ1Y3Qgc2lwX2NtZF9zY2FuKSArCj4gKwkJCQkgICBzaXplb2Yoc3RydWN0IHNpcF9oZHIp ICsgYXBwZW5kX2xlbiwKPiArCQkJCSAgIFNJUF9DTURfU0NBTik7Cj4gKwo+ICsJaWYgKCFza2Ip Cj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJcHRyID0gc2tiLT5kYXRhOwo+ICsJc2NhbmNt ZCA9IChzdHJ1Y3Qgc2lwX2NtZF9zY2FuICopKHB0ciArIHNpemVvZihzdHJ1Y3Qgc2lwX2hkcikp Owo+ICsKPiArCXB0ciArPSBzaXplb2Yoc3RydWN0IHNpcF9oZHIpICsgc2l6ZW9mKHN0cnVjdCBz aXBfY21kX3NjYW4pOwo+ICsJc2NhbmNtZC0+YWJvcnRlZCA9IGZhbHNlOwo+ICsKPiArCS8qIEZJ WE1FOiBtZWggKi8KPiArCWlmIChzY2FuX3JlcS0+bl9zc2lkcyA8PSAwKSB7Cj4gKwkJc2NhbmNt ZC0+c3NpZF9sZW4gPSAwOwo+ICsJfSBlbHNlIHsKPiArCQlzY2FuY21kLT5zc2lkX2xlbiA9IHNz aWRfbGVuOwo+ICsJCWlmIChzY2FuX3JlcS0+bl9zc2lkcyA9PSAxKQo+ICsJCQltZW1jcHkocHRy LCBzY2FuX3JlcS0+c3NpZHMtPnNzaWQsIHNjYW5jbWQtPnNzaWRfbGVuKTsKPiArCQkvKiBMaW1p dCB0byB0d28gU1NJRHMgKi8KPiArCQllbHNlCj4gKwkJCW1lbWNweShwdHIsIChzY2FuX3JlcS0+ c3NpZHMgKyAxKS0+c3NpZCwKPiArCQkJICAgICAgIHNjYW5jbWQtPnNzaWRfbGVuKTsKPiArCX0K PiArCj4gKwlwdHIgKz0gc2NhbmNtZC0+c3NpZF9sZW47Cj4gKwlzY2FuY21kLT5uX2NoYW5uZWxz ID0gc2Nhbl9yZXEtPm5fY2hhbm5lbHM7Cj4gKwlmb3IgKGkgPSAwOyBpIDwgc2Nhbl9yZXEtPm5f Y2hhbm5lbHM7IGkrKykKPiArCQlwdHJbaV0gPSBzY2FuX3JlcS0+Y2hhbm5lbHNbaV0tPmh3X3Zh bHVlOwo+ICsKPiArCXB0ciArPSBzY2FuY21kLT5uX2NoYW5uZWxzOwo+ICsJaWYgKHNjYW5fcmVx LT5pZV9sZW4gJiYgc2Nhbl9yZXEtPmllKSB7Cj4gKwkJc2NhbmNtZC0+aWVfbGVuID0gc2Nhbl9y ZXEtPmllX2xlbjsKPiArCQltZW1jcHkocHRyLCBzY2FuX3JlcS0+aWUsIHNjYW5fcmVxLT5pZV9s ZW4pOwo+ICsJfSBlbHNlIHsKPiArCQlzY2FuY21kLT5pZV9sZW4gPSAwOwo+ICsJfQo+ICsJLy9h ZGQgYSBmbGFnIHRoYXQgc3VwcG9ydCB0d28gc3NpZHMsCj4gKwlpZiAoc2Nhbl9yZXEtPm5fc3Np ZHMgPiAxKQo+ICsJCXNjYW5jbWQtPnNzaWRfbGVuIHw9IDB4ODA7Cj4gKwo+ICsJcmV0dXJuIHNp cF9jbWRfZW5xdWV1ZShlcHViLT5zaXAsIHNrYiwgRU5RVUVVRV9QUklPUl9UQUlMKTsKPiArfQo+ ICsjZW5kaWYKPiArCj4gK3ZvaWQgc2lwX3NjYW5kb25lX3Byb2Nlc3Moc3RydWN0IGVzcF9zaXAg KnNpcCwKPiArCQkJICBzdHJ1Y3Qgc2lwX2V2dF9zY2FuX3JlcG9ydCAqc2Nhbl9yZXBvcnQpCj4g K3sKPiArCXN0cnVjdCBlc3BfcHViICplcHViID0gc2lwLT5lcHViOwo+ICsKPiArCWlmIChlcHVi LT53bC5zY2FuX3JlcSkgewo+ICsJCWh3X3NjYW5fZG9uZShlcHViLCBzY2FuX3JlcG9ydC0+YWJv cnRlZCk7Cj4gKwkJZXB1Yi0+d2wuc2Nhbl9yZXEgPSBOVUxMOwo+ICsJfQo+ICt9Cj4gKwo+ICtp bnQgc2lwX3NlbmRfc2V0a2V5KHN0cnVjdCBlc3BfcHViICplcHViLCB1OCBic3NpZF9ubywgdTgg KnBlZXJfYWRkciwKPiArCQkgICAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5LCB1OCBp c3ZhbGlkKQo+ICt7Cj4gKwlzdHJ1Y3Qgc2lwX2NtZF9zZXRrZXkgKnNldGtleWNtZDsKPiArCXN0 cnVjdCBza19idWZmICpza2I7Cj4gKwo+ICsJc2tiID0gc2lwX2FsbG9jX2N0cmxfc2tidWYoZXB1 Yi0+c2lwLCBzaXplb2Yoc3RydWN0IHNpcF9jbWRfc2V0a2V5KSArCj4gKwkJCQkgICBzaXplb2Yo c3RydWN0IHNpcF9oZHIpLCBTSVBfQ01EX1NFVEtFWSk7Cj4gKwo+ICsJaWYgKCFza2IpCj4gKwkJ cmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJc2V0a2V5Y21kID0gKHN0cnVjdCBzaXBfY21kX3NldGtl eSAqKShza2ItPmRhdGEgKyBzaXplb2Yoc3RydWN0IHNpcF9oZHIpKTsKPiArCj4gKwlpZiAocGVl cl9hZGRyKQo+ICsJCW1lbWNweShzZXRrZXljbWQtPmFkZHIsIHBlZXJfYWRkciwgRVRIX0FMRU4p Owo+ICsJZWxzZQo+ICsJCW1lbXNldChzZXRrZXljbWQtPmFkZHIsIDAsIEVUSF9BTEVOKTsKPiAr Cj4gKwlzZXRrZXljbWQtPmJzc2lkX25vID0gYnNzaWRfbm87Cj4gKwlzZXRrZXljbWQtPmh3X2tl eV9pZHggPSBrZXktPmh3X2tleV9pZHg7Cj4gKwo+ICsJaWYgKGlzdmFsaWQpIHsKPiArCQlzZXRr ZXljbWQtPmFsZyA9IGVzcF9jaXBoZXIyYWxnKGtleS0+Y2lwaGVyKTsKPiArCQlzZXRrZXljbWQt PmtleWlkeCA9IGtleS0+a2V5aWR4Owo+ICsJCXNldGtleWNtZC0+a2V5bGVuID0ga2V5LT5rZXls ZW47Cj4gKwkJaWYgKGtleS0+Y2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVApIHsKPiAr CQkJbWVtY3B5KHNldGtleWNtZC0+a2V5LCBrZXktPmtleSwgMTYpOwo+ICsJCQltZW1jcHkoc2V0 a2V5Y21kLT5rZXkgKyAxNiwga2V5LT5rZXkgKyAyNCwgOCk7Cj4gKwkJCW1lbWNweShzZXRrZXlj bWQtPmtleSArIDI0LCBrZXktPmtleSArIDE2LCA4KTsKPiArCQl9IGVsc2Ugewo+ICsJCQltZW1j cHkoc2V0a2V5Y21kLT5rZXksIGtleS0+a2V5LCBrZXktPmtleWxlbik7Cj4gKwkJfQo+ICsKPiAr CQlzZXRrZXljbWQtPmZsYWdzID0gMTsKPiArCX0gZWxzZSB7Cj4gKwkJc2V0a2V5Y21kLT5mbGFn cyA9IDA7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHNpcF9jbWRfZW5xdWV1ZShlcHViLT5zaXAsIHNr YiwgRU5RVUVVRV9QUklPUl9UQUlMKTsKPiArfQo+ICsKPiArLy9yZW1haW5fb25fY2hhbm5lbAo+ ICtpbnQgc2lwX3NlbmRfcm9jKHN0cnVjdCBlc3BfcHViICplcHViLCB1MTYgY2VudGVyX2ZyZXEs IHUxNiBkdXJhdGlvbikKPiArewo+ICsJc3RydWN0IHNrX2J1ZmYgKnNrYjsKPiArCXN0cnVjdCBz aXBfY21kX2NvbmZpZyAqY29uZmlnY21kOwo+ICsKPiArCXNrYiA9IHNpcF9hbGxvY19jdHJsX3Nr YnVmKGVwdWItPnNpcCwgc2l6ZW9mKHN0cnVjdCBzaXBfY21kX2NvbmZpZykgKwo+ICsJCQkJICAg c2l6ZW9mKHN0cnVjdCBzaXBfaGRyKSwgU0lQX0NNRF9DT05GSUcpOwo+ICsJaWYgKCFza2IpCj4g KwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJY29uZmlnY21kID0gKHN0cnVjdCBzaXBfY21kX2Nv bmZpZyAqKShza2ItPmRhdGEgKyBzaXplb2Yoc3RydWN0IHNpcF9oZHIpKTsKPiArCWNvbmZpZ2Nt ZC0+Y2VudGVyX2ZyZXEgPSBjZW50ZXJfZnJlcTsKPiArCWNvbmZpZ2NtZC0+ZHVyYXRpb24gPSBk dXJhdGlvbjsKPiArCj4gKwlyZXR1cm4gc2lwX2NtZF9lbnF1ZXVlKGVwdWItPnNpcCwgc2tiLCBF TlFVRVVFX1BSSU9SX1RBSUwpOwo+ICt9Cj4gKwo+ICtpbnQgc2lwX3NlbmRfc2V0X3N0YShzdHJ1 Y3QgZXNwX3B1YiAqZXB1YiwgdTggaWZpZHgsIHU4IHNldCwKPiArCQkgICAgIHN0cnVjdCBpZWVl ODAyMTFfc3RhICpzdGEsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCj4gKwkJICAgICB1OCBp bmRleCkKPiArewo+ICsJc3RydWN0IHNrX2J1ZmYgKnNrYjsKPiArCXN0cnVjdCBzaXBfY21kX3Nl dHN0YSAqc2V0c3RhY21kOwo+ICsKPiArCXNrYiA9IHNpcF9hbGxvY19jdHJsX3NrYnVmKGVwdWIt PnNpcCwgc2l6ZW9mKHN0cnVjdCBzaXBfY21kX3NldHN0YSkgKwo+ICsJCQkJICAgc2l6ZW9mKHN0 cnVjdCBzaXBfaGRyKSwgU0lQX0NNRF9TRVRTVEEpOwo+ICsJaWYgKCFza2IpCj4gKwkJcmV0dXJu IC1FTk9NRU07Cj4gKwo+ICsJc2V0c3RhY21kID0gKHN0cnVjdCBzaXBfY21kX3NldHN0YSAqKShz a2ItPmRhdGEgKyBzaXplb2Yoc3RydWN0IHNpcF9oZHIpKTsKPiArCXNldHN0YWNtZC0+aWZpZHgg PSBpZmlkeDsKPiArCXNldHN0YWNtZC0+aW5kZXggPSBpbmRleDsKPiArCXNldHN0YWNtZC0+c2V0 ID0gc2V0Owo+ICsKPiArCWlmICghc3RhLT5haWQpCj4gKwkJc2V0c3RhY21kLT5haWQgPSB2aWYt PmJzc19jb25mLmFpZDsKPiArCWVsc2UKPiArCQlzZXRzdGFjbWQtPmFpZCA9IHN0YS0+YWlkOwo+ ICsKPiArCW1lbWNweShzZXRzdGFjbWQtPm1hYywgc3RhLT5hZGRyLCBFVEhfQUxFTik7Cj4gKwo+ ICsJaWYgKCFzZXQpCj4gKwkJZ290byBzZW5kOwo+ICsKPiArCWlmIChzdGEtPmh0X2NhcC5odF9z dXBwb3J0ZWQpIHsKPiArCQlpZiAoc3RhLT5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9T R0lfMjApCj4gKwkJCXNldHN0YWNtZC0+cGh5bW9kZSA9IEVTUF9JRUVFODAyMTFfVF9IVDIwX1M7 Cj4gKwkJZWxzZQo+ICsJCQlzZXRzdGFjbWQtPnBoeW1vZGUgPSBFU1BfSUVFRTgwMjExX1RfSFQy MF9MOwo+ICsJCXNldHN0YWNtZC0+YW1wZHVfZmFjdG9yID0gc3RhLT5odF9jYXAuYW1wZHVfZmFj dG9yOwo+ICsJCXNldHN0YWNtZC0+YW1wZHVfZGVuc2l0eSA9IHN0YS0+aHRfY2FwLmFtcGR1X2Rl bnNpdHk7Cj4gKwkJZ290byBzZW5kOwo+ICsJfQo+ICsKPiArCWlmIChzdGEtPnN1cHBfcmF0ZXNb Tkw4MDIxMV9CQU5EXzJHSFpdICYgfkNPTkZfSFdfQklUX1JBVEVfMTFCX01BU0spCj4gKwkJc2V0 c3RhY21kLT5waHltb2RlID0gRVNQX0lFRUU4MDIxMV9UX09GRE07Cj4gKwllbHNlCj4gKwkJc2V0 c3RhY21kLT5waHltb2RlID0gRVNQX0lFRUU4MDIxMV9UX0NDSzsKPiArCj4gK3NlbmQ6Cj4gKwly ZXR1cm4gc2lwX2NtZF9lbnF1ZXVlKGVwdWItPnNpcCwgc2tiLCBFTlFVRVVFX1BSSU9SX1RBSUwp Owo+ICt9Cj4gKwo+ICtpbnQgc2lwX3NlbmRfcmVjYWxjX2NyZWRpdChzdHJ1Y3QgZXNwX3B1YiAq ZXB1YikKPiArewo+ICsJc3RydWN0IHNrX2J1ZmYgKnNrYjsKPiArCj4gKwlza2IgPSBzaXBfYWxs b2NfY3RybF9za2J1ZihlcHViLT5zaXAsIHNpemVvZihzdHJ1Y3Qgc2lwX2hkciksCj4gKwkJCQkg ICBTSVBfQ01EX1JFQ0FMQ19DUkVESVQpOwo+ICsJaWYgKCFza2IpCj4gKwkJcmV0dXJuIC1FTk9N RU07Cj4gKwo+ICsJcmV0dXJuIHNpcF9jbWRfZW5xdWV1ZShlcHViLT5zaXAsIHNrYiwgRU5RVUVV RV9QUklPUl9IRUFEKTsKPiArfQo+ICsKPiAraW50IHNpcF9jbWQoc3RydWN0IGVzcF9wdWIgKmVw dWIsIGVudW0gc2lwX2NtZF9pZCBjbWRfaWQsIHU4ICpjbWRfYnVmLAo+ICsJICAgIHU4IGNtZF9s ZW4pCj4gK3sKPiArCXN0cnVjdCBza19idWZmICpza2I7Cj4gKwo+ICsJc2tiID0gc2lwX2FsbG9j X2N0cmxfc2tidWYoZXB1Yi0+c2lwLCBjbWRfbGVuICsgc2l6ZW9mKHN0cnVjdCBzaXBfaGRyKSwK PiArCQkJCSAgIGNtZF9pZCk7Cj4gKwlpZiAoIXNrYikKPiArCQlyZXR1cm4gLUVOT01FTTsKPiAr Cj4gKwltZW1jcHkoc2tiLT5kYXRhICsgc2l6ZW9mKHN0cnVjdCBzaXBfaGRyKSwgY21kX2J1Ziwg Y21kX2xlbik7Cj4gKwo+ICsJcmV0dXJuIHNpcF9jbWRfZW5xdWV1ZShlcHViLT5zaXAsIHNrYiwg RU5RVUVVRV9QUklPUl9UQUlMKTsKPiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcv ZXNwODA4OS9lc3BfY3RybC5oIGIvZHJpdmVycy9zdGFnaW5nL2VzcDgwODkvZXNwX2N0cmwuaAo+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5iOTE0M2JiMTM1YjMK PiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9zdGFnaW5nL2VzcDgwODkvZXNwX2N0cmwu aAo+IEBAIC0wLDAgKzEsNDggQEAKPiArLyoKPiArICogQ29weXJpZ2h0IChjKSAyMDA5IC0gMjAx NCBFc3ByZXNzaWYgU3lzdGVtLgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTcgRnJlZSBFbGVjdHJv bnMKPiArICogICAgICBRdWVudGluIFNjaHVseiA8cXVlbnRpbi5zY2h1bHpAZnJlZS1lbGVjdHJv bnMuY29tPgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgo+ICsgKiB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQg YnkgdGhlCj4gKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPiArICoKPiArICovCj4gKyNp Zm5kZWYgX0VTUF9DVFJMX0hfCj4gKyNkZWZpbmUgX0VTUF9DVFJMX0hfCj4gKwo+ICtleHRlcm4g c3RydWN0IGNvbXBsZXRpb24gKmdsX2Jvb3R1cF9jcGx4Owo+ICsKPiAraW50IHNpcF9zZW5kX2Nv bmZpZyhzdHJ1Y3QgZXNwX3B1YiAqZXB1Yiwgc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mKTsK PiArCj4gK2ludCBzaXBfc2VuZF9zZXRrZXkoc3RydWN0IGVzcF9wdWIgKmVwdWIsIHU4IGJzc2lk X25vLCB1OCAqcGVlcl9hZGRyLAo+ICsJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICpr ZXksIHU4IGlzdmFsaWQpOwo+ICsKPiAraW50IHNpcF9zZW5kX3NjYW4oc3RydWN0IGVzcF9wdWIg KmVwdWIpOwo+ICsKPiArdm9pZCBzaXBfc2NhbmRvbmVfcHJvY2VzcyhzdHJ1Y3QgZXNwX3NpcCAq c2lwLAo+ICsJCQkgIHN0cnVjdCBzaXBfZXZ0X3NjYW5fcmVwb3J0ICpzY2FuX3JlcG9ydCk7Cj4g Kwo+ICtpbnQgc2lwX3NlbmRfYnNzX2luZm9fdXBkYXRlKHN0cnVjdCBlc3BfcHViICplcHViLCBz dHJ1Y3QgZXNwX3ZpZiAqZXZpZiwKPiArCQkJICAgICB1OCAqYnNzaWQsIGludCBhc3NvYyk7Cj4g Kwo+ICtpbnQgc2lwX3NlbmRfd21tX3BhcmFtcyhzdHJ1Y3QgZXNwX3B1YiAqZXB1YiwgdTggYWNp LAo+ICsJCQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyAqcGFyYW1zKTsK PiArCj4gK2ludCBzaXBfc2VuZF9hbXBkdV9hY3Rpb24oc3RydWN0IGVzcF9wdWIgKmVwdWIsIHU4 IGFjdGlvbl9udW0sIGNvbnN0IHU4ICphZGRyLAo+ICsJCQkgIHUxNiB0aWQsIHUxNiBzc24sIHU4 IGJ1Zl9zaXplKTsKPiArCj4gK2ludCBzaXBfc2VuZF9yb2Moc3RydWN0IGVzcF9wdWIgKmVwdWIs IHUxNiBjZW50ZXJfZnJlcSwgdTE2IGR1cmF0aW9uKTsKPiArCj4gK2ludCBzaXBfc2VuZF9zZXRf c3RhKHN0cnVjdCBlc3BfcHViICplcHViLCB1OCBpZmlkeCwgdTggc2V0LAo+ICsJCSAgICAgc3Ry dWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKPiArCQkg ICAgIHU4IGluZGV4KTsKPiArCj4gK2ludCBzaXBfcGFyc2VfZXZlbnRzKHN0cnVjdCBlc3Bfc2lw ICpzaXAsIHU4ICpidWYpOwo+ICsKPiAraW50IHNpcF9zZW5kX3JlY2FsY19jcmVkaXQoc3RydWN0 IGVzcF9wdWIgKmVwdWIpOwo+ICsKPiAraW50IHNpcF9jbWQoc3RydWN0IGVzcF9wdWIgKmVwdWIs IGVudW0gc2lwX2NtZF9pZCBjbWRfaWQsIHU4ICpjbWRfYnVmLAo+ICsJICAgIHU4IGNtZF9sZW4p Owo+ICsKPiArI2VuZGlmCQkJCS8qIF9FU1BfQ1RSTF9IXyAqLwo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL3N0YWdpbmcvZXNwODA4OS9lc3BfZGVidWcuYyBiL2RyaXZlcnMvc3RhZ2luZy9lc3A4MDg5 L2VzcF9kZWJ1Zy5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAu LjI2NDcyYjQzMzc2OAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL3N0YWdpbmcvZXNw ODA4OS9lc3BfZGVidWcuYwo+IEBAIC0wLDAgKzEsMjQ3IEBACj4gKy8qCj4gKyAqIENvcHlyaWdo dCAoYykgMjAxMSAtIDIwMTQgRXNwcmVzc2lmIFN5c3RlbS4KPiArICogQ29weXJpZ2h0IChjKSAy MDE3IEZyZWUgRWxlY3Ryb25zCj4gKyAqICAgICAgUXVlbnRpbiBTY2h1bHogPHF1ZW50aW4uc2No dWx6QGZyZWUtZWxlY3Ryb25zLmNvbT4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIK PiArICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9u IDIgYXMgcHVibGlzaGVkIGJ5IHRoZQo+ICsgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCj4g KyAqCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Cj4gKyNpbmNsdWRlIDxs aW51eC9rZXJuZWwuaD4KPiArCj4gKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KPiArI2luY2x1 ZGUgInNpcDJfY29tbW9uLmgiCj4gKwo+ICsjaW5jbHVkZSAiZXNwX2RlYnVnLmgiCj4gKwo+ICsj aWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpICYmIGRlZmluZWQoQ09ORklHX0VTUDgwODlfREVC VUdfRlMpCj4gKwo+ICtzdGF0aWMgc3RydWN0IGRlbnRyeSAqZXNwX2RlYnVnZnNfcm9vdDsKPiAr Cj4gK3N0YXRpYyBzc2l6ZV90IGVzcF9kZWJ1Z2ZzX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNo YXIgX191c2VyICpidWZmZXIsCj4gKwkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKPiAr ewo+ICsJaWYgKCpwcG9zID49IDMyKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCWlmICgqcHBvcyAr IGNvdW50ID4gMzIpCj4gKwkJY291bnQgPSAzMiAtICpwcG9zOwo+ICsKPiArCWlmIChjb3B5X3Rv X3VzZXIoYnVmZmVyLCBmaWxwLT5wcml2YXRlX2RhdGEgKyAqcHBvcywgY291bnQpKQo+ICsJCXJl dHVybiAtRUZBVUxUOwo+ICsKPiArCSpwcG9zICs9IGNvdW50Owo+ICsKPiArCXJldHVybiBjb3Vu dDsKPiArfQo+ICsKPiArc3RhdGljIHNzaXplX3QgZXNwX2RlYnVnZnNfd3JpdGUoc3RydWN0IGZp bGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCj4gKwkJCQkgc2l6ZV90IGNvdW50 LCBsb2ZmX3QgKnBwb3MpCj4gK3sKPiArCWlmICgqcHBvcyA+PSAzMikKPiArCQlyZXR1cm4gMDsK PiArCj4gKwlpZiAoKnBwb3MgKyBjb3VudCA+IDMyKQo+ICsJCWNvdW50ID0gMzIgLSAqcHBvczsK PiArCj4gKwlpZiAoY29weV9mcm9tX3VzZXIoZmlscC0+cHJpdmF0ZV9kYXRhICsgKnBwb3MsIGJ1 ZmZlciwgY291bnQpKQo+ICsJCXJldHVybiAtRUZBVUxUOwo+ICsKPiArCSpwcG9zICs9IGNvdW50 Owo+ICsKPiArCXJldHVybiBjb3VudDsKPiArfQo+ICsKPiArY29uc3Qgc3RydWN0IGZpbGVfb3Bl cmF0aW9ucyBlc3BfZGVidWdmc19mb3BzID0gewo+ICsJLm93bmVyID0gVEhJU19NT0RVTEUsCj4g Kwkub3BlbiA9IHNpbXBsZV9vcGVuLAo+ICsJLnJlYWQgPSBlc3BfZGVidWdmc19yZWFkLAo+ICsJ LndyaXRlID0gZXNwX2RlYnVnZnNfd3JpdGUsCj4gK307Cj4gKwo+ICtzdHJ1Y3QgZGVudHJ5ICpl c3BfZHVtcF92YXIoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGRlbnRyeSAqcGFyZW50LAo+ICsJ CQkgICAgdm9pZCAqdmFsdWUsIGVudW0gZXNwX3R5cGUgdHlwZSkKPiArewo+ICsJc3RydWN0IGRl bnRyeSAqcmMgPSBOVUxMOwo+ICsJdW1vZGVfdCBtb2RlID0gMDY0NDsKPiArCj4gKwlpZiAoIWVz cF9kZWJ1Z2ZzX3Jvb3QpCj4gKwkJcmV0dXJuIE5VTEw7Cj4gKwo+ICsJaWYgKCFwYXJlbnQpCj4g KwkJcGFyZW50ID0gZXNwX2RlYnVnZnNfcm9vdDsKPiArCj4gKwlzd2l0Y2ggKHR5cGUpIHsKPiAr CWNhc2UgRVNQX1U4Ogo+ICsJCXJjID0gZGVidWdmc19jcmVhdGVfdTgobmFtZSwgbW9kZSwgcGFy ZW50LCAodTggKil2YWx1ZSk7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIEVTUF9VMTY6Cj4gKwkJcmMg PSBkZWJ1Z2ZzX2NyZWF0ZV91MTYobmFtZSwgbW9kZSwgcGFyZW50LCAodTE2ICopdmFsdWUpOwo+ ICsJCWJyZWFrOwo+ICsJY2FzZSBFU1BfVTMyOgo+ICsJCXJjID0gZGVidWdmc19jcmVhdGVfdTMy KG5hbWUsIG1vZGUsIHBhcmVudCwgKHUzMiAqKXZhbHVlKTsKPiArCQlicmVhazsKPiArCWNhc2Ug RVNQX1U2NDoKPiArCQlyYyA9IGRlYnVnZnNfY3JlYXRlX3U2NChuYW1lLCBtb2RlLCBwYXJlbnQs ICh1NjQgKil2YWx1ZSk7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIEVTUF9CT09MOgo+ICsJCXJjID0g ZGVidWdmc19jcmVhdGVfYm9vbChuYW1lLCBtb2RlLCBwYXJlbnQsIChib29sICopdmFsdWUpOwo+ ICsJCWJyZWFrOwo+ICsJZGVmYXVsdDoJCS8vMzIKPiArCQlyYyA9IGRlYnVnZnNfY3JlYXRlX3Uz MihuYW1lLCBtb2RlLCBwYXJlbnQsICh1MzIgKil2YWx1ZSk7Cj4gKwl9Cj4gKwo+ICsJaWYgKCFy YykKPiArCQlnb3RvIF9mYWlsOwo+ICsKPiArCXJldHVybiByYzsKPiArCj4gK19mYWlsOgo+ICsJ ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGVzcF9kZWJ1Z2ZzX3Jvb3QpOwo+ICsJZXNwX2RlYnVn ZnNfcm9vdCA9IE5VTEw7Cj4gKwlwcmludGsoIiVzIGZhaWxlZCwgZGVidWdmcyByb290IHJlbW92 ZWQ7IHZhciBuYW1lOiAlc1xuIiwgX19mdW5jX18sCj4gKwkgICAgICAgbmFtZSk7Cj4gKwlyZXR1 cm4gTlVMTDsKPiArfQo+ICsKPiArc3RydWN0IGRlbnRyeSAqZXNwX2R1bXBfYXJyYXkoY29uc3Qg Y2hhciAqbmFtZSwgc3RydWN0IGRlbnRyeSAqcGFyZW50LAo+ICsJCQkgICAgICBzdHJ1Y3QgZGVi dWdmc19ibG9iX3dyYXBwZXIgKmJsb2IpCj4gK3sKPiArCXN0cnVjdCBkZW50cnkgKnJjOwo+ICsJ dW1vZGVfdCBtb2RlID0gMDY0NDsKPiArCj4gKwlpZiAoIWVzcF9kZWJ1Z2ZzX3Jvb3QpCj4gKwkJ cmV0dXJuIE5VTEw7Cj4gKwo+ICsJaWYgKCFwYXJlbnQpCj4gKwkJcGFyZW50ID0gZXNwX2RlYnVn ZnNfcm9vdDsKPiArCj4gKwlyYyA9IGRlYnVnZnNfY3JlYXRlX2Jsb2IobmFtZSwgbW9kZSwgcGFy ZW50LCBibG9iKTsKPiArCWlmICghcmMpCj4gKwkJZ290byBfZmFpbDsKPiArCj4gKwlyZXR1cm4g cmM7Cj4gKwo+ICtfZmFpbDoKPiArCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShlc3BfZGVidWdm c19yb290KTsKPiArCWVzcF9kZWJ1Z2ZzX3Jvb3QgPSBOVUxMOwo+ICsJcHJpbnRrKCIlcyBmYWls ZWQsIGRlYnVnZnMgcm9vdCByZW1vdmVkOyB2YXIgbmFtZTogJXNcbiIsIF9fZnVuY19fLAo+ICsJ ICAgICAgIG5hbWUpOwo+ICsJcmV0dXJuIE5VTEw7Cj4gK30KPiArCj4gK3N0cnVjdCBkZW50cnkg KmVzcF9kdW1wKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBkZW50cnkgKnBhcmVudCwKPiArCQkJ dm9pZCAqZGF0YSwgaW50IHNpemUpCj4gK3sKPiArCXN0cnVjdCBkZW50cnkgKnJjOwo+ICsJdW1v ZGVfdCBtb2RlID0gMDY0NDsKPiArCj4gKwlpZiAoIWVzcF9kZWJ1Z2ZzX3Jvb3QpCj4gKwkJcmV0 dXJuIE5VTEw7Cj4gKwo+ICsJaWYgKCFwYXJlbnQpCj4gKwkJcGFyZW50ID0gZXNwX2RlYnVnZnNf cm9vdDsKPiArCj4gKwlyYyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUobmFtZSwgbW9kZSwgcGFyZW50 LCBkYXRhLCAmZXNwX2RlYnVnZnNfZm9wcyk7Cj4gKwlpZiAoIXJjKQo+ICsJCWdvdG8gX2ZhaWw7 Cj4gKwo+ICsJcmV0dXJuIHJjOwo+ICsKPiArX2ZhaWw6Cj4gKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1 cnNpdmUoZXNwX2RlYnVnZnNfcm9vdCk7Cj4gKwllc3BfZGVidWdmc19yb290ID0gTlVMTDsKPiAr CXByaW50aygiJXMgZmFpbGVkLCBkZWJ1Z2ZzIHJvb3QgcmVtb3ZlZDsgdmFyIG5hbWU6ICVzXG4i LCBfX2Z1bmNfXywKPiArCSAgICAgICBuYW1lKTsKPiArCXJldHVybiBOVUxMOwo+ICt9Cj4gKwo+ ICtzdHJ1Y3QgZGVudHJ5ICplc3BfZGVidWdmc19hZGRfc3ViX2Rpcihjb25zdCBjaGFyICpuYW1l KQo+ICt7Cj4gKwlzdHJ1Y3QgZGVudHJ5ICpzdWJfZGlyOwo+ICsKPiArCXN1Yl9kaXIgPSBkZWJ1 Z2ZzX2NyZWF0ZV9kaXIobmFtZSwgZXNwX2RlYnVnZnNfcm9vdCk7Cj4gKwlpZiAoIXN1Yl9kaXIp Cj4gKwkJZ290byBfZmFpbDsKPiArCj4gKwlyZXR1cm4gc3ViX2RpcjsKPiArCj4gK19mYWlsOgo+ ICsJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGVzcF9kZWJ1Z2ZzX3Jvb3QpOwo+ICsJZXNwX2Rl YnVnZnNfcm9vdCA9IE5VTEw7Cj4gKwlwcmludGsoIiVzIGZhaWxlZCwgZGVidWdmcyByb290IHJl bW92ZWQ7IGRpciBuYW1lOiAlc1xuIiwgX19mdW5jX18sCj4gKwkgICAgICAgbmFtZSk7Cj4gKwly ZXR1cm4gTlVMTDsKPiArfQo+ICsKPiAraW50IGVzcF9kZWJ1Z2ZzX2luaXQodm9pZCkKPiArewo+ ICsJZXNwX2RlYnVnZnNfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcigiZXNwX2RlYnVnIiwgTlVM TCk7Cj4gKwo+ICsJaWYgKElTX0VSUl9PUl9OVUxMKGVzcF9kZWJ1Z2ZzX3Jvb3QpKQo+ICsJCXJl dHVybiAtRU5PRU5UOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICt2b2lkIGVzcF9kZWJ1 Z2ZzX2V4aXQodm9pZCkKPiArewo+ICsJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGVzcF9kZWJ1 Z2ZzX3Jvb3QpOwo+ICt9Cj4gKwo+ICsjZWxzZQo+ICsKPiAraW5saW5lIHN0cnVjdCBkZW50cnkg KmVzcF9kdW1wX3Zhcihjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsCj4g KwkJCQkgICB2b2lkICp2YWx1ZSwgZW51bSBlc3BfdHlwZSB0eXBlKQo+ICt7Cj4gKwlyZXR1cm4g TlVMTDsKPiArfQo+ICsKPiAraW5saW5lIHN0cnVjdCBkZW50cnkgKmVzcF9kdW1wX2FycmF5KGNv bnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBkZW50cnkgKnBhcmVudCwKPiArCQkJCSAgICAgc3RydWN0 IGRlYnVnZnNfYmxvYl93cmFwcGVyICpibG9iKQo+ICt7Cj4gKwlyZXR1cm4gTlVMTDsKPiArfQo+ ICsKPiAraW5saW5lIHN0cnVjdCBkZW50cnkgKmVzcF9kdW1wKGNvbnN0IGNoYXIgKm5hbWUsIHN0 cnVjdCBkZW50cnkgKnBhcmVudCwKPiArCQkJICAgICAgIHZvaWQgKmRhdGEsIGludCBzaXplKQo+ ICt7Cj4gKwlyZXR1cm4gTlVMTDsKPiArfQo+ICsKPiArc3RydWN0IGRlbnRyeSAqZXNwX2RlYnVn ZnNfYWRkX3N1Yl9kaXIoY29uc3QgY2hhciAqbmFtZSkKPiArewo+ICsJcmV0dXJuIE5VTEw7Cj4g K30KPiArCj4gK2lubGluZSBpbnQgZXNwX2RlYnVnZnNfaW5pdCh2b2lkKQo+ICt7Cj4gKwlyZXR1 cm4gLUVQRVJNOwo+ICt9Cj4gKwo+ICtpbmxpbmUgdm9pZCBlc3BfZGVidWdmc19leGl0KHZvaWQp Cj4gK3sKPiArfQo+ICsKPiArI2VuZGlmCj4gKwo+ICsvKiBGSVhNRTogV2hhdCdzIHRoZSBhY3R1 YWwgdXNlY2FzZT8gKi8KPiArdm9pZCBzaG93X2J1Zih1OCAqYnVmLCB1MzIgbGVuKQo+ICt7Cj4g KwlpbnQgaSA9IDAsIGo7Cj4gKwo+ICsJcHJpbnRrKEtFUk5fSU5GTyAiXG4rKysrKysrKysrKysr Kysrc2hvdyByYnVmKysrKysrKysrKysrKysrXG4iKTsKPiArCWZvciAoaSA9IDA7IGkgPCAobGVu IC8gMTYpOyBpKyspIHsKPiArCQlqID0gaSAqIDE2Owo+ICsJCXByaW50ayhLRVJOX0lORk8KPiAr CQkgICAgICAgIjB4JTAyeCwgMHglMDJ4LCAweCUwMngsIDB4JTAyeCwgMHglMDJ4LCAweCUwMngs IDB4JTAyeCwgMHglMDJ4LCAweCUwMngsIDB4JTAyeCwgMHglMDJ4LCAweCUwMngsIDB4JTAyeCwg MHglMDJ4LCAweCUwMngsIDB4JTAyeFxuIiwKPiArCQkgICAgICAgYnVmW2pdLCBidWZbaiArIDFd LCBidWZbaiArIDJdLCBidWZbaiArIDNdLAo+ICsJCSAgICAgICBidWZbaiArIDRdLCBidWZbaiAr IDVdLCBidWZbaiArIDZdLCBidWZbaiArIDddLAo+ICsJCSAgICAgICBidWZbaiArIDhdLCBidWZb aiArIDldLCBidWZbaiArIDEwXSwgYnVmW2ogKyAxMV0sCj4gKwkJICAgICAgIGJ1ZltqICsgMTJd LCBidWZbaiArIDEzXSwgYnVmW2ogKyAxNF0sIGJ1ZltqICsgMTVdKTsKPiArCX0KPiArCXByaW50 ayhLRVJOX0lORk8gIlxuKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrK1xu Iik7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VzcDgwODkvZXNwX2RlYnVn LmggYi9kcml2ZXJzL3N0YWdpbmcvZXNwODA4OS9lc3BfZGVidWcuaAo+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5lYjliZGRmZTk4NDIKPiAtLS0gL2Rldi9udWxs Cj4gKysrIGIvZHJpdmVycy9zdGFnaW5nL2VzcDgwODkvZXNwX2RlYnVnLmgKPiBAQCAtMCwwICsx LDY5IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAxMSAtIDIwMTQgRXNwcmVzc2lmIFN5 c3RlbS4KPiArICogQ29weXJpZ2h0IChjKSAyMDE3IEZyZWUgRWxlY3Ryb25zCj4gKyAqICAgICAg UXVlbnRpbiBTY2h1bHogPHF1ZW50aW4uc2NodWx6QGZyZWUtZWxlY3Ryb25zLmNvbT4KPiArICoK PiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKPiArICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZQo+ICsgKiBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCj4gKyAqCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBfREVC VUdfSF8KPiArCj4gKyNpZmRlZiBBU1NFUlRfUEFOSUMKPiArI2RlZmluZSBFU1NFUlQodikgQlVH X09OKCEodikpCj4gKyNlbHNlCj4gKyNkZWZpbmUgRVNTRVJUKHYpIGlmKCEodikpIHByaW50aygi RVNTRVJUOiVzICVkXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pCj4gKyNlbmRpZgo+ICsKPiArI2lu Y2x1ZGUgPGxpbnV4L3NsYWIuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KPiArI2lu Y2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KPiArCj4gK2VudW0gZXNwX3R5cGUgewo+ICsJRVNQX0JP T0wsCj4gKwlFU1BfVTgsCj4gKwlFU1BfVTE2LAo+ICsJRVNQX1UzMiwKPiArCUVTUF9VNjQKPiAr fTsKPiArCj4gK3N0cnVjdCBkZW50cnkgKmVzcF9kdW1wX3Zhcihjb25zdCBjaGFyICpuYW1lLCBz dHJ1Y3QgZGVudHJ5ICpwYXJlbnQsCj4gKwkJCSAgICB2b2lkICp2YWx1ZSwgZW51bSBlc3BfdHlw ZSB0eXBlKTsKPiArCj4gK3N0cnVjdCBkZW50cnkgKmVzcF9kdW1wX2FycmF5KGNvbnN0IGNoYXIg Km5hbWUsIHN0cnVjdCBkZW50cnkgKnBhcmVudCwKPiArCQkJICAgICAgc3RydWN0IGRlYnVnZnNf YmxvYl93cmFwcGVyICpibG9iKTsKPiArCj4gK3N0cnVjdCBkZW50cnkgKmVzcF9kdW1wKGNvbnN0 IGNoYXIgKm5hbWUsIHN0cnVjdCBkZW50cnkgKnBhcmVudCwgdm9pZCAqZGF0YSwKPiArCQkJaW50 IHNpemUpOwo+ICsKPiArc3RydWN0IGRlbnRyeSAqZXNwX2RlYnVnZnNfYWRkX3N1Yl9kaXIoY29u c3QgY2hhciAqbmFtZSk7Cj4gKwo+ICtpbnQgZXNwX2RlYnVnZnNfaW5pdCh2b2lkKTsKPiArCj4g K3ZvaWQgZXNwX2RlYnVnZnNfZXhpdCh2b2lkKTsKPiArCj4gK2VudW0gewo+ICsJRVNQX0RCR19F UlJPUiA9IEJJVCgwKSwKPiArCUVTUF9EQkdfVFJBQ0UgPSBCSVQoMSksCj4gKwlFU1BfREJHX0xP RyA9IEJJVCgyKSwKPiArCUVTUF9EQkcgPSBCSVQoMyksCj4gKwlFU1BfU0hPVyA9IEJJVCg0KSwK PiArCUVTUF9EQkdfVFhBTVBEVSA9IEJJVCg1KSwKPiArCUVTUF9EQkdfT1AgPSBCSVQoNiksCj4g KwlFU1BfREJHX1BTID0gQklUKDcpLAo+ICsJRVNQX0FURSA9IEJJVCg4KSwKPiArCUVTUF9EQkdf QUxMID0gR0VOTUFTSygzMSwgMCkKPiArfTsKPiArCj4gK2V4dGVybiB1bnNpZ25lZCBpbnQgZXNw X21zZ19sZXZlbDsKPiArCj4gKyNkZWZpbmUgZXNwX2RiZyhtYXNrLCBmbXQsIGFyZ3MuLi4pIGRv IHsgICAgICAgICAgICAgICAgICBcCj4gKwlpZiAoZXNwX21zZ19sZXZlbCAmIG1hc2spICAgICAg ICAgICAgICAgICAgICAgICAgIFwKPiArCXByaW50ayhmbXQsICMjYXJncyk7ICAgICAgICAgICAg ICAgICAgICAgICAgICBcCj4gK30gd2hpbGUgKDApCj4gKwo+ICt2b2lkIHNob3dfYnVmKHU4ICpi dWYsIHUzMiBsZW4pOwo+ICsKPiArI2VuZGlmCQkJCS8qIF9ERUJVR19IXyAqLwo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL3N0YWdpbmcvZXNwODA4OS9lc3BfZmlsZS5jIGIvZHJpdmVycy9zdGFnaW5n L2VzcDgwODkvZXNwX2ZpbGUuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAw MDAwMDAwLi43YzdlZjBkODM2OTMKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9zdGFn aW5nL2VzcDgwODkvZXNwX2ZpbGUuYwo+IEBAIC0wLDAgKzEsMjIxIEBACj4gKy8qCj4gKyAqIENv cHlyaWdodCAoYykgMjAxMCAtIDIwMTQgRXNwcmVzc2lmIFN5c3RlbS4KPiArICogQ29weXJpZ2h0 IChjKSAyMDE3IEZyZWUgRWxlY3Ryb25zCj4gKyAqICAgICAgUXVlbnRpbiBTY2h1bHogPHF1ZW50 aW4uc2NodWx6QGZyZWUtZWxlY3Ryb25zLmNvbT4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQg dW5kZXIKPiArICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2 ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZQo+ICsgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24uCj4gKyAqCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Cj4gKyNpbmNsdWRl IDxsaW51eC92bWFsbG9jLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KPiArI2luY2x1 ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgo+ ICsjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9haW8uaD4K PiArI2luY2x1ZGUgPGxpbnV4L3Byb3BlcnR5Lmg+Cj4gKwo+ICsjaW5jbHVkZSAiZXNwX2ZpbGUu aCIKPiArI2luY2x1ZGUgImVzcF9kZWJ1Zy5oIgo+ICsjaW5jbHVkZSAiZXNwX3NpZi5oIgo+ICsK PiArLyogVE9ETyB1c2UgcHJvcGVyIG1vZHVsZSBwYXJhbSBmb3IgZWFjaCB2YWx1ZSBpbnN0ZWFk IG9mIGEgYmlnIG9uZSAqLwo+ICtzdGF0aWMgY2hhciAqbW9kcGFyYW1faW5pdF9kYXRhX2NvbmY7 Cj4gK21vZHVsZV9wYXJhbV9uYW1lZChjb25maWcsIG1vZHBhcmFtX2luaXRfZGF0YV9jb25mLCBj aGFycCwgMDQ0NCk7Cj4gK01PRFVMRV9QQVJNX0RFU0MoY29uZmlnLCAiRmlybXdhcmUgaW5pdCBj b25maWcgc3RyaW5nIChmb3JtYXQ6IGtleT12YWx1ZTspIik7Cj4gKwo+ICtzdHJ1Y3QgZXNwX2lu aXRfdGFibGVfZWxlbSBlc3BfaW5pdF90YWJsZVtNQVhfQVRUUl9OVU1dID0gewo+ICsJLyogQ3J5 c3RhbCB0eXBlOgo+ICsJICogMDogNDBNSHogKGRlZmF1bHQpCj4gKwkgKiAxOiAyNk1IeiAoRVNQ ODI2NiBFU1AtMTJGKQo+ICsJICovCj4gKwl7ImNyeXN0YWxfMjZNX2VuIiwgNDgsIDB9LAo+ICsJ LyogT3V0cHV0IGNyeXN0YWwgY2xvY2sgdG8gcGluOgo+ICsJICogMDogTm9uZQo+ICsJICogMTog R1BJTzEKPiArCSAqIDI6IFVSWEQwCj4gKwkgKi8KPiArCXsidGVzdF94dGFsIiwgNDksIDB9LAo+ ICsJLyogSG9zdCBTRElPIG1vZGU6Cj4gKwkgKiAwOiBBdXRvIGJ5IHBpbiBzdHJhcHBpbmcKPiAr CSAqIDE6IFNESU8gZGF0YSBvdXRwdXQgb24gbmVnYXRpdmUgZWRnZXMgKFNESU8gdjEuMSkKPiAr CSAqIDI6IFNESU8gZGF0YSBvdXRwdXQgb24gcG9zaXRpdmUgZWRnZXMgKFNESU8gdjIuMCkKPiAr CSAqLwo+ICsJeyJzZGlvX2NvbmZpZ3VyZSIsIDUwLCAyfSwKPiArCS8qIFdpRmkvQmx1ZXRvb3Ro IGNvLWV4aXN0ZW5jZSB3aXRoIEJLMzUxNUEgQlQgY2hpcAo+ICsJICogMDogTm9uZQo+ICsJICog MTogR1BJTzAtPldMQU5fQUNUSVZFLCBNVE1TLT5CVF9BQ1RJVkUsIE1UREktPkJUX1BSSU9SSVRZ LAo+ICsJICogICAgVTBUWEQtPkFOVF9TRUxfQlQsIFUwUlhELT5BTlRfU0VMX1dJRkkKPiArCSAq Lwo+ICsJeyJidF9jb25maWd1cmUiLCA1MSwgMH0sCj4gKwkvKiBBbnRlbm5hIHNlbGVjdGlvbjoK PiArCSAqIDA6IEFudGVubmEgaXMgZm9yIFdpRmkKPiArCSAqIDE6IEFudGVubmEgaXMgZm9yIEJs dWV0b290aAo+ICsJICovCj4gKwl7ImJ0X3Byb3RvY29sIiwgNTIsIDB9LAo+ICsJLyogRHVhbCBh bnRlbm5hIGNvbmZpZ3VyYXRpb24gbW9kZToKPiArCSAqIDA6IE5vbmUKPiArCSAqIDE6IFUwUlhE ICsgWFBEX0RDREMKPiArCSAqIDI6IFUwUlhEICsgR1BJTzAKPiArCSAqIDM6IFUwUlhEICsgVTBU WEQKPiArCSAqLwo+ICsJeyJkdWFsX2FudF9jb25maWd1cmUiLCA1MywgMH0sCj4gKwkvKiBGaXJt d2FyZSBkZWJ1Z2dpbmcgb3V0cHV0IHBpbjoKPiArCSAqIDA6IE5vbmUKPiArCSAqIDE6IFVBUlQg VFggb24gR1BJTzIKPiArCSAqIDI6IFVBUlQgVFggb24gVTBUWEQKPiArCSAqLwo+ICsJeyJ0ZXN0 X3VhcnRfY29uZmlndXJlIiwgNTQsIDJ9LAo+ICsJLyogV2hldGhlciB0byBzaGFyZSBjcnlzdGFs IGNsb2NrIHdpdGggQlQgKGluIHNsZWVwIG1vZGUpOgo+ICsJICogMDogbm8KPiArCSAqIDE6IGFs d2F5cyBvbgo+ICsJICogMjogYXV0b21hdGljYWxseSBvbiBhY2NvcmRpbmcgdG8gWFBEX0RDREMK PiArCSAqLwo+ICsJeyJzaGFyZV94dGFsIiwgNTUsIDB9LAo+ICsJLyogQWxsb3cgY2hpcCB0byBi ZSB3b2tlbiB1cCBkdXJpbmcgc2xlZXAgb24gcGluOgo+ICsJICogMDogTm9uZQo+ICsJICogMTog WFBEX0RDREMKPiArCSAqIDI6IEdQSU8wCj4gKwkgKiAzOiBCb3RoIFhQRF9EQ0RDIGFuZCBHUElP MAo+ICsJICovCj4gKwl7ImdwaW9fd2FrZSIsIDU2LCAwfSwKPiArCXsibm9fYXV0b19zbGVlcCIs IDU3LCAwfSwKPiArCXsic3BlZWRfc3VzcGVuZCIsIDU4LCAwfSwKPiArCXsiYXR0cjExIiwgLTEs IC0xfSwKPiArCXsiYXR0cjEyIiwgLTEsIC0xfSwKPiArCXsiYXR0cjEzIiwgLTEsIC0xfSwKPiAr CXsiYXR0cjE0IiwgLTEsIC0xfSwKPiArCXsiYXR0cjE1IiwgLTEsIC0xfSwKPiArCS8vYXR0ciB0 aGF0IGlzIG5vdCBzZW5kIHRvIHRhcmdldAo+ICsJLyogQWxsb3cgY2hpcCB0byBiZSByZXNldCBi eSBHUElPIHBpbjoKPiArCSAqIDA6IG5vCj4gKwkgKiAxOiB5ZXMKPiArCSAqLwo+ICsJeyJleHRf cnN0IiwgLTEsIDB9LAo+ICsJeyJ3YWtldXBfZ3BpbyIsIC0xLCAxMn0sCj4gKwl7ImF0ZV90ZXN0 IiwgLTEsIDB9LAo+ICsJeyJhdHRyMTkiLCAtMSwgLTF9LAo+ICsJeyJhdHRyMjAiLCAtMSwgLTF9 LAo+ICsJeyJhdHRyMjEiLCAtMSwgLTF9LAo+ICsJeyJhdHRyMjIiLCAtMSwgLTF9LAo+ICsJeyJh dHRyMjMiLCAtMSwgLTF9LAo+ICt9Owo+ICsKPiArLyogdXBkYXRlIGluaXQgY29uZmlnIHRhYmxl ICovCj4gK3N0YXRpYyBpbnQgc2V0X2luaXRfY29uZmlnX2F0dHIoY29uc3QgY2hhciAqYXR0ciwg aW50IGF0dHJfbGVuLCBzaG9ydCB2YWx1ZSkKPiArewo+ICsJaW50IGk7Cj4gKwo+ICsJZm9yIChp ID0gMDsgaSA8IE1BWF9BVFRSX05VTTsgaSsrKQo+ICsJCWlmICghbWVtY21wKGVzcF9pbml0X3Rh YmxlW2ldLmF0dHIsIGF0dHIsIGF0dHJfbGVuKSkgewo+ICsJCQlpZiAodmFsdWUgPCAwIHx8IHZh bHVlID4gMjU1KSB7Cj4gKwkJCQlwcmludGsoIiVzOiBhdHRyaWJ1dGUgdmFsdWUgZm9yICVzIGlz IG91dCBvZiByYW5nZSIsCj4gKwkJCQkgICAgICAgX19mdW5jX18sIGVzcF9pbml0X3RhYmxlW2ld LmF0dHIpOwo+ICsJCQkJcmV0dXJuIC0xOwo+ICsJCQl9Cj4gKwo+ICsJCQllc3BfaW5pdF90YWJs ZVtpXS52YWx1ZSA9IHZhbHVlOwo+ICsJCQlyZXR1cm4gMDsKPiArCQl9Cj4gKwo+ICsJcmV0dXJu IC0xOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHVwZGF0ZV9pbml0X2NvbmZpZ19hdHRyKGNvbnN0 IGNoYXIgKmF0dHIsIGludCBhdHRyX2xlbiwKPiArCQkJCSAgIGNvbnN0IGNoYXIgKnZhbCwgaW50 IHZhbF9sZW4pCj4gK3sKPiArCWNoYXIgZGlnaXRzWzRdOwo+ICsJc2hvcnQgdmFsdWU7Cj4gKwlp bnQgaTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGRpZ2l0cykgLSAxICYmIGkgPCB2 YWxfbGVuOyBpKyspCj4gKwkJZGlnaXRzW2ldID0gdmFsW2ldOwoKSSBkb24ndCB0aGluayB3ZSBy ZWFsbHkgbmVlZCB0byBtZW1jcHkoKSB2YWwgdG8gZGlnaXRzW10uCgo+ICsKPiArCWRpZ2l0c1tp XSA9IDA7Cj4gKwo+ICsJaWYgKGtzdHJ0b3UxNihkaWdpdHMsIDEwLCAmdmFsdWUpIDwgMCkgewo+ ICsJCXByaW50aygiJXM6IGludmFsaWQgYXR0cmlidXRlIHZhbHVlOiAlcyIsIF9fZnVuY19fLCBk aWdpdHMpOwo+ICsJCXJldHVybiAtMTsKCnByb3BvZ2F0ZSB0aGUgZXJyb3IgY29kZS4KCj4gKwl9 Cj4gKwo+ICsJcmV0dXJuIHNldF9pbml0X2NvbmZpZ19hdHRyKGF0dHIsIGF0dHJfbGVuLCB2YWx1 ZSk7Cj4gK30KPiArCj4gKy8qIGV4cG9ydCBjb25maWcgdGFibGUgc2V0dGluZ3MgdG8gU0RJTyBk cml2ZXIgKi8KPiArc3RhdGljIHZvaWQgcmVjb3JkX2luaXRfY29uZmlnKHZvaWQpCj4gK3sKPiAr CWludCBpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBNQVhfQVRUUl9OVU07IGkrKykgewo+ICsJ CWlmIChlc3BfaW5pdF90YWJsZVtpXS52YWx1ZSA8IDApCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiAr CQlpZiAoIXN0cmNtcChlc3BfaW5pdF90YWJsZVtpXS5hdHRyLCAic2hhcmVfeHRhbCIpKQo+ICsJ CQlzaWZfcmVjb3JkX2J0X2NvbmZpZyhlc3BfaW5pdF90YWJsZVtpXS52YWx1ZSk7Cj4gKwkJZWxz ZSBpZiAoIXN0cmNtcChlc3BfaW5pdF90YWJsZVtpXS5hdHRyLCAiZXh0X3JzdCIpKQo+ICsJCQlz aWZfcmVjb3JkX3JzdF9jb25maWcoZXNwX2luaXRfdGFibGVbaV0udmFsdWUpOwo+ICsJCWVsc2Ug aWYgKCFzdHJjbXAoZXNwX2luaXRfdGFibGVbaV0uYXR0ciwgIndha2V1cF9ncGlvIikpCj4gKwkJ CXNpZl9yZWNvcmRfd2FrZXVwX2dwaW9fY29uZmlnKGVzcF9pbml0X3RhYmxlW2ldLnZhbHVlKTsK PiArCQllbHNlIGlmICghc3RyY21wKGVzcF9pbml0X3RhYmxlW2ldLmF0dHIsICJhdGVfdGVzdCIp KQo+ICsJCQlzaWZfcmVjb3JkX2F0ZV9jb25maWcoZXNwX2luaXRfdGFibGVbaV0udmFsdWUpOwo+ ICsJfQo+ICt9Cj4gKwo+ICtpbnQgcmVxdWVzdF9pbml0X2NvbmYoc3RydWN0IGRldmljZSAqZGV2 KQo+ICt7Cj4gKwljaGFyICphdHRyLCAqc3RyLCAqcDsKPiArCWludCBhdHRyX2xlbiwgc3RyX2xl bjsKPiArCWludCByZXQgPSAwOwo+ICsJdTMyIHZhbDsKPiArCj4gKwkvKiBDaGVjayBmb3IgYW55 IHBhcmFtZXRlcnMgcGFzc2VkIHRocm91Z2ggZGV2aWNldHJlZSAob3IgYWNwaSkgKi8KPiArCWlm ICghZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTMyKGRldiwgImVzcCxjcnlzdGFsLTI2TS1lbiIsICZ2 YWwpKQo+ICsJCXNldF9pbml0X2NvbmZpZ19hdHRyKCJjcnlzdGFsXzI2TV9lbiIsIHN0cmxlbigi Y3J5c3RhbF8yNk1fZW4iKSwKPiArCQkJCSAgICAgdmFsKTsKPiArCj4gKwkvKiBwYXJzZSBvcHRp b25hbCBwYXJhbWV0ZXIgaW4gdGhlIGZvcm0gb2Yga2V5MT12YWx1ZSxrZXkyPXZhbHVlLC4uICov Cj4gKwlhdHRyID0gTlVMTDsKPiArCWF0dHJfbGVuID0gMDsKPiArCXN0cl9sZW4gPSAwOwo+ICsJ Zm9yIChwID0gc3RyID0gbW9kcGFyYW1faW5pdF9kYXRhX2NvbmY7IHAgJiYgKnA7IHArKykgewo+ ICsJCWlmICgqcCA9PSAnPScpIHsKPiArCQkJYXR0ciA9IHN0cjsKPiArCQkJYXR0cl9sZW4gPSBz dHJfbGVuOwo+ICsKPiArCQkJc3RyID0gcCArIDE7Cj4gKwkJCXN0cl9sZW4gPSAwOwo+ICsJCX0g ZWxzZSBpZiAoKnAgPT0gJywnIHx8ICpwID09ICc7Jykgewo+ICsJCQlpZiAoYXR0cl9sZW4pCj4g KwkJCQlyZXQgfD0gdXBkYXRlX2luaXRfY29uZmlnX2F0dHIoYXR0ciwgYXR0cl9sZW4sCj4gKwkJ CQkJCQkgICAgICAgc3RyLCBzdHJfbGVuKTsKPiArCj4gKwkJCXN0ciA9IHAgKyAxOwo+ICsJCQlh dHRyX2xlbiA9IDA7Cj4gKwkJCXN0cl9sZW4gPSAwOwo+ICsJCX0gZWxzZSB7Cj4gKwkJCXN0cl9s ZW4rKzsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJaWYgKGF0dHJfbGVuICYmIHN0ciAhPSBhdHRyKQo+ ICsJCXJldCB8PSB1cGRhdGVfaW5pdF9jb25maWdfYXR0cihhdHRyLCBhdHRyX2xlbiwgc3RyLCBz dHJfbGVuKTsKPiArCj4gKwlyZWNvcmRfaW5pdF9jb25maWcoKTsKPiArCj4gKwlyZXR1cm4gcmV0 Owo+ICt9Cj4gKwo+ICt2b2lkIGZpeF9pbml0X2RhdGEodTggKmluaXRfZGF0YV9idWYsIGludCBi dWZfc2l6ZSkKPiArewo+ICsJaW50IGk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IE1BWF9GSVhf QVRUUl9OVU07IGkrKykgewo+ICsJCWlmIChlc3BfaW5pdF90YWJsZVtpXS5vZmZzZXQgPiAtMSAm Jgo+ICsJCSAgICBlc3BfaW5pdF90YWJsZVtpXS5vZmZzZXQgPCBidWZfc2l6ZSAmJgo+ICsJCSAg ICBlc3BfaW5pdF90YWJsZVtpXS52YWx1ZSA+IC0xKQo+ICsJCQkqKHU4ICopKGluaXRfZGF0YV9i dWYgKyBlc3BfaW5pdF90YWJsZVtpXS5vZmZzZXQpID0gZXNwX2luaXRfdGFibGVbaV0udmFsdWU7 Cj4gKwl9Cj4gK30KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VzcDgwODkvZXNwX2Zp bGUuaCBiL2RyaXZlcnMvc3RhZ2luZy9lc3A4MDg5L2VzcF9maWxlLmgKPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uYmE5OTQ2ZDY0YzMyCj4gLS0tIC9kZXYvbnVs bAo+ICsrKyBiL2RyaXZlcnMvc3RhZ2luZy9lc3A4MDg5L2VzcF9maWxlLmgKPiBAQCAtMCwwICsx LDMwIEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAxMCAtIDIwMTQgRXNwcmVzc2lmIFN5 c3RlbS4KPiArICogQ29weXJpZ2h0IChjKSAyMDE3IEZyZWUgRWxlY3Ryb25zCj4gKyAqICAgICAg UXVlbnRpbiBTY2h1bHogPHF1ZW50aW4uc2NodWx6QGZyZWUtZWxlY3Ryb25zLmNvbT4KPiArICoK PiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKPiArICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZQo+ICsgKiBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCj4gKyAqCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBfRVNQ X0ZJTEVfSF8KPiArI2RlZmluZSBfRVNQX0ZJTEVfSF8KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9m aXJtd2FyZS5oPgo+ICsKPiArI2RlZmluZSBDT05GX0FUVFJfTEVOCQkyNAo+ICsjZGVmaW5lIE1B WF9BVFRSX05VTQkJMjQKPiArI2RlZmluZSBNQVhfRklYX0FUVFJfTlVNCTE2Cj4gKwo+ICtzdHJ1 Y3QgZXNwX2luaXRfdGFibGVfZWxlbSB7Cj4gKwljaGFyIGF0dHJbQ09ORl9BVFRSX0xFTl07Cj4g KwlpbnQgb2Zmc2V0Owo+ICsJc2hvcnQgdmFsdWU7Cj4gK307Cj4gKwo+ICtpbnQgcmVxdWVzdF9p bml0X2NvbmYoc3RydWN0IGRldmljZSAqZGV2KTsKPiArdm9pZCBmaXhfaW5pdF9kYXRhKHU4ICpp bml0X2RhdGFfYnVmLCBpbnQgYnVmX3NpemUpOwo+ICsKPiArI2VuZGlmCQkJCS8qIF9FU1BfRklM RV9IXyAqLwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXNwODA4OS9lc3BfaW5pdF9k YXRhLmggYi9kcml2ZXJzL3N0YWdpbmcvZXNwODA4OS9lc3BfaW5pdF9kYXRhLmgKPiBuZXcgZmls ZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uMjQ5NGMwMmExMGJlCj4gLS0tIC9k ZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvc3RhZ2luZy9lc3A4MDg5L2VzcF9pbml0X2RhdGEuaAo+ IEBAIC0wLDAgKzEsMTcgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IChjKSAyMDA5IC0gMjAxNCBF c3ByZXNzaWYgU3lzdGVtLgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTcgRnJlZSBFbGVjdHJvbnMK PiArICogICAgICBRdWVudGluIFNjaHVseiA8cXVlbnRpbi5zY2h1bHpAZnJlZS1lbGVjdHJvbnMu Y29tPgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgo+ICsgKiB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkg dGhlCj4gKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPiArICoKPiArICovCj4gKwo+ICtz dGF0aWMgY2hhciBlc3BfaW5pdF9kYXRhW10gPSB7IDB4NSwgMHgwLCA0LCAyLCA1LCA1LCA1LCAy LCA1LCAwLCA0LCA1LCA1LCA0LCA1LCA1LCA0LCAtMiwgLTMsIC0xLAo+ICsJLTE2LCAtMTYsIC0x NiwgLTMyLCAtMzIsIC0zMiwgMjA0LCAxLCAweGZmLCAweGZmLCAwLCAwLCAwLCAwLCA4MiwgNzgs IDc0LCA2OCwgNjQsIDU2LCAwLAo+ICsJMCwgMSwgMSwgMiwgMywgNCwgNSwgMCwgMCwgMCwgMCwg MCwgMCwgMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQwLCAxMCwgMHgwLCAweDAsCj4g KwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAo+ICsJMCwgMCwgMCwgMCwgMCwgMCwg MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg MCwgMCwgMCwgMCwKPiArCTAgfTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VzcDgw ODkvZXNwX2lvLmMgYi9kcml2ZXJzL3N0YWdpbmcvZXNwODA4OS9lc3BfaW8uYwo+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi43NTZiZDYyNjBiMjQKPiAtLS0gL2Rl di9udWxsCj4gKysrIGIvZHJpdmVycy9zdGFnaW5nL2VzcDgwODkvZXNwX2lvLmMKPiBAQCAtMCww ICsxLDI5NCBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMDkgLSAyMDE0IEVzcHJlc3Np ZiBTeXN0ZW0uCj4gKyAqIENvcHlyaWdodCAoYykgMjAxNyBGcmVlIEVsZWN0cm9ucwo+ICsgKiAg ICAgIFF1ZW50aW4gU2NodWx6IDxxdWVudGluLnNjaHVsekBmcmVlLWVsZWN0cm9ucy5jb20+Cj4g KyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCj4gKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUKPiAr ICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+ICsgKgo+ICsgKi8KPiArCj4gKyNpbmNsdWRl IDxsaW51eC9tbWMvc2Rpb19mdW5jLmg+Cj4gKyNpbmNsdWRlICJlc3Bfc2lmLmgiCj4gKyNpbmNs dWRlICJzbGNfaG9zdF9yZWdpc3Rlci5oIgo+ICsjaW5jbHVkZSAiZXNwX2RlYnVnLmgiCj4gKwo+ ICtpbnQgZXNwX2NvbW1vbl9yZWFkKHN0cnVjdCBlc3BfcHViICplcHViLCB1OCAqYnVmLCB1MzIg bGVuLCBpbnQgc3luYywKPiArCQkgICAgYm9vbCBub3JvdW5kKQo+ICt7Cj4gKwlpZiAoc3luYykK PiArCQlyZXR1cm4gc2lmX2xsZGVzY19yZWFkX3N5bmMoZXB1YiwgYnVmLCBsZW4pOwo+ICsKPiAr CXJldHVybiBzaWZfbGxkZXNjX3JlYWRfcmF3KGVwdWIsIGJ1ZiwgbGVuLCBub3JvdW5kKTsKPiAr fQo+ICsKPiAraW50IGVzcF9jb21tb25fd3JpdGUoc3RydWN0IGVzcF9wdWIgKmVwdWIsIHU4ICpi dWYsIHUzMiBsZW4sIGludCBzeW5jKQo+ICt7Cj4gKwlpZiAoc3luYykKPiArCQlyZXR1cm4gc2lm X2xsZGVzY193cml0ZV9zeW5jKGVwdWIsIGJ1ZiwgbGVuKTsKPiArCj4gKwlyZXR1cm4gc2lmX2xs ZGVzY193cml0ZV9yYXcoZXB1YiwgYnVmLCBsZW4pOwo+ICt9Cj4gKwo+ICtpbnQgZXNwX2NvbW1v bl9yZWFkX3dpdGhfYWRkcihzdHJ1Y3QgZXNwX3B1YiAqZXB1YiwgdTMyIGFkZHIsIHU4ICpidWYs IHUzMiBsZW4sCj4gKwkJCSAgICAgIGludCBzeW5jKQo+ICt7Cj4gKwlpZiAoc3luYykKPiArCQly ZXR1cm4gc2lmX2lvX3N5bmMoZXB1YiwgYWRkciwgYnVmLCBsZW4sIFNJRl9GUk9NX0RFVklDRSB8 Cj4gKwkJCQkgICBTSUZfU1lOQyB8IFNJRl9CWVRFX0JBU0lTIHwgU0lGX0lOQ19BRERSKTsKPiAr Cj4gKwlyZXR1cm4gc2lmX2lvX3JhdyhlcHViLCBhZGRyLCBidWYsIGxlbiwgU0lGX0ZST01fREVW SUNFIHwKPiArCQkJICBTSUZfQllURV9CQVNJUyB8IFNJRl9JTkNfQUREUik7Cj4gK30KPiArCj4g K2ludCBlc3BfY29tbW9uX3dyaXRlX3dpdGhfYWRkcihzdHJ1Y3QgZXNwX3B1YiAqZXB1YiwgdTMy IGFkZHIsIHU4ICpidWYsCj4gKwkJCSAgICAgICB1MzIgbGVuLCBpbnQgc3luYykKPiArewo+ICsJ aWYgKHN5bmMpCj4gKwkJcmV0dXJuIHNpZl9pb19zeW5jKGVwdWIsIGFkZHIsIGJ1ZiwgbGVuLCBT SUZfVE9fREVWSUNFIHwKPiArCQkJCSAgIFNJRl9TWU5DIHwgU0lGX0JZVEVfQkFTSVMgfCBTSUZf SU5DX0FERFIpOwo+ICsKPiArCXJldHVybiBzaWZfaW9fcmF3KGVwdWIsIGFkZHIsIGJ1ZiwgbGVu LCBTSUZfVE9fREVWSUNFIHwgU0lGX0JZVEVfQkFTSVMgfAo+ICsJCQkgIFNJRl9JTkNfQUREUik7 Cj4gK30KPiArCj4gK2ludCBlc3BfY29tbW9uX3JlYWRieXRlX3dpdGhfYWRkcihzdHJ1Y3QgZXNw X3B1YiAqZXB1YiwgdTMyIGFkZHIsIHU4ICpidWYsCj4gKwkJCQkgIGludCBzeW5jKQo+ICt7Cj4g KwlpbnQgcmVzOwo+ICsKPiArCWlmIChzeW5jKQo+ICsJCXNpZl9sb2NrX2J1cyhlcHViKTsKPiAr Cj4gKwkqYnVmID0gc2Rpb19pb19yZWFkYihlcHViLCBhZGRyLCAmcmVzKTsKPiArCj4gKwlpZiAo c3luYykKPiArCQlzaWZfdW5sb2NrX2J1cyhlcHViKTsKPiArCj4gKwlyZXR1cm4gcmVzOwo+ICt9 Cj4gKwo+ICtpbnQgZXNwX2NvbW1vbl93cml0ZWJ5dGVfd2l0aF9hZGRyKHN0cnVjdCBlc3BfcHVi ICplcHViLCB1MzIgYWRkciwgdTggYnVmLAo+ICsJCQkJICAgaW50IHN5bmMpCj4gK3sKPiArCWlu dCByZXM7Cj4gKwo+ICsJaWYgKHN5bmMpCj4gKwkJc2lmX2xvY2tfYnVzKGVwdWIpOwo+ICsKPiAr CXNkaW9faW9fd3JpdGViKGVwdWIsIGJ1ZiwgYWRkciwgJnJlcyk7Cj4gKwo+ICsJaWYgKHN5bmMp Cj4gKwkJc2lmX3VubG9ja19idXMoZXB1Yik7Cj4gKwo+ICsJcmV0dXJuIHJlczsKPiArfQo+ICsK PiArZW51bSBfU0RJT19JTlRSX01PREUgewo+ICsJU0RJT19JTlRSX0lCID0gMCwKPiArCVNESU9f SU5UUl9PT0JfVE9HR0xFLAo+ICsJU0RJT19JTlRSX09PQl9ISUdIX0xFVkVMLAo+ICsJU0RJT19J TlRSX09PQl9MT1dfTEVWRUwsCj4gK307Cj4gKwo+ICsjZGVmaW5lIEdFTl9HUElPX1NFTChfZ3Bp b19udW0sIF9zZWxfZnVuYywgX2ludHJfbW9kZSwgX29mZnNldCkgKCgoX29mZnNldCkgPDwgOSkg fCAoKF9pbnRyX21vZGUpIDw8IDcpIHwgKChfc2VsX2Z1bmMpIDw8IDQpIHwgKF9ncGlvX251bSkp Cj4gKy8vYml0WzM6MF0gPSBncGlvIG51bSwgMgo+ICsvL2JpdFs2OjRdID0gZ3BpbyBzZWwgZnVu YywgMAo+ICsvL2JpdFs4OjddID0gZ3BpbyBpbnRyIG1vZGUsIFNESU9fSU5UUl9PT0JfVE9HR0xF Cj4gKy8vYml0WzE1OjldID0gcmVnaXN0ZXIgb2Zmc2V0LCAweDM4Cj4gKwo+ICt1MTYgZ3Bpb19z ZWxfc2V0c1sxN10gPSB7Cj4gKwlHRU5fR1BJT19TRUwoMCwgMCwgU0RJT19JTlRSX09PQl9UT0dH TEUsIDB4MzQpLAkvL0dQSU8wCj4gKwlHRU5fR1BJT19TRUwoMSwgMywgU0RJT19JTlRSX09PQl9U T0dHTEUsIDB4MTgpLAkvL1UwVFhECj4gKwlHRU5fR1BJT19TRUwoMiwgMCwgU0RJT19JTlRSX09P Ql9UT0dHTEUsIDB4MzgpLAkvL0dQSU8yCj4gKwlHRU5fR1BJT19TRUwoMywgMywgU0RJT19JTlRS X09PQl9UT0dHTEUsIDB4MTQpLAkvL1UwUlhECj4gKwlHRU5fR1BJT19TRUwoNCwgMCwgU0RJT19J TlRSX09PQl9UT0dHTEUsIDB4M0MpLAkvL0dQSU80Cj4gKwlHRU5fR1BJT19TRUwoNSwgMCwgU0RJ T19JTlRSX09PQl9UT0dHTEUsIDB4NDApLAkvL0dQSU81Cj4gKwlHRU5fR1BJT19TRUwoNiwgMywg U0RJT19JTlRSX09PQl9UT0dHTEUsIDB4MUMpLAkvL1NEX0NMSwo+ICsJR0VOX0dQSU9fU0VMKDcs IDMsIFNESU9fSU5UUl9PT0JfVE9HR0xFLCAweDIwKSwJLy9TRF9EQVRBMAo+ICsJR0VOX0dQSU9f U0VMKDgsIDMsIFNESU9fSU5UUl9PT0JfVE9HR0xFLCAweDI0KSwJLy9TRF9EQVRBMQo+ICsJR0VO X0dQSU9fU0VMKDksIDMsIFNESU9fSU5UUl9PT0JfVE9HR0xFLCAweDI4KSwJLy9TRF9EQVRBMgo+ ICsJR0VOX0dQSU9fU0VMKDEwLCAzLCBTRElPX0lOVFJfT09CX1RPR0dMRSwgMHgyQyksCS8vU0Rf REFUQTMKPiArCUdFTl9HUElPX1NFTCgxMSwgMywgU0RJT19JTlRSX09PQl9UT0dHTEUsIDB4MzAp LAkvL1NEX0NNRAo+ICsJR0VOX0dQSU9fU0VMKDEyLCAzLCBTRElPX0lOVFJfT09CX1RPR0dMRSwg MHgwNCksCS8vTVRESQo+ICsJR0VOX0dQSU9fU0VMKDEzLCAzLCBTRElPX0lOVFJfT09CX1RPR0dM RSwgMHgwOCksCS8vTVRDSwo+ICsJR0VOX0dQSU9fU0VMKDE0LCAzLCBTRElPX0lOVFJfT09CX1RP R0dMRSwgMHgwQyksCS8vTVRNUwo+ICsJR0VOX0dQSU9fU0VMKDE1LCAzLCBTRElPX0lOVFJfT09C X1RPR0dMRSwgMHgxMCksCS8vTVRETwo+ICsJLy9wbHMgZG8gbm90IGNoYW5nZSBzZWwgYmVmb3Jl LCBpZiB5b3Ugd2FudCB0byBjaGFuZ2UgaW50ciBtb2RlLGNoYW5nZSB0aGUgb25lIGJsb3cKPiAr CS8vR0VOX0dQSU9fU0VMKDIsIDAsIFNESU9fSU5UUl9PT0JfVE9HR0xFLCAweDM4KQo+ICsJR0VO X0dQSU9fU0VMKDIsIDAsIFNESU9fSU5UUl9PT0JfTE9XX0xFVkVMLCAweDM4KQo+ICt9Owo+ICsK PiAraW50IHNpZl9pbnRlcnJ1cHRfdGFyZ2V0KHN0cnVjdCBlc3BfcHViICplcHViLCB1OCBpbmRl eCkKPiArewo+ICsJdTggbG93X2J5dGUgPSBCSVQoaW5kZXgpOwo+ICsJcmV0dXJuIGVzcF9jb21t b25fd3JpdGVieXRlX3dpdGhfYWRkcihlcHViLCBTTENfSE9TVF9DT05GX1c0ICsgMiwKPiArCQkJ CQkgICAgICBsb3dfYnl0ZSwgRVNQX1NJRl9OT1NZTkMpOwo+ICt9Cj4gKwo+ICt2b2lkIGNoZWNr X3RhcmdldF9pZChzdHJ1Y3QgZXNwX3B1YiAqZXB1YikKPiArewo+ICsJdTMyIGRhdGU7Cj4gKwlp bnQgaTsKPiArCXUxNiBncGlvX3NlbDsKPiArCXU4IGJ5dGUyID0gMCwgYnl0ZTMgPSAwOwo+ICsK PiArCWlmICghZXB1YiB8fCAhZXB1Yi0+c2lmKQo+ICsJCXJldHVybjsKPiArCj4gKwlzaWZfbG9j a19idXMoZXB1Yik7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewo+ICsJCWVzcF9j b21tb25fcmVhZGJ5dGVfd2l0aF9hZGRyKGVwdWIsIFNMQ19IT1NUX0RBVEUgKyBpLAo+ICsJCQkJ CSAgICAgICh1OCAqKSZkYXRlICsgaSwgRVNQX1NJRl9OT1NZTkMpOwo+ICsJCWVzcF9jb21tb25f cmVhZGJ5dGVfd2l0aF9hZGRyKGVwdWIsIFNMQ19IT1NUX0lEICsgaSwKPiArCQkJCQkgICAgICAo dTggKikmZXB1Yi0+c2lmLT50YXJnZXRfaWQgKyBpLAo+ICsJCQkJCSAgICAgIEVTUF9TSUZfTk9T WU5DKTsKPiArCX0KPiArCj4gKwlzaWZfdW5sb2NrX2J1cyhlcHViKTsKPiArCj4gKwlzd2l0Y2gg KGVwdWItPnNpZi0+dGFyZ2V0X2lkKSB7Cj4gKwljYXNlIDB4MTAwOgo+ICsJCWVwdWItPnNpZi0+ c2xjX3dpbmRvd19lbmRfYWRkciA9IDB4MjAwMDA7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIDB4NjAw Ogo+ICsJCWVwdWItPnNpZi0+c2xjX3dpbmRvd19lbmRfYWRkciA9IDB4MjAwMDAgLSAweDgwMDsK PiArCj4gKwkJaWYgKHNpZl9nZXRfYnRfY29uZmlnKCkgPT0gMSAmJiBzaWZfZ2V0X3JzdF9jb25m aWcoKSAhPSAxKSB7Cj4gKwkJCXU4IGdwaW9fbnVtID0gc2lmX2dldF93YWtldXBfZ3Bpb19jb25m aWcoKTsKPiArCQkJZ3Bpb19zZWwgPSBncGlvX3NlbF9zZXRzW2dwaW9fbnVtXTsKPiArCQkJYnl0 ZTIgPSBncGlvX3NlbDsKPiArCQkJYnl0ZTMgPSBncGlvX3NlbCA+PiA4Owo+ICsJCX0KPiArCj4g KwkJc2lmX2xvY2tfYnVzKGVwdWIpOwo+ICsJCWVzcF9jb21tb25fd3JpdGVieXRlX3dpdGhfYWRk cihlcHViLCBTTENfSE9TVF9DT05GX1cxLCAwLAo+ICsJCQkJCSAgICAgICBFU1BfU0lGX05PU1lO Qyk7Cj4gKwkJZXNwX2NvbW1vbl93cml0ZWJ5dGVfd2l0aF9hZGRyKGVwdWIsIFNMQ19IT1NUX0NP TkZfVzEgKyAxLCAwLAo+ICsJCQkJCSAgICAgICBFU1BfU0lGX05PU1lOQyk7Cj4gKwkJZXNwX2Nv bW1vbl93cml0ZWJ5dGVfd2l0aF9hZGRyKGVwdWIsIFNMQ19IT1NUX0NPTkZfVzEgKyAyLAo+ICsJ CQkJCSAgICAgICBieXRlMiwgRVNQX1NJRl9OT1NZTkMpOwo+ICsJCWVzcF9jb21tb25fd3JpdGVi eXRlX3dpdGhfYWRkcihlcHViLCBTTENfSE9TVF9DT05GX1cxICsgMywKPiArCQkJCQkgICAgICAg Ynl0ZTMsIEVTUF9TSUZfTk9TWU5DKTsKPiArCQlzaWZfdW5sb2NrX2J1cyhlcHViKTsKPiArCQli cmVhazsKPiArCWRlZmF1bHQ6Cj4gKwkJZXB1Yi0+c2lmLT5zbGNfd2luZG93X2VuZF9hZGRyID0g MHgyMDAwMDsKPiArCQlicmVhazsKPiArCX0KPiArfQo+ICsKPiArdTMyIHNpZl9nZXRfYmxrc3oo c3RydWN0IGVzcF9wdWIgKmVwdWIpCj4gK3sKPiArCWlmICghZXB1YiB8fCAhZXB1Yi0+c2lmKQo+ ICsJCXJldHVybiA1MTI7Cj4gKwo+ICsJcmV0dXJuIGVwdWItPnNpZi0+c2xjX2Jsa19zejsKPiAr fQo+ICsKPiArdm9pZCBzaWZfZHNyKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMpCj4gK3sKPiArCXN0 cnVjdCBlc3Bfc2Rpb19jdHJsICpzY3RybCA9IHNkaW9fZ2V0X2RydmRhdGEoZnVuYyk7Cj4gKwlz dHJ1Y3Qgc2xjX2hvc3RfcmVncyAqcmVncyA9ICZzY3RybC0+c2xjX3JlZ3M7Cj4gKwlpbnQgcmV0 Owo+ICsKPiArCXNkaW9fcmVsZWFzZV9ob3N0KHNjdHJsLT5mdW5jKTsKPiArCj4gKwlzaWZfbG9j a19idXMoc2N0cmwtPmVwdWIpOwo+ICsJbWVtc2V0KHJlZ3MsIDAsIHNpemVvZihzdHJ1Y3Qgc2xj X2hvc3RfcmVncykpOwo+ICsKPiArCXJldCA9IGVzcF9jb21tb25fcmVhZF93aXRoX2FkZHIoc2N0 cmwtPmVwdWIsIFJFR19TTENfSE9TVF9CQVNFICsgOCwKPiArCQkJCQkodTggKilyZWdzLCBzaXpl b2YoKnJlZ3MpLAo+ICsJCQkJCUVTUF9TSUZfTk9TWU5DKTsKPiArCj4gKwlpZiAocmVncy0+aW50 cl9yYXcgJiBTTENfSE9TVF9SWF9TVCAmJiAhcmV0KQo+ICsJCWVzcF9kc3Ioc2N0cmwtPmVwdWIp Owo+ICsJZWxzZQo+ICsJCXNpZl91bmxvY2tfYnVzKHNjdHJsLT5lcHViKTsKPiArCj4gKwkvKiBG SVhNRTogbWlzc2luZyB1bmxvY2tfYnVzPyAqLwoKSSB0aGluayB0aGUgYnVzIG1vc3RseSBnZXRz IHVubG9ja2VkIGluIGVzcF9kc3IoKSBidXQgaXQncyBub3QgY2xlYXIKaG93IHRoYXQgaGFwcGVu cyBvbiB0aGUgc3VjY2VzcyBwYXRoLiAgQnV0IHRoYXQncyB0aGUgY29tbW9uIHBhdGggc28KaXQg bXVzdCBoYXBwZW4uICBJIGRvbid0IGxpa2UgdGhhdCB3ZSBtaXggc2lmX2xvY2tfYnVzKCkgYW5k CnNkaW9fY2xhaW1faG9zdCgpLiAgSSBndWVzcyBJIHdvdWxkIHByZWZlciB0aGF0IHdlIGNvdWxk IGdldCByaWQgb2YKc2lmX2xvY2tfYnVzKCkgYmVjYXVzZSB3ZSBzaG91bGQgYmUgbG9ja2luZyBp bnN0ZWFkIG9mIHNheWluZyAiV2UgaGF2ZQp0b28gbWFueSBOVUxMIHBvaW50ZXJzIHNvIGxldCdz IGZvcmdldCBhYm91dCBsb2NraW5nIGZvciBub3cuIgoKPiArCXNkaW9fY2xhaW1faG9zdChmdW5j KTsKPiArCWF0b21pY19zZXQoJnNjdHJsLT5pcnFfaGFuZGxpbmcsIDApOwo+ICt9Cj4gKwo+ICtz dHJ1Y3Qgc2xjX2hvc3RfcmVncyAqc2lmX2dldF9yZWdzKHN0cnVjdCBlc3BfcHViICplcHViKQo+ ICt7Cj4gKwlpZiAoIWVwdWIgfHwgIWVwdWItPnNpZikKPiArCQlyZXR1cm4gTlVMTDsKPiArCj4g KwlyZXR1cm4gJmVwdWItPnNpZi0+c2xjX3JlZ3M7Cj4gK30KPiArCj4gK3ZvaWQgc2lmX2Rpc2Fi bGVfdGFyZ2V0X2ludGVycnVwdChzdHJ1Y3QgZXNwX3B1YiAqZXB1YikKPiArewo+ICsJaWYgKCFl cHViIHx8ICFlcHViLT5zaWYgfHwgIWVwdWItPnNpZi0+ZnVuYykKPiArCQlyZXR1cm47Cj4gKwo+ ICsJc2lmX2xvY2tfYnVzKGVwdWIpOwo+ICsjaWZkZWYgSE9TVF9SRVNFVF9CVUcKPiArCW1kZWxh eSgxMCk7Cj4gKyNlbmRpZgo+ICsJbWVtc2V0KGVwdWItPnNpZi0+ZG1hX2J1ZmZlciwgMCwgc2l6 ZW9mKHUzMikpOwo+ICsJZXNwX2NvbW1vbl93cml0ZV93aXRoX2FkZHIoZXB1YiwgU0xDX0hPU1Rf SU5UX0VOQSwKPiArCQkJCSAgIGVwdWItPnNpZi0+ZG1hX2J1ZmZlciwgc2l6ZW9mKHUzMiksCj4g KwkJCQkgICBFU1BfU0lGX05PU1lOQyk7Cj4gKyNpZmRlZiBIT1NUX1JFU0VUX0JVRwo+ICsJbWRl bGF5KDEwKTsKPiArI2VuZGlmCj4gKwo+ICsJc2lmX3VubG9ja19idXMoZXB1Yik7Cj4gKwo+ICsJ bWRlbGF5KDEpOwo+ICsKPiArCXNpZl9sb2NrX2J1cyhlcHViKTsKPiArCXNpZl9pbnRlcnJ1cHRf dGFyZ2V0KGVwdWIsIDcpOwo+ICsJc2lmX3VubG9ja19idXMoZXB1Yik7Cj4gK30KPiArCj4gKy8q IEZJWE1FOiBNRUggKi8KPiArCj4gK3N0YXRpYyBpbnQgYnRfY29uZmlnOwo+ICt2b2lkIHNpZl9y ZWNvcmRfYnRfY29uZmlnKGludCB2YWx1ZSkKPiArewo+ICsJYnRfY29uZmlnID0gdmFsdWU7Cj4g K30KPiArCj4gK2ludCBzaWZfZ2V0X2J0X2NvbmZpZyh2b2lkKQo+ICt7Cj4gKwlyZXR1cm4gYnRf Y29uZmlnOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHJzdF9jb25maWc7Cj4gK3ZvaWQgc2lmX3Jl Y29yZF9yc3RfY29uZmlnKGludCB2YWx1ZSkKPiArewo+ICsJcnN0X2NvbmZpZyA9IHZhbHVlOwo+ ICt9Cj4gKwo+ICtpbnQgc2lmX2dldF9yc3RfY29uZmlnKHZvaWQpCj4gK3sKPiArCXJldHVybiBy c3RfY29uZmlnOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGF0ZV90ZXN0Owo+ICt2b2lkIHNpZl9y ZWNvcmRfYXRlX2NvbmZpZyhpbnQgdmFsdWUpCj4gK3sKPiArCWF0ZV90ZXN0ID0gdmFsdWU7Cj4g K30KPiArCj4gK2ludCBzaWZfZ2V0X2F0ZV9jb25maWcodm9pZCkKPiArewo+ICsJcmV0dXJuIGF0 ZV90ZXN0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHdha2V1cF9ncGlvID0gMTI7Cj4gK3ZvaWQg c2lmX3JlY29yZF93YWtldXBfZ3Bpb19jb25maWcoaW50IHZhbHVlKQo+ICt7Cj4gKwl3YWtldXBf Z3BpbyA9IHZhbHVlOwo+ICt9Cj4gKwo+ICtpbnQgc2lmX2dldF93YWtldXBfZ3Bpb19jb25maWco dm9pZCkKPiArewo+ICsJcmV0dXJuIHdha2V1cF9ncGlvOwo+ICt9Cj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvc3RhZ2luZy9lc3A4MDg5L2VzcF9tYWM4MDIxMS5jIGIvZHJpdmVycy9zdGFnaW5nL2Vz cDgwODkvZXNwX21hYzgwMjExLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAw MDAwMDAwMC4uZmQ1MDQ5ZmMxZjZiCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvc3Rh Z2luZy9lc3A4MDg5L2VzcF9tYWM4MDIxMS5jCj4gQEAgLTAsMCArMSwxNDk2IEBACj4gKy8qCj4g KyAqIENvcHlyaWdodCAoYykgMjAxMSAtIDIwMTQgRXNwcmVzc2lmIFN5c3RlbS4KPiArICogQ29w eXJpZ2h0IChjKSAyMDE3IEZyZWUgRWxlY3Ryb25zCj4gKyAqICAgICAgUXVlbnRpbiBTY2h1bHog PHF1ZW50aW4uc2NodWx6QGZyZWUtZWxlY3Ryb25zLmNvbT4KPiArICoKPiArICogVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkgaXQgdW5kZXIKPiArICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZQo+ICsgKiBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24uCj4gKyAqCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNl Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KPiArI2luY2x1ZGUgPGxpbnV4L25s ODAyMTEuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgo+ICsjaW5jbHVkZSA8bGlu dXgvc2xhYi5oPgo+ICsjaW5jbHVkZSA8bmV0L2NmZzgwMjExLmg+Cj4gKyNpbmNsdWRlIDxuZXQv bWFjODAyMTEuaD4KPiArI2luY2x1ZGUgPG5ldC9yZWd1bGF0b3J5Lmg+Cj4gKyNpbmNsdWRlICJl c3BfcHViLmgiCj4gKyNpbmNsdWRlICJlc3Bfc2lwLmgiCj4gKyNpbmNsdWRlICJlc3BfY3RybC5o Igo+ICsjaW5jbHVkZSAiZXNwX3NpZi5oIgo+ICsjaW5jbHVkZSAiZXNwX2RlYnVnLmgiCj4gKyNp bmNsdWRlICJlc3Bfd2wuaCIKPiArI2luY2x1ZGUgImVzcF91dGlscy5oIgo+ICsKPiArc3RhdGlj IHU4IGVzcF9tYWNfYWRkcltFVEhfQUxFTiAqIDJdOwo+ICtzdGF0aWMgdTggZ2V0YWRkcl9pbmRl eCh1OCAqYWRkciwgc3RydWN0IGVzcF9wdWIgKmVwdWIpOwo+ICsKPiArLypIYW5kbGVyIHRoYXQg ODAyLjExIG1vZHVsZSBjYWxscyBmb3IgZWFjaCB0cmFuc21pdHRlZCBmcmFtZS4KPiArc2tiIGNv bnRhaW5zIHRoZSBidWZmZXIgc3RhcnRpbmcgZnJvbSB0aGUgSUVFRSA4MDIuMTEgaGVhZGVyLgo+ ICtUaGUgbG93LWxldmVsIGRyaXZlciBzaG91bGQgc2VuZCB0aGUgZnJhbWUgb3V0IGJhc2VkIG9u Cj4gK2NvbmZpZ3VyYXRpb24gaW4gdGhlIFRYIGNvbnRyb2wgZGF0YS4gVGhpcyBoYW5kbGVyIHNo b3VsZCwKPiArcHJlZmVyYWJseSwgbmV2ZXIgZmFpbCBhbmQgc3RvcCBxdWV1ZXMgYXBwcm9wcmlh dGVseS4KPiArTXVzdCBiZSBhdG9taWMuKi8KPiArc3RhdGljIHZvaWQgZXNwX29wX3R4KHN0cnVj dCBpZWVlODAyMTFfaHcgKmh3LAo+ICsJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJv bCAqY29udHJvbCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKPiArewo+ICsJc3RydWN0IGVzcF9wdWIg KmVwdWIgPSAoc3RydWN0IGVzcF9wdWIgKilody0+cHJpdjsKPiArCj4gKwlzaXBfdHhfZGF0YV9w a3RfZW5xdWV1ZShlcHViLCBza2IpOwo+ICsJaWYgKGVwdWIpCj4gKwkJaWVlZTgwMjExX3F1ZXVl X3dvcmsoaHcsICZlcHViLT50eF93b3JrKTsKPiArfQo+ICsKPiArLyoKPiArICAgQ2FsbGVkIGJl Zm9yZSB0aGUgZmlyc3QgbmV0ZGV2aWNlIGF0dGFjaGVkIHRvIHRoZSBoYXJkd2FyZQo+ICsgICAy OTM0ICAqICAgICAgaXMgZW5hYmxlZC4gVGhpcyBzaG91bGQgdHVybiBvbiB0aGUgaGFyZHdhcmUg YW5kIG11c3QgdHVybiBvbgo+ICsgICAyOTM1ICAqICAgICAgZnJhbWUgcmVjZXB0aW9uIChmb3Ig cG9zc2libHkgZW5hYmxlZCBtb25pdG9yIGludGVyZmFjZXMuKQo+ICsgICAyOTM2ICAqICAgICAg UmV0dXJucyBuZWdhdGl2ZSBlcnJvciBjb2RlcywgdGhlc2UgbWF5IGJlIHNlZW4gaW4gdXNlcnNw YWNlLAo+ICsgICAyOTM3ICAqICAgICAgb3IgemVyby4KPiArICAgMjkzOCAgKiAgICAgIFdoZW4g dGhlIGRldmljZSBpcyBzdGFydGVkIGl0IHNob3VsZCBub3QgaGF2ZSBhIE1BQyBhZGRyZXNzCj4g KyAgIDI5MzkgICogICAgICB0byBhdm9pZCBhY2tub3dsZWRnaW5nIGZyYW1lcyBiZWZvcmUgYSBu b24tbW9uaXRvciBkZXZpY2UKPiArICAgMjk0MCAgKiAgICAgIGlzIGFkZGVkLgo+ICsgICAyOTQx ICAqICAgICAgTXVzdCBiZSBpbXBsZW1lbnRlZCBhbmQgY2FuIHNsZWVwLgo+ICsqLwo+ICtzdGF0 aWMgaW50IGVzcF9vcF9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKPiArewo+ICsJc3Ry dWN0IGVzcF9wdWIgKmVwdWI7Cj4gKwo+ICsJaWYgKCFodyB8fCAhaHctPnByaXYpIHsKPiArCQly ZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwllcHViID0gKHN0cnVjdCBlc3BfcHViICopaHct PnByaXY7Cj4gKwo+ICsJLyphZGQgcmZraWxsIHBvbGwgZnVuY3Rpb24gKi8KPiArCj4gKwlhdG9t aWNfc2V0KCZlcHViLT53bC5vZmYsIDApOwo+ICsJd2lwaHlfcmZraWxsX3N0YXJ0X3BvbGxpbmco aHctPndpcGh5KTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArLyoKPiArQ2FsbGVkIGFm dGVyIGxhc3QgbmV0ZGV2aWNlIGF0dGFjaGVkIHRvIHRoZSBoYXJkd2FyZQo+ICsyOTQ0ICAqICAg ICAgaXMgZGlzYWJsZWQuIFRoaXMgc2hvdWxkIHR1cm4gb2ZmIHRoZSBoYXJkd2FyZSAoYXQgbGVh c3QKPiArMjk0NSAgKiAgICAgIGl0IG11c3QgdHVybiBvZmYgZnJhbWUgcmVjZXB0aW9uLikKPiAr Mjk0NiAgKiAgICAgIE1heSBiZSBjYWxsZWQgcmlnaHQgYWZ0ZXIgYWRkX2ludGVyZmFjZSBpZiB0 aGF0IHJlamVjdHMKPiArMjk0NyAgKiAgICAgIGFuIGludGVyZmFjZS4gSWYgeW91IGFkZGVkIGFu eSB3b3JrIG9udG8gdGhlIG1hYzgwMjExIHdvcmtxdWV1ZQo+ICsyOTQ4ICAqICAgICAgeW91IHNo b3VsZCBlbnN1cmUgdG8gY2FuY2VsIGl0IG9uIHRoaXMgY2FsbGJhY2suCj4gKzI5NDkgICogICAg ICBNdXN0IGJlIGltcGxlbWVudGVkIGFuZCBjYW4gc2xlZXAuCj4gKyovCj4gK3N0YXRpYyB2b2lk IGVzcF9vcF9zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQo+ICt7Cj4gKwlzdHJ1Y3QgZXNw X3B1YiAqZXB1YjsKPiArCj4gKwlpZiAoIWh3IHx8ICFody0+cHJpdikgewo+ICsJCXJldHVybjsK PiArCX0KPiArCj4gKwllcHViID0gKHN0cnVjdCBlc3BfcHViICopaHctPnByaXY7Cj4gKwlhdG9t aWNfc2V0KCZlcHViLT53bC5vZmYsIDEpOwo+ICsKPiArI2lmZGVmIEhPU1RfUkVTRVRfQlVHCj4g KwltZGVsYXkoMjAwKTsKPiArI2VuZGlmCj4gKwo+ICsJaWYgKGVwdWItPndsLnNjYW5fcmVxKSB7 Cj4gKwkJaHdfc2Nhbl9kb25lKGVwdWIsIHRydWUpOwo+ICsJCWVwdWItPndsLnNjYW5fcmVxID0g TlVMTDsKPiArCQkvL21zbGVlcCgyKTsKPiArCX0KPiArCj4gKwkvKiBGSVhNRTogZG9lcyB0aGlz ICd0dXJuIG9mZiBmcmFtZSByZWNlcHRpb24nPyAqLwo+ICsJd2lwaHlfcmZraWxsX3N0b3BfcG9s bGluZyhody0+d2lwaHkpOwo+ICsJLyogRklYTUU6IGZsdXNoIHF1ZXVlcz8gKi8KPiArfQo+ICsK PiArc3RhdGljIGludCBlc3Bfc2V0X3N2aWZfbW9kZShzdHJ1Y3Qgc2lwX2NtZF9zZXR2aWYgKnN2 aWYsCj4gKwkJCSAgICAgZW51bSBubDgwMjExX2lmdHlwZSB0eXBlLCBib29sIHAycCkKPiArewo+ ICsJc3dpdGNoICh0eXBlKSB7Cj4gKwljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046Cj4gKwkJ c3ZpZi0+b3BfbW9kZSA9IDA7Cj4gKwkJc3ZpZi0+aXNfcDJwID0gcDJwOwo+ICsJCWJyZWFrOwo+ ICsKPiArCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6Cj4gKwkJc3ZpZi0+b3BfbW9kZSA9IDE7Cj4g KwkJc3ZpZi0+aXNfcDJwID0gcDJwOwo+ICsJCWJyZWFrOwo+ICsKPiArCWNhc2UgTkw4MDIxMV9J RlRZUEVfUDJQX0NMSUVOVDoKPiArCQlzdmlmLT5vcF9tb2RlID0gMDsKPiArCQlzdmlmLT5pc19w MnAgPSAxOwo+ICsJCWJyZWFrOwo+ICsKPiArCWNhc2UgTkw4MDIxMV9JRlRZUEVfUDJQX0dPOgo+ ICsJCXN2aWYtPm9wX21vZGUgPSAxOwo+ICsJCXN2aWYtPmlzX3AycCA9IDE7Cj4gKwkJYnJlYWs7 Cj4gKwo+ICsJZGVmYXVsdDoKPiArCQlyZXR1cm4gLUVPUE5PVFNVUFA7Cj4gKwl9Cj4gKwo+ICsJ cmV0dXJuIDA7Cj4gK30KPiArCj4gKy8qCj4gK0NhbGxlZCB3aGVuIGEgbmV0ZGV2aWNlIGF0dGFj aGVkIHRvIHRoZSBoYXJkd2FyZSBpcwo+ICsyOTczICAqICAgICAgZW5hYmxlZC4gQmVjYXVzZSBp dCBpcyBub3QgY2FsbGVkIGZvciBtb25pdG9yIG1vZGUgZGV2aWNlcywgQHN0YXJ0Cj4gKzI5NzQg ICogICAgICBhbmQgQHN0b3AgbXVzdCBiZSBpbXBsZW1lbnRlZC4KPiArMjk3NSAgKiAgICAgIFRo ZSBkcml2ZXIgc2hvdWxkIHBlcmZvcm0gYW55IGluaXRpYWxpemF0aW9uIGl0IG5lZWRzIGJlZm9y ZQo+ICsyOTc2ICAqICAgICAgdGhlIGRldmljZSBjYW4gYmUgZW5hYmxlZC4gVGhlIGluaXRpYWwg Y29uZmlndXJhdGlvbiBmb3IgdGhlCj4gKzI5NzcgICogICAgICBpbnRlcmZhY2UgaXMgZ2l2ZW4g aW4gdGhlIGNvbmYgcGFyYW1ldGVyLgo+ICsyOTc4ICAqICAgICAgVGhlIGNhbGxiYWNrIG1heSBy ZWZ1c2UgdG8gYWRkIGFuIGludGVyZmFjZSBieSByZXR1cm5pbmcgYQo+ICsyOTc5ICAqICAgICAg bmVnYXRpdmUgZXJyb3IgY29kZSAod2hpY2ggd2lsbCBiZSBzZWVuIGluIHVzZXJzcGFjZS4pCj4g KzI5ODAgICogICAgICBNdXN0IGJlIGltcGxlbWVudGVkIGFuZCBjYW4gc2xlZXAuCj4gKyAgICov Cj4gK3N0YXRpYyBpbnQgZXNwX29wX2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAq aHcsCj4gKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQo+ICt7Cj4gKwlzdHJ1Y3QgZXNw X3B1YiAqZXB1YiA9IChzdHJ1Y3QgZXNwX3B1YiAqKWh3LT5wcml2Owo+ICsJc3RydWN0IGVzcF92 aWYgKmV2aWYgPSAoc3RydWN0IGVzcF92aWYgKil2aWYtPmRydl9wcml2Owo+ICsJc3RydWN0IHNp cF9jbWRfc2V0dmlmIHN2aWY7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCW1lbWNweShzdmlmLm1hYywg dmlmLT5hZGRyLCBFVEhfQUxFTik7Cj4gKwlzdmlmLmluZGV4ID0gZ2V0YWRkcl9pbmRleCh2aWYt PmFkZHIsIGVwdWIpOwo+ICsJZXZpZi0+aW5kZXggPSBzdmlmLmluZGV4Owo+ICsJZXZpZi0+ZXB1 YiA9IGVwdWI7Cj4gKwkvKiBGSVhNRTogd2h5IGEgbmVlZCBmb3IgZXZpZj8gKi8KPiArCWVwdWIt PnZpZiA9IHZpZjsKPiArCXN2aWYuc2V0ID0gMTsKPiArCj4gKwlpZiAoc3ZpZi5pbmRleCA9PSBF U1BfUFVCX01BWF9WSUYpIHsKCk1vdmUgdGhpcyBlcnJvciBoYW5kbGluZyBuZXh0IHRvIHRoZSBn ZXRhZGRyX2luZGV4KCkgY2FsbC4KCj4gKwkJZGV2X2VycihlcHViLT5kZXYsICJzdXBwb3J0IGZv ciBNQVggJWQgaW50ZXJmYWNlc1xuIiwKPiArCQkJRVNQX1BVQl9NQVhfVklGKTsKPiArCQlyZXR1 cm4gLUVPUE5PVFNVUFA7Cj4gKwl9Cj4gKwo+ICsJaWYgKEJJVChzdmlmLmluZGV4KSAmIGVwdWIt PnZpZl9zbG90KSB7Cj4gKwkJZGV2X2VycihlcHViLT5kZXYsICJpbnRlcmZhY2UgJWQgYWxyZWFk eSB1c2VkXG4iLCBzdmlmLmluZGV4KTsKPiArCQlyZXR1cm4gLUVPUE5PVFNVUFA7Cj4gKwl9Cj4g Kwo+ICsJZXB1Yi0+dmlmX3Nsb3QgfD0gQklUKHN2aWYuaW5kZXgpOwo+ICsKPiArCXJldCA9IGVz cF9zZXRfc3ZpZl9tb2RlKCZzdmlmLCB2aWYtPnR5cGUsIGZhbHNlKTsKPiArCWlmIChyZXQgPCAw KSB7Cj4gKwkJZGV2X2VycihlcHViLT5kZXYsICJubyBzdXBwb3J0IGZvciBpbnRlcmZhY2UgdHlw ZSAlZFxuIiwKPiArCQkJdmlmLT50eXBlKTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiAr CXNpcF9jbWQoZXB1YiwgU0lQX0NNRF9TRVRWSUYsICh1OCAqKSZzdmlmLCBzaXplb2Yoc3ZpZikp Owo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKgo+ICtDYWxsZWQgd2hlbiBhIG5ldGRl dmljZSBjaGFuZ2VzIHR5cGUuIFRoaXMgY2FsbGJhY2sKPiArMjk4MyAgKiAgICAgIGlzIG9wdGlv bmFsLCBidXQgb25seSBpZiBpdCBpcyBzdXBwb3J0ZWQgY2FuIGludGVyZmFjZSB0eXBlcyBiZQo+ ICsyOTg0ICAqICAgICAgc3dpdGNoZWQgd2hpbGUgdGhlIGludGVyZmFjZSBpcyBVUC4gVGhlIGNh bGxiYWNrIG1heSBzbGVlcC4KPiArMjk4NSAgKiAgICAgIE5vdGUgdGhhdCB3aGlsZSBhbiBpbnRl cmZhY2UgaXMgYmVpbmcgc3dpdGNoZWQsIGl0IHdpbGwgbm90IGJlCj4gKzI5ODYgICogICAgICBm b3VuZCBieSB0aGUgaW50ZXJmYWNlIGl0ZXJhdGlvbiBjYWxsYmFja3MuCj4gKyAgICovCj4gK3N0 YXRpYyBpbnQgZXNwX29wX2NoYW5nZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcs Cj4gKwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAo+ICsJCQkJICAgZW51bSBubDgw MjExX2lmdHlwZSBuZXdfdHlwZSwgYm9vbCBwMnApCj4gK3sKPiArCXN0cnVjdCBlc3BfcHViICpl cHViID0gKHN0cnVjdCBlc3BfcHViICopaHctPnByaXY7Cj4gKwlzdHJ1Y3QgZXNwX3ZpZiAqZXZp ZiA9IChzdHJ1Y3QgZXNwX3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7Cj4gKwlzdHJ1Y3Qgc2lwX2NtZF9z ZXR2aWYgc3ZpZjsKPiArCWludCByZXQ7Cj4gKwo+ICsJbWVtY3B5KHN2aWYubWFjLCB2aWYtPmFk ZHIsIEVUSF9BTEVOKTsKPiArCXN2aWYuaW5kZXggPSBldmlmLT5pbmRleDsKPiArCXN2aWYuc2V0 ID0gMjsKPiArCj4gKwlyZXQgPSBlc3Bfc2V0X3N2aWZfbW9kZSgmc3ZpZiwgbmV3X3R5cGUsIHAy cCk7Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCXNpcF9jbWQoZXB1 YiwgU0lQX0NNRF9TRVRWSUYsICh1OCAqKSZzdmlmLCBzaXplb2Yoc3ZpZikpOwo+ICsKPiArCXJl dHVybiAwOwo+ICt9Cj4gKwo+ICsvKgo+ICsgICBOb3RpZmllcyBhIGRyaXZlciB0aGF0IGFuIGlu dGVyZmFjZSBpcyBnb2luZyBkb3duLgo+ICsgICAyOTg5ICAqICAgICAgVGhlIEBzdG9wIGNhbGxi YWNrIGlzIGNhbGxlZCBhZnRlciB0aGlzIGlmIGl0IGlzIHRoZSBsYXN0IGludGVyZmFjZQo+ICsg ICAyOTkwICAqICAgICAgYW5kIG5vIG1vbml0b3IgaW50ZXJmYWNlcyBhcmUgcHJlc2VudC4KPiAr ICAgMjk5MSAgKiAgICAgIFdoZW4gYWxsIGludGVyZmFjZXMgYXJlIHJlbW92ZWQsIHRoZSBNQUMg YWRkcmVzcyBpbiB0aGUgaGFyZHdhcmUKPiArICAgMjk5MiAgKiAgICAgIG11c3QgYmUgY2xlYXJl ZCBzbyB0aGUgZGV2aWNlIG5vIGxvbmdlciBhY2tub3dsZWRnZXMgcGFja2V0cywKPiArICAgMjk5 MyAgKiAgICAgIHRoZSBtYWNfYWRkciBtZW1iZXIgb2YgdGhlIGNvbmYgc3RydWN0dXJlIGlzLCBo b3dldmVyLCBzZXQgdG8gdGhlCj4gKyAgIDI5OTQgICogICAgICBNQUMgYWRkcmVzcyBvZiB0aGUg ZGV2aWNlIGdvaW5nIGF3YXkuCj4gKyAgIDI5OTUgICogICAgICBIZW5jZSwgdGhpcyBjYWxsYmFj ayBtdXN0IGJlIGltcGxlbWVudGVkLiBJdCBjYW4gc2xlZXAuCj4gKyAgICovCj4gK3N0YXRpYyB2 b2lkIGVzcF9vcF9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAo+ICsJ CQkJICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCj4gK3sKPiArCXN0cnVjdCBlc3BfcHVi ICplcHViID0gKHN0cnVjdCBlc3BfcHViICopaHctPnByaXY7Cj4gKwlzdHJ1Y3QgZXNwX3ZpZiAq ZXZpZiA9IChzdHJ1Y3QgZXNwX3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7Cj4gKwlzdHJ1Y3Qgc2lwX2Nt ZF9zZXR2aWYgc3ZpZiA9IHswfTsKPiArCj4gKwlzdmlmLmluZGV4ID0gZXZpZi0+aW5kZXg7Cj4g KwllcHViLT52aWZfc2xvdCAmPSB+QklUKHN2aWYuaW5kZXgpOwo+ICsKPiArCWlmIChldmlmLT5h cF91cCkgewo+ICsJCWV2aWYtPmJlYWNvbl9pbnRlcnZhbCA9IDA7Cj4gKwkJZGVsX3RpbWVyX3N5 bmMoJmV2aWYtPmJlYWNvbl90aW1lcik7Cj4gKwkJZXZpZi0+YXBfdXAgPSBmYWxzZTsKPiArCX0K PiArCj4gKwllcHViLT52aWYgPSBOVUxMOwo+ICsJZXZpZi0+ZXB1YiA9IE5VTEw7Cj4gKwo+ICsJ c2lwX2NtZChlcHViLCBTSVBfQ01EX1NFVFZJRiwgKHU4ICopJnN2aWYsIHNpemVvZihzdmlmKSk7 Cj4gKwkvKiBUT0RPOiBjbGVhbiB1cCB0eC9yeCBxdWV1ZSAqLwo+ICt9Cj4gKwo+ICsvKiBGSVhN RTogV1RGPyAqLwo+ICsKPiArI2RlZmluZSBCRUFDT05fVElNX1NBVkVfTUFYIDIwCj4gK3U4IGJl YWNvbl90aW1fc2F2ZWRbQkVBQ09OX1RJTV9TQVZFX01BWF07Cj4gK2ludCBiZWFjb25fdGltX2Nv dW50Owo+ICtzdGF0aWMgdm9pZCBiZWFjb25fdGltX2luaXQodm9pZCkKPiArewo+ICsJbWVtc2V0 KGJlYWNvbl90aW1fc2F2ZWQsIDAsIEJFQUNPTl9USU1fU0FWRV9NQVgpOwo+ICsJYmVhY29uX3Rp bV9jb3VudCA9IDA7Cj4gK30KPiArCj4gK3N0YXRpYyB1OCBiZWFjb25fdGltX3NhdmUodTggdGhp c190aW0pCj4gK3sKPiArCXU4IGFsbF90aW0gPSAwOwo+ICsJaW50IGk7Cj4gKwo+ICsJYmVhY29u X3RpbV9zYXZlZFtiZWFjb25fdGltX2NvdW50XSA9IHRoaXNfdGltOwo+ICsKPiArCWJlYWNvbl90 aW1fY291bnQgPSAoYmVhY29uX3RpbV9jb3VudCArIDEpICUgQkVBQ09OX1RJTV9TQVZFX01BWDsK PiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgQkVBQ09OX1RJTV9TQVZFX01BWDsgaSsrKQo+ICsJCWFs bF90aW0gfD0gYmVhY29uX3RpbV9zYXZlZFtpXTsKPiArCj4gKwlyZXR1cm4gYWxsX3RpbTsKPiAr fQo+ICsKPiArc3RhdGljIGJvb2wgYmVhY29uX3RpbV9hbHRlcihzdHJ1Y3Qgc2tfYnVmZiAqYmVh Y29uKQo+ICt7Cj4gKwl1OCAqcCwgKnRpbV9lbmQ7Cj4gKwl1OCB0aW1fY291bnQ7Cj4gKwlpbnQg bGVuLCByZW1haW5fbGVuOwo+ICsJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210Owo+ICsKPiAr CWlmICghYmVhY29uKQo+ICsJCXJldHVybiBmYWxzZTsKPiArCj4gKwltZ210ID0gKHN0cnVjdCBp ZWVlODAyMTFfbWdtdCAqKSgodTggKiliZWFjb24tPmRhdGEpOwo+ICsKPiArCXJlbWFpbl9sZW4g PSBiZWFjb24tPmxlbiAtICgodTggKiltZ210LT51LmJlYWNvbi52YXJpYWJsZSAtCj4gKwkJCQkg ICAgKHU4ICopbWdtdCArIDEyKTsKPiArCXAgPSBtZ210LT51LmJlYWNvbi52YXJpYWJsZTsKPiAr Cj4gKwl3aGlsZSAocmVtYWluX2xlbiA+IDApIHsKPiArCQlsZW4gPSAqKCsrcCk7Cj4gKwo+ICsJ CWlmICgqcCA9PSBXTEFOX0VJRF9USU0pIHsJLy8gdGltIGZpZWxkCj4gKwkJCXRpbV9lbmQgPSBw ICsgbGVuOwo+ICsJCQl0aW1fY291bnQgPSAqKCsrcCk7Cj4gKwkJCXAgKz0gMjsKPiArCQkJLy9t dWx0aWNhc3QKPiArCQkJaWYgKCF0aW1fY291bnQpCj4gKwkJCQkqcCB8PSAweDE7Cj4gKwo+ICsJ CQlpZiAoISgqcCAmIDB4ZmUpICYmIHRpbV9lbmQgPj0gcCArIDEpIHsJLy8gd2Ugb25seSBzdXBw b3J0IDggc3RhIGluIHRoaXMgY2FzZQo+ICsJCQkJcCsrOwo+ICsJCQkJKnAgPSBiZWFjb25fdGlt X3NhdmUoKnApOwo+ICsJCQl9Cj4gKwo+ICsJCQlyZXR1cm4gdGltX2NvdW50ID09IDA7Cj4gKwkJ fQo+ICsKPiArCQlwICs9IGxlbiArIDE7Cj4gKwkJcmVtYWluX2xlbiAtPSAyICsgbGVuOwo+ICsJ fQo+ICsKPiArCXJldHVybiBmYWxzZTsKPiArfQo+ICsKPiArdW5zaWduZWQgbG9uZyBpbml0X2pp ZmZpZXM7Cj4gK3Vuc2lnbmVkIGxvbmcgY3ljbGVfYmVhY29uX2NvdW50Owo+ICtzdGF0aWMgdm9p ZCBkcnZfaGFuZGxlX2JlYWNvbih1bnNpZ25lZCBsb25nIGRhdGEpCj4gK3sKPiArCXN0cnVjdCBp ZWVlODAyMTFfdmlmICp2aWYgPSAoc3RydWN0IGllZWU4MDIxMV92aWYgKilkYXRhOwo+ICsJc3Ry dWN0IGVzcF92aWYgKmV2aWYgPSAoc3RydWN0IGVzcF92aWYgKil2aWYtPmRydl9wcml2Owo+ICsJ c3RydWN0IHNrX2J1ZmYgKmJlYWNvbjsKPiArCXN0cnVjdCBza19idWZmICpza2I7Cj4gKwlib29s IHRpbV9yZWFjaDsKPiArCj4gKwlpZiAoIWV2aWYtPmVwdWIpCj4gKwkJcmV0dXJuOwo+ICsKPiAr CW1kZWxheSgyNDAwICogKGN5Y2xlX2JlYWNvbl9jb3VudCAlIDI1KSAlIDEwMDAwIC8gMTAwMCk7 Cj4gKwo+ICsJYmVhY29uID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoZXZpZi0+ZXB1Yi0+aHcsIHZp Zik7Cj4gKwo+ICsJdGltX3JlYWNoID0gYmVhY29uX3RpbV9hbHRlcihiZWFjb24pOwo+ICsKPiAr CWlmIChiZWFjb24pCj4gKwkJc2lwX3R4X2RhdGFfcGt0X2VucXVldWUoZXZpZi0+ZXB1YiwgYmVh Y29uKTsKPiArCj4gKwlpZiAoY3ljbGVfYmVhY29uX2NvdW50KysgPT0gMTAwKSB7Cj4gKwkJaW5p dF9qaWZmaWVzID0gamlmZmllczsKPiArCQljeWNsZV9iZWFjb25fY291bnQgLT0gMTAwOwo+ICsJ fQo+ICsKPiArCW1vZF90aW1lcigmZXZpZi0+YmVhY29uX3RpbWVyLCBpbml0X2ppZmZpZXMgKwo+ ICsJCSAgbXNlY3NfdG9famlmZmllcyhjeWNsZV9iZWFjb25fY291bnQgKgo+ICsJCQkJICAgdmlm LT5ic3NfY29uZi5iZWFjb25faW50ICogMTAyNCAvIDEwMDApKTsKPiArCS8vRklYTUU6dGhlIHBh Y2tldHMgbXVzdCBiZSBzZW50IGF0IGhvbWUgY2hhbm5lbAo+ICsJLy9zZW5kIGJ1ZmZlciBtY2Fz dCBmcmFtZXMKPiArCWlmICh0aW1fcmVhY2gpIHsKPiArCQlza2IgPSBpZWVlODAyMTFfZ2V0X2J1 ZmZlcmVkX2JjKGV2aWYtPmVwdWItPmh3LCB2aWYpOwo+ICsJCXdoaWxlIChza2IpIHsKPiArCQkJ c2lwX3R4X2RhdGFfcGt0X2VucXVldWUoZXZpZi0+ZXB1Yiwgc2tiKTsKPiArCQkJc2tiID0gaWVl ZTgwMjExX2dldF9idWZmZXJlZF9iYyhldmlmLT5lcHViLT5odywgdmlmKTsKPiArCQl9Cj4gKwl9 Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGluaXRfYmVhY29uX3RpbWVyKHN0cnVjdCBpZWVlODAy MTFfdmlmICp2aWYpCj4gK3sKPiArCXN0cnVjdCBlc3BfdmlmICpldmlmID0gKHN0cnVjdCBlc3Bf dmlmICopdmlmLT5kcnZfcHJpdjsKPiArCj4gKwliZWFjb25fdGltX2luaXQoKTsKPiArCXNldHVw X3RpbWVyKCZldmlmLT5iZWFjb25fdGltZXIsIGRydl9oYW5kbGVfYmVhY29uLCAodW5zaWduZWQg bG9uZyl2aWYpOwkvL1RCRCwgbm90IGluaXQgaGVyZS4uLgo+ICsJY3ljbGVfYmVhY29uX2NvdW50 ID0gMTsKPiArCWluaXRfamlmZmllcyA9IGppZmZpZXM7Cj4gKwlldmlmLT5iZWFjb25fdGltZXIu ZXhwaXJlcyA9IGluaXRfamlmZmllcyArCj4gKwkJbXNlY3NfdG9famlmZmllcyhjeWNsZV9iZWFj b25fY291bnQgKiB2aWYtPmJzc19jb25mLmJlYWNvbl9pbnQgKgo+ICsJCQkJIDEwMjQgLyAxMDAw KTsKPiArCWFkZF90aW1lcigmZXZpZi0+YmVhY29uX3RpbWVyKTsKPiArfQo+ICsKPiArLyoKPiAr ICAgSGFuZGxlciBmb3IgY29uZmlndXJhdGlvbiByZXF1ZXN0cy4gSUVFRSA4MDIuMTEgY29kZSBj YWxscyB0aGlzCj4gKyAgIDI5OTggICogICAgICBmdW5jdGlvbiB0byBjaGFuZ2UgaGFyZHdhcmUg Y29uZmlndXJhdGlvbiwgZS5nLiwgY2hhbm5lbC4KPiArICAgMjk5OSAgKiAgICAgIFRoaXMgZnVu Y3Rpb24gc2hvdWxkIG5ldmVyIGZhaWwgYnV0IHJldHVybnMgYSBuZWdhdGl2ZSBlcnJvciBjb2Rl Cj4gKyAgIDMwMDAgICogICAgICBpZiBpdCBkb2VzLiBUaGUgY2FsbGJhY2sgY2FuIHNsZWVwLgo+ ICsgICAqLwo+ICtzdGF0aWMgaW50IGVzcF9vcF9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAq aHcsIHUzMiBjaGFuZ2VkKQo+ICt7Cj4gKwlzdHJ1Y3QgZXNwX3B1YiAqZXB1YiA9IChzdHJ1Y3Qg ZXNwX3B1YiAqKWh3LT5wcml2Owo+ICsKPiArCWlmIChjaGFuZ2VkICYgKElFRUU4MDIxMV9DT05G X0NIQU5HRV9DSEFOTkVMIHwKPiArCQkgICAgICAgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0lETEUp KQo+ICsJCXNpcF9zZW5kX2NvbmZpZyhlcHViLCAmaHctPmNvbmYpOwo+ICsKPiArCXJldHVybiAw Owo+ICt9Cj4gKwo+ICsvKgo+ICtIYW5kbGVyIGZvciBjb25maWd1cmF0aW9uIHJlcXVlc3RzIHJl bGF0ZWQgdG8gQlNTCj4gKzMwMDMgICogICAgICBwYXJhbWV0ZXJzIHRoYXQgbWF5IHZhcnkgZHVy aW5nIEJTUydzIGxpZmVzcGFuLCBhbmQgbWF5IGFmZmVjdCBsb3cKPiArMzAwNCAgKiAgICAgIGxl dmVsIGRyaXZlciAoZS5nLiBhc3NvYy9kaXNhc3NvYyBzdGF0dXMsIGVycCBwYXJhbWV0ZXJzKS4K PiArMzAwNSAgKiAgICAgIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSB1c2VkIGlmIG5vIEJT UyBoYXMgYmVlbiBzZXQsIHVubGVzcwo+ICszMDA2ICAqICAgICAgZm9yIGFzc29jaWF0aW9uIGlu ZGljYXRpb24uIFRoZSBAY2hhbmdlZCBwYXJhbWV0ZXIgaW5kaWNhdGVzIHdoaWNoCj4gKzMwMDcg ICogICAgICBvZiB0aGUgYnNzIHBhcmFtZXRlcnMgaGFzIGNoYW5nZWQgd2hlbiBhIGNhbGwgaXMg bWFkZS4gVGhlIGNhbGxiYWNrCj4gKzMwMDggICogICAgICBjYW4gc2xlZXAuCj4gKyAgICovCj4g K3N0YXRpYyB2b2lkIGVzcF9vcF9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcg Kmh3LAo+ICsJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCj4gKwkJCQkgICAgc3Ry dWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbywKPiArCQkJCSAgICB1MzIgY2hhbmdlZCkKPiAr ewo+ICsJc3RydWN0IGVzcF9wdWIgKmVwdWIgPSAoc3RydWN0IGVzcF9wdWIgKilody0+cHJpdjsK PiArCXN0cnVjdCBlc3BfdmlmICpldmlmID0gKHN0cnVjdCBlc3BfdmlmICopdmlmLT5kcnZfcHJp djsKPiArCXU4ICpic3NpZCA9ICh1OCAqKWluZm8tPmJzc2lkOwo+ICsJYm9vbCBhc3NvYyA9IGlu Zm8tPmFzc29jOwo+ICsKPiArCS8vIGllZWU4MDIxMV9ic3NfY29uZihpbmNsdWRlL25ldC9tYWM4 MDIxMS5oKSBpcyBpbmNsdWRlZCBpbiBpZWVlODAyMTFfc3ViX2lmX2RhdGEobmV0L21hYzgwMjEx L2llZWU4MDIxMV9pLmgpICwgZG9lcyBic3NpZD1pZWVlODAyMTFfaWZfYXAncyBzc2lkID8KPiAr Cj4gKwlpZiAodmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKPiArCQlpZiAo Y2hhbmdlZCAmIEJTU19DSEFOR0VEX0JTU0lEIHx8Cj4gKwkJICAgICgoY2hhbmdlZCAmIEJTU19D SEFOR0VEX0FTU09DKSAmJiBhc3NvYykpIHsKPiArCQkJZXZpZi0+YmVhY29uX2ludGVydmFsID0g aW5mby0+YWlkOwo+ICsJCQltZW1jcHkoZXB1Yi0+d2wuYnNzaWQsIGJzc2lkLCBFVEhfQUxFTik7 Cj4gKwkJCXNpcF9zZW5kX2Jzc19pbmZvX3VwZGF0ZShlcHViLCBldmlmLCBic3NpZCwgYXNzb2Mp Owo+ICsJCX0gZWxzZSBpZiAoKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9BU1NPQykgJiYgIWFzc29j KSB7Cj4gKwkJCWV2aWYtPmJlYWNvbl9pbnRlcnZhbCA9IDA7Cj4gKwkJCW1lbXNldChlcHViLT53 bC5ic3NpZCwgMCwgRVRIX0FMRU4pOwo+ICsJCQlzaXBfc2VuZF9ic3NfaW5mb191cGRhdGUoZXB1 YiwgZXZpZiwgYnNzaWQsIGFzc29jKTsKPiArCQl9Cj4gKwl9IGVsc2UgaWYgKHZpZi0+dHlwZSA9 PSBOTDgwMjExX0lGVFlQRV9BUCkgewo+ICsJCWlmICghKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9C RUFDT05fRU5BQkxFRCkgJiYKPiArCQkgICAgIShjaGFuZ2VkICYgQlNTX0NIQU5HRURfQkVBQ09O X0lOVCkpCj4gKwkJCXJldHVybjsKPiArCj4gKwkJaWYgKGluZm8tPmVuYWJsZV9iZWFjb24gJiYg IWV2aWYtPmFwX3VwKSB7Cj4gKwkJCWV2aWYtPmJlYWNvbl9pbnRlcnZhbCA9IGluZm8tPmJlYWNv bl9pbnQ7Cj4gKwkJCWluaXRfYmVhY29uX3RpbWVyKHZpZik7Cj4gKwkJCXNpcF9zZW5kX2Jzc19p bmZvX3VwZGF0ZShlcHViLCBldmlmLCBic3NpZCwgMik7Cj4gKwkJCWV2aWYtPmFwX3VwID0gdHJ1 ZTsKPiArCQl9IGVsc2UgaWYgKCFpbmZvLT5lbmFibGVfYmVhY29uICYmIGV2aWYtPmFwX3VwICYm Cj4gKwkJCSAgICEoaHctPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9PRkZDSEFOTkVMKSkg ewo+ICsJCQlldmlmLT5iZWFjb25faW50ZXJ2YWwgPSAwOwo+ICsJCQlkZWxfdGltZXJfc3luYygm ZXZpZi0+YmVhY29uX3RpbWVyKTsKPiArCQkJc2lwX3NlbmRfYnNzX2luZm9fdXBkYXRlKGVwdWIs IGV2aWYsIGJzc2lkLCAyKTsKPiArCQkJZXZpZi0+YXBfdXAgPSBmYWxzZTsKPiArCQl9Cj4gKwl9 Cj4gK30KPiArCj4gKy8qCj4gKyAgIENvbmZpZ3VyZSB0aGUgZGV2aWNlJ3MgUlggZmlsdGVyLgo+ ICsgICAzMDE1ICAqICAgICAgU2VlIHRoZSBzZWN0aW9uICJGcmFtZSBmaWx0ZXJpbmciIGZvciBt b3JlIGluZm9ybWF0aW9uLgo+ICsgICAzMDE2ICAqICAgICAgVGhpcyBjYWxsYmFjayBtdXN0IGJl IGltcGxlbWVudGVkIGFuZCBjYW4gc2xlZXAuCj4gKyAqLwo+ICtzdGF0aWMgdm9pZCBlc3Bfb3Bf Y29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKPiArCQkJCSAgICB1bnNp Z25lZCBpbnQgY2hhbmdlZF9mbGFncywKPiArCQkJCSAgICB1bnNpZ25lZCBpbnQgKnRvdGFsX2Zs YWdzLCB1NjQgbXVsdGljYXN0KQo+ICt7Cj4gKwlzdHJ1Y3QgZXNwX3B1YiAqZXB1YiA9IChzdHJ1 Y3QgZXNwX3B1YiAqKWh3LT5wcml2Owo+ICsKPiArCWVwdWItPnJ4X2ZpbHRlciA9IDA7Cj4gKwo+ ICsJaWYgKCp0b3RhbF9mbGFncyAmIEZJRl9BTExNVUxUSSkKPiArCQllcHViLT5yeF9maWx0ZXIg fD0gRklGX0FMTE1VTFRJOwo+ICsKPiArCSp0b3RhbF9mbGFncyA9IGVwdWItPnJ4X2ZpbHRlcjsK PiArfQo+ICsKPiArc3RhdGljIGJvb2wgaXNfY2lwaGVyX3N1aXRlX3dlcCh1MzIgY2lwaGVyKQo+ ICt7Cj4gKwlyZXR1cm4gKGNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MCkgfHwKPiAr CQkoY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNCk7Cj4gK30KPiArCj4gKy8qCj4g KyAgIFNlZSB0aGUgc2VjdGlvbiAiSGFyZHdhcmUgY3J5cHRvIGFjY2VsZXJhdGlvbiIKPiArICAg MzAyOSAgKiAgICAgIFRoaXMgY2FsbGJhY2sgaXMgb25seSBjYWxsZWQgYmV0d2VlbiBhZGRfaW50 ZXJmYWNlIGFuZAo+ICsgICAzMDMwICAqICAgICAgcmVtb3ZlX2ludGVyZmFjZSBjYWxscywgaS5l LiB3aGlsZSB0aGUgZ2l2ZW4gdmlydHVhbCBpbnRlcmZhY2UKPiArICAgMzAzMSAgKiAgICAgIGlz IGVuYWJsZWQuCj4gKyAgIDMwMzIgICogICAgICBSZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3IgY29k ZSBpZiB0aGUga2V5IGNhbid0IGJlIGFkZGVkLgo+ICsgICAzMDMzICAqICAgICAgVGhlIGNhbGxi YWNrIGNhbiBzbGVlcC4KPiArICovCj4gK3N0YXRpYyBpbnQgZXNwX29wX3NldF9rZXkoc3RydWN0 IGllZWU4MDIxMV9odyAqaHcsIGVudW0gc2V0X2tleV9jbWQgY21kLAo+ICsJCQkgIHN0cnVjdCBp ZWVlODAyMTFfdmlmICp2aWYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCj4gKwkJCSAgc3Ry dWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KQo+ICt7Cj4gKwlzdHJ1Y3QgZXNwX3B1YiAqZXB1 YiA9IChzdHJ1Y3QgZXNwX3B1YiAqKWh3LT5wcml2Owo+ICsJc3RydWN0IGVzcF92aWYgKmV2aWYg PSAoc3RydWN0IGVzcF92aWYgKil2aWYtPmRydl9wcml2Owo+ICsJc3RydWN0IGVzcF9od19pZHhf bWFwICptYXA7Cj4gKwlhdG9taWNfdCAqY250MSwgKmNudDI7Cj4gKwl1OCBpLCBpZmlkeCA9IGV2 aWYtPmluZGV4LCBpc3ZhbGlkLCBpbmRleDsKPiArCXU4ICpwZWVyX2FkZHI7Cj4gKwlpbnQgcmV0 LCBjb3VudGVyOwo+ICsKPiArCWtleS0+ZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVS QVRFX0lWOwo+ICsKPiArCWlmIChzdGEgJiYgbWVtY21wKHN0YS0+YWRkciwgZXB1Yi0+d2wuYnNz aWQsIEVUSF9BTEVOKSkKPiArCQlwZWVyX2FkZHIgPSBzdGEtPmFkZHI7Cj4gKwllbHNlCj4gKwkJ cGVlcl9hZGRyID0gZXB1Yi0+d2wuYnNzaWQ7Cj4gKwo+ICsJaXN2YWxpZCA9ICEhKGNtZCA9PSBT RVRfS0VZKTsKPiArCj4gKwlpZiAoa2V5LT5mbGFncyAmIElFRUU4MDIxMV9LRVlfRkxBR19QQUlS V0lTRSB8fAo+ICsJICAgIGlzX2NpcGhlcl9zdWl0ZV93ZXAoa2V5LT5jaXBoZXIpKQo+ICsJCW1h cCA9IGVwdWItPmxvd19tYXBbaWZpZHhdOwo+ICsJZWxzZQo+ICsJCW1hcCA9IGVwdWItPmhpX21h cDsKPiArCj4gKwlpZiAoaXN2YWxpZCkgewo+ICsJCWlmIChrZXktPmZsYWdzICYgSUVFRTgwMjEx X0tFWV9GTEFHX1BBSVJXSVNFIHx8Cj4gKwkJICAgIGlzX2NpcGhlcl9zdWl0ZV93ZXAoa2V5LT5j aXBoZXIpKQo+ICsJCQljb3VudGVyID0gMjsKPiArCQllbHNlCj4gKwkJCWNvdW50ZXIgPSAxOTsK PiArCj4gKwkJZm9yIChpID0gMDsgaSA8IGNvdW50ZXI7IGkrKykgewo+ICsJCQlpZiAobWFwW2ld LmZsYWcpCj4gKwkJCQljb250aW51ZTsKPiArCj4gKwkJCW1hcFtpXS5mbGFnID0gMTsKPiArCQkJ bWVtY3B5KG1hcFtpXS5tYWMsIHBlZXJfYWRkciwgRVRIX0FMRU4pOwo+ICsJCQlpZiAoa2V5LT5m bGFncyAmIElFRUU4MDIxMV9LRVlfRkxBR19QQUlSV0lTRSB8fAo+ICsJCQkgICAgaXNfY2lwaGVy X3N1aXRlX3dlcChrZXktPmNpcGhlcikpCj4gKwkJCQlrZXktPmh3X2tleV9pZHggPSBpICsgNjsK PiArCQkJZWxzZQo+ICsJCQkJa2V5LT5od19rZXlfaWR4ID0gaSArIGlmaWR4ICogMiArIDI7Cj4g KwkJCWJyZWFrOwo+ICsJCX0KPiArCX0gZWxzZSB7Cj4gKwkJbWFwW2luZGV4XS5mbGFnID0gMDsK PiArCQltZW1zZXQobWFwW2luZGV4XS5tYWMsIDAsIEVUSF9BTEVOKTsKPiArCj4gKwkJaWYgKGtl eS0+ZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfUEFJUldJU0UgfHwKPiArCQkgICAgaXNfY2lw aGVyX3N1aXRlX3dlcChrZXktPmNpcGhlcikpCj4gKwkJCWluZGV4ID0ga2V5LT5od19rZXlfaWR4 IC0gNjsKPiArCQllbHNlCj4gKwkJCWluZGV4ID0ga2V5LT5od19rZXlfaWR4IC0gMiAtIGlmaWR4 ICogMjsKPiArCX0KPiArCj4gKwlpZiAoa2V5LT5od19rZXlfaWR4ID49IDYpIHsKPiArCQljbnQx ID0gJmVwdWItPndsLnB0a19jbnQ7Cj4gKwkJY250MiA9ICZlcHViLT53bC5ndGtfY250Owo+ICsJ fSBlbHNlIHsKPiArCQljbnQyID0gJmVwdWItPndsLnB0a19jbnQ7Cj4gKwkJY250MSA9ICZlcHVi LT53bC5ndGtfY250Owo+ICsJfQo+ICsKPiArCS8qc2VuZCBzdWJfc2NhbiB0YXNrIHRvIHRhcmdl dCAqLwo+ICsJaWYgKGlzdmFsaWQpCj4gKwkJYXRvbWljX2luYyhjbnQxKTsKPiArCWVsc2UKPiAr CQlhdG9taWNfZGVjKGNudDEpOwo+ICsKPiArCWlmIChpc19jaXBoZXJfc3VpdGVfd2VwKGtleS0+ Y2lwaGVyKSkgewo+ICsJCWlmIChpc3ZhbGlkKQo+ICsJCQlhdG9taWNfaW5jKGNudDIpOwo+ICsJ CWVsc2UKPiArCQkJYXRvbWljX2RlYyhjbnQyKTsKPiArCX0KPiArCj4gKwlyZXQgPSBzaXBfc2Vu ZF9zZXRrZXkoZXB1YiwgaWZpZHgsIHBlZXJfYWRkciwga2V5LCBpc3ZhbGlkKTsKPiArCWlmIChy ZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlpZiAoa2V5LT5jaXBoZXIgPT0gV0xBTl9DSVBI RVJfU1VJVEVfVEtJUCAmJiAhcmV0KQo+ICsJCWF0b21pY19zZXQoJmVwdWItPndsLnRraXBfa2V5 X3NldCwgMSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3ZvaWQgaHdfc2Nhbl9kb25l KHN0cnVjdCBlc3BfcHViICplcHViLCBib29sIGFib3J0ZWQpCj4gK3sKPiArCXN0cnVjdCBjZmc4 MDIxMV9zY2FuX2luZm8gaW5mbyA9IHsKPiArCQkuYWJvcnRlZCA9IGFib3J0ZWQsCj4gKwl9Owo+ ICsKPiArCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmZXB1Yi0+c2Nhbl90aW1lb3V0X3dvcmsp Owo+ICsKPiArCUVTU0VSVChlcHViLT53bC5zY2FuX3JlcSk7Cj4gKwo+ICsJaWVlZTgwMjExX3Nj YW5fY29tcGxldGVkKGVwdWItPmh3LCAmaW5mbyk7Cj4gKwo+ICsJaWYgKHRlc3RfYW5kX2NsZWFy X2JpdChFU1BfV0xfRkxBR19TVE9QX1RYUSwgJmVwdWItPndsLmZsYWdzKSkKPiArCQlzaXBfdHJp Z2dlcl90eHFfcHJvY2VzcyhlcHViLT5zaXApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBod19z Y2FuX3RpbWVvdXRfcmVwb3J0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKPiArewo+ICsJc3Ry dWN0IGVzcF9wdWIgKmVwdWIgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGVzcF9wdWIsCj4g KwkJCQkJICAgIHNjYW5fdGltZW91dF93b3JrLndvcmspOwo+ICsJYm9vbCBhYm9ydGVkOwo+ICsJ c3RydWN0IGNmZzgwMjExX3NjYW5faW5mbyBpbmZvID0ge307Cj4gKwo+ICsJaWYgKHRlc3RfYW5k X2NsZWFyX2JpdChFU1BfV0xfRkxBR19TVE9QX1RYUSwgJmVwdWItPndsLmZsYWdzKSkKPiArCQlz aXBfdHJpZ2dlcl90eHFfcHJvY2VzcyhlcHViLT5zaXApOwo+ICsJLypjaGVjayBpZiBub3JtYWxs eSBjb21wbGV0ZSBvciBhYm9ydGVkIGxpa2UgdGltZW91dC9odyBlcnJvciAqLwo+ICsJYWJvcnRl ZCA9IChlcHViLT53bC5zY2FuX3JlcSAhPSAwKTsKPiArCj4gKwlpZiAoYWJvcnRlZCkKPiArCQll cHViLT53bC5zY2FuX3JlcSA9IE5VTEw7Cj4gKwo+ICsJaW5mby5hYm9ydGVkID0gYWJvcnRlZDsK PiArCj4gKwlpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQoZXB1Yi0+aHcsICZpbmZvKTsKPiArfQo+ ICsKPiArLyoKPiArICAgQ29uZmlndXJhdGlvbiBvZiBSVFMgdGhyZXNob2xkIChpZiBkZXZpY2Ug bmVlZHMgaXQpCj4gKyAgIDMxMDYgICogICAgICBUaGUgY2FsbGJhY2sgY2FuIHNsZWVwLgo+ICsg ICAqLwo+ICtzdGF0aWMgaW50IGVzcF9vcF9zZXRfcnRzX3RocmVzaG9sZChzdHJ1Y3QgaWVlZTgw MjExX2h3ICpodywgdTMyIHZhbHVlKQo+ICt7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3Rh dGljIGludCBlc3Bfbm9kZV9hdHRhY2goc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGlmaWR4 LAo+ICsJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQo+ICt7Cj4gKwlzdHJ1Y3QgZXNw X3B1YiAqZXB1YiA9IChzdHJ1Y3QgZXNwX3B1YiAqKWh3LT5wcml2Owo+ICsJc3RydWN0IGVzcF9u b2RlICpub2RlOwo+ICsJc3RydWN0IGVzcF90eF90aWQgKnRpZDsKPiArCXU4IHRpZG5vID0gMDsK PiArCWludCBpOwo+ICsKPiArCXNwaW5fbG9ja19iaCgmZXB1Yi0+dHhfYW1wZHVfbG9jayk7Cj4g Kwo+ICsJLyogZmZ6KHgpIG5lZWRzIGF0IGxlYXN0IG9uZSB6ZXJvIG9yIHJlc3VsdHMgaW4gdW5k ZWZpbmVkIGJlaGF2aW91ci4gKi8KPiArCWlmICgofmVwdWItPmVub2Rlc19tYXApID09IDApCj4g KwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJaSA9IGZmeihlcHViLT5lbm9kZXNfbWFwKTsKPiAr Cj4gKwlpZiAoaHdlaWdodDMyKGVwdWItPmVub2Rlc19tYXBzW2lmaWR4XSkgPj0gRVNQX1BVQl9N QVhfU1RBIHx8Cj4gKwkgICAgaSA+IEVTUF9QVUJfTUFYX1NUQSkgewo+ICsJCWkgPSAtMTsKPiAr CQlnb3RvIG91dDsKPiArCX0KPiArCj4gKwllcHViLT5lbm9kZXNfbWFwIHw9IEJJVChpKTsKPiAr CWVwdWItPmVub2Rlc19tYXBzW2lmaWR4XSB8PSBCSVQoaSk7Cj4gKwlub2RlID0gKHN0cnVjdCBl c3Bfbm9kZSAqKXN0YS0+ZHJ2X3ByaXY7Cj4gKwllcHViLT5lbm9kZXNbaV0gPSBub2RlOwo+ICsJ bm9kZS0+c3RhID0gc3RhOwo+ICsJbm9kZS0+aWZpZHggPSBpZmlkeDsKPiArCW5vZGUtPmluZGV4 ID0gaTsKPiArCj4gKwl3aGlsZSAodGlkbm8gPCBXTUVfTlVNX1RJRCkgewo+ICsJCXRpZCA9ICZu b2RlLT50aWRbdGlkbm9dOwo+ICsJCXRpZC0+c3NuID0gMDsKPiArCQl0aWQtPmNudCA9IDA7Cj4g KwkJdGlkLT5zdGF0ZSA9IEVTUF9USURfU1RBVEVfSU5JVDsKPiArCQl0aWRubysrOwo+ICsJfQo+ ICsKPiArb3V0Ogo+ICsJc3Bpbl91bmxvY2tfYmgoJmVwdWItPnR4X2FtcGR1X2xvY2spOwo+ICsK PiArCXJldHVybiBpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGVzcF9ub2RlX2RldGFjaChzdHJ1 Y3QgaWVlZTgwMjExX2h3ICpodywgdTggaWZpZHgsCj4gKwkJCSAgIHN0cnVjdCBpZWVlODAyMTFf c3RhICpzdGEpCj4gK3sKPiArCXN0cnVjdCBlc3BfcHViICplcHViID0gKHN0cnVjdCBlc3BfcHVi ICopaHctPnByaXY7Cj4gKwl1MzIgbWFwOwo+ICsJaW50IGk7Cj4gKwo+ICsJc3Bpbl9sb2NrX2Jo KCZlcHViLT50eF9hbXBkdV9sb2NrKTsKPiArCj4gKwltYXAgPSBlcHViLT5lbm9kZXNfbWFwc1tp ZmlkeF07Cj4gKwo+ICsJd2hpbGUgKG1hcCkgewo+ICsJCWkgPSBmZnMobWFwKSAtIDE7Cj4gKwkJ aWYgKGVwdWItPmVub2Rlc1tpXS0+c3RhID09IHN0YSkgewo+ICsJCQllcHViLT5lbm9kZXNbaV0t PnN0YSA9IE5VTEw7Cj4gKwkJCWVwdWItPmVub2Rlc1tpXSA9IE5VTEw7Cj4gKwkJCWVwdWItPmVu b2Rlc19tYXAgJj0gfkJJVChpKTsKPiArCQkJZXB1Yi0+ZW5vZGVzX21hcHNbaWZpZHhdICY9IH5C SVQoaSk7Cj4gKwo+ICsJCQlnb3RvIG91dDsKPiArCQl9Cj4gKwo+ICsJCW1hcCAmPSB+QklUKGkp Owo+ICsJfQo+ICsKPiArCWkgPSAtMTsKPiArCj4gK291dDoKPiArCXNwaW5fdW5sb2NrX2JoKCZl cHViLT50eF9hbXBkdV9sb2NrKTsKPiArCj4gKwlyZXR1cm4gaTsKPiArfQo+ICsKPiArc3RydWN0 IGVzcF9ub2RlICplc3BfZ2V0X25vZGVfYnlfYWRkcihzdHJ1Y3QgZXNwX3B1YiAqZXB1YiwgY29u c3QgdTggKmFkZHIpCj4gK3sKPiArCXN0cnVjdCBlc3Bfbm9kZSAqbm9kZSA9IE5VTEw7Cj4gKwlp bnQgaTsKPiArCXUzMiBtYXA7Cj4gKwo+ICsJaWYgKCFhZGRyKQo+ICsJCXJldHVybiBOVUxMOwo+ ICsKPiArCXNwaW5fbG9ja19iaCgmZXB1Yi0+dHhfYW1wZHVfbG9jayk7Cj4gKwltYXAgPSBlcHVi LT5lbm9kZXNfbWFwOwo+ICsKPiArCXdoaWxlIChtYXApIHsKPiArCQlpID0gZmZzKG1hcCkgLSAx Owo+ICsKPiArCQlpZiAoIW1lbWNtcChlcHViLT5lbm9kZXNbaV0tPnN0YS0+YWRkciwgYWRkciwg RVRIX0FMRU4pKSB7Cj4gKwkJCW5vZGUgPSBlcHViLT5lbm9kZXNbaV07Cj4gKwkJCWdvdG8gb3V0 Owo+ICsJCX0KPiArCj4gKwkJbWFwICY9IH5CSVQoaSk7Cj4gKwl9Cj4gKwo+ICtvdXQ6Cj4gKwlz cGluX3VubG9ja19iaCgmZXB1Yi0+dHhfYW1wZHVfbG9jayk7Cj4gKwo+ICsJcmV0dXJuIG5vZGU7 Cj4gK30KPiArCj4gK2ludCBlc3BfZ2V0X2VtcHR5X3J4YW1wZHUoc3RydWN0IGVzcF9wdWIgKmVw dWIsIGNvbnN0IHU4ICphZGRyLCB1OCB0aWQpCj4gK3sKPiArCWludCBpbmRleDsKPiArCj4gKwlp ZiAoIWFkZHIpCj4gKwkJcmV0dXJuIC0xOwo+ICsKPiArCXNwaW5fbG9ja19iaCgmZXB1Yi0+cnhf YW1wZHVfbG9jayk7Cj4gKwo+ICsJaW5kZXggPSBmZnooZXB1Yi0+cnhhbXBkdV9tYXApOwo+ICsK PiArCWlmIChpbmRleCA+PSBFU1BfUFVCX01BWF9SWEFNUERVKSB7Cj4gKwkJaW5kZXggPSAtMTsK PiArCQlnb3RvIG91dDsKPiArCX0KPiArCj4gKwllcHViLT5yeGFtcGR1X21hcCB8PSBCSVQoaW5k ZXgpOwo+ICsJZXB1Yi0+cnhhbXBkdV9ub2RlW2luZGV4XSA9IGVzcF9nZXRfbm9kZV9ieV9hZGRy KGVwdWIsIGFkZHIpOwo+ICsJZXB1Yi0+cnhhbXBkdV90aWRbaW5kZXhdID0gdGlkOwo+ICsKPiAr b3V0Ogo+ICsJc3Bpbl91bmxvY2tfYmgoJmVwdWItPnJ4X2FtcGR1X2xvY2spOwo+ICsKPiArCXJl dHVybiBpbmRleDsKPiArfQo+ICsKPiAraW50IGVzcF9nZXRfZXhpc3RfcnhhbXBkdShzdHJ1Y3Qg ZXNwX3B1YiAqZXB1YiwgY29uc3QgdTggKmFkZHIsIHU4IHRpZCkKPiArewo+ICsJdTggbWFwOwo+ ICsJaW50IGluZGV4Owo+ICsKPiArCWlmICghYWRkcikKPiArCQlyZXR1cm4gLTE7Cj4gKwo+ICsJ c3Bpbl9sb2NrX2JoKCZlcHViLT5yeF9hbXBkdV9sb2NrKTsKPiArCW1hcCA9IGVwdWItPnJ4YW1w ZHVfbWFwOwo+ICsKPiArCXdoaWxlIChtYXApIHsKPiArCQlpbmRleCA9IGZmcyhtYXApIC0gMTsK PiArCj4gKwkJaWYgKGVwdWItPnJ4YW1wZHVfdGlkW2luZGV4XSA9PSB0aWQgJiYKPiArCQkgICAg IW1lbWNtcChlcHViLT5yeGFtcGR1X25vZGVbaW5kZXhdLT5zdGEtPmFkZHIsIGFkZHIsCj4gKwkJ CSAgICBFVEhfQUxFTikpIHsKPiArCQkJZXB1Yi0+cnhhbXBkdV9tYXAgJj0gfkJJVChpbmRleCk7 Cj4gKwkJCWdvdG8gb3V0Owo+ICsJCX0KPiArCj4gKwkJbWFwICY9IH5CSVQoaW5kZXgpOwo+ICsJ fQo+ICsKPiArCWluZGV4ID0gLTE7Cj4gKwo+ICtvdXQ6Cj4gKwlzcGluX3VubG9ja19iaCgmZXB1 Yi0+cnhfYW1wZHVfbG9jayk7Cj4gKwlyZXR1cm4gaW5kZXg7Cj4gK30KPiArCj4gKy8qCj4gKyAg IE5vdGlmaWVzIGxvdyBsZXZlbCBkcml2ZXIgYWJvdXQgYWRkaXRpb24gb2YgYW4gYXNzb2NpYXRl ZCBzdGF0aW9uLAo+ICsgICAzMTA5ICAqICAgICAgQVAsIElCU1MvV0RTL21lc2ggcGVlciBldGMu IFRoaXMgY2FsbGJhY2sgY2FuIHNsZWVwLgo+ICsgICAqLwo+ICtzdGF0aWMgaW50IGVzcF9vcF9z dGFfYWRkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlm LAo+ICsJCQkgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCj4gK3sKPiArCXN0cnVjdCBlc3Bf cHViICplcHViID0gKHN0cnVjdCBlc3BfcHViICopaHctPnByaXY7Cj4gKwlzdHJ1Y3QgZXNwX3Zp ZiAqZXZpZiA9IChzdHJ1Y3QgZXNwX3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7Cj4gKwlpbnQgaW5kZXg7 Cj4gKwo+ICsJaW5kZXggPSBlc3Bfbm9kZV9hdHRhY2goaHcsIGV2aWYtPmluZGV4LCBzdGEpOwo+ ICsJaWYgKGluZGV4IDwgMCkKPiArCQlyZXR1cm4gaW5kZXg7Cj4gKwo+ICsJc2lwX3NlbmRfc2V0 X3N0YShlcHViLCBldmlmLT5pbmRleCwgMSwgc3RhLCB2aWYsICh1OClpbmRleCk7Cj4gKwo+ICsJ cmV0dXJuIDA7Cj4gK30KPiArCj4gKy8qCj4gKyBOb3RpZmllcyBsb3cgbGV2ZWwgZHJpdmVyIGFi b3V0IHJlbW92YWwgb2YgYW4gYXNzb2NpYXRlZAo+ICsgMzExMiAgKiAgICAgIHN0YXRpb24sIEFQ LCBJQlNTL1dEUy9tZXNoIHBlZXIgZXRjLiBOb3RlIHRoYXQgYWZ0ZXIgdGhlIGNhbGxiYWNrCj4g KyAzMTEzICAqICAgICAgcmV0dXJucyBpdCBpc24ndCBzYWZlIHRvIHVzZSB0aGUgcG9pbnRlciwg bm90IGV2ZW4gUkNVIHByb3RlY3RlZDsKPiArIDMxMTQgICogICAgICBubyBSQ1UgZ3JhY2UgcGVy aW9kIGlzIGd1YXJhbnRlZWQgYmV0d2VlbiByZXR1cm5pbmcgaGVyZSBhbmQgZnJlZWluZwo+ICsg MzExNSAgKiAgICAgIHRoZSBzdGF0aW9uLiBTZWUgQHN0YV9wcmVfcmN1X3JlbW92ZSBpZiBuZWVk ZWQuCj4gKyAzMTE2ICAqICAgICAgVGhpcyBjYWxsYmFjayBjYW4gc2xlZXAKPiArICovCj4gK3N0 YXRpYyBpbnQgZXNwX29wX3N0YV9yZW1vdmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVj dCBpZWVlODAyMTFfdmlmICp2aWYsCj4gKwkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0 YSkKPiArewo+ICsJc3RydWN0IGVzcF9wdWIgKmVwdWIgPSAoc3RydWN0IGVzcF9wdWIgKilody0+ cHJpdjsKPiArCXN0cnVjdCBlc3BfdmlmICpldmlmID0gKHN0cnVjdCBlc3BfdmlmICopdmlmLT5k cnZfcHJpdjsKPiArCWludCBpbmRleDsKPiArCj4gKwkvL3JlbW92ZSBhIGNvbm5lY3QgaW4gdGFy Z2V0Cj4gKwlpbmRleCA9IGVzcF9ub2RlX2RldGFjaChodywgZXZpZi0+aW5kZXgsIHN0YSk7CgpX aHkgZG8gd2UgdGhpbmsgImluZGV4IiBpcyBub3QgLTE/Cgo+ICsJc2lwX3NlbmRfc2V0X3N0YShl cHViLCBldmlmLT5pbmRleCwgMCwgc3RhLCB2aWYsICh1OClpbmRleCk7Cj4gKwo+ICsJcmV0dXJu IDA7Cj4gK30KPiArCj4gKy8qCj4gKyBOb3RpZmllcyBsb3cgbGV2ZWwgZHJpdmVyIGFib3V0IHBv d2VyIHN0YXRlIHRyYW5zaXRpb24gb2YgYW4KPiArIDMxMjQgICogICAgICBhc3NvY2lhdGVkIHN0 YXRpb24sIEFQLCAgSUJTUy9XRFMvbWVzaCBwZWVyIGV0Yy4gRm9yIGEgVklGIG9wZXJhdGluZwo+ ICsgMzEyNSAgKiAgICAgIGluIEFQIG1vZGUsIHRoaXMgY2FsbGJhY2sgd2lsbCBub3QgYmUgY2Fs bGVkIHdoZW4gdGhlIGZsYWcKPiArIDMxMjYgICogICAgICAlSUVFRTgwMjExX0hXX0FQX0xJTktf UFMgaXMgc2V0LiBNdXN0IGJlIGF0b21pYy4KPiArICovCj4gK3N0YXRpYyB2b2lkIGVzcF9vcF9z dGFfbm90aWZ5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAo+ICsJCQkgICAgICBzdHJ1Y3QgaWVl ZTgwMjExX3ZpZiAqdmlmLAo+ICsJCQkgICAgICBlbnVtIHN0YV9ub3RpZnlfY21kIGNtZCwKPiAr CQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKPiArewo+ICt9Cj4gKwo+ICsvKgo+ ICsgQ29uZmlndXJlIFRYIHF1ZXVlIHBhcmFtZXRlcnMgKEVEQ0YgKGFpZnMsIGN3X21pbiwgY3df bWF4KSwKPiArIDMxNjUgICogICAgICBidXJzdGluZykgZm9yIGEgaGFyZHdhcmUgVFggcXVldWUu Cj4gKyAzMTY2ICAqICAgICAgUmV0dXJucyBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVy ZS4KPiArIDMxNjcgICogICAgICBUaGUgY2FsbGJhY2sgY2FuIHNsZWVwLgo+ICsgKi8KPiArc3Rh dGljIGludCBlc3Bfb3BfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGll ZWU4MDIxMV92aWYgKnZpZiwKPiArCQkJICB1MTYgcXVldWUsCj4gKwkJCSAgY29uc3Qgc3RydWN0 IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtcykKPiArewo+ICsJc3RydWN0IGVzcF9w dWIgKmVwdWIgPSAoc3RydWN0IGVzcF9wdWIgKilody0+cHJpdjsKPiArCj4gKwlyZXR1cm4gc2lw X3NlbmRfd21tX3BhcmFtcyhlcHViLCBxdWV1ZSwgcGFyYW1zKTsKPiArfQo+ICsKPiArLyoKPiAr IEdldCB0aGUgY3VycmVudCBUU0YgdGltZXIgdmFsdWUgZnJvbSBmaXJtd2FyZS9oYXJkd2FyZS4g Q3VycmVudGx5LAo+ICsgMzE3MCAgKiAgICAgIHRoaXMgaXMgb25seSB1c2VkIGZvciBJQlNTIG1v ZGUgQlNTSUQgbWVyZ2luZyBhbmQgZGVidWdnaW5nLiBJcyBub3QgYQo+ICsgMzE3MSAgKiAgICAg IHJlcXVpcmVkIGZ1bmN0aW9uLgo+ICsgMzE3MiAgKiAgICAgIFRoZSBjYWxsYmFjayBjYW4gc2xl ZXAuCj4gKyAqLwo+ICtzdGF0aWMgdTY0IGVzcF9vcF9nZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFf aHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQo+ICt7Cj4gKwlyZXR1cm4gMDsKPiAr fQo+ICsKPiArLyoKPiArIFNldCB0aGUgVFNGIHRpbWVyIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUg aW4gdGhlIGZpcm13YXJlL2hhcmR3YXJlLgo+ICsgMzE3NSAgKiAgICAgIEN1cnJlbnRseSwgdGhp cyBpcyBvbmx5IHVzZWQgZm9yIElCU1MgbW9kZSBkZWJ1Z2dpbmcuIElzIG5vdCBhCj4gKyAzMTc2 ICAqICAgICAgcmVxdWlyZWQgZnVuY3Rpb24uCj4gKyAzMTc3ICAqICAgICAgVGhlIGNhbGxiYWNr IGNhbiBzbGVlcC4KPiArICovCj4gK3N0YXRpYyB2b2lkIGVzcF9vcF9zZXRfdHNmKHN0cnVjdCBp ZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAo+ICsJCQkgICB1NjQg dHNmKQo+ICt7Cj4gK30KPiArCj4gKy8qCj4gKyBSZXNldCB0aGUgVFNGIHRpbWVyIGFuZCBhbGxv dyBmaXJtd2FyZS9oYXJkd2FyZSB0byBzeW5jaHJvbml6ZQo+ICsgMzE4NiAgKiAgICAgIHdpdGgg b3RoZXIgU1RBcyBpbiB0aGUgSUJTUy4gVGhpcyBpcyBvbmx5IHVzZWQgaW4gSUJTUyBtb2RlLiBU aGlzCj4gKyAzMTg3ICAqICAgICAgZnVuY3Rpb24gaXMgb3B0aW9uYWwgaWYgdGhlIGZpcm13YXJl L2hhcmR3YXJlIHRha2VzIGZ1bGwgY2FyZSBvZgo+ICsgMzE4OCAgKiAgICAgIFRTRiBzeW5jaHJv bml6YXRpb24uCj4gKyAzMTg5ICAqICAgICAgVGhlIGNhbGxiYWNrIGNhbiBzbGVlcC4KPiArICov Cj4gK3N0YXRpYyB2b2lkIGVzcF9vcF9yZXNldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqaHcs IHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCj4gK3sKPiArfQo+ICsKPiArLyoKPiArIFBvbGwg cmZraWxsIGhhcmR3YXJlIHN0YXRlLiBJZiB5b3UgbmVlZCB0aGlzLCB5b3UgYWxzbwo+ICsgMzIy MCAgKiAgICAgIG5lZWQgdG8gc2V0IHdpcGh5LT5yZmtpbGxfcG9sbCB0byAldHJ1ZSBiZWZvcmUg cmVnaXN0cmF0aW9uLAo+ICsgMzIyMSAgKiAgICAgIGFuZCBuZWVkIHRvIGNhbGwgd2lwaHlfcmZr aWxsX3NldF9od19zdGF0ZSgpIGluIHRoZSBjYWxsYmFjay4KPiArIDMyMjIgICogICAgICBUaGUg Y2FsbGJhY2sgY2FuIHNsZWVwLgo+ICsgKi8KPiArc3RhdGljIHZvaWQgZXNwX29wX3Jma2lsbF9w b2xsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQo+ICt7Cj4gKwlzdHJ1Y3QgZXNwX3B1YiAqZXB1 YiA9IChzdHJ1Y3QgZXNwX3B1YiAqKWh3LT5wcml2Owo+ICsKPiArCXdpcGh5X3Jma2lsbF9zZXRf aHdfc3RhdGUoaHctPndpcGh5LCB0ZXN0X2JpdChFU1BfV0xfRkxBR19SRktJTEwsCj4gKwkJCQkJ CSAgICAgICZlcHViLT53bC5mbGFncykpOwo+ICt9Cj4gKwo+ICsjaWZkZWYgSFdfU0NBTgo+ICsv Kgo+ICsgQXNrIHRoZSBoYXJkd2FyZSB0byBzZXJ2aWNlIHRoZSBzY2FuIHJlcXVlc3QsIG5vIG5l ZWQgdG8gc3RhcnQKPiArIDMwNTEgICogICAgICB0aGUgc2NhbiBzdGF0ZSBtYWNoaW5lIGluIHN0 YWNrLiBUaGUgc2NhbiBtdXN0IGhvbm91ciB0aGUgY2hhbm5lbAo+ICsgMzA1MiAgKiAgICAgIGNv bmZpZ3VyYXRpb24gZG9uZSBieSB0aGUgcmVndWxhdG9yeSBhZ2VudCBpbiB0aGUgd2lwaHkncwo+ ICsgMzA1MyAgKiAgICAgIHJlZ2lzdGVyZWQgYmFuZHMuIFRoZSBoYXJkd2FyZSAob3IgdGhlIGRy aXZlcikgbmVlZHMgdG8gbWFrZSBzdXJlCj4gKyAzMDU0ICAqICAgICAgdGhhdCBwb3dlciBzYXZl IGlzIGRpc2FibGVkLgo+ICsgMzA1NSAgKiAgICAgIFRoZSBAcmVxIGllL2llX2xlbiBtZW1iZXJz IGFyZSByZXdyaXR0ZW4gYnkgbWFjODAyMTEgdG8gY29udGFpbiB0aGUKPiArIDMwNTYgICogICAg ICBlbnRpcmUgSUVzIGFmdGVyIHRoZSBTU0lELCBzbyB0aGF0IGRyaXZlcnMgbmVlZCBub3QgbG9v ayBhdCB0aGVzZQo+ICsgMzA1NyAgKiAgICAgIGF0IGFsbCBidXQganVzdCBzZW5kIHRoZW0gYWZ0 ZXIgdGhlIFNTSUQgLS0gbWFjODAyMTEgaW5jbHVkZXMgdGhlCj4gKyAzMDU4ICAqICAgICAgKGV4 dGVuZGVkKSBzdXBwb3J0ZWQgcmF0ZXMgYW5kIEhUIGluZm9ybWF0aW9uICh3aGVyZSBhcHBsaWNh YmxlKS4KPiArIDMwNTkgICogICAgICBXaGVuIHRoZSBzY2FuIGZpbmlzaGVzLCBpZWVlODAyMTFf c2Nhbl9jb21wbGV0ZWQoKSBtdXN0IGJlIGNhbGxlZDsKPiArIDMwNjAgICogICAgICBub3RlIHRo YXQgaXQgYWxzbyBtdXN0IGJlIGNhbGxlZCB3aGVuIHRoZSBzY2FuIGNhbm5vdCBmaW5pc2ggZHVl IHRvCj4gKyAzMDYxICAqICAgICAgYW55IGVycm9yIHVubGVzcyB0aGlzIGNhbGxiYWNrIHJldHVy bmVkIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KPiArIDMwNjIgICogICAgICBUaGUgY2FsbGJhY2sg Y2FuIHNsZWVwLgo+ICsgKi8KPiArc3RhdGljIGludCBlc3Bfb3BfaHdfc2NhbihzdHJ1Y3QgaWVl ZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKPiArCQkJICBzdHJ1Y3Qg Y2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXEpCj4gK3sKPiArCXN0cnVjdCBlc3BfcHViICplcHVi ID0gKHN0cnVjdCBlc3BfcHViICopaHctPnByaXY7Cj4gKwlzdHJ1Y3QgY2ZnODAyMTFfc3NpZCAq c3NpZDIgPSByZXEtPnNzaWRzICsgMTsKPiArCWludCBpLCByZXQ7Cj4gKwlib29sIHNjYW5fb2Z0 ZW47Cj4gKwo+ICsJLyogc2Nhbl9yZXF1ZXN0IGlzIGtlZXAgYWxsb2NhdGUgdW50aWwgc2Nhbl9k b25lLHJlY29yZCBpdAo+ICsJICogdG8gc3BsaXQgcmVxdWVzdCBpbnRvIG11bHRpIHNkaW9fY21k Cj4gKwkgKi8KPiArCWlmIChhdG9taWNfcmVhZCgmZXB1Yi0+d2wub2ZmKSkgewo+ICsJCWRldl9l cnIoZXB1Yi0+ZGV2LCAiaHdfc2NhbiBidXQgd2wgb2ZmXG4iKTsKPiArCQlyZXR1cm4gLUVQRVJN Owo+ICsJfQo+ICsKPiArCWlmIChyZXEtPm5fc3NpZHMgPiAxKQo+ICsJCWlmICgocmVxLT5zc2lk cy0+c3NpZF9sZW4gPiAwICYmIHNzaWQyLT5zc2lkX2xlbiA+IDApIHx8Cj4gKwkJICAgIHJlcS0+ bl9zc2lkcyA+IDIpIHsKPiArCQkJZGV2X2VycihlcHViLT5kZXYsICJjYW5ub3Qgc2NhbiB0d28g U1NJRHNcbiIpOwo+ICsJCQlyZXR1cm4gLUVJTlZBTDsKPiArCQl9Cj4gKwo+ICsJZXB1Yi0+d2wu c2Nhbl9yZXEgPSByZXE7Cj4gKwo+ICsJLyppbiBjb25uZWN0IHN0YXRlLCBzdXNwZW5kIHR4IGRh dGEgKi8KPiArCWlmIChlcHViLT5zaXAtPnN1cHBvcnRfYmdzY2FuICYmCj4gKwkgICAgdGVzdF9i aXQoRVNQX1dMX0ZMQUdfQ09OTkVDVCwgJmVwdWItPndsLmZsYWdzKSAmJiByZXEtPm5fY2hhbm5l bHMpIHsKPiArCQlzY2FuX29mdGVuID0gZXB1Yi0+c2Nhbl9wZXJtaXRfdmFsaWQgJiYKPiArCQkJ dGltZV9iZWZvcmUoamlmZmllcywgZXB1Yi0+c2Nhbl9wZXJtaXQpOwo+ICsJCWVwdWItPnNjYW5f cGVybWl0X3ZhbGlkID0gdHJ1ZTsKPiArCj4gKwkJaWYgKCFzY2FuX29mdGVuKSB7Cj4gKwkJCS8q IGVwdWItPnNjYW5fcGVybWl0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoOTAwKTsKPiAr CQkJICogIHNldF9iaXQoRVNQX1dMX0ZMQUdfU1RPUF9UWFEsICZlcHViLT53bC5mbGFncyk7Cj4g KwkJCSAqICBpZiAoYXRvbWljX3JlYWQoJmVwdWItPnR4cV9zdG9wcGVkKSA9PSBmYWxzZSkgewo+ ICsJCQkgKiAgYXRvbWljX3NldCgmZXB1Yi0+dHhxX3N0b3BwZWQsIHRydWUpOwo+ICsJCQkgKiAg aWVlZTgwMjExX3N0b3BfcXVldWVzKGh3KTsKPiArCQkJICogIH0KPiArCQkJICovCj4gKwkJfSBl bHNlIHsKPiArCQkJZGV2X2VycihlcHViLT5kZXYsICJzY2FuIHRvbyBvZnRlblxuIik7Cj4gKwkJ CXJldHVybiAtRUFDQ0VTOwo+ICsJCX0KPiArCX0gZWxzZSB7Cj4gKwkJc2Nhbl9vZnRlbiA9IGZh bHNlOwo+ICsJfQo+ICsKPiArCS8qc2VuZCBzdWJfc2NhbiB0YXNrIHRvIHRhcmdldCAqLwo+ICsJ cmV0ID0gc2lwX3NlbmRfc2NhbihlcHViKTsKPiArCWlmIChyZXQpIHsKPiArCQlkZXZfZXJyKGVw dWItPmRldiwgImZhaWxlZCB0byBzZW5kIHNjYW5fY21kOiAlZFxuIiwgcmV0KTsKPiArCQlyZXR1 cm4gcmV0Owo+ICsJfQo+ICsKPiArCWlmIChzY2FuX29mdGVuKQo+ICsJCXJldHVybiAwOwo+ICsK PiArCWVwdWItPnNjYW5fcGVybWl0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoOTAwKTsK PiArCXNldF9iaXQoRVNQX1dMX0ZMQUdfU1RPUF9UWFEsICZlcHViLT53bC5mbGFncyk7Cj4gKwlp ZiAoIWF0b21pY19yZWFkKCZlcHViLT50eHFfc3RvcHBlZCkpIHsKPiArCQlhdG9taWNfc2V0KCZl cHViLT50eHFfc3RvcHBlZCwgdHJ1ZSk7Cj4gKwkJaWVlZTgwMjExX3N0b3BfcXVldWVzKGh3KTsK PiArCX0KPiArCj4gKwkvKmZvcmNlIHNjYW4gY29tcGxldGUgaW4gY2FzZSB0YXJnZXQgZmFpbCB0 byByZXBvcnQgaW4gdGltZSAqLwo+ICsJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhodywg JmVwdWItPnNjYW5fdGltZW91dF93b3JrLAo+ICsJCQkJICAgICByZXEtPm5fY2hhbm5lbHMgKiBI WiAvIDQpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKgo+ICsgU3RhcnRzIGFuIG9m Zi1jaGFubmVsIHBlcmlvZCBvbiB0aGUgZ2l2ZW4gY2hhbm5lbCwgbXVzdAo+ICsgMzI1NSAgKiAg ICAgIGNhbGwgYmFjayB0byBpZWVlODAyMTFfcmVhZHlfb25fY2hhbm5lbCgpIHdoZW4gb24gdGhh dCBjaGFubmVsLiBOb3RlCj4gKyAzMjU2ICAqICAgICAgdGhhdCBub3JtYWwgY2hhbm5lbCB0cmFm ZmljIGlzIG5vdCBzdG9wcGVkIGFzIHRoaXMgaXMgaW50ZW5kZWQgZm9yIGh3Cj4gKyAzMjU3ICAq ICAgICAgb2ZmbG9hZC4gRnJhbWVzIHRvIHRyYW5zbWl0IG9uIHRoZSBvZmYtY2hhbm5lbCBjaGFu bmVsIGFyZSB0cmFuc21pdHRlZAo+ICsgMzI1OCAgKiAgICAgIG5vcm1hbGx5IGV4Y2VwdCBmb3Ig dGhlICVJRUVFODAyMTFfVFhfQ1RMX1RYX09GRkNIQU4gZmxhZy4gV2hlbiB0aGUKPiArIDMyNTkg ICogICAgICBkdXJhdGlvbiAod2hpY2ggd2lsbCBhbHdheXMgYmUgbm9uLXplcm8pIGV4cGlyZXMs IHRoZSBkcml2ZXIgbXVzdCBjYWxsCj4gKyAzMjYwICAqICAgICAgaWVlZTgwMjExX3JlbWFpbl9v bl9jaGFubmVsX2V4cGlyZWQoKS4KPiArIDMyNjEgICogICAgICBOb3RlIHRoYXQgdGhpcyBjYWxs YmFjayBtYXkgYmUgY2FsbGVkIHdoaWxlIHRoZSBkZXZpY2UgaXMgaW4gSURMRSBhbmQKPiArIDMy NjIgICogICAgICBtdXN0IGJlIGFjY2VwdGVkIGluIHRoaXMgY2FzZS4KPiArIDMyNjMgICogICAg ICBUaGlzIGNhbGxiYWNrIG1heSBzbGVlcC4KPiArICovCj4gK3N0YXRpYyBpbnQgZXNwX29wX3Jl bWFpbl9vbl9jaGFubmVsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAo+ICsJCQkJICAgIHN0cnVj dCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiwKPiArCQkJCSAgICBlbnVtIG5sODAyMTFfY2hhbm5l bF90eXBlIGNoYW5uZWxfdHlwZSwKPiArCQkJCSAgICBpbnQgZHVyYXRpb24pCj4gK3sKPiArCXN0 cnVjdCBlc3BfcHViICplcHViID0gKHN0cnVjdCBlc3BfcHViICopaHctPnByaXY7Cj4gKwo+ICsJ c2lwX3NlbmRfcm9jKGVwdWIsIGNoYW4tPmNlbnRlcl9mcmVxLCBkdXJhdGlvbik7Cj4gKwo+ICsJ cmV0dXJuIDA7Cj4gK30KPiArCj4gKy8qCj4gKyAzMjY0ICAqIEBjYW5jZWxfcmVtYWluX29uX2No YW5uZWw6IFJlcXVlc3RzIHRoYXQgYW4gb25nb2luZyBvZmYtY2hhbm5lbCBwZXJpb2QgaXMKPiAr IDMyNjUgICogICAgICBhYm9ydGVkIGJlZm9yZSBpdCBleHBpcmVzLiBUaGlzIGNhbGxiYWNrIG1h eSBzbGVlcC4KPiArICovCj4gK3N0YXRpYyBpbnQgZXNwX29wX2NhbmNlbF9yZW1haW5fb25fY2hh bm5lbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKPiArewo+ICsJc3RydWN0IGVzcF9wdWIgKmVw dWIgPSAoc3RydWN0IGVzcF9wdWIgKilody0+cHJpdjsKPiArCj4gKwllcHViLT5yb2NfZmxhZ3Mg PSAwOwkvLyB0byBkaXNhYmxlIHJvYyBzdGF0ZQo+ICsJc2lwX3NlbmRfcm9jKGVwdWIsIDAsIDAp Owo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKyNlbmRpZgo+ICsKPiArdm9pZCBlc3Bfcm9jZG9u ZV9wcm9jZXNzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2lwX2V2dF9yb2MgKnJl cG9ydCkKPiArewo+ICsJc3RydWN0IGVzcF9wdWIgKmVwdWIgPSAoc3RydWN0IGVzcF9wdWIgKilo dy0+cHJpdjsKPiArCj4gKwlpZiAocmVwb3J0LT5pc19vayAhPSAxKQo+ICsJCXJldHVybjsKPiAr Cj4gKwlpZiAocmVwb3J0LT5zdGF0ZSA9PSAxKSB7Cj4gKwkJZXB1Yi0+cm9jX2ZsYWdzID0gMTsJ Ly9mbGFncyBpbiByb2Mgc3RhdGUsIHRvIGZpeCBjaGFubmVsLCBub3QgY2hhbmdlCj4gKwkJaWVl ZTgwMjExX3JlYWR5X29uX2NoYW5uZWwoaHcpOwo+ICsJfSBlbHNlIGlmICghcmVwb3J0LT5zdGF0 ZSkgewo+ICsJCWVwdWItPnJvY19mbGFncyA9IDA7Cj4gKwkJaWVlZTgwMjExX3JlbWFpbl9vbl9j aGFubmVsX2V4cGlyZWQoaHcpOwo+ICsJfQo+ICt9Cj4gKwo+ICsvKgo+ICsgU2V0IGEgbWFzayBv ZiByYXRlcyB0byBiZSB1c2VkIGZvciByYXRlIGNvbnRyb2wgc2VsZWN0aW9uCj4gKyAzMjc1ICAq ICAgICAgd2hlbiB0cmFuc21pdHRpbmcgYSBmcmFtZS4gQ3VycmVudGx5IG9ubHkgbGVnYWN5IHJh dGVzIGFyZSBoYW5kbGVkLgo+ICsgMzI3NiAgKiAgICAgIFRoZSBjYWxsYmFjayBjYW4gc2xlZXAu Cj4gKyAqLwo+ICtzdGF0aWMgaW50IGVzcF9vcF9zZXRfYml0cmF0ZV9tYXNrKHN0cnVjdCBpZWVl ODAyMTFfaHcgKmh3LAo+ICsJCQkJICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKPiArCQkJ CSAgIGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9iaXRyYXRlX21hc2sgKm1hc2spCj4gK3sKPiArCXJl dHVybiAwOwo+ICt9Cj4gKwo+ICsvKgo+ICsgRmx1c2ggYWxsIHBlbmRpbmcgZnJhbWVzIGZyb20g dGhlIGhhcmR3YXJlIHF1ZXVlLCBtYWtpbmcgc3VyZQo+ICsgMzIzNSAgKiAgICAgIHRoYXQgdGhl IGhhcmR3YXJlIHF1ZXVlcyBhcmUgZW1wdHkuIFRoZSBAcXVldWVzIHBhcmFtZXRlciBpcyBhIGJp dG1hcAo+ICsgMzIzNiAgKiAgICAgIG9mIHF1ZXVlcyB0byBmbHVzaCwgd2hpY2ggaXMgdXNlZnVs IGlmIGRpZmZlcmVudCB2aXJ0dWFsIGludGVyZmFjZXMKPiArIDMyMzcgICogICAgICB1c2UgZGlm ZmVyZW50IGhhcmR3YXJlIHF1ZXVlczsgaXQgbWF5IGFsc28gaW5kaWNhdGUgYWxsIHF1ZXVlcy4K PiArIDMyMzggICogICAgICBJZiB0aGUgcGFyYW1ldGVyIEBkcm9wIGlzIHNldCB0byAldHJ1ZSwg cGVuZGluZyBmcmFtZXMgbWF5IGJlIGRyb3BwZWQuCj4gKyAzMjM5ICAqICAgICAgTm90ZSB0aGF0 IHZpZiBjYW4gYmUgTlVMTC4KPiArIDMyNDAgICogICAgICBUaGUgY2FsbGJhY2sgY2FuIHNsZWVw Lgo+ICsgKi8KPiArdm9pZCBlc3Bfb3BfZmx1c2goc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0 cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCj4gKwkJICB1MzIgcXVldWVzLCBib29sIGRyb3ApCj4g K3sKPiArCXN0cnVjdCBlc3BfcHViICplcHViID0gKHN0cnVjdCBlc3BfcHViICopaHctPnByaXY7 Cj4gKwl1bnNpZ25lZCBsb25nIHRpbWUgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxNSk7 Cj4gKwo+ICsJd2hpbGUgKGF0b21pY19yZWFkKCZlcHViLT5zaXAtPnR4X2RhdGFfcGt0X3F1ZXVl ZCkpIHsKPiArCQlpZiAoIXRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWUpKQo+ICsJCQlicmVhazsK PiArCj4gKwkJaWYgKCFzaWZfZ2V0X2F0ZV9jb25maWcoKSkKPiArCQkJaWVlZTgwMjExX3F1ZXVl X3dvcmsoZXB1Yi0+aHcsICZlcHViLT50eF93b3JrKTsKPiArCQllbHNlCj4gKwkJCXF1ZXVlX3dv cmsoZXB1Yi0+ZXNwX3drcSwgJmVwdWItPnR4X3dvcmspOwo+ICsJfQo+ICsKPiArCW1kZWxheSgx MCk7Cj4gK30KPiArCj4gKy8qCj4gKyBQZXJmb3JtIGEgY2VydGFpbiBBLU1QRFUgYWN0aW9uCj4g KyAzMTk4ICAqICAgICAgVGhlIFJBL1RJRCBjb21iaW5hdGlvbiBkZXRlcm1pbmVzIHRoZSBkZXN0 aW5hdGlvbiBhbmQgVElEIHdlIHdhbnQKPiArIDMxOTkgICogICAgICB0aGUgYW1wZHUgYWN0aW9u IHRvIGJlIHBlcmZvcm1lZCBmb3IuIFRoZSBhY3Rpb24gaXMgZGVmaW5lZCB0aHJvdWdoCj4gKyAz MjAwICAqICAgICAgaWVlZTgwMjExX2FtcGR1X21sbWVfYWN0aW9uLgo+ICsgMzIwMSAgKiAgICAg IFdoZW4gdGhlIGFjdGlvbiBpcyBzZXQgdG8gJUlFRUU4MDIxMV9BTVBEVV9UWF9PUEVSQVRJT05B TCB0aGUgZHJpdmVyCj4gKyAzMjAyICAqICAgICAgbWF5IG5laXRoZXIgc2VuZCBhZ2dyZWdhdGVz IGNvbnRhaW5pbmcgbW9yZSBzdWJmcmFtZXMgdGhhbiBAYnVmX3NpemUKPiArIDMyMDMgICogICAg ICBub3Igc2VuZCBhZ2dyZWdhdGVzIGluIGEgd2F5IHRoYXQgbG9zdCBmcmFtZXMgd291bGQgZXhj ZWVkIHRoZQo+ICsgMzIwNCAgKiAgICAgIGJ1ZmZlciBzaXplLiBJZiBqdXN0IGxpbWl0aW5nIHRo ZSBhZ2dyZWdhdGUgc2l6ZSwgdGhpcyB3b3VsZCBiZQo+ICsgMzIwNSAgKiAgICAgIHBvc3NpYmxl IHdpdGggYSBidWZfc2l6ZSBvZiA4Ogo+ICsgMzIwNiAgKiAgICAgICAtIFRYOiAxLi4uLi43Cj4g KyAzMjA3ICAqICAgICAgIC0gUlg6ICAyLi4uLjcgKGxvc3QgZnJhbWUgIzEpCj4gKyAzMjA4ICAq ICAgICAgIC0gVFg6ICAgICAgICA4Li4xLi4uCj4gKyAzMjA5ICAqICAgICAgd2hpY2ggaXMgaW52 YWxpZCBzaW5jZSAjMSB3YXMgbm93IHJlLXRyYW5zbWl0dGVkIHdlbGwgcGFzdCB0aGUKPiArIDMy MTAgICogICAgICBidWZmZXIgc2l6ZSBvZiA4LiBDb3JyZWN0IHdheXMgdG8gcmV0cmFuc21pdCAj MSB3b3VsZCBiZToKPiArIDMyMTEgICogICAgICAgLSBUWDogICAgICAgMSBvciAxOCBvciA4MQo+ ICsgMzIxMiAgKiAgICAgIEV2ZW4gIjE4OSIgd291bGQgYmUgd3Jvbmcgc2luY2UgMSBjb3VsZCBi ZSBsb3N0IGFnYWluLgo+ICsgMzIxMyAgKgo+ICsgMzIxNCAgKiAgICAgIFJldHVybnMgYSBuZWdh dGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCj4gKyAzMjE1ICAqICAgICAgVGhlIGNhbGxiYWNr IGNhbiBzbGVlcC4KPiArICovCj4gK3N0YXRpYyBpbnQgZXNwX29wX2FtcGR1X2FjdGlvbihzdHJ1 Y3QgaWVlZTgwMjExX2h3ICpodywKPiArCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2 aWYsCj4gKwkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2FtcGR1X3BhcmFtcyAqcGFyYW1zKQo+ ICt7Cj4gKwllbnVtIGllZWU4MDIxMV9hbXBkdV9tbG1lX2FjdGlvbiBhY3Rpb24gPSBwYXJhbXMt PmFjdGlvbjsKPiArCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEgPSBwYXJhbXMtPnN0YTsKPiAr CXN0cnVjdCBlc3BfcHViICplcHViID0gKHN0cnVjdCBlc3BfcHViICopaHctPnByaXY7Cj4gKwlz dHJ1Y3QgZXNwX25vZGUgKm5vZGUgPSAoc3RydWN0IGVzcF9ub2RlICopc3RhLT5kcnZfcHJpdjsK PiArCXN0cnVjdCBjZmc4MDIxMV9jaGFuX2RlZiAqY2hhbmRlZjsKPiArCXUxNiB0aWQgPSBwYXJh bXMtPnRpZDsKPiArCXN0cnVjdCBlc3BfdHhfdGlkICp0aWRfaW5mbyA9ICZub2RlLT50aWRbdGlk XTsKPiArCXUxNiAqc3NuID0gJnBhcmFtcy0+c3NuOwo+ICsJdTggYnVmX3NpemUgPSBwYXJhbXMt PmJ1Zl9zaXplOwo+ICsKPiArCXN3aXRjaCAoYWN0aW9uKSB7Cj4gKwljYXNlIElFRUU4MDIxMV9B TVBEVV9UWF9TVEFSVDoKPiArCQljaGFuZGVmID0gJmVwdWItPmh3LT5jb25mLmNoYW5kZWY7Cj4g KwkJaWYgKG1vZF9zdXBwb3J0X25vX3R4YW1wZHUoKSB8fCAhc3RhLT5odF9jYXAuaHRfc3VwcG9y dGVkIHx8Cj4gKwkJICAgIGNmZzgwMjExX2dldF9jaGFuZGVmX3R5cGUoY2hhbmRlZikgPT0gTkw4 MDIxMV9DSEFOX05PX0hUKQo+ICsJCQlyZXR1cm4gLUVPUE5PVFNVUFA7Cj4gKwo+ICsJCWRldl9k YmcoZXB1Yi0+ZGV2LCAiJXMgVFggU1RBUlQsIGFkZHI6JXBNLHRpZDoldSxzdGF0ZTolZFxuIiwK PiArCQkJX19mdW5jX18sIHN0YS0+YWRkciwgdGlkLCB0aWRfaW5mby0+c3RhdGUpOwo+ICsKPiAr CQlzcGluX2xvY2tfYmgoJmVwdWItPnR4X2FtcGR1X2xvY2spOwo+ICsKPiArCQlFU1NFUlQodGlk X2luZm8tPnN0YXRlID09IEVTUF9USURfU1RBVEVfVFJJR0dFUik7Cj4gKwkJKnNzbiA9IHRpZF9p bmZvLT5zc247Cj4gKwkJdGlkX2luZm8tPnN0YXRlID0gRVNQX1RJRF9TVEFURV9QUk9HUkVTUzsK PiArCj4gKwkJaWVlZTgwMjExX3N0YXJ0X3R4X2JhX2NiX2lycXNhZmUodmlmLCBzdGEtPmFkZHIs IHRpZCk7Cj4gKwkJc3Bpbl91bmxvY2tfYmgoJmVwdWItPnR4X2FtcGR1X2xvY2spOwo+ICsKPiAr CQlyZXR1cm4gMDsKPiArCj4gKwljYXNlIElFRUU4MDIxMV9BTVBEVV9UWF9TVE9QX0NPTlQ6Cj4g KwkJZGV2X2RiZyhlcHViLT5kZXYsICIlcyBUWCBTVE9QLCBhZGRyOiVwTSx0aWQ6JXUsc3RhdGU6 JWRcbiIsCj4gKwkJCV9fZnVuY19fLCBzdGEtPmFkZHIsIHRpZCwgdGlkX2luZm8tPnN0YXRlKTsK PiArCj4gKwkJc3Bpbl9sb2NrX2JoKCZlcHViLT50eF9hbXBkdV9sb2NrKTsKPiArCj4gKwljYXNl IElFRUU4MDIxMV9BTVBEVV9UWF9TVE9QX0ZMVVNIOgo+ICsJY2FzZSBJRUVFODAyMTFfQU1QRFVf VFhfU1RPUF9GTFVTSF9DT05UOgo+ICsJCWlmICh0aWRfaW5mby0+c3RhdGUgPT0gRVNQX1RJRF9T VEFURV9XQUlUX1NUT1ApCj4gKwkJCXRpZF9pbmZvLT5zdGF0ZSA9IEVTUF9USURfU1RBVEVfU1RP UDsKPiArCQllbHNlCj4gKwkJCXRpZF9pbmZvLT5zdGF0ZSA9IEVTUF9USURfU1RBVEVfSU5JVDsK PiArCj4gKwkJaWYgKGFjdGlvbiA9PSBJRUVFODAyMTFfQU1QRFVfVFhfU1RPUF9DT05UKSB7Cj4g KwkJCWllZWU4MDIxMV9zdG9wX3R4X2JhX2NiX2lycXNhZmUodmlmLCBzdGEtPmFkZHIsIHRpZCk7 Cj4gKwkJCXNwaW5fdW5sb2NrX2JoKCZlcHViLT50eF9hbXBkdV9sb2NrKTsKPiArCQl9Cj4gKwo+ ICsJCXJldHVybiBzaXBfc2VuZF9hbXBkdV9hY3Rpb24oZXB1YiwgU0lQX0FNUERVX1RYX1NUT1As IHN0YS0+YWRkciwKPiArCQkJCQkgICAgIHRpZCwgbm9kZS0+aWZpZHgsIDApOwo+ICsKPiArCWNh c2UgSUVFRTgwMjExX0FNUERVX1RYX09QRVJBVElPTkFMOgo+ICsJCWRldl9kYmcoZXB1Yi0+ZGV2 LAo+ICsJCQkiJXMgVFggT1BFUkFUSU9OLCBhZGRyOiVwTSx0aWQ6JXUsc3RhdGU6JWRcbiIsIF9f ZnVuY19fLAo+ICsJCQlzdGEtPmFkZHIsIHRpZCwgdGlkX2luZm8tPnN0YXRlKTsKPiArCj4gKwkJ c3Bpbl9sb2NrX2JoKCZlcHViLT50eF9hbXBkdV9sb2NrKTsKPiArCj4gKwkJaWYgKHRpZF9pbmZv LT5zdGF0ZSAhPSBFU1BfVElEX1NUQVRFX1BST0dSRVNTKSB7Cj4gKwkJCWlmICh0aWRfaW5mby0+ c3RhdGUgPT0gRVNQX1RJRF9TVEFURV9JTklUKSB7Cj4gKwkJCQlwcmludGsoS0VSTl9FUlIgIiVz IFdJRkkgUkVTRVQsIElHTk9SRVxuIiwKPiArCQkJCSAgICAgICBfX2Z1bmNfXyk7Cj4gKwkJCQlz cGluX3VubG9ja19iaCgmZXB1Yi0+dHhfYW1wZHVfbG9jayk7Cj4gKwkJCQlyZXR1cm4gLUVORVRS RVNFVDsKPiArCQkJfQo+ICsKPiArCQkJRVNTRVJUKDApOwo+ICsJCX0KPiArCj4gKwkJdGlkX2lu Zm8tPnN0YXRlID0gRVNQX1RJRF9TVEFURV9PUEVSQVRJT05BTDsKPiArCQlzcGluX3VubG9ja19i aCgmZXB1Yi0+dHhfYW1wZHVfbG9jayk7Cj4gKwo+ICsJCXJldHVybiBzaXBfc2VuZF9hbXBkdV9h Y3Rpb24oZXB1YiwgU0lQX0FNUERVX1RYX09QRVJBVElPTkFMLAo+ICsJCQkJCSAgICAgc3RhLT5h ZGRyLCB0aWQsIG5vZGUtPmlmaWR4LAo+ICsJCQkJCSAgICAgYnVmX3NpemUpOwo+ICsKPiArCWNh c2UgSUVFRTgwMjExX0FNUERVX1JYX1NUQVJUOgo+ICsJCWNoYW5kZWYgPSAmZXB1Yi0+aHctPmNv bmYuY2hhbmRlZjsKPiArCQlpZiAobW9kX3N1cHBvcnRfbm9fcnhhbXBkdSgpIHx8ICFzdGEtPmh0 X2NhcC5odF9zdXBwb3J0ZWQgfHwKPiArCQkgICAgY2ZnODAyMTFfZ2V0X2NoYW5kZWZfdHlwZShj aGFuZGVmKSA9PSBOTDgwMjExX0NIQU5fTk9fSFQpCj4gKwkJCXJldHVybiAtRU9QTk9UU1VQUDsK PiArCj4gKwkJZGV2X2RiZyhlcHViLT5kZXYsICIlcyBSWCBTVEFSVCAlcE0gdGlkICV1ICV1XG4i LCBfX2Z1bmNfXywKPiArCQkJc3RhLT5hZGRyLCB0aWQsICpzc24pOwo+ICsKPiArCQlyZXR1cm4g c2lwX3NlbmRfYW1wZHVfYWN0aW9uKGVwdWIsIFNJUF9BTVBEVV9SWF9TVEFSVCwgc3RhLT5hZGRy LAo+ICsJCQkJCSAgICAgdGlkLCAqc3NuLCA2NCk7Cj4gKwo+ICsJY2FzZSBJRUVFODAyMTFfQU1Q RFVfUlhfU1RPUDoKPiArCQlkZXZfZGJnKGVwdWItPmRldiwgIiVzIFJYIFNUT1AgJXBNIHRpZCAl dVxuIiwgX19mdW5jX18sCj4gKwkJCXN0YS0+YWRkciwgdGlkKTsKPiArCj4gKwkJcmV0dXJuIHNp cF9zZW5kX2FtcGR1X2FjdGlvbihlcHViLCBTSVBfQU1QRFVfUlhfU1RPUCwgc3RhLT5hZGRyLAo+ ICsJCQkJCSAgICAgdGlkLCAwLCAwKTsKPiArCj4gKwlkZWZhdWx0Ogo+ICsJCXJldHVybiAtRUlO VkFMOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBlc3BfdHhfd29yayhzdHJ1Y3Qgd29y a19zdHJ1Y3QgKndvcmspCj4gK3sKPiArCXN0cnVjdCBlc3BfcHViICplcHViID0gY29udGFpbmVy X29mKHdvcmssIHN0cnVjdCBlc3BfcHViLCB0eF93b3JrKTsKPiArCj4gKwltdXRleF9sb2NrKCZl cHViLT50eF9tdHgpOwo+ICsJc2lwX3R4cV9wcm9jZXNzKGVwdWIpOwo+ICsJbXV0ZXhfdW5sb2Nr KCZlcHViLT50eF9tdHgpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIx MV9vcHMgZXNwX21hYzgwMjExX29wcyA9IHsKPiArCS50eCA9IGVzcF9vcF90eCwKPiArCS5zdGFy dCA9IGVzcF9vcF9zdGFydCwKPiArCS5zdG9wID0gZXNwX29wX3N0b3AsCj4gKwkuYWRkX2ludGVy ZmFjZSA9IGVzcF9vcF9hZGRfaW50ZXJmYWNlLAo+ICsJLnJlbW92ZV9pbnRlcmZhY2UgPSBlc3Bf b3BfcmVtb3ZlX2ludGVyZmFjZSwKPiArCS5jb25maWcgPSBlc3Bfb3BfY29uZmlnLAo+ICsKPiAr CS5ic3NfaW5mb19jaGFuZ2VkID0gZXNwX29wX2Jzc19pbmZvX2NoYW5nZWQsCj4gKwkuY29uZmln dXJlX2ZpbHRlciA9IGVzcF9vcF9jb25maWd1cmVfZmlsdGVyLAo+ICsJLnNldF9rZXkgPSBlc3Bf b3Bfc2V0X2tleSwKPiArCS5zZXRfcnRzX3RocmVzaG9sZCA9IGVzcF9vcF9zZXRfcnRzX3RocmVz aG9sZCwKPiArCS5zdGFfbm90aWZ5ID0gZXNwX29wX3N0YV9ub3RpZnksCj4gKwkuY29uZl90eCA9 IGVzcF9vcF9jb25mX3R4LAo+ICsJLmNoYW5nZV9pbnRlcmZhY2UgPSBlc3Bfb3BfY2hhbmdlX2lu dGVyZmFjZSwKPiArCS5nZXRfdHNmID0gZXNwX29wX2dldF90c2YsCj4gKwkuc2V0X3RzZiA9IGVz cF9vcF9zZXRfdHNmLAo+ICsJLnJlc2V0X3RzZiA9IGVzcF9vcF9yZXNldF90c2YsCj4gKwkucmZr aWxsX3BvbGwgPSBlc3Bfb3BfcmZraWxsX3BvbGwsCj4gKyNpZmRlZiBIV19TQ0FOCj4gKwkuaHdf c2NhbiA9IGVzcF9vcF9od19zY2FuLAo+ICsJLnJlbWFpbl9vbl9jaGFubmVsID0gZXNwX29wX3Jl bWFpbl9vbl9jaGFubmVsLAo+ICsJLmNhbmNlbF9yZW1haW5fb25fY2hhbm5lbCA9IGVzcF9vcF9j YW5jZWxfcmVtYWluX29uX2NoYW5uZWwsCj4gKyNlbmRpZgo+ICsJLmFtcGR1X2FjdGlvbiA9IGVz cF9vcF9hbXBkdV9hY3Rpb24sCj4gKwkuc3RhX2FkZCA9IGVzcF9vcF9zdGFfYWRkLAo+ICsJLnN0 YV9yZW1vdmUgPSBlc3Bfb3Bfc3RhX3JlbW92ZSwKPiArCS5zZXRfYml0cmF0ZV9tYXNrID0gZXNw X29wX3NldF9iaXRyYXRlX21hc2ssCj4gKwkuZmx1c2ggPSBlc3Bfb3BfZmx1c2gsCj4gK307Cj4g Kwo+ICtzdHJ1Y3QgZXNwX3B1YiAqZXNwX3B1Yl9hbGxvY19tYWM4MDIxMShzdHJ1Y3QgZGV2aWNl ICpkZXYpCj4gK3sKPiArCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3Owo+ICsJc3RydWN0IGVzcF9w dWIgKmVwdWI7Cj4gKwo+ICsJaHcgPSBpZWVlODAyMTFfYWxsb2NfaHcoc2l6ZW9mKHN0cnVjdCBl c3BfcHViKSwgJmVzcF9tYWM4MDIxMV9vcHMpOwo+ICsJaWYgKCFodykKPiArCQlyZXR1cm4gRVJS X1BUUigtRU5PTUVNKTsKClRoZSBjYWxsZXIgZXhwZWN0cyBhIE5VTEwgcmV0dXJuLgoKPiArCj4g KwkvKiBGSVhNRTogdXNlbGVzcyBpZiBod19zY2FuIGlzIGRlZmluZWQsIGluY29ycmVjdCBpZiBo d19zY2FuIGlzIHVuZGVmaW5lZCovCj4gKyNpZmRlZiBIV19TQ0FOCj4gKwlody0+d2lwaHktPmZs YWdzIHw9IFdJUEhZX0ZMQUdfSEFTX1JFTUFJTl9PTl9DSEFOTkVMOwo+ICsjZW5kaWYKPiArCj4g KwllcHViID0gaHctPnByaXY7Cj4gKwltZW1zZXQoZXB1YiwgMCwgc2l6ZW9mKCplcHViKSk7Cj4g Kwo+ICsJZXB1Yi0+aHcgPSBodzsKPiArCVNFVF9JRUVFODAyMTFfREVWKGh3LCBkZXYpOwo+ICsJ ZXB1Yi0+ZGV2ID0gZGV2Owo+ICsKPiArCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmVwdWItPnR4cSk7 Cj4gKwlza2JfcXVldWVfaGVhZF9pbml0KCZlcHViLT50eGRvbmVxKTsKPiArCXNrYl9xdWV1ZV9o ZWFkX2luaXQoJmVwdWItPnJ4cSk7Cj4gKwo+ICsJc3Bpbl9sb2NrX2luaXQoJmVwdWItPnR4X2Ft cGR1X2xvY2spOwo+ICsJc3Bpbl9sb2NrX2luaXQoJmVwdWItPnJ4X2FtcGR1X2xvY2spOwo+ICsJ c3Bpbl9sb2NrX2luaXQoJmVwdWItPnR4X2xvY2spOwo+ICsJbXV0ZXhfaW5pdCgmZXB1Yi0+dHhf bXR4KTsKPiArCXNwaW5fbG9ja19pbml0KCZlcHViLT5yeF9sb2NrKTsKPiArCj4gKwlJTklUX1dP UksoJmVwdWItPnR4X3dvcmssIGVzcF90eF93b3JrKTsKPiArCj4gKwllcHViLT5lc3Bfd2txID0g Y3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImVzcF93a3EiKTsKPiArCj4gKwlpZiAoIWVw dWItPmVzcF93a3EpCj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cgpnb3RvIGZyZWVfaHc7 Cgo+ICsKPiArCWVwdWItPnNjYW5fcGVybWl0X3ZhbGlkID0gZmFsc2U7Cj4gKwlJTklUX0RFTEFZ RURfV09SSygmZXB1Yi0+c2Nhbl90aW1lb3V0X3dvcmssIGh3X3NjYW5fdGltZW91dF9yZXBvcnQp Owo+ICsKPiArCXJldHVybiBlcHViOwo+ICt9Cj4gKwo+ICtpbnQgZXNwX3B1Yl9kZWFsbG9jX21h YzgwMjExKHN0cnVjdCBlc3BfcHViICplcHViKQo+ICt7Cj4gKwlzZXRfYml0KEVTUF9XTF9GTEFH X1JGS0lMTCwgJmVwdWItPndsLmZsYWdzKTsKPiArCj4gKwlkZXN0cm95X3dvcmtxdWV1ZShlcHVi LT5lc3Bfd2txKTsKPiArCW11dGV4X2Rlc3Ryb3koJmVwdWItPnR4X210eCk7Cj4gKwo+ICsJaWYg KGVwdWItPmh3KQo+ICsJCWllZWU4MDIxMV9mcmVlX2h3KGVwdWItPmh3KTsKPiArCj4gKwlyZXR1 cm4gMDsKPiArfQo+ICsKPiArLyogMkcgYmFuZCBjaGFubmVscyAqLwo+ICtzdGF0aWMgc3RydWN0 IGllZWU4MDIxMV9jaGFubmVsIGVzcF9jaGFubmVsc18yZ2h6W10gPSB7Cj4gKwl7Lmh3X3ZhbHVl ID0gMSwgLmNlbnRlcl9mcmVxID0gMjQxMiwgLm1heF9wb3dlciA9IDI1fSwKPiArCXsuaHdfdmFs dWUgPSAyLCAuY2VudGVyX2ZyZXEgPSAyNDE3LCAubWF4X3Bvd2VyID0gMjV9LAo+ICsJey5od192 YWx1ZSA9IDMsIC5jZW50ZXJfZnJlcSA9IDI0MjIsIC5tYXhfcG93ZXIgPSAyNX0sCj4gKwl7Lmh3 X3ZhbHVlID0gNCwgLmNlbnRlcl9mcmVxID0gMjQyNywgLm1heF9wb3dlciA9IDI1fSwKPiArCXsu aHdfdmFsdWUgPSA1LCAuY2VudGVyX2ZyZXEgPSAyNDMyLCAubWF4X3Bvd2VyID0gMjV9LAo+ICsJ ey5od192YWx1ZSA9IDYsIC5jZW50ZXJfZnJlcSA9IDI0MzcsIC5tYXhfcG93ZXIgPSAyNX0sCj4g Kwl7Lmh3X3ZhbHVlID0gNywgLmNlbnRlcl9mcmVxID0gMjQ0MiwgLm1heF9wb3dlciA9IDI1fSwK PiArCXsuaHdfdmFsdWUgPSA4LCAuY2VudGVyX2ZyZXEgPSAyNDQ3LCAubWF4X3Bvd2VyID0gMjV9 LAo+ICsJey5od192YWx1ZSA9IDksIC5jZW50ZXJfZnJlcSA9IDI0NTIsIC5tYXhfcG93ZXIgPSAy NX0sCj4gKwl7Lmh3X3ZhbHVlID0gMTAsIC5jZW50ZXJfZnJlcSA9IDI0NTcsIC5tYXhfcG93ZXIg PSAyNX0sCj4gKwl7Lmh3X3ZhbHVlID0gMTEsIC5jZW50ZXJfZnJlcSA9IDI0NjIsIC5tYXhfcG93 ZXIgPSAyNX0sCj4gKwl7Lmh3X3ZhbHVlID0gMTIsIC5jZW50ZXJfZnJlcSA9IDI0NjcsIC5tYXhf cG93ZXIgPSAyNX0sCj4gKwl7Lmh3X3ZhbHVlID0gMTMsIC5jZW50ZXJfZnJlcSA9IDI0NzIsIC5t YXhfcG93ZXIgPSAyNX0sCj4gK307Cj4gKwo+ICsvKiAxMUcgcmF0ZSAqLwo+ICtzdGF0aWMgc3Ry dWN0IGllZWU4MDIxMV9yYXRlIGVzcF9yYXRlc18yZ2h6W10gPSB7Cj4gKwl7Cj4gKwkJLmJpdHJh dGUgPSAxMCwKPiArCQkuaHdfdmFsdWUgPSBDT05GX0hXX0JJVF9SQVRFXzFNQlBTLAo+ICsJCS5o d192YWx1ZV9zaG9ydCA9IENPTkZfSFdfQklUX1JBVEVfMU1CUFMsCj4gKwl9LAo+ICsJewo+ICsJ CS5iaXRyYXRlID0gMjAsCj4gKwkJLmh3X3ZhbHVlID0gQ09ORl9IV19CSVRfUkFURV8yTUJQUywK PiArCQkuaHdfdmFsdWVfc2hvcnQgPSBDT05GX0hXX0JJVF9SQVRFXzJNQlBTLAo+ICsJCS5mbGFn cyA9IElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFfSwKPiArCXsKPiArCQkuYml0cmF0ZSA9 IDU1LAo+ICsJCS5od192YWx1ZSA9IENPTkZfSFdfQklUX1JBVEVfNV81TUJQUywKPiArCQkuaHdf dmFsdWVfc2hvcnQgPSBDT05GX0hXX0JJVF9SQVRFXzVfNU1CUFMsCj4gKwkJLmZsYWdzID0gSUVF RTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEV9LAo+ICsJewo+ICsJCS5iaXRyYXRlID0gMTEwLAo+ ICsJCS5od192YWx1ZSA9IENPTkZfSFdfQklUX1JBVEVfMTFNQlBTLAo+ICsJCS5od192YWx1ZV9z aG9ydCA9IENPTkZfSFdfQklUX1JBVEVfMTFNQlBTLAo+ICsJCS5mbGFncyA9IElFRUU4MDIxMV9S QVRFX1NIT1JUX1BSRUFNQkxFfSwKPiArCXsKPiArCQkuYml0cmF0ZSA9IDYwLAo+ICsJCS5od192 YWx1ZSA9IENPTkZfSFdfQklUX1JBVEVfNk1CUFMsCj4gKwkJLmh3X3ZhbHVlX3Nob3J0ID0gQ09O Rl9IV19CSVRfUkFURV82TUJQUywKPiArCX0sCj4gKwl7Cj4gKwkJLmJpdHJhdGUgPSA5MCwKPiAr CQkuaHdfdmFsdWUgPSBDT05GX0hXX0JJVF9SQVRFXzlNQlBTLAo+ICsJCS5od192YWx1ZV9zaG9y dCA9IENPTkZfSFdfQklUX1JBVEVfOU1CUFMsCj4gKwl9LAo+ICsJewo+ICsJCS5iaXRyYXRlID0g MTIwLAo+ICsJCS5od192YWx1ZSA9IENPTkZfSFdfQklUX1JBVEVfMTJNQlBTLAo+ICsJCS5od192 YWx1ZV9zaG9ydCA9IENPTkZfSFdfQklUX1JBVEVfMTJNQlBTLAo+ICsJfSwKPiArCXsKPiArCQku Yml0cmF0ZSA9IDE4MCwKPiArCQkuaHdfdmFsdWUgPSBDT05GX0hXX0JJVF9SQVRFXzE4TUJQUywK PiArCQkuaHdfdmFsdWVfc2hvcnQgPSBDT05GX0hXX0JJVF9SQVRFXzE4TUJQUywKPiArCX0sCj4g Kwl7Cj4gKwkJLmJpdHJhdGUgPSAyNDAsCj4gKwkJLmh3X3ZhbHVlID0gQ09ORl9IV19CSVRfUkFU RV8yNE1CUFMsCj4gKwkJLmh3X3ZhbHVlX3Nob3J0ID0gQ09ORl9IV19CSVRfUkFURV8yNE1CUFMs Cj4gKwl9LAo+ICsJewo+ICsJCS5iaXRyYXRlID0gMzYwLAo+ICsJCS5od192YWx1ZSA9IENPTkZf SFdfQklUX1JBVEVfMzZNQlBTLAo+ICsJCS5od192YWx1ZV9zaG9ydCA9IENPTkZfSFdfQklUX1JB VEVfMzZNQlBTLAo+ICsJfSwKPiArCXsKPiArCQkuYml0cmF0ZSA9IDQ4MCwKPiArCQkuaHdfdmFs dWUgPSBDT05GX0hXX0JJVF9SQVRFXzQ4TUJQUywKPiArCQkuaHdfdmFsdWVfc2hvcnQgPSBDT05G X0hXX0JJVF9SQVRFXzQ4TUJQUywKPiArCX0sCj4gKwl7Cj4gKwkJLmJpdHJhdGUgPSA1NDAsCj4g KwkJLmh3X3ZhbHVlID0gQ09ORl9IV19CSVRfUkFURV81NE1CUFMsCj4gKwkJLmh3X3ZhbHVlX3No b3J0ID0gQ09ORl9IV19CSVRfUkFURV81NE1CUFMsCj4gKwl9LAo+ICt9Owo+ICsKPiArc3RhdGlj IHN0cnVjdCBpZWVlODAyMTFfc3RhX2h0X2NhcCBlc3BfaHRfY2FwXzJnaHogPSB7Cj4gKwkuY2Fw ID0gSUVFRTgwMjExX0hUX0NBUF9EU1NTQ0NLNDAgfCBJRUVFODAyMTFfSFRfQ0FQX1NNX1BTIHwK PiArCQlJRUVFODAyMTFfSFRfQ0FQX1NHSV80MCB8IElFRUU4MDIxMV9IVF9DQVBfU0dJXzIwLAo+ ICsJLmh0X3N1cHBvcnRlZCA9IHRydWUsCj4gKwkuYW1wZHVfZmFjdG9yID0gSUVFRTgwMjExX0hU X01BWF9BTVBEVV8xNkssCj4gKwkuYW1wZHVfZGVuc2l0eSA9IElFRUU4MDIxMV9IVF9NUERVX0RF TlNJVFlfTk9ORSwKPiArCS5tY3MgPSB7Cj4gKwkJLnJ4X21hc2sgPSB7IDB4ZmYsIDAsIDAsIDAs IDAsIDAsIDAsIDAsIDAsIDAsIH0sCj4gKwl9LAo+ICt9Owo+ICsKPiArc3RhdGljIHZvaWQgZXNw X3B1Yl9pbml0X21hYzgwMjExKHN0cnVjdCBlc3BfcHViICplcHViKQo+ICt7Cj4gKwlzdHJ1Y3Qg aWVlZTgwMjExX2h3ICpodyA9IGVwdWItPmh3Owo+ICsJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0 ZWRfYmFuZCAqc2JhbmRzID0KPiArCQkmZXB1Yi0+d2wuc2JhbmRzW05MODAyMTFfQkFORF8yR0ha XTsKPiArCj4gKwlzdGF0aWMgY29uc3QgdTMyIGNpcGhlcl9zdWl0ZXNbXSA9IHsKPiArCQlXTEFO X0NJUEhFUl9TVUlURV9XRVA0MCwKPiArCQlXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQsCj4gKwkJ V0xBTl9DSVBIRVJfU1VJVEVfVEtJUCwKPiArCQlXTEFOX0NJUEhFUl9TVUlURV9DQ01QLAo+ICsJ fTsKPiArCj4gKwlody0+bWF4X2xpc3Rlbl9pbnRlcnZhbCA9IDEwOwo+ICsKPiArCWllZWU4MDIx MV9od19zZXQoaHcsIFNJR05BTF9EQk0pOwo+ICsJaWVlZTgwMjExX2h3X3NldChodywgSEFTX1JB VEVfQ09OVFJPTCk7Cj4gKwlpZWVlODAyMTFfaHdfc2V0KGh3LCBTVVBQT1JUU19QUyk7Cj4gKwlp ZWVlODAyMTFfaHdfc2V0KGh3LCBBTVBEVV9BR0dSRUdBVElPTik7Cj4gKwlpZWVlODAyMTFfaHdf c2V0KGh3LCBIT1NUX0JST0FEQ0FTVF9QU19CVUZGRVJJTkcpOwo+ICsJaHctPm1heF9yeF9hZ2dy ZWdhdGlvbl9zdWJmcmFtZXMgPSBJRUVFODAyMTFfTUFYX0FNUERVX0JVRjsKPiArCWh3LT5tYXhf dHhfYWdncmVnYXRpb25fc3ViZnJhbWVzID0gSUVFRTgwMjExX01BWF9BTVBEVV9CVUY7Cj4gKwo+ ICsJaHctPndpcGh5LT5jaXBoZXJfc3VpdGVzID0gY2lwaGVyX3N1aXRlczsKPiArCWh3LT53aXBo eS0+bl9jaXBoZXJfc3VpdGVzID0gQVJSQVlfU0laRShjaXBoZXJfc3VpdGVzKTsKPiArCWh3LT53 aXBoeS0+bWF4X3NjYW5faWVfbGVuID0gZXB1Yi0+c2lwLT50eF9ibGtzeiAtCj4gKwkJc2l6ZW9m KHN0cnVjdCBzaXBfaGRyKSAtIHNpemVvZihzdHJ1Y3Qgc2lwX2NtZF9zY2FuKTsKPiArCj4gKwkv KiBPTkxZIHN0YXRpb24gZm9yIG5vdywgc3VwcG9ydCBQMlAgc29vbi4uLiAqLwo+ICsJLyogRklY TUU6IGlzIHAycCByZWFsbHkgc3VwcG9ydGVkPyAqLwo+ICsJaHctPndpcGh5LT5pbnRlcmZhY2Vf bW9kZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVfUDJQX0dPKSB8Cj4gKwkJQklUKE5MODAyMTFfSUZU WVBFX1AyUF9DTElFTlQpIHwgQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHwKPiArCQlCSVQo Tkw4MDIxMV9JRlRZUEVfQVApOwo+ICsKPiArCWh3LT53aXBoeS0+bWF4X3NjYW5fc3NpZHMgPSAy Owo+ICsJaHctPndpcGh5LT5tYXhfcmVtYWluX29uX2NoYW5uZWxfZHVyYXRpb24gPSA1MDAwOwo+ ICsKPiArCWF0b21pY19zZXQoJmVwdWItPndsLm9mZiwgMSk7Cj4gKwo+ICsJc2JhbmRzLT5iYW5k ID0gTkw4MDIxMV9CQU5EXzJHSFo7Cj4gKwlzYmFuZHMtPmNoYW5uZWxzID0gZXNwX2NoYW5uZWxz XzJnaHo7Cj4gKwlzYmFuZHMtPmJpdHJhdGVzID0gZXNwX3JhdGVzXzJnaHo7Cj4gKwlzYmFuZHMt Pm5fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKGVzcF9jaGFubmVsc18yZ2h6KTsKPiArCXNiYW5kcy0+ bl9iaXRyYXRlcyA9IEFSUkFZX1NJWkUoZXNwX3JhdGVzXzJnaHopOwo+ICsJc2JhbmRzLT5odF9j YXAgPSBlc3BfaHRfY2FwXzJnaHo7Cj4gKwo+ICsJaHctPndpcGh5LT5iYW5kc1tOTDgwMjExX0JB TkRfMkdIWl0gPSBzYmFuZHM7Cj4gKwo+ICsJLypubyBmcmFnbWVudCAqLwo+ICsJaHctPndpcGh5 LT5mcmFnX3RocmVzaG9sZCA9IElFRUU4MDIxMV9NQVhfRlJBR19USFJFU0hPTEQ7Cj4gKwo+ICsJ LyogaGFuZGxlIEFDIHF1ZXVlIGluIGYvdyAqLwo+ICsJaHctPnF1ZXVlcyA9IDQ7Cj4gKwlody0+ bWF4X3JhdGVzID0gNDsKPiArCj4gKwlody0+dmlmX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3Qg ZXNwX3ZpZik7Cj4gKwlody0+c3RhX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZXNwX25vZGUp Owo+ICt9Cj4gKwo+ICtpbnQgZXNwX3JlZ2lzdGVyX21hYzgwMjExKHN0cnVjdCBlc3BfcHViICpl cHViKQo+ICt7Cj4gKwlpbnQgcmV0LCBpZHg7Cj4gKwl1OCAqcDJwX2FkZHI7Cj4gKwo+ICsJZXNw X3B1Yl9pbml0X21hYzgwMjExKGVwdWIpOwo+ICsKPiArCS8qIEZJWE1FOiBlc3BfbWFjX2FkZHIg Ki8KPiArCWVwdWItPmh3LT53aXBoeS0+YWRkcmVzc2VzID0gKHN0cnVjdCBtYWNfYWRkcmVzcyAq KWVzcF9tYWNfYWRkcjsKPiArCj4gKwltZW1jcHkoZXB1Yi0+aHctPndpcGh5LT5hZGRyZXNzZXNb MF0uYWRkciwgZXB1Yi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKPiArCW1lbWNweShlcHViLT5ody0+ d2lwaHktPmFkZHJlc3Nlc1sxXS5hZGRyLCBlcHViLT5tYWNfYWRkciwgRVRIX0FMRU4pOwo+ICsJ cDJwX2FkZHIgPSBlcHViLT5ody0+d2lwaHktPmFkZHJlc3Nlc1sxXS5hZGRyOwo+ICsKPiArCWZv ciAoaWR4ID0gMDsgaWR4IDwgOCAqIEVUSF9BTEVOOyBpZHgrKykgewo+ICsJCXAycF9hZGRyWzBd ID0gZXB1Yi0+bWFjX2FkZHJbMF0gfCAweDAyOwo+ICsJCXAycF9hZGRyWzBdIF49IGlkeCA8PCAy Owo+ICsJCWlmIChzdHJuY21wKHAycF9hZGRyLCBlcHViLT5tYWNfYWRkciwgNikpCj4gKwkJCWJy ZWFrOwo+ICsJfQo+ICsKPiArCWVwdWItPmh3LT53aXBoeS0+bl9hZGRyZXNzZXMgPSAyOwo+ICsK PiArCXJldCA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhlcHViLT5odyk7Cj4gKwlpZiAocmV0IDwg MCkgewo+ICsJCXByaW50aygidW5hYmxlIHRvIHJlZ2lzdGVyIG1hYzgwMjExIGh3OiAlZFxuIiwg cmV0KTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXNldF9iaXQoRVNQX1dMX0ZMQUdf SFdfUkVHSVNURVJFRCwgJmVwdWItPndsLmZsYWdzKTsKPiArCj4gKwlyZXR1cm4gcmV0OwoKcmV0 dXJuIDA7Cgo+ICt9Cj4gKwo+ICtzdGF0aWMgdTggZ2V0YWRkcl9pbmRleCh1OCAqYWRkciwgc3Ry dWN0IGVzcF9wdWIgKmVwdWIpCj4gK3sKPiArCWludCBpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkg PCBFU1BfUFVCX01BWF9WSUY7IGkrKykKPiArCQlpZiAoIW1lbWNtcChhZGRyLCBlcHViLT5ody0+ d2lwaHktPmFkZHJlc3Nlc1tpXS5hZGRyLCBFVEhfQUxFTikpCj4gKwkJCXJldHVybiBpOwo+ICsK PiArCXJldHVybiBFU1BfUFVCX01BWF9WSUY7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9z dGFnaW5nL2VzcDgwODkvZXNwX21hYzgwMjExLmggYi9kcml2ZXJzL3N0YWdpbmcvZXNwODA4OS9l c3BfbWFjODAyMTEuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAw Li4wM2RlMGIwYTQyMjMKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9zdGFnaW5nL2Vz cDgwODkvZXNwX21hYzgwMjExLmgKPiBAQCAtMCwwICsxLDMzIEBACj4gKy8qCj4gKyAqIENvcHly aWdodCAoYykgMjAxMSAtIDIwMTQgRXNwcmVzc2lmIFN5c3RlbS4KPiArICogQ29weXJpZ2h0IChj KSAyMDE3IEZyZWUgRWxlY3Ryb25zCj4gKyAqICAgICAgUXVlbnRpbiBTY2h1bHogPHF1ZW50aW4u c2NodWx6QGZyZWUtZWxlY3Ryb25zLmNvbT4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5k ZXIKPiArICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJz aW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZQo+ICsgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24u Cj4gKyAqCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBfRVNQX01BQzgwMjExX0hfCj4gKyNkZWZpbmUg X0VTUF9NQUM4MDIxMV9IXwo+ICsKPiArc3RydWN0IGVzcF84MDIxMV93bW1fYWNfcGFyYW0gewo+ ICsJdTggYWNpX2FpZnNuOwkJLyogQUlGU04sIEFDTSwgQUNJICovCj4gKwl1OCBjdzsJCQkvKiBF Q1dtaW4sIEVDV21heCAoQ1cgPSAyXkVDVyAtIDEpICovCj4gKwl1MTYgdHhvcF9saW1pdDsKPiAr fTsKPiArCj4gK3N0cnVjdCBlc3BfODAyMTFfd21tX3BhcmFtX2VsZW1lbnQgewo+ICsJLyogRWxl bWVudCBJRO+8miAyMjEgKDB4ZGQpOyBsZW5ndGg6IDI0ICovCj4gKwkvKiByZXF1aXJlZCBmaWVs ZHMgZm9yIFdNTSB2ZXJzaW9uIDEgKi8KPiArCXU4IG91aVszXTsJCS8qIDAwOjUwOmYyICovCj4g Kwl1OCBvdWlfdHlwZTsJCS8qIDIgKi8KPiArCXU4IG91aV9zdWJ0eXBlOwkJLyogMSAqLwo+ICsJ dTggdmVyc2lvbjsJCS8qIDEgZm9yIFdNTSB2ZXJzaW9uIDEuMCAqLwo+ICsJdTggcW9zX2luZm87 CQkvKiBBUC9TVEEgc3BlY2lmIFFvUyBpbmZvICovCj4gKwl1OCByZXNlcnZlZDsJCS8qIDAgKi8K PiArCXN0cnVjdCBlc3BfODAyMTFfd21tX2FjX3BhcmFtIGFjWzRdOwkvKiBBQ19CRSwgQUNfQkss IEFDX1ZJLCBBQ19WTyAqLwo+ICt9Owo+ICsKPiArI2VuZGlmCQkJCS8qIF9FU1BfTUFDODAyMTFf SF8gKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VzcDgwODkvZXNwX21haW4uYyBi L2RyaXZlcnMvc3RhZ2luZy9lc3A4MDg5L2VzcF9tYWluLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0 NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uYzQ2MjE4NDc5MjZjCj4gLS0tIC9kZXYvbnVsbAo+ICsr KyBiL2RyaXZlcnMvc3RhZ2luZy9lc3A4MDg5L2VzcF9tYWluLmMKPiBAQCAtMCwwICsxLDE5OSBA QAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTAgLSAyMDE0IEVzcHJlc3NpZiBTeXN0ZW0u Cj4gKyAqIENvcHlyaWdodCAoYykgMjAxNyBGcmVlIEVsZWN0cm9ucwo+ICsgKiAgICAgIFF1ZW50 aW4gU2NodWx6IDxxdWVudGluLnNjaHVsekBmcmVlLWVsZWN0cm9ucy5jb20+Cj4gKyAqCj4gKyAq IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5IGl0IHVuZGVyCj4gKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUKPiArICogRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLgo+ICsgKgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9u ZXRkZXZpY2UuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Cj4gKyNpbmNsdWRl IDxsaW51eC9ydG5ldGxpbmsuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+Cj4gKyNp bmNsdWRlIDxsaW51eC9zY2hlZC5oPgo+ICsjaW5jbHVkZSA8bmV0L2NmZzgwMjExLmg+Cj4gKyNp bmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KPiArI2lu Y2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4K PiArCj4gKyNpbmNsdWRlICJlc3BfcHViLmgiCj4gKyNpbmNsdWRlICJlc3Bfc2lwLmgiCj4gKyNp bmNsdWRlICJlc3Bfc2lmLmgiCj4gKyNpbmNsdWRlICJlc3BfZGVidWcuaCIKPiArI2luY2x1ZGUg ImVzcF9maWxlLmgiCj4gKyNpbmNsdWRlICJlc3Bfd2wuaCIKPiArCj4gK3N0cnVjdCBjb21wbGV0 aW9uICpnbF9ib290dXBfY3BseDsKPiArCj4gK3N0YXRpYyBpbnQgZXNwX2Rvd25sb2FkX2Z3KHN0 cnVjdCBlc3BfcHViICplcHViKTsKPiArCj4gK3N0YXRpYyBpbnQgbW9kcGFyYW1fbm9fdHhhbXBk dTsKPiArc3RhdGljIGludCBtb2RwYXJhbV9ub19yeGFtcGR1Owo+ICsKPiArbW9kdWxlX3BhcmFt X25hbWVkKG5vX3R4YW1wZHUsIG1vZHBhcmFtX25vX3R4YW1wZHUsIGludCwgMDQ0NCk7Cj4gK01P RFVMRV9QQVJNX0RFU0Mobm9fdHhhbXBkdSwgIkRpc2FibGUgdHggYW1wZHUuIik7Cj4gKwo+ICtt b2R1bGVfcGFyYW1fbmFtZWQobm9fcnhhbXBkdSwgbW9kcGFyYW1fbm9fcnhhbXBkdSwgaW50LCAw NDQ0KTsKPiArTU9EVUxFX1BBUk1fREVTQyhub19yeGFtcGR1LCAiRGlzYWJsZSByeCBhbXBkdS4i KTsKPiArCj4gK3N0YXRpYyBjaGFyICptb2RwYXJhbV9lYWdsZV9wYXRoID0gIi9saWIvZmlybXdh cmUiOwo+ICsKPiArbW9kdWxlX3BhcmFtX25hbWVkKGVhZ2xlX3BhdGgsIG1vZHBhcmFtX2VhZ2xl X3BhdGgsIGNoYXJwLCAwNDQ0KTsKPiArTU9EVUxFX1BBUk1fREVTQyhlYWdsZV9wYXRoLCAiZWFn bGUgcGF0aCIpOwo+ICsKPiArYm9vbCBtb2Rfc3VwcG9ydF9ub190eGFtcGR1KHZvaWQpCj4gK3sK PiArCXJldHVybiBtb2RwYXJhbV9ub190eGFtcGR1Owo+ICt9Cj4gKwo+ICtib29sIG1vZF9zdXBw b3J0X25vX3J4YW1wZHUodm9pZCkKPiArewo+ICsJcmV0dXJuIG1vZHBhcmFtX25vX3J4YW1wZHU7 Cj4gK30KPiArCj4gK2ludCBlc3BfcHViX2luaXRfYWxsKHN0cnVjdCBlc3BfcHViICplcHViKQo+ ICt7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCS8qIGNvbXBsZXRpb24gZm9yIGJvb3R1cCBldmVudCBw b2xsICovCj4gKwlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhjb21wbGV0ZSk7Cj4gKwo+ICsJ YXRvbWljX3NldCgmZXB1Yi0+cHMuc3RhdGUsIEVTUF9QTV9PRkYpOwo+ICsKPiArCWlmIChlcHVi LT5zZGlvX3N0YXRlID09IEVTUF9TRElPX1NUQVRFX0ZJUlNUX0lOSVQpIHsKPiArCQllcHViLT5z aXAgPSBzaXBfYXR0YWNoKGVwdWIpOwo+ICsJCWlmICghZXB1Yi0+c2lwKSB7Cj4gKwkJCXByaW50 ayhLRVJOX0VSUiAiJXMgc2lwIGFsbG9jIGZhaWxlZFxuIiwgX19mdW5jX18pOwo+ICsJCQlyZXR1 cm4gLUVOT01FTTsKPiArCQl9Cj4gKwl9IGVsc2Ugewo+ICsJCWF0b21pY19zZXQoJmVwdWItPnNp cC0+c3RhdGUsIFNJUF9QUkVQQVJFX0JPT1QpOwo+ICsJCWF0b21pY19zZXQoJmVwdWItPnNpcC0+ dHhfY3JlZGl0cywgMCk7Cj4gKwl9Cj4gKwo+ICsJZXB1Yi0+c2lwLT50b19ob3N0X3NlcSA9IDA7 Cj4gKwo+ICsJcmV0ID0gZXNwX2Rvd25sb2FkX2Z3KGVwdWIpOwo+ICsJaWYgKHJldCkgewo+ICsJ CXByaW50aygiZG93bmxvYWQgZmlybXdhcmUgZmFpbGVkXG4iKTsKPiArCQlyZXR1cm4gcmV0Owo+ ICsJfQo+ICsKPiArCWdsX2Jvb3R1cF9jcGx4ID0gJmNvbXBsZXRlOwo+ICsJZXB1Yi0+d2FpdF9y ZXNldCA9IDA7Cj4gKwlzaWZfZW5hYmxlX2lycShlcHViKTsKPiArCj4gKwlpZiAoZXB1Yi0+c2Rp b19zdGF0ZSA9PSBFU1BfU0RJT19TVEFURV9TRUNPTkRfSU5JVCB8fAo+ICsJICAgIHNpZl9nZXRf YXRlX2NvbmZpZygpID09IDEpIHsKCkRyb3AgdGhlID09IDEuICBXZSBtb3N0bHkgdHJlYXQgc2lm X2dldF9hdGVfY29uZmlnKCkgYXMgYm9vbCwgc28gbGV0J3MKZG8gdGhhdCBjb25zaXN0ZW50bHkg ZXZlcnl3aGVyZS4KCj4gKwkJcmV0ID0gc2lwX3BvbGxfYm9vdHVwX2V2ZW50KGVwdWItPnNpcCk7 Cj4gKwl9IGVsc2Ugewo+ICsJCXJldCA9IHNpcF9wb2xsX3Jlc2V0dGluZ19ldmVudChlcHViLT5z aXApOwo+ICsJCWlmICghcmV0KSB7Cj4gKwkJCXNpZl9sb2NrX2J1cyhlcHViKTsKPiArCQkJc2lm X2ludGVycnVwdF90YXJnZXQoZXB1YiwgNyk7Cj4gKwkJCXNpZl91bmxvY2tfYnVzKGVwdWIpOwo+ ICsJCX0KPiArCX0KPiArCj4gKwlnbF9ib290dXBfY3BseCA9IE5VTEw7Cj4gKwo+ICsJaWYgKHNp Zl9nZXRfYXRlX2NvbmZpZygpID09IDEpCj4gKwkJcmV0ID0gLUVPUE5PVFNVUFA7Cj4gKwo+ICsJ cmV0dXJuIHJldDsKPiArfQo+ICsKPiArdm9pZCBlc3BfZHNyKHN0cnVjdCBlc3BfcHViICplcHVi KQoKQ2FuIHRoaXMgZnVuY3Rpb24gYmUgcmVtb3ZlZD8KCj4gK3sKPiArCXNpcF9yeChlcHViKTsK PiArfQo+ICsKPiArc3RydWN0IGVzcF9md19oZHIgewo+ICsJdTggbWFnaWM7Cj4gKwl1OCBibG9j a3M7Cj4gKwl1OCBwYWRbMl07Cj4gKwl1MzIgZW50cnlfYWRkcjsKPiArfSBfX3BhY2tlZDsKPiAr Cj4gK3N0cnVjdCBlc3BfZndfYmxrX2hkciB7Cj4gKwl1MzIgbG9hZF9hZGRyOwo+ICsJdTMyIGRh dGFfbGVuOwo+ICt9IF9fcGFja2VkOwo+ICsKPiArI2RlZmluZSBFU1BfRldfTkFNRTEgImVhZ2xl X2Z3X2F0ZV9jb25maWdfdjE5LmJpbiIKPiArI2RlZmluZSBFU1BfRldfTkFNRTIgImVhZ2xlX2Z3 X2ZpcnN0X2luaXRfdjE5LmJpbiIKPiArI2RlZmluZSBFU1BfRldfTkFNRTMgImVhZ2xlX2Z3X3Nl Y29uZF9pbml0X3YxOS5iaW4iCj4gKwo+ICtzdGF0aWMgaW50IGVzcF9kb3dubG9hZF9mdyhzdHJ1 Y3QgZXNwX3B1YiAqZXB1YikKPiArewo+ICsJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19lbnRy eTsKPiArCXN0cnVjdCBlc3BfZndfaGRyICpmaGRyOwo+ICsJc3RydWN0IGVzcF9md19ibGtfaGRy ICpiaGRyOwo+ICsJc3RydWN0IHNpcF9jbWRfYm9vdHVwIGJvb3RjbWQ7Cj4gKwl1OCAqZndfYnVm Owo+ICsJdTMyIG9mZnNldDsKPiArCWludCByZXQ7Cj4gKwl1OCBibG9ja3M7Cj4gKwljaGFyICpl c3BfZndfbmFtZTsKPiArCj4gKwlpZiAoc2lmX2dldF9hdGVfY29uZmlnKCkgPT0gMSkKPiArCQll c3BfZndfbmFtZSA9IEVTUF9GV19OQU1FMzsKPiArCWVsc2UKPiArCQllc3BfZndfbmFtZSA9IGVw dWItPnNkaW9fc3RhdGUgPT0gRVNQX1NESU9fU1RBVEVfRklSU1RfSU5JVCA/IEVTUF9GV19OQU1F MSA6IEVTUF9GV19OQU1FMjsKPiArCj4gKwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmd19lbnRy eSwgZXNwX2Z3X25hbWUsIGVwdWItPmRldik7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7 Cj4gKwo+ICsJZndfYnVmID0ga21lbWR1cChmd19lbnRyeS0+ZGF0YSwgZndfZW50cnktPnNpemUs IEdGUF9LRVJORUwpOwo+ICsKPiArCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOwo+ICsKPiAr CWlmICghZndfYnVmKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWZoZHIgPSAoc3RydWN0 IGVzcF9md19oZHIgKilmd19idWY7Cj4gKwlpZiAoZmhkci0+bWFnaWMgIT0gMHhFOSkgewo+ICsJ CXByaW50aygiJXMgd3JvbmcgZmlybXdhcmUgbWFnaWMhXG4iLCBfX2Z1bmNfXyk7Cj4gKwkJZ290 byBfZXJyOwoKQ2hvb3NlIGEgbGFiZWwgbmFtZSBiYXNlZCBvbiB3aGF0IHRoZSBnb3RvIGRvZXMu ICBGb3IgZXhhbXBsZSwgaGVyZSBpZgp3ZSBoaXQgdGhlIGdvdG8gdGhlbiB3ZSBrZnJlZShmd19i dWYpOyBzbyAiZ290byBmcmVlX2Z3OyIgd291bGQgYmUgYQpkZXNjcmlwdGl2ZSBuYW1lLgoKQWxz byBkb24ndCBmb3JnZXQgdG8gc2V0IHRoZSBlcnJvciBjb2RlLgoKPiArCX0KPiArCj4gKwlibG9j a3MgPSBmaGRyLT5ibG9ja3M7Cj4gKwlvZmZzZXQgPSBzaXplb2Yoc3RydWN0IGVzcF9md19oZHIp Owo+ICsKPiArCXdoaWxlIChibG9ja3MpIHsKPiArCQliaGRyID0gKHN0cnVjdCBlc3BfZndfYmxr X2hkciAqKSZmd19idWZbb2Zmc2V0XTsKPiArCQlvZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCBlc3Bf ZndfYmxrX2hkcik7Cj4gKwo+ICsJCXJldCA9IHNpcF93cml0ZV9tZW1vcnkoZXB1Yi0+c2lwLCBi aGRyLT5sb2FkX2FkZHIsCj4gKwkJCQkgICAgICAgJmZ3X2J1ZltvZmZzZXRdLCBiaGRyLT5kYXRh X2xlbik7Cj4gKwkJaWYgKHJldCkgewo+ICsJCQlwcmludGsoImZhaWxlZCB0byB3cml0ZSBmaXJt d2FyZTogJWRcbiIsIHJldCk7Cj4gKwkJCWdvdG8gX2VycjsKPiArCQl9Cj4gKwo+ICsJCWJsb2Nr cy0tOwo+ICsJCW9mZnNldCArPSBiaGRyLT5kYXRhX2xlbjsKPiArCX0KPiArCj4gKwkvKiBUT0RP OiBsYXN0IGJ5dGUgc2hvdWxkIGJlIHRoZSBjaGVja3N1bSBhbmQgc2tpcCBjaGVja3N1bSBmb3Ig bm93ICovCj4gKwo+ICsJYm9vdGNtZC5ib290X2FkZHIgPSBmaGRyLT5lbnRyeV9hZGRyOwo+ICsJ cmV0ID0gc2lwX3NlbmRfY21kKGVwdWItPnNpcCwgU0lQX0NNRF9CT09UVVAsCj4gKwkJCSAgIHNp emVvZihzdHJ1Y3Qgc2lwX2NtZF9ib290dXApLCAmYm9vdGNtZCk7Cj4gKwlpZiAocmV0KQo+ICsJ CWdvdG8gX2VycjsKPiArCj4gK19lcnI6Cj4gKwlrZnJlZShmd19idWYpOwo+ICsKPiArCXJldHVy biByZXQ7Cj4gK30KPiArCj4gK01PRFVMRV9GSVJNV0FSRShFU1BfRldfTkFNRTEpOwo+ICtNT0RV TEVfRklSTVdBUkUoRVNQX0ZXX05BTUUyKTsKPiArTU9EVUxFX0ZJUk1XQVJFKEVTUF9GV19OQU1F Myk7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lc3A4MDg5L2VzcF9wdWIuaCBiL2Ry aXZlcnMvc3RhZ2luZy9lc3A4MDg5L2VzcF9wdWIuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4g aW5kZXggMDAwMDAwMDAwMDAwLi5lMzI5ZmIwOTk5ZTkKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIv ZHJpdmVycy9zdGFnaW5nL2VzcDgwODkvZXNwX3B1Yi5oCj4gQEAgLTAsMCArMSwxODggQEAKPiAr LyoKPiArICogQ29weXJpZ2h0IChjKSAyMDExIC0gMjAxNCBFc3ByZXNzaWYgU3lzdGVtLgo+ICsg KiBDb3B5cmlnaHQgKGMpIDIwMTcgRnJlZSBFbGVjdHJvbnMKPiArICogICAgICBRdWVudGluIFNj aHVseiA8cXVlbnRpbi5zY2h1bHpAZnJlZS1lbGVjdHJvbnMuY29tPgo+ICsgKgo+ICsgKiBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeSBpdCB1bmRlcgo+ICsgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlCj4gKyAqIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbi4KPiArICoKPiArICovCj4gKwo+ICsjaWZuZGVmIF9FU1BfUFVCX0hfCj4g KyNkZWZpbmUgX0VTUF9QVUJfSF8KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5o Pgo+ICsjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9maXJt d2FyZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KPiArI2luY2x1ZGUgPG5ldC9tYWM4 MDIxMS5oPgo+ICsjaW5jbHVkZSA8bmV0L2NmZzgwMjExLmg+Cj4gKyNpbmNsdWRlICJzaXAyX2Nv bW1vbi5oIgo+ICsKPiArZW51bSBlc3Bfc2Rpb19zdGF0ZSB7Cj4gKwlFU1BfU0RJT19TVEFURV9G SVJTVF9JTklULAo+ICsJRVNQX1NESU9fU1RBVEVfRklSU1RfTk9STUFMX0VYSVQsCj4gKwlFU1Bf U0RJT19TVEFURV9GSVJTVF9FUlJPUl9FWElULAo+ICsJRVNQX1NESU9fU1RBVEVfU0VDT05EX0lO SVQsCj4gKwlFU1BfU0RJT19TVEFURV9TRUNPTkRfRVJST1JfRVhJVCwKPiArfTsKPiArCj4gK2Vu dW0gZXNwX3RpZF9zdGF0ZSB7Cj4gKwlFU1BfVElEX1NUQVRFX0lOSVQsCj4gKwlFU1BfVElEX1NU QVRFX1RSSUdHRVIsCj4gKwlFU1BfVElEX1NUQVRFX1BST0dSRVNTLAo+ICsJRVNQX1RJRF9TVEFU RV9PUEVSQVRJT05BTCwKPiArCUVTUF9USURfU1RBVEVfV0FJVF9TVE9QLAo+ICsJRVNQX1RJRF9T VEFURV9TVE9QLAo+ICt9Owo+ICsKPiArc3RydWN0IGVzcF90eF90aWQgewo+ICsJdTggc3RhdGU7 Cj4gKwl1OCBjbnQ7Cj4gKwl1MTYgc3NuOwo+ICt9Owo+ICsKPiArI2RlZmluZSBXTUVfTlVNX1RJ RCAxNgo+ICtzdHJ1Y3QgZXNwX25vZGUgewo+ICsJc3RydWN0IGVzcF90eF90aWQgdGlkW1dNRV9O VU1fVElEXTsKPiArCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGE7Cj4gKwl1OCBpZmlkeDsKPiAr CXU4IGluZGV4Owo+ICt9Owo+ICsKPiArI2RlZmluZSBXTUVfQUNfQkUgMgo+ICsjZGVmaW5lIFdN RV9BQ19CSyAzCj4gKyNkZWZpbmUgV01FX0FDX1ZJIDEKPiArI2RlZmluZSBXTUVfQUNfVk8gMAo+ ICsKPiArc3RydWN0IGVzcF92aWYgewo+ICsJc3RydWN0IGVzcF9wdWIgKmVwdWI7Cj4gKwl1OCBp bmRleDsKPiArCXUzMiBiZWFjb25faW50ZXJ2YWw7Cj4gKwlib29sIGFwX3VwOwo+ICsJc3RydWN0 IHRpbWVyX2xpc3QgYmVhY29uX3RpbWVyOwo+ICt9Owo+ICsKPiArLyogV0xBTiByZWxhdGVkLCBt b3N0bHkuLi4gKi8KPiArLypzdHJ1Y3QgaHdfc2Nhbl90aW1lb3V0IHsKPiArICogc3RydWN0IGRl bGF5ZWRfd29yayB3Owo+ICsgKiBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKPiArICogfTsKPiAr ICovCj4gKwo+ICtzdHJ1Y3QgZXNwX3dsIHsKPiArCXU4IGJzc2lkW0VUSF9BTEVOXTsKPiArCXU4 IHJlcV9ic3NpZFtFVEhfQUxFTl07Cj4gKwo+ICsJLy9zdHJ1Y3QgaHdfc2Nhbl90aW1lb3V0ICpo c2Q7Cj4gKwlzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpzY2FuX3JlcTsKPiArCWF0b21p Y190IHB0a19jbnQ7Cj4gKwlhdG9taWNfdCBndGtfY250Owo+ICsJYXRvbWljX3QgdGtpcF9rZXlf c2V0Owo+ICsKPiArCS8qIHNvIGZhciBvbmx5IDJHIGJhbmQgKi8KPiArCXN0cnVjdCBpZWVlODAy MTFfc3VwcG9ydGVkX2JhbmQgc2JhbmRzW05VTV9OTDgwMjExX0JBTkRTXTsKPiArCj4gKwl1bnNp Z25lZCBsb25nIGZsYWdzOwo+ICsJYXRvbWljX3Qgb2ZmOwo+ICt9Owo+ICsKPiArc3RydWN0IGVz cF9od19pZHhfbWFwIHsKPiArCXU4IG1hY1tFVEhfQUxFTl07Cj4gKwl1OCBmbGFnOwo+ICt9Owo+ ICsKPiArI2RlZmluZSBFU1BfV0xfRkxBR19SRktJTEwJCUJJVCgwKQo+ICsjZGVmaW5lIEVTUF9X TF9GTEFHX0hXX1JFR0lTVEVSRUQJQklUKDEpCj4gKyNkZWZpbmUgRVNQX1dMX0ZMQUdfQ09OTkVD VAkJQklUKDIpCj4gKyNkZWZpbmUgRVNQX1dMX0ZMQUdfU1RPUF9UWFEJCUJJVCgzKQo+ICsKPiAr I2RlZmluZSBFU1BfUFVCX01BWF9WSUYJCQkyCj4gKyNkZWZpbmUgRVNQX1BVQl9NQVhfU1RBCQkJ NAkvL2ZvciBvbmUgaW50ZXJmYWNlCj4gKyNkZWZpbmUgRVNQX1BVQl9NQVhfUlhBTVBEVQkJOAkv L2ZvciBhbGwgaW50ZXJmYWNlcwo+ICsKPiArZW51bSB7Cj4gKwlFU1BfUE1fT0ZGID0gMCwKPiAr CUVTUF9QTV9UVVJOSU5HX09OLAo+ICsJRVNQX1BNX09OLAo+ICsJRVNQX1BNX1RVUk5JTkdfT0ZG LAkvKiBEbyBOT1QgY2hhbmdlIHRoZSBvcmRlciAqLwo+ICt9Owo+ICsKPiArc3RydWN0IGVzcF9w cyB7Cj4gKwl1MzIgZHRpbV9wZXJpb2Q7Cj4gKwl1MzIgbWF4X3NsZWVwX3BlcmlvZDsKPiArCXVu c2lnbmVkIGxvbmcgbGFzdF9jb25maWdfdGltZTsKPiArCWF0b21pY190IHN0YXRlOwo+ICsJYm9v bCBudWxsZGF0YV9wbV9vbjsKPiArfTsKPiArCj4gK3N0cnVjdCBlc3BfbWFjX3ByZWZpeCB7Cj4g Kwl1OCBtYWNfaW5kZXg7Cj4gKwl1OCBtYWNfYWRkcl9wcmVmaXhbM107Cj4gK307Cj4gKwo+ICtz dHJ1Y3QgZXNwX3B1YiB7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4gKwlzdHJ1Y3QgaWVlZTgw MjExX2h3ICpodzsKPiArCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWY7Cj4gKwl1OCB2aWZfc2xv dDsKPiArCj4gKwlzdHJ1Y3QgZXNwX3NkaW9fY3RybCAqc2lmOyAvKiBzZXJpYWwgaW50ZXJmYWNl IGNvbnRyb2wgYmxvY2ssIGUuZy4gc2RpbyAqLwo+ICsJZW51bSBlc3Bfc2Rpb19zdGF0ZSBzZGlv X3N0YXRlOwo+ICsJc3RydWN0IGVzcF9zaXAgKnNpcDsKPiArCXN0cnVjdCBlc3Bfd2wgd2w7Cj4g KwlzdHJ1Y3QgZXNwX2h3X2lkeF9tYXAgaGlfbWFwWzE5XTsKPiArCXN0cnVjdCBlc3BfaHdfaWR4 X21hcCBsb3dfbWFwW0VTUF9QVUJfTUFYX1ZJRl1bMl07Cj4gKwkvL3UzMiBmbGFnczsgLy9mbGFn cyB0byByZXByZXNlbnQgcmZraWxsIHN3aXRjaCxzdGFydAo+ICsJdTggcm9jX2ZsYWdzOyAgIC8v MDogbm90IGluIHJlbWFpbiBvbiBjaGFubmVsIHN0YXRlLCAxOiBpbiByb2Mgc3RhdGUKPiArCj4g KwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdHhfd29yazsgLyogYXR0YWNoIHRvIGllZWU4MDIxMSB3b3Jr cXVldWUgKi8KPiArCS8qIGxhdGVzdCBtYWM4MDIxMSBoYXMgbXVsdGlwbGUgdHggcXVldWUsIGJ1 dCB3ZSBzdGljayB3aXRoIHNpbmdsZSBxdWV1ZSBub3cgKi8KPiArCXNwaW5sb2NrX3QgcnhfbG9j azsKPiArCXNwaW5sb2NrX3QgdHhfYW1wZHVfbG9jazsKPiArCXNwaW5sb2NrX3QgcnhfYW1wZHVf bG9jazsKPiArCXNwaW5sb2NrX3QgdHhfbG9jazsKPiArCXN0cnVjdCBtdXRleCB0eF9tdHg7Cj4g KwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4cTsKPiArCWF0b21pY190IHR4cV9zdG9wcGVkOwo+ICsK PiArCXN0cnVjdCB3b3JrX3N0cnVjdCBzZW5kdXBfd29yazsJLyogYXR0YWNoIHRvIGllZWU4MDIx MSB3b3JrcXVldWUgKi8KPiArCXN0cnVjdCBza19idWZmX2hlYWQgdHhkb25lcTsKPiArCXN0cnVj dCBza19idWZmX2hlYWQgcnhxOwo+ICsKPiArCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICplc3Bf d2txOwo+ICsKPiArCS8vdTggYnNzaWRbRVRIX0FMRU5dOwo+ICsJdTggbWFjX2FkZHJbRVRIX0FM RU5dOwo+ICsKPiArCXUzMiByeF9maWx0ZXI7Cj4gKwl1bnNpZ25lZCBsb25nIHNjYW5fcGVybWl0 Owo+ICsJYm9vbCBzY2FuX3Blcm1pdF92YWxpZDsKPiArCXN0cnVjdCBkZWxheWVkX3dvcmsgc2Nh bl90aW1lb3V0X3dvcms7Cj4gKwl1MzIgZW5vZGVzX21hcDsKPiArCXU4IHJ4YW1wZHVfbWFwOwo+ ICsJdTMyIGVub2Rlc19tYXBzW0VTUF9QVUJfTUFYX1ZJRl07Cj4gKwlzdHJ1Y3QgZXNwX25vZGUg KmVub2Rlc1tFU1BfUFVCX01BWF9TVEEgKyAxXTsKPiArCXN0cnVjdCBlc3Bfbm9kZSAqcnhhbXBk dV9ub2RlW0VTUF9QVUJfTUFYX1JYQU1QRFVdOwo+ICsJdTggcnhhbXBkdV90aWRbRVNQX1BVQl9N QVhfUlhBTVBEVV07Cj4gKwlzdHJ1Y3QgZXNwX3BzIHBzOwo+ICsJaW50IGVuYWJsZV9pbnQ7Cj4g KwlpbnQgd2FpdF9yZXNldDsKPiArfTsKPiArCj4gK3N0cnVjdCBlc3BfcHViICplc3BfcHViX2Fs bG9jX21hYzgwMjExKHN0cnVjdCBkZXZpY2UgKmRldik7Cj4gK2ludCBlc3BfcHViX2RlYWxsb2Nf bWFjODAyMTEoc3RydWN0IGVzcF9wdWIgKmVwdWIpOwo+ICtpbnQgZXNwX3JlZ2lzdGVyX21hYzgw MjExKHN0cnVjdCBlc3BfcHViICplcHViKTsKPiArCj4gK2ludCBlc3BfcHViX2luaXRfYWxsKHN0 cnVjdCBlc3BfcHViICplcHViKTsKPiArCj4gK3ZvaWQgZXNwX2RzcihzdHJ1Y3QgZXNwX3B1YiAq ZXB1Yik7Cj4gK3ZvaWQgaHdfc2Nhbl9kb25lKHN0cnVjdCBlc3BfcHViICplcHViLCBib29sIGFi b3J0ZWQpOwo+ICt2b2lkIGVzcF9yb2Nkb25lX3Byb2Nlc3Moc3RydWN0IGllZWU4MDIxMV9odyAq aHcsIHN0cnVjdCBzaXBfZXZ0X3JvYyAqcmVwb3J0KTsKPiArCj4gK3N0cnVjdCBlc3Bfbm9kZSAq ZXNwX2dldF9ub2RlX2J5X2FkZHIoc3RydWN0IGVzcF9wdWIgKmVwdWIsIGNvbnN0IHU4ICphZGRy KTsKPiAraW50IGVzcF9nZXRfZW1wdHlfcnhhbXBkdShzdHJ1Y3QgZXNwX3B1YiAqZXB1YiwgY29u c3QgdTggKmFkZHIsIHU4IHRpZCk7Cj4gK2ludCBlc3BfZ2V0X2V4aXN0X3J4YW1wZHUoc3RydWN0 IGVzcF9wdWIgKmVwdWIsIGNvbnN0IHU4ICphZGRyLCB1OCB0aWQpOwo+ICsKPiArI2VuZGlmIC8q IF9FU1BfUFVCX0hfICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lc3A4MDg5L2Vz cF9zaWYuaCBiL2RyaXZlcnMvc3RhZ2luZy9lc3A4MDg5L2VzcF9zaWYuaAo+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi4yOTM2NDBiMTFiMGMKPiAtLS0gL2Rldi9u dWxsCj4gKysrIGIvZHJpdmVycy9zdGFnaW5nL2VzcDgwODkvZXNwX3NpZi5oCj4gQEAgLTAsMCAr MSwxMzEgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IChjKSAyMDExIC0gMjAxNCBFc3ByZXNzaWYg U3lzdGVtLgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTcgRnJlZSBFbGVjdHJvbnMKPiArICogICAg ICBRdWVudGluIFNjaHVseiA8cXVlbnRpbi5zY2h1bHpAZnJlZS1lbGVjdHJvbnMuY29tPgo+ICsg Kgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgo+ICsgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlCj4gKyAq IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPiArICoKPiArICovCj4gKwo+ICsjaWZuZGVmIF9F U1BfU0lGX0hfCj4gKyNkZWZpbmUgX0VTUF9TSUZfSF8KPiArCj4gKyNpbmNsdWRlICJlc3BfcHVi LmgiCj4gKyNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgo+ICsjaW5jbHVkZSA8bGludXgvc3Bp L3NwaS5oPgo+ICsKPiArLyogSC9XIFNMQyBtb2R1bGUgZGVmaW5pdGlvbnMgKi8KPiArCj4gKyNk ZWZpbmUgU0lGX1NMQ19CTE9DS19TSVpFICAgICAgICAgICAgICAgIDUxMgo+ICsKPiArLyogUy9X IHN0cnVjdCBtYXBwaW5nIHRvIHNsYyByZWdpc3RlcnMgKi8KPiArc3RydWN0IHNsY19ob3N0X3Jl Z3Mgewo+ICsJLyogZG8gTk9UIHJlYWQgdG9rZW5fcmRhdGEKPiArCSAqCj4gKwkgKiB1MzIgcGZf ZGF0YTsKPiArCSAqIHUzMiB0b2tlbl9yZGF0YTsKPiArCSAqLwo+ICsJdTMyIGludHJfcmF3Owo+ ICsJdTMyIHN0YXRlX3cwOwo+ICsJdTMyIHN0YXRlX3cxOwo+ICsJdTMyIGNvbmZpZ193MDsKPiAr CXUzMiBjb25maWdfdzE7Cj4gKwl1MzIgaW50cl9zdGF0dXM7Cj4gKwl1MzIgY29uZmlnX3cyOwo+ ICsJdTMyIGNvbmZpZ193MzsKPiArCXUzMiBjb25maWdfdzQ7Cj4gKwl1MzIgdG9rZW5fd2RhdGE7 Cj4gKwl1MzIgaW50cl9jbGVhcjsKPiArCXUzMiBpbnRyX2VuYWJsZTsKPiArfTsKPiArCj4gK2Vu dW0gaW9fc3luY190eXBlIHsKPiArCUVTUF9TSUZfTk9TWU5DID0gMCwKPiArCUVTUF9TSUZfU1lO QywKPiArfTsKPiArCj4gK3N0cnVjdCBlc3Bfc2Rpb19jdHJsIHsKPiArCXN0cnVjdCBzZGlvX2Z1 bmMgKmZ1bmM7Cj4gKwlzdHJ1Y3QgZXNwX3B1YiAqZXB1YjsKPiArCj4gKwlzdHJ1Y3QgbGlzdF9o ZWFkIGZyZWVfcmVxOwo+ICsKPiArCXU4ICpkbWFfYnVmZmVyOwo+ICsKPiArCXNwaW5sb2NrX3Qg c2NhdF9sb2NrOwo+ICsJc3RydWN0IGxpc3RfaGVhZCBzY2F0X3JlcTsKPiArCj4gKwlib29sIG9m ZjsKPiArCWF0b21pY190IGlycV9oYW5kbGluZzsKPiArCWNvbnN0IHN0cnVjdCBzZGlvX2Rldmlj ZV9pZCAqaWQ7Cj4gKwl1MzIgc2xjX2Jsa19zejsKPiArCXUzMiB0YXJnZXRfaWQ7Cj4gKwl1MzIg c2xjX3dpbmRvd19lbmRfYWRkcjsKPiArCj4gKwlzdHJ1Y3Qgc2xjX2hvc3RfcmVncyBzbGNfcmVn czsKPiArCWF0b21pY190IGlycV9pbnN0YWxsZWQ7Cj4gKwo+ICt9Owo+ICsKPiArI2RlZmluZSBT SUZfVE9fREVWSUNFCQkweDEKPiArI2RlZmluZSBTSUZfRlJPTV9ERVZJQ0UJCTB4Mgo+ICsKPiAr I2RlZmluZSBTSUZfU1lOQwkJMHgwMDAwMDAxMAo+ICsjZGVmaW5lIFNJRl9BU1lOQwkJMHgwMDAw MDAyMAo+ICsKPiArI2RlZmluZSBTSUZfQllURV9CQVNJUwkJMHgwMDAwMDA0MAo+ICsjZGVmaW5l IFNJRl9CTE9DS19CQVNJUwkJMHgwMDAwMDA4MAo+ICsKPiArI2RlZmluZSBTSUZfRklYRURfQURE UgkJMHgwMDAwMDEwMAo+ICsjZGVmaW5lIFNJRl9JTkNfQUREUgkJMHgwMDAwMDIwMAo+ICsKPiAr dm9pZCBzZGlvX2lvX3dyaXRlYihzdHJ1Y3QgZXNwX3B1YiAqZXB1YiwgdTggdmFsdWUsIGludCBh ZGRyLCBpbnQgKnJlcyk7Cj4gK3U4IHNkaW9faW9fcmVhZGIoc3RydWN0IGVzcF9wdWIgKmVwdWIs IGludCBhZGRyLCBpbnQgKnJlcyk7Cj4gKwo+ICt2b2lkIHNpZl9lbmFibGVfaXJxKHN0cnVjdCBl c3BfcHViICplcHViKTsKPiArdm9pZCBzaWZfZGlzYWJsZV9pcnEoc3RydWN0IGVzcF9wdWIgKmVw dWIpOwo+ICt2b2lkIHNpZl9kaXNhYmxlX3RhcmdldF9pbnRlcnJ1cHQoc3RydWN0IGVzcF9wdWIg KmVwdWIpOwo+ICsKPiArdTMyIHNpZl9nZXRfYmxrc3ooc3RydWN0IGVzcF9wdWIgKmVwdWIpOwo+ ICsKPiArdm9pZCBzaWZfZHNyKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMpOwo+ICtpbnQgc2lmX2lv X3JhdyhzdHJ1Y3QgZXNwX3B1YiAqZXB1YiwgdTMyIGFkZHIsIHU4ICpidWYsIHUzMiBsZW4sIHUz MiBmbGFnKTsKPiAraW50IHNpZl9pb19zeW5jKHN0cnVjdCBlc3BfcHViICplcHViLCB1MzIgYWRk ciwgdTggKmJ1ZiwgdTMyIGxlbiwgdTMyIGZsYWcpOwo+ICtpbnQgc2lmX2xsZGVzY19yZWFkX3N5 bmMoc3RydWN0IGVzcF9wdWIgKmVwdWIsIHU4ICpidWYsIHUzMiBsZW4pOwo+ICtpbnQgc2lmX2xs ZGVzY193cml0ZV9zeW5jKHN0cnVjdCBlc3BfcHViICplcHViLCB1OCAqYnVmLCB1MzIgbGVuKTsK PiAraW50IHNpZl9sbGRlc2NfcmVhZF9yYXcoc3RydWN0IGVzcF9wdWIgKmVwdWIsIHU4ICpidWYs IHUzMiBsZW4sIGJvb2wgbm9yb3VuZCk7Cj4gK2ludCBzaWZfbGxkZXNjX3dyaXRlX3JhdyhzdHJ1 Y3QgZXNwX3B1YiAqZXB1YiwgdTggKmJ1ZiwgdTMyIGxlbik7Cj4gKwo+ICtpbnQgZXNwX2NvbW1v bl9yZWFkKHN0cnVjdCBlc3BfcHViICplcHViLCB1OCAqYnVmLCB1MzIgbGVuLCBpbnQgc3luYywK PiArCQkgICAgYm9vbCBub3JvdW5kKTsKPiAraW50IGVzcF9jb21tb25fd3JpdGUoc3RydWN0IGVz cF9wdWIgKmVwdWIsIHU4ICpidWYsIHUzMiBsZW4sIGludCBzeW5jKTsKPiAraW50IGVzcF9jb21t b25fcmVhZF93aXRoX2FkZHIoc3RydWN0IGVzcF9wdWIgKmVwdWIsIHUzMiBhZGRyLCB1OCAqYnVm LCB1MzIgbGVuLAo+ICsJCQkgICAgICBpbnQgc3luYyk7Cj4gK2ludCBlc3BfY29tbW9uX3dyaXRl X3dpdGhfYWRkcihzdHJ1Y3QgZXNwX3B1YiAqZXB1YiwgdTMyIGFkZHIsIHU4ICpidWYsCj4gKwkJ CSAgICAgICB1MzIgbGVuLCBpbnQgc3luYyk7Cj4gKwo+ICtpbnQgZXNwX2NvbW1vbl9yZWFkYnl0 ZV93aXRoX2FkZHIoc3RydWN0IGVzcF9wdWIgKmVwdWIsIHUzMiBhZGRyLCB1OCAqYnVmLAo+ICsJ CQkJICBpbnQgc3luYyk7Cj4gK2ludCBlc3BfY29tbW9uX3dyaXRlYnl0ZV93aXRoX2FkZHIoc3Ry dWN0IGVzcF9wdWIgKmVwdWIsIHUzMiBhZGRyLCB1OCBidWYsCj4gKwkJCQkgICBpbnQgc3luYyk7 Cj4gKwo+ICtzdHJ1Y3Qgc2xjX2hvc3RfcmVncyAqc2lmX2dldF9yZWdzKHN0cnVjdCBlc3BfcHVi ICplcHViKTsKPiArCj4gK3ZvaWQgc2lmX2xvY2tfYnVzKHN0cnVjdCBlc3BfcHViICplcHViKTsK PiArdm9pZCBzaWZfdW5sb2NrX2J1cyhzdHJ1Y3QgZXNwX3B1YiAqZXB1Yik7Cj4gKwo+ICtpbnQg c2lmX2ludGVycnVwdF90YXJnZXQoc3RydWN0IGVzcF9wdWIgKmVwdWIsIHU4IGluZGV4KTsKPiAr Cj4gK3ZvaWQgY2hlY2tfdGFyZ2V0X2lkKHN0cnVjdCBlc3BfcHViICplcHViKTsKPiArCj4gK3Zv aWQgc2lmX3JlY29yZF9idF9jb25maWcoaW50IHZhbHVlKTsKPiAraW50IHNpZl9nZXRfYnRfY29u ZmlnKHZvaWQpOwo+ICt2b2lkIHNpZl9yZWNvcmRfcnN0X2NvbmZpZyhpbnQgdmFsdWUpOwo+ICtp bnQgc2lmX2dldF9yc3RfY29uZmlnKHZvaWQpOwo+ICt2b2lkIHNpZl9yZWNvcmRfYXRlX2NvbmZp ZyhpbnQgdmFsdWUpOwo+ICtpbnQgc2lmX2dldF9hdGVfY29uZmlnKHZvaWQpOwo+ICt2b2lkIHNp Zl9yZWNvcmRfd2FrZXVwX2dwaW9fY29uZmlnKGludCB2YWx1ZSk7Cj4gK2ludCBzaWZfZ2V0X3dh a2V1cF9ncGlvX2NvbmZpZyh2b2lkKTsKPiArI2VuZGlmCQkJCS8qIF9FU1BfU0lGX0hfICovCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lc3A4MDg5L2VzcF9zaXAuYyBiL2RyaXZlcnMv c3RhZ2luZy9lc3A4MDg5L2VzcF9zaXAuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXgg MDAwMDAwMDAwMDAwLi45MWZiNjRjOWI3OTQKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVy cy9zdGFnaW5nL2VzcDgwODkvZXNwX3NpcC5jCj4gQEAgLTAsMCArMSwxNzE4IEBACj4gKy8qCj4g KyAqIENvcHlyaWdodCAoYykgMjAwOSAtIDIwMTQgRXNwcmVzc2lmIFN5c3RlbS4KPiArICogQ29w eXJpZ2h0IChjKSAyMDE3IEZyZWUgRWxlY3Ryb25zCj4gKyAqICAgICAgUXVlbnRpbiBTY2h1bHog PHF1ZW50aW4uc2NodWx6QGZyZWUtZWxlY3Ryb25zLmNvbT4KPiArICoKPiArICogVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkgaXQgdW5kZXIKPiArICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZQo+ICsgKiBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24uCj4gKyAqCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5o Pgo+ICsjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+Cj4gKyNpbmNsdWRlIDxuZXQvY2ZnODAyMTEu aD4KPiArI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgo+ICsjaW5jbHVkZSA8bGludXgvYml0b3Bz Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tbWMvY2FyZC5oPgo+ICsjaW5jbHVkZSA8bGludXgvbW1j L21tYy5oPgo+ICsjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KPiArI2luY2x1ZGUgPGxpbnV4 L21tYy9zZGlvX2Z1bmMuaD4KPiArI2luY2x1ZGUgPGxpbnV4L21tYy9zZGlvX2lkcy5oPgo+ICsj aW5jbHVkZSA8bGludXgvbW1jL3NkaW8uaD4KPiArI2luY2x1ZGUgPGxpbnV4L21tYy9zZC5oPgo+ ICsjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgo+ICsKPiArI2luY2x1ZGUgImVzcF9tYWM4 MDIxMS5oIgo+ICsjaW5jbHVkZSAiZXNwX3B1Yi5oIgo+ICsjaW5jbHVkZSAiZXNwX3NpcC5oIgo+ ICsjaW5jbHVkZSAiZXNwX2N0cmwuaCIKPiArI2luY2x1ZGUgImVzcF9zaWYuaCIKPiArI2luY2x1 ZGUgImVzcF9kZWJ1Zy5oIgo+ICsjaW5jbHVkZSAic2xjX2hvc3RfcmVnaXN0ZXIuaCIKPiArI2lu Y2x1ZGUgImVzcF93bWFjLmgiCj4gKyNpbmNsdWRlICJlc3BfdXRpbHMuaCIKPiArCj4gK2V4dGVy biBzdHJ1Y3QgY29tcGxldGlvbiAqZ2xfYm9vdHVwX2NwbHg7Cj4gKwo+ICtzdGF0aWMgaW50IG9s ZF9zaWduYWwgPSAtMzU7Cj4gK3N0YXRpYyBpbnQgYXZnX3NpZ25hbDsKPiArc3RhdGljIGludCBz aWduYWxfbG9vcDsKPiArCj4gK3N0cnVjdCBlc3BfbWFjX3ByZWZpeCBlc3BfbWFjX3ByZWZpeF90 YWJsZVtdID0gewo+ICsJezAsIHsweDE4LCAweGZlLCAweDM0fSB9LAo+ICsJezEsIHsweGFjLCAw eGQwLCAweDc0fSB9LAo+ICsJezI1NSwgezB4MTgsIDB4ZmUsIDB4MzR9IH0sCj4gK307Cj4gKwo+ ICsjZGVmaW5lIFNJR05BTF9DT1VOVCAgMzAwCj4gKwo+ICsvKiBGSVhNRTogSW5jb21wbGV0ZSB0 ZXJuYXJ5IGNvbmRpdGlvbiAqLwo+ICsjZGVmaW5lIFRJRF9UT19BQyhfdGlkKSAoIShfdGlkKSB8 fCAoX3RpZCkgPT0gMyA/IFdNRV9BQ19CRSA6ICgoX3RpZCkgPCAzID8gV01FX0FDX0JLIDogKChf dGlkKSA8IDYgPyBXTUVfQUNfVkkgOiBXTUVfQUNfVk8pKSkKPiArCj4gKyNkZWZpbmUgZXNwX3Np cF9kYmcgZXNwX2RiZwo+ICtzdHJ1Y3Qgc2lwX3RyYWNlIHsKPiArCXUzMiB0eF9kYXRhOwo+ICsJ dTMyIHR4X2NtZDsKPiArCXUzMiByeF9kYXRhOwo+ICsJdTMyIHJ4X2V2dDsKPiArCXUzMiByeF90 eF9zdGF0dXM7Cj4gKwl1MzIgdHhfb3V0X29mX2NyZWRpdDsKPiArCXUzMiB0eF9vbmVfc2hvdF9v dmVyZmxvdzsKPiArfTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3Qgc2lwX3RyYWNlIHN0cjsKPiArCj4g KyNkZWZpbmUgU1RSQUNFX1RYX0RBVEFfSU5DKCkgKHN0ci50eF9kYXRhKyspCj4gKyNkZWZpbmUg U1RSQUNFX1RYX0NNRF9JTkMoKSAgKHN0ci50eF9jbWQrKykKPiArI2RlZmluZSBTVFJBQ0VfUlhf REFUQV9JTkMoKSAoc3RyLnJ4X2RhdGErKykKPiArI2RlZmluZSBTVFJBQ0VfUlhfRVZFTlRfSU5D KCkgKHN0ci5yeF9ldnQrKykKPiArI2RlZmluZSBTVFJBQ0VfUlhfVFhTVEFUVVNfSU5DKCkgKHN0 ci5yeF90eF9zdGF0dXMrKykKPiArI2RlZmluZSBTVFJBQ0VfVFhfT1VUX09GX0NSRURJVF9JTkMo KSAoc3RyLnR4X291dF9vZl9jcmVkaXQrKykKPiArI2RlZmluZSBTVFJBQ0VfVFhfT05FX1NIT1Rf SU5DKCkgKHN0ci50eF9vbmVfc2hvdF9vdmVyZmxvdysrKQo+ICsKPiArI2RlZmluZSBTSVBfU1RP UF9RVUVVRV9USFJFU0hPTEQgNDgKPiArI2RlZmluZSBTSVBfUkVTVU1FX1FVRVVFX1RIUkVTSE9M RCAgMTIKPiArCj4gKyNkZWZpbmUgU0lQX01JTl9EQVRBX1BLVF9MRU4gICAgKHNpemVvZihzdHJ1 Y3QgZXNwX21hY19yeF9jdHJsKSArIDI0KQkvLzI0IGlzIG1pbiA4MDIxMWhkcgo+ICsKPiArc3Rh dGljIHZvaWQgc2lwX3JlY2FsY19jcmVkaXRfaW5pdChzdHJ1Y3QgZXNwX3NpcCAqc2lwKTsKPiAr Cj4gK3N0YXRpYyBpbnQgc2lwX3JlY2FsY19jcmVkaXRfY2xhaW0oc3RydWN0IGVzcF9zaXAgKnNp cCwgaW50IGZvcmNlKTsKPiArCj4gK3N0YXRpYyB2b2lkIHNpcF9yZWNhbGNfY3JlZGl0X3JlbGVh c2Uoc3RydWN0IGVzcF9zaXAgKnNpcCk7Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHNpcF9wa3QgKnNp cF9nZXRfY3RybF9idWYoc3RydWN0IGVzcF9zaXAgKnNpcCwKPiArCQkJCQllbnVtIHNpcF9idWZf dHlwZSBiZnR5cGUpOwo+ICsKPiArc3RhdGljIHZvaWQgc2lwX3JlY2xhaW1fY3RybF9idWYoc3Ry dWN0IGVzcF9zaXAgKnNpcCwgc3RydWN0IHNpcF9wa3QgKnBrdCwKPiArCQkJCSBlbnVtIHNpcF9i dWZfdHlwZSBiZnR5cGUpOwo+ICsKPiArc3RhdGljIHZvaWQgc2lwX2ZyZWVfaW5pdF9jdHJsX2J1 ZihzdHJ1Y3QgZXNwX3NpcCAqc2lwKTsKPiArCj4gK3N0YXRpYyBpbnQgc2lwX3BhY2tfcGt0KHN0 cnVjdCBlc3Bfc2lwICpzaXAsIHN0cnVjdCBza19idWZmICpza2IsCj4gKwkJCWludCAqcG1fc3Rh dGUpOwo+ICsKPiArc3RhdGljIHN0cnVjdCBlc3BfbWFjX3J4X2N0cmwgKnNpcF9wYXJzZV9ub3Jt YWxfbWFjX2N0cmwoc3RydWN0IHNrX2J1ZmYgKnNrYiwKPiArCQkJCQkJCSBpbnQgKnBrdF9sZW5f ZW5jLAo+ICsJCQkJCQkJIGludCAqYnVmX2xlbiwKPiArCQkJCQkJCSBpbnQgKnB1bGxlZF9sZW4p Owo+ICsKPiArc3RhdGljIHN0cnVjdCBza19idWZmICpzaXBfcGFyc2VfZGF0YV9yeF9pbmZvKHN0 cnVjdCBlc3Bfc2lwICpzaXAsCj4gKwkJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKPiAr CQkJCQkgICAgICBpbnQgcGt0X2xlbl9lbmMsIGludCBidWZfbGVuLAo+ICsJCQkJCSAgICAgIHN0 cnVjdCBlc3BfbWFjX3J4X2N0cmwgKm1hY19jdHJsLAo+ICsJCQkJCSAgICAgIGludCAqcHVsbGVk X2xlbik7Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZvaWQgc2lwX3J4X3BrdF9lbnF1ZXVlKHN0cnVj dCBlc3Bfc2lwICpzaXAsIHN0cnVjdCBza19idWZmICpza2IpOwo+ICsKPiArc3RhdGljIHZvaWQg c2lwX3VwZGF0ZV90eF9jcmVkaXRzKHN0cnVjdCBlc3Bfc2lwICpzaXAsIHUxNiByZWN5Y2xlZF9j cmVkaXRzKTsKPiArCj4gK3N0YXRpYyBib29sIHNpcF9yeF9wa3RfcHJvY2VzcyhzdHJ1Y3QgZXNw X3NpcCAqc2lwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKPiArCj4gK3N0YXRpYyB2b2lkIHNpcF90 eF9zdGF0dXNfcmVwb3J0KHN0cnVjdCBlc3Bfc2lwICpzaXAsIHN0cnVjdCBza19idWZmICpza2Is Cj4gKwkJCQkgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvLAo+ICsJCQkJIGJvb2wg c3VjY2Vzcyk7Cj4gKwo+ICtzdGF0aWMgYm9vbCBjaGVja19hY190aWQodTggKnBrdCwgdTggYWMs IHU4IHRpZCkKPiArewo+ICsJc3RydWN0IGllZWU4MDIxMV9oZHIgKndoID0gKHN0cnVjdCBpZWVl ODAyMTFfaGRyICopcGt0Owo+ICsKPiArCWlmICghaWVlZTgwMjExX2lzX2RhdGFfcW9zKHdoLT5m cmFtZV9jb250cm9sKSAmJgo+ICsJICAgICFpZWVlODAyMTFfaXNfbWdtdCh3aC0+ZnJhbWVfY29u dHJvbCkgJiYKPiArCSAgICAhaWVlZTgwMjExX2lzX2N0bCh3aC0+ZnJhbWVfY29udHJvbCkpIHsK PiArCQlpZiAodGlkIHx8IGFjICE9IFdNRV9BQ19CRSkgewo+ICsJCQlwcl9pbmZvKCI0NDQgYWM6 JXUsIHRpZDoldVxuIiwgYWMsIHRpZCk7Cj4gKwo+ICsJCQlpZiAodGlkID09IDcgJiYgYWMgPT0g V01FX0FDX1ZPKQo+ICsJCQkJcmV0dXJuIGZhbHNlOwo+ICsJCX0KPiArCj4gKwkJcmV0dXJuIHRy dWU7CS8vaGFjayB0byBtb2RpZnkgbm9uLXFvcyBudWxsIGRhdGEuCj4gKwl9Cj4gKwo+ICsJcmV0 dXJuIGZhbHNlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBzaXBfcmVjYWxjX2NyZWRpdF90aW1l b3V0KHVuc2lnbmVkIGxvbmcgZGF0YSkKPiArewo+ICsJc3RydWN0IGVzcF9zaXAgKnNpcCA9IChz dHJ1Y3QgZXNwX3NpcCAqKWRhdGE7Cj4gKwo+ICsJc2lwX3JlY2FsY19jcmVkaXRfY2xhaW0oc2lw LCAxKTsJLyogcmVjYWxjIGFnYWluICovCj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHNpcF9yZWNh bGNfY3JlZGl0X2luaXQoc3RydWN0IGVzcF9zaXAgKnNpcCkKPiArewo+ICsJYXRvbWljX3NldCgm c2lwLT5jcmVkaXRfc3RhdHVzLCBSRUNBTENfQ1JFRElUX0RJU0FCTEUpOwkvL3NldCBpdCBkaXNh YmxlCj4gKwo+ICsJc2V0dXBfdGltZXIoJnNpcC0+Y3JlZGl0X3RpbWVyLCBzaXBfcmVjYWxjX2Ny ZWRpdF90aW1lb3V0LAo+ICsJCSAgICAodW5zaWduZWQgbG9uZylzaXApOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IHNpcF9yZWNhbGNfY3JlZGl0X2NsYWltKHN0cnVjdCBlc3Bfc2lwICpzaXAsIGlu dCBmb3JjZSkKPiArewo+ICsJaW50IHJldDsKPiArCj4gKwlpZiAoYXRvbWljX3JlYWQoJnNpcC0+ Y3JlZGl0X3N0YXR1cykgPT0gUkVDQUxDX0NSRURJVF9FTkFCTEUgJiYgIWZvcmNlKQo+ICsJCXJl dHVybiAxOwoKUHV0IGEgY29tbWVudCB0byBkZXNjcmliZSB3aGF0IHdoeSB3ZSBhcmUgcmV0dXJu aW5nIGEgbWl4IG9mIDEsIHplcm8gYW5kCm5lZ2F0aXZlIGVycm9yIGNvZGVzLiAgSXQncyBpbXBv c3NpYmxlIHRvIHRlbGwgZnJvbSB0aGUgY29udGV4dCBiZWNhdXNlCm5vbmUgb2YgdGhlIGNhbGxl cnMgY2hlY2suCgo+ICsKPiArCWF0b21pY19zZXQoJnNpcC0+Y3JlZGl0X3N0YXR1cywgUkVDQUxD X0NSRURJVF9FTkFCTEUpOwo+ICsJcmV0ID0gc2lwX3NlbmRfcmVjYWxjX2NyZWRpdChzaXAtPmVw dWIpOwo+ICsJaWYgKHJldCkgewo+ICsJCWRldl9lcnIoc2lwLT5lcHViLT5kZXYsICJzZW5kaW5n IHJlY2FsYyBjcmVkaXQgZmFpbGVkOiAlZCIsCj4gKwkJCXJldCk7Cj4gKwkJcmV0dXJuIHJldDsK PiArCX0KPiArCj4gKwkvKnNldHVwIGEgdGltZXIgZm9yIGhhbmRsZSB0aGUgYWJzX2NyZWRpdCBu b3QgcmVjZWl2ZSAqLwo+ICsJbW9kX3RpbWVyKCZzaXAtPmNyZWRpdF90aW1lciwgamlmZmllcyAr IG1zZWNzX3RvX2ppZmZpZXMoMjAwMCkpOwo+ICsKPiArCXJldHVybiByZXQ7CgpyZXR1cm4gMDsK Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHNpcF9yZWNhbGNfY3JlZGl0X3JlbGVhc2Uoc3RydWN0 IGVzcF9zaXAgKnNpcCkKPiArewo+ICsJaWYgKGF0b21pY19yZWFkKCZzaXAtPmNyZWRpdF9zdGF0 dXMpID09IFJFQ0FMQ19DUkVESVRfRU5BQkxFKSB7Cj4gKwkJYXRvbWljX3NldCgmc2lwLT5jcmVk aXRfc3RhdHVzLCBSRUNBTENfQ1JFRElUX0RJU0FCTEUpOwo+ICsJCWRlbF90aW1lcl9zeW5jKCZz aXAtPmNyZWRpdF90aW1lcik7Cj4gKwl9IGVsc2Ugewo+ICsJCWRldl9kYmcoc2lwLT5lcHViLT5k ZXYsICJtYXliZSBib2d1cyBjcmVkaXQiKTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQg c2lwX3VwZGF0ZV90eF9jcmVkaXRzKHN0cnVjdCBlc3Bfc2lwICpzaXAsIHUxNiByZWN5Y2xlZF9j cmVkaXRzKQo+ICt7Cj4gKwlpZiAocmVjeWNsZWRfY3JlZGl0cyAmIDB4ODAwKSB7Cj4gKwkJYXRv bWljX3NldCgmc2lwLT50eF9jcmVkaXRzLCAocmVjeWNsZWRfY3JlZGl0cyAmIDB4N2ZmKSk7Cj4g KwkJc2lwX3JlY2FsY19jcmVkaXRfcmVsZWFzZShzaXApOwo+ICsJfSBlbHNlIHsKPiArCQlhdG9t aWNfYWRkKHJlY3ljbGVkX2NyZWRpdHMsICZzaXAtPnR4X2NyZWRpdHMpOwo+ICsJfQo+ICt9Cj4g Kwo+ICt2b2lkIHNpcF90cmlnZ2VyX3R4cV9wcm9jZXNzKHN0cnVjdCBlc3Bfc2lwICpzaXApCj4g K3sKPiArCWlmIChhdG9taWNfcmVhZCgmc2lwLT50eF9jcmVkaXRzKSA8PSBzaXAtPmNyZWRpdF90 b19yZXNlcnZlICsgU0lQX0NUUkxfQ1JFRElUX1JFU0VSVkUgfHwKPiArCSAgICBhdG9taWNfcmVh ZCgmc2lwLT5jcmVkaXRfc3RhdHVzKSA9PSBSRUNBTENfQ1JFRElUX0VOQUJMRSkKPiArCQlyZXR1 cm47Cj4gKwo+ICsJaWYgKHNpcF9xdWV1ZV9tYXlfcmVzdW1lKHNpcCkpIHsKPiArCQkvKiB3YWtl dXAgdXBwZXIgcXVldWUgb25seSBpZiB3ZSBoYXZlIHN1ZmZpY2llbnQgY3JlZGl0cyAqLwo+ICsJ CWF0b21pY19zZXQoJnNpcC0+ZXB1Yi0+dHhxX3N0b3BwZWQsIGZhbHNlKTsKPiArCQlpZWVlODAy MTFfd2FrZV9xdWV1ZXMoc2lwLT5lcHViLT5odyk7Cj4gKwl9IGVsc2UgaWYgKGF0b21pY19yZWFk KCZzaXAtPmVwdWItPnR4cV9zdG9wcGVkKSkgewo+ICsJCWRldl9lcnIoc2lwLT5lcHViLT5kZXYs ICIlcyBjYW4ndCB3YWtlIHR4cSwgY3JlZGl0czogJWRcbiIsCj4gKwkJCV9fZnVuY19fLCBhdG9t aWNfcmVhZCgmc2lwLT50eF9jcmVkaXRzKSk7Cj4gKwl9Cj4gKwo+ICsJaWYgKCFza2JfcXVldWVf ZW1wdHkoJnNpcC0+ZXB1Yi0+dHhxKSkgewo+ICsJCS8qIHRyeSB0byBzZW5kIG91dCBwa3QgYWxy ZWFkeSBpbiBzaXAgcXVldWUgb25jZSB3ZSBoYXZlIGNyZWRpdHMgKi8KPiArI2lmICFkZWZpbmVk KEZQR0FfVFhEQVRBKQo+ICsJCWlmICghc2lmX2dldF9hdGVfY29uZmlnKCkpCj4gKwkJCWllZWU4 MDIxMV9xdWV1ZV93b3JrKHNpcC0+ZXB1Yi0+aHcsCj4gKwkJCQkJICAgICAmc2lwLT5lcHViLT50 eF93b3JrKTsKPiArCQllbHNlCj4gKwkJCXF1ZXVlX3dvcmsoc2lwLT5lcHViLT5lc3Bfd2txLCAm c2lwLT5lcHViLT50eF93b3JrKTsKPiArI2Vsc2UKPiArCQlxdWV1ZV93b3JrKHNpcC0+ZXB1Yi0+ ZXNwX3drcSwgJnNpcC0+ZXB1Yi0+dHhfd29yayk7Cj4gKyNlbmRpZgo+ICsJfQo+ICt9Cj4gKwo+ ICtzdGF0aWMgYm9vbCBzaXBfYW1wZHVfb2NjdXB5X2J1ZihzdHJ1Y3QgZXNwX3NpcCAqc2lwLAo+ ICsJCQkJIHN0cnVjdCBlc3BfcnhfYW1wZHVfbGVuICphbXBkdV9sZW4pCj4gK3sKPiArCXJldHVy biAoIWFtcGR1X2xlbi0+c3Vic3RhdGUgfHwKPiArCQllc3Bfd21hY19yeHNlY19lcnJvcihhbXBk dV9sZW4tPnN1YnN0YXRlKSB8fAo+ICsJCShzaXAtPmR1bXBfcnBibV9lcnIgJiYgYW1wZHVfbGVu LT5zdWJzdGF0ZSA9PSBSWF9SUEJNX0VSUikpOwo+ICt9Cj4gKwo+ICsvKiBUT0RPOiBIQVJEQ09S RSBDTEVBTlVQICovCj4gKwo+ICtzdGF0aWMgYm9vbCBzaXBfcnhfcGt0X3Byb2Nlc3Moc3RydWN0 IGVzcF9zaXAgKnNpcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKPiArewo+ICsJc3RydWN0IHNpcF9o ZHIgKmhkcjsKPiArCXN0cnVjdCBza19idWZmICpyc2tiOwo+ICsJc3RydWN0IGVzcF9tYWNfcnhf Y3RybCAqbWFjX2N0cmwsIG5ld19tYWNfY3RybDsKPiArCWludCByZW1haW5zX2xlbiwgZmlyc3Rf cGt0X2xlbiwgcmV0ID0gMCwgcGt0X2xlbl9lbmMgPSAwLCBidWZfbGVuID0gMCwKPiArCSAgICBw dWxsZWRfbGVuID0gMCwgcGt0X251bTsKPiArCXU4ICpidWZwdHI7Cj4gKwlib29sIHRyaWdnZXJf cnhxID0gZmFsc2UsIGhhdmVfcnhhYm9ydCA9IGZhbHNlLCBoYXZlX2dvb2Rwa3QgPSBmYWxzZTsK PiArCXN0cnVjdCBlc3BfcnhfYW1wZHVfbGVuICphbXBkdV9sZW47Cj4gKwlzdGF0aWMgaW50IHBr dF9kcm9wcGVkLCBwa3RfdG90YWw7Cj4gKwlzdGF0aWMgdTggZnJhbWVfaGVhZFsxNl07Cj4gKwlz dGF0aWMgdTggZnJhbWVfYnVmX3R0bDsKPiArCj4gKwlpZiAoIXNrYikKPiArCQlyZXR1cm4gdHJp Z2dlcl9yeHE7Cj4gKwo+ICsJaGRyID0gKHN0cnVjdCBzaXBfaGRyICopc2tiLT5kYXRhOwo+ICsJ YnVmcHRyID0gc2tiLT5kYXRhOwo+ICsKPiArCWlmIChoZHItPmhfY3JlZGl0cyAmIFNJUF9DUkVE SVRTX01BU0spCj4gKwkJc2lwX3VwZGF0ZV90eF9jcmVkaXRzKHNpcCwgaGRyLT5oX2NyZWRpdHMg JiBTSVBfQ1JFRElUU19NQVNLKTsKPiArCj4gKwloZHItPmhfY3JlZGl0cyAmPSB+U0lQX0NSRURJ VFNfTUFTSzsJLyogY2xlYW4gY3JlZGl0cyBpbiBzaXBfaGRyLCBwcmV2ZW50IG92ZXItYWRkICov Cj4gKwo+ICsJLyogZmlyc3QgcGt0J3MgbGVuZ3RoIGlzIHN0b3JlZCBpbiAgcmVjeWNsZWRfY3Jl ZGl0cyBmaXJzdCAyMCBiaXRzCj4gKwkgKiBjb25maWcgdzMgWzMxOjEyXQo+ICsJICogcmVwYWly IGhkci0+bGVuIG9mIGZpcnN0IHBrdAo+ICsJICovCj4gKwlyZW1haW5zX2xlbiA9IGhkci0+bGVu Owo+ICsJZmlyc3RfcGt0X2xlbiA9IGhkci0+aF9jcmVkaXRzID4+IDEyOwo+ICsJaGRyLT5sZW4g PSBmaXJzdF9wa3RfbGVuOwo+ICsKPiArCWlmIChmaXJzdF9wa3RfbGVuID4gcmVtYWluc19sZW4p IHsKPiArCQlzaXBfcmVjYWxjX2NyZWRpdF9jbGFpbShzaXAsIDApOwo+ICsJCXNob3dfYnVmKCh1 OCAqKWhkciwgZmlyc3RfcGt0X2xlbik7CgpUaGlzIGZlZWxzIGxpa2UgYW4gaW5mbyBsZWFrLiAg Zmlyc3RfcGt0X2xlbiBjb21lcyBmcm9tIHRoZSBuZXR3b3JrLgoKPiArCQlFU1NFUlQoMCk7Cj4g KwkJZ290byBfZXhpdDsKPiArCX0KPiArCj4gKwkvKiBwa3RzIGhhbmRsaW5nLCBpbmNsdWRpbmcg dGhlIGZpcnN0IHBrdCwgc2hvdWxkIGFsbG9jIG5ldyBza2IgZm9yIGVhY2ggZGF0YSBwa3QuCj4g KwkgKiBmcmVlIHRoZSBvcmlnaW5hbCB3aG9sZSBza2IgYWZ0ZXIgcGFyc2luZyBpcyBkb25lLgo+ ICsJICovCj4gKwl3aGlsZSAocmVtYWluc19sZW4pIHsKPiArCQlpZiAocmVtYWluc19sZW4gPCBz aXplb2Yoc3RydWN0IHNpcF9oZHIpKSB7Cj4gKwkJCXNpcF9yZWNhbGNfY3JlZGl0X2NsYWltKHNp cCwgMCk7Cj4gKwkJCUVTU0VSVCgwKTsKPiArCQkJc2hvd19idWYoKHU4ICopaGRyLCA1MTIpOwo+ ICsJCQlnb3RvIF9leGl0Owo+ICsJCX0KPiArCj4gKwkJaGRyID0gKHN0cnVjdCBzaXBfaGRyICop YnVmcHRyOwo+ICsJCWlmIChoZHItPmxlbiA8PSAwIHx8IGhkci0+bGVuICYgMykgewo+ICsJCQlz aXBfcmVjYWxjX2NyZWRpdF9jbGFpbShzaXAsIDApOwo+ICsJCQlzaG93X2J1ZigodTggKiloZHIs IDUxMik7Cj4gKwkJCUVTU0VSVCgwKTsKPiArCQkJZ290byBfZXhpdDsKPiArCQl9Cj4gKwo+ICsJ CWlmICh1bmxpa2VseShoZHItPnNlcSAhPSBzaXAtPnJ4c2VxKyspKSB7Cj4gKwkJCXNpcF9yZWNh bGNfY3JlZGl0X2NsYWltKHNpcCwgMCk7Cj4gKwkJCWRldl9kYmcoc2lwLT5lcHViLT5kZXYsCj4g KwkJCQkiJXMgc2VxIG1pc21hdGNoISBnb3QgJXUsIGV4cGVjdCAldVxuIiwKPiArCQkJCV9fZnVu Y19fLCBoZHItPnNlcSwgc2lwLT5yeHNlcSAtIDEpOwo+ICsJCQlzaXAtPnJ4c2VxID0gaGRyLT5z ZXEgKyAxOwo+ICsJCQlzaG93X2J1ZihidWZwdHIsIDMyKTsKPiArCQkJRVNTRVJUKDApOwo+ICsJ CX0KPiArCj4gKwkJaWYgKFNJUF9IRFJfSVNfQ1RSTChoZHIpKSB7Cj4gKwkJCVNUUkFDRV9SWF9F VkVOVF9JTkMoKTsKPiArCj4gKwkJCXJldCA9IHNpcF9wYXJzZV9ldmVudHMoc2lwLCBidWZwdHIp Owo+ICsJCQlza2JfcHVsbChza2IsIGhkci0+bGVuKTsKPiArCQl9IGVsc2UgaWYgKFNJUF9IRFJf SVNfREFUQShoZHIpKSB7Cj4gKwkJCVNUUkFDRV9SWF9EQVRBX0lOQygpOwo+ICsJCQltYWNfY3Ry bCA9IHNpcF9wYXJzZV9ub3JtYWxfbWFjX2N0cmwoc2tiLCAmcGt0X2xlbl9lbmMsCj4gKwkJCQkJ CQkgICAgICZidWZfbGVuLAo+ICsJCQkJCQkJICAgICAmcHVsbGVkX2xlbik7Cj4gKwkJCXJza2Ig PSBzaXBfcGFyc2VfZGF0YV9yeF9pbmZvKHNpcCwgc2tiLCBwa3RfbGVuX2VuYywKPiArCQkJCQkJ ICAgICAgYnVmX2xlbiwgbWFjX2N0cmwsCj4gKwkJCQkJCSAgICAgICZwdWxsZWRfbGVuKTsKPiAr Cj4gKwkJCWlmICghcnNrYikKPiArCQkJCWdvdG8gX21vdmVfb247Cj4gKwo+ICsJCQlpZiAobGlr ZWx5KGF0b21pY19yZWFkKCZzaXAtPmVwdWItPndsLm9mZikgPT0gMCkpIHsKPiArCQkJCWxvY2Fs X2JoX2Rpc2FibGUoKTsKPiArCQkJCWllZWU4MDIxMV9yeChzaXAtPmVwdWItPmh3LCByc2tiKTsK PiArCQkJCWxvY2FsX2JoX2VuYWJsZSgpOwo+ICsJCQl9IGVsc2Ugewo+ICsJCQkJLyogc3RpbGwg bmVlZCBnbyB0aHJvIHBhcnNpbmcgYXMgc2tiX3B1bGwgc2hvdWxkIGludm9rZSAqLwo+ICsJCQkJ a2ZyZWVfc2tiKHJza2IpOwo+ICsJCQl9Cj4gKwkJfSBlbHNlIGlmIChTSVBfSERSX0lTX0FNUERV KGhkcikpIHsKPiArCQkJYW1wZHVfbGVuID0gKHN0cnVjdCBlc3BfcnhfYW1wZHVfbGVuICopKHNr Yi0+ZGF0YSArIGhkci0+bGVuIC8gc2lwLT5yeF9ibGtzeiAqIHNpcC0+cnhfYmxrc3opOwo+ICsJ CQlkZXZfZGJnKHNpcC0+ZXB1Yi0+ZGV2LCAiJXMgcnggYW1wZHUgdG90YWwgbGVuICV1XG4iLAo+ ICsJCQkJICAgIF9fZnVuY19fLCBoZHItPmxlbik7Cj4gKwkJCWlmIChza2ItPmRhdGEgIT0gKHU4 ICopaGRyKSB7Cj4gKwkJCQlwcmludGsoIiVwICVwXG4iLCBza2ItPmRhdGEsIGhkcik7Cj4gKwkJ CQlzaG93X2J1Zihza2ItPmRhdGEsIDUxMik7Cj4gKwkJCQlzaG93X2J1ZigodTggKiloZHIsIDUx Mik7Cj4gKwkJCQlFU1NFUlQoMCk7Cj4gKwkJCQlnb3RvIF9leGl0Owo+ICsJCQl9Cj4gKwkJCW1h Y19jdHJsID0gc2lwX3BhcnNlX25vcm1hbF9tYWNfY3RybChza2IsIE5VTEwsIE5VTEwsCj4gKwkJ CQkJCQkgICAgICZwdWxsZWRfbGVuKTsKPiArCQkJbWVtY3B5KCZuZXdfbWFjX2N0cmwsIG1hY19j dHJsLAo+ICsJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBlc3BfbWFjX3J4X2N0cmwpKTsKPiArCQkJ bWFjX2N0cmwgPSAmbmV3X21hY19jdHJsOwo+ICsJCQlwa3RfbnVtID0gbWFjX2N0cmwtPmFtcGR1 X2NudDsKPiArCQkJZGV2X2RiZyhzaXAtPmVwdWItPmRldiwKPiArCQkJCSIlcyAlZCByeCBhbXBk dSAldSBwa3RzLCAlZCBwa3RzIGR1bXBlZCwgZmlyc3QgbGVuICV1XG4iLAo+ICsJCQkJX19mdW5j X18sIF9fTElORV9fLAo+ICsJCQkJKHVuc2lnbmVkIGludCkoKGhkci0+bGVuICUgc2lwLT5yeF9i bGtzeikgLwo+ICsJCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGVzcF9yeF9hbXBkdV9sZW4pKSwK PiArCQkJCXBrdF9udW0sICh1bnNpZ25lZCBpbnQpYW1wZHVfbGVuLT5zdWJsZW4pOwo+ICsKPiAr CQkJcGt0X3RvdGFsICs9IG1hY19jdHJsLT5hbXBkdV9jbnQ7Cj4gKwkJCXdoaWxlIChwa3RfbnVt ID4gMCkgewo+ICsJCQkJZGV2X2RiZyhzaXAtPmVwdWItPmRldiwKPiArCQkJCQkiJXMgJWQgYW1w ZHUgc3ViIHN0YXRlICUwMngsXG4iLAo+ICsJCQkJCV9fZnVuY19fLCBfX0xJTkVfXywKPiArCQkJ CQlhbXBkdV9sZW4tPnN1YnN0YXRlKTsKPiArCj4gKwkJCQlpZiAoc2lwX2FtcGR1X29jY3VweV9i dWYoc2lwLCBhbXBkdV9sZW4pKSB7CS8vcGt0IGlzIGR1bXBlZAo+ICsJCQkJCXJza2IgPSBzaXBf cGFyc2VfZGF0YV9yeF9pbmZvKHNpcCwgc2tiLAo+ICsJCQkJCQkJCSAgICAgIGFtcGR1X2xlbi0+ c3VibGVuIC0gRkNTX0xFTiwKPiArCQkJCQkJCQkgICAgICAwLAo+ICsJCQkJCQkJCSAgICAgIG1h Y19jdHJsLAo+ICsJCQkJCQkJCSAgICAgICZwdWxsZWRfbGVuKTsKPiArCQkJCQlpZiAoIXJza2Ip IHsKPiArCQkJCQkJRVNTRVJUKDApOwo+ICsJCQkJCQlnb3RvIF9leGl0Owo+ICsJCQkJCX0KPiAr Cj4gKwkJCQkJaWYgKGxpa2VseShhdG9taWNfcmVhZCgmc2lwLT5lcHViLT53bC5vZmYpID09IDAp ICYmCj4gKwkJCQkJICAgIChhbXBkdV9sZW4tPnN1YnN0YXRlID09IDAgfHwKPiArCQkJCQkgICAg IGFtcGR1X2xlbi0+c3Vic3RhdGUgPT0gUlhfVEtJUE1JQ19FUlIgfHwKPiArCQkJCQkgICAgIChz aXAtPnNlbmR1cF9ycGJtX3BrdCAmJgo+ICsJCQkJCSAgICAgIGFtcGR1X2xlbi0+c3Vic3RhdGUg PT0gUlhfUlBCTV9FUlIpKSAmJgo+ICsJCQkJCSAgICAoc2lwLT5yeGFib3J0X2ZpeGVkIHx8Cj4g KwkJCQkJICAgICAhaGF2ZV9yeGFib3J0KSkgewo+ICsJCQkJCQlpZiAoIWhhdmVfZ29vZHBrdCkg ewo+ICsJCQkJCQkJaGF2ZV9nb29kcGt0ID0gdHJ1ZTsKPiArCQkJCQkJCW1lbWNweShmcmFtZV9o ZWFkLAo+ICsJCQkJCQkJICAgICAgIHJza2ItPmRhdGEsCj4gKwkJCQkJCQkgICAgICAgMTYpOwo+ ICsJCQkJCQkJZnJhbWVfaGVhZFsxXSAmPSB+MHg4MDsKPiArCQkJCQkJCWZyYW1lX2J1Zl90dGwg PSAzOwo+ICsJCQkJCQl9Cj4gKwkJCQkJCWxvY2FsX2JoX2Rpc2FibGUoKTsKPiArCQkJCQkJaWVl ZTgwMjExX3J4KHNpcC0+ZXB1Yi0+aHcsCj4gKwkJCQkJCQkgICAgIHJza2IpOwo+ICsJCQkJCQls b2NhbF9iaF9lbmFibGUoKTsKPiArCQkJCQl9IGVsc2Ugewo+ICsJCQkJCQlrZnJlZV9za2IocnNr Yik7Cj4gKwkJCQkJfQo+ICsJCQkJfSBlbHNlIHsKPiArCQkJCQlpZiAoYW1wZHVfbGVuLT5zdWJz dGF0ZSA9PSBSWF9BQk9SVCkgewo+ICsJCQkJCQl1OCAqYTsKPiArCQkJCQkJaGF2ZV9yeGFib3J0 ID0gdHJ1ZTsKPiArCQkJCQkJZGV2X2RiZyhzaXAtPmVwdWItPmRldiwKPiArCQkJCQkJCSJyeCBh Ym9ydCAlZCAlZFxuIiwKPiArCQkJCQkJCWZyYW1lX2J1Zl90dGwsIHBrdF9udW0pOwo+ICsJCQkJ CQlpZiAoZnJhbWVfYnVmX3R0bCAmJgo+ICsJCQkJCQkgICAgIXNpcC0+cnhhYm9ydF9maXhlZCkg ewo+ICsJCQkJCQkJc3RydWN0IGVzcF9yeF9hbXBkdV9sZW4gKm5leHRfZ29vZF9hbXBkdV9sZW4g PSBhbXBkdV9sZW4gKyAxOwo+ICsJCQkJCQkJYSA9IGZyYW1lX2hlYWQ7Cj4gKwkJCQkJCQl3aGls ZSAoIXNpcF9hbXBkdV9vY2N1cHlfYnVmKHNpcCwgbmV4dF9nb29kX2FtcGR1X2xlbikpIHsKPiAr CQkJCQkJCQlpZiAobmV4dF9nb29kX2FtcGR1X2xlbiA+IGFtcGR1X2xlbiArIHBrdF9udW0gLSAx KQo+ICsJCQkJCQkJCQlicmVhazsKPiArCQkJCQkJCQluZXh0X2dvb2RfYW1wZHVfbGVuKys7Cj4g KwkJCQkJCQl9Cj4gKwkJCQkJCQlpZiAobmV4dF9nb29kX2FtcGR1X2xlbiA8PSBhbXBkdV9sZW4g KyBwa3RfbnVtIC0gMSkgewo+ICsJCQkJCQkJCWJvb2wgYjAsIGIxMCwgYjExOwo+ICsJCQkJCQkJ CWEgPSBza2ItPmRhdGE7Cj4gKwkJCQkJCQkJYjAgPSBtZW1jbXAoZnJhbWVfaGVhZCArIDQsIHNr Yi0+ZGF0YSArIDQsIDEyKSA9PSAwOwo+ICsJCQkJCQkJCWIxMCA9IG1lbWNtcChmcmFtZV9oZWFk ICsgMTAsIHNrYi0+ZGF0YSwgNikgPT0gMDsKPiArCQkJCQkJCQliMTEgPSBtZW1jcHkoZnJhbWVf aGVhZCArIDExLCBza2ItPmRhdGEsIDUpID09IDA7Cj4gKwkJCQkJCQkJaWYgKGIwICYmICFiMTAg JiYKPiArCQkJCQkJCQkgICAgIWIxMSkgewo+ICsJCQkJCQkJCQloYXZlX3J4YWJvcnQgPSBmYWxz ZTsKPiArCQkJCQkJCQl9IGVsc2UgaWYgKCFiMCAmJgo+ICsJCQkJCQkJCQkgICBiMTAgJiYKPiAr CQkJCQkJCQkJICAgIWIxMSkgewo+ICsJCQkJCQkJCQlza2JfcHVzaChza2IsIDEwKTsKPiArCQkJ CQkJCQkJbWVtY3B5KHNrYi0+ZGF0YSwKPiArCQkJCQkJCQkJICAgICAgIGZyYW1lX2hlYWQsCj4g KwkJCQkJCQkJCSAgICAgICAxMCk7Cj4gKwkJCQkJCQkJCWhhdmVfcnhhYm9ydCA9IGZhbHNlOwo+ ICsJCQkJCQkJCQlwdWxsZWRfbGVuIC09IDEwOwo+ICsJCQkJCQkJCX0gZWxzZSBpZiAoIWIwICYm ICFiMTAgJiYgYjExKSB7Cj4gKwkJCQkJCQkJCXNrYl9wdXNoKHNrYiwgMTEpOwo+ICsJCQkJCQkJ CQltZW1jcHkoc2tiLT5kYXRhLAo+ICsJCQkJCQkJCQkgICAgICAgZnJhbWVfaGVhZCwKPiArCQkJ CQkJCQkJICAgICAgIDExKTsKPiArCQkJCQkJCQkJaGF2ZV9yeGFib3J0ID0gZmFsc2U7Cj4gKwkJ CQkJCQkJCXB1bGxlZF9sZW4gLT0gMTE7Cj4gKwkJCQkJCQkJfQo+ICsJCQkJCQkJfQo+ICsJCQkJ CQl9Cj4gKwkJCQkJfQo+ICsJCQkJCXBrdF9kcm9wcGVkKys7Cj4gKwkJCQkJZGV2X2RiZyhzaXAt PmVwdWItPmRldiwKPiArCQkJCQkJIiVzIGFtcGR1IGRyb3BwZWQgJWQvJWRcbiIsCj4gKwkJCQkJ CV9fZnVuY19fLCBwa3RfZHJvcHBlZCwKPiArCQkJCQkJcGt0X3RvdGFsKTsKPiArCQkJCX0KPiAr CQkJCXBrdF9udW0tLTsKPiArCQkJCWFtcGR1X2xlbisrOwo+ICsJCQl9Cj4gKwkJCWlmIChmcmFt ZV9idWZfdHRsKQo+ICsJCQkJZnJhbWVfYnVmX3R0bC0tOwo+ICsJCQlza2JfcHVsbChza2IsIGhk ci0+bGVuIC0gcHVsbGVkX2xlbik7Cj4gKwkJfSBlbHNlIHsKPiArCQkJZGV2X2VycihzaXAtPmVw dWItPmRldiwgInVua25vd24gU0lQIEhEUiB0eXBlXG4iKTsKPiArCQl9Cj4gKwo+ICtfbW92ZV9v bjoKPiArCQlpZiAoaGRyLT5sZW4gPCByZW1haW5zX2xlbikKPiArCQkJcmVtYWluc19sZW4gLT0g aGRyLT5sZW47Cj4gKwkJZWxzZQo+ICsJCQlicmVhazsKPiArCQlidWZwdHIgKz0gaGRyLT5sZW47 Cj4gKwl9Cj4gKwo+ICtfZXhpdDoKPiArCWtmcmVlX3NrYihza2IpOwo+ICsKPiArCXJldHVybiB0 cmlnZ2VyX3J4cTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgX3NpcF9yeHFfcHJvY2VzcyhzdHJ1 Y3QgZXNwX3NpcCAqc2lwKQo+ICt7Cj4gKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwo+ICsJYm9vbCBz ZW5kdXAgPSBmYWxzZTsKPiArCj4gKwl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZzaXAtPnJ4 cSkpKQo+ICsJCWlmIChzaXBfcnhfcGt0X3Byb2Nlc3Moc2lwLCBza2IpKQo+ICsJCQlzZW5kdXAg PSB0cnVlOwo+ICsKPiArCWlmIChzZW5kdXApCj4gKwkJcXVldWVfd29yayhzaXAtPmVwdWItPmVz cF93a3EsICZzaXAtPmVwdWItPnNlbmR1cF93b3JrKTsKPiArCj4gKwkvKiBwcm9iYWJseSB0eF9j cmVkaXQgaXMgdXBkYXRlZCwgdHJ5IHR4cSAqLwo+ICsJc2lwX3RyaWdnZXJfdHhxX3Byb2Nlc3Mo c2lwKTsKPiArfQo+ICsKPiArdm9pZCBzaXBfcnhxX3Byb2Nlc3Moc3RydWN0IHdvcmtfc3RydWN0 ICp3b3JrKQo+ICt7Cj4gKwlzdHJ1Y3QgZXNwX3NpcCAqc2lwID0gY29udGFpbmVyX29mKHdvcmss IHN0cnVjdCBlc3Bfc2lwLAo+ICsJCQkJCSAgIHJ4X3Byb2Nlc3Nfd29yayk7Cj4gKwo+ICsJaWYg KCFzaXApIHsKPiArCQlFU1NFUlQoMCk7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCWlmICh1 bmxpa2VseShhdG9taWNfcmVhZCgmc2lwLT5zdGF0ZSkgPT0gU0lQX1NFTkRfSU5JVCkpIHsKPiAr CQlzaXBfc2VuZF9jaGlwX2luaXQoc2lwKTsKPiArCQlhdG9taWNfc2V0KCZzaXAtPnN0YXRlLCBT SVBfV0FJVF9CT09UVVApOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwltdXRleF9sb2NrKCZz aXAtPnJ4X210eCk7Cj4gKwlfc2lwX3J4cV9wcm9jZXNzKHNpcCk7Cj4gKwltdXRleF91bmxvY2so JnNpcC0+cnhfbXR4KTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB2b2lkIHNpcF9yeF9wa3Rf ZW5xdWV1ZShzdHJ1Y3QgZXNwX3NpcCAqc2lwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQo+ICt7Cj4g Kwlza2JfcXVldWVfdGFpbCgmc2lwLT5yeHEsIHNrYik7Cj4gK30KPiArCj4gK3N0YXRpYyB1MzIg c2lwX3J4X2NvdW50Owo+ICsKPiAraW50IHNpcF9yeChzdHJ1Y3QgZXNwX3B1YiAqZXB1YikKPiAr ewo+ICsJc3RydWN0IHNpcF9oZHIgKnNoZHI7Cj4gKwlzdHJ1Y3QgZXNwX3NpcCAqc2lwID0gZXB1 Yi0+c2lwOwo+ICsJc3RydWN0IHNrX2J1ZmYgKmZpcnN0X3NrYiwgKnJ4X3NrYjsKPiArCXU4ICpy eF9idWY7Cj4gKwl1MzIgcnhfYmxrc3osIGZpcnN0X3N6Owo+ICsJaW50IGVycjsKPiArCXU4IHJh d19zZXE7Cj4gKwo+ICsJaWYgKGxpa2VseShzaWZfZ2V0X2F0ZV9jb25maWcoKSAhPSAxKSkgewo+ ICsJCXJhd19zZXEgPSBzaWZfZ2V0X3JlZ3MoZXB1YiktPmludHJfcmF3ICYgMHhmZjsKPiArCj4g KwkJaWYgKHJhd19zZXEgIT0gc2lwLT50b19ob3N0X3NlcSkgewo+ICsJCQlpZiAocmF3X3NlcSA9 PSBzaXAtPnRvX2hvc3Rfc2VxICsgMSkgewkvKiB3aGVuIGxhc3QgcmVhZCBwa3QgY3JjIGVyciwg dGhpcyBzaXR1YXRpb24gbWF5IG9jY3VyLCBidXQgcmF3X3NlcSBtdXN0bid0IDwgdG9faG9zdF9T ZXEgKi8KPiArCQkJCXNpcC0+dG9faG9zdF9zZXEgPSByYXdfc2VxOwo+ICsJCQkJZGV2X2RiZyhl cHViLT5kZXYsCj4gKwkJCQkJIndhcm46IHRvX2hvc3Rfc2VxIHJlZyAweCUwMngsIHNlcSAweCUw MngiLAo+ICsJCQkJCXJhd19zZXEsIHNpcC0+dG9faG9zdF9zZXEpOwo+ICsJCQl9IGVsc2Ugewo+ ICsJCQkJZGV2X2VycihlcHViLT5kZXYsCj4gKwkJCQkJImVycjogdG9faG9zdF9zZXEgcmVnIDB4 JTAyeCwgc2VxIDB4JTAyeCIsCj4gKwkJCQkJcmF3X3NlcSwgc2lwLT50b19ob3N0X3NlcSk7Cj4g KwkJCQllcnIgPSAwOwo+ICsJCQkJZ290byBfZXJyOwoKVGhpcyBmdW5jdGlvbiB1c2VzIGEgbWl4 IG9mIGRpcmVjdCByZXR1cm5zIGFuZCBnb3RvIF9lcnIuICBKdXN0IHVzZQpkaXJlY3QgcmV0dXJu cyB1bmxlc3MgdGhlcmUgaXMgYSBnb29kIHJlYXNvbiBpbiB0aGUgcHJlc2VudCAobm90IGZ1dHVy ZSkKZm9yIHRoZSBnb3RvLiAgSXQganVzdCBodXJ0cyByZWFkYWJpbGl0eSB0byBoYXZlIHRvIHNj cm9sbCAyIHBhZ2VzIGRvd24KdG8gc2VlIHdoYXQgdGhlIGdvdG8gZG9lcy4gICJyZXR1cm4gMDsi IGlzIG11Y2ggcXVpY2tlci4KCj4gKwkJCX0KPiArCQl9Cj4gKwl9Cj4gKwo+ICsJLyogZmlyc3Qg cmVhZCBvbmUgYmxvY2sgb3V0LCBpZiB3ZSBsdWNrIGVub3VnaCwgdGhhdCdzIGl0Cj4gKwkgKgo+ ICsJICogIFRvIG1ha2UgZGVzaWduIGFzIHNpbXBsZSBhcyBwb3NzaWJsZSwgd2UgYWxsb2NhdGUg c2tiKHMpCj4gKwkgKiAgc2VwYXJhdGVseSBmb3IgZWFjaCBzaWYgcmVhZCBvcGVyYXRpb24gdG8g YXZvaWQgZ2xvYmFsCj4gKwkgKiAgcmVhZF9idWZfcG9pbnRlIGFjY2Vzcy4gIEl0IGNvdWxlIGJl IG9wdGltaXplZCBsYXRlLgo+ICsJICovCj4gKwo+ICsJZmlyc3Rfc3ogPSBzaWZfZ2V0X3JlZ3Mo ZXB1YiktPmNvbmZpZ193MDsKPiArCXJ4X2Jsa3N6ID0gc2lmX2dldF9ibGtzeihlcHViKTsKPiAr CWZpcnN0X3NrYiA9IF9fZGV2X2FsbG9jX3NrYihyb3VuZHVwKGZpcnN0X3N6LCByeF9ibGtzeiks IEdGUF9LRVJORUwpOwo+ICsKPiArCWlmICghZmlyc3Rfc2tiKSB7Cj4gKwkJc2lmX3VubG9ja19i dXMoZXB1Yik7Cj4gKwkJZXJyID0gMDsKPiArCQlnb3RvIF9lcnI7Cj4gKwl9Cj4gKwo+ICsJcnhf YnVmID0gc2tiX3B1dChmaXJzdF9za2IsIGZpcnN0X3N6KTsKPiArCj4gKwllcnIgPSBlc3BfY29t bW9uX3JlYWQoZXB1YiwgcnhfYnVmLCBmaXJzdF9zeiwgRVNQX1NJRl9OT1NZTkMsIGZhbHNlKTsK PiArCXNpcF9yeF9jb3VudCsrOwo+ICsJaWYgKHVubGlrZWx5KGVycikpIHsKPiArCQlkZXZfZXJy KGVwdWItPmRldiwgIiBmaXJzdCByZWFkIGVyciAlZCAlZFxuIiwgZXJyLAo+ICsJCQlzaWZfZ2V0 X3JlZ3MoZXB1YiktPmNvbmZpZ193MCk7Cj4gKwkJa2ZyZWVfc2tiKGZpcnN0X3NrYik7Cj4gKwkJ c2lmX3VubG9ja19idXMoZXB1Yik7Cj4gKwkJZ290byBfZXJyOwoKCkkgZmVlbCBsaWtlIHdlIHNo b3VsZCBjcmVhdGUgYSBlcnJvciBnb3RvIHRoZSB1bmxvY2tzIGFuZCBmcmVlcwpmaXJzdF9za2Iu Cgo+ICsJfQo+ICsKPiArCXNoZHIgPSAoc3RydWN0IHNpcF9oZHIgKilyeF9idWY7Cj4gKwlpZiAo U0lQX0hEUl9JU19DVFJMKHNoZHIpICYmIHNoZHItPmNfZXZ0aWQgPT0gU0lQX0VWVF9TTEVFUCkg ewo+ICsJCWF0b21pY19zZXQoJnNpcC0+ZXB1Yi0+cHMuc3RhdGUsIEVTUF9QTV9PTik7Cj4gKwl9 Cj4gKwo+ICsJaWYgKGxpa2VseShzaWZfZ2V0X2F0ZV9jb25maWcoKSAhPSAxKSkKPiArCQlzaXAt PnRvX2hvc3Rfc2VxKys7Cj4gKwo+ICsJaWYgKHNoZHItPmxlbiAmIDMpIHsKPiArCQlkZXZfZXJy KGVwdWItPmRldiwgInNoZHItPmxlblslZF0gZXJyb3JcbiIsIHNoZHItPmxlbik7Cj4gKwkJa2Zy ZWVfc2tiKGZpcnN0X3NrYik7Cj4gKwkJc2lmX3VubG9ja19idXMoZXB1Yik7Cj4gKwkJZXJyID0g LUVJTzsKPiArCQlnb3RvIF9lcnI7Cj4gKwl9Cj4gKwo+ICsJaWYgKHNoZHItPmxlbiAhPSBmaXJz dF9zeikgewo+ICsJCWRldl9lcnIoZXB1Yi0+ZGV2LCAic2hkci0+bGVuWyVkXSAgZmlyc3Rfc2l6 ZVslZF0gZXJyb3JcbiIsCj4gKwkJCXNoZHItPmxlbiwgZmlyc3Rfc3opOwo+ICsJCWtmcmVlX3Nr YihmaXJzdF9za2IpOwo+ICsJCXNpZl91bmxvY2tfYnVzKGVwdWIpOwo+ICsJCWVyciA9IC1FSU87 Cj4gKwkJZ290byBfZXJyOwo+ICsJfSBlbHNlIHsKPiArCQlzaWZfdW5sb2NrX2J1cyhlcHViKTsK PiArCQlza2JfdHJpbShmaXJzdF9za2IsIHNoZHItPmxlbik7Cj4gKwkJZGV2X2RiZyhlcHViLT5k ZXYsICJmaXJzdF9za2Igb25seVxuIik7Cj4gKwo+ICsJCXJ4X3NrYiA9IGZpcnN0X3NrYjsKPiAr CX0KPiArCj4gKwlpZiAoYXRvbWljX3JlYWQoJnNpcC0+c3RhdGUpID09IFNJUF9TVE9QKSB7Cj4g KwkJa2ZyZWVfc2tiKHJ4X3NrYik7Cj4gKwkJZGV2X2VycihlcHViLT5kZXYsICJyeCBwYWNrZXQg d2hpbGUgc2lwIHN0b3BwZWRcbiIpOwoKV2UgZG9uJ3QgdW5sb2NrIG9uIHRoaXMgcGF0aD8KCj4g KwkJcmV0dXJuIDA7Cj4gKwl9Cj4gKwo+ICsJc2lwX3J4X3BrdF9lbnF1ZXVlKHNpcCwgcnhfc2ti KTsKPiArCXF1ZXVlX3dvcmsoc2lwLT5lcHViLT5lc3Bfd2txLCAmc2lwLT5yeF9wcm9jZXNzX3dv cmspOwo+ICsKPiArX2VycjoKPiArCXJldHVybiBlcnI7Cj4gK30KPiArCj4gK2ludCBzaXBfcG9z dF9pbml0KHN0cnVjdCBlc3Bfc2lwICpzaXAsIHN0cnVjdCBzaXBfZXZ0X2Jvb3R1cDIgKmJldnQp Cj4gK3sKPiArCXN0cnVjdCBlc3BfcHViICplcHViOwo+ICsJdTggbWFjX2lkID0gYmV2dC0+bWFj X2FkZHJbMF07Cj4gKwlpbnQgbWFjX2luZGV4ID0gMCwgaTsKPiArCj4gKwlpZiAoIXNpcCkgewo+ ICsJCUVTU0VSVCgwKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwllcHViID0g c2lwLT5lcHViOwo+ICsKPiArCXNpcC0+dHhfYWdncl93cml0ZV9wdHIgPSBzaXAtPnR4X2FnZ3Jf YnVmOwo+ICsJc2lwLT50eF9ibGtzeiA9IGJldnQtPnR4X2Jsa3N6Owo+ICsJc2lwLT5yeF9ibGtz eiA9IGJldnQtPnJ4X2Jsa3N6Owo+ICsJc2lwLT5jcmVkaXRfdG9fcmVzZXJ2ZSA9IGJldnQtPmNy ZWRpdF90b19yZXNlcnZlOwo+ICsJc2lwLT5kdW1wX3JwYm1fZXJyID0gYmV2dC0+b3B0aW9ucyAm IFNJUF9EVU1QX1JQQk1fRVJSOwo+ICsJc2lwLT5yeGFib3J0X2ZpeGVkID0gYmV2dC0+b3B0aW9u cyAmIFNJUF9SWEFCT1JUX0ZJWEVEOwo+ICsJc2lwLT5zdXBwb3J0X2Jnc2NhbiA9IGJldnQtPm9w dGlvbnMgJiBTSVBfU1VQUE9SVF9CR1NDQU47Cj4gKwlzaXAtPnNlbmR1cF9ycGJtX3BrdCA9IDA7 Cj4gKwo+ICsJLyogcHJpbnQgb3V0IE1BQyBhZGRyLi4uICovCj4gKwltZW1jcHkoZXB1Yi0+bWFj X2FkZHIsIGJldnQtPm1hY19hZGRyLCBFVEhfQUxFTik7Cj4gKwlmb3IgKGkgPSAwOwo+ICsJICAg ICBpIDwgc2l6ZW9mKGVzcF9tYWNfcHJlZml4X3RhYmxlKSAvIHNpemVvZihzdHJ1Y3QgZXNwX21h Y19wcmVmaXgpOwo+ICsJICAgICBpKyspCj4gKwkJaWYgKGVzcF9tYWNfcHJlZml4X3RhYmxlW2ld Lm1hY19pbmRleCA9PSBtYWNfaWQpIHsKPiArCQkJbWFjX2luZGV4ID0gaTsKPiArCQkJYnJlYWs7 Cj4gKwkJfQo+ICsKPiArCWVwdWItPm1hY19hZGRyWzBdID0gZXNwX21hY19wcmVmaXhfdGFibGVb bWFjX2luZGV4XS5tYWNfYWRkcl9wcmVmaXhbMF07Cj4gKwllcHViLT5tYWNfYWRkclsxXSA9IGVz cF9tYWNfcHJlZml4X3RhYmxlW21hY19pbmRleF0ubWFjX2FkZHJfcHJlZml4WzFdOwo+ICsJZXB1 Yi0+bWFjX2FkZHJbMl0gPSBlc3BfbWFjX3ByZWZpeF90YWJsZVttYWNfaW5kZXhdLm1hY19hZGRy X3ByZWZpeFsyXTsKPiArCj4gKwlhdG9taWNfc2V0KCZzaXAtPm5vaXNlX2Zsb29yLCBiZXZ0LT5u b2lzZV9mbG9vcik7Cj4gKwo+ICsJc2lwX3JlY2FsY19jcmVkaXRfaW5pdChzaXApOwo+ICsKPiAr CXJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKiB3cml0ZSBwa3RzIGluIGFnZ3IgYnVmIHRvIHRhcmdl dCBtZW1vcnkgKi8KPiArc3RhdGljIHZvaWQgc2lwX3dyaXRlX3BrdHMoc3RydWN0IGVzcF9zaXAg KnNpcCwgaW50IHBtX3N0YXRlKQo+ICt7Cj4gKwlpbnQgdHhfYWdncl9sZW4sIGVycjsKPiArCXN0 cnVjdCBzaXBfaGRyICpmaXJzdF9zaGRyOwo+ICsKPiArCXR4X2FnZ3JfbGVuID0gc2lwLT50eF9h Z2dyX3dyaXRlX3B0ciAtIHNpcC0+dHhfYWdncl9idWY7Cj4gKwlpZiAodHhfYWdncl9sZW4gPCBz aXplb2Yoc3RydWN0IHNpcF9oZHIpKSB7Cj4gKwkJZGV2X2VycihzaXAtPmVwdWItPmRldiwgIlt0 eF9hZ2dyX2xlbl0gJWQgPCBzaXplb2Yoc2lwX2hkcilcbiIsCj4gKwkJCXR4X2FnZ3JfbGVuKTsK PiArCQlFU1NFUlQoMCk7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCWlmICh0eF9hZ2dyX2xl biAmIDB4Mykgewo+ICsJCUVTU0VSVCgwKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJZmly c3Rfc2hkciA9IChzdHJ1Y3Qgc2lwX2hkciAqKXNpcC0+dHhfYWdncl9idWY7Cj4gKwo+ICsJaWYg KGF0b21pY19yZWFkKCZzaXAtPnR4X2NyZWRpdHMpIDw9IFNJUF9DUkVESVRTX0xPV19USFJFU0hP TEQpCj4gKwkJZmlyc3Rfc2hkci0+ZmNbMV0gfD0gU0lQX0hEUl9GX05FRURfQ1JEVF9SUFQ7Cj4g Kwo+ICsJLyogc3RpbGwgdXNlIGxvY2sgYnVzIGluc3RlYWQgb2Ygc2lmX2xsZGVzY193cml0ZV9z eW5jIHNpbmNlIHdlIHdhbnQgdG8gcHJvdGVjdCBzZXZlcmFsIGdsb2JhbCB2YXJpYmxlcyBhc3Np Z25tZW50cyAqLwo+ICsJc2lmX2xvY2tfYnVzKHNpcC0+ZXB1Yik7Cj4gKwo+ICsJZXJyID0gZXNw X2NvbW1vbl93cml0ZShzaXAtPmVwdWIsIHNpcC0+dHhfYWdncl9idWYsIHR4X2FnZ3JfbGVuLAo+ ICsJCQkgICAgICAgRVNQX1NJRl9OT1NZTkMpOwo+ICsJaWYgKGVycikKPiArCQlkZXZfZXJyKHNp cC0+ZXB1Yi0+ZGV2LCAiZXJyb3Igd2hpbGUgd3JpdGluZyBwa3RzOiAlZFxuIiwgZXJyKTsKPiAr Cj4gKwlzaXAtPnR4X2FnZ3Jfd3JpdGVfcHRyID0gc2lwLT50eF9hZ2dyX2J1ZjsKPiArCXNpcC0+ dHhfdG90X2xlbiA9IDA7Cj4gKwo+ICsJc2lmX3VubG9ja19idXMoc2lwLT5lcHViKTsKPiArfQo+ ICsKPiArLyogc2V0dXAgc2lwIGhlYWRlciBhbmQgdHggaW5mbywgY29weSBwa3QgaW50byBhZ2dy IGJ1ZiAqLwo+ICtzdGF0aWMgaW50IHNpcF9wYWNrX3BrdChzdHJ1Y3QgZXNwX3NpcCAqc2lwLCBz dHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnBtX3N0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgaWVlZTgw MjExX3R4X2luZm8gKml0eF9pbmZvOwo+ICsJc3RydWN0IHNpcF9oZHIgKnNoZHI7Cj4gKwlzdHJ1 Y3QgaWVlZTgwMjExX2hkciAqd2g7Cj4gKwlzdHJ1Y3QgZXNwX3ZpZiAqZXZpZjsKPiArCXN0cnVj dCBlc3Bfbm9kZSAqbm9kZTsKPiArCXUzMiB0eF9sZW4sIG9mZnNldDsKPiArCWJvb2wgaXNfZGF0 YSA9IHRydWU7Cj4gKwl1OCBzdGFfaW5kZXg7Cj4gKwlpbnQgYWxnOwo+ICsKPiArCWl0eF9pbmZv ID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwo+ICsJaWYgKGl0eF9pbmZvLT5mbGFncyA9PSAweGZm ZmZmZmZmKSB7Cj4gKwkJc2hkciA9IChzdHJ1Y3Qgc2lwX2hkciAqKXNrYi0+ZGF0YTsKPiArCQlp c19kYXRhID0gZmFsc2U7Cj4gKwkJdHhfbGVuID0gc2tiLT5sZW47Cj4gKwl9IGVsc2Ugewo+ICsJ CXdoID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwo+ICsJCWV2aWYgPSAoc3Ry dWN0IGVzcF92aWYgKilpdHhfaW5mby0+Y29udHJvbC52aWYtPmRydl9wcml2Owo+ICsJCS8qIHVw ZGF0ZSBzaXAgaGVhZGVyICovCj4gKwkJc2hkciA9IChzdHJ1Y3Qgc2lwX2hkciAqKXNpcC0+dHhf YWdncl93cml0ZV9wdHI7Cj4gKwo+ICsJCXNoZHItPmZjWzBdID0gMDsKPiArCQlzaGRyLT5mY1sx XSA9IDA7Cj4gKwo+ICsJCWlmIChpdHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FN UERVKQo+ICsJCQlTSVBfSERSX1NFVF9UWVBFKHNoZHItPmZjWzBdLCBTSVBfREFUQV9BTVBEVSk7 Cj4gKwkJZWxzZQo+ICsJCQlTSVBfSERSX1NFVF9UWVBFKHNoZHItPmZjWzBdLCBTSVBfREFUQSk7 Cj4gKwo+ICsJCWlmICghZXZpZi0+ZXB1Yikgewo+ICsJCQlzaXBfdHhfc3RhdHVzX3JlcG9ydChz aXAsIHNrYiwgaXR4X2luZm8sIGZhbHNlKTsKPiArCQkJYXRvbWljX2RlYygmc2lwLT50eF9kYXRh X3BrdF9xdWV1ZWQpOwo+ICsJCQlyZXR1cm4gLUVJTlZBTDsKPiArCQl9Cj4gKwo+ICsJCS8qIG1h a2Ugcm9vbSBmb3IgZW5jcnlwdGVkIHBrdCAqLwo+ICsJCWlmIChpdHhfaW5mby0+Y29udHJvbC5o d19rZXkpIHsKPiArCQkJYWxnID0gZXNwX2NpcGhlcjJhbGcoaXR4X2luZm8tPmNvbnRyb2wuaHdf a2V5LT5jaXBoZXIpOwo+ICsJCQlpZiAodW5saWtlbHkoYWxnID09IC0xKSkgewo+ICsJCQkJc2lw X3R4X3N0YXR1c19yZXBvcnQoc2lwLCBza2IsIGl0eF9pbmZvLCBmYWxzZSk7Cj4gKwkJCQlhdG9t aWNfZGVjKCZzaXAtPnR4X2RhdGFfcGt0X3F1ZXVlZCk7Cj4gKwkJCQlyZXR1cm4gLTE7Cj4gKwkJ CX0KPiArCj4gKwkJCXNoZHItPmRfZW5jX2ZsYWcgPSBhbGcgKyAxOwo+ICsJCQlzaGRyLT5kX2h3 X2tpZCA9IGl0eF9pbmZvLT5jb250cm9sLmh3X2tleS0+aHdfa2V5X2lkeCB8Cj4gKwkJCQkoZXZp Zi0+aW5kZXggPDwgNyk7Cj4gKwkJfSBlbHNlIHsKPiArCQkJc2hkci0+ZF9lbmNfZmxhZyA9IDA7 Cj4gKwkJCXNoZHItPmRfaHdfa2lkID0gZXZpZi0+aW5kZXggPDwgNyB8IGV2aWYtPmluZGV4Owo+ ICsJCX0KPiArCj4gKwkJLyogdXBkYXRlIHNpcCB0eCBpbmZvICovCj4gKwkJbm9kZSA9IGVzcF9n ZXRfbm9kZV9ieV9hZGRyKHNpcC0+ZXB1Yiwgd2gtPmFkZHIxKTsKPiArCQlpZiAobm9kZSkKPiAr CQkJc3RhX2luZGV4ID0gbm9kZS0+aW5kZXg7Cj4gKwkJZWxzZQo+ICsJCQlzdGFfaW5kZXggPSBF U1BfUFVCX01BWF9TVEEgKyAxOwo+ICsKPiArCQlTSVBfSERSX1NFVF9JRklEWChzaGRyLT5mY1sw XSwgZXZpZi0+aW5kZXggPDwgMyB8IHN0YV9pbmRleCk7Cj4gKwkJc2hkci0+ZF9wMnAgPSBpdHhf aW5mby0+Y29udHJvbC52aWYtPnAycDsKPiArCj4gKwkJaWYgKGV2aWYtPmluZGV4ID09IDEpCj4g KwkJCXNoZHItPmRfcDJwID0gMTsKPiArCj4gKwkJc2hkci0+ZF9hYyA9IHNrYl9nZXRfcXVldWVf bWFwcGluZyhza2IpOwo+ICsJCXNoZHItPmRfdGlkID0gc2tiLT5wcmlvcml0eSAmIElFRUU4MDIx MV9RT1NfQ1RMX1RBRzFEX01BU0s7Cj4gKwo+ICsJCXdoID0gKHN0cnVjdCBpZWVlODAyMTFfaGRy ICopc2tiLT5kYXRhOwo+ICsKPiArCQlpZiAoaWVlZTgwMjExX2lzX21nbXQod2gtPmZyYW1lX2Nv bnRyb2wpKSB7Cj4gKwkJCS8qIGFkZGJhL2RlbGJhL2JhciBtYXkgdXNlIGRpZmZlcmVudCB0aWQv YWMgKi8KPiArCQkJaWYgKHNoZHItPmRfYWMgPT0gV01FX0FDX1ZPKQo+ICsJCQkJc2hkci0+ZF90 aWQgPSA3Owo+ICsKPiArCQkJaWYgKGllZWU4MDIxMV9pc19iZWFjb24od2gtPmZyYW1lX2NvbnRy b2wpKSB7Cj4gKwkJCQlzaGRyLT5kX3RpZCA9IDg7Cj4gKwkJCQlzaGRyLT5kX2FjID0gNDsKPiAr CQkJfQo+ICsJCX0KPiArCj4gKwkJaWYgKGNoZWNrX2FjX3RpZChza2ItPmRhdGEsIHNoZHItPmRf YWMsIHNoZHItPmRfdGlkKSkgewo+ICsJCQlzaGRyLT5kX2FjID0gV01FX0FDX0JFOwo+ICsJCQlz aGRyLT5kX3RpZCA9IDA7Cj4gKwkJfQo+ICsKPiArCQkvKiBtYWtlIHN1cmUgZGF0YSBpcyBzdGFy dCBhdCA0IGJ5dGVzIGFsaWduZWQgYWRkci4gKi8KPiArCQlvZmZzZXQgPSByb3VuZHVwKHNpemVv ZihzdHJ1Y3Qgc2lwX2hkciksIDQpOwo+ICsKPiArCQlpZiAoU0lQX0hEUl9JU19BTVBEVShzaGRy KSkgewo+ICsJCQltZW1zZXQoc2lwLT50eF9hZ2dyX3dyaXRlX3B0ciArIG9mZnNldCwgMCwKPiAr CQkJICAgICAgIHNpemVvZihzdHJ1Y3QgZXNwX3R4X2FtcGR1X2VudHJ5KSk7Cj4gKwkJCW9mZnNl dCArPSByb3VuZHVwKHNpemVvZihzdHJ1Y3QgZXNwX3R4X2FtcGR1X2VudHJ5KSwgNCk7Cj4gKwkJ fQo+ICsKPiArCQl0eF9sZW4gPSBvZmZzZXQgKyBza2ItPmxlbjsKPiArCQlzaGRyLT5sZW4gPSB0 eF9sZW47CS8qIGFjdHVhbCBsZW4gKi8KPiArCX0KPiArCj4gKwlzaGRyLT5zZXEgPSBzaXAtPnR4 c2VxKys7Cj4gKwo+ICsJLyogY29weSBza2IgdG8gYWdnciBidWYgKi8KPiArCW1lbWNweShzaXAt PnR4X2FnZ3Jfd3JpdGVfcHRyICsgb2Zmc2V0LCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKPiArCj4g KwlpZiAoaXNfZGF0YSkgewo+ICsJCXNwaW5fbG9ja19iaCgmc2lwLT5lcHViLT50eF9sb2NrKTsK PiArCQlzaXAtPnR4ZGF0YXNlcSA9IHNoZHItPnNlcTsKPiArCQlzcGluX3VubG9ja19iaCgmc2lw LT5lcHViLT50eF9sb2NrKTsKPiArCj4gKwkJLyogZmFrZSBhIHR4X3N0YXR1cyBhbmQgcmVwb3J0 IHRvIG1hYzgwMjExIHN0YWNrIHRvIHNwZWVkIHVwIHR4LCBtYXkgYWZmZWN0Cj4gKwkJICogIDEp IHJhdGUgY29udHJvbCAobm93IGl0J3MgYWxsIGluIHRhcmdldCwgc28gc2hvdWxkIGJlIE9LKQo+ ICsJCSAqICAyKSBwcyBtb2RlLCBtYWM4MDIxMSB3YW50IHRvIGNoZWNrIEFDSyBvZiBwcy9udWxs ZGF0YSB0byBzZWUgaWYgQVAgaXMgYXdha2UKPiArCQkgKiAgMykgQkFSLCBtYWM4MDIxMSBkbyBC QVIgYnkgY2hlY2tpbmcgQUNLCj4gKwkJICoKPiArCQkgKiAgWFhYOiBuZWVkIHRvIGFkanVzdCBm b3IgMTFuLCBlLmcuIHJlcG9ydCB0eF9zdGF0dXMgYWNjb3JkaW5nIHRvIEJBIHJlY2VpdmVkIGlu IHRhcmdldAo+ICsJCSAqLwo+ICsJCXNpcF90eF9zdGF0dXNfcmVwb3J0KHNpcCwgc2tiLCBpdHhf aW5mbywgdHJ1ZSk7Cj4gKwkJYXRvbWljX2RlYygmc2lwLT50eF9kYXRhX3BrdF9xdWV1ZWQpOwo+ ICsKPiArCQlTVFJBQ0VfVFhfREFUQV9JTkMoKTsKPiArCX0gZWxzZSB7Cj4gKwkJLyogY2hlY2sg cG0gc3RhdGUgaGVyZSAqLwo+ICsKPiArCQkvKiBubyBuZWVkIHRvIGhvbGQgY3RybCBza2IgKi8K PiArCQlzaXBfZnJlZV9jdHJsX3NrYnVmZihzaXAsIHNrYik7Cj4gKwkJU1RSQUNFX1RYX0NNRF9J TkMoKTsKPiArCX0KPiArCj4gKwkvKiBUQkQ6IHJvdW5kdXAgaGVyZSBvciB3aG9sZSBhZ2dyLWJ1 ZiAqLwo+ICsJdHhfbGVuID0gcm91bmR1cCh0eF9sZW4sIHNpcC0+dHhfYmxrc3opOwo+ICsKPiAr CXNpcC0+dHhfYWdncl93cml0ZV9wdHIgKz0gdHhfbGVuOwo+ICsJc2lwLT50eF90b3RfbGVuICs9 IHR4X2xlbjsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgc2lwX3R4 X3N0YXR1c19yZXBvcnQoc3RydWN0IGVzcF9zaXAgKnNpcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwK PiArCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8sCj4gKwkJCQkgYm9vbCBz dWNjZXNzKQo+ICt7Cj4gKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqd2g7Cj4gKwlzdHJ1Y3QgZXNw X25vZGUgKm5vZGU7Cj4gKwlzdHJ1Y3QgZXNwX3R4X3RpZCAqdGlkOwo+ICsJc3RydWN0IGllZWU4 MDIxMV9zdGEgKnN0YTsKPiArCXU4IHRpZG5vOwo+ICsKPiArCWlmICghKHR4X2luZm8tPmZsYWdz ICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkpIHsKPiArCQlpZiAobGlrZWx5KHN1Y2Nlc3MpKQo+ ICsJCQl0eF9pbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BQ0s7Cj4gKwkJZWxzZQo+ ICsJCQl0eF9pbmZvLT5mbGFncyAmPSB+SUVFRTgwMjExX1RYX1NUQVRfQUNLOwo+ICsKPiArCQkv KiBtYW5pcHVsYXRlIHJhdGUgc3RhdHVzLi4uICovCj4gKwkJdHhfaW5mby0+c3RhdHVzLnJhdGVz WzBdLmlkeCA9IDExOwo+ICsJCXR4X2luZm8tPnN0YXR1cy5yYXRlc1swXS5jb3VudCA9IDE7Cj4g KwkJdHhfaW5mby0+c3RhdHVzLnJhdGVzWzBdLmZsYWdzID0gMDsKPiArCQl0eF9pbmZvLT5zdGF0 dXMucmF0ZXNbMV0uaWR4ID0gLTE7Cj4gKwl9IGVsc2Ugewo+ICsJCXR4X2luZm8tPmZsYWdzIHw9 IElFRUU4MDIxMV9UWF9TVEFUX0FNUERVIHwKPiArCQkJSUVFRTgwMjExX1RYX1NUQVRfQUNLOwo+ ICsJCXR4X2luZm8tPnN0YXR1cy5hbXBkdV9sZW4gPSAxOwo+ICsJCXR4X2luZm8tPnN0YXR1cy5h bXBkdV9hY2tfbGVuID0gMTsKPiArCj4gKwkJLyogbWFuaXB1bGF0ZSByYXRlIHN0YXR1cy4uLiAq Lwo+ICsJCXR4X2luZm8tPnN0YXR1cy5yYXRlc1swXS5pZHggPSA3Owo+ICsJCXR4X2luZm8tPnN0 YXR1cy5yYXRlc1swXS5jb3VudCA9IDE7Cj4gKwkJdHhfaW5mby0+c3RhdHVzLnJhdGVzWzBdLmZs YWdzID0gSUVFRTgwMjExX1RYX1JDX01DUyB8Cj4gKwkJCUlFRUU4MDIxMV9UWF9SQ19TSE9SVF9H STsKPiArCQl0eF9pbmZvLT5zdGF0dXMucmF0ZXNbMV0uaWR4ID0gLTE7Cj4gKwl9Cj4gKwo+ICsJ aWYgKCFtb2Rfc3VwcG9ydF9ub190eGFtcGR1KCkgJiYKPiArCSAgICBjZmc4MDIxMV9nZXRfY2hh bmRlZl90eXBlKCZzaXAtPmVwdWItPmh3LT5jb25mLmNoYW5kZWYpICE9IE5MODAyMTFfQ0hBTl9O T19IVCkgewo+ICsJCXdoID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwo+ICsK PiArCQlpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKHdoLT5mcmFtZV9jb250cm9sKSAmJgo+ICsJ CSAgICAhKElFRUU4MDIxMV9TS0JfQ0Ioc2tiKS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FN UERVKSkgewo+ICsJCQl0aWRubyA9IGllZWU4MDIxMV9nZXRfcW9zX2N0bCh3aClbMF0gJgo+ICsJ CQkJSUVFRTgwMjExX1FPU19DVExfVElEX01BU0s7Cj4gKwo+ICsJCQlub2RlID0gZXNwX2dldF9u b2RlX2J5X2FkZHIoc2lwLT5lcHViLCB3aC0+YWRkcjEpOwo+ICsJCQlpZiAoIW5vZGUgfHwgIW5v ZGUtPnN0YSkKPiArCQkJCWdvdG8gX2V4aXQ7Cj4gKwo+ICsJCQlzdGEgPSBub2RlLT5zdGE7Cj4g KwkJCXRpZCA9ICZub2RlLT50aWRbdGlkbm9dOwo+ICsJCQlpZiAoIXRpZCkgewo+ICsJCQkJRVNT RVJUKDApOwo+ICsJCQkJZ290byBfZXhpdDsKPiArCQkJfQo+ICsKPiArCQkJc3Bpbl9sb2NrX2Jo KCZzaXAtPmVwdWItPnR4X2FtcGR1X2xvY2spOwo+ICsKPiArCQkJaWYgKHRpZC0+c3RhdGUgPT0g RVNQX1RJRF9TVEFURV9JTklUICYmCj4gKwkJCSAgICBUSURfVE9fQUModGlkbm8pICE9IFdNRV9B Q19WTyAmJiB0aWQtPmNudCA+PSAxMCkgewo+ICsJCQkJdGlkLT5zdGF0ZSA9IEVTUF9USURfU1RB VEVfVFJJR0dFUjsKPiArCQkJCWRldl9kYmcoc2lwLT5lcHViLT5kZXYsCj4gKwkJCQkJInN0YXJ0 IHR4IGJhIHNlc3Npb24sYWRkcjolcE0sdGlkOiV1XG4iLAo+ICsJCQkJCXdoLT5hZGRyMSwgdGlk bm8pOwo+ICsJCQkJc3Bpbl91bmxvY2tfYmgoJnNpcC0+ZXB1Yi0+dHhfYW1wZHVfbG9jayk7Cj4g KwkJCQlpZWVlODAyMTFfc3RhcnRfdHhfYmFfc2Vzc2lvbihzdGEsIHRpZG5vLCAwKTsKPiArCQkJ fSBlbHNlIHsKPiArCQkJCWlmICh0aWQtPnN0YXRlID09IEVTUF9USURfU1RBVEVfSU5JVCkKPiAr CQkJCQl0aWQtPmNudCsrOwo+ICsJCQkJZWxzZQo+ICsJCQkJCXRpZC0+Y250ID0gMDsKPiArCj4g KwkJCQlzcGluX3VubG9ja19iaCgmc2lwLT5lcHViLT50eF9hbXBkdV9sb2NrKTsKPiArCQkJfQo+ ICsJCX0KPiArCX0KPiArCj4gK19leGl0Ogo+ICsJaWVlZTgwMjExX3R4X3N0YXR1cyhzaXAtPmVw dWItPmh3LCBza2IpOwo+ICt9Cj4gKwo+ICsvKiAgTkI6IHRoaXMgcm91dGluZSBzaG91bGQgYmUg bG9ja2VkIHdoZW4gY2FsbGluZwo+ICsgKi8KPiArdm9pZCBzaXBfdHhxX3Byb2Nlc3Moc3RydWN0 IGVzcF9wdWIgKmVwdWIpCj4gK3sKPiArCXN0cnVjdCBza19idWZmICpza2I7Cj4gKwlzdHJ1Y3Qg c2lwX2hkciAqaGRyOwo+ICsJc3RydWN0IGVzcF9zaXAgKnNpcCA9IGVwdWItPnNpcDsKPiArCXN0 cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaXR4X2luZm87Cj4gKwl1MzIgcGt0X2xlbiwgdHhfbGVu ID0gMDsKPiArCWludCBibGtudW0gPSAwLCBwbV9zdGF0ZSA9IDA7Cj4gKwlib29sIHF1ZXVlZF9i YWNrID0gZmFsc2UsIG91dF9vZl9jcmVkaXRzID0gZmFsc2U7Cj4gKwo+ICsJd2hpbGUgKChza2Ig PSBza2JfZGVxdWV1ZSgmZXB1Yi0+dHhxKSkpIHsKPiArCQkvKiBjbWQgc2tiLT5sZW4gZG9lcyBu b3QgaW5jbHVkZSBzaXBfaGRyIHRvbyAqLwo+ICsJCXBrdF9sZW4gPSBza2ItPmxlbjsKPiArCQlp dHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKPiArCQlpZiAoaXR4X2luZm8tPmZsYWdz ICE9IDB4ZmZmZmZmZmYpIHsKPiArCQkJcGt0X2xlbiArPSByb3VuZHVwKHNpemVvZihzdHJ1Y3Qg c2lwX2hkciksIDQpOwo+ICsJCQlpZiAoaXR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NU TF9BTVBEVSkKPiArCQkJCXBrdF9sZW4gKz0gcm91bmR1cChzaXplb2Yoc3RydWN0IGVzcF90eF9h bXBkdV9lbnRyeSksCj4gKwkJCQkJCSAgIDQpOwo+ICsJCX0KPiArCj4gKwkJLyogY3VycmVudCBk ZXNpZ24gc2ltcGx5IHJlcXVpcmVzIGV2ZXJ5IHNpcF9oZHIgbXVzdCBiZSBhdCB0aGUgYmVnaW4g b2YgbWJsaywgdGhhdCBkZWZpbml0ZWx5Cj4gKwkJICogbmVlZCB0byBiZSBvcHRpbWl6ZWQsIGUu Zy4gY2FsY3VsYXRlIHJlbWFpbiBsZW5ndGggaW4gdGhlIHByZXZpb3VzIG1ibGssIGlmIGl0IGxh cmdlciB0aGFuCj4gKwkJICogY2VydGFpbiB0aHJlc2hvbGQgKGUuZywgd2hvbGUgcGt0IG9yID4g NTAlIG9mIHBrdCBvciAyIHggc2l6ZW9mKHN0cnVjdCBzaXBfaGRyKSwgYXBwZW5kIHBrdAo+ICsJ CSAqIHRvIHRoZSBwcmV2aW91cyBtYmxrLiAgVGhpcyBtaWdodCBiZSBkb25lIGluIHNpcF9wYWNr X3BrdCgpCj4gKwkJICovCj4gKwkJcGt0X2xlbiA9IHJvdW5kdXAocGt0X2xlbiwgc2lwLT50eF9i bGtzeik7Cj4gKwkJYmxrbnVtID0gcGt0X2xlbiAvIHNpcC0+dHhfYmxrc3o7Cj4gKwo+ICsJCS8q Cj4gKwkJICogRklYTUU6IEVtcGlyaWNhbCBkZWxheS4gV2l0aG91dCB0aGlzIGRlbGF5LCB0aGUg Y29ubmVjdGlvbiB0bwo+ICsJCSAqIGEgV2lGaSBuZXR3b3JrIGNyYXNoZXMgdGhlIGtlcm5lbCAo c29tZXRpbWVzIGF0IHRoZSBzZWNvbmQKPiArCQkgKiBjb25uZWN0aW9uKS4KPiArCQkgKi8KPiAr CQl1ZGVsYXkoMjAwMCk7Cj4gKwo+ICsJCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgmc2lwLT5j cmVkaXRfc3RhdHVzKSA9PSBSRUNBTENfQ1JFRElUX0VOQUJMRSkpIHsJLyogbmVlZCByZWNhbGMg Y3JlZGl0ICovCj4gKwkJCWhkciA9IChzdHJ1Y3Qgc2lwX2hkciAqKXNrYi0+ZGF0YTsKPiArCQkJ aXR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Cj4gKwo+ICsJCQlpZiAoIShpdHhfaW5m by0+ZmxhZ3MgPT0gMHhmZmZmZmZmZiAmJgo+ICsJCQkgICAgICBTSVBfSERSX0dFVF9UWVBFKGhk ci0+ZmNbMF0pID09IFNJUF9DVFJMICYmCj4gKwkJCSAgICAgIGhkci0+Y19jbWRpZCA9PSBTSVBf Q01EX1JFQ0FMQ19DUkVESVQgJiYKPiArCQkJICAgICAgYmxrbnVtIDw9IGF0b21pY19yZWFkKCZz aXAtPnR4X2NyZWRpdHMpIC0gc2lwLT5jcmVkaXRfdG9fcmVzZXJ2ZSkpIHsJLyogZXhjZXB0IGNt ZCByZWNhbGMgY3JlZGl0ICovCj4gKwkJCQlkZXZfZGJnKGVwdWItPmRldiwgInJlY2FsYyBjcmVk aXRzIVxuIik7Cj4gKwkJCQlTVFJBQ0VfVFhfT1VUX09GX0NSRURJVF9JTkMoKTsKPiArCQkJCXF1 ZXVlZF9iYWNrID0gdHJ1ZTsKPiArCQkJCW91dF9vZl9jcmVkaXRzID0gdHJ1ZTsKPiArCQkJCWJy ZWFrOwo+ICsJCQl9Cj4gKwkJfSBlbHNlIHsKPiArCQkJaWYgKHVubGlrZWx5KGJsa251bSA+IChh dG9taWNfcmVhZCgmc2lwLT50eF9jcmVkaXRzKSAtIHNpcC0+Y3JlZGl0X3RvX3Jlc2VydmUgLSBT SVBfQ1RSTF9DUkVESVRfUkVTRVJWRSkpKSB7Cj4gKwkJCQlpdHhfaW5mbyA9IElFRUU4MDIxMV9T S0JfQ0Ioc2tiKTsKPiArCQkJCWlmIChpdHhfaW5mby0+ZmxhZ3MgPT0gMHhmZmZmZmZmZikgewkv KiBwcml2IGN0cmwgcGt0ICovCj4gKwkJCQkJaWYgKGJsa251bSA+IGF0b21pY19yZWFkKCZzaXAt PnR4X2NyZWRpdHMpIC0gc2lwLT5jcmVkaXRfdG9fcmVzZXJ2ZSkgewo+ICsJCQkJCQlkZXZfZGJn KGVwdWItPmRldiwKPiArCQkJCQkJCSIlcyBjbWQgcGt0IG91dCBvZiBjcmVkaXRzIVxuIiwKPiAr CQkJCQkJCV9fZnVuY19fKTsKPiArCQkJCQkJU1RSQUNFX1RYX09VVF9PRl9DUkVESVRfSU5DKCk7 Cj4gKwkJCQkJCXF1ZXVlZF9iYWNrID0gdHJ1ZTsKPiArCQkJCQkJb3V0X29mX2NyZWRpdHMgPSB0 cnVlOwo+ICsJCQkJCQlicmVhazsKPiArCQkJCQl9Cj4gKwkJCQl9IGVsc2Ugewo+ICsJCQkJCWRl dl9kYmcoZXB1Yi0+ZGV2LAo+ICsJCQkJCQkiJXMgb3V0IG9mIGNyZWRpdHMhXG4iLAo+ICsJCQkJ CQlfX2Z1bmNfXyk7Cj4gKwkJCQkJU1RSQUNFX1RYX09VVF9PRl9DUkVESVRfSU5DKCk7Cj4gKwkJ CQkJcXVldWVkX2JhY2sgPSB0cnVlOwo+ICsJCQkJCW91dF9vZl9jcmVkaXRzID0gdHJ1ZTsKPiAr CQkJCQlicmVhazsKPiArCQkJCX0KPiArCQkJfQo+ICsJCX0KPiArCj4gKwkJdHhfbGVuICs9IHBr dF9sZW47Cj4gKwkJaWYgKHR4X2xlbiA+PSBTSVBfVFhfQUdHUl9CVUZfU0laRSkgewo+ICsJCQkv KiBkbyB3ZSBuZWVkIHRvIGhhdmUgbGltaXRhdGlvbiBsaWtlbWF4IDggcGt0cyBpbiBhIHJvdz8g Ki8KPiArCQkJZGV2X2RiZyhlcHViLT5kZXYsICIlcyB0b28gbXVjaCBwa3RzIGluIG9uZSBzaG90 IVxuIiwKPiArCQkJCV9fZnVuY19fKTsKPiArCQkJU1RSQUNFX1RYX09ORV9TSE9UX0lOQygpOwo+ ICsJCQl0eF9sZW4gLT0gcGt0X2xlbjsKPiArCQkJcXVldWVkX2JhY2sgPSB0cnVlOwo+ICsJCQli cmVhazsKPiArCQl9Cj4gKwo+ICsJCWlmIChzaXBfcGFja19wa3Qoc2lwLCBza2IsICZwbV9zdGF0 ZSkgIT0gMCkgewo+ICsJCQkvKiB3cm9uZyBwa3QsIHdvbid0IHNlbmQgdG8gdGFyZ2V0ICovCj4g KwkJCXR4X2xlbiAtPSBwa3RfbGVuOwo+ICsJCQljb250aW51ZTsKPiArCQl9Cj4gKwo+ICsJCWF0 b21pY19zdWIoYmxrbnVtLCAmc2lwLT50eF9jcmVkaXRzKTsKPiArCQkvKgo+ICsJCSAqIEZJWE1F OiBFbXBpcmljYWwgZGVsYXkuIFdpdGhvdXQgdGhpcyBkZWxheSwgdGhlIGNvbm5lY3Rpb24gdG8K PiArCQkgKiBhIFdpRmkgbmV0d29yayBjcmFzaGVzIHRoZSBrZXJuZWwgKHNvbWV0aW1lcyBhdCB0 aGUgc2Vjb25kCj4gKwkJICogY29ubmVjdGlvbikuCj4gKwkJICovCj4gKwkJdWRlbGF5KDIwMDAp Owo+ICsKPiArCX0KPiArCj4gKwlpZiAocXVldWVkX2JhY2spCj4gKwkJc2tiX3F1ZXVlX2hlYWQo JmVwdWItPnR4cSwgc2tiKTsKPiArCj4gKwlpZiAoYXRvbWljX3JlYWQoJnNpcC0+c3RhdGUpID09 IFNJUF9TVE9QCj4gKyNpZmRlZiBIT1NUX1JFU0VUX0JVRwo+ICsJICAgIHx8IGF0b21pY19yZWFk KCZlcHViLT53bC5vZmYpID09IDEKPiArI2VuZGlmCj4gKwkgICApIHsKPiArCQlxdWV1ZWRfYmFj ayA9IDE7Cj4gKwkJdHhfbGVuID0gMDsKPiArCX0KPiArCj4gKwlpZiAodHhfbGVuKQo+ICsJCXNp cF93cml0ZV9wa3RzKHNpcCwgcG1fc3RhdGUpOwo+ICsKPiArCWlmIChxdWV1ZWRfYmFjayAmJiAh b3V0X29mX2NyZWRpdHMpCj4gKwkJLyogc2tiIHBlbmRpbmcsIGRvIGFzeW5jIHByb2Nlc3MgYWdh aW4gKi8KPiArCQlzaXBfdHJpZ2dlcl90eHFfcHJvY2VzcyhzaXApOwo+ICt9Cj4gKwo+ICsjaWZu ZGVmIE5PX1dNTV9EVU1NWQo+ICtzdGF0aWMgc3RydWN0IGVzcF84MDIxMV93bW1fcGFyYW1fZWxl bWVudCBlc3Bfd21tX3BhcmFtID0gewo+ICsJLm91aSA9IHsweDAwLCAweDUwLCAweGYyfSwKPiAr CS5vdWlfdHlwZSA9IDB4MDIsCj4gKwkub3VpX3N1YnR5cGUgPSAweDAxLAo+ICsJLnZlcnNpb24g PSAweDAxLAo+ICsJLnFvc19pbmZvID0gMHgwMCwKPiArCS5yZXNlcnZlZCA9IDB4MDAsCj4gKwku YWMgPSB7Cj4gKwkJewo+ICsJCQkuYWNpX2FpZnNuID0gMHgwMywKPiArCQkJLmN3ID0gMHhhNCwK PiArCQkJLnR4b3BfbGltaXQgPSAweDAwMDAsCj4gKwkJfSwKPiArCQl7Cj4gKwkJCS5hY2lfYWlm c24gPSAweDI3LAo+ICsJCQkuY3cgPSAweGE0LAo+ICsJCQkudHhvcF9saW1pdCA9IDB4MDAwMCwK PiArCQl9LAo+ICsJCXsKPiArCQkJLmFjaV9haWZzbiA9IDB4NDIsCj4gKwkJCS5jdyA9IDB4NDMs Cj4gKwkJCS50eG9wX2xpbWl0ID0gMHgwMDVlLAo+ICsJCX0sCj4gKwkJewo+ICsJCQkuYWNpX2Fp ZnNuID0gMHg2MiwKPiArCQkJLmN3ID0gMHgzMiwKPiArCQkJLnR4b3BfbGltaXQgPSAweDAwMmYs Cj4gKwkJfSwKPiArCX0sCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IGVzcF9hZGRfd21tKHN0cnVj dCBza19idWZmICpza2IpCj4gK3sKPiArCXU4ICpwOwo+ICsJaW50IGZsYWcgPSAwOwo+ICsJaW50 IHJlbWFpbl9sZW47Cj4gKwlpbnQgYmFzZV9sZW47Cj4gKwlpbnQgbGVuOwo+ICsJc3RydWN0IGll ZWU4MDIxMV9tZ210ICptZ210Owo+ICsJc3RydWN0IGllZWU4MDIxMV9oZHIgKndoOwo+ICsKPiAr CWlmICghc2tiKQo+ICsJCXJldHVybiAtMTsKPiArCj4gKwl3aCA9IChzdHJ1Y3QgaWVlZTgwMjEx X2hkciAqKXNrYi0+ZGF0YTsKPiArCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopKCh1 OCAqKXNrYi0+ZGF0YSk7Cj4gKwo+ICsJaWYgKGllZWU4MDIxMV9pc19hc3NvY19yZXNwKHdoLT5m cmFtZV9jb250cm9sKSkgewo+ICsJCXAgPSBtZ210LT51LmFzc29jX3Jlc3AudmFyaWFibGU7Cj4g KwkJYmFzZV9sZW4gPSAodTggKiltZ210LT51LmFzc29jX3Jlc3AudmFyaWFibGUgLSAodTggKilt Z210Owo+ICsJfSBlbHNlIGlmIChpZWVlODAyMTFfaXNfcmVhc3NvY19yZXNwKHdoLT5mcmFtZV9j b250cm9sKSkgewo+ICsJCXAgPSBtZ210LT51LnJlYXNzb2NfcmVzcC52YXJpYWJsZTsKPiArCQli YXNlX2xlbiA9ICh1OCAqKW1nbXQtPnUucmVhc3NvY19yZXNwLnZhcmlhYmxlIC0gKHU4ICopbWdt dDsKPiArCX0gZWxzZSBpZiAoaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3Aod2gtPmZyYW1lX2NvbnRy b2wpKSB7Cj4gKwkJcCA9IG1nbXQtPnUucHJvYmVfcmVzcC52YXJpYWJsZTsKPiArCQliYXNlX2xl biA9ICh1OCAqKW1nbXQtPnUucHJvYmVfcmVzcC52YXJpYWJsZSAtICh1OCAqKW1nbXQ7Cj4gKwl9 IGVsc2UgaWYgKGllZWU4MDIxMV9pc19iZWFjb24od2gtPmZyYW1lX2NvbnRyb2wpKSB7Cj4gKwkJ cCA9IG1nbXQtPnUuYmVhY29uLnZhcmlhYmxlOwo+ICsJCWJhc2VfbGVuID0gKHU4ICopbWdtdC0+ dS5iZWFjb24udmFyaWFibGUgLSAodTggKiltZ210Owo+ICsJfSBlbHNlIHsKPiArCQlyZXR1cm4g MTsKPiArCX0KPiArCj4gKwlyZW1haW5fbGVuID0gc2tiLT5sZW4gLSBiYXNlX2xlbjsKPiArCj4g Kwl3aGlsZSAocmVtYWluX2xlbiA+IDApIHsKPiArCQlpZiAoKnAgPT0gMHhkZCAmJiAqKHAgKyA1 KSA9PSAweDAyKQkvL3dtbSB0eXBlCj4gKwkJCXJldHVybiAwOwo+ICsJCWVsc2UgaWYgKCpwID09 IDB4MmQpCS8vaGFzIGh0IGNhcAo+ICsJCQlmbGFnID0gMTsKPiArCj4gKwkJbGVuID0gKigrK3Ap Owo+ICsJCXAgKz0gKGxlbiArIDEpOwo+ICsJCXJlbWFpbl9sZW4gLT0gKGxlbiArIDIpOwo+ICsJ fQo+ICsKPiArCWlmIChyZW1haW5fbGVuIDwgMCkKPiArCQlyZXR1cm4gLTI7CgotMiBpcyBub3Qg YSB2YWxpZCBlcnJvciBjb2RlLgoKPiArCj4gKwlpZiAoZmxhZyA9PSAxKSB7Cj4gKwkJc2tiX3B1 dChza2IsIDIgKyBzaXplb2YoZXNwX3dtbV9wYXJhbSkpOwo+ICsKPiArCQltZW1zZXQocCwgMHhk ZCwgc2l6ZW9mKHU4KSk7Cj4gKwkJbWVtc2V0KHAgKyAxLCBzaXplb2YoZXNwX3dtbV9wYXJhbSks IHNpemVvZih1OCkpOwo+ICsJCW1lbWNweShwICsgMiwgJmVzcF93bW1fcGFyYW0sIHNpemVvZihl c3Bfd21tX3BhcmFtKSk7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArI2VuZGlmCQkJ CS8qIE5PX1dNTV9EVU1NWSAqLwo+ICsKPiArLyogIHBhcnNlIG1hY19yeF9jdHJsIGFuZCByZXR1 cm4gbGVuZ3RoICovCj4gK3N0YXRpYyBpbnQgc2lwX3BhcnNlX21hY19yeF9pbmZvKHN0cnVjdCBl c3Bfc2lwICpzaXAsCj4gKwkJCQkgc3RydWN0IGVzcF9tYWNfcnhfY3RybCAqbWFjX2N0cmwsCj4g KwkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYikKPiArewo+ICsJc3RydWN0IGllZWU4MDIxMV9yeF9z dGF0dXMgKnJ4X3N0YXR1czsKPiArCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7Cj4gKwlzdHJ1 Y3QgaWVlZTgwMjExX2hkciAqd2g7Cj4gKwo+ICsJcnhfc3RhdHVzID0gSUVFRTgwMjExX1NLQl9S WENCKHNrYik7Cj4gKwlyeF9zdGF0dXMtPmZyZXEgPSBlc3BfaWVlZTJtaHoobWFjX2N0cmwtPmNo YW5uZWwpOwo+ICsJcnhfc3RhdHVzLT5zaWduYWwgPSBtYWNfY3RybC0+cnNzaSArIG1hY19jdHJs LT5ub2lzZV9mbG9vcjsJLyogc25yIGFjdHVhbGx5LCBuZWVkIHRvIG9mZnNldCBub2lzZSBmbG9v ciBlLmcuIC04NSAqLwo+ICsKPiArCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ ZGF0YTsKPiArCWlmIChtYWNfY3RybC0+ZGFtYXRjaDAgPT0gMSAmJiBtYWNfY3RybC0+YnNzaWRt YXRjaDAgPT0gMSAmJgkvKm1hdGNoIGJzc2lkIGFuZCBkYSwgYnV0IGJlYWNvbiBwYWNrYWdlIGNv bnRhaW4gb3RoZXIgYnNzaWQgKi8KPiArCSAgICAhc3RybmNtcChoZHItPmFkZHIyLCBzaXAtPmVw dWItPndsLmJzc2lkLCBFVEhfQUxFTikpIHsJLyogZm9yY2UgbWF0Y2ggYWRkcjIgKi8KPiArCQlp ZiAoKytzaWduYWxfbG9vcCA+PSBTSUdOQUxfQ09VTlQpIHsKPiArCQkJYXZnX3NpZ25hbCArPSBy eF9zdGF0dXMtPnNpZ25hbDsKPiArCQkJYXZnX3NpZ25hbCAvPSBTSUdOQUxfQ09VTlQ7Cj4gKwkJ CXJ4X3N0YXR1cy0+c2lnbmFsID0gYXZnX3NpZ25hbCArIDU7Cj4gKwkJCW9sZF9zaWduYWwgPSBy eF9zdGF0dXMtPnNpZ25hbDsKPiArCQkJc2lnbmFsX2xvb3AgPSAwOwo+ICsJCQlhdmdfc2lnbmFs ID0gMDsKPiArCQl9IGVsc2Ugewo+ICsJCQlhdmdfc2lnbmFsICs9IHJ4X3N0YXR1cy0+c2lnbmFs Owo+ICsJCQlyeF9zdGF0dXMtPnNpZ25hbCA9IG9sZF9zaWduYWw7Cj4gKwkJfQo+ICsJfQo+ICsK PiArCXJ4X3N0YXR1cy0+YW50ZW5uYSA9IDA7CS8qIG9uZSBhbnRlbm5hIGZvciBub3cgKi8KPiAr CXJ4X3N0YXR1cy0+YmFuZCA9IE5MODAyMTFfQkFORF8yR0haOwo+ICsJcnhfc3RhdHVzLT5mbGFn ID0gUlhfRkxBR19ERUNSWVBURUQgfCBSWF9GTEFHX01NSUNfU1RSSVBQRUQ7Cj4gKwlpZiAobWFj X2N0cmwtPnNpZ19tb2RlKSB7Cj4gKwkJcnhfc3RhdHVzLT5lbmNvZGluZyB8PSBSWF9FTkNfSFQ7 Cj4gKwkJcnhfc3RhdHVzLT5yYXRlX2lkeCA9IG1hY19jdHJsLT5NQ1M7Cj4gKwkJaWYgKG1hY19j dHJsLT5TR0kpCj4gKwkJCXJ4X3N0YXR1cy0+ZW5jX2ZsYWdzIHw9IFJYX0VOQ19GTEFHX1NIT1JU X0dJOwo+ICsJfSBlbHNlIHsKPiArCQlyeF9zdGF0dXMtPnJhdGVfaWR4ID0gZXNwX3dtYWNfcmF0 ZTJpZHgobWFjX2N0cmwtPnJhdGUpOwo+ICsJfQo+ICsKPiArCWlmIChtYWNfY3RybC0+cnhlbmRf c3RhdGUgPT0gUlhfRkNTX0VSUikKPiArCQlyeF9zdGF0dXMtPmZsYWcgfD0gUlhfRkxBR19GQUlM RURfRkNTX0NSQzsKPiArCj4gKwkvKiBNaWMgZXJyb3IgZnJhbWUgZmxhZyAqLwo+ICsJaWYgKG1h Y19jdHJsLT5yeGVuZF9zdGF0ZSA9PSBSWF9US0lQTUlDX0VSUiB8fAo+ICsJICAgIG1hY19jdHJs LT5yeGVuZF9zdGF0ZSA9PSBSWF9DQ01QTUlDX0VSUikgewo+ICsJCWlmIChhdG9taWNfcmVhZCgm c2lwLT5lcHViLT53bC50a2lwX2tleV9zZXQpID09IDEpIHsKPiArCQkJcnhfc3RhdHVzLT5mbGFn IHw9IFJYX0ZMQUdfTU1JQ19FUlJPUjsKPiArCQkJYXRvbWljX3NldCgmc2lwLT5lcHViLT53bC50 a2lwX2tleV9zZXQsIDApOwo+ICsJCQlwcmludGsoIm1pYyBlcnJcbiIpOwo+ICsJCX0gZWxzZSB7 Cj4gKwkJCXByaW50aygibWljIGVyciBkaXNjYXJkXG4iKTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJ d2ggPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikoKHU4ICopc2tiLT5kYXRhKTsKPiArCj4gKyNp Zm5kZWYgTk9fV01NX0RVTU1ZCj4gKwlpZiAoaWVlZTgwMjExX2lzX21nbXQod2gtPmZyYW1lX2Nv bnRyb2wpKQo+ICsJCWVzcF9hZGRfd21tKHNrYik7Cj4gKyNlbmRpZgo+ICsKPiArCS8qIHNvbWUg a2VybmVsIGUuZy4gMy4wLjggd3JvbmdseSBoYW5kbGVzIG5vbi1lbmNyeXB0ZWQgcGt0IGxpa2Ug ZWFwb2wgKi8KPiArCWlmIChpZWVlODAyMTFfaXNfZGF0YSh3aC0+ZnJhbWVfY29udHJvbCkpIHsK PiArCQlpZiAoIWllZWU4MDIxMV9oYXNfcHJvdGVjdGVkKHdoLT5mcmFtZV9jb250cm9sKSkKPiAr CQkJcnhfc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfSVZfU1RSSVBQRUQ7Cj4gKwkJZWxzZSBpZiAo IWF0b21pY19yZWFkKCZzaXAtPmVwdWItPndsLnB0a19jbnQpKQo+ICsJCQkJcnhfc3RhdHVzLT5m bGFnIHw9IFJYX0ZMQUdfSVZfU1RSSVBQRUQ7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30K PiArCj4gK3N0YXRpYyBzdHJ1Y3QgZXNwX21hY19yeF9jdHJsICpzaXBfcGFyc2Vfbm9ybWFsX21h Y19jdHJsKHN0cnVjdCBza19idWZmICpza2IsCj4gKwkJCQkJCQkgaW50ICpwa3RfbGVuX2VuYywK PiArCQkJCQkJCSBpbnQgKmJ1Zl9sZW4sCj4gKwkJCQkJCQkgaW50ICpwdWxsZWRfbGVuKQo+ICt7 Cj4gKwlzdHJ1Y3Qgc2lwX2hkciAqaGRyID0gKHN0cnVjdCBzaXBfaGRyICopc2tiLT5kYXRhOwo+ ICsJc3RydWN0IGVzcF9tYWNfcnhfY3RybCAqbWFjX2N0cmw7Cj4gKwlpbnQgbGVuX2luX2hkciA9 IGhkci0+bGVuOwo+ICsKPiArCUVTU0VSVChza2IpOwo+ICsJRVNTRVJUKHNrYi0+bGVuID4gU0lQ X01JTl9EQVRBX1BLVF9MRU4pOwo+ICsKPiArCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBz aXBfaGRyKSk7Cj4gKwkqcHVsbGVkX2xlbiArPSBzaXplb2Yoc3RydWN0IHNpcF9oZHIpOwo+ICsJ bWFjX2N0cmwgPSAoc3RydWN0IGVzcF9tYWNfcnhfY3RybCAqKXNrYi0+ZGF0YTsKPiArCWlmICgh bWFjX2N0cmwtPmFnZ3JlZ2F0aW9uKSB7Cj4gKwkJRVNTRVJUKHBrdF9sZW5fZW5jKTsKPiArCQlF U1NFUlQoYnVmX2xlbik7Cj4gKwkJKnBrdF9sZW5fZW5jID0gKG1hY19jdHJsLT5zaWdfbW9kZSA/ IG1hY19jdHJsLT5IVF9sZW5ndGggOiBtYWNfY3RybC0+bGVnYWN5X2xlbmd0aCkgLSBGQ1NfTEVO Owo+ICsJCSpidWZfbGVuID0gbGVuX2luX2hkciAtIHNpemVvZihzdHJ1Y3Qgc2lwX2hkcikgLQo+ ICsJCQlzaXplb2Yoc3RydWN0IGVzcF9tYWNfcnhfY3RybCk7Cj4gKwl9Cj4gKwo+ICsJc2tiX3B1 bGwoc2tiLCBzaXplb2Yoc3RydWN0IGVzcF9tYWNfcnhfY3RybCkpOwo+ICsJKnB1bGxlZF9sZW4g Kz0gc2l6ZW9mKHN0cnVjdCBlc3BfbWFjX3J4X2N0cmwpOwo+ICsKPiArCXJldHVybiBtYWNfY3Ry bDsKPiArfQo+ICsKPiArLyogZm9yIG9uZSBNUERVIChpbmNsdWRpbmcgc3ViZnJhbWUgaW4gQU1Q RFUpICovCj4gK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqc2lwX3BhcnNlX2RhdGFfcnhfaW5mbyhz dHJ1Y3QgZXNwX3NpcCAqc2lwLAo+ICsJCQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IsCj4g KwkJCQkJICAgICAgaW50IHBrdF9sZW5fZW5jLCBpbnQgYnVmX2xlbiwKPiArCQkJCQkgICAgICBz dHJ1Y3QgZXNwX21hY19yeF9jdHJsICptYWNfY3RybCwKPiArCQkJCQkgICAgICBpbnQgKnB1bGxl ZF9sZW4pCj4gK3sKPiArCS8qICAgfCBtYWNfcnhfY3RybCB8IHJlYWxfZGF0YV9wYXlsb2FkIHwg YW1wZHVfZW50cmllcyB8ICovCj4gKwlzdHJ1Y3Qgc2tfYnVmZiAqcnNrYjsKPiArCXN0cnVjdCBp ZWVlODAyMTFfaGRyICp3aDsKPiArCWludCBwa3RfbGVuLCByZXQ7Cj4gKwo+ICsJaWYgKG1hY19j dHJsLT5hZ2dyZWdhdGlvbikgewo+ICsJCXdoID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2ti LT5kYXRhOwo+ICsJCXBrdF9sZW4gPSBwa3RfbGVuX2VuYzsKPiArCQlpZiAoaWVlZTgwMjExX2hh c19wcm90ZWN0ZWQod2gtPmZyYW1lX2NvbnRyb2wpKQkvL2FtcGR1LCBpdCBpcyBDQ01QIGVuYwo+ ICsJCQlwa3RfbGVuIC09IDg7Cj4gKwo+ICsJCWJ1Zl9sZW4gPSByb3VuZHVwKHBrdF9sZW4sIDQp Owo+ICsJfSBlbHNlIHsKPiArCQlwa3RfbGVuID0gYnVmX2xlbiAtIDMgKyAoKHBrdF9sZW5fZW5j IC0gMSkgJiAweDMpOwo+ICsJfQo+ICsKPiArI2lmbmRlZiBOT19XTU1fRFVNTVkKPiArCXJza2Ig PSBfX2Rldl9hbGxvY19za2IocGt0X2xlbl9lbmMgKyBzaXplb2YoZXNwX3dtbV9wYXJhbSkgKyAy LAo+ICsJCQkgICAgICAgR0ZQX0FUT01JQyk7Cj4gKyNlbHNlCj4gKwlyc2tiID0gX19kZXZfYWxs b2Nfc2tiKHBrdF9sZW5fZW5jLCBHRlBfQVRPTUlDKTsKPiArI2VuZGlmCQkJCS8qIE5PX1dNTV9E VU1NWSAqLwo+ICsJaWYgKHVubGlrZWx5KCFyc2tiKSkgewoKUmVtb3ZlIGFsbCBsaWtlbHkvdW5s aWtlbHkuCgo+ICsJCWRldl9lcnIoc2lwLT5lcHViLT5kZXYsICJubyBtZW0gZm9yIHJza2JcbiIp OwoKTm8gbmVlZCBmb3IgdGhpcyBwcmludGsuCgo+ICsJCXJldHVybiBOVUxMOwo+ICsJfQo+ICsK PiArCXNrYl9wdXQocnNrYiwgcGt0X2xlbl9lbmMpOwo+ICsKPiArCW1lbWNweShyc2tiLT5kYXRh LCBza2ItPmRhdGEsIHBrdF9sZW4pOwo+ICsKPiArCWlmIChwa3RfbGVuX2VuYyA+IHBrdF9sZW4p Cj4gKwkJbWVtc2V0KHJza2ItPmRhdGEgKyBwa3RfbGVuLCAwLCBwa3RfbGVuX2VuYyAtIHBrdF9s ZW4pOwo+ICsKPiArCS8qIHN0cmlwIG91dCBjdXJyZW50IHBrdCwgbW92ZSB0byB0aGUgbmV4dCBv bmUgKi8KPiArCXNrYl9wdWxsKHNrYiwgYnVmX2xlbik7Cj4gKwkqcHVsbGVkX2xlbiArPSBidWZf bGVuOwo+ICsKPiArCXJldCA9IHNpcF9wYXJzZV9tYWNfcnhfaW5mbyhzaXAsIG1hY19jdHJsLCBy c2tiKTsKPiArCWlmIChyZXQgPT0gLTEgJiYgIW1hY19jdHJsLT5hZ2dyZWdhdGlvbikgewoKCnNp cF9wYXJzZV9tYWNfcnhfaW5mbygpIG5ldmVyIHJldHVybnMgLTEuICBBbHNvIC0xIGlzIG5vdCBh IHRoZSBjb3JyZWN0CmVycm9yIGNvZGUuCgo+ICsJCWtmcmVlX3NrYihyc2tiKTsKPiArCQlyZXR1 cm4gTlVMTDsKPiArCX0KPiArCj4gKwlyZXR1cm4gcnNrYjsKPiArfQo+ICsKPiArc3RydWN0IGVz cF9zaXAgKnNpcF9hdHRhY2goc3RydWN0IGVzcF9wdWIgKmVwdWIpCj4gK3sKPiArCXN0cnVjdCBl c3Bfc2lwICpzaXA7Cj4gKwlzdHJ1Y3Qgc2lwX3BrdCAqcGt0Owo+ICsJaW50IGksIHBvOwo+ICsK PiArCXNpcCA9IGt6YWxsb2Moc2l6ZW9mKCpzaXApLCBHRlBfS0VSTkVMKTsKPiArCWlmICghc2lw KSB7Cj4gKwkJZGV2X2RiZyhlcHViLT5kZXYsICJubyBtZW0gZm9yIHNpcCFcbiIpOwo+ICsJCWdv dG8gX2Vycl9zaXA7CgpObyBuZWVkIGZvciB0aGUgZXJyb3IgbWVzc2FnZSBvciB0aGUgZ290by4K Cj4gKwl9Cj4gKwo+ICsJLyogRmluZGluZyB0aGUgc21hbGVzdCBhdmFpbGFibGUgc3BhY2UgdG8g YWxsb2NhdGUgdGhpcyB2YXJpYXZsZSAqLwo+ICsJcG8gPSBnZXRfb3JkZXIoU0lQX1RYX0FHR1Jf QlVGX1NJWkUpOwo+ICsKPiArCXNpcC0+dHhfYWdncl9idWYgPSAodTggKilfX2dldF9mcmVlX3Bh Z2VzKEdGUF9BVE9NSUMsIHBvKTsKPiArCWlmICghc2lwLT50eF9hZ2dyX2J1Zikgewo+ICsJCWRl dl9lcnIoZXB1Yi0+ZGV2LCAibm8gbWVtIGZvciB0eF9hZ2dyX2J1ZiFcbiIpOwo+ICsJCWdvdG8g X2Vycl9hZ2dyOwo+ICsJfQo+ICsKPiArCXNwaW5fbG9ja19pbml0KCZzaXAtPmxvY2spOwo+ICsK PiArCUlOSVRfTElTVF9IRUFEKCZzaXAtPmZyZWVfY3RybF90eGJ1Zik7Cj4gKwlJTklUX0xJU1Rf SEVBRCgmc2lwLT5mcmVlX2N0cmxfcnhidWYpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBTSVBf Q1RSTF9CVUZfTjsgaSsrKSB7Cj4gKwkJcGt0ID0ga3phbGxvYyhzaXplb2YoKnBrdCksIEdGUF9L RVJORUwpOwo+ICsJCWlmICghcGt0KQo+ICsJCQlnb3RvIF9lcnJfcGt0Owo+ICsKPiArCQlwa3Qt PmJ1Zl9iZWdpbiA9IGt6YWxsb2MoU0lQX0NUUkxfQlVGX1NaLCBHRlBfS0VSTkVMKTsKPiArCQlp ZiAoIXBrdC0+YnVmX2JlZ2luKSB7Cj4gKwkJCWtmcmVlKHBrdCk7Cj4gKwkJCXBrdCA9IE5VTEw7 CgpObyBuZWVkIHRvIHNldCAicGt0IiB0byBOVUxMCgo+ICsJCQlnb3RvIF9lcnJfcGt0Owo+ICsJ CX0KPiArCj4gKwkJcGt0LT5idWZfbGVuID0gU0lQX0NUUkxfQlVGX1NaOwo+ICsJCXBrdC0+YnVm ID0gcGt0LT5idWZfYmVnaW47Cj4gKwo+ICsJCWlmIChpIDwgU0lQX0NUUkxfVFhCVUZfTikKPiAr CQkJbGlzdF9hZGRfdGFpbCgmcGt0LT5saXN0LCAmc2lwLT5mcmVlX2N0cmxfdHhidWYpOwo+ICsJ CWVsc2UKPiArCQkJbGlzdF9hZGRfdGFpbCgmcGt0LT5saXN0LCAmc2lwLT5mcmVlX2N0cmxfcnhi dWYpOwo+ICsJfQo+ICsKPiArCW11dGV4X2luaXQoJnNpcC0+cnhfbXR4KTsKPiArCXNrYl9xdWV1 ZV9oZWFkX2luaXQoJnNpcC0+cnhxKTsKPiArCUlOSVRfV09SSygmc2lwLT5yeF9wcm9jZXNzX3dv cmssIHNpcF9yeHFfcHJvY2Vzcyk7Cj4gKwo+ICsJc2lwLT5lcHViID0gZXB1YjsKPiArCWF0b21p Y19zZXQoJnNpcC0+bm9pc2VfZmxvb3IsIC05Nik7Cj4gKwo+ICsJYXRvbWljX3NldCgmc2lwLT5z dGF0ZSwgU0lQX0lOSVQpOwo+ICsJYXRvbWljX3NldCgmc2lwLT50eF9jcmVkaXRzLCAwKTsKPiAr Cj4gKwlpZiAoIXNpcC0+cmF3YnVmKSB7Cj4gKwkJc2lwLT5yYXdidWYgPSBremFsbG9jKFNJUF9C T09UX0JVRl9TSVpFLCBHRlBfS0VSTkVMKTsKPiArCQlpZiAoIXNpcC0+cmF3YnVmKSB7Cj4gKwkJ CWRldl9lcnIoZXB1Yi0+ZGV2LCAibm8gbWVtIGZvciByYXdidWYhXG4iKTsKPiArCQkJZ290byBf ZXJyX3BrdDsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJYXRvbWljX3NldCgmc2lwLT5zdGF0ZSwgU0lQ X1BSRVBBUkVfQk9PVCk7Cj4gKwo+ICsJcmV0dXJuIHNpcDsKPiArCj4gK19lcnJfcGt0Ogo+ICsJ c2lwX2ZyZWVfaW5pdF9jdHJsX2J1ZihzaXApOwo+ICsKPiArCWlmIChzaXAtPnR4X2FnZ3JfYnVm KSB7CgpObyBuZWVkIGZvciB0aGlzIHRlc3QuICBXZSBrbm93IGl0J3Mgbm9uLU5VTEwuCgo+ICsJ CXBvID0gZ2V0X29yZGVyKFNJUF9UWF9BR0dSX0JVRl9TSVpFKTsKCnBvIGlzIGFscmVhZHkgc2V0 LiAgTm8gbmVlZCB0byBjYWxjdWxhdGUgaXQgYWdhaW4uCgo+ICsJCWZyZWVfcGFnZXMoKHVuc2ln bmVkIGxvbmcpc2lwLT50eF9hZ2dyX2J1ZiwgcG8pOwo+ICsJCXNpcC0+dHhfYWdncl9idWYgPSBO VUxMOwoKTm8gbmVlZCB0byBzZXQgdGhpcyB0byBOVUxMLiAgV2UncmUganVzdCBnb2luZyB0byBm cmVlICJzaXAiIG9uIHRoZQpuZXh0IGxpbmUuCgo+ICsJfQo+ICsKPiArX2Vycl9hZ2dyOgo+ICsJ a2ZyZWUoc2lwKTsKPiArCXNpcCA9IE5VTEw7CgpObyBuZWVkIHRvIHNldCB0aGlzIHRvIE5VTEwK Cj4gKwo+ICtfZXJyX3NpcDoKPiArCXJldHVybiBOVUxMOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9p ZCBzaXBfZnJlZV9pbml0X2N0cmxfYnVmKHN0cnVjdCBlc3Bfc2lwICpzaXApCj4gK3sKPiArCXN0 cnVjdCBzaXBfcGt0ICpwa3QsICp0cGt0Owo+ICsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnlfc2Fm ZShwa3QsIHRwa3QsICZzaXAtPmZyZWVfY3RybF90eGJ1ZiwgbGlzdCkgewo+ICsJCWxpc3RfZGVs KCZwa3QtPmxpc3QpOwo+ICsJCWtmcmVlKHBrdC0+YnVmX2JlZ2luKTsKPiArCQlrZnJlZShwa3Qp Owo+ICsJfQo+ICsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwa3QsIHRwa3QsICZzaXAt PmZyZWVfY3RybF9yeGJ1ZiwgbGlzdCkgewo+ICsJCWxpc3RfZGVsKCZwa3QtPmxpc3QpOwo+ICsJ CWtmcmVlKHBrdC0+YnVmX2JlZ2luKTsKPiArCQlrZnJlZShwa3QpOwo+ICsJfQo+ICt9Cj4gKwo+ ICt2b2lkIHNpcF9kZXRhY2goc3RydWN0IGVzcF9zaXAgKnNpcCkKPiArewo+ICsJaWYgKCFzaXAp Cj4gKwkJcmV0dXJuOwo+ICsKPiArCXNpcF9mcmVlX2luaXRfY3RybF9idWYoc2lwKTsKPiArCj4g KwlpZiAoYXRvbWljX3JlYWQoJnNpcC0+c3RhdGUpID09IFNJUF9SVU4pIHsKPiArCQlzaWZfZGlz YWJsZV90YXJnZXRfaW50ZXJydXB0KHNpcC0+ZXB1Yik7Cj4gKwo+ICsJCWF0b21pY19zZXQoJnNp cC0+c3RhdGUsIFNJUF9TVE9QKTsKPiArCj4gKwkJLyogZGlzYWJsZSBpcnEgaGVyZSAqLwo+ICsJ CXNpZl9kaXNhYmxlX2lycShzaXAtPmVwdWIpOwo+ICsJCWNhbmNlbF93b3JrX3N5bmMoJnNpcC0+ cnhfcHJvY2Vzc193b3JrKTsKPiArCj4gKwkJc2tiX3F1ZXVlX3B1cmdlKCZzaXAtPnJ4cSk7Cj4g KwkJbXV0ZXhfZGVzdHJveSgmc2lwLT5yeF9tdHgpOwo+ICsJCWNhbmNlbF93b3JrX3N5bmMoJnNp cC0+ZXB1Yi0+c2VuZHVwX3dvcmspOwo+ICsJCXNrYl9xdWV1ZV9wdXJnZSgmc2lwLT5lcHViLT5y eHEpOwo+ICsKPiArCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEVTUF9XTF9GTEFHX0hXX1JFR0lT VEVSRUQsCj4gKwkJCQkgICAgICAgJnNpcC0+ZXB1Yi0+d2wuZmxhZ3MpKQo+ICsJCQlpZWVlODAy MTFfdW5yZWdpc3Rlcl9odyhzaXAtPmVwdWItPmh3KTsKPiArCj4gKwkJLyogY2FuY2VsIGFsbCB3 b3JrZXIvdGltZXIgKi8KPiArCQljYW5jZWxfd29ya19zeW5jKCZzaXAtPmVwdWItPnR4X3dvcmsp Owo+ICsJCXNrYl9xdWV1ZV9wdXJnZSgmc2lwLT5lcHViLT50eHEpOwo+ICsJCXNrYl9xdWV1ZV9w dXJnZSgmc2lwLT5lcHViLT50eGRvbmVxKTsKPiArCj4gKwkJZnJlZV9wYWdlcygodW5zaWduZWQg bG9uZylzaXAtPnR4X2FnZ3JfYnVmLAo+ICsJCQkgICBnZXRfb3JkZXIoU0lQX1RYX0FHR1JfQlVG X1NJWkUpKTsKPiArCQlzaXAtPnR4X2FnZ3JfYnVmID0gTlVMTDsKPiArCj4gKwkJYXRvbWljX3Nl dCgmc2lwLT5zdGF0ZSwgU0lQX0lOSVQpOwo+ICsJfSBlbHNlIGlmIChhdG9taWNfcmVhZCgmc2lw LT5zdGF0ZSkgPj0gU0lQX0JPT1QgJiYKPiArCQkgICBhdG9taWNfcmVhZCgmc2lwLT5zdGF0ZSkg PD0gU0lQX1dBSVRfQk9PVFVQKSB7Cj4gKwkJc2lmX2Rpc2FibGVfdGFyZ2V0X2ludGVycnVwdChz aXAtPmVwdWIpOwo+ICsJCWF0b21pY19zZXQoJnNpcC0+c3RhdGUsIFNJUF9TVE9QKTsKPiArCQlz aWZfZGlzYWJsZV9pcnEoc2lwLT5lcHViKTsKPiArCQlrZnJlZShzaXAtPnJhd2J1Zik7Cj4gKwo+ ICsJCWlmIChhdG9taWNfcmVhZCgmc2lwLT5zdGF0ZSkgPT0gU0lQX1NFTkRfSU5JVCkgewo+ICsJ CQljYW5jZWxfd29ya19zeW5jKCZzaXAtPnJ4X3Byb2Nlc3Nfd29yayk7Cj4gKwkJCXNrYl9xdWV1 ZV9wdXJnZSgmc2lwLT5yeHEpOwo+ICsJCQltdXRleF9kZXN0cm95KCZzaXAtPnJ4X210eCk7Cj4g KwkJCWNhbmNlbF93b3JrX3N5bmMoJnNpcC0+ZXB1Yi0+c2VuZHVwX3dvcmspOwo+ICsJCQlza2Jf cXVldWVfcHVyZ2UoJnNpcC0+ZXB1Yi0+cnhxKTsKPiArCQl9Cj4gKwo+ICsJCWlmICh0ZXN0X2Fu ZF9jbGVhcl9iaXQoRVNQX1dMX0ZMQUdfSFdfUkVHSVNURVJFRCwKPiArCQkJCSAgICAgICAmc2lw LT5lcHViLT53bC5mbGFncykpCj4gKwkJCWllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KHNpcC0+ZXB1 Yi0+aHcpOwo+ICsJCWF0b21pY19zZXQoJnNpcC0+c3RhdGUsIFNJUF9JTklUKTsKPiArCX0gZWxz ZSB7Cj4gKwkJZGV2X2VycihzaXAtPmVwdWItPmRldiwgIndyb25nIHN0YXRlICglZCkgZm9yIGRl dGFjaGluZyBzaXBcbiIsCj4gKwkJCWF0b21pY19yZWFkKCZzaXAtPnN0YXRlKSk7Cj4gKwl9Cj4g Kwo+ICsJa2ZyZWUoc2lwKTsKPiArfQo+ICsKPiAraW50IHNpcF93cml0ZV9tZW1vcnkoc3RydWN0 IGVzcF9zaXAgKnNpcCwgdTMyIGFkZHIsIHU4ICpidWYsIHUxNiBsZW4pCj4gK3sKPiArCXN0cnVj dCBzaXBfY21kX3dyaXRlX21lbW9yeSAqY21kOwo+ICsJc3RydWN0IHNpcF9oZHIgKmNoZHI7Cj4g Kwl1MTYgcmVtYWlucywgaGRycywgYnVmc2l6ZTsKPiArCXUzMiBsb2FkYWRkcjsKPiArCXU4ICpz cmM7Cj4gKwlpbnQgZXJyID0gMDsKCk5vIG5lZWQgdG8gaW5pdGlhbGl6ZSAiZXJyIi4KCj4gKwl1 MzIgKnQ7Cj4gKwo+ICsJaWYgKCFzaXAgfHwgIXNpcC0+cmF3YnVmKSB7Cj4gKwkJRVNTRVJUKHNp cCk7Cj4gKwkJRVNTRVJUKHNpcC0+cmF3YnVmKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0K PiArCj4gKwltZW1zZXQoc2lwLT5yYXdidWYsIDAsIFNJUF9CT09UX0JVRl9TSVpFKTsKPiArCj4g KwljaGRyID0gKHN0cnVjdCBzaXBfaGRyICopc2lwLT5yYXdidWY7Cj4gKwlTSVBfSERSX1NFVF9U WVBFKGNoZHItPmZjWzBdLCBTSVBfQ1RSTCk7Cj4gKwljaGRyLT5jX2NtZGlkID0gU0lQX0NNRF9X UklURV9NRU1PUlk7Cj4gKwo+ICsJcmVtYWlucyA9IGxlbjsKPiArCWhkcnMgPSBzaXplb2Yoc3Ry dWN0IHNpcF9oZHIpICsgc2l6ZW9mKHN0cnVjdCBzaXBfY21kX3dyaXRlX21lbW9yeSk7Cj4gKwo+ ICsJd2hpbGUgKHJlbWFpbnMpIHsKPiArCQlzcmMgPSAmYnVmW2xlbiAtIHJlbWFpbnNdOwo+ICsJ CWxvYWRhZGRyID0gYWRkciArIChsZW4gLSByZW1haW5zKTsKPiArCj4gKwkJaWYgKHJlbWFpbnMg PCAoU0lQX0JPT1RfQlVGX1NJWkUgLSBoZHJzKSkgewo+ICsJCQkvKiBhbGlnbmVkIHdpdGggNCBi eXRlcyAqLwo+ICsJCQlidWZzaXplID0gcm91bmR1cChyZW1haW5zLCA0KTsKPiArCQkJbWVtc2V0 KHNpcC0+cmF3YnVmICsgaGRycywgMCwgYnVmc2l6ZSk7Cj4gKwkJCXJlbWFpbnMgPSAwOwo+ICsJ CX0gZWxzZSB7Cj4gKwkJCWJ1ZnNpemUgPSBTSVBfQk9PVF9CVUZfU0laRSAtIGhkcnM7Cj4gKwkJ CXJlbWFpbnMgLT0gYnVmc2l6ZTsKPiArCQl9Cj4gKwo+ICsJCWNoZHItPmxlbiA9IGJ1ZnNpemUg KyBoZHJzOwo+ICsJCWNoZHItPnNlcSA9IHNpcC0+dHhzZXErKzsKPiArCQljbWQgPSAoc3RydWN0 IHNpcF9jbWRfd3JpdGVfbWVtb3J5ICopKHNpcC0+cmF3YnVmICsgU0lQX0NUUkxfSERSX0xFTik7 Cj4gKwkJY21kLT5sZW4gPSBidWZzaXplOwo+ICsJCWNtZC0+YWRkciA9IGxvYWRhZGRyOwo+ICsJ CW1lbWNweShzaXAtPnJhd2J1ZiArIGhkcnMsIHNyYywgYnVmc2l6ZSk7Cj4gKwo+ICsJCXQgPSAo dTMyICopc2lwLT5yYXdidWY7Cj4gKwkJZXJyID0gZXNwX2NvbW1vbl93cml0ZShzaXAtPmVwdWIs IHNpcC0+cmF3YnVmLCBjaGRyLT5sZW4sCj4gKwkJCQkgICAgICAgRVNQX1NJRl9TWU5DKTsKPiAr CQlpZiAoZXJyKSB7Cj4gKwkJCWRldl9lcnIoc2lwLT5lcHViLT5kZXYsICJzZW5kIGJ1ZmZlciBm YWlsZWRcbiIpOwo+ICsJCQlyZXR1cm4gZXJyOwo+ICsJCX0KPiArCQkvLyAxbXMgaXMgZW5vdWdo LCBpbiBmYWN0IG9uIGRlbGwtZDQzMCwgbmVlZCBub3QgZGVsYXkgYXQgYWxsLgo+ICsJCW1kZWxh eSgxKTsKPiArCX0KPiArCj4gKwlyZXR1cm4gZXJyOwoKcmV0dXJuIDA7Cgo+ICt9Cj4gKwo+ICtp bnQgc2lwX3NlbmRfY21kKHN0cnVjdCBlc3Bfc2lwICpzaXAsIGludCBjaWQsIHUzMiBjbWRsZW4s IHZvaWQgKmNtZCkKPiArewo+ICsJc3RydWN0IHNpcF9oZHIgKmNoZHI7Cj4gKwlzdHJ1Y3Qgc2lw X3BrdCAqcGt0Owo+ICsJaW50IHJldDsKPiArCj4gKwlwa3QgPSBzaXBfZ2V0X2N0cmxfYnVmKHNp cCwgU0lQX1RYX0NUUkxfQlVGKTsKPiArCWlmICghcGt0KQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ ICsKPiArCWNoZHIgPSAoc3RydWN0IHNpcF9oZHIgKilwa3QtPmJ1Zl9iZWdpbjsKPiArCWNoZHIt PmxlbiA9IFNJUF9DVFJMX0hEUl9MRU4gKyBjbWRsZW47Cj4gKwljaGRyLT5zZXEgPSBzaXAtPnR4 c2VxKys7Cj4gKwljaGRyLT5jX2NtZGlkID0gY2lkOwo+ICsKPiArCWlmIChjbWQpIHsKPiArCQlt ZW1zZXQocGt0LT5idWYsIDAsIGNtZGxlbik7CgpObyBuZWVkIGZvciB0aGlzIG1lbXNldCgpIGJl Y2F1c2Ugd2UgbWVtY3B5KCkgb3ZlciBpdCBvbiB0aGUgbmV4dCBsaW5lLgoKPiArCQltZW1jcHko cGt0LT5idWYsICh1OCAqKWNtZCwgY21kbGVuKTsKPiArCX0KPiArCj4gKwlyZXQgPSBlc3BfY29t bW9uX3dyaXRlKHNpcC0+ZXB1YiwgcGt0LT5idWZfYmVnaW4sIGNoZHItPmxlbiwKPiArCQkJICAg ICAgIEVTUF9TSUZfU1lOQyk7Cj4gKwlpZiAocmV0KQo+ICsJCWRldl9lcnIoc2lwLT5lcHViLT5k ZXYsICJzZW5kIGNtZCAlZCBmYWlsZWRcbiIsIGNpZCk7Cj4gKwo+ICsJc2lwX3JlY2xhaW1fY3Ry bF9idWYoc2lwLCBwa3QsIFNJUF9UWF9DVFJMX0JVRik7Cj4gKwo+ICsJLyogIEhhY2sgaGVyZTog cmVzZXQgdHgvcnggc2VxIGJlZm9yZSB0YXJnZXQgcmFtIGNvZGUgaXMgdXAuLi4gKi8KPiArCWlm IChjaWQgPT0gU0lQX0NNRF9CT09UVVApIHsKPiArCQlzaXAtPnJ4c2VxID0gMDsKPiArCQlzaXAt PnR4c2VxID0gMDsKPiArCQlzaXAtPnR4ZGF0YXNlcSA9IDA7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJu IHJldDsKPiArfQo+ICsKPiArc3RydWN0IHNrX2J1ZmYgKnNpcF9hbGxvY19jdHJsX3NrYnVmKHN0 cnVjdCBlc3Bfc2lwICpzaXAsIHUxNiBsZW4sIHUzMiBjaWQpCj4gK3sKPiArCXN0cnVjdCBzaXBf aGRyICpzaTsKPiArCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdGk7Cj4gKwlzdHJ1Y3Qgc2tf YnVmZiAqc2tiOwo+ICsKPiArCUVTU0VSVChsZW4gPD0gc2lwLT50eF9ibGtzeik7Cj4gKwo+ICsJ Lyogbm8gbmVlZCB0byByZXNlcnZlIHNwYWNlIGZvciBuZXQgc3RhY2sgKi8KPiArCXNrYiA9IF9f ZGV2X2FsbG9jX3NrYihsZW4sIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFza2IpIHsKPiArCQlkZXZf ZXJyKHNpcC0+ZXB1Yi0+ZGV2LCAibm8gc2tiIGZvciBjdHJsIVxuIik7Cj4gKwkJcmV0dXJuIE5V TEw7Cj4gKwl9Cj4gKwo+ICsJc2tiLT5sZW4gPSBsZW47Cj4gKwo+ICsJdGkgPSBJRUVFODAyMTFf U0tCX0NCKHNrYik7Cj4gKwkvKiBzZXQgdHhfaW5mbyBmbGFncyB0byAweGZmZmZmZmZmIHRvIGlu ZGljYXRlIHNpcF9jdHJsIHBrdCAqLwo+ICsJdGktPmZsYWdzID0gMHhmZmZmZmZmZjsKPiArCj4g KwlzaSA9IChzdHJ1Y3Qgc2lwX2hkciAqKXNrYi0+ZGF0YTsKPiArCW1lbXNldChzaSwgMCwgc2l6 ZW9mKHN0cnVjdCBzaXBfaGRyKSk7Cj4gKwlTSVBfSERSX1NFVF9UWVBFKHNpLT5mY1swXSwgU0lQ X0NUUkwpOwo+ICsJc2ktPmxlbiA9IGxlbjsKPiArCXNpLT5jX2NtZGlkID0gY2lkOwo+ICsKPiAr CXJldHVybiBza2I7Cj4gK30KPiArCj4gK3ZvaWQgc2lwX2ZyZWVfY3RybF9za2J1ZmYoc3RydWN0 IGVzcF9zaXAgKnNpcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKPiArewo+ICsJbWVtc2V0KElFRUU4 MDIxMV9TS0JfQ0Ioc2tiKSwgMCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbykpOwo+ ICsJa2ZyZWVfc2tiKHNrYik7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3Qgc2lwX3BrdCAqc2lw X2dldF9jdHJsX2J1ZihzdHJ1Y3QgZXNwX3NpcCAqc2lwLAo+ICsJCQkJCWVudW0gc2lwX2J1Zl90 eXBlIGJmdHlwZSkKPiArewo+ICsJc3RydWN0IHNpcF9wa3QgKnBrdDsKPiArCXN0cnVjdCBsaXN0 X2hlYWQgKmJmbGlzdDsKPiArCXN0cnVjdCBzaXBfaGRyICpjaGRyOwo+ICsKPiArCS8qIEZJWE1F OiBXaHkgdGFraW5nIHNwaW5sb2NrIHRvIGNoZWNrIGxpc3RfZW1wdHk/ICovCj4gKwliZmxpc3Qg PSAoYmZ0eXBlID09IFNJUF9UWF9DVFJMX0JVRikgPyAmc2lwLT5mcmVlX2N0cmxfdHhidWYgOiAm c2lwLT5mcmVlX2N0cmxfcnhidWY7Cj4gKwo+ICsJc3Bpbl9sb2NrX2JoKCZzaXAtPmxvY2spOwo+ ICsKPiArCWlmIChsaXN0X2VtcHR5KGJmbGlzdCkpIHsKPiArCQlzcGluX3VubG9ja19iaCgmc2lw LT5sb2NrKTsKPiArCQlyZXR1cm4gTlVMTDsKPiArCX0KPiArCj4gKwlwa3QgPSBsaXN0X2ZpcnN0 X2VudHJ5KGJmbGlzdCwgc3RydWN0IHNpcF9wa3QsIGxpc3QpOwo+ICsJbGlzdF9kZWwoJnBrdC0+ bGlzdCk7Cj4gKwlzcGluX3VubG9ja19iaCgmc2lwLT5sb2NrKTsKPiArCj4gKwlpZiAoYmZ0eXBl ID09IFNJUF9UWF9DVFJMX0JVRikgewo+ICsJCWNoZHIgPSAoc3RydWN0IHNpcF9oZHIgKilwa3Qt PmJ1Zl9iZWdpbjsKPiArCQlTSVBfSERSX1NFVF9UWVBFKGNoZHItPmZjWzBdLCBTSVBfQ1RSTCk7 Cj4gKwkJcGt0LT5idWYgPSBwa3QtPmJ1Zl9iZWdpbiArIFNJUF9DVFJMX0hEUl9MRU47Cj4gKwl9 IGVsc2Ugewo+ICsJCXBrdC0+YnVmID0gcGt0LT5idWZfYmVnaW47Cj4gKwl9Cj4gKwo+ICsJcmV0 dXJuIHBrdDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgc2lwX3JlY2xhaW1fY3RybF9idWYoc3Ry dWN0IGVzcF9zaXAgKnNpcCwgc3RydWN0IHNpcF9wa3QgKnBrdCwKPiArCQkJCSBlbnVtIHNpcF9i dWZfdHlwZSBiZnR5cGUpCj4gK3sKPiArCXN0cnVjdCBsaXN0X2hlYWQgKmJmbGlzdDsKPiArCj4g KwlpZiAoYmZ0eXBlID09IFNJUF9UWF9DVFJMX0JVRikKPiArCQliZmxpc3QgPSAmc2lwLT5mcmVl X2N0cmxfdHhidWY7Cj4gKwllbHNlIGlmIChiZnR5cGUgPT0gU0lQX1JYX0NUUkxfQlVGKQo+ICsJ CWJmbGlzdCA9ICZzaXAtPmZyZWVfY3RybF9yeGJ1ZjsKPiArCWVsc2UKPiArCQlyZXR1cm47Cj4g Kwo+ICsJcGt0LT5idWYgPSBwa3QtPmJ1Zl9iZWdpbjsKPiArCj4gKwlzcGluX2xvY2tfYmgoJnNp cC0+bG9jayk7Cj4gKwlsaXN0X2FkZF90YWlsKCZwa3QtPmxpc3QsIGJmbGlzdCk7Cj4gKwlzcGlu X3VubG9ja19iaCgmc2lwLT5sb2NrKTsKPiArfQo+ICsKPiAraW50IHNpcF9wb2xsX2Jvb3R1cF9l dmVudChzdHJ1Y3QgZXNwX3NpcCAqc2lwKQo+ICt7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwlp ZiAoZ2xfYm9vdHVwX2NwbHgpCj4gKwkJcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0 KGdsX2Jvb3R1cF9jcGx4LCAyICogSFopOwo+ICsKPiArCWlmICghcmV0KSB7Cj4gKwkJZGV2X2Vy cihzaXAtPmVwdWItPmRldiwgImJvb3R1cCBldmVudCB0aW1lb3V0XG4iKTsKPiArCQlyZXR1cm4g LUVUSU1FRE9VVDsKPiArCX0KPiArCj4gKwlpZiAoIXNpZl9nZXRfYXRlX2NvbmZpZygpKQo+ICsJ CXJldCA9IGVzcF9yZWdpc3Rlcl9tYWM4MDIxMShzaXAtPmVwdWIpOwo+ICsKPiArCWF0b21pY19z ZXQoJnNpcC0+c3RhdGUsIFNJUF9SVU4pOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4g Ky8qIEZJWE1FOiBhbHdheXMgcmV0dXJuaW5nIDAgPyAqLwo+ICtpbnQgc2lwX3BvbGxfcmVzZXR0 aW5nX2V2ZW50KHN0cnVjdCBlc3Bfc2lwICpzaXApCj4gK3sKPiArCXVuc2lnbmVkIGludCByZXQ7 Cj4gKwo+ICsJaWYgKGdsX2Jvb3R1cF9jcGx4KQo+ICsJCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRp b25fdGltZW91dChnbF9ib290dXBfY3BseCwgMTAgKiBIWik7Cj4gKwo+ICsJaWYgKCFyZXQpIHsK PiArCQlkZXZfZXJyKHNpcC0+ZXB1Yi0+ZGV2LCAicmVzZXR0aW5nIGV2ZW50IHRpbWVvdXRcbiIp Owo+ICsJCXJldHVybiAtRVRJTUVET1VUOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4g Kwo+ICtib29sIHNpcF9xdWV1ZV9uZWVkX3N0b3Aoc3RydWN0IGVzcF9zaXAgKnNpcCkKPiArewo+ ICsJcmV0dXJuIGF0b21pY19yZWFkKCZzaXAtPnR4X2RhdGFfcGt0X3F1ZXVlZCkgPj0gU0lQX1NU T1BfUVVFVUVfVEhSRVNIT0xEIHx8Cj4gKwkJKGF0b21pY19yZWFkKCZzaXAtPnR4X2NyZWRpdHMp IDwgOCAmJgo+ICsJCSBhdG9taWNfcmVhZCgmc2lwLT50eF9kYXRhX3BrdF9xdWV1ZWQpID49IFNJ UF9TVE9QX1FVRVVFX1RIUkVTSE9MRCAvIDQgKiAzKTsKPiArfQo+ICsKPiArYm9vbCBzaXBfcXVl dWVfbWF5X3Jlc3VtZShzdHJ1Y3QgZXNwX3NpcCAqc2lwKQo+ICt7Cj4gKwlyZXR1cm4gYXRvbWlj X3JlYWQoJnNpcC0+ZXB1Yi0+dHhxX3N0b3BwZWQpICYmCj4gKwkJIXRlc3RfYml0KEVTUF9XTF9G TEFHX1NUT1BfVFhRLCAmc2lwLT5lcHViLT53bC5mbGFncykgJiYKPiArCQkoKGF0b21pY19yZWFk KCZzaXAtPnR4X2NyZWRpdHMpID49IDE2ICYmCj4gKwkJICBhdG9taWNfcmVhZCgmc2lwLT50eF9k YXRhX3BrdF9xdWV1ZWQpIDwgU0lQX1JFU1VNRV9RVUVVRV9USFJFU0hPTEQgKiAyKSB8fAo+ICsJ CSBhdG9taWNfcmVhZCgmc2lwLT50eF9kYXRhX3BrdF9xdWV1ZWQpIDwgU0lQX1JFU1VNRV9RVUVV RV9USFJFU0hPTEQpOwo+ICt9Cj4gKwo+ICtpbnQgc2lwX2NtZF9lbnF1ZXVlKHN0cnVjdCBlc3Bf c2lwICpzaXAsIHN0cnVjdCBza19idWZmICpza2IsIGludCBwcmlvcikKPiArewo+ICsJaWYgKCFz aXAgfHwgIXNpcC0+ZXB1YiB8fCAhc2tiKSB7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4g Kwo+ICsJaWYgKHByaW9yID09IEVOUVVFVUVfUFJJT1JfSEVBRCkKPiArCQlza2JfcXVldWVfaGVh ZCgmc2lwLT5lcHViLT50eHEsIHNrYik7Cj4gKwllbHNlCj4gKwkJc2tiX3F1ZXVlX3RhaWwoJnNp cC0+ZXB1Yi0+dHhxLCBza2IpOwo+ICsKPiArCWlmICghc2lmX2dldF9hdGVfY29uZmlnKCkpCj4g KwkJaWVlZTgwMjExX3F1ZXVlX3dvcmsoc2lwLT5lcHViLT5odywgJnNpcC0+ZXB1Yi0+dHhfd29y ayk7Cj4gKwllbHNlCj4gKwkJcXVldWVfd29yayhzaXAtPmVwdWItPmVzcF93a3EsICZzaXAtPmVw dWItPnR4X3dvcmspOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICt2b2lkIHNpcF90eF9k YXRhX3BrdF9lbnF1ZXVlKHN0cnVjdCBlc3BfcHViICplcHViLCBzdHJ1Y3Qgc2tfYnVmZiAqc2ti KQo+ICt7Cj4gKwlpZiAoIWVwdWIgfHwgIWVwdWItPnNpcCB8fCAhc2tiKQo+ICsJCXJldHVybjsK PiArCj4gKwlza2JfcXVldWVfdGFpbCgmZXB1Yi0+dHhxLCBza2IpOwo+ICsJYXRvbWljX2luYygm ZXB1Yi0+c2lwLT50eF9kYXRhX3BrdF9xdWV1ZWQpOwo+ICsKPiArCWlmIChzaXBfcXVldWVfbmVl ZF9zdG9wKGVwdWItPnNpcCkpCj4gKwkJaWYgKGVwdWItPmh3KSB7Cj4gKwkJCWllZWU4MDIxMV9z dG9wX3F1ZXVlcyhlcHViLT5odyk7Cj4gKwkJCWF0b21pY19zZXQoJmVwdWItPnR4cV9zdG9wcGVk LCB0cnVlKTsKPiArCQl9CgpNdWx0aS1saW5lIGluZGVudHMgZ2V0IGN1cmx5IGJyYWNlcyBmb3Ig cmVhZGFiaWxpdHkuCgo+ICt9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lc3A4MDg5 L2VzcF9zaXAuaCBiL2RyaXZlcnMvc3RhZ2luZy9lc3A4MDg5L2VzcF9zaXAuaAo+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5mZTU4YWFlNGJhNTQKPiAtLS0gL2Rl di9udWxsCj4gKysrIGIvZHJpdmVycy9zdGFnaW5nL2VzcDgwODkvZXNwX3NpcC5oCj4gQEAgLTAs MCArMSwxNTAgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IChjKSAyMDA5IC0gMjAxNCBFc3ByZXNz aWYgU3lzdGVtLgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTcgRnJlZSBFbGVjdHJvbnMKPiArICog ICAgICBRdWVudGluIFNjaHVseiA8cXVlbnRpbi5zY2h1bHpAZnJlZS1lbGVjdHJvbnMuY29tPgo+ ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgo+ICsgKiB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlCj4g KyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPiArICoKPiArICovCj4gKwo+ICsjaWZuZGVm IF9FU1BfU0lQX0gKPiArI2RlZmluZSBfRVNQX1NJUF9ICj4gKwo+ICsjaW5jbHVkZSAic2lwMl9j b21tb24uaCIKPiArCj4gKyNkZWZpbmUgU0lQX0NUUkxfQ1JFRElUX1JFU0VSVkUJCTIKPiArCj4g KyNkZWZpbmUgU0lQX1BLVF9NQVhfTEVOCQkJKDEwMjQgKiAxNikKPiArCj4gKy8qIDE2S0Igb24g bm9ybWFsIFg4NiBzeXN0ZW0sIHNob3VsZCBjaGVjayBiZWZvcmUgcG9ydGluZyB0byBvcmh0ZXJz ICovCj4gKwo+ICsjZGVmaW5lIFNJUF9UWF9BR0dSX0JVRl9TSVpFCQkoNCAqIFBBR0VfU0laRSkK PiArI2RlZmluZSBTSVBfUlhfQUdHUl9CVUZfU0laRQkJKDQgKiBQQUdFX1NJWkUpCj4gKwo+ICtz dHJ1Y3Qgc2tfYnVmZjsKPiArCj4gK3N0cnVjdCBzaXBfcGt0IHsKPiArCXN0cnVjdCBsaXN0X2hl YWQgbGlzdDsKPiArCXU4ICpidWZfYmVnaW47Cj4gKwl1MzIgYnVmX2xlbjsKPiArCXU4ICpidWY7 Cj4gK307Cj4gKwo+ICtlbnVtIFJFQ0FMQ19DUkVESVRfU1RBVEUgewo+ICsJUkVDQUxDX0NSRURJ VF9ESVNBQkxFID0gMCwKPiArCVJFQ0FMQ19DUkVESVRfRU5BQkxFID0gMSwKPiArfTsKPiArCj4g K2VudW0gRU5RVUVVRV9QUklPUiB7Cj4gKwlFTlFVRVVFX1BSSU9SX1RBSUwgPSAwLAo+ICsJRU5R VUVVRV9QUklPUl9IRUFELAo+ICt9Owo+ICsKPiArZW51bSBTSVBfU1RBVEUgewo+ICsJU0lQX0lO SVQgPSAwLAo+ICsJU0lQX1BSRVBBUkVfQk9PVCwKPiArCVNJUF9CT09ULAo+ICsJU0lQX1NFTkRf SU5JVCwKPiArCVNJUF9XQUlUX0JPT1RVUCwKPiArCVNJUF9SVU4sCj4gKwlTSVBfU1VTUEVORCwK PiArCVNJUF9TVE9QCj4gK307Cj4gKwo+ICtlbnVtIHNpcF9ub3RpZmllciB7Cj4gKwlTSVBfVFhf RE9ORSA9IDEsCj4gKwlTSVBfUlhfRE9ORSA9IDIsCj4gK307Cj4gKwo+ICsjZGVmaW5lIFNJUF9D UkVESVRTX0xPV19USFJFU0hPTEQgIDY0CS8vaS5lLiA0awo+ICsKPiArc3RydWN0IGVzcF9zaXAg ewo+ICsJc3RydWN0IGxpc3RfaGVhZCBmcmVlX2N0cmxfdHhidWY7Cj4gKwlzdHJ1Y3QgbGlzdF9o ZWFkIGZyZWVfY3RybF9yeGJ1ZjsKPiArCj4gKwl1MzIgcnhzZXE7CQkvKiBzaXAgcGt0IHNlcSwg c2hvdWxkIG1hdGNoIHRhcmdldCBzaWRlICovCj4gKwl1MzIgdHhzZXE7Cj4gKwl1MzIgdHhkYXRh c2VxOwo+ICsKPiArCXU4IHRvX2hvc3Rfc2VxOwo+ICsKPiArCWF0b21pY190IHN0YXRlOwo+ICsJ c3BpbmxvY2tfdCBsb2NrOwo+ICsJYXRvbWljX3QgdHhfY3JlZGl0czsKPiArCj4gKwlhdG9taWNf dCB0eF9hc2tfY3JlZGl0X3VwZGF0ZTsKPiArCj4gKwl1OCAqcmF3YnVmOwkJLyogdXNlZCBpbiBi b290IHN0YWdlLCBmcmVlIG9uY2UgY2hpcCBpcyBmdWxseSB1cCAqLwo+ICsJdTggKnR4X2FnZ3Jf YnVmOwo+ICsJdTggKnR4X2FnZ3Jfd3JpdGVfcHRyOwkvKiB1cGRhdGUgYWZ0ZXIgaW5zZXJ0aW9u IG9mIGVhY2ggcGt0ICovCj4gKwl1OCAqdHhfYWdncl9sYXN0cGt0X3B0cjsKPiArCj4gKwlzdHJ1 Y3QgbXV0ZXggcnhfbXR4Owo+ICsJc3RydWN0IHNrX2J1ZmZfaGVhZCByeHE7Cj4gKwlzdHJ1Y3Qg d29ya19zdHJ1Y3QgcnhfcHJvY2Vzc193b3JrOwo+ICsKPiArCXUxNiB0eF9ibGtzejsKPiArCXUx NiByeF9ibGtzejsKPiArCj4gKwlib29sIGR1bXBfcnBibV9lcnI7Cj4gKwlib29sIHNlbmR1cF9y cGJtX3BrdDsKPiArCWJvb2wgcnhhYm9ydF9maXhlZDsKPiArCWJvb2wgc3VwcG9ydF9iZ3NjYW47 Cj4gKwl1OCBjcmVkaXRfdG9fcmVzZXJ2ZTsKPiArCj4gKwlhdG9taWNfdCBjcmVkaXRfc3RhdHVz Owo+ICsJc3RydWN0IHRpbWVyX2xpc3QgY3JlZGl0X3RpbWVyOwo+ICsKPiArCWF0b21pY190IG5v aXNlX2Zsb29yOwo+ICsKPiArCXUzMiB0eF90b3RfbGVuOwkJLyogdG90YWwgbGVuIGZvciBvbmUg dHJhbnNhY3Rpb24gKi8KPiArCXUzMiByeF90b3RfbGVuOwo+ICsKPiArCWF0b21pY190IHJ4X2hh bmRsaW5nOwo+ICsJYXRvbWljX3QgdHhfZGF0YV9wa3RfcXVldWVkOwo+ICsKPiArCWF0b21pY190 IGRhdGFfdHhfc3RvcHBlZDsKPiArCWF0b21pY190IHR4X3N0b3BwZWQ7Cj4gKwo+ICsJc3RydWN0 IGVzcF9wdWIgKmVwdWI7Cj4gK307Cj4gKwo+ICtpbnQgc2lwX3J4KHN0cnVjdCBlc3BfcHViICpl cHViKTsKPiArCj4gK2ludCBzaXBfd3JpdGVfbWVtb3J5KHN0cnVjdCBlc3Bfc2lwICpzaXAsIHUz MiBhZGRyLCB1OCAqYnVmLCB1MTYgbGVuKTsKPiArCj4gK2ludCBzaXBfc2VuZF9jbWQoc3RydWN0 IGVzcF9zaXAgKnNpcCwgaW50IGNpZCwgdTMyIGNtZGxlbiwgdm9pZCAqY21kKTsKPiArCj4gK3N0 cnVjdCBlc3Bfc2lwICpzaXBfYXR0YWNoKHN0cnVjdCBlc3BfcHViICplcHViKTsKPiArCj4gK2lu dCBzaXBfcG9zdF9pbml0KHN0cnVjdCBlc3Bfc2lwICpzaXAsIHN0cnVjdCBzaXBfZXZ0X2Jvb3R1 cDIgKmJldnQpOwo+ICsKPiArdm9pZCBzaXBfZGV0YWNoKHN0cnVjdCBlc3Bfc2lwICpzaXApOwo+ ICsKPiArdm9pZCBzaXBfdHhxX3Byb2Nlc3Moc3RydWN0IGVzcF9wdWIgKmVwdWIpOwo+ICsKPiAr c3RydWN0IHNrX2J1ZmYgKnNpcF9hbGxvY19jdHJsX3NrYnVmKHN0cnVjdCBlc3Bfc2lwICpzaXAs IHUxNiBsZW4sIHUzMiBjaWQpOwo+ICsKPiArdm9pZCBzaXBfZnJlZV9jdHJsX3NrYnVmZihzdHJ1 Y3QgZXNwX3NpcCAqc2lwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKPiArCj4gK2Jvb2wgc2lwX3F1 ZXVlX25lZWRfc3RvcChzdHJ1Y3QgZXNwX3NpcCAqc2lwKTsKPiArYm9vbCBzaXBfcXVldWVfbWF5 X3Jlc3VtZShzdHJ1Y3QgZXNwX3NpcCAqc2lwKTsKPiArCj4gK3ZvaWQgc2lwX3R4X2RhdGFfcGt0 X2VucXVldWUoc3RydWN0IGVzcF9wdWIgKmVwdWIsIHN0cnVjdCBza19idWZmICpza2IpOwo+ICsK PiAraW50IHNpcF9jbWRfZW5xdWV1ZShzdHJ1Y3QgZXNwX3NpcCAqc2lwLCBzdHJ1Y3Qgc2tfYnVm ZiAqc2tiLCBpbnQgcHJpb3IpOwo+ICsKPiAraW50IHNpcF9wb2xsX2Jvb3R1cF9ldmVudChzdHJ1 Y3QgZXNwX3NpcCAqc2lwKTsKPiArCj4gK2ludCBzaXBfcG9sbF9yZXNldHRpbmdfZXZlbnQoc3Ry dWN0IGVzcF9zaXAgKnNpcCk7Cj4gKwo+ICt2b2lkIHNpcF90cmlnZ2VyX3R4cV9wcm9jZXNzKHN0 cnVjdCBlc3Bfc2lwICpzaXApOwo+ICsKPiArdm9pZCBzaXBfc2VuZF9jaGlwX2luaXQoc3RydWN0 IGVzcF9zaXAgKnNpcCk7Cj4gKwo+ICtib29sIG1vZF9zdXBwb3J0X25vX3R4YW1wZHUodm9pZCk7 Cj4gKwo+ICtib29sIG1vZF9zdXBwb3J0X25vX3J4YW1wZHUodm9pZCk7Cj4gKyNlbmRpZgo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXNwODA4OS9lc3BfdXRpbHMuYyBiL2RyaXZlcnMv c3RhZ2luZy9lc3A4MDg5L2VzcF91dGlscy5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRl eCAwMDAwMDAwMDAwMDAuLmIzNTQyOGQ3MGM5MQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2 ZXJzL3N0YWdpbmcvZXNwODA4OS9lc3BfdXRpbHMuYwo+IEBAIC0wLDAgKzEsMTMzIEBACj4gKy8q Cj4gKyAqIENvcHlyaWdodCAoYykgMjAwOSAtIDIwMTQgRXNwcmVzc2lmIFN5c3RlbS4KPiArICog Q29weXJpZ2h0IChjKSAyMDE3IEZyZWUgRWxlY3Ryb25zCj4gKyAqICAgICAgUXVlbnRpbiBTY2h1 bHogPHF1ZW50aW4uc2NodWx6QGZyZWUtZWxlY3Ryb25zLmNvbT4KPiArICoKPiArICogVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkgaXQgdW5kZXIKPiArICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZQo+ICsgKiBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24uCj4gKyAqCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgImxpbnV4L3R5cGVzLmgi Cj4gKyNpbmNsdWRlICJsaW51eC9rZXJuZWwuaCIKPiArI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIx MS5oPgo+ICsjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9za2J1 ZmYuaD4KPiArCj4gKyNpbmNsdWRlIDxuZXQvdGNwLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pcC5o Pgo+ICsjaW5jbHVkZSA8YXNtL2NoZWNrc3VtLmg+Cj4gKwo+ICsjaW5jbHVkZSAiZXNwX3B1Yi5o Igo+ICsjaW5jbHVkZSAiZXNwX3V0aWxzLmgiCj4gKyNpbmNsdWRlICJlc3Bfd21hYy5oIgo+ICsj aW5jbHVkZSAiZXNwX2RlYnVnLmgiCj4gKwo+ICsvKiBDb252ZXJ0IElFRUUgY2hhbm5lbCBudW1i ZXIgdG8gTUh6IGZyZXF1ZW5jeS4gKi8KPiArdTMyIGVzcF9pZWVlMm1oeih1OCBjaGFuKQo+ICt7 Cj4gKwlpZiAoY2hhbiA9PSAxNCkKPiArCQlyZXR1cm4gMjQ4NDsKPiArCj4gKwlpZiAoY2hhbiA8 IDE0KQo+ICsJCXJldHVybiAyNDA3ICsgY2hhbiAqIDU7Cj4gKwo+ICsJcmV0dXJuIDI1MTIgKyAo KGNoYW4gLSAxNSkgKiAyMCk7Cj4gKwkvL1RPRE8sIGFkZCA1R0h6Cj4gK30KPiArCj4gK2VudW0g ewo+ICsJRVNQX1JBVEVfMV9MT05HID0gMHgwLAo+ICsJRVNQX1JBVEVfMl9MT05HID0gMHgxLAo+ ICsJRVNQX1JBVEVfMl9TSE9SVCA9IDB4NSwKPiArCUVTUF9SQVRFXzVfU0hPUlQgPSAweDYsCj4g KwlFU1BfUkFURV81X0xPTkcgPSAweDIsCj4gKwlFU1BfUkFURV8xMV9TSE9SVCA9IDB4NywKPiAr CUVTUF9SQVRFXzExX0xPTkcgPSAweDMsCj4gKwlFU1BfUkFURV82ID0gMHhiLAo+ICsJRVNQX1JB VEVfOSA9IDB4ZiwKPiArCUVTUF9SQVRFXzEyID0gMHhhLAo+ICsJRVNQX1JBVEVfMTggPSAweGUs Cj4gKwlFU1BfUkFURV8yNCA9IDB4OSwKPiArCUVTUF9SQVRFXzM2ID0gMHhkLAo+ICsJRVNQX1JB VEVfNDggPSAweDgsCj4gKwlFU1BfUkFURV81NCA9IDB4YywKPiArCS8qICAgICAgICBFU1BfUkFU RV9NQ1MwID0weDEwLAo+ICsJICoJICBFU1BfUkFURV9NQ1MxID0weDExLAo+ICsJICoJICBFU1Bf UkFURV9NQ1MyID0weDEyLAo+ICsJICoJICBFU1BfUkFURV9NQ1MzID0weDEzLAo+ICsJICoJICBF U1BfUkFURV9NQ1M0ID0weDE0LAo+ICsJICoJICBFU1BfUkFURV9NQ1M1ID0weDE1LAo+ICsJICoJ ICBFU1BfUkFURV9NQ1M2ID0weDE2LAo+ICsJICoJICBFU1BfUkFURV9NQ1M3ID0weDE3LAo+ICsJ ICovCj4gK307Cj4gKwo+ICtzdGF0aWMgdTggZXNwX3JhdGVfdGFibGVbMjBdID0gewo+ICsJRVNQ X1JBVEVfMV9MT05HLAo+ICsJRVNQX1JBVEVfMl9TSE9SVCwKPiArCUVTUF9SQVRFXzVfU0hPUlQs Cj4gKwlFU1BfUkFURV8xMV9TSE9SVCwKPiArCUVTUF9SQVRFXzYsCj4gKwlFU1BfUkFURV85LAo+ ICsJRVNQX1JBVEVfMTIsCj4gKwlFU1BfUkFURV8xOCwKPiArCUVTUF9SQVRFXzI0LAo+ICsJRVNQ X1JBVEVfMzYsCj4gKwlFU1BfUkFURV80OCwKPiArCUVTUF9SQVRFXzU0LAo+ICsJLyogICAgICBF U1BfUkFURV9NQ1MwLAo+ICsJICogCUVTUF9SQVRFX01DUzEsCj4gKwkgKglFU1BfUkFURV9NQ1My LAo+ICsJICoJRVNQX1JBVEVfTUNTMywKPiArCSAqCUVTUF9SQVRFX01DUzQsCj4gKwkgKglFU1Bf UkFURV9NQ1M1LAo+ICsJICoJRVNQX1JBVEVfTUNTNiwKPiArCSAqCUVTUF9SQVRFX01DUzcsCj4g KwkgKi8KPiArfTsKPiArCj4gK3M4IGVzcF93bWFjX3JhdGUyaWR4KHU4IHJhdGUpCgpKdXN0IG1h a2UgaXQgcmV0dXJuIGludCBvciBtYXliZSB1OC4KCj4gK3sKPiArCWludCBpOwo+ICsKPiArCWlm IChyYXRlID09IEVTUF9SQVRFXzJfTE9ORykKPiArCQlyZXR1cm4gMTsKPiArCj4gKwlpZiAocmF0 ZSA9PSBFU1BfUkFURV81X0xPTkcpCj4gKwkJcmV0dXJuIDI7Cj4gKwo+ICsJaWYgKHJhdGUgPT0g RVNQX1JBVEVfMTFfTE9ORykKPiArCQlyZXR1cm4gMzsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwg MjA7IGkrKykKPiArCQlpZiAocmF0ZSA9PSBlc3BfcmF0ZV90YWJsZVtpXSkKPiArCQkJcmV0dXJu IGk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK2Jvb2wgZXNwX3dtYWNfcnhzZWNfZXJy b3IodTggZXJyb3IpCj4gK3sKPiArCXJldHVybiAoZXJyb3IgPj0gUlhfU0VDT1ZfRVJSICYmIGVy cm9yIDw9IFJYX1NFQ0ZJRk9fVElNRU9VVCkgfHwKPiArCQkoZXJyb3IgPj0gUlhfV0VQSUNWX0VS UiAmJiBlcnJvciA8PSBSWF9XQVBJTUlDX0VSUik7Cj4gK30KPiArCj4gK2ludCBlc3BfY2lwaGVy MmFsZyhpbnQgY2lwaGVyKQo+ICt7Cj4gKwlpZiAoY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRF X1RLSVApCj4gKwkJcmV0dXJuIEFMR19US0lQOwo+ICsKPiArCWlmIChjaXBoZXIgPT0gV0xBTl9D SVBIRVJfU1VJVEVfQ0NNUCkKPiArCQlyZXR1cm4gQUxHX0NDTVA7Cj4gKwo+ICsJaWYgKGNpcGhl ciA9PSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MCB8fAo+ICsJICAgIGNpcGhlciA9PSBXTEFOX0NJ UEhFUl9TVUlURV9XRVAxMDQpCj4gKwkJcmV0dXJuIEFMR19XRVA7Cj4gKwo+ICsJaWYgKGNpcGhl ciA9PSBXTEFOX0NJUEhFUl9TVUlURV9BRVNfQ01BQykKPiArCQlyZXR1cm4gQUxHX0FFU19DTUFD Owo+ICsKPiArCXJldHVybiAtMTsKPiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcv ZXNwODA4OS9lc3BfdXRpbHMuaCBiL2RyaXZlcnMvc3RhZ2luZy9lc3A4MDg5L2VzcF91dGlscy5o Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjNhNGQ0NjFhNGU3 MAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL3N0YWdpbmcvZXNwODA4OS9lc3BfdXRp bHMuaAo+IEBAIC0wLDAgKzEsMjcgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IChjKSAyMDExIC0g MjAxMiBFc3ByZXNzaWYgU3lzdGVtLgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTcgRnJlZSBFbGVj dHJvbnMKPiArICogICAgICBRdWVudGluIFNjaHVseiA8cXVlbnRpbi5zY2h1bHpAZnJlZS1lbGVj dHJvbnMuY29tPgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgo+ICsgKiB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNo ZWQgYnkgdGhlCj4gKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPiArICoKPiArICovCj4g Kwo+ICsjaWZuZGVmIF9FU1BfVVRJTFNfSF8KPiArI2RlZmluZSBfRVNQX1VUSUxTX0hfCj4gKwo+ ICsjaW5jbHVkZSAibGludXgvdHlwZXMuaCIKPiArCj4gK3UzMiBlc3BfaWVlZTJtaHoodTggY2hh bik7Cj4gKwo+ICtlbnVtIGllZWU4MDIxMV9rZXlfYWxnIHsKPiArCUFMR19XRVAsCj4gKwlBTEdf VEtJUCwKPiArCUFMR19DQ01QLAo+ICsJQUxHX0FFU19DTUFDCj4gK307Cj4gKwo+ICtpbnQgZXNw X2NpcGhlcjJhbGcoaW50IGNpcGhlcik7Cj4gKyNlbmRpZgo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L3N0YWdpbmcvZXNwODA4OS9lc3Bfd2wuaCBiL2RyaXZlcnMvc3RhZ2luZy9lc3A4MDg5L2VzcF93 bC5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjllYjFmNjQy MTk0Nwo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL3N0YWdpbmcvZXNwODA4OS9lc3Bf d2wuaAo+IEBAIC0wLDAgKzEsMzUgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IChjKSAyMDA5IC0g MjAxNCBFc3ByZXNzaWYgU3lzdGVtLgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTcgRnJlZSBFbGVj dHJvbnMKPiArICogICAgICBRdWVudGluIFNjaHVseiA8cXVlbnRpbi5zY2h1bHpAZnJlZS1lbGVj dHJvbnMuY29tPgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgo+ICsgKiB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNo ZWQgYnkgdGhlCj4gKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPiArICoKPiArICovCj4g Kwo+ICsjaWZuZGVmIF9FU1BfV0xfSF8KPiArI2RlZmluZSBfRVNQX1dMX0hfCj4gKwo+ICsvLyNk ZWZpbmUgTUFYX1BST0JFRF9TU0lEX0lOREVYIDkKPiArCj4gK2VudW0gewo+ICsJQ09ORl9IV19C SVRfUkFURV8xTUJQUyA9IEJJVCgwKSwKPiArCUNPTkZfSFdfQklUX1JBVEVfMk1CUFMgPSBCSVQo MSksCj4gKwlDT05GX0hXX0JJVF9SQVRFXzVfNU1CUFMgPSBCSVQoMiksCj4gKwlDT05GX0hXX0JJ VF9SQVRFXzExTUJQUyA9IEJJVCgzKSwKPiArCUNPTkZfSFdfQklUX1JBVEVfNk1CUFMgPSBCSVQo NCksCj4gKwlDT05GX0hXX0JJVF9SQVRFXzlNQlBTID0gQklUKDUpLAo+ICsJQ09ORl9IV19CSVRf UkFURV8xMk1CUFMgPSBCSVQoNiksCj4gKwlDT05GX0hXX0JJVF9SQVRFXzE4TUJQUyA9IEJJVCg3 KSwKPiArCUNPTkZfSFdfQklUX1JBVEVfMjJNQlBTID0gQklUKDgpLAo+ICsJQ09ORl9IV19CSVRf UkFURV8yNE1CUFMgPSBCSVQoOSksCj4gKwlDT05GX0hXX0JJVF9SQVRFXzM2TUJQUyA9IEJJVCgx MCksCj4gKwlDT05GX0hXX0JJVF9SQVRFXzQ4TUJQUyA9IEJJVCgxMSksCj4gKwlDT05GX0hXX0JJ VF9SQVRFXzU0TUJQUyA9IEJJVCgxMiksCj4gK307Cj4gKwo+ICsjZGVmaW5lIENPTkZfSFdfQklU X1JBVEVfMTFCX01BU0sJKENPTkZfSFdfQklUX1JBVEVfMU1CUFMgfCBDT05GX0hXX0JJVF9SQVRF XzJNQlBTIHwgQ09ORl9IV19CSVRfUkFURV81XzVNQlBTIHwgQ09ORl9IV19CSVRfUkFURV8xMU1C UFMpCj4gKwo+ICsjZW5kaWYJCQkJLyogX0VTUF9XTF9IXyAqLwo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL3N0YWdpbmcvZXNwODA4OS9lc3Bfd21hYy5oIGIvZHJpdmVycy9zdGFnaW5nL2VzcDgwODkv ZXNwX3dtYWMuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi42 N2VhOGUxNDdjNDMKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9zdGFnaW5nL2VzcDgw ODkvZXNwX3dtYWMuaAo+IEBAIC0wLDAgKzEsODcgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IChj KSAyMDExIC0gMjAxMiBFc3ByZXNzaWYgU3lzdGVtLgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTcg RnJlZSBFbGVjdHJvbnMKPiArICogICAgICBRdWVudGluIFNjaHVseiA8cXVlbnRpbi5zY2h1bHpA ZnJlZS1lbGVjdHJvbnMuY29tPgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgo+ICsg KiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBh cyBwdWJsaXNoZWQgYnkgdGhlCj4gKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPiArICoK PiArICovCj4gKwo+ICsjaWZuZGVmIF9FU1BfV01BQ19IXwo+ICsjZGVmaW5lIF9FU1BfV01BQ19I Xwo+ICsKPiArc3RydWN0IGVzcF9tYWNfcnhfY3RybCB7Cj4gKwlzaWduZWQgcnNzaTo4Owo+ICsJ dW5zaWduZWQgcmF0ZTo0Owo+ICsJdW5zaWduZWQgaXNfZ3JvdXA6MTsKPiArCXVuc2lnbmVkOjE7 Cj4gKwl1bnNpZ25lZCBzaWdfbW9kZToyOwo+ICsJdW5zaWduZWQgbGVnYWN5X2xlbmd0aDoxMjsK PiArCXVuc2lnbmVkIGRhbWF0Y2gwOjE7Cj4gKwl1bnNpZ25lZCBkYW1hdGNoMToxOwo+ICsJdW5z aWduZWQgYnNzaWRtYXRjaDA6MTsKPiArCXVuc2lnbmVkIGJzc2lkbWF0Y2gxOjE7Cj4gKwl1bnNp Z25lZCBNQ1M6NzsKPiArCXVuc2lnbmVkIENXQjoxOwo+ICsJdW5zaWduZWQgSFRfbGVuZ3RoOjE2 Owo+ICsJdW5zaWduZWQgc21vb3RoaW5nOjE7Cj4gKwl1bnNpZ25lZCBub3Rfc291bmRpbmc6MTsK PiArCXVuc2lnbmVkOjE7Cj4gKwl1bnNpZ25lZCBhZ2dyZWdhdGlvbjoxOwo+ICsJdW5zaWduZWQg U1RCQzoyOwo+ICsJdW5zaWduZWQgRkVDX0NPRElORzoxOwo+ICsJdW5zaWduZWQgU0dJOjE7Cj4g Kwl1bnNpZ25lZCByeGVuZF9zdGF0ZTo4Owo+ICsJdW5zaWduZWQgYW1wZHVfY250Ojg7Cj4gKwl1 bnNpZ25lZCBjaGFubmVsOjQ7Cj4gKwl1bnNpZ25lZDo0Owo+ICsJc2lnbmVkIG5vaXNlX2Zsb29y Ojg7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgZXNwX3J4X2FtcGR1X2xlbiB7Cj4gKwl1bnNpZ25lZCBz dWJzdGF0ZTo4Owo+ICsJdW5zaWduZWQgc3VibGVuOjEyOwo+ICsJdW5zaWduZWQ6MTI7Cj4gK307 Cj4gKwo+ICtzdHJ1Y3QgZXNwX3R4X2FtcGR1X2VudHJ5IHsKPiArCXUzMiBzdWJfbGVuOjEyLCBk aWxpX251bTo3LCA6MSwgbnVsbF9ieXRlOjIsIGRhdGE6MSwgZW5jOjEsIHNlcTo4Owo+ICt9Owo+ ICsKPiArLy9yeGVuZF9zdGF0ZSBmbGFncwo+ICsjZGVmaW5lIFJYX1BZSF9FUlJfTUlOCQkweDQy Cj4gKyNkZWZpbmUgUlhfQUdDX0VSUl9NSU4JCTB4NDIKPiArI2RlZmluZSBSWF9BR0NfRVJSX01B WAkJMHg0Nwo+ICsjZGVmaW5lIFJYX09GRE1fRVJSX01JTgkJMHg1MAo+ICsjZGVmaW5lIFJYX09G RE1fRVJSX01BWAkJMHg1OAo+ICsjZGVmaW5lIFJYX0NDS19FUlJfTUlOCQkweDU5Cj4gKyNkZWZp bmUgUlhfQ0NLX0VSUl9NQVgJCTB4NUYKPiArI2RlZmluZSBSWF9BQk9SVAkJMHg4MAo+ICsjZGVm aW5lIFJYX1NGX0VSUgkJMHg0MAo+ICsjZGVmaW5lIFJYX0ZDU19FUlIJCTB4NDEKPiArI2RlZmlu ZSBSWF9BSEJPVl9FUlIJCTB4QzAKPiArI2RlZmluZSBSWF9CVUZPVl9FUlIJCTB4QzEKPiArI2Rl ZmluZSBSWF9CVUZJTlZfRVJSCQkweEMyCj4gKyNkZWZpbmUgUlhfQU1QRFVTRl9FUlIJCTB4QzMK PiArI2RlZmluZSBSWF9BTVBEVUJVRk9WX0VSUgkweEM0Cj4gKyNkZWZpbmUgUlhfTUFDQkJGSUZP T1ZfRVJSCTB4QzUKPiArI2RlZmluZSBSWF9SUEJNX0VSUgkJMHhDNgo+ICsjZGVmaW5lIFJYX0JU Rk9SQ0VfRVJSCQkweEM3Cj4gKyNkZWZpbmUgUlhfU0VDT1ZfRVJSCQkweEUxCj4gKyNkZWZpbmUg UlhfU0VDUFJPVF9FUlIwCQkweEUyCj4gKyNkZWZpbmUgUlhfU0VDUFJPVF9FUlIxCQkweEUzCj4g KyNkZWZpbmUgUlhfU0VDS0VZX0VSUgkJMHhFNAo+ICsjZGVmaW5lIFJYX1NFQ0NSTEVOX0VSUgkJ MHhFNQo+ICsjZGVmaW5lIFJYX1NFQ0ZJRk9fVElNRU9VVAkweEU2Cj4gKyNkZWZpbmUgUlhfV0VQ SUNWX0VSUgkJMHhGMAo+ICsjZGVmaW5lIFJYX1RLSVBJQ1ZfRVJSCQkweEY0Cj4gKyNkZWZpbmUg UlhfVEtJUE1JQ19FUlIJCTB4RjUKPiArI2RlZmluZSBSWF9DQ01QTUlDX0VSUgkJMHhGOAo+ICsj ZGVmaW5lIFJYX1dBUElNSUNfRVJSCQkweEZDCj4gKwo+ICtzOCBlc3Bfd21hY19yYXRlMmlkeCh1 OCByYXRlKTsKPiArYm9vbCBlc3Bfd21hY19yeHNlY19lcnJvcih1OCBlcnJvcik7Cj4gKwo+ICsj ZW5kaWYJCQkJLyogX0VTUF9XTUFDX0hfICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2lu Zy9lc3A4MDg5L3NkaW9fc2lmX2VzcC5jIGIvZHJpdmVycy9zdGFnaW5nL2VzcDgwODkvc2Rpb19z aWZfZXNwLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uZDg4 NDJmNTA4NWNlCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvc3RhZ2luZy9lc3A4MDg5 L3NkaW9fc2lmX2VzcC5jCj4gQEAgLTAsMCArMSw1NTIgQEAKPiArLyoKPiArICogQ29weXJpZ2h0 IChjKSAyMDEwIC0gMjAxMyBFc3ByZXNzaWYgU3lzdGVtLgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIw MTcgRnJlZSBFbGVjdHJvbnMKPiArICogICAgICBRdWVudGluIFNjaHVseiA8cXVlbnRpbi5zY2h1 bHpAZnJlZS1lbGVjdHJvbnMuY29tPgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgo+ ICsgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24g MiBhcyBwdWJsaXNoZWQgYnkgdGhlCj4gKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPiAr ICoKPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvbW1jL2NhcmQuaD4KPiArI2luY2x1ZGUg PGxpbnV4L21tYy9tbWMuaD4KPiArI2luY2x1ZGUgPGxpbnV4L21tYy9jb3JlLmg+Cj4gKyNpbmNs dWRlIDxsaW51eC9tbWMvaG9zdC5oPgo+ICsjaW5jbHVkZSA8bGludXgvbW1jL3NkaW9fZnVuYy5o Pgo+ICsjaW5jbHVkZSA8bGludXgvbW1jL3NkaW9faWRzLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9t bWMvc2Rpby5oPgo+ICsjaW5jbHVkZSA8bGludXgvbW1jL3NkLmg+Cj4gKyNpbmNsdWRlIDxsaW51 eC9tb2R1bGUuaD4KPiArI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgo+ICsjaW5jbHVkZSA8bGlu dXgvdGltZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvcG0uaD4KPiArCj4gKyNpbmNsdWRlICJlc3Bf cHViLmgiCj4gKyNpbmNsdWRlICJlc3Bfc2lmLmgiCj4gKyNpbmNsdWRlICJlc3Bfc2lwLmgiCj4g KyNpbmNsdWRlICJlc3BfZGVidWcuaCIKPiArI2luY2x1ZGUgInNsY19ob3N0X3JlZ2lzdGVyLmgi Cj4gKyNpbmNsdWRlICJlc3BfdmVyc2lvbi5oIgo+ICsjaW5jbHVkZSAiZXNwX2N0cmwuaCIKPiAr I2luY2x1ZGUgImVzcF9maWxlLmgiCj4gKwo+ICt1bnNpZ25lZCBpbnQgZXNwX21zZ19sZXZlbCA9 IEVTUF9EQkdfRVJST1IgfCBFU1BfU0hPVzsKPiArCj4gKy8qIEhkRzogTm90ZToKPiArICogMSkg TU1DX0hBU19GT1JDRV9ERVRFQ1RfQ0hBTkdFIGlzIGEgaGFjayB3aGljaCBpcyBzZXQgYnkgbXkg c3VueGktd2lwCj4gKyAqICAgIHRyZWUuIEZJWE1FIHJlcGxhY2Ugd2l0aCBhIHZlcnNpb24gY2hl Y2sgb25jZSBtbWNfZm9yY2VfZGV0ZWN0X2NoYW5nZSgpCj4gKyAqICAgIGlzIGFkZGVkIHRvIHRo ZSBtYWlubGluZSBrZXJuZWwuCj4gKyAqIDIpIFRoaXMgdmVyc2lvbiBkb2VzIE5PVCBpbXBsZW1l bnQga2VlcF9wb3dlciwgdGhlIGR0cyBtdXN0IG1hcmsgdGhlCj4gKyAqICAgIHJlZ3VsYXRvcnMg YXMgcmVndWxhdG9yLWFsd2F5cy1vbiBhbmQgbm90IHVzZSBtbWMtcHdyc2VxIGZvciB0aGlzIHN0 dWIKPiArICogICAgdG8gd29yay4KPiArICovCj4gKyNpZm5kZWYgTU1DX0hBU19GT1JDRV9ERVRF Q1RfQ0hBTkdFCj4gK3ZvaWQgbW1jX2ZvcmNlX2RldGVjdF9jaGFuZ2Uoc3RydWN0IG1tY19ob3N0 ICpob3N0LCB1bnNpZ25lZCBsb25nIGRlbGF5LAo+ICsJCQkgICAgIGJvb2wga2VlcF9wb3dlcikK PiArewo+ICsJaG9zdC0+Y2FwcyAmPSB+TU1DX0NBUF9OT05SRU1PVkFCTEU7Cj4gKwlob3N0LT5j YXBzIHw9IE1NQ19DQVBfTkVFRFNfUE9MTDsKPiArCW1tY19kZXRlY3RfY2hhbmdlKGhvc3QsIGRl bGF5KTsKPiArfQo+ICsjZW5kaWYKPiArCj4gKyNkZWZpbmUgRVNQX0RNQV9JQlVGU1ogICAyMDQ4 Cj4gKwo+ICtzdHJ1Y3QgZXNwX3NkaW9fY3RybCAqc2lmX3NjdHJsOwo+ICsKPiArc3RhdGljIGlu dCBlc2Rpb19wb3dlcl9vZmYoc3RydWN0IGVzcF9zZGlvX2N0cmwgKnNjdHJsKTsKPiArc3RhdGlj IGludCBlc2Rpb19wb3dlcl9vbihzdHJ1Y3QgZXNwX3NkaW9fY3RybCAqc2N0cmwpOwo+ICsKPiAr dm9pZCBzaWZfc2V0X2Nsb2NrKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMsIGludCBjbGspOwo+ICsK PiArdm9pZCBzaWZfbG9ja19idXMoc3RydWN0IGVzcF9wdWIgKmVwdWIpCj4gK3sKPiArCWlmICgh ZXB1YiB8fCAhZXB1Yi0+c2lmIHx8ICFlcHViLT5zaWYtPmZ1bmMpCj4gKwkJcmV0dXJuOwo+ICsJ c2Rpb19jbGFpbV9ob3N0KGVwdWItPnNpZi0+ZnVuYyk7Cj4gK30KPiArCj4gK3ZvaWQgc2lmX3Vu bG9ja19idXMoc3RydWN0IGVzcF9wdWIgKmVwdWIpCj4gK3sKPiArCWlmICghZXB1YiB8fCAhZXB1 Yi0+c2lmIHx8ICFlcHViLT5zaWYtPmZ1bmMpCj4gKwkJcmV0dXJuOwo+ICsJc2Rpb19yZWxlYXNl X2hvc3QoZXB1Yi0+c2lmLT5mdW5jKTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSBib29sIGJh ZF9idWYodTggKmJ1ZikKPiArewo+ICsJcmV0dXJuICh1bnNpZ25lZCBsb25nKWJ1ZiAmIDB4MyB8 fCAhdmlydF9hZGRyX3ZhbGlkKGJ1Zik7Cj4gK30KPiArCj4gK3U4IHNkaW9faW9fcmVhZGIoc3Ry dWN0IGVzcF9wdWIgKmVwdWIsIGludCBhZGRyLCBpbnQgKnJlcykKPiArewo+ICsJc3RydWN0IHNk aW9fZnVuYyAqZnVuYyA9IGVwdWItPnNpZi0+ZnVuYzsKPiArCj4gKwlpZiAoIWZ1bmMtPm51bSkK PiArCQlyZXR1cm4gc2Rpb19mMF9yZWFkYihmdW5jLCBhZGRyLCByZXMpOwo+ICsKPiArCXJldHVy biBzZGlvX3JlYWRiKGZ1bmMsIGFkZHIsIHJlcyk7Cj4gK30KPiArCj4gK3ZvaWQgc2Rpb19pb193 cml0ZWIoc3RydWN0IGVzcF9wdWIgKmVwdWIsIHU4IHZhbHVlLCBpbnQgYWRkciwgaW50ICpyZXMp Cj4gK3sKPiArCXN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMgPSBlcHViLT5zaWYtPmZ1bmM7Cj4gKwo+ ICsJaWYgKCFmdW5jLT5udW0pCj4gKwkJc2Rpb19mMF93cml0ZWIoZnVuYywgdmFsdWUsIGFkZHIs IHJlcyk7Cj4gKwllbHNlCj4gKwkJc2Rpb193cml0ZWIoZnVuYywgdmFsdWUsIGFkZHIsIHJlcyk7 Cj4gK30KPiArCj4gK2ludCBzaWZfaW8oc3RydWN0IGVzcF9wdWIgKmVwdWIsIHUzMiBhZGRyLCB1 OCAqYnVmLCB1MzIgbGVuLCB1MzIgZmxhZywKPiArCSAgIGJvb2wgc3luYykKPiArewo+ICsJc3Ry dWN0IHNkaW9fZnVuYyAqZnVuYzsKPiArCWludCBlcnIgPSAwOwo+ICsJdTggKmlidWY7Cj4gKwli b29sIG5lZWRfaWJ1ZiA9IGZhbHNlOwo+ICsKPiArCWlmICghZXB1YiB8fCAhYnVmIHx8ICFlcHVi LT5zaWYgfHwgIWVwdWItPnNpZi0+ZnVuYykgewo+ICsJCUVTU0VSVCgwKTsKPiArCQlyZXR1cm4g LUVJTlZBTDsKPiArCX0KPiArCj4gKwlmdW5jID0gZXB1Yi0+c2lmLT5mdW5jOwo+ICsKPiArCWlm IChiYWRfYnVmKGJ1ZikpIHsKPiArCQluZWVkX2lidWYgPSB0cnVlOwo+ICsJCWlidWYgPSBlcHVi LT5zaWYtPmRtYV9idWZmZXI7Cj4gKwl9IGVsc2Ugewo+ICsJCWlidWYgPSBidWY7Cj4gKwl9Cj4g Kwo+ICsJaWYgKGZsYWcgJiBTSUZfVE9fREVWSUNFKSB7Cj4gKwkJaWYgKG5lZWRfaWJ1ZikKPiAr CQkJbWVtY3B5KGlidWYsIGJ1ZiwgbGVuKTsKPiArCj4gKwkJaWYgKHN5bmMpCj4gKwkJCXNkaW9f Y2xhaW1faG9zdChmdW5jKTsKPiArCj4gKwkJaWYgKGZsYWcgJiBTSUZfRklYRURfQUREUikKPiAr CQkJZXJyID0gc2Rpb193cml0ZXNiKGZ1bmMsIGFkZHIsIGlidWYsIGxlbik7Cj4gKwkJZWxzZSBp ZiAoZmxhZyAmIFNJRl9JTkNfQUREUikKPiArCQkJZXJyID0gc2Rpb19tZW1jcHlfdG9pbyhmdW5j LCBhZGRyLCBpYnVmLCBsZW4pOwo+ICsKPiArCQlpZiAoc3luYykKPiArCQkJc2Rpb19yZWxlYXNl X2hvc3QoZnVuYyk7Cj4gKwo+ICsJfSBlbHNlIGlmIChmbGFnICYgU0lGX0ZST01fREVWSUNFKSB7 Cj4gKwkJaWYgKHN5bmMpCj4gKwkJCXNkaW9fY2xhaW1faG9zdChmdW5jKTsKPiArCj4gKwkJaWYg KGZsYWcgJiBTSUZfRklYRURfQUREUikKPiArCQkJZXJyID0gc2Rpb19yZWFkc2IoZnVuYywgaWJ1 ZiwgYWRkciwgbGVuKTsKPiArCQllbHNlIGlmIChmbGFnICYgU0lGX0lOQ19BRERSKQo+ICsJCQll cnIgPSBzZGlvX21lbWNweV9mcm9taW8oZnVuYywgaWJ1ZiwgYWRkciwgbGVuKTsKPiArCj4gKwkJ aWYgKHN5bmMpCj4gKwkJCXNkaW9fcmVsZWFzZV9ob3N0KGZ1bmMpOwo+ICsKPiArCQlpZiAoIWVy ciAmJiBuZWVkX2lidWYpCj4gKwkJCW1lbWNweShidWYsIGlidWYsIGxlbik7Cj4gKwl9Cj4gKwo+ ICsJcmV0dXJuIGVycjsKPiArfQo+ICsKPiAraW50IHNpZl9pb19yYXcoc3RydWN0IGVzcF9wdWIg KmVwdWIsIHUzMiBhZGRyLCB1OCAqYnVmLCB1MzIgbGVuLCB1MzIgZmxhZykKPiArewo+ICsJcmV0 dXJuIHNpZl9pbyhlcHViLCBhZGRyLCBidWYsIGxlbiwgZmxhZywgZmFsc2UpOwo+ICt9Cj4gKwo+ ICtpbnQgc2lmX2lvX3N5bmMoc3RydWN0IGVzcF9wdWIgKmVwdWIsIHUzMiBhZGRyLCB1OCAqYnVm LCB1MzIgbGVuLCB1MzIgZmxhZykKPiArewo+ICsJcmV0dXJuIHNpZl9pbyhlcHViLCBhZGRyLCBi dWYsIGxlbiwgZmxhZywgdHJ1ZSk7Cj4gK30KPiArCj4gK2ludCBzaWZfbGxkZXNjKHN0cnVjdCBl c3BfcHViICplcHViLCB1OCAqYnVmLCB1MzIgbGVuLCBib29sIHN5bmMsIGJvb2wgcmVhZCwKPiAr CSAgICAgICBib29sIG5vcm91bmQpCj4gK3sKPiArCXUzMiByZWFkX2xlbiwgYWRkciwgZmxhZ3M7 Cj4gKwo+ICsJaWYgKCFlcHViIHx8ICFidWYgfHwgIWVwdWItPnNpZiB8fCAhZXB1Yi0+c2lmLT50 YXJnZXRfaWQpIHsKPiArCQlFU1NFUlQoMCk7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4g Kwo+ICsJaWYgKGVwdWItPnNpZi0+dGFyZ2V0X2lkID09IDB4NjAwICYmICFub3JvdW5kKQo+ICsJ CXJlYWRfbGVuID0gcm91bmR1cChsZW4sIGVwdWItPnNpZi0+c2xjX2Jsa19zeik7Cj4gKwllbHNl Cj4gKwkJcmVhZF9sZW4gPSBsZW47Cj4gKwo+ICsJaWYgKHJlYWQpIHsKPiArCQlhZGRyID0gZXB1 Yi0+c2lmLT5zbGNfd2luZG93X2VuZF9hZGRyIC0gMiAtIGxlbjsKPiArCQlmbGFncyA9IFNJRl9G Uk9NX0RFVklDRSB8IFNJRl9CWVRFX0JBU0lTIHwgU0lGX0lOQ19BRERSOwo+ICsJfSBlbHNlIHsK PiArCQlhZGRyID0gZXB1Yi0+c2lmLT5zbGNfd2luZG93X2VuZF9hZGRyIC0gbGVuOwo+ICsJCWZs YWdzID0gU0lGX1RPX0RFVklDRSB8IFNJRl9CWVRFX0JBU0lTIHwgU0lGX0lOQ19BRERSOwo+ICsJ fQo+ICsKPiArCWlmIChzeW5jKQo+ICsJCXJldHVybiBzaWZfaW9fc3luYyhlcHViLCBhZGRyLCBi dWYsIHJlYWRfbGVuLCBmbGFncyk7Cj4gKwlyZXR1cm4gc2lmX2lvX3JhdyhlcHViLCBhZGRyLCBi dWYsIHJlYWRfbGVuLCBmbGFncyk7Cj4gK30KPiArCj4gK2ludCBzaWZfbGxkZXNjX3JlYWRfc3lu YyhzdHJ1Y3QgZXNwX3B1YiAqZXB1YiwgdTggKmJ1ZiwgdTMyIGxlbikKPiArewo+ICsJcmV0dXJu IHNpZl9sbGRlc2MoZXB1YiwgYnVmLCBsZW4sIHRydWUsIHRydWUsIGZhbHNlKTsKPiArfQo+ICsK PiAraW50IHNpZl9sbGRlc2Nfd3JpdGVfc3luYyhzdHJ1Y3QgZXNwX3B1YiAqZXB1YiwgdTggKmJ1 ZiwgdTMyIGxlbikKPiArewo+ICsJcmV0dXJuIHNpZl9sbGRlc2MoZXB1YiwgYnVmLCBsZW4sIHRy dWUsIGZhbHNlLCBmYWxzZSk7Cj4gK30KPiArCj4gK2ludCBzaWZfbGxkZXNjX3JlYWRfcmF3KHN0 cnVjdCBlc3BfcHViICplcHViLCB1OCAqYnVmLCB1MzIgbGVuLCBib29sIG5vcm91bmQpCj4gK3sK PiArCXJldHVybiBzaWZfbGxkZXNjKGVwdWIsIGJ1ZiwgbGVuLCBmYWxzZSwgdHJ1ZSwgbm9yb3Vu ZCk7Cj4gK30KPiArCj4gK2ludCBzaWZfbGxkZXNjX3dyaXRlX3JhdyhzdHJ1Y3QgZXNwX3B1YiAq ZXB1YiwgdTggKmJ1ZiwgdTMyIGxlbikKPiArewo+ICsJcmV0dXJuIHNpZl9sbGRlc2MoZXB1Yiwg YnVmLCBsZW4sIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwo+ICt9Cj4gKwo+ICsjZGVmaW5lIE1BTlVG QUNUVVJFUl9JRF9FQUdMRV9CQVNFICAgICAgICAweDExMTAKPiArI2RlZmluZSBNQU5VRkFDVFVS RVJfQ09ERSAgICAgICAgICAgICAgICAgIDB4NjY2Ngo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVj dCBzZGlvX2RldmljZV9pZCBlc3Bfc2Rpb19kZXZpY2VzW10gPSB7Cj4gKwl7U0RJT19ERVZJQ0Uo TUFOVUZBQ1RVUkVSX0NPREUsIChNQU5VRkFDVFVSRVJfSURfRUFHTEVfQkFTRSB8IDB4MSkpfSwK PiArCXt9LAo+ICt9Owo+ICsKPiArc3RhdGljIGludCBlc2Rpb19wb3dlcihzdHJ1Y3QgZXNwX3Nk aW9fY3RybCAqc2N0cmwsIGJvb2wgcG93ZXJfb24pCj4gK3sKPiArCWludCBlcnI7Cj4gKwo+ICsJ aWYgKHNjdHJsLT5vZmYgIT0gcG93ZXJfb24pCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJc2Rpb19j bGFpbV9ob3N0KHNjdHJsLT5mdW5jKTsKPiArCj4gKwlpZiAocG93ZXJfb24pCj4gKwkJZXJyID0g c2Rpb19lbmFibGVfZnVuYyhzY3RybC0+ZnVuYyk7Cj4gKwllbHNlCj4gKwkJZXJyID0gc2Rpb19k aXNhYmxlX2Z1bmMoc2N0cmwtPmZ1bmMpOwo+ICsKPiArCXNkaW9fcmVsZWFzZV9ob3N0KHNjdHJs LT5mdW5jKTsKPiArCj4gKwlpZiAoZXJyKSB7Cj4gKwkJZGV2X2VycihzY3RybC0+ZXB1Yi0+ZGV2 LCAidW5hYmxlIHRvIGVuYWJsZSBzZGlvIGZ1bmM6ICVkXG4iLAo+ICsJCQllcnIpOwo+ICsJCXJl dHVybiBlcnI7Cj4gKwl9Cj4gKwo+ICsJLyogZW5zdXJlIGRldmljZSBpcyB1cCAqLwo+ICsJaWYg KHBvd2VyX29uKQo+ICsJCW1zbGVlcCg1KTsKPiArCj4gKwlzY3RybC0+b2ZmID0gIXNjdHJsLT5v ZmY7Cj4gKwo+ICsJcmV0dXJuIGVycjsKCnJldHVybiAwOwoKPiArfQo+ICsKPiArc3RhdGljIGlu dCBlc2Rpb19wb3dlcl9vbihzdHJ1Y3QgZXNwX3NkaW9fY3RybCAqc2N0cmwpCj4gK3sKPiArCXJl dHVybiBlc2Rpb19wb3dlcihzY3RybCwgdHJ1ZSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZXNk aW9fcG93ZXJfb2ZmKHN0cnVjdCBlc3Bfc2Rpb19jdHJsICpzY3RybCkKPiArewo+ICsJcmV0dXJu IGVzZGlvX3Bvd2VyKHNjdHJsLCBmYWxzZSk7Cj4gK30KPiArCj4gK3ZvaWQgc2lmX2VuYWJsZV9p cnEoc3RydWN0IGVzcF9wdWIgKmVwdWIpCj4gK3sKPiArCXNkaW9fY2xhaW1faG9zdChlcHViLT5z aWYtPmZ1bmMpOwo+ICsKPiArCWlmIChzZGlvX2NsYWltX2lycShlcHViLT5zaWYtPmZ1bmMsIHNp Zl9kc3IpKQo+ICsJCWRldl9lcnIoZXB1Yi0+ZGV2LCAic2lmICVzIGZhaWxlZFxuIiwgX19mdW5j X18pOwo+ICsKPiArCWF0b21pY19zZXQoJmVwdWItPnNpcC0+c3RhdGUsIFNJUF9CT09UKTsKPiAr CWF0b21pY19zZXQoJmVwdWItPnNpZi0+aXJxX2luc3RhbGxlZCwgMSk7Cj4gKwo+ICsJc2Rpb19y ZWxlYXNlX2hvc3QoZXB1Yi0+c2lmLT5mdW5jKTsKPiArfQo+ICsKPiArdm9pZCBzaWZfZGlzYWJs ZV9pcnEoc3RydWN0IGVzcF9wdWIgKmVwdWIpCj4gK3sKPiArCWludCBpID0gMDsKPiArCj4gKwlp ZiAoIWF0b21pY19yZWFkKCZlcHViLT5zaWYtPmlycV9pbnN0YWxsZWQpKQo+ICsJCXJldHVybjsK PiArCj4gKwlzZGlvX2NsYWltX2hvc3QoZXB1Yi0+c2lmLT5mdW5jKTsKPiArCj4gKwl3aGlsZSAo YXRvbWljX3JlYWQoJmVwdWItPnNpZi0+aXJxX2hhbmRsaW5nKSkgewo+ICsJCXNkaW9fcmVsZWFz ZV9ob3N0KGVwdWItPnNpZi0+ZnVuYyk7Cj4gKwkJc2NoZWR1bGVfdGltZW91dChIWiAvIDEwMCk7 Cj4gKwkJc2Rpb19jbGFpbV9ob3N0KGVwdWItPnNpZi0+ZnVuYyk7Cj4gKwkJaWYgKGkrKyA+PSA0 MDApCj4gKwkJCWJyZWFrOwo+ICsJfQo+ICsKPiArCS8qIElnbm9yZSBlcnJvcnMsIHdlIGRvbid0 IGFsd2F5cyB1c2UgYW4gaXJxLiAqLwo+ICsJc2Rpb19yZWxlYXNlX2lycShlcHViLT5zaWYtPmZ1 bmMpOwo+ICsKPiArCWF0b21pY19zZXQoJmVwdWItPnNpZi0+aXJxX2luc3RhbGxlZCwgMCk7Cj4g KwlzZGlvX3JlbGVhc2VfaG9zdChlcHViLT5zaWYtPmZ1bmMpOwo+ICt9Cj4gKwo+ICt2b2lkIHNp Zl9zZXRfY2xvY2soc3RydWN0IHNkaW9fZnVuYyAqZnVuYywgaW50IGNsaykKPiArewo+ICsJc3Ry dWN0IG1tY19ob3N0ICpob3N0ID0gZnVuYy0+Y2FyZC0+aG9zdDsKPiArCj4gKwlzZGlvX2NsYWlt X2hvc3QoZnVuYyk7Cj4gKwo+ICsJLy9jdXJyZW50bHkgb25seSBzZXQgY2xvY2sKPiArCWhvc3Qt Pmlvcy5jbG9jayA9IGNsayAqIDEwMDAwMDA7Cj4gKwo+ICsJaWYgKGhvc3QtPmlvcy5jbG9jayA+ IGhvc3QtPmZfbWF4KQo+ICsJCWhvc3QtPmlvcy5jbG9jayA9IGhvc3QtPmZfbWF4Owo+ICsKPiAr CWhvc3QtPm9wcy0+c2V0X2lvcyhob3N0LCAmaG9zdC0+aW9zKTsKPiArCj4gKwltZGVsYXkoMik7 Cj4gKwo+ICsJc2Rpb19yZWxlYXNlX2hvc3QoZnVuYyk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IGVzcF9zZGlvX3JlbW92ZShzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jKTsKPiArCj4gK3N0YXRpYyBp bnQgZXNwX3NkaW9fcHJvYmUoc3RydWN0IHNkaW9fZnVuYyAqZnVuYywKPiArCQkJICBjb25zdCBz dHJ1Y3Qgc2Rpb19kZXZpY2VfaWQgKmlkKQo+ICt7Cj4gKwlzdHJ1Y3QgZXNwX3B1YiAqZXB1YjsK PiArCXN0cnVjdCBlc3Bfc2Rpb19jdHJsICpzY3RybDsKPiArCXN0cnVjdCBtbWNfaG9zdCAqaG9z dCA9IGZ1bmMtPmNhcmQtPmhvc3Q7Cj4gKwlpbnQgZXJyOwo+ICsKPiArCWlmICghc2lmX3NjdHJs KSB7Cj4gKwkJcmVxdWVzdF9pbml0X2NvbmYoJmZ1bmMtPmRldik7Cj4gKwo+ICsJCXNjdHJsID0g a3phbGxvYyhzaXplb2YoKnNjdHJsKSwgR0ZQX0tFUk5FTCk7Cj4gKwkJaWYgKCFzY3RybCkKPiAr CQkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJCS8qIHRlbXAgYnVmZmVyIHJlc2VydmVkIGZvciB1 bi1kbWEtYWJsZSByZXF1ZXN0ICovCj4gKwkJc2N0cmwtPmRtYV9idWZmZXIgPSBremFsbG9jKEVT UF9ETUFfSUJVRlNaLCBHRlBfS0VSTkVMKTsKPiArCQlpZiAoIXNjdHJsLT5kbWFfYnVmZmVyKSB7 Cj4gKwkJCWVyciA9IC1FTk9NRU07Cj4gKwkJCWdvdG8gX2Vycl9sYXN0Owo+ICsJCX0KPiArCj4g KwkJc2lmX3NjdHJsID0gc2N0cmw7Cj4gKwkJc2N0cmwtPnNsY19ibGtfc3ogPSBTSUZfU0xDX0JM T0NLX1NJWkU7Cj4gKwo+ICsJCWVwdWIgPSBlc3BfcHViX2FsbG9jX21hYzgwMjExKCZmdW5jLT5k ZXYpOwo+ICsJCWlmICghZXB1Yikgewo+ICsJCQllcnIgPSAtRU5PTUVNOwo+ICsJCQlnb3RvIF9l cnJfZG1hOwo+ICsJCX0KPiArCj4gKwkJZXB1Yi0+c2lmID0gc2N0cmw7Cj4gKwkJZXB1Yi0+c2Rp b19zdGF0ZSA9IEVTUF9TRElPX1NUQVRFX0ZJUlNUX0lOSVQ7Cj4gKwkJc2N0cmwtPmVwdWIgPSBl cHViOwo+ICsJfSBlbHNlIHsKPiArCQkvKiBGSVhNRTogd2h5IGR1cGxpY2F0aW5nIHNjdHJsIGFu ZCBzaWZfc2N0cmw/ICovCj4gKwkJc2N0cmwgPSBzaWZfc2N0cmw7Cj4gKwkJc2lmX3NjdHJsID0g TlVMTDsKPiArCQllcHViID0gc2N0cmwtPmVwdWI7Cj4gKwkJZXB1Yi0+c2Rpb19zdGF0ZSA9IEVT UF9TRElPX1NUQVRFX1NFQ09ORF9JTklUOwo+ICsJCS8qIEZJWE1FOiBhbHJlYWR5IGRvbmUgaW4g ZXNwX3B1Yl9hbGxvY19tYWM4MDIxMSB3aGljaCBpcyBjYWxsZWQgb24gZmlyc3QgcHJvYmUgKi8K PiArCQlTRVRfSUVFRTgwMjExX0RFVihlcHViLT5odywgJmZ1bmMtPmRldik7Cj4gKwkJZXB1Yi0+ ZGV2ID0gJmZ1bmMtPmRldjsKPiArCX0KPiArCj4gKwlzY3RybC0+ZnVuYyA9IGZ1bmM7Cj4gKwlz ZGlvX3NldF9kcnZkYXRhKGZ1bmMsIHNjdHJsKTsKPiArCXNjdHJsLT5pZCA9IGlkOwo+ICsJc2N0 cmwtPm9mZiA9IHRydWU7Cj4gKwo+ICsJLyogZ2l2ZSB1cyBzb21lIHRpbWUgdG8gZW5hYmxlLCBp biBtcyAqLwo+ICsJZnVuYy0+ZW5hYmxlX3RpbWVvdXQgPSAxMDA7Cj4gKwo+ICsJZXJyID0gZXNk aW9fcG93ZXJfb24oc2N0cmwpOwo+ICsJaWYgKGVycikgewo+ICsJCWlmIChlcHViLT5zZGlvX3N0 YXRlID09IEVTUF9TRElPX1NUQVRFX0ZJUlNUX0lOSVQpCj4gKwkJCWdvdG8gX2Vycl9leHRfZ3Bp bzsKPiArCj4gKwkJZ290byBfZXJyX3NlY29uZF9pbml0Owo+ICsJfQo+ICsKPiArCWNoZWNrX3Rh cmdldF9pZChlcHViKTsKPiArCj4gKwlzZGlvX2NsYWltX2hvc3QoZnVuYyk7Cj4gKwo+ICsJZXJy ID0gc2Rpb19zZXRfYmxvY2tfc2l6ZShmdW5jLCBzY3RybC0+c2xjX2Jsa19zeik7Cj4gKwlpZiAo ZXJyKSB7Cj4gKwkJZGV2X2VycihlcHViLT5kZXYsICJTZXQgc2RpbyBibG9jayBzaXplICVkIGZh aWxlZDogJWQpXG4iLAo+ICsJCQlzY3RybC0+c2xjX2Jsa19zeiwgZXJyKTsKPiArCj4gKwkJc2Rp b19yZWxlYXNlX2hvc3QoZnVuYyk7Cj4gKwkJaWYgKGVwdWItPnNkaW9fc3RhdGUgPT0gRVNQX1NE SU9fU1RBVEVfRklSU1RfSU5JVCkKPiArCQkJZ290byBfZXJyX29mZjsKPiArCj4gKwkJZ290byBf ZXJyX3NlY29uZF9pbml0Owo+ICsJfQo+ICsKPiArCXNkaW9fcmVsZWFzZV9ob3N0KGZ1bmMpOwo+ ICsKPiArI2lmZGVmIExPV0VSX0NMSwo+ICsJLyogZml4IGNsb2NrIGZvciBkb25nbGUgKi8KPiAr CXNpZl9zZXRfY2xvY2soZnVuYywgMjMpOwo+ICsjZW5kaWYJCQkJLy9MT1dFUl9DTEsKPiArCj4g KwllcnIgPSBlc3BfcHViX2luaXRfYWxsKGVwdWIpOwo+ICsJaWYgKGVycikgewo+ICsJCWRldl9l cnIoZXB1Yi0+ZGV2LCAiZXNwX2luaXRfYWxsIGZhaWxlZDogJWRcbiIsIGVycik7Cj4gKwkJaWYg KGVwdWItPnNkaW9fc3RhdGUgPT0gRVNQX1NESU9fU1RBVEVfRklSU1RfSU5JVCkgewo+ICsJCQll cnIgPSAwOwoKV2h5IGlzIHRoaXMgc3VjY2Vzcz8KCj4gKwkJCWdvdG8gX2Vycl9maXJzdF9pbml0 Owo+ICsJCX0KPiArCj4gKwkJaWYgKGVwdWItPnNkaW9fc3RhdGUgPT0gRVNQX1NESU9fU1RBVEVf U0VDT05EX0lOSVQpCj4gKwkJCWdvdG8gX2Vycl9zZWNvbmRfaW5pdDsKPiArCX0KPiArCj4gKwlp ZiAoZXB1Yi0+c2Rpb19zdGF0ZSA9PSBFU1BfU0RJT19TVEFURV9GSVJTVF9JTklUKSB7Cj4gKwkJ ZXB1Yi0+c2Rpb19zdGF0ZSA9IEVTUF9TRElPX1NUQVRFX0ZJUlNUX05PUk1BTF9FWElUOwo+ICsJ CS8qIFJlc2NhbiB0aGUgZXNwODA4OSBhZnRlciBsb2FkaW5nIHRoZSBpbml0aWFsIGZpcm13YXJl ICovCj4gKwkJbW1jX2ZvcmNlX2RldGVjdF9jaGFuZ2UoaG9zdCwgbXNlY3NfdG9famlmZmllcygx MDApLCB0cnVlKTsKPiArCX0KPiArCj4gKwlyZXR1cm4gZXJyOwoKcmV0dXJuIDA7Cgo+ICsKPiAr X2Vycl9vZmY6Cj4gKwllc2Rpb19wb3dlcl9vZmYoc2N0cmwpOwo+ICsKPiArX2Vycl9leHRfZ3Bp bzoKPiArCWVzcF9wdWJfZGVhbGxvY19tYWM4MDIxMShlcHViKTsKPiArCj4gK19lcnJfZG1hOgo+ ICsJa2ZyZWUoc2N0cmwtPmRtYV9idWZmZXIpOwo+ICsKPiArX2Vycl9sYXN0Ogo+ICsJa2ZyZWUo c2N0cmwpOwo+ICsKPiArX2Vycl9maXJzdF9pbml0Ogo+ICsJaWYgKGVwdWIgJiYgZXB1Yi0+c2Rp b19zdGF0ZSA9PSBFU1BfU0RJT19TVEFURV9GSVJTVF9JTklUKQo+ICsJCWVwdWItPnNkaW9fc3Rh dGUgPSBFU1BfU0RJT19TVEFURV9GSVJTVF9FUlJPUl9FWElUOwo+ICsKPiArCXJldHVybiBlcnI7 Cj4gKwo+ICtfZXJyX3NlY29uZF9pbml0Ogo+ICsJZXB1Yi0+c2Rpb19zdGF0ZSA9IEVTUF9TRElP X1NUQVRFX1NFQ09ORF9FUlJPUl9FWElUOwo+ICsJZXNwX3NkaW9fcmVtb3ZlKGZ1bmMpOwo+ICsK PiArCXJldHVybiBlcnI7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGVzcF9zZGlvX3JlbW92ZShz dHJ1Y3Qgc2Rpb19mdW5jICpmdW5jKQo+ICt7Cj4gKwlzdHJ1Y3QgZXNwX3NkaW9fY3RybCAqc2N0 cmwgPSBzZGlvX2dldF9kcnZkYXRhKGZ1bmMpOwo+ICsJc3RydWN0IGVzcF9wdWIgKmVwdWI7Cj4g Kwo+ICsJaWYgKCFzY3RybCkgewo+ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwllcHViID0gc2N0 cmwtPmVwdWI7Cj4gKwlpZiAoIWVwdWIpIHsKPiArCQlnb3RvIF9vdXQ7Cj4gKwl9Cj4gKwo+ICsJ aWYgKGVwdWItPnNkaW9fc3RhdGUgIT0gRVNQX1NESU9fU1RBVEVfRklSU1RfTk9STUFMX0VYSVQp IHsKPiArCQlpZiAoZXB1Yi0+c2lwKSB7Cj4gKwkJCXNpcF9kZXRhY2goZXB1Yi0+c2lwKTsKPiAr CQkJZXB1Yi0+c2lwID0gTlVMTDsKPiArCQl9Cj4gKwl9IGVsc2Ugewo+ICsJCWF0b21pY19zZXQo JmVwdWItPnNpcC0+c3RhdGUsIFNJUF9TVE9QKTsKPiArCQlzaWZfZGlzYWJsZV9pcnEoZXB1Yik7 Cj4gKwl9Cj4gKwo+ICsJaWYgKGVwdWItPnNkaW9fc3RhdGUgIT0gRVNQX1NESU9fU1RBVEVfRklS U1RfTk9STUFMX0VYSVQpIHsKPiArCQllc3BfcHViX2RlYWxsb2NfbWFjODAyMTEoZXB1Yik7Cj4g Kwo+ICsJCWtmcmVlKHNjdHJsLT5kbWFfYnVmZmVyKTsKPiArCQlzY3RybC0+ZG1hX2J1ZmZlciA9 IE5VTEw7Cj4gKwo+ICsJCWtmcmVlKHNjdHJsKTsKPiArCX0KPiArCj4gK19vdXQ6Cj4gKwlzZGlv X3NldF9kcnZkYXRhKGZ1bmMsIE5VTEwpOwo+ICt9Cj4gKwo+ICtNT0RVTEVfREVWSUNFX1RBQkxF KHNkaW8sIGVzcF9zZGlvX2RldmljZXMpOwo+ICsKPiArc3RhdGljIGludCBlc3Bfc2Rpb19zdXNw ZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKPiArewo+ICsJc3RydWN0IHNkaW9fZnVuYyAqZnVuYyA9 IGRldl90b19zZGlvX2Z1bmMoZGV2KTsKPiArCXN0cnVjdCBlc3Bfc2Rpb19jdHJsICpzY3RybCA9 IHNkaW9fZ2V0X2RydmRhdGEoZnVuYyk7Cj4gKwlzdHJ1Y3QgZXNwX3B1YiAqZXB1YiA9IHNjdHJs LT5lcHViOwo+ICsJdTMyIHNkaW9fZmxhZ3M7Cj4gKwo+ICsJcHJpbnRrKCIlcyIsIF9fZnVuY19f KTsKPiArCWF0b21pY19zZXQoJmVwdWItPnBzLnN0YXRlLCBFU1BfUE1fT04pOwo+ICsKPiArCXNk aW9fZmxhZ3MgPSBzZGlvX2dldF9ob3N0X3BtX2NhcHMoZnVuYyk7Cj4gKwo+ICsJaWYgKCEoc2Rp b19mbGFncyAmIE1NQ19QTV9LRUVQX1BPV0VSKSkKPiArCQlwcmludGsoIiVzIGNhbid0IGtlZXAg cG93ZXIgd2hpbGUgaG9zdCBpcyBzdXNwZW5kZWRcbiIsCj4gKwkJICAgICAgIF9fZnVuY19fKTsK PiArCj4gKwkvKiBrZWVwIHBvd2VyIHdoaWxlIGhvc3Qgc3VzcGVuZGVkICovCj4gKwlpZiAoc2Rp b19zZXRfaG9zdF9wbV9mbGFncyhmdW5jLCBNTUNfUE1fS0VFUF9QT1dFUikpCj4gKwkJcHJpbnRr KCIlcyBlcnJvciB3aGlsZSB0cnlpbmcgdG8ga2VlcCBwb3dlclxuIiwgX19mdW5jX18pOwo+ICsK PiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGVzcF9zZGlvX3Jlc3VtZShzdHJ1 Y3QgZGV2aWNlICpkZXYpCj4gK3sKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29u c3Qgc3RydWN0IGRldl9wbV9vcHMgZXNwX3NkaW9fcG1fb3BzID0gewo+ICsJLnN1c3BlbmQgPSBl c3Bfc2Rpb19zdXNwZW5kLAo+ICsJLnJlc3VtZSA9IGVzcF9zZGlvX3Jlc3VtZSwKPiArfTsKPiAr Cj4gK3N0YXRpYyBzdHJ1Y3Qgc2Rpb19kcml2ZXIgZXNwX3NkaW9fZHJpdmVyID0gewo+ICsJLm5h bWUgPSAiZWFnbGVfc2RpbyIsCj4gKwkuaWRfdGFibGUgPSBlc3Bfc2Rpb19kZXZpY2VzLAo+ICsJ LnByb2JlID0gZXNwX3NkaW9fcHJvYmUsCj4gKwkucmVtb3ZlID0gZXNwX3NkaW9fcmVtb3ZlLAo+ ICsJLmRydiA9IHsucG0gPSAmZXNwX3NkaW9fcG1fb3BzLH0sCj4gK307Cj4gKwo+ICtzdGF0aWMg aW50IC8qX19pbml0Ki8gZXNwX3NkaW9faW5pdCh2b2lkKQo+ICt7Cj4gKwllc3BfZGVidWdmc19p bml0KCk7Cj4gKwlzZGlvX3JlZ2lzdGVyX2RyaXZlcigmZXNwX3NkaW9fZHJpdmVyKTsKPiArCj4g KwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgLypfX2V4aXQqLyBlc3Bfc2Rpb19l eGl0KHZvaWQpCj4gK3sKPiArCXNkaW9fdW5yZWdpc3Rlcl9kcml2ZXIoJmVzcF9zZGlvX2RyaXZl cik7Cj4gKwllc3BfZGVidWdmc19leGl0KCk7Cj4gK30KPiArCj4gK21vZHVsZV9pbml0KGVzcF9z ZGlvX2luaXQpOwo+ICttb2R1bGVfZXhpdChlc3Bfc2Rpb19leGl0KTsKPiArCj4gK01PRFVMRV9B VVRIT1IoIkVzcHJlc3NpZiBTeXN0ZW0iKTsKPiArTU9EVUxFX0RFU0NSSVBUSU9OCj4gKygiRHJp dmVyIGZvciBTRElPIGludGVyY29ubmVjdGVkIGVhZ2xlIGxvdy1wb3dlciBXTEFOIGRldmljZXMi KTsKPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdp bmcvZXNwODA4OS9zaXAyX2NvbW1vbi5oIGIvZHJpdmVycy9zdGFnaW5nL2VzcDgwODkvc2lwMl9j b21tb24uaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi41ZGZi OGM0OTIyMjMKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9zdGFnaW5nL2VzcDgwODkv c2lwMl9jb21tb24uaAo+IEBAIC0wLDAgKzEsMzg4IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAo YykgMjAxMCAtIDIwMTQgRXNwcmVzc2lmIFN5c3RlbS4KPiArICogQ29weXJpZ2h0IChjKSAyMDE3 IEZyZWUgRWxlY3Ryb25zCj4gKyAqICAgICAgUXVlbnRpbiBTY2h1bHogPHF1ZW50aW4uc2NodWx6 QGZyZWUtZWxlY3Ryb25zLmNvbT4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKPiAr ICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIg YXMgcHVibGlzaGVkIGJ5IHRoZQo+ICsgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCj4gKyAq Cj4gKyAqLwo+ICsKPiArI2lmbmRlZiBfU0lQMl9DT01NT05fSAo+ICsjZGVmaW5lIF9TSVAyX0NP TU1PTl9ICj4gKwo+ICsvKiBtYXggMTYgdHlwZXMgKi8KPiArZW51bSBzaXBfdHlwZSB7Cj4gKwlT SVBfQ1RSTCA9IDAsCj4gKwlTSVBfREFUQSwKPiArCVNJUF9EQVRBX0FNUERVCj4gK307Cj4gKwo+ ICtlbnVtIHNpcF9idWZfdHlwZSB7Cj4gKwlTSVBfVFhfQ1RSTF9CVUYgPSAwLAkvKiBmcm9tIGhv c3QgKi8KPiArCVNJUF9SWF9DVFJMX0JVRiwJLyogdG8gaG9zdCAqLwo+ICsJU0lQX1RYX0RBVEFf QlVGLAkvKiBmcm9tIGhvc3QgKi8KPiArCVNJUF9SWF9EQVRBX0JVRgkJLyogdG8gaG9zdCAqLwo+ ICt9Owo+ICsKPiArZW51bSBzaXBfY21kX2lkIHsKPiArCVNJUF9DTURfR0VUX1ZFUiA9IDAsCj4g KwlTSVBfQ01EX1dSSVRFX01FTU9SWSwJLy8xIFJPTSBjb2RlCj4gKwlTSVBfQ01EX1JFQURfTUVN T1JZLAkvLzIKPiArCVNJUF9DTURfV1JJVEVfUkVHLAkvLzMgUk9NIGNvZGUKPiArCVNJUF9DTURf UkVBRF9SRUcsCS8vNAo+ICsJU0lQX0NNRF9CT09UVVAsCQkvLzUgUk9NIGNvZGUKPiArCVNJUF9D TURfQ09QWUJBQ0ssCS8vNgo+ICsJU0lQX0NNRF9JTklULAkJLy83Cj4gKwlTSVBfQ01EX1NDQU4s CQkvLzgKPiArCVNJUF9DTURfU0VUS0VZLAkJLy85Cj4gKwlTSVBfQ01EX0NPTkZJRywJCS8vMTAK PiArCVNJUF9DTURfQlNTX0lORk9fVVBEQVRFLAkvLzExCj4gKwlTSVBfQ01EX0xPT1BCQUNLLAkv LzEyICBST00gY29kZQo+ICsJLy9kbyBub3QgYWRkIGNtZCBiZWZvcmUgdGhpcyBsaW5lCj4gKwlT SVBfQ01EX1NFVF9XTU1fUEFSQU0sCj4gKwlTSVBfQ01EX0FNUERVX0FDVElPTiwKPiArCVNJUF9D TURfSEJfUkVRLAkJLy8xNQo+ICsJU0lQX0NNRF9SRVNFVF9NQUMsCS8vMTYKPiArCVNJUF9DTURf UFJFX0RPV04sCS8vMTcKPiArCVNJUF9DTURfU0xFRVAsCQkvKiBmb3Igc2xlZXAgdGVzdGluZyAq Lwo+ICsJU0lQX0NNRF9XQUtFVVAsCQkvKiBmb3Igc2xlZXAgdGVzdGluZyAqLwo+ICsJU0lQX0NN RF9ERUJVRywJCS8qIGZvciBnZW5lcmFsIHRlc3RpbmcgKi8KPiArCVNJUF9DTURfR0VUX0ZXX1ZF UiwJLyogZ2V0IGZ3IHJldi4gKi8KPiArCVNJUF9DTURfU0VUVklGLAo+ICsJU0lQX0NNRF9TRVRT VEEsCj4gKwlTSVBfQ01EX1BTLAo+ICsJU0lQX0NNRF9BVEUsCj4gKwlTSVBfQ01EX1NVU1BFTkQs Cj4gKwlTSVBfQ01EX1JFQ0FMQ19DUkVESVQsCj4gKwlTSVBfQ01EX01BWCwKPiArfTsKPiArCj4g K2VudW0gewo+ICsJU0lQX0VWVF9UQVJHRVRfT04gPSAwLAkvLwo+ICsJU0lQX0VWVF9CT09UVVAs CQkvLzEgaW4gUk9NIGNvZGUKPiArCVNJUF9FVlRfQ09QWUJBQ0ssCS8vMgo+ICsJU0lQX0VWVF9T Q0FOX1JFU1VMVCwJLy8zCj4gKwlTSVBfRVZUX1RYX1NUQVRVUywJLy80Cj4gKwlTSVBfRVZUX0NS RURJVF9SUFQsCS8vNSwgaW4gUk9NIGNvZGUKPiArCVNJUF9FVlRfRVJST1IsCQkvLzYKPiArCVNJ UF9FVlRfTE9PUEJBQ0ssCS8vNywgaW4gUk9NIGNvZGUKPiArCVNJUF9FVlRfU05QUklOVEZfVE9f SE9TVCwJLy84ICBpbiBST00gY29kZQo+ICsJLy9kbyBub3QgYWRkIGV2dCBiZWZvcmUgdGhpcyBs aW5lCj4gKwlTSVBfRVZUX0hCX0FDSywJCS8vOQo+ICsJU0lQX0VWVF9SRVNFVF9NQUNfQUNLLAkv LzEwCj4gKwlTSVBfRVZUX1dBS0VVUCwJCS8vMTEgICAgICAgIC8qIGZvciBzbGVlcCB0ZXN0aW5n ICovCj4gKwlTSVBfRVZUX0RFQlVHLAkJLy8xMiAgICAgICAgICAvKiBmb3IgZ2VuZXJhbCB0ZXN0 aW5nICovCj4gKwlTSVBfRVZUX1BSSU5UX1RPX0hPU1QsCS8vMTMKPiArCVNJUF9FVlRfVFJDX0FN UERVLAkvLzE0Cj4gKwlTSVBfRVZUX1JPQywJCS8vMTUKPiArCVNJUF9FVlRfUkVTRVRUSU5HLAo+ ICsJU0lQX0VWVF9BVEUsCj4gKwlTSVBfRVZUX0VQLAo+ICsJU0lQX0VWVF9JTklUX0VQLAo+ICsJ U0lQX0VWVF9TTEVFUCwKPiArCVNJUF9FVlRfVFhJRExFLAo+ICsJU0lQX0VWVF9OT0lTRUZMT09S LAo+ICsJU0lQX0VWVF9NQVgKPiArfTsKPiArCj4gKyNkZWZpbmUgU0lQX0lGSURYX01BU0sJMHhm MAo+ICsjZGVmaW5lIFNJUF9JRklEWF9TCTQKPiArI2RlZmluZSBTSVBfVFlQRV9NQVNLCTB4MGYK PiArI2RlZmluZSBTSVBfVFlQRV9TCTAKPiArCj4gKyNkZWZpbmUgU0lQX0hEUl9HRVRfSUZJRFgo ZmMwKSAoKChmYzApICYgU0lQX0lGSURYX01BU0spID4+IFNJUF9JRklEWF9TKQo+ICsjZGVmaW5l IFNJUF9IRFJfU0VUX0lGSURYKGZjMCwgaWZpZHgpICgoZmMwKSA9ICgoZmMwKSAmIH5TSVBfSUZJ RFhfTUFTSykgfCAoKGlmaWR4KSA8PCBTSVBfSUZJRFhfUyAmIFNJUF9JRklEWF9NQVNLKSkKPiAr I2RlZmluZSBTSVBfSERSX0dFVF9UWVBFKGZjMCkgKChmYzApICYgU0lQX1RZUEVfTUFTSykKPiAr LyogYXNzdW1lIHR5cGUgZmllbGQgaXMgY2xlYXJlZCAqLwo+ICsjZGVmaW5lIFNJUF9IRFJfU0VU X1RZUEUoZmMwLCB0eXBlKSAoKGZjMCkgPSAoKGZjMCkgJiB+U0lQX1RZUEVfTUFTSykgfCAoKHR5 cGUpICYgU0lQX1RZUEVfTUFTSykpCj4gKwo+ICsvKiBzaXAgMi4wLCBub3QgaHlicmlkIGhlYWRl ciBzbyBmYXIgKi8KPiArI2RlZmluZSBTSVBfSERSX0lTX0NUUkwoaGRyKSAoU0lQX0hEUl9HRVRf VFlQRSgoaGRyKS0+ZmNbMF0pID09IFNJUF9DVFJMKQo+ICsjZGVmaW5lIFNJUF9IRFJfSVNfREFU QShoZHIpIChTSVBfSERSX0dFVF9UWVBFKChoZHIpLT5mY1swXSkgPT0gU0lQX0RBVEEpCj4gKyNk ZWZpbmUgU0lQX0hEUl9JU19BTVBEVShoZHIpIChTSVBfSERSX0dFVF9UWVBFKChoZHIpLT5mY1sw XSkgPT0gU0lQX0RBVEFfQU1QRFUpCj4gKwo+ICsvKiBmY1sxXSBmbGFncywgb25seSBmb3IgZGF0 YSBwa3QuIEN0cmwgcGt0cyB1c2UgZmNbMV0gYXMgZXZlbnRJRCAqLwo+ICsjZGVmaW5lIFNJUF9I RFJfU0VUX0ZMQUdTKGhkciwgZmxhZ3MpICgoaGRyKS0+ZmNbMV0gfD0gKGZsYWdzKSkKPiArI2Rl ZmluZSBTSVBfSERSX0ZfTU9SRV9QS1QJCTB4MQo+ICsjZGVmaW5lIFNJUF9IRFJfRl9ORUVEX0NS RFRfUlBUCQkweDIKPiArI2RlZmluZSBTSVBfSERSX0ZfU1lOQwkJCTB4NAo+ICsjZGVmaW5lIFNJ UF9IRFJfRl9TWU5DX1JFU0VUCQkweDgKPiArI2RlZmluZSBTSVBfSERSX0ZfUE1fVFVSTklOR19P TgkJMHgxMAo+ICsjZGVmaW5lIFNJUF9IRFJfRl9QTV9UVVJOSU5HX09GRgkweDIwCj4gKwo+ICsj ZGVmaW5lIFNJUF9IRFJfTkVFRF9DUkVESVRfVVBEQVRFKGhkcikgKChoZHIpLT5mY1sxXSAmIFNJ UF9IRFJfRl9ORUVEX0NSRFRfUlBUKQo+ICsjZGVmaW5lIFNJUF9IRFJfSVNfTU9SRV9QS1QoaGRy KSAoKGhkciktPmZjWzFdICYgU0lQX0hEUl9GX01PUkVfUEtUKQo+ICsjZGVmaW5lIFNJUF9IRFJf SVNfQ1JEVF9SUFQoaGRyKSAoKGhkciktPmZjWzFdICYgU0lQX0hEUl9GX0NSRFRfUlBUKQo+ICsj ZGVmaW5lIFNJUF9IRFJfSVNfU1lOQyhoZHIpICgoaGRyKS0+ZmNbMV0gJiBTSVBfSERSX0ZfU1lO QykKPiArI2RlZmluZSBTSVBfSERSX0lTX1NZTkNfUkVTRVQoaGRyKSAoKGhkciktPmZjWzFdICYg U0lQX0hEUl9GX1NZTkNfUkVTRVQpCj4gKyNkZWZpbmUgU0lQX0hEUl9JU19TWU5DX1BLVChoZHIp IChTSVBfSERSX0lTX1NZTkMoaGRyKSB8IFNJUF9IRFJfSVNfU1lOQ19SRVNFVChoZHIpKQo+ICsj ZGVmaW5lIFNJUF9IRFJfU0VUX1NZTkMoaGRyKSBTSVBfSERSX1NFVF9GTEFHUygoaGRyKSwgU0lQ X0hEUl9GX1NZTkMpCj4gKyNkZWZpbmUgU0lQX0hEUl9TRVRfU1lOQ19SRVNFVChoZHIpIFNJUF9I RFJfU0VUX0ZMQUdTKChoZHIpLCBTSVBfSERSX0ZfU1lOQ19SRVNFVCkKPiArI2RlZmluZSBTSVBf SERSX1NFVF9NT1JFX1BLVChoZHIpIFNJUF9IRFJfU0VUX0ZMQUdTKChoZHIpLCBTSVBfSERSX0Zf TU9SRV9QS1QpCj4gKyNkZWZpbmUgU0lQX0hEUl9TRVRfUE1fVFVSTklOR19PTihoZHIpIFNJUF9I RFJfU0VUX0ZMQUdTKChoZHIpLCBTSVBfSERSX0ZfUE1fVFVSTklOR19PTikKPiArI2RlZmluZSBT SVBfSERSX0lTX1BNX1RVUk5JTkdfT04oaGRyKSAoKGhkciktPmZjWzFdICYgU0lQX0hEUl9GX1BN X1RVUk5JTkdfT04pCj4gKyNkZWZpbmUgU0lQX0hEUl9TRVRfUE1fVFVSTklOR19PRkYoaGRyKSBT SVBfSERSX1NFVF9GTEFHUygoaGRyKSwgU0lQX0hEUl9GX1BNX1RVUk5JTkdfT0ZGKQo+ICsjZGVm aW5lIFNJUF9IRFJfSVNfUE1fVFVSTklOR19PRkYoaGRyKSAoKGhkciktPmZjWzFdICYgU0lQX0hE Ul9GX1BNX1RVUk5JTkdfT0ZGKQo+ICsKPiArLyogZmNbMF06IGZpcnN0IDRiaXQ6IGlmaWR4OyBs YXN0IDRiaXQ6IHR5cGUKPiArICogZmNbMV06IGZsYWdzCj4gKyAqCj4gKyAqICAgRG9uJ3QgdG91 Y2ggdGhlIGhlYWRlciBkZWZpbml0b25zCj4gKyAqLwo+ICtzdHJ1Y3Qgc2lwX2hkcl9taW4gewo+ ICsJdTggZmNbMl07Cj4gKwlfX2xlMTYgbGVuOwo+ICt9IF9fcGFja2VkOwo+ICsKPiArLyogbm90 IG1vcmUgdGhhbiA0Ynl0ZSBsb25nICovCj4gK3N0cnVjdCBzaXBfdHhfZGF0YV9pbmZvIHsKPiAr CXU4IHRpZDsKPiArCXU4IGFjOwo+ICsJdTggcDJwOjEsIGVuY19mbGFnOjc7Cj4gKwl1OCBod19r aWQ7Cj4gK30gX19wYWNrZWQ7Cj4gKwo+ICsvKiBOQjogdGhpcyBzdHJ1Y3R1cmUgc2hvdWxkIGJl IG5vdCBtb3JlIHRoYW4gNGJ5dGUgISEgKi8KPiArc3RydWN0IHNpcF90eF9pbmZvIHsKPiArCXVu aW9uIHsKPiArCQl1MzIgY21kaWQ7Cj4gKwkJc3RydWN0IHNpcF90eF9kYXRhX2luZm8gZGluZm87 Cj4gKwl9IHU7Cj4gK30gX19wYWNrZWQ7Cj4gKwo+ICtzdHJ1Y3Qgc2lwX2hkciB7Cj4gKwl1OCBm Y1syXTsJCS8vZmNbMF06IHR5cGUgYW5kIGlmaWR4IDsgZmNbMV0gaXMgZXZlbnRJRCBpZiB0aGUg Zmlyc3QgY3RybCBwa3QgaW4gdGhlIGNoYWluLiBkYXRhIHBrdCBzdGlsbCBjYW4gdXNlIGZjWzFd IHRvIHNldCBmbGFnCj4gKwlfX2xlMTYgbGVuOwo+ICsJdW5pb24gewo+ICsJCXZvbGF0aWxlIHUz MiByZWN5Y2xlZF9jcmVkaXRzOwkvKiBsYXN0IDEyYml0cyBpcyBjcmVkaXRzLCBmaXJzdCAyMCBi aXRzIGlzIGFjdHVhbCBsZW5ndGggb2YgdGhlIGZpcnN0IHBrdCBpbiB0aGUgY2hhaW4gKi8KClJl bW92ZSB0aGUgdm9sYXRpbGUuCgo+ICsJCXN0cnVjdCBzaXBfdHhfaW5mbyB0eF9pbmZvOwo+ICsJ fSB1OwoKSWYgeW91IGp1c3QgcmVtb3ZlIHRoZSAidSIgYW5kIG1ha2UgdGhpcyBhbiBhbm9ueW1v dXMgdW5pb24gdGhlbgppdCBtYWtlcyBldmVyeXRoaW5nIGEgZWFzaWVyLgoKPiArCXUzMiBzZXE7 Cj4gK30gX19wYWNrZWQ7Cj4gKwo+ICsjZGVmaW5lIGhfY3JlZGl0cyB1LnJlY3ljbGVkX2NyZWRp dHMKCkl0IG1lYW5zIHdlIGNhbiBnZXQgcmlkIG9mIHRoZXNlIHVnbHkgZGVmaW5lcy4KCj4gKyNk ZWZpbmUgY19ldnRpZCBmY1sxXQo+ICsjZGVmaW5lIGNfY21kaWQgdS50eF9pbmZvLnUuY21kaWQK PiArI2RlZmluZSBkX2FjIHUudHhfaW5mby51LmRpbmZvLmFjCj4gKyNkZWZpbmUgZF90aWQgIHUu dHhfaW5mby51LmRpbmZvLnRpZAo+ICsjZGVmaW5lIGRfcDJwICAgdS50eF9pbmZvLnUuZGluZm8u cDJwCj4gKyNkZWZpbmUgZF9lbmNfZmxhZyB1LnR4X2luZm8udS5kaW5mby5lbmNfZmxhZwo+ICsj ZGVmaW5lIGRfaHdfa2lkICAgdS50eF9pbmZvLnUuZGluZm8uaHdfa2lkCj4gKwo+ICsjZGVmaW5l IFNJUF9DUkVESVRTX01BU0sgIDB4ZmZmCS8qIGxhc3QgMTIgYml0cyAqLwo+ICsKPiArI2RlZmlu ZSBTSVBfSERSX01JTl9MRU4JCTQKPiArI2RlZmluZSBTSVBfSERSX0xFTgkJc2l6ZW9mKHN0cnVj dCBzaXBfaGRyKQo+ICsjZGVmaW5lIFNJUF9DVFJMX0hEUl9MRU4JU0lQX0hEUl9MRU4JLyogc2Ft ZSBhcyBzaXBfaGRyIGluIHNpcDIgZGVzaWduICovCj4gKyNkZWZpbmUgU0lQX0JPT1RfQlVGX1NJ WkUJMjU2Cj4gKyNkZWZpbmUgU0lQX0NUUkxfQlVGX1NaCQkyNTYJLyogdG9vIG11Y2g/PyAqLwo+ ICsjZGVmaW5lIFNJUF9DVFJMX0JVRl9OCQk2Cj4gKyNkZWZpbmUgU0lQX0NUUkxfVFhCVUZfTgky Cj4gKyNkZWZpbmUgU0lQX0NUUkxfUlhCVUZfTgk0Cj4gKwo+ICsvKiBXQVIgZm9yIG1ibGsgKi8K PiArI2RlZmluZSBTSVBfUlhfQUREUl9QUkVGSVhfTUFTSwkweGZjMDAwMDAwCj4gKyNkZWZpbmUg U0lQX1JYX0FERFJfU0hJRlQJNgkvKiBbMzE6NV0sICBzaGlmdCA2IGJpdHMgKi8KPiArCj4gK3N0 cnVjdCBzaXBfY21kX3dyaXRlX21lbW9yeSB7Cj4gKwl1MzIgYWRkcjsKPiArCXUzMiBsZW47Cj4g K30gX19wYWNrZWQ7Cj4gKwo+ICtzdHJ1Y3Qgc2lwX2NtZF9yZWFkX21lbW9yeSB7Cj4gKwl1MzIg YWRkcjsKPiArCXUzMiBsZW47Cj4gK30gX19wYWNrZWQ7Cj4gKwo+ICtzdHJ1Y3Qgc2lwX2NtZF93 cml0ZV9yZWcgewo+ICsJdTMyIGFkZHI7Cj4gKwl1MzIgdmFsOwo+ICt9IF9fcGFja2VkOwo+ICsK PiArc3RydWN0IHNpcF9jbWRfYm9vdHVwIHsKPiArCXUzMiBib290X2FkZHI7Cj4gK30gX19wYWNr ZWQ7Cj4gKwo+ICtzdHJ1Y3Qgc2lwX2NtZF9sb29wYmFjayB7Cj4gKwl1MzIgdHhsZW47CQkvL2hv c3QgdG8gdGFyZ2V0IHBhY2tldCBsZW4sIDAgbWVhbnMgbm8gdHhwYWNrZXQKPiArCXUzMiByeGxl bjsJCS8vdGFyZ2V0IHRvIGhvc3QgcGFja2V0IGxlbiwgMCBtZWFucyBubyByeHBhY2tldAo+ICsJ dTMyIHBhY2tfaWQ7CQkvL3NlcXVlbmNlIG9mIHBhY2tldAo+ICt9IF9fcGFja2VkOwo+ICsKPiAr c3RydWN0IHNpcF9ldnRfbG9vcGJhY2sgewo+ICsJdTMyIHR4bGVuOwkJLy9ob3N0IHRvIHRhcmdl dCBwYWNrZXQgbGVuLCAwIG1lYW5zIG5vIHR4cGFja2V0Cj4gKwl1MzIgcnhsZW47CQkvL3Rhcmdl dCB0byBob3N0IHBhY2tldCBsZW4sIDAgbWVhbnMgbm8gcnhwYWNrZXQKPiArCXUzMiBwYWNrX2lk OwkJLy9zZXF1ZW5jZSBvZiBwYWNrZXQKPiArfSBfX3BhY2tlZDsKPiArCj4gK3N0cnVjdCBzaXBf Y21kX2NvcHliYWNrIHsKPiArCXUzMiBhZGRyOwo+ICsJdTMyIGxlbjsKPiArfSBfX3BhY2tlZDsK PiArCj4gK3N0cnVjdCBzaXBfY21kX3NjYW4gewo+ICsJLy8gICAgICAgIHU4ICBzc2lkWzMyXTsK PiArCXU4IHNzaWRfbGVuOwo+ICsJLy8gICAgICAgIHU4IGh3X2NoYW5uZWxbMTRdOwo+ICsJdTgg bl9jaGFubmVsczsKPiArCXU4IGllX2xlbjsKPiArCXU4IGFib3J0ZWQ7Cj4gK30gX19wYWNrZWQ7 CQkJLy8gaWVbXSBhcHBlbmQgYXQgdGhlIGVuZAo+ICsKPiArc3RydWN0IHNpcF9jbWRfc2V0a2V5 IHsKPiArCXU4IGJzc2lkX25vOwo+ICsJdTggYWRkcltFVEhfQUxFTl07Cj4gKwl1OCBhbGc7Cj4g Kwl1OCBrZXlpZHg7Cj4gKwl1OCBod19rZXlfaWR4Owo+ICsJdTggZmxhZ3M7Cj4gKwl1OCBrZXls ZW47Cj4gKwl1OCBrZXlbMzJdOwo+ICt9IF9fcGFja2VkOwo+ICsKPiArc3RydWN0IHNpcF9jbWRf Y29uZmlnIHsKPiArCXUxNiBjZW50ZXJfZnJlcTsKPiArCXUxNiBkdXJhdGlvbjsKPiArfSBfX3Bh Y2tlZDsKPiArCj4gK3N0cnVjdCBzaXBfY21kX2Jzc19pbmZvX3VwZGF0ZSB7Cj4gKwl1OCBic3Np ZFtFVEhfQUxFTl07Cj4gKwl1MTYgaXNhc3NvYzsKPiArCXUzMiBiZWFjb25faW50Owo+ICsJdTgg YnNzaWRfbm87Cj4gK30gX19wYWNrZWQ7Cj4gKwo+ICtzdHJ1Y3Qgc2lwX2V2dF9ib290dXAgewo+ ICsJdTE2IHR4X2Jsa3N6Owo+ICsJdTggbWFjX2FkZHJbRVRIX0FMRU5dOwo+ICsJLyogYW55dGhp bmcgZWxzZSA/ICovCj4gK30gX19wYWNrZWQ7Cj4gKwo+ICtzdHJ1Y3Qgc2lwX2NtZF9zZXR2aWYg ewo+ICsJdTggaW5kZXg7Cj4gKwl1OCBtYWNbRVRIX0FMRU5dOwo+ICsJdTggc2V0Owo+ICsJdTgg b3BfbW9kZTsKPiArCXU4IGlzX3AycDsKPiArfSBfX3BhY2tlZDsKPiArCj4gK2VudW0gZXNwX2ll ZWU4MDIxMV9waHl0eXBlIHsKPiArCUVTUF9JRUVFODAyMTFfVF9DQ0sgPSAwLAo+ICsJRVNQX0lF RUU4MDIxMV9UX09GRE0gPSAxLAo+ICsJRVNQX0lFRUU4MDIxMV9UX0hUMjBfTCA9IDIsCj4gKwlF U1BfSUVFRTgwMjExX1RfSFQyMF9TID0gMywKPiArfTsKPiArCj4gK3N0cnVjdCBzaXBfY21kX3Nl dHN0YSB7Cj4gKwl1OCBpZmlkeDsKPiArCXU4IGluZGV4Owo+ICsJdTggc2V0Owo+ICsJdTggcGh5 bW9kZTsKPiArCXU4IG1hY1tFVEhfQUxFTl07Cj4gKwl1MTYgYWlkOwo+ICsJdTggYW1wZHVfZmFj dG9yOwo+ICsJdTggYW1wZHVfZGVuc2l0eTsKPiArCXUxNiByZXN2Owo+ICt9IF9fcGFja2VkOwo+ ICsKPiArc3RydWN0IHNpcF9jbWRfcHMgewo+ICsJdTggZHRpbV9wZXJpb2Q7Cj4gKwl1OCBtYXhf c2xlZXBfcGVyaW9kOwo+ICsJdTggb247Cj4gKwl1OCByZXN2Owo+ICt9IF9fcGFja2VkOwo+ICsK PiArc3RydWN0IHNpcF9jbWRfc3VzcGVuZCB7Cj4gKwl1OCBzdXNwZW5kOwo+ICsJdTggcmVzdlsz XTsKPiArfSBfX3BhY2tlZDsKPiArCj4gKyNkZWZpbmUgU0lQX0RVTVBfUlBCTV9FUlIJQklUKDAp Cj4gKyNkZWZpbmUgU0lQX1JYQUJPUlRfRklYRUQJQklUKDEpCj4gKyNkZWZpbmUgU0lQX1NVUFBP UlRfQkdTQ0FOCUJJVCgyKQo+ICtzdHJ1Y3Qgc2lwX2V2dF9ib290dXAyIHsKPiArCXUxNiB0eF9i bGtzejsKPiArCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKPiArCXUxNiByeF9ibGtzejsKPiArCXU4 IGNyZWRpdF90b19yZXNlcnZlOwo+ICsJdTggb3B0aW9uczsKPiArCXMxNiBub2lzZV9mbG9vcjsK PiArCXU4IHJlc3ZbMl07Cj4gKwkvKiBhbnl0aGluZyBlbHNlID8gKi8KPiArfSBfX3BhY2tlZDsK PiArCj4gK2VudW0gdHJjX2FtcGR1X3N0YXRlIHsKPiArCVRSQ19UWF9BTVBEVV9TVE9QUEVEID0g MSwKPiArCVRSQ19UWF9BTVBEVV9PUEVSQVRJT05BTCwKPiArCVRSQ19UWF9BTVBEVV9XQUlUX1NU T1AsCj4gKwlUUkNfVFhfQU1QRFVfV0FJVF9PUEVSQVRJT05BTCwKPiArCVRSQ19UWF9BTVBEVV9T VEFSVCwKPiArfTsKPiArCj4gK3N0cnVjdCBzaXBfZXZ0X3RyY19hbXBkdSB7Cj4gKwl1OCBzdGF0 ZTsKPiArCXU4IHRpZDsKPiArCXU4IGFkZHJbRVRIX0FMRU5dOwo+ICt9IF9fcGFja2VkOwo+ICsK PiArc3RydWN0IHNpcF9jbWRfc2V0X3dtbV9wYXJhbXMgewo+ICsJdTggYWNpOwo+ICsJdTggYWlm czsKPiArCXU4IGVjd19taW47Cj4gKwl1OCBlY3dfbWF4Owo+ICsJdTE2IHR4b3BfdXM7Cj4gK30g X19wYWNrZWQ7Cj4gKwo+ICsjZGVmaW5lIFNJUF9BTVBEVV9SWF9TVEFSVAkJMAo+ICsjZGVmaW5l IFNJUF9BTVBEVV9SWF9TVE9QCQkxCj4gKyNkZWZpbmUgU0lQX0FNUERVX1RYX09QRVJBVElPTkFM CTIKPiArI2RlZmluZSBTSVBfQU1QRFVfVFhfU1RPUAkJMwo+ICsKPiArc3RydWN0IHNpcF9jbWRf YW1wZHVfYWN0aW9uIHsKPiArCXU4IGFjdGlvbjsKPiArCXU4IGluZGV4Owo+ICsJdTggdGlkOwo+ ICsJdTggd2luX3NpemU7Cj4gKwl1MTYgc3NuOwo+ICsJdTggYWRkcltFVEhfQUxFTl07Cj4gK30g X19wYWNrZWQ7Cj4gKwo+ICsjZGVmaW5lIFNJUF9UWF9TVF9PSwkJMAo+ICsjZGVmaW5lIFNJUF9U WF9TVF9OT0VCCQkxCj4gKyNkZWZpbmUgU0lQX1RYX1NUX0FDS1RPCQkyCj4gKyNkZWZpbmUgU0lQ X1RYX1NUX0VOQ0VSUgkzCj4gKwo+ICsvL05COiBzaXBfdHhfc3RhdHVzIG11c3QgYmUgNCBieXRl cyBhbGlnbmVkCj4gK3N0cnVjdCBzaXBfdHhfc3RhdHVzIHsKPiArCXUzMiBzaXBfc2VxOwo+ICsJ dTggZXJybm87CQkvKiBzdWNjZXNzIG9yIGZhaWx1cmUgY29kZSAqLwo+ICsJdTggcmF0ZV9pbmRl eDsKPiArCWNoYXIgYWNrX3NpZ25hbDsKPiArCXU4IHBhZDsKPiArfSBfX3BhY2tlZDsKPiArCj4g K3N0cnVjdCBzaXBfZXZ0X3NjYW5fcmVwb3J0IHsKPiArCXUxNiBzY2FuX2lkOwo+ICsJdTE2IGFi b3J0ZWQ7Cj4gK30gX19wYWNrZWQ7Cj4gKwo+ICtzdHJ1Y3Qgc2lwX2V2dF9yb2Mgewo+ICsJdTE2 IHN0YXRlOwkJLy9zdGFydDoxLCBlbmQgOjAKPiArCXUxNiBpc19vazsKPiArfSBfX3BhY2tlZDsK PiArCj4gK3N0cnVjdCBzaXBfZXZ0X3R4aWRsZSB7Cj4gKwl1MzIgbGFzdF9zZXE7Cj4gK30gX19w YWNrZWQ7Cj4gKwo+ICtzdHJ1Y3Qgc2lwX2V2dF9ub2lzZWZsb29yIHsKPiArCXMxNiBub2lzZV9m bG9vcjsKPiArCXUxNiBwYWQ7Cj4gK30gX19wYWNrZWQ7Cj4gKy8qICBmb3IgbWJsayBkaXJlY3Qg bWVtb3J5IGFjY2Vzcywgbm8gbmVlZCBmb3Igc2lwX2hkci4gdHg6IGZpcnN0IDJrIGZvciBjb250 cmwgbXNnLAo+ICsgKiAgcmVzdCBvZiAxNGsgZm9yIGRhdGEuICByeCwgc2FtZS4KPiArICovCj4g Kwo+ICsjZW5kaWYJCQkJLyogX1NJUF9DT01NT05fSF8gKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9zdGFnaW5nL2VzcDgwODkvc2xjX2hvc3RfcmVnaXN0ZXIuaCBiL2RyaXZlcnMvc3RhZ2luZy9l c3A4MDg5L3NsY19ob3N0X3JlZ2lzdGVyLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4 IDAwMDAwMDAwMDAwMC4uOGNmMTM5YzBkN2JjCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZl cnMvc3RhZ2luZy9lc3A4MDg5L3NsY19ob3N0X3JlZ2lzdGVyLmgKPiBAQCAtMCwwICsxLDI2MyBA QAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTEgRXNwcmVzc2lmIFN5c3RlbS4KPiArICog Q29weXJpZ2h0IChjKSAyMDE3IEZyZWUgRWxlY3Ryb25zCj4gKyAqICAgICAgUXVlbnRpbiBTY2h1 bHogPHF1ZW50aW4uc2NodWx6QGZyZWUtZWxlY3Ryb25zLmNvbT4KPiArICoKPiArICogVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkgaXQgdW5kZXIKPiArICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZQo+ICsgKiBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24uCj4gKyAqCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBTTENfSE9TVF9SRUdJU1RF Ul9IX0lOQ0xVREVECj4gKyNkZWZpbmUgU0xDX0hPU1RfUkVHSVNURVJfSF9JTkNMVURFRAo+ICsK PiArLyogI2RlZmluZSBSRUdfU0xDX0hPU1RfQkFTRSAgMHgwMDAwMDAwMCAqLwo+ICsvKiBza2lw IHRoZSB0b2tlbjEsIHNpbmNlIHJlYWRpbmcgaXQgd2lsbCBjbGVhbiB0aGUgY3JlZGl0ICovCj4g KyNkZWZpbmUgUkVHX1NMQ19IT1NUX0JBU0UJCQkweDAwMDAwMDAwCj4gKyNkZWZpbmUgUkVHX1NM Q19CQVNFCQkJCTB4MDAwMDAwMDAKPiArCj4gKyNkZWZpbmUgU0xDX0hPU1RfUEYJCQkJKFJFR19T TENfSE9TVF9CQVNFICsgMHgwKQo+ICsjZGVmaW5lIFNMQ19IT1NUX1RPS0VOX1JEQVRBCQkJKFJF R19TTENfSE9TVF9CQVNFICsgMHg0KQo+ICsjZGVmaW5lIFNMQ19IT1NUX1JYX1BGX0VPRgkJCTB4 MDAwMDAwMEYKPiArI2RlZmluZSBTTENfSE9TVF9SWF9QRl9FT0ZfUwkJCTI4Cj4gKyNkZWZpbmUg U0xDX0hPU1RfVE9LRU4xCQkJCTB4MDAwMDBGRkYKPiArI2RlZmluZSBTTENfSE9TVF9UT0tFTjFf UwkJCTE2Cj4gKyNkZWZpbmUgU0xDX0hPU1RfUlhfUEZfVkFMSUQJCQlCSVQoMTUpCj4gKyNkZWZp bmUgU0xDX0hPU1RfVE9LRU4wCQkJCTB4MDAwMDBGRkYKPiArI2RlZmluZSBTTENfSE9TVF9UT0tF TjBfUwkJCTAKPiArCj4gKyNkZWZpbmUgU0xDX0hPU1RfVE9LRU4wX01BU0sJCQlTTENfSE9TVF9U T0tFTjAKPiArI2RlZmluZSBTTENfSE9TVF9JTlRfUkFXCQkJKFJFR19TTENfSE9TVF9CQVNFICsg MHg4KQo+ICsjZGVmaW5lIFNMQ19IT1NUX0VYVF9CSVQzX0lOVF9SQVcJCUJJVCgyMikKPiArI2Rl ZmluZSBTTENfSE9TVF9FWFRfQklUMl9JTlRfUkFXCQlCSVQoMjEpCj4gKyNkZWZpbmUgU0xDX0hP U1RfRVhUX0JJVDFfSU5UX1JBVwkJQklUKDIwKQo+ICsjZGVmaW5lIFNMQ19IT1NUX1JYRklGT19O T1RfRU1QVFlfSU5UX1JBVwlCSVQoMTkpCj4gKyNkZWZpbmUgU0xDX0hPU1RfUlhfUEZfVkFMSURf SU5UX1JBVwkJQklUKDE4KQo+ICsjZGVmaW5lIFNMQ19IT1NUX1RYX09WRl9JTlRfUkFXCQkJQklU KDE3KQo+ICsjZGVmaW5lIFNMQ19IT1NUX1JYX1VERl9JTlRfUkFXCQkJQklUKDE2KQo+ICsjZGVm aW5lIFNMQ19IT1NUX1RYX1NUQVJUX0lOVF9SQVcJCUJJVCgxNSkKPiArI2RlZmluZSBTTENfSE9T VF9SWF9TVEFSVF9JTlRfUkFXCQlCSVQoMTQpCj4gKyNkZWZpbmUgU0xDX0hPU1RfUlhfRU9GX0lO VF9SQVcJCQlCSVQoMTMpCj4gKyNkZWZpbmUgU0xDX0hPU1RfUlhfU09GX0lOVF9SQVcJCQlCSVQo MTIpCj4gKyNkZWZpbmUgU0xDX0hPU1RfVE9LRU4xXzBUTzFfSU5UX1JBVwkJQklUKDExKQo+ICsj ZGVmaW5lIFNMQ19IT1NUX1RPS0VOMF8wVE8xX0lOVF9SQVcJCUJJVCgxMCkKPiArI2RlZmluZSBT TENfSE9TVF9UT0tFTjFfMVRPMF9JTlRfUkFXCQlCSVQoOSkKPiArI2RlZmluZSBTTENfSE9TVF9U T0tFTjBfMVRPMF9JTlRfUkFXCQlCSVQoOCkKPiArI2RlZmluZSBTTENfSE9TVF9UT0hPU1RfQklU N19JTlRfUkFXCQlCSVQoNykKPiArI2RlZmluZSBTTENfSE9TVF9UT0hPU1RfQklUNl9JTlRfUkFX CQlCSVQoNikKPiArI2RlZmluZSBTTENfSE9TVF9UT0hPU1RfQklUNV9JTlRfUkFXCQlCSVQoNSkK PiArI2RlZmluZSBTTENfSE9TVF9UT0hPU1RfQklUNF9JTlRfUkFXCQlCSVQoNCkKPiArI2RlZmlu ZSBTTENfSE9TVF9UT0hPU1RfQklUM19JTlRfUkFXCQlCSVQoMykKPiArI2RlZmluZSBTTENfSE9T VF9UT0hPU1RfQklUMl9JTlRfUkFXCQlCSVQoMikKPiArI2RlZmluZSBTTENfSE9TVF9UT0hPU1Rf QklUMV9JTlRfUkFXCQlCSVQoMSkKPiArI2RlZmluZSBTTENfSE9TVF9UT0hPU1RfQklUMF9JTlRf UkFXCQlCSVQoMCkKPiArCj4gKyNkZWZpbmUgU0xDX0hPU1RfU1RBVEVfVzAJCQkoUkVHX1NMQ19I T1NUX0JBU0UgKyAweEMpCj4gKyNkZWZpbmUgU0xDX0hPU1RfU1RBVEUzCQkJCTB4MDAwMDAwRkYK PiArI2RlZmluZSBTTENfSE9TVF9TVEFURTNfUwkJCTI0Cj4gKyNkZWZpbmUgU0xDX0hPU1RfU1RB VEUyCQkJCTB4MDAwMDAwRkYKPiArI2RlZmluZSBTTENfSE9TVF9TVEFURTJfUwkJCTE2Cj4gKyNk ZWZpbmUgU0xDX0hPU1RfU1RBVEUxCQkJCTB4MDAwMDAwRkYKPiArI2RlZmluZSBTTENfSE9TVF9T VEFURTFfUwkJCTgKPiArI2RlZmluZSBTTENfSE9TVF9TVEFURTAJCQkJMHgwMDAwMDBGRgo+ICsj ZGVmaW5lIFNMQ19IT1NUX1NUQVRFMF9TCQkJMAo+ICsKPiArI2RlZmluZSBTTENfSE9TVF9TVEFU RV9XMQkJCShSRUdfU0xDX0hPU1RfQkFTRSArIDB4MTApCj4gKyNkZWZpbmUgU0xDX0hPU1RfU1RB VEU3CQkJCTB4MDAwMDAwRkYKPiArI2RlZmluZSBTTENfSE9TVF9TVEFURTdfUwkJCTI0Cj4gKyNk ZWZpbmUgU0xDX0hPU1RfU1RBVEU2CQkJCTB4MDAwMDAwRkYKPiArI2RlZmluZSBTTENfSE9TVF9T VEFURTZfUwkJCTE2Cj4gKyNkZWZpbmUgU0xDX0hPU1RfU1RBVEU1CQkJCTB4MDAwMDAwRkYKPiAr I2RlZmluZSBTTENfSE9TVF9TVEFURTVfUwkJCTgKPiArI2RlZmluZSBTTENfSE9TVF9TVEFURTQJ CQkJMHgwMDAwMDBGRgo+ICsjZGVmaW5lIFNMQ19IT1NUX1NUQVRFNF9TCQkJMAo+ICsKPiArI2Rl ZmluZSBTTENfSE9TVF9DT05GX1cwCQkJKFJFR19TTENfSE9TVF9CQVNFICsgMHgxNCkKPiArI2Rl ZmluZSBTTENfSE9TVF9DT05GMwkJCQkweDAwMDAwMEZGCj4gKyNkZWZpbmUgU0xDX0hPU1RfQ09O RjNfUwkJCTI0Cj4gKyNkZWZpbmUgU0xDX0hPU1RfQ09ORjIJCQkJMHgwMDAwMDBGRgo+ICsjZGVm aW5lIFNMQ19IT1NUX0NPTkYyX1MJCQkxNgo+ICsjZGVmaW5lIFNMQ19IT1NUX0NPTkYxCQkJCTB4 MDAwMDAwRkYKPiArI2RlZmluZSBTTENfSE9TVF9DT05GMV9TCQkJOAo+ICsjZGVmaW5lIFNMQ19I T1NUX0NPTkYwCQkJCTB4MDAwMDAwRkYKPiArI2RlZmluZSBTTENfSE9TVF9DT05GMF9TCQkJMAo+ ICsKPiArI2RlZmluZSBTTENfSE9TVF9DT05GX1cxCQkJKFJFR19TTENfSE9TVF9CQVNFICsgMHgx OCkKPiArI2RlZmluZSBTTENfSE9TVF9DT05GNwkJCQkweDAwMDAwMEZGCj4gKyNkZWZpbmUgU0xD X0hPU1RfQ09ORjdfUwkJCTI0Cj4gKyNkZWZpbmUgU0xDX0hPU1RfQ09ORjYJCQkJMHgwMDAwMDBG Rgo+ICsjZGVmaW5lIFNMQ19IT1NUX0NPTkY2X1MJCQkxNgo+ICsjZGVmaW5lIFNMQ19IT1NUX0NP TkY1CQkJCTB4MDAwMDAwRkYKPiArI2RlZmluZSBTTENfSE9TVF9DT05GNV9TCQkJOAo+ICsjZGVm aW5lIFNMQ19IT1NUX0NPTkY0CQkJCTB4MDAwMDAwRkYKPiArI2RlZmluZSBTTENfSE9TVF9DT05G NF9TCQkJMAo+ICsKPiArI2RlZmluZSBTTENfSE9TVF9JTlRfU1QJCQkJKFJFR19TTENfSE9TVF9C QVNFICsgMHgxQykKPiArI2RlZmluZSBTTENfSE9TVF9SWF9TVAkJCQlCSVQoMjMpCj4gKyNkZWZp bmUgU0xDX0hPU1RfRVhUX0JJVDNfSU5UX1NUCQlCSVQoMjIpCj4gKyNkZWZpbmUgU0xDX0hPU1Rf RVhUX0JJVDJfSU5UX1NUCQlCSVQoMjEpCj4gKyNkZWZpbmUgU0xDX0hPU1RfRVhUX0JJVDFfSU5U X1NUCQlCSVQoMjApCj4gKyNkZWZpbmUgU0xDX0hPU1RfUlhGSUZPX05PVF9FTVBUWV9JTlRfU1QJ QklUKDE5KQo+ICsjZGVmaW5lIFNMQ19IT1NUX1JYX1BGX1ZBTElEX0lOVF9TVAkJQklUKDE4KQo+ ICsjZGVmaW5lIFNMQ19IT1NUX1RYX09WRl9JTlRfU1QJCQlCSVQoMTcpCj4gKyNkZWZpbmUgU0xD X0hPU1RfUlhfVURGX0lOVF9TVAkJCUJJVCgxNikKPiArI2RlZmluZSBTTENfSE9TVF9UWF9TVEFS VF9JTlRfU1QJCUJJVCgxNSkKPiArI2RlZmluZSBTTENfSE9TVF9SWF9TVEFSVF9JTlRfU1QJCUJJ VCgxNCkKPiArI2RlZmluZSBTTENfSE9TVF9SWF9FT0ZfSU5UX1NUCQkJQklUKDEzKQo+ICsjZGVm aW5lIFNMQ19IT1NUX1JYX1NPRl9JTlRfU1QJCQlCSVQoMTIpCj4gKyNkZWZpbmUgU0xDX0hPU1Rf VE9LRU4xXzBUTzFfSU5UX1NUCQlCSVQoMTEpCj4gKyNkZWZpbmUgU0xDX0hPU1RfVE9LRU4wXzBU TzFfSU5UX1NUCQlCSVQoMTApCj4gKyNkZWZpbmUgU0xDX0hPU1RfVE9LRU4xXzFUTzBfSU5UX1NU CQlCSVQoOSkKPiArI2RlZmluZSBTTENfSE9TVF9UT0tFTjBfMVRPMF9JTlRfU1QJCUJJVCg4KQo+ ICsjZGVmaW5lIFNMQ19IT1NUX1RPSE9TVF9CSVQ3X0lOVF9TVAkJQklUKDcpCj4gKyNkZWZpbmUg U0xDX0hPU1RfVE9IT1NUX0JJVDZfSU5UX1NUCQlCSVQoNikKPiArI2RlZmluZSBTTENfSE9TVF9U T0hPU1RfQklUNV9JTlRfU1QJCUJJVCg1KQo+ICsjZGVmaW5lIFNMQ19IT1NUX1RPSE9TVF9CSVQ0 X0lOVF9TVAkJQklUKDQpCj4gKyNkZWZpbmUgU0xDX0hPU1RfVE9IT1NUX0JJVDNfSU5UX1NUCQlC SVQoMykKPiArI2RlZmluZSBTTENfSE9TVF9UT0hPU1RfQklUMl9JTlRfU1QJCUJJVCgyKQo+ICsj ZGVmaW5lIFNMQ19IT1NUX1RPSE9TVF9CSVQxX0lOVF9TVAkJQklUKDEpCj4gKyNkZWZpbmUgU0xD X0hPU1RfVE9IT1NUX0JJVDBfSU5UX1NUCQlCSVQoMCkKPiArCj4gKyNkZWZpbmUgU0xDX0hPU1Rf Q09ORl9XMgkJCShSRUdfU0xDX0hPU1RfQkFTRSArIDB4MjApCj4gKyNkZWZpbmUgU0xDX0hPU1Rf Q09ORjExCQkJCTB4MDAwMDAwRkYKPiArI2RlZmluZSBTTENfSE9TVF9DT05GMTFfUwkJCTI0Cj4g KyNkZWZpbmUgU0xDX0hPU1RfQ09ORjEwCQkJCTB4MDAwMDAwRkYKPiArI2RlZmluZSBTTENfSE9T VF9DT05GMTBfUwkJCTE2Cj4gKyNkZWZpbmUgU0xDX0hPU1RfQ09ORjkJCQkJMHgwMDAwMDBGRgo+ ICsjZGVmaW5lIFNMQ19IT1NUX0NPTkY5X1MJCQk4Cj4gKyNkZWZpbmUgU0xDX0hPU1RfQ09ORjgJ CQkJMHgwMDAwMDBGRgo+ICsjZGVmaW5lIFNMQ19IT1NUX0NPTkY4X1MJCQkwCj4gKwo+ICsjZGVm aW5lIFNMQ19IT1NUX0NPTkZfVzMJCQkoUkVHX1NMQ19IT1NUX0JBU0UgKyAweDI0KQo+ICsjZGVm aW5lIFNMQ19IT1NUX0NPTkYxNQkJCQkweDAwMDAwMEZGCj4gKyNkZWZpbmUgU0xDX0hPU1RfQ09O RjE1X1MJCQkyNAo+ICsjZGVmaW5lIFNMQ19IT1NUX0NPTkYxNAkJCQkweDAwMDAwMEZGCj4gKyNk ZWZpbmUgU0xDX0hPU1RfQ09ORjE0X1MJCQkxNgo+ICsjZGVmaW5lIFNMQ19IT1NUX0NPTkYxMwkJ CQkweDAwMDAwMEZGCj4gKyNkZWZpbmUgU0xDX0hPU1RfQ09ORjEzX1MJCQk4Cj4gKyNkZWZpbmUg U0xDX0hPU1RfQ09ORjEyCQkJCTB4MDAwMDAwRkYKPiArI2RlZmluZSBTTENfSE9TVF9DT05GMTJf UwkJCTAKPiArCj4gKyNkZWZpbmUgU0xDX0hPU1RfR0VOX1RYRE9ORV9JTlQJCQlCSVQoMTYpCj4g KyNkZWZpbmUgU0xDX0hPU1RfR0VOX1JYRE9ORV9JTlQJCQlCSVQoMTcpCj4gKwo+ICsjZGVmaW5l IFNMQ19IT1NUX0NPTkZfVzQJCQkoUkVHX1NMQ19IT1NUX0JBU0UgKyAweDI4KQo+ICsjZGVmaW5l IFNMQ19IT1NUX0NPTkYxOQkJCQkweDAwMDAwMEZGCj4gKyNkZWZpbmUgU0xDX0hPU1RfQ09ORjE5 X1MJCQkyNAo+ICsjZGVmaW5lIFNMQ19IT1NUX0NPTkYxOAkJCQkweDAwMDAwMEZGCj4gKyNkZWZp bmUgU0xDX0hPU1RfQ09ORjE4X1MJCQkxNgo+ICsjZGVmaW5lIFNMQ19IT1NUX0NPTkYxNwkJCQkw eDAwMDAwMEZGCj4gKyNkZWZpbmUgU0xDX0hPU1RfQ09ORjE3X1MJCQk4Cj4gKyNkZWZpbmUgU0xD X0hPU1RfQ09ORjE2CQkJCTB4MDAwMDAwRkYKPiArI2RlZmluZSBTTENfSE9TVF9DT05GMTZfUwkJ CTAKPiArCj4gKyNkZWZpbmUgU0xDX0hPU1RfVE9LRU5fV0RBVEEJCQkoUkVHX1NMQ19IT1NUX0JB U0UgKyAweDJDKQo+ICsjZGVmaW5lIFNMQ19IT1NUX1RPS0VOMV9XRAkJCTB4MDAwMDBGRkYKPiAr I2RlZmluZSBTTENfSE9TVF9UT0tFTjFfV0RfUwkJCTE2Cj4gKyNkZWZpbmUgU0xDX0hPU1RfVE9L RU4wX1dECQkJMHgwMDAwMEZGRgo+ICsjZGVmaW5lIFNMQ19IT1NUX1RPS0VOMF9XRF9TCQkJMAo+ ICsKPiArI2RlZmluZSBTTENfSE9TVF9JTlRfQ0xSCQkJKFJFR19TTENfSE9TVF9CQVNFICsgMHgz MCkKPiArI2RlZmluZSBTTENfSE9TVF9UT0tFTjFfV1IJCQlCSVQoMzEpCj4gKyNkZWZpbmUgU0xD X0hPU1RfVE9LRU4wX1dSCQkJQklUKDMwKQo+ICsjZGVmaW5lIFNMQ19IT1NUX1RPS0VOMV9ERUMJ CQlCSVQoMjkpCj4gKyNkZWZpbmUgU0xDX0hPU1RfVE9LRU4wX0RFQwkJCUJJVCgyOCkKPiArI2Rl ZmluZSBTTENfSE9TVF9FWFRfQklUM19JTlRfQ0xSCQlCSVQoMjIpCj4gKyNkZWZpbmUgU0xDX0hP U1RfRVhUX0JJVDJfSU5UX0NMUgkJQklUKDIxKQo+ICsjZGVmaW5lIFNMQ19IT1NUX0VYVF9CSVQx X0lOVF9DTFIJCUJJVCgyMCkKPiArI2RlZmluZSBTTENfSE9TVF9FWFRfQklUMF9JTlRfQ0xSCQlC SVQoMTkpCj4gKyNkZWZpbmUgU0xDX0hPU1RfUlhfUEZfVkFMSURfSU5UX0NMUgkJQklUKDE4KQo+ ICsjZGVmaW5lIFNMQ19IT1NUX1RYX09WRl9JTlRfQ0xSCQkJQklUKDE3KQo+ICsjZGVmaW5lIFNM Q19IT1NUX1JYX1VERl9JTlRfQ0xSCQkJQklUKDE2KQo+ICsjZGVmaW5lIFNMQ19IT1NUX1RYX1NU QVJUX0lOVF9DTFIJCUJJVCgxNSkKPiArI2RlZmluZSBTTENfSE9TVF9SWF9TVEFSVF9JTlRfQ0xS CQlCSVQoMTQpCj4gKyNkZWZpbmUgU0xDX0hPU1RfUlhfRU9GX0lOVF9DTFIJCQlCSVQoMTMpCj4g KyNkZWZpbmUgU0xDX0hPU1RfUlhfU09GX0lOVF9DTFIJCQlCSVQoMTIpCj4gKyNkZWZpbmUgU0xD X0hPU1RfVE9LRU4xXzBUTzFfSU5UX0NMUgkJQklUKDExKQo+ICsjZGVmaW5lIFNMQ19IT1NUX1RP S0VOMF8wVE8xX0lOVF9DTFIJCUJJVCgxMCkKPiArI2RlZmluZSBTTENfSE9TVF9UT0tFTjFfMVRP MF9JTlRfQ0xSCQlCSVQoOSkKPiArI2RlZmluZSBTTENfSE9TVF9UT0tFTjBfMVRPMF9JTlRfQ0xS CQlCSVQoOCkKPiArI2RlZmluZSBTTENfSE9TVF9UT0hPU1RfQklUN19JTlRfQ0xSCQlCSVQoNykK PiArI2RlZmluZSBTTENfSE9TVF9UT0hPU1RfQklUNl9JTlRfQ0xSCQlCSVQoNikKPiArI2RlZmlu ZSBTTENfSE9TVF9UT0hPU1RfQklUNV9JTlRfQ0xSCQlCSVQoNSkKPiArI2RlZmluZSBTTENfSE9T VF9UT0hPU1RfQklUNF9JTlRfQ0xSCQlCSVQoNCkKPiArI2RlZmluZSBTTENfSE9TVF9UT0hPU1Rf QklUM19JTlRfQ0xSCQlCSVQoMykKPiArI2RlZmluZSBTTENfSE9TVF9UT0hPU1RfQklUMl9JTlRf Q0xSCQlCSVQoMikKPiArI2RlZmluZSBTTENfSE9TVF9UT0hPU1RfQklUMV9JTlRfQ0xSCQlCSVQo MSkKPiArI2RlZmluZSBTTENfSE9TVF9UT0hPU1RfQklUMF9JTlRfQ0xSCQlCSVQoMCkKPiArCj4g KyNkZWZpbmUgU0xDX0hPU1RfSU5UX0VOQQkJCShSRUdfU0xDX0hPU1RfQkFTRSArIDB4MzQpCj4g KyNkZWZpbmUgU0xDX0hPU1RfRVhUX0JJVDNfSU5UX0VOQQkJQklUKDIyKQo+ICsjZGVmaW5lIFNM Q19IT1NUX0VYVF9CSVQyX0lOVF9FTkEJCUJJVCgyMSkKPiArI2RlZmluZSBTTENfSE9TVF9FWFRf QklUMV9JTlRfRU5BCQlCSVQoMjApCj4gKyNkZWZpbmUgU0xDX0hPU1RfRVhUX0JJVDBfSU5UX0VO QQkJQklUKDE5KQo+ICsjZGVmaW5lIFNMQ19IT1NUX1JYX1BGX1ZBTElEX0lOVF9FTkEJCUJJVCgx OCkKPiArI2RlZmluZSBTTENfSE9TVF9UWF9PVkZfSU5UX0VOQQkJCUJJVCgxNykKPiArI2RlZmlu ZSBTTENfSE9TVF9SWF9VREZfSU5UX0VOQQkJCUJJVCgxNikKPiArI2RlZmluZSBTTENfSE9TVF9U WF9TVEFSVF9JTlRfRU5BCQlCSVQoMTUpCj4gKyNkZWZpbmUgU0xDX0hPU1RfUlhfU1RBUlRfSU5U X0VOQQkJQklUKDE0KQo+ICsjZGVmaW5lIFNMQ19IT1NUX1JYX0VPRl9JTlRfRU5BCQkJQklUKDEz KQo+ICsjZGVmaW5lIFNMQ19IT1NUX1JYX1NPRl9JTlRfRU5BCQkJQklUKDEyKQo+ICsjZGVmaW5l IFNMQ19IT1NUX1RPS0VOMV8wVE8xX0lOVF9FTkEJCUJJVCgxMSkKPiArI2RlZmluZSBTTENfSE9T VF9UT0tFTjBfMFRPMV9JTlRfRU5BCQlCSVQoMTApCj4gKyNkZWZpbmUgU0xDX0hPU1RfVE9LRU4x XzFUTzBfSU5UX0VOQQkJQklUKDkpCj4gKyNkZWZpbmUgU0xDX0hPU1RfVE9LRU4wXzFUTzBfSU5U X0VOQQkJQklUKDgpCj4gKyNkZWZpbmUgU0xDX0hPU1RfVE9IT1NUX0JJVDdfSU5UX0VOQQkJQklU KDcpCj4gKyNkZWZpbmUgU0xDX0hPU1RfVE9IT1NUX0JJVDZfSU5UX0VOQQkJQklUKDYpCj4gKyNk ZWZpbmUgU0xDX0hPU1RfVE9IT1NUX0JJVDVfSU5UX0VOQQkJQklUKDUpCj4gKyNkZWZpbmUgU0xD X0hPU1RfVE9IT1NUX0JJVDRfSU5UX0VOQQkJQklUKDQpCj4gKyNkZWZpbmUgU0xDX0hPU1RfVE9I T1NUX0JJVDNfSU5UX0VOQQkJQklUKDMpCj4gKyNkZWZpbmUgU0xDX0hPU1RfVE9IT1NUX0JJVDJf SU5UX0VOQQkJQklUKDIpCj4gKyNkZWZpbmUgU0xDX0hPU1RfVE9IT1NUX0JJVDFfSU5UX0VOQQkJ QklUKDEpCj4gKyNkZWZpbmUgU0xDX0hPU1RfVE9IT1NUX0JJVDBfSU5UX0VOQQkJQklUKDApCj4g Kwo+ICsjZGVmaW5lIFNMQ19IT1NUX0NPTkZfVzUJCQkoUkVHX1NMQ19IT1NUX0JBU0UgKyAweDND KQo+ICsjZGVmaW5lIFNMQ19IT1NUX0NPTkYyMwkJCQkweDAwMDAwMEZGCj4gKyNkZWZpbmUgU0xD X0hPU1RfQ09ORjIzX1MJCQkyNAo+ICsjZGVmaW5lIFNMQ19IT1NUX0NPTkYyMgkJCQkweDAwMDAw MEZGCj4gKyNkZWZpbmUgU0xDX0hPU1RfQ09ORjIyX1MJCQkxNgo+ICsjZGVmaW5lIFNMQ19IT1NU X0NPTkYyMQkJCQkweDAwMDAwMEZGCj4gKyNkZWZpbmUgU0xDX0hPU1RfQ09ORjIxX1MJCQk4Cj4g KyNkZWZpbmUgU0xDX0hPU1RfQ09ORjIwCQkJCTB4MDAwMDAwRkYKPiArI2RlZmluZSBTTENfSE9T VF9DT05GMjBfUwkJCTAKPiArCj4gKyNkZWZpbmUgU0xDX0hPU1RfV0lOX0NNRAkJCShSRUdfU0xD X0hPU1RfQkFTRSArIDB4NDApCj4gKwo+ICsjZGVmaW5lIFNMQ19IT1NUX0RBVEUJCQkJKFJFR19T TENfSE9TVF9CQVNFICsgMHg3OCkKPiArI2RlZmluZSBTTENfSE9TVF9JRAkJCQkoUkVHX1NMQ19I T1NUX0JBU0UgKyAweDdDKQo+ICsKPiArI2RlZmluZSBTTENfQUREUl9XSU5ET1dfQ0xFQVJfTUFT SwkJKH4oMHhmIDw8IDEyKSkKPiArI2RlZmluZSBTTENfRlJPTV9IT1NUX0FERFJfV0lORE9XCQlC SVQoMTIpCj4gKyNkZWZpbmUgU0xDX1RPX0hPU1RfQUREUl9XSU5ET1cJCQkoMHgzIDw8IDEyKQo+ ICsKPiArI2RlZmluZSBTTENfU0VUX0ZST01fSE9TVF9BRERSX1dJTkRPVyh2KSAgIGRvIHsgXAo+ ICsJKHYpICY9IDB4ZmZmZjsgICAgXAo+ICsJKHYpICY9IFNMQ19BRERSX1dJTkRPV19DTEVBUl9N QVNLOyBcCj4gKwkodikgfD0gU0xDX0ZST01fSE9TVF9BRERSX1dJTkRPVzsgXAo+ICt9IHdoaWxl ICgwKQo+ICsKPiArI2RlZmluZSBTTENfU0VUX1RPX0hPU1RfQUREUl9XSU5ET1codikgICBkbyB7 IFwKPiArCSh2KSAmPSAweGZmZmY7ICAgIFwKPiArCSh2KSAmPSBTTENfQUREUl9XSU5ET1dfQ0xF QVJfTUFTSzsgXAo+ICsJKHYpIHw9IFNMQ19UT19IT1NUX0FERFJfV0lORE9XOyBcCj4gK30gd2hp bGUgKDApCj4gKwo+ICsjZGVmaW5lIFNMQ19JTlRfRU5BCQkJCShSRUdfU0xDX0JBU0UgKyAweEMp Cj4gKyNkZWZpbmUgU0xDX1JYX0VPRl9JTlRfRU5BCQkJQklUKDE3KQo+ICsjZGVmaW5lIFNMQ19G UkhPU1RfQklUMl9JTlRfRU5BCQkJQklUKDIpCj4gKwo+ICsjZGVmaW5lIFNMQ19SWF9MSU5LCQkJ CShSRUdfU0xDX0JBU0UgKyAweDI0KQo+ICsjZGVmaW5lIFNMQ19SWExJTktfU1RBUlQJCQlCSVQo MjkpCj4gKwo+ICsjZGVmaW5lIFNMQ19CUklER0VfQ09ORgkJCQkoUkVHX1NMQ19CQVNFICsgMHg0 NCkKPiArI2RlZmluZSBTTENfVFhfUFVTSF9JRExFX05VTQkJCTB4RkZGRgo+ICsjZGVmaW5lIFNM Q19UWF9QVVNIX0lETEVfTlVNX1MJCQkxNgo+ICsjZGVmaW5lIFNMQ19IREFfTUFQXzEyOEsJCQlC SVQoMTMpCj4gKyNkZWZpbmUgU0xDX1RYX0RVTU1ZX01PREUJCQlCSVQoMTIpCj4gKyNkZWZpbmUg U0xDX0ZJRk9fTUFQX0VOQQkJCTB4MDAwMDAwMEYKPiArI2RlZmluZSBTTENfRklGT19NQVBfRU5B X1MJCQk4Cj4gKyNkZWZpbmUgU0xDX1RYRU9GX0VOQQkJCQkweDAwMDAwMDNGCj4gKyNkZWZpbmUg U0xDX1RYRU9GX0VOQV9TCj4gKwo+ICsjZW5kaWYJCQkJLy8gU0xDX0hPU1RfUkVHSVNURVJfSF9J TkNMVURFRAo+IC0tIAo+IDIuMTEuMAo+IAo+IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCj4gZGV2ZWwgbWFpbGluZyBsaXN0Cj4gZGV2ZWxAbGludXhk cml2ZXJwcm9qZWN0Lm9yZwo+IGh0dHA6Ly9kcml2ZXJkZXYubGludXhkcml2ZXJwcm9qZWN0Lm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2RyaXZlcmRldi1kZXZlbApfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpkZXZlbCBtYWlsaW5nIGxpc3QKZGV2ZWxAbGludXhk cml2ZXJwcm9qZWN0Lm9yZwpodHRwOi8vZHJpdmVyZGV2LmxpbnV4ZHJpdmVycHJvamVjdC5vcmcv bWFpbG1hbi9saXN0aW5mby9kcml2ZXJkZXYtZGV2ZWwK