From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: =?utf-8?B?562U5aSNOiDovazlj5E=?= =?utf-8?Q?=3A?= Siliconmotion new kernel driver initial patch Date: Fri, 21 Sep 2012 11:36:08 -0400 Message-ID: <20120921153606.GA4780@phenom.dumpdata.com> References: <4CE6A5494DEECD498EBCD4C5488B1AFCD04CD1@CNDC08.cn.smi.ad> <20120813180314.GE26088@phenom.dumpdata.com> <4CE6A5494DEECD498EBCD4C5488B1AFCD8828A@CNDC08.cn.smi.ad> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-qa0-f42.google.com (mail-qa0-f42.google.com [209.85.216.42]) by gabe.freedesktop.org (Postfix) with ESMTP id 4DB9AA103D for ; Fri, 21 Sep 2012 08:47:18 -0700 (PDT) Received: by qaeb19 with SMTP id b19so1334832qae.15 for ; Fri, 21 Sep 2012 08:47:17 -0700 (PDT) Content-Disposition: inline In-Reply-To: <4CE6A5494DEECD498EBCD4C5488B1AFCD8828A@CNDC08.cn.smi.ad> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org Errors-To: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org To: =?utf-8?B?QWFyb24uQ2hlbiAg6ZmI5L+K5p2w?= Cc: linux-fbdev@vger.kernel.org, =?utf-8?B?Y2Flc2FyLnFpdSDoo5jotZvmtbc=?= , =?utf-8?B?UGF1bC5DaGVuIOmZiOazog==?= , dri-devel@lists.freedesktop.org, Konrad Rzeszutek Wilk List-Id: dri-devel@lists.freedesktop.org T24gRnJpLCBBdWcgMjQsIDIwMTIgYXQgMTA6MzU6MDBBTSArMDgwMCwgQWFyb24uQ2hlbiAg6ZmI 5L+K5p2wIHdyb3RlOgo+IEhpLAo+IAo+ID5XaGF0J3Mgd2l0aCB0aGUgI2lmZGVmIDAgb3IgI2lm ZGVmIDE/Cj4gCj4gPldoeSBpcyB0aGVyZSBhIGJ1bmNoIG9mIGRka3h4eCBzb21ldGhpbmc/IENh biB0aG9zZSBoZWFkZXIgZmlsZXMgYmUgc3F1YXNoZWQgdG9nZXRoZXI/Cj4gCj4gV2UgaGF2ZSBk ZWxldGVkIGFsbCB0aGUgIiNpZmRlZiAwIG9yICNpZmRlZiAxIiBhbmQgY3V0IG91ciBjb2RlcyBp bnRvIHNtYWxsZXIgcGFydHMgaW4gb3JkZXIgdG8gZ2V0IHJldmlld2VkIGVhc2llci4gVGhlcmUg YXJlIGxlc3MgZGRreHh4IHNvbWV0aGluZyBpbiB0aGlzIHBhdGNoLgoKUGxlYXNlIG5leHQgdGlt ZSBwb3N0IGl0IGlubGluZSwgbm90IGFzIGF0dGFjaG1lbnQuCgpBbHNvIGV4cGxhaW4gd2h5L3do ZXJlIHdoYXQgbWFjaGluZXMgdGhpcyBydW5zIG9uLgoKPkZyb20gMzVjOGMxNjc1ZTJiZjZkOGU3 YTcwMmQ2MTU1OGI5OTMxNmFhZWFiZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKPkZyb206IEFh cm9uIENoZW4gPGFhcm9uLmNoZW5Ac2lsaWNvbm1vdGlvbi5jb20+Cj5EYXRlOiBGcmksIDI0IEF1 ZyAyMDEyIDEwOjAzOjU0ICswODAwCj5TdWJqZWN0OiBbUEFUQ0hdIHNpbGljb25tb3Rpb24ga2Vy bmVsIGRyaXZlciBpbml0aWFsIHBhdGNoCj4KPlRoaXMgaXMgdGhlIGluaXRpYWwgcGF0Y2ggZm9y IHNpbGljb25tb3Rpb24ga2VybmVsIGRyaXZlci4gSXQgY2FuIHN1cHBvcnQgU003NTAgYW5kIFNN NzE4LiBJdCBpcyBhIGZyYW1lYnVmZmVyIGRyaXZlci4KPgo+U2lnbmVkLW9mZi1ieTogQWFyb24g Q2hlbiA8YWFyb24uY2hlbkBzaWxpY29ubW90aW9uLmNvbT4KPi0tLQo+IGRyaXZlcnMvdmlkZW8v S2NvbmZpZyAgICAgICAgICAgICAgICAgfCAgIDEzICsKPiBkcml2ZXJzL3ZpZGVvL01ha2VmaWxl ICAgICAgICAgICAgICAgIHwgICAgMSArCj4gZHJpdmVycy92aWRlby9seW54ZmIvTWFrZWZpbGUg ICAgICAgICB8ICAgNjMgKysKPiBkcml2ZXJzL3ZpZGVvL2x5bnhmYi9kZGs3NTAuaCAgICAgICAg IHwgICAzMSArCj4gZHJpdmVycy92aWRlby9seW54ZmIvZGRrNzUwX2NoaXAuYyAgICB8ICA1ODYg KysrKysrKysrKysrCj4gZHJpdmVycy92aWRlby9seW54ZmIvZGRrNzUwX2NoaXAuaCAgICB8ICAg OTcgKysKPiBkcml2ZXJzL3ZpZGVvL2x5bnhmYi9kZGs3NTBfZGlzcGxheS5jIHwgIDI5NSArKysr KysKPiBkcml2ZXJzL3ZpZGVvL2x5bnhmYi9kZGs3NTBfZGlzcGxheS5oIHwgIDEyNCArKysKPiBk cml2ZXJzL3ZpZGVvL2x5bnhmYi9kZGs3NTBfZHZpLmMgICAgIHwgIDExNCArKysKPiBkcml2ZXJz L3ZpZGVvL2x5bnhmYi9kZGs3NTBfZHZpLmggICAgIHwgICA4NCArKwo+IGRyaXZlcnMvdmlkZW8v bHlueGZiL2Rkazc1MF9oZWxwLmMgICAgfCAgIDM3ICsKPiBkcml2ZXJzL3ZpZGVvL2x5bnhmYi9k ZGs3NTBfaGVscC5oICAgIHwgICA0MiArCj4gZHJpdmVycy92aWRlby9seW54ZmIvZGRrNzUwX2h3 aTJjLmMgICB8ICAyOTAgKysrKysrCj4gZHJpdmVycy92aWRlby9seW54ZmIvZGRrNzUwX2h3aTJj LmggICB8ICAgMjggKwo+IGRyaXZlcnMvdmlkZW8vbHlueGZiL2Rkazc1MF9tb2RlLmMgICAgfCAg MjEzICsrKysrCj4gZHJpdmVycy92aWRlby9seW54ZmIvZGRrNzUwX21vZGUuaCAgICB8ICAgNTkg KysKPiBkcml2ZXJzL3ZpZGVvL2x5bnhmYi9kZGs3NTBfcG93ZXIuYyAgIHwgIDI0MyArKysrKwo+ IGRyaXZlcnMvdmlkZW8vbHlueGZiL2Rkazc1MF9wb3dlci5oICAgfCAgIDg1ICsrCj4gZHJpdmVy cy92aWRlby9seW54ZmIvZGRrNzUwX3JlZy5oICAgICB8ICAzNjIgKysrKysrKwo+IGRyaXZlcnMv dmlkZW8vbHlueGZiL2Rkazc1MF9zaWkxNjQuYyAgfCAgNDM1ICsrKysrKysrKwo+IGRyaXZlcnMv dmlkZW8vbHlueGZiL2Rkazc1MF9zaWkxNjQuaCAgfCAgMTg3ICsrKysKPiBkcml2ZXJzL3ZpZGVv L2x5bnhmYi9kZGs3NTBfc3dpMmMuYyAgIHwgIDUyMiArKysrKysrKysrCj4gZHJpdmVycy92aWRl by9seW54ZmIvZGRrNzUwX3N3aTJjLmggICB8ICAgOTggKysKPiBkcml2ZXJzL3ZpZGVvL2x5bnhm Yi9seW54X2FjY2VsLmMgICAgIHwgIDQxNyArKysrKysrKwo+IGRyaXZlcnMvdmlkZW8vbHlueGZi L2x5bnhfYWNjZWwuaCAgICAgfCAgMTYxICsrKysKPiBkcml2ZXJzL3ZpZGVvL2x5bnhmYi9seW54 X2N1cnNvci5jICAgIHwgIDIyMyArKysrKwo+IGRyaXZlcnMvdmlkZW8vbHlueGZiL2x5bnhfY3Vy c29yLmggICAgfCAgIDM2ICsKPiBkcml2ZXJzL3ZpZGVvL2x5bnhmYi9seW54X2Rydi5jICAgICAg IHwgMTY4OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiBkcml2ZXJzL3ZpZGVv L2x5bnhmYi9seW54X2Rydi5oICAgICAgIHwgIDI3MSArKysrKysKPiBkcml2ZXJzL3ZpZGVvL2x5 bnhmYi9seW54X2hlbHAuaCAgICAgIHwgIDExNSArKysKPiBkcml2ZXJzL3ZpZGVvL2x5bnhmYi9s eW54X2h3NzUwLmMgICAgIHwgIDYzMyArKysrKysrKysrKysrCj4gZHJpdmVycy92aWRlby9seW54 ZmIvbHlueF9odzc1MC5oICAgICB8ICAxMjAgKysrCj4gZHJpdmVycy92aWRlby9seW54ZmIvbW9k ZWRiLmMgICAgICAgICB8ICAyMzggKysrKysKPiBkcml2ZXJzL3ZpZGVvL2x5bnhmYi92ZXIuaCAg ICAgICAgICAgIHwgICAzOCArCj4gMzQgZmlsZXMgY2hhbmdlZCwgNzk0OSBpbnNlcnRpb25zKCsp Cj4gY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdmlkZW8vbHlueGZiL01ha2VmaWxlCj4gY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdmlkZW8vbHlueGZiL2Rkazc1MC5oCj4gY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvdmlkZW8vbHlueGZiL2Rkazc1MF9jaGlwLmMKPiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy92aWRlby9seW54ZmIvZGRrNzUwX2NoaXAuaAo+IGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL3ZpZGVvL2x5bnhmYi9kZGs3NTBfZGlzcGxheS5jCj4gY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvdmlkZW8vbHlueGZiL2Rkazc1MF9kaXNwbGF5LmgKPiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy92aWRlby9seW54ZmIvZGRrNzUwX2R2aS5jCj4gY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvdmlkZW8vbHlueGZiL2Rkazc1MF9kdmkuaAo+IGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL3ZpZGVvL2x5bnhmYi9kZGs3NTBfaGVscC5jCj4gY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvdmlkZW8vbHlueGZiL2Rkazc1MF9oZWxwLmgKPiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy92aWRlby9seW54ZmIvZGRrNzUwX2h3aTJjLmMKPiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy92aWRlby9seW54ZmIvZGRrNzUwX2h3aTJjLmgKPiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy92aWRlby9seW54ZmIvZGRrNzUwX21vZGUuYwo+IGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL3ZpZGVvL2x5bnhmYi9kZGs3NTBfbW9kZS5oCj4gY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvdmlkZW8vbHlueGZiL2Rkazc1MF9wb3dlci5jCj4gY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvdmlkZW8vbHlueGZiL2Rkazc1MF9wb3dlci5oCj4gY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvdmlkZW8vbHlueGZiL2Rkazc1MF9yZWcuaAo+IGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL3ZpZGVvL2x5bnhmYi9kZGs3NTBfc2lpMTY0LmMKPiBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy92aWRlby9seW54ZmIvZGRrNzUwX3NpaTE2NC5oCj4gY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvdmlkZW8vbHlueGZiL2Rkazc1MF9zd2kyYy5jCj4gY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvdmlkZW8vbHlueGZiL2Rkazc1MF9zd2kyYy5oCj4gY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvdmlkZW8vbHlueGZiL2x5bnhfYWNjZWwuYwo+IGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL3ZpZGVvL2x5bnhmYi9seW54X2FjY2VsLmgKPiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy92aWRlby9seW54ZmIvbHlueF9jdXJzb3IuYwo+IGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL3ZpZGVvL2x5bnhmYi9seW54X2N1cnNvci5oCj4gY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvdmlkZW8vbHlueGZiL2x5bnhfZHJ2LmMKPiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy92aWRlby9seW54ZmIvbHlueF9kcnYuaAo+IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3Zp ZGVvL2x5bnhmYi9seW54X2hlbHAuaAo+IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3ZpZGVv L2x5bnhmYi9seW54X2h3NzUwLmMKPiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy92aWRlby9s eW54ZmIvbHlueF9odzc1MC5oCj4gY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdmlkZW8vbHlu eGZiL21vZGVkYi5jCj4gY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdmlkZW8vbHlueGZiL3Zl ci5oCj4KPmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL0tjb25maWcgYi9kcml2ZXJzL3ZpZGVv L0tjb25maWcKPmluZGV4IDAyMTdmNzQuLjhjNTJiMWEgMTAwNjQ0Cj4tLS0gYS9kcml2ZXJzL3Zp ZGVvL0tjb25maWcKPisrKyBiL2RyaXZlcnMvdmlkZW8vS2NvbmZpZwo+QEAgLTI0NDQsNiArMjQ0 NCwxOSBAQCBjb25maWcgRkJfUFVWM19VTklHRlgKPiAJICBDaG9vc2UgdGhpcyBvcHRpb24gaWYg eW91IHdhbnQgdG8gdXNlIHRoZSBVbmlnZnggZGV2aWNlIGFzIGEKPiAJICBmcmFtZWJ1ZmZlciBk ZXZpY2UuIFdpdGhvdXQgdGhlIHN1cHBvcnQgb2YgUENJICYgQUdQLgo+IAo+K2NvbmZpZyBGQl9M WU5YRkIKPisJdHJpc3RhdGUgIlNNSSBseW54IHNtNzUwLzcxOC83MTIvNzIyLzUwMiBkaXNwbGF5 IHN1cHBvcnQiCj4rCWRlcGVuZHMgb24gRkIgJiYgUENJCj4rCXNlbGVjdCBGQl9DRkJfSU1BR0VC TElUCj4rCXNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKPisJc2VsZWN0IEZCX0NGQl9DT1BZQVJFQQo+ KwktLS1oZWxwLS0tCj4rCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgZ3JhcGhpYyBib2FyZCB3aXRo IHRoZSBzaWxpY29ubW90aW9uCj4rCSAgc203NTAvc203MTgvc203MTIvc203MjIvc201MDIuIFNh eSBZIGlmIHlvdSBoYXZlIHN1Y2ggYQo+KwkgIGdyYXBoaWMgYm9hcmQuCj4rCSAgVG8gY29tcGls ZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCj4rCSAgbW9kdWxl IHdpbGwgYmUgY2FsbGVkIGx5bnhmYi4KPisKPiBzb3VyY2UgImRyaXZlcnMvdmlkZW8vb21hcC9L Y29uZmlnIgo+IHNvdXJjZSAiZHJpdmVycy92aWRlby9vbWFwMi9LY29uZmlnIgo+IHNvdXJjZSAi ZHJpdmVycy92aWRlby9leHlub3MvS2NvbmZpZyIKPmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVv L01ha2VmaWxlIGIvZHJpdmVycy92aWRlby9NYWtlZmlsZQo+aW5kZXggZWU4ZGFmYi4uYjQwMmJm YiAxMDA2NDQKPi0tLSBhL2RyaXZlcnMvdmlkZW8vTWFrZWZpbGUKPisrKyBiL2RyaXZlcnMvdmlk ZW8vTWFrZWZpbGUKPkBAIC0xNDksNiArMTQ5LDcgQEAgb2JqLSQoQ09ORklHX0ZCX01TTSkgICAg ICAgICAgICAgICs9IG1zbS8KPiBvYmotJChDT05GSUdfRkJfTlVDOTAwKSAgICAgICAgICAgKz0g bnVjOTAwZmIubwo+IG9iai0kKENPTkZJR19GQl9KWjQ3NDApCQkgICs9IGp6NDc0MF9mYi5vCj4g b2JqLSQoQ09ORklHX0ZCX1BVVjNfVU5JR0ZYKSAgICAgICs9IGZiLXB1djMubwo+K29iai0kKENP TkZJR19GQl9MWU5YRkIpCQkgICs9IGx5bnhmYi8KPiAKPiAjIFBsYXRmb3JtIG9yIGZhbGxiYWNr IGRyaXZlcnMgZ28gaGVyZQo+IG9iai0kKENPTkZJR19GQl9VVkVTQSkgICAgICAgICAgICArPSB1 dmVzYWZiLm8KPmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2x5bnhmYi9NYWtlZmlsZSBiL2Ry aXZlcnMvdmlkZW8vbHlueGZiL01ha2VmaWxlCj5uZXcgZmlsZSBtb2RlIDEwMDY0NAo+aW5kZXgg MDAwMDAwMC4uODg1MzA5Nwo+LS0tIC9kZXYvbnVsbAo+KysrIGIvZHJpdmVycy92aWRlby9seW54 ZmIvTWFrZWZpbGUKPkBAIC0wLDAgKzEsNjMgQEAKPisjCj4rIyBNYWtlZmlsZSBmb3IgbHlueCBm cmFtZSBidWZmZXIKPisjIAkJCQkJLWJ5IE1vbmsubGl1Cj4rIwo+K2lmZXEgKCQoS0VSTkVMUkVM RUFTRSksKQo+Kwo+K2lmZXEgKCQoa2VybmVsKSwpCj4rIyBidWlsZCB0aGUgZHJpdmVyIHdpdGgg a2VybmVsIHZlcnNpb24gY3VycmVybnRseSB1c2luZwo+K2tudiA6PSQoc2hlbGwgdW5hbWUgLXIp Cj4rZWxzZQo+KyMgdXNlciB3YW50IHRvIGJ1aWxkIHRoZSBkcml2ZXIgYmFzZWQgb24gc3BlY2lm aWMga2VybmVsIHZlcnNpb24KPitrbnYgOj0kKGtlcm5lbCkKPitlbmRpZgo+Kwo+K0tFUk5FTERJ UiA6PS9saWIvbW9kdWxlcy8kKGtudikvYnVpbGQKPitQV0QgOj0gJChzaGVsbCBwd2QpCj4rCj4r ZGVmYXVsdDoKPisJJChNQUtFKSAtQyAkKEtFUk5FTERJUikgTT0kKFBXRCkgQ09ORklHX0ZCX0xZ TlhGQj1tIG1vZHVsZXMKPitpbnN0YWxsOmRlZmF1bHQKPisJJChNQUtFKSAtQyAkKEtFUk5FTERJ UikgTT0kKFBXRCkgQ09ORklHX0ZCX0xZTlhGQj1tIG1vZHVsZXNfaW5zdGFsbAo+K2NsZWFuOgo+ KwkkKE1BS0UpIC1DICQoS0VSTkVMRElSKSBNPSQoUFdEKSBjbGVhbgo+K2Vsc2UKPisKCllvdSBk b24ndCBuZWVkIGFsbCBvZiB0aGF0LgoKPitvYmotJChDT05GSUdfRkJfTFlOWEZCKSArPSBseW54 ZmIubwo+Kwo+K2x5bnhmYi15IDo9IGx5bnhfZHJ2Lm8gbHlueF9odzc1MC5vIGx5bnhfYWNjZWwu byBseW54X2N1cnNvci5vCj4rbHlueGZiLXkgKz0gZGRrNzUwX2NoaXAubyBkZGs3NTBfcG93ZXIu byBkZGs3NTBfbW9kZS5vIGRkazc1MF9kaXNwbGF5Lm8gZGRrNzUwX2hlbHAubwo+K2x5bnhmYi15 ICs9ICBkZGs3NTBfc3dpMmMubwoKVGhvc2Ugc2hvdWxkIHN1ZmZpY2UuIE9yIHBlcmhhcHM6Cm9i ai0kKENPTkZJR19GQl9MWU5YRkIpICs9IGx5bnhmYi5vIGx5bnhfZHJ2Lm8gbHlueF9odzc1MC5v IGx5bnhfYWNjZWwubyBseW54X2N1cnNvci5vCgkJCWRkazc1MF9jaGlwLm8gZGRrNzUwX3Bvd2Vy Lm8gZGRrNzUwX21vZGUubyBkZGs3NTBfZGlzcGxheS5vIGRkazc1MF9oZWxwLm8KCmFuZCB0aGF0 IGlzIGl0LgoKPisKPisKPitFWFRSQV9DRkxBR1MgKz0gLURPUEVOU09VUkNFCj4rCj4raWZuZXEg KCQobm9kdmkpLDEpCj4rbHlueGZiLXkgKz0gZGRrNzUwX3NpaTE2NC5vCj4rbHlueGZiLXkgKz0g ZGRrNzUwX2R2aS5vCj4rRVhUUkFfQ0ZMQUdTICs9IC1EVVNFX0RWSUNISVAKPitlbHNlCj4rZW5k aWYKPisKPisjIGlmIHVzZXIgZGVmaW5lIHN3aTJjPTEsdGhlbiBmb3Igc203NTAvc203MTgsaXRz IGR2aSBjaGlwIChzaWkxNjQpIHdpbGwgYmUgaW5pdGlsaXplZCBieSBzd2kyYwo+KyMgYnV0IGZv ciA3NTBsZSwgYWx3YXlzIHN3aTJjIHVzZWQgdG8gc2V0dXAgaXRzIDczMDEgZHZpIGNoaXAKPitp Zm5lcSAoJChzd2kyYyksMSkKPitseW54ZmIteSArPSBkZGs3NTBfaHdpMmMubwo+K0VYVFJBX0NG TEFHUyArPSAtRFVTRV9IV19JMkMKPitlbmRpZgo+Kwo+K2x5bnhmYi1vYmpzIDo9ICQobHlueGZi LXkpCj4rCj4raWZlcSAoJChkZWJ1ZyksMSkKPisjQ09ORklHX0ZCX0xZTlhGQl9ERUJVRz15Cj4r RVhUUkFfQ0ZMQUdTICs9IC1EREVCVUc9MQo+K2VuZGlmCj4rCj4raWZlcSAoJChkZWJ1ZyksMikK PitFWFRSQV9DRkxBR1MgKz0gLURERUJVRz0yCj4rZW5kaWYKPisKPisjaWZkZWYgQ09ORklHX0ZC X0xZTlhGQl9ERUJVRwo+KyNlbmRpZgo+Kwo+K2VuZGlmCj5kaWZmIC0tZ2l0IGEvZHJpdmVycy92 aWRlby9seW54ZmIvZGRrNzUwLmggYi9kcml2ZXJzL3ZpZGVvL2x5bnhmYi9kZGs3NTAuaAo+bmV3 IGZpbGUgbW9kZSAxMDA2NDQKPmluZGV4IDAwMDAwMDAuLmZkM2UyNzkKPi0tLSAvZGV2L251bGwK PisrKyBiL2RyaXZlcnMvdmlkZW8vbHlueGZiL2Rkazc1MC5oCj5AQCAtMCwwICsxLDMxIEBACj4r LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioKPisqQ29weXJpZ2h0IChjKSAyMDEyIGJ5IFNpbGljb24gTW90aW9uLCBJbmMu IChTTUkpCj4rKlBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0 byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKPisqb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNz b2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKPisq aW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxp bWl0YXRpb24gdGhlIHJpZ2h0cyB0bwo+Kyp1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxp c2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcwo+KypvZiB0aGUg U29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBm dXJuaXNoZWQgdG8KPisqZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25z Ogo+KyoKPisqVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFO VFkgT0YgQU5ZIEtJTkQsCj4rKkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1Qg TElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUwo+KypPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAo+KypOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBF VkVOVCBTSEFMTCBNaWxsLkNoZW4gYW5kIE1vbmsuTGl1IE9SIENPUFlSSUdIVAo+KypIT0xERVJT IEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKPisq V0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklT SU5HCj4rKkZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9S IFRIRSBVU0UgT1IKPisqT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgo+KyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovCj4rI2lmbmRlZiBEREs3NTBfSF9fCj4rI2RlZmluZSBEREs3NTBfSF9fCj4rI2luY2x1ZGUg ImRkazc1MF9yZWcuaCIKPisjaW5jbHVkZSAiZGRrNzUwX21vZGUuaCIKPisjaW5jbHVkZSAiZGRr NzUwX2NoaXAuaCIKPisjaW5jbHVkZSAiZGRrNzUwX2Rpc3BsYXkuaCIKPisjaW5jbHVkZSAiZGRr NzUwX3Bvd2VyLmgiCj4rI2luY2x1ZGUgImRkazc1MF9oZWxwLmgiCj4rI2lmZGVmIFVTRV9IV19J MkMKPisjaW5jbHVkZSAiZGRrNzUwX2h3aTJjLmgiCj4rI2VuZGlmCj4rI2luY2x1ZGUgImRkazc1 MF9zd2kyYy5oIgo+KyNlbmRpZgoKVGhpcyBoZWFkZXIgZmlsZSBpcyBub3QgYWRkaW5nIGFueXRp bmcgdG8gdGhlIGRyaXZlci4gV2h5IGRvbid0IHlvdSBqdXN0CmluY2x1ZGUgdGhvc2UgI2luY2x1 ZGVzIGluIHRoZSBDIGNvZGU/Cgo+ZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbHlueGZiL2Rk azc1MF9jaGlwLmMgYi9kcml2ZXJzL3ZpZGVvL2x5bnhmYi9kZGs3NTBfY2hpcC5jCj5uZXcgZmls ZSBtb2RlIDEwMDY0NAo+aW5kZXggMDAwMDAwMC4uNGVmZjVjNgo+LS0tIC9kZXYvbnVsbAo+Kysr IGIvZHJpdmVycy92aWRlby9seW54ZmIvZGRrNzUwX2NoaXAuYwo+QEAgLTAsMCArMSw1ODYgQEAK PisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKgo+KypDb3B5cmlnaHQgKGMpIDIwMTIgYnkgU2lsaWNvbiBNb3Rpb24sIElu Yy4gKFNNSSkKPisqUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2Us IHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQo+KypvZiB0aGlzIHNvZnR3YXJlIGFuZCBh c3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAo+ KyppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQg bGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCj4rKnVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVi bGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzCj4rKm9mIHRo ZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlz IGZ1cm5pc2hlZCB0bwo+KypkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnM6Cj4rKgo+KypUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJS QU5UWSBPRiBBTlkgS0lORCwKPisqRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5P VCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCj4rKk9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECj4rKk5PTklORlJJTkdFTUVOVC4gIElOIE5P IEVWRU5UIFNIQUxMIE1pbGwuQ2hlbiBhbmQgTW9uay5MaXUgT1IgQ09QWVJJR0hUCj4rKkhPTERF UlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAo+ KypXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFS SVNJTkcKPisqRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUg T1IgVEhFIFVTRSBPUgo+KypPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCj4rKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKi8KPisjaW5jbHVkZSAiZGRrNzUwX2hlbHAuaCIKPisjaW5jbHVkZSAiZGRrNzUwX3JlZy5o Igo+KyNpbmNsdWRlICJkZGs3NTBfY2hpcC5oIgo+KyNpbmNsdWRlICJkZGs3NTBfcG93ZXIuaCIK Pit0eXBlZGVmIHN0cnVjdCBfcGxsY2FscGFyYW17CgpZb3UgZGlkbid0IHJ1biBjbGVhbnBhdGNo IG9uIHRoaXMgcGF0Y2ggc2VyaWVzIGF0IGFsbCBkaWQgeW91PyBQbGVhc2UKZG8gdGhhdCBhbmQg dGhlbiByZXBvc3QgaXQuCj4rCXVuc2lnbmVkIGNoYXIgcG93ZXI7LyogZCA6IDB+IDYqLwo+Kwl1 bnNpZ25lZCBjaGFyIHBvZDsKPisJdW5zaWduZWQgY2hhciBvZDsKPisJdW5zaWduZWQgY2hhciB2 YWx1ZTsvKiB2YWx1ZSBvZiAgMiBwb3dlciBkICgyXmQpICovCj4rfQo+K3BsbGNhbHBhcmFtOwo+ Kwo+Kwo+K2xvZ2ljYWxfY2hpcF90eXBlX3QgZ2V0Q2hpcFR5cGUoKQo+K3sKPisJdW5zaWduZWQg c2hvcnQgcGh5c2ljYWxJRDsKPisJY2hhciBwaHlzaWNhbFJldjsKPisJbG9naWNhbF9jaGlwX3R5 cGVfdCBjaGlwOwo+Kwo+KwlwaHlzaWNhbElEID0gZGV2SWQ3NTA7LyogZWl0aGVyIDB4NzE4IG9y IDB4NzUwICovCj4rCXBoeXNpY2FsUmV2ID0gcmV2SWQ3NTA7Cj4rCj4rCWlmIChwaHlzaWNhbElE ID09IDB4NzE4KSB7Cj4rCQljaGlwID0gU003MTg7Cj4rCX0gZWxzZSBpZiAocGh5c2ljYWxJRCA9 PSAweDc1MCkgewo+KwkJY2hpcCA9IFNNNzUwOwo+KwkJLyogU003NTAgYW5kIFNNNzUwTEUgYXJl IGRpZmZlcmVudCBpbiB0aGVpciByZXZpc2lvbiBJRCBvbmx5LiAqLwo+KwkJaWYgKHBoeXNpY2Fs UmV2ID09IFNNNzUwTEVfUkVWSVNJT05fSUQpIHsKPisJCQljaGlwID0gU003NTBMRTsKPisJCX0K PisJfSBlbHNlewo+KwkJY2hpcCA9IFNNX1VOS05PV047Cj4rCX0KPisKPisJcmV0dXJuIGNoaXA7 Cj4rfQo+Kwo+Kwo+K2lubGluZSB1bnNpZ25lZCBpbnQgdHdvVG9Qb3dlck9meCh1bnNpZ25lZCBs b25nIHgpCgpJIHRoaW5rIHRoZXJlIGlzIGEgbmljZSBtYWNybyBmb3IgdGhpcy4gRGlkIHlvdSBz ZWFyY2ggaW4gdGhlIApjb2RlIGFscmVhZHkgZm9yIHRoaXM/Cgo+K3sKPisJdW5zaWduZWQgbG9u ZyBpOwo+Kwl1bnNpZ25lZCBsb25nIHJlc3VsdCA9IDE7Cj4rCj4rCWZvciAoaSA9IDE7IGkgPD0g eDsgaSsrKQo+KwkJcmVzdWx0ICo9IDI7Cj4rCXJldHVybiByZXN1bHQ7Cj4rfQo+Kwo+K2lubGlu ZSB1bnNpZ25lZCBpbnQgY2FsY1BMTChwbGxfdmFsdWVfdCAqcFBMTCkKPit7Cj4rCXJldHVybiBw UExMLT5pbnB1dEZyZXEgKiBwUExMLT5NIC8gcFBMTC0+TiAvIHR3b1RvUG93ZXJPZngocFBMTC0+ T0QpIC8gdHdvVG9Qb3dlck9meChwUExMLT5QT0QpOwo+K30KPisKPit1bnNpZ25lZCBpbnQgZ2V0 UGxsVmFsdWUoY2xvY2tfdHlwZV90IGNsb2NrVHlwZSwgcGxsX3ZhbHVlX3QgKnBQTEwpCj4rewo+ Kwl1bnNpZ25lZCBpbnQgdWxQbGxSZWcgPSAwOwo+Kwo+KwlwUExMLT5pbnB1dEZyZXEgPSBERUZB VUxUX0lOUFVUX0NMT0NLOwo+KwlwUExMLT5jbG9ja1R5cGUgPSBjbG9ja1R5cGU7Cj4rCj4rCXN3 aXRjaCAoY2xvY2tUeXBlKSB7Cj4rCWNhc2UgTVhDTEtfUExMOgo+KwkJdWxQbGxSZWcgPSBQRUVL MzIoTVhDTEtfUExMX0NUUkwpOwo+KwkJYnJlYWs7Cj4rCWNhc2UgUFJJTUFSWV9QTEw6Cj4rCQl1 bFBsbFJlZyA9IFBFRUszMihQQU5FTF9QTExfQ1RSTCk7Cj4rCQlicmVhazsKPisJY2FzZSBTRUNP TkRBUllfUExMOgo+KwkJdWxQbGxSZWcgPSBQRUVLMzIoQ1JUX1BMTF9DVFJMKTsKPisJCWJyZWFr Owo+KwljYXNlIFZHQTBfUExMOgo+KwkJdWxQbGxSZWcgPSBQRUVLMzIoVkdBX1BMTDBfQ1RSTCk7 Cj4rCQlicmVhazsKPisJY2FzZSBWR0ExX1BMTDoKPisJCXVsUGxsUmVnID0gUEVFSzMyKFZHQV9Q TEwxX0NUUkwpOwo+KwkJYnJlYWs7Cj4rCX0KPisJcFBMTC0+TSA9IDI1NSYodWxQbGxSZWcgPj4g UEFORUxfUExMX0NUUkxfTV9MU0IpOwo+KwlwUExMLT5OID0gMTUmKHVsUGxsUmVnID4+IFBBTkVM X1BMTF9DVFJMX05fTFNCKTsKPisJcFBMTC0+T0QgPSAzJih1bFBsbFJlZyA+PiBQQU5FTF9QTExf Q1RSTF9PRF9MU0IpOwo+KwlwUExMLT5QT0QgPSAzJih1bFBsbFJlZyA+PiBQQU5FTF9QTExfQ1RS TF9QT0RfTFNCKTsKPisKPisJcmV0dXJuIGNhbGNQTEwocFBMTCk7Cj4rfQo+Kwo+Kwo+K3Vuc2ln bmVkIGludCBnZXRDaGlwQ2xvY2soKQo+K3sKPisJcGxsX3ZhbHVlX3QgcGxsOwo+KwlpZiAoZ2V0 Q2hpcFR5cGUoKSA9PSBTTTc1MExFKQo+KwkJcmV0dXJuIE1IeigxMzApOwo+Kwo+KwlyZXR1cm4g Z2V0UGxsVmFsdWUoTVhDTEtfUExMLCAmcGxsKTsKPit9Cj4rCj4rCj4rLyoKPisgKiBUaGlzIGZ1 bmN0aW9uIHNldCB1cCB0aGUgbWFpbiBjaGlwIGNsb2NrLgo+KyAqCj4rICogSW5wdXQ6IEZyZXF1 ZW5jeSB0byBiZSBzZXQuCj4rICovCj4rdm9pZCBzZXRDaGlwQ2xvY2sodW5zaWduZWQgaW50IGZy ZXF1ZW5jeSkKPit7Cj4rCXBsbF92YWx1ZV90IHBsbDsKPisJdW5zaWduZWQgaW50IHVsQWN0dWFs TXhDbGs7Cj4rCj4rCS8qIENoZW9rXzA1MDk6IEZvciBTTTc1MExFLCB0aGUgY2hpcCBjbG9jayBp cyBmaXhlZC4gTm90aGluZyB0byBzZXQuICovCj4rCWlmIChnZXRDaGlwVHlwZSgpID09IFNNNzUw TEUpCj4rCQlyZXR1cm47Cj4rCj4rCj4rCWlmIChmcmVxdWVuY3kgIT0gMCkgewo+KwkJLyoKPisJ CSAqIFNldCB1cCBQTEwsIGEgc3RydWN0dXJlIHRvIGhvbGQgdGhlIHZhbHVlIHRvIGJlIHNldCBp biBjbG9ja3MuCj4rCQkgKi8KPisJCXBsbC5pbnB1dEZyZXEgPSBERUZBVUxUX0lOUFVUX0NMT0NL OyAvKiBEZWZpbmVkIGluIENMT0NLLkggKi8KCkkgZG9uJ3QgdGhpbmsgdGhlICdDTE9DSy5IJyBm aWxlIGlzIHByZXNlbnQgdGhlcmUuCj4rCQlwbGwuY2xvY2tUeXBlID0gTVhDTEtfUExMOwo+Kwo+ KwkJLyoKPisJCSAqIENhbGwgY2FsY1BsbFZhbHVlKCkgdG8gZmlsbCB1cCB0aGUgb3RoZXIgZmll bGRzIGZvciBQTEwgc3RydWN0dXJlLgo+KwkJICogU29tZXRpbWUsIHRoZSBjaGlwIGNhbm5vdCBz ZXQgdXAgdGhlIGV4YWN0IGNsb2NrIHJlcXVpcmVkIGJ5IFVzZXIuCj4rCQkgKiBSZXR1cm4gdmFs dWUgZnJvbSBjYWxjUGxsVmFsdWUoKSBnaXZlcyB0aGUgYWN0dWFsIHBvc3NpYmxlIGNsb2NrLgoK U28gYW4gZXN0aW1hdGlvbiB0aGVuPyAKPisJCSAqLwo+KwkJdWxBY3R1YWxNeENsayA9IGNhbGNQ bGxWYWx1ZShmcmVxdWVuY3ksICZwbGwpOwo+Kwo+KwkJLyogTWFzdGVyIENsb2NrIENvbnRyb2w6 IE1YQ0xLX1BMTCAqLwo+KwkJUE9LRTMyKE1YQ0xLX1BMTF9DVFJMLCBmb3JtYXRQbGxSZWcoJnBs bCkpOwo+Kwl9Cj4rfQo+Kwo+Kwo+Kwo+K3ZvaWQgc2V0TWVtb3J5Q2xvY2sodW5zaWduZWQgaW50 IGZyZXF1ZW5jeSkKPit7Cj4rCXVuc2lnbmVkIGludCB1bFJlZywgZGl2aXNvcjsKPisKPisJLyog Q2hlb2tfMDUwOTogRm9yIFNNNzUwTEUsIHRoZSBtZW1vcnkgY2xvY2sgaXMgZml4ZWQuIE5vdGhp bmcgdG8gc2V0LiAqLwo+KwlpZiAoZ2V0Q2hpcFR5cGUoKSA9PSBTTTc1MExFKQo+KwkJcmV0dXJu Owo+Kwo+KwlpZiAoZnJlcXVlbmN5ICE9IDApIHsKPisJCS8qIFNldCB0aGUgZnJlcXVlbmN5IHRv IHRoZSBtYXhpbXVtIGZyZXF1ZW5jeSB0aGF0IHRoZSBERFIgTWVtb3J5IGNhbiB0YWtlCj4rCQkg ICB3aGljaCBpcyAzMzZNSHouICovCj4rCQlpZiAoZnJlcXVlbmN5ID4gTUh6KDMzNikpCj4rCQkJ ZnJlcXVlbmN5ID0gTUh6KDMzNik7Cj4rCQkvKiBDYWxjdWxhdGUgdGhlIGRpdmlzb3IgKi8KPisJ CWRpdmlzb3IgPSAodW5zaWduZWQgaW50KSByb3VuZGVkRGl2KGdldENoaXBDbG9jaygpLCBmcmVx dWVuY3kpOwo+KwkJLyogU2V0IHRoZSBjb3JyZXNwb25kaW5nIGRpdmlzb3IgaW4gdGhlIHJlZ2lz dGVyLiAqLwo+KwkJdWxSZWcgPSBQRUVLMzIoQ1VSUkVOVF9HQVRFKTsKPisJCXN3aXRjaCAoZGl2 aXNvcikgewo+KwkJZGVmYXVsdDoKPisJCWNhc2UgMToKPisJCQl1bFJlZyA9IHVsUmVnJih+KDEg PDwgQ1VSUkVOVF9HQVRFX00yWENMS19MU0IpKTsKPisJCQlicmVhazsKPisJCWNhc2UgMjoKPisJ CQl1bFJlZyA9IHVsUmVnfCgxIDw8IENVUlJFTlRfR0FURV9NMlhDTEtfTFNCKTsKPisJCQlicmVh azsKPisJCWNhc2UgMzoKPisJCQl1bFJlZyA9IHVsUmVnJih+KDMgPDwgQ1VSUkVOVF9HQVRFX00y WENMS19MU0IpKTsKPisJCQl1bFJlZyA9IHVsUmVnfCgyIDw8IENVUlJFTlRfR0FURV9NMlhDTEtf TFNCKTsKPisJCQlicmVhazsKPisJCWNhc2UgNDoKPisJCQl1bFJlZyA9IHVsUmVnfCgzIDw8IENV UlJFTlRfR0FURV9NMlhDTEtfTFNCKTsKPisJCQlicmVhazsKPisJCX0KPisJCXNldEN1cnJlbnRH YXRlKHVsUmVnKTsKPisJfQo+K30KPisKPisKPisvKgo+KyAqIFRoaXMgZnVuY3Rpb24gc2V0IHVw IHRoZSBtYXN0ZXIgY2xvY2sgKE1DTEspLgo+KyAqCj4rICogSW5wdXQ6IEZyZXF1ZW5jeSB0byBi ZSBzZXQuCj4rICoKPisgKiBOT1RFOgo+KyAqICAgICAgVGhlIG1heGltdW0gZnJlcXVlbmN5IHRo ZSBlbmdpbmUgY2FuIHJ1biBpcyAxNjhNSHouCj4rICovCj4rdm9pZCBzZXRNYXN0ZXJDbG9jayh1 bnNpZ25lZCBpbnQgZnJlcXVlbmN5KQo+K3sKPisJdW5zaWduZWQgaW50IHVsUmVnLCBkaXZpc29y Owo+Kwo+KwkvKiBDaGVva18wNTA5OiBGb3IgU003NTBMRSwgdGhlIG1lbW9yeSBjbG9jayBpcyBm aXhlZC4gTm90aGluZyB0byBzZXQuICovCj4rCWlmIChnZXRDaGlwVHlwZSgpID09IFNNNzUwTEUp Cj4rCQlyZXR1cm47Cj4rCj4rCWlmIChmcmVxdWVuY3kgIT0gMCkgewo+KwkJLyogU2V0IHRoZSBm cmVxdWVuY3kgdG8gdGhlIG1heGltdW0gZnJlcXVlbmN5IHRoYXQgdGhlIFNNNzUwIGVuZ2luZSBj YW4KPisJCSAgIHJ1biwgd2hpY2ggaXMgYWJvdXQgMTkwIE1Iei4gKi8KPisJCWlmIChmcmVxdWVu Y3kgPiBNSHooMTkwKSkKPisJCQlmcmVxdWVuY3kgPSBNSHooMTkwKTsKPisJCS8qIENhbGN1bGF0 ZSB0aGUgZGl2aXNvciAqLwo+KwkJZGl2aXNvciA9ICh1bnNpZ25lZCBpbnQpIHJvdW5kZWREaXYo Z2V0Q2hpcENsb2NrKCksIGZyZXF1ZW5jeSk7Cj4rCQkvKiBTZXQgdGhlIGNvcnJlc3BvbmRpbmcg ZGl2aXNvciBpbiB0aGUgcmVnaXN0ZXIuICovCj4rCQl1bFJlZyA9IFBFRUszMihDVVJSRU5UX0dB VEUpOwo+KwkJc3dpdGNoIChkaXZpc29yKSB7Cj4rCQlkZWZhdWx0Ogo+KwkJY2FzZSAzOgo+KwkJ CXVsUmVnID0gdWxSZWcmKH4oMSA8PCBDVVJSRU5UX0dBVEVfTUNMS19MU0IpKTsKPisJCQlicmVh azsKPisJCWNhc2UgNDoKPisJCQl1bFJlZyA9IHVsUmVnfCgxIDw8IENVUlJFTlRfR0FURV9NQ0xL X0xTQik7Cj4rCQkJYnJlYWs7Cj4rCQljYXNlIDY6Cj4rCQkJdWxSZWcgPSB1bFJlZyYofigzIDw8 IENVUlJFTlRfR0FURV9NQ0xLX0xTQikpOwo+KwkJCXVsUmVnID0gdWxSZWd8KDIgPDwgQ1VSUkVO VF9HQVRFX01DTEtfTFNCKTsKPisJCQlicmVhazsKPisJCWNhc2UgODoKPisJCQl1bFJlZyA9IHVs UmVnfCgzIDw8IENVUlJFTlRfR0FURV9NQ0xLX0xTQik7Cj4rCQkJYnJlYWs7Cj4rCQl9Cj4rCQlz ZXRDdXJyZW50R2F0ZSh1bFJlZyk7Cj4rCX0KPit9Cj4rCj4rCj4rdW5zaWduZWQgaW50IGRkazc1 MF9nZXRWTVNpemUoKQo+K3sKPisJdW5zaWduZWQgaW50IHJlZzsKPisJdW5zaWduZWQgaW50IGRh dGE7Cj4rCj4rCS8qIHNtNzUwbGUgb25seSB1c2UgNjQgbWIgbWVtb3J5Ki8KPisJaWYgKGdldENo aXBUeXBlKCkgPT0gU003NTBMRSkKPisJCXJldHVybiBNQig2NCk7Cj4rCj4rCS8qIGZvciA3NTAs IGFsd2F5cyB1c2UgcG93ZXIgbW9kZTAqLwo+KwlyZWcgPSBQRUVLMzIoTU9ERTBfR0FURSk7Cj4r CXJlZyA9IHJlZ3woMSA8PCBNT0RFMF9HQVRFX0dQSU9fTFNCKTsKPisJUE9LRTMyKE1PREUwX0dB VEUsIHJlZyk7Cj4rCj4rCS8qIGdldCBmcmFtZSBidWZmZXIgc2l6ZSBmcm9tIEdQSU8gKi8KPisJ cmVnID0gMyYoUEVFSzMyKE1JU0NfQ1RSTCkgPj4gTUlTQ19DVFJMX0xPQ0FMTUVNX1NJWkVfTFNC KTsKPisJc3dpdGNoIChyZWcpIHsKPisJY2FzZSBNSVNDX0NUUkxfTE9DQUxNRU1fU0laRV84TToK PisJCWRhdGEgPSBNQig4KTsKPisJCWJyZWFrOyAvKiA4ICBNZWdhIGJ5dGUgKi8KPisJY2FzZSBN SVNDX0NUUkxfTE9DQUxNRU1fU0laRV8xNk06Cj4rCQlkYXRhID0gTUIoMTYpOwo+KwkJYnJlYWs7 IC8qIDE2IE1lZ2EgYnl0ZSAqLwo+KwljYXNlIE1JU0NfQ1RSTF9MT0NBTE1FTV9TSVpFXzMyTToK PisJCWRhdGEgPSBNQigzMik7Cj4rCQlicmVhazsgLyogMzIgTWVnYSBieXRlICovCj4rCWNhc2Ug TUlTQ19DVFJMX0xPQ0FMTUVNX1NJWkVfNjRNOgo+KwkJZGF0YSA9IE1CKDY0KTsKPisJCWJyZWFr OyAvKiA2NCBNZWdhIGJ5dGUgKi8KPisJZGVmYXVsdDoKPisJCWRhdGEgPSAwOwo+KwkJYnJlYWs7 Cj4rCX0KPisJcmV0dXJuIGRhdGE7Cj4rCj4rfQo+Kwo+K2ludCBkZGs3NTBfaW5pdEh3KGluaXRj aGlwX3BhcmFtX3QgKnBJbml0UGFyYW0pCj4rewo+Kwo+Kwl1bnNpZ25lZCBpbnQgdWxSZWc7Cj4r Cj4rCWlmIChwSW5pdFBhcmFtLT5wb3dlck1vZGUgIT0gMCkKPisJCXBJbml0UGFyYW0tPnBvd2Vy TW9kZSA9IDA7Cj4rCXNldFBvd2VyTW9kZShwSW5pdFBhcmFtLT5wb3dlck1vZGUpOwo+Kwo+Kwkv KiBFbmFibGUgZGlzcGxheSBwb3dlciBnYXRlICYgTE9DQUxNRU0gcG93ZXIgZ2F0ZSovCj4rCXVs UmVnID0gUEVFSzMyKENVUlJFTlRfR0FURSk7Cj4rCXVsUmVnID0gdWxSZWd8KDEgPDwgQ1VSUkVO VF9HQVRFX0RJU1BMQVlfTFNCKTsKPisJdWxSZWcgPSB1bFJlZ3woMSA8PCBDVVJSRU5UX0dBVEVf TE9DQUxNRU1fTFNCKTsKPisJc2V0Q3VycmVudEdhdGUodWxSZWcpOwo+Kwo+KwlpZiAoZ2V0Q2hp cFR5cGUoKSAhPSBTTTc1MExFKSB7Cj4rCQkvKglzZXQgcGFuZWwgcGxsIGFuZCBncmFwaGljIG1v ZGUgdmlhIG1taW9fODggKi8KPisJCXVsUmVnID0gUEVFSzMyKFZHQV9DT05GSUdVUkFUSU9OKTsK PisJCXVsUmVnID0gdWxSZWd8KDEgPDwgVkdBX0NPTkZJR1VSQVRJT05fUExMX0xTQik7Cj4rCQl1 bFJlZyA9IHVsUmVnfCgxIDw8IFZHQV9DT05GSUdVUkFUSU9OX01PREVfTFNCKTsKPisKPisJCVBP S0UzMihWR0FfQ09ORklHVVJBVElPTiwgdWxSZWcpOwo+Kwl9IGVsc2V7Cj4rI2lmIGRlZmluZWQo X19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKPisJCS8qIHNldCBncmFwaGljIG1vZGUg dmlhIElPIG1ldGhvZCAqLwo+KwkJb3V0Yl9wKDB4ODgsIDB4M2Q0KTsKPisJCW91dGJfcCgweDA2 LCAweDNkNSk7Cj4rI2VuZGlmCj4rCX0KPisKPisJLyogU2V0IHRoZSBNYWluIENoaXAgQ2xvY2sg Ki8KPisJc2V0Q2hpcENsb2NrKE1IeigodW5zaWduZWQgaW50KXBJbml0UGFyYW0tPmNoaXBDbG9j aykpOwo+Kwo+KwkvKiBTZXQgdXAgbWVtb3J5IGNsb2NrLiAqLwo+KwlzZXRNZW1vcnlDbG9jayhN SHoocEluaXRQYXJhbS0+bWVtQ2xvY2spKTsKPisKPisJLyogU2V0IHVwIG1hc3RlciBjbG9jayAq Lwo+KwlzZXRNYXN0ZXJDbG9jayhNSHoocEluaXRQYXJhbS0+bWFzdGVyQ2xvY2spKTsKPisKPisK PisJLyogUmVzZXQgdGhlIG1lbW9yeSBjb250cm9sbGVyLiBJZiB0aGUgbWVtb3J5IGNvbnRyb2xs ZXIgaXMgbm90IHJlc2V0IGluIFNNNzUwLAo+KwkgICB0aGUgc3lzdGVtIG1pZ2h0IGhhbmcgd2hl biBzdyBhY2Nlc3NlcyB0aGUgbWVtb3J5Lgo+KwkgICBUaGUgbWVtb3J5IHNob3VsZCBiZSByZXNl dHRlZCBhZnRlciBjaGFuZ2luZyB0aGUgTVhDTEsuCj4rCSAgICovCj4rCWlmIChwSW5pdFBhcmFt LT5yZXNldE1lbW9yeSA9PSAxKSB7Cj4rCQl1bFJlZyA9IFBFRUszMihNSVNDX0NUUkwpOwo+KwkJ dWxSZWcgPSB1bFJlZyYofigxIDw8IE1JU0NfQ1RSTF9MT0NBTE1FTV9SRVNFVF9MU0IpKTsKPisJ CVBPS0UzMihNSVNDX0NUUkwsIHVsUmVnKTsKPisKPisJCXVsUmVnID0gdWxSZWd8KDEgPDwgTUlT Q19DVFJMX0xPQ0FMTUVNX1JFU0VUX0xTQik7Cj4rCQlQT0tFMzIoTUlTQ19DVFJMLCB1bFJlZyk7 Cj4rCX0KPisKPisJaWYgKHBJbml0UGFyYW0tPnNldEFsbEVuZ09mZiA9PSAxKSB7Cj4rCQllbmFi bGUyREVuZ2luZSgwKTsKPisKPisJCS8qIERpc2FibGUgT3ZlcmxheSwgaWYgYSBmb3JtZXIgYXBw bGljYXRpb24gbGVmdCBpdCBvbiAqLwo+KwkJdWxSZWcgPSBQRUVLMzIoVklERU9fRElTUExBWV9D VFJMKTsKPisJCXVsUmVnID0gdWxSZWcmKH4oMSA8PCBWSURFT19ESVNQTEFZX0NUUkxfUExBTkVf TFNCKSk7Cj4rCQlQT0tFMzIoVklERU9fRElTUExBWV9DVFJMLCB1bFJlZyk7Cj4rCj4rCQkvKiBE aXNhYmxlIHZpZGVvIGFscGhhLCBpZiBhIGZvcm1lciBhcHBsaWNhdGlvbiBsZWZ0IGl0IG9uICov Cj4rCQl1bFJlZyA9IFBFRUszMihWSURFT19BTFBIQV9ESVNQTEFZX0NUUkwpOwo+KwkJdWxSZWcg PSB1bFJlZyYofigxIDw8IFZJREVPX0FMUEhBX0RJU1BMQVlfQ1RSTF9QTEFORV9MU0IpKTsKPisJ CVBPS0UzMihWSURFT19BTFBIQV9ESVNQTEFZX0NUUkwsIHVsUmVnKTsKPisKPisJCS8qIERpc2Fi bGUgYWxwaGEgcGxhbmUsIGlmIGEgZm9ybWVyIGFwcGxpY2F0aW9uIGxlZnQgaXQgb24gKi8KPisJ CXVsUmVnID0gUEVFSzMyKEFMUEhBX0RJU1BMQVlfQ1RSTCk7Cj4rCQl1bFJlZyA9IHVsUmVnJih+ KDEgPDwgQUxQSEFfRElTUExBWV9DVFJMX1BMQU5FX0xTQikpOwo+KwkJUE9LRTMyKEFMUEhBX0RJ U1BMQVlfQ1RSTCwgdWxSZWcpOwo+Kwo+KwkJLyogRGlzYWJsZSBETUEgQ2hhbm5lbCwgaWYgYSBm b3JtZXIgYXBwbGljYXRpb24gbGVmdCBpdCBvbiAqLwo+KwkJdWxSZWcgPSBQRUVLMzIoRE1BX0FC T1JUX0lOVEVSUlVQVCk7Cj4rCQl1bFJlZyA9IHVsUmVnfCgxIDw8IERNQV9BQk9SVF9JTlRFUlJV UFRfQUJPUlRfMV9MU0IpOwo+KwkJUE9LRTMyKERNQV9BQk9SVF9JTlRFUlJVUFQsIHVsUmVnKTsK PisKPisJCS8qIERpc2FibGUgRE1BIFBvd2VyLCBpZiBhIGZvcm1lciBhcHBsaWNhdGlvbiBsZWZ0 IGl0IG9uICovCj4rCQllbmFibGVETUEoMCk7Cj4rCX0KPisKPisJLyogV2UgY2FuIGFkZCBtb3Jl IGluaXRpYWxpemF0aW9uIGFzIG5lZWRlZC4gKi8KPisKPisJcmV0dXJuIDA7Cj4rfQo+Kwo+Ky8q Cj4rICAgbW9uayBsaXUgQCA0LzYvMjAxMToKPisgICByZS13cml0ZSB0aGUgY2FsY3VsYXRlUExM IGZ1bmN0aW9uIG9mIGRkazc1MC4KPisgICB0aGUgb3JpZ2luYWwgdmVyc2lvbiBmdW5jdGlvbiBk b2VzIG5vdCB1c2Ugc29tZSBtYXRoZW1hdGljcyB0cmlja3MgYW5kIHNob3J0Y3V0Cj4rICAgd2hl biBpdCBkb2luZyB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIGJlc3QgTixNLEQgY29tYmluYXRpb24K PisgICBJIHRoaW5rIHRoaXMgdmVyc2lvbiBnaXZlcyBhIGxpdHRsZSB1cGdyYWRlIGluIHNwZWVk Cj4rCj4rICAgNzUwIHBsbCBjbG9jayBmb3JtdWxhcjoKPisgICBSZXF1ZXN0IENsb2NrID0gKElu cHV0IENsb2NrICogTSApLyhOICogWCkKPisKPisgICBJbnB1dCBDbG9jayA9IDE0MzE4MTgxIGh6 Cj4rICAgWCA9IDIgcG93ZXIgRAo+KyAgIEQgPXswLDEsMiwzLDQsNSw2fQo+KyAgIE0gPSB7MSwu Li4sMjU1fQo+KyAgIE4gPSB7MiwuLi4sMTV9Cj4rICAgKi8KPit1bnNpZ25lZCBpbnQgY2FsY1Bs bFZhbHVlKHVuc2lnbmVkIGludCByZXF1ZXN0X29yaWcsIHBsbF92YWx1ZV90ICpwbGwpCj4rewo+ KwkvKiB1c2VkIGZvciBwcmltYXJ5IGFuZCBzZWNvbmRhcnkgY2hhbm5lbCBwaXhlbCBjbG9jayBw bGwgKi8KPisJc3RhdGljIHBsbGNhbHBhcmFtIHhwYXJtX1BJWEVMW10gPSB7Cj4rCQkvKiAyXjAg PSAxKi8JCQl7MCwgMCwgMCwgMX0sCj4rCQkvKiAyXiAxID0yKi8JCQl7MSwgMCwgMSwgMn0sCj4r CQkvKiAyXiAyICA9IDQqLwkJezIsIDAsIDIsIDR9LAo+KwkJezMsIDAsIDMsIDh9LAo+KwkJezQs IDEsIDMsIDE2fSwKPisJCXs1LCAyLCAzLCAzMn0sCj4rCQkvKiAyXjYgPSA2NCAgKi8JCXs2LCAz LCAzLCA2NH0sCj4rCX07Cj4rCj4rCS8qIHVzZWQgZm9yIE1YQ0xLIChjaGlwIGNsb2NrKSAqLwo+ KwlzdGF0aWMgcGxsY2FscGFyYW0geHBhcm1fTVhDTEtbXSA9IHsKPisJCS8qIDJeMCA9IDEqLwkJ CXswLCAwLCAwLCAxfSwKPisJCS8qIDJeIDEgPTIqLwkJCXsxLCAwLCAxLCAyfSwKPisJCS8qIDJe IDIgID0gNCovCQl7MiwgMCwgMiwgNH0sCj4rCQl7MywgMCwgMywgOH0sCj4rCX07Cj4rCj4rCS8q IAlhcyBzbTc1MCByZWdpc3RlciBkZWZpbml0aW9uLCAgTiBsb2NhdGVkIGluIDIsIDE1IGFuZCBN IGxvY2F0ZWQgaW4gMSwgMjU1CSovCj4rCWludCBOLCBNLCBYLCBkOwo+KwlpbnQgeGNudDsKPisJ aW50IG1pbmlEaWZmOwo+Kwl1bnNpZ25lZCBpbnQgUk4sIHF1bywgcmVtLCBmbF9xdW87Cj4rCXVu c2lnbmVkIGludCBpbnB1dCwgcmVxdWVzdDsKPisJdW5zaWduZWQgaW50IHRtcENsb2NrLCByZXQ7 Cj4rCXBsbGNhbHBhcmFtICp4cGFybTsKPisKPisKPisJaWYgKGdldENoaXBUeXBlKCkgPT0gU003 NTBMRSkgewo+KwkJLyogU003NTBMRSBkb24ndCBoYXZlIHByZ3JhbW1hYmxlIFBMTCBhbmQgTS9O IHZhbHVlcyB0byB3b3JrIG9uLgo+KwkJICAgSnVzdCByZXR1cm4gdGhlIHJlcXVlc3RlZCBjbG9j ay4gKi8KPisJCXJldHVybiByZXF1ZXN0X29yaWc7Cj4rCX0KPisKPisKPisJcmV0ID0gMDsKPisJ bWluaURpZmYgPSB+MDsKPisJcmVxdWVzdCA9IHJlcXVlc3Rfb3JpZyAvIDEwMDA7Cj4rCWlucHV0 ID0gcGxsLT5pbnB1dEZyZXEgLyAxMDAwOwo+Kwo+KwkvKiBmb3IgTVhDTEsgcmVnaXN0ZXIgLCBu byBQT0QgcHJvdmlkZWQsIHNvIG5lZWQgYmUgdHJlYXRlZCBkaWZmZXJlbnRseQkqLwo+Kwo+Kwlp ZiAocGxsLT5jbG9ja1R5cGUgIT0gTVhDTEtfUExMKSB7Cj4rCQl4cGFybSA9ICZ4cGFybV9QSVhF TFswXTsKPisJCXhjbnQgPSBzaXplb2YoeHBhcm1fUElYRUwpL3NpemVvZih4cGFybV9QSVhFTFsw XSk7Cj4rCX0gZWxzZXsKPisJCXhwYXJtID0gJnhwYXJtX01YQ0xLWzBdOwo+KwkJeGNudCA9IHNp emVvZih4cGFybV9NWENMSykvc2l6ZW9mKHhwYXJtX01YQ0xLWzBdKTsKPisJfQo+Kwo+Kwo+Kwlm b3IgKE4gPSAxNTsgTiA+IDE7IE4tLSkgewo+KwkJLyogUk4gd2lsbCBub3QgZXhjZWVkIG1heGlt dW0gbG9uZyBpZiBAcmVxdWVzdCA8PSAyODUgTUhaIChmb3IgMzJiaXQgY3B1KSAqLwo+KwkJUk4g PSBOICogcmVxdWVzdDsKPisJCXF1byA9IFJOIC8gaW5wdXQ7Cj4rCQlyZW0gPSBSTiAlIGlucHV0 Oy8qIHJlbSBhbHdheXMgc21hbGwgdGhhbiAxNDMxODE4MSAqLwo+KwkJZmxfcXVvID0gKHJlbSAq IDEwMDAwIC8gaW5wdXQpOwo+Kwo+KwkJZm9yIChkID0geGNudCAtIDE7IGQgPj0gMDsgZC0tKSB7 Cj4rCQkJWCA9IHhwYXJtW2RdLnZhbHVlOwo+KwkJCU0gPSBxdW8qWDsKPisJCQlNICs9IGZsX3F1 byAqIFggLyAxMDAwMDsKPisJCQkvKiByb3VuZCBzdGVwICovCj4rCQkJTSArPSAoZmxfcXVvKlgg JSAxMDAwMCkgPiA1MDAwID8gMSA6IDA7Cj4rCQkJaWYgKE0gPCAyNTYgJiYgTSA+IDApIHsKPisJ CQkJdW5zaWduZWQgaW50IGRpZmY7Cj4rCQkJCXRtcENsb2NrID0gcGxsLT5pbnB1dEZyZXEgKiBN IC8gTiAvIFg7Cj4rCQkJCWRpZmYgPSBhYnNEaWZmKHRtcENsb2NrLCByZXF1ZXN0X29yaWcpOwo+ KwkJCQlpZiAoZGlmZiA8IG1pbmlEaWZmKSB7Cj4rCQkJCQlwbGwtPk0gPSBNOwo+KwkJCQkJcGxs LT5OID0gTjsKPisJCQkJCXBsbC0+T0QgPSB4cGFybVtkXS5vZDsKPisJCQkJCXBsbC0+UE9EID0g eHBhcm1bZF0ucG9kOwo+KwkJCQkJbWluaURpZmYgPSBkaWZmOwo+KwkJCQkJcmV0ID0gdG1wQ2xv Y2s7Cj4rCQkJCX0KPisJCQl9Cj4rCQl9Cj4rCX0KPisKPisJLyogcHJpbnRrKCJGaW5hbGx5OiAg cGxsLT5uWyVsdV0sbVslbHVdLG9kWyVsdV0scG9kWyVsdV1cbiIscGxsLT5OLHBsbC0+TSxwbGwt Pk9ELHBsbC0+UE9EKTsgKi8KPisJcmV0dXJuIHJldDsKPit9Cj4rCj4rdW5zaWduZWQgaW50IGNh bGNQbGxWYWx1ZTIoCj4rCQl1bnNpZ25lZCBpbnQgdWxSZXF1ZXN0Q2xrLCAvKiBSZXF1aXJlZCBw aXhlbCBjbG9jayBpbiBIeiB1bml0ICovCj4rCQlwbGxfdmFsdWVfdCAqcFBMTCAgICAgICAgICAg LyogU3RydWN0dXJlIHRvIGhvbGQgdGhlIHZhbHVlIHRvIGJlIHNldCBpbiBQTEwgKi8KPisJCSkK Pit7Cj4rCj4rCXVuc2lnbmVkIGludCBNLCBOLCBPRCwgUE9EID0gMCwgZGlmZiwgcGxsQ2xrLCBv ZFBvd2VyLCBwb2RQb3dlcjsKPisJdW5zaWduZWQgaW50IGJlc3REaWZmID0gMHhmZmZmZmZmZjsg LyogYmlnZ2VzdCAzMiBiaXQgdW5zaWduZWQgbnVtYmVyICovCj4rCXVuc2lnbmVkIGludCByZXQ7 Cj4rCS8qIEluaXQgUExMIHN0cnVjdHVyZSB0byBrbm93IHN0YXRlcyAqLwo+KwlwUExMLT5NID0g MDsKPisJcFBMTC0+TiA9IDA7Cj4rCXBQTEwtPk9EID0gMDsKPisJcFBMTC0+UE9EID0gMDsKPisK PisJLyogU2FuaXR5IGNoZWNrOiBOb25lIGF0IHRoZSBtb21lbnQgKi8KPisKPisJLyogQ29udmVy dCBldmVyeXRoaW5nIGluIEtoeiByYW5nZSBpbiBvcmRlciB0byBhdm9pZCBjYWxjdWxhdGlvbiBv dmVyZmxvdyAqLwo+KwlwUExMLT5pbnB1dEZyZXEgLz0gMTAwMDsKPisJdWxSZXF1ZXN0Q2xrIC89 IDEwMDA7Cj4rCj4rI2lmbmRlZiBWQUxJREFUSU9OX0NISVAKClNvLi4gd2hhdCBhcmUgdGhvc2U/ IFNob3VsZCB0aGVzZSAjaWZkZWYncyBiZSByZW1vdmVkPwoKSSBzdG9wcGVkIGhlcmUuLiBZb3Ug c2hvdWxkIHJlYWQgdGhlIERvY3VtZW50YXRpb24vU3VibWl0dGluZyogZmlsZXMgYW5kCmZvbGxv dyB3aGF0IHRoZXkgbWVudGlvbiB0aGVyZS4gUGxlYXNlIGZpeCB0aGUgc3ludGF4LCByZW1vdmUg dGhlIHVzYWdlCm9mIHRlbXBsYXRlcywgYW5kIHVzZXIgJ3ByX2luZm8nIGluc3RlYWQgb2YgJ3By aW50aycuCgoKPisJLyogVGhlIG1heGltdW0gb2YgcG9zdCBkaXZpZGVyIGlzIDguICovCj4rCWZv ciAoUE9EID0gMDsgUE9EIDw9IDM7IFBPRCsrKQo+KyNlbmRpZgo+Kwl7Cj4rCj4rI2lmbmRlZiBW QUxJREFUSU9OX0NISVAKPisJCS8qIE1YQ0xLX1BMTCBkb2VzIG5vdCBoYXZlIHBvc3QgZGl2aWRl ci4gKi8KPisJCWlmICgoUE9EID4gMCkgJiYgKHBQTEwtPmNsb2NrVHlwZSA9PSBNWENMS19QTEwp KQo+KwkJCWJyZWFrOwo+KyNlbmRpZgo+Kwo+KwkJLyogV29yayBvdXQgMiB0byB0aGUgcG93ZXIg b2YgUE9EICovCj4rCQlwb2RQb3dlciA9IHR3b1RvUG93ZXJPZngoUE9EKTsKPisJCS8qIE9EIGhh cyBvbmx5IDIgYml0cyBbMTU6MTRdIGFuZCBpdHMgdmFsdWUgbXVzdCBiZXR3ZWVuIDAgdG8gMyAq Lwo+KwkJZm9yIChPRCA9IDA7IE9EIDw9IDM7IE9EKyspIHsKPisJCQkvKiBXb3JrIG91dCAyIHRv IHRoZSBwb3dlciBvZiBPRCAqLwo+KwkJCW9kUG93ZXIgPSB0d29Ub1Bvd2VyT2Z4KE9EKTsKPisK PisjaWZkZWYgVkFMSURBVElPTl9DSElQCj4rCQkJaWYgKG9kUG93ZXIgPiA0KQo+KwkJCQlwb2RQ b3dlciA9IDQ7Cj4rCQkJZWxzZQo+KwkJCQlwb2RQb3dlciA9IG9kUG93ZXI7Cj4rI2VuZGlmCj4r Cj4rCQkJLyogTiBoYXMgNCBiaXRzIFsxMTo4XSBhbmQgaXRzIHZhbHVlIG11c3QgYmV0d2VlbiAy IGFuZCAxNS4KPisJCQkgICBUaGUgTiA9PSAxIHdpbGwgYmVoYXZlIGRpZmZlcmVudGx5IC0tPiBS ZXN1bHQgaXMgbm90IGNvcnJlY3QuICovCj4rCQkJZm9yIChOID0gMjsgTiA8PSAxNTsgTisrKSB7 Cj4rCQkJCS8qIFRoZSBmb3JtdWxhIGZvciBQTEwgaXMgdWxSZXF1ZXN0Q2xrID0gaW5wdXRGcmVx ICogTSAvIE4gLyAoMl5PRCkKPisJCQkJICAgSW4gdGhlIGZvbGxvd2luZyBzdGVwcywgd2UgdHJ5 IHRvIHdvcmsgb3V0IGEgYmVzdCBNIHZhbHVlIGdpdmVuIHRoZSBvdGhlcnMgYXJlIGtub3duLgo+ KwkJCQkgICBUbyBhdm9pZCBkZWNpbWFsIGNhbGN1bGF0aW9uLCB3ZSB1c2UgMTAwMCBhcyBtdWx0 aXBsaWVyIGZvciB1cCB0byAzIGRlY2ltYWwgcGxhY2VzIG9mIGFjY3VyYWN5Lgo+KwkJCQkgICAq Lwo+KwkJCQlNID0gdWxSZXF1ZXN0Q2xrICogTiAqIG9kUG93ZXIgKiAxMDAwIC8gcFBMTC0+aW5w dXRGcmVxOwo+KwkJCQlNID0gcm91bmRlZERpdihNLCAxMDAwKTsKPisKPisJCQkJLyogTSBmaWVs ZCBoYXMgb25seSA4IGJpdHMsIHJlamVjdCB2YWx1ZSBiaWdnZXIgdGhhbiA4IGJpdHMgKi8KPisJ CQkJaWYgKE0gPCAyNTYpIHsKPisJCQkJCS8qIENhbGN1bGF0ZSB0aGUgYWN0dWFsIGNsb2NrIGZv ciBhIGdpdmVuIE0gJiBOICovCj4rCQkJCQlwbGxDbGsgPSBwUExMLT5pbnB1dEZyZXEgKiBNIC8g TiAvIG9kUG93ZXIgLyBwb2RQb3dlcjsKPisKPisJCQkJCS8qIEhvdyBtdWNoIGFyZSB3ZSBkaWZm ZXJlbnQgZnJvbSB0aGUgcmVxdWlyZW1lbnQgKi8KPisJCQkJCWRpZmYgPSBhYnNEaWZmKHBsbENs aywgdWxSZXF1ZXN0Q2xrKTsKPisKPisJCQkJCWlmIChkaWZmIDwgYmVzdERpZmYpIHsKPisJCQkJ CQliZXN0RGlmZiA9IGRpZmY7Cj4rCj4rCQkJCQkJLyogU3RvcmUgTSBhbmQgTiB2YWx1ZXMgKi8K PisJCQkJCQlwUExMLT5NICA9IE07Cj4rCQkJCQkJcFBMTC0+TiAgPSBOOwo+KwkJCQkJCXBQTEwt Pk9EID0gT0Q7Cj4rCj4rI2lmZGVmIFZBTElEQVRJT05fQ0hJUAo+KwkJCQkJCWlmIChPRCA+IDIp Cj4rCQkJCQkJCVBPRCA9IDI7Cj4rCQkJCQkJZWxzZQo+KwkJCQkJCQlQT0QgPSBPRDsKPisjZW5k aWYKPisKPisJCQkJCQlwUExMLT5QT0QgPSBQT0Q7Cj4rCQkJCQl9Cj4rCQkJCX0KPisJCQl9Cj4r CQl9Cj4rCX0KPisKPisJLyogUmVzdG9yZSBpbnB1dCBmcmVxdWVuY3kgZnJvbSBLaHogdG8gaHog dW5pdCAqLwo+KwkvKiAgICBwUExMLT5pbnB1dEZyZXEgKj0gMTAwMDsqLwo+Kwl1bFJlcXVlc3RD bGsgKj0gMTAwMDsKPisJcFBMTC0+aW5wdXRGcmVxID0gREVGQVVMVF9JTlBVVF9DTE9DSzsgLyog RGVmYXVsdCByZWZlcmVuY2UgY2xvY2sgKi8KPisKPisJLyogT3V0cHV0IGRlYnVnIGluZm9ybWF0 aW9uICovCj4rCS8qIERES0RFQlVHUFJJTlQoKERJU1BMQVlfTEVWRUwsICJjYWxjUGxsVmFsdWU6 IFJlcXVlc3RlZCBGcmVxdWVuY3kgPSAlZFxuIiwgdWxSZXF1ZXN0Q2xrKSk7aQo+KwkgICBEREtE RUJVR1BSSU5UKChESVNQTEFZX0xFVkVMLCAiY2FsY1BsbFZhbHVlOiBJbnB1dCBDTEsgPSAlZEh6 LCBNPSVkLCBOPSVkLCBPRD0lZCwgUE9EPSVkXG4iLCBwUExMLT5pbnB1dEZyZXEsIHBQTEwtPk0s IHBQTEwtPk4sIHBQTEwtPk9ELCBwUExMLT5QT0QpKTtpICovCj4rCj4rCS8qIFJldHVybiBhY3R1 YWwgZnJlcXVlbmN5IHRoYXQgdGhlIFBMTCBjYW4gc2V0ICovCj4rCXJldCA9IGNhbGNQTEwocFBM TCk7Cj4rCXJldHVybiByZXQ7Cj4rfQo+Kwo+Kwo+Kwo+Kwo+Kwo+K3Vuc2lnbmVkIGludCBmb3Jt YXRQbGxSZWcocGxsX3ZhbHVlX3QgKnBQTEwpCj4rewo+Kwl1bnNpZ25lZCBpbnQgdWxQbGxSZWcg PSAwOwo+Kwo+KwkvKiBOb3RlIHRoYXQgYWxsIFBMTCdzIGhhdmUgdGhlIHNhbWUgZm9ybWF0LiBI ZXJlLCB3ZSBqdXN0IHVzZSBQYW5lbCBQTEwgcGFyYW1ldGVyCj4rCSAgIHRvIHdvcmsgb3V0IHRo ZSBiaXQgZmllbGRzIGluIHRoZSByZWdpc3Rlci4KPisJICAgT24gcmV0dXJuaW5nIGEgMzIgYml0 IG51bWJlciwgdGhlIHZhbHVlIGNhbiBiZSBhcHBsaWVkIHRvIGFueSBQTEwgaW4gdGhlIGNhbGxp bmcgZnVuY3Rpb24uCj4rCSAgICovCj4rCXVsUGxsUmVnID0KPisJCSgwIDw8IFBBTkVMX1BMTF9D VFJMX0JZUEFTU19MU0IpCj4rCQl8ICgxIDw8IFBBTkVMX1BMTF9DVFJMX1BPV0VSX0xTQikKPisJ CXwgKDAgPDwgUEFORUxfUExMX0NUUkxfSU5QVVRfTFNCKQo+KyNpZm5kZWYgVkFMSURBVElPTl9D SElQCj4rCQl8IChwUExMLT5QT0QgPDwgUEFORUxfUExMX0NUUkxfUE9EX0xTQikKPisjZW5kaWYK PisJCXwgKHBQTEwtPk9EIDw8IFBBTkVMX1BMTF9DVFJMX09EX0xTQikKPisJCXwgKHBQTEwtPk4g PDwgUEFORUxfUExMX0NUUkxfTl9MU0IpCj4rCQl8IChwUExMLT5NIDw8IFBBTkVMX1BMTF9DVFJM X01fTFNCKTsKPisJcmV0dXJuIHVsUGxsUmVnOwo+K30KPisKPisKPmRpZmYgLS1naXQgYS9kcml2 ZXJzL3ZpZGVvL2x5bnhmYi9kZGs3NTBfY2hpcC5oIGIvZHJpdmVycy92aWRlby9seW54ZmIvZGRr NzUwX2NoaXAuaAo+bmV3IGZpbGUgbW9kZSAxMDA2NDQKPmluZGV4IDAwMDAwMDAuLmYyNGFmMTYK Pi0tLSAvZGV2L251bGwKPisrKyBiL2RyaXZlcnMvdmlkZW8vbHlueGZiL2Rkazc1MF9jaGlwLmgK PkBAIC0wLDAgKzEsOTcgQEAKPisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgo+KypDb3B5cmlnaHQgKGMpIDIwMTIgYnkg U2lsaWNvbiBNb3Rpb24sIEluYy4gKFNNSSkKPisqUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRl ZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQo+KypvZiB0 aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29m dHdhcmUiKSwgdG8gZGVhbAo+KyppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwg aW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCj4rKnVzZSwgY29weSwg bW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNl bGwgY29waWVzCj4rKm9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdo b20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0bwo+KypkbyBzbywgc3ViamVjdCB0byB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4rKgo+KypUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFT IElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKPisqRVhQUkVTUyBPUiBJTVBMSUVE LCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCj4rKk9GIE1FUkNI QU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECj4rKk5PTklO RlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIE1pbGwuQ2hlbiBhbmQgTW9uay5MaXUgT1Ig Q09QWVJJR0hUCj4rKkhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1Ig T1RIRVIgTElBQklMSVRZLAo+KypXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9S VCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPisqRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04g V0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgo+KypPVEhFUiBERUFMSU5HUyBJTiBUSEUg U09GVFdBUkUuCj4rKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKi8KPisjaWZuZGVmIERESzc1MF9DSElQX0hfXwo+KyNkZWZp bmUgRERLNzUwX0NISVBfSF9fCj4rI2RlZmluZSBERUZBVUxUX0lOUFVUX0NMT0NLIDE0MzE4MTgx IC8qIERlZmF1bHQgcmVmZXJlbmNlIGNsb2NrICovCj4rI2RlZmluZSBTTTc1MExFX1JFVklTSU9O X0lEICgoY2hhcikweGZlKQo+Kwo+Ky8qIFRoaXMgaXMgYWxsIHRoZSBjaGlwcyByZWNvZ25pemVk IGJ5IHRoaXMgbGlicmFyeSAqLwo+K3R5cGVkZWYgZW51bSBfbG9naWNhbF9jaGlwX3R5cGVfdHsK PisJU01fVU5LTk9XTiwKPisJU003MTgsCj4rCVNNNzUwLAo+KwlTTTc1MExFLAo+K30KPitsb2dp Y2FsX2NoaXBfdHlwZV90Owo+Kwo+Kwo+K3R5cGVkZWYgZW51bSBfY2xvY2tfdHlwZV90ewo+KwlN WENMS19QTEwsCj4rCVBSSU1BUllfUExMLAo+KwlTRUNPTkRBUllfUExMLAo+KwlWR0EwX1BMTCwK PisJVkdBMV9QTEwsCj4rfQo+K2Nsb2NrX3R5cGVfdDsKPisKPit0eXBlZGVmIHN0cnVjdCBfcGxs X3ZhbHVlX3R7Cj4rCWNsb2NrX3R5cGVfdCBjbG9ja1R5cGU7Cj4rCXVuc2lnbmVkIGxvbmcgaW5w dXRGcmVxOyAvKiBJbnB1dCBjbG9jayBmcmVxdWVuY3kgdG8gdGhlIFBMTCAqLwo+Kwo+KwkvKiBV c2UgdGhpcyB3aGVuIGNsb2NrVHlwZSA9IFBBTkVMX1BMTCAqLwo+Kwl1bnNpZ25lZCBsb25nIE07 Cj4rCXVuc2lnbmVkIGxvbmcgTjsKPisJdW5zaWduZWQgbG9uZyBPRDsKPisJdW5zaWduZWQgbG9u ZyBQT0Q7Cj4rfQo+K3BsbF92YWx1ZV90Owo+Kwo+Ky8qIGlucHV0IHN0cnVjdCB0byBpbml0Q2hp cFBhcmFtKCkgZnVuY3Rpb24gKi8KPit0eXBlZGVmIHN0cnVjdCBfaW5pdGNoaXBfcGFyYW1fdHsK PisJdW5zaWduZWQgc2hvcnQgcG93ZXJNb2RlOyAgICAvKiBVc2UgcG93ZXIgbW9kZSAwIG9yIDEg Ki8KPisJdW5zaWduZWQgc2hvcnQgY2hpcENsb2NrOyAgICAvKiBTcGVlZCBvZiBtYWluIGNoaXAg Y2xvY2sgaW4gTUh6IHVuaXQKPisJCQkJCTAgPSBrZWVwIHRoZSBjdXJyZW50IGNsb2NrIHNldHRp bmcKPisJCQkJCU90aGVycyA9IHRoZSBuZXcgbWFpbiBjaGlwIGNsb2NrCj4rCQkJCQkqLwo+Kwl1 bnNpZ25lZCBzaG9ydCBtZW1DbG9jazsgICAgIC8qIFNwZWVkIG9mIG1lbW9yeSBjbG9jayBpbiBN SHogdW5pdAo+KwkJCQkJMCA9IGtlZXAgdGhlIGN1cnJlbnQgY2xvY2sgc2V0dGluZwo+KwkJCQkJ T3RoZXJzID0gdGhlIG5ldyBtZW1vcnkgY2xvY2sKPisJCQkJCSovCj4rCXVuc2lnbmVkIHNob3J0 IG1hc3RlckNsb2NrOyAgLyogU3BlZWQgb2YgbWFzdGVyIGNsb2NrIGluIE1IeiB1bml0Cj4rCQkJ CQkwID0ga2VlcCB0aGUgY3VycmVudCBjbG9jayBzZXR0aW5nCj4rCQkJCQlPdGhlcnMgPSB0aGUg bmV3IG1hc3RlciBjbG9jawo+KwkJCQkJKi8KPisJdW5zaWduZWQgc2hvcnQgc2V0QWxsRW5nT2Zm OyAvKiAwID0gbGVhdmUgYWxsIGVuZ2luZSBzdGF0ZSB1bnRvdWNoZWQuCj4rCQkJCQkxID0gbWFr ZSBzdXJlIHRoZXkgYXJlIG9mZjogMkQsIE92ZXJsYXksCj4rCQkJCQl2aWRlbyBhbHBoYSwgYWxw aGEsIGhhcmR3YXJlIGN1cnNvcnMKPisJCQkJCSovCj4rCXVuc2lnbmVkIGNoYXIgcmVzZXRNZW1v cnk7ICAgLyogMCA9IERvIG5vdCByZXNldCB0aGUgbWVtb3J5IGNvbnRyb2xsZXIKPisJCQkJCTEg PSBSZXNldCB0aGUgbWVtb3J5IGNvbnRyb2xsZXIKPisJCQkJCSovCj4rCj4rCS8qIE1vcmUgaW5p dGlhbGl6YXRpb24gcGFyYW1ldGVyIGNhbiBiZSBhZGRlZCBpZiBuZWVkZWQgKi8KPit9Cj4raW5p dGNoaXBfcGFyYW1fdDsKPisKPisKPitsb2dpY2FsX2NoaXBfdHlwZV90IGdldENoaXBUeXBlKHZv aWQpOwo+K3Vuc2lnbmVkIGludCBjYWxjUGxsVmFsdWUodW5zaWduZWQgaW50IHJlcXVlc3QsIHBs bF92YWx1ZV90ICpwbGwpOwo+K3Vuc2lnbmVkIGludCBjYWxjUGxsVmFsdWUyKHVuc2lnbmVkIGlu dCwgcGxsX3ZhbHVlX3QgKik7Cj4rdW5zaWduZWQgaW50IGZvcm1hdFBsbFJlZyhwbGxfdmFsdWVf dCAqcFBMTCk7Cj4rdm9pZCBkZGs3NTBfc2V0X21taW8odm9sYXRpbGUgdW5zaWduZWQgY2hhciAq LCB1bnNpZ25lZCBzaG9ydCwgY2hhcik7Cj4rdW5zaWduZWQgaW50IGRkazc1MF9nZXRWTVNpemUo dm9pZCk7Cj4raW50IGRkazc1MF9pbml0SHcoaW5pdGNoaXBfcGFyYW1fdCAqKTsKPit1bnNpZ25l ZCBpbnQgZ2V0UGxsVmFsdWUoY2xvY2tfdHlwZV90IGNsb2NrVHlwZSwgcGxsX3ZhbHVlX3QgKnBQ TEwpOwo+K3Vuc2lnbmVkIGludCBnZXRDaGlwQ2xvY2sodm9pZCk7Cj4rdm9pZCBzZXRDaGlwQ2xv Y2sodW5zaWduZWQgaW50KTsKPit2b2lkIHNldE1lbW9yeUNsb2NrKHVuc2lnbmVkIGludCBmcmVx dWVuY3kpOwo+K3ZvaWQgc2V0TWFzdGVyQ2xvY2sodW5zaWduZWQgaW50IGZyZXF1ZW5jeSk7Cj4r Cj4rCj4rI2VuZGlmCj5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9seW54ZmIvZGRrNzUwX2Rp c3BsYXkuYyBiL2RyaXZlcnMvdmlkZW8vbHlueGZiL2Rkazc1MF9kaXNwbGF5LmMKPm5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj5pbmRleCAwMDAwMDAwLi42ZTk3M2NjCj4tLS0gL2Rldi9udWxsCj4rKysg Yi9kcml2ZXJzL3ZpZGVvL2x5bnhmYi9kZGs3NTBfZGlzcGxheS5jCj5AQCAtMCwwICsxLDI5NSBA QAo+Ky8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqCj4rKkNvcHlyaWdodCAoYykgMjAxMiBieSBTaWxpY29uIE1vdGlvbiwg SW5jLiAoU01JKQo+KypQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJn ZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cj4rKm9mIHRoaXMgc29mdHdhcmUgYW5k IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFs Cj4rKmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91 dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8KPisqdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBw dWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMKPisqb2Yg dGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUg aXMgZnVybmlzaGVkIHRvCj4rKmRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9uczoKPisqCj4rKlRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdB UlJBTlRZIE9GIEFOWSBLSU5ELAo+KypFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQg Tk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMKPisqT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKPisqTk9OSU5GUklOR0VNRU5ULiAgSU4g Tk8gRVZFTlQgU0hBTEwgTWlsbC5DaGVuIGFuZCBNb25rLkxpdSBPUiBDT1BZUklHSFQKPisqSE9M REVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFks Cj4rKldIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwg QVJJU0lORwo+KypGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FS RSBPUiBUSEUgVVNFIE9SCj4rKk9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KPisqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqLwo+KyNpbmNsdWRlICJkZGs3NTBfcmVnLmgiCj4rI2luY2x1ZGUgImRkazc1MF9oZWxw LmgiCj4rI2luY2x1ZGUgImRkazc1MF9kaXNwbGF5LmgiCj4rI2luY2x1ZGUgImRkazc1MF9wb3dl ci5oIgo+KyNpbmNsdWRlICJkZGs3NTBfZHZpLmgiCj4rCj4rI2RlZmluZSBwcmltYXJ5V2FpdFZl cnRpY2FsU3luYyhkZWxheSkgd2FpdE5leHRWZXJ0aWNhbFN5bmMoMCwgZGVsYXkpCj4rCj4rc3Rh dGljIHZvaWQgc2V0RGlzcGxheUNvbnRyb2woaW50IGN0cmwsIGludCBkaXNwU3RhdGUpCj4rewo+ KwkvKiBzdGF0ZSAhPSAwIG1lYW5zIHR1cm4gb24gYm90aCB0aW1pbmcgJiBwbGFuZSBlbl9iaXQg Ki8KPisJdW5zaWduZWQgbG9uZyB1bERpc3BsYXlDdHJsUmVnLCB1bFJlc2VydmVkQml0cyA9IDA7 Cj4rCWludCBjbnQ7Cj4rCj4rCWNudCA9IDA7Cj4rCj4rCS8qIFNldCB0aGUgcHJpbWFyeSBkaXNw bGF5IGNvbnRyb2wgKi8KPisJaWYgKCFjdHJsKSB7Cj4rCQl1bERpc3BsYXlDdHJsUmVnID0gUEVF SzMyKFBBTkVMX0RJU1BMQVlfQ1RSTCk7Cj4rCQkvKiBUdXJuIG9uL29mZiB0aGUgUGFuZWwgZGlz cGxheSBjb250cm9sICovCj4rCQlpZiAoZGlzcFN0YXRlKSB7Cj4rCQkJLyogVGltaW5nIHNob3Vs ZCBiZSBlbmFibGVkIGZpcnN0IGJlZm9yZSBlbmFibGluZyB0aGUgcGxhbmUKPisJCQkgKiBiZWNh dXNlIGNoYW5naW5nIGF0IHRoZSBzYW1lIHRpbWUgZG9lcyBub3QgZ3VhcmFudGVlIHRoYXQKPisJ CQkgKiB0aGUgcGxhbmUgd2lsbCBhbHNvIGVuYWJsZWQgb3IgZGlzYWJsZWQuCj4rCQkJICovCj4r CQkJdWxEaXNwbGF5Q3RybFJlZyA9IHVsRGlzcGxheUN0cmxSZWd8KDEgPDwgUEFORUxfRElTUExB WV9DVFJMX1RJTUlOR19MU0IpOwo+KwkJCVBPS0UzMihQQU5FTF9ESVNQTEFZX0NUUkwsIHVsRGlz cGxheUN0cmxSZWcpOwo+Kwo+KwkJCXVsRGlzcGxheUN0cmxSZWcgPSB1bERpc3BsYXlDdHJsUmVn fCgxIDw8IFBBTkVMX0RJU1BMQVlfQ1RSTF9QTEFORV9MU0IpOwo+KwkJCS8qIEFkZGVkIHNvbWUg bWFza3MgdG8gbWFzayBvdXQgdGhlIHJlc2VydmVkIGJpdHMuCj4rCQkJICogU29tZXRpbWVzLCB0 aGUgcmVzZXJ2ZWQgYml0cyBhcmUgc2V0L3Jlc2V0IHJhbmRvbWx5IHdoZW4KPisJCQkgKiB3cml0 aW5nIHRvIHRoZSBQUklNQVJZX0RJU1BMQVlfQ1RSTCwgdGhlcmVmb3JlLCB0aGUgcmVnaXN0ZXIK PisJCQkgKiByZXNlcnZlZCBiaXRzIGFyZSBuZWVkZWQgdG8gYmUgbWFza2VkIG91dC4KPisJCQkg Ki8KPisJCQl1bFJlc2VydmVkQml0cyA9ICgzIDw8IFBBTkVMX0RJU1BMQVlfQ1RSTF9SRVNFUlZF RF8xX01BU0tfTFNCKXwKPisJCQkJCSgxNSA8PCBQQU5FTF9ESVNQTEFZX0NUUkxfUkVTRVJWRURf Ml9NQVNLX0xTQil8Cj4rCQkJCQkoMSA8PCBQQU5FTF9ESVNQTEFZX0NUUkxfUkVTRVJWRURfM19N QVNLX0xTQik7Cj4rCj4rCQkJLyogU29tZWhvdyB0aGUgcmVnaXN0ZXIgdmFsdWUgb24gdGhlIHBs YW5lIGlzIG5vdCBzZXQKPisJCQkgKiB1bnRpbCBhIGZldyBkZWxheS4gTmVlZCB0byB3cml0ZQo+ KwkJCSAqIGFuZCByZWFkIGl0IGEgY291cGxlIHRpbWVzCj4rCQkJICovCj4rCQkJZG8gewo+KwkJ CQljbnQrKzsKPisJCQkJUE9LRTMyKFBBTkVMX0RJU1BMQVlfQ1RSTCwgdWxEaXNwbGF5Q3RybFJl Zyk7Cj4rCQkJfSB3aGlsZSAoKFBFRUszMihQQU5FTF9ESVNQTEFZX0NUUkwpICYgfnVsUmVzZXJ2 ZWRCaXRzKSAhPQo+KwkJCQkJKHVsRGlzcGxheUN0cmxSZWcgJiB+dWxSZXNlcnZlZEJpdHMpKTsK PisJCQlwcmludGsoIlNldCBQYW5lbCBQbGFuZSBlbmJpdDphZnRlciB0cmllZCAlZCB0aW1lc1xu IiwgY250KTsKPisJCX0gZWxzZXsKPisJCQkvKiBXaGVuIHR1cm5pbmcgb2ZmLCB0aGVyZSBpcyBu byBydWxlIG9uIHRoZSBwcm9ncmFtbWluZwo+KwkJCSAqIHNlcXVlbmNlIHNpbmNlIHdoZW5ldmVy IHRoZSBjbG9jayBpcyBvZmYsIHRoZW4gaXQgZG9lcyBub3QKPisJCQkgKiBtYXR0ZXIgd2hldGhl ciB0aGUgcGxhbmUgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4KPisJCQkgKiBOb3RlOiBNb2RpZnlp bmcgdGhlIHBsYW5lIGJpdCB3aWxsIHRha2UgZWZmZWN0IG9uIHRoZQo+KwkJCSAqIG5leHQgdmVy dGljYWwgc3luYy4gTmVlZCB0byBmaW5kIG91dCBpZiBpdCBpcyBuZWNlc3NhcnkgdG8KPisJCQkg KiB3YWl0IGZvciAxIHZzeW5jIGJlZm9yZSBtb2RpZnlpbmcgdGhlIHRpbWluZyBlbmFibGUgYml0 Lgo+KwkJCSAqICovCj4rCQkJdWxEaXNwbGF5Q3RybFJlZyA9IHVsRGlzcGxheUN0cmxSZWcmKH4o MSA8PCBQQU5FTF9ESVNQTEFZX0NUUkxfUExBTkVfTFNCKSk7Cj4rCQkJUE9LRTMyKFBBTkVMX0RJ U1BMQVlfQ1RSTCwgdWxEaXNwbGF5Q3RybFJlZyk7Cj4rCj4rCQkJdWxEaXNwbGF5Q3RybFJlZyA9 IHVsRGlzcGxheUN0cmxSZWcmKH4oMSA8PCBQQU5FTF9ESVNQTEFZX0NUUkxfVElNSU5HX0xTQikp Owo+KwkJCVBPS0UzMihQQU5FTF9ESVNQTEFZX0NUUkwsIHVsRGlzcGxheUN0cmxSZWcpOwo+KwkJ fQo+Kwo+Kwl9IGVsc2V7Cj4rCQkvKiBTZXQgdGhlIHNlY29uZGFyeSBkaXNwbGF5IGNvbnRyb2wg Ki8KPisJCXVsRGlzcGxheUN0cmxSZWcgPSBQRUVLMzIoQ1JUX0RJU1BMQVlfQ1RSTCk7Cj4rCj4r CQlpZiAoZGlzcFN0YXRlKSB7Cj4rCQkJLyogVGltaW5nIHNob3VsZCBiZSBlbmFibGVkIGZpcnN0 IGJlZm9yZSBlbmFibGluZyB0aGUgcGxhbmUgYmVjYXVzZSBjaGFuZ2luZyBhdCB0aGUKPisJCQkg ICBzYW1lIHRpbWUgZG9lcyBub3QgZ3VhcmFudGVlIHRoYXQgdGhlIHBsYW5lIHdpbGwgYWxzbyBl bmFibGVkIG9yIGRpc2FibGVkLgo+KwkJCSAgICovCj4rCQkJdWxEaXNwbGF5Q3RybFJlZyA9IHVs RGlzcGxheUN0cmxSZWd8KDEgPDwgQ1JUX0RJU1BMQVlfQ1RSTF9USU1JTkdfTFNCKTsKPisJCQlQ T0tFMzIoQ1JUX0RJU1BMQVlfQ1RSTCwgdWxEaXNwbGF5Q3RybFJlZyk7Cj4rCj4rCQkJdWxEaXNw bGF5Q3RybFJlZyA9IHVsRGlzcGxheUN0cmxSZWd8KDEgPDwgQ1JUX0RJU1BMQVlfQ1RSTF9QTEFO RV9MU0IpOwo+Kwo+KwkJCS8qIEFkZGVkIHNvbWUgbWFza3MgdG8gbWFzayBvdXQgdGhlIHJlc2Vy dmVkIGJpdHMuCj4rCQkJICogU29tZXRpbWVzLCB0aGUgcmVzZXJ2ZWQgYml0cyBhcmUgc2V0L3Jl c2V0IHJhbmRvbWx5IHdoZW4KPisJCQkgKiB3cml0aW5nIHRvIHRoZSBQUklNQVJZX0RJU1BMQVlf Q1RSTCwgdGhlcmVmb3JlLCB0aGUgcmVnaXN0ZXIKPisJCQkgKiByZXNlcnZlZCBiaXRzIGFyZSBu ZWVkZWQgdG8gYmUgbWFza2VkIG91dC4KPisJCQkgKi8KPisKPisJCQl1bFJlc2VydmVkQml0cyA9 ICgwWDFGIDw8IENSVF9ESVNQTEFZX0NUUkxfUkVTRVJWRURfMV9NQVNLX0xTQil8Cj4rCQkJCQko MyA8PCBDUlRfRElTUExBWV9DVFJMX1JFU0VSVkVEXzJfTUFTS19MU0IpfAo+KwkJCQkJKDEgPDwg Q1JUX0RJU1BMQVlfQ1RSTF9SRVNFUlZFRF8zX01BU0tfTFNCKXwKPisJCQkJCSgxIDw8IENSVF9E SVNQTEFZX0NUUkxfUkVTRVJWRURfNF9NQVNLX0xTQik7Cj4rCQkJZG8gewo+KwkJCQljbnQrKzsK PisJCQkJUE9LRTMyKENSVF9ESVNQTEFZX0NUUkwsIHVsRGlzcGxheUN0cmxSZWcpOwo+KwkJCX0g d2hpbGUgKChQRUVLMzIoQ1JUX0RJU1BMQVlfQ1RSTCkgJiB+dWxSZXNlcnZlZEJpdHMpICE9Cj4r CQkJCQkodWxEaXNwbGF5Q3RybFJlZyAmIH51bFJlc2VydmVkQml0cykpOwo+KwkJCXByaW50aygi U2V0IENydCBQbGFuZSBlbmJpdDphZnRlciB0cmllZCAlZCB0aW1lc1xuIiwgY250KTsKPisJCX0g ZWxzZXsKPisJCQkvKiBXaGVuIHR1cm5pbmcgb2ZmLCB0aGVyZSBpcyBubyBydWxlIG9uIHRoZSBw cm9ncmFtbWluZwo+KwkJCSAqIHNlcXVlbmNlIHNpbmNlIHdoZW5ldmVyIHRoZSBjbG9jayBpcyBv ZmYsIHRoZW4gaXQgZG9lcyBub3QKPisJCQkgKiBtYXR0ZXIgd2hldGhlciB0aGUgcGxhbmUgaXMg ZW5hYmxlZCBvciBkaXNhYmxlZC4KPisJCQkgKiBOb3RlOiBNb2RpZnlpbmcgdGhlIHBsYW5lIGJp dCB3aWxsIHRha2UgZWZmZWN0IG9uIHRoZSBuZXh0Cj4rCQkJICogdmVydGljYWwgc3luYy4gTmVl ZCB0byBmaW5kIG91dCBpZiBpdCBpcyBuZWNlc3NhcnkgdG8KPisJCQkgKiB3YWl0IGZvciAxIHZz eW5jIGJlZm9yZSBtb2RpZnlpbmcgdGhlIHRpbWluZyBlbmFibGUgYml0Lgo+KwkJCSAqLwo+KwkJ CXVsRGlzcGxheUN0cmxSZWcgPSB1bERpc3BsYXlDdHJsUmVnJih+KDEgPDwgQ1JUX0RJU1BMQVlf Q1RSTF9QTEFORV9MU0IpKTsKPisJCQlQT0tFMzIoQ1JUX0RJU1BMQVlfQ1RSTCwgdWxEaXNwbGF5 Q3RybFJlZyk7Cj4rCj4rCQkJdWxEaXNwbGF5Q3RybFJlZyA9IHVsRGlzcGxheUN0cmxSZWcmKH4o MSA8PCBDUlRfRElTUExBWV9DVFJMX1RJTUlOR19MU0IpKTsKPisJCQlQT0tFMzIoQ1JUX0RJU1BM QVlfQ1RSTCwgdWxEaXNwbGF5Q3RybFJlZyk7Cj4rCQl9Cj4rCX0KPit9Cj4rCj4rCj4rc3RhdGlj IHZvaWQgd2FpdE5leHRWZXJ0aWNhbFN5bmMoaW50IGN0cmwsIGludCBkZWxheSkKPit7Cj4rCXVu c2lnbmVkIGludCBzdGF0dXM7Cj4rCWlmICghY3RybCkgewo+KwkJLyogcHJpbWFyeSBjb250cm9s bGVyICovCj4rCj4rCQkvKiBEbyBub3Qgd2FpdCB3aGVuIHRoZSBQcmltYXJ5IFBMTCBpcyBvZmYg b3IgZGlzcGxheSBjb250cm9sIGlzIGFscmVhZHkgb2ZmLgo+KwkJICAgVGhpcyB3aWxsIHByZXZl bnQgdGhlIHNvZnR3YXJlIHRvIHdhaXQgZm9yZXZlci4gKi8KPisJCWlmICgoKDEmKFBFRUszMihQ QU5FTF9QTExfQ1RSTCkgPj4gUEFORUxfUExMX0NUUkxfUE9XRVJfTFNCKSkgPT0KPisJCQkJCVBB TkVMX1BMTF9DVFJMX1BPV0VSX09GRikgfHwKPisJCQkJKCgxJihQRUVLMzIoUEFORUxfRElTUExB WV9DVFJMKSA+PiBQQU5FTF9ESVNQTEFZX0NUUkxfVElNSU5HX0xTQikpID09Cj4rCQkJCSBQQU5F TF9ESVNQTEFZX0NUUkxfVElNSU5HX0RJU0FCTEUpKSB7Cj4rCQkJcmV0dXJuOwo+KwkJfQo+KwkJ d2hpbGUgKGRlbGF5LS0gPiAwKSB7Cj4rCQkJLyogV2FpdCBmb3IgZW5kIG9mIHZzeW5jLiAqLwo+ KwkJCWRvIHsKPisJCQkJc3RhdHVzID0gMSYoUEVFSzMyKFNZU1RFTV9DVFJMKSA+PiBTWVNURU1f Q1RSTF9QQU5FTF9WU1lOQ19MU0IpOwo+KwkJCX0gd2hpbGUgKHN0YXR1cyA9PSBTWVNURU1fQ1RS TF9QQU5FTF9WU1lOQ19BQ1RJVkUpOwo+Kwo+KwkJCS8qIFdhaXQgZm9yIHN0YXJ0IG9mIHZzeW5j LiAqLwo+KwkJCWRvIHsKPisJCQkJc3RhdHVzID0gMSYoUEVFSzMyKFNZU1RFTV9DVFJMKSA+PiBT WVNURU1fQ1RSTF9QQU5FTF9WU1lOQ19MU0IpOwo+KwkJCX0gd2hpbGUgKHN0YXR1cyA9PSBTWVNU RU1fQ1RSTF9QQU5FTF9WU1lOQ19JTkFDVElWRSk7Cj4rCQl9Cj4rCj4rCX0gZWxzZXsKPisKPisJ CS8qIERvIG5vdCB3YWl0IHdoZW4gdGhlIFByaW1hcnkgUExMIGlzIG9mZiBvciBkaXNwbGF5IGNv bnRyb2wgaXMgYWxyZWFkeSBvZmYuCj4rCQkgICBUaGlzIHdpbGwgcHJldmVudCB0aGUgc29mdHdh cmUgdG8gd2FpdCBmb3JldmVyLiAqLwo+KwkJaWYgKCgxJihQRUVLMzIoQ1JUX1BMTF9DVFJMKSA+ PiBDUlRfUExMX0NUUkxfUE9XRVJfTFNCKSA9PQo+KwkJCQkJQ1JUX1BMTF9DVFJMX1BPV0VSX09G RikgfHwKPisJCQkJKDEmKFBFRUszMihDUlRfRElTUExBWV9DVFJMKSA+PiBDUlRfRElTUExBWV9D VFJMX1RJTUlOR19MU0IpID09Cj4rCQkJCSBDUlRfRElTUExBWV9DVFJMX1RJTUlOR19ESVNBQkxF KSkgewo+KwkJCXJldHVybjsKPisJCX0KPisKPisJCXdoaWxlIChkZWxheS0tID4gMCkgewo+KwkJ CS8qIFdhaXQgZm9yIGVuZCBvZiB2c3luYy4gKi8KPisJCQlkbyB7Cj4rCQkJCXN0YXR1cyA9IDEm KFBFRUszMihTWVNURU1fQ1RSTCkgPj4gU1lTVEVNX0NUUkxfQ1JUX1ZTWU5DX0xTQik7Cj4rCQkJ fSB3aGlsZSAoc3RhdHVzID09IFNZU1RFTV9DVFJMX0NSVF9WU1lOQ19BQ1RJVkUpOwo+Kwo+KwkJ CS8qIFdhaXQgZm9yIHN0YXJ0IG9mIHZzeW5jLiAqLwo+KwkJCWRvIHsKPisJCQkJc3RhdHVzID0g MSYoUEVFSzMyKFNZU1RFTV9DVFJMKSA+PiBTWVNURU1fQ1RSTF9DUlRfVlNZTkNfTFNCKTsKPisJ CQl9IHdoaWxlIChzdGF0dXMgPT0gU1lTVEVNX0NUUkxfQ1JUX1ZTWU5DX0lOQUNUSVZFKTsKPisJ CX0KPisJfQo+K30KPisKPitzdGF0aWMgdm9pZCBzd1BhbmVsUG93ZXJTZXF1ZW5jZV9zbTc1MGxl KGludCBkaXNwLCBpbnQgZGVsYXkpCj4rewo+Kwl1bnNpZ25lZCBpbnQgcmVnOwo+KwlyZWcgPSBQ RUVLMzIoRElTUExBWV9DT05UUk9MXzc1MExFKTsKPisJaWYgKGRpc3ApCj4rCQlyZWcgfD0gMHhm Owo+KwllbHNlCj4rCQlyZWcgJj0gfjB4ZjsKPisJUE9LRTMyKERJU1BMQVlfQ09OVFJPTF83NTBM RSwgcmVnKTsKPit9Cj4rCj4rc3RhdGljIHZvaWQgc3dQYW5lbFBvd2VyU2VxdWVuY2UoaW50IGRp c3AsIGludCBkZWxheSkKPit7Cj4rCXVuc2lnbmVkIGludCByZWc7Cj4rCj4rCS8qIGRpc3Agc2hv dWxkIGJlIDEgdG8gb3BlbiBzZXF1ZW5jZSAqLwo+KwlyZWcgPSBQRUVLMzIoUEFORUxfRElTUExB WV9DVFJMKTsKPisJcmVnICY9IH4oMSA8PCBQQU5FTF9ESVNQTEFZX0NUUkxfRlBFTl9MU0IpOwo+ KwlyZWcgPSByZWd8KGRpc3AgPDwgUEFORUxfRElTUExBWV9DVFJMX0ZQRU5fTFNCKTsKPisJUE9L RTMyKFBBTkVMX0RJU1BMQVlfQ1RSTCwgcmVnKTsKPisJcHJpbWFyeVdhaXRWZXJ0aWNhbFN5bmMo ZGVsYXkpOwo+Kwo+KwlyZWcgPSBQRUVLMzIoUEFORUxfRElTUExBWV9DVFJMKTsKPisJcmVnICY9 IH4oMSA8PCBQQU5FTF9ESVNQTEFZX0NUUkxfREFUQV9MU0IpOwo+KwlyZWcgPSByZWd8KGRpc3Ag PDwgUEFORUxfRElTUExBWV9DVFJMX0RBVEFfTFNCKTsKPisJUE9LRTMyKFBBTkVMX0RJU1BMQVlf Q1RSTCwgcmVnKTsKPisJcHJpbWFyeVdhaXRWZXJ0aWNhbFN5bmMoZGVsYXkpOwo+Kwo+KwlyZWcg PSBQRUVLMzIoUEFORUxfRElTUExBWV9DVFJMKTsKPisJcmVnICY9IH4oMSA8PCBQQU5FTF9ESVNQ TEFZX0NUUkxfVkJJQVNFTl9MU0IpOwo+KwlyZWcgPSByZWd8KGRpc3AgPDwgUEFORUxfRElTUExB WV9DVFJMX1ZCSUFTRU5fTFNCKTsKPisJUE9LRTMyKFBBTkVMX0RJU1BMQVlfQ1RSTCwgcmVnKTsK PisJcHJpbWFyeVdhaXRWZXJ0aWNhbFN5bmMoZGVsYXkpOwo+Kwo+KwlyZWcgPSBQRUVLMzIoUEFO RUxfRElTUExBWV9DVFJMKTsKPisJcmVnICY9IH4oMSA8PCBQQU5FTF9ESVNQTEFZX0NUUkxfRlBF Tl9MU0IpOwo+KwlyZWcgPSByZWd8KGRpc3AgPDwgUEFORUxfRElTUExBWV9DVFJMX0ZQRU5fTFNC KTsKPisJUE9LRTMyKFBBTkVMX0RJU1BMQVlfQ1RSTCwgcmVnKTsKPisJcHJpbWFyeVdhaXRWZXJ0 aWNhbFN5bmMoZGVsYXkpOwo+Kwo+K30KPisKPit2b2lkIGRkazc1MF9zZXRMb2dpY2FsRGlzcE91 dChkaXNwX291dHB1dF90IG91dHB1dCkKPit7Cj4rCXVuc2lnbmVkIGludCByZWc7Cj4rCWlmIChv dXRwdXQgJiBQTkxfMl9VU0FHRSkgewo+KwkJLyogc2V0IHBhbmVsIHBhdGggY29udHJvbGxlciBz ZWxlY3QgKi8KPisJCXJlZyA9IFBFRUszMihQQU5FTF9ESVNQTEFZX0NUUkwpOwo+KwkJcmVnICY9 IH4oMyA8PCBQQU5FTF9ESVNQTEFZX0NUUkxfU0VMRUNUX0xTQik7Cj4rCQlyZWcgPSByZWd8KChv dXRwdXQgJiBQTkxfMl9NQVNLKSA+PiBQTkxfMl9PRkZTRVQpIDw8IFBBTkVMX0RJU1BMQVlfQ1RS TF9TRUxFQ1RfTFNCOwo+KwkJUE9LRTMyKFBBTkVMX0RJU1BMQVlfQ1RSTCwgcmVnKTsKPisJfQo+ Kwo+KwlpZiAob3V0cHV0ICYgQ1JUXzJfVVNBR0UpIHsKPisJCS8qIHNldCBjcnQgcGF0aCBjb250 cm9sbGVyIHNlbGVjdCAqLwo+KwkJcmVnID0gUEVFSzMyKENSVF9ESVNQTEFZX0NUUkwpOwo+KwkJ cmVnICY9IH4oMyA8PCBDUlRfRElTUExBWV9DVFJMX1NFTEVDVF9MU0IpOwo+KwkJcmVnID0gcmVn fCgob3V0cHV0ICYgQ1JUXzJfTUFTSykgPj4gQ1JUXzJfT0ZGU0VUKSA8PCBDUlRfRElTUExBWV9D VFJMX1NFTEVDVF9MU0I7Cj4rCQkvKnNlIGJsYW5rIG9mZiAqLwo+KwkJcmVnID0gcmVnJih+KDEg PDwgQ1JUX0RJU1BMQVlfQ1RSTF9CTEFOS19MU0IpKTsKPisJCVBPS0UzMihDUlRfRElTUExBWV9D VFJMLCByZWcpOwo+Kwl9Cj4rCWlmIChvdXRwdXQgJiBQUklfVFBfVVNBR0UpIHsKPisJCS8qIHNl dCBwcmltYXJ5IHRpbWluZyBhbmQgcGxhbmUgZW5fYml0ICovCj4rCQlzZXREaXNwbGF5Q29udHJv bCgwLCAob3V0cHV0JlBSSV9UUF9NQVNLKSA+PiBQUklfVFBfT0ZGU0VUKTsKPisJfQo+Kwo+Kwlp ZiAob3V0cHV0ICYgU0VDX1RQX1VTQUdFKSB7Cj4rCQkvKiBzZXQgc2Vjb25kYXJ5IHRpbWluZyBh bmQgcGxhbmUgZW5fYml0Ki8KPisJCXNldERpc3BsYXlDb250cm9sKDEsIChvdXRwdXQmU0VDX1RQ X01BU0spID4+IFNFQ19UUF9PRkZTRVQpOwo+Kwl9Cj4rCj4rCWlmIChvdXRwdXQgJiBQTkxfU0VR X1VTQUdFKSB7Cj4rCQkvKiBzZXQgIHBhbmVsIHNlcXVlbmNlICovCj4rCQlzd1BhbmVsUG93ZXJT ZXF1ZW5jZSgob3V0cHV0JlBOTF9TRVFfTUFTSykgPj4gUE5MX1NFUV9PRkZTRVQsIDQpOwo+Kwl9 Cj4rCj4rCWlmIChvdXRwdXQgJiBEQUNfVVNBR0UpCj4rCQlzZXREQUMoKG91dHB1dCAmIERBQ19N QVNLKSA+PiBEQUNfT0ZGU0VUKTsKPisKPisJaWYgKG91dHB1dCAmIERQTVNfVVNBR0UpCj4rCQlk ZGs3NTBfc2V0RFBNUygob3V0cHV0ICYgRFBNU19NQVNLKSA+PiBEUE1TX09GRlNFVCk7Cj4rfQo+ Kwo+Kwo+K2ludCBkZGs3NTBfaW5pdERWSURpc3AoKQo+K3sKPisJLyogSW5pdGlhbGl6ZSBEVkku IElmIHRoZSBkdmlJbml0IGZhaWwgYW5kIHRoZSBWZW5kb3JJRCBvciB0aGUgRGV2aWNlSUQgYXJl Cj4rCSAgIG5vdCB6ZXJvZWQsIHRoZW4gc2V0IHRoZSBmYWlsdXJlIGZsYWcuIElmIGl0IGlzIHpl cm9lLCBpdCBtaWdodCBtZWFuCj4rCSAgIHRoYXQgdGhlIHN5c3RlbSBpcyBpbiBEdWFsIENSVCBN b25pdG9yIGNvbmZpZ3VyYXRpb24uICovCj4rCj4rCS8qIERlLXNrZXcgZW5hYmxlZCB3aXRoIGRl ZmF1bHQgMTExYiB2YWx1ZS4KPisJICAgVGhpcyB3aWxsIGZpeCBzb21lIGFydGlmYWN0cyBwcm9i bGVtIGluIHNvbWUgbW9kZSBvbiBib2FyZCAyLjIuCj4rCSAgIFNvbWVob3cgdGhpcyBmaXggZG9l cyBub3QgYWZmZWN0IGJvYXJkIDIuMS4KPisJICAgKi8KPisJaWYgKChkdmlJbml0KDEsIC8qIFNl bGVjdCBSaXNpbmcgRWRnZSAqLwo+KwkJCQkJMSwgLyogU2VsZWN0IDI0LWJpdCBidXMgKi8KPisJ CQkJCTAsIC8qIFNlbGVjdCBTaW5nbGUgRWRnZSBjbG9jayAqLwo+KwkJCQkJMSwgLyogRW5hYmxl IEhTeW5jIGFzIGlzICovCj4rCQkJCQkxLCAvKiBFbmFibGUgVlN5bmMgYXMgaXMgKi8KPisJCQkJ CTEsIC8qIEVuYWJsZSBEZS1za2V3ICovCj4rCQkJCQk3LCAvKiBTZXQgdGhlIGRlLXNrZXcgc2V0 dGluZyB0byBtYXhpbXVtIHNldHVwICovCj4rCQkJCQkxLCAvKiBFbmFibGUgY29udGludW91cyBT eW5jICovCj4rCQkJCQkxLCAvKiBFbmFibGUgUExMIEZpbHRlciAqLwo+KwkJCQkJNCAgIC8qIFVz ZSB0aGUgcmVjb21tZW5kZWQgdmFsdWUgZm9yIFBMTCBGaWx0ZXIgdmFsdWUgKi8KPisJCSAgICAp ICE9IDApICYmIChkdmlHZXRWZW5kb3JJRCgpICE9IDB4MDAwMCkgJiYgKGR2aUdldERldmljZUlE KCkgIT0gMHgwMDAwKSkgewo+KwkJcmV0dXJuIC0xOwo+Kwl9Cj4rCj4rCS8qIFRPRE86IEluaXRp YWxpemUgb3RoZXIgZGlzcGxheSBjb21wb25lbnQgKi8KPisKPisJLyogU3VjY2VzcyAqLwo+Kwly ZXR1cm4gMDsKPisKPit9Cj4rCj5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9seW54ZmIvZGRr NzUwX2Rpc3BsYXkuaCBiL2RyaXZlcnMvdmlkZW8vbHlueGZiL2Rkazc1MF9kaXNwbGF5LmgKPm5l dyBmaWxlIG1vZGUgMTAwNjQ0Cj5pbmRleCAwMDAwMDAwLi5hYmMyYTkzCj4tLS0gL2Rldi9udWxs Cj4rKysgYi9kcml2ZXJzL3ZpZGVvL2x5bnhmYi9kZGs3NTBfZGlzcGxheS5oCj5AQCAtMCwwICsx LDEyNCBAQAo+Ky8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqCj4rKkNvcHlyaWdodCAoYykgMjAxMiBieSBTaWxpY29uIE1v dGlvbiwgSW5jLiAoU01JKQo+KypQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9m IGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cj4rKm9mIHRoaXMgc29mdHdh cmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0 byBkZWFsCj4rKmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcg d2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8KPisqdXNlLCBjb3B5LCBtb2RpZnksIG1l cmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMK Pisqb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29m dHdhcmUgaXMgZnVybmlzaGVkIHRvCj4rKmRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9uczoKPisqCj4rKlRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRI T1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAo+KypFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElO RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMKPisqT0YgTUVSQ0hBTlRBQklMSVRZ LCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKPisqTk9OSU5GUklOR0VNRU5U LiAgSU4gTk8gRVZFTlQgU0hBTEwgTWlsbC5DaGVuIGFuZCBNb25rLkxpdSBPUiBDT1BZUklHSFQK PisqSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFC SUxJVFksCj4rKldIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVS V0lTRSwgQVJJU0lORwo+KypGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBT T0ZUV0FSRSBPUiBUSEUgVVNFIE9SCj4rKk9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4K PisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLwo+KyNpZm5kZWYgRERLNzUwX0RJU1BMQVlfSF9fCj4rI2RlZmluZSBEREs3 NTBfRElTUExBWV9IX18KPisKPisvKiBwYW5lbCBwYXRoIHNlbGVjdAo+KyAgIDgwMDAwWzI5OjI4 XQo+KyAgICovCj4rCj4rI2RlZmluZSBQTkxfMl9PRkZTRVQgMAo+KyNkZWZpbmUgUE5MXzJfTUFT SyAoMyA8PCBQTkxfMl9PRkZTRVQpCj4rI2RlZmluZSBQTkxfMl9VU0FHRQkoUE5MXzJfTUFTSyA8 PCAxNikKPisjZGVmaW5lIFBOTF8yX1BSSSAJKCgwIDw8IFBOTF8yX09GRlNFVCl8UE5MXzJfVVNB R0UpCj4rI2RlZmluZSBQTkxfMl9TRUMJKCgyIDw8IFBOTF8yX09GRlNFVCl8UE5MXzJfVVNBR0Up Cj4rCj4rCj4rLyogcHJpbWFyeSB0aW1pbmcgJiBwbGFuZSBlbmFibGUgYml0Cj4rMTogODAwMDBb OF0gJiA4MDAwMFsyXSBvbgo+KzA6IGJvdGggb2ZmCj4rKi8KPisjZGVmaW5lIFBSSV9UUF9PRkZT RVQgNAo+KyNkZWZpbmUgUFJJX1RQX01BU0sgKDEgPDwgUFJJX1RQX09GRlNFVCkKPisjZGVmaW5l IFBSSV9UUF9VU0FHRSAoUFJJX1RQX01BU0sgPDwgMTYpCj4rI2RlZmluZSBQUklfVFBfT04gKCgw eDEgPDwgUFJJX1RQX09GRlNFVCl8UFJJX1RQX1VTQUdFKQo+KyNkZWZpbmUgUFJJX1RQX09GRiAo KDB4MCA8PCBQUklfVFBfT0ZGU0VUKXxQUklfVFBfVVNBR0UpCj4rCj4rCj4rLyogcGFuZWwgc2Vx dWVuY3kgc3RhdHVzCj4rICAgODAwMDBbMjc6MjRdCj4rICAgKi8KPisjZGVmaW5lIFBOTF9TRVFf T0ZGU0VUIDYKPisjZGVmaW5lIFBOTF9TRVFfTUFTSyAoMSA8PCBQTkxfU0VRX09GRlNFVCkKPisj ZGVmaW5lIFBOTF9TRVFfVVNBR0UgKFBOTF9TRVFfTUFTSyA8PCAxNikKPisjZGVmaW5lIFBOTF9T RVFfT04gKCgxIDw8IFBOTF9TRVFfT0ZGU0VUKXxQTkxfU0VRX1VTQUdFKQo+KyNkZWZpbmUgUE5M X1NFUV9PRkYgKCgwIDw8IFBOTF9TRVFfT0ZGU0VUKXxQTkxfU0VRX1VTQUdFKQo+Kwo+Ky8qIGR1 YWwgZGlnaXRhbCBvdXRwdXQKPisgICA4MDAwMFsxOV0KPisgICAqLwo+KyNkZWZpbmUgRFVBTF9U RlRfT0ZGU0VUIDgKPisjZGVmaW5lIERVQUxfVEZUX01BU0sgKDEgPDwgRFVBTF9URlRfT0ZGU0VU KQo+KyNkZWZpbmUgRFVBTF9URlRfVVNBR0UgKERVQUxfVEZUX01BU0sgPDwgMTYpCj4rI2RlZmlu ZSBEVUFMX1RGVF9PTiAoKDEgPDwgRFVBTF9URlRfT0ZGU0VUKXxEVUFMX1RGVF9VU0FHRSkKPisj ZGVmaW5lIERVQUxfVEZUX09GRiAoKDAgPDwgRFVBTF9URlRfT0ZGU0VUKXxEVUFMX1RGVF9VU0FH RSkKPisKPisvKiBzZWNvbmRhcnkgdGltaW5nICYgcGxhbmUgZW5hYmxlIGJpdAo+KzE6ODAyMDBb OF0gJiA4MDIwMFsyXSBvbgo+KzA6IGJvdGggb2ZmCj4rKi8KPisjZGVmaW5lIFNFQ19UUF9PRkZT RVQgNQo+KyNkZWZpbmUgU0VDX1RQX01BU0sgKDEgPDwgU0VDX1RQX09GRlNFVCkKPisjZGVmaW5l IFNFQ19UUF9VU0FHRSAoU0VDX1RQX01BU0sgPDwgMTYpCj4rI2RlZmluZSBTRUNfVFBfT04gICgo MHgxIDw8IFNFQ19UUF9PRkZTRVQpfFNFQ19UUF9VU0FHRSkKPisjZGVmaW5lIFNFQ19UUF9PRkYg KCgweDAgPDwgU0VDX1RQX09GRlNFVCl8U0VDX1RQX1VTQUdFKQo+Kwo+Ky8qIGNydCBwYXRoIHNl bGVjdAo+KyAgIDgwMjAwWzE5OjE4XQo+KyAgICovCj4rI2RlZmluZSBDUlRfMl9PRkZTRVQgMgo+ KyNkZWZpbmUgQ1JUXzJfTUFTSyAoMyA8PCBDUlRfMl9PRkZTRVQpCj4rI2RlZmluZSBDUlRfMl9V U0FHRSAoQ1JUXzJfTUFTSyA8PCAxNikKPisjZGVmaW5lIENSVF8yX1BSSSAoKDB4MCA8PCBDUlRf Ml9PRkZTRVQpfENSVF8yX1VTQUdFKQo+KyNkZWZpbmUgQ1JUXzJfU0VDICgoMHgyIDw8IENSVF8y X09GRlNFVCl8Q1JUXzJfVVNBR0UpCj4rCj4rCj4rLyogREFDIGFmZmVjdCBib3RoIERWSSBhbmQg RFNVQgo+KyAgIDRbMjBdCj4rICAgKi8KPisjZGVmaW5lIERBQ19PRkZTRVQgNwo+KyNkZWZpbmUg REFDX01BU0sgKDEgPDwgREFDX09GRlNFVCkKPisjZGVmaW5lIERBQ19VU0FHRSAoREFDX01BU0sg PDwgMTYpCj4rI2RlZmluZSBEQUNfT04gKCgweDAgPDwgREFDX09GRlNFVCl8REFDX1VTQUdFKQo+ KyNkZWZpbmUgREFDX09GRiAoKDB4MSA8PCBEQUNfT0ZGU0VUKXxEQUNfVVNBR0UpCj4rCj4rLyog RFBNUyBvbmx5IGFmZmVjdCBELVNVQiBoZWFkCj4rICAgMFszMTozMF0KPisgICAqLwo+KyNkZWZp bmUgRFBNU19PRkZTRVQgOQo+KyNkZWZpbmUgRFBNU19NQVNLICgzIDw8IERQTVNfT0ZGU0VUKQo+ KyNkZWZpbmUgRFBNU19VU0FHRSAoRFBNU19NQVNLIDw8IDE2KQo+KyNkZWZpbmUgRFBNU19PRkYg KCgzIDw8IERQTVNfT0ZGU0VUKXxEUE1TX1VTQUdFKQo+KyNkZWZpbmUgRFBNU19PTiAoKDAgPDwg RFBNU19PRkZTRVQpfERQTVNfVVNBR0UpCj4rCj4rCj4rCj4rLyoKPisgICBMQ0QxIG1lYW5zIHBh bmVsIHBhdGggVEZUMSAgJiBwYW5lbCBwYXRoIERWSSAoc28gZW5hYmxlIERBQykKPisgICBDUlQg bWVhbnMgY3J0IHBhdGggRFNVQgo+KyAgICovCj4rCj4rdHlwZWRlZiBlbnVtIF9kaXNwX291dHB1 dF90ewo+Kwlkb19MQ0QxX1BSSSA9IFBOTF8yX1BSSXxQUklfVFBfT058UE5MX1NFUV9PTnxEQUNf T04sCj4rCWRvX0xDRDFfU0VDID0gUE5MXzJfU0VDfFNFQ19UUF9PTnxQTkxfU0VRX09OfERBQ19P TiwKPisJZG9fTENEMl9QUkkgPSBDUlRfMl9QUkl8UFJJX1RQX09OfERVQUxfVEZUX09OLAo+Kwlk b19MQ0QyX1NFQyA9IENSVF8yX1NFQ3xTRUNfVFBfT058RFVBTF9URlRfT04sCj4rCS8qCj4rCSAg IGRvX0RTVUJfUFJJID0gQ1JUXzJfUFJJfFBSSV9UUF9PTnxEUE1TX09OfERBQ19PTiwKPisJICAg ZG9fRFNVQl9TRUMgPSBDUlRfMl9TRUN8U0VDX1RQX09OfERQTVNfT058REFDX09OLAo+KwkgICAq Lwo+Kwlkb19DUlRfUFJJID0gQ1JUXzJfUFJJfFBSSV9UUF9PTnxEUE1TX09OfERBQ19PTiwKPisJ ZG9fQ1JUX1NFQyA9IENSVF8yX1NFQ3xTRUNfVFBfT058RFBNU19PTnxEQUNfT04sCj4rfQo+K2Rp c3Bfb3V0cHV0X3Q7Cj4rCj4rdm9pZCBkZGs3NTBfc2V0TG9naWNhbERpc3BPdXQoZGlzcF9vdXRw dXRfdCk7Cj4raW50IGRkazc1MF9pbml0RFZJRGlzcCh2b2lkKTsKPisKPisjZW5kaWYKPmRpZmYg LS1naXQgYS9kcml2ZXJzL3ZpZGVvL2x5bnhmYi9kZGs3NTBfZHZpLmMgYi9kcml2ZXJzL3ZpZGVv L2x5bnhmYi9kZGs3NTBfZHZpLmMKPm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj5pbmRleCAwMDAwMDAw Li4wNjYzMDA5Cj4tLS0gL2Rldi9udWxsCj4rKysgYi9kcml2ZXJzL3ZpZGVvL2x5bnhmYi9kZGs3 NTBfZHZpLmMKPkBAIC0wLDAgKzEsMTE0IEBACj4rLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKPisqQ29weXJpZ2h0IChj KSAyMDEyIGJ5IFNpbGljb24gTW90aW9uLCBJbmMuIChTTUkpCj4rKlBlcm1pc3Npb24gaXMgaGVy ZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNv cHkKPisqb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVz ICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKPisqaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVz dHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwo+Kyp1 c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2Us IGFuZC9vciBzZWxsIGNvcGllcwo+KypvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVy c29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8KPisqZG8gc28sIHN1Ympl Y3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+KyoKPisqVEhFIFNPRlRXQVJFIElTIFBS T1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCj4rKkVYUFJFU1Mg T1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUwo+ KypPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFO RAo+KypOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBNaWxsLkNoZW4gYW5kIE1v bmsuTGl1IE9SIENPUFlSSUdIVAo+KypIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBE QU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKPisqV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09O VFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCj4rKkZST00sIE9VVCBPRiBPUiBJTiBD T05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKPisqT1RIRVIgREVBTElO R1MgSU4gVEhFIFNPRlRXQVJFLgo+KyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCj4rI2lmZGVmIFVTRV9EVklDSElQCj4r I2luY2x1ZGUgImRkazc1MF9oZWxwLmgiCj4rI2luY2x1ZGUgImRkazc1MF9yZWcuaCIKPisjaW5j bHVkZSAiZGRrNzUwX2R2aS5oIgo+KyNpbmNsdWRlICJkZGs3NTBfc2lpMTY0LmgiCj4rCj4rCj4r LyogVGhpcyBnbG9iYWwgdmFyaWFibGUgY29udGFpbnMgYWxsIHRoZSBzdXBwb3J0ZWQgZHJpdmVy IGFuZCBpdHMgY29ycmVzcG9uZGluZwo+KyAgIGZ1bmN0aW9uIEFQSS4gUGxlYXNlIHNldCB0aGUg ZnVuY3Rpb24gcG9pbnRlciB0byBOVUxMIHdoZW5ldmVyIHRoZSBmdW5jdGlvbgo+KyAgIGlzIG5v dCBzdXBwb3J0ZWQuICovCj4rc3RhdGljIGR2aV9jdHJsX2RldmljZV90IGdfZGNmdFN1cHBvcnRl ZER2aUNvbnRyb2xsZXJbXSA9IHsKPisjaWZkZWYgRFZJX0NUUkxfU0lJMTY0Cj4rCXsKPisJCS5w Zm5Jbml0ID0gc2lpMTY0SW5pdENoaXAsCj4rCQkucGZuR2V0VmVuZG9ySWQgPSBzaWkxNjRHZXRW ZW5kb3JJRCwKPisJCS5wZm5HZXREZXZpY2VJZCA9IHNpaTE2NEdldERldmljZUlELAo+KyNpZmRl ZiBTSUkxNjRfRlVMTF9GVU5DVElPTlMKPisJCS5wZm5SZXNldENoaXAgPSBzaWkxNjRSZXNldENo aXAsCj4rCQkucGZuR2V0Q2hpcFN0cmluZyA9IHNpaTE2NEdldENoaXBTdHJpbmcsCj4rCQkucGZu U2V0UG93ZXIgPSBzaWkxNjRTZXRQb3dlciwKPisJCS5wZm5FbmFibGVIb3RQbHVnRGV0ZWN0aW9u ID0gc2lpMTY0RW5hYmxlSG90UGx1Z0RldGVjdGlvbiwKPisJCS5wZm5Jc0Nvbm5lY3RlZCA9IHNp aTE2NElzQ29ubmVjdGVkLAo+KwkJLnBmbkNoZWNrSW50ZXJydXB0ID0gc2lpMTY0Q2hlY2tJbnRl cnJ1cHQsCj4rCQkucGZuQ2xlYXJJbnRlcnJ1cHQgPSBzaWkxNjRDbGVhckludGVycnVwdCwKPisj ZW5kaWYKPisJfSwKPisjZW5kaWYKPit9Owo+Kwo+Kwo+K2ludCBkdmlJbml0KAo+KwkJdW5zaWdu ZWQgY2hhciBlZGdlU2VsZWN0LAo+KwkJdW5zaWduZWQgY2hhciBidXNTZWxlY3QsCj4rCQl1bnNp Z25lZCBjaGFyIGR1YWxFZGdlQ2xrU2VsZWN0LAo+KwkJdW5zaWduZWQgY2hhciBoc3luY0VuYWJs ZSwKPisJCXVuc2lnbmVkIGNoYXIgdnN5bmNFbmFibGUsCj4rCQl1bnNpZ25lZCBjaGFyIGRlc2tl d0VuYWJsZSwKPisJCXVuc2lnbmVkIGNoYXIgZGVza2V3U2V0dGluZywKPisJCXVuc2lnbmVkIGNo YXIgY29udGludW91c1N5bmNFbmFibGUsCj4rCQl1bnNpZ25lZCBjaGFyIHBsbEZpbHRlckVuYWJs ZSwKPisJCXVuc2lnbmVkIGNoYXIgcGxsRmlsdGVyVmFsdWUKPisJICAgKQo+K3sKPisJZHZpX2N0 cmxfZGV2aWNlX3QgKnBDdXJyZW50RHZpQ3RybDsKPisJcEN1cnJlbnREdmlDdHJsID0gZ19kY2Z0 U3VwcG9ydGVkRHZpQ29udHJvbGxlcjsKPisJaWYgKHBDdXJyZW50RHZpQ3RybC0+cGZuSW5pdCAh PSBOVUxMKSB7Cj4rCQlyZXR1cm4gcEN1cnJlbnREdmlDdHJsLT5wZm5Jbml0KGVkZ2VTZWxlY3Qs IGJ1c1NlbGVjdCwgZHVhbEVkZ2VDbGtTZWxlY3QsIGhzeW5jRW5hYmxlLAo+KwkJCQl2c3luY0Vu YWJsZSwgZGVza2V3RW5hYmxlLCBkZXNrZXdTZXR0aW5nLCBjb250aW51b3VzU3luY0VuYWJsZSwK PisJCQkJcGxsRmlsdGVyRW5hYmxlLCBwbGxGaWx0ZXJWYWx1ZSk7Cj4rCX0KPisJcmV0dXJuIC0x OyAvKiBlcnJvciAqLwo+K30KPisKPisKPisvKgo+KyAqICBkdmlHZXRWZW5kb3JJRAo+KyAqICAg ICAgVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSB2ZW5kb3IgSUQgb2YgdGhlIERWSSBjb250cm9sbGVy IGNoaXAuCj4rICoKPisgKiAgT3V0cHV0Ogo+KyAqICAgICAgVmVuZG9yIElECj4rICovCj4rdW5z aWduZWQgc2hvcnQgZHZpR2V0VmVuZG9ySUQoKQo+K3sKPisJZHZpX2N0cmxfZGV2aWNlX3QgKnBD dXJyZW50RHZpQ3RybDsKPisKPisJLypwQ3VycmVudER2aUN0cmwgPSBnZXREdmlDdHJsKCk7Ki8K PisJcEN1cnJlbnREdmlDdHJsID0gZ19kY2Z0U3VwcG9ydGVkRHZpQ29udHJvbGxlcjsKPisJaWYg KHBDdXJyZW50RHZpQ3RybCAhPSAoZHZpX2N0cmxfZGV2aWNlX3QgKikwKQo+KwkJcmV0dXJuIHBD dXJyZW50RHZpQ3RybC0+cGZuR2V0VmVuZG9ySWQoKTsKPisKPisJcmV0dXJuIDB4MDAwMDsKPit9 Cj4rCj4rCj4rLyoKPisgKiAgZHZpR2V0RGV2aWNlSUQKPisgKiAgICAgIFRoaXMgZnVuY3Rpb24g Z2V0cyB0aGUgZGV2aWNlIElEIG9mIHRoZSBEVkkgY29udHJvbGxlciBjaGlwLgo+KyAqCj4rICog IE91dHB1dDoKPisgKiAgICAgIERldmljZSBJRAo+KyAqLwo+K3Vuc2lnbmVkIHNob3J0IGR2aUdl dERldmljZUlEKCkKPit7Cj4rCWR2aV9jdHJsX2RldmljZV90ICpwQ3VycmVudER2aUN0cmw7Cj4r Cj4rCS8qICAgIHBDdXJyZW50RHZpQ3RybCA9IGdldER2aUN0cmwoKTsqLwo+KwlwQ3VycmVudER2 aUN0cmwgPSBnX2RjZnRTdXBwb3J0ZWREdmlDb250cm9sbGVyOwo+KwlpZiAocEN1cnJlbnREdmlD dHJsICE9IChkdmlfY3RybF9kZXZpY2VfdCAqKTApCj4rCQlyZXR1cm4gcEN1cnJlbnREdmlDdHJs LT5wZm5HZXREZXZpY2VJZCgpOwo+Kwo+KwlyZXR1cm4gMHgwMDAwOwo+K30KPisKPisjZW5kaWYK PisKPisKPmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2x5bnhmYi9kZGs3NTBfZHZpLmggYi9k cml2ZXJzL3ZpZGVvL2x5bnhmYi9kZGs3NTBfZHZpLmgKPm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj5p bmRleCAwMDAwMDAwLi42NDc3M2ZkCj4tLS0gL2Rldi9udWxsCj4rKysgYi9kcml2ZXJzL3ZpZGVv L2x5bnhmYi9kZGs3NTBfZHZpLmgKPkBAIC0wLDAgKzEsODQgQEAKPisvKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgo+KypD b3B5cmlnaHQgKGMpIDIwMTIgYnkgU2lsaWNvbiBNb3Rpb24sIEluYy4gKFNNSSkKPisqUGVybWlz c2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0 YWluaW5nIGEgY29weQo+KypvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50 YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAo+KyppbiB0aGUgU29mdHdhcmUg d2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmln aHRzIHRvCj4rKnVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwg c3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzCj4rKm9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRv IHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0bwo+Kypk byBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4rKgo+KypUSEUgU09G VFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwK PisqRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBX QVJSQU5USUVTCj4rKk9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UgQU5ECj4rKk5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIE1pbGwu Q2hlbiBhbmQgTW9uay5MaXUgT1IgQ09QWVJJR0hUCj4rKkhPTERFUlMgQkUgTElBQkxFIEZPUiBB TlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAo+KypXSEVUSEVSIElOIEFOIEFD VElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPisqRlJPTSwgT1VU IE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgo+KypP VEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCj4rKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KPisjaWZuZGVmIERE Szc1MF9EVklfSF9fCj4rI2RlZmluZSBEREs3NTBfRFZJX0hfXwo+Kwo+Ky8qIGR2aSBjaGlwIHN0 dWZmcyBzdHJ1Y3Ryb3MgKi8KPisKPit0eXBlZGVmIGxvbmcgKCpQRk5fRFZJQ1RSTF9JTklUKSgK PisJCXVuc2lnbmVkIGNoYXIgZWRnZVNlbGVjdCwKPisJCXVuc2lnbmVkIGNoYXIgYnVzU2VsZWN0 LAo+KwkJdW5zaWduZWQgY2hhciBkdWFsRWRnZUNsa1NlbGVjdCwKPisJCXVuc2lnbmVkIGNoYXIg aHN5bmNFbmFibGUsCj4rCQl1bnNpZ25lZCBjaGFyIHZzeW5jRW5hYmxlLAo+KwkJdW5zaWduZWQg Y2hhciBkZXNrZXdFbmFibGUsCj4rCQl1bnNpZ25lZCBjaGFyIGRlc2tld1NldHRpbmcsCj4rCQl1 bnNpZ25lZCBjaGFyIGNvbnRpbnVvdXNTeW5jRW5hYmxlLAo+KwkJdW5zaWduZWQgY2hhciBwbGxG aWx0ZXJFbmFibGUsCj4rCQl1bnNpZ25lZCBjaGFyIHBsbEZpbHRlclZhbHVlKTsKPit0eXBlZGVm IHZvaWQgKCpQRk5fRFZJQ1RSTF9SRVNFVENISVApKHZvaWQpOwo+K3R5cGVkZWYgY2hhciogKCpQ Rk5fRFZJQ1RSTF9HRVRDSElQU1RSSU5HKSh2b2lkKTsKPit0eXBlZGVmIHVuc2lnbmVkIHNob3J0 ICgqUEZOX0RWSUNUUkxfR0VUVkVORE9SSUQpKHZvaWQpOwo+K3R5cGVkZWYgdW5zaWduZWQgc2hv cnQgKCpQRk5fRFZJQ1RSTF9HRVRERVZJQ0VJRCkodm9pZCk7Cj4rdHlwZWRlZiB2b2lkICgqUEZO X0RWSUNUUkxfU0VUUE9XRVIpKHVuc2lnbmVkIGNoYXIgcG93ZXJVcCk7Cj4rdHlwZWRlZiB2b2lk ICgqUEZOX0RWSUNUUkxfSE9UUExVR0RFVEVDVElPTikodW5zaWduZWQgY2hhciBlbmFibGVIb3RQ bHVnKTsKPit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgKCpQRk5fRFZJQ1RSTF9JU0NPTk5FQ1RFRCko dm9pZCk7Cj4rdHlwZWRlZiB1bnNpZ25lZCBjaGFyICgqUEZOX0RWSUNUUkxfQ0hFQ0tJTlRFUlJV UFQpKHZvaWQpOwo+K3R5cGVkZWYgdm9pZCAoKlBGTl9EVklDVFJMX0NMRUFSSU5URVJSVVBUKSh2 b2lkKTsKPisKPisKPisKPisvKiBTdHJ1Y3R1cmUgdG8gaG9sZCBhbGwgdGhlIGZ1bmN0aW9uIHBv aW50ZXIgdG8gdGhlIERWSSBDb250cm9sbGVyLiAqLwo+K3R5cGVkZWYgc3RydWN0IF9kdmlfY3Ry bF9kZXZpY2VfdHsKPisJUEZOX0RWSUNUUkxfSU5JVCAgICAgICAgICAgICAgICBwZm5Jbml0Owo+ KwlQRk5fRFZJQ1RSTF9SRVNFVENISVAgICAgICAgICAgIHBmblJlc2V0Q2hpcDsKPisJUEZOX0RW SUNUUkxfR0VUQ0hJUFNUUklORyAgICAgICBwZm5HZXRDaGlwU3RyaW5nOwo+KwlQRk5fRFZJQ1RS TF9HRVRWRU5ET1JJRCAgICAgICAgIHBmbkdldFZlbmRvcklkOwo+KwlQRk5fRFZJQ1RSTF9HRVRE RVZJQ0VJRCAgICAgICAgIHBmbkdldERldmljZUlkOwo+KwlQRk5fRFZJQ1RSTF9TRVRQT1dFUiAg ICAgICAgICAgIHBmblNldFBvd2VyOwo+KwlQRk5fRFZJQ1RSTF9IT1RQTFVHREVURUNUSU9OICAg IHBmbkVuYWJsZUhvdFBsdWdEZXRlY3Rpb247Cj4rCVBGTl9EVklDVFJMX0lTQ09OTkVDVEVEICAg ICAgICAgcGZuSXNDb25uZWN0ZWQ7Cj4rCVBGTl9EVklDVFJMX0NIRUNLSU5URVJSVVBUICAgICAg cGZuQ2hlY2tJbnRlcnJ1cHQ7Cj4rCVBGTl9EVklDVFJMX0NMRUFSSU5URVJSVVBUICAgICAgcGZu Q2xlYXJJbnRlcnJ1cHQ7Cj4rfSBkdmlfY3RybF9kZXZpY2VfdDsKPisjZGVmaW5lIERWSV9DVFJM X1NJSTE2NAo+Kwo+Kwo+Kwo+Ky8qIGR2aSBmdW5jdGlvbnMgcHJvdG90eXBlICovCj4raW50IGR2 aUluaXQoCj4rCQl1bnNpZ25lZCBjaGFyIGVkZ2VTZWxlY3QsCj4rCQl1bnNpZ25lZCBjaGFyIGJ1 c1NlbGVjdCwKPisJCXVuc2lnbmVkIGNoYXIgZHVhbEVkZ2VDbGtTZWxlY3QsCj4rCQl1bnNpZ25l ZCBjaGFyIGhzeW5jRW5hYmxlLAo+KwkJdW5zaWduZWQgY2hhciB2c3luY0VuYWJsZSwKPisJCXVu c2lnbmVkIGNoYXIgZGVza2V3RW5hYmxlLAo+KwkJdW5zaWduZWQgY2hhciBkZXNrZXdTZXR0aW5n LAo+KwkJdW5zaWduZWQgY2hhciBjb250aW51b3VzU3luY0VuYWJsZSwKPisJCXVuc2lnbmVkIGNo YXIgcGxsRmlsdGVyRW5hYmxlLAo+KwkJdW5zaWduZWQgY2hhciBwbGxGaWx0ZXJWYWx1ZQo+Kwkg ICApOwo+Kwo+K3Vuc2lnbmVkIHNob3J0IGR2aUdldFZlbmRvcklEKHZvaWQpOwo+K3Vuc2lnbmVk IHNob3J0IGR2aUdldERldmljZUlEKHZvaWQpOwo+Kwo+Kwo+Kwo+KyNlbmRpZgo+Kwo+ZGlmZiAt LWdpdCBhL2RyaXZlcnMvdmlkZW8vbHlueGZiL2Rkazc1MF9oZWxwLmMgYi9kcml2ZXJzL3ZpZGVv L2x5bnhmYi9kZGs3NTBfaGVscC5jCj5uZXcgZmlsZSBtb2RlIDEwMDY0NAo+aW5kZXggMDAwMDAw MC4uMmU5NWI1OAo+LS0tIC9kZXYvbnVsbAo+KysrIGIvZHJpdmVycy92aWRlby9seW54ZmIvZGRr NzUwX2hlbHAuYwo+QEAgLTAsMCArMSwzNyBAQAo+Ky8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCj4rKkNvcHlyaWdodCAo YykgMjAxMiBieSBTaWxpY29uIE1vdGlvbiwgSW5jLiAoU01JKQo+KypQZXJtaXNzaW9uIGlzIGhl cmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBj b3B5Cj4rKm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxl cyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCj4rKmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJl c3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8KPisq dXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNl LCBhbmQvb3Igc2VsbCBjb3BpZXMKPisqb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBl cnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvCj4rKmRvIHNvLCBzdWJq ZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPisqCj4rKlRIRSBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAo+KypFWFBSRVNT IE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMK PisqT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB TkQKPisqTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgTWlsbC5DaGVuIGFuZCBN b25rLkxpdSBPUiBDT1BZUklHSFQKPisqSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwg REFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCj4rKldIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENP TlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+KypGUk9NLCBPVVQgT0YgT1IgSU4g Q09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCj4rKk9USEVSIERFQUxJ TkdTIElOIFRIRSBTT0ZUV0FSRS4KPisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwo+Ky8qI2luY2x1ZGUgImRkazc1MF9y ZWcuaCIgKi8KPisvKiNpbmNsdWRlICJkZGs3NTBfY2hpcC5oIiAqLwo+KyNpbmNsdWRlICJkZGs3 NTBfaGVscC5oIgo+Kwo+K3ZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgX19pb21lbSAqbW1pbzc1MDsK PitjaGFyIHJldklkNzUwOwo+K3Vuc2lnbmVkIHNob3J0IGRldklkNzUwOwo+Kwo+Ky8qIGFmdGVy IGRyaXZlciBtYXBwZWQgaW8gcmVnaXN0ZXJzLCB1c2UgdGhpcyBmdW5jdGlvbiBmaXJzdCAqLwo+ K3ZvaWQgZGRrNzUwX3NldF9tbWlvKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKmFkZHIsIHVuc2ln bmVkIHNob3J0IGRldklkLCBjaGFyIHJldklkKQo+K3sKPisJbW1pbzc1MCA9IGFkZHI7Cj4rCWRl dklkNzUwID0gZGV2SWQ7Cj4rCXJldklkNzUwID0gcmV2SWQ7Cj4rCWlmIChyZXZJZCA9PSAweGZl KQo+KwkJcHJpbnRrKCJmb3VuZCBzbTc1MGxlXG4iKTsKPit9Cj4rCj4rCj5kaWZmIC0tZ2l0IGEv ZHJpdmVycy92aWRlby9seW54ZmIvZGRrNzUwX2hlbHAuaCBiL2RyaXZlcnMvdmlkZW8vbHlueGZi L2Rkazc1MF9oZWxwLmgKPm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj5pbmRleCAwMDAwMDAwLi44NjBj MGMxCj4tLS0gL2Rldi9udWxsCj4rKysgYi9kcml2ZXJzL3ZpZGVvL2x5bnhmYi9kZGs3NTBfaGVs cC5oCj5AQCAtMCwwICsxLDQyIEBACj4rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKPisqQ29weXJpZ2h0IChjKSAyMDEy IGJ5IFNpbGljb24gTW90aW9uLCBJbmMuIChTTUkpCj4rKlBlcm1pc3Npb24gaXMgaGVyZWJ5IGdy YW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKPisq b2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUg IlNvZnR3YXJlIiksIHRvIGRlYWwKPisqaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rp b24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwo+Kyp1c2UsIGNv cHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9v ciBzZWxsIGNvcGllcwo+KypvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0 byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8KPisqZG8gc28sIHN1YmplY3QgdG8g dGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+KyoKPisqVEhFIFNPRlRXQVJFIElTIFBST1ZJREVE ICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCj4rKkVYUFJFU1MgT1IgSU1Q TElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUwo+KypPRiBN RVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAo+KypO T05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBNaWxsLkNoZW4gYW5kIE1vbmsuTGl1 IE9SIENPUFlSSUdIVAo+KypIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VT IE9SIE9USEVSIExJQUJJTElUWSwKPisqV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1Qs IFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCj4rKkZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNU SU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKPisqT1RIRVIgREVBTElOR1MgSU4g VEhFIFNPRlRXQVJFLgo+KyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiovCj4rI2lmbmRlZiBEREs3NTBfSEVMUF9IX18KPisj ZGVmaW5lIERESzc1MF9IRUxQX0hfXwo+KyNpbmNsdWRlICJkZGs3NTBfY2hpcC5oIgo+KyNpZm5k ZWYgVVNFX0lOVEVSTkFMX1JFR0lTVEVSX0FDQ0VTUwo+Kwo+KyNpbmNsdWRlIDxsaW51eC9pb3Bv cnQuaD4KPisjaW5jbHVkZSA8YXNtL2lvLmg+Cj4rI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Cj4r I2luY2x1ZGUgImx5bnhfaGVscC5oIgo+Kwo+Kwo+KyAvKiBzb2Z0d2FyZSBjb250cm9sIGVuZGlh bmVzcyAqLwo+KyNkZWZpbmUgUEVFSzMyKGFkZHIpIHJlYWRsKChhZGRyKSttbWlvNzUwKQo+KyNk ZWZpbmUgUE9LRTMyKGFkZHIsIGRhdGEpIHdyaXRlbCgoZGF0YSksIChhZGRyKSttbWlvNzUwKQo+ Kwo+Kwo+K2V4dGVybiB2b2xhdGlsZSB1bnNpZ25lZCAgY2hhciBfX2lvbWVtICptbWlvNzUwOwo+ K2V4dGVybiBjaGFyIHJldklkNzUwOwo+K2V4dGVybiB1bnNpZ25lZCBzaG9ydCBkZXZJZDc1MDsK PisjZWxzZQo+Ky8qIGltcGxlbWVudCBpZiB5b3Ugd2FudCB1c2UgaXQqLwo+KyNlbmRpZgo+Kwo+ KyNlbmRpZgo+ZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbHlueGZiL2Rkazc1MF9od2kyYy5j IGIvZHJpdmVycy92aWRlby9seW54ZmIvZGRrNzUwX2h3aTJjLmMKPm5ldyBmaWxlIG1vZGUgMTAw NjQ0Cj5pbmRleCAwMDAwMDAwLi5jMzdmZjgyCj4tLS0gL2Rldi9udWxsCj4rKysgYi9kcml2ZXJz L3ZpZGVvL2x5bnhmYi9kZGs3NTBfaHdpMmMuYwo+QEAgLTAsMCArMSwyOTAgQEAKPisvKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKgo+KypDb3B5cmlnaHQgKGMpIDIwMTIgYnkgU2lsaWNvbiBNb3Rpb24sIEluYy4gKFNNSSkK PisqUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBw ZXJzb24gb2J0YWluaW5nIGEgY29weQo+KypvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVk IGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAo+KyppbiB0aGUg U29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlv biB0aGUgcmlnaHRzIHRvCj4rKnVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlz dHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzCj4rKm9mIHRoZSBTb2Z0d2Fy ZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hl ZCB0bwo+KypkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4rKgo+ KypUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBB TlkgS0lORCwKPisqRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVE IFRPIFRIRSBXQVJSQU5USUVTCj4rKk9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UgQU5ECj4rKk5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNI QUxMIE1pbGwuQ2hlbiBhbmQgTW9uay5MaXUgT1IgQ09QWVJJR0hUCj4rKkhPTERFUlMgQkUgTElB QkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAo+KypXSEVUSEVS IElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPisq RlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVT RSBPUgo+KypPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCj4rKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KPisj aWZkZWYgVVNFX0hXX0kyQwo+KyNpbmNsdWRlICJkZGs3NTBfaGVscC5oIgo+KyNpbmNsdWRlICJk ZGs3NTBfcmVnLmgiCj4rI2luY2x1ZGUgImRkazc1MF9od2kyYy5oIgo+KyNpbmNsdWRlICJkZGs3 NTBfcG93ZXIuaCIKPisKPisjZGVmaW5lIE1BWF9IV0kyQ19GSUZPICAgICAgICAgICAgICAgICAg MTYKPisjZGVmaW5lIEhXSTJDX1dBSVRfVElNRU9VVCAgICAgICAgICAgICAgMHhGMDAwMAo+Kwo+ Kwo+K2ludCBod0kyQ0luaXQoCj4rCQl1bnNpZ25lZCBjaGFyIGJ1c1NwZWVkTW9kZQo+KykKPit7 Cj4rCXVuc2lnbmVkIGludCB2YWx1ZTsKPisKPisJLyogRW5hYmxlIEdQSU8gMzAgJiAzMSBhcyBJ SUMgY2xvY2sgJiBkYXRhICovCj4rCXZhbHVlID0gUEVFSzMyKEdQSU9fTVVYKTsKPisKPisJdmFs dWUgfD0gKDEgPDwgR1BJT19NVVhfMzBfTFNCKXwoMSA8PCBHUElPX01VWF8zMV9MU0IpOwo+KwlQ T0tFMzIoR1BJT19NVVgsIHZhbHVlKTsKPisKPisJLyogRW5hYmxlIEhhcmR3YXJlIEkyQyBwb3dl ci4KPitUT0RPOiBDaGVjayBpZiB3ZSBuZWVkIHRvIGVuYWJsZSBHUElPIHBvd2VyPwo+KyovCj4r CWVuYWJsZUkyQygxKTsKPisKPisJLyogRW5hYmxlIHRoZSBJMkMgQ29udHJvbGxlciBhbmQgc2V0 IHRoZSBidXMgc3BlZWQgbW9kZSAqLwo+Kwl2YWx1ZSA9IFBFRUszMihJMkNfQ1RSTCk7Cj4rCj4r CWlmIChidXNTcGVlZE1vZGUgPT0gMCkKPisJCXZhbHVlICY9IH4oMSA8PCBJMkNfQ1RSTF9NT0RF X0xTQik7Cj4rCWVsc2UKPisJCXZhbHVlIHw9IDEgPDwgSTJDX0NUUkxfTU9ERV9MU0I7Cj4rCXZh bHVlIHw9IDEgPDwgSTJDX0NUUkxfRU5fTFNCOwo+Kwo+KwlQT0tFMzIoSTJDX0NUUkwsIHZhbHVl KTsKPisKPisJcmV0dXJuIDA7Cj4rfQo+Kwo+Kwo+K3ZvaWQgaHdJMkNDbG9zZSh2b2lkKQo+K3sK PisJdW5zaWduZWQgaW50IHZhbHVlOwo+Kwo+KwkvKiBEaXNhYmxlIEkyQyBjb250cm9sbGVyICov Cj4rCXZhbHVlID0gUEVFSzMyKEkyQ19DVFJMKTsKPisKPisJdmFsdWUgJj0gfigxIDw8IEkyQ19D VFJMX0VOX0xTQik7Cj4rCVBPS0UzMihJMkNfQ1RSTCwgdmFsdWUpOwo+Kwo+KwkvKiBEaXNhYmxl IEkyQyBQb3dlciAqLwo+KwllbmFibGVJMkMoMCk7Cj4rCj4rCS8qIFNldCBHUElPIDMwICYgMzEg YmFjayBhcyBHUElPIHBpbnMgKi8KPisJdmFsdWUgPSBQRUVLMzIoR1BJT19NVVgpOwo+Kwl2YWx1 ZSAmPSB+KDEgPDwgR1BJT19NVVhfMzBfTFNCKTsKPisJdmFsdWUgJj0gfigxIDw8IEdQSU9fTVVY XzMxX0xTQik7Cj4rCVBPS0UzMihHUElPX01VWCwgdmFsdWUpOwo+K30KPisKPisKPitsb25nIGh3 STJDV2FpdFRYRG9uZSh2b2lkKQo+K3sKPisJdW5zaWduZWQgaW50IHRpbWVvdXQ7Cj4rCj4rCS8q IFdhaXQgdW50aWwgdGhlIHRyYW5zZmVyIGlzIGNvbXBsZXRlZC4gKi8KPisJdGltZW91dCA9IEhX STJDX1dBSVRfVElNRU9VVDsKPisKPisJd2hpbGUgKCgoMSYoUEVFSzMyKEkyQ19TVEFUVVMpID4+ IEkyQ19TVEFUVVNfVFhfTFNCKSkgIT0gSTJDX1NUQVRVU19UWF9DT01QTEVURUQpICYmCj4rCQkJ KHRpbWVvdXQgIT0gMCkpCj4rCQl0aW1lb3V0LS07Cj4rCj4rCWlmICh0aW1lb3V0ID09IDApCj4r CQlyZXR1cm4gLTE7Cj4rCj4rCXJldHVybiAwOwo+K30KPisKPisKPisKPisvKgo+KyAqICBUaGlz IGZ1bmN0aW9uIHdyaXRlcyBkYXRhIHRvIHRoZSBpMmMgc2xhdmUgZGV2aWNlIHJlZ2lzdGVycy4K PisgKgo+KyAqICBQYXJhbWV0ZXJzOgo+KyAqICAgICAgZGV2aWNlQWRkcmVzcyAgIC0gaTJjIFNs YXZlIGRldmljZSBhZGRyZXNzCj4rICogICAgICBsZW5ndGggICAgICAgICAgLSBUb3RhbCBudW1i ZXIgb2YgYnl0ZXMgdG8gYmUgd3JpdHRlbiB0byB0aGUgZGV2aWNlCj4rICogICAgICBwQnVmZmVy ICAgICAgICAgLSBUaGUgYnVmZmVyIHRoYXQgY29udGFpbnMgdGhlIGRhdGEgdG8gYmUgd3JpdHRl biB0byB0aGUKPisgKiAgICAgICAgICAgICAgICAgICAgIGkyYyBkZXZpY2UuCj4rICoKPisgKiAg UmV0dXJuIFZhbHVlOgo+KyAqICAgICAgVG90YWwgbnVtYmVyIG9mIGJ5dGVzIHRob3NlIGFyZSBh Y3R1YWxseSB3cml0dGVuLgo+KyAqLwo+K3Vuc2lnbmVkIGludCBod0kyQ1dyaXRlRGF0YSgKPisJ CXVuc2lnbmVkIGNoYXIgZGV2aWNlQWRkcmVzcywKPisJCXVuc2lnbmVkIGludCBsZW5ndGgsCj4r CQl1bnNpZ25lZCBjaGFyICpwQnVmZmVyCj4rCQkpCj4rewo+Kwl1bnNpZ25lZCBjaGFyIGNvdW50 LCBpOwo+Kwl1bnNpZ25lZCBpbnQgdG90YWxCeXRlcyA9IDA7Cj4rCj4rCS8qIFNldCB0aGUgRGV2 aWNlIEFkZHJlc3MgKi8KPisJUE9LRTMyKEkyQ19TTEFWRV9BRERSRVNTLCBkZXZpY2VBZGRyZXNz ICYgfjB4MDEpOwo+Kwo+KwkvKiBXcml0ZSBkYXRhLgo+KwkgKiBOb3RlOgo+KwkgKiAgICAgIE9u bHkgMTYgYnl0ZSBjYW4gYmUgYWNjZXNzZWQgcGVyIGkyYyBzdGFydCBpbnN0cnVjdGlvbi4KPisJ ICovCj4rCWRvIHsKPisJCS8qIFJlc2V0IEkyQyBieSB3cml0aW5nIDAgdG8gSTJDX1JFU0VUIHJl Z2lzdGVyIHRvIGNsZWFyIHRoZSBwcmV2aW91cyBzdGF0dXMuICovCj4rCQlQT0tFMzIoSTJDX1JF U0VULCAwKTsKPisKPisJCS8qIFNldCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHdyaXR0ZW4g Ki8KPisJCWlmIChsZW5ndGggPCBNQVhfSFdJMkNfRklGTykKPisJCQljb3VudCA9IGxlbmd0aCAt IDE7Cj4rCQllbHNlCj4rCQkJY291bnQgPSBNQVhfSFdJMkNfRklGTyAtIDE7Cj4rCQlQT0tFMzIo STJDX0JZVEVfQ09VTlQsIGNvdW50KTsKPisKPisJCS8qIE1vdmUgdGhlIGRhdGEgdG8gdGhlIEky QyBkYXRhIHJlZ2lzdGVyICovCj4rCQlmb3IgKGkgPSAwOyBpIDw9IGNvdW50OyBpKyspCj4rCQkJ UE9LRTMyKEkyQ19EQVRBMCArIGksICpwQnVmZmVyKyspOwo+Kwo+KwkJLyogU3RhcnQgdGhlIEky QyAqLwo+Kwo+KwkJUE9LRTMyKEkyQ19DVFJMLCBQRUVLMzIoSTJDX0NUUkwpfCgxIDw8IEkyQ19D VFJMX0NUUkxfTFNCKSk7Cj4rCj4rCQkvKiBXYWl0IHVudGlsIHRoZSB0cmFuc2ZlciBpcyBjb21w bGV0ZWQuICovCj4rCQlpZiAoaHdJMkNXYWl0VFhEb25lKCkgIT0gMCkKPisJCQlicmVhazsKPisK PisJCS8qIFN1YnN0cmFjdCBsZW5ndGggKi8KPisJCWxlbmd0aCAtPSAoY291bnQgKyAxKTsKPisK PisJCS8qIFRvdGFsIGJ5dGUgd3JpdHRlbiAqLwo+KwkJdG90YWxCeXRlcyArPSAoY291bnQgKyAx KTsKPisKPisJfSB3aGlsZSAobGVuZ3RoID4gMCk7Cj4rCj4rCXJldHVybiB0b3RhbEJ5dGVzOwo+ K30KPisKPisKPisKPisKPisvKgo+KyAqICBUaGlzIGZ1bmN0aW9uIHJlYWRzIGRhdGEgZnJvbSB0 aGUgc2xhdmUgZGV2aWNlIGFuZCBzdG9yZXMgdGhlbQo+KyAqICBpbiB0aGUgZ2l2ZW4gYnVmZmVy Cj4rICoKPisgKiAgUGFyYW1ldGVyczoKPisgKiAgICAgIGRldmljZUFkZHJlc3MgICAtIGkyYyBT bGF2ZSBkZXZpY2UgYWRkcmVzcwo+KyAqICAgICAgbGVuZ3RoICAgICAgICAgIC0gVG90YWwgbnVt YmVyIG9mIGJ5dGVzIHRvIGJlIHJlYWQKPisgKiAgICAgIHBCdWZmZXIgICAgICAgICAtIFBvaW50 ZXIgdG8gYSBidWZmZXIgdG8gYmUgZmlsbGVkIHdpdGggdGhlIGRhdGEgcmVhZAo+KyAqICAgICAg ICAgICAgICAgICAgICAgZnJvbSB0aGUgc2xhdmUgZGV2aWNlLiBJdCBoYXMgdG8gYmUgdGhlIHNh bWUgc2l6ZSBhcyB0aGUKPisgKiAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCB0byBtYWtlIHN1 cmUgdGhhdCBpdCBjYW4ga2VlcCBhbGwgdGhlIGRhdGEgcmVhZC4KPisgKgo+KyAqICBSZXR1cm4g VmFsdWU6Cj4rICogICAgICBUb3RhbCBudW1iZXIgb2YgYWN0dWFsIGJ5dGVzIHJlYWQgZnJvbSB0 aGUgc2xhdmUgZGV2aWNlCj4rICovCj4rdW5zaWduZWQgaW50IGh3STJDUmVhZERhdGEoCj4rCQl1 bnNpZ25lZCBjaGFyIGRldmljZUFkZHJlc3MsCj4rCQl1bnNpZ25lZCBpbnQgbGVuZ3RoLAo+KwkJ dW5zaWduZWQgY2hhciAqcEJ1ZmZlcgo+KwkJKQo+K3sKPisJdW5zaWduZWQgY2hhciBjb3VudCwg aTsKPisJdW5zaWduZWQgaW50IHRvdGFsQnl0ZXMgPSAwOwo+Kwo+KwkvKiBTZXQgdGhlIERldmlj ZSBBZGRyZXNzICovCj4rCVBPS0UzMihJMkNfU0xBVkVfQUREUkVTUywgZGV2aWNlQWRkcmVzcyB8 IDB4MDEpOwo+Kwo+KwkvKiBSZWFkIGRhdGEgYW5kIHNhdmUgdGhlbSB0byB0aGUgYnVmZmVyLgo+ KwkgKiBOb3RlOgo+KwkgKiAgICAgIE9ubHkgMTYgYnl0ZSBjYW4gYmUgYWNjZXNzZWQgcGVyIGky YyBzdGFydCBpbnN0cnVjdGlvbi4KPisJICovCj4rCWRvIHsKPisJCS8qIFJlc2V0IEkyQyBieSB3 cml0aW5nIDAgdG8gSTJDX1JFU0VUIHJlZ2lzdGVyIHRvIGNsZWFyIGFsbCB0aGUgc3RhdHVzLiAq Lwo+KwkJUE9LRTMyKEkyQ19SRVNFVCwgMCk7Cj4rCj4rCQkvKiBTZXQgdGhlIG51bWJlciBvZiBi eXRlcyB0byBiZSByZWFkICovCj4rCQlpZiAobGVuZ3RoIDw9IE1BWF9IV0kyQ19GSUZPKQo+KwkJ CWNvdW50ID0gbGVuZ3RoIC0gMTsKPisJCWVsc2UKPisJCQljb3VudCA9IE1BWF9IV0kyQ19GSUZP IC0gMTsKPisJCVBPS0UzMihJMkNfQllURV9DT1VOVCwgY291bnQpOwo+Kwo+KwkJLyogU3RhcnQg dGhlIEkyQyAqLwo+KwkJUE9LRTMyKEkyQ19DVFJMLCBQRUVLMzIoSTJDX0NUUkwpfCgxIDw8IEky Q19DVFJMX0NUUkxfTFNCKSk7Cj4rCj4rCQkvKiBXYWl0IHVudGlsIHRyYW5zYWN0aW9uIGRvbmUu ICovCj4rCQlpZiAoaHdJMkNXYWl0VFhEb25lKCkgIT0gMCkKPisJCQlicmVhazsKPisKPisJCS8q IFNhdmUgdGhlIGRhdGEgdG8gdGhlIGdpdmVuIGJ1ZmZlciAqLwo+KwkJZm9yIChpID0gMDsgaSA8 PSBjb3VudDsgaSsrKQo+KwkJCSpwQnVmZmVyKysgPSBQRUVLMzIoSTJDX0RBVEEwICsgaSk7Cj4r Cj4rCQkvKiBTdWJzdHJhY3QgbGVuZ3RoIGJ5IDE2ICovCj4rCQlsZW5ndGggLT0gKGNvdW50ICsg MSk7Cj4rCj4rCQkvKiBOdW1iZXIgb2YgYnl0ZXMgcmVhZC4gKi8KPisJCXRvdGFsQnl0ZXMgKz0g KGNvdW50ICsgMSk7Cj4rCj4rCX0gd2hpbGUgKGxlbmd0aCA+IDApOwo+Kwo+KwlyZXR1cm4gdG90 YWxCeXRlczsKPit9Cj4rCj4rCj4rCj4rCj4rLyoKPisgKiAgVGhpcyBmdW5jdGlvbiByZWFkcyB0 aGUgc2xhdmUgZGV2aWNlJ3MgcmVnaXN0ZXIKPisgKgo+KyAqICBQYXJhbWV0ZXJzOgo+KyAqICAg ICAgZGV2aWNlQWRkcmVzcyAgIC0gaTJjIFNsYXZlIGRldmljZSBhZGRyZXNzIHdoaWNoIHJlZ2lz dGVyCj4rICogICAgICAgICAgICAgICAgICAgICAgICB0byBiZSByZWFkIGZyb20KPisgKiAgICAg IHJlZ2lzdGVySW5kZXggICAtIFNsYXZlIGRldmljZSdzIHJlZ2lzdGVyIHRvIGJlIHJlYWQKPisg Kgo+KyAqICBSZXR1cm4gVmFsdWU6Cj4rICogICAgICBSZWdpc3RlciB2YWx1ZQo+KyAqLwo+K3Vu c2lnbmVkIGNoYXIgaHdJMkNSZWFkUmVnKAo+KwkJdW5zaWduZWQgY2hhciBkZXZpY2VBZGRyZXNz LAo+KwkJdW5zaWduZWQgY2hhciByZWdpc3RlckluZGV4Cj4rCQkpCj4rewo+Kwl1bnNpZ25lZCBj aGFyIHZhbHVlID0gKDB4RkYpOwo+Kwo+KwlpZiAoaHdJMkNXcml0ZURhdGEoZGV2aWNlQWRkcmVz cywgMSwgJnJlZ2lzdGVySW5kZXgpID09IDEpCj4rCQlod0kyQ1JlYWREYXRhKGRldmljZUFkZHJl c3MsIDEsICZ2YWx1ZSk7Cj4rCj4rCXJldHVybiB2YWx1ZTsKPit9Cj4rCj4rCj4rCj4rCj4rCj4r LyoKPisgKiAgVGhpcyBmdW5jdGlvbiB3cml0ZXMgYSB2YWx1ZSB0byB0aGUgc2xhdmUgZGV2aWNl J3MgcmVnaXN0ZXIKPisgKgo+KyAqICBQYXJhbWV0ZXJzOgo+KyAqICAgICAgZGV2aWNlQWRkcmVz cyAgIC0gaTJjIFNsYXZlIGRldmljZSBhZGRyZXNzIHdoaWNoIHJlZ2lzdGVyCj4rICogICAgICAg ICAgICAgICAgICAgICAgICB0byBiZSB3cml0dGVuCj4rICogICAgICByZWdpc3RlckluZGV4ICAg LSBTbGF2ZSBkZXZpY2UncyByZWdpc3RlciB0byBiZSB3cml0dGVuCj4rICogICAgICBkYXRhICAg ICAgICAgICAgLSBEYXRhIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIHJlZ2lzdGVyCj4rICoKPisgKiAg UmVzdWx0Ogo+KyAqICAgICAgICAgIDAgICAtIFN1Y2Nlc3MKPisgKiAgICAgICAgIC0xICAgLSBG YWlsCj4rICovCj4raW50IGh3STJDV3JpdGVSZWcoCj4rCQl1bnNpZ25lZCBjaGFyIGRldmljZUFk ZHJlc3MsCj4rCQl1bnNpZ25lZCBjaGFyIHJlZ2lzdGVySW5kZXgsCj4rCQl1bnNpZ25lZCBjaGFy IGRhdGEKPisJCSkKPit7Cj4rCXVuc2lnbmVkIGNoYXIgdmFsdWVbMl07Cj4rCj4rCXZhbHVlWzBd ID0gcmVnaXN0ZXJJbmRleDsKPisJdmFsdWVbMV0gPSBkYXRhOwo+KwlpZiAoaHdJMkNXcml0ZURh dGEoZGV2aWNlQWRkcmVzcywgMiwgdmFsdWUpID09IDIpCj4rCQlyZXR1cm4gMDsKPisKPisJcmV0 dXJuIC0xOwo+K30KPisKPisKPisjZW5kaWYKPmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2x5 bnhmYi9kZGs3NTBfaHdpMmMuaCBiL2RyaXZlcnMvdmlkZW8vbHlueGZiL2Rkazc1MF9od2kyYy5o Cj5uZXcgZmlsZSBtb2RlIDEwMDY0NAo+aW5kZXggMDAwMDAwMC4uNmNiZDI5Mgo+LS0tIC9kZXYv bnVsbAo+KysrIGIvZHJpdmVycy92aWRlby9seW54ZmIvZGRrNzUwX2h3aTJjLmgKPkBAIC0wLDAg KzEsMjggQEAKPisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKgo+KypDb3B5cmlnaHQgKGMpIDIwMTIgYnkgU2lsaWNvbiBN b3Rpb24sIEluYy4gKFNNSSkKPisqUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBv ZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQo+KypvZiB0aGlzIHNvZnR3 YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwg dG8gZGVhbAo+KyppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5n IHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCj4rKnVzZSwgY29weSwgbW9kaWZ5LCBt ZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVz Cj4rKm9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNv ZnR3YXJlIGlzIGZ1cm5pc2hlZCB0bwo+KypkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnM6Cj4rKgo+KypUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lU SE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKPisqRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJ TkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCj4rKk9GIE1FUkNIQU5UQUJJTElU WSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECj4rKk5PTklORlJJTkdFTUVO VC4gIElOIE5PIEVWRU5UIFNIQUxMIE1pbGwuQ2hlbiBhbmQgTW9uay5MaXUgT1IgQ09QWVJJR0hU Cj4rKkhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElB QklMSVRZLAo+KypXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhF UldJU0UsIEFSSVNJTkcKPisqRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUg U09GVFdBUkUgT1IgVEhFIFVTRSBPUgo+KypPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUu Cj4rKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8KPisjaWZuZGVmIERESzc1MF9IV0kyQ19IX18KPisjZGVmaW5lIERESzc1 MF9IV0kyQ19IX18KPisKPisvKiBod2kyYyBmdW5jdGlvbnMgKi8KPitpbnQgaHdJMkNJbml0KHVu c2lnbmVkIGNoYXIgYnVzU3BlZWRNb2RlKTsKPit2b2lkIGh3STJDQ2xvc2Uodm9pZCk7Cj4rCj4r dW5zaWduZWQgY2hhciBod0kyQ1JlYWRSZWcodW5zaWduZWQgY2hhciBkZXZpY2VBZGRyZXNzLCB1 bnNpZ25lZCBjaGFyIHJlZ2lzdGVySW5kZXgpOwo+K2ludCBod0kyQ1dyaXRlUmVnKHVuc2lnbmVk IGNoYXIgZGV2aWNlQWRkcmVzcywgdW5zaWduZWQgY2hhciByZWdpc3RlckluZGV4LCB1bnNpZ25l ZCBjaGFyIGRhdGEpOwo+KyNlbmRpZgo+ZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbHlueGZi L2Rkazc1MF9tb2RlLmMgYi9kcml2ZXJzL3ZpZGVvL2x5bnhmYi9kZGs3NTBfbW9kZS5jCj5uZXcg ZmlsZSBtb2RlIDEwMDY0NAo+aW5kZXggMDAwMDAwMC4uZWNiNTVjMgo+LS0tIC9kZXYvbnVsbAo+ KysrIGIvZHJpdmVycy92aWRlby9seW54ZmIvZGRrNzUwX21vZGUuYwo+QEAgLTAsMCArMSwyMTMg QEAKPisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKgo+KypDb3B5cmlnaHQgKGMpIDIwMTIgYnkgU2lsaWNvbiBNb3Rpb24s IEluYy4gKFNNSSkKPisqUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFy Z2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQo+KypvZiB0aGlzIHNvZnR3YXJlIGFu ZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVh bAo+KyppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhv dXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCj4rKnVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwg cHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzCj4rKm9m IHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJl IGlzIGZ1cm5pc2hlZCB0bwo+KypkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnM6Cj4rKgo+KypUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBX QVJSQU5UWSBPRiBBTlkgS0lORCwKPisqRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVU IE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCj4rKk9GIE1FUkNIQU5UQUJJTElUWSwgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECj4rKk5PTklORlJJTkdFTUVOVC4gIElO IE5PIEVWRU5UIFNIQUxMIE1pbGwuQ2hlbiBhbmQgTW9uay5MaXUgT1IgQ09QWVJJR0hUCj4rKkhP TERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZ LAo+KypXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0Us IEFSSVNJTkcKPisqRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdB UkUgT1IgVEhFIFVTRSBPUgo+KypPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCj4rKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8KPisjaW5jbHVkZSAiZGRrNzUwX2hlbHAuaCIKPisjaW5jbHVkZSAiZGRrNzUwX3Jl Zy5oIgo+KyNpbmNsdWRlICJkZGs3NTBfbW9kZS5oIgo+KyNpbmNsdWRlICJkZGs3NTBfY2hpcC5o Igo+Kwo+Ky8qCj4rICAgU003NTBMRSBvbmx5Ogo+KyAgIFRoaXMgZnVuY3Rpb24gdGFrZXMgY2Fy ZSBleHRyYSByZWdpc3RlcnMgYW5kIGJpdCBmaWVsZHMgcmVxdWlyZWQgdG8gc2V0Cj4rICAgdXAg YSBtb2RlIGluIFNNNzUwTEUKPisKPisgICBFeHBsYW5hdGlvbiBhYm91dCBEaXNwbGF5IENvbnRy b2wgcmVnaXN0ZXI6Cj4rICAgSFcgb25seSBzdXBwb3J0cyA3IHByZWRlZmluZWQgcGl4ZWwgY2xv Y2tzLCBhbmQgY2xvY2sgc2VsZWN0IGlzCj4rICAgaW4gYml0IDI5OjI3IG9mCURpc3BsYXkgQ29u dHJvbCByZWdpc3Rlci4KPisgICAqLwo+K3N0YXRpYyB1bnNpZ25lZCBsb25nIGRpc3BsYXlDb250 cm9sQWRqdXN0X1NNNzUwTEUobW9kZV9wYXJhbWV0ZXJfdCAqcE1vZGVQYXJhbSwgdW5zaWduZWQg bG9uZyBkaXNwQ29udHJvbCkKPit7Cj4rCXVuc2lnbmVkIGxvbmcgeCwgeTsKPisKPisJeCA9IHBN b2RlUGFyYW0tPmhvcml6b250YWxfZGlzcGxheV9lbmQ7Cj4rCXkgPSBwTW9kZVBhcmFtLT52ZXJ0 aWNhbF9kaXNwbGF5X2VuZDsKPisKPisJLyogU003NTBMRSBoYXMgdG8gc2V0IHVwIHRoZSB0b3At bGVmdCBhbmQgYm90dG9tLXJpZ2h0Cj4rCSAgIHJlZ2lzdGVycyBhcyB3ZWxsLgo+KwkgICBOb3Rl IHRoYXQgbm9ybWFsIFNNNzUwL1NNNzE4IG9ubHkgdXNlIHRob3NlIHR3byByZWdpc3RlciBmb3IK PisJICAgYXV0by1jZW50ZXJpbmcgbW9kZS4KPisJICAgKi8KPisJUE9LRTMyKENSVF9BVVRPX0NF TlRFUklOR19UTCwKPisJCQkofigweDdGRiA8PCBDUlRfQVVUT19DRU5URVJJTkdfVExfVE9QX0xT QikpJgo+KwkJCSh+KDB4N0ZGIDw8IENSVF9BVVRPX0NFTlRFUklOR19UTF9MRUZUX0xTQikpKTsK PisKPisJLypjbGVhciovCj4rCVBPS0UzMihDUlRfQVVUT19DRU5URVJJTkdfQlIsCj4rCQkJKH4o MHg3RkYgPDwgQ1JUX0FVVE9fQ0VOVEVSSU5HX0JSX0JPVFRPTV9MU0IpKXwKPisJCQkofigweDdG RiA8PCBDUlRfQVVUT19DRU5URVJJTkdfQlJfUklHSFRfTFNCKSkpOwo+KwlQT0tFMzIoQ1JUX0FV VE9fQ0VOVEVSSU5HX0JSLAo+KwkJCSh5LTEgPDwgQ1JUX0FVVE9fQ0VOVEVSSU5HX0JSX0JPVFRP TV9MU0IpfAo+KwkJCSh4LTEgPDwgQ1JUX0FVVE9fQ0VOVEVSSU5HX0JSX1JJR0hUX0xTQikpOwo+ KwkvKiBDbGVhciBiaXQgMjk6Mjcgb2YgZGlzcGxheSBjb250cm9sIHJlZ2lzdGVyICovCj4rCWRp c3BDb250cm9sICY9IH4oNyA8PCBDUlRfRElTUExBWV9DVFJMX0NMS19MU0IpOwo+KwkvKiBBc3N1 bWUgY29tbW9uIGZpZWxkcyBpbiBkaXNwQ29udHJvbCBoYXZlIGJlZW4gcHJvcGVybHkgc2V0IGJl Zm9yZQo+KwkgICBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCj4rCSAgIFRoaXMgZnVuY3Rpb24gb25s eSBzZXRzIHRoZSBleHRyYSBmaWVsZHMgaW4gZGlzcENvbnRyb2wuCj4rCSAgICovCj4rCj4rCj4r CS8qIFNldCBiaXQgMjk6Mjcgb2YgZGlzcGxheSBjb250cm9sIHJlZ2lzdGVyIGZvciB0aGUgcmln aHQgY2xvY2sgKi8KPisJLyogTm90ZSB0aGF0IFNNNzUwTEUgb25seSBuZWVkIHRvIHN1cHBvcnRl ZCA3IHJlc29sdWl0b25zLiAqLwo+KwlkaXNwQ29udHJvbCAmPSAofig3IDw8IENSVF9ESVNQTEFZ X0NUUkxfQ0xLX0xTQikpOwo+KwlpZiAoeCA9PSA4MDAgJiYgeSA9PSA2MDApCj4rCQlkaXNwQ29u dHJvbCB8PSAxIDw8IENSVF9ESVNQTEFZX0NUUkxfQ0xLX0xTQjsKPisJZWxzZSBpZiAoeCA9PSAx MDI0ICYmIHkgPT0gNzY4KQo+KwkJZGlzcENvbnRyb2wgfD0gMyA8PCBDUlRfRElTUExBWV9DVFJM X0NMS19MU0I7Cj4rCWVsc2UgaWYgKHggPT0gMTE1MiAmJiB5ID09IDg2NCkKPisJCWRpc3BDb250 cm9sIHw9IDUgPDwgQ1JUX0RJU1BMQVlfQ1RSTF9DTEtfTFNCOwo+KwllbHNlIGlmICh4ID09IDEy ODAgJiYgeSA9PSA3NjgpCj4rCQlkaXNwQ29udHJvbCB8PSA1IDw8IENSVF9ESVNQTEFZX0NUUkxf Q0xLX0xTQjsKPisJZWxzZSBpZiAoeCA9PSAxMjgwICYmIHkgPT0gNzIwKQo+KwkJZGlzcENvbnRy b2wgfD0gNCA8PCBDUlRfRElTUExBWV9DVFJMX0NMS19MU0I7Cj4rCWVsc2UgaWYgKHggPT0gMTI4 MCAmJiB5ID09IDk2MCkKPisJCWRpc3BDb250cm9sIHw9IDYgPDwgQ1JUX0RJU1BMQVlfQ1RSTF9D TEtfTFNCOwo+KwllbHNlIGlmICh4ID09IDEyODAgJiYgeSA9PSAxMDI0KQo+KwkJZGlzcENvbnRy b2wgfD0gNiA8PCBDUlRfRElTUExBWV9DVFJMX0NMS19MU0I7Cj4rCWVsc2UgLyogZGVmYXVsdCB0 byBWR0EgY2xvY2sgKi8KPisJCWRpc3BDb250cm9sICY9IH4oNyA8PCBDUlRfRElTUExBWV9DVFJM X0NMS19MU0IpOwo+Kwo+KwkvKiBTZXQgYml0IDI1OjI0IG9mIGRpc3BsYXkgY29udHJvbGxlciAq Lwo+KwlkaXNwQ29udHJvbCB8PSAxIDw8IENSVF9ESVNQTEFZX0NUUkxfQ1JUU0VMRUNUX0xTQjsK PisJZGlzcENvbnRyb2wgJj0gfigxIDw8IENSVF9ESVNQTEFZX0NUUkxfUkdCQklUX0xTQik7Cj4r Cj4rCS8qIFNldCBiaXQgMTQgb2YgZGlzcGxheSBjb250cm9sbGVyICovCj4rCWRpc3BDb250cm9s IHw9IDEgPDwgQ1JUX0RJU1BMQVlfQ1RSTF9DTE9DS19QSEFTRV9MU0I7Cj4rCVBPS0UzMihDUlRf RElTUExBWV9DVFJMLCBkaXNwQ29udHJvbCk7Cj4rCj4rCXJldHVybiBkaXNwQ29udHJvbDsKPisK Pit9Cj4rCj4rCj4rCj4rLyogb25seSB0aW1pbmcgcmVsYXRlZCByZWdpc3RlcnMgd2lsbCBiZSAg cHJvZ3JhbWVkICovCj4rc3RhdGljIGludCBwcm9ncmFtTW9kZVJlZ2lzdGVycyhtb2RlX3BhcmFt ZXRlcl90ICpwTW9kZVBhcmFtLCBwbGxfdmFsdWVfdCAqcGxsKQo+K3sKPisJaW50IHJldCA9IDA7 Cj4rCWludCBjbnQgPSAwOwo+Kwl1bnNpZ25lZCBpbnQgdWxUbXBWYWx1ZSwgdWxSZWc7Cj4rCWlm IChwbGwtPmNsb2NrVHlwZSA9PSBTRUNPTkRBUllfUExMKSB7Cj4rCQkvKiBwcm9ncmFtZSBzZWNv bmRhcnkgcGl4ZWwgY2xvY2sgKi8KPisJCVBPS0UzMihDUlRfUExMX0NUUkwsIGZvcm1hdFBsbFJl ZyhwbGwpKTsKPisJCVBPS0UzMihDUlRfSE9SSVpPTlRBTF9UT1RBTCwKPisJCQkoKHBNb2RlUGFy YW0tPmhvcml6b250YWxfdG90YWwgLSAxKSA8PCBDUlRfSE9SSVpPTlRBTF9UT1RBTF9UT1RBTF9M U0IpCj4rCQkJfCgocE1vZGVQYXJhbS0+aG9yaXpvbnRhbF9kaXNwbGF5X2VuZCAtIDEpIDw8IENS VF9IT1JJWk9OVEFMX1RPVEFMX0RJU1BMQVlfRU5EX0xTQikpOwo+Kwo+KwkJUE9LRTMyKENSVF9I T1JJWk9OVEFMX1NZTkMsCj4rCQkJKHBNb2RlUGFyYW0tPmhvcml6b250YWxfc3luY193aWR0aCA8 PCBDUlRfSE9SSVpPTlRBTF9TWU5DX1dJRFRIX0xTQikKPisJCQl8KChwTW9kZVBhcmFtLT5ob3Jp em9udGFsX3N5bmNfc3RhcnQgLSAxKSA8PCBDUlRfSE9SSVpPTlRBTF9TWU5DX1NUQVJUX0xTQikp Owo+Kwo+KwkJUE9LRTMyKENSVF9WRVJUSUNBTF9UT1RBTCwKPisJCQkJKChwTW9kZVBhcmFtLT52 ZXJ0aWNhbF90b3RhbCAtIDEpIDw8IENSVF9WRVJUSUNBTF9UT1RBTF9UT1RBTF9MU0IpCj4rCQkJ CXwoKHBNb2RlUGFyYW0tPnZlcnRpY2FsX2Rpc3BsYXlfZW5kIC0gMSkgPDwgQ1JUX1ZFUlRJQ0FM X1RPVEFMX0RJU1BMQVlfRU5EX0xTQikpOwo+KwkJUE9LRTMyKENSVF9WRVJUSUNBTF9TWU5DLAo+ KwkJCQkocE1vZGVQYXJhbS0+dmVydGljYWxfc3luY19oZWlnaHQgPDwgQ1JUX1ZFUlRJQ0FMX1NZ TkNfSEVJR0hUX0xTQikKPisJCQkJfCgocE1vZGVQYXJhbS0+dmVydGljYWxfc3luY19zdGFydCAt IDEpIDw8IENSVF9WRVJUSUNBTF9TWU5DX1NUQVJUX0xTQikpOwo+Kwo+Kwo+KwkJdWxUbXBWYWx1 ZSA9IChwTW9kZVBhcmFtLT52ZXJ0aWNhbF9zeW5jX3BvbGFyaXR5IDw8IENSVF9ESVNQTEFZX0NU UkxfVlNZTkNfUEhBU0VfTFNCKXwKPisJCQkJKHBNb2RlUGFyYW0tPmhvcml6b250YWxfc3luY19w b2xhcml0eSA8PCBDUlRfRElTUExBWV9DVFJMX0hTWU5DX1BIQVNFX0xTQil8Cj4rCQkJCSgxIDw8 IENSVF9ESVNQTEFZX0NUUkxfVElNSU5HX0xTQil8Cj4rCQkJCSgxIDw8IENSVF9ESVNQTEFZX0NU UkxfUExBTkVfTFNCKTsKPisKPisJCWlmIChnZXRDaGlwVHlwZSgpID09IFNNNzUwTEUpIHsKPisJ CQlkaXNwbGF5Q29udHJvbEFkanVzdF9TTTc1MExFKHBNb2RlUGFyYW0sIHVsVG1wVmFsdWUpOwo+ KwkJfSBlbHNlewo+KwkJCXVsUmVnID0gUEVFSzMyKENSVF9ESVNQTEFZX0NUUkwpCj4rCQkJCSYg KH4oMSA8PCBDUlRfRElTUExBWV9DVFJMX1ZTWU5DX1BIQVNFX0xTQikpCj4rCQkJCSYgKH4oMSA8 PCBDUlRfRElTUExBWV9DVFJMX0hTWU5DX1BIQVNFX0xTQikpCj4rCQkJCSYgKH4oMSA8PCBDUlRf RElTUExBWV9DVFJMX1RJTUlOR19MU0IpKQo+KwkJCQkmICh+KDEgPDwgQ1JUX0RJU1BMQVlfQ1RS TF9QTEFORV9MU0IpKTsKPisJCQlQT0tFMzIoQ1JUX0RJU1BMQVlfQ1RSTCwgdWxUbXBWYWx1ZXx1 bFJlZyk7Cj4rCQl9Cj4rCj4rCX0gZWxzZSBpZiAocGxsLT5jbG9ja1R5cGUgPT0gUFJJTUFSWV9Q TEwpIHsKPisJCXVuc2lnbmVkIGludCB1bFJlc2VydmVkQml0czsKPisJCVBPS0UzMihQQU5FTF9Q TExfQ1RSTCwgZm9ybWF0UGxsUmVnKHBsbCkpOwo+KwkJUE9LRTMyKFBBTkVMX0hPUklaT05UQUxf VE9UQUwsCj4rCQkJCSgocE1vZGVQYXJhbS0+aG9yaXpvbnRhbF90b3RhbCAtIDEpIDw8IFBBTkVM X0hPUklaT05UQUxfVE9UQUxfVE9UQUxfTFNCKQo+KwkJCQl8KChwTW9kZVBhcmFtLT5ob3Jpem9u dGFsX2Rpc3BsYXlfZW5kIC0gMSkgPDwgUEFORUxfSE9SSVpPTlRBTF9UT1RBTF9ESVNQTEFZX0VO RF9MU0IpKTsKPisKPisJCVBPS0UzMihQQU5FTF9IT1JJWk9OVEFMX1NZTkMsCj4rCQkJCShwTW9k ZVBhcmFtLT5ob3Jpem9udGFsX3N5bmNfd2lkdGggPDwgUEFORUxfSE9SSVpPTlRBTF9TWU5DX1dJ RFRIX0xTQikKPisJCQkJfCgocE1vZGVQYXJhbS0+aG9yaXpvbnRhbF9zeW5jX3N0YXJ0IC0gMSkg PDwgUEFORUxfSE9SSVpPTlRBTF9TWU5DX1NUQVJUX0xTQikpOwo+Kwo+KwkJUE9LRTMyKFBBTkVM X1ZFUlRJQ0FMX1RPVEFMLAo+KwkJCQkoKHBNb2RlUGFyYW0tPnZlcnRpY2FsX3RvdGFsIC0gMSkg PDwgUEFORUxfVkVSVElDQUxfVE9UQUxfVE9UQUxfTFNCKQo+KwkJCQl8KChwTW9kZVBhcmFtLT52 ZXJ0aWNhbF9kaXNwbGF5X2VuZCAtIDEpIDw8IFBBTkVMX1ZFUlRJQ0FMX1RPVEFMX0RJU1BMQVlf RU5EX0xTQikpOwo+Kwo+KwkJUE9LRTMyKFBBTkVMX1ZFUlRJQ0FMX1NZTkMsCj4rCQkJCShwTW9k ZVBhcmFtLT52ZXJ0aWNhbF9zeW5jX2hlaWdodCA8PCBQQU5FTF9WRVJUSUNBTF9TWU5DX0hFSUdI VF9MU0IpCj4rCQkJCXwoKHBNb2RlUGFyYW0tPnZlcnRpY2FsX3N5bmNfc3RhcnQgLSAxKSA8PCBQ QU5FTF9WRVJUSUNBTF9TWU5DX1NUQVJUX0xTQikpOwo+KwkJdWxUbXBWYWx1ZSB8PSAocE1vZGVQ YXJhbS0+dmVydGljYWxfc3luY19wb2xhcml0eSA8PCBQQU5FTF9ESVNQTEFZX0NUUkxfVlNZTkNf UEhBU0VfTFNCKQo+KwkJCQl8KHBNb2RlUGFyYW0tPmhvcml6b250YWxfc3luY19wb2xhcml0eSA8 PCBQQU5FTF9ESVNQTEFZX0NUUkxfSFNZTkNfUEhBU0VfTFNCKQo+KwkJCQl8KHBNb2RlUGFyYW0t PmNsb2NrX3BoYXNlX3BvbGFyaXR5IDw8IFBBTkVMX0RJU1BMQVlfQ1RSTF9DTE9DS19QSEFTRV9M U0IpCj4rCQkJCXwoMSA8PCBQQU5FTF9ESVNQTEFZX0NUUkxfVElNSU5HX0xTQikKPisJCQkJfCgx IDw8IFBBTkVMX0RJU1BMQVlfQ1RSTF9QTEFORV9MU0IpOwo+KwkJdWxSZXNlcnZlZEJpdHMgPSAo MyA8PCAgUEFORUxfRElTUExBWV9DVFJMX1JFU0VSVkVEXzFfTUFTS19MU0IpfAo+KwkJCQkoMTUg PDwgUEFORUxfRElTUExBWV9DVFJMX1JFU0VSVkVEXzJfTUFTS19MU0IpfAo+KwkJCQkoMSA8PCBQ QU5FTF9ESVNQTEFZX0NUUkxfUkVTRVJWRURfM19NQVNLX0xTQil8Cj4rCQkJCSgxIDw8IFBBTkVM X0RJU1BMQVlfQ1RSTF9WU1lOQ19MU0IpOwo+KwkJdWxSZWcgPSAoUEVFSzMyKFBBTkVMX0RJU1BM QVlfQ1RSTCkgJiB+dWxSZXNlcnZlZEJpdHMpCj4rCQkJJiAofigxIDw8IFBBTkVMX0RJU1BMQVlf Q1RSTF9DTE9DS19QSEFTRV9MU0IpKQo+KwkJCSYgKH4oMSA8PCBQQU5FTF9ESVNQTEFZX0NUUkxf VlNZTkNfUEhBU0VfTFNCKSkKPisJCQkmICh+KDEgPDwgUEFORUxfRElTUExBWV9DVFJMX0hTWU5D X1BIQVNFX0xTQikpCj4rCQkJJiAofigxIDw8IFBBTkVMX0RJU1BMQVlfQ1RSTF9USU1JTkdfTFNC KSkKPisJCQkmICh+KDEgPDwgUEFORUxfRElTUExBWV9DVFJMX1BMQU5FX0xTQikpOwo+Kwo+KwkJ LyogTWF5IGEgaGFyZHdhcmUgYnVnIG9yIGp1c3QgbXkgdGVzdCBjaGlwIChub3QgY29uZmlybWVk KS4KPisJCSAqIFBBTkVMX0RJU1BMQVlfQ1RSTCByZWdpc3RlciBzZWVtcyByZXF1aXJpbmcgZmV3 IHdyaXRlcwo+KwkJICogYmVmb3JlIGEgdmFsdWUgY2FuIGJlIHN1Y2Nlc2Z1bGx5IHdyaXR0ZW4g aW4uCj4rCQkgKiBBZGRlZCBzb21lIG1hc2tzIHRvIG1hc2sgb3V0IHRoZSByZXNlcnZlZCBiaXRz Lgo+KwkJICogTm90ZTogVGhpcyBwcm9ibGVtIGhhcHBlbnMgYnkgZGVzaWduLiBUaGUgaGFyZHdh cmUgd2lsbCB3YWl0IGZvciB0aGUKPisJCSAqICAgICAgIG5leHQgdmVydGljYWwgc3luYyB0byB0 dXJuIG9uL29mZiB0aGUgcGxhbmUuCj4rCQkgKi8KPisKPisJCVBPS0UzMihQQU5FTF9ESVNQTEFZ X0NUUkwsIHVsVG1wVmFsdWV8dWxSZWcpOwo+Kwo+KwkJd2hpbGUgKChQRUVLMzIoUEFORUxfRElT UExBWV9DVFJMKSAmIH51bFJlc2VydmVkQml0cykgIT0gKHVsVG1wVmFsdWV8dWxSZWcpKSB7Cj4r CQkJY250Kys7Cj4rCQkJaWYgKGNudCA+IDEwMDApCj4rCQkJCWJyZWFrOwo+KwkJCVBPS0UzMihQ QU5FTF9ESVNQTEFZX0NUUkwsIHVsVG1wVmFsdWV8dWxSZWcpOwo+KwkJfQo+Kwo+Kwl9IGVsc2V7 Cj4rCQlyZXQgPSAtMTsKPisJfQo+KwlyZXR1cm4gcmV0Owo+K30KPisKPitpbnQgZGRrNzUwX3Nl dE1vZGVUaW1pbmcobW9kZV9wYXJhbWV0ZXJfdCAqcGFybSwgY2xvY2tfdHlwZV90IGNsb2NrKQo+ K3sKPisJcGxsX3ZhbHVlX3QgcGxsOwo+Kwl1bnNpZ25lZCBpbnQgdWlBY3R1YWxQaXhlbENsazsK PisJcGxsLmlucHV0RnJlcSA9IERFRkFVTFRfSU5QVVRfQ0xPQ0s7Cj4rCXBsbC5jbG9ja1R5cGUg PSBjbG9jazsKPisKPisJdWlBY3R1YWxQaXhlbENsayA9IGNhbGNQbGxWYWx1ZShwYXJtLT5waXhl bF9jbG9jaywgJnBsbCk7Cj4rCWlmIChnZXRDaGlwVHlwZSgpID09IFNNNzUwTEUpIHsKPisJCS8q IHNldCBncmFwaGljIG1vZGUgdmlhIElPIG1ldGhvZCAqLwo+KwkJb3V0Yl9wKDB4ODgsIDB4M2Q0 KTsKPisJCW91dGJfcCgweDA2LCAweDNkNSk7Cj4rCX0KPisJcHJvZ3JhbU1vZGVSZWdpc3RlcnMo cGFybSwgJnBsbCk7Cj4rCXJldHVybiAwOwo+K30KPisKPisKPmRpZmYgLS1naXQgYS9kcml2ZXJz L3ZpZGVvL2x5bnhmYi9kZGs3NTBfbW9kZS5oIGIvZHJpdmVycy92aWRlby9seW54ZmIvZGRrNzUw X21vZGUuaAo+bmV3IGZpbGUgbW9kZSAxMDA2NDQKPmluZGV4IDAwMDAwMDAuLjdjMTJiNDYKPi0t LSAvZGV2L251bGwKPisrKyBiL2RyaXZlcnMvdmlkZW8vbHlueGZiL2Rkazc1MF9tb2RlLmgKPkBA IC0wLDAgKzEsNTkgQEAKPisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKgo+KypDb3B5cmlnaHQgKGMpIDIwMTIgYnkgU2ls aWNvbiBNb3Rpb24sIEluYy4gKFNNSSkKPisqUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQo+KypvZiB0aGlz IHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdh cmUiKSwgdG8gZGVhbAo+KyppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5j bHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCj4rKnVzZSwgY29weSwgbW9k aWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwg Y29waWVzCj4rKm9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20g dGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0bwo+KypkbyBzbywgc3ViamVjdCB0byB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnM6Cj4rKgo+KypUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElT IiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKPisqRVhQUkVTUyBPUiBJTVBMSUVELCBJ TkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCj4rKk9GIE1FUkNIQU5U QUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECj4rKk5PTklORlJJ TkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIE1pbGwuQ2hlbiBhbmQgTW9uay5MaXUgT1IgQ09Q WVJJR0hUCj4rKkhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RI RVIgTElBQklMSVRZLAo+KypXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBP UiBPVEhFUldJU0UsIEFSSVNJTkcKPisqRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lU SCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgo+KypPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09G VFdBUkUuCj4rKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8KPisjaWZuZGVmIERESzc1MF9NT0RFX0hfXwo+KyNkZWZpbmUg RERLNzUwX01PREVfSF9fCj4rCj4rI2luY2x1ZGUgImRkazc1MF9jaGlwLmgiCj4rCj4rdHlwZWRl ZiBlbnVtIF9zcG9sYXJpdHlfdHsKPisgICAgUE9TID0gMCwgLyogcG9zaXRpdmUgKi8KPisgICAg TkVHLCAvKiBuZWdhdGl2ZSAqLwo+K30KPitzcG9sYXJpdHlfdDsKPisKPisKPit0eXBlZGVmIHN0 cnVjdCBfbW9kZV9wYXJhbWV0ZXJfdHsKPisgICAgLyogSG9yaXpvbnRhbCB0aW1pbmcuICovCj4r ICAgIHVuc2lnbmVkIGxvbmcgaG9yaXpvbnRhbF90b3RhbDsKPisgICAgdW5zaWduZWQgbG9uZyBo b3Jpem9udGFsX2Rpc3BsYXlfZW5kOwo+KyAgICB1bnNpZ25lZCBsb25nIGhvcml6b250YWxfc3lu Y19zdGFydDsKPisgICAgdW5zaWduZWQgbG9uZyBob3Jpem9udGFsX3N5bmNfd2lkdGg7Cj4rICAg IHNwb2xhcml0eV90IGhvcml6b250YWxfc3luY19wb2xhcml0eTsKPisKPisgICAgLyogVmVydGlj YWwgdGltaW5nLiAqLwo+KyAgICB1bnNpZ25lZCBsb25nIHZlcnRpY2FsX3RvdGFsOwo+KyAgICB1 bnNpZ25lZCBsb25nIHZlcnRpY2FsX2Rpc3BsYXlfZW5kOwo+KyAgICB1bnNpZ25lZCBsb25nIHZl cnRpY2FsX3N5bmNfc3RhcnQ7Cj4rICAgIHVuc2lnbmVkIGxvbmcgdmVydGljYWxfc3luY19oZWln aHQ7Cj4rICAgIHNwb2xhcml0eV90IHZlcnRpY2FsX3N5bmNfcG9sYXJpdHk7Cj4rCj4rICAgIC8q IFJlZnJlc2ggdGltaW5nLiAqLwo+KyAgICB1bnNpZ25lZCBsb25nIHBpeGVsX2Nsb2NrOwo+KyAg ICB1bnNpZ25lZCBsb25nIGhvcml6b250YWxfZnJlcXVlbmN5Owo+KyAgICB1bnNpZ25lZCBsb25n IHZlcnRpY2FsX2ZyZXF1ZW5jeTsKPisKPisgICAgLyogQ2xvY2sgUGhhc2UuIFRoaXMgY2xvY2sg cGhhc2Ugb25seSBhcHBsaWVzIHRvIFBhbmVsLiAqLwo+KyAgICBzcG9sYXJpdHlfdCBjbG9ja19w aGFzZV9wb2xhcml0eTsKPit9Cj4rbW9kZV9wYXJhbWV0ZXJfdDsKPisKPitpbnQgZGRrNzUwX3Nl dE1vZGVUaW1pbmcobW9kZV9wYXJhbWV0ZXJfdCAqLCBjbG9ja190eXBlX3QpOwo+Kwo+Kwo+KyNl bmRpZgo+ZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbHlueGZiL2Rkazc1MF9wb3dlci5jIGIv ZHJpdmVycy92aWRlby9seW54ZmIvZGRrNzUwX3Bvd2VyLmMKPm5ldyBmaWxlIG1vZGUgMTAwNjQ0 Cj5pbmRleCAwMDAwMDAwLi5hZDRmYmQxCj4tLS0gL2Rldi9udWxsCj4rKysgYi9kcml2ZXJzL3Zp ZGVvL2x5bnhmYi9kZGs3NTBfcG93ZXIuYwo+QEAgLTAsMCArMSwyNDMgQEAKPisvKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Kgo+KypDb3B5cmlnaHQgKGMpIDIwMTIgYnkgU2lsaWNvbiBNb3Rpb24sIEluYy4gKFNNSSkKPisq UGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJz b24gb2J0YWluaW5nIGEgY29weQo+KypvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRv Y3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAo+KyppbiB0aGUgU29m dHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0 aGUgcmlnaHRzIHRvCj4rKnVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJp YnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzCj4rKm9mIHRoZSBTb2Z0d2FyZSwg YW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0 bwo+KypkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4rKgo+KypU SEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkg S0lORCwKPisqRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRP IFRIRSBXQVJSQU5USUVTCj4rKk9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UgQU5ECj4rKk5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxM TWlsbC5DaGVuIGFuZCBNb25rLkxpdSBPUiBDT1BZUklHSFQKPisqSE9MREVSUyBCRSBMSUFCTEUg Rk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCj4rKldIRVRIRVIgSU4g QU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+KypGUk9N LCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9S Cj4rKk9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KPisqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwo+KyNpbmNs dWRlICJkZGs3NTBfaGVscC5oIgo+KyNpbmNsdWRlICJkZGs3NTBfcmVnLmgiCj4rI2luY2x1ZGUg ImRkazc1MF9wb3dlci5oIgo+Kwo+K3ZvaWQgZGRrNzUwX3NldERQTVMoRFBNU190IHN0YXRlKQo+ K3sKPisJdW5zaWduZWQgaW50IHZhbHVlOwo+KwlpZiAoZ2V0Q2hpcFR5cGUoKSA9PSBTTTc1MExF KSB7Cj4rCQl2YWx1ZSA9IFBFRUszMihDUlRfRElTUExBWV9DVFJMKTsKPisJCXZhbHVlICY9ICh+ KDMgPDwgQ1JUX0RJU1BMQVlfQ1RSTF9EUE1TX0xTQikpOwo+KwkJUE9LRTMyKENSVF9ESVNQTEFZ X0NUUkwsIHZhbHVlfChzdGF0ZSA8PCBDUlRfRElTUExBWV9DVFJMX0RQTVNfTFNCKSk7Cj4rCX0g ZWxzZXsKPisJCXZhbHVlID0gUEVFSzMyKFNZU1RFTV9DVFJMKTsKPisJCXZhbHVlICY9ICh+KDMg PDwgU1lTVEVNX0NUUkxfRFBNU19MU0IpKTsKPisJCXZhbHVlIHw9IHN0YXRlIDw8IFNZU1RFTV9D VFJMX0RQTVNfTFNCOwo+KwkJUE9LRTMyKFNZU1RFTV9DVFJMLCAgdmFsdWUpOwo+Kwl9Cj4rfQo+ Kwo+K3Vuc2lnbmVkIGludCBnZXRQb3dlck1vZGUoKQo+K3sKPisJaWYgKGdldENoaXBUeXBlKCkg PT0gU003NTBMRSkKPisJCXJldHVybiAwOwo+KwlyZXR1cm4gMiYoUEVFSzMyKFBPV0VSX01PREVf Q1RSTCkgPj4gUE9XRVJfTU9ERV9DVFJMX01PREVfTFNCKTsKPit9Cj4rCj4rCj4rLyoKPisgKiBT TTUweCBjYW4gb3BlcmF0ZSBpbiBvbmUgb2YgdGhyZWUgbW9kZXM6IDAsIDEgb3IgU2xlZXAuCj4r ICogT24gaGFyZHdhcmUgcmVzZXQsIHBvd2VyIG1vZGUgMCBpcyBkZWZhdWx0Lgo+KyAqLwo+K3Zv aWQgc2V0UG93ZXJNb2RlKHVuc2lnbmVkIGludCBwb3dlck1vZGUpCj4rewo+Kwl1bnNpZ25lZCBp bnQgY29udHJvbF92YWx1ZSA9IDA7Cj4rCj4rCWNvbnRyb2xfdmFsdWUgPSBQRUVLMzIoUE9XRVJf TU9ERV9DVFJMKTsKPisJY29udHJvbF92YWx1ZSAmPSAofigzIDw8IFBPV0VSX01PREVfQ1RSTF9N T0RFX0xTQikpOwo+KwlpZiAoZ2V0Q2hpcFR5cGUoKSA9PSBTTTc1MExFKQo+KwkJcmV0dXJuOwo+ Kwo+Kwlzd2l0Y2ggKHBvd2VyTW9kZSkgewo+KwljYXNlIFBPV0VSX01PREVfQ1RSTF9NT0RFX01P REUwOgo+KwkJY29udHJvbF92YWx1ZSAmPSAofigzIDw8IFBPV0VSX01PREVfQ1RSTF9NT0RFX0xT QikpOwo+KwkJYnJlYWs7Cj4rCWNhc2UgUE9XRVJfTU9ERV9DVFJMX01PREVfTU9ERTE6Cj4rCQlj b250cm9sX3ZhbHVlIHw9IDEgPDwgUE9XRVJfTU9ERV9DVFJMX01PREVfTFNCOwo+KwkJYnJlYWs7 Cj4rCj4rCWNhc2UgUE9XRVJfTU9ERV9DVFJMX01PREVfU0xFRVA6Cj4rCQljb250cm9sX3ZhbHVl IHw9IDIgPDwgUE9XRVJfTU9ERV9DVFJMX01PREVfTFNCOwo+KwkJYnJlYWs7Cj4rCj4rCWRlZmF1 bHQ6Cj4rCQlicmVhazsKPisJfQo+Kwo+KwkvKiBTZXQgdXAgb3RoZXIgZmllbGRzIGluIFBvd2Vy IENvbnRyb2wgUmVnaXN0ZXIgKi8KPisJaWYgKHBvd2VyTW9kZSA9PSBQT1dFUl9NT0RFX0NUUkxf TU9ERV9TTEVFUCkgewo+KwkJY29udHJvbF92YWx1ZSAmPQo+KyNpZmRlZiBWQUxJREFUSU9OX0NI SVAKPisJCQkofigxIDw8IFBPV0VSX01PREVfQ1RSTF8zMzZDTEtfTFNCKSl8Cj4rI2VuZGlmCj4r CQkJKH4oMSA8PCBQT1dFUl9NT0RFX0NUUkxfT1NDX0lOUFVUX0xTQikpOwo+Kwl9IGVsc2V7Cj4r CQljb250cm9sX3ZhbHVlIHw9Cj4rI2lmZGVmIFZBTElEQVRJT05fQ0hJUAo+KwkJCSgxIDw8IFBP V0VSX01PREVfQ1RSTF8zMzZDTEtfTFNCKXwKPisjZW5kaWYKPisJCQkoMSA8PCBQT1dFUl9NT0RF X0NUUkxfT1NDX0lOUFVUX0xTQik7Cj4rCX0KPisKPisJLyogUHJvZ3JhbSBuZXcgcG93ZXIgbW9k ZS4gKi8KPisJUE9LRTMyKFBPV0VSX01PREVfQ1RSTCwgY29udHJvbF92YWx1ZSk7Cj4rfQo+Kwo+ K3ZvaWQgc2V0Q3VycmVudEdhdGUodW5zaWduZWQgaW50IGdhdGUpCj4rewo+Kwl1bnNpZ25lZCBp bnQgZ2F0ZV9yZWc7Cj4rCXVuc2lnbmVkIGludCBtb2RlOwo+Kwo+KwkvKiBHZXQgY3VycmVudCBw b3dlciBtb2RlLiAqLwo+Kwltb2RlID0gZ2V0UG93ZXJNb2RlKCk7Cj4rCj4rCXN3aXRjaCAobW9k ZSkgewo+KwljYXNlIFBPV0VSX01PREVfQ1RSTF9NT0RFX01PREUwOgo+KwkJZ2F0ZV9yZWcgPSBN T0RFMF9HQVRFOwo+KwkJYnJlYWs7Cj4rCj4rCWNhc2UgUE9XRVJfTU9ERV9DVFJMX01PREVfTU9E RTE6Cj4rCQlnYXRlX3JlZyA9IE1PREUxX0dBVEU7Cj4rCQlicmVhazsKPisKPisJZGVmYXVsdDoK PisJCWdhdGVfcmVnID0gTU9ERTBfR0FURTsKPisJCWJyZWFrOwo+Kwl9Cj4rCVBPS0UzMihnYXRl X3JlZywgZ2F0ZSk7Cj4rfQo+Kwo+Kwo+Kwo+Ky8qCj4rICogVGhpcyBmdW5jdGlvbiBlbmFibGUv ZGlzYWJsZSB0aGUgMkQgZW5naW5lLgo+KyAqLwo+K3ZvaWQgZW5hYmxlMkRFbmdpbmUodW5zaWdu ZWQgaW50IGVuYWJsZSkKPit7Cj4rCXVpbnQzMl90IGdhdGU7Cj4rCj4rCWdhdGUgPSBQRUVLMzIo Q1VSUkVOVF9HQVRFKTsKPisJaWYgKGVuYWJsZSkgewo+KwkJZ2F0ZSB8PSAxIDw8IENVUlJFTlRf R0FURV9ERV9MU0I7Cj4rCQlnYXRlIHw9IDEgPDwgQ1VSUkVOVF9HQVRFX0NTQ19MU0I7Cj4rCX0g ZWxzZXsKPisJCWdhdGUgJj0gKH4oMSA8PCBDVVJSRU5UX0dBVEVfREVfTFNCKSk7Cj4rCQlnYXRl ICY9ICh+KDEgPDwgQ1VSUkVOVF9HQVRFX0NTQ19MU0IpKTsKPisJfQo+KwlzZXRDdXJyZW50R2F0 ZShnYXRlKTsKPit9Cj4rCj4rCj4rLyoKPisgKiBUaGlzIGZ1bmN0aW9uIGVuYWJsZS9kaXNhYmxl IHRoZSBaViBQb3J0Lgo+KyAqLwo+K3ZvaWQgZW5hYmxlWlZQb3J0KHVuc2lnbmVkIGludCBlbmFi bGUpCj4rewo+Kwl1aW50MzJfdCBnYXRlOwo+Kwo+KwkvKiBFbmFibGUgWlYgUG9ydCBHYXRlICov Cj4rCWdhdGUgPSBQRUVLMzIoQ1VSUkVOVF9HQVRFKTsKPisJaWYgKGVuYWJsZSkgewo+KwkJZ2F0 ZSB8PSAxIDw8IENVUlJFTlRfR0FURV9aVlBPUlRfTFNCOwo+Kwo+KwkJLyogVXNpbmcgU29mdHdh cmUgSTJDICovCj4rCQlnYXRlIHw9IDEgPDwgQ1VSUkVOVF9HQVRFX0dQSU9fTFNCOwo+Kwo+Kwl9 IGVsc2V7Cj4rCQkvKiBEaXNhYmxlIFpWIFBvcnQgR2F0ZS4gVGhlcmUgaXMgbm8gd2F5IHRvIGtu b3cgd2hldGhlciB0aGUgR1BJTyBwaW5zIGFyZSBiZWluZyB1c2VkCj4rCQkgICBvciBub3QuIFRo ZXJlZm9yZSwgZG8gbm90IGRpc2FibGUgdGhlIEdQSU8gZ2F0ZS4gKi8KPisJCWdhdGUgJj0gKH4o MSA8PCBDVVJSRU5UX0dBVEVfWlZQT1JUX0xTQikpOwo+Kwl9Cj4rCj4rCXNldEN1cnJlbnRHYXRl KGdhdGUpOwo+K30KPisKPisKPit2b2lkIGVuYWJsZVNTUCh1bnNpZ25lZCBpbnQgZW5hYmxlKQo+ K3sKPisJdWludDMyX3QgZ2F0ZTsKPisKPisJLyogRW5hYmxlIFNTUCBHYXRlICovCj4rCWdhdGUg PSBQRUVLMzIoQ1VSUkVOVF9HQVRFKTsKPisJaWYgKGVuYWJsZSkKPisJCWdhdGUgfD0gMSA8PCBD VVJSRU5UX0dBVEVfU1NQX0xTQjsKPisJZWxzZQo+KwkJZ2F0ZSAmPSAofigxIDw8ICBDVVJSRU5U X0dBVEVfU1NQX0xTQikpOwo+Kwo+KwlzZXRDdXJyZW50R2F0ZShnYXRlKTsKPit9Cj4rCj4rdm9p ZCBlbmFibGVETUEodW5zaWduZWQgaW50IGVuYWJsZSkKPit7Cj4rCXVpbnQzMl90IGdhdGU7Cj4r Cj4rCS8qIEVuYWJsZSBETUEgR2F0ZSAqLwo+KwlnYXRlID0gUEVFSzMyKENVUlJFTlRfR0FURSk7 Cj4rCWlmIChlbmFibGUpCj4rCQlnYXRlIHw9IDEgPDwgQ1VSUkVOVF9HQVRFX0RNQV9MU0I7Cj4r CWVsc2UKPisJCWdhdGUgJj0gKH4oMSA8PCBDVVJSRU5UX0dBVEVfRE1BX0xTQikpOwo+Kwo+Kwlz ZXRDdXJyZW50R2F0ZShnYXRlKTsKPit9Cj4rCj4rLyoKPisgKiBUaGlzIGZ1bmN0aW9uIGVuYWJs ZS9kaXNhYmxlIHRoZSBHUElPIEVuZ2luZQo+KyAqLwo+K3ZvaWQgZW5hYmxlR1BJTyh1bnNpZ25l ZCBpbnQgZW5hYmxlKQo+K3sKPisJdWludDMyX3QgZ2F0ZTsKPisKPisJLyogRW5hYmxlIEdQSU8g R2F0ZSAqLwo+KwlnYXRlID0gUEVFSzMyKENVUlJFTlRfR0FURSk7Cj4rCWlmIChlbmFibGUpCj4r CQlnYXRlIHw9IDEgPDwgQ1VSUkVOVF9HQVRFX0dQSU9fTFNCOwo+KwllbHNlCj4rCQlnYXRlICY9 ICh+KDEgPDwgQ1VSUkVOVF9HQVRFX0dQSU9fTFNCKSk7Cj4rCj4rCXNldEN1cnJlbnRHYXRlKGdh dGUpOwo+K30KPisKPisvKgo+KyAqIFRoaXMgZnVuY3Rpb24gZW5hYmxlL2Rpc2FibGUgdGhlIFBX TSBFbmdpbmUKPisgKi8KPit2b2lkIGVuYWJsZVBXTSh1bnNpZ25lZCBpbnQgZW5hYmxlKQo+K3sK PisJdWludDMyX3QgZ2F0ZTsKPisKPisJLyogRW5hYmxlIFBXTSBHYXRlICovCj4rCWdhdGUgPSBQ RUVLMzIoQ1VSUkVOVF9HQVRFKTsKPisJaWYgKGVuYWJsZSkKPisJCWdhdGUgfD0gMSA8PCBDVVJS RU5UX0dBVEVfUFdNX0xTQjsKPisJZWxzZQo+KwkJZ2F0ZSAmPSAofigxIDw8IENVUlJFTlRfR0FU RV9QV01fTFNCKSk7Cj4rCj4rCXNldEN1cnJlbnRHYXRlKGdhdGUpOwo+K30KPisKPisvKgo+KyAq IFRoaXMgZnVuY3Rpb24gZW5hYmxlL2Rpc2FibGUgdGhlIEkyQyBFbmdpbmUKPisgKi8KPit2b2lk IGVuYWJsZUkyQyh1bnNpZ25lZCBpbnQgZW5hYmxlKQo+K3sKPisJdWludDMyX3QgZ2F0ZTsKPisK PisJLyogRW5hYmxlIEkyQyBHYXRlICovCj4rCWdhdGUgPSBQRUVLMzIoQ1VSUkVOVF9HQVRFKTsK PisJaWYgKGVuYWJsZSkKPisJCWdhdGUgfD0gMSA8PCBDVVJSRU5UX0dBVEVfSTJDX0xTQjsKPisJ ZWxzZQo+KwkJZ2F0ZSAmPSAofigxIDw8IENVUlJFTlRfR0FURV9JMkNfTFNCKSk7Cj4rCj4rCXNl dEN1cnJlbnRHYXRlKGdhdGUpOwo+K30KPisKPisKPmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVv L2x5bnhmYi9kZGs3NTBfcG93ZXIuaCBiL2RyaXZlcnMvdmlkZW8vbHlueGZiL2Rkazc1MF9wb3dl ci5oCj5uZXcgZmlsZSBtb2RlIDEwMDY0NAo+aW5kZXggMDAwMDAwMC4uZGE2NWIwMAo+LS0tIC9k ZXYvbnVsbAo+KysrIGIvZHJpdmVycy92aWRlby9seW54ZmIvZGRrNzUwX3Bvd2VyLmgKPkBAIC0w LDAgKzEsODUgQEAKPisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKgo+KypDb3B5cmlnaHQgKGMpIDIwMTIgYnkgU2lsaWNv biBNb3Rpb24sIEluYy4gKFNNSSkKPisqUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJl ZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQo+KypvZiB0aGlzIHNv ZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUi KSwgdG8gZGVhbAo+KyppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVk aW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCj4rKnVzZSwgY29weSwgbW9kaWZ5 LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29w aWVzCj4rKm9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhl IFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0bwo+KypkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnM6Cj4rKgo+KypUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwg V0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKPisqRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNM VURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCj4rKk9GIE1FUkNIQU5UQUJJ TElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECj4rKk5PTklORlJJTkdF TUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIE1pbGwuQ2hlbiBhbmQgTW9uay5MaXUgT1IgQ09QWVJJ R0hUCj4rKkhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIg TElBQklMSVRZLAo+KypXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBP VEhFUldJU0UsIEFSSVNJTkcKPisqRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBU SEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgo+KypPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdB UkUuCj4rKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KPisjaWZuZGVmIERESzc1MF9QT1dFUl9IX18KPisjZGVmaW5lIERE Szc1MF9QT1dFUl9IX18KPisKPit0eXBlZGVmIGVudW0gX0RQTVNfdHsKPisJY3J0RFBNU19PTiA9 IDB4MCwKPisJY3J0RFBNU19TVEFOREJZID0gMHgxLAo+KwljcnREUE1TX1NVU1BFTkQgPSAweDIs Cj4rCWNydERQTVNfT0ZGID0gMHgzLAo+K30KPitEUE1TX3Q7Cj4rCj4rI2RlZmluZSBzZXREQUMo b2ZmKSBcCj4rewlcCj4rCVBPS0UzMihNSVNDX0NUUkwsIFBFRUszMihNSVNDX0NUUkwpfChvZmYg PDwgTUlTQ19DVFJMX0RBQ19QT1dFUl9MU0IpKTsJXAo+K30KPisKPit2b2lkIGRkazc1MF9zZXRE UE1TKERQTVNfdCk7Cj4rCj4rdW5zaWduZWQgaW50IGdldFBvd2VyTW9kZSh2b2lkKTsKPisKPisv Kgo+KyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgY3VycmVudCBwb3dlciBtb2RlCj4rICovCj4r dm9pZCBzZXRQb3dlck1vZGUodW5zaWduZWQgaW50IHBvd2VyTW9kZSk7Cj4rCj4rLyoKPisgKiBU aGlzIGZ1bmN0aW9uIHNldHMgY3VycmVudCBnYXRlCj4rICovCj4rdm9pZCBzZXRDdXJyZW50R2F0 ZSh1bnNpZ25lZCBpbnQgZ2F0ZSk7Cj4rCj4rLyoKPisgKiBUaGlzIGZ1bmN0aW9uIGVuYWJsZS9k aXNhYmxlIHRoZSAyRCBlbmdpbmUuCj4rICovCj4rdm9pZCBlbmFibGUyREVuZ2luZSh1bnNpZ25l ZCBpbnQgZW5hYmxlKTsKPisKPisvKgo+KyAqIFRoaXMgZnVuY3Rpb24gZW5hYmxlL2Rpc2FibGUg dGhlIFpWIFBvcnQKPisgKi8KPit2b2lkIGVuYWJsZVpWUG9ydCh1bnNpZ25lZCBpbnQgZW5hYmxl KTsKPisKPisvKgo+KyAqIFRoaXMgZnVuY3Rpb24gZW5hYmxlL2Rpc2FibGUgdGhlIERNQSBFbmdp bmUKPisgKi8KPit2b2lkIGVuYWJsZURNQSh1bnNpZ25lZCBpbnQgZW5hYmxlKTsKPisKPisvKgo+ KyAqIFRoaXMgZnVuY3Rpb24gZW5hYmxlL2Rpc2FibGUgdGhlIEdQSU8gRW5naW5lCj4rICovCj4r dm9pZCBlbmFibGVHUElPKHVuc2lnbmVkIGludCBlbmFibGUpOwo+Kwo+Ky8qCj4rICogVGhpcyBm dW5jdGlvbiBlbmFibGUvZGlzYWJsZSB0aGUgUFdNIEVuZ2luZQo+KyAqLwo+K3ZvaWQgZW5hYmxl UFdNKHVuc2lnbmVkIGludCBlbmFibGUpOwo+Kwo+Ky8qCj4rICogVGhpcyBmdW5jdGlvbiBlbmFi bGUvZGlzYWJsZSB0aGUgSTJDIEVuZ2luZQo+KyAqLwo+K3ZvaWQgZW5hYmxlSTJDKHVuc2lnbmVk IGludCBlbmFibGUpOwo+Kwo+Ky8qCj4rICogVGhpcyBmdW5jdGlvbiBlbmFibGUvZGlzYWJsZSB0 aGUgU1NQLgo+KyAqLwo+K3ZvaWQgZW5hYmxlU1NQKHVuc2lnbmVkIGludCBlbmFibGUpOwo+Kwo+ Kwo+KyNlbmRpZgo+ZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbHlueGZiL2Rkazc1MF9yZWcu aCBiL2RyaXZlcnMvdmlkZW8vbHlueGZiL2Rkazc1MF9yZWcuaAo+bmV3IGZpbGUgbW9kZSAxMDA2 NDQKPmluZGV4IDAwMDAwMDAuLmUyNTYwYmYKPi0tLSAvZGV2L251bGwKPisrKyBiL2RyaXZlcnMv dmlkZW8vbHlueGZiL2Rkazc1MF9yZWcuaAo+QEAgLTAsMCArMSwzNjIgQEAKPisvKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Kgo+KypDb3B5cmlnaHQgKGMpIDIwMTIgYnkgU2lsaWNvbiBNb3Rpb24sIEluYy4gKFNNSSkKPisq UGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJz b24gb2J0YWluaW5nIGEgY29weQo+KypvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRv Y3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAo+KyppbiB0aGUgU29m dHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0 aGUgcmlnaHRzIHRvCj4rKnVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJp YnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzCj4rKm9mIHRoZSBTb2Z0d2FyZSwg YW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0 bwo+KypkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4rKgo+KypU SEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkg S0lORCwKPisqRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRP IFRIRSBXQVJSQU5USUVTCj4rKk9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UgQU5ECj4rKk5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxM IE1pbGwuQ2hlbiBhbmQgTW9uay5MaXUgT1IgQ09QWVJJR0hUCj4rKkhPTERFUlMgQkUgTElBQkxF IEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAo+KypXSEVUSEVSIElO IEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPisqRlJP TSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBP Ugo+KypPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCj4rKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KPisjaWZu ZGVmIERESzc1MF9SRUdfSF9fCj4rI2RlZmluZSBEREs3NTBfUkVHX0hfXwo+Kwo+Ky8qIE5ldyBy ZWdpc3RlciBmb3IgU003NTBMRSAqLwo+KyNpZmRlZiBPUEVOU09VUkNFCj4rI2RlZmluZSBNSVND X0NUUkwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQKPisjZGVm aW5lIE1JU0NfQ1RSTF9EQUNfUE9XRVJfTFNCICAgICAgICAgICAgICAgICAgICAgICAyMAo+KyNk ZWZpbmUgTUlTQ19DVFJMX0xPQ0FMTUVNX1NJWkVfTFNCICAgICAgICAgICAgICAgICAgIDEyCj4r I2RlZmluZSBNSVNDX0NUUkxfTE9DQUxNRU1fU0laRV84TSAgICAgICAgICAgICAgICAgICAgMwo+ KyNkZWZpbmUgTUlTQ19DVFJMX0xPQ0FMTUVNX1NJWkVfMTZNICAgICAgICAgICAgICAgICAgIDAK PisjZGVmaW5lIE1JU0NfQ1RSTF9MT0NBTE1FTV9TSVpFXzMyTSAgICAgICAgICAgICAgICAgICAx Cj4rI2RlZmluZSBNSVNDX0NUUkxfTE9DQUxNRU1fU0laRV82NE0gICAgICAgICAgICAgICAgICAg Mgo+KyNkZWZpbmUgTUlTQ19DVFJMX0xPQ0FMTUVNX1JFU0VUX0xTQiAgICAgICAgICAgICAgICAg IDYKPisjZGVmaW5lIFNZU1RFTV9DVFJMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAweDAwMDAwMAo+KyNkZWZpbmUgU1lTVEVNX0NUUkxfRFBNU19MU0IgICAgICAgICAgICAgICAg ICAgICAgICAgIDMwCj4rI2RlZmluZSBTWVNURU1fQ1RSTF9EUE1TX1ZQSFAgICAgICAgICAgICAg ICAgICAgICAgICAgMAo+KyNkZWZpbmUgU1lTVEVNX0NUUkxfRFBNU19WUEhOICAgICAgICAgICAg ICAgICAgICAgICAgIDEKPisjZGVmaW5lIFNZU1RFTV9DVFJMX0RQTVNfVk5IUCAgICAgICAgICAg ICAgICAgICAgICAgICAyCj4rI2RlZmluZSBTWVNURU1fQ1RSTF9EUE1TX1ZOSE4gICAgICAgICAg ICAgICAgICAgICAgICAgMwo+KyNkZWZpbmUgU1lTVEVNX0NUUkxfUENJX0JVUlNUX0xTQiAgICAg ICAgICAgICAgICAgICAgIDI5Cj4rI2RlZmluZSBTWVNURU1fQ1RSTF9ERV9GSUZPX0xTQiAgICAg ICAgICAgICAgICAgICAgICAgMjMKPisjZGVmaW5lIFNZU1RFTV9DVFJMX0RFX0ZJRk9fTk9URU1Q VFkgICAgICAgICAgICAgICAgICAwCj4rI2RlZmluZSBTWVNURU1fQ1RSTF9ERV9GSUZPX0VNUFRZ ICAgICAgICAgICAgICAgICAgICAgMQo+KyNkZWZpbmUgU1lTVEVNX0NUUkxfREVfU1RBVFVTX0xT QiAgICAgICAgICAgICAgICAgICAgIDIyCj4rI2RlZmluZSBTWVNURU1fQ1RSTF9ERV9TVEFUVVNf SURMRSAgICAgICAgICAgICAgICAgICAgMAo+KyNkZWZpbmUgU1lTVEVNX0NUUkxfREVfU1RBVFVT X0JVU1kgICAgICAgICAgICAgICAgICAgIDEKPisjZGVmaW5lIFNZU1RFTV9DVFJMX0RFX01FTV9G SUZPX0xTQiAgICAgICAgICAgICAgICAgICAyMQo+KyNkZWZpbmUgU1lTVEVNX0NUUkxfREVfTUVN X0ZJRk9fTk9URU1QVFkgICAgICAgICAgICAgIDAKPisjZGVmaW5lIFNZU1RFTV9DVFJMX0RFX01F TV9GSUZPX0VNUFRZICAgICAgICAgICAgICAgICAxCj4rI2RlZmluZSBTWVNURU1fQ1RSTF9QQU5F TF9WU1lOQ19MU0IgICAgICAgICAgICAgICAgICAgMTgKPisjZGVmaW5lIFNZU1RFTV9DVFJMX1BB TkVMX1ZTWU5DX0lOQUNUSVZFICAgICAgICAgICAgICAwCj4rI2RlZmluZSBTWVNURU1fQ1RSTF9Q QU5FTF9WU1lOQ19BQ1RJVkUgICAgICAgICAgICAgICAgMQo+KyNkZWZpbmUgU1lTVEVNX0NUUkxf Q1JUX1ZTWU5DX0xTQiAgICAgICAgICAgICAgICAgICAgIDE5Cj4rI2RlZmluZSBTWVNURU1fQ1RS TF9DUlRfVlNZTkNfSU5BQ1RJVkUgICAgICAgICAgICAgICAgMAo+KyNkZWZpbmUgU1lTVEVNX0NU UkxfQ1JUX1ZTWU5DX0FDVElWRSAgICAgICAgICAgICAgICAgIDEKPisjZGVmaW5lIFNZU1RFTV9D VFJMX0RFX0FCT1JUX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKPisKPisjZGVmaW5l IERFX1NUQVRFMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDA1 NAo+KyNkZWZpbmUgREVfU1RBVEUxX0RFX0FCT1JUX0xTQiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAwCj4rCj4rI2RlZmluZSBERV9TVEFURTIgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgMHgxMDAwNTgKPisjZGVmaW5lIERFX1NUQVRFMl9ERV9GSUZPX0xTQiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAzCj4rI2RlZmluZSBERV9TVEFURTJfREVfRklGT19O T1RFTVBUWSAgICAgICAgICAgICAgICAgICAgICAgMAo+KyNkZWZpbmUgREVfU1RBVEUyX0RFX0ZJ Rk9fRU1QVFkgICAgICAgICAgICAgICAgICAgICAgICAgIDEKPisjZGVmaW5lIERFX1NUQVRFMl9E RV9TVEFUVVNfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAyCj4rI2RlZmluZSBERV9TVEFU RTJfREVfU1RBVFVTX0lETEUgICAgICAgICAgICAgICAgICAgICAgICAgMAo+KyNkZWZpbmUgREVf U1RBVEUyX0RFX1NUQVRVU19CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDEKPisjZGVmaW5l IERFX1NUQVRFMl9ERV9NRU1fRklGT19MU0IgICAgICAgICAgICAgICAgICAgICAgICAxCj4rI2Rl ZmluZSBERV9TVEFURTJfREVfTUVNX0ZJRk9fTk9URU1QVFkgICAgICAgICAgICAgICAgICAgMAo+ KyNkZWZpbmUgREVfU1RBVEUyX0RFX01FTV9GSUZPX0VNUFRZICAgICAgICAgICAgICAgICAgICAg IDEKPisjZW5kaWYKPisKPisjaWZkZWYgT1BFTlNPVVJDRQo+KyNkZWZpbmUgR1BJT19NVVggICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4Cj4rI2RlZmluZSBHUElP X01VWF8zMV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCj4rI2RlZmlu ZSBHUElPX01VWF8zMF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwCj4r I2VuZGlmCj4rI2RlZmluZSBDVVJSRU5UX0dBVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMHgwMDAwNDAKPisjaWZkZWYgT1BFTlNPVVJDRQo+KyNkZWZpbmUgQ1VSUkVOVF9HQVRF X00yWENMS19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgMTIKPisjZGVmaW5lIENVUlJFTlRf R0FURV9NQ0xLX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0Cj4rI2RlZmluZSBDVVJS RU5UX0dBVEVfUFdNX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Cj4rI2RlZmluZSBD VVJSRU5UX0dBVEVfSTJDX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Cj4rI2RlZmlu ZSBDVVJSRU5UX0dBVEVfU1NQX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Cj4rI2Rl ZmluZSBDVVJSRU5UX0dBVEVfR1BJT19MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICA2Cj4r I2RlZmluZSBDVVJSRU5UX0dBVEVfWlZQT1JUX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICA1 Cj4rI2RlZmluZSBDVVJSRU5UX0dBVEVfQ1NDX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAg ICA0Cj4rI2RlZmluZSBDVVJSRU5UX0dBVEVfREVfTFNCICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAzCj4rI2RlZmluZSBNT0RFMF9HQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMHgwMDAwNDQKPisjZGVmaW5lIENVUlJFTlRfR0FURV9ESVNQTEFZX0xTQiAgICAgICAg ICAgICAgICAgICAgICAgICAgIDIKPisjZGVmaW5lIENVUlJFTlRfR0FURV9MT0NBTE1FTV9MU0Ig ICAgICAgICAgICAgICAgICAgICAgICAgIDEKPisjZGVmaW5lIENVUlJFTlRfR0FURV9ETUFfTFNC ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKPisjZW5kaWYKPisjaWZkZWYgT1BFTlNP VVJDRQo+KyNkZWZpbmUgTU9ERTBfR0FURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDB4MDAwMDQ0Cj4rI2RlZmluZSBNT0RFMF9HQVRFX0kyQ19MU0IgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOAo+KyNkZWZpbmUgTU9ERTBfR0FURV9HUElPX0xTQiAgICAgICAgICAgICAg ICAgICAgICAgICAgIDYKPisjZW5kaWYKPisKPisKPisjaWZkZWYgT1BFTlNPVVJDRQo+KyNkZWZp bmUgTU9ERTFfR0FURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQ4 Cj4rI2RlZmluZSBQT1dFUl9NT0RFX0NUUkwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg MHgwMDAwNEMKPisjZGVmaW5lIFBPV0VSX01PREVfQ1RSTF9NT0RFX0xTQiAgICAgICAgICAgICAg ICAgICAgICAgICAgMAo+KyNkZWZpbmUgUE9XRVJfTU9ERV9DVFJMX01PREVfTU9ERTAgICAgICAg ICAgICAgICAgICAgIDAKPisjZGVmaW5lIFBPV0VSX01PREVfQ1RSTF9NT0RFX01PREUxICAgICAg ICAgICAgICAgICAgICAxCj4rI2RlZmluZSBQT1dFUl9NT0RFX0NUUkxfTU9ERV9TTEVFUCAgICAg ICAgICAgICAgICAgICAgMgo+KyNpZmRlZiBWQUxJREFUSU9OX0NISVAKPisgICAgI2RlZmluZSBQ T1dFUl9NT0RFX0NUUkxfMzM2Q0xLX0xTQiAgICAgICAgICAgICAgICAgICAgNAo+KyNlbmRpZgo+ KyNkZWZpbmUgUE9XRVJfTU9ERV9DVFJMX09TQ19JTlBVVF9MU0IgICAgICAgICAgICAgICAgICAg ICAzCj4rI2VuZGlmCj4rCj4rI2RlZmluZSBQTExfQ0xLX0NPVU5UICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgMHgwMDAwNTgKPisKPisjaWZkZWYgT1BFTlNPVVJDRQo+KyNkZWZpbmUg UEFORUxfUExMX0NUUkwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDVDCj4r I2lmZGVmIFZBTElEQVRJT05fQ0hJUAo+KyAgICAjZGVmaW5lIFBBTkVMX1BMTF9DVFJMX09EX0xT QiAgICAgICAgICAgICAgICAgICAgIDE0Cj4rI2Vsc2UKPisgICAgI2RlZmluZSBQQU5FTF9QTExf Q1RSTF9QT0RfTFNCICAgICAgICAgICAgICAgICAgICAxNAo+KyAgICAjZGVmaW5lIFBBTkVMX1BM TF9DVFJMX09EX0xTQiAgICAgICAgICAgICAgICAgICAgIDEyCj4rI2VuZGlmCj4rI2RlZmluZSBQ QU5FTF9QTExfQ1RSTF9OX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKPisjZGVmaW5l IFBBTkVMX1BMTF9DVFJMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA1Qwo+ KyNkZWZpbmUgUEFORUxfUExMX0NUUkxfQllQQVNTX0xTQiAgICAgICAgICAgICAgICAgICAgIDE4 Cj4rI2RlZmluZSBQQU5FTF9QTExfQ1RSTF9QT1dFUl9MU0IgICAgICAgICAgICAgICAgICAgICAg MTcKPisjZGVmaW5lIFBBTkVMX1BMTF9DVFJMX1BPV0VSX09GRiAgICAgICAgICAgICAgICAgICAg ICAwCj4rI2RlZmluZSBQQU5FTF9QTExfQ1RSTF9QT1dFUl9PTiAgICAgICAgICAgICAgICAgICAg ICAgMQo+KyNkZWZpbmUgUEFORUxfUExMX0NUUkxfSU5QVVRfTFNCICAgICAgICAgICAgICAgICAg ICAgIDE2Cj4rI2lmZGVmIFZBTElEQVRJT05fQ0hJUAo+KyAgICAjZGVmaW5lIFBBTkVMX1BMTF9D VFJMX09EX0xTQiAgICAgICAgICAgICAgICAgICAgIDE0Cj4rI2Vsc2UKPisgICAgI2RlZmluZSBQ QU5FTF9QTExfQ1RSTF9QT0RfTFNCICAgICAgICAgICAgICAgICAgICAxNAo+KyAgICAjZGVmaW5l IFBBTkVMX1BMTF9DVFJMX09EX0xTQiAgICAgICAgICAgICAgICAgICAgIDEyCj4rI2VuZGlmCj4r I2RlZmluZSBQQU5FTF9QTExfQ1RSTF9OX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgIDgK PisjZGVmaW5lIFBBTkVMX1BMTF9DVFJMX01fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAg MAo+KyNkZWZpbmUgQ1JUX1BMTF9DVFJMX1BPV0VSX0xTQiAgICAgICAgICAgICAgICAgICAgICAg IDE3Cj4rI2RlZmluZSBDUlRfUExMX0NUUkxfUE9XRVJfT0ZGICAgICAgICAgICAgICAgICAgICAg ICAgMAo+KyNkZWZpbmUgQ1JUX1BMTF9DVFJMX1BPV0VSX09OICAgICAgICAgICAgICAgICAgICAg ICAgIDEKPisjZW5kaWYKPisjZGVmaW5lIE1YQ0xLX1BMTF9DVFJMICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAweDAwMDA3MAo+KyNkZWZpbmUgQ1JUX1BMTF9DVFJMICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDYwCj4rI2RlZmluZSBWR0FfUExMMF9DVFJMICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNjQKPisjZGVmaW5lIFZHQV9QTEwx X0NUUkwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA2OAo+Kwo+KyNpZmRl ZiBPUEVOU09VUkNFCj4rI2RlZmluZSBWR0FfQ09ORklHVVJBVElPTiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgMHgwMDAwODgKPisjZGVmaW5lIFZHQV9DT05GSUdVUkFUSU9OX1BMTF9MU0Ig ICAgICAgICAgICAgICAgICAgICAgICAgMgo+KyNkZWZpbmUgVkdBX0NPTkZJR1VSQVRJT05fTU9E RV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAxCj4rI2VuZGlmCj4rCj4rI2RlZmluZSBHUElP X0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMAo+KyNk ZWZpbmUgR1BJT19EQVRBX0RJUkVDVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgw MTAwMDQKPisKPisKPisjaWZkZWYgT1BFTlNPVVJDRQo+KyNkZWZpbmUgUEFORUxfRElTUExBWV9D VFJMICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwCj4rI2RlZmluZSBQQU5FTF9E SVNQTEFZX0NUUkxfUkVTRVJWRURfMV9NQVNLX0xTQiAgICAgICAgMzAKPisjZGVmaW5lIFBBTkVM X0RJU1BMQVlfQ1RSTF9TRUxFQ1RfTFNCICAgICAgICAgICAgICAgICAyOAo+KyNkZWZpbmUgUEFO RUxfRElTUExBWV9DVFJMX1JFU0VSVkVEXzJfTUFTS19MU0IgICAgICAgIDIwCj4rI2RlZmluZSBQ QU5FTF9ESVNQTEFZX0NUUkxfUkVTRVJWRURfM19NQVNLX0xTQiAgICAgICAgMTUKPisjZGVmaW5l IFBBTkVMX0RJU1BMQVlfQ1RSTF9GUEVOX0xTQiAgICAgICAgICAgICAgICAgICAyNwo+KyNkZWZp bmUgUEFORUxfRElTUExBWV9DVFJMX1ZCSUFTRU5fTFNCICAgICAgICAgICAgICAgIDI2Cj4rI2Rl ZmluZSBQQU5FTF9ESVNQTEFZX0NUUkxfREFUQV9MU0IgICAgICAgICAgICAgICAgICAgMjUKPisj ZGVmaW5lIFBBTkVMX0RJU1BMQVlfQ1RSTF9EQVRBX0RJU0FCTEUgICAgICAgICAgICAgICAwCj4r I2RlZmluZSBQQU5FTF9ESVNQTEFZX0NUUkxfREFUQV9FTkFCTEUgICAgICAgICAgICAgICAgMQo+ KyNkZWZpbmUgUEFORUxfRElTUExBWV9DVFJMX1RGVF9ESVNQX0xTQgkJICAgICAgMTgKPisjZGVm aW5lIFBBTkVMX0RJU1BMQVlfQ1RSTF9USU1JTkdfTFNCICAgICAgICAgICAgICAgICA4Cj4rI2Rl ZmluZSBQQU5FTF9ESVNQTEFZX0NUUkxfVElNSU5HX0RJU0FCTEUgICAgICAgICAgICAgMAo+KyNk ZWZpbmUgUEFORUxfRElTUExBWV9DVFJMX1RJTUlOR19FTkFCTEUgICAgICAgICAgICAgIDEKPisj ZGVmaW5lIFBBTkVMX0RJU1BMQVlfQ1RSTF9DTE9DS19QSEFTRV9MU0IgICAgICAgICAgICAxNAo+ KyNkZWZpbmUgUEFORUxfRElTUExBWV9DVFJMX1ZTWU5DX1BIQVNFX0xTQiAgICAgICAgICAgIDEz Cj4rI2RlZmluZSBQQU5FTF9ESVNQTEFZX0NUUkxfSFNZTkNfUEhBU0VfTFNCICAgICAgICAgICAg MTIKPisjZGVmaW5lIFBBTkVMX0RJU1BMQVlfQ1RSTF9WU1lOQ19MU0IgICAgICAgICAgICAgICAg ICAxMQo+KyNkZWZpbmUgUEFORUxfRElTUExBWV9DVFJMX1BMQU5FX0xTQiAgICAgICAgICAgICAg ICAgIDIKPisjZGVmaW5lIFBBTkVMX0RJU1BMQVlfQ1RSTF9GT1JNQVRfTFNCICAgICAgICAgICAg ICAgICAwCj4rI2VuZGlmCj4rCj4rCj4rI2lmZGVmIE9QRU5TT1VSQ0UKPisjZGVmaW5lIFBBTkVM X0ZCX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDBDCj4rI2RlZmlu ZSBQQU5FTF9GQl9BRERSRVNTX1NUQVRVU19MU0IgICAgICAgICAgICAgICAgICAzMQo+KyNkZWZp bmUgUEFORUxfRkJfQUREUkVTU19FWFRfTFNCICAgICAgICAgICAgICAgICAgICAgMjcKPisjZGVm aW5lIFBBTkVMX0ZCX0FERFJFU1NfQUREUkVTU19MU0IgICAgICAgICAgICAgICAgIDAKPisKPisj ZGVmaW5lIFBBTkVMX0ZCX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4 MDAxMAo+KyNkZWZpbmUgUEFORUxfRkJfV0lEVEhfV0lEVEhfTFNCICAgICAgICAgICAgICAgICAg ICAgIDE2Cj4rI2RlZmluZSBQQU5FTF9GQl9XSURUSF9PRkZTRVRfTFNCICAgICAgICAgICAgICAg ICAgICAgMAo+Kwo+KyNkZWZpbmUgUEFORUxfV0lORE9XX1dJRFRIICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDB4MDgwMDE0Cj4rI2RlZmluZSBQQU5FTF9XSU5ET1dfV0lEVEhfV0lEVEhfTFNC ICAgICAgICAgICAgICAgICAgMTYKPisjZGVmaW5lIFBBTkVMX1dJTkRPV19XSURUSF9YX0xTQiAg ICAgICAgICAgICAgICAgICAgICAwCj4rCj4rI2RlZmluZSBQQU5FTF9XSU5ET1dfSEVJR0hUICAg ICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMTgKPisjZGVmaW5lIFBBTkVMX1dJTkRPV19I RUlHSFRfSEVJR0hUX0xTQiAgICAgICAgICAgICAgICAxNgo+KyNkZWZpbmUgUEFORUxfV0lORE9X X0hFSUdIVF9ZX0xTQiAgICAgICAgICAgICAgICAgICAgIDAKPisKPisjZGVmaW5lIFBBTkVMX1BM QU5FX1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAxQwo+KyNkZWZpbmUg UEFORUxfUExBTkVfVExfVE9QX0xTQiAgICAgICAgICAgICAgICAgICAgICAgIDE2Cj4rI2RlZmlu ZSBQQU5FTF9QTEFORV9UTF9MRUZUX0xTQiAgICAgICAgICAgICAgICAgICAgICAgMAo+Kwo+KyNk ZWZpbmUgUEFORUxfUExBTkVfQlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgw MDIwCj4rI2RlZmluZSBQQU5FTF9QTEFORV9CUl9CT1RUT01fTFNCICAgICAgICAgICAgICAgICAg ICAgMTYKPisjZGVmaW5lIFBBTkVMX1BMQU5FX0JSX1JJR0hUX0xTQiAgICAgICAgICAgICAgICAg ICAgICAwCj4rI2VuZGlmCj4rCj4rCj4rI2lmZGVmIE9QRU5TT1VSQ0UKPisjZGVmaW5lIFBBTkVM X0hPUklaT05UQUxfVE9UQUwgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAyNAo+KyNkZWZp bmUgUEFORUxfSE9SSVpPTlRBTF9UT1RBTF9UT1RBTF9MU0IgICAgICAgICAgICAgICAgICAxNgo+ KyNkZWZpbmUgUEFORUxfSE9SSVpPTlRBTF9UT1RBTF9ESVNQTEFZX0VORF9MU0IgICAgICAgICAg ICAwCj4rI2RlZmluZSBQQU5FTF9IT1JJWk9OVEFMX1NZTkMgICAgICAgICAgICAgICAgICAgICAg ICAgMHgwODAwMjgKPisjZGVmaW5lIFBBTkVMX0hPUklaT05UQUxfU1lOQ19XSURUSF9MU0IgICAg ICAgICAgICAgICAgICAgMTYKPisjZGVmaW5lIFBBTkVMX0hPUklaT05UQUxfU1lOQ19TVEFSVF9M U0IgICAgICAgICAgICAgICAgICAgMAo+KyNkZWZpbmUgUEFORUxfVkVSVElDQUxfVE9UQUwgICAg ICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDJDCj4rI2RlZmluZSBQQU5FTF9WRVJUSUNBTF9U T1RBTF9UT1RBTF9MU0IgICAgICAgICAgICAgICAgICAgIDE2Cj4rI2RlZmluZSBQQU5FTF9WRVJU SUNBTF9UT1RBTF9ESVNQTEFZX0VORF9MU0IgICAgICAgICAgICAgIDAKPisjZGVmaW5lIFBBTkVM X1ZFUlRJQ0FMX1NZTkMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAzMAo+KyNkZWZp bmUgUEFORUxfVkVSVElDQUxfU1lOQ19IRUlHSFRfTFNCICAgICAgICAgICAgICAgICAgICAxNgo+ KyNkZWZpbmUgUEFORUxfVkVSVElDQUxfU1lOQ19TVEFSVF9MU0IgICAgICAgICAgICAgICAgICAg ICAwCj4rI2VuZGlmCj4rCj4rCj4rLyogVmlkZW8gQ29udHJvbCAqLwo+KyNpZmRlZiBPUEVOU09V UkNFCj4rI2RlZmluZSBWSURFT19ESVNQTEFZX0NUUkwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAweDA4MDA0MAo+KyNkZWZpbmUgVklERU9fRElTUExBWV9DVFJMX1BMQU5FX0xTQiAgICAg ICAgICAgICAgICAgICAgMgo+KyNlbmRpZgo+Ky8qIEFscGhhIENvbnRyb2wgKi8KPisjaWZkZWYg T1BFTlNPVVJDRQo+KyNkZWZpbmUgQUxQSEFfRElTUExBWV9DVFJMICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDB4MDgwMTAwCj4rI2RlZmluZSBBTFBIQV9ESVNQTEFZX0NUUkxfUExBTkVfTFNC ICAgICAgICAgICAgICAgICAgICAgIDIKPisjZW5kaWYKPisKPisvKiBWaWRlbyBBbHBoYSBDb250 cm9sICovCj4rI2lmZGVmIE9QRU5TT1VSQ0UKPisjZGVmaW5lIFZJREVPX0FMUEhBX0RJU1BMQVlf Q1RSTCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDgwCj4rI2RlZmluZSBWSURFT19BTFBI QV9ESVNQTEFZX0NUUkxfUExBTkVfTFNCICAgICAgICAgICAgICAyCj4rI2VuZGlmCj4rCj4rLyog Q1JUIEdyYXBoaWNzIENvbnRyb2wgKi8KPisjaWZkZWYgT1BFTlNPVVJDRQo+KyNkZWZpbmUgQ1JU X0RJU1BMQVlfQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMjAwCj4rI2Rl ZmluZSBDUlRfRElTUExBWV9DVFJMX1RJTUlOR19MU0IgICAgICAgICAgICAgICAgICAgOAo+KyNk ZWZpbmUgQ1JUX0RJU1BMQVlfQ1RSTF9USU1JTkdfRElTQUJMRSAgICAgICAgICAgICAgIDAKPisj ZGVmaW5lIENSVF9ESVNQTEFZX0NUUkxfVElNSU5HX0VOQUJMRSAgICAgICAgICAgICAgICAxCj4r I2RlZmluZSBDUlRfRElTUExBWV9DVFJMX1BMQU5FX0xTQiAgICAgICAgICAgICAgICAgICAgMgo+ KyNkZWZpbmUgQ1JUX0RJU1BMQVlfQ1RSTF9DTEtfTFNCICAgICAgICAgICAgICAgICAgICAgICAg IDI3Cj4rI2RlZmluZSBDUlRfRElTUExBWV9DVFJMX1JFU0VSVkVEXzFfTUFTS19MU0IJICAgICAg MjcKPisjZGVmaW5lIENSVF9ESVNQTEFZX0NUUkxfUkVTRVJWRURfMl9NQVNLX0xTQiAJICAgICAg MjQKPisjZGVmaW5lIENSVF9ESVNQTEFZX0NUUkxfU0VMRUNUX0xTQiAgICAgICAgICAgICAgICAg ICAxOAo+KyNkZWZpbmUgQ1JUX0RJU1BMQVlfQ1RSTF9SRVNFUlZFRF8zX01BU0tfTFNCIAkgICAg ICAxNQo+KyNkZWZpbmUgQ1JUX0RJU1BMQVlfQ1RSTF9DTE9DS19QSEFTRV9MU0IgICAgICAgICAg ICAgIDE0Cj4rI2RlZmluZSBDUlRfRElTUExBWV9DVFJMX0JMQU5LX0xTQiAgICAgICAgICAgICAg ICAgICAgMTAKPisjZGVmaW5lIENSVF9ESVNQTEFZX0NUUkxfQkxBTktfT0ZGICAgICAgICAgICAg ICAgICAgICAwCj4rI2RlZmluZSBDUlRfRElTUExBWV9DVFJMX0JMQU5LX09OICAgICAgICAgICAg ICAgICAgICAgMQo+KyNkZWZpbmUgQ1JUX0RJU1BMQVlfQ1RSTF9SRVNFUlZFRF80X01BU0tfTFNC IAkgICAgICAgOQo+Ky8qIFNNNzUwTEUgZGVmaW5pdGlvbiAqLwo+KyNkZWZpbmUgQ1JUX0RJU1BM QVlfQ1RSTF9EUE1TX0xTQiAgICAgICAgICAgICAgICAgICAgICAzMAo+KyNkZWZpbmUgQ1JUX0RJ U1BMQVlfQ1RSTF9EUE1TXzAgICAgICAgICAgICAgICAgICAgICAgIDAKPisjZGVmaW5lIENSVF9E SVNQTEFZX0NUUkxfRFBNU18xICAgICAgICAgICAgICAgICAgICAgICAxCj4rI2RlZmluZSBDUlRf RElTUExBWV9DVFJMX0RQTVNfMiAgICAgICAgICAgICAgICAgICAgICAgMgo+KyNkZWZpbmUgQ1JU X0RJU1BMQVlfQ1RSTF9EUE1TXzMgICAgICAgICAgICAgICAgICAgICAgIDMKPisjZGVmaW5lIENS VF9ESVNQTEFZX0NUUkxfQ0xLX0xTQiAgICAgICAgICAgICAgICAgICAgICAgMjcKPisjZGVmaW5l IENSVF9ESVNQTEFZX0NUUkxfQ1JUU0VMRUNUX0xTQiAgICAgICAgICAgICAgICAgMjUKPisjZGVm aW5lIENSVF9ESVNQTEFZX0NUUkxfUkdCQklUX0xTQiAgICAgICAgICAgICAgICAgICAgMjQKPisj ZGVmaW5lIENSVF9ESVNQTEFZX0NUUkxfVlNZTkNfUEhBU0VfTFNCICAgICAgICAgICAgICAgMTMK PisjZGVmaW5lIENSVF9ESVNQTEFZX0NUUkxfSFNZTkNfUEhBU0VfTFNCICAgICAgICAgICAgICAg MTIKPisjZGVmaW5lIENSVF9ESVNQTEFZX0NUUkxfRk9STUFUX0xTQiAgICAgICAgICAgICAgICAg ICAgMAo+KyNlbmRpZgo+Kwo+Kwo+KyNpZmRlZiBPUEVOU09VUkNFCj4rI2RlZmluZSBDUlRfRkJf QUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAyMDQKPisjZGVmaW5l IENSVF9GQl9BRERSRVNTX1NUQVRVU19MU0IgICAgICAgICAgICAgICAgICAgICAzMQo+KyNkZWZp bmUgQ1JUX0ZCX0FERFJFU1NfU1RBVFVTX0NVUlJFTlQgICAgICAgICAgICAgICAgIDAKPisjZGVm aW5lIENSVF9GQl9BRERSRVNTX1NUQVRVU19QRU5ESU5HICAgICAgICAgICAgICAgICAxCj4rI2Rl ZmluZSBDUlRfRkJfQUREUkVTU19FWFRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgMjcKPisj ZGVmaW5lIENSVF9GQl9BRERSRVNTX0VYVF9MT0NBTCAgICAgICAgICAgICAgICAgICAgICAwCj4r I2RlZmluZSBDUlRfRkJfQUREUkVTU19FWFRfRVhURVJOQUwgICAgICAgICAgICAgICAgICAgMQo+ KyNkZWZpbmUgQ1JUX0ZCX0FERFJFU1NfQUREUkVTU19MU0IgICAgICAgICAgICAgICAgICAgIDAK PisjZW5kaWYKPisKPisKPisjaWZkZWYgT1BFTlNPVVJDRQo+KyNkZWZpbmUgQ1JUX0ZCX1dJRFRI ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMjA4Cj4rI2RlZmluZSBDUlRf RkJfV0lEVEhfV0lEVEhfTFNCICAgICAgICAgICAgICAgICAgICAgICAgMTYKPisjZGVmaW5lIENS VF9GQl9XSURUSF9PRkZTRVRfTFNCICAgICAgICAgICAgICAgICAgICAgICAwCj4rI2VuZGlmCj4r Cj4rI2lmZGVmIE9QRU5TT1VSQ0UKPisjZGVmaW5lIENSVF9IT1JJWk9OVEFMX1RPVEFMICAgICAg ICAgICAgICAgICAgICAgICAgICAweDA4MDIwQwo+KyNkZWZpbmUgQ1JUX0hPUklaT05UQUxfVE9U QUxfVE9UQUxfTFNCICAgICAgICAgICAgICAgIDE2Cj4rI2RlZmluZSBDUlRfSE9SSVpPTlRBTF9U T1RBTF9ESVNQTEFZX0VORF9MU0IgICAgICAgICAgMAo+KyNkZWZpbmUgQ1JUX0hPUklaT05UQUxf U1lOQyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMjEwCj4rI2RlZmluZSBDUlRfSE9S SVpPTlRBTF9TWU5DX1dJRFRIX0xTQiAgICAgICAgICAgICAgICAgMTYKPisjZGVmaW5lIENSVF9I T1JJWk9OVEFMX1NZTkNfU1RBUlRfTFNCICAgICAgICAgICAgICAgICAwCj4rI2RlZmluZSBDUlRf VkVSVElDQUxfVE9UQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAyMTQKPisjZGVm aW5lIENSVF9WRVJUSUNBTF9UT1RBTF9UT1RBTF9MU0IgICAgICAgICAgICAgICAgICAxNgo+KyNk ZWZpbmUgQ1JUX1ZFUlRJQ0FMX1RPVEFMX0RJU1BMQVlfRU5EX0xTQiAgICAgICAgICAgIDAKPisj ZGVmaW5lIENSVF9WRVJUSUNBTF9TWU5DICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4 MDIxOAo+KyNkZWZpbmUgQ1JUX1ZFUlRJQ0FMX1NZTkNfSEVJR0hUX0xTQiAgICAgICAgICAgICAg ICAgIDE2Cj4rI2RlZmluZSBDUlRfVkVSVElDQUxfU1lOQ19TVEFSVF9MU0IgICAgICAgICAgICAg ICAgICAgMAo+KyNlbmRpZgo+Kwo+Kwo+KyNpZm5kZWYgVkFMSURBVElPTl9DSElQCj4rICAgIC8q IEF1dG8gQ2VudGVyaW5nICovCj4rI2lmZGVmIE9QRU5TT1VSQ0UKPisgICAgI2RlZmluZSBDUlRf QVVUT19DRU5URVJJTkdfVEwgICAgICAgICAgICAgICAgICAgICAweDA4MDI4MAo+KyAgICAjZGVm aW5lIENSVF9BVVRPX0NFTlRFUklOR19UTF9UT1BfTFNCICAgICAgICAgICAgIDE2Cj4rICAgICNk ZWZpbmUgQ1JUX0FVVE9fQ0VOVEVSSU5HX1RMX0xFRlRfTFNCICAgICAgICAgICAgMAo+KyAgICAj ZGVmaW5lIENSVF9BVVRPX0NFTlRFUklOR19CUiAgICAgICAgICAgICAgICAgICAgIDB4MDgwMjg0 Cj4rICAgICNkZWZpbmUgQ1JUX0FVVE9fQ0VOVEVSSU5HX0JSX0JPVFRPTV9MU0IgICAgICAgICAg ICAgIDE2Cj4rICAgICNkZWZpbmUgQ1JUX0FVVE9fQ0VOVEVSSU5HX0JSX1JJR0hUX0xTQiAgICAg ICAgICAgICAgIDAKPisjZW5kaWYKPisjZW5kaWYKPisKPisvKiBzbTc1MGxlIG5ldyByZWdpc3Rl ciB0byBjb250cm9sIHBhbmVsIG91dHB1dCAqLwo+KyNkZWZpbmUgRElTUExBWV9DT05UUk9MXzc1 MExFIAkweDgwMjg4Cj4rLyogUGFsZXR0ZSBSQU0gKi8KPisKPisvKiBQYW5lbCBQYWxsZXRlIHJl Z2lzdGVyIHN0YXJ0cyBhdCAweDA4MDQwMCB+IDB4MDgwN0ZDICovCj4rI2RlZmluZSBQQU5FTF9Q QUxFVFRFX1JBTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODA0MDAKPisKPisvKiBQ YW5lbCBQYWxsZXRlIHJlZ2lzdGVyIHN0YXJ0cyBhdCAweDA4MEMwMCB+IDB4MDgwRkZDICovCj4r I2RlZmluZSBDUlRfUEFMRVRURV9SQU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgw ODBDMDAKPisKPisvKiAyRCByZWdpc3RlcnMKPisgKiBtb3ZlIHRoZWlyIGRlZmluYXRpb24gaW50 byBnZW5lcmFsIGx5bnhfYWNjZWwuaCBmaWxlCj4rICogYmVjYXVzZSBhbGwgc21pIGdyYXBoaWMg Y2hpcCBzaGFyZSB0aGUgc2FtZSBkcmF3aW5nIGVuZ2luZQo+KyAqIHJlZ2lzdGVyIGZvcm1hdCAq Lwo+Kwo+KyNpZmRlZiBPUEVOU09VUkNFCj4rI2RlZmluZSBJMkNfQ1RSTCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDA0MQo+KyNkZWZpbmUgSTJDX0NUUkxfTU9E RV9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQo+KyNkZWZpbmUgSTJDX0NUUkxf RU5fTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAo+KyNkZWZpbmUgSTJDX1NU QVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwNDIKPisjZGVm aW5lIEkyQ19TVEFUVVNfVFhfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKPisj ZGVmaW5lIEkyQ19DVFJMX0NUUkxfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIK PisjZGVmaW5lIEkyQ19TVEFUVVNfVFhfQ09NUExFVEVEICAgICAgICAgICAgICAgICAgICAgICAg IDEKPisjZGVmaW5lIEkyQ19TTEFWRV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDB4MDEwMDQzCj4rI2RlZmluZSBJMkNfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAweDAxMDA0Mgo+KyNkZWZpbmUgSTJDX1NMQVZFX0FERFJFU1MgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwNDMKPisjZGVmaW5lIEkyQ19EQVRBMCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDQ0Cj4rI2RlZmluZSBJMkNf QllURV9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDA0MAo+KyNl bmRpZgo+Kwo+KyNpZmRlZiBPUEVOU09VUkNFCj4rI2RlZmluZSBETUFfQUJPUlRfSU5URVJSVVBU ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBEMDAyMAo+KyNkZWZpbmUgRE1BX0FCT1JU X0lOVEVSUlVQVF9BQk9SVF8xX0xTQiAgICAgICAgICAgICAgICAgICAgIDUKPisjZW5kaWYKPisK PisKPisKPisvKiBEZWZhdWx0IGkyYyBDTEsgYW5kIERhdGEgR1BJTy4gVGhlc2UgYXJlIHRoZSBk ZWZhdWx0IGkyYyBwaW5zICovCj4rI2RlZmluZSBERUZBVUxUX0kyQ19TQ0wgICAgICAgICAgICAg ICAgICAgICAzMAo+KyNkZWZpbmUgREVGQVVMVF9JMkNfU0RBICAgICAgICAgICAgICAgICAgICAg MzEKPisKPisjZGVmaW5lIEdQSU9fREFUQV9TTTc1MExFICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDB4MDIwMDE4Cj4rI2RlZmluZSBHUElPX0RBVEFfRElSRUNUSU9OX1NNNzUwTEUgICAg ICAgICAgICAgICAgICAgICAweDAyMDAxQwo+KyNlbmRpZgo+ZGlmZiAtLWdpdCBhL2RyaXZlcnMv dmlkZW8vbHlueGZiL2Rkazc1MF9zaWkxNjQuYyBiL2RyaXZlcnMvdmlkZW8vbHlueGZiL2Rkazc1 MF9zaWkxNjQuYwo+bmV3IGZpbGUgbW9kZSAxMDA2NDQKPmluZGV4IDAwMDAwMDAuLjY5MTU5MzkK Pi0tLSAvZGV2L251bGwKPisrKyBiL2RyaXZlcnMvdmlkZW8vbHlueGZiL2Rkazc1MF9zaWkxNjQu Ywo+QEAgLTAsMCArMSw0MzUgQEAKPisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgo+KypDb3B5cmlnaHQgKGMpIDIwMTIg YnkgU2lsaWNvbiBNb3Rpb24sIEluYy4gKFNNSSkKPisqUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3Jh bnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQo+Kypv ZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAi U29mdHdhcmUiKSwgdG8gZGVhbAo+KyppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlv biwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCj4rKnVzZSwgY29w eSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29y IHNlbGwgY29waWVzCj4rKm9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRv IHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0bwo+KypkbyBzbywgc3ViamVjdCB0byB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4rKgo+KypUSEUgU09GVFdBUkUgSVMgUFJPVklERUQg IkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKPisqRVhQUkVTUyBPUiBJTVBM SUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCj4rKk9GIE1F UkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECj4rKk5P TklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIE1pbGwuQ2hlbiBhbmQgTW9uay5MaXUg T1IgQ09QWVJJR0hUCj4rKkhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMg T1IgT1RIRVIgTElBQklMSVRZLAo+KypXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwg VE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPisqRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJ T04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgo+KypPVEhFUiBERUFMSU5HUyBJTiBU SEUgU09GVFdBUkUuCj4rKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KPisjaWZkZWYgVVNFX0RWSUNISVAKPisKPisjaW5j bHVkZSAiZGRrNzUwX3NpaTE2NC5oIgo+KyNpbmNsdWRlICJkZGs3NTBfaHdpMmMuaCIKPisKPisv KiBJMkMgQWRkcmVzcyBvZiBlYWNoIFNJSTE2NCBjaGlwICovCj4rI2RlZmluZSBTSUkxNjRfSTJD X0FERFJFU1MgICAgICAgICAgICAgICAgICAweDcwCj4rCj4rLyogRGVmaW5lIHRoaXMgZGVmaW5p dGlvbiB0byB1c2UgaGFyZHdhcmUgaTJjLiAqLwo+Ky8qI2RlZmluZSBVU0VfSFdfSTJDKi8KPisj aWZkZWYgVVNFX0hXX0kyQwo+KyNkZWZpbmUgaTJjV3JpdGVSZWcgaHdJMkNXcml0ZVJlZwo+KyNk ZWZpbmUgaTJjUmVhZFJlZyAgaHdJMkNSZWFkUmVnCj4rI2Vsc2UKPisjZGVmaW5lIGkyY1dyaXRl UmVnIHN3STJDV3JpdGVSZWcKPisjZGVmaW5lIGkyY1JlYWRSZWcgIHN3STJDUmVhZFJlZwo+KyNl bmRpZgo+Kwo+Ky8qIFNJSTE2NCBWZW5kb3IgYW5kIERldmljZSBJRCAqLwo+KyNkZWZpbmUgU0lJ MTY0X1ZFTkRPUl9JRCAgICAgICAgICAgICAgICAgICAgMHgwMDAxCj4rI2RlZmluZSBTSUkxNjRf REVWSUNFX0lEICAgICAgICAgICAgICAgICAgICAweDAwMDYKPisKPisjaWZkZWYgU0lJMTY0X0ZV TExfRlVOQ1RJT05TCj4rLyogTmFtZSBvZiB0aGUgRFZJIENvbnRyb2xsZXIgY2hpcCAqLwo+K3N0 YXRpYyBjaGFyICpnRHZpQ3RybENoaXBOYW1lID0gIlNpbGljb24gSW1hZ2UgU2lJIDE2NCI7Cj4r I2VuZGlmCj4rCj4rLyoKPisgKiAgc2lpMTY0R2V0VmVuZG9ySUQKPisgKiAgICAgIFRoaXMgZnVu Y3Rpb24gZ2V0cyB0aGUgdmVuZG9yIElEIG9mIHRoZSBEVkkgY29udHJvbGxlciBjaGlwLgo+KyAq Cj4rICogIE91dHB1dDoKPisgKiAgICAgIFZlbmRvciBJRAo+KyAqLwo+K3Vuc2lnbmVkIHNob3J0 IHNpaTE2NEdldFZlbmRvcklEKCkKPit7Cj4rCXVuc2lnbmVkIHNob3J0IHZlbmRvcklEOwo+Kwo+ Kwl2ZW5kb3JJRCA9ICgodW5zaWduZWQgc2hvcnQpIGkyY1JlYWRSZWcoU0lJMTY0X0kyQ19BRERS RVNTLCBTSUkxNjRfVkVORE9SX0lEX0hJR0gpIDw8IDgpIHwKPisJCSh1bnNpZ25lZCBzaG9ydCkg aTJjUmVhZFJlZyhTSUkxNjRfSTJDX0FERFJFU1MsIFNJSTE2NF9WRU5ET1JfSURfTE9XKTsKPisK PisJcmV0dXJuIHZlbmRvcklEOwo+K30KPisKPisvKgo+KyAqICBzaWkxNjRHZXREZXZpY2VJRAo+ KyAqICAgICAgVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBkZXZpY2UgSUQgb2YgdGhlIERWSSBjb250 cm9sbGVyIGNoaXAuCj4rICoKPisgKiAgT3V0cHV0Ogo+KyAqICAgICAgRGV2aWNlIElECj4rICov Cj4rdW5zaWduZWQgc2hvcnQgc2lpMTY0R2V0RGV2aWNlSUQoKQo+K3sKPisJdW5zaWduZWQgc2hv cnQgZGV2aWNlSUQ7Cj4rCj4rCWRldmljZUlEID0gKCh1bnNpZ25lZCBzaG9ydCkgaTJjUmVhZFJl ZyhTSUkxNjRfSTJDX0FERFJFU1MsIFNJSTE2NF9ERVZJQ0VfSURfSElHSCkgPDwgOCkgfAo+KwkJ KHVuc2lnbmVkIHNob3J0KSBpMmNSZWFkUmVnKFNJSTE2NF9JMkNfQUREUkVTUywgU0lJMTY0X0RF VklDRV9JRF9MT1cpOwo+Kwo+KwlyZXR1cm4gZGV2aWNlSUQ7Cj4rfQo+Kwo+Kwo+Kwo+Ky8qIERW SS5DIHdpbGwgaGFuZGxlIGFsbCBTaUkxNjQgY2hpcCBzdHVmZnMgYW5kIHRyeSBpdCBiZXN0IHRv IG1ha2UgY29kZSBtaW5pbWFsIGFuZCB1c2VmdWwgKi8KPisKPisvKgo+KyAqICBzaWkxNjRJbml0 Q2hpcAo+KyAqICAgICAgVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplIGFuZCBkZXRlY3QgdGhlIERW SSBjb250cm9sbGVyIGNoaXAuCj4rICoKPisgKiAgSW5wdXQ6Cj4rICogICAgICBlZGdlU2VsZWN0 ICAgICAgICAgIC0gRWRnZSBTZWxlY3Q6Cj4rICogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAwID0gSW5wdXQgZGF0YSBpcyBmYWxsaW5nIGVkZ2UgbGF0Y2hlZCAoZmFsbGluZyBlZGdlCj4r ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF0Y2hlZCBmaXJzdCBpbiBkdWFs IGVkZ2UgbW9kZSkKPisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPSBJbnB1dCBk YXRhIGlzIHJpc2luZyBlZGdlIGxhdGNoZWQgKHJpc2luZyBlZGdlCj4rICogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbGF0Y2hlZCBmaXJzdCBpbiBkdWFsIGVkZ2UgbW9kZSkKPisg KiAgICAgIGJ1c1NlbGVjdCAgICAgICAgICAgLSBJbnB1dCBCdXMgU2VsZWN0Ogo+KyAqICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgMCA9IElucHV0IGRhdGEgYnVzIGlzIDEyLWJpdHMgd2lk ZQo+KyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA9IElucHV0IGRhdGEgYnVzIGlz IDI0LWJpdHMgd2lkZQo+KyAqICAgICAgZHVhbEVkZ2VDbGtTZWxlY3QgICAtIER1YWwgRWRnZSBD bG9jayBTZWxlY3QKPisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgPSBJbnB1dCBk YXRhIGlzIHNpbmdsZSBlZGdlIGxhdGNoZWQKPisgKiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDEgPSBJbnB1dCBkYXRhIGlzIGR1YWwgZWRnZSBsYXRjaGVkCj4rICogICAgICBoc3luY0Vu YWJsZSAgICAgICAgIC0gSG9yaXpvbnRhbCBTeW5jIEVuYWJsZToKPisgKiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDAgPSBIU1lOQyBpbnB1dCBpcyB0cmFuc21pdHRlZCBhcyBmaXhlZCBM T1cKPisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPSBIU1lOQyBpbnB1dCBpcyB0 cmFuc21pdHRlZCBhcyBpcwo+KyAqICAgICAgdnN5bmNFbmFibGUgICAgICAgICAtIFZlcnRpY2Fs IFN5bmMgRW5hYmxlOgo+KyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA9IFZTWU5D IGlucHV0IGlzIHRyYW5zbWl0dGVkIGFzIGZpeGVkIExPVwo+KyAqICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgMSA9IFZTWU5DIGlucHV0IGlzIHRyYW5zbWl0dGVkIGFzIGlzCj4rICogICAg ICBkZXNrZXdFbmFibGUgICAgICAgIC0gRGUtc2tld2luZyBFbmFibGU6Cj4rICogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAwID0gRGUtc2tldyBkaXNhYmxlZAo+KyAqICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgMSA9IERlLXNrZXcgZW5hYmxlZAo+KyAqICAgICAgZGVza2V3U2V0 dGluZyAgICAgICAtIERlLXNrZXdpbmcgU2V0dGluZyAoaW5jcmVtZW50IG9mIDI2MHBzZWMpCj4r ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwID0gMSBzdGVwIC0tPiBtaW5pbXVtIHNl dHVwIC8gbWF4aW11bSBob2xkCj4rICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxID0g MiBzdGVwCj4rICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyID0gMyBzdGVwCj4rICog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzID0gNCBzdGVwCj4rICogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA0ID0gNSBzdGVwCj4rICogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA1ID0gNiBzdGVwCj4rICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2ID0gNyBz dGVwCj4rICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3ID0gOCBzdGVwIC0tPiBtYXhp bXVtIHNldHVwIC8gbWluaW11bSBob2xkCj4rICogICAgICBjb250aW51b3VzU3luY0VuYWJsZS0g U1lOQyBDb250aW51b3VzOgo+KyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA9IERp c2FibGUKPisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPSBFbmFibGUKPisgKiAg ICAgIHBsbEZpbHRlckVuYWJsZSAgICAgLSBQTEwgRmlsdGVyIEVuYWJsZQo+KyAqICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMCA9IERpc2FibGUgUExMIEZpbHRlcgo+KyAqICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMSA9IEVuYWJsZSBQTEwgRmlsdGVyCj4rICogICAgICBwbGxG aWx0ZXJWYWx1ZSAgICAgIC0gUExMIEZpbHRlciBjaGFyYWN0ZXJpc3RpY3M6Cj4rICogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAwfjcgKHJlY29tbWVuZGVkIHZhbHVlIGlzIDQpCj4rICoK PisgKiAgT3V0cHV0Ogo+KyAqICAgICAgMCAgIC0gU3VjY2Vzcwo+KyAqICAgICAtMSAgIC0gRmFp bC4KPisgKi8KPitsb25nIHNpaTE2NEluaXRDaGlwKAo+KwkJdW5zaWduZWQgY2hhciBlZGdlU2Vs ZWN0LAo+KwkJdW5zaWduZWQgY2hhciBidXNTZWxlY3QsCj4rCQl1bnNpZ25lZCBjaGFyIGR1YWxF ZGdlQ2xrU2VsZWN0LAo+KwkJdW5zaWduZWQgY2hhciBoc3luY0VuYWJsZSwKPisJCXVuc2lnbmVk IGNoYXIgdnN5bmNFbmFibGUsCj4rCQl1bnNpZ25lZCBjaGFyIGRlc2tld0VuYWJsZSwKPisJCXVu c2lnbmVkIGNoYXIgZGVza2V3U2V0dGluZywKPisJCXVuc2lnbmVkIGNoYXIgY29udGludW91c1N5 bmNFbmFibGUsCj4rCQl1bnNpZ25lZCBjaGFyIHBsbEZpbHRlckVuYWJsZSwKPisJCXVuc2lnbmVk IGNoYXIgcGxsRmlsdGVyVmFsdWUKPisJCSkKPit7Cj4rCS8qIHVuc2lnbmVkIGNoYXIgdWNSZWdJ bmRleCwgdWNSZWdWYWx1ZTsKPisJdW5zaWduZWQgY2hhciB1Y0RldmljZUFkZHJlc3MsICovCj4r CXVuc2lnbmVkIGNoYXIgY29uZmlnOwo+KwkvKiB1bnNpZ25lZCBsb25nIGRlbGF5Q291bnQ7ICov Cj4rCj4rCS8qIEluaXRpYWxpemUgdGhlIGkyYyBidXMgKi8KPisjaWZkZWYgVVNFX0hXX0kyQwo+ KwkvKiBVc2UgZmFzdCBtb2RlLiAqLwo+Kwlod0kyQ0luaXQoMSk7Cj4rI2Vsc2UKPisJc3dJMkNJ bml0KERFRkFVTFRfSTJDX1NDTCwgREVGQVVMVF9JMkNfU0RBKTsKPisjZW5kaWYKPisKPisJLyog Q2hlY2sgaWYgU0lJMTY0IENoaXAgZXhpc3RzICovCj4rCWlmICgoc2lpMTY0R2V0VmVuZG9ySUQo KSA9PSBTSUkxNjRfVkVORE9SX0lEKSAmJiAoc2lpMTY0R2V0RGV2aWNlSUQoKSA9PSBTSUkxNjRf REVWSUNFX0lEKSkgewo+Kwo+KyNpZmRlZiBEREtERUJVRwo+KwkJLyogc2lpMTY0UHJpbnRSZWdp c3RlclZhbHVlcygpOyAqLwo+KyNlbmRpZgo+KwkJLyoKPisJCSAqICBJbml0aWFsaXplIFNJSTE2 NCBjb250cm9sbGVyIGNoaXAuCj4rCQkgKi8KPisKPisJCS8qIFNlbGVjdCB0aGUgZWRnZSAqLwo+ KwkJaWYgKGVkZ2VTZWxlY3QgPT0gMCkKPisJCQljb25maWcgPSBTSUkxNjRfQ09ORklHVVJBVElP Tl9MQVRDSF9GQUxMSU5HOwo+KwkJZWxzZQo+KwkJCWNvbmZpZyA9IFNJSTE2NF9DT05GSUdVUkFU SU9OX0xBVENIX1JJU0lORzsKPisKPisJCS8qIFNlbGVjdCBidXMgd2lkZSAqLwo+KwkJaWYgKGJ1 c1NlbGVjdCA9PSAwKQo+KwkJCWNvbmZpZyB8PSBTSUkxNjRfQ09ORklHVVJBVElPTl9CVVNfMTJC SVRTOwo+KwkJZWxzZQo+KwkJCWNvbmZpZyB8PSBTSUkxNjRfQ09ORklHVVJBVElPTl9CVVNfMjRC SVRTOwo+Kwo+KwkJLyogU2VsZWN0IER1YWwvU2luZ2xlIEVkZ2UgQ2xvY2sgKi8KPisJCWlmIChk dWFsRWRnZUNsa1NlbGVjdCA9PSAwKQo+KwkJCWNvbmZpZyB8PSBTSUkxNjRfQ09ORklHVVJBVElP Tl9DTE9DS19TSU5HTEU7Cj4rCQllbHNlCj4rCQkJY29uZmlnIHw9IFNJSTE2NF9DT05GSUdVUkFU SU9OX0NMT0NLX0RVQUw7Cj4rCj4rCQkvKiBTZWxlY3QgSFN5bmMgRW5hYmxlICovCj4rCQlpZiAo aHN5bmNFbmFibGUgPT0gMCkKPisJCQljb25maWcgfD0gU0lJMTY0X0NPTkZJR1VSQVRJT05fSFNZ TkNfRk9SQ0VfTE9XOwo+KwkJZWxzZQo+KwkJCWNvbmZpZyB8PSBTSUkxNjRfQ09ORklHVVJBVElP Tl9IU1lOQ19BU19JUzsKPisKPisJCS8qIFNlbGVjdCBWU3luYyBFbmFibGUgKi8KPisJCWlmICh2 c3luY0VuYWJsZSA9PSAwKQo+KwkJCWNvbmZpZyB8PSBTSUkxNjRfQ09ORklHVVJBVElPTl9WU1lO Q19GT1JDRV9MT1c7Cj4rCQllbHNlCj4rCQkJY29uZmlnIHw9IFNJSTE2NF9DT05GSUdVUkFUSU9O X1ZTWU5DX0FTX0lTOwo+Kwo+KwkJaTJjV3JpdGVSZWcoU0lJMTY0X0kyQ19BRERSRVNTLCBTSUkx NjRfQ09ORklHVVJBVElPTiwgY29uZmlnKTsKPisKPisJCS8qIERlLXNrZXcgZW5hYmxlZCB3aXRo IGRlZmF1bHQgMTExYiB2YWx1ZS4KPisJCSAgIFRoaXMgd2lsbCBmaXggc29tZSBhcnRpZmFjdHMg cHJvYmxlbSBpbiBzb21lIG1vZGUgb24gYm9hcmQgMi4yLgo+KwkJICAgU29tZWhvdyB0aGlzIGZp eCBkb2VzIG5vdCBhZmZlY3QgYm9hcmQgMi4xLgo+KwkJICAgKi8KPisJCWlmIChkZXNrZXdFbmFi bGUgPT0gMCkKPisJCQljb25maWcgPSBTSUkxNjRfREVTS0VXX0RJU0FCTEU7Cj4rCQllbHNlCj4r CQkJY29uZmlnID0gU0lJMTY0X0RFU0tFV19FTkFCTEU7Cj4rCj4rCQlzd2l0Y2ggKGRlc2tld1Nl dHRpbmcpIHsKPisJCWNhc2UgMDoKPisJCQljb25maWcgfD0gU0lJMTY0X0RFU0tFV18xX1NURVA7 Cj4rCQkJYnJlYWs7Cj4rCQljYXNlIDE6Cj4rCQkJY29uZmlnIHw9IFNJSTE2NF9ERVNLRVdfMl9T VEVQOwo+KwkJCWJyZWFrOwo+KwkJY2FzZSAyOgo+KwkJCWNvbmZpZyB8PSBTSUkxNjRfREVTS0VX XzNfU1RFUDsKPisJCQlicmVhazsKPisJCWNhc2UgMzoKPisJCQljb25maWcgfD0gU0lJMTY0X0RF U0tFV180X1NURVA7Cj4rCQkJYnJlYWs7Cj4rCQljYXNlIDQ6Cj4rCQkJY29uZmlnIHw9IFNJSTE2 NF9ERVNLRVdfNV9TVEVQOwo+KwkJCWJyZWFrOwo+KwkJY2FzZSA1Ogo+KwkJCWNvbmZpZyB8PSBT SUkxNjRfREVTS0VXXzZfU1RFUDsKPisJCQlicmVhazsKPisJCWNhc2UgNjoKPisJCQljb25maWcg fD0gU0lJMTY0X0RFU0tFV183X1NURVA7Cj4rCQkJYnJlYWs7Cj4rCQljYXNlIDc6Cj4rCQkJY29u ZmlnIHw9IFNJSTE2NF9ERVNLRVdfOF9TVEVQOwo+KwkJCWJyZWFrOwo+KwkJfQo+KwkJaTJjV3Jp dGVSZWcoU0lJMTY0X0kyQ19BRERSRVNTLCBTSUkxNjRfREVTS0VXLCBjb25maWcpOwo+Kwo+KwkJ LyogRW5hYmxlL0Rpc2FibGUgQ29udGludW91cyBTeW5jLiAqLwo+KwkJaWYgKGNvbnRpbnVvdXNT eW5jRW5hYmxlID09IDApCj4rCQkJY29uZmlnID0gU0lJMTY0X1BMTF9GSUxURVJfU1lOQ19DT05U SU5VT1VTX0RJU0FCTEU7Cj4rCQllbHNlCj4rCQkJY29uZmlnID0gU0lJMTY0X1BMTF9GSUxURVJf U1lOQ19DT05USU5VT1VTX0VOQUJMRTsKPisKPisJCS8qIEVuYWJsZS9EaXNhYmxlIFBMTCBGaWx0 ZXIgKi8KPisJCWlmIChwbGxGaWx0ZXJFbmFibGUgPT0gMCkKPisJCQljb25maWcgfD0gU0lJMTY0 X1BMTF9GSUxURVJfRElTQUJMRTsKPisJCWVsc2UKPisJCQljb25maWcgfD0gU0lJMTY0X1BMTF9G SUxURVJfRU5BQkxFOwo+Kwo+KwkJLyogU2V0IHRoZSBQTEwgRmlsdGVyIHZhbHVlICovCj4rCQlj b25maWcgfD0gKChwbGxGaWx0ZXJWYWx1ZSAmIDB4MDcpIDw8IDEpOwo+Kwo+KwkJaTJjV3JpdGVS ZWcoU0lJMTY0X0kyQ19BRERSRVNTLCBTSUkxNjRfUExMLCBjb25maWcpOwo+Kwo+KwkJLyogUmVj b3ZlciBmcm9tIFBvd2VyIERvd24gYW5kIGVuYWJsZSBvdXRwdXQuICovCj4rCQljb25maWcgPSBp MmNSZWFkUmVnKFNJSTE2NF9JMkNfQUREUkVTUywgU0lJMTY0X0NPTkZJR1VSQVRJT04pOwo+KwkJ Y29uZmlnIHw9IFNJSTE2NF9DT05GSUdVUkFUSU9OX1BPV0VSX05PUk1BTDsKPisJCWkyY1dyaXRl UmVnKFNJSTE2NF9JMkNfQUREUkVTUywgU0lJMTY0X0NPTkZJR1VSQVRJT04sIGNvbmZpZyk7Cj4r Cj4rI2lmZGVmIERES0RFQlVHCj4rCQkvKiBzaWkxNjRQcmludFJlZ2lzdGVyVmFsdWVzKCk7ICov Cj4rI2VuZGlmCj4rCj4rCQlyZXR1cm4gMDsKPisJfQo+Kwo+KwkvKiBSZXR1cm4gLTEgaWYgaW5p dGlhbGl6YXRpb24gZmFpbHMuICovCj4rCXJldHVybiAtMTsKPit9Cj4rCj4rCj4rCj4rCj4rCj4r LyogYmVsb3cgc2lpMTY0IGZ1bmN0aW9uIGlzIG5vdCBuZWNjZXNzYXJ5ICovCj4rCj4rI2lmZGVm IFNJSTE2NF9GVUxMX0ZVTkNUSU9OUwo+Kwo+Ky8qCj4rICogIHNpaTE2NFJlc2V0Q2hpcAo+KyAq ICAgICAgVGhpcyBmdW5jdGlvbiByZXNldHMgdGhlIERWSSBDb250cm9sbGVyIENoaXAuCj4rICov Cj4rdm9pZCBzaWkxNjRSZXNldENoaXAoKQo+K3sKPisJLyogUG93ZXIgZG93biAqLwo+KwlzaWkx NjRTZXRQb3dlcigwKTsKPisJc2lpMTY0U2V0UG93ZXIoMSk7Cj4rfQo+Kwo+Kwo+Ky8qCj4rICog c2lpMTY0R2V0Q2hpcFN0cmluZwo+KyAqICAgICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgY2hh ciBzdHJpbmcgbmFtZSBvZiB0aGUgY3VycmVudCBEVkkgQ29udHJvbGxlciBjaGlwLgo+KyAqICAg ICAgSXQncyBjb252ZW5pZW50IGZvciBhcHBsaWNhdGlvbiBuZWVkIHRvIGRpc3BsYXkgdGhlIGNo aXAgbmFtZS4KPisgKi8KPitjaGFyICpzaWkxNjRHZXRDaGlwU3RyaW5nKCkKPit7Cj4rCXJldHVy biBnRHZpQ3RybENoaXBOYW1lOwo+K30KPisKPisKPisvKgo+KyAqICBzaWkxNjRTZXRQb3dlcgo+ KyAqICAgICAgVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBwb3dlciBjb25maWd1cmF0aW9uIG9mIHRo ZSBEVkkgQ29udHJvbGxlciBDaGlwLgo+KyAqCj4rICogIElucHV0Ogo+KyAqICAgICAgcG93ZXJV cCAtIEZsYWcgdG8gc2V0IHRoZSBwb3dlciBkb3duIG9yIHVwCj4rICovCj4rdm9pZCBzaWkxNjRT ZXRQb3dlcigKPisJCXVuc2lnbmVkIGNoYXIgcG93ZXJVcAo+KwkJKQo+K3sKPisJdW5zaWduZWQg Y2hhciBjb25maWc7Cj4rCj4rCWNvbmZpZyA9IGkyY1JlYWRSZWcoU0lJMTY0X0kyQ19BRERSRVNT LCBTSUkxNjRfQ09ORklHVVJBVElPTik7Cj4rCWlmIChwb3dlclVwID09IDEpIHsKPisJCS8qIFBv d2VyIHVwIHRoZSBjaGlwICovCj4rCQljb25maWcgJj0gflNJSTE2NF9DT05GSUdVUkFUSU9OX1BP V0VSX01BU0s7Cj4rCQljb25maWcgfD0gU0lJMTY0X0NPTkZJR1VSQVRJT05fUE9XRVJfTk9STUFM Owo+KwkJaTJjV3JpdGVSZWcoU0lJMTY0X0kyQ19BRERSRVNTLCBTSUkxNjRfQ09ORklHVVJBVElP TiwgY29uZmlnKTsKPisJfSBlbHNlewo+KwkJLyogUG93ZXIgZG93biB0aGUgY2hpcCAqLwo+KwkJ Y29uZmlnICY9IH5TSUkxNjRfQ09ORklHVVJBVElPTl9QT1dFUl9NQVNLOwo+KwkJY29uZmlnIHw9 IFNJSTE2NF9DT05GSUdVUkFUSU9OX1BPV0VSX0RPV047Cj4rCQlpMmNXcml0ZVJlZyhTSUkxNjRf STJDX0FERFJFU1MsIFNJSTE2NF9DT05GSUdVUkFUSU9OLCBjb25maWcpOwo+Kwl9Cj4rfQo+Kwo+ Kwo+Ky8qCj4rICogIHNpaTE2NFNlbGVjdEhvdFBsdWdEZXRlY3Rpb25Nb2RlCj4rICogICAgICBU aGlzIGZ1bmN0aW9uIHNlbGVjdHMgdGhlIG1vZGUgb2YgdGhlIGhvdCBwbHVnIGRldGVjdGlvbi4K PisgKi8KPitzdGF0aWMgdm9pZCBzaWkxNjRTZWxlY3RIb3RQbHVnRGV0ZWN0aW9uTW9kZSgKPisJ CXNpaTE2NF9ob3RfcGx1Z19tb2RlX3QgaG90UGx1Z01vZGUKPisJCSkKPit7Cj4rCXVuc2lnbmVk IGNoYXIgZGV0ZWN0UmVnOwo+Kwo+KwlkZXRlY3RSZWcgPSBpMmNSZWFkUmVnKFNJSTE2NF9JMkNf QUREUkVTUywgU0lJMTY0X0RFVEVDVCkgJiB+U0lJMTY0X0RFVEVDVF9NT05JVE9SX1NFTlNFX09V VFBVVF9GTEFHOwo+Kwlzd2l0Y2ggKGhvdFBsdWdNb2RlKSB7Cj4rCWNhc2UgU0lJMTY0X0hPVFBM VUdfRElTQUJMRToKPisJCWRldGVjdFJlZyB8PSBTSUkxNjRfREVURUNUX01PTklUT1JfU0VOU0Vf T1VUUFVUX0hJR0g7Cj4rCQlicmVhazsKPisJY2FzZSBTSUkxNjRfSE9UUExVR19VU0VfTURJOgo+ KwkJZGV0ZWN0UmVnICY9IH5TSUkxNjRfREVURUNUX0lOVEVSUlVQVF9NQVNLOwo+KwkJZGV0ZWN0 UmVnIHw9IFNJSTE2NF9ERVRFQ1RfSU5URVJSVVBUX0JZX0hUUExHX1BJTjsKPisJCWRldGVjdFJl ZyB8PSBTSUkxNjRfREVURUNUX01PTklUT1JfU0VOU0VfT1VUUFVUX01ESTsKPisJCWJyZWFrOwo+ KwljYXNlIFNJSTE2NF9IT1RQTFVHX1VTRV9SU0VOOgo+KwkJZGV0ZWN0UmVnIHw9IFNJSTE2NF9E RVRFQ1RfTU9OSVRPUl9TRU5TRV9PVVRQVVRfUlNFTjsKPisJCWJyZWFrOwo+KwljYXNlIFNJSTE2 NF9IT1RQTFVHX1VTRV9IVFBMRzoKPisJCWRldGVjdFJlZyB8PSBTSUkxNjRfREVURUNUX01PTklU T1JfU0VOU0VfT1VUUFVUX0hUUExHOwo+KwkJYnJlYWs7Cj4rCX0KPisKPisJaTJjV3JpdGVSZWco U0lJMTY0X0kyQ19BRERSRVNTLCBTSUkxNjRfREVURUNULCBkZXRlY3RSZWcpOwo+K30KPisKPisv Kgo+KyAqICBzaWkxNjRFbmFibGVIb3RQbHVnRGV0ZWN0aW9uCj4rICogICAgICBUaGlzIGZ1bmN0 aW9uIGVuYWJsZXMgdGhlIEhvdCBQbHVnIGRldGVjdGlvbi4KPisgKgo+KyAqICBlbmFibGVIb3RQ bHVnICAgLSBFbmFibGUgKD0xKSAvIGRpc2FibGUgKD0wKSBIb3QgUGx1ZyBkZXRlY3Rpb24KPisg Ki8KPit2b2lkIHNpaTE2NEVuYWJsZUhvdFBsdWdEZXRlY3Rpb24oCj4rCQl1bnNpZ25lZCBjaGFy IGVuYWJsZUhvdFBsdWcKPisJCSkKPit7Cj4rCXVuc2lnbmVkIGNoYXIgZGV0ZWN0UmVnOwo+Kwlk ZXRlY3RSZWcgPSBpMmNSZWFkUmVnKFNJSTE2NF9JMkNfQUREUkVTUywgU0lJMTY0X0RFVEVDVCk7 Cj4rCj4rCS8qIERlcGVuZGluZyBvbiBlYWNoIERWSSBjb250cm9sbGVyLCBuZWVkIHRvIGVuYWJs ZSB0aGUgaG90IHBsdWcgYmFzZWQgb24gZWFjaAo+KwkgICBpbmRpdmlkdWFsIGNoaXAgZGVzaWdu LiAqLwo+KwlpZiAoZW5hYmxlSG90UGx1ZyAhPSAwKQo+KwkJc2lpMTY0U2VsZWN0SG90UGx1Z0Rl dGVjdGlvbk1vZGUoU0lJMTY0X0hPVFBMVUdfVVNFX01ESSk7Cj4rCWVsc2UKPisJCXNpaTE2NFNl bGVjdEhvdFBsdWdEZXRlY3Rpb25Nb2RlKFNJSTE2NF9IT1RQTFVHX0RJU0FCTEUpOwo+K30KPisK PisvKgo+KyAqICBzaWkxNjRJc0Nvbm5lY3RlZAo+KyAqICAgICAgQ2hlY2sgaWYgdGhlIERWSSBN b25pdG9yIGlzIGNvbm5lY3RlZC4KPisgKgo+KyAqICBPdXRwdXQ6Cj4rICogICAgICAwICAgLSBO b3QgQ29ubmVjdGVkCj4rICogICAgICAxICAgLSBDb25uZWN0ZWQKPisgKi8KPit1bnNpZ25lZCBj aGFyIHNpaTE2NElzQ29ubmVjdGVkKCkKPit7Cj4rCXVuc2lnbmVkIGNoYXIgaG90UGx1Z1ZhbHVl Owo+Kwo+Kwlob3RQbHVnVmFsdWUgPSBpMmNSZWFkUmVnKFNJSTE2NF9JMkNfQUREUkVTUywgU0lJ MTY0X0RFVEVDVCkgJiBTSUkxNjRfREVURUNUX0hPVF9QTFVHX1NUQVRVU19NQVNLOwo+KwlpZiAo aG90UGx1Z1ZhbHVlID09IFNJSTE2NF9ERVRFQ1RfSE9UX1BMVUdfU1RBVFVTX09OKQo+KwkJcmV0 dXJuIDE7Cj4rCWVsc2UKPisJCXJldHVybiAwOwo+K30KPisKPisvKgo+KyAqICBzaWkxNjRDaGVj a0ludGVycnVwdAo+KyAqICAgICAgQ2hlY2tzIGlmIGludGVycnVwdCBoYXMgb2NjdXJlZC4KPisg Kgo+KyAqICBPdXRwdXQ6Cj4rICogICAgICAwICAgLSBObyBpbnRlcnJ1cHQKPisgKiAgICAgIDEg ICAtIEludGVycnVwdCBvY2N1cnMKPisgKi8KPit1bnNpZ25lZCBjaGFyIHNpaTE2NENoZWNrSW50 ZXJydXB0KCkKPit7Cj4rCXVuc2lnbmVkIGNoYXIgZGV0ZWN0UmVnOwo+Kwo+KwlkZXRlY3RSZWcg PSBpMmNSZWFkUmVnKFNJSTE2NF9JMkNfQUREUkVTUywgU0lJMTY0X0RFVEVDVCkgJiBTSUkxNjRf REVURUNUX01PTklUT1JfU1RBVEVfTUFTSzsKPisJaWYgKGRldGVjdFJlZyA9PSBTSUkxNjRfREVU RUNUX01PTklUT1JfU1RBVEVfQ0hBTkdFKQo+KwkJcmV0dXJuIDE7Cj4rCWVsc2UKPisJCXJldHVy biAwOwo+K30KPisKPisvKgo+KyAqICBzaWkxNjRDbGVhckludGVycnVwdAo+KyAqICAgICAgQ2xl YXIgdGhlIGhvdCBwbHVnIGludGVycnVwdC4KPisgKi8KPit2b2lkIHNpaTE2NENsZWFySW50ZXJy dXB0KCkKPit7Cj4rCXVuc2lnbmVkIGNoYXIgZGV0ZWN0UmVnOwo+Kwo+KwkvKiBDbGVhciB0aGUg TURJIGludGVycnVwdCAqLwo+KwlkZXRlY3RSZWcgPSBpMmNSZWFkUmVnKFNJSTE2NF9JMkNfQURE UkVTUywgU0lJMTY0X0RFVEVDVCk7Cj4rCWkyY1dyaXRlUmVnKFNJSTE2NF9JMkNfQUREUkVTUywg U0lJMTY0X0RFVEVDVCwgZGV0ZWN0UmVnIHwgU0lJMTY0X0RFVEVDVF9NT05JVE9SX1NUQVRFX0NM RUFSKTsKPit9Cj4rCj4rI2VuZGlmCj4rCj4rI2VuZGlmCj4rCj4rCj5kaWZmIC0tZ2l0IGEvZHJp dmVycy92aWRlby9seW54ZmIvZGRrNzUwX3NpaTE2NC5oIGIvZHJpdmVycy92aWRlby9seW54ZmIv ZGRrNzUwX3NpaTE2NC5oCj5uZXcgZmlsZSBtb2RlIDEwMDY0NAo+aW5kZXggMDAwMDAwMC4uYTI3 OTI4Ngo+LS0tIC9kZXYvbnVsbAo+KysrIGIvZHJpdmVycy92aWRlby9seW54ZmIvZGRrNzUwX3Np aTE2NC5oCj5AQCAtMCwwICsxLDE4NyBAQAo+Ky8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCj4rKkNvcHlyaWdodCAoYykg MjAxMiBieSBTaWxpY29uIE1vdGlvbiwgSW5jLiAoU01JKQo+KypQZXJtaXNzaW9uIGlzIGhlcmVi eSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5 Cj4rKm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAo dGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCj4rKmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3Ry aWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8KPisqdXNl LCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBh bmQvb3Igc2VsbCBjb3BpZXMKPisqb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNv bnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvCj4rKmRvIHNvLCBzdWJqZWN0 IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPisqCj4rKlRIRSBTT0ZUV0FSRSBJUyBQUk9W SURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAo+KypFWFBSRVNTIE9S IElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMKPisq T0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQK PisqTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgTWlsbC5DaGVuIGFuZCBNb25r LkxpdSBPUiBDT1BZUklHSFQKPisqSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFN QUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCj4rKldIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRS QUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+KypGUk9NLCBPVVQgT0YgT1IgSU4gQ09O TkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCj4rKk9USEVSIERFQUxJTkdT IElOIFRIRSBTT0ZUV0FSRS4KPisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwo+KyNpZm5kZWYgRERLNzUwX1NJSTE2NF9I X18KPisjZGVmaW5lIERESzc1MF9TSUkxNjRfSF9fCj4rCj4rLyogSG90IFBsdWcgZGV0ZWN0aW9u IG1vZGUgc3RydWN0dXJlICovCj4rdHlwZWRlZiBlbnVtIF9zaWkxNjRfaG90X3BsdWdfbW9kZV90 ewo+KyAgICBTSUkxNjRfSE9UUExVR19ESVNBQkxFID0gMCwgICAgICAgICAvKiBEaXNhYmxlIEhv dCBQbHVnIG91dHB1dCBiaXQgKGFsd2F5cyBoaWdoKS4gKi8KPisgICAgU0lJMTY0X0hPVFBMVUdf VVNFX01ESSwgICAgICAgICAgICAgLyogVXNlIE1vbml0b3IgRGV0ZWN0IEludGVycnVwdCBiaXQu ICovCj4rICAgIFNJSTE2NF9IT1RQTFVHX1VTRV9SU0VOLCAgICAgICAgICAgIC8qIFVzZSBSZWNl aXZlciBTZW5zZSBkZXRlY3QgYml0LiAqLwo+KyAgICBTSUkxNjRfSE9UUExVR19VU0VfSFRQTEcg ICAgICAgICAgICAvKiBVc2UgSG90IFBsdWcgZGV0ZWN0IGJpdC4gKi8KPit9IHNpaTE2NF9ob3Rf cGx1Z19tb2RlX3Q7Cj4rCj4rCj4rLyogU2lsaWNvbiBJbWFnZSBTaUkxNjQgY2hpcCBwcm90b3R5 cGUgKi8KPitsb25nIHNpaTE2NEluaXRDaGlwKAo+KyAgICB1bnNpZ25lZCBjaGFyIGVkZ2VTZWxl Y3QsCj4rICAgIHVuc2lnbmVkIGNoYXIgYnVzU2VsZWN0LAo+KyAgICB1bnNpZ25lZCBjaGFyIGR1 YWxFZGdlQ2xrU2VsZWN0LAo+KyAgICB1bnNpZ25lZCBjaGFyIGhzeW5jRW5hYmxlLAo+KyAgICB1 bnNpZ25lZCBjaGFyIHZzeW5jRW5hYmxlLAo+KyAgICB1bnNpZ25lZCBjaGFyIGRlc2tld0VuYWJs ZSwKPisgICAgdW5zaWduZWQgY2hhciBkZXNrZXdTZXR0aW5nLAo+KyAgICB1bnNpZ25lZCBjaGFy IGNvbnRpbnVvdXNTeW5jRW5hYmxlLAo+KyAgICB1bnNpZ25lZCBjaGFyIHBsbEZpbHRlckVuYWJs ZSwKPisgICAgdW5zaWduZWQgY2hhciBwbGxGaWx0ZXJWYWx1ZQo+Kyk7Cj4rCj4rdW5zaWduZWQg c2hvcnQgc2lpMTY0R2V0VmVuZG9ySUQodm9pZCk7Cj4rdW5zaWduZWQgc2hvcnQgc2lpMTY0R2V0 RGV2aWNlSUQodm9pZCk7Cj4rCj4rCj4rI2lmZGVmIFNJSTE2NF9GVUxMX0ZVTkNUSU9OUwo+K3Zv aWQgc2lpMTY0UmVzZXRDaGlwKHZvaWQpOwo+K2NoYXIgKnNpaTE2NEdldENoaXBTdHJpbmcodm9p ZCk7Cj4rdm9pZCBzaWkxNjRTZXRQb3dlcih1bnNpZ25lZCBjaGFyIHBvd2VyVXApOwo+K3ZvaWQg c2lpMTY0RW5hYmxlSG90UGx1Z0RldGVjdGlvbih1bnNpZ25lZCBjaGFyIGVuYWJsZUhvdFBsdWcp Owo+K3Vuc2lnbmVkIGNoYXIgc2lpMTY0SXNDb25uZWN0ZWQodm9pZCk7Cj4rdW5zaWduZWQgY2hh ciBzaWkxNjRDaGVja0ludGVycnVwdCh2b2lkKTsKPit2b2lkIHNpaTE2NENsZWFySW50ZXJydXB0 KHZvaWQpOwo+KyNlbmRpZgo+Ky8qIGJlbG93IHJlZ2lzdGVyIGRlZmluaW5hdGlvbiBpcyB1c2Vk IGZvciBTaWxpY29uIEltYWdlIFNpSTE2NCBEVkkgY29udHJvbGxlciBjaGlwICovCj4rLyoKPisg KiBWZW5kb3IgSUQgcmVnaXN0ZXJzCj4rICovCj4rI2RlZmluZSBTSUkxNjRfVkVORE9SX0lEX0xP VyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAKPisjZGVmaW5lIFNJSTE2NF9WRU5ET1JfSURf SElHSCAgICAgICAgICAgICAgICAgICAgICAgMHgwMQo+Kwo+Ky8qCj4rICogRGV2aWNlIElEIHJl Z2lzdGVycwo+KyAqLwo+KyNkZWZpbmUgU0lJMTY0X0RFVklDRV9JRF9MT1cgICAgICAgICAgICAg ICAgICAgICAgICAweDAyCj4rI2RlZmluZSBTSUkxNjRfREVWSUNFX0lEX0hJR0ggICAgICAgICAg ICAgICAgICAgICAgIDB4MDMKPisKPisvKgo+KyAqIERldmljZSBSZXZpc2lvbgo+KyAqLwo+KyNk ZWZpbmUgU0lJMTY0X0RFVklDRV9SRVZJU0lPTiAgICAgICAgICAgICAgICAgICAgICAweDA0Cj4r Cj4rLyoKPisgKiBGcmVxdWVuY3kgTGltaXRhdGlvbiByZWdpc3RlcnMKPisgKi8KPisjZGVmaW5l IFNJSTE2NF9GUkVRVUVOQ1lfTElNSVRfTE9XICAgICAgICAgICAgICAgICAgMHgwNgo+KyNkZWZp bmUgU0lJMTY0X0ZSRVFVRU5DWV9MSU1JVF9ISUdIICAgICAgICAgICAgICAgICAweDA3Cj4rCj4r LyoKPisgKiBQb3dlciBEb3duIGFuZCBJbnB1dCBTaWduYWwgQ29uZmlndXJhdGlvbiByZWdpc3Rl cnMKPisgKi8KPisjZGVmaW5lIFNJSTE2NF9DT05GSUdVUkFUSU9OICAgICAgICAgICAgICAgICAg ICAgICAgMHgwOAo+Kwo+Ky8qIFBvd2VyIGRvd24gKFBEKSAqLwo+KyNkZWZpbmUgU0lJMTY0X0NP TkZJR1VSQVRJT05fUE9XRVJfRE9XTiAgICAgICAgICAgICAweDAwCj4rI2RlZmluZSBTSUkxNjRf Q09ORklHVVJBVElPTl9QT1dFUl9OT1JNQUwgICAgICAgICAgIDB4MDEKPisjZGVmaW5lIFNJSTE2 NF9DT05GSUdVUkFUSU9OX1BPV0VSX01BU0sgICAgICAgICAgICAgMHgwMQo+Kwo+Ky8qIElucHV0 IEVkZ2UgTGF0Y2ggU2VsZWN0IChFREdFKSAqLwo+KyNkZWZpbmUgU0lJMTY0X0NPTkZJR1VSQVRJ T05fTEFUQ0hfRkFMTElORyAgICAgICAgICAweDAwCj4rI2RlZmluZSBTSUkxNjRfQ09ORklHVVJB VElPTl9MQVRDSF9SSVNJTkcgICAgICAgICAgIDB4MDIKPisKPisvKiBCdXMgU2VsZWN0IChCU0VM KSAqLwo+KyNkZWZpbmUgU0lJMTY0X0NPTkZJR1VSQVRJT05fQlVTXzEyQklUUyAgICAgICAgICAg ICAweDAwCj4rI2RlZmluZSBTSUkxNjRfQ09ORklHVVJBVElPTl9CVVNfMjRCSVRTICAgICAgICAg ICAgIDB4MDQKPisKPisvKiBEdWFsIEVkZ2UgQ2xvY2sgU2VsZWN0IChEU0VMKSAqLwo+KyNkZWZp bmUgU0lJMTY0X0NPTkZJR1VSQVRJT05fQ0xPQ0tfU0lOR0xFICAgICAgICAgICAweDAwCj4rI2Rl ZmluZSBTSUkxNjRfQ09ORklHVVJBVElPTl9DTE9DS19EVUFMICAgICAgICAgICAgIDB4MDgKPisK PisvKiBIb3Jpem9udGFsIFN5bmMgRW5hYmxlIChIRU4pICovCj4rI2RlZmluZSBTSUkxNjRfQ09O RklHVVJBVElPTl9IU1lOQ19GT1JDRV9MT1cgICAgICAgIDB4MDAKPisjZGVmaW5lIFNJSTE2NF9D T05GSUdVUkFUSU9OX0hTWU5DX0FTX0lTICAgICAgICAgICAgMHgxMAo+Kwo+Ky8qIFZlcnRpY2Fs IFN5bmMgRW5hYmxlIChWRU4pICovCj4rI2RlZmluZSBTSUkxNjRfQ09ORklHVVJBVElPTl9WU1lO Q19GT1JDRV9MT1cgICAgICAgIDB4MDAKPisjZGVmaW5lIFNJSTE2NF9DT05GSUdVUkFUSU9OX1ZT WU5DX0FTX0lTICAgICAgICAgICAgMHgyMAo+Kwo+Ky8qCj4rICogRGV0ZWN0aW9uIHJlZ2lzdGVy cwo+KyAqLwo+KyNkZWZpbmUgU0lJMTY0X0RFVEVDVCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAweDA5Cj4rCj4rLyogTW9uaXRvciBEZXRlY3QgSW50ZXJydXB0IChNREkpICovCj4rI2Rl ZmluZSBTSUkxNjRfREVURUNUX01PTklUT1JfU1RBVEVfQ0hBTkdFICAgICAgICAgIDB4MDAKPisj ZGVmaW5lIFNJSTE2NF9ERVRFQ1RfTU9OSVRPUl9TVEFURV9OT19DSEFOR0UgICAgICAgMHgwMQo+ KyNkZWZpbmUgU0lJMTY0X0RFVEVDVF9NT05JVE9SX1NUQVRFX0NMRUFSICAgICAgICAgICAweDAx Cj4rI2RlZmluZSBTSUkxNjRfREVURUNUX01PTklUT1JfU1RBVEVfTUFTSyAgICAgICAgICAgIDB4 MDEKPisKPisvKiBIb3QgUGx1ZyBkZXRlY3QgSW5wdXQgKEhUUExHKSAqLwo+KyNkZWZpbmUgU0lJ MTY0X0RFVEVDVF9IT1RfUExVR19TVEFUVVNfT0ZGICAgICAgICAgICAweDAwCj4rI2RlZmluZSBT SUkxNjRfREVURUNUX0hPVF9QTFVHX1NUQVRVU19PTiAgICAgICAgICAgIDB4MDIKPisjZGVmaW5l IFNJSTE2NF9ERVRFQ1RfSE9UX1BMVUdfU1RBVFVTX01BU0sgICAgICAgICAgMHgwMgo+Kwo+Ky8q IFJlY2VpdmVyIFNlbnNlIChSU0VOKSAqLwo+KyNkZWZpbmUgU0lJMTY0X0RFVEVDVF9SRUNFSVZF Ul9TRU5TRV9OT1RfREVURUNURUQgICAweDAwCj4rI2RlZmluZSBTSUkxNjRfREVURUNUX1JFQ0VJ VkVSX1NFTlNFX0RFVEVDVEVEICAgICAgIDB4MDQKPisKPisvKiBJbnRlcnJ1cHQgR2VuZXJhdGlv biBNZXRob2QgKFRTRUwpICovCj4rI2RlZmluZSBTSUkxNjRfREVURUNUX0lOVEVSUlVQVF9CWV9S U0VOX1BJTiAgICAgICAgIDB4MDAKPisjZGVmaW5lIFNJSTE2NF9ERVRFQ1RfSU5URVJSVVBUX0JZ X0hUUExHX1BJTiAgICAgICAgMHgwOAo+KyNkZWZpbmUgU0lJMTY0X0RFVEVDVF9JTlRFUlJVUFRf TUFTSyAgICAgICAgICAgICAgICAweDA4Cj4rCj4rLyogTW9uaXRvciBTZW5zZSBPdXRwdXQgKE1T RU4pICovCj4rI2RlZmluZSBTSUkxNjRfREVURUNUX01PTklUT1JfU0VOU0VfT1VUUFVUX0hJR0gg ICAgIDB4MDAKPisjZGVmaW5lIFNJSTE2NF9ERVRFQ1RfTU9OSVRPUl9TRU5TRV9PVVRQVVRfTURJ ICAgICAgMHgxMAo+KyNkZWZpbmUgU0lJMTY0X0RFVEVDVF9NT05JVE9SX1NFTlNFX09VVFBVVF9S U0VOICAgICAweDIwCj4rI2RlZmluZSBTSUkxNjRfREVURUNUX01PTklUT1JfU0VOU0VfT1VUUFVU X0hUUExHICAgIDB4MzAKPisjZGVmaW5lIFNJSTE2NF9ERVRFQ1RfTU9OSVRPUl9TRU5TRV9PVVRQ VVRfRkxBRyAgICAgMHgzMAo+Kwo+Ky8qCj4rICogU2tld2luZyByZWdpc3RlcnMKPisgKi8KPisj ZGVmaW5lIFNJSTE2NF9ERVNLRVcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQQo+ Kwo+Ky8qIEdlbmVyYWwgUHVycG9zZSBJbnB1dCAoQ1RMWzM6MV0pICovCj4rI2RlZmluZSBTSUkx NjRfREVTS0VXX0dFTkVSQUxfUFVSUE9TRV9JTlBVVF9NQVNLICAgIDB4MEUKPisKPisvKiBEZS1z a2V3aW5nIEVuYWJsZSBiaXQgKERLRU4pICovCj4rI2RlZmluZSBTSUkxNjRfREVTS0VXX0RJU0FC TEUgICAgICAgICAgICAgICAgICAgICAgIDB4MDAKPisjZGVmaW5lIFNJSTE2NF9ERVNLRVdfRU5B QkxFICAgICAgICAgICAgICAgICAgICAgICAgMHgxMAo+Kwo+Ky8qIERlLXNrZXdpbmcgU2V0dGlu ZyAoREtbMzoxXSkqLwo+KyNkZWZpbmUgU0lJMTY0X0RFU0tFV18xX1NURVAgICAgICAgICAgICAg ICAgICAgICAgICAweDAwCj4rI2RlZmluZSBTSUkxNjRfREVTS0VXXzJfU1RFUCAgICAgICAgICAg ICAgICAgICAgICAgIDB4MjAKPisjZGVmaW5lIFNJSTE2NF9ERVNLRVdfM19TVEVQICAgICAgICAg ICAgICAgICAgICAgICAgMHg0MAo+KyNkZWZpbmUgU0lJMTY0X0RFU0tFV180X1NURVAgICAgICAg ICAgICAgICAgICAgICAgICAweDYwCj4rI2RlZmluZSBTSUkxNjRfREVTS0VXXzVfU1RFUCAgICAg ICAgICAgICAgICAgICAgICAgIDB4ODAKPisjZGVmaW5lIFNJSTE2NF9ERVNLRVdfNl9TVEVQICAg ICAgICAgICAgICAgICAgICAgICAgMHhBMAo+KyNkZWZpbmUgU0lJMTY0X0RFU0tFV183X1NURVAg ICAgICAgICAgICAgICAgICAgICAgICAweEMwCj4rI2RlZmluZSBTSUkxNjRfREVTS0VXXzhfU1RF UCAgICAgICAgICAgICAgICAgICAgICAgIDB4RTAKPisKPisvKgo+KyAqIFVzZXIgQ29uZmlndXJh dGlvbiBEYXRhIHJlZ2lzdGVycyAoQ0ZHIDc6MCkKPisgKi8KPisjZGVmaW5lIFNJSTE2NF9VU0VS X0NPTkZJR1VSQVRJT04gICAgICAgICAgICAgICAgICAgMHgwQgo+Kwo+Ky8qCj4rICogUExMIHJl Z2lzdGVycwo+KyAqLwo+KyNkZWZpbmUgU0lJMTY0X1BMTCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAweDBDCj4rCj4rLyogUExMIEZpbHRlciBWYWx1ZSAoUExMRikgKi8KPisjZGVm aW5lIFNJSTE2NF9QTExfRklMVEVSX1ZBTFVFX01BU0sgICAgICAgICAgICAgICAgMHgwRQo+Kwo+ Ky8qIFBMTCBGaWx0ZXIgRW5hYmxlIChQRkVOKSAqLwo+KyNkZWZpbmUgU0lJMTY0X1BMTF9GSUxU RVJfRElTQUJMRSAgICAgICAgICAgICAgICAgICAweDAwCj4rI2RlZmluZSBTSUkxNjRfUExMX0ZJ TFRFUl9FTkFCTEUgICAgICAgICAgICAgICAgICAgIDB4MDEKPisKPisvKiBTeW5jIENvbnRpbnVv dXMgKFNDTlQpICovCj4rI2RlZmluZSBTSUkxNjRfUExMX0ZJTFRFUl9TWU5DX0NPTlRJTlVPVVNf RElTQUJMRSAgIDB4MDAKPisjZGVmaW5lIFNJSTE2NF9QTExfRklMVEVSX1NZTkNfQ09OVElOVU9V U19FTkFCTEUgICAgMHg4MAo+Kwo+KyNlbmRpZgo+ZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8v bHlueGZiL2Rkazc1MF9zd2kyYy5jIGIvZHJpdmVycy92aWRlby9seW54ZmIvZGRrNzUwX3N3aTJj LmMKPm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj5pbmRleCAwMDAwMDAwLi5mZjUzMmM3Cj4tLS0gL2Rl di9udWxsCj4rKysgYi9kcml2ZXJzL3ZpZGVvL2x5bnhmYi9kZGs3NTBfc3dpMmMuYwo+QEAgLTAs MCArMSw1MjIgQEAKPisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKgo+KypDb3B5cmlnaHQgKGMpIDIwMTIgYnkgU2lsaWNv biBNb3Rpb24sIEluYy4gKFNNSSkKPisqUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJl ZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQo+KypvZiB0aGlzIHNv ZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUi KSwgdG8gZGVhbAo+KyppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVk aW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCj4rKnVzZSwgY29weSwgbW9kaWZ5 LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29w aWVzCj4rKm9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhl IFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0bwo+KypkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnM6Cj4rKgo+KypUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwg V0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKPisqRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNM VURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCj4rKk9GIE1FUkNIQU5UQUJJ TElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECj4rKk5PTklORlJJTkdF TUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIE1pbGwuQ2hlbiBhbmQgTW9uay5MaXUgT1IgQ09QWVJJ R0hUCj4rKkhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIg TElBQklMSVRZLAo+KypXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBP VEhFUldJU0UsIEFSSVNJTkcKPisqRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBU SEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgo+KypPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdB UkUuCj4rKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KPisjaW5jbHVkZSAiZGRrNzUwX2hlbHAuaCIKPisjaW5jbHVkZSAi ZGRrNzUwX3JlZy5oIgo+KyNpbmNsdWRlICJkZGs3NTBfc3dpMmMuaCIKPisjaW5jbHVkZSAiZGRr NzUwX3Bvd2VyLmgiCj4rCj4rCj4rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKPisgKiBJMkMgU29mdHdhcmUgTWFzdGVy IERyaXZlcjoKPisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT0KPisgKiBFYWNoIGkyYyBj eWNsZSBpcyBzcGxpdCBpbnRvIDQgc2VjdGlvbnMuIEVhY2ggb2YgdGhlc2Ugc2VjdGlvbiBtYXJr cwo+KyAqIGEgcG9pbnQgaW4gdGltZSB3aGVyZSB0aGUgU0NMIG9yIFNEQSBtYXkgYmUgY2hhbmdl ZC4KPisgKgo+KyAqIDEgQ3ljbGUgPT0gfCAgU2VjdGlvbiBJLiB8ICBTZWN0aW9uIDIuIHwgIFNl Y3Rpb24gMy4gfCAgU2VjdGlvbiA0LiB8Cj4rICogICAgICAgICAgICArLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSsKPisgKiAgICAgICAgICAg IHwgU0NMIHNldCBMT1cgfFNDTCBubyBjaGFuZ2V8IFNDTCBzZXQgSElHSHxTQ0wgbm8gY2hhbmdl fAo+KyAqCj4rICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX19f X19fX19fX18gX19fX19fX19fX19fXwo+KyAqIFNDTCA9PSBYWFhYIF9fX19fX19fX19fX18gX19f X19fX19fX19fIC8KPisgKgo+KyAqIEkuZS4gdGhlIFNDTCBtYXkgb25seSBiZSBjaGFuZ2VkIGlu IHNlY3Rpb24gMS4gYW5kIHNlY3Rpb24gMy4gd2hpbGUKPisgKiB0aGUgU0RBIG1heSBvbmx5IGJl IGNoYW5nZWQgaW4gc2VjdGlvbiAyLiBhbmQgc2VjdGlvbiA0LiBUaGUgdGFibGUKPisgKiBiZWxv dyBnaXZlcyB0aGUgY2hhbmdlcyBmb3IgdGhlc2UgMiBsaW5lcyBpbiB0aGUgdmFyaW9zIHNlY3Rp b25zLgo+KyAqCj4rICogU2VjdGlvbiBjaGFuZ2VzIFRhYmxlOgo+KyAqID09PT09PT09PT09PT09 PT09PT09PT0KPisgKiBibGFuayA9IG5vIGNoYW5nZSwgTCA9IHNldCBiaXQgTE9XLCBIID0gc2V0 IGJpdCBISUdICj4rICoKPisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLnwg Mi58IDMufCA0LnwKPisgKiAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tKy0tLSstLS0r LS0tKy0tLSsKPisgKiAgICAgICAgICAgICAgICAgVHggU3RhcnQgICBTREEgfCAgIHwgSCB8ICAg fCBMIHwKPisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ0wgfCBMIHwgICB8IEggfCAg IHwKPisgKiAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tKy0tLSstLS0rLS0tKy0tLSsK PisgKiAgICAgICAgICAgICAgICAgVHggU3RvcCAgICBTREEgfCAgIHwgTCB8ICAgfCBIIHwKPisg KiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ0wgfCBMIHwgICB8IEggfCAgIHwKPisgKiAg ICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tKy0tLSstLS0rLS0tKy0tLSsKPisgKiAgICAg ICAgICAgICAgICAgVHggYml0IEggICBTREEgfCAgIHwgSCB8ICAgfCAgIHwKPisgKiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBTQ0wgfCBMIHwgICB8IEggfCAgIHwKPisgKiAgICAgICAgICAg ICAgICAgLS0tLS0tLS0tLS0tLS0tKy0tLSstLS0rLS0tKy0tLSsKPisgKiAgICAgICAgICAgICAg ICAgVHggYml0IEwgICBTREEgfCAgIHwgTCB8ICAgfCAgIHwKPisgKiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBTQ0wgfCBMIHwgICB8IEggfCAgIHwKPisgKiAgICAgICAgICAgICAgICAgLS0t LS0tLS0tLS0tLS0tKy0tLSstLS0rLS0tKy0tLSsKPisgKgo+KyAqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCj4rCj4rLyog R1BJTyBwaW5zIHVzZWQgZm9yIHRoaXMgSTJDLiBJdCByYW5nZXMgZnJvbSAwIHRvIDYzLiAqLwo+ K3N0YXRpYyB1bnNpZ25lZCBjaGFyIGdfaTJjQ2xvY2tHUElPID0gREVGQVVMVF9JMkNfU0NMOwo+ K3N0YXRpYyB1bnNpZ25lZCBjaGFyIGdfaTJjRGF0YUdQSU8gPSBERUZBVUxUX0kyQ19TREE7Cj4r Cj4rLyoKPisgKiAgQmVsb3cgaXMgdGhlIHZhcmlhYmxlIGRlY2xhcmF0aW9uIGZvciB0aGUgR1BJ TyBwaW4gcmVnaXN0ZXIgdXNhZ2UKPisgKiAgZm9yIHRoZSBpMmMgQ2xvY2sgYW5kIGkyYyBEYXRh Lgo+KyAqCj4rICogIE5vdGU6Cj4rICogICAgICBOb3RpY2UgdGhhdCB0aGUgR1BJTyB1c2FnZSBm b3IgdGhlIGkyYyBjbG9jayBhbmQgaTJjIERhdGEgYXJlCj4rICogICAgICBzZXBhcmF0ZWQuIFRo aXMgaXMgdG8gbWFrZSB0aGlzIGNvZGUgZmxleGlibGUgZW5vdWdoIHdoZW4KPisgKiAgICAgIHR3 byBzZXBhcmF0ZSBHUElPIHBpbnMgZm9yIHRoZSBjbG9jayBhbmQgZGF0YSBhcmUgbG9jYXRlZAo+ KyAqICAgICAgaW4gdHdvIGRpZmZlcmVudCBHUElPIHJlZ2lzdGVyIHNldCAod29yc3QgY2FzZSku Cj4rICovCj4rCj4rLyogaTJjIENsb2NrIEdQSU8gUmVnaXN0ZXIgdXNhZ2UgKi8KPitzdGF0aWMg dW5zaWduZWQgbG9uZyBnX2kyY0Nsa0dQSU9NdXhSZWcgPSBHUElPX01VWDsKPitzdGF0aWMgdW5z aWduZWQgbG9uZyBnX2kyY0Nsa0dQSU9EYXRhUmVnID0gR1BJT19EQVRBOwo+K3N0YXRpYyB1bnNp Z25lZCBsb25nIGdfaTJjQ2xrR1BJT0RhdGFEaXJSZWcgPSBHUElPX0RBVEFfRElSRUNUSU9OOwo+ Kwo+Ky8qIGkyYyBEYXRhIEdQSU8gUmVnaXN0ZXIgdXNhZ2UgKi8KPitzdGF0aWMgdW5zaWduZWQg bG9uZyBnX2kyY0RhdGFHUElPTXV4UmVnID0gR1BJT19NVVg7Cj4rc3RhdGljIHVuc2lnbmVkIGxv bmcgZ19pMmNEYXRhR1BJT0RhdGFSZWcgPSBHUElPX0RBVEE7Cj4rc3RhdGljIHVuc2lnbmVkIGxv bmcgZ19pMmNEYXRhR1BJT0RhdGFEaXJSZWcgPSBHUElPX0RBVEFfRElSRUNUSU9OOwo+Kwo+K3N0 YXRpYyB1bnNpZ25lZCBjaGFyIHBlZWtJTyh1bnNpZ25lZCBzaG9ydCBwb3J0LCB1bnNpZ25lZCBz aG9ydCBpbmRleCkKPit7Cj4rI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZf NjRfXykKPisJb3V0Yl9wKGluZGV4LCBwb3J0KTsKPisJcmV0dXJuIGluYl9wKHBvcnQrMSk7Cj4r I2VuZGlmCj4rfQo+Kwo+Ky8qCj4rICogIFRoaXMgZnVuY3Rpb24gcHV0cyBhIGRlbGF5IGJldHdl ZW4gY29tbWFuZAo+KyAqLwo+K3N0YXRpYyB2b2lkIHN3STJDV2FpdCh2b2lkKQo+K3sKPisJLyog ZmluZCBhIGJ1ZzoKPisJICogcGVla0lPIG1ldGhvZCB3b3JrcyB3ZWxsIGJlZm9yZSBzdXNwZW5k L3Jlc3VtZQo+KwkgKiBidXQgYWZ0ZXIgc3VzcGVuZCwgcGVla0lPKDB4M2NlLDB4NjEpICYgMHgx MAo+KwkgKiBhbHdheXMgYmUgbm9uLXplcm8sd2hpY2ggbWFrZXMgdGhlIHdoaWxlIGxvb3AKPisJ ICogbmV2ZXIgZmluaXNoLgo+KwkgKiB1c2Ugbm9uLXVsdGltYXRlIGZvciBsb29wIGJlbG93IGlz IHNhZmUKPisJICogKi8KPisJaW50IGksIFRlbXA7Cj4rCj4rCWZvciAoaSA9IDA7IGkgPCA2MDA7 IGkrKykgewo+KwkJVGVtcCA9IGk7Cj4rCQlUZW1wICs9IGk7Cj4rCX0KPit9Cj4rCj4rLyoKPisg KiAgVGhpcyBmdW5jdGlvbiBzZXQvcmVzZXQgdGhlIFNDTCBHUElPIHBpbgo+KyAqCj4rICogIFBh cmFtZXRlcnM6Cj4rICogICAgICB2YWx1ZSAgICAtIEJpdCB2YWx1ZSB0byBzZXQgdG8gdGhlIFND TCBvciBTREEgKDAgPSBsb3csIDEgPSBoaWdoKQo+KyAqCj4rICogIE5vdGVzOgo+KyAqICAgICAg V2hlbiBzZXR0aW5nIFNDTCB0byBoaWdoLCBqdXN0IHNldCB0aGUgR1BJTyBhcyBpbnB1dCB3aGVy ZSB0aGUgcHVsbCB1cAo+KyAqICAgICAgcmVzaXN0b3Igd2lsbCBwdWxsIHRoZSBzaWduYWwgdXAu IERvIG5vdCB1c2Ugc29mdHdhcmUgdG8gcHVsbCB1cCB0aGUKPisgKiAgICAgIHNpZ25hbCBiZWNh dXNlIHRoZSBpMmMgd2lsbCBmYWlsIHdoZW4gb3RoZXIgZGV2aWNlIHRyeSB0byBkcml2ZSB0aGUK PisgKiAgICAgIHNpZ25hbCBkdWUgdG8gU001MHggd2lsbCBkcml2ZSB0aGUgc2lnbmFsIHRvIGFs d2F5cyBoaWdoLgo+KyAqLwo+K3ZvaWQgc3dJMkNTQ0wodW5zaWduZWQgY2hhciB2YWx1ZSkKPit7 Cj4rCXVuc2lnbmVkIGxvbmcgdWxHUElPRGF0YTsKPisJdW5zaWduZWQgbG9uZyB1bEdQSU9EaXJl Y3Rpb247Cj4rCj4rCXVsR1BJT0RpcmVjdGlvbiA9IFBFRUszMihnX2kyY0Nsa0dQSU9EYXRhRGly UmVnKTsKPisJaWYgKHZhbHVlKSB7ICAgICAvKiBIaWdoICovCj4rCQkvKiBTZXQgZGlyZWN0aW9u IGFzIGlucHV0LiBUaGlzIHdpbGwgYXV0b21hdGljYWxseSBwdWxsIHRoZSBzaWduYWwgdXAuICov Cj4rCQl1bEdQSU9EaXJlY3Rpb24gJj0gfigxIDw8IGdfaTJjQ2xvY2tHUElPKTsKPisJCVBPS0Uz MihnX2kyY0Nsa0dQSU9EYXRhRGlyUmVnLCB1bEdQSU9EaXJlY3Rpb24pOwo+Kwl9IGVsc2V7ICAg ICAgICAgICAgLyogTG93ICovCj4rCQkvKiBTZXQgdGhlIHNpZ25hbCBkb3duICovCj4rCQl1bEdQ SU9EYXRhID0gUEVFSzMyKGdfaTJjQ2xrR1BJT0RhdGFSZWcpOwo+KwkJdWxHUElPRGF0YSAmPSB+ KDEgPDwgZ19pMmNDbG9ja0dQSU8pOwo+KwkJUE9LRTMyKGdfaTJjQ2xrR1BJT0RhdGFSZWcsIHVs R1BJT0RhdGEpOwo+Kwo+KwkJLyogU2V0IGRpcmVjdGlvbiBhcyBvdXRwdXQgKi8KPisJCXVsR1BJ T0RpcmVjdGlvbiB8PSAoMSA8PCBnX2kyY0Nsb2NrR1BJTyk7Cj4rCQlQT0tFMzIoZ19pMmNDbGtH UElPRGF0YURpclJlZywgdWxHUElPRGlyZWN0aW9uKTsKPisJfQo+K30KPisKPisvKgo+KyAqICBU aGlzIGZ1bmN0aW9uIHNldC9yZXNldCB0aGUgU0RBIEdQSU8gcGluCj4rICoKPisgKiAgUGFyYW1l dGVyczoKPisgKiAgICAgIHZhbHVlICAgIC0gQml0IHZhbHVlIHRvIHNldCB0byB0aGUgU0NMIG9y IFNEQSAoMCA9IGxvdywgMSA9IGhpZ2gpCj4rICoKPisgKiAgTm90ZXM6Cj4rICogICAgICBXaGVu IHNldHRpbmcgU0NMIHRvIGhpZ2gsIGp1c3Qgc2V0IHRoZSBHUElPIGFzIGlucHV0IHdoZXJlIHRo ZSBwdWxsIHVwCj4rICogICAgICByZXNpc3RvciB3aWxsIHB1bGwgdGhlIHNpZ25hbCB1cC4gRG8g bm90IHVzZSBzb2Z0d2FyZSB0byBwdWxsIHVwIHRoZQo+KyAqICAgICAgc2lnbmFsIGJlY2F1c2Ug dGhlIGkyYyB3aWxsIGZhaWwgd2hlbiBvdGhlciBkZXZpY2UgdHJ5IHRvIGRyaXZlIHRoZQo+KyAq ICAgICAgc2lnbmFsIGR1ZSB0byBTTTUweCB3aWxsIGRyaXZlIHRoZSBzaWduYWwgdG8gYWx3YXlz IGhpZ2guCj4rICovCj4rdm9pZCBzd0kyQ1NEQSh1bnNpZ25lZCBjaGFyIHZhbHVlKQo+K3sKPisJ dW5zaWduZWQgbG9uZyB1bEdQSU9EYXRhOwo+Kwl1bnNpZ25lZCBsb25nIHVsR1BJT0RpcmVjdGlv bjsKPisKPisJdWxHUElPRGlyZWN0aW9uID0gUEVFSzMyKGdfaTJjRGF0YUdQSU9EYXRhRGlyUmVn KTsKPisJaWYgKHZhbHVlKSB7ICAgICAgLyogSGlnaCAqLwo+KwkJLyogU2V0IGRpcmVjdGlvbiBh cyBpbnB1dC4gVGhpcyB3aWxsIGF1dG9tYXRpY2FsbHkgcHVsbCB0aGUgc2lnbmFsIHVwLiAqLwo+ KwkJdWxHUElPRGlyZWN0aW9uICY9IH4oMSA8PCBnX2kyY0RhdGFHUElPKTsKPisJCVBPS0UzMihn X2kyY0RhdGFHUElPRGF0YURpclJlZywgdWxHUElPRGlyZWN0aW9uKTsKPisJfSBlbHNleyAgICAg ICAgICAgIC8qIExvdyAqLwo+KwkJLyogU2V0IHRoZSBzaWduYWwgZG93biAqLwo+KwkJdWxHUElP RGF0YSA9IFBFRUszMihnX2kyY0RhdGFHUElPRGF0YVJlZyk7Cj4rCQl1bEdQSU9EYXRhICY9IH4o MSA8PCBnX2kyY0RhdGFHUElPKTsKPisJCVBPS0UzMihnX2kyY0RhdGFHUElPRGF0YVJlZywgdWxH UElPRGF0YSk7Cj4rCj4rCQkvKiBTZXQgZGlyZWN0aW9uIGFzIG91dHB1dCAqLwo+KwkJdWxHUElP RGlyZWN0aW9uIHw9ICgxIDw8IGdfaTJjRGF0YUdQSU8pOwo+KwkJUE9LRTMyKGdfaTJjRGF0YUdQ SU9EYXRhRGlyUmVnLCB1bEdQSU9EaXJlY3Rpb24pOwo+Kwl9Cj4rfQo+Kwo+Ky8qCj4rICogIFRo aXMgZnVuY3Rpb24gcmVhZCB0aGUgZGF0YSBmcm9tIHRoZSBTREEgR1BJTyBwaW4KPisgKgo+KyAq ICBSZXR1cm4gVmFsdWU6Cj4rICogICAgICBUaGUgU0RBIGRhdGEgYml0IHNlbnQgYnkgdGhlIFNs YXZlCj4rICovCj4rc3RhdGljIHVuc2lnbmVkIGNoYXIgc3dJMkNSZWFkU0RBKCkKPit7Cj4rCXVu c2lnbmVkIGxvbmcgdWxHUElPRGlyZWN0aW9uOwo+Kwl1bnNpZ25lZCBsb25nIHVsR1BJT0RhdGE7 Cj4rCj4rCS8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBkaXJlY3Rpb24gaXMgaW5wdXQgKEhpZ2gpICov Cj4rCXVsR1BJT0RpcmVjdGlvbiA9IFBFRUszMihnX2kyY0RhdGFHUElPRGF0YURpclJlZyk7Cj4r CWlmICgodWxHUElPRGlyZWN0aW9uICYgKDEgPDwgZ19pMmNEYXRhR1BJTykpCj4rCSE9ICh+KDEg PDwgZ19pMmNEYXRhR1BJTykpKSB7Cj4rCQl1bEdQSU9EaXJlY3Rpb24gJj0gfigxIDw8IGdfaTJj RGF0YUdQSU8pOwo+KwkJUE9LRTMyKGdfaTJjRGF0YUdQSU9EYXRhRGlyUmVnLCB1bEdQSU9EaXJl Y3Rpb24pOwo+Kwl9Cj4rCj4rCS8qIE5vdyByZWFkIHRoZSBTREEgbGluZSAqLwo+Kwl1bEdQSU9E YXRhID0gUEVFSzMyKGdfaTJjRGF0YUdQSU9EYXRhUmVnKTsKPisJaWYgKHVsR1BJT0RhdGEgJiAo MSA8PCBnX2kyY0RhdGFHUElPKSkKPisJCXJldHVybiAxOwo+KwllbHNlCj4rCQlyZXR1cm4gMDsK Pit9Cj4rCj4rI3ByYWdtYSBvcHRpbWl6ZSgiIiwgb2ZmKQo+Kwo+Ky8qCj4rICogIFRoaXMgZnVu Y3Rpb24gc2VuZHMgQUNLIHNpZ25hbAo+KyAqLwo+K3N0YXRpYyB2b2lkIHN3STJDQWNrKHZvaWQp Cj4rewo+KwlyZXR1cm47ICAvKiBTaW5nbGUgYnl0ZSByZWFkIGlzIG9rIHdpdGhvdXQgaXQuICov Cj4rfQo+Kwo+Ky8qCj4rICogIFRoaXMgZnVuY3Rpb24gc2VuZHMgdGhlIHN0YXJ0IGNvbW1hbmQg dG8gdGhlIHNsYXZlIGRldmljZQo+KyAqLwo+K3ZvaWQgc3dJMkNTdGFydCh2b2lkKQo+K3sKPisJ LyogU3RhcnQgSTJDICovCj4rCXN3STJDU0RBKDEpOwo+Kwlzd0kyQ1NDTCgxKTsKPisJc3dJMkNT REEoMCk7Cj4rfQo+Kwo+Ky8qCj4rICogIFRoaXMgZnVuY3Rpb24gc2VuZHMgdGhlIHN0b3AgY29t bWFuZCB0byB0aGUgc2xhdmUgZGV2aWNlCj4rICovCj4rdm9pZCBzd0kyQ1N0b3AoKQo+K3sKPisJ LyogU3RvcCB0aGUgSTJDICovCj4rCXN3STJDU0NMKDEpOwo+Kwlzd0kyQ1NEQSgwKTsKPisJc3dJ MkNTREEoMSk7Cj4rfQo+Kwo+Ky8qCj4rICogIFRoaXMgZnVuY3Rpb24gd3JpdGVzIG9uZSBieXRl IHRvIHRoZSBzbGF2ZSBkZXZpY2UKPisgKgo+KyAqICBQYXJhbWV0ZXJzOgo+KyAqICAgICAgZGF0 YSAgICAtIERhdGEgdG8gYmUgd3JpdGUgdG8gdGhlIHNsYXZlIGRldmljZQo+KyAqCj4rICogIFJl dHVybiBWYWx1ZToKPisgKiAgICAgICAwICAgLSBTdWNjZXNzCj4rICogICAgICAtMSAgIC0gRmFp bCB0byB3cml0ZSBieXRlCj4rICovCj4rbG9uZyBzd0kyQ1dyaXRlQnl0ZSh1bnNpZ25lZCBjaGFy IGRhdGEpCj4rewo+Kwl1bnNpZ25lZCBjaGFyIHZhbHVlID0gZGF0YTsKPisJaW50IGk7Cj4rCj4r CS8qIFNlbmRpbmcgdGhlIGRhdGEgYml0IGJ5IGJpdCAqLwo+Kwlmb3IgKGkgPSAwOyBpIDwgODsg aSsrKSB7Cj4rCQkvKiBTZXQgU0NMIHRvIGxvdyAqLwo+KwkJc3dJMkNTQ0woMCk7Cj4rCj4rCQkv KiBTZW5kIGRhdGEgYml0ICovCj4rCQlpZiAoKHZhbHVlICYgMHg4MCkgIT0gMCkKPisJCQlzd0ky Q1NEQSgxKTsKPisJCWVsc2UKPisJCQlzd0kyQ1NEQSgwKTsKPisKPisJCXN3STJDV2FpdCgpOwo+ Kwo+KwkJLyogVG9nZ2xlIGNsayBsaW5lIHRvIG9uZSAqLwo+KwkJc3dJMkNTQ0woMSk7Cj4rCQlz d0kyQ1dhaXQoKTsKPisKPisJCS8qIFNoaWZ0IGJ5dGUgdG8gYmUgc2VudCAqLwo+KwkJdmFsdWUg PSB2YWx1ZSA8PCAxOwo+Kwl9Cj4rCj4rCS8qIFNldCB0aGUgU0NMIExvdyBhbmQgU0RBIEhpZ2gg KHByZXBhcmUgdG8gZ2V0IGlucHV0KSAqLwo+Kwlzd0kyQ1NDTCgwKTsKPisJc3dJMkNTREEoMSk7 Cj4rCj4rCS8qIFNldCB0aGUgU0NMIEhpZ2ggZm9yIGFjayAqLwo+Kwlzd0kyQ1dhaXQoKTsKPisJ c3dJMkNTQ0woMSk7Cj4rCXN3STJDV2FpdCgpOwo+Kwo+KwkvKiBSZWFkIFNEQSwgdW50aWwgU0RB PT0wICovCj4rCWZvciAoaSA9IDA7IGkgPCAweGZmOyBpKyspIHsKPisJCWlmICghc3dJMkNSZWFk U0RBKCkpCj4rCQkJYnJlYWs7Cj4rCj4rCQlzd0kyQ1NDTCgwKTsKPisJCXN3STJDV2FpdCgpOwo+ KwkJc3dJMkNTQ0woMSk7Cj4rCQlzd0kyQ1dhaXQoKTsKPisJfQo+Kwo+KwkvKiBTZXQgdGhlIFND TCBMb3cgYW5kIFNEQSBIaWdoICovCj4rCXN3STJDU0NMKDApOwo+Kwlzd0kyQ1NEQSgxKTsKPisK PisJaWYgKGkgPCAweGZmKQo+KwkJcmV0dXJuIDA7Cj4rCWVsc2UKPisJCXJldHVybiAtMTsKPit9 Cj4rCj4rLyoKPisgKiAgVGhpcyBmdW5jdGlvbiByZWFkcyBvbmUgYnl0ZSBmcm9tIHRoZSBzbGF2 ZSBkZXZpY2UKPisgKgo+KyAqICBQYXJhbWV0ZXJzOgo+KyAqICAgICAgYWNrICAgIC0gRmxhZyB0 byBpbmRpY2F0ZSBlaXRoZXIgdG8gc2VuZCB0aGUgYWNrbm93bGVkZ2UKPisgKiAgICAgICAgICAg IG1lc3NhZ2UgdG8gdGhlIHNsYXZlIGRldmljZSBvciBub3QKPisgKgo+KyAqICBSZXR1cm4gVmFs dWU6Cj4rICogICAgICBPbmUgYnl0ZSBkYXRhIHJlYWQgZnJvbSB0aGUgU2xhdmUgZGV2aWNlCj4r ICovCj4rdW5zaWduZWQgY2hhciBzd0kyQ1JlYWRCeXRlKHVuc2lnbmVkIGNoYXIgYWNrKQo+K3sK PisJaW50IGk7Cj4rCXVuc2lnbmVkIGNoYXIgZGF0YSA9IDA7Cj4rCj4rCWZvciAoaSA9IDc7IGkg Pj0gMDsgaS0tKSB7Cj4rCQkvKiBTZXQgdGhlIFNDTCB0byBMb3cgYW5kIFNEQSB0byBIaWdoIChJ bnB1dCkgKi8KPisJCXN3STJDU0NMKDApOwo+KwkJc3dJMkNTREEoMSk7Cj4rCQlzd0kyQ1dhaXQo KTsKPisKPisJCS8qIFNldCB0aGUgU0NMIEhpZ2ggKi8KPisJCXN3STJDU0NMKDEpOwo+KwkJc3dJ MkNXYWl0KCk7Cj4rCj4rCQkvKiBSZWFkIGRhdGEgYml0cyBmcm9tIFNEQSAqLwo+KwkJZGF0YSB8 PSAoc3dJMkNSZWFkU0RBKCkgPDwgaSk7Cj4rCX0KPisKPisJaWYgKGFjaykKPisJCXN3STJDQWNr KCk7Cj4rCj4rCS8qIFNldCB0aGUgU0NMIExvdyBhbmQgU0RBIEhpZ2ggKi8KPisJc3dJMkNTQ0wo MCk7Cj4rCXN3STJDU0RBKDEpOwo+Kwo+KwlyZXR1cm4gZGF0YTsKPit9Cj4rI3ByYWdtYSBvcHRp bWl6ZSgiIiwgb24pCj4rCj4rLyoKPisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIEdQSU8g cG9ydCBmb3IgU1cgSTJDIGNvbW11bmljYXRpb24uCj4rICoKPisgKiBQYXJhbWV0ZXJzOgo+KyAq ICAgICAgaTJjQ2xrR1BJTyAgICAgIC0gVGhlIEdQSU8gcGluIHRvIGJlIHVzZWQgYXMgaTJjIFND TAo+KyAqICAgICAgaTJjRGF0YUdQSU8gICAgIC0gVGhlIEdQSU8gcGluIHRvIGJlIHVzZWQgYXMg aTJjIFNEQQo+KyAqCj4rICogUmV0dXJuIFZhbHVlOgo+KyAqICAgICAgLTEgICAtIEZhaWwgdG8g aW5pdGlhbGl6ZSB0aGUgaTJjCj4rICogICAgICAgMCAgIC0gU3VjY2Vzcwo+KyAqLwo+K2xvbmcg c3dJMkNJbml0X1NNNzUwTEUoCj4rCQl1bnNpZ25lZCBjaGFyIGkyY0Nsa0dQSU8sCj4rCQl1bnNp Z25lZCBjaGFyIGkyY0RhdGFHUElPCj4rCQkpCj4rewo+KwlpbnQgaTsKPisKPisJLyogSW5pdGlh bGl6ZSB0aGUgR1BJTyBwaW4gZm9yIHRoZSBpMmMgQ2xvY2sgUmVnaXN0ZXIgKi8KPisJZ19pMmND bGtHUElPRGF0YVJlZyA9IEdQSU9fREFUQV9TTTc1MExFOwo+KwlnX2kyY0Nsa0dQSU9EYXRhRGly UmVnID0gR1BJT19EQVRBX0RJUkVDVElPTl9TTTc1MExFOwo+Kwo+KwkvKiBJbml0aWFsaXplIHRo ZSBDbG9jayBHUElPIE9mZnNldCAqLwo+KwlnX2kyY0Nsb2NrR1BJTyA9IGkyY0Nsa0dQSU87Cj4r Cj4rCS8qIEluaXRpYWxpemUgdGhlIEdQSU8gcGluIGZvciB0aGUgaTJjIERhdGEgUmVnaXN0ZXIg Ki8KPisJZ19pMmNEYXRhR1BJT0RhdGFSZWcgPSBHUElPX0RBVEFfU003NTBMRTsKPisJZ19pMmNE YXRhR1BJT0RhdGFEaXJSZWcgPSBHUElPX0RBVEFfRElSRUNUSU9OX1NNNzUwTEU7Cj4rCj4rCS8q IEluaXRpYWxpemUgdGhlIERhdGEgR1BJTyBPZmZzZXQgKi8KPisJZ19pMmNEYXRhR1BJTyA9IGky Y0RhdGFHUElPOwo+Kwo+KwkvKiBOb3RlIHRoYXQgU003NTBMRSBkb24ndCBoYXZlIEdQSU8gTVVY IGFuZCBwb3dlciBpcyBhbHdheXMgb24gKi8KPisKPisJLyogQ2xlYXIgdGhlIGkyYyBsaW5lcy4g Ki8KPisJZm9yIChpID0gMDsgaSA8IDk7IGkrKykKPisJCXN3STJDU3RvcCgpOwo+Kwo+KwlyZXR1 cm4gMDsKPit9Cj4rCj4rLyoKPisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBpMmMg YXR0cmlidXRlcyBhbmQgYnVzCj4rICoKPisgKiBQYXJhbWV0ZXJzOgo+KyAqICAgICAgaTJjQ2xr R1BJTyAgICAgIC0gVGhlIEdQSU8gcGluIHRvIGJlIHVzZWQgYXMgaTJjIFNDTAo+KyAqICAgICAg aTJjRGF0YUdQSU8gICAgIC0gVGhlIEdQSU8gcGluIHRvIGJlIHVzZWQgYXMgaTJjIFNEQQo+KyAq Cj4rICogUmV0dXJuIFZhbHVlOgo+KyAqICAgICAgLTEgICAtIEZhaWwgdG8gaW5pdGlhbGl6ZSB0 aGUgaTJjCj4rICogICAgICAgMCAgIC0gU3VjY2Vzcwo+KyAqLwo+K2xvbmcgc3dJMkNJbml0KAo+ KwkJdW5zaWduZWQgY2hhciBpMmNDbGtHUElPLAo+KwkJdW5zaWduZWQgY2hhciBpMmNEYXRhR1BJ Two+KwkgICAgICApCj4rewo+KwlpbnQgaTsKPisKPisJLyogUmV0dXJuIDAgaWYgdGhlIEdQSU8g cGlucyB0byBiZSB1c2VkIGlzIG91dCBvZiByYW5nZS4gVGhlIHJhbmdlIGlzIG9ubHkgZnJvbSBb MC4uNjNdICovCj4rCWlmICgoaTJjQ2xrR1BJTyA+IDMxKSB8fCAoaTJjRGF0YUdQSU8gPiAzMSkp Cj4rCQlyZXR1cm4gLTE7Cj4rCj4rCWlmIChnZXRDaGlwVHlwZSgpID09IFNNNzUwTEUpCj4rCQly ZXR1cm4gc3dJMkNJbml0X1NNNzUwTEUoaTJjQ2xrR1BJTywgaTJjRGF0YUdQSU8pOwo+Kwo+Kwkv KiBJbml0aWFsaXplIHRoZSBHUElPIHBpbiBmb3IgdGhlIGkyYyBDbG9jayBSZWdpc3RlciAqLwo+ KwlnX2kyY0Nsa0dQSU9NdXhSZWcgPSBHUElPX01VWDsKPisJZ19pMmNDbGtHUElPRGF0YVJlZyA9 IEdQSU9fREFUQTsKPisJZ19pMmNDbGtHUElPRGF0YURpclJlZyA9IEdQSU9fREFUQV9ESVJFQ1RJ T047Cj4rCj4rCS8qIEluaXRpYWxpemUgdGhlIENsb2NrIEdQSU8gT2Zmc2V0ICovCj4rCWdfaTJj Q2xvY2tHUElPID0gaTJjQ2xrR1BJTzsKPisKPisJLyogSW5pdGlhbGl6ZSB0aGUgR1BJTyBwaW4g Zm9yIHRoZSBpMmMgRGF0YSBSZWdpc3RlciAqLwo+KwlnX2kyY0RhdGFHUElPTXV4UmVnID0gR1BJ T19NVVg7Cj4rCWdfaTJjRGF0YUdQSU9EYXRhUmVnID0gR1BJT19EQVRBOwo+KwlnX2kyY0RhdGFH UElPRGF0YURpclJlZyA9IEdQSU9fREFUQV9ESVJFQ1RJT047Cj4rCj4rCS8qIEluaXRpYWxpemUg dGhlIERhdGEgR1BJTyBPZmZzZXQgKi8KPisJZ19pMmNEYXRhR1BJTyA9IGkyY0RhdGFHUElPOwo+ Kwo+KwkvKiBFbmFibGUgdGhlIEdQSU8gcGlucyBmb3IgdGhlIGkyYyBDbG9jayBhbmQgRGF0YSAo R1BJTyBNVVgpICovCj4rCVBPS0UzMihnX2kyY0Nsa0dQSU9NdXhSZWcsCj4rCQkJUEVFSzMyKGdf aTJjQ2xrR1BJT011eFJlZykgJiB+KDEgPDwgZ19pMmNDbG9ja0dQSU8pKTsKPisJUE9LRTMyKGdf aTJjRGF0YUdQSU9NdXhSZWcsCj4rCQkJUEVFSzMyKGdfaTJjRGF0YUdQSU9NdXhSZWcpICYgfigx IDw8IGdfaTJjRGF0YUdQSU8pKTsKPisKPisJLyogRW5hYmxlIEdQSU8gcG93ZXIgKi8KPisJZW5h YmxlR1BJTygxKTsKPisKPisJLyogQ2xlYXIgdGhlIGkyYyBsaW5lcy4gKi8KPisJZm9yIChpID0g MDsgaSA8IDk7IGkrKykKPisJCXN3STJDU3RvcCgpOwo+Kwo+KwlyZXR1cm4gMDsKPit9Cj4rCj4r LyoKPisgKiAgVGhpcyBmdW5jdGlvbiByZWFkcyB0aGUgc2xhdmUgZGV2aWNlJ3MgcmVnaXN0ZXIK PisgKgo+KyAqICBQYXJhbWV0ZXJzOgo+KyAqICAgICAgZGV2aWNlQWRkcmVzcyAgIC0gaTJjIFNs YXZlIGRldmljZSBhZGRyZXNzIHdoaWNoIHJlZ2lzdGVyCj4rICogICAgICAgICAgICAgICAgICAg ICAgICB0byBiZSByZWFkIGZyb20KPisgKiAgICAgIHJlZ2lzdGVySW5kZXggICAtIFNsYXZlIGRl dmljZSdzIHJlZ2lzdGVyIHRvIGJlIHJlYWQKPisgKgo+KyAqICBSZXR1cm4gVmFsdWU6Cj4rICog ICAgICBSZWdpc3RlciB2YWx1ZQo+KyAqLwo+K3Vuc2lnbmVkIGNoYXIgc3dJMkNSZWFkUmVnKAo+ KwkJdW5zaWduZWQgY2hhciBkZXZpY2VBZGRyZXNzLAo+KwkJdW5zaWduZWQgY2hhciByZWdpc3Rl ckluZGV4Cj4rCQkpCj4rewo+Kwl1bnNpZ25lZCBjaGFyIGRhdGE7Cj4rCj4rCS8qIFNlbmQgdGhl IFN0YXJ0IHNpZ25hbCAqLwo+Kwlzd0kyQ1N0YXJ0KCk7Cj4rCj4rCS8qIFNlbmQgdGhlIGRldmlj ZSBhZGRyZXNzICovCj4rCXN3STJDV3JpdGVCeXRlKGRldmljZUFkZHJlc3MpOwo+Kwo+KwkvKiBT ZW5kIHRoZSByZWdpc3RlciBpbmRleCAqLwo+Kwlzd0kyQ1dyaXRlQnl0ZShyZWdpc3RlckluZGV4 KTsKPisKPisJLyogR2V0IHRoZSBidXMgYWdhaW4gYW5kIGdldCB0aGUgZGF0YSBmcm9tIHRoZSBk ZXZpY2UgcmVhZCBhZGRyZXNzICovCj4rCXN3STJDU3RhcnQoKTsKPisJc3dJMkNXcml0ZUJ5dGUo ZGV2aWNlQWRkcmVzcyArIDEpOwo+KwlkYXRhID0gc3dJMkNSZWFkQnl0ZSgxKTsKPisKPisJLyog U3RvcCBzd0kyQyBhbmQgcmVsZWFzZSB0aGUgYnVzICovCj4rCXN3STJDU3RvcCgpOwo+Kwo+Kwly ZXR1cm4gZGF0YTsKPit9Cj4rCj4rLyoKPisgKiAgVGhpcyBmdW5jdGlvbiB3cml0ZXMgYSB2YWx1 ZSB0byB0aGUgc2xhdmUgZGV2aWNlJ3MgcmVnaXN0ZXIKPisgKgo+KyAqICBQYXJhbWV0ZXJzOgo+ KyAqICAgICAgZGV2aWNlQWRkcmVzcyAgIC0gaTJjIFNsYXZlIGRldmljZSBhZGRyZXNzIHdoaWNo IHJlZ2lzdGVyCj4rICogICAgICAgICAgICAgICAgICAgICAgICB0byBiZSB3cml0dGVuCj4rICog ICAgICByZWdpc3RlckluZGV4ICAgLSBTbGF2ZSBkZXZpY2UncyByZWdpc3RlciB0byBiZSB3cml0 dGVuCj4rICogICAgICBkYXRhICAgICAgICAgICAgLSBEYXRhIHRvIGJlIHdyaXR0ZW4gdG8gdGhl IHJlZ2lzdGVyCj4rICoKPisgKiAgUmVzdWx0Ogo+KyAqICAgICAgICAgIDAgICAtIFN1Y2Nlc3MK PisgKiAgICAgICAgIC0xICAgLSBGYWlsCj4rICovCj4rbG9uZyBzd0kyQ1dyaXRlUmVnKAo+KwkJ dW5zaWduZWQgY2hhciBkZXZpY2VBZGRyZXNzLAo+KwkJdW5zaWduZWQgY2hhciByZWdpc3Rlcklu ZGV4LAo+KwkJdW5zaWduZWQgY2hhciBkYXRhCj4rCQkpCj4rewo+Kwlsb25nIHJldHVyblZhbHVl ID0gMDsKPisKPisJLyogU2VuZCB0aGUgU3RhcnQgc2lnbmFsICovCj4rCXN3STJDU3RhcnQoKTsK PisKPisJLyogU2VuZCB0aGUgZGV2aWNlIGFkZHJlc3MgYW5kIHJlYWQgdGhlIGRhdGEuIEFsbCBz aG91bGQgcmV0dXJuIHN1Y2Nlc3MKPisJICAgaW4gb3JkZXIgZm9yIHRoZSB3cml0aW5nIHByb2Nl c3NlZCB0byBiZSBzdWNjZXNzZnVsCj4rCSAgICovCj4rCWlmICgoc3dJMkNXcml0ZUJ5dGUoZGV2 aWNlQWRkcmVzcykgIT0gMCkgfHwKPisJCQkoc3dJMkNXcml0ZUJ5dGUocmVnaXN0ZXJJbmRleCkg IT0gMCkgfHwKPisJCQkoc3dJMkNXcml0ZUJ5dGUoZGF0YSkgIT0gMCkpIHsKPisJCXJldHVyblZh bHVlID0gLTE7Cj4rCX0KPisKPisJLyogU3RvcCBpMmMgYW5kIHJlbGVhc2UgdGhlIGJ1cyAqLwo+ Kwlzd0kyQ1N0b3AoKTsKPisKPisJcmV0dXJuIHJldHVyblZhbHVlOwo+K30KPmRpZmYgLS1naXQg YS9kcml2ZXJzL3ZpZGVvL2x5bnhmYi9kZGs3NTBfc3dpMmMuaCBiL2RyaXZlcnMvdmlkZW8vbHlu eGZiL2Rkazc1MF9zd2kyYy5oCj5uZXcgZmlsZSBtb2RlIDEwMDY0NAo+aW5kZXggMDAwMDAwMC4u Y2Y0Mjc1Mwo+LS0tIC9kZXYvbnVsbAo+KysrIGIvZHJpdmVycy92aWRlby9seW54ZmIvZGRrNzUw X3N3aTJjLmgKPkBAIC0wLDAgKzEsOTggQEAKPisvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgo+KypDb3B5cmlnaHQgKGMp IDIwMTIgYnkgU2lsaWNvbiBNb3Rpb24sIEluYy4gKFNNSSkKPisqUGVybWlzc2lvbiBpcyBoZXJl YnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29w eQo+KypvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMg KHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAo+KyppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0 cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCj4rKnVz ZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwg YW5kL29yIHNlbGwgY29waWVzCj4rKm9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJz b25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0bwo+KypkbyBzbywgc3ViamVj dCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4rKgo+KypUSEUgU09GVFdBUkUgSVMgUFJP VklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKPisqRVhQUkVTUyBP UiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCj4r Kk9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5E Cj4rKk5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIE1pbGwuQ2hlbiBhbmQgTW9u ay5MaXUgT1IgQ09QWVJJR0hUCj4rKkhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERB TUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAo+KypXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05U UkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPisqRlJPTSwgT1VUIE9GIE9SIElOIENP Tk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgo+KypPVEhFUiBERUFMSU5H UyBJTiBUSEUgU09GVFdBUkUuCj4rKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KPisjaWZuZGVmIF9TV0kyQ19IXwo+KyNk ZWZpbmUgX1NXSTJDX0hfCj4rCj4rLyogRGVmYXVsdCBpMmMgQ0xLIGFuZCBEYXRhIEdQSU8uIFRo ZXNlIGFyZSB0aGUgZGVmYXVsdCBpMmMgcGlucyAqLwo+KyNkZWZpbmUgREVGQVVMVF9JMkNfU0NM ICAgICAgICAgICAgICAgICAgICAgMzAKPisjZGVmaW5lIERFRkFVTFRfSTJDX1NEQSAgICAgICAg ICAgICAgICAgICAgIDMxCj4rCj4rLyoKPisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRo ZSBpMmMgYXR0cmlidXRlcyBhbmQgYnVzCj4rICoKPisgKiBQYXJhbWV0ZXJzOgo+KyAqICAgICAg aTJjQ2xrR1BJTyAgLSBUaGUgR1BJTyBwaW4gdG8gYmUgdXNlZCBhcyBpMmMgU0NMCj4rICogICAg ICBpMmNEYXRhR1BJTyAtIFRoZSBHUElPIHBpbiB0byBiZSB1c2VkIGFzIGkyYyBTREEKPisgKgo+ KyAqIFJldHVybiBWYWx1ZToKPisgKiAgICAgIC0xICAgLSBGYWlsIHRvIGluaXRpYWxpemUgdGhl IGkyYwo+KyAqICAgICAgIDAgICAtIFN1Y2Nlc3MKPisgKi8KPitsb25nIHN3STJDSW5pdCgKPisg ICAgdW5zaWduZWQgY2hhciBpMmNDbGtHUElPLAo+KyAgICB1bnNpZ25lZCBjaGFyIGkyY0RhdGFH UElPCj4rKTsKPisKPisvKgo+KyAqICBUaGlzIGZ1bmN0aW9uIHJlYWRzIHRoZSBzbGF2ZSBkZXZp Y2UncyByZWdpc3Rlcgo+KyAqCj4rICogIFBhcmFtZXRlcnM6Cj4rICogICAgICBkZXZpY2VBZGRy ZXNzICAgLSBpMmMgU2xhdmUgZGV2aWNlIGFkZHJlc3Mgd2hpY2ggcmVnaXN0ZXIKPisgKiAgICAg ICAgICAgICAgICAgICAgICAgIHRvIGJlIHJlYWQgZnJvbQo+KyAqICAgICAgcmVnaXN0ZXJJbmRl eCAgIC0gU2xhdmUgZGV2aWNlJ3MgcmVnaXN0ZXIgdG8gYmUgcmVhZAo+KyAqCj4rICogIFJldHVy biBWYWx1ZToKPisgKiAgICAgIFJlZ2lzdGVyIHZhbHVlCj4rICovCj4rdW5zaWduZWQgY2hhciBz d0kyQ1JlYWRSZWcoCj4rICAgIHVuc2lnbmVkIGNoYXIgZGV2aWNlQWRkcmVzcywKPisgICAgdW5z aWduZWQgY2hhciByZWdpc3RlckluZGV4Cj4rKTsKPisKPisvKgo+KyAqICBUaGlzIGZ1bmN0aW9u IHdyaXRlcyBhIHZhbHVlIHRvIHRoZSBzbGF2ZSBkZXZpY2UncyByZWdpc3Rlcgo+KyAqCj4rICog IFBhcmFtZXRlcnM6Cj4rICogICAgICBkZXZpY2VBZGRyZXNzICAgLSBpMmMgU2xhdmUgZGV2aWNl IGFkZHJlc3Mgd2hpY2ggcmVnaXN0ZXIKPisgKiAgICAgICAgICAgICAgICAgICAgICAgIHRvIGJl IHdyaXR0ZW4KPisgKiAgICAgIHJlZ2lzdGVySW5kZXggICAtIFNsYXZlIGRldmljZSdzIHJlZ2lz dGVyIHRvIGJlIHdyaXR0ZW4KPisgKiAgICAgIGRhdGEgICAgICAgICAgICAtIERhdGEgdG8gYmUg d3JpdHRlbiB0byB0aGUgcmVnaXN0ZXIKPisgKgo+KyAqICBSZXN1bHQ6Cj4rICogICAgICAgICAg MCAgIC0gU3VjY2Vzcwo+KyAqICAgICAgICAgLTEgICAtIEZhaWwKPisgKi8KPitsb25nIHN3STJD V3JpdGVSZWcoCj4rICAgIHVuc2lnbmVkIGNoYXIgZGV2aWNlQWRkcmVzcywKPisgICAgdW5zaWdu ZWQgY2hhciByZWdpc3RlckluZGV4LAo+KyAgICB1bnNpZ25lZCBjaGFyIGRhdGEKPispOwo+Kwo+ Ky8qCj4rICogIFRoZXNlIHR3byBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gdG9nZ2xlIHRoZSBkYXRh IG9uIHRoZSBTQ0wgYW5kIFNEQSBJMkMgbGluZXMuCj4rICogIFRoZSB1c2VkIG9mIHRoZXNlIHR3 byBmdW5jdGlvbnMgYXJlIG5vdCByZWNvbW1lbmRlZCB1bmxlc3MgaXQgaXMgbmVjZXNzYXJ5Lgo+ KyAqLwo+Kwo+Ky8qCj4rICogIFRoaXMgZnVuY3Rpb24gc2V0L3Jlc2V0IHRoZSBTQ0wgR1BJTyBw aW4KPisgKgo+KyAqICBQYXJhbWV0ZXJzOgo+KyAqICAgICAgdmFsdWUJLSBCaXQgdmFsdWUgdG8g c2V0IHRvIHRoZSBTQ0wgb3IgU0RBICgwID0gbG93LCAxID0gaGlnaCkKPisgKi8KPit2b2lkIHN3 STJDU0NMKHVuc2lnbmVkIGNoYXIgdmFsdWUpOwo+Kwo+Ky8qCj4rICogIFRoaXMgZnVuY3Rpb24g c2V0L3Jlc2V0IHRoZSBTREEgR1BJTyBwaW4KPisgKgo+KyAqICBQYXJhbWV0ZXJzOgo+KyAqICAg ICAgdmFsdWUJLSBCaXQgdmFsdWUgdG8gc2V0IHRvIHRoZSBTQ0wgb3IgU0RBICgwID0gbG93LCAx ID0gaGlnaCkKPisgKi8KPit2b2lkIHN3STJDU0RBKHVuc2lnbmVkIGNoYXIgdmFsdWUpOwo+Kwo+ KyNlbmRpZiAgLyogX1NXSTJDX0hfICovCj5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9seW54 ZmIvbHlueF9hY2NlbC5jIGIvZHJpdmVycy92aWRlby9seW54ZmIvbHlueF9hY2NlbC5jCj5uZXcg ZmlsZSBtb2RlIDEwMDY0NAo+aW5kZXggMDAwMDAwMC4uODQ0ZjkwZQo+LS0tIC9kZXYvbnVsbAo+ KysrIGIvZHJpdmVycy92aWRlby9seW54ZmIvbHlueF9hY2NlbC5jCj5AQCAtMCwwICsxLDQxNyBA QAo+Ky8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqCj4rKkNvcHlyaWdodCAoYykgMjAxMiBieSBTaWxpY29uIE1vdGlvbiwg SW5jLiAoU01JKQo+KypQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJn ZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cj4rKm9mIHRoaXMgc29mdHdhcmUgYW5k IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFs Cj4rKmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91 dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8KPisqdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBw dWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMKPisqb2Yg dGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUg aXMgZnVybmlzaGVkIHRvCj4rKmRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9uczoKPisqCj4rKlRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdB UlJBTlRZIE9GIEFOWSBLSU5ELAo+KypFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQg Tk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMKPisqT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKPisqTk9OSU5GUklOR0VNRU5ULiAgSU4g Tk8gRVZFTlQgU0hBTEwgTWlsbC5DaGVuIGFuZCBNb25rLkxpdSBPUiBDT1BZUklHSFQKPisqSE9M REVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFks Cj4rKldIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwg QVJJU0lORwo+KypGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FS RSBPUiBUSEUgVVNFIE9SCj4rKk9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KPisqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqLwo+KyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+Cj4rI2lmIExJTlVYX1ZFUlNJT05f Q09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDEwKQo+KyNpbmNsdWRlIDxsaW51eC9jb25maWcu aD4KPisjZW5kaWYKPisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4rI2luY2x1ZGUgPGxpbnV4 L2tlcm5lbC5oPgo+KyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgo+KyNpbmNsdWRlIDxsaW51eC9z dHJpbmcuaD4KPisjaW5jbHVkZSA8bGludXgvbW0uaD4KPisjaW5jbHVkZSA8bGludXgvc2xhYi5o Pgo+KyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgo+KyNpbmNsdWRlIDxsaW51eC9mYi5oPgo+KyNp bmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KPisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgo+KyNpbmNs dWRlIDxsaW51eC9wY2kuaD4KPisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgo+KyNpbmNsdWRl IDxsaW51eC9wYWdlbWFwLmg+Cj4rI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KPisjaWYgTElO VVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDEwKQo+Ky8qIG5vIGJlbG93 IHR3byBoZWFkZXIgZmlsZXMgaW4gMi42LjkgKi8KPisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1f ZGV2aWNlLmg+Cj4rI2luY2x1ZGUgPGxpbnV4L3NjcmVlbl9pbmZvLmg+Cj4rI2Vsc2UKPisvKiBu b3RoaW5nIGJ5IGZhciAqLwo+KyNlbmRpZgo+Kwo+KyNpbmNsdWRlICJseW54X2Rydi5oIgo+KyNp bmNsdWRlICJseW54X2FjY2VsLmgiCj4rI2luY2x1ZGUgImx5bnhfaGVscC5oIgo+K3N0YXRpYyBp bmxpbmUgdm9pZCB3cml0ZV9kcHIoc3RydWN0IGx5bnhfYWNjZWwgKmFjY2VsLCBpbnQgb2Zmc2V0 LCB1MzIgcmVnVmFsdWUpCj4rewo+Kwl3cml0ZWwocmVnVmFsdWUsIGFjY2VsLT5kcHJCYXNlICsg b2Zmc2V0KTsKPit9Cj4rCj4rc3RhdGljIGlubGluZSB1MzIgcmVhZF9kcHIoc3RydWN0IGx5bnhf YWNjZWwgKmFjY2VsLCBpbnQgb2Zmc2V0KQo+K3sKPisJcmV0dXJuIHJlYWRsKGFjY2VsLT5kcHJC YXNlICsgb2Zmc2V0KTsKPit9Cj4rCj4rc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX2RwUG9ydChz dHJ1Y3QgbHlueF9hY2NlbCAqYWNjZWwsIHUzMiBkYXRhKQo+K3sKPisJd3JpdGVsKGRhdGEsIGFj Y2VsLT5kcFBvcnRCYXNlKTsKPit9Cj4rCj4rdm9pZCBod19kZV9pbml0KHN0cnVjdCBseW54X2Fj Y2VsICphY2NlbCkKPit7Cj4rCS8qIHNldHVwIDJkIGVuZ2luZSByZWdpc3RlcnMgKi8KPisJdTMy IHJlZywgY2xyOwo+KwlFTlRFUigpOwo+Kwl3cml0ZV9kcHIoYWNjZWwsIERFX01BU0tTLCAweEZG RkZGRkZGKTsKPisKPisJLyogZHByMWMgKi8KPisJcmVnID0gKH4oMSA8PCBERV9TVFJFVENIX0ZP Uk1BVF9QQVRURVJOX1hZX0xTQikpJgo+KwkJKH4oMSA8PCBERV9TVFJFVENIX0ZPUk1BVF9QQVRU RVJOX1lfTFNCKSkmCj4rCQkofigxIDw8IERFX1NUUkVUQ0hfRk9STUFUX1BBVFRFUk5fWF9MU0Ip KSYKPisJCSh+KDE1IDw8IERFX1NUUkVUQ0hfRk9STUFUX0FERFJFU1NJTkdfTFNCKSl8Cj4rCQko MyA8PCBERV9TVFJFVENIX0ZPUk1BVF9TT1VSQ0VfSEVJR0hUX0xTQik7Cj4rCj4rCWNsciAmPSAo figxIDw8IERFX1NUUkVUQ0hfRk9STUFUX1BBVFRFUk5fWFlfTFNCKSkmCj4rCQkofig3IDw8IERF X1NUUkVUQ0hfRk9STUFUX1BBVFRFUk5fWV9MU0IpKSYKPisJCSh+KDcgPDwgREVfU1RSRVRDSF9G T1JNQVRfUEFUVEVSTl9YX0xTQikpJgo+KwkJKH4oMTUgPDwgREVfU1RSRVRDSF9GT1JNQVRfQURE UkVTU0lOR19MU0IpKSYKPisJCSh+KDB4RkZGIDw8IERFX1NUUkVUQ0hfRk9STUFUX1NPVVJDRV9I RUlHSFRfTFNCKSk7Cj4rCj4rCS8qIERFX1NUUkVUQ0ggYnBwIGZvcm1hdCBuZWVkIGJlIGluaXRp bGl6ZWQgaW4gc2V0TW9kZSByb3V0aW5lICovCj4rCXdyaXRlX2RwcihhY2NlbCwgREVfU1RSRVRD SF9GT1JNQVQsIChyZWFkX2RwcihhY2NlbCwgREVfU1RSRVRDSF9GT1JNQVQpICYgY2xyKSB8IHJl Zyk7Cj4rCj4rCS8qIGRpc2FibGUgY2xpcHBpbmcgYW5kIHRyYW5zcGFyZW50ICovCj4rCXdyaXRl X2RwcihhY2NlbCwgREVfQ0xJUF9UTCwgMCk7Cj4rCXdyaXRlX2RwcihhY2NlbCwgREVfQ0xJUF9C UiwgMCk7Cj4rCj4rCXdyaXRlX2RwcihhY2NlbCwgREVfQ09MT1JfQ09NUEFSRV9NQVNLLCAwKTsK PisJd3JpdGVfZHByKGFjY2VsLCBERV9DT0xPUl9DT01QQVJFLCAwKTsKPisKPisJcmVnID0gKH4o MSA8PCBERV9DT05UUk9MX1RSQU5TUEFSRU5DWV9MU0IpKSYKPisJCSh+KDEgPDwgREVfQ09OVFJP TF9UUkFOU1BBUkVOQ1lfTUFUQ0hfTFNCKSkmCj4rCQkofigxIDw8IERFX0NPTlRST0xfVFJBTlNQ QVJFTkNZX1NFTEVDVF9MU0IpKTsKPisKPisJY2xyID0gKH4oMSA8PCBERV9DT05UUk9MX1RSQU5T UEFSRU5DWV9MU0IpKSYKPisJCSh+KDEgPDwgREVfQ09OVFJPTF9UUkFOU1BBUkVOQ1lfTUFUQ0hf TFNCKSkmCj4rCQkofigxIDw8IERFX0NPTlRST0xfVFJBTlNQQVJFTkNZX1NFTEVDVF9MU0IpKTsK PisKPisJLyogZHByMGMgKi8KPisJd3JpdGVfZHByKGFjY2VsLCBERV9DT05UUk9MLCAocmVhZF9k cHIoYWNjZWwsIERFX0NPTlRST0wpJmNscil8cmVnKTsKPisJTEVBVkUoKTsKPit9Cj4rCj4rLyog c2V0MmRmb3JtYXQgb25seSBiZSBjYWxsZWQgZnJvbSBzZXRtb2RlIGZ1bmN0aW9ucwo+KyAqIGJ1 dCBpZiB5b3UgbmVlZCBkdWFsIGZyYW1lYnVmZmVyIGRyaXZlciwgbmVlZCBjYWxsIHNldDJkZm9y bWF0Cj4rICogZXZlcnkgdGltZSB5b3UgdXNlIDJkIGZ1bmN0aW9uICovCj4rCj4rdm9pZCBod19z ZXQyZGZvcm1hdChzdHJ1Y3QgbHlueF9hY2NlbCAqYWNjZWwsIGludCBmbXQpCj4rewo+Kwl1MzIg cmVnOwo+KwlFTlRFUigpOwo+KwkvKiBmbXQ9MCwgMSwgMiBmb3IgOCwgMTYsIDMyLCBicHAgb24g c203MTgvNzUwLzUwMiAqLwo+KwlyZWcgPSByZWFkX2RwcihhY2NlbCwgREVfU1RSRVRDSF9GT1JN QVQpOwo+KwlyZWcgJj0gKH4oMyA8PCBERV9TVFJFVENIX0ZPUk1BVF9QSVhFTF9GT1JNQVRfTFNC KSk7Cj4rCXJlZyB8PSBmbXQgPDwgREVfU1RSRVRDSF9GT1JNQVRfUElYRUxfRk9STUFUX0xTQjsK PisJd3JpdGVfZHByKGFjY2VsLCBERV9TVFJFVENIX0ZPUk1BVCwgcmVnKTsKPisJTEVBVkUoKTsK Pit9Cj4rCj4raW50IGh3X2ZpbGxyZWN0KHN0cnVjdCBseW54X2FjY2VsICphY2NlbCwKPisJCXUz MiBiYXNlLCB1MzIgcGl0Y2gsIHUzMiBCcHAsCj4rCQl1MzIgeCwgdTMyIHksIHUzMiB3aWR0aCwg dTMyIGhlaWdodCwKPisJCXUzMiBjb2xvciwgdTMyIHJvcCkKPit7Cj4rCXUzMiBkZUN0cmw7Cj4r Cj4rCWlmIChhY2NlbC0+ZGVfd2FpdCgpICE9IDApIHsKPisJCS8qIGludCB0aW1lIHdhaXQgYW5k IGFsd2F5cyBidXN5LCBzZWVtcyBoYXJkd2FyZQo+KwkJICogZ290IHNvbWV0aGluZyBlcnJvciAq Lwo+KwkJZGJnX21zZygiJXM6RGUgZW5naW5lIGFsd2F5cyBidXNzeVxuIiwgX19mdW5jX18pOwo+ KwkJcmV0dXJuIC0xOwo+Kwl9Cj4rCj4rCXdyaXRlX2RwcihhY2NlbCwgREVfV0lORE9XX0RFU1RJ TkFUSU9OX0JBU0UsIGJhc2UpOwo+Kwl3cml0ZV9kcHIoYWNjZWwsIERFX1BJVENILAo+KwkJCShw aXRjaC9CcHAgPDwgREVfUElUQ0hfREVTVElOQVRJT05fTFNCKXwKPisJCQkocGl0Y2gvQnBwIDw8 IERFX1BJVENIX1NPVVJDRV9MU0IpKTsKPisKPisJd3JpdGVfZHByKGFjY2VsLCBERV9XSU5ET1df V0lEVEgsCj4rCQkJKHBpdGNoL0JwcCA8PCBERV9XSU5ET1dfV0lEVEhfREVTVElOQVRJT05fTFNC KXwKPisJCQkocGl0Y2gvQnBwIDw8IERFX1dJTkRPV19XSURUSF9TT1VSQ0VfTFNCKSk7Cj4rCXdy aXRlX2RwcihhY2NlbCwgREVfRk9SRUdST1VORCwgY29sb3IpOwo+Kwo+Kwl3cml0ZV9kcHIoYWNj ZWwsIERFX0RFU1RJTkFUSU9OLCAoeCA8PCBERV9ERVNUSU5BVElPTl9YX0xTQil8Cj4rCQkJKHkg PDwgREVfREVTVElOQVRJT05fWV9MU0IpKTsKPisKPisJd3JpdGVfZHByKGFjY2VsLCBERV9ESU1F TlNJT04sCj4rCQkJKHdpZHRoIDw8IERFX0RJTUVOU0lPTl9YX0xTQil8Cj4rCQkJKGhlaWdodCA8 PCBERV9ESU1FTlNJT05fWV9FVF9MU0IpKTsKPisKPisJZGVDdHJsIHw9Cj4rCQkoMSA8PCBERV9D T05UUk9MX1NUQVRVU19MU0IpJgo+KwkJKH4oMSA8PCBERV9DT05UUk9MX0RJUkVDVElPTl9MU0Ip KXwKPisJCSgxIDw8IERFX0NPTlRST0xfTEFTVF9QSVhFTF9MU0IpfAo+KwkJKDEgPDwgREVfQ09O VFJPTF9DT01NQU5EX0xTQil8Cj4rCQkoMSA8PCBERV9DT05UUk9MX1JPUF9TRUxFQ1RfTFNCKXwK PisJCShyb3AgPDwgREVfQ09OVFJPTF9ST1BfTFNCKTsKPisJd3JpdGVfZHByKGFjY2VsLCBERV9D T05UUk9MLCBkZUN0cmwpOwo+KwlyZXR1cm4gMDsKPit9Cj4rCj4raW50IGh3X2NvcHlhcmVhKAo+ KwkJc3RydWN0IGx5bnhfYWNjZWwgKmFjY2VsLAo+KwkJdW5zaWduZWQgaW50IHNCYXNlLCAvKiBB ZGRyZXNzIG9mIHNvdXJjZTogb2Zmc2V0IGluIGZyYW1lIGJ1ZmZlciAqLwo+KwkJdW5zaWduZWQg aW50IHNQaXRjaCwgLyogUGl0Y2ggdmFsdWUgb2Ygc291cmNlIHN1cmZhY2UgaW4gQllURSAqLwo+ KwkJdW5zaWduZWQgaW50IHN4LAo+KwkJdW5zaWduZWQgaW50IHN5LCAvKiBTdGFydGluZyBjb29y ZGluYXRlIG9mIHNvdXJjZSBzdXJmYWNlICovCj4rCQl1bnNpZ25lZCBpbnQgZEJhc2UsIC8qIEFk ZHJlc3Mgb2YgZGVzdGluYXRpb246IG9mZnNldCBpbiBmcmFtZSBidWZmZXIgKi8KPisJCXVuc2ln bmVkIGludCBkUGl0Y2gsIC8qIFBpdGNoIHZhbHVlIG9mIGRlc3RpbmF0aW9uIHN1cmZhY2UgaW4g QllURSAqLwo+KwkJdW5zaWduZWQgaW50IEJwcCwgLyogQ29sb3IgZGVwdGggb2YgZGVzdGluYXRp b24gc3VyZmFjZSAqLwo+KwkJdW5zaWduZWQgaW50IGR4LAo+KwkJdW5zaWduZWQgaW50IGR5LCAv KiBTdGFydGluZyBjb29yZGluYXRlIG9mIGRlc3RpbmF0aW9uIHN1cmZhY2UgKi8KPisJCXVuc2ln bmVkIGludCB3aWR0aCwKPisJCXVuc2lnbmVkIGludCBoZWlnaHQsIC8qIHdpZHRoIGFuZCBoZWln aHQgb2YgcmVjdGFuZ2xlIGluIHBpeGVsIHZhbHVlICovCj4rCQl1bnNpZ25lZCBpbnQgcm9wMikg ICAvKiBST1AgdmFsdWUgKi8KPit7Cj4rCXVuc2lnbmVkIGludCBuRGlyZWN0aW9uLCBkZV9jdHJs Owo+KwlpbnQgb3BTaWduOwo+KwluRGlyZWN0aW9uID0gTEVGVF9UT19SSUdIVDsKPisJLyogRGly ZWN0aW9uIG9mIFJPUDIgb3BlcmF0aW9uOiAxID0gTGVmdCB0byBSaWdodCwgKC0xKSA9IFJpZ2h0 IHRvIExlZnQgKi8KPisJb3BTaWduID0gMTsKPisJZGVfY3RybCA9IDA7Cj4rCj4rCS8qIElmIHNv dXJjZSBhbmQgZGVzdGluYXRpb24gYXJlIHRoZSBzYW1lIHN1cmZhY2UsIG5lZWQgdG8gY2hlY2sg Zm9yIG92ZXJsYXkgY2FzZXMgKi8KPisJaWYgKHNCYXNlID09IGRCYXNlICYmIHNQaXRjaCA9PSBk UGl0Y2gpIHsKPisKPisJCS8qIERldGVybWluZSBkaXJlY3Rpb24gb2Ygb3BlcmF0aW9uICovCj4r CQlpZiAoc3kgPCBkeSkgewo+Kwo+KwkJCS8qICstLS0tLS0tLS0tKwo+KwkJCSAgIHxTICAgICAg ICAgfAo+KwkJCSAgIHwgICArLS0tLS0tLS0tLSsKPisJCQkgICB8ICAgfCAgICAgIHwgICB8Cj4r CQkJICAgfCAgIHwgICAgICB8ICAgfAo+KwkJCSAgICstLS18LS0tLS0tKyAgIHwKPisJCQkgICB8 ICAgICAgICAgRHwKPisJCQkgICArLS0tLS0tLS0tLSsgKi8KPisKPisJCQluRGlyZWN0aW9uID0g Qk9UVE9NX1RPX1RPUDsKPisJCX0gZWxzZSBpZiAoc3kgPiBkeSkJewo+Kwo+KwkJCS8qICstLS0t LS0tLS0tKwo+KwkJCSAgIHxEICAgICAgICAgfAo+KwkJCSAgIHwgICArLS0tLS0tLS0tLSsKPisJ CQkgICB8ICAgfCAgICAgIHwgICB8Cj4rCQkJICAgfCAgIHwgICAgICB8ICAgfAo+KwkJCSAgICst LS18LS0tLS0tKyAgIHwKPisJCQkgICB8ICAgICAgICAgU3wKPisJCQkgICArLS0tLS0tLS0tLSsg Ki8KPisKPisJCQluRGlyZWN0aW9uID0gVE9QX1RPX0JPVFRPTTsKPisJCX0gZWxzZXsKPisKPisJ CQkvKiBzeSA9PSBkeSAqLwo+Kwo+KwkJCWlmIChzeCA8PSBkeCkgewo+Kwo+KwkJCQkvKiArLS0t LS0tKy0tLSstLS0tLS0rCj4rCQkJCSAgIHxTICAgICB8ICAgfCAgICAgRHwKPisJCQkJICAgfCAg ICAgIHwgICB8ICAgICAgfAo+KwkJCQkgICB8ICAgICAgfCAgIHwgICAgICB8Cj4rCQkJCSAgIHwg ICAgICB8ICAgfCAgICAgIHwKPisJCQkJICAgKy0tLS0tLSstLS0rLS0tLS0tKyAqLwo+Kwo+KwkJ CQluRGlyZWN0aW9uID0gUklHSFRfVE9fTEVGVDsKPisJCQl9IGVsc2V7Cj4rCj4rCQkJCS8qIHN4 ID4gZHggKi8KPisKPisJCQkJLyogKy0tLS0tLSstLS0rLS0tLS0tKwo+KwkJCQkgICB8RCAgICAg fCAgIHwgICAgIFN8Cj4rCQkJCSAgIHwgICAgICB8ICAgfCAgICAgIHwKPisJCQkJICAgfCAgICAg IHwgICB8ICAgICAgfAo+KwkJCQkgICB8ICAgICAgfCAgIHwgICAgICB8Cj4rCQkJCSAgICstLS0t LS0rLS0tKy0tLS0tLSsgKi8KPisKPisJCQkJbkRpcmVjdGlvbiA9IExFRlRfVE9fUklHSFQ7Cj4r CQkJfQo+KwkJfQo+Kwl9Cj4rCj4rCWlmICgobkRpcmVjdGlvbiA9PSBCT1RUT01fVE9fVE9QKSB8 fCAobkRpcmVjdGlvbiA9PSBSSUdIVF9UT19MRUZUKSkgewo+Kwo+KwkJc3ggKz0gd2lkdGggLSAx Owo+KwkJc3kgKz0gaGVpZ2h0IC0gMTsKPisJCWR4ICs9IHdpZHRoIC0gMTsKPisJCWR5ICs9IGhl aWdodCAtIDE7Cj4rCQlvcFNpZ24gPSAoLTEpOwo+Kwl9Cj4rCj4rCS8qIE5vdGU6Cj4rCSAgIERF X0ZPUkVHUk9VTkQgYXJlIERFX0JBQ0tHUk9VTkQgYXJlIGRvbid0IGNhcmUuCj4rCSAgIERFX0NP TE9SX0NPTVBBUkUgYW5kIERFX0NPTE9SX0NPTVBBUkVfTUFLUyBhcmUgc2V0IGJ5IHNldCBkZVNl dFRyYW5zcGFyZW5jeSgpLgo+KwkgICAqLwo+Kwo+KwkvKiAyRCBTb3VyY2UgQmFzZS4KPisJICAg SXQgaXMgYW4gYWRkcmVzcyBvZmZzZXQgKDEyOCBiaXQgYWxpZ25lZCkgZnJvbSB0aGUgYmVnaW5u aW5nIG9mIGZyYW1lIGJ1ZmZlci4KPisJICAgKi8KPisJd3JpdGVfZHByKGFjY2VsLCBERV9XSU5E T1dfU09VUkNFX0JBU0UsIHNCYXNlKTsKPisKPisJLyogMkQgRGVzdGluYXRpb24gQmFzZS4KPisJ ICAgSXQgaXMgYW4gYWRkcmVzcyBvZmZzZXQgKDEyOCBiaXQgYWxpZ25lZCkgZnJvbSB0aGUgYmVn aW5uaW5nIG9mIGZyYW1lIGJ1ZmZlci4KPisJICAgKi8KPisJd3JpdGVfZHByKGFjY2VsLCBERV9X SU5ET1dfREVTVElOQVRJT05fQkFTRSwgZEJhc2UpOwo+Kwo+Kwo+Kwl7Cj4rCQl3cml0ZV9kcHIo YWNjZWwsIERFX1BJVENILAo+KwkJCQkoKGRQaXRjaC9CcHApIDw8IERFX1BJVENIX0RFU1RJTkFU SU9OX0xTQikgfAo+KwkJCQkoKHNQaXRjaC9CcHApIDw8IERFX1BJVENIX1NPVVJDRV9MU0IpKTsK PisJfQo+Kwo+KwkvKiBTY3JlZW4gV2luZG93IHdpZHRoIGluIFBpeGVscy4KPisJICAgMkQgZW5n aW5lIHVzZXMgdGhpcyB2YWx1ZSB0byBjYWxjdWxhdGUgdGhlIGxpbmVhciBhZGRyZXNzIGluIGZy YW1lIGJ1ZmZlciBmb3IgYSBnaXZlbiBwb2ludC4KPisJICAgKi8KPisJd3JpdGVfZHByKGFjY2Vs LCBERV9XSU5ET1dfV0lEVEgsCj4rCQkJKChkUGl0Y2gvQnBwKSA8PCBERV9XSU5ET1dfV0lEVEhf REVTVElOQVRJT05fTFNCKSB8Cj4rCQkJKChzUGl0Y2gvQnBwKSA8PCBERV9XSU5ET1dfV0lEVEhf U09VUkNFX0xTQikpOwo+Kwo+KwlpZiAoYWNjZWwtPmRlX3dhaXQoKSAhPSAwKSB7Cj4rCQlyZXR1 cm4gLTE7Cj4rCX0KPisKPisJewo+KwkJd3JpdGVfZHByKGFjY2VsLCBERV9TT1VSQ0UsICh+KDEg PDwgREVfU09VUkNFX1dSQVBfTFNCKSkmCj4rCQkJCShzeCA8PCBERV9TT1VSQ0VfWF9LMV9MU0Ip fAo+KwkJCQkoc3kgPDwgREVfU09VUkNFX1lfSzJfTFNCKSk7Cj4rCj4rCQl3cml0ZV9kcHIoYWNj ZWwsIERFX0RFU1RJTkFUSU9OLCAoZHggPDwgREVfREVTVElOQVRJT05fWF9MU0IpfAo+KwkJCQko ZHkgPDwgREVfREVTVElOQVRJT05fWV9MU0IpKTsKPisKPisJCXdyaXRlX2RwcihhY2NlbCwgREVf RElNRU5TSU9OLAo+KwkJCQkod2lkdGggPDwgREVfRElNRU5TSU9OX1hfTFNCKXwKPisJCQkJKGhl aWdodCA8PCBERV9ESU1FTlNJT05fWV9FVF9MU0IpKTsKPisKPisJCWRlX2N0cmwgPSAocm9wMiA8 PCBERV9DT05UUk9MX1JPUF9MU0IpfAo+KwkJCSgxIDw8IERFX0NPTlRST0xfUk9QX1NFTEVDVF9M U0IpJgo+KwkJCSh+KDB4MWYgPDwgREVfQ09OVFJPTF9DT01NQU5EX0xTQikpfAo+KwkJCSgxIDw8 IERFX0NPTlRST0xfU1RBVFVTX0xTQik7Cj4rCj4rCQlpZiAobkRpcmVjdGlvbiA9PSBSSUdIVF9U T19MRUZUKQo+KwkJCWRlX2N0cmwgfD0gMSA8PCBERV9DT05UUk9MX0RJUkVDVElPTl9MU0I7Cj4r CQllbHNlCj4rCQkJZGVfY3RybCAmPSB+KDEgPDwgREVfQ09OVFJPTF9ESVJFQ1RJT05fTFNCKTsK PisKPisJCXdyaXRlX2RwcihhY2NlbCwgREVfQ09OVFJPTCwgZGVfY3RybCk7Cj4rCX0KPisKPisJ cmV0dXJuIDA7Cj4rfQo+Kwo+K3N0YXRpYyB1bnNpZ25lZCBpbnQgZGVHZXRUcmFuc3BhcmVuY3ko c3RydWN0IGx5bnhfYWNjZWwgKmFjY2VsKQo+K3sKPisJdW5zaWduZWQgaW50IGRlX2N0cmw7Cj4r Cj4rCWRlX2N0cmwgPSByZWFkX2RwcihhY2NlbCwgREVfQ09OVFJPTCk7Cj4rCWRlX2N0cmwgJj0K PisJCSgxIDw8IERFX0NPTlRST0xfVFJBTlNQQVJFTkNZX01BVENIX0xTQikgfAo+KwkJKDEgPDwg REVfQ09OVFJPTF9UUkFOU1BBUkVOQ1lfU0VMRUNUX0xTQil8Cj4rCQkoMSA8PCBERV9DT05UUk9M X1RSQU5TUEFSRU5DWV9MU0IpOwo+KwlyZXR1cm4gZGVfY3RybDsKPit9Cj4rCj4raW50IGh3X2lt YWdlYmxpdCgKPisJCXN0cnVjdCBseW54X2FjY2VsICphY2NlbCwKPisJCXVuc2lnbmVkIGNoYXIg KnBTcmNidWYsIC8qIHBvaW50ZXIgdG8gc3RhcnQgb2Ygc291cmNlIGJ1ZmZlciBpbiBzeXN0ZW0g bWVtb3J5ICovCj4rCQlpbnQgc3JjRGVsdGEsIC8qIFBpdGNoIHZhbHVlIChpbiBieXRlcykgb2Yg dGhlIHNvdXJjZSBidWZmZXIsICtpdmUgbWVhbnMgdG9wIGRvd24gYW5kIC1pdmUgbWVhbiBidXR0 b24gdXAgKi8KPisJCXVuc2lnbmVkIGludCBzdGFydEJpdCwgLyogTW9ubyBkYXRhIGNhbiBzdGFy dCBhdCBhbnkgYml0IGluIGEgYnl0ZSwgdGhpcyB2YWx1ZSBzaG91bGQgYmUgMCB0byA3ICovCj4r CQl1bnNpZ25lZCBpbnQgZEJhc2UsIC8qIEFkZHJlc3Mgb2YgZGVzdGluYXRpb246IG9mZnNldCBp biBmcmFtZSBidWZmZXIgKi8KPisJCXVuc2lnbmVkIGludCBkUGl0Y2gsIC8qIFBpdGNoIHZhbHVl IG9mIGRlc3RpbmF0aW9uIHN1cmZhY2UgaW4gQllURSAqLwo+KwkJdW5zaWduZWQgaW50IGJ5dGVQ ZXJQaXhlbCwgLyogQ29sb3IgZGVwdGggb2YgZGVzdGluYXRpb24gc3VyZmFjZSAqLwo+KwkJdW5z aWduZWQgaW50IGR4LAo+KwkJdW5zaWduZWQgaW50IGR5LCAvKiBTdGFydGluZyBjb29yZGluYXRl IG9mIGRlc3RpbmF0aW9uIHN1cmZhY2UgKi8KPisJCXVuc2lnbmVkIGludCB3aWR0aCwKPisJCXVu c2lnbmVkIGludCBoZWlnaHQsIC8qIHdpZHRoIGFuZCBoZWlnaHQgb2YgcmVjdGFuZ2UgaW4gcGl4 ZWwgdmFsdWUgKi8KPisJCXVuc2lnbmVkIGludCBmQ29sb3IsIC8qIEZvcmVncm91bmQgY29sb3Ig KGNvcnJlc3BvbmRpbmcgdG8gYSAxIGluIHRoZSBtb25vY2hyb21lIGRhdGEgKi8KPisJCXVuc2ln bmVkIGludCBiQ29sb3IsIC8qIEJhY2tncm91bmQgY29sb3IgKGNvcnJlc3BvbmRpbmcgdG8gYSAw IGluIHRoZSBtb25vY2hyb21lIGRhdGEgKi8KPisJCXVuc2lnbmVkIGludCByb3AyKSAgICAgLyog Uk9QIHZhbHVlICovCj4rewo+Kwl1bnNpZ25lZCBpbnQgdWxCeXRlc1BlclNjYW47Cj4rCXVuc2ln bmVkIGludCB1bDRCeXRlc1BlclNjYW47Cj4rCXVuc2lnbmVkIGludCB1bEJ5dGVzUmVtYWluOwo+ Kwl1bnNpZ25lZCBpbnQgZGVfY3RybCA9IDA7Cj4rCXVuc2lnbmVkIGNoYXIgYWpSZW1haW5bNF07 Cj4rCWludCBpLCBqOwo+Kwo+KwlzdGFydEJpdCAmPSA3OyAvKiBKdXN0IG1ha2Ugc3VyZSB0aGUg c3RhcnQgYml0IGlzIHdpdGhpbiBsZWdhbCByYW5nZSAqLwo+Kwl1bEJ5dGVzUGVyU2NhbiA9ICh3 aWR0aCArIHN0YXJ0Qml0ICsgNykgLyA4Owo+Kwl1bDRCeXRlc1BlclNjYW4gPSB1bEJ5dGVzUGVy U2NhbiAmIH4zOwo+Kwl1bEJ5dGVzUmVtYWluID0gdWxCeXRlc1BlclNjYW4gJiAzOwo+Kwo+Kwlp ZiAoYWNjZWwtPmRlX3dhaXQoKSAhPSAwKSB7Cj4rCQkvKiBpbmZfbXNnKCIqKiogSW1hZ2VCbGl0 IHJldHVybiAtMSAqKipcbiIpOyAqLwo+KwkJcmV0dXJuIC0xOwo+Kwl9Cj4rCj4rCS8qIDJEIFNv dXJjZSBCYXNlLgo+KwkgICBVc2UgMCBmb3IgSE9TVCBCbHQuCj4rCSAgICovCj4rCXdyaXRlX2Rw cihhY2NlbCwgREVfV0lORE9XX1NPVVJDRV9CQVNFLCAwKTsKPisKPisJLyogMkQgRGVzdGluYXRp b24gQmFzZS4KPisJICAgSXQgaXMgYW4gYWRkcmVzcyBvZmZzZXQgKDEyOCBiaXQgYWxpZ25lZCkg ZnJvbSB0aGUgYmVnaW5uaW5nIG9mIGZyYW1lIGJ1ZmZlci4KPisJICAgKi8KPisJd3JpdGVfZHBy KGFjY2VsLCBERV9XSU5ET1dfREVTVElOQVRJT05fQkFTRSwgZEJhc2UpOwo+Kwl7Cj4rCQl3cml0 ZV9kcHIoYWNjZWwsIERFX1BJVENILAo+KwkJCQkoZFBpdGNoL2J5dGVQZXJQaXhlbCA8PCBERV9Q SVRDSF9ERVNUSU5BVElPTl9MU0IpIHwKPisJCQkJKGRQaXRjaC9ieXRlUGVyUGl4ZWwgPDwgREVf UElUQ0hfU09VUkNFX0xTQikpOwo+Kwl9Cj4rCj4rCS8qIFNjcmVlbiBXaW5kb3cgd2lkdGggaW4g UGl4ZWxzLgo+KwkgICAyRCBlbmdpbmUgdXNlcyB0aGlzIHZhbHVlIHRvIGNhbGN1bGF0ZSB0aGUg bGluZWFyIGFkZHJlc3MgaW4gZnJhbWUgYnVmZmVyIGZvciBhIGdpdmVuIHBvaW50Lgo+KwkgICAq Lwo+Kwl3cml0ZV9kcHIoYWNjZWwsIERFX1dJTkRPV19XSURUSCwKPisJCQkoKGRQaXRjaC9ieXRl UGVyUGl4ZWwpIDw8IERFX1dJTkRPV19XSURUSF9ERVNUSU5BVElPTl9MU0IpIHwKPisJCQkoKGRQ aXRjaC9ieXRlUGVyUGl4ZWwpIDw8IERFX1dJTkRPV19XSURUSF9TT1VSQ0VfTFNCKSk7Cj4rCj4r CS8qIE5vdGU6IEZvciAyRCBTb3VyY2UgaW4gSG9zdCBXcml0ZSwgb25seSBYX0sxX01PTk8gZmll bGQgaXMgbmVlZGVkLCBhbmQgWV9LMiBmaWVsZCBpcyBub3QgdXNlZC4KPisJICAgRm9yIG1vbm8g Yml0bWFwLCB1c2Ugc3RhcnRCaXQgZm9yIFhfSzEuICovCj4rCXdyaXRlX2RwcihhY2NlbCwgREVf U09VUkNFLCBzdGFydEJpdCA8PCBERV9TT1VSQ0VfWF9LMV9NT05PKTsKPisJd3JpdGVfZHByKGFj Y2VsLCBERV9ERVNUSU5BVElPTiwgKGR4IDw8IERFX0RFU1RJTkFUSU9OX1hfTFNCKXwKPisJCQko ZHkgPDwgREVfREVTVElOQVRJT05fWV9MU0IpKTsKPisKPisJd3JpdGVfZHByKGFjY2VsLCBERV9E SU1FTlNJT04sCj4rCQkJKHdpZHRoIDw8IERFX0RJTUVOU0lPTl9YX0xTQil8Cj4rCQkJKGhlaWdo dCA8PCBERV9ESU1FTlNJT05fWV9FVF9MU0IpKTsKPisJd3JpdGVfZHByKGFjY2VsLCBERV9GT1JF R1JPVU5ELCBmQ29sb3IpOwo+Kwl3cml0ZV9kcHIoYWNjZWwsIERFX0JBQ0tHUk9VTkQsIGJDb2xv cik7Cj4rCj4rCWRlX2N0cmwgPSAocm9wMiA8PCBERV9DT05UUk9MX1JPUF9MU0IpfAo+KwkJKDEg PDwgREVfQ09OVFJPTF9ST1BfU0VMRUNUX0xTQil8Cj4rCQkoOCA8PCBERV9DT05UUk9MX0NPTU1B TkRfTFNCKXwKPisJCSgxIDw8IERFX0NPTlRST0xfSE9TVF9MU0IpfAo+KwkJKDEgPDwgREVfQ09O VFJPTF9TVEFUVVNfTFNCKTsKPisJd3JpdGVfZHByKGFjY2VsLCBERV9DT05UUk9MLCBkZV9jdHJs IHwgZGVHZXRUcmFuc3BhcmVuY3koYWNjZWwpKTsKPisKPisJLyogV3JpdGUgTU9OTyBkYXRhIChs aW5lIGJ5IGxpbmUpIHRvIDJEIEVuZ2luZSBkYXRhIHBvcnQgKi8KPisJZm9yIChpID0gMDsgaSA8 IGhlaWdodDsgaSsrKSB7Cj4rCQkvKiBGb3IgZWFjaCBsaW5lLCBzZW5kIHRoZSBkYXRhIGluIGNo dW5rcyBvZiA0IGJ5dGVzICovCj4rCQlmb3IgKGogPSAwOyBqIDwgKHVsNEJ5dGVzUGVyU2Nhbi80 KTsgaisrKQl7Cj4rCQkJd3JpdGVfZHBQb3J0KGFjY2VsLCAqKHVuc2lnbmVkIGludCAqKShwU3Jj YnVmICsgKGogKiA0KSkpOwo+KwkJfQo+Kwo+KwkJaWYgKHVsQnl0ZXNSZW1haW4pIHsKPisJCQlt ZW1jcHkoYWpSZW1haW4sIHBTcmNidWYrdWw0Qnl0ZXNQZXJTY2FuLCB1bEJ5dGVzUmVtYWluKTsK PisJCQl3cml0ZV9kcFBvcnQoYWNjZWwsICoodW5zaWduZWQgaW50ICopYWpSZW1haW4pOwo+KwkJ fQo+Kwo+KwkJcFNyY2J1ZiArPSBzcmNEZWx0YTsKPisJfQo+Kwo+KwlyZXR1cm4gMDsKPit9Cj4r Cj5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9seW54ZmIvbHlueF9hY2NlbC5oIGIvZHJpdmVy cy92aWRlby9seW54ZmIvbHlueF9hY2NlbC5oCj5uZXcgZmlsZSBtb2RlIDEwMDY0NAo+aW5kZXgg MDAwMDAwMC4uMzI4MTU3Ywo+LS0tIC9kZXYvbnVsbAo+KysrIGIvZHJpdmVycy92aWRlby9seW54 ZmIvbHlueF9hY2NlbC5oCj5AQCAtMCwwICsxLDE2MSBAQAo+Ky8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCj4rKkNvcHly aWdodCAoYykgMjAxMiBieSBTaWxpY29uIE1vdGlvbiwgSW5jLiAoU01JKQo+KypQZXJtaXNzaW9u IGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5p bmcgYSBjb3B5Cj4rKm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlv biBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCj4rKmluIHRoZSBTb2Z0d2FyZSB3aXRo b3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMg dG8KPisqdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJs aWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMKPisqb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVy bWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvCj4rKmRvIHNv LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPisqCj4rKlRIRSBTT0ZUV0FS RSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAo+KypF WFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJB TlRJRVMKPisqT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRSBBTkQKPisqTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgTWlsbC5DaGVu IGFuZCBNb25rLkxpdSBPUiBDT1BZUklHSFQKPisqSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBD TEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCj4rKldIRVRIRVIgSU4gQU4gQUNUSU9O IE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+KypGUk9NLCBPVVQgT0Yg T1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCj4rKk9USEVS IERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KPisqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwo+KyNpZm5kZWYgQUNDRUxf SF9fCj4rI2RlZmluZSBBQ0NFTF9IX18KPisKPisjZGVmaW5lIEhXX1JPUDJfQ09QWSAweGMKPisj ZGVmaW5lIEhXX1JPUDJfWE9SIDB4Ngo+Kwo+Ky8qIG5vdGVzOiBiZWxvdyBhZGRyZXNzIGFyZSB0 aGUgb2Zmc2V0IHZhbHVlIGZyb20gZGVfYmFzZV9hZGRyZXNzICgweDEwMDAwMCkqLwo+Kwo+Ky8q IGZvciBzbTcxOC83NTAvNTAyIGRlX2Jhc2UgaXMgYXQgbW1yZWdfMW1iKi8KPisjZGVmaW5lIERF X0JBU0VfQUREUl9UWVBFMQkweDEwMDAwMAo+Ky8qIGZvciBzbTcxMiwgZGVfYmFzZSBpcyBhdCBt bXJlZ18zMmtiICovCj4rI2RlZmluZSBERV9CQVNFX0FERFJfVFlQRTIJMHg4MDAwCj4rLyogZm9y IHNtNzIyLCBkZV9iYXNlIGlzIGF0IG1tcmVnXzAgKi8KPisjZGVmaW5lIERFX0JBU0VfQUREUl9U WVBFMyAwCj4rCj4rLyogdHlwZTEgZGF0YSBwb3J0IGFkZHJlc3MgaXMgYXQgbW1yZWdfMHgxMTAw MDAqLwo+KyNkZWZpbmUgREVfUE9SVF9BRERSX1RZUEUxIDB4MTEwMDAwCj4rLyogZm9yIHNtNzEy LCBkYXRhIHBvcnQgYWRkcmVzcyBpcyBhdCBtbXJlZ18wICovCj4rI2RlZmluZSBERV9QT1JUX0FE RFJfVFlQRTIgMHgxMDAwMDAKPisvKiBmb3Igc203MjIsIGRhdGEgcG9ydCBhZGRyZXNzIGlzIGF0 IG1tcmVnXzFtYiAqLwo+KyNkZWZpbmUgREVfUE9SVF9BRERSX1RZUEUzIDB4MTAwMDAwCj4rCj4r I2RlZmluZSBERV9TT1VSQ0UgMAo+KyNkZWZpbmUgREVfU09VUkNFX1dSQVBfTFNCCTMxCj4rI2Rl ZmluZSBERV9TT1VSQ0VfWF9LMV9MU0IJMTYKPisjZGVmaW5lIERFX1NPVVJDRV9ZX0syX0xTQgkw Cj4rI2RlZmluZSBERV9TT1VSQ0VfWF9LMV9NT05PIDAKPisKPisjZGVmaW5lIERFX0RFU1RJTkFU SU9OCQkweDQKPisjZGVmaW5lIERFX0RFU1RJTkFUSU9OX1dSQVBfTFNCIDMxCj4rI2RlZmluZSBE RV9ERVNUSU5BVElPTl9YX0xTQiAxNgo+KyNkZWZpbmUgREVfREVTVElOQVRJT05fWV9MU0IgMAo+ Kwo+KyNkZWZpbmUgREVfRElNRU5TSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMHg4Cj4rI2RlZmluZSBERV9ESU1FTlNJT05fWF9MU0IgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAxNgo+KyNkZWZpbmUgREVfRElNRU5TSU9OX1lfRVRfTFNCICAgICAgICAgICAgICAg ICAgICAgICAgICAgMAo+Kwo+KyNkZWZpbmUgREVfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgMHhDCj4rI2RlZmluZSBERV9DT05UUk9MX1NUQVRVU19MU0IgICAg ICAgICAgICAgICAgICAgICAgICAgICAzMQo+KyNkZWZpbmUgREVfQ09OVFJPTF9ESVJFQ1RJT05f TFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3Cj4rI2RlZmluZSBERV9DT05UUk9MX0hP U1RfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKPisjZGVmaW5lIERFX0NP TlRST0xfTEFTVF9QSVhFTF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQo+KyNkZWZp bmUgREVfQ09OVFJPTF9DT01NQU5EX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKPisj ZGVmaW5lIERFX0NPTlRST0xfUk9QX1NFTEVDVF9MU0IgICAgICAgICAgICAgICAgICAgICAgIDE1 Cj4rI2RlZmluZSBERV9DT05UUk9MX1JPUDJfU09VUkNFX0xTQiAgICAgICAgICAgICAgICAgICAg ICAxNAo+KyNkZWZpbmUgREVfQ09OVFJPTF9UUkFOU1BBUkVOQ1lfTUFUQ0hfTFNCICAgICAgICAg ICAgICAgMTAKPisjZGVmaW5lIERFX0NPTlRST0xfVFJBTlNQQVJFTkNZX1NFTEVDVF9MU0IgICAg ICAgICAgICAgIDkKPisjZGVmaW5lIERFX0NPTlRST0xfVFJBTlNQQVJFTkNZX0xTQiAJCQkJCTgK PisjZGVmaW5lIERFX0NPTlRST0xfUk9QX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDAKPisjZGVmaW5lIERFX01BU0tTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDB4MDAwMDI4Cj4rI2RlZmluZSBERV9DTElQX1RMICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAweDAwMDAyQwo+KyNkZWZpbmUgREVfQ0xJUF9CUiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMzAKPisjZGVmaW5lIERFX0NPTE9SX0NPTVBB UkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwCj4rI2RlZmluZSBERV9D T0xPUl9DT01QQVJFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyNAo+KyNk ZWZpbmUgREVfTU9OT19QQVRURVJOX0xPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgw MDAwMzQKPisjZGVmaW5lIERFX01PTk9fUEFUVEVSTl9ISUdIICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDB4MDAwMDM4Cj4rI2RlZmluZSBERV9XSU5ET1dfU09VUkNFX0JBU0UgICAgICAgICAg ICAgICAgICAgICAgICAgICAweDAwMDA0MAo+KyNkZWZpbmUgREVfV0lORE9XX0RFU1RJTkFUSU9O X0JBU0UgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDQKPisKPisjZGVmaW5lIERFX1BJVENI ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwCj4rI2RlZmlu ZSBERV9QSVRDSF9ERVNUSU5BVElPTl9MU0IgICAgICAgICAgICAgICAgICAgICAgICAxNgo+KyNk ZWZpbmUgREVfUElUQ0hfU09VUkNFX0xTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAo+ Kwo+Kwo+KyNkZWZpbmUgREVfRk9SRUdST1VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMHgwMDAwMTQKPisjZGVmaW5lIERFX0JBQ0tHUk9VTkQgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDB4MDAwMDE4Cj4rCj4rI2RlZmluZSBERV9TVFJFVENIX0ZPUk1BVCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxQwo+KyNkZWZpbmUgREVfU1RSRVRD SF9GT1JNQVRfUEFUVEVSTl9YWV9MU0IgICAgICAgICAgICAgICAgMzAKPisjZGVmaW5lIERFX1NU UkVUQ0hfRk9STUFUX1BBVFRFUk5fWV9MU0IgICAgICAgICAgICAgICAgIDI3Cj4rI2RlZmluZSBE RV9TVFJFVENIX0ZPUk1BVF9QQVRURVJOX1hfTFNCICAgICAgICAgICAgICAgICAyMwo+KyNkZWZp bmUgREVfU1RSRVRDSF9GT1JNQVRfUElYRUxfRk9STUFUX0xTQiAgICAgICAgICAgICAgMjAKPisj ZGVmaW5lIERFX1NUUkVUQ0hfRk9STUFUX0FERFJFU1NJTkdfTFNCICAgICAgICAgICAgICAgIDE2 Cj4rI2RlZmluZSBERV9TVFJFVENIX0ZPUk1BVF9TT1VSQ0VfSEVJR0hUX0xTQiAgICAgICAgICAg ICAwCj4rI2RlZmluZSBERV9NQVNLUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAweDAwMDAyOAo+KyNkZWZpbmUgREVfQ0xJUF9UTCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgMHgwMDAwMkMKPisjZGVmaW5lIERFX0NMSVBfQlIgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDMwCj4rI2RlZmluZSBERV9DT0xPUl9DT01Q QVJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMAo+KyNkZWZpbmUgREVf Q09MT1JfQ09NUEFSRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjQKPisj ZGVmaW5lIERFX01PTk9fUEFUVEVSTl9MT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4 MDAwMDM0Cj4rI2RlZmluZSBERV9NT05PX1BBVFRFUk5fSElHSCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAweDAwMDAzOAo+KyNkZWZpbmUgREVfV0lORE9XX1NPVVJDRV9CQVNFICAgICAgICAg ICAgICAgICAgICAgICAgICAgMHgwMDAwNDAKPisjZGVmaW5lIERFX1dJTkRPV19ERVNUSU5BVElP Tl9CQVNFICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQ0Cj4rCj4rCj4rCj4rI2RlZmluZSBE RV9XSU5ET1dfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAzQwo+ KyNkZWZpbmUgREVfV0lORE9XX1dJRFRIX0RFU1RJTkFUSU9OX0xTQiAgICAgICAgICAgICAgICAg ICAgIDE2Cj4rI2RlZmluZSBERV9XSU5ET1dfV0lEVEhfU09VUkNFX0xTQiAgICAgICAgICAgICAg ICAgICAgICAgICAgMAo+Kwo+Kwo+Kwo+Ky8qIGJsdCBkaXJlY3Rpb24gKi8KPisjZGVmaW5lIFRP UF9UT19CT1RUT00gMAo+KyNkZWZpbmUgTEVGVF9UT19SSUdIVCAwCj4rI2RlZmluZSBCT1RUT01f VE9fVE9QIDEKPisjZGVmaW5lIFJJR0hUX1RPX0xFRlQgMQo+Kwo+K3ZvaWQgaHdfc2V0MmRmb3Jt YXQoc3RydWN0IGx5bnhfYWNjZWwgKmFjY2VsLCBpbnQgZm10KTsKPisKPit2b2lkIGh3X2RlX2lu aXQoc3RydWN0IGx5bnhfYWNjZWwgKmFjY2VsKTsKPisKPitpbnQgaHdfZmlsbHJlY3Qoc3RydWN0 IGx5bnhfYWNjZWwgKmFjY2VsLAo+KwkJCQl1MzIgYmFzZSwgdTMyIHBpdGNoLCB1MzIgQnBwLAo+ KwkJCQl1MzIgeCwgdTMyIHksIHUzMiB3aWR0aCwgdTMyIGhlaWdodCwKPisJCQkJdTMyIGNvbG9y LCB1MzIgcm9wKTsKPisKPitpbnQgaHc3MTJfZmlsbHJlY3Qoc3RydWN0IGx5bnhfYWNjZWwgKmFj Y2VsLAo+KwkJCQl1MzIgYmFzZSwgdTMyIHBpdGNoLCB1MzIgQnBwLAo+KwkJCQl1MzIgeCwgdTMy IHksIHUzMiB3aWR0aCwgdTMyIGhlaWdodCwKPisJCQkJdTMyIGNvbG9yLCB1MzIgcm9wKTsKPisK PitpbnQgaHdfY29weWFyZWEoCj4rc3RydWN0IGx5bnhfYWNjZWwgKmFjY2VsLAo+K3Vuc2lnbmVk IGludCBzQmFzZSwgIC8qIEFkZHJlc3Mgb2Ygc291cmNlOiBvZmZzZXQgaW4gZnJhbWUgYnVmZmVy ICovCj4rdW5zaWduZWQgaW50IHNQaXRjaCwgLyogUGl0Y2ggdmFsdWUgb2Ygc291cmNlIHN1cmZh Y2UgaW4gQllURSAqLwo+K3Vuc2lnbmVkIGludCBzeCwKPit1bnNpZ25lZCBpbnQgc3ksICAgICAv KiBTdGFydGluZyBjb29yZGluYXRlIG9mIHNvdXJjZSBzdXJmYWNlICovCj4rdW5zaWduZWQgaW50 IGRCYXNlLCAgLyogQWRkcmVzcyBvZiBkZXN0aW5hdGlvbjogb2Zmc2V0IGluIGZyYW1lIGJ1ZmZl ciAqLwo+K3Vuc2lnbmVkIGludCBkUGl0Y2gsIC8qIFBpdGNoIHZhbHVlIG9mIGRlc3RpbmF0aW9u IHN1cmZhY2UgaW4gQllURSAqLwo+K3Vuc2lnbmVkIGludCBicHAsICAgIC8qIENvbG9yIGRlcHRo IG9mIGRlc3RpbmF0aW9uIHN1cmZhY2UgKi8KPit1bnNpZ25lZCBpbnQgZHgsCj4rdW5zaWduZWQg aW50IGR5LCAgICAgLyogU3RhcnRpbmcgY29vcmRpbmF0ZSBvZiBkZXN0aW5hdGlvbiBzdXJmYWNl ICovCj4rdW5zaWduZWQgaW50IHdpZHRoLAo+K3Vuc2lnbmVkIGludCBoZWlnaHQsIC8qIHdpZHRo IGFuZCBoZWlnaHQgb2YgcmVjdGFuZ2xlIGluIHBpeGVsIHZhbHVlICovCj4rdW5zaWduZWQgaW50 IHJvcDIpOwo+Kwo+K2ludCBod19pbWFnZWJsaXQoCj4rc3RydWN0IGx5bnhfYWNjZWwgKmFjY2Vs LAo+K3Vuc2lnbmVkIGNoYXIgKnBTcmNidWYsIC8qIHBvaW50ZXIgdG8gc3RhcnQgb2Ygc291cmNl IGJ1ZmZlciBpbiBzeXN0ZW0gbWVtb3J5ICovCj4raW50IHNyY0RlbHRhLCAgICAgICAgICAvKiBQ aXRjaCB2YWx1ZSAoaW4gYnl0ZXMpIG9mIHRoZSBzb3VyY2UgYnVmZmVyLCAraXZlIG1lYW5zIHRv cCBkb3duIGFuZCAtaXZlIG1lYW4gYnV0dG9uIHVwICovCj4rdW5zaWduZWQgaW50IHN0YXJ0Qml0 LCAvKiBNb25vIGRhdGEgY2FuIHN0YXJ0IGF0IGFueSBiaXQgaW4gYSBieXRlLCB0aGlzIHZhbHVl IHNob3VsZCBiZSAwIHRvIDcgKi8KPit1bnNpZ25lZCBpbnQgZEJhc2UsICAgIC8qIEFkZHJlc3Mg b2YgZGVzdGluYXRpb246IG9mZnNldCBpbiBmcmFtZSBidWZmZXIgKi8KPit1bnNpZ25lZCBpbnQg ZFBpdGNoLCAgIC8qIFBpdGNoIHZhbHVlIG9mIGRlc3RpbmF0aW9uIHN1cmZhY2UgaW4gQllURSAq Lwo+K3Vuc2lnbmVkIGludCBieXRlUGVyUGl4ZWwsICAgICAgLyogQ29sb3IgZGVwdGggb2YgZGVz dGluYXRpb24gc3VyZmFjZSAqLwo+K3Vuc2lnbmVkIGludCBkeCwKPit1bnNpZ25lZCBpbnQgZHks ICAgICAgIC8qIFN0YXJ0aW5nIGNvb3JkaW5hdGUgb2YgZGVzdGluYXRpb24gc3VyZmFjZSAqLwo+ K3Vuc2lnbmVkIGludCB3aWR0aCwKPit1bnNpZ25lZCBpbnQgaGVpZ2h0LCAgIC8qIHdpZHRoIGFu ZCBoZWlnaHQgb2YgcmVjdGFuZ2UgaW4gcGl4ZWwgdmFsdWUgKi8KPit1bnNpZ25lZCBpbnQgZkNv bG9yLCAgIC8qIEZvcmVncm91bmQgY29sb3IgKGNvcnJlc3BvbmRpbmcgdG8gYSAxIGluIHRoZSBt b25vY2hyb21lIGRhdGEgKi8KPit1bnNpZ25lZCBpbnQgYkNvbG9yLCAgIC8qIEJhY2tncm91bmQg Y29sb3IgKGNvcnJlc3BvbmRpbmcgdG8gYSAwIGluIHRoZSBtb25vY2hyb21lIGRhdGEgKi8KPit1 bnNpZ25lZCBpbnQgcm9wMik7Cj4rI2VuZGlmCj5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9s eW54ZmIvbHlueF9jdXJzb3IuYyBiL2RyaXZlcnMvdmlkZW8vbHlueGZiL2x5bnhfY3Vyc29yLmMK Pm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj5pbmRleCAwMDAwMDAwLi44YWE0NzFmCj4tLS0gL2Rldi9u dWxsCj4rKysgYi9kcml2ZXJzL3ZpZGVvL2x5bnhmYi9seW54X2N1cnNvci5jCj5AQCAtMCwwICsx LDIyMyBAQAo+Ky8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqCj4rKkNvcHlyaWdodCAoYykgMjAxMiBieSBTaWxpY29uIE1v dGlvbiwgSW5jLiAoU01JKQo+KypQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9m IGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cj4rKm9mIHRoaXMgc29mdHdh cmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0 byBkZWFsCj4rKmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcg d2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8KPisqdXNlLCBjb3B5LCBtb2RpZnksIG1l cmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMK Pisqb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29m dHdhcmUgaXMgZnVybmlzaGVkIHRvCj4rKmRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9uczoKPisqCj4rKlRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRI T1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAo+KypFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElO RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMKPisqT0YgTUVSQ0hBTlRBQklMSVRZ LCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKPisqTk9OSU5GUklOR0VNRU5U LiAgSU4gTk8gRVZFTlQgU0hBTEwgTWlsbC5DaGVuIGFuZCBNb25rLkxpdSBPUiBDT1BZUklHSFQK PisqSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFC SUxJVFksCj4rKldIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVS V0lTRSwgQVJJU0lORwo+KypGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBT T0ZUV0FSRSBPUiBUSEUgVVNFIE9SCj4rKk9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4K PisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLwo+KyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+Cj4rI2lmIExJTlVYX1ZF UlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDEwKQo+KyNpbmNsdWRlIDxsaW51eC9j b25maWcuaD4KPisjZW5kaWYKPisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4rI2luY2x1ZGUg PGxpbnV4L2tlcm5lbC5oPgo+KyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgo+KyNpbmNsdWRlIDxs aW51eC9zdHJpbmcuaD4KPisjaW5jbHVkZSA8bGludXgvbW0uaD4KPisjaW5jbHVkZSA8bGludXgv c2xhYi5oPgo+KyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgo+KyNpbmNsdWRlIDxsaW51eC9mYi5o Pgo+KyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KPisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgo+ KyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KPisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgo+KyNp bmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+Cj4rI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KPisj aWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDEwKQo+Ky8qIG5v IGJlbG93IHR3byBoZWFkZXIgZmlsZXMgaW4gMi42LjkgKi8KPisjaW5jbHVkZSA8bGludXgvcGxh dGZvcm1fZGV2aWNlLmg+Cj4rI2luY2x1ZGUgPGxpbnV4L3NjcmVlbl9pbmZvLmg+Cj4rI2Vsc2UK PisvKiBub3RoaW5nIGJ5IGZhciAqLwo+KyNlbmRpZgo+Kwo+KyNpbmNsdWRlICJseW54X2Rydi5o Igo+KyNpbmNsdWRlICJseW54X2hlbHAuaCIKPisjaW5jbHVkZSAibHlueF9jdXJzb3IuaCIKPisK PisjZGVmaW5lIFBFRUszMihhZGRyKSBcCj4rcmVhZGwoY3Vyc29yLT5tbWlvICsgKGFkZHIpKQo+ Kwo+KyNkZWZpbmUgUE9LRTMyKGFkZHIsIGRhdGEpIFwKPit3cml0ZWwoKGRhdGEpLCBjdXJzb3It Pm1taW8gKyAoYWRkcikpCj4rCj4rLyogY3Vyc29yIGNvbnRyb2wgZm9yIHZveWFnZXIgYW5kIDcx OC83NTAqLwo+Kwo+KyNkZWZpbmUgSFdDX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAg MHgwCj4rI2RlZmluZSBIV0NfQUREUkVTU19FTkFCTEVfTFNCICAgICAgICAgICAgICAzMQo+KyNk ZWZpbmUgSFdDX0FERFJFU1NfRVhUX0xTQiAgICAgICAgICAgICAgICAgMjcKPisjZGVmaW5lIEhX Q19BRERSRVNTX0NTICAgICAgICAgICAgICAgICAgICAgIDI2Cj4rI2RlZmluZSBIV0NfQUREUkVT U19BRERSRVNTX0xTQiAgICAgICAgICAgICAwCj4rI2RlZmluZSBIV0NfTE9DQVRJT04gICAgICAg ICAgICAgICAgICAgICAgICAweDQKPisjZGVmaW5lIEhXQ19MT0NBVElPTl9UT1BfTFNCICAgICAg ICAgICAgICAgIDI3Cj4rI2RlZmluZSBIV0NfTE9DQVRJT05fWV9MU0IgICAgICAgICAgICAgICAg ICAxNgo+KyNkZWZpbmUgSFdDX0xPQ0FUSU9OX0xFRlQgICAgICAgICAgICAgICAgICAgMTEKPisj ZGVmaW5lIEhXQ19MT0NBVElPTl9YX0xTQiAgICAgICAgICAgICAgICAgIDAKPisjZGVmaW5lIEhX Q19DT0xPUl8xMiAgICAgICAgICAgICAgICAgICAgICAgIDB4OAo+KyNkZWZpbmUgSFdDX0NPTE9S XzMgICAgICAgICAgICAgICAgICAgICAgICAgMHhDCj4rCj4rLyogaHdfY3Vyc29yX3h4eCB3b3Jr cyBmb3Igdm95YWdlciwgNzE4IGFuZCA3NTAgKi8KPit2b2lkIGh3X2N1cnNvcl9lbmFibGUoc3Ry dWN0IGx5bnhfY3Vyc29yICpjdXJzb3IpCj4rewo+Kwl1MzIgcmVnOwo+KwlyZWcgPSAgKGN1cnNv ci0+b2Zmc2V0IDw8IEhXQ19BRERSRVNTX0FERFJFU1NfTFNCKSYKPisJCQkofigxIDw8IEhXQ19B RERSRVNTX0VYVF9MU0IpKXwKPisJCQkoMSA8PCBIV0NfQUREUkVTU19FTkFCTEVfTFNCKTsKPisJ UE9LRTMyKEhXQ19BRERSRVNTLCByZWcpOwo+K30KPit2b2lkIGh3X2N1cnNvcl9kaXNhYmxlKHN0 cnVjdCBseW54X2N1cnNvciAqY3Vyc29yKQo+K3sKPisJUE9LRTMyKEhXQ19BRERSRVNTLCAwKTsK Pit9Cj4rCj4rdm9pZCBod19jdXJzb3Jfc2V0U2l6ZShzdHJ1Y3QgbHlueF9jdXJzb3IgKmN1cnNv ciwKPisJCQkJCQlpbnQgdywgaW50IGgpCj4rewo+KwljdXJzb3ItPncgPSB3Owo+KwljdXJzb3It PmggPSBoOwo+K30KPit2b2lkIGh3X2N1cnNvcl9zZXRQb3Moc3RydWN0IGx5bnhfY3Vyc29yICpj dXJzb3IsCj4rCQkJCQkJaW50IHgsIGludCB5KQo+K3sKPisJdTMyIHJlZzsKPisJcmVnID0gKHkg PDwgSFdDX0xPQ0FUSU9OX1lfTFNCKXwKPisJCQkoeCA8PCBIV0NfTE9DQVRJT05fWF9MU0IpOwo+ KwlQT0tFMzIoSFdDX0xPQ0FUSU9OLCByZWcpOwo+K30KPit2b2lkIGh3X2N1cnNvcl9zZXRDb2xv cihzdHJ1Y3QgbHlueF9jdXJzb3IgKmN1cnNvciwKPisJCQkJCQl1MzIgZmcsIHUzMiBiZykKPit7 Cj4rCVBPS0UzMihIV0NfQ09MT1JfMTIsIChmZzw8MTYpfChiZyYweGZmZmYpKTsKPisJUE9LRTMy KEhXQ19DT0xPUl8zLCAweGZmZTApOwo+K30KPisKPit2b2lkIGh3X2N1cnNvcl9zZXREYXRhKHN0 cnVjdCBseW54X2N1cnNvciAqY3Vyc29yLAo+KwkJCXUxNiByb3AsIGNvbnN0IHU4ICpwY29sLCBj b25zdCB1OCAqcG1zaykKPit7Cj4rCWludCBpLCBqLCBjb3VudCwgcGl0Y2gsIG9mZnNldDsKPisJ dTggY29sb3IsIG1hc2ssIG9wcjsKPisJdTE2IGRhdGE7Cj4rCXUxNiAqcGJ1ZmZlciwgKnBzdGFy dDsKPisJc3RhdGljIHVsb25nIG9kZDsKPisKPisJLyogIGluIGJ5dGUqLwo+KwlwaXRjaCA9IGN1 cnNvci0+dyA+PiAzOwo+Kwo+KwkvKiBpbiBieXRlCSovCj4rCWNvdW50ID0gcGl0Y2ggKiBjdXJz b3ItPmg7Cj4rCj4rCS8qIGluIHVzaG9ydCAqLwo+KwlvZmZzZXQgPSBjdXJzb3ItPm1heFcgKiAy IC8gOCAvIDI7Cj4rCj4rCWRhdGEgPSAwOwo+Kwlwc3RhcnQgPSAodTE2ICopY3Vyc29yLT52c3Rh cnQ7Cj4rCXBidWZmZXIgPSBwc3RhcnQ7Cj4rCj4rLyoKPisJaWYgKG9kZCAmMSkgewo+KwkJaHdf Y3Vyc29yX3NldERhdGEyKGN1cnNvciwgcm9wLCBwY29sLCBwbXNrKTsKPisJfQo+KwlvZGQrKzsK PisJaWYgKG9kZCA+IDB4ZmZmZmZmZjApCj4rCQlvZGQ9MDsKPisqLwo+Kwo+Kwlmb3IgKGkgPSAw OyBpIDwgY291bnQ7IGkrKykgewo+Kwo+KwkJY29sb3IgPSAqcGNvbCsrOwo+KwkJbWFzayA9ICpw bXNrKys7Cj4rCQlkYXRhID0gMDsKPisKPisJCS8qIGVpdGhlciBtZXRob2QgYmVsb3cgd29ya3Mg d2VsbCwKPisJCSAqIGJ1dCBtZXRob2QgMiBzaG93cyBubyBsYWcKPisJCSAqIGFuZCBtZXRob2Qg MSBzZWVtcyBhIGJpdCB3cm9uZyovCj4rCj4rCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKSB7Cj4r CQkJaWYgKG1hc2sgJiAoMHg4MD4+aikpIHsKPisJCQkJaWYgKHJvcCA9PSBST1BfWE9SKQo+KwkJ CQkJb3ByID0gbWFzayBeIGNvbG9yOwo+KwkJCQllbHNlCj4rCQkJCQlvcHIgPSBtYXNrICYgY29s b3I7Cj4rCj4rCQkJCS8qIDIgc3RhbmRzIGZvciBmb3JlY29sb3IgYW5kIDEgZm9yIGJhY2tjb2xv ciAqLwo+KwkJCQlkYXRhIHw9ICgob3ByICYgKDB4ODA+PmopKSA/IDIgOiAxKTw8KGoqMik7Cj4r CQkJfQo+KwkJfQo+Kwo+KwkJKnBidWZmZXIgPSBkYXRhOwo+Kwo+KwkJLyogYXNzdW1lIHBpdGNo IGlzIDEsIDIsIDQsIDgsIC4uLiovCj4rCQlpZiAoKGkrMSkgJSBwaXRjaCA9PSAwKSB7Cj4rCQkJ LyogbmVlZCBhIHJldHVybiAqLwo+KwkJCXBzdGFydCArPSBvZmZzZXQ7Cj4rCQkJcGJ1ZmZlciA9 IHBzdGFydDsKPisJCX0gZWxzZXsKPisJCQlwYnVmZmVyKys7Cj4rCQl9Cj4rCj4rCX0KPisKPisK Pit9Cj4rCj4rdm9pZCBod19jdXJzb3Jfc2V0RGF0YTIoc3RydWN0IGx5bnhfY3Vyc29yICpjdXJz b3IsCj4rCQkJdTE2IHJvcCwgY29uc3QgdTggKnBjb2wsIGNvbnN0IHU4ICpwbXNrKQo+K3sKPisJ aW50IGksIGosIGNvdW50LCBwaXRjaCwgb2Zmc2V0Owo+Kwl1OCBjb2xvciwgbWFzaywgb3ByOwo+ Kwl1MTYgZGF0YTsKPisJdTE2ICpwYnVmZmVyLCAqcHN0YXJ0Owo+Kwo+KwkvKiAgaW4gYnl0ZSov Cj4rCXBpdGNoID0gY3Vyc29yLT53ID4+IDM7Cj4rCj4rCS8qIGluIGJ5dGUJKi8KPisJY291bnQg PSBwaXRjaCAqIGN1cnNvci0+aDsKPisKPisJLyogaW4gdXNob3J0ICovCj4rCW9mZnNldCA9IGN1 cnNvci0+bWF4VyAqIDIgLyA4IC8gMjsKPisKPisJZGF0YSA9IDA7Cj4rCXBzdGFydCA9ICh1MTYg KiljdXJzb3ItPnZzdGFydDsKPisJcGJ1ZmZlciA9IHBzdGFydDsKPisKPisJZm9yIChpID0gMDsg aSA8IGNvdW50OyBpKyspIHsKPisKPisJCWNvbG9yID0gKnBjb2wrKzsKPisJCW1hc2sgPSAqcG1z aysrOwo+KwkJZGF0YSA9IDA7Cj4rCj4rCQkvKiBlaXRoZXIgbWV0aG9kIGJlbG93IHdvcmtzIHdl bGwsICBidXQgbWV0aG9kIDIgc2hvd3Mgbm8gbGFnICovCj4rCj4rCQlmb3IgKGogPSAwOyBqIDwg ODsgaisrKSB7Cj4rCQkJaWYgKG1hc2sgJiAoMSA8PCBqKSkKPisJCQkJZGF0YSB8PSAoKGNvbG9y ICYgKDE8PGopKSA/IDEgOiAyKTw8KGoqMik7Cj4rCQl9Cj4rCj4rCQkqcGJ1ZmZlciA9IGRhdGE7 Cj4rCj4rCQkvKiBhc3N1bWUgcGl0Y2ggaXMgMSwgMiwgNCwgOCwgLi4uKi8KPisJCWlmICghKGkm KHBpdGNoLTEpKSkgewo+Kwo+Kwo+KwkJCS8qIG5lZWQgYSByZXR1cm4gKi8KPisJCQlwc3RhcnQg Kz0gb2Zmc2V0Owo+KwkJCXBidWZmZXIgPSBwc3RhcnQ7Cj4rCQl9IGVsc2V7Cj4rCQkJcGJ1ZmZl cisrOwo+KwkJfQo+Kwo+Kwl9Cj4rCXJldHVybiAwOwo+K30KPmRpZmYgLS1naXQgYS9kcml2ZXJz L3ZpZGVvL2x5bnhmYi9seW54X2N1cnNvci5oIGIvZHJpdmVycy92aWRlby9seW54ZmIvbHlueF9j dXJzb3IuaAo+bmV3IGZpbGUgbW9kZSAxMDA2NDQKPmluZGV4IDAwMDAwMDAuLmM5YWEwOTYKPi0t LSAvZGV2L251bGwKPisrKyBiL2RyaXZlcnMvdmlkZW8vbHlueGZiL2x5bnhfY3Vyc29yLmgKPkBA IC0wLDAgKzEsMzYgQEAKPisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKgo+KypDb3B5cmlnaHQgKGMpIDIwMTIgYnkgU2ls aWNvbiBNb3Rpb24sIEluYy4gKFNNSSkKPisqUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQo+KypvZiB0aGlz IHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdh cmUiKSwgdG8gZGVhbAo+KyppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5j bHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCj4rKnVzZSwgY29weSwgbW9k aWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwg Y29waWVzCj4rKm9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20g dGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0bwo+KypkbyBzbywgc3ViamVjdCB0byB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnM6Cj4rKgo+KypUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElT IiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKPisqRVhQUkVTUyBPUiBJTVBMSUVELCBJ TkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCj4rKk9GIE1FUkNIQU5U QUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECj4rKk5PTklORlJJ TkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIE1pbGwuQ2hlbiBhbmQgTW9uay5MaXUgT1IgQ09Q WVJJR0hUCj4rKkhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RI RVIgTElBQklMSVRZLAo+KypXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBP UiBPVEhFUldJU0UsIEFSSVNJTkcKPisqRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lU SCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgo+KypPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09G VFdBUkUuCj4rKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8KPisjaWZuZGVmIExZTlhfQ1VSU09SX0hfXwo+KyNkZWZpbmUg TFlOWF9DVVJTT1JfSF9fCj4rCj4rLyogaHdfY3Vyc29yX3h4eCB3b3JrcyBmb3Igdm95YWdlciwg NzE4IGFuZCA3NTAgKi8KPit2b2lkIGh3X2N1cnNvcl9lbmFibGUoc3RydWN0IGx5bnhfY3Vyc29y ICpjdXJzb3IpOwo+K3ZvaWQgaHdfY3Vyc29yX2Rpc2FibGUoc3RydWN0IGx5bnhfY3Vyc29yICpj dXJzb3IpOwo+K3ZvaWQgaHdfY3Vyc29yX3NldFNpemUoc3RydWN0IGx5bnhfY3Vyc29yICpjdXJz b3IsCj4rCQkJCQkJaW50IHcsIGludCBoKTsKPit2b2lkIGh3X2N1cnNvcl9zZXRQb3Moc3RydWN0 IGx5bnhfY3Vyc29yICpjdXJzb3IsCj4rCQkJCQkJaW50IHgsIGludCB5KTsKPit2b2lkIGh3X2N1 cnNvcl9zZXRDb2xvcihzdHJ1Y3QgbHlueF9jdXJzb3IgKmN1cnNvciwKPisJCQkJCQl1MzIgZmcs IHUzMiBiZyk7Cj4rdm9pZCBod19jdXJzb3Jfc2V0RGF0YShzdHJ1Y3QgbHlueF9jdXJzb3IgKmN1 cnNvciwKPisJCQl1MTYgcm9wLCBjb25zdCB1OCAqZGF0YSwgY29uc3QgdTggKm1hc2spOwo+K3Zv aWQgaHdfY3Vyc29yX3NldERhdGEyKHN0cnVjdCBseW54X2N1cnNvciAqY3Vyc29yLAo+KwkJCXUx NiByb3AsIGNvbnN0IHU4ICpkYXRhLCBjb25zdCB1OCAqbWFzayk7Cj4rCj4rI2VuZGlmCj5kaWZm IC0tZ2l0IGEvZHJpdmVycy92aWRlby9seW54ZmIvbHlueF9kcnYuYyBiL2RyaXZlcnMvdmlkZW8v bHlueGZiL2x5bnhfZHJ2LmMKPm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj5pbmRleCAwMDAwMDAwLi41 NTY5MDJkCj4tLS0gL2Rldi9udWxsCj4rKysgYi9kcml2ZXJzL3ZpZGVvL2x5bnhmYi9seW54X2Ry di5jCj5AQCAtMCwwICsxLDE2ODggQEAKPisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgo+KypDb3B5cmlnaHQgKGMpIDIw MTIgYnkgU2lsaWNvbiBNb3Rpb24sIEluYy4gKFNNSSkKPisqUGVybWlzc2lvbiBpcyBoZXJlYnkg Z3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQo+ KypvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRo ZSAiU29mdHdhcmUiKSwgdG8gZGVhbAo+KyppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmlj dGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCj4rKnVzZSwg Y29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5k L29yIHNlbGwgY29waWVzCj4rKm9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25z IHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0bwo+KypkbyBzbywgc3ViamVjdCB0 byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4rKgo+KypUSEUgU09GVFdBUkUgSVMgUFJPVklE RUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKPisqRVhQUkVTUyBPUiBJ TVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCj4rKk9G IE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECj4r Kk5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIE1pbGwuQ2hlbiBhbmQgTW9uay5M aXUgT1IgQ09QWVJJR0hUCj4rKkhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFH RVMgT1IgT1RIRVIgTElBQklMSVRZLAo+KypXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFD VCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPisqRlJPTSwgT1VUIE9GIE9SIElOIENPTk5F Q1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgo+KypPVEhFUiBERUFMSU5HUyBJ TiBUSEUgU09GVFdBUkUuCj4rKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KPisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5o Pgo+KyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLCA2LCAxMCkKPisj aW5jbHVkZSA8bGludXgvY29uZmlnLmg+Cj4rI2VuZGlmCj4rI2luY2x1ZGUgPGxpbnV4L2tlcm5l bC5oPgo+KyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPisjaW5jbHVkZSA8bGludXgvZXJybm8u aD4KPisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Cj4rI2luY2x1ZGUgPGxpbnV4L21tLmg+Cj4r I2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KPisjaW5j bHVkZSA8bGludXgvZmIuaD4KPisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Cj4rI2luY2x1ZGUg PGxpbnV4L2luaXQuaD4KPisjaW5jbHVkZSA8bGludXgvcGNpLmg+Cj4rCj4rI2lmIExJTlVYX1ZF UlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLCA2LCAxMCkKPisvKiBubyBiZWxvdyB0d28g aGVhZGVyIGZpbGVzIGluIDIuNi45ICovCj4rI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2Rldmlj ZS5oPgo+KyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+Cj4rI2luY2x1ZGUgPGxpbnV4L3BhZ2Vt YXAuaD4KPisjaW5jbHVkZSA8bGludXgvc2NyZWVuX2luZm8uaD4KPisjZWxzZQo+Ky8qIG5vdGhp bmcgYnkgZmFyICovCj4rI2VuZGlmCj4rI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4gI2luY2x1 ZGU8bGludXgvcGFnZW1hcC5oPgo+KyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+Cj4rI2lmZGVm IENPTkZJR19NVFJSCj4rI2luY2x1ZGUgPGFzbS9tdHJyLmg+Cj4rI2VuZGlmCj4rCj4rI2luY2x1 ZGUgImx5bnhfZHJ2LmgiCj4rI2luY2x1ZGUgInZlci5oIgo+KyNpbmNsdWRlICJseW54X2h3NzUw LmgiCj4rI2luY2x1ZGUgImx5bnhfYWNjZWwuaCIKPisjaW5jbHVkZSAibHlueF9jdXJzb3IuaCIK PisKPisjaW5jbHVkZSAibW9kZWRiLmMiCj4rCj4raW50IHNtaV9pbmRlbnQ7Cj4rI2lmZGVmIE1P RFVMRQo+K3N0YXRpYyB2b2lkIF9fZXhpdCBseW54ZmJfZXhpdCh2b2lkKTsKPisjZW5kaWYKPisK PisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDEwKQo+K3N0 YXRpYyBpbnQgIGx5bnhmYl9zZXR1cChjaGFyICopOwo+K3N0YXRpYyBpbnQgX19pbml0IGx5bnhm Yl9pbml0KHZvaWQpOwo+KyNlbHNlCj4raW50IF9faW5pdCBseW54ZmJfc2V0dXAoY2hhciAqKTsK PitpbnQgX19pbml0IGx5bnhmYl9pbml0KHZvaWQpOwo+KyNlbmRpZgo+Kwo+Ky8qIGNoaXAgc3Bl Y2lmaWMgc2V0dXAgcm91dGluZSAqLwo+K3N0YXRpYyB2b2lkIHNtNzUwZmJfc2V0dXAoc3RydWN0 IGx5bnhfc2hhcmUgKiwgY2hhciAqKTsKPitzdGF0aWMgaW50IF9fZGV2aW5pdCBseW54ZmJfcGNp X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICosIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICopOwo+ K3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBseW54ZmJfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAq KTsKPisKPisjaWZkZWYgQ09ORklHX1BNCj4rc3RhdGljIGludCBseW54ZmJfc3VzcGVuZChzdHJ1 Y3QgcGNpX2RldiAqLCBwbV9tZXNzYWdlX3QpOwo+K3N0YXRpYyBpbnQgbHlueGZiX3Jlc3VtZShz dHJ1Y3QgcGNpX2RldiAqKTsKPisjZW5kaWYKPisKPitzdGF0aWMgaW50IF9fZGV2aW5pdCBseW54 ZmJfc2V0X2ZiaW5mbyhzdHJ1Y3QgZmJfaW5mbyAqLCBpbnQpOwo+K3N0YXRpYyBpbnQgbHlueGZi X29wc19jaGVja192YXIoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICosIHN0cnVjdCBmYl9pbmZv ICopOwo+K3N0YXRpYyBpbnQgbHlueGZiX29wc19zZXRfcGFyKHN0cnVjdCBmYl9pbmZvICopOwo+ K3N0YXRpYyBpbnQgbHlueGZiX29wc19zZXRjb2xyZWcodW5zaWduZWQsIHVuc2lnbmVkLCB1bnNp Z25lZCwgdW5zaWduZWQsIHVuc2lnbmVkLCBzdHJ1Y3QgZmJfaW5mbyAqKTsKPitzdGF0aWMgaW50 IGx5bnhmYl9vcHNfYmxhbmsoaW50LCBzdHJ1Y3QgZmJfaW5mbyAqKTsKPisjaWYgTElOVVhfVkVS U0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDEwKQo+K3N0YXRpYyBpbnQgbHlueGZi X29wc19jdXJzb3Ioc3RydWN0IGZiX2luZm8gKiwgc3RydWN0IGZiX2N1cnNvciAqKTsKPisjZW5k aWYKPisvKgo+KyNpZmRlZiBfX0JJR19FTkRJQU4KPitzc2l6ZV90IGx5bnhmYl9vcHNfd3JpdGUo c3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IGNoYXIgX191c2VyICpidWYsCj4rc2l6ZV90IGNv dW50LCBsb2ZmX3QgKnBwb3MpOwo+K3NzaXplX3QgbHlueGZiX29wc19yZWFkKHN0cnVjdCBmYl9p bmZvICppbmZvLCBjaGFyIF9fdXNlciAqYnVmLAo+K3NpemVfdCBjb3VudCwgbG9mZl90ICpwcG9z KTsKPisjZW5kaWYKPisqLwo+Kwo+K3R5cGVkZWYgdm9pZCAoKlBST0NfU1BFQ19TRVRVUCkoc3Ry dWN0IGx5bnhfc2hhcmUgKiwgY2hhciAqKTsKPit0eXBlZGVmIGludCAoKlBST0NfU1BFQ19NQVAp KHN0cnVjdCBseW54X3NoYXJlICosIHN0cnVjdCBwY2lfZGV2ICopOwo+K3R5cGVkZWYgaW50ICgq UFJPQ19TUEVDX0lOSVRIVykoc3RydWN0IGx5bnhfc2hhcmUgKiwgc3RydWN0IHBjaV9kZXYgKik7 Cj4rCj4rLyogY29tbW9uIHZhciBmb3IgYWxsIGRldmljZSAqLwo+K2ludCBnX2h3Y3Vyc29yID0g MTsKPitpbnQgZ19ub2FjY2VsOwo+KyNpZmRlZiBDT05GSUdfTVRSUgo+K2ludCBnX25vbXRycjsK PisjZW5kaWYKPitjb25zdCBjaGFyICpnX2ZibW9kZVtdID0ge05VTEwsIE5VTEx9Owo+K2NvbnN0 IGNoYXIgKmdfZGVmX2ZibW9kZSA9ICI4MDB4NjAwLTE2QDYwIjsKPitjaGFyICpnX3NldHRpbmdz Owo+K2ludCBnX2R1YWx2aWV3Owo+KyNpZmRlZiBNT0RVTEUKPitjaGFyICpnX29wdGlvbjsKPisj ZW5kaWYKPisKPisvKiBpZiBub3QgdXNlIHNwaW5fbG9jaywgc3lzdGVtIHdpbGwgZGllIGlmIHVz ZXIgbG9hZCBkcml2ZXIKPisgKmFuZCBpbW1lZGlhdGx5IHVubG9hZCBkcml2ZXIgZnJlcXVlbnRs eSAoZHVhbCkqLwo+K3N0YXRpYyBpbmxpbmUgdm9pZCBteXNwaW5fbG9jayhzcGlubG9ja190ICpz bCkKPit7Cj4rCXN0cnVjdCBseW54X3NoYXJlICpzaGFyZTsKPisJc2hhcmUgPSBjb250YWluZXJf b2Yoc2wsIHN0cnVjdCBseW54X3NoYXJlLCBzbG9jayk7Cj4rCWlmIChzaGFyZS0+ZHVhbCkgewo+ KwkJc3Bpbl9sb2NrKHNsKTsKPisJfQo+K30KPisKPitzdGF0aWMgaW5saW5lIHZvaWQgbXlzcGlu X3VubG9jayhzcGlubG9ja190ICpzbCkKPit7Cj4rCXN0cnVjdCBseW54X3NoYXJlICpzaGFyZTsK PisJc2hhcmUgPSBjb250YWluZXJfb2Yoc2wsIHN0cnVjdCBseW54X3NoYXJlLCBzbG9jayk7Cj4r CWlmIChzaGFyZS0+ZHVhbCkgewo+KwkJc3Bpbl91bmxvY2soc2wpOwo+Kwl9Cj4rfQo+Kwo+K3N0 YXRpYyBjb25zdCBzdHJ1Y3QgZmJfdmlkZW9tb2RlIGx5bng3NTBfZXh0W10gPSB7Cj4rCS8qICAJ MTAyNHg2MDAtNjAgVkVTQSAJWzEuNzE6MV0JKi8KPisJe05VTEwsIDYwLCAxMDI0LCA2MDAsIDIw NDIzLCAxNDQsIDQwLCAxOCwgMSwgMTA0LCAzLAo+KwkJRkJfU1lOQ19IT1JfSElHSF9BQ1QgfCBG Ql9TWU5DX1ZFUlRfSElHSF9BQ1QsIEZCX1ZNT0RFX05PTklOVEVSTEFDRUR9LAo+Kwo+KwkvKiAJ MTAyNHg2MDAtNzAgVkVTQSAqLwo+Kwl7TlVMTCwgNzAsIDEwMjQsIDYwMCwgMTcyMTEsIDE1Miwg NDgsIDIxLCAxLCAxMDQsIDMsCj4rCQlGQl9TWU5DX0hPUl9ISUdIX0FDVCB8IEZCX1NZTkNfVkVS VF9ISUdIX0FDVCwgRkJfVk1PREVfTk9OSU5URVJMQUNFRH0sCj4rCj4rCS8qICAJMTAyNHg2MDAt NzUgVkVTQSAqLwo+Kwl7TlVMTCwgNzUsIDEwMjQsIDYwMCwgMTU4MjIsIDE2MCwgNTYsIDIzLCAx LCAxMDQsIDMsCj4rCQlGQl9TWU5DX0hPUl9ISUdIX0FDVCB8IEZCX1NZTkNfVkVSVF9ISUdIX0FD VCwgRkJfVk1PREVfTk9OSU5URVJMQUNFRH0sCj4rCj4rCS8qICAJMTAyNHg2MDAtODUgVkVTQSAq Lwo+Kwl7TlVMTCwgODUsIDEwMjQsIDYwMCwgMTM3MzAsIDE2OCwgNTYsIDI2LCAxLCAxMTIsIDMs Cj4rCQlGQl9TWU5DX0hPUl9ISUdIX0FDVCB8IEZCX1NZTkNfVkVSVF9ISUdIX0FDVCwgRkJfVk1P REVfTk9OSU5URVJMQUNFRH0sCj4rCj4rCS8qCTcyMHg0ODAJKi8KPisJe05VTEwsIDYwLCA3MjAs IDQ4MCwgMzc0MjcsIDg4LCAxNiwgMTMsIDEsIDcyLCAzLAo+KwkJRkJfU1lOQ19IT1JfSElHSF9B Q1QgfCBGQl9TWU5DX1ZFUlRfSElHSF9BQ1QsIEZCX1ZNT0RFX05PTklOVEVSTEFDRUR9LAo+Kwo+ KwkvKgkxMjgweDcyMAkJWzEuNzg6MV0JKi8KPisJe05VTEwsIDYwLCAxMjgwLCA3MjAsIDEzNDI2 LCAxNjIsIDg2LCAyMiwgMSwgMTM2LCAzLAo+KwkJRkJfU1lOQ19IT1JfSElHSF9BQ1QgfCBGQl9T WU5DX1ZFUlRfSElHSF9BQ1QsIEZCX1ZNT0RFX05PTklOVEVSTEFDRUR9LAo+Kwo+KwkvKiAxMjgw eDc2OEA2MCAqLwo+Kwl7TlVMTCwgNjAsIDEyODAsIDc2OCwgMTI1NzksIDE5MiwgNjQsIDIwLCAz LCAxMjgsIDcsCj4rCQlGQl9TWU5DX0hPUl9ISUdIX0FDVCB8IEZCX1NZTkNfVkVSVF9ISUdIX0FD VCwgRkJfVk1PREVfTk9OSU5URVJMQUNFRH0sCj4rCj4rCXtOVUxMLCA2MCwgMTM2MCwgNzY4LCAx MTgwNCwgMjA4LCA2NCwgMjMsIDEsIDE0NCwgMywKPisJCUZCX1NZTkNfSE9SX0hJR0hfQUNUfEZC X1ZNT0RFX05PTklOVEVSTEFDRUR9LAo+Kwo+KwkvKgkxMzYwIHggNzY4CVsxLjc3MDgzOjFdCSov Cj4rCXtOVUxMLCA2MCwgMTM2MCwgNzY4LCAxMTgwNCwgMjA4LCA2NCwgMjMsIDEsIDE0NCwgMywK PisJCUZCX1NZTkNfSE9SX0hJR0hfQUNUIHwgRkJfU1lOQ19WRVJUX0hJR0hfQUNULCBGQl9WTU9E RV9OT05JTlRFUkxBQ0VEfSwKPisKPisJLyoJMTM2OCB4IDc2OCAgICAgIFsxLjc4OjFdCSovCj4r CXtOVUxMLCA2MCwgMTM2OCwgNzY4LCAxMTY0NywgMjE2LCA3MiwgMjMsIDEsIDE0NCwgMywKPisJ CUZCX1NZTkNfSE9SX0hJR0hfQUNUIHwgRkJfU1lOQ19WRVJUX0hJR0hfQUNULCBGQl9WTU9ERV9O T05JTlRFUkxBQ0VEfSwKPisKPisJLyogCTE0NDAgeCA5MDAJCVsxNjoxMF0JKi8KPisJe05VTEws IDYwLCAxNDQwLCA5MDAsIDkzOTIsIDIzMiwgODAsIDI4LCAxLCAxNTIsIDMsCj4rCQlGQl9TWU5D X1ZFUlRfSElHSF9BQ1QsIEZCX1ZNT0RFX05PTklOVEVSTEFDRUR9LAo+Kwo+KwkvKgkxNDQweDk2 MAkJWzE1OjEwXQkqLwo+Kwl7TlVMTCwgNjAsIDE0NDAsIDk2MCwgODczMywgMjQwLCA4OCwgMzAs IDEsIDE1MiwgMywKPisJCUZCX1NZTkNfSE9SX0hJR0hfQUNUIHwgRkJfU1lOQ19WRVJUX0hJR0hf QUNULCBGQl9WTU9ERV9OT05JTlRFUkxBQ0VEfSwKPisKPisJLyoJMTkyMHgxMDgwCVsxNjo5XQkq Lwo+Kwl7TlVMTCwgNjAsIDE5MjAsIDEwODAsIDY3MzQsIDE0OCwgODgsIDQxLCAxLCA0NCwgMywK PisJCUZCX1NZTkNfVkVSVF9ISUdIX0FDVCwgRkJfVk1PREVfTk9OSU5URVJMQUNFRH0sCj4rfTsK PisKPisKPitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc21pX3BjaV90YWJsZVtdID0gewo+ Kwl7UENJX1ZFTkRPUl9JRF9TTUksIFBDSV9ERVZJRF9MWU5YX0VYUCwgUENJX0FOWV9JRCwgUENJ X0FOWV9JRCwgMCwgMCwgMH0sCj4rCXtQQ0lfVkVORE9SX0lEX1NNSSwgUENJX0RFVklEX0xZTlhf U0UsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAo+Kwl7UENJX1ZFTkRPUl9JRF9T TUksIFBDSV9ERVZJRF9MWU5YX0VNLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwK PisJe1BDSV9WRU5ET1JfSURfU01JLCBQQ0lfREVWSURfTFlOWF8zRE0sIFBDSV9BTllfSUQsIFBD SV9BTllfSUQsIDAsIDAsIDB9LAo+Kwl7UENJX1ZFTkRPUl9JRF9TTUksIFBDSV9ERVZJRF9WT1lB R0VSLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKPisJezAsIH0KPit9Owo+Kwo+ K3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBseW54ZmJfZHJpdmVyID0gewo+KwkubmFtZSA9CV9t b2R1bGVOYW1lXywKPisJLmlkX3RhYmxlID0Jc21pX3BjaV90YWJsZSwKPisJLnByb2JlID0JbHlu eGZiX3BjaV9wcm9iZSwKPisJLnJlbW92ZSA9CV9fZGV2ZXhpdF9wKGx5bnhmYl9wY2lfcmVtb3Zl KSwKPisjaWZkZWYgQ09ORklHX1BNCj4rCS5zdXNwZW5kID0gbHlueGZiX3N1c3BlbmQsCj4rCS5y ZXN1bWUgPSBseW54ZmJfcmVzdW1lLAo+KyNlbmRpZgo+K307Cj4rCj4rCj4rI2lmIExJTlVYX1ZF UlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLCA2LCAxMCkKPisvKiBubyBoYXJkd2FyZSBj dXJzb3Igc3VwcG9ydGVkIHVuZGVyIHZlcnNpb24gMi42LjEwLCBrZXJuZWwgYnVnICovCj4rc3Rh dGljIGludCBseW54ZmJfb3BzX2N1cnNvcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IGZi X2N1cnNvciAqZmJjdXJzb3IpCj4rewo+KwlzdHJ1Y3QgbHlueGZiX3BhciAqcGFyOwo+KwlzdHJ1 Y3QgbHlueGZiX2NydGMgKmNydGM7Cj4rCXN0cnVjdCBseW54X2N1cnNvciAqY3Vyc29yOwo+Kwo+ KwlwYXIgPSBpbmZvLT5wYXI7Cj4rCWNydGMgPSAmcGFyLT5jcnRjOwo+KwljdXJzb3IgPSAmY3J0 Yy0+Y3Vyc29yOwo+Kwo+KwlpZiAoZmJjdXJzb3ItPmltYWdlLndpZHRoID4gY3Vyc29yLT5tYXhX IHx8Cj4rCQkJZmJjdXJzb3ItPmltYWdlLmhlaWdodCA+IGN1cnNvci0+bWF4SCB8fAo+KwkJCWZi Y3Vyc29yLT5pbWFnZS5kZXB0aCA+IDEpIHsKPisJCXJldHVybiAtRU5YSU87Cj4rCX0KPisKPisJ Y3Vyc29yLT5kaXNhYmxlKGN1cnNvcik7Cj4rCWlmIChmYmN1cnNvci0+c2V0ICYgRkJfQ1VSX1NF VFNJWkUpIHsKPisJCWN1cnNvci0+c2V0U2l6ZShjdXJzb3IsIGZiY3Vyc29yLT5pbWFnZS53aWR0 aCwgZmJjdXJzb3ItPmltYWdlLmhlaWdodCk7Cj4rCX0KPisKPisJaWYgKGZiY3Vyc29yLT5zZXQg JiBGQl9DVVJfU0VUUE9TKSB7Cj4rCQljdXJzb3ItPnNldFBvcyhjdXJzb3IsIGZiY3Vyc29yLT5p bWFnZS5keCAtIGluZm8tPnZhci54b2Zmc2V0LAo+KwkJCQlmYmN1cnNvci0+aW1hZ2UuZHkgLSBp bmZvLT52YXIueW9mZnNldCk7Cj4rCX0KPisKPisJaWYgKGZiY3Vyc29yLT5zZXQgJiBGQl9DVVJf U0VUQ01BUCkgewo+KwkJLyogZ2V0IHRoZSAxNmJpdCBjb2xvciBvZiBrZXJuZWwgbWVhbnMgKi8K PisJCXUxNiBmZywgYmc7Cj4rCQlmZyA9ICgoaW5mby0+Y21hcC5yZWRbZmJjdXJzb3ItPmltYWdl LmZnX2NvbG9yXSAmIDB4ZjgwMCkpfAo+KwkJCSgoaW5mby0+Y21hcC5ncmVlbltmYmN1cnNvci0+ aW1hZ2UuZmdfY29sb3JdICYgMHhmYzAwKSA+PiA1KXwKPisJCQkoKGluZm8tPmNtYXAuYmx1ZVtm YmN1cnNvci0+aW1hZ2UuZmdfY29sb3JdICYgMHhmODAwKSA+PiAxMSk7Cj4rCj4rCQliZyA9ICgo aW5mby0+Y21hcC5yZWRbZmJjdXJzb3ItPmltYWdlLmJnX2NvbG9yXSAmIDB4ZjgwMCkpfAo+KwkJ CSgoaW5mby0+Y21hcC5ncmVlbltmYmN1cnNvci0+aW1hZ2UuYmdfY29sb3JdICYgMHhmYzAwKSA+ PiA1KXwKPisJCQkoKGluZm8tPmNtYXAuYmx1ZVtmYmN1cnNvci0+aW1hZ2UuYmdfY29sb3JdICYg MHhmODAwKSA+PiAxMSk7Cj4rCj4rCQljdXJzb3ItPnNldENvbG9yKGN1cnNvciwgZmcsIGJnKTsK PisJfQo+Kwo+Kwo+KwlpZiAoZmJjdXJzb3ItPnNldCAmIChGQl9DVVJfU0VUU0hBUEUgfCBGQl9D VVJfU0VUSU1BR0UpKSB7Cj4rCj4rCQljdXJzb3ItPnNldERhdGEoY3Vyc29yLAo+KwkJCQlmYmN1 cnNvci0+cm9wLAo+KwkJCQlmYmN1cnNvci0+aW1hZ2UuZGF0YSwKPisJCQkJZmJjdXJzb3ItPm1h c2spOwo+Kwl9Cj4rCj4rCWlmIChmYmN1cnNvci0+ZW5hYmxlKSB7Cj4rCQljdXJzb3ItPmVuYWJs ZShjdXJzb3IpOwo+Kwl9Cj4rCj4rCXJldHVybiAwOwo+K30KPisKPisjZW5kaWYKPisKPitzdGF0 aWMgdm9pZCBseW54ZmJfb3BzX2ZpbGxyZWN0KHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBz dHJ1Y3QgZmJfZmlsbHJlY3QgKnJlZ2lvbikKPit7Cj4rCXN0cnVjdCBseW54ZmJfcGFyICpwYXI7 Cj4rCXN0cnVjdCBseW54X3NoYXJlICpzaGFyZTsKPisJdW5zaWduZWQgaW50IGJhc2UsIHBpdGNo LCBCcHAsIHJvcDsKPisJdTMyIGNvbG9yOwo+Kwo+KwlpZiAoaW5mby0+c3RhdGUgIT0gRkJJTkZP X1NUQVRFX1JVTk5JTkcpIHsKPisJCXJldHVybjsKPisJfQo+Kwo+KwlwYXIgPSBpbmZvLT5wYXI7 Cj4rCXNoYXJlID0gcGFyLT5zaGFyZTsKPisKPisJLyogZWFjaCB0aW1lIDJkIGZ1bmN0aW9uIGJl Z2luIHRvIHdvcmssIGJlbG93IHRocmVlIHZhcmlhYmxlIGFsd2F5cyBuZWVkCj4rCSAqYmUgc2V0 LCBzZWVtcyB3ZSBjYW4gcHV0IHRoZW0gdG9nZXRoZXIgaW4gc29tZSBwbGFjZSAgKi8KPisJYmFz ZSA9IHBhci0+Y3J0Yy5vU2NyZWVuOwo+KwlwaXRjaCA9IGluZm8tPmZpeC5saW5lX2xlbmd0aDsK PisJQnBwID0gaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsID4+IDM7Cj4rCj4rCWNvbG9yID0gKEJw cCA9PSAxKSA/IHJlZ2lvbi0+Y29sb3IgOiAoKHUzMiAqKWluZm8tPnBzZXVkb19wYWxldHRlKVty ZWdpb24tPmNvbG9yXTsKPisJcm9wID0gKHJlZ2lvbi0+cm9wICE9IFJPUF9DT1BZKSA/IEhXX1JP UDJfWE9SIDogSFdfUk9QMl9DT1BZOwo+Kwo+KwlteXNwaW5fbG9jaygmc2hhcmUtPnNsb2NrKTsK PisJc2hhcmUtPmFjY2VsLmRlX2ZpbGxyZWN0KCZzaGFyZS0+YWNjZWwsCj4rCQkJYmFzZSwgcGl0 Y2gsIEJwcCwKPisJCQlyZWdpb24tPmR4LCByZWdpb24tPmR5LAo+KwkJCXJlZ2lvbi0+d2lkdGgs IHJlZ2lvbi0+aGVpZ2h0LAo+KwkJCWNvbG9yLCByb3ApOwo+KwlteXNwaW5fdW5sb2NrKCZzaGFy ZS0+c2xvY2spOwo+K30KPisKPitzdGF0aWMgdm9pZCBseW54ZmJfb3BzX2NvcHlhcmVhKHN0cnVj dCBmYl9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgZmJfY29weWFyZWEgKnJlZ2lvbikKPit7Cj4r CXN0cnVjdCBseW54ZmJfcGFyICpwYXI7Cj4rCXN0cnVjdCBseW54X3NoYXJlICpzaGFyZTsKPisJ dW5zaWduZWQgaW50IGJhc2UsIHBpdGNoLCBCcHA7Cj4rCj4rCXBhciA9IGluZm8tPnBhcjsKPisJ c2hhcmUgPSBwYXItPnNoYXJlOwo+Kwo+KwkvKiBlYWNoIHRpbWUgMmQgZnVuY3Rpb24gYmVnaW4g dG8gd29yaywgYmVsb3cgdGhyZWUgdmFyaWFibGUgYWx3YXlzIG5lZWQKPisJICpiZSBzZXQsIHNl ZW1zIHdlIGNhbiBwdXQgdGhlbSB0b2dldGhlciBpbiBzb21lIHBsYWNlICAqLwo+KwliYXNlID0g cGFyLT5jcnRjLm9TY3JlZW47Cj4rCXBpdGNoID0gaW5mby0+Zml4LmxpbmVfbGVuZ3RoOwo+KwlC cHAgPSBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgPj4gMzsKPisKPisJbXlzcGluX2xvY2soJnNo YXJlLT5zbG9jayk7Cj4rCXNoYXJlLT5hY2NlbC5kZV9jb3B5YXJlYSgmc2hhcmUtPmFjY2VsLAo+ KwkJCWJhc2UsIHBpdGNoLCByZWdpb24tPnN4LCByZWdpb24tPnN5LAo+KwkJCWJhc2UsIHBpdGNo LCBCcHAsIHJlZ2lvbi0+ZHgsIHJlZ2lvbi0+ZHksCj4rCQkJcmVnaW9uLT53aWR0aCwgcmVnaW9u LT5oZWlnaHQsIEhXX1JPUDJfQ09QWSk7Cj4rCW15c3Bpbl91bmxvY2soJnNoYXJlLT5zbG9jayk7 Cj4rfQo+Kwo+K3N0YXRpYyB2b2lkIGx5bnhmYl9vcHNfaW1hZ2VibGl0KHN0cnVjdCBmYl9pbmZv ICppbmZvLCBjb25zdCBzdHJ1Y3QgZmJfaW1hZ2UgKmltYWdlKQo+K3sKPisJdW5zaWduZWQgaW50 IGJhc2UsIHBpdGNoLCBCcHA7Cj4rCXVuc2lnbmVkIGludCBmZ2NvbCwgYmdjb2w7Cj4rCXN0cnVj dCBseW54ZmJfcGFyICpwYXI7Cj4rCXN0cnVjdCBseW54X3NoYXJlICpzaGFyZTsKPisKPisJcGFy ID0gaW5mby0+cGFyOwo+KwlzaGFyZSA9IHBhci0+c2hhcmU7Cj4rCS8qIGVhY2ggdGltZSAyZCBm dW5jdGlvbiBiZWdpbiB0byB3b3JrLCBiZWxvdyB0aHJlZSB2YXJpYWJsZSBhbHdheXMgbmVlZAo+ KwkgKmJlIHNldCwgc2VlbXMgd2UgY2FuIHB1dCB0aGVtIHRvZ2V0aGVyIGluIHNvbWUgcGxhY2Ug ICovCj4rCWJhc2UgPSBwYXItPmNydGMub1NjcmVlbjsKPisJcGl0Y2ggPSBpbmZvLT5maXgubGlu ZV9sZW5ndGg7Cj4rCUJwcCA9IGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCA+PiAzOwo+Kwo+Kwlp ZiAoaW1hZ2UtPmRlcHRoID09IDEpIHsKPisJCWlmIChpbmZvLT5maXgudmlzdWFsID09IEZCX1ZJ U1VBTF9UUlVFQ09MT1IgfHwKPisJCQkJaW5mby0+Zml4LnZpc3VhbCA9PSBGQl9WSVNVQUxfRElS RUNUQ09MT1IpIHsKPisJCQlmZ2NvbCA9ICgodTMyICopaW5mby0+cHNldWRvX3BhbGV0dGUpW2lt YWdlLT5mZ19jb2xvcl07Cj4rCQkJYmdjb2wgPSAoKHUzMiAqKWluZm8tPnBzZXVkb19wYWxldHRl KVtpbWFnZS0+YmdfY29sb3JdOwo+KwkJfSBlbHNlewo+KwkJCWZnY29sID0gaW1hZ2UtPmZnX2Nv bG9yOwo+KwkJCWJnY29sID0gaW1hZ2UtPmJnX2NvbG9yOwo+KwkJfQo+KwkJZ290byBfZG9fd29y azsKPisJfQo+KwlyZXR1cm47Cj4rX2RvX3dvcms6Cj4rCW15c3Bpbl9sb2NrKCZzaGFyZS0+c2xv Y2spOwo+KwlzaGFyZS0+YWNjZWwuZGVfaW1hZ2VibGl0KCZzaGFyZS0+YWNjZWwsCj4rCQkJaW1h Z2UtPmRhdGEsIGltYWdlLT53aWR0aD4+MywgMCwKPisJCQliYXNlLCBwaXRjaCwgQnBwLAo+KwkJ CWltYWdlLT5keCwgaW1hZ2UtPmR5LAo+KwkJCWltYWdlLT53aWR0aCwgaW1hZ2UtPmhlaWdodCwK PisJCQlmZ2NvbCwgYmdjb2wsIEhXX1JPUDJfQ09QWSk7Cj4rCW15c3Bpbl91bmxvY2soJnNoYXJl LT5zbG9jayk7Cj4rfQo+Kwo+K3N0YXRpYyBpbnQgbHlueGZiX29wc19wYW5fZGlzcGxheShzdHJ1 Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKPisJCXN0cnVjdCBmYl9pbmZvICppbmZvKQo+K3sK PisJc3RydWN0IGx5bnhmYl9wYXIgKnBhcjsKPisJc3RydWN0IGx5bnhmYl9jcnRjICpjcnRjOwo+ KwlpbnQgcmV0Owo+KwlFTlRFUigpOwo+Kwo+KwlpZiAoIWluZm8pCj4rCQlMRUFWRSgtRUlOVkFM KTsKPisKPisJcmV0ID0gMDsKPisJcGFyID0gaW5mby0+cGFyOwo+KwljcnRjID0gJnBhci0+Y3J0 YzsKPisJcmV0ID0gY3J0Yy0+cHJvY19wYW5EaXNwbGF5KGNydGMsIHZhciwgaW5mbyk7Cj4rCj4r CUxFQVZFKHJldCk7Cj4rfQo+Kwo+K3N0YXRpYyBzdHJ1Y3QgZmJfb3BzIGx5bnhmYl9vcHMgPSB7 Cj4rCS5vd25lciA9IFRISVNfTU9EVUxFLAo+KwkuZmJfY2hlY2tfdmFyID0gIGx5bnhmYl9vcHNf Y2hlY2tfdmFyLAo+KwkuZmJfc2V0X3BhciA9IGx5bnhmYl9vcHNfc2V0X3BhciwKPisJLmZiX3Nl dGNvbHJlZyA9IGx5bnhmYl9vcHNfc2V0Y29scmVnLAo+KwkuZmJfYmxhbmsgPSBseW54ZmJfb3Bz X2JsYW5rLAo+KwkvKiB3aWxsIGJlIGhvb2tlZCBieSBoYXJkd2FyZSAqLwo+KwkuZmJfZmlsbHJl Y3QgPSBjZmJfZmlsbHJlY3QsCj4rCS5mYl9pbWFnZWJsaXQgPSBjZmJfaW1hZ2VibGl0LAo+Kwku ZmJfY29weWFyZWEgPSBjZmJfY29weWFyZWEsCj4rCS8qIGN1cnNvciAqLwo+KyNpZiBMSU5VWF9W RVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiwgNiwgMTApCj4rCS5mYl9jdXJzb3IgPSBs eW54ZmJfb3BzX2N1cnNvciwKPisjZWxzZQo+KwkuZmJfY3Vyc29yID0gc29mdF9jdXJzb3IsCj4r I2VuZGlmCj4rfTsKPisKPitzdGF0aWMgc2l6ZV90IHNwZWNfc2l6ZVtdID0gewo+KwlbU1BDX1NN NzUwXSA9IHNpemVvZihzdHJ1Y3Qgc203NTBfc2hhcmUpLAo+K307Cj4rCj4rc3RhdGljIFBST0Nf U1BFQ19TRVRVUCBzZXR1cF9yb3V0W10gPSB7Cj4rCVtTUENfU003NTBdID0gc203NTBmYl9zZXR1 cCwKPit9Owo+Kwo+K3N0YXRpYyBQUk9DX1NQRUNfTUFQIG1hcF9yb3V0W10gPSB7Cj4rCVtTUENf U003NTBdID0gaHdfc203NTBfbWFwLAo+K307Cj4rCj4rc3RhdGljIFBST0NfU1BFQ19JTklUSFcg aW5pdGh3X3JvdXRbXSA9IHsKPisJW1NQQ19TTTc1MF0gPSBod19zbTc1MF9pbml0aHcsCj4rfTsK PitzdGF0aWMgaW50IGdfc3BlY0lkOwo+Kwo+KyNpZmRlZiBDT05GSUdfUE0KPisjaWYgTElOVVhf VkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwgNiwgMTApCj4rc3RhdGljIHUzMiBwY2lf c3RhdGVbMTZdOwo+Kwo+K3N0YXRpYyBpbnQgbHlueGZiX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYg KnBkZXYsIHBtX21lc3NhZ2VfdCBtZXNnKQo+K3sKPisJaW50IHJldDsKPisJc3RydWN0IGZiX2lu Zm8gKmluZm87Cj4rCXN0cnVjdCBseW54X3NoYXJlICpzaGFyZTsKPisKPisJRU5URVIoKTsKPisJ cmV0ID0gMDsKPisJc2hhcmUgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Cj4rCj4rCWlmIChtZXNn ICE9IDIgfHwgbWVzZyA9PSBwZGV2LT5kZXYucG93ZXJfc3RhdGUpCj4rCQlyZXR1cm4gcmV0Owo+ Kwo+KwkvKiBzdXNwZW5kICovCj4rCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKPisKPisJaW5mbyA9 IHNoYXJlLT5mYmluZm9bMF07Cj4rCWlmIChpbmZvKSB7Cj4rCQlmYl9zZXRfc3VzcGVuZChpbmZv LCAxKTsKPisJfQo+Kwo+KwlpbmZvID0gc2hhcmUtPmZiaW5mb1sxXTsKPisKPisJaWYgKGluZm8p IHsKPisJCWZiX3NldF9zdXNwZW5kKGluZm8sIDEpOwo+Kwl9Cj4rCj4rCS8qIGhhcmR3YXJlIHN1 c3BlbmQgc3R1ZmZzICovCj4rCWlmIChtZXNnID09IDIgJiYgc2hhcmUtPnN1c3BlbmQpCj4rCQlz aGFyZS0+c3VzcGVuZChzaGFyZSk7Cj4rCj4rCXBjaV9zYXZlX3N0YXRlKHBkZXYsICZwY2lfc3Rh dGUpOwo+KwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Cj4rCXJldCA9IHBjaV9zZXRfcG93ZXJf c3RhdGUocGRldiwgbWVzZyk7Cj4rCj4rCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKPisJcGRldi0+ ZGV2LnBvd2VyX3N0YXRlID0gbWVzZzsKPisJTEVBVkUocmV0KTsKPit9Cj4rCj4rc3RhdGljIGlu dCBseW54ZmJfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQo+K3sKPisJaW50IHJldDsKPisJ c3RydWN0IGZiX2luZm8gKmluZm87Cj4rCXN0cnVjdCBseW54X3NoYXJlICpzaGFyZTsKPisJc3Ry dWN0IGx5bnhmYl9wYXIgKnBhcjsKPisJc3RydWN0IGx5bnhmYl9jcnRjICpjcnRjOwo+KwlzdHJ1 Y3QgbHlueF9jdXJzb3IgKmN1cnNvcjsKPisKPisJRU5URVIoKTsKPisJc2hhcmUgPSBwY2lfZ2V0 X2RydmRhdGEocGRldik7Cj4rCXJldCA9IDA7Cj4rCj4rCWFjcXVpcmVfY29uc29sZV9zZW0oKTsK PisKPisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCAwKTsKPisJcGNpX3Jlc3RvcmVfc3RhdGUo cGRldiwgJnBjaV9zdGF0ZSk7Cj4rCXBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwo+Kwo+KwlpZiAo cGRldi0+ZGV2LnBvd2VyX3N0YXRlID09IDIgJiYgc2hhcmUtPnJlc3VtZSkKPisJCXNoYXJlLT5y ZXN1bWUoc2hhcmUpOwo+Kwo+KwkoKmluaXRod19yb3V0W2dfc3BlY0lkXSkoc2hhcmUsIHBkZXYp Owo+Kwo+KwlpbmZvID0gc2hhcmUtPmZiaW5mb1swXTsKPisJaWYgKGluZm8pIHsKPisJCXBhciA9 IGluZm8tPnBhcjsKPisJCWNydGMgPSAmcGFyLT5jcnRjOwo+KwkJY3Vyc29yID0gJmNydGMtPmN1 cnNvcjsKPisJCW1lbXNldChjdXJzb3ItPnZzdGFydCwgMHgwLCBjdXJzb3ItPnNpemUpOwo+KwkJ bWVtc2V0KGNydGMtPnZTY3JlZW4sIDB4MCwgY3J0Yy0+dmlkbWVtX3NpemUpOwo+KwkJbHlueGZi X29wc19zZXRfcGFyKGluZm8pOwo+KwkJZmJfc2V0X3N1c3BlbmQoaW5mbywgMCk7Cj4rCX0KPisK PisJaW5mbyA9IHNoYXJlLT5mYmluZm9bMV07Cj4rCj4rCWlmIChpbmZvKSB7Cj4rCQlwYXIgPSBp bmZvLT5wYXI7Cj4rCQljcnRjID0gJnBhci0+Y3J0YzsKPisJCWN1cnNvciA9ICZjcnRjLT5jdXJz b3I7Cj4rCQltZW1zZXQoY3Vyc29yLT52c3RhcnQsIDB4MCwgY3Vyc29yLT5zaXplKTsKPisJCW1l bXNldChjcnRjLT52U2NyZWVuLCAweDAsIGNydGMtPnZpZG1lbV9zaXplKTsKPisJCWx5bnhmYl9v cHNfc2V0X3BhcihpbmZvKTsKPisJCWZiX3NldF9zdXNwZW5kKGluZm8sIDApOwo+Kwl9Cj4rCj4r CXJlbGVhc2VfY29uc29sZV9zZW0oKTsKPisJcGRldi0+ZGV2LnBvd2VyX3N0YXRlID0gMDsKPisJ TEVBVkUocmV0KTsKPit9Cj4rCj4rCj4rI2Vsc2UKPitzdGF0aWMgaW50IGx5bnhmYl9zdXNwZW5k KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3QgbWVzZykKPit7Cj4rCXN0cnVjdCBm Yl9pbmZvICppbmZvOwo+KwlzdHJ1Y3QgbHlueF9zaGFyZSAqc2hhcmU7Cj4rCWludCByZXQ7Cj4r CUVOVEVSKCk7Cj4rCj4rCWlmIChtZXNnLmV2ZW50ID09IHBkZXYtPmRldi5wb3dlci5wb3dlcl9z dGF0ZS5ldmVudCkKPisJCUxFQVZFKDApOwo+Kwo+KwlyZXQgPSAwOwo+KwlzaGFyZSA9IHBjaV9n ZXRfZHJ2ZGF0YShwZGV2KTsKPisJc3dpdGNoIChtZXNnLmV2ZW50KSB7Cj4rCWNhc2UgUE1fRVZF TlRfRlJFRVpFOgo+KyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiwg NiwgMTkpCj4rCWNhc2UgUE1fRVZFTlRfUFJFVEhBVzoKPisjZW5kaWYKPisJCQlwZGV2LT5kZXYu cG93ZXIucG93ZXJfc3RhdGUgPSBtZXNnOwo+KwkJCUxFQVZFKDApOwo+Kwl9Cj4rCj4rI2lmIExJ TlVYX1ZFUlNJT05fQ09ERSA8PSBLRVJORUxfVkVSU0lPTigyLCA2LCAzNSkKPisJYWNxdWlyZV9j b25zb2xlX3NlbSgpOwo+KyNlbHNlCj4rCWNvbnNvbGVfbG9jaygpOwo+KyNlbmRpZgo+KyNpZiBM SU5VWF9WRVJTSU9OX0NPREUgPD0gS0VSTkVMX1ZFUlNJT04oMiwgNiwgMjQpCj4rCWlmIChtZXNn LmV2ZW50ICYgUE1fRVZFTlRfU1VTUEVORCkgewo+KyNlbHNlCj4rCQlpZiAobWVzZy5ldmVudCAm IFBNX0VWRU5UX1NMRUVQKSB7Cj4rI2VuZGlmCj4rCQkJaW5mbyA9IHNoYXJlLT5mYmluZm9bMF07 Cj4rCQkJaWYgKGluZm8pCj4rCQkJCWZiX3NldF9zdXNwZW5kKGluZm8sIDEpOy8qIDEgbWVhbnMg ZG8gc3VzcGVuZCovCj4rCj4rCQkJaW5mbyA9IHNoYXJlLT5mYmluZm9bMV07Cj4rCQkJaWYgKGlu Zm8pCj4rCQkJCWZiX3NldF9zdXNwZW5kKGluZm8sIDEpOy8qIDEgbWVhbnMgZG8gc3VzcGVuZCov Cj4rCj4rCQkJcmV0ID0gcGNpX3NhdmVfc3RhdGUocGRldik7Cj4rCQkJaWYgKHJldCkgewo+KwkJ CQllcnJfbXNnKCJlcnJvcjolZCBvY2N1cmVkIGluIHBjaV9zYXZlX3N0YXRlXG4iLCByZXQpOwo+ KwkJCQlMRUFWRShyZXQpOwo+KwkJCX0KPisKPisJCQkvKiBzZXQgY2hpcCB0byBzbGVlcCBtb2Rl CSovCj4rCQkJaWYgKHNoYXJlLT5zdXNwZW5kKQo+KwkJCQkoKnNoYXJlLT5zdXNwZW5kKShzaGFy ZSk7Cj4rCj4rCQkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwo+KwkJCXJldCA9IHBjaV9zZXRf cG93ZXJfc3RhdGUocGRldiwgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBtZXNnKSk7Cj4rCQkJaWYg KHJldCkgewo+KwkJCQllcnJfbXNnKCJlcnJvcjolZCBvY2N1cmVkIGluIHBjaV9zZXRfcG93ZXJf c3RhdGVcbiIsIHJldCk7Cj4rCQkJCUxFQVZFKHJldCk7Cj4rCQkJfQo+KwkJfQo+Kwo+KwkJcGRl di0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gbWVzZzsKPisjaWYgTElOVVhfVkVSU0lPTl9DT0RF IDw9IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDM1KQo+KwkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOwo+ KyNlbHNlCj4rCQljb25zb2xlX3VubG9jaygpOwo+KyNlbmRpZgo+KwkJTEVBVkUocmV0KTsKPisJ fQo+Kwo+KwlzdGF0aWMgaW50IGx5bnhmYl9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCj4r CXsKPisJCXN0cnVjdCBmYl9pbmZvICppbmZvOwo+KwkJc3RydWN0IGx5bnhfc2hhcmUgKnNoYXJl Owo+Kwo+KwkJc3RydWN0IGx5bnhmYl9wYXIgKnBhcjsKPisJCXN0cnVjdCBseW54ZmJfY3J0YyAq Y3J0YzsKPisJCXN0cnVjdCBseW54X2N1cnNvciAqY3Vyc29yOwo+Kwo+KwkJaW50IHJldDsKPisJ CUVOVEVSKCk7Cj4rCj4rCQlyZXQgPSAwOwo+KwkJc2hhcmUgPSBwY2lfZ2V0X2RydmRhdGEocGRl dik7Cj4rCj4rI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8PSBLRVJORUxfVkVSU0lPTigyLCA2LCAz NSkKPisJCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKPisjZWxzZQo+KwkJY29uc29sZV9sb2NrKCk7 Cj4rI2VuZGlmCj4rCj4rCQlyZXQgPSBwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7 Cj4rCQlpZiAocmV0ICE9IDApIHsKPisJCQllcnJfbXNnKCJlcnJvcjolZCBvY2N1cmVkIGluIHBj aV9zZXRfcG93ZXJfc3RhdGVcbiIsIHJldCk7Cj4rCQkJTEVBVkUocmV0KTsKPisJCX0KPisKPisK PisJCWlmIChwZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUuZXZlbnQgIT0gUE1fRVZFTlRfRlJF RVpFKSB7Cj4rI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8PSBLRVJORUxfVkVSU0lPTigyLCA2LCAz NSkKPisJCQkvKiBmb3IgbGludXggMi42LjM1IGFuZCBsb3dlciAqLwo+KwkJCXJldCA9IHBjaV9y ZXN0b3JlX3N0YXRlKHBkZXYpOwo+KwkJCWlmIChyZXQgIT0gMCkgewo+KwkJCQllcnJfbXNnKCJl cnJvcjolZCBvY2N1cmVkIGluIHBjaV9yZXN0b3JlX3N0YXRlXG4iLCByZXQpOwo+KwkJCQlMRUFW RShyZXQpOwo+KwkJCX0KPisjZWxzZQo+KwkJCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOwo+KyNl bmRpZgo+KwkJCXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwo+KwkJCWlmIChyZXQgIT0g MCkgewo+KwkJCQllcnJfbXNnKCJlcnJvcjolZCBvY2N1cmVkIGluIHBjaV9lbmFibGVfZGV2aWNl XG4iLCByZXQpOwo+KwkJCQlMRUFWRShyZXQpOwo+KwkJCX0KPisJCQlwY2lfc2V0X21hc3Rlcihw ZGV2KTsKPisJCX0KPisJCWlmIChzaGFyZS0+cmVzdW1lKQo+KwkJCSgqc2hhcmUtPnJlc3VtZSko c2hhcmUpOwo+Kwo+KwkJKCppbml0aHdfcm91dFtnX3NwZWNJZF0pKHNoYXJlLCBwZGV2KTsKPisK PisKPisJCWluZm8gPSBzaGFyZS0+ZmJpbmZvWzBdOwo+Kwo+KwkJaWYgKGluZm8pIHsKPisJCQlw YXIgPSBpbmZvLT5wYXI7Cj4rCQkJY3J0YyA9ICZwYXItPmNydGM7Cj4rCQkJY3Vyc29yID0gJmNy dGMtPmN1cnNvcjsKPisJCQltZW1zZXQoY3Vyc29yLT52c3RhcnQsIDB4MCwgY3Vyc29yLT5zaXpl KTsKPisJCQltZW1zZXQoY3J0Yy0+dlNjcmVlbiwgMHgwLCBjcnRjLT52aWRtZW1fc2l6ZSk7Cj4r CQkJbHlueGZiX29wc19zZXRfcGFyKGluZm8pOwo+KwkJCWZiX3NldF9zdXNwZW5kKGluZm8sIDAp Owo+KwkJfQo+Kwo+KwkJaW5mbyA9IHNoYXJlLT5mYmluZm9bMV07Cj4rCj4rCQlpZiAoaW5mbykg ewo+KwkJCXBhciA9IGluZm8tPnBhcjsKPisJCQljcnRjID0gJnBhci0+Y3J0YzsKPisJCQljdXJz b3IgPSAmY3J0Yy0+Y3Vyc29yOwo+KwkJCW1lbXNldChjdXJzb3ItPnZzdGFydCwgMHgwLCBjdXJz b3ItPnNpemUpOwo+KwkJCW1lbXNldChjcnRjLT52U2NyZWVuLCAweDAsIGNydGMtPnZpZG1lbV9z aXplKTsKPisJCQlseW54ZmJfb3BzX3NldF9wYXIoaW5mbyk7Cj4rCQkJZmJfc2V0X3N1c3BlbmQo aW5mbywgMCk7Cj4rCQl9Cj4rCj4rCj4rI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8PSBLRVJORUxf VkVSU0lPTigyLCA2LCAzNSkKPisJCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKPisjZWxzZQo+KwkJ Y29uc29sZV91bmxvY2soKTsKPisjZW5kaWYKPisJCUxFQVZFKHJldCk7Cj4rCX0KPisjZW5kaWYK PisjZW5kaWYKPisKPitzdGF0aWMgaW50IGx5bnhmYl9vcHNfY2hlY2tfdmFyKHN0cnVjdCBmYl92 YXJfc2NyZWVuaW5mbyAqdmFyLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKPit7Cj4rCXN0cnVjdCBs eW54ZmJfcGFyICpwYXI7Cj4rCXN0cnVjdCBseW54ZmJfY3J0YyAqY3J0YzsKPisJc3RydWN0IGx5 bnhmYl9vdXRwdXQgKm91dHB1dDsKPisJc3RydWN0IGx5bnhfc2hhcmUgKnNoYXJlOwo+KwlpbnQg cmV0Owo+KwlyZXNvdXJjZV9zaXplX3QgcmVxdWVzdDsKPisKPisJRU5URVIoKTsKPisJcGFyID0g aW5mby0+cGFyOwo+KwljcnRjID0gJnBhci0+Y3J0YzsKPisJb3V0cHV0ID0gJnBhci0+b3V0cHV0 Owo+KwlzaGFyZSA9IHBhci0+c2hhcmU7Cj4rCXJldCA9IDA7Cj4rCj4rCWRiZ19tc2coImNoZWNr IHZhcjolZHglZC0lZFxuIiwKPisJCQl2YXItPnhyZXMsCj4rCQkJdmFyLT55cmVzLAo+KwkJCXZh ci0+Yml0c19wZXJfcGl4ZWwpOwo+Kwo+Kwo+Kwlzd2l0Y2ggKHZhci0+Yml0c19wZXJfcGl4ZWwp IHsKPisJY2FzZSA4Ogo+KwljYXNlIDE2Ogo+KwljYXNlIDI0OiAvKiBzdXBwb3J0IDI0IGJwcCBm b3Igb25seSBseW54NzEyLzcyMi83MjAgKi8KPisJY2FzZSAzMjoKPisJCWJyZWFrOwo+KwlkZWZh dWx0Ogo+KwkJZXJyX21zZygiYnBwICVkIG5vdCBzdXBwb3J0ZWRcbiIsIHZhci0+Yml0c19wZXJf cGl4ZWwpOwo+KwkJcmV0ID0gLUVJTlZBTDsKPisJCWdvdG8gZXhpdDsKPisJfQo+Kwo+Kwlzd2l0 Y2ggKHZhci0+Yml0c19wZXJfcGl4ZWwpIHsKPisJY2FzZSA4Ogo+KwkJaW5mby0+Zml4LnZpc3Vh bCA9IEZCX1ZJU1VBTF9QU0VVRE9DT0xPUjsKPisJCXZhci0+cmVkLm9mZnNldCA9IDA7Cj4rCQl2 YXItPnJlZC5sZW5ndGggPSA4Owo+KwkJdmFyLT5ncmVlbi5vZmZzZXQgPSAwOwo+KwkJdmFyLT5n cmVlbi5sZW5ndGggPSA4Owo+KwkJdmFyLT5ibHVlLm9mZnNldCA9IDA7Cj4rCQl2YXItPmJsdWUu bGVuZ3RoID0gODsKPisJCXZhci0+dHJhbnNwLmxlbmd0aCA9IDA7Cj4rCQl2YXItPnRyYW5zcC5v ZmZzZXQgPSAwOwo+KwkJYnJlYWs7Cj4rCWNhc2UgMTY6Cj4rCQl2YXItPnJlZC5vZmZzZXQgPSAx MTsKPisJCXZhci0+cmVkLmxlbmd0aCA9IDU7Cj4rCQl2YXItPmdyZWVuLm9mZnNldCA9IDU7Cj4r CQl2YXItPmdyZWVuLmxlbmd0aCA9IDY7Cj4rCQl2YXItPmJsdWUub2Zmc2V0ID0gMDsKPisJCXZh ci0+Ymx1ZS5sZW5ndGggPSA1Owo+KwkJdmFyLT50cmFuc3AubGVuZ3RoID0gMDsKPisJCXZhci0+ dHJhbnNwLm9mZnNldCA9IDA7Cj4rCQlpbmZvLT5maXgudmlzdWFsID0gRkJfVklTVUFMX1RSVUVD T0xPUjsKPisJCWJyZWFrOwo+KwljYXNlIDI0Ogo+KwljYXNlIDMyOgo+KwkJdmFyLT5yZWQub2Zm c2V0ID0gMTY7Cj4rCQl2YXItPnJlZC5sZW5ndGggPSA4Owo+KwkJdmFyLT5ncmVlbi5vZmZzZXQg PSA4Owo+KwkJdmFyLT5ncmVlbi5sZW5ndGggPSA4Owo+KwkJdmFyLT5ibHVlLm9mZnNldCA9IDAg Owo+KwkJdmFyLT5ibHVlLmxlbmd0aCA9IDg7Cj4rCQlpbmZvLT5maXgudmlzdWFsID0gRkJfVklT VUFMX1RSVUVDT0xPUjsKPisJCWJyZWFrOwo+KwlkZWZhdWx0Ogo+KwkJcmV0ID0gLUVJTlZBTDsK PisJCWJyZWFrOwo+Kwl9Cj4rCXZhci0+aGVpZ2h0ID0gdmFyLT53aWR0aCA9IC0xOwo+Kwl2YXIt PmFjY2VsX2ZsYWdzID0gRkJfQUNDRUxGX1RFWFQ7Cj4rCj4rCS8qIGNoZWNrIGlmIGN1cnJlbnQg ZmIncyB2aWRlbyBtZW1vcnkgYmlnIGVub3VnaHQgdG8gaG9sZCB0aGUgb25zY3JlZW4gKi8KPisJ cmVxdWVzdCA9IHZhci0+eHJlc192aXJ0dWFsICogKHZhci0+Yml0c19wZXJfcGl4ZWwgPj4gMyk7 Cj4rCS8qIGRlZmF1bHR5IGNydGMtPmNoYW5uZWwgZ28gd2l0aCBwYXItPmluZGV4ICovCj4rCj4r CXJlcXVlc3QgPSBQQURESU5HKGNydGMtPmxpbmVfcGFkLCByZXF1ZXN0KTsKPisJcmVxdWVzdCA9 IHJlcXVlc3QgKiB2YXItPnlyZXNfdmlydHVhbDsKPisJaWYgKGNydGMtPnZpZG1lbV9zaXplIDwg cmVxdWVzdCkgewo+KwkJZXJyX21zZygibm90IGVub3VnaCB2aWRlbyBtZW1vcnkgZm9yIG1vZGVc biIpOwo+KwkJTEVBVkUoLUVOT01FTSk7Cj4rCX0KPisKPisJcmV0ID0gb3V0cHV0LT5wcm9jX2No ZWNrTW9kZShvdXRwdXQsIHZhcik7Cj4rCWlmICghcmV0KQo+KwkJcmV0ID0gY3J0Yy0+cHJvY19j aGVja01vZGUoY3J0YywgdmFyKTsKPitleGl0Ogo+KwlMRUFWRShyZXQpOwo+K30KPisKPitzdGF0 aWMgaW50IGx5bnhmYl9vcHNfc2V0X3BhcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKPit7Cj4rCXN0 cnVjdCBseW54ZmJfcGFyICpwYXI7Cj4rCXN0cnVjdCBseW54X3NoYXJlICpzaGFyZTsKPisJc3Ry dWN0IGx5bnhmYl9jcnRjICpjcnRjOwo+KwlzdHJ1Y3QgbHlueGZiX291dHB1dCAqb3V0cHV0Owo+ KwlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhcjsKPisJc3RydWN0IGZiX2ZpeF9zY3JlZW5p bmZvICpmaXg7Cj4rCWludCByZXQ7Cj4rCXVuc2lnbmVkIGludCBsaW5lX2xlbmd0aDsKPisJRU5U RVIoKTsKPisKPisJaWYgKCFpbmZvKQo+KwkJTEVBVkUoLUVJTlZBTCk7Cj4rCj4rCXJldCA9IDA7 Cj4rCXBhciA9IGluZm8tPnBhcjsKPisJc2hhcmUgPSBwYXItPnNoYXJlOwo+KwljcnRjID0gJnBh ci0+Y3J0YzsKPisJb3V0cHV0ID0gJnBhci0+b3V0cHV0Owo+Kwl2YXIgPSAmaW5mby0+dmFyOwo+ KwlmaXggPSAmaW5mby0+Zml4Owo+Kwo+KwkvKiBmaXggc3RydWN0dXIgaXMgbm90IHNvIEZJWCAu Li4gKi8KPisJbGluZV9sZW5ndGggPSB2YXItPnhyZXNfdmlydHVhbCAqIHZhci0+Yml0c19wZXJf cGl4ZWwgLyA4Owo+KwlsaW5lX2xlbmd0aCA9IFBBRERJTkcoY3J0Yy0+bGluZV9wYWQsIGxpbmVf bGVuZ3RoKTsKPisJZml4LT5saW5lX2xlbmd0aCA9IGxpbmVfbGVuZ3RoOwo+KwllcnJfbXNnKCJm aXgtPmxpbmVfbGVuZ3RoID0gJWRcbiIsIGZpeC0+bGluZV9sZW5ndGgpOwo+Kwo+KwkvKiB2YXIt PnJlZCwgZ3JlZW4sIGJsdWUsIHRyYW5zcCBhcmUgbmVlZCB0byBiZSBzZXQgYnkgZHJpdmVyCj4r CSAqYW5kIHRoZXNlIGRhdGEgc2hvdWxkIGJlIHNldCBiZWZvcmUgc2V0Y29scmVnIHJvdXRpbmUK PisJICoqLwo+Kwo+Kwlzd2l0Y2ggKHZhci0+Yml0c19wZXJfcGl4ZWwpIHsKPisJY2FzZSA4Ogo+ KwkJZml4LT52aXN1YWwgPSBGQl9WSVNVQUxfUFNFVURPQ09MT1I7Cj4rCQl2YXItPnJlZC5vZmZz ZXQgPSAwOwo+KwkJdmFyLT5yZWQubGVuZ3RoID0gODsKPisJCXZhci0+Z3JlZW4ub2Zmc2V0ID0g MDsKPisJCXZhci0+Z3JlZW4ubGVuZ3RoID0gODsKPisJCXZhci0+Ymx1ZS5vZmZzZXQgPSAwOwo+ KwkJdmFyLT5ibHVlLmxlbmd0aCA9IDg7Cj4rCQl2YXItPnRyYW5zcC5sZW5ndGggPSAwOwo+KwkJ dmFyLT50cmFuc3Aub2Zmc2V0ID0gMDsKPisJCWJyZWFrOwo+KwljYXNlIDE2Ogo+KwkJdmFyLT5y ZWQub2Zmc2V0ID0gMTE7Cj4rCQl2YXItPnJlZC5sZW5ndGggPSA1Owo+KwkJdmFyLT5ncmVlbi5v ZmZzZXQgPSA1Owo+KwkJdmFyLT5ncmVlbi5sZW5ndGggPSA2Owo+KwkJdmFyLT5ibHVlLm9mZnNl dCA9IDA7Cj4rCQl2YXItPmJsdWUubGVuZ3RoID0gNTsKPisJCXZhci0+dHJhbnNwLmxlbmd0aCA9 IDA7Cj4rCQl2YXItPnRyYW5zcC5vZmZzZXQgPSAwOwo+KwkJZml4LT52aXN1YWwgPSBGQl9WSVNV QUxfVFJVRUNPTE9SOwo+KwkJYnJlYWs7Cj4rCWNhc2UgMjQ6Cj4rCWNhc2UgMzI6Cj4rCQl2YXIt PnJlZC5vZmZzZXQgPSAxNjsKPisJCXZhci0+cmVkLmxlbmd0aCA9IDg7Cj4rCQl2YXItPmdyZWVu Lm9mZnNldCA9IDg7Cj4rCQl2YXItPmdyZWVuLmxlbmd0aCA9IDg7Cj4rCQl2YXItPmJsdWUub2Zm c2V0ID0gMCA7Cj4rCQl2YXItPmJsdWUubGVuZ3RoID0gODsKPisJCWZpeC0+dmlzdWFsID0gRkJf VklTVUFMX1RSVUVDT0xPUjsKPisJCWJyZWFrOwo+KwlkZWZhdWx0Ogo+KwkJcmV0ID0gLUVJTlZB TDsKPisJCWJyZWFrOwo+Kwl9Cj4rCXZhci0+aGVpZ2h0ID0gdmFyLT53aWR0aCA9IC0xOwo+Kwl2 YXItPmFjY2VsX2ZsYWdzID0gRkJfQUNDRUxGX1RFWFQ7Cj4rCj4rCWlmIChyZXQpIHsKPisJCWVy cl9tc2coInBpeGVsIGJwcCBmb3JtYXQgbm90IHNhdGlzZmllZFxuLiIpOwo+KwkJTEVBVkUocmV0 KTsKPisJfQo+KwlyZXQgPSBjcnRjLT5wcm9jX3NldE1vZGUoY3J0YywgdmFyLCBmaXgpOwo+Kwlp ZiAoIXJldCkKPisJCXJldCA9IG91dHB1dC0+cHJvY19zZXRNb2RlKG91dHB1dCwgdmFyLCBmaXgp Owo+KwlMRUFWRShyZXQpOwo+K30KPitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjaGFuX3Rv X2ZpZWxkKHVuc2lnbmVkIGludCBjaGFuLCBzdHJ1Y3QgZmJfYml0ZmllbGQgKmJmKQo+K3sKPisJ Y2hhbiAmPSAweGZmZmY7Cj4rCWNoYW4gPj49IDE2IC0gYmYtPmxlbmd0aDsKPisJcmV0dXJuIGNo YW4gPDwgYmYtPm9mZnNldDsKPit9Cj4rCj4rc3RhdGljIGludCBseW54ZmJfb3BzX3NldGNvbHJl Zyh1bnNpZ25lZCByZWdubywgdW5zaWduZWQgcmVkLAo+KwkJdW5zaWduZWQgZ3JlZW4sIHVuc2ln bmVkIGJsdWUsCj4rCQl1bnNpZ25lZCB0cmFuc3AsIHN0cnVjdCBmYl9pbmZvICppbmZvKQo+K3sK PisJc3RydWN0IGx5bnhmYl9wYXIgKnBhcjsKPisJc3RydWN0IGx5bnhmYl9jcnRjICpjcnRjOwo+ KwlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhcjsKPisJaW50IHJldDsKPisKPisJcGFyID0g aW5mby0+cGFyOwo+KwljcnRjID0gJnBhci0+Y3J0YzsKPisJdmFyID0gJmluZm8tPnZhcjsKPisJ cmV0ID0gMDsKPisKPisJLypkYmdfbXNnKCJyZWdubz0lZCwgcmVkPSVkLCBncmVlbj0lZCwgYmx1 ZT0lZFxuIiwgcmVnbm8sIHJlZCwgZ3JlZW4sIGJsdWUpOyovCj4rCWlmIChyZWdubyA+IDI1Nikg ewo+KwkJZXJyX21zZygicmVnbm8gPSAlZFxuIiwgcmVnbm8pOwo+KwkJTEVBVkUoLUVJTlZBTCk7 Cj4rCX0KPisKPisJaWYgKGluZm8tPnZhci5ncmF5c2NhbGUpCj4rCQlyZWQgPSBncmVlbiA9IGJs dWUgPSAocmVkICogNzcgKyBncmVlbiAqIDE1MSArIGJsdWUgKiAyOCkgPj4gODsKPisKPisJaWYg KHZhci0+Yml0c19wZXJfcGl4ZWwgPT0gOCAmJiBpbmZvLT5maXgudmlzdWFsID09IEZCX1ZJU1VB TF9QU0VVRE9DT0xPUikgewo+KwkJcmVkID4+PSA4Owo+KwkJZ3JlZW4gPj49IDg7Cj4rCQlibHVl ID4+PSA4Owo+KwkJcmV0ID0gY3J0Yy0+cHJvY19zZXRDb2xSZWcoY3J0YywgcmVnbm8sIHJlZCwg Z3JlZW4sIGJsdWUpOwo+KwkJZ290byBleGl0Owo+Kwl9Cj4rCj4rCj4rCWlmIChpbmZvLT5maXgu dmlzdWFsID09IEZCX1ZJU1VBTF9UUlVFQ09MT1IgJiYgcmVnbm8gPCAyNTYpIHsKPisJCXUzMiB2 YWw7Cj4rCQlpZiAodmFyLT5iaXRzX3Blcl9waXhlbCA9PSAxNiB8fAo+KwkJCQl2YXItPmJpdHNf cGVyX3BpeGVsID09IDMyIHx8Cj4rCQkJCXZhci0+Yml0c19wZXJfcGl4ZWwgPT0gMjQpIHsKPisJ CQl2YWwgPSBjaGFuX3RvX2ZpZWxkKHJlZCwgJnZhci0+cmVkKTsKPisJCQl2YWwgfD0gY2hhbl90 b19maWVsZChncmVlbiwgJnZhci0+Z3JlZW4pOwo+KwkJCXZhbCB8PSBjaGFuX3RvX2ZpZWxkKGJs dWUsICZ2YXItPmJsdWUpOwo+KwkJCXBhci0+cHNldWRvX3BhbGV0dGVbcmVnbm9dID0gdmFsOwo+ KwkJCWdvdG8gZXhpdDsKPisJCX0KPisJfQo+Kwo+KwlyZXQgPSAtRUlOVkFMOwo+Kwo+K2V4aXQ6 Cj4rCXJldHVybiByZXQ7Cj4rCUxFQVZFKHJldCk7Cj4rCj4rfQo+Kwo+K3N0YXRpYyBpbnQgbHlu eGZiX29wc19ibGFuayhpbnQgYmxhbmssIHN0cnVjdCBmYl9pbmZvICppbmZvKQo+K3sKPisJc3Ry dWN0IGx5bnhmYl9wYXIgKnBhcjsKPisJc3RydWN0IGx5bnhmYl9vdXRwdXQgKm91dHB1dDsKPisJ RU5URVIoKTsKPisJZGJnX21zZygiYmxhbmsgPSAlZC5cbiIsIGJsYW5rKTsKPisJcGFyID0gaW5m by0+cGFyOwo+KwlvdXRwdXQgPSAmcGFyLT5vdXRwdXQ7Cj4rCUxFQVZFKG91dHB1dC0+cHJvY19z ZXRCTEFOSyhvdXRwdXQsIGJsYW5rKSk7Cj4rfQo+K3N0YXRpYyBpbnQgc203NTBmYl9zZXRfZHJ2 KHN0cnVjdCBseW54ZmJfcGFyICpwYXIpCj4rewo+KwlpbnQgcmV0Owo+KwlzdHJ1Y3QgbHlueF9z aGFyZSAqc2hhcmU7Cj4rCXN0cnVjdCBzbTc1MF9zaGFyZSAqc3BlY19zaGFyZTsKPisJc3RydWN0 IGx5bnhmYl9vdXRwdXQgKm91dHB1dDsKPisJc3RydWN0IGx5bnhmYl9jcnRjICpjcnRjOwo+KwlF TlRFUigpOwo+KwlyZXQgPSAwOwo+Kwo+KwlzaGFyZSA9IHBhci0+c2hhcmU7Cj4rCXNwZWNfc2hh cmUgPSBjb250YWluZXJfb2Yoc2hhcmUsIHN0cnVjdCBzbTc1MF9zaGFyZSwgc2hhcmUpOwo+Kwlv dXRwdXQgPSAmcGFyLT5vdXRwdXQ7Cj4rCWNydGMgPSAmcGFyLT5jcnRjOwo+Kwo+KwljcnRjLT52 aWRtZW1fc2l6ZSA9IChzaGFyZS0+ZHVhbCkgPyBzaGFyZS0+dmlkbWVtX3NpemU+PjEgOiBzaGFy ZS0+dmlkbWVtX3NpemU7Cj4rCS8qIHNldHVwIGNydGMgYW5kIG91dHB1dCBtZW1iZXIgKi8KPisJ c3BlY19zaGFyZS0+aHdDdXJzb3IgPSBnX2h3Y3Vyc29yOwo+Kwo+KwljcnRjLT5wcm9jX3NldE1v ZGUgPSBod19zbTc1MF9jcnRjX3NldE1vZGU7Cj4rCWNydGMtPnByb2NfY2hlY2tNb2RlID0gaHdf c203NTBfY3J0Y19jaGVja01vZGU7Cj4rCWNydGMtPnByb2Nfc2V0Q29sUmVnID0gaHdfc203NTBf c2V0Q29sUmVnOwo+KwljcnRjLT5wcm9jX3BhbkRpc3BsYXkgPSBod19zbTc1MF9wYW5fZGlzcGxh eTsKPisJY3J0Yy0+Y2xlYXIgPSBod19zbTc1MF9jcnRjX2NsZWFyOwo+KwljcnRjLT5saW5lX3Bh ZCA9IDE2Owo+KwkvKmNydGMtPnhwYW5zdGVwID0gY3J0Yy0+eXBhbnN0ZXAgPSBjcnRjLT55d3Jh cHN0ZXAgPSAwOyovCj4rCWNydGMtPnhwYW5zdGVwID0gODsKPisJY3J0Yy0+eXBhbnN0ZXAgPSAx Owo+KwljcnRjLT55d3JhcHN0ZXAgPSAwOwo+Kwo+KwlvdXRwdXQtPnByb2Nfc2V0TW9kZSA9IGh3 X3NtNzUwX291dHB1dF9zZXRNb2RlOwo+KwlvdXRwdXQtPnByb2NfY2hlY2tNb2RlID0gaHdfc203 NTBfb3V0cHV0X2NoZWNrTW9kZTsKPisKPisJb3V0cHV0LT5wcm9jX3NldEJMQU5LID0gKHNoYXJl LT5yZXZpZCA9PSBTTTc1MExFX1JFVklTSU9OX0lEKSA/IGh3X3NtNzUwbGVfc2V0QkxBTksgOiBo d19zbTc1MF9zZXRCTEFOSzsKPisJb3V0cHV0LT5jbGVhciA9IGh3X3NtNzUwX291dHB1dF9jbGVh cjsKPisJLyogY2hpcCBzcGVjaWZpYyBwaGFzZSAqLwo+KwlzaGFyZS0+YWNjZWwuZGVfd2FpdCA9 IChzaGFyZS0+cmV2aWQgPT0gU003NTBMRV9SRVZJU0lPTl9JRCkgPyBod19zbTc1MGxlX2RlV2Fp dCA6IGh3X3NtNzUwX2RlV2FpdDsKPisJc3dpdGNoIChzcGVjX3NoYXJlLT5zdGF0ZS5kYXRhZmxv dykgewo+KwljYXNlIHNtNzUwX3NpbXVsX3ByaToKPisJCQlvdXRwdXQtPnBhdGhzID0gc203NTBf cG5jOwo+KwkJCWNydGMtPmNoYW5uZWwgPSBzbTc1MF9wcmltYXJ5Owo+KwkJCWNydGMtPm9TY3Jl ZW4gPSAwOwo+KwkJCWNydGMtPnZTY3JlZW4gPSBzaGFyZS0+cHZNZW07Cj4rCQkJaW5mX21zZygi dXNlIHNpbXVsIHByaW1hcnkgbW9kZVxuIik7Cj4rCQkJYnJlYWs7Cj4rCWNhc2Ugc203NTBfc2lt dWxfc2VjOgo+KwkJCW91dHB1dC0+cGF0aHMgPSBzbTc1MF9wbmM7Cj4rCQkJY3J0Yy0+Y2hhbm5l bCA9IHNtNzUwX3NlY29uZGFyeTsKPisJCQljcnRjLT5vU2NyZWVuID0gMDsKPisJCQljcnRjLT52 U2NyZWVuID0gc2hhcmUtPnB2TWVtOwo+KwkJCWJyZWFrOwo+KwljYXNlIHNtNzUwX2R1YWxfbm9y bWFsOgo+KwkJCWlmIChwYXItPmluZGV4ID09IDApIHsKPisJCQkJb3V0cHV0LT5wYXRocyA9IHNt NzUwX3BhbmVsOwo+KwkJCQljcnRjLT5jaGFubmVsID0gc203NTBfcHJpbWFyeTsKPisJCQkJY3J0 Yy0+b1NjcmVlbiA9IDA7Cj4rCQkJCWNydGMtPnZTY3JlZW4gPSBzaGFyZS0+cHZNZW07Cj4rCQkJ fSBlbHNlewo+KwkJCQlvdXRwdXQtPnBhdGhzID0gc203NTBfY3J0Owo+KwkJCQljcnRjLT5jaGFu bmVsID0gc203NTBfc2Vjb25kYXJ5Owo+KwkJCQkvKiBub3QgY29uc2lkZXIgb2YgcGFkZGluZyBz dHVmZnMgZm9yIG9TY3JlZW4sIG5lZWQgZml4Ki8KPisJCQkJY3J0Yy0+b1NjcmVlbiA9IChzaGFy ZS0+dmlkbWVtX3NpemUgPj4gMSk7Cj4rCQkJCWNydGMtPnZTY3JlZW4gPSBzaGFyZS0+cHZNZW0g KyBjcnRjLT5vU2NyZWVuOwo+KwkJCX0KPisJCQlicmVhazsKPisJY2FzZSBzbTc1MF9kdWFsX3N3 YXA6Cj4rCQkJaWYgKHBhci0+aW5kZXggPT0gMCkgewo+KwkJCQlvdXRwdXQtPnBhdGhzID0gc203 NTBfcGFuZWw7Cj4rCQkJCWNydGMtPmNoYW5uZWwgPSBzbTc1MF9zZWNvbmRhcnk7Cj4rCQkJCWNy dGMtPm9TY3JlZW4gPSAwOwo+KwkJCQljcnRjLT52U2NyZWVuID0gc2hhcmUtPnB2TWVtOwo+KwkJ CX0gZWxzZXsKPisJCQkJb3V0cHV0LT5wYXRocyA9IHNtNzUwX2NydDsKPisJCQkJY3J0Yy0+Y2hh bm5lbCA9IHNtNzUwX3ByaW1hcnk7Cj4rCQkJCS8qIG5vdCBjb25zaWRlciBvZiBwYWRkaW5nIHN0 dWZmcyBmb3Igb1NjcmVlbiwgbmVlZCBmaXgqLwo+KwkJCQljcnRjLT5vU2NyZWVuID0gKHNoYXJl LT52aWRtZW1fc2l6ZSA+PiAxKTsKPisJCQkJY3J0Yy0+dlNjcmVlbiA9IHNoYXJlLT5wdk1lbSAr IGNydGMtPm9TY3JlZW47Cj4rCQkJfQo+KwkJCWJyZWFrOwo+KwlkZWZhdWx0Ogo+KwkJCXJldCA9 IC1FSU5WQUw7Cj4rCX0KPisKPisJTEVBVkUocmV0KTsKPit9Cj4rCj4rc3RhdGljIGludCBfX2Rl dmluaXQgbHlueGZiX3NldF9mYmluZm8oc3RydWN0IGZiX2luZm8gKmluZm8sIGludCBpbmRleCkK Pit7Cj4rCWludCBpOwo+KwlzdHJ1Y3QgbHlueGZiX3BhciAqcGFyOwo+KwlzdHJ1Y3QgbHlueF9z aGFyZSAqc2hhcmU7Cj4rCXN0cnVjdCBseW54ZmJfY3J0YyAqY3J0YzsKPisJc3RydWN0IGx5bnhm Yl9vdXRwdXQgKm91dHB1dDsKPisJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXI7Cj4rCXN0 cnVjdCBmYl9maXhfc2NyZWVuaW5mbyAqZml4Owo+Kwo+Kwljb25zdCBzdHJ1Y3QgZmJfdmlkZW9t b2RlICpwZGJbXSA9IHsKPisJCU5VTEwsIE5VTEwsIHZlc2FfbW9kZXMsCj4rCX07Cj4rCWludCBj ZGJbXSA9IHswLCAwLCBWRVNBX01PREVEQl9TSVpFfTsKPisJc3RhdGljIGNvbnN0IGNoYXIgKm1k Yl9kZXNjW10gPSB7Cj4rCQkiZHJpdmVyIHByZXBhcmVkIG1vZGVzIiwKPisJCSJrZXJuZWwgcHJl cGFyZWQgZGVmYXVsdCBtb2RlZGIiLAo+KwkJImtlcm5lbCBIRUxQRVJTIHByZXBhcmVkIHZlc2Ff bW9kZXMiLAo+Kwl9Owo+Kwo+KyNkZWZpbmUgc201MDJfZXh0IGx5bng3NTBfZXh0Cj4rCXN0YXRp YyBjb25zdCBzdHJ1Y3QgZmJfdmlkZW9tb2RlICpleHRfdGFibGVbXSA9IHtseW54NzUwX2V4dCwg TlVMTCwgc201MDJfZXh0fTsKPisJc3RhdGljIHNpemVfdCBleHRfc2l6ZVtdID0ge0FSUkFZX1NJ WkUobHlueDc1MF9leHQpLCAwLCBBUlJBWV9TSVpFKHNtNTAyX2V4dCl9Owo+Kwo+KwlzdGF0aWMg Y29uc3QgY2hhciAqZml4SWRbXVsyXSA9IHsKPisJCXsic203NTBfZmIxIiwgInNtNzUwX2ZiMiJ9 LAo+Kwl9Owo+Kwo+KwlpbnQgcmV0LCBsaW5lX2xlbmd0aDsKPisJRU5URVIoKTsKPisJcmV0ID0g MDsKPisJcGFyID0gKHN0cnVjdCBseW54ZmJfcGFyICopaW5mby0+cGFyOwo+KwlzaGFyZSA9IHBh ci0+c2hhcmU7Cj4rCWNydGMgPSAmcGFyLT5jcnRjOwo+KwlvdXRwdXQgPSAmcGFyLT5vdXRwdXQ7 Cj4rCXZhciA9ICZpbmZvLT52YXI7Cj4rCWZpeCA9ICZpbmZvLT5maXg7Cj4rCj4rCS8qIHNldCBp bmRleCAqLwo+KwlwYXItPmluZGV4ID0gaW5kZXg7Cj4rCW91dHB1dC0+Y2hhbm5lbCA9ICZjcnRj LT5jaGFubmVsOwo+Kwo+KwlzbTc1MGZiX3NldF9kcnYocGFyKTsKPisJbHlueGZiX29wcy5mYl9w YW5fZGlzcGxheSA9IGx5bnhmYl9vcHNfcGFuX2Rpc3BsYXk7Cj4rCj4rCS8qIHNldCBjdXJyZW50 IGN1cnNvciB2YXJpYWJsZSBhbmQgcHJvYyBwb2ludGVyLAo+KwkgKm11c3QgYmUgc2V0IGFmdGVy IGNydGMgbWVtYmVyIGluaXRpYWxpemVkICovCj4rCj4rCWNydGMtPmN1cnNvci5vZmZzZXQgPSBj cnRjLT5vU2NyZWVuICsgY3J0Yy0+dmlkbWVtX3NpemUgLSAxMDI0Owo+KwljcnRjLT5jdXJzb3Iu bW1pbyA9IHNoYXJlLT5wdlJlZyArIDB4ODAwZjAgKyAoaW50KWNydGMtPmNoYW5uZWwgKiAweDE0 MDsKPisKPisJaW5mX21zZygiY3J0Yy0+Y3Vyc29yLm1taW8gPSAlcFxuIiwgY3J0Yy0+Y3Vyc29y Lm1taW8pOwo+KwljcnRjLT5jdXJzb3IubWF4SCA9IGNydGMtPmN1cnNvci5tYXhXID0gNjQ7Cj4r CWNydGMtPmN1cnNvci5zaXplID0gY3J0Yy0+Y3Vyc29yLm1heEgqY3J0Yy0+Y3Vyc29yLm1heFcq Mi84Owo+KwljcnRjLT5jdXJzb3IuZGlzYWJsZSA9IGh3X2N1cnNvcl9kaXNhYmxlOwo+KwljcnRj LT5jdXJzb3IuZW5hYmxlID0gaHdfY3Vyc29yX2VuYWJsZTsKPisJY3J0Yy0+Y3Vyc29yLnNldENv bG9yID0gaHdfY3Vyc29yX3NldENvbG9yOwo+KwljcnRjLT5jdXJzb3Iuc2V0UG9zID0gaHdfY3Vy c29yX3NldFBvczsKPisJY3J0Yy0+Y3Vyc29yLnNldFNpemUgPSBod19jdXJzb3Jfc2V0U2l6ZTsK PisJY3J0Yy0+Y3Vyc29yLnNldERhdGEgPSBod19jdXJzb3Jfc2V0RGF0YTsKPisJY3J0Yy0+Y3Vy c29yLnZzdGFydCA9IHNoYXJlLT5wdk1lbSArIGNydGMtPmN1cnNvci5vZmZzZXQ7Cj4rCj4rCWNy dGMtPmN1cnNvci5zaGFyZSA9IHNoYXJlOwo+KwltZW1zZXQoY3J0Yy0+Y3Vyc29yLnZzdGFydCwg MCwgY3J0Yy0+Y3Vyc29yLnNpemUpOwo+KwlpZiAoIWdfaHdjdXJzb3IpIHsKPisJCWx5bnhmYl9v cHMuZmJfY3Vyc29yID0gTlVMTDsKPisJCWNydGMtPmN1cnNvci5kaXNhYmxlKCZjcnRjLT5jdXJz b3IpOwo+Kwl9Cj4rCj4rI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIs IDYsIDEwKQo+KwkJLyogaGFyZHdhcmUgY3Vyc29yIGJyb2tlbiB1bmRlciBsb3cgdmVyc2lvbiBr ZXJuZWwqLwo+KwkJbHlueGZiX29wcy5mYl9jdXJzb3IgPSBzb2Z0X2N1cnNvcjsKPisjZW5kaWYK PisKPisJCS8qIHNldCBpbmZvLT5mYm9wcywgbXVzdCBiZSBzZXQgYmVmb3JlIGZiX2ZpbmRfbW9k ZSAqLwo+KwkJaWYgKCFzaGFyZS0+YWNjZWxfb2ZmKSB7Cj4rCQkJLyogdXNlIDJkIGFjY2VsZXJh dGlvbiAqLwo+KwkJCWx5bnhmYl9vcHMuZmJfZmlsbHJlY3QgPSBseW54ZmJfb3BzX2ZpbGxyZWN0 Owo+KwkJCWx5bnhmYl9vcHMuZmJfY29weWFyZWEgPSBseW54ZmJfb3BzX2NvcHlhcmVhOwo+KwkJ CWx5bnhmYl9vcHMuZmJfaW1hZ2VibGl0ID0gbHlueGZiX29wc19pbWFnZWJsaXQ7Cj4rCQl9Cj4r CQlpbmZvLT5mYm9wcyA9ICZseW54ZmJfb3BzOwo+Kwo+KwkJaWYgKCFnX2ZibW9kZVtpbmRleF0p IHsKPisJCQlnX2ZibW9kZVtpbmRleF0gPSBnX2RlZl9mYm1vZGU7Cj4rCQkJaWYgKGluZGV4KQo+ KwkJCQlnX2ZibW9kZVtpbmRleF0gPSBnX2ZibW9kZVswXTsKPisJCX0KPisKPisJCXBkYlswXSA9 IGV4dF90YWJsZVtnX3NwZWNJZF07Cj4rCQljZGJbMF0gPSBleHRfc2l6ZVtnX3NwZWNJZF07Cj4r Cj4rCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7Cj4rCQkJLyogbm8gTlVMTCBwb2ludGVyIHBh c3NlZCB0byBmYl9maW5kX21vZGUgQDQgKi8KPisJCQlpZiAocGRiW2ldID09IE5VTEwpIHsKPisj aWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwgNiwgMTApCj4rCQkJCXBk YltpXSA9ICZtb2RlZGIyWzBdOwo+KwkJCQljZGJbaV0gPSBubW9kZWRiMjsKPisjZW5kaWYKPisJ CQl9Cj4rCj4rCQkJcmV0ID0gZmJfZmluZF9tb2RlKHZhciwgaW5mbywgZ19mYm1vZGVbaW5kZXhd LAo+KwkJCQkJcGRiW2ldLCBjZGJbaV0sIE5VTEwsIDgpOwo+Kwo+KwkJCWlmIChyZXQgPT0gMSkg ewo+KwkJCQlpbmZfbXNnKCJzdWNjZXNzISB1c2Ugc3BlY2lmaWVkIG1vZGU6JXMgaW4gJXNcbiIs Cj4rCQkJCQkJZ19mYm1vZGVbaW5kZXhdLAo+KwkJCQkJCW1kYl9kZXNjW2ldKTsKPisJCQkJYnJl YWs7Cj4rCQkJfSBlbHNlIGlmIChyZXQgPT0gMikgewo+KwkJCQl3YXJfbXNnKCJ1c2Ugc3BlY2lm aWVkIG1vZGU6JXMgaW4gJXMsIHdpdGggYW4gaWdub3JlZCByZWZyZXNoIHJhdGVcbiIsCj4rCQkJ CQkJZ19mYm1vZGVbaW5kZXhdLAo+KwkJCQkJCW1kYl9kZXNjW2ldKTsKPisJCQkJYnJlYWs7Cj4r CQkJfSBlbHNlIGlmIChyZXQgPT0gMykgewo+KwkJCQl3YXJfbXNnKCJ3YW5uYSB1c2UgZGVmYXVs dCBtb2RlXG4iKTsKPisJCQkJLyoJCQlicmVhazsqLwo+KwkJCX0gZWxzZSBpZiAocmV0ID09IDQp IHsKPisJCQkJd2FyX21zZygiZmFsbCBiYWNrIHRvIGFueSB2YWxpZCBtb2RlXG4iKTsKPisJCQl9 IGVsc2V7Cj4rCQkJCXdhcl9tc2coInJldCA9ICVkLCBmYl9maW5kX21vZGUgZmFpbGVkLCB3aXRo ICVzXG4iLCByZXQsIG1kYl9kZXNjW2ldKTsKPisJCQl9Cj4rCQl9Cj4rCj4rCQkvKiBzb21lIG1l bWJlciBvZiBpbmZvLT52YXIgaGFkIGJlZW4gc2V0IGJ5IGZiX2ZpbmRfbW9kZSAqLwo+Kwo+KwkJ aW5mX21zZygiTWVtYmVyIG9mIGluZm8tPnZhciBpcyA6XG5cCj4rCQkJCXhyZXM9JWRcblwKPisJ CQkJeXJlcz0lZFxuXAo+KwkJCQl4cmVzX3ZpcnR1YWw9JWRcblwKPisJCQkJeXJlc192aXJ0dWFs PSVkXG5cCj4rCQkJCXhvZmZzZXQ9JWRcblwKPisJCQkJeW9mZnNldD0lZFxuXAo+KwkJCQliaXRz X3Blcl9waXhlbD0lZFxuIFwKPisJCQkJLi4uXG4iLCB2YXItPnhyZXMsIHZhci0+eXJlcywgdmFy LT54cmVzX3ZpcnR1YWwsIHZhci0+eXJlc192aXJ0dWFsLAo+KwkJCQl2YXItPnhvZmZzZXQsIHZh ci0+eW9mZnNldCwgdmFyLT5iaXRzX3Blcl9waXhlbCk7Cj4rCj4rCQkvKiBzZXQgcGFyICovCj4r CQlwYXItPmluZm8gPSBpbmZvOwo+Kwo+KwkJLyogc2V0IGluZm8gKi8KPisJCWxpbmVfbGVuZ3Ro ID0gUEFERElORyhjcnRjLT5saW5lX3BhZCwKPisJCQkJKHZhci0+eHJlc192aXJ0dWFsICogdmFy LT5iaXRzX3Blcl9waXhlbC84KSk7Cj4rCj4rCQlpbmZvLT5wc2V1ZG9fcGFsZXR0ZSA9ICZwYXIt PnBzZXVkb19wYWxldHRlWzBdOwo+KwkJaW5mby0+c2NyZWVuX2Jhc2UgPSBjcnRjLT52U2NyZWVu Owo+KwkJZGJnX21zZygic2NyZWVuX2Jhc2UgdmFkZHIgPSAlcFxuIiwgaW5mby0+c2NyZWVuX2Jh c2UpOwo+KyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLCA2LCAxMCkK PisJCWluZm8tPnNjcmVlbl9zaXplID0gbGluZV9sZW5ndGggKiB2YXItPnlyZXNfdmlydHVhbDsK PisjZW5kaWYKPisJCWluZm8tPmZsYWdzID0gRkJJTkZPX0ZMQUdfREVGQVVMVHwwOwo+Kwo+KwkJ Lyogc2V0IGluZm8tPmZpeCAqLwo+KwkJZml4LT50eXBlID0gRkJfVFlQRV9QQUNLRURfUElYRUxT Owo+KwkJZml4LT50eXBlX2F1eCA9IDA7Cj4rCQlmaXgtPnhwYW5zdGVwID0gY3J0Yy0+eHBhbnN0 ZXA7Cj4rCQlmaXgtPnlwYW5zdGVwID0gY3J0Yy0+eXBhbnN0ZXA7Cj4rCQlmaXgtPnl3cmFwc3Rl cCA9IGNydGMtPnl3cmFwc3RlcDsKPisJCWZpeC0+YWNjZWwgPSBGQl9BQ0NFTF9OT05FOwo+Kwo+ KwkJc3RybGNweShmaXgtPmlkLCBmaXhJZFtnX3NwZWNJZF1baW5kZXhdLCBzaXplb2YoZml4LT5p ZCkpOwo+Kwo+Kwo+KwkJZml4LT5zbWVtX3N0YXJ0ID0gY3J0Yy0+b1NjcmVlbiArIHNoYXJlLT52 aWRtZW1fc3RhcnQ7Cj4rCQlpbmZfbXNnKCJmaXgtPnNtZW1fc3RhcnQgPSAlbHhcbiIsIGZpeC0+ c21lbV9zdGFydCk7Cj4rCj4rCQkvKiBhY2NvcmRpbmcgdG8gbW1hcCBleHBlcmltZW50IGZyb20g dXNlciBzcGFjZSBhcHBsaWNhdGlvbiwKPisJCSAqZml4LT5tbWlvX2xlbiBzaG91bGQgbm90IGxh cmdlciB0aGFuIHZpcnR1YWwgc2l6ZQo+KwkJICooeHJlc192aXJ0dWFsIHggeXJlc192aXJ0dWFs IHggQnlQUCkKPisJCSAqQmVsb3cgbGluZSBtYXliZSBidWdneSB3aGVuIHVzZXIgbW1hcCBmYiBk ZXYgbm9kZSBhbmQgd3JpdGUKPisJCSAqZGF0YSBpbnRvIHRoZSBib3VuZCBvdmVyIHZpcnR1YWwg c2l6ZQo+KwkJICoqLwo+KwkJZml4LT5zbWVtX2xlbiA9IGNydGMtPnZpZG1lbV9zaXplOwo+KwkJ aW5mX21zZygiZml4LT5zbWVtX2xlbiA9ICV4XG4iLCBmaXgtPnNtZW1fbGVuKTsKPisjaWYgTElO VVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiwgNiwgMTApCj4rCQlpbmZvLT5zY3Jl ZW5fc2l6ZSA9IGZpeC0+c21lbV9sZW47Cj4rI2VuZGlmCj4rCj4rCQlmaXgtPmxpbmVfbGVuZ3Ro ID0gbGluZV9sZW5ndGg7Cj4rCQlmaXgtPm1taW9fc3RhcnQgPSBzaGFyZS0+dmlkcmVnX3N0YXJ0 Owo+KwkJaW5mX21zZygiZml4LT5tbWlvX3N0YXJ0ID0gJWx4XG4iLCBmaXgtPm1taW9fc3RhcnQp Owo+KwkJZml4LT5tbWlvX2xlbiA9IHNoYXJlLT52aWRyZWdfc2l6ZTsKPisJCWluZl9tc2coImZp eC0+bW1pb19sZW4gPSAleFxuIiwgZml4LT5tbWlvX2xlbik7Cj4rCQlzd2l0Y2ggKHZhci0+Yml0 c19wZXJfcGl4ZWwpIHsKPisJCWNhc2UgODoKPisJCQkJZml4LT52aXN1YWwgPSBGQl9WSVNVQUxf UFNFVURPQ09MT1I7Cj4rCQkJCWJyZWFrOwo+KwkJY2FzZSAxNjoKPisJCWNhc2UgMzI6Cj4rCQkJ CWZpeC0+dmlzdWFsID0gRkJfVklTVUFMX1RSVUVDT0xPUjsKPisJCQkJYnJlYWs7Cj4rCQl9Cj4r Cj4rCQkvKiBzZXQgdmFyICovCj4rCQl2YXItPmFjdGl2YXRlID0gRkJfQUNUSVZBVEVfTk9XOwo+ KwkJdmFyLT5hY2NlbF9mbGFncyA9IDA7Cj4rCQl2YXItPnZtb2RlID0gRkJfVk1PREVfTk9OSU5U RVJMQUNFRDsKPisKPisJCWRiZ19tc2coIiMxIHNob3cgaW5mby0+Y21hcCA6IFxuc3RhcnQ9JWQs IGxlbj0lZCwgcmVkPSVwLCBncmVlbj0lcCwgYmx1ZT0lcCwgdHJhbnNwPSVwXG4iLAo+KwkJCQlp bmZvLT5jbWFwLnN0YXJ0LCBpbmZvLT5jbWFwLmxlbiwKPisJCQkJaW5mby0+Y21hcC5yZWQsIGlu Zm8tPmNtYXAuZ3JlZW4sIGluZm8tPmNtYXAuYmx1ZSwKPisJCQkJaW5mby0+Y21hcC50cmFuc3Ap Owo+Kwo+KwkJcmV0ID0gZmJfYWxsb2NfY21hcCgmaW5mby0+Y21hcCwgMjU2LCAwKTsKPisJCWlm IChyZXQgPCAwKSB7Cj4rCQkJZXJyX21zZygiQ291bGQgbm90IGFsbGNhdGUgbWVtb3J5IGZvciBj bWFwLlxuIik7Cj4rCQkJZ290byBleGl0Owo+KwkJfQo+Kwo+KwkJZGJnX21zZygiIzIgc2hvdyBp bmZvLT5jbWFwIDogXG5zdGFydD0lZCwgbGVuPSVkLCByZWQ9JXAsIGdyZWVuPSVwLCBibHVlPSVw LCB0cmFuc3A9JXBcbiIsCj4rCQkJCWluZm8tPmNtYXAuc3RhcnQsIGluZm8tPmNtYXAubGVuLAo+ KwkJCQlpbmZvLT5jbWFwLnJlZCwgaW5mby0+Y21hcC5ncmVlbiwgaW5mby0+Y21hcC5ibHVlLAo+ KwkJCQlpbmZvLT5jbWFwLnRyYW5zcCk7Cj4rCj4rZXhpdDoKPisJCWx5bnhmYl9vcHNfY2hlY2tf dmFyKHZhciwgaW5mbyk7Cj4rCQkvKiAgICBseW54ZmJfb3BzX3NldF9wYXIoaW5mbyk7Ki8KPisJ CUxFQVZFKHJldCk7Cj4rCX0KPisKPisJc3RhdGljIGludCBfX2RldmluaXQgbHlueGZiX3BjaV9w cm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKPisJCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9p ZCAqZW50KQo+Kwl7Cj4rCQlzdHJ1Y3QgZmJfaW5mbyAqaW5mb1tdID0ge05VTEwsIE5VTEx9Owo+ KwkJc3RydWN0IGx5bnhfc2hhcmUgKnNoYXJlID0gTlVMTDsKPisKPisJCXZvaWQgKnNwZWNfc2hh cmUgPSBOVUxMOwo+KwkJc2l6ZV90IHNwZWNfb2Zmc2V0ID0gMDsKPisJCWludCBmYmlkeDsKPisJ CUVOVEVSKCk7Cj4rCj4rCQkvKiBlbmFibGUgZGV2aWNlICovCj4rCQlpZiAocGNpX2VuYWJsZV9k ZXZpY2UocGRldikpIHsKPisJCQllcnJfbXNnKCJjYW4gbm90IGVuYWJsZSBkZXZpY2UuXG4iKTsK PisJCQlnb3RvIGVycl9lbmFibGU7Cj4rCQl9Cj4rCj4rCQlzd2l0Y2ggKGVudC0+ZGV2aWNlKSB7 Cj4rCQljYXNlIFBDSV9ERVZJRF9MWU5YX0VYUDoKPisJCWNhc2UgUENJX0RFVklEX0xZTlhfU0U6 Cj4rCQkJZ19zcGVjSWQgPSBTUENfU003NTA7Cj4rCQkJCS8qIHRob3VnaCBvZmZzZXQgb2Ygc2hh cmUgaW4gc203NTBfc2hhcmUgaXMgMCwKPisJCQkJICp3ZSB1c2UgdGhpcyBtYXJjcm8gYXMgdGhl IHNhbWUgKi8KPisJCQlzcGVjX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBzbTc1MF9zaGFyZSwg c2hhcmUpOwo+KwkJCWJyZWFrOwo+KwkJZGVmYXVsdDoKPisJCQlicmVhazsKPisJCX0KPisKPisJ CWRiZ19tc2coInNwZWNfb2Zmc2V0ID0gJWRcbiIsIHNwZWNfb2Zmc2V0KTsKPisJCXNwZWNfc2hh cmUgPSBremFsbG9jKHNwZWNfc2l6ZVtnX3NwZWNJZF0sIEdGUF9LRVJORUwpOwo+KwkJaWYgKCFz cGVjX3NoYXJlKSB7Cj4rCQkJZXJyX21zZygiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3Ig c2hhcmUuXG4iKTsKPisJCQlnb3RvIGVycl9zaGFyZTsKPisJCX0KPisKPisJCS8qIHNldHRpbmcg c2hhcmUgc3RydWN0dXJlICovCj4rCQlzaGFyZSA9IChzdHJ1Y3QgbHlueF9zaGFyZSAqKShzcGVj X3NoYXJlICsgc3BlY19vZmZzZXQpOwo+KwkJc2hhcmUtPmZiaW5mb1swXSA9IHNoYXJlLT5mYmlu Zm9bMV0gPSBOVUxMOwo+KwkJc2hhcmUtPmRldmlkID0gcGRldi0+ZGV2aWNlOwo+KyNpZiBMSU5V WF9WRVJTSU9OX0NPREUgPD0gS0VSTkVMX1ZFUlNJT04oMiwgNiwgMjIpCj4rCQl1MzIgdGVtcDsK PisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBQQ0lfQ0xBU1NfUkVWSVNJT04sICZ0ZW1w KTsKPisJCXNoYXJlLT5yZXZpZCA9IHRlbXAmMHhGRjsKPisjZWxzZQo+KwkJc2hhcmUtPnJldmlk ID0gcGRldi0+cmV2aXNpb247Cj4rI2VuZGlmCj4rCj4rCQlpbmZfbXNnKCJzaGFyZS0+cmV2aWQg PSAlMDJ4XG4iLCBzaGFyZS0+cmV2aWQpOwo+KwkJc2hhcmUtPnBkZXYgPSBwZGV2Owo+KyNpZmRl ZiBDT05GSUdfTVRSUgo+KwkJc2hhcmUtPm10cnJfb2ZmID0gZ19ub210cnI7Cj4rCQlzaGFyZS0+ bXRyci52cmFtID0gMDsKPisJCXNoYXJlLT5tdHJyLnZyYW1fYWRkZWQgPSAwOwo+KyNlbmRpZgo+ KwkJc2hhcmUtPmFjY2VsX29mZiA9IGdfbm9hY2NlbDsKPisJCXNoYXJlLT5kdWFsID0gZ19kdWFs dmlldzsKPisJCXNwaW5fbG9ja19pbml0KCZzaGFyZS0+c2xvY2spOwo+Kwo+KwkJaWYgKCFzaGFy ZS0+YWNjZWxfb2ZmKSB7Cj4rCQkJLyogaG9vayBkZUluaXQgYW5kIDJkIHJvdXRpbmVzLCBub3Rl cyB0aGF0IGJlbG93IGh3X3h4eAo+KwkJCSAqcm91dGluZSBjYW4gd29yayBvbiBtb3N0IG9mIGx5 bnggY2hpcHMKPisJCQkgKmlmIHNvbWUgY2hpcCBuZWVkIHNwZWNpZmljIGZ1bmN0aW9uLCBwbGVh c2UgaG9vayBpdCBpbiBzbVhYWF9zZXRfZHJ2Cj4rCQkJICpyb3V0aW5lICovCj4rCQkJc2hhcmUt PmFjY2VsLmRlX2luaXQgPSBod19kZV9pbml0Owo+KwkJCXNoYXJlLT5hY2NlbC5kZV9maWxscmVj dCA9IGh3X2ZpbGxyZWN0Owo+KwkJCXNoYXJlLT5hY2NlbC5kZV9jb3B5YXJlYSA9IGh3X2NvcHlh cmVhOwo+KwkJCXNoYXJlLT5hY2NlbC5kZV9pbWFnZWJsaXQgPSBod19pbWFnZWJsaXQ7Cj4rCQkJ aW5mX21zZygiZW5hYmxlIDJkIGFjY2VsZXJhdGlvblxuIik7Cj4rCQl9IGVsc2V7Cj4rCQkJaW5m X21zZygiZGlzYWJsZSAyZCBhY2NlbGVyYXRpb25cbiIpOwo+KwkJfQo+Kwo+KwkJLyogY2FsbCBj aGlwIHNwZWNpZmljIHNldHVwIHJvdXRpbmUgICovCj4rCQkoKnNldHVwX3JvdXRbZ19zcGVjSWRd KShzaGFyZSwgZ19zZXR0aW5ncyk7Cj4rCj4rCQkvKiBjYWxsIGNoaXAgc3BlY2lmaWMgbW1hcCBy b3V0aW5lICovCj4rCQlpZiAoKCptYXBfcm91dFtnX3NwZWNJZF0pKHNoYXJlLCBwZGV2KSkgewo+ KwkJCWVycl9tc2coIk1lbW9yeSBtYXAgZmFpbGVkXG4iKTsKPisJCQlnb3RvIGVycl9tYXA7Cj4r CQl9Cj4rCj4rI2lmZGVmIENPTkZJR19NVFJSCj4rCQlpZiAoIXNoYXJlLT5tdHJyX29mZikgewo+ KwkJCWluZl9tc2coImVuYWJsZSBtdHJyXG4iKTsKPisJCQlzaGFyZS0+bXRyci52cmFtID0gbXRy cl9hZGQoc2hhcmUtPnZpZG1lbV9zdGFydCwKPisJCQkJCXNoYXJlLT52aWRtZW1fc2l6ZSwKPisJ CQkJCU1UUlJfVFlQRV9XUkNPTUIsIDEpOwo+Kwo+KwkJCWlmIChzaGFyZS0+bXRyci52cmFtIDwg MCkgewo+KwkJCQkvKiBkb24ndCBibG9jayBkcml2ZXIgd2l0aCB0aGUgZmFpbHVyZSBvZiBNVFJS ICovCj4rCQkJCWVycl9tc2coIlVuYWJsZSB0byBzZXR1cCBNVFJSLlxuIik7Cj4rCQkJfSBlbHNl ewo+KwkJCQlzaGFyZS0+bXRyci52cmFtX2FkZGVkID0gMTsKPisJCQkJaW5mX21zZygiTVRSUiBh ZGRlZCBzdWNjZXNmdWxseVxuIik7Cj4rCQkJfQo+KwkJfQo+KyNlbmRpZgo+Kwo+KwkJbWVtc2V0 KHNoYXJlLT5wdk1lbSwgMCwgc2hhcmUtPnZpZG1lbV9zaXplKTsKPisKPisJCWluZl9tc2coInNt JTN4IG1taW8gYWRkcmVzcyA9ICVwXG4iLCBzaGFyZS0+ZGV2aWQsIHNoYXJlLT5wdlJlZyk7Cj4r Cj4rCQlwY2lfc2V0X2RydmRhdGEocGRldiwgc2hhcmUpOwo+Kwo+KwkJLyogY2FsbCBjaGlwSW5p dCByb3V0aW5lICovCj4rCQkoKmluaXRod19yb3V0W2dfc3BlY0lkXSkoc2hhcmUsIHBkZXYpOwo+ Kwo+KwkJLyogZGV0ZWN0IDUwMiBuZWVkIG5vIGRpc3AgZHJpdmVyCj4rCQkgKmJld2FyZSB0aGF0 IG90aGVyIGNoaXBzIGV4Y2VwdCA1MDIgc2hvdWxkIG5vdCB0b3VjaCBnXzUwMm5vZGlzcAo+KwkJ ICoocmVtYWluIGdfNTAybm9kaXNwIGFsd2F5cyAwKQo+KwkJICpzbyByZWd1bGFyaWx5LCBiZWxv dyBpZiBsaW5lIHdpbGwgbm90IGFmZmVjdCBvdGhlciBjaGlwcycgYmVoYXZpb3VyCj4rCQkgKiov Cj4rCS8qCWlmICghZ19ubzUwMmRpc3ApIHsqLwo+KwkJCS8qIGFsbG9jYXRlIGZyYW1lIGJ1ZmZl ciBpbmZvIHN0cnVjdG9yIGFjY29yZGluZyB0byBnX2R1YWx2aWV3ICovCj4rCQkJZmJpZHggPSAw Owo+K0FMTE9DX0ZCOgo+KwkJCWluZm9bZmJpZHhdID0gZnJhbWVidWZmZXJfYWxsb2Moc2l6ZW9m KHN0cnVjdCBseW54ZmJfcGFyKSwgJnBkZXYtPmRldik7Cj4rCQkJaWYgKCFpbmZvW2ZiaWR4XSkg ewo+KwkJCQllcnJfbXNnKCJDb3VsZCBub3QgYWxsb2NhdGUgZnJhbWVidWZmZXIgIyVkLlxuIiwg ZmJpZHgpOwo+KwkJCQlpZiAoZmJpZHggPT0gMCkKPisJCQkJCWdvdG8gZXJyX2luZm8wX2FsbG9j Owo+KwkJCQllbHNlCj4rCQkJCQlnb3RvIGVycl9pbmZvMV9hbGxvYzsKPisJCQl9IGVsc2V7Cj4r CQkJCXN0cnVjdCBseW54ZmJfcGFyICpwYXI7Cj4rCQkJCWluZl9tc2coImZyYW1lYnVmZmVyICMl ZCBhbGxvYyBva2F5XG4iLCBmYmlkeCk7Cj4rCQkJCXNoYXJlLT5mYmluZm9bZmJpZHhdID0gaW5m b1tmYmlkeF07Cj4rCQkJCXBhciA9IGluZm9bZmJpZHhdLT5wYXI7Cj4rCQkJCXBhci0+c2hhcmUg PSBzaGFyZTsKPisKPisJCQkJLyogc2V0IGZiX2luZm8gc3RydWN0dXJlICovCj4rCQkJCWlmIChs eW54ZmJfc2V0X2ZiaW5mbyhpbmZvW2ZiaWR4XSwgZmJpZHgpKSB7Cj4rCQkJCQllcnJfbXNnKCJG YWlsZWQgdG8gaW5pdGlhbCBmYl9pbmZvICMlZC5cbiIsIGZiaWR4KTsKPisJCQkJCWlmIChmYmlk eCA9PSAwKQo+KwkJCQkJCWdvdG8gZXJyX2luZm8wX3NldDsKPisJCQkJCWVsc2UKPisJCQkJCQln b3RvIGVycl9pbmZvMV9zZXQ7Cj4rCQkJCX0KPisKPisJCQkJLyogcmVnaXN0ZXIgZnJhbWUgYnVm ZmVyKi8KPisJCQkJaW5mX21zZygiUmVhZHkgdG8gcmVnaXN0ZXIgZnJhbWVidWZmZXIgIyVkLlxu IiwgZmJpZHgpOwo+KwkJCQlpbnQgZXJybm8gPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvW2Zi aWR4XSk7Cj4rCQkJCWlmIChlcnJubyA8IDApIHsKPisJCQkJCWVycl9tc2coIkZhaWxlZCB0byBy ZWdpc3RlciBmYl9pbmZvICMlZC4gZXJyICVkXG4iLCBmYmlkeCwgZXJybm8pOwo+KwkJCQkJaWYg KGZiaWR4ID09IDApCj4rCQkJCQkJZ290byBlcnJfcmVnaXN0ZXIwOwo+KwkJCQkJZWxzZQo+KwkJ CQkJCWdvdG8gZXJyX3JlZ2lzdGVyMTsKPisJCQkJfQo+KwkJCQlpbmZfbXNnKCJBY2NvbXBsaXNo ZWQgcmVnaXN0ZXIgZnJhbWVidWZmZXIgIyVkLlxuIiwgZmJpZHgpOwo+KwkJCX0KPisKPisJCQkv KiBubyBkdWFsIHZpZXcgYnkgZmFyICovCj4rCQkJZmJpZHgrKzsKPisJCQlpZiAoc2hhcmUtPmR1 YWwgJiYgZmJpZHggPCAyKQo+KwkJCQlnb3RvIEFMTE9DX0ZCOwo+Ky8qCQl9Ki8KPisKPisJCUxF QVZFKDApOwo+Kwo+K2Vycl9yZWdpc3RlcjE6Cj4rZXJyX2luZm8xX3NldDoKPisJCWZyYW1lYnVm ZmVyX3JlbGVhc2UoaW5mb1sxXSk7Cj4rZXJyX2luZm8xX2FsbG9jOgo+KwkJdW5yZWdpc3Rlcl9m cmFtZWJ1ZmZlcihpbmZvWzBdKTsKPitlcnJfcmVnaXN0ZXIwOgo+K2Vycl9pbmZvMF9zZXQ6Cj4r CQlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm9bMF0pOwo+K2Vycl9pbmZvMF9hbGxvYzoKPitlcnJf bWFwOgo+KwkJa2ZyZWUoc3BlY19zaGFyZSk7Cj4rZXJyX3NoYXJlOgo+K2Vycl9lbmFibGU6Cj4r CQlMRUFWRSgtRU5PREVWKTsKPisJfQo+Kwo+K3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBseW54ZmJf cGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKPit7Cj4rCXN0cnVjdCBmYl9pbmZvICpp bmZvOwo+KwlzdHJ1Y3QgbHlueF9zaGFyZSAqc2hhcmU7Cj4rCXZvaWQgKnNwZWNfc2hhcmU7Cj4r CXN0cnVjdCBseW54ZmJfcGFyICpwYXI7Cj4rCWludCBjbnQ7Cj4rCUVOVEVSKCk7Cj4rCj4rCWNu dCA9IDI7Cj4rCXNoYXJlID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwo+Kwo+Kwl3aGlsZSAoY250 LS0gPiAwKSB7Cj4rCQlpbmZvID0gc2hhcmUtPmZiaW5mb1tjbnRdOwo+KwkJaWYgKCFpbmZvKQo+ KwkJCWNvbnRpbnVlOwo+KwkJcGFyID0gaW5mby0+cGFyOwo+Kwo+KwkJdW5yZWdpc3Rlcl9mcmFt ZWJ1ZmZlcihpbmZvKTsKPisJCS8qIGNsZWFuIGNydGMgJiBvdXRwdXQgYWxsb2NhdGlvbnMqLwo+ KwkJcGFyLT5jcnRjLmNsZWFyKCZwYXItPmNydGMpOwo+KwkJcGFyLT5vdXRwdXQuY2xlYXIoJnBh ci0+b3V0cHV0KTsKPisJCS8qIHJlbGVhc2UgZnJhbWUgYnVmZmVyKi8KPisJCWZyYW1lYnVmZmVy X3JlbGVhc2UoaW5mbyk7Cj4rCX0KPisjaWZkZWYgQ09ORklHX01UUlIKPisJaWYgKHNoYXJlLT5t dHJyLnZyYW1fYWRkZWQpCj4rCQltdHJyX2RlbChzaGFyZS0+bXRyci52cmFtLCBzaGFyZS0+dmlk bWVtX3N0YXJ0LCBzaGFyZS0+dmlkbWVtX3NpemUpOwo+KyNlbmRpZgo+KwkvKglwY2lfcmVsZWFz ZV9yZWdpb25zKHBkZXYpOyovCj4rCj4rCWlvdW5tYXAoc2hhcmUtPnB2UmVnKTsKPisJaW91bm1h cChzaGFyZS0+cHZNZW0pOwo+Kwo+Kwlzd2l0Y2ggKHNoYXJlLT5kZXZpZCkgewo+KwljYXNlIFBD SV9ERVZJRF9MWU5YX0VYUDoKPisJY2FzZSBQQ0lfREVWSURfTFlOWF9TRToKPisJCQlzcGVjX3No YXJlID0gY29udGFpbmVyX29mKHNoYXJlLCBzdHJ1Y3Qgc203NTBfc2hhcmUsIHNoYXJlKTsKPisJ CQlicmVhazsKPisJZGVmYXVsdDoKPisJCQlzcGVjX3NoYXJlID0gc2hhcmU7Cj4rCX0KPisJa2Zy ZWUoZ19zZXR0aW5ncyk7Cj4rCWtmcmVlKHNwZWNfc2hhcmUpOwo+KwlwY2lfc2V0X2RydmRhdGEo cGRldiwgTlVMTCk7Cj4rCUxFQVZFKCk7Cj4rfQo+Kwo+Kwo+Ky8qIAljaGlwIHNwZWNpZmljIGdf b3B0aW9uIGNvbmZpZ3VyYXRpb24gcm91dGluZSAqLwo+K3N0YXRpYyB2b2lkIHNtNzUwZmJfc2V0 dXAoc3RydWN0IGx5bnhfc2hhcmUgKnNoYXJlLCBjaGFyICpzcmMpCj4rewo+KwlzdHJ1Y3Qgc203 NTBfc2hhcmUgKnNwZWNfc2hhcmU7Cj4rCWNoYXIgKm9wdDsKPisjaWZkZWYgQ0FQX0VYUEVOU0lP Tgo+KwljaGFyICpleHBfcmVzOwo+KyNlbmRpZgo+KwlpbnQgc3dhcDsKPisJRU5URVIoKTsKPisK PisJc3BlY19zaGFyZSA9IGNvbnRhaW5lcl9vZihzaGFyZSwgc3RydWN0IHNtNzUwX3NoYXJlLCBz aGFyZSk7Cj4rI2lmZGVmIENBUF9FWFBFTlNJSU9OCj4rCWV4cF9yZXMgPSBOVUxMOwo+KyNlbmRp Zgo+Kwlzd2FwID0gMDsKPisKPisJc3BlY19zaGFyZS0+c3RhdGUuaW5pdFBhcm0uY2hpcF9jbGsg PSAwOwo+KwlzcGVjX3NoYXJlLT5zdGF0ZS5pbml0UGFybS5tZW1fY2xrID0gMDsKPisJc3BlY19z aGFyZS0+c3RhdGUuaW5pdFBhcm0ubWFzdGVyX2NsayA9IDA7Cj4rCXNwZWNfc2hhcmUtPnN0YXRl LmluaXRQYXJtLnBvd2VyTW9kZSA9IDA7Cj4rCXNwZWNfc2hhcmUtPnN0YXRlLmluaXRQYXJtLnNl dEFsbEVuZ09mZiA9IDA7Cj4rCXNwZWNfc2hhcmUtPnN0YXRlLmluaXRQYXJtLnJlc2V0TWVtb3J5 ID0gMTsKPisKPisJLypkZWZhdWx0bHkgdHVybiBnX2h3Y3Vyc29yIG9uIGZvciBib3RoIHZpZXcg Ki8KPisJZ19od2N1cnNvciA9IDM7Cj4rCj4rCWlmICghc3JjIHx8ICEqc3JjKSB7Cj4rCQl3YXJf bXNnKCJubyBzcGVjaWZpYyBnX29wdGlvbi5cbiIpOwo+KwkJZ290byBOT19QQVJBTTsKPisJfQo+ Kwo+Kwl3aGlsZSAoKG9wdCA9IHN0cnNlcCgmc3JjLCAiOiIpKSAhPSBOVUxMICYmICpvcHQgIT0g TlVMTCkgewo+KwkJZXJyX21zZygib3B0PSVzXG4iLCBvcHQpOwo+KwkJZXJyX21zZygic3JjPSVz XG4iLCBzcmMpOwo+Kwo+KwkJaWYgKCFzdHJuY21wKG9wdCwgInN3YXAiLCBzdHJsZW4oInN3YXAi KSkpCj4rCQkJc3dhcCA9IDE7Cj4rCQllbHNlIGlmICghc3RybmNtcChvcHQsICJub2NydCIsIHN0 cmxlbigibm9jcnQiKSkpCj4rCQkJc3BlY19zaGFyZS0+c3RhdGUubm9jcnQgPSAxOwo+KwkJZWxz ZSBpZiAoIXN0cm5jbXAob3B0LCAiMzZiaXQiLCBzdHJsZW4oIjM2Yml0IikpKQo+KwkJCXNwZWNf c2hhcmUtPnN0YXRlLnBubHR5cGUgPSBzbTc1MF9kb3VibGVURlQ7Cj4rCQllbHNlIGlmICghc3Ry bmNtcChvcHQsICIxOGJpdCIsIHN0cmxlbigiMThiaXQiKSkpCj4rCQkJc3BlY19zaGFyZS0+c3Rh dGUucG5sdHlwZSA9IHNtNzUwX2R1YWxURlQ7Cj4rCQllbHNlIGlmICghc3RybmNtcChvcHQsICIy NGJpdCIsIHN0cmxlbigiMjRiaXQiKSkpCj4rCQkJc3BlY19zaGFyZS0+c3RhdGUucG5sdHlwZSA9 IHNtNzUwXzI0VEZUOwo+KyNpZmRlZiBDQVBfRVhQQU5TSU9OCj4rCQllbHNlIGlmICghc3RybmNt cChvcHQsICJleHA6Iiwgc3RybGVuKCJleHA6IikpKQo+KwkJCWV4cF9yZXMgPSBvcHQgKyBzdHJs ZW4oImV4cDoiKTsKPisjZW5kaWYKPisJCWVsc2UgaWYgKCFzdHJuY21wKG9wdCwgIm5vaHdjMCIs IHN0cmxlbigibm9od2MwIikpKQo+KwkJCWdfaHdjdXJzb3IgJj0gfjB4MTsKPisJCWVsc2UgaWYg KCFzdHJuY21wKG9wdCwgIm5vaHdjMSIsIHN0cmxlbigibm9od2MxIikpKQo+KwkJCWdfaHdjdXJz b3IgJj0gfjB4MjsKPisJCWVsc2UgaWYgKCFzdHJuY21wKG9wdCwgIm5vaHdjIiwgc3RybGVuKCJu b2h3YyIpKSkKPisJCQlnX2h3Y3Vyc29yID0gMDsKPisJCWVsc2V7Cj4rCQkJaWYgKCFnX2ZibW9k ZVswXSkgewo+KwkJCQlnX2ZibW9kZVswXSA9IG9wdDsKPisJCQkJaW5mX21zZygiZmluZCBmYm1v ZGUwIDogJXNcbiIsIGdfZmJtb2RlWzBdKTsKPisJCQl9IGVsc2UgaWYgKCFnX2ZibW9kZVsxXSkg ewo+KwkJCQlnX2ZibW9kZVsxXSA9IG9wdDsKPisJCQkJaW5mX21zZygiZmluZCBmYm1vZGUxIDog JXNcbiIsIGdfZmJtb2RlWzFdKTsKPisJCQl9IGVsc2V7Cj4rCQkJCXdhcl9tc2coIkhvdyBtYW55 IHZpZXcgeW91IHdhbm4gc2V0P1xuIik7Cj4rCQkJfQo+KwkJfQo+Kwl9Cj4rI2lmZGVmIENBUF9F WFBBTlNJT04KPisJaWYgKGdldEV4cFJlcyhleHBfcmVzLCAmc3BlY19zaGFyZS0+c3RhdGUueExD RCwgJnNwZWNfc2hhcmUtPnN0YXRlLnlMQ0QpKSB7Cj4rCQkvKiBzZWVtcyBleHBfcmVzIGlzIG5v dCB2YWxpZCovCj4rCQlzcGVjX3NoYXJlLT5zdGF0ZS54TENEID0gc3BlY19zaGFyZS0+c3RhdGUu eUxDRCA9IDA7Cj4rCX0KPisjZW5kaWYKPisKPitOT19QQVJBTToKPisJaWYgKHNoYXJlLT5yZXZp ZCAhPSBTTTc1MExFX1JFVklTSU9OX0lEKSB7Cj4rCQlpZiAoc2hhcmUtPmR1YWwpIHsKPisJCQlp ZiAoc3dhcCkKPisJCQkJc3BlY19zaGFyZS0+c3RhdGUuZGF0YWZsb3cgPSBzbTc1MF9kdWFsX3N3 YXA7Cj4rCQkJZWxzZQo+KwkJCQlzcGVjX3NoYXJlLT5zdGF0ZS5kYXRhZmxvdyA9IHNtNzUwX2R1 YWxfbm9ybWFsOwo+KwkJfSBlbHNlewo+KwkJCWlmIChzd2FwKQo+KwkJCQlzcGVjX3NoYXJlLT5z dGF0ZS5kYXRhZmxvdyA9IHNtNzUwX3NpbXVsX3NlYzsKPisJCQllbHNlCj4rCQkJCXNwZWNfc2hh cmUtPnN0YXRlLmRhdGFmbG93ID0gc203NTBfc2ltdWxfcHJpOwo+KwkJfQo+Kwl9IGVsc2V7Cj4r CQkvKiBTTTc1MExFIG9ubHkgaGF2ZSBvbmUgY3J0IGNoYW5uZWwgKi8KPisJCXNwZWNfc2hhcmUt PnN0YXRlLmRhdGFmbG93ID0gc203NTBfc2ltdWxfc2VjOwo+KwkJLyogc203NTBsZSBkbyBub3Qg aGF2ZSBjb21wbGV4IGF0dHJpYnV0ZXMqLwo+KwkJc3BlY19zaGFyZS0+c3RhdGUubm9jcnQgPSAw Owo+Kwl9Cj4rCj4rCUxFQVZFKCk7Cj4rfQo+Kwo+Kwo+KyNpZiBMSU5VWF9WRVJTSU9OX0NPREUg Pj0gS0VSTkVMX1ZFUlNJT04oMiwgNiwgMTApCj4rc3RhdGljIGludCBfX2luaXQgbHlueGZiX3Nl dHVwKGNoYXIgKm9wdGlvbnMpCj4rI2Vsc2UKPitpbnQgX19pbml0IGx5bnhmYl9zZXR1cChjaGFy ICpvcHRpb25zKQo+KyNlbmRpZgo+K3sKPisJaW50IGxlbjsKPisJY2hhciAqb3B0LCAqdG1wOwo+ KwlFTlRFUigpOwo+Kwo+KwlpZiAoIW9wdGlvbnMgfHwgISpvcHRpb25zKSB7Cj4rCQl3YXJfbXNn KCJubyBvcHRpb25zLlxuIik7Cj4rCQlMRUFWRSgwKTsKPisJfQo+Kwo+KwlpbmZfbXNnKCJvcHRp b25zOiVzXG4iLCBvcHRpb25zKTsKPisKPisJbGVuID0gc3RybGVuKG9wdGlvbnMpICsgMTsKPisJ Z19zZXR0aW5ncyA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKPisJaWYgKCFnX3NldHRpbmdz KQo+KwkJTEVBVkUoLUVOT01FTSk7Cj4rCj4rCW1lbXNldChnX3NldHRpbmdzLCAwLCBsZW4pOwo+ Kwl0bXAgPSBnX3NldHRpbmdzOwo+Kwo+KwkvKiAJTm90ZXM6Cj4rCQljaGFyICpzdHJzZXAoY2hh ciAqKnMsIGNvbnN0IGNoYXIgKmN0KTsKPisJCUBzOiB0aGUgc3RyaW5nIHRvIGJlIHNlYXJjaGVk Cj4rCQlAY3QgOnRoZSBjaGFyYWN0ZXJzIHRvIHNlYXJjaCBmb3IKPisKPisJCXN0cnNlcCgpIHVw ZGF0ZXMgQG9wdGlvbnMgdG8gcG9pbnRlciBhZnRlciB0aGUgZmlyc3QgZm91bmQgdG9rZW4KPisJ CWl0IGFsc28gcmV0dXJucyB0aGUgcG9pbnRlciBhaGVhZCB0aGUgdG9rZW4uCj4rCQkqLwo+Kwl3 aGlsZSAoKG9wdCA9IHN0cnNlcCgmb3B0aW9ucywgIjoiKSkgIT0gTlVMTCkgewo+KwkJLyogb3B0 aW9ucyB0aGF0IG1lYW4gZm9yIGFueSBseW54IGNoaXBzIGFyZSBjb25maWd1cmVkIGhlcmUgKi8K PisJCWlmICghc3RybmNtcChvcHQsICJub2FjY2VsIiwgc3RybGVuKCJub2FjY2VsIikpKQo+KwkJ CWdfbm9hY2NlbCA9IDE7Cj4rI2lmZGVmIENPTkZJR19NVFJSCj4rCQllbHNlIGlmICghc3RybmNt cChvcHQsICJub210cnIiLCBzdHJsZW4oIm5vbXRyciIpKSkKPisJCQlnX25vbXRyciA9IDE7Cj4r I2VuZGlmCj4rCQllbHNlIGlmICghc3RybmNtcChvcHQsICJkdWFsIiwgc3RybGVuKCJkdWFsIikp KQo+KwkJCWdfZHVhbHZpZXcgPSAxOwo+KwkJZWxzZXsKPisJCQlzdHJjYXQodG1wLCBvcHQpOwo+ KwkJCXRtcCArPSBzdHJsZW4ob3B0KTsKPisJCQlpZiAob3B0aW9ucyAhPSBOVUxMKQo+KwkJCQkq dG1wKysgPSAnOic7Cj4rCQkJZWxzZQo+KwkJCQkqdG1wKysgPSAwOwo+KwkJfQo+Kwl9Cj4rCj4r CS8qIG1pc2MgZ19zZXR0aW5ncyBhcmUgdHJhbnNwb3J0IHRvIGNoaXAgc3BlY2lmaWMgcm91dGlu ZXMgKi8KPisJaW5mX21zZygicGFyYW1ldGVyIGxlZnQgZm9yIGNoaXAgc3BlY2lmaWMgYW5hbHlz aXM6JXNcbiIsIGdfc2V0dGluZ3MpOwo+KwlMRUFWRSgwKTsKPit9Cj4rCj4rCj4rc3RhdGljIHZv aWQgY2xhaW0odm9pZCkKPit7Cj4rCWluZl9tc2coIistLS0tLS0tLS0tLS0tU01JIERyaXZlciBJ bmZvcm1hdGlvbi0tLS0tLS0tLS0tLSsiKTsKPisJaW5mX21zZygiUmVsZWFzZSB0eXBlIDogIiBS RUxFQVNFX1RZUEUgIlxuIik7Cj4rCWluZl9tc2coIkRyaXZlciB2ZXJzaW9uOiB2IiBfdmVyc2lv bl8gIlxuIik7Cj4rCWluZl9tc2coIlN1cHBvcnQgcHJvZHVjdHM6XG4iCj4rCQkJU1VQUE9SVF9D SElQKTsKPisJaW5mX21zZygiU3VwcG9ydCBPUzpcbiIKPisJCQlTVVBQT1JUX09TKTsKPisJaW5m X21zZygiU3VwcG9ydCBBUkNIOiAiIFNVUFBPUlRfQVJDSCAiXG4iKTsKPisJaW5mX21zZygiKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyIpOwo+K30KPisj aWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDEwKQo+K3N0YXRp YyBpbnQgX19pbml0IGx5bnhmYl9pbml0KCkKPit7Cj4rCWNoYXIgKm9wdGlvbiA7Cj4rCWludCBy ZXQ7Cj4rCXNtaV9pbmRlbnQgPSAwOwo+KwlFTlRFUigpOwo+KwljbGFpbSgpOwo+KyNpZmRlZiBN T0RVTEUKPisJb3B0aW9uID0gZ19vcHRpb247Cj4rI2Vsc2UKPisJaWYgKGZiX2dldF9vcHRpb25z KCJseW54ZmIiLCAmb3B0aW9uKSkKPisJCUxFQVZFKC1FTk9ERVYpOwo+KyNlbmRpZgo+Kwo+Kwls eW54ZmJfc2V0dXAob3B0aW9uKTsKPisJcmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmbHlueGZi X2RyaXZlcik7Cj4rCUxFQVZFKHJldCk7Cj4rfQo+KyNlbHNlIC8qIGtlcm5lbCB2ZXJzaW9uID49 IDIuNi4xMCovCj4raW50IF9faW5pdCBseW54ZmJfaW5pdCh2b2lkKQo+K3sKPisJY2hhciAqb3B0 aW9uOwo+KwlpbnQgcmV0Owo+KwlzbWlfaW5kZW50ID0gMDsKPisJRU5URVIoKTsKPisJY2xhaW0o KTsKPisjaWZkZWYgTU9EVUxFCj4rCW9wdGlvbiA9IGdfb3B0aW9uOwo+KwlseW54ZmJfc2V0dXAo b3B0aW9uKTsKPisjZWxzZQo+KwkvKiBkbyBub3RoaW5nICovCj4rI2VuZGlmCj4rCXJldCA9IHBj aV9yZWdpc3Rlcl9kcml2ZXIoJmx5bnhmYl9kcml2ZXIpOwo+KwlMRUFWRShyZXQpOwo+K30KPisj ZW5kaWYKPisJbW9kdWxlX2luaXQobHlueGZiX2luaXQpOwo+Kwo+KyNpZmRlZiBNT0RVTEUKPitz dGF0aWMgdm9pZCBfX2V4aXQgbHlueGZiX2V4aXQoKQo+K3sKPisJRU5URVIoKTsKPisJaW5mX21z ZyhfbW9kdWxlTmFtZV8gIiBleGl0XG4iKTsKPisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZseW54 ZmJfZHJpdmVyKTsKPisJTEVBVkUoKTsKPit9Cj4rCW1vZHVsZV9leGl0KGx5bnhmYl9leGl0KTsK PisjZW5kaWYKPisKPisjaWZkZWYgTU9EVUxFCj4rI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtF Uk5FTF9WRVJTSU9OKDIsIDYsIDEwKQo+Kwltb2R1bGVfcGFyYW0oZ19vcHRpb24sIGNoYXJwLCBT X0lSVUdPKTsKPisjZWxzZQo+KwkvKiBiZSB3YXJlIHRoYXQgUEFSTSBhbmQgcGFyYW0gKi8KPisJ TU9EVUxFX1BBUk0oZ19vcHRpb24sICJzIik7Cj4rI2VuZGlmCj4rCj4rCU1PRFVMRV9QQVJNX0RF U0MoZ19vcHRpb24sCj4rCQkJIlxuXHRcdENvbW1vbiBvcHRpb25zOlxuIgo+KwkJCSJcdFx0bm9h Y2NlbDpkaXNhYmxlIDJkIGNhcGFiaWxpdGllc1xuIgo+KwkJCSJcdFx0bm9tdHJyOmRpc2FibGUg TVRSUiBhdHRyaWJ1dGUgZm9yIHZpZGVvIG1lbW9yeVxuIgo+KwkJCSJcdFx0ZHVhbHZpZXc6ZHVh bCBmcmFtZSBidWZmZXIgZmVhdHVyZSBlbmFibGVkXG4iCj4rCQkJIlx0XHRub2h3YzpkaXNhYmxl IGhhcmR3YXJlIGN1cnNvclxuIgo+KwkJCSJcdFx0VXN1YWwgZXhhbXBsZTpcbiIKPisJCQkiXHRc dGluc21vZCAuL2x5bnhmYi5rbyBnX29wdGlvbj1cIm5vYWNjZWwsIG5vaHdjLCAxMjgweDEwMjQt OEA2MFwiXG4iCj4rCQkJIlx0XHRGb3IgbW9yZSBkZXRhaWwgY2hpcCBzcGVjaWZpYyBvcHRpb25z LCBwbGVhc2UgcmVmZXIgdG8gXCJMeW54ZmIgVXNlciBNbnVhbFwiIG9yIHJlYWRtZVxuIgo+KwkJ CSk7Cj4rI2VuZGlmCj4rCj4rCU1PRFVMRV9BVVRIT1IoIm1vbmsgbGl1PG1vbmsubGl1QHNpbGlj b25tb3Rpb24uY29tPiIpOwo+KwlNT0RVTEVfREVTQ1JJUFRJT04oIkZyYW1lIGJ1ZmZlciBkcml2 ZXIgZm9yIFNNSShSKSAiIFNVUFBPUlRfQ0hJUCAiIGNoaXBzZXRzIik7Cj4rCU1PRFVMRV9MSUNF TlNFKCJEdWFsIEJTRC9HUEwiKTsKPisJTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHNtaV9wY2lf dGFibGUpOwo+ZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbHlueGZiL2x5bnhfZHJ2LmggYi9k cml2ZXJzL3ZpZGVvL2x5bnhmYi9seW54X2Rydi5oCj5uZXcgZmlsZSBtb2RlIDEwMDY0NAo+aW5k ZXggMDAwMDAwMC4uN2NmNWYxYgo+LS0tIC9kZXYvbnVsbAo+KysrIGIvZHJpdmVycy92aWRlby9s eW54ZmIvbHlueF9kcnYuaAo+QEAgLTAsMCArMSwyNzEgQEAKPisvKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgo+KypDb3B5 cmlnaHQgKGMpIDIwMTIgYnkgU2lsaWNvbiBNb3Rpb24sIEluYy4gKFNNSSkKPisqUGVybWlzc2lv biBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWlu aW5nIGEgY29weQo+KypvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRp b24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAo+KyppbiB0aGUgU29mdHdhcmUgd2l0 aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRz IHRvCj4rKnVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3Vi bGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzCj4rKm9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBl cm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0bwo+KypkbyBz bywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4rKgo+KypUSEUgU09GVFdB UkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKPisq RVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJS QU5USUVTCj4rKk9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UgQU5ECj4rKk5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIE1pbGwuQ2hl biBhbmQgTW9uay5MaXUgT1IgQ09QWVJJR0hUCj4rKkhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkg Q0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAo+KypXSEVUSEVSIElOIEFOIEFDVElP TiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPisqRlJPTSwgT1VUIE9G IE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgo+KypPVEhF UiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCj4rKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KPisjaWZuZGVmIExZTlhE UlZfSF8KPisjZGVmaW5lIExZTlhEUlZfSF8KPisKPisKPisjaWYgTElOVVhfVkVSU0lPTl9DT0RF ID49IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDE3KQo+KyNlbHNlCj4rdHlwZWRlZiB1bnNpZ25lZCBs b25nIHJlc291cmNlX3NpemVfdDsKPisjZW5kaWYKPisKPisjaWYgTElOVVhfVkVSU0lPTl9DT0RF ID49IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDEwKQo+KyNlbHNlCj4rI2RlZmluZSBTRVBBUkFUT1Ig MQo+K3R5cGVkZWYgaW50IHBtX21lc3NhZ2VfdDsKPisjZW5kaWYKPisKPisvKiBwbGVhc2UgdXNl IHJldmlzaW9uIGlkIHRvIGRpc3Rpbmd1aXNoIHNtNzUwbGUgYW5kIHNtNzUwKi8KPisjZGVmaW5l IFNQQ19TTTc1MCAJMAo+KyNkZWZpbmUgU1BDX1NNNzEyIAkxCj4rI2RlZmluZSBTUENfU001MDIg ICAyCj4rLyojZGVmaW5lIFNQQ19TTTc1MExFIDgqLwo+Kwo+KyNkZWZpbmUgUENJX1ZFTkRPUl9J RF9TTUkgCTB4MTI2Zgo+KyNkZWZpbmUgUENJX0RFVklEX0xZTlhfRVhQCTB4MDc1MAo+KyNkZWZp bmUgUENJX0RFVklEX0xZTlhfU0UJMHgwNzE4Cj4rI2RlZmluZSBQQ0lfREVWSURfTFlOWF9FTQkw eDA3MTIKPisjZGVmaW5lIFBDSV9ERVZJRF9MWU5YXzNETQkweDA3MjAKPisjZGVmaW5lIFBDSV9E RVZJRF9WT1lBR0VSIAkweDA1MDEKPisKPisvKiNkZWZpbmUgU1VQUE9SVF9BUkNIICJ4ODYsIHg4 Nl82NCIqLwo+Ky8qI2RlZmluZSBTVVBQT1JUX0NISVAgImx5bnggRXhwcmVzcyg3NTApL2x5bngg NzUwTEUvTHlueCBTRSg3MTgpL0x5bnggRU0oNzEyKS9seW54IDNETSg3MjAvNzIyKSB2b3lhZ2Vy KDUwMi8xMDcpIiovCj4rCj4rLyojZGVmaW5lIF92ZXJzaW9uXwkiNC4wLjEiKi8KPisjZGVmaW5l IF9tb2R1bGVOYW1lXyAibHlueGZiIgo+KyNkZWZpbmUgUEZYIF9tb2R1bGVOYW1lXyAiOiAiCj4r I2RlZmluZSBlcnJfbXNnKGZtdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fRVJSIFBGWCBmbXQsICMj IGFyZ3MpCj4rI2RlZmluZSB3YXJfbXNnKGZtdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fV0FSTklO RyBQRlggZm10LCAjIyBhcmdzKQo+KyNkZWZpbmUgaW5mX21zZyhmbXQsIGFyZ3MuLi4pIHByaW50 ayhLRVJOX0lORk8gUEZYIGZtdCwgIyMgYXJncykKPisvKiBiZWxvdyBjb2RlIGFsc28gd29ya3Mg b2ssIGJ1dCB0aGVyZSBtdXN0IGJlIG5vIEtFUk5fSU5GTyBwcmVmaXggKi8KPisvKiNkZWZpbmUg aW5mX21zZyguLi4pIHByaW50ayhfX1ZBX0FSR1NfXykqLwo+Kwo+KyNpZiAoREVCVUcgPT0gMSkK PisvKiBkZWJ1ZyBsZXZlbCA9PSAxICovCj4rI2RlZmluZSBkYmdfbXNnKGZtdCwgYXJncy4uLikg cHJpbnRrKEtFUk5fREVCVUcgUEZYIGZtdCwgIyMgYXJncykKPisjZGVmaW5lIEVOVEVSKCkJcHJp bnRrKEtFUk5fREVCVUcgUEZYICIlKmMgJXNcbiIsIHNtaV9pbmRlbnQrKywgJz4nLCBfX2Z1bmNf XykKPisjZGVmaW5lIExFQVZFKC4uLikJXAo+KwlkbyB7CQkJCVwKPisJcHJpbnRrKEtFUk5fREVC VUcgUEZYICIlKmMgJXNcbiIsIC0tc21pX2luZGVudCwgJzwnLCBfX2Z1bmNfXyk7IFwKPisJcmV0 dXJuIF9fVkFfQVJHU19fOyBcCj4rCX0gd2hpbGUgKDApCj4rCj4rI2VsaWYgKERFQlVHID09IDIp Cj4rLyogZGVidWcgbGV2ZWwgPT0gMiovCj4rI2RlZmluZSBkYmdfbXNnKGZtdCwgYXJncy4uLikg cHJpbnRrKEtFUk5fRVJSIFBGWCBmbXQsICMjIGFyZ3MpCj4rI2RlZmluZSBFTlRFUigpCXByaW50 ayhLRVJOX0VSUiBQRlggIiUqYyAlc1xuIiwgc21pX2luZGVudCsrLCAnPicsIF9fZnVuY19fKQo+ Kwo+KyNkZWZpbmUgTEVBVkUoLi4uKQlcCj4rCWRvIHsJCQkJXAo+KwlwcmludGsoS0VSTl9FUlIg UEZYICIlKmMgJXNcbiIsIC0tc21pX2luZGVudCwgJzwnLCBfX2Z1bmNfXyk7IFwKPisJcmV0dXJu IF9fVkFfQVJHU19fOyBcCj4rCX0gd2hpbGUgKDApCj4rCj4rI2lmZGVmIGluZl9tc2cKPisjdW5k ZWYgaW5mX21zZwo+KyNlbmRpZgo+Kwo+KyNkZWZpbmUgaW5mX21zZyhmbXQsIGFyZ3MuLi4pIHBy aW50ayhLRVJOX0VSUiBQRlggZm10LCAjIyBhcmdzKQo+KyNlbHNlCj4rLyogbm8gZGVidWcgKi8K PisjZGVmaW5lIGRiZ19tc2coLi4uKQo+KyNkZWZpbmUgRU5URVIoKQo+KyNkZWZpbmUgTEVBVkUo Li4uKQlcCj4rCWRvIHsJXAo+KwlyZXR1cm4gX19WQV9BUkdTX187IFwKPisJfSB3aGlsZSAoMCkJ XAo+Kwo+KyNlbmRpZgo+Kwo+KyNkZWZpbmUgTUIoeCkgKCh4KTw8MjApCj4rI2RlZmluZSBNSFoo eCkgKCh4KSAqIDEwMDAwMDApCj4rLyogYWxpZ24gc2hvdWxkIGJlIDIsIDQsIDgsIDE2ICovCj4r I2RlZmluZSBQQURESU5HKGFsaWduLCBkYXRhKSAoKChkYXRhKSsoYWxpZ24pLTEpJih+KChhbGln biktMSkpKQo+K2V4dGVybiBpbnQgc21pX2luZGVudDsKPisKPisKPitzdHJ1Y3QgbHlueF9hY2Nl bHsKPisJLyogYmFzZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgRFBSIHJlZ2lzdGVycyAqLwo+Kwl2b2xh dGlsZSB1bnNpZ25lZCBjaGFyIF9faW9tZW0gKmRwckJhc2U7Cj4rCS8qIGJhc2UgdmlydHVhbCBh ZGRyZXNzIG9mIGRlIGRhdGEgcG9ydCAqLwo+Kwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIF9faW9t ZW0gKmRwUG9ydEJhc2U7Cj4rCj4rCS8qIGZ1bmN0aW9uIGZvaW50ZXJzICovCj4rCWludCAoKmRl X2luaXQpKHN0cnVjdCBseW54X2FjY2VsICopOwo+Kwo+KwlpbnQgKCpkZV93YWl0KSh2b2lkKTsv KiBzZWUgaWYgaGFyZHdhcmUgcmVhZHkgdG8gd29yayAqLwo+Kwo+KwlpbnQgKCpkZV9maWxscmVj dCkoc3RydWN0IGx5bnhfYWNjZWwgKiwgdTMyLCB1MzIsIHUzMiwKPisJCQkJCQkJdTMyLCB1MzIs IHUzMiwgdTMyLCB1MzIsIHUzMik7Cj4rCj4rCWludCAoKmRlX2NvcHlhcmVhKShzdHJ1Y3QgbHlu eF9hY2NlbCAqLCB1MzIsIHUzMiwgdTMyLCB1MzIsCj4rCQkJCQkJdTMyLCB1MzIsIHUzMiwgdTMy LAo+KwkJCQkJCXUzMiwgdTMyLCB1MzIsIHUzMik7Cj4rCj4rCWludCAoKmRlX2ltYWdlYmxpdCko c3RydWN0IGx5bnhfYWNjZWwgKiwgY29uc3QgY2hhciAqLCB1MzIsIHUzMiwgdTMyLAo+KwkJCQkJ CXUzMiwgdTMyLCB1MzIsIHUzMiwgdTMyLCB1MzIsIHUzMiwgdTMyLCB1MzIpOwo+Kwo+K307Cj4r Cj4rLyogCWx5bnhfc2hhcmUgc3RhbmRzIGZvciBhIHByZXNlbnRhdGlvbiBvZiB0d28gZnJhbWUg YnVmZmVyCj4rCXRoYXQgdXNlIG9uZSBzbWkgYWRhcHRvciAsIGl0IGlzIHNpbWlsYXIgdG8gYSBi YXNpYyBjbGFzcyBvZiBDKysKPisqLwo+K3N0cnVjdCBseW54X3NoYXJlewo+KwkvKiBjb21tb24g bWVtYmVycyAqLwo+Kwl1MTYgZGV2aWQ7Cj4rCXU4IHJldmlkOwo+KwlzdHJ1Y3QgcGNpX2RldiAq cGRldjsKPisJc3RydWN0IGZiX2luZm8gKmZiaW5mb1syXTsKPisJc3RydWN0IGx5bnhfYWNjZWwg YWNjZWw7Cj4rCWludCBhY2NlbF9vZmY7Cj4rCWludCBkdWFsOwo+KyNpZmRlZiBDT05GSUdfTVRS Ugo+KwkJaW50IG10cnJfb2ZmOwo+KwkJc3RydWN0ewo+KwkJCWludCB2cmFtOwo+KwkJCWludCB2 cmFtX2FkZGVkOwo+KwkJfSBtdHJyOwo+KyNlbmRpZgo+KwkvKiBhbGwgc21pIGdyYXBoaWMgYWRh cHRvciBnb3QgYmVsb3cgYXR0cmlidXRlcyAqLwo+KwlyZXNvdXJjZV9zaXplX3QgdmlkbWVtX3N0 YXJ0Owo+KwlyZXNvdXJjZV9zaXplX3QgdmlkcmVnX3N0YXJ0Owo+KwlyZXNvdXJjZV9zaXplX3Qg dmlkbWVtX3NpemU7Cj4rCXJlc291cmNlX3NpemVfdCB2aWRyZWdfc2l6ZTsKPisJdm9sYXRpbGUg dW5zaWduZWQgY2hhciBfX2lvbWVtICpwdlJlZzsKPisJdW5zaWduZWQgY2hhciBfX2lvbWVtICpw dk1lbTsKPisJLyogbG9ja3MqLwo+KwlzcGlubG9ja190IHNsb2NrOwo+KwkvKiBmdW5jdGlvbiBw b2ludGVycyAqLwo+Kwl2b2lkICgqc3VzcGVuZCkoc3RydWN0IGx5bnhfc2hhcmUgKik7Cj4rCXZv aWQgKCpyZXN1bWUpKHN0cnVjdCBseW54X3NoYXJlICopOwo+K307Cj4rCj4rc3RydWN0IGx5bnhf Y3Vyc29yewo+KwkvKiBjdXJzb3Igd2lkdGggLCBoZWlnaHQgYW5kIHNpemUgKi8KPisJaW50IHc7 Cj4rCWludCBoOwo+KwlpbnQgc2l6ZTsKPisJLyogaGFyZHdhcmUgbGltaXRhdGlvbiAqLwo+Kwlp bnQgbWF4VzsKPisJaW50IG1heEg7Cj4rCS8qIGJhc2UgdmlydHVhbCBhZGRyZXNzIGFuZCBvZmZz ZXQgIG9mIGN1cnNvciBpbWFnZSAqLwo+KwljaGFyIF9faW9tZW0gKnZzdGFydDsKPisJaW50IG9m ZnNldDsKPisJLyogbW1pbyBhZGRyIG9mIGh3IGN1cnNvciAqLwo+Kwl2b2xhdGlsZSBjaGFyIF9f aW9tZW0gKm1taW87Cj4rCS8qIHRoZSBseW54X3NoYXJlIG9mIHRoaXMgYWRhcHRvciAqLwo+Kwlz dHJ1Y3QgbHlueF9zaGFyZSAqc2hhcmU7Cj4rCS8qIHByb2Nfcm91dGluZXMgKi8KPisJdm9pZCAo KmVuYWJsZSkoc3RydWN0IGx5bnhfY3Vyc29yICopOwo+Kwl2b2lkICgqZGlzYWJsZSkoc3RydWN0 IGx5bnhfY3Vyc29yICopOwo+Kwl2b2lkICgqc2V0U2l6ZSkoc3RydWN0IGx5bnhfY3Vyc29yICos IGludCwgaW50KTsKPisJdm9pZCAoKnNldFBvcykoc3RydWN0IGx5bnhfY3Vyc29yICosIGludCwg aW50KTsKPisJdm9pZCAoKnNldENvbG9yKShzdHJ1Y3QgbHlueF9jdXJzb3IgKiwgdTMyLCB1MzIp Owo+Kwl2b2lkICgqc2V0RGF0YSkoc3RydWN0IGx5bnhfY3Vyc29yICosIHUxNiwgY29uc3QgdTgg KiwgY29uc3QgdTggKik7Cj4rfTsKPisKPitzdHJ1Y3QgbHlueGZiX2NydGN7Cj4rCXVuc2lnbmVk IGNoYXIgX19pb21lbSAqdkN1cnNvcjsvKnZpcnR1YWwgYWRkcmVzcyBvZiBjdXJzb3IqLwo+Kwl1 bnNpZ25lZCBjaGFyIF9faW9tZW0gKnZTY3JlZW47Lyp2aXJ0dWFsIGFkZHJlc3Mgb2Ygb25fc2Ny ZWVuKi8KPisJaW50IG9DdXJzb3I7LypjdXJzb3IgYWRkcmVzcyBvZmZzZXQgaW4gdmlkbWVtKi8K PisJaW50IG9TY3JlZW47LypvbnNjcmVlbiBhZGRyZXNzIG9mZnNldCBpbiB2aWRtZW0qLwo+Kwlp bnQgY2hhbm5lbDsvKiB3aGljaCBjaGFubmVsIHRoaXMgY3J0YyBzdGFuZHMgZm9yKi8KPisJcmVz b3VyY2Vfc2l6ZV90IHZpZG1lbV9zaXplOy8qIHRoaXMgdmlldydzIHZpZGVvIG1lbW9yeSBtYXgg c2l6ZSAqLwo+Kwo+KwkvKiBiZWxvdyBhdHRyaWJ1dGVzIGJlbG9uZyB0byBpbmZvLT5maXgsIHRo ZWlyIHZhbHVlIGRlcGVuZHMgb24gc3BlY2lmaWMgYWRhcHRvciovCj4rCXUxNiBsaW5lX3BhZDsv KiBwYWRkaW5nIGluZm9ybWF0aW9uOjAsIDEsIDIsIDQsIDgsIDE2LCAuLi4gKi8KPisJdTE2IHhw YW5zdGVwOwo+Kwl1MTYgeXBhbnN0ZXA7Cj4rCXUxNiB5d3JhcHN0ZXA7Cj4rCj4rCXZvaWQgKnBy aXY7Cj4rCj4rCWludCgqcHJvY19zZXRNb2RlKShzdHJ1Y3QgbHlueGZiX2NydGMqLAo+KwkJCQkJ CXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyosCj4rCQkJCQkJc3RydWN0IGZiX2ZpeF9zY3JlZW5p bmZvKik7Cj4rCj4rCWludCgqcHJvY19jaGVja01vZGUpKHN0cnVjdCBseW54ZmJfY3J0YyAqLCBz dHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKik7Cj4rCWludCgqcHJvY19zZXRDb2xSZWcpKHN0cnVj dCBseW54ZmJfY3J0YyAqLCB1c2hvcnQsIHVzaG9ydCwgdXNob3J0LCB1c2hvcnQpOwo+Kwl2b2lk ICgqY2xlYXIpKHN0cnVjdCBseW54ZmJfY3J0YyAqKTsKPisJLyogcGFuIGRpc3BsYXkgKi8KPisJ aW50KCpwcm9jX3BhbkRpc3BsYXkpKHN0cnVjdCBseW54ZmJfY3J0YyAqLCBzdHJ1Y3QgZmJfdmFy X3NjcmVlbmluZm8gKiwKPisJCXN0cnVjdCBmYl9pbmZvICopOwo+KwkvKiBjdXJzb3IgaW5mb3Jt YXRpb24gKi8KPisJc3RydWN0IGx5bnhfY3Vyc29yIGN1cnNvcjsKPit9Owo+Kwo+K3N0cnVjdCBs eW54ZmJfb3V0cHV0ewo+KwlpbnQgZHBtczsKPisJaW50IHBhdGhzOwo+KwkvKiAJd2hpY2ggcGF0 aHMocykgdGhpcyBvdXRwdXQgc3RhbmRzIGZvciwgZm9yIHNtNzUwOgo+KwkJcGF0aHM9MTptZWFu cyBvdXRwdXQgZm9yIHBhbmVsIHBhdGhzCj4rCQlwYXRocz0yOm1lYW5zIG91dHB1dCBmb3IgY3J0 IHBhdGhzCj4rCQlwYXRocz0zOm1lYW5zIG91dHB1dCBmb3IgYm90aCBwYW5lbCBhbmQgY3J0IHBh dGhzCj4rCSovCj4rCj4rCWludCAqY2hhbm5lbDsKPisJLyogCXdoaWNoIGNoYW5uZWwgdGhlc2Ug b3V0cHV0cyBsaW5rZWQgd2l0aCwgZm9yIHNtNzUwOgo+KwkJKmNoYW5uZWw9MCBtZWFucyBwcmlt YXJ5IGNoYW5uZWwKPisJCSpjaGFubmVsPTEgbWVhbnMgc2Vjb25kYXJ5IGNoYW5uZWwKPisJCW91 dHB1dC0+Y2hhbm5lbCA9PT4gJmNydGMtPmNoYW5uZWwKPisJKi8KPisJdm9pZCAqcHJpdjsKPisK PisJaW50KCpwcm9jX3NldE1vZGUpKHN0cnVjdCBseW54ZmJfb3V0cHV0ICosCj4rCQkJCQkJc3Ry dWN0IGZiX3Zhcl9zY3JlZW5pbmZvICosCj4rCQkJCQkJc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZv ICopOwo+Kwo+KwlpbnQoKnByb2NfY2hlY2tNb2RlKShzdHJ1Y3QgbHlueGZiX291dHB1dCAqLCBz dHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKik7Cj4rCWludCgqcHJvY19zZXRCTEFOSykoc3RydWN0 IGx5bnhmYl9vdXRwdXQgKiwgaW50KTsKPisJdm9pZCAgKCpjbGVhcikoc3RydWN0IGx5bnhmYl9v dXRwdXQgKik7Cj4rfTsKPisKPitzdHJ1Y3QgbHlueGZiX3BhcnsKPisJLyogZWl0aGVyIDAgb3Ig MSBmb3IgZHVhbCBoZWFkIGFkYXB0b3IsIDAgaXMgdGhlIG9sZGVyIG9uZSByZWdpc3RlcmVkICov Cj4rCWludCBpbmRleDsKPisJdW5zaWduZWQgaW50IHBzZXVkb19wYWxldHRlWzI1Nl07Cj4rCXN0 cnVjdCBseW54ZmJfY3J0YyBjcnRjOwo+KwlzdHJ1Y3QgbHlueGZiX291dHB1dCBvdXRwdXQ7Cj4r CXN0cnVjdCBmYl9pbmZvICppbmZvOwo+KwlzdHJ1Y3QgbHlueF9zaGFyZSAqc2hhcmU7Cj4rfTsK PisKPisjaWZuZGVmIG9mZnNldG9mCj4rI2RlZmluZSBvZmZzZXRvZihUWVBFLCBNRU1CRVIpICgo c2l6ZV90KSAmKChUWVBFICopMCktPk1FTUJFUikKPisjZW5kaWYKPisKPisKPisjZGVmaW5lIFBT X1RPX0haKHBzKQlcCj4rCQkJKHsgCVwKPisJCQl1bnNpZ25lZCBsb25nIGxvbmcgaHogPSAxMDAw KjEwMDAqMTAwMCoxMDAwVUxMOwlcCj4rCQkJZG9fZGl2KGh6LCBwcyk7CVwKPisJCQkodW5zaWdu ZWQgbG9uZyloejsgYH0pCj4rCj4rCj4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBzX3Rv X2h6KHVuc2lnbmVkIGludCBwc3ZhbHVlKQo+K3sKPisJdW5zaWduZWQgbG9uZyBsb25nIG51bWVy YXRvciA9IDEwMDAqMTAwMCoxMDAwKjEwMDBVTEw7Cj4rCS8qIDEwXjEyIC8gcGljb3NlY29uZCBw ZXJpb2QgZ2l2ZXMgZnJlcXVlbmN5IGluIEh6ICovCj4rCWRvX2RpdihudW1lcmF0b3IsIHBzdmFs dWUpOwo+KwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpbnVtZXJhdG9yOwo+K30KPisKPisKPisKPisj ZW5kaWYKPmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2x5bnhmYi9seW54X2hlbHAuaCBiL2Ry aXZlcnMvdmlkZW8vbHlueGZiL2x5bnhfaGVscC5oCj5uZXcgZmlsZSBtb2RlIDEwMDY0NAo+aW5k ZXggMDAwMDAwMC4uMmQ4MDM2NQo+LS0tIC9kZXYvbnVsbAo+KysrIGIvZHJpdmVycy92aWRlby9s eW54ZmIvbHlueF9oZWxwLmgKPkBAIC0wLDAgKzEsMTE1IEBACj4rLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKPisqQ29w eXJpZ2h0IChjKSAyMDEyIGJ5IFNpbGljb24gTW90aW9uLCBJbmMuIChTTUkpCj4rKlBlcm1pc3Np b24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFp bmluZyBhIGNvcHkKPisqb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0 aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKPisqaW4gdGhlIFNvZnR3YXJlIHdp dGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0 cyB0bwo+Kyp1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1 YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcwo+KypvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBw ZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8KPisqZG8g c28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+KyoKPisqVEhFIFNPRlRX QVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCj4r KkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FS UkFOVElFUwo+KypPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFIEFORAo+KypOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBNaWxsLkNo ZW4gYW5kIE1vbmsuTGl1IE9SIENPUFlSSUdIVAo+KypIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5Z IENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKPisqV0hFVEhFUiBJTiBBTiBBQ1RJ T04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCj4rKkZST00sIE9VVCBP RiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKPisqT1RI RVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgo+KyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCj4rI2lmbmRlZiBMWU5Y X0hFTFBfSF9fCj4rI2RlZmluZSBMWU5YX0hFTFBfSF9fCj4rIC8qICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGSUVMRCBNQUNST1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ki8KPisKPisjZGVmaW5lIF9MU0IoZikgICAgICAgICAgICAgKDAgPyBmKQo+KyNkZWZpbmUgX01T QihmKSAgICAgICAgICAgICAoMSA/IGYpCj4rI2RlZmluZSBfQ09VTlQoZikgICAgICAgICAgIChf TVNCKGYpIC0gX0xTQihmKSArIDEpCj4rCj4rI2RlZmluZSBSQVdfTUFTSyhmKSAgICAgICAgICgw eEZGRkZGRkZGID4+ICgzMiAtIF9DT1VOVChmKSkpCj4rI2RlZmluZSBHRVRfTUFTSyhmKSAgICAg ICAgIChSQVdfTUFTSyhmKSA8PCBfTFNCKGYpKQo+KyNkZWZpbmUgR0VUX0ZJRUxEKGQsIGYpICAg ICAgKCgoZCkgPj4gX0xTQihmKSkgJiBSQVdfTUFTSyhmKSkKPisjZGVmaW5lIFRFU1RfRklFTEQo ZCwgZiwgdikgICAoR0VUX0ZJRUxEKGQsIGYpID09IGYgIyMgXyAjIyB2KQo+KyNkZWZpbmUgU0VU X0ZJRUxEKGQsIGYsIHYpICAgICgoKGQpICYgfkdFVF9NQVNLKGYpKSB8IFwKPisJCSgoKGYgIyMg XyAjIyB2KSAmIFJBV19NQVNLKGYpKSA8PCBfTFNCKGYpKSkKPisjZGVmaW5lIFNFVF9GSUVMRFYo ZCwgZiwgdikgICAoKChkKSAmIH5HRVRfTUFTSyhmKSkgfCBcCj4rCQkoKCh2KSAmIFJBV19NQVNL KGYpKSA8PCBfTFNCKGYpKSkKPisKPisKPisvKiBJbnRlcm5hbCBtYWNyb3MgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwo+Kwo+KyNk ZWZpbmUgX0ZfU1RBUlQoZikgICAgICAgICAgICAgKDAgPyBmKQo+KyNkZWZpbmUgX0ZfRU5EKGYp ICAgICAgICAgICAgICAgKDEgPyBmKQo+KyNkZWZpbmUgX0ZfU0laRShmKSAgICAgICAgICAgICAg KDEgKyBfRl9FTkQoZikgLSBfRl9TVEFSVChmKSkKPisjZGVmaW5lIF9GX01BU0soZikgICAgICAg ICAgICAgICgoKDEgPDwgX0ZfU0laRShmKSkgLSAxKSA8PCBfRl9TVEFSVChmKSkKPisjZGVmaW5l IF9GX05PUk1BTElaRSh2LCBmKSAgICAgICgoKHYpICYgX0ZfTUFTSyhmKSkgPj4gX0ZfU1RBUlQo ZikpCj4rI2RlZmluZSBfRl9ERU5PUk1BTElaRSh2LCBmKSAgICAoKCh2KSA8PCBfRl9TVEFSVChm KSkgJiBfRl9NQVNLKGYpKQo+Kwo+Kwo+Ky8qIEdsb2JhbCBtYWNyb3MgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCj4rCj4rI2Rl ZmluZSBGSUVMRF9HRVQoeCwgcmVnLCBmaWVsZCkgXAo+KwkoIFwKPisJICBfRl9OT1JNQUxJWkUo KHgpLCByZWcgIyMgXyAjIyBmaWVsZCkgXAo+KwkpCj4rCj4rI2RlZmluZSBGSUVMRF9TRVQoeCwg cmVnLCBmaWVsZCwgdmFsdWUpIFwKPisJKCBcCj4rCSAgKHggJiB+X0ZfTUFTSyhyZWcgIyMgXyAj IyBmaWVsZCkpIFwKPisJICB8IF9GX0RFTk9STUFMSVpFKHJlZyAjIyBfICMjIGZpZWxkICMjIF8g IyMgdmFsdWUsIHJlZyAjIyBfICMjIGZpZWxkKSBcCj4rCSkKPisKPisjZGVmaW5lIEZJRUxEX1ZB TFVFKHgsIHJlZywgZmllbGQsIHZhbHVlKSBcCj4rCSggXAo+KwkgICh4ICYgfl9GX01BU0socmVn ICMjIF8gIyMgZmllbGQpKSBcCj4rCSAgfCBfRl9ERU5PUk1BTElaRSh2YWx1ZSwgcmVnICMjIF8g IyMgZmllbGQpIFwKPisJKQo+Kwo+KyNkZWZpbmUgRklFTERfQ0xFQVIocmVnLCBmaWVsZCkgXAo+ KwkoIFwKPisJICB+X0ZfTUFTSyhyZWcgIyMgXyAjIyBmaWVsZCkgXAo+KwkpCj4rCj4rCj4rLyog RmllbGQgTWFjcm9zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqLwo+Kwo+KyNkZWZpbmUgRklFTERfU1RBUlQoZmllbGQpICAgICAg ICAgICAgICAoMCA/IGZpZWxkKQo+KyNkZWZpbmUgRklFTERfRU5EKGZpZWxkKSAgICAgICAgICAg ICAgICAoMSA/IGZpZWxkKQo+KyNkZWZpbmUgRklFTERfU0laRShmaWVsZCkgICAgICAgICAgICAg ICAoMSArIEZJRUxEX0VORChmaWVsZCkgLSBGSUVMRF9TVEFSVChmaWVsZCkpCj4rI2RlZmluZSBG SUVMRF9NQVNLKGZpZWxkKSAgICAgICAgICAgICAgICgoKDEgPDwgKEZJRUxEX1NJWkUoZmllbGQp LTEpKSB8ICgoMSA8PCAoRklFTERfU0laRShmaWVsZCktMSkpIC0gMSkpIDw8IEZJRUxEX1NUQVJU KGZpZWxkKSkKPisjZGVmaW5lIEZJRUxEX05PUk1BTElaRShyZWcsIGZpZWxkKSAgICAgKCgocmVn KSAmIEZJRUxEX01BU0soZmllbGQpKSA+PiBGSUVMRF9TVEFSVChmaWVsZCkpCj4rI2RlZmluZSBG SUVMRF9ERU5PUk1BTElaRShmaWVsZCwgdmFsdWUpICgoKHZhbHVlKSA8PCBGSUVMRF9TVEFSVChm aWVsZCkpICYgRklFTERfTUFTSyhmaWVsZCkpCj4rCj4rI2RlZmluZSBGSUVMRF9JTklUKHJlZywg ZmllbGQsIHZhbHVlKSAgIEZJRUxEX0RFTk9STUFMSVpFKHJlZyAjIyBfICMjIGZpZWxkLCBcCj4r CQlyZWcgIyMgXyAjIyBmaWVsZCAjIyBfICMjIHZhbHVlKQo+KyNkZWZpbmUgRklFTERfSU5JVF9W QUwocmVnLCBmaWVsZCwgdmFsdWUpIFwKPisJKEZJRUxEX0RFTk9STUFMSVpFKHJlZyAjIyBfICMj IGZpZWxkLCB2YWx1ZSkpCj4rI2RlZmluZSBGSUVMRF9WQUxfU0VUKHgsIHIsIGYsIHYpICAgICAg ICh4ID0geCAmIH5GSUVMRF9NQVNLKHIgIyMgXyAjIyBmKSBcCj4rCQkJCQkgICAgfCBGSUVMRF9E RU5PUk1BTElaRShyICMjIF8gIyMgZiwgciAjIyBfICMjIGYgIyMgXyAjIyB2KSkKPisKPisjZGVm aW5lIFJHQihyLCBnLCBiKSBcCj4rCSggXAo+KwkgICh1bnNpZ25lZCBsb25nKSAoKChyKSA8PCAx NikgfCAoKGcpIDw8IDgpIHwgKGIpKSBcCj4rCSkKPisKPisjZGVmaW5lIFJHQjE2KHIsIGcsIGIp IFwKPisJKCBcCj4rCSAgKHVuc2lnbmVkIHNob3J0KSAoKCgocikgJiAweEY4KSA8PCA4KSB8ICgo KGcpICYgMHhGQykgPDwgMykgfCAoKChiKSAmIDB4RjgpID4+IDMpKSBcCj4rCSkKPisKPitzdGF0 aWMgaW5saW5lIHVuc2lnbmVkIGludCBhYnNEaWZmKHVuc2lnbmVkIGludCBhLCB1bnNpZ25lZCBp bnQgYikKPit7Cj4rCWlmIChhIDwgYikKPisJCXJldHVybiBiLWE7Cj4rCWVsc2UKPisJCXJldHVy biBhLWI7Cj4rfQo+Kwo+Ky8qIG4gLyBkICsgMSAvIDIgPSAoMm4gKyBkKSAvIDJkICovCj4rI2Rl ZmluZSByb3VuZGVkRGl2KG51bSwgZGVub20pCSgoMiAqIChudW0pICsgKGRlbm9tKSkgLyAoMiAq IChkZW5vbSkpKQo+KyNkZWZpbmUgTUIoeCkgKCh4KTw8MjApCj4rI2RlZmluZSBLQih4KSAoKHgp PDwxMCkKPisjZGVmaW5lIE1Ieih4KSAoKHgpICogMTAwMDAwMCkKPisKPisKPisKPisKPisjZW5k aWYKPmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2x5bnhmYi9seW54X2h3NzUwLmMgYi9kcml2 ZXJzL3ZpZGVvL2x5bnhmYi9seW54X2h3NzUwLmMKPm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj5pbmRl eCAwMDAwMDAwLi4wMTllYjY4Cj4tLS0gL2Rldi9udWxsCj4rKysgYi9kcml2ZXJzL3ZpZGVvL2x5 bnhmYi9seW54X2h3NzUwLmMKPkBAIC0wLDAgKzEsNjMzIEBACj4rLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKPisqQ29w eXJpZ2h0IChjKSAyMDEyIGJ5IFNpbGljb24gTW90aW9uLCBJbmMuIChTTUkpCj4rKlBlcm1pc3Np b24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFp bmluZyBhIGNvcHkKPisqb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0 aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKPisqaW4gdGhlIFNvZnR3YXJlIHdp dGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0 cyB0bwo+Kyp1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1 YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcwo+KypvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBw ZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8KPisqZG8g c28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+KyoKPisqVEhFIFNPRlRX QVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCj4r KkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FS UkFOVElFUwo+KypPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFIEFORAo+KypOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBNaWxsLkNo ZW4gYW5kIE1vbmsuTGl1IE9SIENPUFlSSUdIVAo+KypIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5Z IENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKPisqV0hFVEhFUiBJTiBBTiBBQ1RJ T04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCj4rKkZST00sIE9VVCBP RiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKPisqT1RI RVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgo+KyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCj4rI2luY2x1ZGU8bGlu dXgvdmVyc2lvbi5oPgo+KyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigy LCA2LCAxMCkKPisjaW5jbHVkZTxsaW51eC9jb25maWcuaD4KPisjZW5kaWYKPisjaW5jbHVkZSA8 bGludXgvdmVyc2lvbi5oPgo+KyNpbmNsdWRlPGxpbnV4L21vZHVsZS5oPgo+KyNpbmNsdWRlPGxp bnV4L2tlcm5lbC5oPgo+KyNpbmNsdWRlPGxpbnV4L2Vycm5vLmg+Cj4rI2luY2x1ZGU8bGludXgv c3RyaW5nLmg+Cj4rI2luY2x1ZGU8bGludXgvbW0uaD4KPisjaW5jbHVkZTxsaW51eC9zbGFiLmg+ Cj4rI2luY2x1ZGU8bGludXgvZGVsYXkuaD4KPisjaW5jbHVkZTxsaW51eC9mYi5oPgo+KyNpbmNs dWRlPGxpbnV4L2lvcG9ydC5oPgo+KyNpbmNsdWRlPGxpbnV4L2luaXQuaD4KPisjaW5jbHVkZTxs aW51eC9wY2kuaD4KPisjaW5jbHVkZTxsaW51eC92bWFsbG9jLmg+Cj4rI2luY2x1ZGU8bGludXgv cGFnZW1hcC5oPgo+KyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+Cj4rI2lmZGVmIENPTkZJR19N VFJSCj4rI2luY2x1ZGUgPGFzbS9tdHJyLmg+Cj4rI2VuZGlmCj4rCj4rI2lmIExJTlVYX1ZFUlNJ T05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLCA2LCAxMCkKPisvKiBubyBiZWxvdyB0d28gaGVh ZGVyIGZpbGVzIGluIDIuNi45ICovCj4rI2luY2x1ZGU8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+ Cj4rI2luY2x1ZGU8bGludXgvc2NyZWVuX2luZm8uaD4KPisjZWxzZQo+Ky8qIG5vdGhpbmcgYnkg ZmFyICovCj4rI2VuZGlmCj4rCj4rI2luY2x1ZGUgImx5bnhfZHJ2LmgiCj4rI2luY2x1ZGUgImx5 bnhfaHc3NTAuaCIKPisjaW5jbHVkZSAiZGRrNzUwLmgiCj4rI2luY2x1ZGUgImx5bnhfYWNjZWwu aCIKPisKPitpbnQgaHdfc203NTBfbWFwKHN0cnVjdCBseW54X3NoYXJlICpzaGFyZSwgc3RydWN0 IHBjaV9kZXYgKnBkZXYpCj4rewo+KwlpbnQgcmV0Owo+KwlzdHJ1Y3Qgc203NTBfc2hhcmUgKnNw ZWNfc2hhcmU7Cj4rCUVOVEVSKCk7Cj4rCj4rCXNwZWNfc2hhcmUgPSBjb250YWluZXJfb2Yoc2hh cmUsIHN0cnVjdCBzbTc1MF9zaGFyZSwgc2hhcmUpOwo+KwlyZXQgPSAwOwo+Kwo+KwlzaGFyZS0+ dmlkcmVnX3N0YXJ0ICA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAxKTsKPisJc2hhcmUtPnZp ZHJlZ19zaXplID0gTUIoMik7Cj4rCj4rCS8qIHJlc2VydmUgdGhlIHZpZHJlZyBzcGFjZSBvZiBz bWkgYWRhcHRvcgo+KwkgKiBpZiB5b3UgZG8gdGhpcywgdSBuZWVkIHRvIGFkZCByZWxlYXNlIHJl Z2lvbiBjb2RlCj4rCSAqIGluIGx5bnhmYl9yZW1vdmUsIG9yIG1lbW9yeSB3aWxsIG5vdCBiZSBt YXBwZWQgYWdhaW4KPisJICogc3VjY2Vzc2Z1bGx5Cj4rCSAqICovCj4rCj4rCj4rCS8qIG5vdyBt YXAgbW1pbyBhbmQgdmlkbWVtKi8KPisJc2hhcmUtPnB2UmVnID0gaW9yZW1hcF9ub2NhY2hlKHNo YXJlLT52aWRyZWdfc3RhcnQsIHNoYXJlLT52aWRyZWdfc2l6ZSk7Cj4rCWlmICghc2hhcmUtPnB2 UmVnKSB7Cj4rCQllcnJfbXNnKCJtbWlvIGZhaWxlZFxuIik7Cj4rCQlyZXQgPSAtRUZBVUxUOwo+ KwkJZ290byBleGl0Owo+Kwl9Cj4rCj4rCXNoYXJlLT5hY2NlbC5kcHJCYXNlID0gc2hhcmUtPnB2 UmVnICsgREVfQkFTRV9BRERSX1RZUEUxOwo+KwlzaGFyZS0+YWNjZWwuZHBQb3J0QmFzZSA9IHNo YXJlLT5wdlJlZyArIERFX1BPUlRfQUREUl9UWVBFMTsKPisKPisJZGRrNzUwX3NldF9tbWlvKHNo YXJlLT5wdlJlZywgc2hhcmUtPmRldmlkLCBzaGFyZS0+cmV2aWQpOwo+Kwo+KwlzaGFyZS0+dmlk bWVtX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOwo+KwkvKiBkb24ndCB1c2Ug cGRldl9yZXNvdXJjZVt4XS5lbmQgLSByZXNvdXJjZVt4XS5zdGFydCB0bwo+KwkgKiBjYWxjdWxh dGUgdGhlIHJlc291cmNlIHNpemUsIGl0cyBvbmx5IHRoZSBtYXhpbXVtIGF2YWlsYWJsZQo+Kwkg KiBzaXplIGJ1dCBub3QgdGhlIGFjdHVhbCBzaXplLCB1c2UKPisJICogQGh3X3NtNzUwX2dldFZN U2l6ZSBmdW5jdGlvbiBjYW4gYmUgc2FmZS4KPisJICogKi8KPisJc2hhcmUtPnZpZG1lbV9zaXpl ID0gaHdfc203NTBfZ2V0Vk1TaXplKHNoYXJlKTsKPisJaW5mX21zZygidmlkZW8gbWVtb3J5IHNp emUgPSAlZCBtYlxuIiwgc2hhcmUtPnZpZG1lbV9zaXplID4+IDIwKTsKPisKPisJLyogcmVzZXJ2 ZSB0aGUgdmlkbWVtIHNwYWNlIG9mIHNtaSBhZGFwdG9yICovCj4rCj4rCXNoYXJlLT5wdk1lbSA9 IGlvcmVtYXAoc2hhcmUtPnZpZG1lbV9zdGFydCwKPisJCQlzaGFyZS0+dmlkbWVtX3NpemUpOwo+ Kwo+KwlpZiAoIXNoYXJlLT5wdk1lbSkgewo+KwkJZXJyX21zZygiTWFwIHZpZGVvIG1lbW9yeSBm YWlsZWRcbiIpOwo+KwkJcmV0ID0gLUVGQVVMVDsKPisJCWdvdG8gZXhpdDsKPisJfQo+Kwo+Kwlp bmZfbXNnKCJ2aWRlbyBtZW1vcnkgdmFkZHIgPSAlcFxuIiwgc2hhcmUtPnB2TWVtKTsKPitleGl0 Ogo+KwlMRUFWRShyZXQpOwo+K30KPisKPisKPisKPitpbnQgaHdfc203NTBfaW5pdGh3KHN0cnVj dCBseW54X3NoYXJlICpzaGFyZSwgc3RydWN0IHBjaV9kZXYgKnBkZXYpCj4rewo+KwlzdHJ1Y3Qg c203NTBfc2hhcmUgKnNwZWNfc2hhcmU7Cj4rCXN0cnVjdCBpbml0X3N0YXR1cyAqcGFybTsKPisJ RU5URVIoKTsKPisJc3BlY19zaGFyZSA9IGNvbnRhaW5lcl9vZihzaGFyZSwgc3RydWN0IHNtNzUw X3NoYXJlLCBzaGFyZSk7Cj4rCXBhcm0gPSAmc3BlY19zaGFyZS0+c3RhdGUuaW5pdFBhcm07Cj4r CWlmIChwYXJtLT5jaGlwX2NsayA9PSAwKQo+KwkJcGFybS0+Y2hpcF9jbGsgPSAoZ2V0Q2hpcFR5 cGUoKSA9PSBTTTc1MExFKSA/Cj4rCQkJREVGQVVMVF9TTTc1MExFX0NISVBfQ0xPQ0sgOgo+KwkJ CURFRkFVTFRfU003NTBfQ0hJUF9DTE9DSzsKPisKPisJaWYgKHBhcm0tPm1lbV9jbGsgPT0gMCkK PisJCXBhcm0tPm1lbV9jbGsgPSBwYXJtLT5jaGlwX2NsazsKPisJaWYgKHBhcm0tPm1hc3Rlcl9j bGsgPT0gMCkKPisJCXBhcm0tPm1hc3Rlcl9jbGsgPSBwYXJtLT5jaGlwX2Nsay8zOwo+Kwo+Kwlk ZGs3NTBfaW5pdEh3KChpbml0Y2hpcF9wYXJhbV90ICopJnNwZWNfc2hhcmUtPnN0YXRlLmluaXRQ YXJtKTsKPisJLyogZm9yIHNtNzE4LCBvcGVuIHBjaSBidXJzdCAqLwo+KwlpZiAoc2hhcmUtPmRl dmlkID09IDB4NzE4KSB7Cj4rCQlQT0tFMzIoU1lTVEVNX0NUUkwsCj4rCQkJUEVFSzMyKFNZU1RF TV9DVFJMKXwoMSA8PCBTWVNURU1fQ1RSTF9QQ0lfQlVSU1RfTFNCKSk7Cj4rCX0KPisKPisJLyog c203NTAgdXNlIHNpaTE2NCwgaXQgY2FuIGJlIHNldHVwIHdpdGggZGVmYXVsdCB2YWx1ZQo+Kwkg KiBieSBvbiBwb3dlciwgc28gaW5pdERWSURpc3AgY2FuIGJlIHNraXBwZWQgKi8KPisKPisJaWYg KGdldENoaXBUeXBlKCkgIT0gU003NTBMRSkgewo+KwkJLyogZG9lcyB1c2VyIG5lZWQgQ1JUID8q Lwo+KwkJaWYgKHNwZWNfc2hhcmUtPnN0YXRlLm5vY3J0KSB7Cj4rCQkJUE9LRTMyKE1JU0NfQ1RS TCwKPisJCQkJCVBFRUszMihNSVNDX0NUUkwpfAo+KwkJCQkJKDEgPDwgTUlTQ19DVFJMX0RBQ19Q T1dFUl9MU0IpKTsKPisJCQkvKiBzaHV0IG9mZiBkcG1zICovCj4rCQkJUE9LRTMyKFNZU1RFTV9D VFJMLAo+KwkJCQkJUEVFSzMyKFNZU1RFTV9DVFJMKXwKPisJCQkJCSgzIDw8IFNZU1RFTV9DVFJM X0RQTVNfTFNCKSk7Cj4rCQl9IGVsc2V7Cj4rCQkJUE9LRTMyKE1JU0NfQ1RSTCwKPisJCQkJCVBF RUszMihNSVNDX0NUUkwpJgo+KwkJCQkJKH4oMSA8PCBNSVNDX0NUUkxfREFDX1BPV0VSX0xTQikp KTsKPisJCQkvKiB0dXJuIG9uIGRwbXMgKi8KPisJCQlQT0tFMzIoU1lTVEVNX0NUUkwsCj4rCQkJ CQlQRUVLMzIoU1lTVEVNX0NUUkwpJgo+KwkJCQkJKH4oMyA8PCBTWVNURU1fQ1RSTF9EUE1TX0xT QikpKTsKPisJCX0KPisKPisJCXN3aXRjaCAoc3BlY19zaGFyZS0+c3RhdGUucG5sdHlwZSkgewo+ KwkJY2FzZSBzbTc1MF9kb3VibGVURlQ6Cj4rCQljYXNlIHNtNzUwXzI0VEZUOgo+KwkJY2FzZSBz bTc1MF9kdWFsVEZUOgo+KwkJCQlQT0tFMzIoUEFORUxfRElTUExBWV9DVFJMLAo+KwkJCQkJCVBF RUszMihQQU5FTF9ESVNQTEFZX0NUUkwpJgo+KwkJCQkJCSh+KDMgPDwgUEFORUxfRElTUExBWV9D VFJMX1RGVF9ESVNQX0xTQikpKTsKPisJCQkJUE9LRTMyKFBBTkVMX0RJU1BMQVlfQ1RSTCwKPisJ CQkJCQlQRUVLMzIoUEFORUxfRElTUExBWV9DVFJMKXwKPisJCQkJCQkoc3BlY19zaGFyZS0+c3Rh dGUucG5sdHlwZSA8PCBQQU5FTF9ESVNQTEFZX0NUUkxfVEZUX0RJU1BfTFNCKSk7CQkJCQlicmVh azsKPisJCX0KPisJfSBlbHNlewo+KwkJLyogZm9yIDc1MExFICwgbm8gRFZJIGNoaXAgaW5pdGls aXphdGlvbiBtYWtlcyBNb25pdG9yIG5vIHNpZ25hbCAqLwo+KwkJLyogU2V0IHVwIEdQSU8gZm9y IHNvZnR3YXJlIEkyQyB0byBwcm9ncmFtIERWSSBjaGlwIGluIHRoZQo+KwkJICAgWGlsaW54IFNQ NjA1IGJvYXJkLCBpbiBvcmRlciB0byBoYXZlIHZpZGVvIHNpZ25hbC4KPisJCSAgICovCj4rCQlz d0kyQ0luaXQoMCwgMSk7Cj4rCj4rCj4rCQkvKiBDdXN0b21lciBtYXkgTk9UIHVzZSBDSDczMDEg RFZJIGNoaXAsIHdoaWNoIGhhcyB0byBiZQo+KwkJICAgaW5pdGlhbGl6ZWQgZGlmZmVyZW50bHku Cj4rCQkgICAqLwo+KwkJaWYgKHN3STJDUmVhZFJlZygweGVjLCAweDRhKSA9PSAweDk1KSB7Cj4r CQkJLyogVGhlIGZvbGxvd2luZyByZWdpc3RlciB2YWx1ZXMgZm9yIENINzMwMSBhcmUgZnJvbQo+ KwkJCSAgIENocm9udGVsIGFwcCBub3RlIGFuZCBvdXIgZXhwZXJpbWVudC4KPisJCQkgICAqLwo+ KwkJCWluZl9tc2coInllcywgQ0g3MzAxIERWSSBjaGlwIGZvdW5kXG4iKTsKPisJCQlzd0kyQ1dy aXRlUmVnKDB4ZWMsIDB4MWQsIDB4MTYpOwo+KwkJCXN3STJDV3JpdGVSZWcoMHhlYywgMHgyMSwg MHg5KTsKPisJCQlzd0kyQ1dyaXRlUmVnKDB4ZWMsIDB4NDksIDB4QzApOwo+KwkJCWluZl9tc2co Im9rYXksIENINzMwMSBEVkkgY2hpcCBzZXR1cCBkb25lXG4iKTsKPisJCX0KPisJfQo+Kwo+Kwkv KiBpbml0IDJkIGVuZ2luZSAqLwo+KwlpZiAoIXNoYXJlLT5hY2NlbF9vZmYpIHsKPisJCWh3X3Nt NzUwX2luaXRBY2NlbChzaGFyZSk7Cj4rCX0KPisKPisJTEVBVkUoMCk7Cj4rfQo+Kwo+Kwo+K3Jl c291cmNlX3NpemVfdCBod19zbTc1MF9nZXRWTVNpemUoc3RydWN0IGx5bnhfc2hhcmUgKnNoYXJl KQo+K3sKPisJcmVzb3VyY2Vfc2l6ZV90IHJldDsKPisJRU5URVIoKTsKPisJcmV0ID0gZGRrNzUw X2dldFZNU2l6ZSgpOwo+KwlMRUFWRShyZXQpOwo+K30KPisKPisKPisKPitpbnQgaHdfc203NTBf b3V0cHV0X2NoZWNrTW9kZShzdHJ1Y3QgbHlueGZiX291dHB1dCAqb3V0cHV0LCBzdHJ1Y3QgZmJf dmFyX3NjcmVlbmluZm8gKnZhcikKPit7Cj4rCUVOVEVSKCk7Cj4rCUxFQVZFKDApOwo+K30KPisK PisKPitpbnQgaHdfc203NTBfb3V0cHV0X3NldE1vZGUoc3RydWN0IGx5bnhmYl9vdXRwdXQgKm91 dHB1dCwKPisJCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBzdHJ1Y3QgZmJfZml4X3Nj cmVlbmluZm8gKmZpeCkKPit7Cj4rCWludCByZXQ7Cj4rCWRpc3Bfb3V0cHV0X3QgZGlzcFNldDsK PisJaW50IGNoYW5uZWw7Cj4rCUVOVEVSKCk7Cj4rCXJldCA9IDA7Cj4rCWRpc3BTZXQgPSAwOwo+ KwljaGFubmVsID0gKm91dHB1dC0+Y2hhbm5lbDsKPisKPisKPisJaWYgKGdldENoaXBUeXBlKCkg IT0gU003NTBMRSkgewo+KwkJaWYgKGNoYW5uZWwgPT0gc203NTBfcHJpbWFyeSkgewo+KwkJCWlu Zl9tc2coInByaW1hcnkgY2hhbm5lbFxuIik7Cj4rCQkJaWYgKG91dHB1dC0+cGF0aHMgJiBzbTc1 MF9wYW5lbCkKPisJCQkJZGlzcFNldCB8PSBkb19MQ0QxX1BSSTsKPisJCQlpZiAob3V0cHV0LT5w YXRocyAmIHNtNzUwX2NydCkKPisJCQkJZGlzcFNldCB8PSBkb19DUlRfUFJJOwo+Kwo+KwkJfSBl bHNlewo+KwkJCWluZl9tc2coInNlY29uZGFyeSBjaGFubmVsXG4iKTsKPisJCQlpZiAob3V0cHV0 LT5wYXRocyAmIHNtNzUwX3BhbmVsKQo+KwkJCQlkaXNwU2V0IHw9IGRvX0xDRDFfU0VDOwo+KwkJ CWlmIChvdXRwdXQtPnBhdGhzICYgc203NTBfY3J0KQo+KwkJCQlkaXNwU2V0IHw9IGRvX0NSVF9T RUM7Cj4rCj4rCQl9Cj4rCQlkZGs3NTBfc2V0TG9naWNhbERpc3BPdXQoZGlzcFNldCk7Cj4rCX0g ZWxzZXsKPisJCS8qIGp1c3Qgb3BlbiBESVNQTEFZX0NPTlRST0xfNzUwTEUgcmVnaXN0ZXIgYml0 IDM6MCovCj4rCQl1MzIgcmVnOwo+KwkJcmVnID0gUEVFSzMyKERJU1BMQVlfQ09OVFJPTF83NTBM RSk7Cj4rCQlyZWcgfD0gMHhmOwo+KwkJUE9LRTMyKERJU1BMQVlfQ09OVFJPTF83NTBMRSwgcmVn KTsKPisJfQo+Kwo+KwlpbmZfbXNnKCJkZGsgc2V0bG9naWNkaXNwb3V0IGRvbmUgXG4iKTsKPisJ TEVBVkUocmV0KTsKPit9Cj4rCj4rdm9pZCBod19zbTc1MF9vdXRwdXRfY2xlYXIoc3RydWN0IGx5 bnhmYl9vdXRwdXQgKm91dHB1dCkKPit7Cj4rCUVOVEVSKCk7Cj4rCUxFQVZFKCk7Cj4rfQo+Kwo+ K2ludCBod19zbTc1MF9jcnRjX2NoZWNrTW9kZShzdHJ1Y3QgbHlueGZiX2NydGMgKmNydGMsIHN0 cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyKQo+K3sKPisJc3RydWN0IGx5bnhfc2hhcmUgKnNo YXJlOwo+KwlFTlRFUigpOwo+Kwo+KwlzaGFyZSA9IGNvbnRhaW5lcl9vZihjcnRjLCBzdHJ1Y3Qg bHlueGZiX3BhciwgY3J0YyktPnNoYXJlOwo+Kwo+Kwlzd2l0Y2ggKHZhci0+Yml0c19wZXJfcGl4 ZWwpIHsKPisJY2FzZSA4Ogo+KwljYXNlIDE2Ogo+KwkJYnJlYWs7Cj4rCWNhc2UgMzI6Cj4rCQlp ZiAoc2hhcmUtPnJldmlkID09ICh1bnNpZ25lZCBjaGFyKVNNNzUwTEVfUkVWSVNJT05fSUQpIHsK PisJCQlkYmdfbXNnKCI3NTBsZSBkbyBub3Qgc3VwcG9ydCAzMmJwcFxuIik7Cj4rCQkJTEVBVkUg KC1FSU5WQUwpOwo+KwkJfQo+KwkJYnJlYWs7Cj4rCWRlZmF1bHQ6Cj4rCQkJTEVBVkUoLUVJTlZB TCk7Cj4rCj4rCX0KPisKPisJTEVBVkUoMCk7Cj4rfQo+Kwo+Kwo+Ky8qCj4rICAgc2V0IHRoZSBj b250cm9sbGVyJ3MgbW9kZSBmb3IgQGNydGMgY2hhcmdlZCB3aXRoIEB2YXIgYW5kIEBmaXggcGFy YW1ldGVycwo+KyAgICovCj4raW50IGh3X3NtNzUwX2NydGNfc2V0TW9kZShzdHJ1Y3QgbHlueGZi X2NydGMgKmNydGMsCj4rCQlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKPisJCXN0cnVj dCBmYl9maXhfc2NyZWVuaW5mbyAqZml4KQo+K3sKPisJaW50IHJldCwgZm10Owo+Kwl1MzIgcmVn Owo+Kwltb2RlX3BhcmFtZXRlcl90IG1vZHBhcm07Cj4rCWNsb2NrX3R5cGVfdCBjbG9jazsKPisJ c3RydWN0IGx5bnhfc2hhcmUgKnNoYXJlOwo+KwlzdHJ1Y3QgbHlueGZiX3BhciAqcGFyOwo+Kwo+ KwlFTlRFUigpOwo+KwlyZXQgPSAwOwo+KwlwYXIgPSBjb250YWluZXJfb2YoY3J0Yywgc3RydWN0 IGx5bnhmYl9wYXIsIGNydGMpOwo+KwlzaGFyZSA9IHBhci0+c2hhcmU7Cj4rCj4rCWlmICghc2hh cmUtPmFjY2VsX29mZikgewo+KwkJLyogc2V0IDJkIGVuZ2luZSBwaXhlbCBmb3JtYXQgYWNjb3Jk aW5nIHRvIG1vZGUgYnBwICovCj4rCQlzd2l0Y2ggKHZhci0+Yml0c19wZXJfcGl4ZWwpIHsKPisJ CWNhc2UgODoKPisJCQlmbXQgPSAwOwo+KwkJCWJyZWFrOwo+KwkJY2FzZSAxNjoKPisJCQlmbXQg PSAxOwo+KwkJCWJyZWFrOwo+KwkJY2FzZSAzMjoKPisJCWRlZmF1bHQ6Cj4rCQkJZm10ID0gMjsK PisJCQlicmVhazsKPisJCX0KPisJCWh3X3NldDJkZm9ybWF0KCZzaGFyZS0+YWNjZWwsIGZtdCk7 Cj4rCX0KPisKPisKPisJLyogc2V0IHRpbWluZyAqLwo+Kwltb2RwYXJtLnBpeGVsX2Nsb2NrID0g cHNfdG9faHoodmFyLT5waXhjbG9jayk7Cj4rCW1vZHBhcm0udmVydGljYWxfc3luY19wb2xhcml0 eSA9ICh2YXItPnN5bmMgJiBGQl9TWU5DX0hPUl9ISUdIX0FDVCkgPyBQT1MgOiBORUc7Cj4rCW1v ZHBhcm0uaG9yaXpvbnRhbF9zeW5jX3BvbGFyaXR5ID0gKHZhci0+c3luYyAmIEZCX1NZTkNfVkVS VF9ISUdIX0FDVCkgPyBQT1MgOiBORUc7Cj4rCW1vZHBhcm0uY2xvY2tfcGhhc2VfcG9sYXJpdHkg PSAodmFyLT5zeW5jICYgRkJfU1lOQ19DT01QX0hJR0hfQUNUKSA/IFBPUyA6IE5FRzsKPisJbW9k cGFybS5ob3Jpem9udGFsX2Rpc3BsYXlfZW5kID0gdmFyLT54cmVzOwo+Kwltb2RwYXJtLmhvcml6 b250YWxfc3luY193aWR0aCA9IHZhci0+aHN5bmNfbGVuOwo+Kwltb2RwYXJtLmhvcml6b250YWxf c3luY19zdGFydCA9IHZhci0+eHJlcyArIHZhci0+cmlnaHRfbWFyZ2luOwo+Kwltb2RwYXJtLmhv cml6b250YWxfdG90YWwgPSB2YXItPnhyZXMgKyB2YXItPmxlZnRfbWFyZ2luICsgdmFyLT5yaWdo dF9tYXJnaW4gKyB2YXItPmhzeW5jX2xlbjsKPisJbW9kcGFybS52ZXJ0aWNhbF9kaXNwbGF5X2Vu ZCA9IHZhci0+eXJlczsKPisJbW9kcGFybS52ZXJ0aWNhbF9zeW5jX2hlaWdodCA9IHZhci0+dnN5 bmNfbGVuOwo+Kwltb2RwYXJtLnZlcnRpY2FsX3N5bmNfc3RhcnQgPSB2YXItPnlyZXMgKyB2YXIt Pmxvd2VyX21hcmdpbjsKPisJbW9kcGFybS52ZXJ0aWNhbF90b3RhbCA9IHZhci0+eXJlcyArIHZh ci0+dXBwZXJfbWFyZ2luICsgdmFyLT5sb3dlcl9tYXJnaW4gKyB2YXItPnZzeW5jX2xlbjsKPisK PisJLyogY2hvb3NlIHBsbCAqLwo+KwlpZiAoY3J0Yy0+Y2hhbm5lbCAhPSBzbTc1MF9zZWNvbmRh cnkpCj4rCQljbG9jayA9IFBSSU1BUllfUExMOwo+KwllbHNlCj4rCQljbG9jayA9IFNFQ09OREFS WV9QTEw7Cj4rCj4rCWRiZ19tc2coIlJlcXVlc3QgcGl4ZWwgY2xvY2sgPSAlbHVcbiIsIG1vZHBh cm0ucGl4ZWxfY2xvY2spOwo+KwlyZXQgPSBkZGs3NTBfc2V0TW9kZVRpbWluZygmbW9kcGFybSwg Y2xvY2spOwo+KwlpZiAocmV0KSB7Cj4rCQllcnJfbXNnKCJTZXQgbW9kZSB0aW1pbmcgZmFpbGVk XG4iKTsKPisJCWdvdG8gZXhpdDsKPisJfQo+Kwo+KwlpZiAoY3J0Yy0+Y2hhbm5lbCAhPSBzbTc1 MF9zZWNvbmRhcnkpIHsKPisJCS8qIHNldCBwaXRjaCwgb2Zmc2V0ICwgd2lkdGgsIHN0YXJ0IGFk ZHJlc3MgLCBldGMuLi4gKi8KPisJCVBPS0UzMihQQU5FTF9GQl9BRERSRVNTLAo+KwkJCQkofigx IDw8IFBBTkVMX0ZCX0FERFJFU1NfU1RBVFVTX0xTQikpJgo+KwkJCQkofigxIDw8IFBBTkVMX0ZC X0FERFJFU1NfRVhUX0xTQikpJgo+KwkJCQkofigwWDNGRkZGRkYgPDwgUEFORUxfRkJfQUREUkVT U19BRERSRVNTX0xTQikpfAo+KwkJCQkoY3J0Yy0+b1NjcmVlbiA8PCBQQU5FTF9GQl9BRERSRVNT X0FERFJFU1NfTFNCKSk7Cj4rCQlyZWcgPSB2YXItPnhyZXMgKiAodmFyLT5iaXRzX3Blcl9waXhl bCA+PiAzKTsKPisJCS8qIGNydGMtPmNoYW5uZWwgaXMgbm90IGVxdWFsIHRvIHBhci0+aW5kZXgg b24gbnVtZXJpYywgYmUgYXdhcmUgb2YgdGhhdCAqLwo+KwkJcmVnID0gUEFERElORyhjcnRjLT5s aW5lX3BhZCwgcmVnKTsKPisJCVBPS0UzMihQQU5FTF9GQl9XSURUSCwKPisJCQkJKHJlZyA8PCBQ QU5FTF9GQl9XSURUSF9XSURUSF9MU0IpfAo+KwkJCQkoZml4LT5saW5lX2xlbmd0aCA8PCBQQU5F TF9GQl9XSURUSF9PRkZTRVRfTFNCKSk7Cj4rCj4rCQlQT0tFMzIoUEFORUxfV0lORE9XX1dJRFRI LAo+KwkJCQkodmFyLT54cmVzIC0gMSA8PCBQQU5FTF9XSU5ET1dfV0lEVEhfV0lEVEhfTFNCKXwK PisJCQkJKHZhci0+eG9mZnNldCA8PCBQQU5FTF9XSU5ET1dfV0lEVEhfWF9MU0IpKTsKPisKPisJ CVBPS0UzMihQQU5FTF9XSU5ET1dfSEVJR0hULAo+KwkJCQkodmFyLT55cmVzX3ZpcnR1YWwgLSAx IDw8IFBBTkVMX1dJTkRPV19IRUlHSFRfSEVJR0hUX0xTQil8Cj4rCQkJCSh2YXItPnlvZmZzZXQg PDwgUEFORUxfV0lORE9XX0hFSUdIVF9ZX0xTQikpOwo+KwkJUE9LRTMyKFBBTkVMX1BMQU5FX1RM LCAwKTsKPisKPisJCVBPS0UzMihQQU5FTF9QTEFORV9CUiwKPisJCQkJKHZhci0+eXJlcyAtIDEg PDwgUEFORUxfUExBTkVfQlJfQk9UVE9NX0xTQil8Cj4rCQkJCSh2YXItPnhyZXMgLSAxIDw8IFBB TkVMX1BMQU5FX0JSX1JJR0hUX0xTQikpOwo+Kwo+KwkJLyogc2V0IHBpeGVsIGZvcm1hdCAqLwo+ KwkJcmVnID0gUEVFSzMyKFBBTkVMX0RJU1BMQVlfQ1RSTCk7Cj4rCQlQT0tFMzIoUEFORUxfRElT UExBWV9DVFJMLAo+KwkJCQlyZWcmKH4oMyA8PCBQQU5FTF9ESVNQTEFZX0NUUkxfRk9STUFUX0xT QikpfAo+KwkJCQkoKHZhci0+Yml0c19wZXJfcGl4ZWwgPj4gNCkgPDwgUEFORUxfRElTUExBWV9D VFJMX0ZPUk1BVF9MU0IpKTsKPisJfSBlbHNlewo+KwkJLyogbm90IGltcGxlbWVudGVkIG5vdyAq Lwo+KwkJUE9LRTMyKENSVF9GQl9BRERSRVNTLCBjcnRjLT5vU2NyZWVuKTsKPisJCXJlZyA9IHZh ci0+eHJlcyAqICh2YXItPmJpdHNfcGVyX3BpeGVsID4+IDMpOwo+KwkJLyogY3J0Yy0+Y2hhbm5l bCBpcyBub3QgZXF1YWwgdG8gcGFyLT5pbmRleCBvbiBudW1lcmljLCBiZSBhd2FyZSBvZiB0aGF0 ICovCj4rCQlyZWcgPSBQQURESU5HKGNydGMtPmxpbmVfcGFkLCByZWcpOwo+KwkJUE9LRTMyKENS VF9GQl9XSURUSCwKPisJCQkJKHJlZyA8PCBDUlRfRkJfV0lEVEhfV0lEVEhfTFNCKXwKPisJCQkJ KGZpeC0+bGluZV9sZW5ndGggPDwgQ1JUX0ZCX1dJRFRIX09GRlNFVF9MU0IpKTsKPisKPisJCS8q IFNFVCBQSVhFTCBGT1JNQVQgKi8KPisJCXJlZyA9IFBFRUszMihDUlRfRElTUExBWV9DVFJMKTsK PisJCXJlZyB8PSAodmFyLT5iaXRzX3Blcl9waXhlbCA+PiA0KSA8PCBDUlRfRElTUExBWV9DVFJM X0ZPUk1BVF9MU0I7Cj4rCQlQT0tFMzIoQ1JUX0RJU1BMQVlfQ1RSTCwgcmVnKTsKPisJfQo+Kwo+ Kwo+K2V4aXQ6Cj4rCUxFQVZFKHJldCk7Cj4rfQo+Kwo+K3ZvaWQgaHdfc203NTBfY3J0Y19jbGVh cihzdHJ1Y3QgbHlueGZiX2NydGMgKmNydGMpCj4rewo+KwlFTlRFUigpOwo+KwlMRUFWRSgpOwo+ K30KPisKPitpbnQgaHdfc203NTBfc2V0Q29sUmVnKHN0cnVjdCBseW54ZmJfY3J0YyAqY3J0Yywg dXNob3J0IGluZGV4LAo+KwkJdXNob3J0IHJlZCwgdXNob3J0IGdyZWVuLCB1c2hvcnQgYmx1ZSkK Pit7Cj4rCXN0YXRpYyB1bnNpZ25lZCBpbnQgYWRkW10gPSB7UEFORUxfUEFMRVRURV9SQU0sIENS VF9QQUxFVFRFX1JBTX07Cj4rCVBPS0UzMihhZGRbY3J0Yy0+Y2hhbm5lbF0gKyBpbmRleCo0LCAo cmVkPDwxNil8KGdyZWVuPDw4KXxibHVlKTsKPisJcmV0dXJuIDA7Cj4rfQo+Kwo+K2ludCBod19z bTc1MGxlX3NldEJMQU5LKHN0cnVjdCBseW54ZmJfb3V0cHV0ICpvdXRwdXQsIGludCBibGFuaykK Pit7Cj4rCWludCBkcG1zLCBjcnRkYjsKPisJRU5URVIoKTsKPisJc3dpdGNoIChibGFuaykgewo+ KyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiwgNiwgMTApCj4rCWNh c2UgRkJfQkxBTktfVU5CTEFOSzoKPisjZWxzZQo+KwljYXNlIFZFU0FfTk9fQkxBTktJTkc6Cj4r I2VuZGlmCj4rCQlkcG1zID0gQ1JUX0RJU1BMQVlfQ1RSTF9EUE1TXzA7Cj4rCQljcnRkYiA9IENS VF9ESVNQTEFZX0NUUkxfQkxBTktfT0ZGOwo+KwkJYnJlYWs7Cj4rI2lmIExJTlVYX1ZFUlNJT05f Q09ERSA+PSBLRVJORUxfVkVSU0lPTigyLCA2LCAxMCkKPisJY2FzZSBGQl9CTEFOS19OT1JNQUw6 Cj4rCQlkcG1zID0gQ1JUX0RJU1BMQVlfQ1RSTF9EUE1TXzA7Cj4rCQljcnRkYiA9IENSVF9ESVNQ TEFZX0NUUkxfQkxBTktfT047Cj4rCQlicmVhazsKPisjZW5kaWYKPisjaWYgTElOVVhfVkVSU0lP Tl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDEwKQo+KwljYXNlIEZCX0JMQU5LX1ZTWU5D X1NVU1BFTkQ6Cj4rI2Vsc2UKPisJY2FzZSBWRVNBX1ZTWU5DX1NVU1BFTkQ6Cj4rI2VuZGlmCj4r CQlkcG1zID0gQ1JUX0RJU1BMQVlfQ1RSTF9EUE1TXzI7Cj4rCQljcnRkYiA9IENSVF9ESVNQTEFZ X0NUUkxfQkxBTktfT047Cj4rCQlicmVhazsKPisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtF Uk5FTF9WRVJTSU9OKDIsIDYsIDEwKQo+KwljYXNlIEZCX0JMQU5LX0hTWU5DX1NVU1BFTkQ6Cj4r I2Vsc2UKPisJY2FzZSBWRVNBX0hTWU5DX1NVU1BFTkQ6Cj4rI2VuZGlmCj4rCQlkcG1zID0gQ1JU X0RJU1BMQVlfQ1RSTF9EUE1TXzE7Cj4rCQljcnRkYiA9IENSVF9ESVNQTEFZX0NUUkxfQkxBTktf T047Cj4rCQlicmVhazsKPisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9O KDIsIDYsIDEwKQo+KwljYXNlIEZCX0JMQU5LX1BPV0VSRE9XTjoKPisjZWxzZQo+KwljYXNlIFZF U0FfUE9XRVJET1dOOgo+KyNlbmRpZgo+KwkJZHBtcyA9IENSVF9ESVNQTEFZX0NUUkxfRFBNU18z Owo+KwkJY3J0ZGIgPSBDUlRfRElTUExBWV9DVFJMX0JMQU5LX09OOwo+KwkJYnJlYWs7Cj4rCX0K PisKPisJaWYgKG91dHB1dC0+cGF0aHMgJiBzbTc1MF9jcnQpIHsKPisJCVBPS0UzMihDUlRfRElT UExBWV9DVFJMLCBQRUVLMzIoQ1JUX0RJU1BMQVlfQ1RSTCkmKH4oMyA8PCBDUlRfRElTUExBWV9D VFJMX0RQTVNfTFNCKSl8KGRwbXMgPDwgQ1JUX0RJU1BMQVlfQ1RSTF9EUE1TX0xTQikpOwo+KwkJ UE9LRTMyKENSVF9ESVNQTEFZX0NUUkwsIFBFRUszMihDUlRfRElTUExBWV9DVFJMKSYofigxIDw8 IENSVF9ESVNQTEFZX0NUUkxfQkxBTktfTFNCKSl8KGNydGRiIDw8IENSVF9ESVNQTEFZX0NUUkxf QkxBTktfTFNCKSk7Cj4rCX0KPisJTEVBVkUoMCk7Cj4rfQo+Kwo+K2ludCBod19zbTc1MF9zZXRC TEFOSyhzdHJ1Y3QgbHlueGZiX291dHB1dCAqb3V0cHV0LCBpbnQgYmxhbmspCj4rewo+Kwl1bnNp Z25lZCBpbnQgZHBtcywgcHBzLCBjcnRkYjsKPisJRU5URVIoKTsKPisJZHBtcyA9IHBwcyA9IGNy dGRiID0gMDsKPisKPisJc3dpdGNoIChibGFuaykgewo+KyNpZiBMSU5VWF9WRVJTSU9OX0NPREUg Pj0gS0VSTkVMX1ZFUlNJT04oMiwgNiwgMTApCj4rCWNhc2UgRkJfQkxBTktfVU5CTEFOSzoKPisj ZWxzZQo+KwljYXNlIFZFU0FfTk9fQkxBTktJTkc6Cj4rI2VuZGlmCj4rCQlpbmZfbXNnKCJmbGFn ID0gRkJfQkxBTktfVU5CTEFOSyBcbiIpOwo+KwkJZHBtcyA9IFNZU1RFTV9DVFJMX0RQTVNfVlBI UDsKPisJCXBwcyA9IFBBTkVMX0RJU1BMQVlfQ1RSTF9EQVRBX0VOQUJMRTsKPisJCWNydGRiID0g Q1JUX0RJU1BMQVlfQ1RSTF9CTEFOS19PRkY7Cj4rCQlicmVhazsKPisjaWYgTElOVVhfVkVSU0lP Tl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDEwKQo+KwljYXNlIEZCX0JMQU5LX05PUk1B TDoKPisJCWluZl9tc2coImZsYWcgPSBGQl9CTEFOS19OT1JNQUwgXG4iKTsKPisJCWRwbXMgPSBT WVNURU1fQ1RSTF9EUE1TX1ZQSFA7Cj4rCQlwcHMgPSBQQU5FTF9ESVNQTEFZX0NUUkxfREFUQV9E SVNBQkxFOwo+KwkJY3J0ZGIgPSBDUlRfRElTUExBWV9DVFJMX0JMQU5LX09OOwo+KwkJYnJlYWs7 Cj4rI2VuZGlmCj4rI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLCA2 LCAxMCkKPisJY2FzZSBGQl9CTEFOS19WU1lOQ19TVVNQRU5EOgo+KyNlbHNlCj4rCWNhc2UgVkVT QV9WU1lOQ19TVVNQRU5EOgo+KyNlbmRpZgo+KwkJZHBtcyA9IFNZU1RFTV9DVFJMX0RQTVNfVk5I UDsKPisJCXBwcyA9IFBBTkVMX0RJU1BMQVlfQ1RSTF9EQVRBX0RJU0FCTEU7Cj4rCQljcnRkYiA9 IENSVF9ESVNQTEFZX0NUUkxfQkxBTktfT047Cj4rCQlicmVhazsKPisjaWYgTElOVVhfVkVSU0lP Tl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDEwKQo+KwljYXNlIEZCX0JMQU5LX0hTWU5D X1NVU1BFTkQ6Cj4rI2Vsc2UKPisJY2FzZSBWRVNBX0hTWU5DX1NVU1BFTkQ6Cj4rI2VuZGlmCj4r CQlkcG1zID0gU1lTVEVNX0NUUkxfRFBNU19WUEhOOwo+KwkJcHBzID0gUEFORUxfRElTUExBWV9D VFJMX0RBVEFfRElTQUJMRTsKPisJCWNydGRiID0gQ1JUX0RJU1BMQVlfQ1RSTF9CTEFOS19PTjsK PisJCWJyZWFrOwo+KyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiwg NiwgMTApCj4rCWNhc2UgRkJfQkxBTktfUE9XRVJET1dOOgo+KyNlbHNlCj4rCWNhc2UgVkVTQV9Q T1dFUkRPV046Cj4rI2VuZGlmCj4rCQlkcG1zID0gU1lTVEVNX0NUUkxfRFBNU19WTkhOOwo+KwkJ cHBzID0gUEFORUxfRElTUExBWV9DVFJMX0RBVEFfRElTQUJMRTsKPisJCWNydGRiID0gQ1JUX0RJ U1BMQVlfQ1RSTF9CTEFOS19PTjsKPisJCWJyZWFrOwo+Kwl9Cj4rCj4rCWlmIChvdXRwdXQtPnBh dGhzICYgc203NTBfY3J0KSB7Cj4rCQlQT0tFMzIoU1lTVEVNX0NUUkwsIFBFRUszMihTWVNURU1f Q1RSTCkmKH4oMyA8PCBTWVNURU1fQ1RSTF9EUE1TX0xTQikpCj4rCQkJCXwoZHBtcyA8PCBTWVNU RU1fQ1RSTF9EUE1TX0xTQikpOwo+KwkJUE9LRTMyKENSVF9ESVNQTEFZX0NUUkwsIFBFRUszMihD UlRfRElTUExBWV9DVFJMKSYofigxIDw8IENSVF9ESVNQTEFZX0NUUkxfQkxBTktfTFNCKSkKPisJ CQkJfChjcnRkYiA8PCBDUlRfRElTUExBWV9DVFJMX0JMQU5LX0xTQikpOwo+Kwl9Cj4rCj4rCWlm IChvdXRwdXQtPnBhdGhzICYgc203NTBfcGFuZWwpIHsKPisJCVBPS0UzMihQQU5FTF9ESVNQTEFZ X0NUUkwsIFBFRUszMihQQU5FTF9ESVNQTEFZX0NUUkwpJih+KDEgPDwgUEFORUxfRElTUExBWV9D VFJMX0RBVEFfTFNCKSkKPisJCQkJfChwcHMgPDwgUEFORUxfRElTUExBWV9DVFJMX0RBVEFfTFNC KSk7Cj4rCX0KPisKPisJTEVBVkUoMCk7Cj4rfQo+Kwo+Kwo+K3ZvaWQgaHdfc203NTBfaW5pdEFj Y2VsKHN0cnVjdCBseW54X3NoYXJlICpzaGFyZSkKPit7Cj4rCXUzMiByZWc7Cj4rCWVuYWJsZTJE RW5naW5lKDEpOwo+Kwo+KwlpZiAoZ2V0Q2hpcFR5cGUoKSA9PSBTTTc1MExFKSB7Cj4rCQlyZWcg PSBQRUVLMzIoREVfU1RBVEUxKTsKPisJCXJlZyB8PSAxIDw8IERFX1NUQVRFMV9ERV9BQk9SVF9M U0I7Cj4rCQlQT0tFMzIoREVfU1RBVEUxLCByZWcpOwo+Kwo+KwkJcmVnID0gUEVFSzMyKERFX1NU QVRFMSk7Cj4rCQlyZWcgJj0gfigxIDw8IERFX1NUQVRFMV9ERV9BQk9SVF9MU0IpOwo+KwkJUE9L RTMyKERFX1NUQVRFMSwgcmVnKTsKPisKPisJfSBlbHNlewo+KwkJLyogZW5naW5lIHJlc2V0ICov Cj4rCQlyZWcgPSBQRUVLMzIoU1lTVEVNX0NUUkwpOwo+KwkJcmVnIHw9IDEgPDwgU1lTVEVNX0NU UkxfREVfQUJPUlRfTFNCOwo+KwkJUE9LRTMyKFNZU1RFTV9DVFJMLCByZWcpOwo+Kwo+KwkJcmVn ID0gUEVFSzMyKFNZU1RFTV9DVFJMKTsKPisJCXJlZyAmPSB+KDEgPDwgU1lTVEVNX0NUUkxfREVf QUJPUlRfTFNCKTsKPisJCVBPS0UzMihTWVNURU1fQ1RSTCwgcmVnKTsKPisJfQo+Kwo+KwkvKiBj YWxsIDJkIGluaXQgKi8KPisJc2hhcmUtPmFjY2VsLmRlX2luaXQoJnNoYXJlLT5hY2NlbCk7Cj4r fQo+Kwo+K2ludCBod19zbTc1MGxlX2RlV2FpdCgpCj4rewo+KwlpbnQgaSA9IDB4MTAwMDAwMDA7 Cj4rCXdoaWxlIChpLS0pIHsKPisJCXVuc2lnbmVkIGludCBkd1ZhbCA9IFBFRUszMihERV9TVEFU RTIpOwo+KwkJaWYgKCgoMSYoZHdWYWwgPj4gREVfU1RBVEUyX0RFX1NUQVRVU19MU0IpKSA9PSBE RV9TVEFURTJfREVfU1RBVFVTX0lETEUpICYmCj4rCQkJCSgoMSYoZHdWYWwgPj4gREVfU1RBVEUy X0RFX0ZJRk9fTFNCKSkgID09IERFX1NUQVRFMl9ERV9GSUZPX0VNUFRZKSAmJgo+KwkJCQkoKDEm KGR3VmFsID4+IERFX1NUQVRFMl9ERV9NRU1fRklGT19MU0IpKSA9PSBERV9TVEFURTJfREVfTUVN X0ZJRk9fRU1QVFkpKSB7Cj4rCQkJCXJldHVybiAwOwo+KwkJCX0KPisJfQo+KwkvKiB0aW1lb3V0 IGVycm9yICovCj4rCXJldHVybiAtMTsKPit9Cj4rCj4rCj4raW50IGh3X3NtNzUwX2RlV2FpdCgp Cj4rewo+KwlpbnQgaSA9IDB4MTAwMDAwMDA7Cj4rCXdoaWxlIChpLS0pIHsKPisJCXVuc2lnbmVk IGludCBkd1ZhbCA9IFBFRUszMihTWVNURU1fQ1RSTCk7Cj4rCQlpZiAoKCgxJihkd1ZhbCA+PiBT WVNURU1fQ1RSTF9ERV9TVEFUVVNfTFNCKSkgPT0gU1lTVEVNX0NUUkxfREVfU1RBVFVTX0lETEUp ICYmCj4rCQkJCSgoMSYoZHdWYWwgPj4gU1lTVEVNX0NUUkxfREVfRklGT19MU0IpKSAgPT0gU1lT VEVNX0NUUkxfREVfRklGT19FTVBUWSkgJiYKPisJCQkJKCgxJihkd1ZhbCA+PiBTWVNURU1fQ1RS TF9ERV9NRU1fRklGT19MU0IpKSA9PSBTWVNURU1fQ1RSTF9ERV9NRU1fRklGT19FTVBUWSkpIHsK PisJCQkJcmV0dXJuIDA7Cj4rCQkJfQo+Kwl9Cj4rCS8qIHRpbWVvdXQgZXJyb3IgKi8KPisJcmV0 dXJuIC0xOwo+K30KPisKPitpbnQgaHdfc203NTBfcGFuX2Rpc3BsYXkoc3RydWN0IGx5bnhmYl9j cnRjICpjcnRjLAo+KwkJY29uc3Qgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCj4rCQlj b25zdCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKPit7Cj4rCXVpbnQzMl90IHRvdGFsOwo+KwlpZiAo KHZhci0+eG9mZnNldCArIHZhci0+eHJlcyA+IHZhci0+eHJlc192aXJ0dWFsKSB8fAo+KwkJCSh2 YXItPnlvZmZzZXQgKyB2YXItPnlyZXMgPiB2YXItPnlyZXNfdmlydHVhbCkpIHsKPisJCXJldHVy biAtRUlOVkFMOwo+Kwl9Cj4rCj4rCXRvdGFsID0gdmFyLT55b2Zmc2V0ICogaW5mby0+Zml4Lmxp bmVfbGVuZ3RoICsKPisJCSgodmFyLT54b2Zmc2V0ICogdmFyLT5iaXRzX3Blcl9waXhlbCkgPj4g Myk7Cj4rCXRvdGFsICs9IGNydGMtPm9TY3JlZW47Cj4rCWlmIChjcnRjLT5jaGFubmVsID09IHNt NzUwX3ByaW1hcnkpIHsKPisJCVBPS0UzMihQQU5FTF9GQl9BRERSRVNTLAo+KwkJCQlQRUVLMzIo UEFORUxfRkJfQUREUkVTUykmCj4rCQkJCSh+KDB4M2ZmZmZmZiA8PCBQQU5FTF9GQl9BRERSRVNT X0FERFJFU1NfTFNCKSl8Cj4rCQkJCSh0b3RhbCA8PCBQQU5FTF9GQl9BRERSRVNTX0FERFJFU1Nf TFNCKSk7Cj4rCX0gZWxzZXsKPisJCVBPS0UzMihDUlRfRkJfQUREUkVTUywKPisJCQkJUEVFSzMy KENSVF9GQl9BRERSRVNTKSYKPisJCQkJKH4oMHgzZmZmZmZmIDw8IENSVF9GQl9BRERSRVNTX0FE RFJFU1NfTFNCKSl8Cj4rCQkJCSh0b3RhbCA8PCBDUlRfRkJfQUREUkVTU19BRERSRVNTX0xTQikp Owo+Kwl9Cj4rCXJldHVybiAwOwo+K30KPisKPmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2x5 bnhmYi9seW54X2h3NzUwLmggYi9kcml2ZXJzL3ZpZGVvL2x5bnhmYi9seW54X2h3NzUwLmgKPm5l dyBmaWxlIG1vZGUgMTAwNjQ0Cj5pbmRleCAwMDAwMDAwLi45ZjkxYWQxCj4tLS0gL2Rldi9udWxs Cj4rKysgYi9kcml2ZXJzL3ZpZGVvL2x5bnhmYi9seW54X2h3NzUwLmgKPkBAIC0wLDAgKzEsMTIw IEBACj4rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioKPisqQ29weXJpZ2h0IChjKSAyMDEyIGJ5IFNpbGljb24gTW90aW9u LCBJbmMuIChTTUkpCj4rKlBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hh cmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKPisqb2YgdGhpcyBzb2Z0d2FyZSBh bmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRl YWwKPisqaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRo b3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwo+Kyp1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2Us IHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcwo+Kypv ZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2Fy ZSBpcyBmdXJuaXNoZWQgdG8KPisqZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25k aXRpb25zOgo+KyoKPisqVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQg V0FSUkFOVFkgT0YgQU5ZIEtJTkQsCj4rKkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJV VCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUwo+KypPRiBNRVJDSEFOVEFCSUxJVFksIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAo+KypOT05JTkZSSU5HRU1FTlQuICBJ TiBOTyBFVkVOVCBTSEFMTCBNaWxsLkNoZW4gYW5kIE1vbmsuTGl1IE9SIENPUFlSSUdIVAo+KypI T0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElU WSwKPisqV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNF LCBBUklTSU5HCj4rKkZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRX QVJFIE9SIFRIRSBVU0UgT1IKPisqT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgo+Kyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCj4rI2lmbmRlZiBMWU5YX0hXNzUwX0hfXwo+KyNkZWZpbmUgTFlOWF9IVzc1MF9I X18KPisKPisKPisjZGVmaW5lIERFRkFVTFRfU003NTBfQ0hJUF9DTE9DSyAJCTI5MAo+KyNkZWZp bmUgREVGQVVMVF9TTTc1MExFX0NISVBfQ0xPQ0sgIAkzMzMKPisjaWZuZGVmIFNNNzUwTEVfUkVW SVNJT05fSUQKPisjZGVmaW5lIFNNNzUwTEVfUkVWSVNJT05fSUQgKCh1bnNpZ25lZCBjaGFyKTB4 ZmUpCj4rI2VuZGlmCj4rCj4rCj4rCj4rZW51bSBzbTc1MF9wbmx0eXBlewo+Kwo+KwlzbTc1MF8y NFRGVCA9IDAsIC8qIDI0Yml0IHRmdCAqLwo+Kwo+KwlzbTc1MF9kdWFsVEZUID0gMiwgLyogZHVh bCAxOCBiaXQgdGZ0ICovCj4rCj4rCXNtNzUwX2RvdWJsZVRGVCA9IDEsIC8qIDM2IGJpdCBkb3Vi bGUgcGl4ZWwgdGZ0ICovCj4rfTsKPisKPisvKiB2Z2EgY2hhbm5lbCBpcyBub3QgY29uY2VybmVk ICAqLwo+K2VudW0gc203NTBfZGF0YWZsb3d7Cj4rCXNtNzUwX3NpbXVsX3ByaSwgLyogcHJpbWFy eSA9PiBhbGwgaGVhZCAqLwo+Kwo+KwlzbTc1MF9zaW11bF9zZWMsIC8qIHNlY29uZGFyeSA9PiBh bGwgaGVhZCAqLwo+Kwo+KwlzbTc1MF9kdWFsX25vcm1hbCwgLyogCXByaW1hcnkgPT4gcGFuZWwg aGVhZCBhbmQgc2Vjb25kYXJ5ID0+IGNydCAqLwo+Kwo+KwlzbTc1MF9kdWFsX3N3YXAsIC8qIAlw cmltYXJ5ID0+IGNydCBoZWFkIGFuZCBzZWNvbmRhcnkgPT4gcGFuZWwgKi8KPit9Owo+Kwo+Kwo+ K2VudW0gc203NTBfY2hhbm5lbHsKPisJc203NTBfcHJpbWFyeSA9IDAsCj4rCS8qIGVudW0gdmFs dWUgZXF1YWwgdG8gdGhlIHJlZ2lzdGVyIGZpbGVkIGRhdGEgKi8KPisJc203NTBfc2Vjb25kYXJ5 ID0gMSwKPit9Owo+Kwo+K2VudW0gc203NTBfcGF0aHsKPisJc203NTBfcGFuZWwgPSAxLAo+Kwlz bTc1MF9jcnQgPSAyLAo+KwlzbTc1MF9wbmMgPSAzLCAvKiBwYW5lbCBhbmQgY3J0ICovCj4rfTsK PisKPitzdHJ1Y3QgaW5pdF9zdGF0dXN7Cj4rCXVzaG9ydCBwb3dlck1vZGU7Cj4rCS8qIGJlbG93 IHRocmVlIGNsb2NrcyBhcmUgaW4gdW5pdCBvZiBNSFoqLwo+Kwl1c2hvcnQgY2hpcF9jbGs7Cj4r CXVzaG9ydCBtZW1fY2xrOwo+Kwl1c2hvcnQgbWFzdGVyX2NsazsKPisJdXNob3J0IHNldEFsbEVu Z09mZjsKPisJdXNob3J0IHJlc2V0TWVtb3J5Owo+K307Cj4rCj4rc3RydWN0IHNtNzUwX3N0YXRl ewo+KwlzdHJ1Y3QgaW5pdF9zdGF0dXMgaW5pdFBhcm07Cj4rCWVudW0gc203NTBfcG5sdHlwZSBw bmx0eXBlOwo+KwllbnVtIHNtNzUwX2RhdGFmbG93IGRhdGFmbG93Owo+KwlpbnQgbm9jcnQ7Cj4r CWludCB4TENEOwo+KwlpbnQgeUxDRDsKPit9Owo+Kwo+Ky8qIAlzbTc1MF9zaGFyZSBzdGFuZHMg Zm9yIGEgcHJlc2VudGF0aW9uIG9mIHR3byBmcmFtZSBidWZmZXIKPisJdGhhdCB1c2Ugb25lIHNt NzUwIGFkYXB0b3IsIGl0IGlzIHNpbWlsaWFyIHRvIHRoZSBzdXBlciBjbGFzcyBvZiBseW54X3No YXJlCj4rCWluIEMrKwo+KyovCj4rCj4rc3RydWN0IHNtNzUwX3NoYXJlewo+KwkvKiBpdCdzIGJl dHRlciB0byBwdXQgbHlueF9zaGFyZSBzdHJ1Y3QgdG8gdGhlIGZpcnN0IHBsYWNlIG9mIHNtNzUw X3NoYXJlICovCj4rCXN0cnVjdCBseW54X3NoYXJlIHNoYXJlOwo+KwlzdHJ1Y3Qgc203NTBfc3Rh dGUgc3RhdGU7Cj4rCWludCBod0N1cnNvcjsKPisJLyogCTA6IG5vIGhhcmR3YXJlIGN1cnNvcgo+ KwkJMTogcHJpbWFyeSBjcnRjIGh3IGN1cnNvciBlbmFibGVkLAo+KwkJMjogc2Vjb25kYXJ5IGNy dGMgaHcgY3Vyc29yIGVuYWJsZWQKPisJCTM6IGJvdGggY3RyYyBodyBjdXJzb3IgZW5hYmxlZAo+ KwkqLwo+K307Cj4rCj4raW50IGh3X3NtNzUwX21hcChzdHJ1Y3QgbHlueF9zaGFyZSAqc2hhcmUs IHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKPitpbnQgaHdfc203NTBfaW5pdGh3KHN0cnVjdCBseW54 X3NoYXJlICosIHN0cnVjdCBwY2lfZGV2ICopOwo+K3ZvaWQgaHdfc203NTBfaW5pdEFjY2VsKHN0 cnVjdCBseW54X3NoYXJlICopOwo+K2ludCBod19zbTc1MF9kZVdhaXQodm9pZCk7Cj4raW50IGh3 X3NtNzUwbGVfZGVXYWl0KHZvaWQpOwo+Kwo+K3Jlc291cmNlX3NpemVfdCBod19zbTc1MF9nZXRW TVNpemUoc3RydWN0IGx5bnhfc2hhcmUgKik7Cj4raW50IGh3X3NtNzUwX291dHB1dF9jaGVja01v ZGUoc3RydWN0IGx5bnhmYl9vdXRwdXQgKiwgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICopOwo+ K2ludCBod19zbTc1MF9vdXRwdXRfc2V0TW9kZShzdHJ1Y3QgbHlueGZiX291dHB1dCAqLCBzdHJ1 Y3QgZmJfdmFyX3NjcmVlbmluZm8gKiwgc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvICopOwo+K2lu dCBod19zbTc1MF9jcnRjX2NoZWNrTW9kZShzdHJ1Y3QgbHlueGZiX2NydGMgKiwgc3RydWN0IGZi X3Zhcl9zY3JlZW5pbmZvICopOwo+K2ludCBod19zbTc1MF9jcnRjX3NldE1vZGUoc3RydWN0IGx5 bnhmYl9jcnRjICosIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqLCBzdHJ1Y3QgZmJfZml4X3Nj cmVlbmluZm8gKik7Cj4raW50IGh3X3NtNzUwX3NldENvbFJlZyhzdHJ1Y3QgbHlueGZiX2NydGMg KiwgdXNob3J0LCB1c2hvcnQsIHVzaG9ydCwgdXNob3J0KTsKPitpbnQgaHdfc203NTBfc2V0QkxB Tksoc3RydWN0IGx5bnhmYl9vdXRwdXQgKiwgaW50KTsKPitpbnQgaHdfc203NTBsZV9zZXRCTEFO SyhzdHJ1Y3QgbHlueGZiX291dHB1dCAqLCBpbnQpOwo+K3ZvaWQgaHdfc203NTBfY3J0Y19jbGVh cihzdHJ1Y3QgbHlueGZiX2NydGMgKik7Cj4rdm9pZCBod19zbTc1MF9vdXRwdXRfY2xlYXIoc3Ry dWN0IGx5bnhmYl9vdXRwdXQgKik7Cj4raW50IGh3X3NtNzUwX3Bhbl9kaXNwbGF5KHN0cnVjdCBs eW54ZmJfY3J0YyAqY3J0YywKPisJY29uc3Qgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIs Cj4rCWNvbnN0IHN0cnVjdCBmYl9pbmZvICppbmZvKTsKPisKPisjZW5kaWYKPmRpZmYgLS1naXQg YS9kcml2ZXJzL3ZpZGVvL2x5bnhmYi9tb2RlZGIuYyBiL2RyaXZlcnMvdmlkZW8vbHlueGZiL21v ZGVkYi5jCj5uZXcgZmlsZSBtb2RlIDEwMDY0NAo+aW5kZXggMDAwMDAwMC4uNTBmYzhiOQo+LS0t IC9kZXYvbnVsbAo+KysrIGIvZHJpdmVycy92aWRlby9seW54ZmIvbW9kZWRiLmMKPkBAIC0wLDAg KzEsMjM4IEBACj4rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioKPisqQ29weXJpZ2h0IChjKSAyMDEyIGJ5IFNpbGljb24g TW90aW9uLCBJbmMuIChTTUkpCj4rKlBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUg b2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKPisqb2YgdGhpcyBzb2Z0 d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiks IHRvIGRlYWwKPisqaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGlu ZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwo+Kyp1c2UsIGNvcHksIG1vZGlmeSwg bWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGll cwo+KypvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBT b2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8KPisqZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zOgo+KyoKPisqVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJ VEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCj4rKkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVE SU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUwo+KypPRiBNRVJDSEFOVEFCSUxJ VFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAo+KypOT05JTkZSSU5HRU1F TlQuICBJTiBOTyBFVkVOVCBTSEFMTCBNaWxsLkNoZW4gYW5kIE1vbmsuTGl1IE9SIENPUFlSSUdI VAo+KypIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJ QUJJTElUWSwKPisqV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RI RVJXSVNFLCBBUklTSU5HCj4rKkZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhF IFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKPisqT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJF Lgo+KyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCj4rc3RhdGljIGNvbnN0IHN0cnVjdCBmYl92aWRlb21vZGUgbW9kZWRi MltdID0gewo+KyAgICB7Cj4rCS8qIDY0MHg0MDAgQCA3MCBIeiwgMzEuNSBrSHogaHN5bmMgKi8K PisJTlVMTCwgNzAsIDY0MCwgNDAwLCAzOTcyMSwgNDAsIDI0LCAzOSwgOSwgOTYsIDIsCj4rCTAs IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQKPisgICAgfSwgewo+KwkvKiA2NDB4NDgwIEAgNjAgSHos IDMxLjUga0h6IGhzeW5jICovCj4rCU5VTEwsIDYwLCA2NDAsIDQ4MCwgMzk3MjEsIDQwLCAyNCwg MzIsIDExLCA5NiwgMiwKPisJMCwgRkJfVk1PREVfTk9OSU5URVJMQUNFRAo+KyAgICB9LCB7Cj4r CS8qIDgwMHg2MDAgQCA1NiBIeiwgMzUuMTUga0h6IGhzeW5jICovCj4rCU5VTEwsIDU2LCA4MDAs IDYwMCwgMjc3NzcsIDEyOCwgMjQsIDIyLCAxLCA3MiwgMiwKPisJMCwgRkJfVk1PREVfTk9OSU5U RVJMQUNFRAo+KyAgICB9LCB7Cj4rCS8qIDEwMjR4NzY4IEAgODcgSHogaW50ZXJsYWNlZCwgMzUu NSBrSHogaHN5bmMgKi8KPisJTlVMTCwgODcsIDEwMjQsIDc2OCwgMjIyNzEsIDU2LCAyNCwgMzMs IDgsIDE2MCwgOCwKPisJMCwgRkJfVk1PREVfSU5URVJMQUNFRAo+KyAgICB9LCB7Cj4rCS8qIDY0 MHg0MDAgQCA4NSBIeiwgMzcuODYga0h6IGhzeW5jICovCj4rCU5VTEwsIDg1LCA2NDAsIDQwMCwg MzE3NDYsIDk2LCAzMiwgNDEsIDEsIDY0LCAzLAo+KwlGQl9TWU5DX1ZFUlRfSElHSF9BQ1QsIEZC X1ZNT0RFX05PTklOVEVSTEFDRUQKPisgICAgfSwgewo+KwkvKiA2NDB4NDgwIEAgNzIgSHosIDM2 LjUga0h6IGhzeW5jICovCj4rCU5VTEwsIDcyLCA2NDAsIDQ4MCwgMzE3NDYsIDE0NCwgNDAsIDMw LCA4LCA0MCwgMywKPisJMCwgRkJfVk1PREVfTk9OSU5URVJMQUNFRAo+KyAgICB9LCB7Cj4rCS8q IDY0MHg0ODAgQCA3NSBIeiwgMzcuNTAga0h6IGhzeW5jICovCj4rCU5VTEwsIDc1LCA2NDAsIDQ4 MCwgMzE3NDYsIDEyMCwgMTYsIDE2LCAxLCA2NCwgMywKPisJMCwgRkJfVk1PREVfTk9OSU5URVJM QUNFRAo+KyAgICB9LCB7Cj4rCS8qIDgwMHg2MDAgQCA2MCBIeiwgMzcuOCBrSHogaHN5bmMgKi8K PisJTlVMTCwgNjAsIDgwMCwgNjAwLCAyNTAwMCwgODgsIDQwLCAyMywgMSwgMTI4LCA0LAo+KwlG Ql9TWU5DX0hPUl9ISUdIX0FDVHxGQl9TWU5DX1ZFUlRfSElHSF9BQ1QsIEZCX1ZNT0RFX05PTklO VEVSTEFDRUQKPisgICAgfSwgewo+KwkvKiA2NDB4NDgwIEAgODUgSHosIDQzLjI3IGtIeiBoc3lu YyAqLwo+KwlOVUxMLCA4NSwgNjQwLCA0ODAsIDI3Nzc3LCA4MCwgNTYsIDI1LCAxLCA1NiwgMywK PisJMCwgRkJfVk1PREVfTk9OSU5URVJMQUNFRAo+KyAgICB9LCB7Cj4rCS8qIDExNTJ4ODY0IEAg ODkgSHogaW50ZXJsYWNlZCwgNDQga0h6IGhzeW5jICovCj4rCU5VTEwsIDY5LCAxMTUyLCA4NjQs IDE1Mzg0LCA5NiwgMTYsIDExMCwgMSwgMjE2LCAxMCwKPisJMCwgRkJfVk1PREVfSU5URVJMQUNF RAo+KyAgICB9LCB7Cj4rCS8qIDgwMHg2MDAgQCA3MiBIeiwgNDguMCBrSHogaHN5bmMgKi8KPisJ TlVMTCwgNzIsIDgwMCwgNjAwLCAyMDAwMCwgNjQsIDU2LCAyMywgMzcsIDEyMCwgNiwKPisJRkJf U1lOQ19IT1JfSElHSF9BQ1R8RkJfU1lOQ19WRVJUX0hJR0hfQUNULCBGQl9WTU9ERV9OT05JTlRF UkxBQ0VECj4rICAgIH0sIHsKPisJLyogMTAyNHg3NjggQCA2MCBIeiwgNDguNCBrSHogaHN5bmMg Ki8KPisJTlVMTCwgNjAsIDEwMjQsIDc2OCwgMTUzODQsIDE2OCwgOCwgMjksIDMsIDE0NCwgNiwK PisJMCwgRkJfVk1PREVfTk9OSU5URVJMQUNFRAo+KyAgICB9LCB7Cj4rCS8qIDY0MHg0ODAgQCAx MDAgSHosIDUzLjAxIGtIeiBoc3luYyAqLwo+KwlOVUxMLCAxMDAsIDY0MCwgNDgwLCAyMTgzNCwg OTYsIDMyLCAzNiwgOCwgOTYsIDYsCj4rCTAsIEZCX1ZNT0RFX05PTklOVEVSTEFDRUQKPisgICAg fSwgewo+KwkvKiAxMTUyeDg2NCBAIDYwIEh6LCA1My41IGtIeiBoc3luYyAqLwo+KwlOVUxMLCA2 MCwgMTE1MiwgODY0LCAxMTEyMywgMjA4LCA2NCwgMTYsIDQsIDI1NiwgOCwKPisJMCwgRkJfVk1P REVfTk9OSU5URVJMQUNFRAo+KyAgICB9LCB7Cj4rCS8qIDgwMHg2MDAgQCA4NSBIeiwgNTUuODQg a0h6IGhzeW5jICovCj4rCU5VTEwsIDg1LCA4MDAsIDYwMCwgMTY0NjAsIDE2MCwgNjQsIDM2LCAx NiwgNjQsIDUsCj4rCTAsIEZCX1ZNT0RFX05PTklOVEVSTEFDRUQKPisgICAgfSwgewo+KwkvKiAx MDI0eDc2OCBAIDcwIEh6LCA1Ni41IGtIeiBoc3luYyAqLwo+KwlOVUxMLCA3MCwgMTAyNCwgNzY4 LCAxMzMzMywgMTQ0LCAyNCwgMjksIDMsIDEzNiwgNiwKPisJMCwgRkJfVk1PREVfTk9OSU5URVJM QUNFRAo+KyAgICB9LCB7Cj4rCS8qICAxMjgweDk2MC02MCBWRVNBICovCj4rCU5VTEwsIDYwLCAx MjgwLCA5NjAsIDkyNTksIDMxMiwgOTYsIDM2LCAxLCAxMTIsIDMsCj4rCUZCX1NZTkNfSE9SX0hJ R0hfQUNUIHwgRkJfU1lOQ19WRVJUX0hJR0hfQUNULCAgRkJfVk1PREVfTk9OSU5URVJMQUNFRCwg RkJfTU9ERV9JU19WRVNBCj4rICAgIH0sIHsKPisJLyogIDEyODB4MTAyNC02MCBWRVNBICovCj4r CU5VTEwsIDYwLCAxMjgwLCAxMDI0LCA5MjU5LCAyNDgsIDQ4LCAzOCwgMSwgMTEyLCAzLAo+KwlG Ql9TWU5DX0hPUl9ISUdIX0FDVCB8IEZCX1NZTkNfVkVSVF9ISUdIX0FDVCwgRkJfVk1PREVfTk9O SU5URVJMQUNFRCwgRkJfTU9ERV9JU19WRVNBCj4rICAgIH0sIHsKPisJLyogMTI4MHgxMDI0IEAg ODcgSHogaW50ZXJsYWNlZCwgNTEga0h6IGhzeW5jICovCj4rCU5VTEwsIDg3LCAxMjgwLCAxMDI0 LCAxMjUwMCwgNTYsIDE2LCAxMjgsIDEsIDIxNiwgMTIsCj4rCTAsIEZCX1ZNT0RFX0lOVEVSTEFD RUQKPisgICAgfSwgewo+KwkvKiA4MDB4NjAwIEAgMTAwIEh6LCA2NC4wMiBrSHogaHN5bmMgKi8K PisJTlVMTCwgMTAwLCA4MDAsIDYwMCwgMTQzNTcsIDE2MCwgNjQsIDMwLCA0LCA2NCwgNiwKPisJ MCwgRkJfVk1PREVfTk9OSU5URVJMQUNFRAo+KyAgICB9LCB7Cj4rCS8qIDEwMjR4NzY4IEAgNzYg SHosIDYyLjUga0h6IGhzeW5jICovCj4rCU5VTEwsIDc2LCAxMDI0LCA3NjgsIDExNzY0LCAyMDgs IDgsIDM2LCAxNiwgMTIwLCAzLAo+KwkwLCBGQl9WTU9ERV9OT05JTlRFUkxBQ0VECj4rICAgIH0s IHsKPisJLyogMTE1Mng4NjQgQCA3MCBIeiwgNjIuNCBrSHogaHN5bmMgKi8KPisJTlVMTCwgNzAs IDExNTIsIDg2NCwgMTA4NjksIDEwNiwgNTYsIDIwLCAxLCAxNjAsIDEwLAo+KwkwLCBGQl9WTU9E RV9OT05JTlRFUkxBQ0VECj4rICAgIH0sIHsKPisJLyogMTI4MHgxMDI0IEAgNjEgSHosIDY0LjIg a0h6IGhzeW5jICovCj4rCU5VTEwsIDYxLCAxMjgwLCAxMDI0LCA5MDkwLCAyMDAsIDQ4LCAyNiwg MSwgMTg0LCAzLAo+KwkwLCBGQl9WTU9ERV9OT05JTlRFUkxBQ0VECj4rICAgIH0sIHsKPisJLyog MTQwMHgxMDUwIEAgNjBIeiwgNjMuOSBrSHogaHN5bmMgKi8KPisJTlVMTCwgNjgsIDE0MDAsIDEw NTAsIDkyNTksIDEzNiwgNDAsIDEzLCAxLCAxMTIsIDMsCj4rCTAsIEZCX1ZNT0RFX05PTklOVEVS TEFDRUQKPisgICAgfSwgewo+KwkvKiAxNDAweDEwNTAgQCA3NSwxMDcgSHosIDgyLDM5MiBrSHog K2hzeW5jICt2c3luYyovCj4rCU5VTEwsIDc1LCAxNDAwLCAxMDUwLCA5MjcxLCAxMjAsIDU2LCAx MywgMCwgMTEyLCAzLAo+KwlGQl9TWU5DX0hPUl9ISUdIX0FDVHxGQl9TWU5DX1ZFUlRfSElHSF9B Q1QsIEZCX1ZNT0RFX05PTklOVEVSTEFDRUQKPisgICAgfSwgewo+KwkvKiAxNDAweDEwNTAgQCA2 MCBIeiwgPyBrSHogK2hzeW5jICt2c3luYyovCj4rCU5VTEwsIDYwLCAxNDAwLCAxMDUwLCA5MjU5 LCAxMjgsIDQwLCAxMiwgMCwgMTEyLCAzLAo+KwlGQl9TWU5DX0hPUl9ISUdIX0FDVHxGQl9TWU5D X1ZFUlRfSElHSF9BQ1QsIEZCX1ZNT0RFX05PTklOVEVSTEFDRUQKPisgICAgfSwgewo+KwkvKiAx MDI0eDc2OCBAIDg1IEh6LCA3MC4yNCBrSHogaHN5bmMgKi8KPisJTlVMTCwgODUsIDEwMjQsIDc2 OCwgMTAxMTEsIDE5MiwgMzIsIDM0LCAxNCwgMTYwLCA2LAo+KwkwLCBGQl9WTU9ERV9OT05JTlRF UkxBQ0VECj4rICAgIH0sIHsKPisJLyogMTE1Mng4NjQgQCA3OCBIeiwgNzAuOCBrSHogaHN5bmMg Ki8KPisJTlVMTCwgNzgsIDExNTIsIDg2NCwgOTA5MCwgMjI4LCA4OCwgMzIsIDAsIDg0LCAxMiwK PisJMCwgRkJfVk1PREVfTk9OSU5URVJMQUNFRAo+KyAgICB9LCB7Cj4rCS8qIDEyODB4MTAyNCBA IDcwIEh6LCA3NC41OSBrSHogaHN5bmMgKi8KPisJTlVMTCwgNzAsIDEyODAsIDEwMjQsIDc5MDUs IDIyNCwgMzIsIDI4LCA4LCAxNjAsIDgsCj4rCTAsIEZCX1ZNT0RFX05PTklOVEVSTEFDRUQKPisg ICAgfSwgewo+KwkvKiAxNjAweDEyMDAgQCA2MEh6LCA3NS4wMCBrSHogaHN5bmMgKi8KPisJTlVM TCwgNjAsIDE2MDAsIDEyMDAsIDYxNzIsIDMwNCwgNjQsIDQ2LCAxLCAxOTIsIDMsCj4rCUZCX1NZ TkNfSE9SX0hJR0hfQUNUfEZCX1NZTkNfVkVSVF9ISUdIX0FDVCwgRkJfVk1PREVfTk9OSU5URVJM QUNFRAo+KyAgICB9LCB7Cj4rCS8qIDExNTJ4ODY0IEAgODQgSHosIDc2LjAga0h6IGhzeW5jICov Cj4rCU5VTEwsIDg0LCAxMTUyLCA4NjQsIDc0MDcsIDE4NCwgMzEyLCAzMiwgMCwgMTI4LCAxMiwK PisJMCwgRkJfVk1PREVfTk9OSU5URVJMQUNFRAo+KyAgICB9LCB7Cj4rCS8qIDEyODB4MTAyNCBA IDc0IEh6LCA3OC44NSBrSHogaHN5bmMgKi8KPisJTlVMTCwgNzQsIDEyODAsIDEwMjQsIDc0MDcs IDI1NiwgMzIsIDM0LCAzLCAxNDQsIDMsCj4rCTAsIEZCX1ZNT0RFX05PTklOVEVSTEFDRUQKPisg ICAgfSwgewo+KwkvKiAxMDI0eDc2OCBAIDEwMEh6LCA4MC4yMSBrSHogaHN5bmMgKi8KPisJTlVM TCwgMTAwLCAxMDI0LCA3NjgsIDg2NTgsIDE5MiwgMzIsIDIxLCAzLCAxOTIsIDEwLAo+KwkwLCBG Ql9WTU9ERV9OT05JTlRFUkxBQ0VECj4rICAgIH0sIHsKPisJLyogMTI4MHgxMDI0IEAgNzYgSHos IDgxLjEzIGtIeiBoc3luYyAqLwo+KwlOVUxMLCA3NiwgMTI4MCwgMTAyNCwgNzQwNywgMjQ4LCAz MiwgMzQsIDMsIDEwNCwgMywKPisJMCwgRkJfVk1PREVfTk9OSU5URVJMQUNFRAo+KyAgICB9LCB7 Cj4rCS8qIDE2MDB4MTIwMCBAIDcwIEh6LCA4Ny41MCBrSHogaHN5bmMgKi8KPisJTlVMTCwgNzAs IDE2MDAsIDEyMDAsIDUyOTEsIDMwNCwgNjQsIDQ2LCAxLCAxOTIsIDMsCj4rCTAsIEZCX1ZNT0RF X05PTklOVEVSTEFDRUQKPisgICAgfSwgewo+KwkvKiAxMTUyeDg2NCBAIDEwMCBIeiwgODkuNjIg a0h6IGhzeW5jICovCj4rCU5VTEwsIDEwMCwgMTE1MiwgODY0LCA3MjY0LCAyMjQsIDMyLCAxNywg MiwgMTI4LCAxOSwKPisJMCwgRkJfVk1PREVfTk9OSU5URVJMQUNFRAo+KyAgICB9LCB7Cj4rCS8q IDEyODB4MTAyNCBAIDg1IEh6LCA5MS4xNSBrSHogaHN5bmMgKi8KPisJTlVMTCwgODUsIDEyODAs IDEwMjQsIDYzNDksIDIyNCwgNjQsIDQ0LCAxLCAxNjAsIDMsCj4rCUZCX1NZTkNfSE9SX0hJR0hf QUNUfEZCX1NZTkNfVkVSVF9ISUdIX0FDVCwgRkJfVk1PREVfTk9OSU5URVJMQUNFRAo+KyAgICB9 LCB7Cj4rCS8qIDE2MDB4MTIwMCBAIDc1IEh6LCA5My43NSBrSHogaHN5bmMgKi8KPisJTlVMTCwg NzUsIDE2MDAsIDEyMDAsIDQ5MzgsIDMwNCwgNjQsIDQ2LCAxLCAxOTIsIDMsCj4rCUZCX1NZTkNf SE9SX0hJR0hfQUNUfEZCX1NZTkNfVkVSVF9ISUdIX0FDVCwgRkJfVk1PREVfTk9OSU5URVJMQUNF RAo+KyAgICB9LCB7Cj4rCS8qIDE2MDB4MTIwMCBAIDg1IEh6LCAxMDUuNzcga0h6IGhzeW5jICov Cj4rCU5VTEwsIDg1LCAxNjAwLCAxMjAwLCA0NTQ1LCAyNzIsIDE2LCAzNywgNCwgMTkyLCAzLAo+ KwlGQl9TWU5DX0hPUl9ISUdIX0FDVHxGQl9TWU5DX1ZFUlRfSElHSF9BQ1QsIEZCX1ZNT0RFX05P TklOVEVSTEFDRUQKPisgICAgfSwgewo+KwkvKiAxMjgweDEwMjQgQCAxMDAgSHosIDEwNy4xNiBr SHogaHN5bmMgKi8KPisJTlVMTCwgMTAwLCAxMjgwLCAxMDI0LCA1NTAyLCAyNTYsIDMyLCAyNiwg NywgMTI4LCAxNSwKPisJMCwgRkJfVk1PREVfTk9OSU5URVJMQUNFRAo+KyAgICB9LCB7Cj4rCS8q IDE4MDB4MTQ0MCBAIDY0SHosIDk2LjE1IGtIeiBoc3luYyAgKi8KPisJTlVMTCwgNjQsIDE4MDAs IDE0NDAsIDQzNDcsIDMwNCwgOTYsIDQ2LCAxLCAxOTIsIDMsCj4rCUZCX1NZTkNfSE9SX0hJR0hf QUNUfEZCX1NZTkNfVkVSVF9ISUdIX0FDVCwgRkJfVk1PREVfTk9OSU5URVJMQUNFRAo+KyAgICB9 LCB7Cj4rCS8qIDE4MDB4MTQ0MCBAIDcwSHosIDEwNC41MiBrSHogaHN5bmMgICovCj4rCU5VTEws IDcwLCAxODAwLCAxNDQwLCA0MDAwLCAzMDQsIDk2LCA0NiwgMSwgMTkyLCAzLAo+KwlGQl9TWU5D X0hPUl9ISUdIX0FDVHxGQl9TWU5DX1ZFUlRfSElHSF9BQ1QsIEZCX1ZNT0RFX05PTklOVEVSTEFD RUQKPisgICAgfSwgewo+KwkvKiA1MTJ4Mzg0IEAgNzggSHosIDMxLjUwIGtIeiBoc3luYyAqLwo+ KwlOVUxMLCA3OCwgNTEyLCAzODQsIDQ5NjAzLCA0OCwgMTYsIDE2LCAxLCA2NCwgMywKPisJMCwg RkJfVk1PREVfTk9OSU5URVJMQUNFRAo+KyAgICB9LCB7Cj4rCS8qIDUxMngzODQgQCA4NSBIeiwg MzQuMzgga0h6IGhzeW5jICovCj4rCU5VTEwsIDg1LCA1MTIsIDM4NCwgNDU0NTQsIDQ4LCAxNiwg MTYsIDEsIDY0LCAzLAo+KwkwLCBGQl9WTU9ERV9OT05JTlRFUkxBQ0VECj4rICAgIH0sIHsKPisJ LyogMzIweDIwMCBAIDcwIEh6LCAzMS41IGtIeiBoc3luYywgODo1IGFzcGVjdCByYXRpbyAqLwo+ KwlOVUxMLCA3MCwgMzIwLCAyMDAsIDc5NDQwLCAxNiwgMTYsIDIwLCA0LCA0OCwgMSwKPisJMCwg RkJfVk1PREVfRE9VQkxFCj4rICAgIH0sIHsKPisJLyogMzIweDI0MCBAIDYwIEh6LCAzMS41IGtI eiBoc3luYywgNDozIGFzcGVjdCByYXRpbyAqLwo+KwlOVUxMLCA2MCwgMzIwLCAyNDAsIDc5NDQw LCAxNiwgMTYsIDE2LCA1LCA0OCwgMSwKPisJMCwgRkJfVk1PREVfRE9VQkxFCj4rICAgIH0sIHsK PisJLyogMzIweDI0MCBAIDcyIEh6LCAzNi41IGtIeiBoc3luYyAqLwo+KwlOVUxMLCA3MiwgMzIw LCAyNDAsIDYzNDkyLCAxNiwgMTYsIDE2LCA0LCA0OCwgMiwKPisJMCwgRkJfVk1PREVfRE9VQkxF Cj4rICAgIH0sIHsKPisJLyogNDAweDMwMCBAIDU2IEh6LCAzNS4yIGtIeiBoc3luYywgNDozIGFz cGVjdCByYXRpbyAqLwo+KwlOVUxMLCA1NiwgNDAwLCAzMDAsIDU1NTU1LCA2NCwgMTYsIDEwLCAx LCAzMiwgMSwKPisJMCwgRkJfVk1PREVfRE9VQkxFCj4rICAgIH0sIHsKPisJLyogNDAweDMwMCBA IDYwIEh6LCAzNy44IGtIeiBoc3luYyAqLwo+KwlOVUxMLCA2MCwgNDAwLCAzMDAsIDUwMDAwLCA0 OCwgMTYsIDExLCAxLCA2NCwgMiwKPisJMCwgRkJfVk1PREVfRE9VQkxFCj4rICAgIH0sIHsKPisJ LyogNDAweDMwMCBAIDcyIEh6LCA0OC4wIGtIeiBoc3luYyAqLwo+KwlOVUxMLCA3MiwgNDAwLCAz MDAsIDQwMDAwLCAzMiwgMjQsIDExLCAxOSwgNjQsIDMsCj4rCTAsIEZCX1ZNT0RFX0RPVUJMRQo+ KyAgICB9LCB7Cj4rCS8qIDQ4MHgzMDAgQCA1NiBIeiwgMzUuMiBrSHogaHN5bmMsIDg6NSBhc3Bl Y3QgcmF0aW8gKi8KPisJTlVMTCwgNTYsIDQ4MCwgMzAwLCA0NjE3NiwgODAsIDE2LCAxMCwgMSwg NDAsIDEsCj4rCTAsIEZCX1ZNT0RFX0RPVUJMRQo+KyAgICB9LCB7Cj4rCS8qIDQ4MHgzMDAgQCA2 MCBIeiwgMzcuOCBrSHogaHN5bmMgKi8KPisJTlVMTCwgNjAsIDQ4MCwgMzAwLCA0MTg1OCwgNTYs IDE2LCAxMSwgMSwgODAsIDIsCj4rCTAsIEZCX1ZNT0RFX0RPVUJMRQo+KyAgICB9LCB7Cj4rCS8q IDQ4MHgzMDAgQCA2MyBIeiwgMzkuNiBrSHogaHN5bmMgKi8KPisJTlVMTCwgNjMsIDQ4MCwgMzAw LCA0MDAwMCwgNTYsIDE2LCAxMSwgMSwgODAsIDIsCj4rCTAsIEZCX1ZNT0RFX0RPVUJMRQo+KyAg ICB9LCB7Cj4rCS8qIDQ4MHgzMDAgQCA3MiBIeiwgNDguMCBrSHogaHN5bmMgKi8KPisJTlVMTCwg NzIsIDQ4MCwgMzAwLCAzMzM4NiwgNDAsIDI0LCAxMSwgMTksIDgwLCAzLAo+KwkwLCBGQl9WTU9E RV9ET1VCTEUKPisgICAgfSwKPit9Owo+K3N0YXRpYyBjb25zdCBpbnQgbm1vZGVkYjIgPSBzaXpl b2YobW9kZWRiMik7Cj5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9seW54ZmIvdmVyLmggYi9k cml2ZXJzL3ZpZGVvL2x5bnhmYi92ZXIuaAo+bmV3IGZpbGUgbW9kZSAxMDA2NDQKPmluZGV4IDAw MDAwMDAuLmQxMTM2MmEKPi0tLSAvZGV2L251bGwKPisrKyBiL2RyaXZlcnMvdmlkZW8vbHlueGZi L3Zlci5oCj5AQCAtMCwwICsxLDM4IEBACj4rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKPisqQ29weXJpZ2h0IChjKSAy MDEyIGJ5IFNpbGljb24gTW90aW9uLCBJbmMuIChTTUkpCj4rKlBlcm1pc3Npb24gaXMgaGVyZWJ5 IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkK Pisqb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0 aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKPisqaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJp Y3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwo+Kyp1c2Us IGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFu ZC9vciBzZWxsIGNvcGllcwo+KypvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29u cyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8KPisqZG8gc28sIHN1YmplY3Qg dG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+KyoKPisqVEhFIFNPRlRXQVJFIElTIFBST1ZJ REVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCj4rKkVYUFJFU1MgT1Ig SU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUwo+KypP RiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAo+ KypOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBNaWxsLkNoZW4gYW5kIE1vbmsu TGl1IE9SIENPUFlSSUdIVAo+KypIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1B R0VTIE9SIE9USEVSIExJQUJJTElUWSwKPisqV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJB Q1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCj4rKkZST00sIE9VVCBPRiBPUiBJTiBDT05O RUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKPisqT1RIRVIgREVBTElOR1Mg SU4gVEhFIFNPRlRXQVJFLgo+KyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCj4rI2lmbmRlZiBfX1ZFUl9IXwo+KyNkZWZp bmUgX19WRVJfSF8KPisKPisjZGVmaW5lIFJFTEVBU0VfVFlQRSAiRWxlY3RyYShmb3JtYWwgcmVs ZWFzZSkiCj4rI2RlZmluZSBTVVBQT1JUX0FSQ0ggIng4Nix4ODZfNjQiCj4rI2RlZmluZSBTVVBQ T1JUX0NISVAgImx5bnggRXhwcmVzcyg3NTApL2x5bnggNzUwTEUvTHlueCBTRSg3MTgpIgo+Ky8q I2RlZmluZSBTVVBQT1JUX0NISVAgIiBcCj4rXHRseW54IDc1MExFXG4iKi8KPisKPisjZGVmaW5l IFNVUFBPUlRfT1MgIiBcCj4rXHRSSEVMIDQuMyBpMzg2IGFuZCB4ODZfNjRcbiBcCj4rXHRSSEVM IDUuMyBpMzg2IGFuZCB4ODZfNjRcbiBcCj4rXHRSSEVMIDYuMCBpMzg2IGFuZCB4ODZfNjRcbiBc Cj4rXHRTTEVTIDkgICBpMzg2IGFuZCB4ODZfNjRcbiBcCj4rXHRTTEVTIDEwICBpMzg2IGFuZCB4 ODZfNjRcbiBcCj4rXHRTTEVTIDExICBpMzg2IGFuZCB4ODZfNjRcbiIKPisjZGVmaW5lIF92ZXJz aW9uXwkiNC4xLjMiCj4rCj4rI2VuZGlmCj4rCj4tLSAKPjEuNy45LjUKPgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0 CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9w Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=