From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sean Paul Subject: Re: [DPU PATCH v2 2/2] drm/msm: Add hardware catalog data in driver source for SDM845 Date: Thu, 29 Mar 2018 10:51:06 -0400 Message-ID: <20180329145106.GF41885@art_vandelay> References: <1522319365-31675-1-git-send-email-skolluku@codeaurora.org> <1522319365-31675-3-git-send-email-skolluku@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1522319365-31675-3-git-send-email-skolluku-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: Sravanthi Kollukuduru Cc: mark.rutland-5wv7dgnIgG8@public.gmane.org, devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org, seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, hoegsberg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org List-Id: devicetree@vger.kernel.org T24gVGh1LCBNYXIgMjksIDIwMTggYXQgMDM6NTk6MjVQTSArMDUzMCwgU3JhdmFudGhpIEtvbGx1 a3VkdXJ1IHdyb3RlOgo+IEN1cnJlbnRseSwgdGhlIGRvd25zdHJlYW0gZHJpdmVyIGRlcGVuZHMg b24gdGhlIERUIGZpbGUgZm9yIHRoZQo+IGhhcmR3YXJlIGJsb2NrIG9mZnNldHMgYW5kIG90aGVy IHRhcmdldCBzcGVjaWZpYyBjYXRhbG9nIGluZm9ybWF0aW9uLgo+IFRvIGFsaWduIHRoZSBkcml2 ZXIgd2l0aCB0aGUgdXBzdHJlYW0gRFQgZGVzaWduLCB0aGlzIGluZm9ybWF0aW9uIGlzCj4gbm93 IHJlbW92ZWQgZnJvbSB0aGUgRFQgYW5kIGFkZGVkIGluIHRoZSBkcml2ZXIgc291cmNlLgo+IAo+ IENoYW5nZS1JZDogSTIwNzkyZjNjZTM4NjFiNDYwZDcyMjM4MjM2NzJkNzU5YzM4NTMwYjIKPiBT aWduZWQtb2ZmLWJ5OiBTcmF2YW50aGkgS29sbHVrdWR1cnUgPHNrb2xsdWt1QGNvZGVhdXJvcmEu b3JnPgoKU3RpbGwgbm90IHF1aXRlIGRpc3RyaWJ1dGVkIGxpa2UgSSBoYWQgb3JpZ2luYWxseSB3 YW50ZWQsIGJ1dCBnaXZlbiBtZHA0CmFuZCBtZHA1IGFsc28gaGF2ZSBjYXRhbG9ncywgdGhpcyBz ZWVtcyBjb25zaXN0ZW50IHdpdGggdGhlIHJlc3Qgb2YgbXNtLgoKUmV2aWV3ZWQtYnk6IFNlYW4g UGF1bCA8c2VhbnBhdWxAY2hyb21pdW0ub3JnPgoKPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X2NydGMuYyAgICAgICB8ICAgMTcgKy0KPiAgZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuYyAgICB8ICAgIDUgKy0KPiAgZHJpdmVycy9ncHUv ZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2NhdGFsb2cuYyB8IDM1NDIgKysrKy0tLS0tLS0tLS0t LS0tLS0tLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jYXRhbG9n LmggfCAgMTI0ICstCj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19zc3Bw LmMgICAgfCAgICAyICstCj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od190 b3AuYyAgICAgfCAgICAyICstCj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9o d193Yi5jICAgICAgfCAgICAyICstCj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9rbXMuYyAgICAgICAgfCAgICA1ICstCj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9wbGFuZS5jICAgICAgfCAgIDI0ICstCj4gIDkgZmlsZXMgY2hhbmdlZCwgNjM2IGluc2Vy dGlvbnMoKyksIDMwODcgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfY3J0Yy5jCj4gaW5kZXggYmY0NmNmMS4uMzMwODkyOSAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5jCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuYwo+IEBAIC0zMjUxLDcgKzMyNTEsNyBAQCBz dGF0aWMgdm9pZCBkcHVfY3J0Y19pbnN0YWxsX3Byb3BlcnRpZXMoc3RydWN0IGRybV9jcnRjICpj cnRjLAo+ICAKPiAgCWRwdV9rbXNfaW5mb19yZXNldChpbmZvKTsKPiAgCj4gLQlpZiAoY2F0YWxv Zy0+aGFzX2RpbV9sYXllcikgewo+ICsJaWYgKGNhdGFsb2ctPmNhcHMtPmhhc19kaW1fbGF5ZXIp IHsKPiAgCQltc21fcHJvcGVydHlfaW5zdGFsbF92b2xhdGlsZV9yYW5nZSgmZHB1X2NydGMtPnBy b3BlcnR5X2luZm8sCj4gIAkJCSJkaW1fbGF5ZXJfdjEiLCAweDAsIDAsIH4wLCAwLCBDUlRDX1BS T1BfRElNX0xBWUVSX1YxKTsKPiAgCQlkcHVfa21zX2luZm9fYWRkX2tleWludChpbmZvLCAiZGlt X2xheWVyX3YxX21heF9sYXllcnMiLAo+IEBAIC0zMjYwLDE5ICszMjYwLDE5IEBAIHN0YXRpYyB2 b2lkIGRwdV9jcnRjX2luc3RhbGxfcHJvcGVydGllcyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4g IAo+ICAJZHB1X2ttc19pbmZvX2FkZF9rZXlpbnQoaW5mbywgImh3X3ZlcnNpb24iLCBjYXRhbG9n LT5od3ZlcnNpb24pOwo+ICAJZHB1X2ttc19pbmZvX2FkZF9rZXlpbnQoaW5mbywgIm1heF9saW5l d2lkdGgiLAo+IC0JCQljYXRhbG9nLT5tYXhfbWl4ZXJfd2lkdGgpOwo+ICsJCQljYXRhbG9nLT5j YXBzLT5tYXhfbWl4ZXJfd2lkdGgpOwo+ICAJZHB1X2ttc19pbmZvX2FkZF9rZXlpbnQoaW5mbywg Im1heF9ibGVuZHN0YWdlcyIsCj4gLQkJCWNhdGFsb2ctPm1heF9taXhlcl9ibGVuZHN0YWdlcyk7 Cj4gLQlpZiAoY2F0YWxvZy0+cXNlZWRfdHlwZSA9PSBEUFVfU1NQUF9TQ0FMRVJfUVNFRUQyKQo+ ICsJCQljYXRhbG9nLT5jYXBzLT5tYXhfbWl4ZXJfYmxlbmRzdGFnZXMpOwo+ICsJaWYgKGNhdGFs b2ctPmNhcHMtPnFzZWVkX3R5cGUgPT0gRFBVX1NTUFBfU0NBTEVSX1FTRUVEMikKPiAgCQlkcHVf a21zX2luZm9fYWRkX2tleXN0cihpbmZvLCAicXNlZWRfdHlwZSIsICJxc2VlZDIiKTsKPiAtCWlm IChjYXRhbG9nLT5xc2VlZF90eXBlID09IERQVV9TU1BQX1NDQUxFUl9RU0VFRDMpCj4gKwlpZiAo Y2F0YWxvZy0+Y2Fwcy0+cXNlZWRfdHlwZSA9PSBEUFVfU1NQUF9TQ0FMRVJfUVNFRUQzKQo+ICAJ CWRwdV9rbXNfaW5mb19hZGRfa2V5c3RyKGluZm8sICJxc2VlZF90eXBlIiwgInFzZWVkMyIpOwo+ ICAKPiAgCWlmIChkcHVfaXNfY3VzdG9tX2NsaWVudCgpKSB7Cj4gLQkJaWYgKGNhdGFsb2ctPnNt YXJ0X2RtYV9yZXYgPT0gRFBVX1NTUFBfU01BUlRfRE1BX1YxKQo+ICsJCWlmIChjYXRhbG9nLT5j YXBzLT5zbWFydF9kbWFfcmV2ID09IERQVV9TU1BQX1NNQVJUX0RNQV9WMSkKPiAgCQkJZHB1X2tt c19pbmZvX2FkZF9rZXlzdHIoaW5mbywKPiAgCQkJCQkic21hcnRfZG1hX3JldiIsICJzbWFydF9k bWFfdjEiKTsKPiAtCQlpZiAoY2F0YWxvZy0+c21hcnRfZG1hX3JldiA9PSBEUFVfU1NQUF9TTUFS VF9ETUFfVjIpCj4gKwkJaWYgKGNhdGFsb2ctPmNhcHMtPnNtYXJ0X2RtYV9yZXYgPT0gRFBVX1NT UFBfU01BUlRfRE1BX1YyKQo+ICAJCQlkcHVfa21zX2luZm9fYWRkX2tleXN0cihpbmZvLAo+ICAJ CQkJCSJzbWFydF9kbWFfcmV2IiwgInNtYXJ0X2RtYV92MiIpOwo+ICAJfQo+IEBAIC0zMzEwLDcg KzMzMTAsOCBAQCBzdGF0aWMgdm9pZCBkcHVfY3J0Y19pbnN0YWxsX3Byb3BlcnRpZXMoc3RydWN0 IGRybV9jcnRjICpjcnRjLAo+ICAJCX0KPiAgCX0KPiAgCj4gLQlkcHVfa21zX2luZm9fYWRkX2tl eWludChpbmZvLCAiaGFzX3NyY19zcGxpdCIsIGNhdGFsb2ctPmhhc19zcmNfc3BsaXQpOwo+ICsJ ZHB1X2ttc19pbmZvX2FkZF9rZXlpbnQoaW5mbywgImhhc19zcmNfc3BsaXQiLAo+ICsJCQkJY2F0 YWxvZy0+Y2Fwcy0+aGFzX3NyY19zcGxpdCk7Cj4gIAlpZiAoY2F0YWxvZy0+cGVyZi5tYXhfYndf bG93KQo+ICAJCWRwdV9rbXNfaW5mb19hZGRfa2V5aW50KGluZm8sICJtYXhfYmFuZHdpZHRoX2xv dyIsCj4gIAkJCQljYXRhbG9nLT5wZXJmLm1heF9id19sb3cgKiAxMDAwTEwpOwo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5jIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuYwo+IGluZGV4IGQ5ZDA4ZmMuLjdm NDE4MjIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2Vu Y29kZXIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVy LmMKPiBAQCAtMTg0Miw3ICsxODQyLDcgQEAgc3RhdGljIHZvaWQgZHB1X2VuY29kZXJfdmlydF9t b2RlX3NldChzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMsCj4gIAlkcHVfY29ubiA9IHRvX2Rw dV9jb25uZWN0b3IoY29ubik7Cj4gIAlpZiAoZHB1X2Nvbm4pIHsKPiAgCQlyZXQgPSBkcHVfY29u bi0+b3BzLmdldF9tb2RlX2luZm8oYWRqX21vZGUsICZkcHVfZW5jLT5tb2RlX2luZm8sCj4gLQkJ CQlkcHVfa21zLT5jYXRhbG9nLT5tYXhfbWl4ZXJfd2lkdGgpOwo+ICsJCQkJZHB1X2ttcy0+Y2F0 YWxvZy0+Y2Fwcy0+bWF4X21peGVyX3dpZHRoKTsKPiAgCQlpZiAocmV0KSB7Cj4gIAkJCURQVV9F UlJPUl9FTkMoZHB1X2VuYywKPiAgCQkJCSJpbnZhbGlkIHRvcG9sb2d5IGZvciB0aGUgbW9kZVxu Iik7Cj4gQEAgLTM0NjAsNyArMzQ2MCw4IEBAIHN0YXRpYyBpbnQgZHB1X2VuY29kZXJfc2V0dXBf ZGlzcGxheShzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYywKPiAgCj4gIAlpZiAoKGRp c3BfaW5mby0+Y2FwYWJpbGl0aWVzICYgTVNNX0RJU1BMQVlfQ0FQX0NNRF9NT0RFKSB8fAo+ICAJ ICAgIChkaXNwX2luZm8tPmNhcGFiaWxpdGllcyAmIE1TTV9ESVNQTEFZX0NBUF9WSURfTU9ERSkp Cj4gLQkJZHB1X2VuYy0+aWRsZV9wY19zdXBwb3J0ZWQgPSBkcHVfa21zLT5jYXRhbG9nLT5oYXNf aWRsZV9wYzsKPiArCQlkcHVfZW5jLT5pZGxlX3BjX3N1cHBvcnRlZCA9Cj4gKwkJCQlkcHVfa21z LT5jYXRhbG9nLT5jYXBzLT5oYXNfaWRsZV9wYzsKPiAgCj4gIAltdXRleF9sb2NrKCZkcHVfZW5j LT5lbmNfbG9jayk7Cj4gIAlmb3IgKGkgPSAwOyBpIDwgZGlzcF9pbmZvLT5udW1fb2ZfaF90aWxl cyAmJiAhcmV0OyBpKyspIHsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2h3X2NhdGFsb2cuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9od19jYXRhbG9nLmMKPiBpbmRleCA3MDE5NjIwLi5kZjczMTQ4IDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jYXRhbG9nLmMKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY2F0YWxvZy5jCj4gQEAgLTE5LDMwODEg KzE5LDYyMyBAQAo+ICAjaW5jbHVkZSAiZHB1X2h3X2NhdGFsb2dfZm9ybWF0LmgiCj4gICNpbmNs dWRlICJkcHVfa21zLmgiCj4gIAo+IC0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKgo+IC0gKiBNQUNSTyBERUZJTklUSU9OCj4gLSAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLwo+IC0KPiAtLyoqCj4gLSAqIE1heCBoYXJkd2FyZSBibG9jayBpbiBjZXJ0YWluIGhhcmR3 YXJlLiBGb3IgZXg6IHNzcHAgcGlwZXMKPiAtICogY2FuIGhhdmUgUVNFRUQsIHBjYywgaWdjLCBw YSwgY3NjLCBxb3MgZW50cmllcywgZXRjLiBUaGlzIGNvdW50IGlzCj4gLSAqIDY0IGJhc2VkIG9u IHNvZnR3YXJlIGRlc2lnbi4gSXQgc2hvdWxkIGJlIGluY3JlYXNlZCBpZiBhbnkgb2YgdGhlCj4g LSAqIGhhcmR3YXJlIGJsb2NrIGhhcyBtb3JlIHN1YmJsb2Nrcy4KPiAtICovCj4gLSNkZWZpbmUg TUFYX0RQVV9IV19CTEsgIDY0Cj4gLQo+IC0vKiBlYWNoIGVudHJ5IHdpbGwgaGF2ZSByZWdpc3Rl ciBhZGRyZXNzIGFuZCBiaXQgb2Zmc2V0IGluIHRoYXQgcmVnaXN0ZXIgKi8KPiAtI2RlZmluZSBN QVhfQklUX09GRlNFVCAyCj4gLQo+IC0vKiBkZWZhdWx0IGxpbmUgd2lkdGggZm9yIHNzcHAsIG1p eGVyLCBkcyAoaW5wdXQpLCB3YiAqLwo+IC0jZGVmaW5lIERFRkFVTFRfRFBVX0xJTkVfV0lEVEgg MjA0OAo+IC0KPiAtLyogZGVmYXVsdCBvdXRwdXQgbGluZSB3aWR0aCBmb3IgZHMgKi8KPiAtI2Rl ZmluZSBERUZBVUxUX0RQVV9PVVRQVVRfTElORV9XSURUSCAyNTYwCj4gLQo+IC0vKiBtYXggbWl4 ZXIgYmxlbmQgc3RhZ2VzICovCj4gLSNkZWZpbmUgREVGQVVMVF9EUFVfTUlYRVJfQkxFTkRTVEFH RVMgNwo+ICsjZGVmaW5lIFZJR19TRE04NDVfTUFTSyBcCj4gKwkoQklUKERQVV9TU1BQX1NSQykg fCBCSVQoRFBVX1NTUFBfU0NBTEVSX1FTRUVEMykgfCBCSVQoRFBVX1NTUFBfUU9TKSB8XAo+ICsJ QklUKERQVV9TU1BQX0NTQ18xMEJJVCkgfCBCSVQoRFBVX1NTUFBfQ0RQKSB8IEJJVChEUFVfU1NQ UF9RT1NfOExWTCkgfFwKPiArCUJJVChEUFVfU1NQUF9UU19QUkVGSUxMKSB8IEJJVChEUFVfU1NQ UF9FWENMX1JFQ1QpKQo+ICAKPiAtLyogbWF4IGJhbmsgYml0IGZvciBtYWNybyB0aWxlIGFuZCB1 YndjIGZvcm1hdCAqLwo+IC0jZGVmaW5lIERFRkFVTFRfRFBVX0hJR0hFU1RfQkFOS19CSVQgMTUK PiArI2RlZmluZSBETUFfU0RNODQ1X01BU0sgXAo+ICsJKEJJVChEUFVfU1NQUF9TUkMpIHwgQklU KERQVV9TU1BQX1FPUykgfCBCSVQoRFBVX1NTUFBfUU9TXzhMVkwpIHxcCj4gKwlCSVQoRFBVX1NT UFBfVFNfUFJFRklMTCkgfCBCSVQoRFBVX1NTUFBfVFNfUFJFRklMTF9SRUMxKSB8XAo+ICsJQklU KERQVV9TU1BQX0NEUCkgfCBCSVQoRFBVX1NTUFBfRVhDTF9SRUNUKSkKPiAgCj4gLS8qIGRlZmF1 bHQgdWJ3YyB2ZXJzaW9uICovCj4gLSNkZWZpbmUgREVGQVVMVF9EUFVfVUJXQ19WRVJTSU9OIERQ VV9IV19VQldDX1ZFUl8xMAo+ICsjZGVmaW5lIE1JWEVSX1NETTg0NV9NQVNLIFwKPiArCShCSVQo RFBVX01JWEVSX1NPVVJDRVNQTElUKSB8IEJJVChEUFVfRElNX0xBWUVSKSkKPiAgCj4gLS8qIGRl ZmF1bHQgdWJ3YyBzdGF0aWMgY29uZmlnIHJlZ2lzdGVyIHZhbHVlICovCj4gLSNkZWZpbmUgREVG QVVMVF9EUFVfVUJXQ19TVEFUSUMgMHgwCj4gKyNkZWZpbmUgRFNQUF9TRE04NDVfTUFTSyBcCj4g KwkoQklUKERQVV9EU1BQX0lHQykgfCBCSVQoRFBVX0RTUFBfUENDKSB8IEJJVChEUFVfRFNQUF9H QykgfFwKPiArCUJJVChEUFVfRFNQUF9IU0lDKSB8IEJJVChEUFVfRFNQUF9HQU1VVCkgfCBCSVQo RFBVX0RTUFBfSElTVCkgfFwKPiArCUJJVChEUFVfRFNQUF9NRU1DT0xPUikgfCBCSVQoRFBVX0RT UFBfU0lYWk9ORSkgfCBCSVQoRFBVX0RTUFBfVkxVVCkpCj4gIAo+IC0vKiBkZWZhdWx0IHVid2Mg c3dpenpsZSByZWdpc3RlciB2YWx1ZSAqLwo+IC0jZGVmaW5lIERFRkFVTFRfRFBVX1VCV0NfU1dJ WlpMRSAweDAKPiArI2RlZmluZSBEU1BQX0FEX1NETTg0NV9NQVNLIFwKPiArCShEU1BQX1NETTg0 NV9NQVNLIHwgQklUKERQVV9EU1BQX0FEKSkKPiAgCj4gLS8qIGRlZmF1bHQgaGFyZHdhcmUgYmxv Y2sgc2l6ZSBpZiBkdHNpIGVudHJ5IGlzIG5vdCBwcmVzZW50ICovCj4gLSNkZWZpbmUgREVGQVVM VF9EUFVfSFdfQkxPQ0tfTEVOIDB4MTAwCj4gKyNkZWZpbmUgUElOR1BPTkdfU0RNODQ1X01BU0sg QklUKERQVV9QSU5HUE9OR19ESVRIRVIpCj4gIAo+IC0vKiB0b3RhbCBudW1iZXIgb2YgaW50ZiAt IGRwLCBkc2ksIGhkbWkgKi8KPiAtI2RlZmluZSBJTlRGX0NPVU5UCQkJMwo+ICsjZGVmaW5lIFBJ TkdQT05HX1NETTg0NV9TUExJVF9NQVNLIFwKPiArCShQSU5HUE9OR19TRE04NDVfTUFTSyB8IEJJ VChEUFVfUElOR1BPTkdfU1BMSVQpIHwgQklUKERQVV9QSU5HUE9OR19URTIpKQo+ICAKPiAtI2Rl ZmluZSBNQVhfVVBTQ0FMRV9SQVRJTwkJMjAKPiAtI2RlZmluZSBNQVhfRE9XTlNDQUxFX1JBVElP CQk0Cj4gLSNkZWZpbmUgU1NQUF9VTklUWV9TQ0FMRQkJMQo+IC0KPiAtI2RlZmluZSBNQVhfSE9S Wl9ERUNJTUFUSU9OCQk0Cj4gLSNkZWZpbmUgTUFYX1ZFUlRfREVDSU1BVElPTgkJNAo+IC0KPiAt I2RlZmluZSBNQVhfU1BMSVRfRElTUExBWV9DVEwJCTIKPiAtI2RlZmluZSBNQVhfUFBfU1BMSVRf RElTUExBWV9DVEwJMQo+IC0KPiAtI2RlZmluZSBNRFNTX0JBU0VfT0ZGU0VUCQkweDAKPiAtCj4g LSNkZWZpbmUgUk9UX0xNX09GRlNFVAkJCTMKPiAtI2RlZmluZSBMSU5FX0xNX09GRlNFVAkJCTUK PiAtI2RlZmluZSBMSU5FX01PREVfV0JfT0ZGU0VUCQkyCj4gLQo+IC0vKiBtYXhpbXVtIFhJTiBo YWx0IHRpbWVvdXQgaW4gdXNlYyAqLwo+IC0jZGVmaW5lIFZCSUZfWElOX0hBTFRfVElNRU9VVAkJ MHg0MDAwCj4gKyNkZWZpbmUgV0IyX1NETTg0NV9NQVNLIFwKPiArCShCSVQoRFBVX1dCX0xJTkVf TU9ERSkgfCBCSVQoRFBVX1dCX1RSQUZGSUNfU0hBUEVSKSB8IEJJVChEUFVfV0JfQ0RQKSB8XAo+ ICsJQklUKERQVV9XQl9ZVVZfQ09ORklHKSB8IEJJVChEUFVfV0JfUU9TXzhMVkwpIHwgQklUKERQ VV9XQl9VQldDKSkKPiAgCj4gICNkZWZpbmUgREVGQVVMVF9QSVhFTF9SQU1fU0laRQkJKDUwICog MTAyNCkKPiArI2RlZmluZSBERUZBVUxUX0RQVV9MSU5FX1dJRFRICQkyMDQ4Cj4gKyNkZWZpbmUg REVGQVVMVF9EUFVfT1VUUFVUX0xJTkVfV0lEVEgJMjU2MAo+ICAKPiAtLyogYWNjZXNzIHByb3Bl cnR5IHZhbHVlIGJhc2VkIG9uIHByb3BfdHlwZSBhbmQgaGFyZHdhcmUgaW5kZXggKi8KPiAtI2Rl ZmluZSBQUk9QX1ZBTFVFX0FDQ0VTUyhwLCBpLCBqKQkJKChwICsgaSktPnZhbHVlW2pdKQo+ICsj ZGVmaW5lIE1BWF9IT1JaX0RFQ0lNQVRJT04JNAo+ICsjZGVmaW5lIE1BWF9WRVJUX0RFQ0lNQVRJ T04JNAo+ICAKPiAtLyoKPiAtICogYWNjZXNzIGVsZW1lbnQgd2l0aGluIFBST1BfVFlQRV9CSVRf T0ZGU0VUX0FSUkFZcyBiYXNlZCBvbiBwcm9wX3R5cGUsCj4gLSAqIGhhcmR3YXJlIGluZGV4IGFu ZCBvZmZzZXQgYXJyYXkgaW5kZXgKPiAtICovCj4gLSNkZWZpbmUgUFJPUF9CSVRWQUxVRV9BQ0NF U1MocCwgaSwgaiwgaykJKChwICsgaSktPmJpdF92YWx1ZVtqXVtrXSkKPiArI2RlZmluZSBNQVhf VVBTQ0FMRV9SQVRJTwkyMAo+ICsjZGVmaW5lIE1BWF9ET1dOU0NBTEVfUkFUSU8JNAo+ICsjZGVm aW5lIFNTUFBfVU5JVFlfU0NBTEUJMQo+ICAKPiAtLyoKPiAtICogRGVmYXVsdCBwYXJhbWV0ZXIg dmFsdWVzCj4gLSAqLwo+IC0jZGVmaW5lIERFRkFVTFRfTUFYX0JXX0hJR0gJCQk3MDAwMDAwCj4g LSNkZWZpbmUgREVGQVVMVF9NQVhfQldfTE9XCQkJNzAwMDAwMAo+IC0jZGVmaW5lIERFRkFVTFRf VU5ERVJTSVpFRF9QUkVGSUxMX0xJTkVTCTIKPiAtI2RlZmluZSBERUZBVUxUX1hUUkFfUFJFRklM TF9MSU5FUwkJMgo+IC0jZGVmaW5lIERFRkFVTFRfREVTVF9TQ0FMRV9QUkVGSUxMX0xJTkVTCTMK PiAtI2RlZmluZSBERUZBVUxUX01BQ1JPVElMRV9QUkVGSUxMX0xJTkVTCQk0Cj4gLSNkZWZpbmUg REVGQVVMVF9ZVVZfTlYxMl9QUkVGSUxMX0xJTkVTCQk4Cj4gLSNkZWZpbmUgREVGQVVMVF9MSU5F QVJfUFJFRklMTF9MSU5FUwkJMQo+IC0jZGVmaW5lIERFRkFVTFRfRE9XTlNDQUxJTkdfUFJFRklM TF9MSU5FUwkxCj4gLSNkZWZpbmUgREVGQVVMVF9DT1JFX0lCX0ZGCQkJIjYuMCIKPiAtI2RlZmlu ZSBERUZBVUxUX0NPUkVfQ0xLX0ZGCQkJIjEuMCIKPiAtI2RlZmluZSBERUZBVUxUX0NPTVBfUkFU SU9fUlQgXAo+IC0JCSJOVjEyLzUvMS8xLjIzIEFCMjQvNS8xLzEuMjMgWEIyNC81LzEvMS4yMyIK PiAtI2RlZmluZSBERUZBVUxUX0NPTVBfUkFUSU9fTlJUIFwKPiAtCQkiTlYxMi81LzEvMS4yNSBB QjI0LzUvMS8xLjI1IFhCMjQvNS8xLzEuMjUiCj4gLSNkZWZpbmUgREVGQVVMVF9NQVhfUEVSX1BJ UEVfQlcJCQkyNDAwMDAwCj4gLSNkZWZpbmUgREVGQVVMVF9BTU9SVElaQUJMRV9USFJFU0hPTEQJ CTI1Cj4gKyNkZWZpbmUgU1RSQ0FUKFgsIFkpIChYIFkpCj4gIAo+ICAvKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgo+IC0gKiAgRFRT SSBQUk9QRVJUWSBJTkRFWAo+ICsgKiBEUFUgc3ViIGJsb2NrcyBjb25maWcKPiAgICoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCj4g LWVudW0gewo+IC0JSFdfT0ZGLAo+IC0JSFdfTEVOLAo+IC0JSFdfUFJPUF9NQVgsCj4gLX07Cj4g LQo+IC1lbnVtIGRwdV9wcm9wIHsKPiAtCURQVV9PRkYsCj4gLQlEUFVfTEVOLAo+IC0JU1NQUF9M SU5FV0lEVEgsCj4gLQlNSVhFUl9MSU5FV0lEVEgsCj4gLQlNSVhFUl9CTEVORCwKPiAtCVdCX0xJ TkVXSURUSCwKPiAtCUJBTktfQklULAo+IC0JVUJXQ19WRVJTSU9OLAo+IC0JVUJXQ19TVEFUSUMs Cj4gLQlVQldDX1NXSVpaTEUsCj4gLQlRU0VFRF9UWVBFLAo+IC0JQ1NDX1RZUEUsCj4gLQlQQU5J Q19QRVJfUElQRSwKPiAtCVNSQ19TUExJVCwKPiAtCURJTV9MQVlFUiwKPiAtCVNNQVJUX0RNQV9S RVYsCj4gLQlJRExFX1BDLAo+IC0JREVTVF9TQ0FMRVIsCj4gLQlEUFVfUFJPUF9NQVgsCj4gLX07 Cj4gLQo+IC1lbnVtIHsKPiAtCVBFUkZfTUFYX0JXX0xPVywKPiAtCVBFUkZfTUFYX0JXX0hJR0gs Cj4gLQlQRVJGX01JTl9DT1JFX0lCLAo+IC0JUEVSRl9NSU5fTExDQ19JQiwKPiAtCVBFUkZfTUlO X0RSQU1fSUIsCj4gLQlQRVJGX0NPUkVfSUJfRkYsCj4gLQlQRVJGX0NPUkVfQ0xLX0ZGLAo+IC0J UEVSRl9DT01QX1JBVElPX1JULAo+IC0JUEVSRl9DT01QX1JBVElPX05SVCwKPiAtCVBFUkZfVU5E RVJTSVpFRF9QUkVGSUxMX0xJTkVTLAo+IC0JUEVSRl9ERVNUX1NDQUxFX1BSRUZJTExfTElORVMs Cj4gLQlQRVJGX01BQ1JPVElMRV9QUkVGSUxMX0xJTkVTLAo+IC0JUEVSRl9ZVVZfTlYxMl9QUkVG SUxMX0xJTkVTLAo+IC0JUEVSRl9MSU5FQVJfUFJFRklMTF9MSU5FUywKPiAtCVBFUkZfRE9XTlND QUxJTkdfUFJFRklMTF9MSU5FUywKPiAtCVBFUkZfWFRSQV9QUkVGSUxMX0xJTkVTLAo+IC0JUEVS Rl9BTU9SVElaQUJMRV9USFJFU0hPTEQsCj4gLQlQRVJGX0RBTkdFUl9MVVQsCj4gLQlQRVJGX1NB RkVfTFVULAo+IC0JUEVSRl9RT1NfTFVUX0xJTkVBUiwKPiAtCVBFUkZfUU9TX0xVVF9NQUNST1RJ TEUsCj4gLQlQRVJGX1FPU19MVVRfTlJULAo+IC0JUEVSRl9RT1NfTFVUX0NXQiwKPiAtCVBFUkZf Q0RQX1NFVFRJTkcsCj4gLQlQRVJGX1BST1BfTUFYLAo+IC19Owo+IC0KPiAtZW51bSB7Cj4gLQlT U1BQX09GRiwKPiAtCVNTUFBfU0laRSwKPiAtCVNTUFBfVFlQRSwKPiAtCVNTUFBfWElOLAo+IC0J U1NQUF9DTEtfQ1RSTCwKPiAtCVNTUFBfQ0xLX1NUQVRVUywKPiAtCVNTUFBfU0NBTEVfU0laRSwK PiAtCVNTUFBfVklHX0JMT0NLUywKPiAtCVNTUFBfUkdCX0JMT0NLUywKPiAtCVNTUFBfRVhDTF9S RUNULAo+IC0JU1NQUF9TTUFSVF9ETUEsCj4gLQlTU1BQX01BWF9QRVJfUElQRV9CVywKPiAtCVNT UFBfUFJPUF9NQVgsCj4gLX07Cj4gLQo+IC1lbnVtIHsKPiAtCVZJR19RU0VFRF9PRkYsCj4gLQlW SUdfUVNFRURfTEVOLAo+IC0JVklHX0NTQ19PRkYsCj4gLQlWSUdfSFNJQ19QUk9QLAo+IC0JVklH X01FTUNPTE9SX1BST1AsCj4gLQlWSUdfUENDX1BST1AsCj4gLQlWSUdfUFJPUF9NQVgsCj4gLX07 Cj4gLQo+IC1lbnVtIHsKPiAtCVJHQl9TQ0FMRVJfT0ZGLAo+IC0JUkdCX1NDQUxFUl9MRU4sCj4g LQlSR0JfUENDX1BST1AsCj4gLQlSR0JfUFJPUF9NQVgsCj4gLX07Cj4gLQo+IC1lbnVtIHsKPiAt CUlOVEZfT0ZGLAo+IC0JSU5URl9MRU4sCj4gLQlJTlRGX1BSRUZFVENILAo+IC0JSU5URl9UWVBF LAo+IC0JSU5URl9QUk9QX01BWCwKPiAtfTsKPiAtCj4gLWVudW0gewo+IC0JUFBfT0ZGLAo+IC0J UFBfTEVOLAo+IC0JVEVfT0ZGLAo+IC0JVEVfTEVOLAo+IC0JVEUyX09GRiwKPiAtCVRFMl9MRU4s Cj4gLQlQUF9TTEFWRSwKPiAtCURJVEhFUl9PRkYsCj4gLQlESVRIRVJfTEVOLAo+IC0JRElUSEVS X1ZFUiwKPiAtCVBQX1BST1BfTUFYLAo+IC19Owo+IC0KPiAtZW51bSB7Cj4gLQlEU0NfT0ZGLAo+ IC0JRFNDX0xFTiwKPiAtCURTQ19QUk9QX01BWCwKPiAtfTsKPiAtCj4gLWVudW0gewo+IC0JRFNf VE9QX09GRiwKPiAtCURTX1RPUF9MRU4sCj4gLQlEU19UT1BfSU5QVVRfTElORVdJRFRILAo+IC0J RFNfVE9QX09VVFBVVF9MSU5FV0lEVEgsCj4gLQlEU19UT1BfUFJPUF9NQVgsCj4gLX07Cj4gLQo+ IC1lbnVtIHsKPiAtCURTX09GRiwKPiAtCURTX0xFTiwKPiAtCURTX1BST1BfTUFYLAo+IC19Owo+ IC0KPiAtZW51bSB7Cj4gLQlEU1BQX1RPUF9PRkYsCj4gLQlEU1BQX1RPUF9TSVpFLAo+IC0JRFNQ UF9UT1BfUFJPUF9NQVgsCj4gLX07Cj4gLQo+IC1lbnVtIHsKPiAtCURTUFBfT0ZGLAo+IC0JRFNQ UF9TSVpFLAo+IC0JRFNQUF9CTE9DS1MsCj4gLQlEU1BQX1BST1BfTUFYLAo+IC19Owo+IC0KPiAt ZW51bSB7Cj4gLQlEU1BQX0lHQ19QUk9QLAo+IC0JRFNQUF9QQ0NfUFJPUCwKPiAtCURTUFBfR0Nf UFJPUCwKPiAtCURTUFBfSFNJQ19QUk9QLAo+IC0JRFNQUF9NRU1DT0xPUl9QUk9QLAo+IC0JRFNQ UF9TSVhaT05FX1BST1AsCj4gLQlEU1BQX0dBTVVUX1BST1AsCj4gLQlEU1BQX0RJVEhFUl9QUk9Q LAo+IC0JRFNQUF9ISVNUX1BST1AsCj4gLQlEU1BQX1ZMVVRfUFJPUCwKPiAtCURTUFBfQkxPQ0tT X1BST1BfTUFYLAo+IC19Owo+IC0KPiAtZW51bSB7Cj4gLQlBRF9PRkYsCj4gLQlBRF9WRVJTSU9O LAo+IC0JQURfUFJPUF9NQVgsCj4gLX07Cj4gLQo+IC1lbnVtIHsKPiAtCU1JWEVSX09GRiwKPiAt CU1JWEVSX0xFTiwKPiAtCU1JWEVSX1BBSVJfTUFTSywKPiAtCU1JWEVSX0JMT0NLUywKPiAtCU1J WEVSX1BST1BfTUFYLAo+IC19Owo+IC0KPiAtZW51bSB7Cj4gLQlNSVhFUl9HQ19QUk9QLAo+IC0J TUlYRVJfQkxPQ0tTX1BST1BfTUFYLAo+IC19Owo+IC0KPiAtZW51bSB7Cj4gLQlNSVhFUl9CTEVO RF9PUF9PRkYsCj4gLQlNSVhFUl9CTEVORF9QUk9QX01BWCwKPiAtfTsKPiAtCj4gLWVudW0gewo+ IC0JV0JfT0ZGLAo+IC0JV0JfTEVOLAo+IC0JV0JfSUQsCj4gLQlXQl9YSU5fSUQsCj4gLQlXQl9D TEtfQ1RSTCwKPiAtCVdCX1BST1BfTUFYLAo+IC19Owo+IC0KPiAtZW51bSB7Cj4gLQlWQklGX09G RiwKPiAtCVZCSUZfTEVOLAo+IC0JVkJJRl9JRCwKPiAtCVZCSUZfREVGQVVMVF9PVF9SRF9MSU1J VCwKPiAtCVZCSUZfREVGQVVMVF9PVF9XUl9MSU1JVCwKPiAtCVZCSUZfRFlOQU1JQ19PVF9SRF9M SU1JVCwKPiAtCVZCSUZfRFlOQU1JQ19PVF9XUl9MSU1JVCwKPiAtCVZCSUZfUU9TX1JUX1JFTUFQ LAo+IC0JVkJJRl9RT1NfTlJUX1JFTUFQLAo+IC0JVkJJRl9NRU1UWVBFXzAsCj4gLQlWQklGX01F TVRZUEVfMSwKPiAtCVZCSUZfUFJPUF9NQVgsCj4gLX07Cj4gLQo+IC1lbnVtIHsKPiAtCVJFR19E TUFfT0ZGLAo+IC0JUkVHX0RNQV9WRVJTSU9OLAo+IC0JUkVHX0RNQV9UUklHR0VSX09GRiwKPiAt CVJFR19ETUFfUFJPUF9NQVgKPiArLyogRFBVIHRvcCBsZXZlbCBjYXBzICovCj4gK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZHB1X2NhcHMgc2RtODQ1X2RwdV9jYXBzID0gewo+ICsJLm1heF9taXhlcl93 aWR0aCA9IERFRkFVTFRfRFBVX09VVFBVVF9MSU5FX1dJRFRILAo+ICsJLm1heF9taXhlcl9ibGVu ZHN0YWdlcyA9IDB4YiwKPiArCS5xc2VlZF90eXBlID0gRFBVX1NTUFBfU0NBTEVSX1FTRUVEMywK PiArCS5zbWFydF9kbWFfcmV2ID0gRFBVX1NTUFBfU01BUlRfRE1BX1YyLAo+ICsJLnVid2NfdmVy c2lvbiA9IERQVV9IV19VQldDX1ZFUl8yMCwKPiArCS5oYXNfc3JjX3NwbGl0ID0gdHJ1ZSwKPiAr CS5oYXNfZGltX2xheWVyID0gdHJ1ZSwKPiArCS5oYXNfaWRsZV9wYyA9IHRydWUsCj4gK307Cj4g Kwo+ICtzdGF0aWMgc3RydWN0IGRwdV9tZHNzX2Jhc2VfY2ZnIHNkbTg0NV9tZHNzW10gPSB7Cj4g Kwl7Cj4gKwkubmFtZSA9ICJtZHNzXzAiLCAuaWQgPSBNRFBfVE9QLAo+ICsJLmJhc2UgPSAweDAs IC5mZWF0dXJlcyA9IDAKPiArCX0sCj4gK307Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGRwdV9tZHBf Y2ZnIHNkbTg0NV9tZHBbXSA9IHsKPiArCXsKPiArCS5uYW1lID0gInRvcF8wIiwgLmlkID0gTURQ X1RPUCwKPiArCS5iYXNlID0gMHgxMDAwLCAubGVuID0gMHg0NUMsCj4gKwkuZmVhdHVyZXMgPSAw LAo+ICsJLmhpZ2hlc3RfYmFua19iaXQgPSAweDIsCj4gKwkuaGFzX2Rlc3Rfc2NhbGVyID0gdHJ1 ZSwKPiArCS5jbGtfY3RybHNbRFBVX0NMS19DVFJMX1ZJRzBdID0gewo+ICsJCQkucmVnX29mZiA9 IDB4MkFDLCAuYml0X29mZiA9IDB9LAo+ICsJLmNsa19jdHJsc1tEUFVfQ0xLX0NUUkxfVklHMV0g PSB7Cj4gKwkJCS5yZWdfb2ZmID0gMHgyQjQsIC5iaXRfb2ZmID0gMH0sCj4gKwkuY2xrX2N0cmxz W0RQVV9DTEtfQ1RSTF9WSUcyXSA9IHsKPiArCQkJLnJlZ19vZmYgPSAweDJCQywgLmJpdF9vZmYg PSAwfSwKPiArCS5jbGtfY3RybHNbRFBVX0NMS19DVFJMX1ZJRzNdID0gewo+ICsJCQkucmVnX29m ZiA9IDB4MkM0LCAuYml0X29mZiA9IDB9LAo+ICsJLmNsa19jdHJsc1tEUFVfQ0xLX0NUUkxfRE1B MF0gPSB7Cj4gKwkJCS5yZWdfb2ZmID0gMHgyQUMsIC5iaXRfb2ZmID0gOH0sCj4gKwkuY2xrX2N0 cmxzW0RQVV9DTEtfQ1RSTF9ETUExXSA9IHsKPiArCQkJLnJlZ19vZmYgPSAweDJCNCwgLmJpdF9v ZmYgPSA4fSwKPiArCS5jbGtfY3RybHNbRFBVX0NMS19DVFJMX0NVUlNPUjBdID0gewo+ICsJCQku cmVnX29mZiA9IDB4MkJDLCAuYml0X29mZiA9IDh9LAo+ICsJLmNsa19jdHJsc1tEUFVfQ0xLX0NU UkxfQ1VSU09SMV0gPSB7Cj4gKwkJCS5yZWdfb2ZmID0gMHgyQzQsIC5iaXRfb2ZmID0gOH0sCj4g KwkuY2xrX2N0cmxzW0RQVV9DTEtfQ1RSTF9XQjJdID0gewo+ICsJCQkucmVnX29mZiA9IDB4M2I4 LCAuYml0X29mZiA9IDI0fSwKPiArCX0sCj4gIH07Cj4gIAo+ICAvKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgo+IC0gKiBkdHMgcHJv cGVydHkgZGVmaW5pdGlvbgo+ICsgKiBDVEwgc3ViIGJsb2NrcyBjb25maWcKPiAgICoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCj4g LWVudW0gcHJvcF90eXBlIHsKPiAtCVBST1BfVFlQRV9CT09MLAo+IC0JUFJPUF9UWVBFX1UzMiwK PiAtCVBST1BfVFlQRV9VMzJfQVJSQVksCj4gLQlQUk9QX1RZUEVfU1RSSU5HLAo+IC0JUFJPUF9U WVBFX1NUUklOR19BUlJBWSwKPiAtCVBST1BfVFlQRV9CSVRfT0ZGU0VUX0FSUkFZLAo+IC0JUFJP UF9UWVBFX05PREUsCj4gLX07Cj4gLQo+IC1zdHJ1Y3QgZHB1X3Byb3BfdHlwZSB7Cj4gLQkvKiB1 c2UgcHJvcGVydHkgaW5kZXggZnJvbSBlbnVtIHByb3BlcnR5IGZvciByZWFkYWJpbGl0eSBwdXJw b3NlICovCj4gLQl1OCBpZDsKPiAtCS8qIGl0IHNob3VsZCBiZSBwcm9wZXJ0eSBuYW1lIGJhc2Vk IG9uIGR0c2kgZG9jdW1lbnRhdGlvbiAqLwo+IC0JY2hhciAqcHJvcF9uYW1lOwo+IC0JLyoqCj4g LQkgKiBpZiBwcm9wZXJ0eSBpcyBtYXJrZWQgbWFuZGF0b3J5IHRoZW4gaXQgd2lsbCBmYWlsIHBh cnNpbmcKPiAtCSAqIHdoZW4gcHJvcGVydHkgaXMgbm90IHByZXNlbnQKPiAtCSAqLwo+IC0JdTMy ICBpc19tYW5kYXRvcnk7Cj4gLQkvKiBwcm9wZXJ0eSB0eXBlIGJhc2VkIG9uICJlbnVtIHByb3Bf dHlwZSIgICovCj4gLQllbnVtIHByb3BfdHlwZSB0eXBlOwo+IC19Owo+IC0KPiAtc3RydWN0IGRw dV9wcm9wX3ZhbHVlIHsKPiAtCXUzMiB2YWx1ZVtNQVhfRFBVX0hXX0JMS107Cj4gLQl1MzIgYml0 X3ZhbHVlW01BWF9EUFVfSFdfQkxLXVtNQVhfQklUX09GRlNFVF07Cj4gK3N0YXRpYyBzdHJ1Y3Qg ZHB1X2N0bF9jZmcgc2RtODQ1X2N0bFtdID0gewo+ICsJewo+ICsJLm5hbWUgPSAiY3RsXzAiLCAu aWQgPSBDVExfMCwKPiArCS5iYXNlID0gMHgyMDAwLCAubGVuID0gMHhFNCwKPiArCS5mZWF0dXJl cyA9IEJJVChEUFVfQ1RMX1NQTElUX0RJU1BMQVkpIHwKPiArCQlCSVQoRFBVX0NUTF9QSU5HUE9O R19TUExJVCkKPiArCX0sCj4gKwl7Cj4gKwkubmFtZSA9ICJjdGxfMSIsIC5pZCA9IENUTF8xLAo+ ICsJLmJhc2UgPSAweDIyMDAsIC5sZW4gPSAweEU0LAo+ICsJLmZlYXR1cmVzID0gQklUKERQVV9D VExfU1BMSVRfRElTUExBWSkKPiArCX0sCj4gKwl7Cj4gKwkubmFtZSA9ICJjdGxfMiIsIC5pZCA9 IENUTF8yLAo+ICsJLmJhc2UgPSAweDI0MDAsIC5sZW4gPSAweEU0LAo+ICsJLmZlYXR1cmVzID0g MAo+ICsJfSwKPiArCXsKPiArCS5uYW1lID0gImN0bF8zIiwgLmlkID0gQ1RMXzMsCj4gKwkuYmFz ZSA9IDB4MjYwMCwgLmxlbiA9IDB4RTQsCj4gKwkuZmVhdHVyZXMgPSAwCj4gKwl9LAo+ICsJewo+ ICsJLm5hbWUgPSAiY3RsXzQiLCAuaWQgPSBDVExfNCwKPiArCS5iYXNlID0gMHgyODAwLCAubGVu ID0gMHhFNCwKPiArCS5mZWF0dXJlcyA9IDAKPiArCX0sCj4gIH07Cj4gIAo+ICAvKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgo+IC0g KiBkdHMgcHJvcGVydHkgbGlzdAo+ICsgKiBTU1BQIHN1YiBibG9ja3MgY29uZmlnCj4gICAqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Lwo+IC1zdGF0aWMgc3RydWN0IGRwdV9wcm9wX3R5cGUgZHB1X3Byb3BbXSA9IHsKPiAtCXtEUFVf T0ZGLCAicWNvbSxkcHUtb2ZmIiwgdHJ1ZSwgUFJPUF9UWVBFX1UzMn0sCj4gLQl7RFBVX0xFTiwg InFjb20sZHB1LWxlbiIsIGZhbHNlLCBQUk9QX1RZUEVfVTMyfSwKPiAtCXtTU1BQX0xJTkVXSURU SCwgInFjb20sZHB1LXNzcHAtbGluZXdpZHRoIiwgZmFsc2UsIFBST1BfVFlQRV9VMzJ9LAo+IC0J e01JWEVSX0xJTkVXSURUSCwgInFjb20sZHB1LW1peGVyLWxpbmV3aWR0aCIsIGZhbHNlLCBQUk9Q X1RZUEVfVTMyfSwKPiAtCXtNSVhFUl9CTEVORCwgInFjb20sZHB1LW1peGVyLWJsZW5kc3RhZ2Vz IiwgZmFsc2UsIFBST1BfVFlQRV9VMzJ9LAo+IC0Je1dCX0xJTkVXSURUSCwgInFjb20sZHB1LXdi LWxpbmV3aWR0aCIsIGZhbHNlLCBQUk9QX1RZUEVfVTMyfSwKPiAtCXtCQU5LX0JJVCwgInFjb20s ZHB1LWhpZ2hlc3QtYmFuay1iaXQiLCBmYWxzZSwgUFJPUF9UWVBFX1UzMn0sCj4gLQl7VUJXQ19W RVJTSU9OLCAicWNvbSxkcHUtdWJ3Yy12ZXJzaW9uIiwgZmFsc2UsIFBST1BfVFlQRV9VMzJ9LAo+ IC0Je1VCV0NfU1RBVElDLCAicWNvbSxkcHUtdWJ3Yy1zdGF0aWMiLCBmYWxzZSwgUFJPUF9UWVBF X1UzMn0sCj4gLQl7VUJXQ19TV0laWkxFLCAicWNvbSxkcHUtdWJ3Yy1zd2l6emxlIiwgZmFsc2Us IFBST1BfVFlQRV9VMzJ9LAo+IC0Je1FTRUVEX1RZUEUsICJxY29tLGRwdS1xc2VlZC10eXBlIiwg ZmFsc2UsIFBST1BfVFlQRV9TVFJJTkd9LAo+IC0Je0NTQ19UWVBFLCAicWNvbSxkcHUtY3NjLXR5 cGUiLCBmYWxzZSwgUFJPUF9UWVBFX1NUUklOR30sCj4gLQl7UEFOSUNfUEVSX1BJUEUsICJxY29t LGRwdS1wYW5pYy1wZXItcGlwZSIsIGZhbHNlLCBQUk9QX1RZUEVfQk9PTH0sCj4gLQl7U1JDX1NQ TElULCAicWNvbSxkcHUtaGFzLXNyYy1zcGxpdCIsIGZhbHNlLCBQUk9QX1RZUEVfQk9PTH0sCj4g LQl7RElNX0xBWUVSLCAicWNvbSxkcHUtaGFzLWRpbS1sYXllciIsIGZhbHNlLCBQUk9QX1RZUEVf Qk9PTH0sCj4gLQl7U01BUlRfRE1BX1JFViwgInFjb20sZHB1LXNtYXJ0LWRtYS1yZXYiLCBmYWxz ZSwgUFJPUF9UWVBFX1NUUklOR30sCj4gLQl7SURMRV9QQywgInFjb20sZHB1LWhhcy1pZGxlLXBj IiwgZmFsc2UsIFBST1BfVFlQRV9CT09MfSwKPiAtCXtERVNUX1NDQUxFUiwgInFjb20sZHB1LWhh cy1kZXN0LXNjYWxlciIsIGZhbHNlLCBQUk9QX1RZUEVfQk9PTH0sCj4gLX07Cj4gLQo+IC1zdGF0 aWMgc3RydWN0IGRwdV9wcm9wX3R5cGUgZHB1X3BlcmZfcHJvcFtdID0gewo+IC0Je1BFUkZfTUFY X0JXX0xPVywgInFjb20sZHB1LW1heC1idy1sb3cta2JwcyIsIGZhbHNlLCBQUk9QX1RZUEVfVTMy fSwKPiAtCXtQRVJGX01BWF9CV19ISUdILCAicWNvbSxkcHUtbWF4LWJ3LWhpZ2gta2JwcyIsIGZh bHNlLCBQUk9QX1RZUEVfVTMyfSwKPiAtCXtQRVJGX01JTl9DT1JFX0lCLCAicWNvbSxkcHUtbWlu LWNvcmUtaWIta2JwcyIsIGZhbHNlLCBQUk9QX1RZUEVfVTMyfSwKPiAtCXtQRVJGX01JTl9MTEND X0lCLCAicWNvbSxkcHUtbWluLWxsY2MtaWIta2JwcyIsIGZhbHNlLCBQUk9QX1RZUEVfVTMyfSwK PiAtCXtQRVJGX01JTl9EUkFNX0lCLCAicWNvbSxkcHUtbWluLWRyYW0taWIta2JwcyIsIGZhbHNl LCBQUk9QX1RZUEVfVTMyfSwKPiAtCXtQRVJGX0NPUkVfSUJfRkYsICJxY29tLGRwdS1jb3JlLWli LWZmIiwgZmFsc2UsIFBST1BfVFlQRV9TVFJJTkd9LAo+IC0Je1BFUkZfQ09SRV9DTEtfRkYsICJx Y29tLGRwdS1jb3JlLWNsay1mZiIsIGZhbHNlLCBQUk9QX1RZUEVfU1RSSU5HfSwKPiAtCXtQRVJG X0NPTVBfUkFUSU9fUlQsICJxY29tLGRwdS1jb21wLXJhdGlvLXJ0IiwgZmFsc2UsCj4gLQkJCVBS T1BfVFlQRV9TVFJJTkd9LAo+IC0Je1BFUkZfQ09NUF9SQVRJT19OUlQsICJxY29tLGRwdS1jb21w LXJhdGlvLW5ydCIsIGZhbHNlLAo+IC0JCQlQUk9QX1RZUEVfU1RSSU5HfSwKPiAtCXtQRVJGX1VO REVSU0laRURfUFJFRklMTF9MSU5FUywgInFjb20sZHB1LXVuZGVyc2l6ZWRwcmVmaWxsLWxpbmVz IiwKPiAtCQkJZmFsc2UsIFBST1BfVFlQRV9VMzJ9LAo+IC0Je1BFUkZfREVTVF9TQ0FMRV9QUkVG SUxMX0xJTkVTLCAicWNvbSxkcHUtZGVzdC1zY2FsZXByZWZpbGwtbGluZXMiLAo+IC0JCQlmYWxz ZSwgUFJPUF9UWVBFX1UzMn0sCj4gLQl7UEVSRl9NQUNST1RJTEVfUFJFRklMTF9MSU5FUywgInFj b20sZHB1LW1hY3JvdGlsZXByZWZpbGwtbGluZXMiLAo+IC0JCQlmYWxzZSwgUFJPUF9UWVBFX1Uz Mn0sCj4gLQl7UEVSRl9ZVVZfTlYxMl9QUkVGSUxMX0xJTkVTLCAicWNvbSxkcHUteXV2LW52MTJw cmVmaWxsLWxpbmVzIiwKPiAtCQkJZmFsc2UsIFBST1BfVFlQRV9VMzJ9LAo+IC0Je1BFUkZfTElO RUFSX1BSRUZJTExfTElORVMsICJxY29tLGRwdS1saW5lYXJwcmVmaWxsLWxpbmVzIiwKPiAtCQkJ ZmFsc2UsIFBST1BfVFlQRV9VMzJ9LAo+IC0Je1BFUkZfRE9XTlNDQUxJTkdfUFJFRklMTF9MSU5F UywgInFjb20sZHB1LWRvd25zY2FsaW5ncHJlZmlsbC1saW5lcyIsCj4gLQkJCWZhbHNlLCBQUk9Q X1RZUEVfVTMyfSwKPiAtCXtQRVJGX1hUUkFfUFJFRklMTF9MSU5FUywgInFjb20sZHB1LXh0cmEt cHJlZmlsbC1saW5lcyIsCj4gLQkJCWZhbHNlLCBQUk9QX1RZUEVfVTMyfSwKPiAtCXtQRVJGX0FN T1JUSVpBQkxFX1RIUkVTSE9MRCwgInFjb20sZHB1LWFtb3J0aXphYmxlLXRocmVzaG9sZCIsCj4g LQkJCWZhbHNlLCBQUk9QX1RZUEVfVTMyfSwKPiAtCXtQRVJGX0RBTkdFUl9MVVQsICJxY29tLGRw dS1kYW5nZXItbHV0IiwgZmFsc2UsIFBST1BfVFlQRV9VMzJfQVJSQVl9LAo+IC0Je1BFUkZfU0FG RV9MVVQsICJxY29tLGRwdS1zYWZlLWx1dCIsIGZhbHNlLCBQUk9QX1RZUEVfVTMyX0FSUkFZfSwK PiAtCXtQRVJGX1FPU19MVVRfTElORUFSLCAicWNvbSxkcHUtcW9zLWx1dC1saW5lYXIiLCBmYWxz ZSwKPiAtCQkJUFJPUF9UWVBFX1UzMl9BUlJBWX0sCj4gLQl7UEVSRl9RT1NfTFVUX01BQ1JPVElM RSwgInFjb20sZHB1LXFvcy1sdXQtbWFjcm90aWxlIiwgZmFsc2UsCj4gLQkJCVBST1BfVFlQRV9V MzJfQVJSQVl9LAo+IC0Je1BFUkZfUU9TX0xVVF9OUlQsICJxY29tLGRwdS1xb3MtbHV0LW5ydCIs IGZhbHNlLAo+IC0JCQlQUk9QX1RZUEVfVTMyX0FSUkFZfSwKPiAtCXtQRVJGX1FPU19MVVRfQ1dC LCAicWNvbSxkcHUtcW9zLWx1dC1jd2IiLCBmYWxzZSwKPiAtCQkJUFJPUF9UWVBFX1UzMl9BUlJB WX0sCj4gLQl7UEVSRl9DRFBfU0VUVElORywgInFjb20sZHB1LWNkcC1zZXR0aW5nIiwgZmFsc2Us Cj4gLQkJCVBST1BfVFlQRV9VMzJfQVJSQVl9LAo+IC19Owo+IC0KPiAtc3RhdGljIHN0cnVjdCBk cHVfcHJvcF90eXBlIHNzcHBfcHJvcFtdID0gewo+IC0Je1NTUFBfT0ZGLCAicWNvbSxkcHUtc3Nw cC1vZmYiLCB0cnVlLCBQUk9QX1RZUEVfVTMyX0FSUkFZfSwKPiAtCXtTU1BQX1NJWkUsICJxY29t LGRwdS1zc3BwLXNyYy1zaXplIiwgZmFsc2UsIFBST1BfVFlQRV9VMzJ9LAo+IC0Je1NTUFBfVFlQ RSwgInFjb20sZHB1LXNzcHAtdHlwZSIsIHRydWUsIFBST1BfVFlQRV9TVFJJTkdfQVJSQVl9LAo+ IC0Je1NTUFBfWElOLCAicWNvbSxkcHUtc3NwcC14aW4taWQiLCB0cnVlLCBQUk9QX1RZUEVfVTMy X0FSUkFZfSwKPiAtCXtTU1BQX0NMS19DVFJMLCAicWNvbSxkcHUtc3NwcC1jbGstY3RybCIsIGZh bHNlLAo+IC0JCVBST1BfVFlQRV9CSVRfT0ZGU0VUX0FSUkFZfSwKPiAtCXtTU1BQX0NMS19TVEFU VVMsICJxY29tLGRwdS1zc3BwLWNsay1zdGF0dXMiLCBmYWxzZSwKPiAtCQlQUk9QX1RZUEVfQklU X09GRlNFVF9BUlJBWX0sCj4gLQl7U1NQUF9TQ0FMRV9TSVpFLCAicWNvbSxkcHUtc3NwcC1zY2Fs ZS1zaXplIiwgZmFsc2UsIFBST1BfVFlQRV9VMzJ9LAo+IC0Je1NTUFBfVklHX0JMT0NLUywgInFj b20sZHB1LXNzcHAtdmlnLWJsb2NrcyIsIGZhbHNlLCBQUk9QX1RZUEVfTk9ERX0sCj4gLQl7U1NQ UF9SR0JfQkxPQ0tTLCAicWNvbSxkcHUtc3NwcC1yZ2ItYmxvY2tzIiwgZmFsc2UsIFBST1BfVFlQ RV9OT0RFfSwKPiAtCXtTU1BQX0VYQ0xfUkVDVCwgInFjb20sZHB1LXNzcHAtZXhjbC1yZWN0Iiwg ZmFsc2UsIFBST1BfVFlQRV9VMzJfQVJSQVl9LAo+IC0Je1NTUFBfU01BUlRfRE1BLCAicWNvbSxk cHUtc3NwcC1zbWFydC1kbWEtcHJpb3JpdHkiLCBmYWxzZSwKPiAtCQlQUk9QX1RZUEVfVTMyX0FS UkFZfSwKPiAtCXtTU1BQX01BWF9QRVJfUElQRV9CVywgInFjb20sZHB1LW1heC1wZXItcGlwZS1i dy1rYnBzIiwgZmFsc2UsCj4gLQkJUFJPUF9UWVBFX1UzMl9BUlJBWX0sCj4gLX07Cj4gIAo+IC1z dGF0aWMgc3RydWN0IGRwdV9wcm9wX3R5cGUgdmlnX3Byb3BbXSA9IHsKPiAtCXtWSUdfUVNFRURf T0ZGLCAicWNvbSxkcHUtdmlnLXFzZWVkLW9mZiIsIGZhbHNlLCBQUk9QX1RZUEVfVTMyfSwKPiAt CXtWSUdfUVNFRURfTEVOLCAicWNvbSxkcHUtdmlnLXFzZWVkLXNpemUiLCBmYWxzZSwgUFJPUF9U WVBFX1UzMn0sCj4gLQl7VklHX0NTQ19PRkYsICJxY29tLGRwdS12aWctY3NjLW9mZiIsIGZhbHNl LCBQUk9QX1RZUEVfVTMyfSwKPiAtCXtWSUdfSFNJQ19QUk9QLCAicWNvbSxkcHUtdmlnLWhzaWMi LCBmYWxzZSwgUFJPUF9UWVBFX1UzMl9BUlJBWX0sCj4gLQl7VklHX01FTUNPTE9SX1BST1AsICJx Y29tLGRwdS12aWctbWVtY29sb3IiLCBmYWxzZSwKPiAtCQlQUk9QX1RZUEVfVTMyX0FSUkFZfSwK PiAtCXtWSUdfUENDX1BST1AsICJxY29tLGRwdS12aWctcGNjIiwgZmFsc2UsIFBST1BfVFlQRV9V MzJfQVJSQVl9LAo+ICsvKiBTU1BQIGNvbW1vbiBjb25maWd1cmF0aW9uICovCj4gK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZHB1X3NzcHBfYmxrc19jb21tb24gc2RtODQ1X3NzcHBfY29tbW9uID0gewo+ ICsJLm1heGxpbmV3aWR0aCA9IERFRkFVTFRfRFBVX09VVFBVVF9MSU5FX1dJRFRILAo+ICsJLnBp eGVsX3JhbV9zaXplID0gREVGQVVMVF9QSVhFTF9SQU1fU0laRSwKPiArCS5tYXhoZGVjaWV4cCA9 IE1BWF9IT1JaX0RFQ0lNQVRJT04sCj4gKwkubWF4dmRlY2lleHAgPSBNQVhfVkVSVF9ERUNJTUFU SU9OLAo+ICt9Owo+ICsKPiArI2RlZmluZSBfVklHX1NCTEsobnVtLCBzZG1hX3ByaSkgXAo+ICsJ eyBcCj4gKwkuY29tbW9uID0gJnNkbTg0NV9zc3BwX2NvbW1vbiwgXAo+ICsJLm1heGR3bnNjYWxl ID0gTUFYX0RPV05TQ0FMRV9SQVRJTywgXAo+ICsJLm1heHVwc2NhbGUgPSBNQVhfVVBTQ0FMRV9S QVRJTywgXAo+ICsJLnNtYXJ0X2RtYV9wcmlvcml0eSA9IHNkbWFfcHJpLCBcCj4gKwkuc3JjX2Js ayA9IHsubmFtZSA9IFNUUkNBVCgic3NwcF9zcmNfIiwgbnVtKSwgXAo+ICsJCS5pZCA9IERQVV9T U1BQX1NSQywgLmJhc2UgPSAweDAwLCAubGVuID0gMHgxNTAsfSwgXAo+ICsJLnNjYWxlcl9ibGsg PSB7Lm5hbWUgPSBTVFJDQVQoInNzcHBfc2NhbGVyIiwgbnVtKSwgXAo+ICsJCS5pZCA9IERQVV9T U1BQX1NDQUxFUl9RU0VFRDMsIFwKPiArCQkuYmFzZSA9IDB4YTAwLCAubGVuID0gMHhhMCx9LCBc Cj4gKwkuY3NjX2JsayA9IHsubmFtZSA9IFNUUkNBVCgic3NwcF9jc2MiLCBudW0pLCBcCj4gKwkJ LmlkID0gRFBVX1NTUFBfQ1NDXzEwQklULCBcCj4gKwkJLmJhc2UgPSAweDFhMDAsIC5sZW4gPSAw eDEwMCx9LCBcCj4gKwkuZm9ybWF0X2xpc3QgPSBwbGFuZV9mb3JtYXRzX3l1diwgXAo+ICsJLnZp cnRfZm9ybWF0X2xpc3QgPSBwbGFuZV9mb3JtYXRzLCBcCj4gKwl9Cj4gKwo+ICsjZGVmaW5lIF9E TUFfU0JMSyhudW0sIHNkbWFfcHJpKSBcCj4gKwl7IFwKPiArCS5jb21tb24gPSAmc2RtODQ1X3Nz cHBfY29tbW9uLCBcCj4gKwkubWF4ZHduc2NhbGUgPSBTU1BQX1VOSVRZX1NDQUxFLCBcCj4gKwku bWF4dXBzY2FsZSA9IFNTUFBfVU5JVFlfU0NBTEUsIFwKPiArCS5zbWFydF9kbWFfcHJpb3JpdHkg PSBzZG1hX3ByaSwgXAo+ICsJLnNyY19ibGsgPSB7Lm5hbWUgPSBTVFJDQVQoInNzcHBfc3JjXyIs IG51bSksIFwKPiArCQkuaWQgPSBEUFVfU1NQUF9TUkMsIC5iYXNlID0gMHgwMCwgLmxlbiA9IDB4 MTUwLH0sIFwKPiArCS5mb3JtYXRfbGlzdCA9IHBsYW5lX2Zvcm1hdHMsIFwKPiArCS52aXJ0X2Zv cm1hdF9saXN0ID0gcGxhbmVfZm9ybWF0cywgXAo+ICsJfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0 cnVjdCBkcHVfc3NwcF9zdWJfYmxrcyBzZG04NDVfdmlnX3NibGtfMCA9IF9WSUdfU0JMSygiMCIs IDUpOwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRwdV9zc3BwX3N1Yl9ibGtzIHNkbTg0NV92aWdf c2Jsa18xID0gX1ZJR19TQkxLKCIxIiwgNik7Cj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHB1X3Nz cHBfc3ViX2Jsa3Mgc2RtODQ1X3ZpZ19zYmxrXzIgPSBfVklHX1NCTEsoIjIiLCA3KTsKPiArc3Rh dGljIGNvbnN0IHN0cnVjdCBkcHVfc3NwcF9zdWJfYmxrcyBzZG04NDVfdmlnX3NibGtfMyA9IF9W SUdfU0JMSygiMyIsIDgpOwo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcHVfc3NwcF9zdWJf YmxrcyBzZG04NDVfZG1hX3NibGtfMCA9IF9ETUFfU0JMSygiOCIsIDEpOwo+ICtzdGF0aWMgY29u c3Qgc3RydWN0IGRwdV9zc3BwX3N1Yl9ibGtzIHNkbTg0NV9kbWFfc2Jsa18xID0gX0RNQV9TQkxL KCI5IiwgMik7Cj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHB1X3NzcHBfc3ViX2Jsa3Mgc2RtODQ1 X2RtYV9zYmxrXzIgPSBfRE1BX1NCTEsoIjEwIiwgMyk7Cj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg ZHB1X3NzcHBfc3ViX2Jsa3Mgc2RtODQ1X2RtYV9zYmxrXzMgPSBfRE1BX1NCTEsoIjExIiwgNCk7 Cj4gKwo+ICsjZGVmaW5lIFNTUFBfVklHX0JMSyhfbmFtZSwgX2lkLCBfYmFzZSwgX3NibGssIF94 aW5pZCwgX2Nsa2N0cmwpIFwKPiArCXsgXAo+ICsJLm5hbWUgPSBfbmFtZSwgLmlkID0gX2lkLCBc Cj4gKwkuYmFzZSA9IF9iYXNlLCAubGVuID0gMHgxYzgsIFwKPiArCS5mZWF0dXJlcyA9IFZJR19T RE04NDVfTUFTSywgXAo+ICsJLnNibGsgPSAmX3NibGssIFwKPiArCS54aW5faWQgPSBfeGluaWQs IFwKPiArCS50eXBlID0gU1NQUF9UWVBFX1ZJRywgXAo+ICsJLmNsa19jdHJsID0gX2Nsa2N0cmwg XAo+ICsJfQo+ICsKPiArI2RlZmluZSBTU1BQX0RNQV9CTEsoX25hbWUsIF9pZCwgX2Jhc2UsIF9z YmxrLCBfeGluaWQsIF9jbGtjdHJsKSBcCj4gKwl7IFwKPiArCS5uYW1lID0gX25hbWUsIC5pZCA9 IF9pZCwgXAo+ICsJLmJhc2UgPSBfYmFzZSwgLmxlbiA9IDB4MWM4LCBcCj4gKwkuZmVhdHVyZXMg PSBETUFfU0RNODQ1X01BU0ssIFwKPiArCS5zYmxrID0gJl9zYmxrLCBcCj4gKwkueGluX2lkID0g X3hpbmlkLCBcCj4gKwkudHlwZSA9IFNTUFBfVFlQRV9ETUEsIFwKPiArCS5jbGtfY3RybCA9IF9j bGtjdHJsIFwKPiArCX0KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZHB1X3NzcHBfY2ZnIHNkbTg0NV9z c3BwW10gPSB7Cj4gKwlTU1BQX1ZJR19CTEsoInNzcHBfMCIsIFNTUFBfVklHMCwgMHg1MDAwLAo+ ICsJCXNkbTg0NV92aWdfc2Jsa18wLCAwLCBEUFVfQ0xLX0NUUkxfVklHMCksCj4gKwlTU1BQX1ZJ R19CTEsoInNzcHBfMSIsIFNTUFBfVklHMSwgMHg3MDAwLAo+ICsJCXNkbTg0NV92aWdfc2Jsa18x LCA0LCBEUFVfQ0xLX0NUUkxfVklHMSksCj4gKwlTU1BQX1ZJR19CTEsoInNzcHBfMiIsIFNTUFBf VklHMiwgMHg5MDAwLAo+ICsJCXNkbTg0NV92aWdfc2Jsa18yLCA4LCBEUFVfQ0xLX0NUUkxfVklH MiksCj4gKwlTU1BQX1ZJR19CTEsoInNzcHBfMyIsIFNTUFBfVklHMywgMHhiMDAwLAo+ICsJCXNk bTg0NV92aWdfc2Jsa18zLCAxMiwgRFBVX0NMS19DVFJMX1ZJRzMpLAo+ICsJU1NQUF9ETUFfQkxL KCJzc3BwXzgiLCBTU1BQX0RNQTAsIDB4MjUwMDAsCj4gKwkJc2RtODQ1X2RtYV9zYmxrXzAsIDEs IERQVV9DTEtfQ1RSTF9ETUEwKSwKPiArCVNTUFBfRE1BX0JMSygic3NwcF85IiwgU1NQUF9ETUEx LCAweDI3MDAwLAo+ICsJCXNkbTg0NV9kbWFfc2Jsa18xLCA1LCBEUFVfQ0xLX0NUUkxfRE1BMSks Cj4gKwlTU1BQX0RNQV9CTEsoInNzcHBfMTAiLCBTU1BQX0RNQTIsIDB4MjkwMDAsCj4gKwkJc2Rt ODQ1X2RtYV9zYmxrXzIsIDksIERQVV9DTEtfQ1RSTF9DVVJTT1IwKSwKPiArCVNTUFBfRE1BX0JM Sygic3NwcF8xMSIsIFNTUFBfRE1BMywgMHgyYjAwMCwKPiArCQlzZG04NDVfZG1hX3NibGtfMywg MTMsIERQVV9DTEtfQ1RSTF9DVVJTT1IxKSwKPiAgfTsKPiAgCj4gLXN0YXRpYyBzdHJ1Y3QgZHB1 X3Byb3BfdHlwZSByZ2JfcHJvcFtdID0gewo+IC0Je1JHQl9TQ0FMRVJfT0ZGLCAicWNvbSxkcHUt cmdiLXNjYWxlci1vZmYiLCBmYWxzZSwgUFJPUF9UWVBFX1UzMn0sCj4gLQl7UkdCX1NDQUxFUl9M RU4sICJxY29tLGRwdS1yZ2Itc2NhbGVyLXNpemUiLCBmYWxzZSwgUFJPUF9UWVBFX1UzMn0sCj4g LQl7UkdCX1BDQ19QUk9QLCAicWNvbSxkcHUtcmdiLXBjYyIsIGZhbHNlLCBQUk9QX1RZUEVfVTMy X0FSUkFZfSwKPiAtfTsKPiAtCj4gLXN0YXRpYyBzdHJ1Y3QgZHB1X3Byb3BfdHlwZSBjdGxfcHJv cFtdID0gewo+IC0Je0hXX09GRiwgInFjb20sZHB1LWN0bC1vZmYiLCB0cnVlLCBQUk9QX1RZUEVf VTMyX0FSUkFZfSwKPiAtCXtIV19MRU4sICJxY29tLGRwdS1jdGwtc2l6ZSIsIGZhbHNlLCBQUk9Q X1RZUEVfVTMyfSwKPiArLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioKPiArICogTUlYRVIgc3ViIGJsb2NrcyBjb25maWcKPiArICoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHB1X2xtX3N1Yl9ibGtzIHNkbTg0NV9sbV9zYmxr ID0gewo+ICsJLm1heHdpZHRoID0gREVGQVVMVF9EUFVfT1VUUFVUX0xJTkVfV0lEVEgsCj4gKwku bWF4YmxlbmRzdGFnZXMgPSAxMSwgLyogZXhjbHVkaW5nIGJhc2UgbGF5ZXIgKi8KPiArCS5ibGVu ZHN0YWdlX2Jhc2UgPSB7IC8qIG9mZnNldHMgcmVsYXRpdmUgdG8gbWl4ZXIgYmFzZSAqLwo+ICsJ CTB4MjAsIDB4MzgsIDB4NTAsIDB4NjgsIDB4ODAsIDB4OTgsCj4gKwkJMHhiMCwgMHhjOCwgMHhl MCwgMHhmOCwgMHgxMTAKPiArCX0sCj4gK307Cj4gKwo+ICsjZGVmaW5lIExNX0JMSyhfbmFtZSwg X2lkLCBfYmFzZSwgX2RzcHAsIF9kcywgX3BwLCBfbG1wYWlyKSBcCj4gKwl7IFwKPiArCS5uYW1l ID0gX25hbWUsIC5pZCA9IF9pZCwgXAo+ICsJLmJhc2UgPSBfYmFzZSwgLmxlbiA9IDB4MzIwLCBc Cj4gKwkuZmVhdHVyZXMgPSBNSVhFUl9TRE04NDVfTUFTSywgXAo+ICsJLnNibGsgPSAmc2RtODQ1 X2xtX3NibGssIFwKPiArCS5kc3BwID0gX2RzcHAsIC5kcyA9IF9kcywgXAo+ICsJLnBpbmdwb25n ID0gX3BwLCBcCj4gKwkubG1fcGFpcl9tYXNrID0gKDEgPDwgX2xtcGFpcikgXAo+ICsJfQo+ICtz dGF0aWMgc3RydWN0IGRwdV9sbV9jZmcgc2RtODQ1X2xtW10gPSB7Cj4gKwlMTV9CTEsoImxtXzAi LCBMTV8wLCAweDQ1MDAwLCBEU1BQXzAsCj4gKwkJRFNfMCwgUElOR1BPTkdfMCwgTE1fMSksCj4g KwlMTV9CTEsoImxtXzEiLCBMTV8xLCAweDQ2MDAwLCBEU1BQXzEsCj4gKwkJRFNfMSwgUElOR1BP TkdfMSwgTE1fMCksCj4gKwlMTV9CTEsoImxtXzIiLCBMTV8yLCAweDQ3MDAwLCBEU1BQXzIsCj4g KwkJRFNfTUFYLCBQSU5HUE9OR18yLCBMTV81KSwKPiArCUxNX0JMSygibG1fMyIsIExNXzMsIDB4 MCwgRFNQUF9NQVgsCj4gKwkJRFNfTUFYLCBQSU5HUE9OR19NQVgsIDApLAo+ICsJTE1fQkxLKCJs bV80IiwgTE1fNCwgMHgwLCBEU1BQX01BWCwKPiArCQlEU19NQVgsIFBJTkdQT05HX01BWCwgMCks Cj4gKwlMTV9CTEsoImxtXzUiLCBMTV81LCAweDRhMDAwLCBEU1BQXzMsCj4gKwkJRFNfTUFYLCBQ SU5HUE9OR18zLCBMTV8yKSwKPiAgfTsKPiAgCj4gLXN0cnVjdCBkcHVfcHJvcF90eXBlIG1peGVy X2JsZW5kX3Byb3BbXSA9IHsKPiAtCXtNSVhFUl9CTEVORF9PUF9PRkYsICJxY29tLGRwdS1taXhl ci1ibGVuZC1vcC1vZmYiLCB0cnVlLAo+IC0JCVBST1BfVFlQRV9VMzJfQVJSQVl9LAo+ICsvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Kgo+ICsgKiBEU1BQIHN1YiBibG9ja3MgY29uZmlnCj4gKyAqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwo+ICtzdGF0aWMgc3RydWN0 IGRwdV9kc3BwX3RvcF9jZmcgc2RtODQ1X2RzcHBfdG9wID0gewo+ICsJLm5hbWUgPSAiZHNwcF90 b3AiLCAuYmFzZSA9IDB4MTMwMCwgLmxlbiA9IDB4Ywo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0 IHN0cnVjdCBkcHVfZHNwcF9zdWJfYmxrcyBzZG04NDVfZHNwcF9zYmxrID0gewo+ICsJLmlnYyA9 IHsuaWQgPSBEUFVfRFNQUF9JR0MsIC5iYXNlID0gMHgwLAo+ICsJCS5sZW4gPSAweDAsIC52ZXJz aW9uID0gMHgzMDAwMX0sCj4gKwkucGNjID0gey5pZCA9IERQVV9EU1BQX1BDQywgLmJhc2UgPSAw eDE3MDAsCj4gKwkJLmxlbiA9IDB4MCwgLnZlcnNpb24gPSAweDQwMDAwfSwKPiArCS5nYyA9IHsu aWQgPSBEUFVfRFNQUF9HQywgLmJhc2UgPSAweDE3YzAsCj4gKwkJLmxlbiA9IDB4MCwgLnZlcnNp b24gPSAweDEwMDA4fSwKPiArCS5oc2ljID0gey5pZCA9IERQVV9EU1BQX0hTSUMsIC5iYXNlID0g MHg4MDAsCj4gKwkJLmxlbiA9IDB4MCwgLnZlcnNpb24gPSAweDEwMDA3fSwKPiArCS5tZW1jb2xv ciA9IHsuaWQgPSBEUFVfRFNQUF9NRU1DT0xPUiwgLmJhc2UgPSAweDg4MCwKPiArCQkubGVuID0g MHgwLCAudmVyc2lvbiA9IDB4MTAwMDd9LAo+ICsJLnNpeHpvbmUgPSB7LmlkID0gRFBVX0RTUFBf U0lYWk9ORSwgLmJhc2UgPSAweDkwMCwKPiArCQkubGVuID0gMHgwLCAudmVyc2lvbiA9IDB4MTAw MDd9LAo+ICsJLmdhbXV0ID0gey5pZCA9IERQVV9EU1BQX0dBTVVULCAuYmFzZSA9IDB4MTAwMCwK PiArCQkubGVuID0gMHgwLCAudmVyc2lvbiA9IDB4NDAwMDB9LAo+ICsJLmhpc3QgPSB7LmlkID0g RFBVX0RTUFBfSElTVCwgLmJhc2UgPSAweDgwMCwKPiArCQkubGVuID0gMHgwLCAudmVyc2lvbiA9 IDB4MTAwMDd9LAo+ICsJLyogVE9ETyA6IE1vdmUgQUQgb3V0IG9mIERTUFAgY29uZmlnICovCj4g Kwkudmx1dCA9IHsuaWQgPSBEUFVfRFNQUF9WTFVULCAuYmFzZSA9IDB4YTAwLAo+ICsJCS5sZW4g PSAweDAsIC52ZXJzaW9uID0gMHgxMDAwOH0sCj4gK307Cj4gKwo+ICsjZGVmaW5lIERTUFBfQkxL KF9uYW1lLCBfaWQsIF9iYXNlKSBcCj4gKwl7XAo+ICsJLm5hbWUgPSBfbmFtZSwgLmlkID0gX2lk LCBcCj4gKwkuYmFzZSA9IF9iYXNlLCAubGVuID0gMHgxN2UwLCBcCj4gKwkuZmVhdHVyZXMgPSBE U1BQX1NETTg0NV9NQVNLLCBcCj4gKwkuc2JsayA9ICZzZG04NDVfZHNwcF9zYmxrLCBcCj4gKwl9 Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGRwdV9kc3BwX2NmZyBzZG04NDVfZHNwcFtdID0gewo+ICsJ RFNQUF9CTEsoImRzcHBfMCIsIERTUFBfMCwgMHg1NTAwMCksCj4gKwlEU1BQX0JMSygiZHNwcF8x IiwgRFNQUF8xLCAweDU3MDAwKSwKPiArCURTUFBfQkxLKCJkc3BwXzIiLCBEU1BQXzIsIDB4NTkw MDApLAo+ICsJRFNQUF9CTEsoImRzcHBfMyIsIERTUFBfMywgMHg1YjAwMCksCj4gIH07Cj4gIAo+ IC1zdGF0aWMgc3RydWN0IGRwdV9wcm9wX3R5cGUgbWl4ZXJfcHJvcFtdID0gewo+IC0Je01JWEVS X09GRiwgInFjb20sZHB1LW1peGVyLW9mZiIsIHRydWUsIFBST1BfVFlQRV9VMzJfQVJSQVl9LAo+ IC0Je01JWEVSX0xFTiwgInFjb20sZHB1LW1peGVyLXNpemUiLCBmYWxzZSwgUFJPUF9UWVBFX1Uz Mn0sCj4gLQl7TUlYRVJfUEFJUl9NQVNLLCAicWNvbSxkcHUtbWl4ZXItcGFpci1tYXNrIiwgdHJ1 ZSwKPiAtCQlQUk9QX1RZUEVfVTMyX0FSUkFZfSwKPiAtCXtNSVhFUl9CTE9DS1MsICJxY29tLGRw dS1taXhlci1ibG9ja3MiLCBmYWxzZSwgUFJPUF9UWVBFX05PREV9LAo+ICsvKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgo+ICsgKiBE UyBzdWIgYmxvY2tzIGNvbmZpZwo+ICsgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcHVf ZHNfdG9wX2NmZyBzZG04NDVfZHNfdG9wID0gewo+ICsJLm5hbWUgPSAiZHNfdG9wXzAiLCAuaWQg PSBEU19UT1AsCj4gKwkuYmFzZSA9IDB4NjEwMDAsIC5sZW4gPSAweGMsCj4gKwkubWF4aW5wdXR3 aWR0aCA9IERFRkFVTFRfRFBVX0xJTkVfV0lEVEgsCj4gKwkubWF4b3V0cHV0d2lkdGggPSBERUZB VUxUX0RQVV9PVVRQVVRfTElORV9XSURUSCwKPiArCS5tYXh1cHNjYWxlID0gTUFYX1VQU0NBTEVf UkFUSU8sCj4gIH07Cj4gIAo+IC1zdGF0aWMgc3RydWN0IGRwdV9wcm9wX3R5cGUgbWl4ZXJfYmxv Y2tzX3Byb3BbXSA9IHsKPiAtCXtNSVhFUl9HQ19QUk9QLCAicWNvbSxkcHUtbWl4ZXItZ2MiLCBm YWxzZSwgUFJPUF9UWVBFX1UzMl9BUlJBWX0sCj4gLX07Cj4gKyNkZWZpbmUgRFNfQkxLKF9uYW1l LCBfaWQsIF9iYXNlKSBcCj4gKwl7XAo+ICsJLm5hbWUgPSBfbmFtZSwgLmlkID0gX2lkLCBcCj4g KwkuYmFzZSA9IF9iYXNlLCAubGVuID0gMHg4MDAsIFwKPiArCS5mZWF0dXJlcyA9IERQVV9TU1BQ X1NDQUxFUl9RU0VFRDMsIFwKPiArCS50b3AgPSAmc2RtODQ1X2RzX3RvcCBcCj4gKwl9Cj4gIAo+ IC1zdGF0aWMgc3RydWN0IGRwdV9wcm9wX3R5cGUgZHNwcF90b3BfcHJvcFtdID0gewo+IC0Je0RT UFBfVE9QX09GRiwgInFjb20sZHB1LWRzcHAtdG9wLW9mZiIsIHRydWUsIFBST1BfVFlQRV9VMzJ9 LAo+IC0Je0RTUFBfVE9QX1NJWkUsICJxY29tLGRwdS1kc3BwLXRvcC1zaXplIiwgZmFsc2UsIFBS T1BfVFlQRV9VMzJ9LAo+ICtzdGF0aWMgc3RydWN0IGRwdV9kc19jZmcgc2RtODQ1X2RzW10gPSB7 Cj4gKwlEU19CTEsoImRzXzAiLCBEU18wLCAweDgwMCksCj4gKwlEU19CTEsoImRzXzEiLCBEU18x LCAweDEwMDApLAo+ICB9Owo+ICAKPiAtc3RhdGljIHN0cnVjdCBkcHVfcHJvcF90eXBlIGRzcHBf cHJvcFtdID0gewo+IC0Je0RTUFBfT0ZGLCAicWNvbSxkcHUtZHNwcC1vZmYiLCB0cnVlLCBQUk9Q X1RZUEVfVTMyX0FSUkFZfSwKPiAtCXtEU1BQX1NJWkUsICJxY29tLGRwdS1kc3BwLXNpemUiLCBm YWxzZSwgUFJPUF9UWVBFX1UzMn0sCj4gLQl7RFNQUF9CTE9DS1MsICJxY29tLGRwdS1kc3BwLWJs b2NrcyIsIGZhbHNlLCBQUk9QX1RZUEVfTk9ERX0sCj4gKy8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCj4gKyAqIFBJTkdQT05HIHN1 YiBibG9ja3MgY29uZmlnCj4gKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqLwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRwdV9waW5n cG9uZ19zdWJfYmxrcyBzZG04NDVfcHBfc2Jsa190ZSA9IHsKPiArCS50ZTIgPSB7LmlkID0gRFBV X1BJTkdQT05HX1RFMiwgLmJhc2UgPSAweDIwMDAsIC5sZW4gPSAweDAsCj4gKwkJLnZlcnNpb24g PSAweDF9LAo+ICsJLmRpdGhlciA9IHsuaWQgPSBEUFVfUElOR1BPTkdfRElUSEVSLCAuYmFzZSA9 IDB4MzBlMCwKPiArCQkubGVuID0gMHgyMCwgLnZlcnNpb24gPSAweDEwMDAwfSwKPiAgfTsKPiAg Cj4gLXN0YXRpYyBzdHJ1Y3QgZHB1X3Byb3BfdHlwZSBkc3BwX2Jsb2Nrc19wcm9wW10gPSB7Cj4g LQl7RFNQUF9JR0NfUFJPUCwgInFjb20sZHB1LWRzcHAtaWdjIiwgZmFsc2UsIFBST1BfVFlQRV9V MzJfQVJSQVl9LAo+IC0Je0RTUFBfUENDX1BST1AsICJxY29tLGRwdS1kc3BwLXBjYyIsIGZhbHNl LCBQUk9QX1RZUEVfVTMyX0FSUkFZfSwKPiAtCXtEU1BQX0dDX1BST1AsICJxY29tLGRwdS1kc3Bw LWdjIiwgZmFsc2UsIFBST1BfVFlQRV9VMzJfQVJSQVl9LAo+IC0Je0RTUFBfSFNJQ19QUk9QLCAi cWNvbSxkcHUtZHNwcC1oc2ljIiwgZmFsc2UsIFBST1BfVFlQRV9VMzJfQVJSQVl9LAo+IC0Je0RT UFBfTUVNQ09MT1JfUFJPUCwgInFjb20sZHB1LWRzcHAtbWVtY29sb3IiLCBmYWxzZSwKPiAtCQlQ Uk9QX1RZUEVfVTMyX0FSUkFZfSwKPiAtCXtEU1BQX1NJWFpPTkVfUFJPUCwgInFjb20sZHB1LWRz cHAtc2l4em9uZSIsIGZhbHNlLAo+IC0JCVBST1BfVFlQRV9VMzJfQVJSQVl9LAo+IC0Je0RTUFBf R0FNVVRfUFJPUCwgInFjb20sZHB1LWRzcHAtZ2FtdXQiLCBmYWxzZSwgUFJPUF9UWVBFX1UzMl9B UlJBWX0sCj4gLQl7RFNQUF9ESVRIRVJfUFJPUCwgInFjb20sZHB1LWRzcHAtZGl0aGVyIiwgZmFs c2UsIFBST1BfVFlQRV9VMzJfQVJSQVl9LAo+IC0Je0RTUFBfSElTVF9QUk9QLCAicWNvbSxkcHUt ZHNwcC1oaXN0IiwgZmFsc2UsIFBST1BfVFlQRV9VMzJfQVJSQVl9LAo+IC0Je0RTUFBfVkxVVF9Q Uk9QLCAicWNvbSxkcHUtZHNwcC12bHV0IiwgZmFsc2UsIFBST1BfVFlQRV9VMzJfQVJSQVl9LAo+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRwdV9waW5ncG9uZ19zdWJfYmxrcyBzZG04NDVfcHBfc2Js ayA9IHsKPiArCS5kaXRoZXIgPSB7LmlkID0gRFBVX1BJTkdQT05HX0RJVEhFUiwgLmJhc2UgPSAw eDMwZTAsCj4gKwkJLmxlbiA9IDB4MjAsIC52ZXJzaW9uID0gMHgxMDAwMH0sCj4gIH07Cj4gIAo+ IC1zdGF0aWMgc3RydWN0IGRwdV9wcm9wX3R5cGUgYWRfcHJvcFtdID0gewo+IC0Je0FEX09GRiwg InFjb20sZHB1LWRzcHAtYWQtb2ZmIiwgZmFsc2UsIFBST1BfVFlQRV9VMzJfQVJSQVl9LAo+IC0J e0FEX1ZFUlNJT04sICJxY29tLGRwdS1kc3BwLWFkLXZlcnNpb24iLCBmYWxzZSwgUFJPUF9UWVBF X1UzMn0sCj4gLX07Cj4gKyNkZWZpbmUgUFBfQkxLX1RFKF9uYW1lLCBfaWQsIF9iYXNlKSBcCj4g Kwl7XAo+ICsJLm5hbWUgPSBfbmFtZSwgLmlkID0gX2lkLCBcCj4gKwkuYmFzZSA9IF9iYXNlLCAu bGVuID0gMHhkNCwgXAo+ICsJLmZlYXR1cmVzID0gUElOR1BPTkdfU0RNODQ1X1NQTElUX01BU0ss IFwKPiArCS5zYmxrID0gJnNkbTg0NV9wcF9zYmxrX3RlIFwKPiArCX0KPiArI2RlZmluZSBQUF9C TEsoX25hbWUsIF9pZCwgX2Jhc2UpIFwKPiArCXtcCj4gKwkubmFtZSA9IF9uYW1lLCAuaWQgPSBf aWQsIFwKPiArCS5iYXNlID0gX2Jhc2UsIC5sZW4gPSAweGQ0LCBcCj4gKwkuZmVhdHVyZXMgPSBQ SU5HUE9OR19TRE04NDVfTUFTSywgXAo+ICsJLnNibGsgPSAmc2RtODQ1X3BwX3NibGsgXAo+ICsJ fQo+ICAKPiAtc3RhdGljIHN0cnVjdCBkcHVfcHJvcF90eXBlIGRzX3RvcF9wcm9wW10gPSB7Cj4g LQl7RFNfVE9QX09GRiwgInFjb20sZHB1LWRlc3Qtc2NhbGVyLXRvcC1vZmYiLCBmYWxzZSwgUFJP UF9UWVBFX1UzMn0sCj4gLQl7RFNfVE9QX0xFTiwgInFjb20sZHB1LWRlc3Qtc2NhbGVyLXRvcC1z aXplIiwgZmFsc2UsIFBST1BfVFlQRV9VMzJ9LAo+IC0Je0RTX1RPUF9JTlBVVF9MSU5FV0lEVEgs ICJxY29tLGRwdS1tYXgtZGVzdC1zY2FsZXItaW5wdXQtbGluZXdpZHRoIiwKPiAtCQlmYWxzZSwg UFJPUF9UWVBFX1UzMn0sCj4gLQl7RFNfVE9QX09VVFBVVF9MSU5FV0lEVEgsICJxY29tLGRwdS1t YXgtZGVzdC1zY2FsZXItb3V0cHV0LWxpbmV3aWR0aCIsCj4gLQkJZmFsc2UsIFBST1BfVFlQRV9V MzJ9LAo+ICtzdGF0aWMgc3RydWN0IGRwdV9waW5ncG9uZ19jZmcgc2RtODQ1X3BwW10gPSB7Cj4g KwlQUF9CTEtfVEUoInBpbmdwb25nXzAiLCBQSU5HUE9OR18wLCAweDcxMDAwKSwKPiArCVBQX0JM S19URSgicGluZ3BvbmdfMSIsIFBJTkdQT05HXzEsIDB4NzE4MDApLAo+ICsJUFBfQkxLKCJwaW5n cG9uZ18yIiwgUElOR1BPTkdfMiwgMHg3MjAwMCksCj4gKwlQUF9CTEsoInBpbmdwb25nXzMiLCBQ SU5HUE9OR18zLCAweDcyODAwKSwKPiAgfTsKPiAgCj4gLXN0YXRpYyBzdHJ1Y3QgZHB1X3Byb3Bf dHlwZSBkc19wcm9wW10gPSB7Cj4gLQl7RFNfT0ZGLCAicWNvbSxkcHUtZGVzdC1zY2FsZXItb2Zm IiwgZmFsc2UsIFBST1BfVFlQRV9VMzJfQVJSQVl9LAo+IC0Je0RTX0xFTiwgInFjb20sZHB1LWRl c3Qtc2NhbGVyLXNpemUiLCBmYWxzZSwgUFJPUF9UWVBFX1UzMn0sCj4gLX07Cj4gKy8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCj4g KyAqIERTQyBzdWIgYmxvY2tzIGNvbmZpZwo+ICsgKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KPiAgCj4gLXN0YXRpYyBzdHJ1Y3Qg ZHB1X3Byb3BfdHlwZSBwcF9wcm9wW10gPSB7Cj4gLQl7UFBfT0ZGLCAicWNvbSxkcHUtcHAtb2Zm IiwgdHJ1ZSwgUFJPUF9UWVBFX1UzMl9BUlJBWX0sCj4gLQl7UFBfTEVOLCAicWNvbSxkcHUtcHAt c2l6ZSIsIGZhbHNlLCBQUk9QX1RZUEVfVTMyfSwKPiAtCXtURV9PRkYsICJxY29tLGRwdS10ZS1v ZmYiLCBmYWxzZSwgUFJPUF9UWVBFX1UzMl9BUlJBWX0sCj4gLQl7VEVfTEVOLCAicWNvbSxkcHUt dGUtc2l6ZSIsIGZhbHNlLCBQUk9QX1RZUEVfVTMyfSwKPiAtCXtURTJfT0ZGLCAicWNvbSxkcHUt dGUyLW9mZiIsIGZhbHNlLCBQUk9QX1RZUEVfVTMyX0FSUkFZfSwKPiAtCXtURTJfTEVOLCAicWNv bSxkcHUtdGUyLXNpemUiLCBmYWxzZSwgUFJPUF9UWVBFX1UzMn0sCj4gLQl7UFBfU0xBVkUsICJx Y29tLGRwdS1wcC1zbGF2ZSIsIGZhbHNlLCBQUk9QX1RZUEVfVTMyX0FSUkFZfSwKPiAtCXtESVRI RVJfT0ZGLCAicWNvbSxkcHUtZGl0aGVyLW9mZiIsIGZhbHNlLCBQUk9QX1RZUEVfVTMyX0FSUkFZ fSwKPiAtCXtESVRIRVJfTEVOLCAicWNvbSxkcHUtZGl0aGVyLXNpemUiLCBmYWxzZSwgUFJPUF9U WVBFX1UzMn0sCj4gLQl7RElUSEVSX1ZFUiwgInFjb20sZHB1LWRpdGhlci12ZXJzaW9uIiwgZmFs c2UsIFBST1BfVFlQRV9VMzJ9LAo+ICtzdGF0aWMgc3RydWN0IGRwdV9kc2NfY2ZnIHNkbTg0NV9k c2NbXSA9IHsKPiArCXsKPiArCS5uYW1lID0gImRzY18wIiwgLmlkID0gRFNDXzAsCj4gKwkuYmFz ZSA9IDB4ODEwMDAsIC5sZW4gPSAweDE0MAo+ICsJfSwKPiArCXsKPiArCS5uYW1lID0gImRzY18x IiwgLmlkID0gRFNDXzEsCj4gKwkuYmFzZSA9IDB4ODE0MDAsIC5sZW4gPSAweDE0MAo+ICsJfSwK PiArCXsKPiArCS5uYW1lID0gImRzY18yIiwgLmlkID0gRFNDXzIsCj4gKwkuYmFzZSA9IDB4ODE4 MDAsIC5sZW4gPSAweDE0MAo+ICsJfSwKPiArCXsKPiArCS5uYW1lID0gImRzY18zIiwgLmlkID0g RFNDXzMsCj4gKwkuYmFzZSA9IDB4ODFjMDAsIC5sZW4gPSAweDE0MAo+ICsJfSwKPiAgfTsKPiAg Cj4gLXN0YXRpYyBzdHJ1Y3QgZHB1X3Byb3BfdHlwZSBkc2NfcHJvcFtdID0gewo+IC0Je0RTQ19P RkYsICJxY29tLGRwdS1kc2Mtb2ZmIiwgZmFsc2UsIFBST1BfVFlQRV9VMzJfQVJSQVl9LAo+IC0J e0RTQ19MRU4sICJxY29tLGRwdS1kc2Mtc2l6ZSIsIGZhbHNlLCBQUk9QX1RZUEVfVTMyfSwKPiAt fTsKPiArLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioKPiArICogSU5URiBzdWIgYmxvY2tzIGNvbmZpZwo+ICsgKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KPiArI2Rl ZmluZSBJTlRGX0JMSyhfbmFtZSwgX2lkLCBfYmFzZSwgX3R5cGUsIF9jdHJsX2lkKSBcCj4gKwl7 XAo+ICsJLm5hbWUgPSBfbmFtZSwgLmlkID0gX2lkLCBcCj4gKwkuYmFzZSA9IF9iYXNlLCAubGVu ID0gMHgyODAsIFwKPiArCS50eXBlID0gX3R5cGUsIFwKPiArCS5jb250cm9sbGVyX2lkID0gX2N0 cmxfaWQsIFwKPiArCS5wcm9nX2ZldGNoX2xpbmVzX3dvcnN0X2Nhc2UgPSAyNCBcCj4gKwl9Cj4g IAo+IC1zdGF0aWMgc3RydWN0IGRwdV9wcm9wX3R5cGUgY2RtX3Byb3BbXSA9IHsKPiAtCXtIV19P RkYsICJxY29tLGRwdS1jZG0tb2ZmIiwgZmFsc2UsIFBST1BfVFlQRV9VMzJfQVJSQVl9LAo+IC0J e0hXX0xFTiwgInFjb20sZHB1LWNkbS1zaXplIiwgZmFsc2UsIFBST1BfVFlQRV9VMzJ9LAo+ICtz dGF0aWMgc3RydWN0IGRwdV9pbnRmX2NmZyBzZG04NDVfaW50ZltdID0gewo+ICsJSU5URl9CTEso ImludGZfMCIsIElOVEZfMCwgMHg2QjAwMCwgSU5URl9EUCwgMCksCj4gKwlJTlRGX0JMSygiaW50 Zl8xIiwgSU5URl8xLCAweDZCODAwLCBJTlRGX0RTSSwgMCksCj4gKwlJTlRGX0JMSygiaW50Zl8y IiwgSU5URl8yLCAweDZDMDAwLCBJTlRGX0RTSSwgMSksCj4gKwlJTlRGX0JMSygiaW50Zl8zIiwg SU5URl8zLCAweDZDODAwLCBJTlRGX0RQLCAxKSwKPiAgfTsKPiAgCj4gLXN0YXRpYyBzdHJ1Y3Qg ZHB1X3Byb3BfdHlwZSBpbnRmX3Byb3BbXSA9IHsKPiAtCXtJTlRGX09GRiwgInFjb20sZHB1LWlu dGYtb2ZmIiwgdHJ1ZSwgUFJPUF9UWVBFX1UzMl9BUlJBWX0sCj4gLQl7SU5URl9MRU4sICJxY29t LGRwdS1pbnRmLXNpemUiLCBmYWxzZSwgUFJPUF9UWVBFX1UzMn0sCj4gLQl7SU5URl9QUkVGRVRD SCwgInFjb20sZHB1LWludGYtbWF4LXByZWZldGNoLWxpbmVzIiwgZmFsc2UsCj4gLQkJCQkJCVBS T1BfVFlQRV9VMzJfQVJSQVl9LAo+IC0Je0lOVEZfVFlQRSwgInFjb20sZHB1LWludGYtdHlwZSIs IGZhbHNlLCBQUk9QX1RZUEVfU1RSSU5HX0FSUkFZfSwKPiArLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKPiArICogV0IgYW5kIENE TSBzdWIgYmxvY2tzIGNvbmZpZwo+ICsgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KPiArLyogV3JpdGViYWNrIDIgY2FwYWJpbGl0 eSAqLwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRwdV93Yl9zdWJfYmxvY2tzIHNkbTg0NV93YjJf c2JsayA9IHsKPiArCS5tYXhsaW5ld2lkdGggPSA0MDk2LAo+ICt9Owo+ICsKPiArc3RhdGljIHN0 cnVjdCBkcHVfd2JfY2ZnIHNkbTg0NV93YltdID0gewo+ICsJewo+ICsJLm5hbWUgPSAid2JfMiIs IC5pZCA9IFdCXzIsCj4gKwkuYmFzZSA9IDB4NjYwMDAsIC5sZW4gPSAweDJjOCwKPiArCS5mZWF0 dXJlcyA9IFdCMl9TRE04NDVfTUFTSywKPiArCS5zYmxrID0gJnNkbTg0NV93YjJfc2JsaywKPiAr CS5mb3JtYXRfbGlzdCA9IHdiMl9mb3JtYXRzLAo+ICsJLnZiaWZfaWR4ID0gVkJJRl9OUlQsCj4g KwkueGluX2lkID0gNiwKPiArCS5jbGtfY3RybCA9IERQVV9DTEtfQ1RSTF9XQjIKPiArCX0sCj4g K307Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGRwdV9jZG1fY2ZnIHNkbTg0NV9jZG1bXSA9IHsKPiAr CXsKPiArCS5uYW1lID0gImNkbV8wIiwgLmlkID0gQ0RNXzAsCj4gKwkuYmFzZSA9IDB4N0EyMDAs IC5sZW4gPSAweDIyNCwKPiArCS5mZWF0dXJlcyA9IDAsCj4gKwkuaW50Zl9jb25uZWN0ID0gQklU KElOVEZfMyksCj4gKwkud2JfY29ubmVjdCA9IEJJVChXQl8yKQo+ICsJfSwKPiAgfTsKPiAgCj4g LXN0YXRpYyBzdHJ1Y3QgZHB1X3Byb3BfdHlwZSB3Yl9wcm9wW10gPSB7Cj4gLQl7V0JfT0ZGLCAi cWNvbSxkcHUtd2Itb2ZmIiwgdHJ1ZSwgUFJPUF9UWVBFX1UzMl9BUlJBWX0sCj4gLQl7V0JfTEVO LCAicWNvbSxkcHUtd2Itc2l6ZSIsIGZhbHNlLCBQUk9QX1RZUEVfVTMyfSwKPiAtCXtXQl9JRCwg InFjb20sZHB1LXdiLWlkIiwgdHJ1ZSwgUFJPUF9UWVBFX1UzMl9BUlJBWX0sCj4gLQl7V0JfWElO X0lELCAicWNvbSxkcHUtd2IteGluLWlkIiwgZmFsc2UsIFBST1BfVFlQRV9VMzJfQVJSQVl9LAo+ IC0Je1dCX0NMS19DVFJMLCAicWNvbSxkcHUtd2ItY2xrLWN0cmwiLCBmYWxzZSwKPiAtCQlQUk9Q X1RZUEVfQklUX09GRlNFVF9BUlJBWX0sCj4gKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCj4gKyAqIFZCSUYgc3ViIGJsb2NrcyBj b25maWcKPiArICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCj4gKy8qIFZCSUYgUU9TIHJlbWFwICovCj4gK3N0YXRpYyB1MzIgc2Rt ODQ1X3J0X3ByaV9sdmxbXSA9IHszLCAzLCA0LCA0LCA1LCA1LCA2LCA2fTsKPiArc3RhdGljIHUz MiBzZG04NDVfbnJ0X3ByaV9sdmxbXSA9IHszLCAzLCAzLCAzLCAzLCAzLCAzLCAzfTsKPiArCj4g K3N0YXRpYyBzdHJ1Y3QgZHB1X3ZiaWZfY2ZnIHNkbTg0NV92YmlmW10gPSB7Cj4gKwl7Cj4gKwku bmFtZSA9ICJ2YmlmXzAiLCAuaWQgPSBWQklGXzAsCj4gKwkuYmFzZSA9IDAsIC5sZW4gPSAweDEw NDAsCj4gKwkuZmVhdHVyZXMgPSBCSVQoRFBVX1ZCSUZfUU9TX1JFTUFQKSwKPiArCS54aW5faGFs dF90aW1lb3V0ID0gMHg0MDAwLAo+ICsJLnFvc19ydF90YmwgPSB7Cj4gKwkJLm5wcmlvcml0eV9s dmwgPSBBUlJBWV9TSVpFKHNkbTg0NV9ydF9wcmlfbHZsKSwKPiArCQkucHJpb3JpdHlfbHZsID0g c2RtODQ1X3J0X3ByaV9sdmwsCj4gKwkJfSwKPiArCS5xb3NfbnJ0X3RibCA9IHsKPiArCQkubnBy aW9yaXR5X2x2bCA9IEFSUkFZX1NJWkUoc2RtODQ1X25ydF9wcmlfbHZsKSwKPiArCQkucHJpb3Jp dHlfbHZsID0gc2RtODQ1X25ydF9wcmlfbHZsLAo+ICsJCX0sCj4gKwkubWVtdHlwZV9jb3VudCA9 IDE0LAo+ICsJLm1lbXR5cGUgPSB7MywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywg MywgM30sCj4gKwl9LAo+ICt9Owo+ICsKPiArc3RhdGljIHN0cnVjdCBkcHVfcmVnX2RtYV9jZmcg c2RtODQ1X3JlZ2RtYSA9IHsKPiArCS5iYXNlID0gMHgwLCAudmVyc2lvbiA9IDB4MSwgLnRyaWdn ZXJfc2VsX29mZiA9IDB4MTE5Ywo+ICB9Owo+ICAKPiAtc3RhdGljIHN0cnVjdCBkcHVfcHJvcF90 eXBlIHZiaWZfcHJvcFtdID0gewo+IC0Je1ZCSUZfT0ZGLCAicWNvbSxkcHUtdmJpZi1vZmYiLCB0 cnVlLCBQUk9QX1RZUEVfVTMyX0FSUkFZfSwKPiAtCXtWQklGX0xFTiwgInFjb20sZHB1LXZiaWYt c2l6ZSIsIGZhbHNlLCBQUk9QX1RZUEVfVTMyfSwKPiAtCXtWQklGX0lELCAicWNvbSxkcHUtdmJp Zi1pZCIsIGZhbHNlLCBQUk9QX1RZUEVfVTMyX0FSUkFZfSwKPiAtCXtWQklGX0RFRkFVTFRfT1Rf UkRfTElNSVQsICJxY29tLGRwdS12YmlmLWRlZmF1bHQtb3QtcmQtbGltaXQiLCBmYWxzZSwKPiAt CQlQUk9QX1RZUEVfVTMyfSwKPiAtCXtWQklGX0RFRkFVTFRfT1RfV1JfTElNSVQsICJxY29tLGRw dS12YmlmLWRlZmF1bHQtb3Qtd3ItbGltaXQiLCBmYWxzZSwKPiAtCQlQUk9QX1RZUEVfVTMyfSwK PiAtCXtWQklGX0RZTkFNSUNfT1RfUkRfTElNSVQsICJxY29tLGRwdS12YmlmLWR5bmFtaWMtb3Qt cmQtbGltaXQiLCBmYWxzZSwKPiAtCQlQUk9QX1RZUEVfVTMyX0FSUkFZfSwKPiAtCXtWQklGX0RZ TkFNSUNfT1RfV1JfTElNSVQsICJxY29tLGRwdS12YmlmLWR5bmFtaWMtb3Qtd3ItbGltaXQiLCBm YWxzZSwKPiAtCQlQUk9QX1RZUEVfVTMyX0FSUkFZfSwKPiAtCXtWQklGX1FPU19SVF9SRU1BUCwg InFjb20sZHB1LXZiaWYtcW9zLXJ0LXJlbWFwIiwgZmFsc2UsCj4gLQkJUFJPUF9UWVBFX1UzMl9B UlJBWX0sCj4gLQl7VkJJRl9RT1NfTlJUX1JFTUFQLCAicWNvbSxkcHUtdmJpZi1xb3MtbnJ0LXJl bWFwIiwgZmFsc2UsCj4gLQkJUFJPUF9UWVBFX1UzMl9BUlJBWX0sCj4gLQl7VkJJRl9NRU1UWVBF XzAsICJxY29tLGRwdS12YmlmLW1lbXR5cGUtMCIsIGZhbHNlLCBQUk9QX1RZUEVfVTMyX0FSUkFZ fSwKPiAtCXtWQklGX01FTVRZUEVfMSwgInFjb20sZHB1LXZiaWYtbWVtdHlwZS0xIiwgZmFsc2Us IFBST1BfVFlQRV9VMzJfQVJSQVl9LAo+IC19Owo+ICsvKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgo+ICsgKiBQRVJGIGRhdGEgY29u ZmlnCj4gKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLwo+ICAKPiAtc3RhdGljIHN0cnVjdCBkcHVfcHJvcF90eXBlIHJlZ19kbWFf cHJvcFtSRUdfRE1BX1BST1BfTUFYXSA9IHsKPiAtCVtSRUdfRE1BX09GRl0gPSAge1JFR19ETUFf T0ZGLCAicWNvbSxkcHUtcmVnLWRtYS1vZmYiLCBmYWxzZSwKPiAtCQlQUk9QX1RZUEVfVTMyfSwK PiAtCVtSRUdfRE1BX1ZFUlNJT05dID0ge1JFR19ETUFfVkVSU0lPTiwgInFjb20sZHB1LXJlZy1k bWEtdmVyc2lvbiIsCj4gLQkJZmFsc2UsIFBST1BfVFlQRV9VMzJ9LAo+IC0JW1JFR19ETUFfVFJJ R0dFUl9PRkZdID0ge1JFR19ETUFfVFJJR0dFUl9PRkYsCj4gLQkJInFjb20sZHB1LXJlZy1kbWEt dHJpZ2dlci1vZmYiLCBmYWxzZSwKPiAtCQlQUk9QX1RZUEVfVTMyfSwKPiArLyogU1NQUCBRT1Mg TFVUcyAqLwo+ICtzdGF0aWMgc3RydWN0IGRwdV9xb3NfbHV0X2VudHJ5IHNkbTg0NV9xb3NfbGlu ZWFyW10gPSB7Cj4gKwl7LmZsID0gNCwgLmx1dCA9IDB4MzU3fSwKPiArCXsuZmwgPSA1LCAubHV0 ID0gMHgzMzU3fSwKPiArCXsuZmwgPSA2LCAubHV0ID0gMHgyMzM1N30sCj4gKwl7LmZsID0gNywg Lmx1dCA9IDB4MjIzMzU3fSwKPiArCXsuZmwgPSA4LCAubHV0ID0gMHgyMjIzMzU3fSwKPiArCXsu ZmwgPSA5LCAubHV0ID0gMHgyMjIyMzM1N30sCj4gKwl7LmZsID0gMTAsIC5sdXQgPSAweDIyMjIy MzM1N30sCj4gKwl7LmZsID0gMTEsIC5sdXQgPSAweDIyMjIyMjMzNTd9LAo+ICsJey5mbCA9IDEy LCAubHV0ID0gMHgyMjIyMjIyMzM1N30sCj4gKwl7LmZsID0gMTMsIC5sdXQgPSAweDIyMjIyMjIy MzM1N30sCj4gKwl7LmZsID0gMTQsIC5sdXQgPSAweDEyMjIyMjIyMjMzNTd9LAo+ICsJey5mbCA9 IDAsIC5sdXQgPSAweDExMjIyMjIyMjIzMzU3fQo+ICt9Owo+ICsKPiArc3RhdGljIHN0cnVjdCBk cHVfcW9zX2x1dF9lbnRyeSBzZG04NDVfcW9zX21hY3JvdGlsZVtdID0gewo+ICsJey5mbCA9IDEw LCAubHV0ID0gMHgzNDQ1NTY2Nzd9LAo+ICsJey5mbCA9IDExLCAubHV0ID0gMHgzMzQ0NTU2Njc3 fSwKPiArCXsuZmwgPSAxMiwgLmx1dCA9IDB4MjMzNDQ1NTY2Nzd9LAo+ICsJey5mbCA9IDEzLCAu bHV0ID0gMHgyMjMzNDQ1NTY2Nzd9LAo+ICsJey5mbCA9IDE0LCAubHV0ID0gMHgxMjIzMzQ0NTU2 Njc3fSwKPiArCXsuZmwgPSAwLCAubHV0ID0gMHgxMTIyMzMzNDQ1NTY2Nzd9LAo+ICt9Owo+ICsK PiArc3RhdGljIHN0cnVjdCBkcHVfcW9zX2x1dF9lbnRyeSBzZG04NDVfcW9zX25ydFtdID0gewo+ ICsJey5mbCA9IDAsIC5sdXQgPSAweDB9LAo+ICt9Owo+ICsKPiArc3RhdGljIHN0cnVjdCBkcHVf cW9zX2x1dF9lbnRyeSBzZG04NDVfcW9zX2N3YltdID0gewo+ICsJey5mbCA9IDAsIC5sdXQgPSAw eDc1MzAwMDAwMDAwMDAwMDB9LAo+ICt9Owo+ICsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZHB1X3Bl cmZfY2ZnIHNkbTg0NV9wZXJmX2RhdGEgPSB7Cj4gKwkubWF4X2J3X2xvdyA9IDY4MDAwMDAsCj4g KwkubWF4X2J3X2hpZ2ggPSA2ODAwMDAwLAo+ICsJLm1pbl9jb3JlX2liID0gMjQwMDAwMCwKPiAr CS5taW5fbGxjY19pYiA9IDgwMDAwMCwKPiArCS5taW5fZHJhbV9pYiA9IDgwMDAwMCwKPiArCS5j b3JlX2liX2ZmID0gIjYuMCIsCj4gKwkuY29yZV9jbGtfZmYgPSAiMS4wIiwKPiArCS5jb21wX3Jh dGlvX3J0ID0KPiArCSJOVjEyLzUvMS8xLjIzIEFCMjQvNS8xLzEuMjMgWEIyNC81LzEvMS4yMyIs Cj4gKwkuY29tcF9yYXRpb19ucnQgPQo+ICsJIk5WMTIvNS8xLzEuMjUgQUIyNC81LzEvMS4yNSBY QjI0LzUvMS8xLjI1IiwKPiArCS51bmRlcnNpemVkX3ByZWZpbGxfbGluZXMgPSAyLAo+ICsJLnh0 cmFfcHJlZmlsbF9saW5lcyA9IDIsCj4gKwkuZGVzdF9zY2FsZV9wcmVmaWxsX2xpbmVzID0gMywK PiArCS5tYWNyb3RpbGVfcHJlZmlsbF9saW5lcyA9IDQsCj4gKwkueXV2X252MTJfcHJlZmlsbF9s aW5lcyA9IDgsCj4gKwkubGluZWFyX3ByZWZpbGxfbGluZXMgPSAxLAo+ICsJLmRvd25zY2FsaW5n X3ByZWZpbGxfbGluZXMgPSAxLAo+ICsJLmFtb3J0aXphYmxlX3RocmVzaG9sZCA9IDI1LAo+ICsJ Lm1pbl9wcmVmaWxsX2xpbmVzID0gMjQsCj4gKwkuZGFuZ2VyX2x1dF90YmwgPSB7MHhmLCAweGZm ZmYsIDB4MCwgMHgwfSwKPiArCS5xb3NfbHV0X3RibCA9IHsKPiArCQl7Lm5lbnRyeSA9IEFSUkFZ X1NJWkUoc2RtODQ1X3Fvc19saW5lYXIpLAo+ICsJCS5lbnRyaWVzID0gc2RtODQ1X3Fvc19saW5l YXIKPiArCQl9LAo+ICsJCXsubmVudHJ5ID0gQVJSQVlfU0laRShzZG04NDVfcW9zX21hY3JvdGls ZSksCj4gKwkJLmVudHJpZXMgPSBzZG04NDVfcW9zX21hY3JvdGlsZQo+ICsJCX0sCj4gKwkJey5u ZW50cnkgPSBBUlJBWV9TSVpFKHNkbTg0NV9xb3NfbnJ0KSwKPiArCQkuZW50cmllcyA9IHNkbTg0 NV9xb3NfbnJ0Cj4gKwkJfSwKPiArCQl7Lm5lbnRyeSA9IEFSUkFZX1NJWkUoc2RtODQ1X3Fvc19j d2IpLAo+ICsJCS5lbnRyaWVzID0gc2RtODQ1X3Fvc19jd2IKPiArCQl9LAo+ICsJfSwKPiArCS5j ZHBfY2ZnID0gewo+ICsJCXsucmRfZW5hYmxlID0gMSwgLndyX2VuYWJsZSA9IDF9LAo+ICsJCXsu cmRfZW5hYmxlID0gMSwgLndyX2VuYWJsZSA9IDB9Cj4gKwl9LAo+ICB9Owo+ICAKPiAgLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK PiAtICogc3RhdGljIEFQSSBsaXN0Cj4gKyAqIEhhcmR3YXJlIGNhdGFsb2cgaW5pdAo+ICAgKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ki8KPiAgCj4gLXN0YXRpYyBpbnQgX3BhcnNlX2R0X3UzMl9oYW5kbGVyKHN0cnVjdCBkZXZpY2Vf bm9kZSAqbnAsCj4gLQljaGFyICpwcm9wX25hbWUsIHUzMiAqb2Zmc2V0cywgaW50IGxlbiwgYm9v bCBtYW5kYXRvcnkpCj4gLXsKPiAtCWludCByYyA9IC1FSU5WQUw7Cj4gLQo+IC0JaWYgKGxlbiA+ IE1BWF9EUFVfSFdfQkxLKSB7Cj4gLQkJRFBVX0VSUk9SKAo+IC0JCQkicHJvcDogJXMgdHJpZXMg b3V0IG9mIGJvdW5kIGFjY2VzcyBmb3IgdTMyIGFycmF5IHJlYWQgbGVuOiAlZFxuIiwKPiAtCQkJ CXByb3BfbmFtZSwgbGVuKTsKPiAtCQlyZXR1cm4gLUUyQklHOwo+IC0JfQo+IC0KPiAtCXJjID0g b2ZfcHJvcGVydHlfcmVhZF91MzJfYXJyYXkobnAsIHByb3BfbmFtZSwgb2Zmc2V0cywgbGVuKTsK PiAtCWlmIChyYyAmJiBtYW5kYXRvcnkpCj4gLQkJRFBVX0VSUk9SKCJtYW5kYXRvcnkgcHJvcDog JXMgdTMyIGFycmF5IHJlYWQgbGVuOiVkXG4iLAo+IC0JCQkJcHJvcF9uYW1lLCBsZW4pOwo+IC0J ZWxzZSBpZiAocmMpCj4gLQkJRFBVX0RFQlVHKCJvcHRpb25hbCBwcm9wOiAlcyB1MzIgYXJyYXkg cmVhZCBsZW46JWRcbiIsCj4gLQkJCQlwcm9wX25hbWUsIGxlbik7Cj4gLQo+IC0JcmV0dXJuIHJj Owo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IF9wYXJzZV9kdF9iaXRfb2Zmc2V0KHN0cnVjdCBkZXZp Y2Vfbm9kZSAqbnAsCj4gLQljaGFyICpwcm9wX25hbWUsIHN0cnVjdCBkcHVfcHJvcF92YWx1ZSAq cHJvcF92YWx1ZSwgdTMyIHByb3BfaW5kZXgsCj4gLQl1MzIgY291bnQsIGJvb2wgbWFuZGF0b3J5 KQo+IC17Cj4gLQlpbnQgcmMgPSAwLCBsZW4sIGksIGo7Cj4gLQljb25zdCB1MzIgKmFycjsKPiAt Cj4gLQlhcnIgPSBvZl9nZXRfcHJvcGVydHkobnAsIHByb3BfbmFtZSwgJmxlbik7Cj4gLQlpZiAo YXJyKSB7Cj4gLQkJbGVuIC89IHNpemVvZih1MzIpOwo+IC0JCWxlbiAmPSB+MHgxOwo+IC0KPiAt CQlpZiAobGVuID4gKE1BWF9EUFVfSFdfQkxLICogTUFYX0JJVF9PRkZTRVQpKSB7Cj4gLQkJCURQ VV9FUlJPUigKPiAtCQkJCSJwcm9wOiAlcyBsZW46ICVkIHdpbGwgbGVhZCB0byBvdXQgb2YgYm91 bmQgYWNjZXNzXG4iLAo+IC0JCQkJcHJvcF9uYW1lLCBsZW4gLyBNQVhfQklUX09GRlNFVCk7Cj4g LQkJCXJldHVybiAtRTJCSUc7Cj4gLQkJfQo+IC0KPiAtCQlmb3IgKGkgPSAwLCBqID0gMDsgaSA8 IGxlbjsgaisrKSB7Cj4gLQkJCVBST1BfQklUVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsIHByb3Bf aW5kZXgsIGosIDApID0KPiAtCQkJCWJlMzJfdG9fY3B1KGFycltpXSk7Cj4gLQkJCWkrKzsKPiAt CQkJUFJPUF9CSVRWQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwgcHJvcF9pbmRleCwgaiwgMSkgPQo+ IC0JCQkJYmUzMl90b19jcHUoYXJyW2ldKTsKPiAtCQkJaSsrOwo+IC0JCX0KPiAtCX0gZWxzZSB7 Cj4gLQkJaWYgKG1hbmRhdG9yeSkgewo+IC0JCQlEUFVfRVJST1IoImVycm9yIG1hbmRhdG9yeSBw cm9wZXJ0eSAnJXMnIG5vdCBmb3VuZFxuIiwKPiAtCQkJCXByb3BfbmFtZSk7Cj4gLQkJCXJjID0g LUVJTlZBTDsKPiAtCQl9IGVsc2Ugewo+IC0JCQlEUFVfREVCVUcoImVycm9yIG9wdGlvbmFsIHBy b3BlcnR5ICclcycgbm90IGZvdW5kXG4iLAo+IC0JCQkJcHJvcF9uYW1lKTsKPiAtCQl9Cj4gLQl9 Cj4gLQo+IC0JcmV0dXJuIHJjOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IF92YWxpZGF0ZV9kdF9l bnRyeShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAo+IC0Jc3RydWN0IGRwdV9wcm9wX3R5cGUgKmRw dV9wcm9wLCB1MzIgcHJvcF9zaXplLCBpbnQgKnByb3BfY291bnQsCj4gLQlpbnQgKm9mZl9jb3Vu dCkKPiAtewo+IC0JaW50IHJjID0gMCwgaSwgdmFsOwo+IC0Jc3RydWN0IGRldmljZV9ub2RlICpz bnAgPSBOVUxMOwo+IC0KPiAtCWlmIChvZmZfY291bnQpIHsKPiAtCQkqb2ZmX2NvdW50ID0gb2Zf cHJvcGVydHlfY291bnRfdTMyX2VsZW1zKG5wLAo+IC0JCQkJZHB1X3Byb3BbMF0ucHJvcF9uYW1l KTsKPiAtCQlpZiAoKCpvZmZfY291bnQgPiBNQVhfQkxPQ0tTKSB8fCAoKm9mZl9jb3VudCA8IDAp KSB7Cj4gLQkJCWlmIChkcHVfcHJvcFswXS5pc19tYW5kYXRvcnkpIHsKPiAtCQkJCURQVV9FUlJP UigKPiAtCQkJCQkiaW52YWxpZCBodyBvZmZzZXQgcHJvcCBuYW1lOiVzIGNvdW50OiAlZFxuIiwK PiAtCQkJCQlkcHVfcHJvcFswXS5wcm9wX25hbWUsICpvZmZfY291bnQpOwo+IC0JCQkJcmMgPSAt RUlOVkFMOwo+IC0JCQl9Cj4gLQkJCSpvZmZfY291bnQgPSAwOwo+IC0JCQltZW1zZXQocHJvcF9j b3VudCwgMCwgc2l6ZW9mKGludCkgKiBwcm9wX3NpemUpOwo+IC0JCQlyZXR1cm4gcmM7Cj4gLQkJ fQo+IC0JfQo+IC0KPiAtCWZvciAoaSA9IDA7IGkgPCBwcm9wX3NpemU7IGkrKykgewo+IC0JCXN3 aXRjaCAoZHB1X3Byb3BbaV0udHlwZSkgewo+IC0JCWNhc2UgUFJPUF9UWVBFX1UzMjoKPiAtCQkJ cmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgZHB1X3Byb3BbaV0ucHJvcF9uYW1lLAo+IC0J CQkJJnZhbCk7Cj4gLQkJCWJyZWFrOwo+IC0JCWNhc2UgUFJPUF9UWVBFX1UzMl9BUlJBWToKPiAt CQkJcHJvcF9jb3VudFtpXSA9IG9mX3Byb3BlcnR5X2NvdW50X3UzMl9lbGVtcyhucCwKPiAtCQkJ CWRwdV9wcm9wW2ldLnByb3BfbmFtZSk7Cj4gLQkJCWlmIChwcm9wX2NvdW50W2ldIDwgMCkKPiAt CQkJCXJjID0gcHJvcF9jb3VudFtpXTsKPiAtCQkJYnJlYWs7Cj4gLQkJY2FzZSBQUk9QX1RZUEVf U1RSSU5HX0FSUkFZOgo+IC0JCQlwcm9wX2NvdW50W2ldID0gb2ZfcHJvcGVydHlfY291bnRfc3Ry aW5ncyhucCwKPiAtCQkJCWRwdV9wcm9wW2ldLnByb3BfbmFtZSk7Cj4gLQkJCWlmIChwcm9wX2Nv dW50W2ldIDwgMCkKPiAtCQkJCXJjID0gcHJvcF9jb3VudFtpXTsKPiAtCQkJYnJlYWs7Cj4gLQkJ Y2FzZSBQUk9QX1RZUEVfQklUX09GRlNFVF9BUlJBWToKPiAtCQkJb2ZfZ2V0X3Byb3BlcnR5KG5w LCBkcHVfcHJvcFtpXS5wcm9wX25hbWUsICZ2YWwpOwo+IC0JCQlwcm9wX2NvdW50W2ldID0gdmFs IC8gKE1BWF9CSVRfT0ZGU0VUICogc2l6ZW9mKHUzMikpOwo+IC0JCQlicmVhazsKPiAtCQljYXNl IFBST1BfVFlQRV9OT0RFOgo+IC0JCQlzbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShucCwKPiAt CQkJCQlkcHVfcHJvcFtpXS5wcm9wX25hbWUpOwo+IC0JCQlpZiAoIXNucCkKPiAtCQkJCXJjID0g LUVJTlZBTDsKPiAtCQkJYnJlYWs7Cj4gLQkJZGVmYXVsdDoKPiAtCQkJRFBVX0RFQlVHKCJpbnZh bGlkIHByb3BlcnR5IHR5cGU6JWRcbiIsCj4gLQkJCQkJCQlkcHVfcHJvcFtpXS50eXBlKTsKPiAt CQkJYnJlYWs7Cj4gLQkJfQo+IC0JCURQVV9ERUJVRygKPiAtCQkJInByb3AgaWQ6JWQgcHJvcCBu YW1lOiVzIHByb3AgdHlwZTolZCBwcm9wX2NvdW50OiVkXG4iLAo+IC0JCQlpLCBkcHVfcHJvcFtp XS5wcm9wX25hbWUsCj4gLQkJCWRwdV9wcm9wW2ldLnR5cGUsIHByb3BfY291bnRbaV0pOwo+IC0K PiAtCQlpZiAocmMgJiYgZHB1X3Byb3BbaV0uaXNfbWFuZGF0b3J5ICYmCj4gLQkJICAgKChkcHVf cHJvcFtpXS50eXBlID09IFBST1BfVFlQRV9VMzIpIHx8Cj4gLQkJICAgIChkcHVfcHJvcFtpXS50 eXBlID09IFBST1BfVFlQRV9OT0RFKSkpIHsKPiAtCQkJRFBVX0VSUk9SKCJwcm9wOiVzIG5vdCBw cmVzZW50XG4iLAo+IC0JCQkJCQlkcHVfcHJvcFtpXS5wcm9wX25hbWUpOwo+IC0JCQlnb3RvIGVu ZDsKPiAtCQl9IGVsc2UgaWYgKGRwdV9wcm9wW2ldLnR5cGUgPT0gUFJPUF9UWVBFX1UzMiB8fAo+ IC0JCQlkcHVfcHJvcFtpXS50eXBlID09IFBST1BfVFlQRV9CT09MIHx8Cj4gLQkJCWRwdV9wcm9w W2ldLnR5cGUgPT0gUFJPUF9UWVBFX05PREUpIHsKPiAtCQkJcmMgPSAwOwo+IC0JCQljb250aW51 ZTsKPiAtCQl9Cj4gLQo+IC0JCWlmIChvZmZfY291bnQgJiYgKHByb3BfY291bnRbaV0gIT0gKm9m Zl9jb3VudCkgJiYKPiAtCQkJCWRwdV9wcm9wW2ldLmlzX21hbmRhdG9yeSkgewo+IC0JCQlEUFVf RVJST1IoCj4gLQkJCQkicHJvcDolcyBjb3VudDolZCBpcyBkaWZmZXJlbnQgY29tcGFyZWQgdG8g b2Zmc2V0IGFycmF5OiVkXG4iLAo+IC0JCQkJZHB1X3Byb3BbaV0ucHJvcF9uYW1lLAo+IC0JCQkJ cHJvcF9jb3VudFtpXSwgKm9mZl9jb3VudCk7Cj4gLQkJCXJjID0gLUVJTlZBTDsKPiAtCQkJZ290 byBlbmQ7Cj4gLQkJfSBlbHNlIGlmIChvZmZfY291bnQgJiYgcHJvcF9jb3VudFtpXSAhPSAqb2Zm X2NvdW50KSB7Cj4gLQkJCURQVV9ERUJVRygKPiAtCQkJCSJwcm9wOiVzIGNvdW50OiVkIGlzIGRp ZmZlcmVudCBjb21wYXJlZCB0byBvZmZzZXQgYXJyYXk6JWRcbiIsCj4gLQkJCQlkcHVfcHJvcFtp XS5wcm9wX25hbWUsCj4gLQkJCQlwcm9wX2NvdW50W2ldLCAqb2ZmX2NvdW50KTsKPiAtCQkJcmMg PSAwOwo+IC0JCQlwcm9wX2NvdW50W2ldID0gMDsKPiAtCQl9Cj4gLQkJaWYgKHByb3BfY291bnRb aV0gPCAwKSB7Cj4gLQkJCXByb3BfY291bnRbaV0gPSAwOwo+IC0JCQlpZiAoZHB1X3Byb3BbaV0u aXNfbWFuZGF0b3J5KSB7Cj4gLQkJCQlEUFVfRVJST1IoInByb3A6JXMgY291bnQ6JWQgaXMgbmVn YXRpdmVcbiIsCj4gLQkJCQkJZHB1X3Byb3BbaV0ucHJvcF9uYW1lLCBwcm9wX2NvdW50W2ldKTsK PiAtCQkJCXJjID0gLUVJTlZBTDsKPiAtCQkJfSBlbHNlIHsKPiAtCQkJCXJjID0gMDsKPiAtCQkJ CURQVV9ERUJVRygicHJvcDolcyBjb3VudDolZCBpcyBuZWdhdGl2ZVxuIiwKPiAtCQkJCQlkcHVf cHJvcFtpXS5wcm9wX25hbWUsIHByb3BfY291bnRbaV0pOwo+IC0JCQl9Cj4gLQkJfQo+IC0JfQo+ IC0KPiAtZW5kOgo+IC0JcmV0dXJuIHJjOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IF9yZWFkX2R0 X2VudHJ5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCj4gLQlzdHJ1Y3QgZHB1X3Byb3BfdHlwZSAq ZHB1X3Byb3AsIHUzMiBwcm9wX3NpemUsIGludCAqcHJvcF9jb3VudCwKPiAtCWJvb2wgKnByb3Bf ZXhpc3RzLAo+IC0Jc3RydWN0IGRwdV9wcm9wX3ZhbHVlICpwcm9wX3ZhbHVlKQo+IC17Cj4gLQlp bnQgcmMgPSAwLCBpLCBqOwo+IC0KPiAtCWZvciAoaSA9IDA7IGkgPCBwcm9wX3NpemU7IGkrKykg ewo+IC0JCXByb3BfZXhpc3RzW2ldID0gdHJ1ZTsKPiAtCQlzd2l0Y2ggKGRwdV9wcm9wW2ldLnR5 cGUpIHsKPiAtCQljYXNlIFBST1BfVFlQRV9VMzI6Cj4gLQkJCXJjID0gb2ZfcHJvcGVydHlfcmVh ZF91MzIobnAsIGRwdV9wcm9wW2ldLnByb3BfbmFtZSwKPiAtCQkJCSZQUk9QX1ZBTFVFX0FDQ0VT Uyhwcm9wX3ZhbHVlLCBpLCAwKSk7Cj4gLQkJCURQVV9ERUJVRygKPiAtCQkJCSJwcm9wIGlkOiVk IHByb3AgbmFtZTolcyBwcm9wIHR5cGU6JWQgdmFsdWU6MHgleFxuIiwKPiAtCQkJCWksIGRwdV9w cm9wW2ldLnByb3BfbmFtZSwKPiAtCQkJCWRwdV9wcm9wW2ldLnR5cGUsCj4gLQkJCQlQUk9QX1ZB TFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBpLCAwKSk7Cj4gLQkJCWlmIChyYykKPiAtCQkJCXByb3Bf ZXhpc3RzW2ldID0gZmFsc2U7Cj4gLQkJCWJyZWFrOwo+IC0JCWNhc2UgUFJPUF9UWVBFX0JPT0w6 Cj4gLQkJCVBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsIGksIDApID0KPiAtCQkJCW9mX3By b3BlcnR5X3JlYWRfYm9vbChucCwKPiAtCQkJCQlkcHVfcHJvcFtpXS5wcm9wX25hbWUpOwo+IC0J CQlEUFVfREVCVUcoCj4gLQkJCQkicHJvcCBpZDolZCBwcm9wIG5hbWU6JXMgcHJvcCB0eXBlOiVk IHZhbHVlOjB4JXhcbiIsCj4gLQkJCQlpLCBkcHVfcHJvcFtpXS5wcm9wX25hbWUsCj4gLQkJCQlk cHVfcHJvcFtpXS50eXBlLAo+IC0JCQkJUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwgaSwg MCkpOwo+IC0JCQlicmVhazsKPiAtCQljYXNlIFBST1BfVFlQRV9VMzJfQVJSQVk6Cj4gLQkJCXJj ID0gX3BhcnNlX2R0X3UzMl9oYW5kbGVyKG5wLCBkcHVfcHJvcFtpXS5wcm9wX25hbWUsCj4gLQkJ CQkmUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwgaSwgMCksCj4gLQkJCQlwcm9wX2NvdW50 W2ldLCBkcHVfcHJvcFtpXS5pc19tYW5kYXRvcnkpOwo+IC0JCQlpZiAocmMgJiYgZHB1X3Byb3Bb aV0uaXNfbWFuZGF0b3J5KSB7Cj4gLQkJCQlEUFVfRVJST1IoCj4gLQkJCQkJIiVzIHByb3AgdmFs aWRhdGlvbiBzdWNjZXNzIGJ1dCByZWFkIGZhaWxlZFxuIiwKPiAtCQkJCQlkcHVfcHJvcFtpXS5w cm9wX25hbWUpOwo+IC0JCQkJcHJvcF9leGlzdHNbaV0gPSBmYWxzZTsKPiAtCQkJCWdvdG8gZW5k Owo+IC0JCQl9IGVsc2Ugewo+IC0JCQkJaWYgKHJjKQo+IC0JCQkJCXByb3BfZXhpc3RzW2ldID0g ZmFsc2U7Cj4gLQkJCQkvKiBvbmx5IGZvciBkZWJ1ZyBwdXJwb3NlICovCj4gLQkJCQlEUFVfREVC VUcoInByb3AgaWQ6JWQgcHJvcCBuYW1lOiVzIHByb3AgdHlwZTolZCIKPiAtCQkJCQksIGksIGRw dV9wcm9wW2ldLnByb3BfbmFtZSwKPiAtCQkJCQlkcHVfcHJvcFtpXS50eXBlKTsKPiAtCQkJCWZv ciAoaiA9IDA7IGogPCBwcm9wX2NvdW50W2ldOyBqKyspCj4gLQkJCQkJRFBVX0RFQlVHKCIgdmFs dWVbJWRdOjB4JXggIiwgaiwKPiAtCQkJCQkJUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwg aSwKPiAtCQkJCQkJCQlqKSk7Cj4gLQkJCQlEUFVfREVCVUcoIlxuIik7Cj4gLQkJCX0KPiAtCQkJ YnJlYWs7Cj4gLQkJY2FzZSBQUk9QX1RZUEVfQklUX09GRlNFVF9BUlJBWToKPiAtCQkJcmMgPSBf cGFyc2VfZHRfYml0X29mZnNldChucCwgZHB1X3Byb3BbaV0ucHJvcF9uYW1lLAo+IC0JCQkJcHJv cF92YWx1ZSwgaSwgcHJvcF9jb3VudFtpXSwKPiAtCQkJCWRwdV9wcm9wW2ldLmlzX21hbmRhdG9y eSk7Cj4gLQkJCWlmIChyYyAmJiBkcHVfcHJvcFtpXS5pc19tYW5kYXRvcnkpIHsKPiAtCQkJCURQ VV9FUlJPUigKPiAtCQkJCQkiJXMgcHJvcCB2YWxpZGF0aW9uIHN1Y2Nlc3MgYnV0IHJlYWQgZmFp bGVkXG4iLAo+IC0JCQkJCWRwdV9wcm9wW2ldLnByb3BfbmFtZSk7Cj4gLQkJCQlwcm9wX2V4aXN0 c1tpXSA9IGZhbHNlOwo+IC0JCQkJZ290byBlbmQ7Cj4gLQkJCX0gZWxzZSB7Cj4gLQkJCQlpZiAo cmMpCj4gLQkJCQkJcHJvcF9leGlzdHNbaV0gPSBmYWxzZTsKPiAtCQkJCURQVV9ERUJVRygKPiAt CQkJCQkicHJvcCBpZDolZCBwcm9wIG5hbWU6JXMgcHJvcCB0eXBlOiVkIiwKPiAtCQkJCQlpLCBk cHVfcHJvcFtpXS5wcm9wX25hbWUsCj4gLQkJCQkJZHB1X3Byb3BbaV0udHlwZSk7Cj4gLQkJCQlm b3IgKGogPSAwOyBqIDwgcHJvcF9jb3VudFtpXTsgaisrKQo+IC0JCQkJCURQVV9ERUJVRygKPiAt CQkJCQkiY291bnRbJWRdOiBiaXQ6MHgleCBvZmY6MHgleFxuIiwgaiwKPiAtCQkJCQlQUk9QX0JJ VFZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAo+IC0JCQkJCQlpLCBqLCAwKSwKPiAtCQkJCQlQUk9Q X0JJVFZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAo+IC0JCQkJCQlpLCBqLCAxKSk7Cj4gLQkJCQlE UFVfREVCVUcoIlxuIik7Cj4gLQkJCX0KPiAtCQkJYnJlYWs7Cj4gLQkJY2FzZSBQUk9QX1RZUEVf Tk9ERToKPiAtCQkJLyogTm9kZSB3aWxsIGJlIHBhcnNlZCBpbiBjYWxsaW5nIGZ1bmN0aW9uICov Cj4gLQkJCXJjID0gMDsKPiAtCQkJYnJlYWs7Cj4gLQkJZGVmYXVsdDoKPiAtCQkJRFBVX0RFQlVH KCJpbnZhbGlkIHByb3BlcnR5IHR5cGU6JWRcbiIsCj4gLQkJCQkJCQlkcHVfcHJvcFtpXS50eXBl KTsKPiAtCQkJYnJlYWs7Cj4gLQkJfQo+IC0JCXJjID0gMDsKPiAtCX0KPiAtCj4gLWVuZDoKPiAt CXJldHVybiByYzsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgX2RwdV9zc3BwX3NldHVwX3ZpZyhz dHJ1Y3QgZHB1X21kc3NfY2ZnICpkcHVfY2ZnLAo+IC0Jc3RydWN0IGRwdV9zc3BwX2NmZyAqc3Nw cCwgc3RydWN0IGRwdV9zc3BwX3N1Yl9ibGtzICpzYmxrLAo+IC0JYm9vbCAqcHJvcF9leGlzdHMs IHN0cnVjdCBkcHVfcHJvcF92YWx1ZSAqcHJvcF92YWx1ZSwgdTMyICp2aWdfY291bnQpCj4gLXsK PiAtCXNibGstPm1heHVwc2NhbGUgPSBNQVhfVVBTQ0FMRV9SQVRJTzsKPiAtCXNibGstPm1heGR3 bnNjYWxlID0gTUFYX0RPV05TQ0FMRV9SQVRJTzsKPiAtCXNzcHAtPmlkID0gU1NQUF9WSUcwICsg KnZpZ19jb3VudDsKPiAtCXNucHJpbnRmKHNzcHAtPm5hbWUsIERQVV9IV19CTEtfTkFNRV9MRU4s ICJzc3BwXyV1IiwKPiAtCQkJc3NwcC0+aWQgLSBTU1BQX1ZJRzApOwo+IC0Jc3NwcC0+Y2xrX2N0 cmwgPSBEUFVfQ0xLX0NUUkxfVklHMCArICp2aWdfY291bnQ7Cj4gLQlzc3BwLT50eXBlID0gU1NQ UF9UWVBFX1ZJRzsKPiAtCXNldF9iaXQoRFBVX1NTUFBfUU9TLCAmc3NwcC0+ZmVhdHVyZXMpOwo+ IC0JaWYgKGRwdV9jZmctPnZiaWZfcW9zX25sdmwgPT0gOCkKPiAtCQlzZXRfYml0KERQVV9TU1BQ X1FPU184TFZMLCAmc3NwcC0+ZmVhdHVyZXMpOwo+IC0JKCp2aWdfY291bnQpKys7Cj4gLQo+IC0J aWYgKCFwcm9wX3ZhbHVlKQo+IC0JCXJldHVybjsKPiAtCj4gLQlpZiAoZHB1X2NmZy0+cXNlZWRf dHlwZSA9PSBEUFVfU1NQUF9TQ0FMRVJfUVNFRUQyKSB7Cj4gLQkJc2V0X2JpdChEUFVfU1NQUF9T Q0FMRVJfUVNFRUQyLCAmc3NwcC0+ZmVhdHVyZXMpOwo+IC0JCXNibGstPnNjYWxlcl9ibGsuaWQg PSBEUFVfU1NQUF9TQ0FMRVJfUVNFRUQyOwo+IC0JCXNibGstPnNjYWxlcl9ibGsuYmFzZSA9IFBS T1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCj4gLQkJCVZJR19RU0VFRF9PRkYsIDApOwo+IC0J CXNibGstPnNjYWxlcl9ibGsubGVuID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwKPiAt CQkJVklHX1FTRUVEX0xFTiwgMCk7Cj4gLQkJc25wcmludGYoc2Jsay0+c2NhbGVyX2Jsay5uYW1l LCBEUFVfSFdfQkxLX05BTUVfTEVOLAo+IC0JCQkJInNzcHBfc2NhbGVyJXUiLCBzc3BwLT5pZCAt IFNTUFBfVklHMCk7Cj4gLQl9IGVsc2UgaWYgKGRwdV9jZmctPnFzZWVkX3R5cGUgPT0gRFBVX1NT UFBfU0NBTEVSX1FTRUVEMykgewo+IC0JCXNldF9iaXQoRFBVX1NTUFBfU0NBTEVSX1FTRUVEMywg JnNzcHAtPmZlYXR1cmVzKTsKPiAtCQlzYmxrLT5zY2FsZXJfYmxrLmlkID0gRFBVX1NTUFBfU0NB TEVSX1FTRUVEMzsKPiAtCQlzYmxrLT5zY2FsZXJfYmxrLmJhc2UgPSBQUk9QX1ZBTFVFX0FDQ0VT Uyhwcm9wX3ZhbHVlLAo+IC0JCQlWSUdfUVNFRURfT0ZGLCAwKTsKPiAtCQlzYmxrLT5zY2FsZXJf YmxrLmxlbiA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCj4gLQkJCVZJR19RU0VFRF9M RU4sIDApOwo+IC0JCXNucHJpbnRmKHNibGstPnNjYWxlcl9ibGsubmFtZSwgRFBVX0hXX0JMS19O QU1FX0xFTiwKPiAtCQkJInNzcHBfc2NhbGVyJXUiLCBzc3BwLT5pZCAtIFNTUFBfVklHMCk7Cj4g LQl9Cj4gLQo+IC0Jc2Jsay0+Y3NjX2Jsay5pZCA9IERQVV9TU1BQX0NTQzsKPiAtCXNucHJpbnRm KHNibGstPmNzY19ibGsubmFtZSwgRFBVX0hXX0JMS19OQU1FX0xFTiwKPiAtCQkJInNzcHBfY3Nj JXUiLCBzc3BwLT5pZCAtIFNTUFBfVklHMCk7Cj4gLQlpZiAoZHB1X2NmZy0+Y3NjX3R5cGUgPT0g RFBVX1NTUFBfQ1NDKSB7Cj4gLQkJc2V0X2JpdChEUFVfU1NQUF9DU0MsICZzc3BwLT5mZWF0dXJl cyk7Cj4gLQkJc2Jsay0+Y3NjX2Jsay5iYXNlID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1 ZSwKPiAtCQkJCQkJCVZJR19DU0NfT0ZGLCAwKTsKPiAtCX0gZWxzZSBpZiAoZHB1X2NmZy0+Y3Nj X3R5cGUgPT0gRFBVX1NTUFBfQ1NDXzEwQklUKSB7Cj4gLQkJc2V0X2JpdChEUFVfU1NQUF9DU0Nf MTBCSVQsICZzc3BwLT5mZWF0dXJlcyk7Cj4gLQkJc2Jsay0+Y3NjX2Jsay5iYXNlID0gUFJPUF9W QUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwKPiAtCQkJCQkJCVZJR19DU0NfT0ZGLCAwKTsKPiAtCX0K PiAtCj4gLQlzYmxrLT5oc2ljX2Jsay5pZCA9IERQVV9TU1BQX0hTSUM7Cj4gLQlzbnByaW50Zihz YmxrLT5oc2ljX2Jsay5uYW1lLCBEUFVfSFdfQkxLX05BTUVfTEVOLAo+IC0JCQkic3NwcF9oc2lj JXUiLCBzc3BwLT5pZCAtIFNTUFBfVklHMCk7Cj4gLQlpZiAocHJvcF9leGlzdHNbVklHX0hTSUNf UFJPUF0pIHsKPiAtCQlzYmxrLT5oc2ljX2Jsay5iYXNlID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJv cF92YWx1ZSwKPiAtCQkJVklHX0hTSUNfUFJPUCwgMCk7Cj4gLQkJc2Jsay0+aHNpY19ibGsudmVy c2lvbiA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCj4gLQkJCVZJR19IU0lDX1BST1As IDEpOwo+IC0JCXNibGstPmhzaWNfYmxrLmxlbiA9IDA7Cj4gLQkJc2V0X2JpdChEUFVfU1NQUF9I U0lDLCAmc3NwcC0+ZmVhdHVyZXMpOwo+IC0JfQo+IC0KPiAtCXNibGstPm1lbWNvbG9yX2Jsay5p ZCA9IERQVV9TU1BQX01FTUNPTE9SOwo+IC0Jc25wcmludGYoc2Jsay0+bWVtY29sb3JfYmxrLm5h bWUsIERQVV9IV19CTEtfTkFNRV9MRU4sCj4gLQkJCSJzc3BwX21lbWNvbG9yJXUiLCBzc3BwLT5p ZCAtIFNTUFBfVklHMCk7Cj4gLQlpZiAocHJvcF9leGlzdHNbVklHX01FTUNPTE9SX1BST1BdKSB7 Cj4gLQkJc2Jsay0+bWVtY29sb3JfYmxrLmJhc2UgPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3Zh bHVlLAo+IC0JCQlWSUdfTUVNQ09MT1JfUFJPUCwgMCk7Cj4gLQkJc2Jsay0+bWVtY29sb3JfYmxr LnZlcnNpb24gPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAo+IC0JCQlWSUdfTUVNQ09M T1JfUFJPUCwgMSk7Cj4gLQkJc2Jsay0+bWVtY29sb3JfYmxrLmxlbiA9IDA7Cj4gLQkJc2V0X2Jp dChEUFVfU1NQUF9NRU1DT0xPUiwgJnNzcHAtPmZlYXR1cmVzKTsKPiAtCX0KPiAtCj4gLQlzYmxr LT5wY2NfYmxrLmlkID0gRFBVX1NTUFBfUENDOwo+IC0Jc25wcmludGYoc2Jsay0+cGNjX2Jsay5u YW1lLCBEUFVfSFdfQkxLX05BTUVfTEVOLAo+IC0JCQkic3NwcF9wY2MldSIsIHNzcHAtPmlkIC0g U1NQUF9WSUcwKTsKPiAtCWlmIChwcm9wX2V4aXN0c1tWSUdfUENDX1BST1BdKSB7Cj4gLQkJc2Js ay0+cGNjX2Jsay5iYXNlID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwKPiAtCQkJVklH X1BDQ19QUk9QLCAwKTsKPiAtCQlzYmxrLT5wY2NfYmxrLnZlcnNpb24gPSBQUk9QX1ZBTFVFX0FD Q0VTUyhwcm9wX3ZhbHVlLAo+IC0JCQlWSUdfUENDX1BST1AsIDEpOwo+IC0JCXNibGstPnBjY19i bGsubGVuID0gMDsKPiAtCQlzZXRfYml0KERQVV9TU1BQX1BDQywgJnNzcHAtPmZlYXR1cmVzKTsK PiAtCX0KPiAtCj4gLQlzYmxrLT5mb3JtYXRfbGlzdCA9IGRwdV9jZmctPnZpZ19mb3JtYXRzOwo+ IC0Jc2Jsay0+dmlydF9mb3JtYXRfbGlzdCA9IGRwdV9jZmctPmRtYV9mb3JtYXRzOwo+IC19Cj4g LQo+IC1zdGF0aWMgdm9pZCBfZHB1X3NzcHBfc2V0dXBfcmdiKHN0cnVjdCBkcHVfbWRzc19jZmcg KmRwdV9jZmcsCj4gLQlzdHJ1Y3QgZHB1X3NzcHBfY2ZnICpzc3BwLCBzdHJ1Y3QgZHB1X3NzcHBf c3ViX2Jsa3MgKnNibGssCj4gLQlib29sICpwcm9wX2V4aXN0cywgc3RydWN0IGRwdV9wcm9wX3Zh bHVlICpwcm9wX3ZhbHVlLCB1MzIgKnJnYl9jb3VudCkKPiAtewo+IC0Jc2Jsay0+bWF4dXBzY2Fs ZSA9IE1BWF9VUFNDQUxFX1JBVElPOwo+IC0Jc2Jsay0+bWF4ZHduc2NhbGUgPSBNQVhfRE9XTlND QUxFX1JBVElPOwo+IC0Jc3NwcC0+aWQgPSBTU1BQX1JHQjAgKyAqcmdiX2NvdW50Owo+IC0Jc25w cmludGYoc3NwcC0+bmFtZSwgRFBVX0hXX0JMS19OQU1FX0xFTiwgInNzcHBfJXUiLAo+IC0JCQlz c3BwLT5pZCAtIFNTUFBfVklHMCk7Cj4gLQlzc3BwLT5jbGtfY3RybCA9IERQVV9DTEtfQ1RSTF9S R0IwICsgKnJnYl9jb3VudDsKPiAtCXNzcHAtPnR5cGUgPSBTU1BQX1RZUEVfUkdCOwo+IC0Jc2V0 X2JpdChEUFVfU1NQUF9RT1MsICZzc3BwLT5mZWF0dXJlcyk7Cj4gLQlpZiAoZHB1X2NmZy0+dmJp Zl9xb3Nfbmx2bCA9PSA4KQo+IC0JCXNldF9iaXQoRFBVX1NTUFBfUU9TXzhMVkwsICZzc3BwLT5m ZWF0dXJlcyk7Cj4gLQkoKnJnYl9jb3VudCkrKzsKPiAtCj4gLQlpZiAoIXByb3BfdmFsdWUpCj4g LQkJcmV0dXJuOwo+IC0KPiAtCWlmIChkcHVfY2ZnLT5xc2VlZF90eXBlID09IERQVV9TU1BQX1ND QUxFUl9RU0VFRDIpIHsKPiAtCQlzZXRfYml0KERQVV9TU1BQX1NDQUxFUl9SR0IsICZzc3BwLT5m ZWF0dXJlcyk7Cj4gLQkJc2Jsay0+c2NhbGVyX2Jsay5pZCA9IERQVV9TU1BQX1NDQUxFUl9RU0VF RDI7Cj4gLQkJc2Jsay0+c2NhbGVyX2Jsay5iYXNlID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92 YWx1ZSwKPiAtCQkJUkdCX1NDQUxFUl9PRkYsIDApOwo+IC0JCXNibGstPnNjYWxlcl9ibGsubGVu ID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwKPiAtCQkJUkdCX1NDQUxFUl9MRU4sIDAp Owo+IC0JCXNucHJpbnRmKHNibGstPnNjYWxlcl9ibGsubmFtZSwgRFBVX0hXX0JMS19OQU1FX0xF TiwKPiAtCQkJInNzcHBfc2NhbGVyJXUiLCBzc3BwLT5pZCAtIFNTUFBfVklHMCk7Cj4gLQl9IGVs c2UgaWYgKGRwdV9jZmctPnFzZWVkX3R5cGUgPT0gRFBVX1NTUFBfU0NBTEVSX1FTRUVEMykgewo+ IC0JCXNldF9iaXQoRFBVX1NTUFBfU0NBTEVSX1JHQiwgJnNzcHAtPmZlYXR1cmVzKTsKPiAtCQlz YmxrLT5zY2FsZXJfYmxrLmlkID0gRFBVX1NTUFBfU0NBTEVSX1FTRUVEMzsKPiAtCQlzYmxrLT5z Y2FsZXJfYmxrLmJhc2UgPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAo+IC0JCQlSR0Jf U0NBTEVSX0xFTiwgMCk7Cj4gLQkJc2Jsay0+c2NhbGVyX2Jsay5sZW4gPSBQUk9QX1ZBTFVFX0FD Q0VTUyhwcm9wX3ZhbHVlLAo+IC0JCQlTU1BQX1NDQUxFX1NJWkUsIDApOwo+IC0JCXNucHJpbnRm KHNibGstPnNjYWxlcl9ibGsubmFtZSwgRFBVX0hXX0JMS19OQU1FX0xFTiwKPiAtCQkJInNzcHBf c2NhbGVyJXUiLCBzc3BwLT5pZCAtIFNTUFBfVklHMCk7Cj4gLQl9Cj4gLQo+IC0Jc2Jsay0+cGNj X2Jsay5pZCA9IERQVV9TU1BQX1BDQzsKPiAtCWlmIChwcm9wX2V4aXN0c1tSR0JfUENDX1BST1Bd KSB7Cj4gLQkJc2Jsay0+cGNjX2Jsay5iYXNlID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1 ZSwKPiAtCQkJUkdCX1BDQ19QUk9QLCAwKTsKPiAtCQlzYmxrLT5wY2NfYmxrLnZlcnNpb24gPSBQ Uk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAo+IC0JCQlSR0JfUENDX1BST1AsIDEpOwo+IC0J CXNibGstPnBjY19ibGsubGVuID0gMDsKPiAtCQlzZXRfYml0KERQVV9TU1BQX1BDQywgJnNzcHAt PmZlYXR1cmVzKTsKPiAtCX0KPiAtCj4gLQlzYmxrLT5mb3JtYXRfbGlzdCA9IGRwdV9jZmctPmRt YV9mb3JtYXRzOwo+IC0Jc2Jsay0+dmlydF9mb3JtYXRfbGlzdCA9IE5VTEw7Cj4gLX0KPiAtCj4g LXN0YXRpYyB2b2lkIF9kcHVfc3NwcF9zZXR1cF9jdXJzb3Ioc3RydWN0IGRwdV9tZHNzX2NmZyAq ZHB1X2NmZywKPiAtCXN0cnVjdCBkcHVfc3NwcF9jZmcgKnNzcHAsIHN0cnVjdCBkcHVfc3NwcF9z dWJfYmxrcyAqc2JsaywKPiAtCXN0cnVjdCBkcHVfcHJvcF92YWx1ZSAqcHJvcF92YWx1ZSwgdTMy ICpjdXJzb3JfY291bnQpCj4gLXsKPiAtCWlmICghSVNfRFBVX01BSk9SX01JTk9SX1NBTUUoZHB1 X2NmZy0+aHd2ZXJzaW9uLCBEUFVfSFdfVkVSXzMwMCkpCj4gLQkJRFBVX0VSUk9SKCJpbnZhbGlk IHNzcHAgdHlwZSAlZCwgeGluIGlkICVkXG4iLAo+IC0JCQkJc3NwcC0+dHlwZSwgc3NwcC0+eGlu X2lkKTsKPiAtCXNldF9iaXQoRFBVX1NTUFBfQ1VSU09SLCAmc3NwcC0+ZmVhdHVyZXMpOwo+IC0J c2Jsay0+bWF4dXBzY2FsZSA9IFNTUFBfVU5JVFlfU0NBTEU7Cj4gLQlzYmxrLT5tYXhkd25zY2Fs ZSA9IFNTUFBfVU5JVFlfU0NBTEU7Cj4gLQlzYmxrLT5mb3JtYXRfbGlzdCA9IGRwdV9jZmctPmN1 cnNvcl9mb3JtYXRzOwo+IC0Jc2Jsay0+dmlydF9mb3JtYXRfbGlzdCA9IE5VTEw7Cj4gLQlzc3Bw LT5pZCA9IFNTUFBfQ1VSU09SMCArICpjdXJzb3JfY291bnQ7Cj4gLQlzbnByaW50Zihzc3BwLT5u YW1lLCBEUFVfSFdfQkxLX05BTUVfTEVOLCAic3NwcF8ldSIsCj4gLQkJCXNzcHAtPmlkIC0gU1NQ UF9WSUcwKTsKPiAtCXNzcHAtPmNsa19jdHJsID0gRFBVX0NMS19DVFJMX0NVUlNPUjAgKyAqY3Vy c29yX2NvdW50Owo+IC0Jc3NwcC0+dHlwZSA9IFNTUFBfVFlQRV9DVVJTT1I7Cj4gLQkoKmN1cnNv cl9jb3VudCkrKzsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgX2RwdV9zc3BwX3NldHVwX2RtYShz dHJ1Y3QgZHB1X21kc3NfY2ZnICpkcHVfY2ZnLAo+IC0Jc3RydWN0IGRwdV9zc3BwX2NmZyAqc3Nw cCwgc3RydWN0IGRwdV9zc3BwX3N1Yl9ibGtzICpzYmxrLAo+IC0Jc3RydWN0IGRwdV9wcm9wX3Zh bHVlICpwcm9wX3ZhbHVlLCB1MzIgKmRtYV9jb3VudCkKPiAtewo+IC0Jc2Jsay0+bWF4dXBzY2Fs ZSA9IFNTUFBfVU5JVFlfU0NBTEU7Cj4gLQlzYmxrLT5tYXhkd25zY2FsZSA9IFNTUFBfVU5JVFlf U0NBTEU7Cj4gLQlzYmxrLT5mb3JtYXRfbGlzdCA9IGRwdV9jZmctPmRtYV9mb3JtYXRzOwo+IC0J c2Jsay0+dmlydF9mb3JtYXRfbGlzdCA9IGRwdV9jZmctPmRtYV9mb3JtYXRzOwo+IC0Jc3NwcC0+ aWQgPSBTU1BQX0RNQTAgKyAqZG1hX2NvdW50Owo+IC0Jc3NwcC0+Y2xrX2N0cmwgPSBEUFVfQ0xL X0NUUkxfRE1BMCArICpkbWFfY291bnQ7Cj4gLQlzbnByaW50Zihzc3BwLT5uYW1lLCBEUFVfSFdf QkxLX05BTUVfTEVOLCAic3NwcF8ldSIsCj4gLQkJCXNzcHAtPmlkIC0gU1NQUF9WSUcwKTsKPiAt CXNzcHAtPnR5cGUgPSBTU1BQX1RZUEVfRE1BOwo+IC0Jc2V0X2JpdChEUFVfU1NQUF9RT1MsICZz c3BwLT5mZWF0dXJlcyk7Cj4gLQlpZiAoZHB1X2NmZy0+dmJpZl9xb3Nfbmx2bCA9PSA4KQo+IC0J CXNldF9iaXQoRFBVX1NTUFBfUU9TXzhMVkwsICZzc3BwLT5mZWF0dXJlcyk7Cj4gLQkoKmRtYV9j b3VudCkrKzsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBkcHVfc3NwcF9wYXJzZV9kdChzdHJ1Y3Qg ZGV2aWNlX25vZGUgKm5wLAo+IC0Jc3RydWN0IGRwdV9tZHNzX2NmZyAqZHB1X2NmZykKPiAtewo+ IC0JaW50IHJjLCBwcm9wX2NvdW50W1NTUFBfUFJPUF9NQVhdLCBvZmZfY291bnQsIGksIGo7Cj4g LQlpbnQgdmlnX3Byb3BfY291bnRbVklHX1BST1BfTUFYXSwgcmdiX3Byb3BfY291bnRbUkdCX1BS T1BfTUFYXTsKPiAtCWJvb2wgcHJvcF9leGlzdHNbU1NQUF9QUk9QX01BWF0sIHZpZ19wcm9wX2V4 aXN0c1tWSUdfUFJPUF9NQVhdOwo+IC0JYm9vbCByZ2JfcHJvcF9leGlzdHNbUkdCX1BST1BfTUFY XTsKPiAtCXN0cnVjdCBkcHVfcHJvcF92YWx1ZSAqcHJvcF92YWx1ZSA9IE5VTEw7Cj4gLQlzdHJ1 Y3QgZHB1X3Byb3BfdmFsdWUgKnZpZ19wcm9wX3ZhbHVlID0gTlVMTCwgKnJnYl9wcm9wX3ZhbHVl ID0gTlVMTDsKPiAtCWNvbnN0IGNoYXIgKnR5cGU7Cj4gLQlzdHJ1Y3QgZHB1X3NzcHBfY2ZnICpz c3BwOwo+IC0Jc3RydWN0IGRwdV9zc3BwX3N1Yl9ibGtzICpzYmxrOwo+IC0JdTMyIHZpZ19jb3Vu dCA9IDAsIGRtYV9jb3VudCA9IDAsIHJnYl9jb3VudCA9IDAsIGN1cnNvcl9jb3VudCA9IDA7Cj4g LQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnNucCA9IE5VTEw7Cj4gLQo+IC0JcHJvcF92YWx1ZSA9IGtj YWxsb2MoU1NQUF9QUk9QX01BWCwKPiAtCQkJc2l6ZW9mKHN0cnVjdCBkcHVfcHJvcF92YWx1ZSks IEdGUF9LRVJORUwpOwo+IC0JaWYgKCFwcm9wX3ZhbHVlKSB7Cj4gLQkJcmMgPSAtRU5PTUVNOwo+ IC0JCWdvdG8gZW5kOwo+IC0JfQo+IC0KPiAtCXJjID0gX3ZhbGlkYXRlX2R0X2VudHJ5KG5wLCBz c3BwX3Byb3AsIEFSUkFZX1NJWkUoc3NwcF9wcm9wKSwKPiAtCQlwcm9wX2NvdW50LCAmb2ZmX2Nv dW50KTsKPiAtCWlmIChyYykKPiAtCQlnb3RvIGVuZDsKPiAtCj4gLQlyYyA9IF9yZWFkX2R0X2Vu dHJ5KG5wLCBzc3BwX3Byb3AsIEFSUkFZX1NJWkUoc3NwcF9wcm9wKSwgcHJvcF9jb3VudCwKPiAt CQkJCQlwcm9wX2V4aXN0cywgcHJvcF92YWx1ZSk7Cj4gLQlpZiAocmMpCj4gLQkJZ290byBlbmQ7 Cj4gLQo+IC0JZHB1X2NmZy0+c3NwcF9jb3VudCA9IG9mZl9jb3VudDsKPiAtCj4gLQkvKiBnZXQg dmlnIGZlYXR1cmUgZHQgcHJvcGVydGllcyBpZiB0aGV5IGV4aXN0ICovCj4gLQlzbnAgPSBvZl9n ZXRfY2hpbGRfYnlfbmFtZShucCwgc3NwcF9wcm9wW1NTUFBfVklHX0JMT0NLU10ucHJvcF9uYW1l KTsKPiAtCWlmIChzbnApIHsKPiAtCQl2aWdfcHJvcF92YWx1ZSA9IGtjYWxsb2MoVklHX1BST1Bf TUFYLAo+IC0JCQlzaXplb2Yoc3RydWN0IGRwdV9wcm9wX3ZhbHVlKSwgR0ZQX0tFUk5FTCk7Cj4g LQkJaWYgKCF2aWdfcHJvcF92YWx1ZSkgewo+IC0JCQlyYyA9IC1FTk9NRU07Cj4gLQkJCWdvdG8g ZW5kOwo+IC0JCX0KPiAtCQlyYyA9IF92YWxpZGF0ZV9kdF9lbnRyeShzbnAsIHZpZ19wcm9wLCBB UlJBWV9TSVpFKHZpZ19wcm9wKSwKPiAtCQkJdmlnX3Byb3BfY291bnQsIE5VTEwpOwo+IC0JCWlm IChyYykKPiAtCQkJZ290byBlbmQ7Cj4gLQkJcmMgPSBfcmVhZF9kdF9lbnRyeShzbnAsIHZpZ19w cm9wLCBBUlJBWV9TSVpFKHZpZ19wcm9wKSwKPiAtCQkJCXZpZ19wcm9wX2NvdW50LCB2aWdfcHJv cF9leGlzdHMsCj4gLQkJCQl2aWdfcHJvcF92YWx1ZSk7Cj4gLQl9Cj4gLQo+IC0JLyogZ2V0IHJn YiBmZWF0dXJlIGR0IHByb3BlcnRpZXMgaWYgdGhleSBleGlzdCAqLwo+IC0Jc25wID0gb2ZfZ2V0 X2NoaWxkX2J5X25hbWUobnAsIHNzcHBfcHJvcFtTU1BQX1JHQl9CTE9DS1NdLnByb3BfbmFtZSk7 Cj4gLQlpZiAoc25wKSB7Cj4gLQkJcmdiX3Byb3BfdmFsdWUgPSBrY2FsbG9jKFJHQl9QUk9QX01B WCwKPiAtCQkJCQlzaXplb2Yoc3RydWN0IGRwdV9wcm9wX3ZhbHVlKSwKPiAtCQkJCQlHRlBfS0VS TkVMKTsKPiAtCQlpZiAoIXJnYl9wcm9wX3ZhbHVlKSB7Cj4gLQkJCXJjID0gLUVOT01FTTsKPiAt CQkJZ290byBlbmQ7Cj4gLQkJfQo+IC0JCXJjID0gX3ZhbGlkYXRlX2R0X2VudHJ5KHNucCwgcmdi X3Byb3AsIEFSUkFZX1NJWkUocmdiX3Byb3ApLAo+IC0JCQlyZ2JfcHJvcF9jb3VudCwgTlVMTCk7 Cj4gLQkJaWYgKHJjKQo+IC0JCQlnb3RvIGVuZDsKPiAtCQlyYyA9IF9yZWFkX2R0X2VudHJ5KHNu cCwgcmdiX3Byb3AsIEFSUkFZX1NJWkUocmdiX3Byb3ApLAo+IC0JCQkJcmdiX3Byb3BfY291bnQs IHJnYl9wcm9wX2V4aXN0cywKPiAtCQkJCXJnYl9wcm9wX3ZhbHVlKTsKPiAtCX0KPiAtCj4gLQlm b3IgKGkgPSAwOyBpIDwgb2ZmX2NvdW50OyBpKyspIHsKPiAtCQlzc3BwID0gZHB1X2NmZy0+c3Nw cCArIGk7Cj4gLQkJc2JsayA9IGt6YWxsb2Moc2l6ZW9mKCpzYmxrKSwgR0ZQX0tFUk5FTCk7Cj4g LQkJaWYgKCFzYmxrKSB7Cj4gLQkJCXJjID0gLUVOT01FTTsKPiAtCQkJLyogY2F0YWxvZyBkZWlu aXQgd2lsbCByZWxlYXNlIHRoZSBhbGxvY2F0ZWQgYmxvY2tzICovCj4gLQkJCWdvdG8gZW5kOwo+ IC0JCX0KPiAtCQlzc3BwLT5zYmxrID0gc2JsazsKPiAtCj4gLQkJc3NwcC0+YmFzZSA9IFBST1Bf VkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsIFNTUFBfT0ZGLCBpKTsKPiAtCQlzc3BwLT5sZW4gPSBQ Uk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBTU1BQX1NJWkUsIDApOwo+IC0JCXNibGstPm1h eGxpbmV3aWR0aCA9IGRwdV9jZmctPm1heF9zc3BwX2xpbmV3aWR0aDsKPiAtCj4gLQkJc2V0X2Jp dChEUFVfU1NQUF9TUkMsICZzc3BwLT5mZWF0dXJlcyk7Cj4gLQo+IC0JCWlmIChkcHVfY2ZnLT5o YXNfY2RwKQo+IC0JCQlzZXRfYml0KERQVV9TU1BQX0NEUCwgJnNzcHAtPmZlYXR1cmVzKTsKPiAt Cj4gLQkJaWYgKGRwdV9jZmctPnRzX3ByZWZpbGxfcmV2ID09IDEpIHsKPiAtCQkJc2V0X2JpdChE UFVfU1NQUF9UU19QUkVGSUxMLCAmc3NwcC0+ZmVhdHVyZXMpOwo+IC0JCX0gZWxzZSBpZiAoZHB1 X2NmZy0+dHNfcHJlZmlsbF9yZXYgPT0gMikgewo+IC0JCQlzZXRfYml0KERQVV9TU1BQX1RTX1BS RUZJTEwsICZzc3BwLT5mZWF0dXJlcyk7Cj4gLQkJCXNldF9iaXQoRFBVX1NTUFBfVFNfUFJFRklM TF9SRUMxLCAmc3NwcC0+ZmVhdHVyZXMpOwo+IC0JCX0KPiAtCj4gLQkJc2Jsay0+c21hcnRfZG1h X3ByaW9yaXR5ID0KPiAtCQkJUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwgU1NQUF9TTUFS VF9ETUEsIGkpOwo+IC0KPiAtCQlpZiAoc2Jsay0+c21hcnRfZG1hX3ByaW9yaXR5ICYmIGRwdV9j ZmctPnNtYXJ0X2RtYV9yZXYpCj4gLQkJCXNldF9iaXQoZHB1X2NmZy0+c21hcnRfZG1hX3Jldiwg JnNzcHAtPmZlYXR1cmVzKTsKPiAtCj4gLQkJc2Jsay0+c3JjX2Jsay5pZCA9IERQVV9TU1BQX1NS QzsKPiAtCj4gLQkJb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmdfaW5kZXgobnAsCj4gLQkJCQlzc3Bw X3Byb3BbU1NQUF9UWVBFXS5wcm9wX25hbWUsIGksICZ0eXBlKTsKPiAtCQlpZiAoIXN0cmNtcCh0 eXBlLCAidmlnIikpIHsKPiAtCQkJX2RwdV9zc3BwX3NldHVwX3ZpZyhkcHVfY2ZnLCBzc3BwLCBz YmxrLAo+IC0JCQkJdmlnX3Byb3BfZXhpc3RzLCB2aWdfcHJvcF92YWx1ZSwgJnZpZ19jb3VudCk7 Cj4gLQkJfSBlbHNlIGlmICghc3RyY21wKHR5cGUsICJyZ2IiKSkgewo+IC0JCQlfZHB1X3NzcHBf c2V0dXBfcmdiKGRwdV9jZmcsIHNzcHAsIHNibGssCj4gLQkJCQlyZ2JfcHJvcF9leGlzdHMsIHJn Yl9wcm9wX3ZhbHVlLCAmcmdiX2NvdW50KTsKPiAtCQl9IGVsc2UgaWYgKCFzdHJjbXAodHlwZSwg ImN1cnNvciIpKSB7Cj4gLQkJCS8qIE5vIHByb3AgdmFsdWVzIGZvciBjdXJzb3IgcGlwZXMgKi8K PiAtCQkJX2RwdV9zc3BwX3NldHVwX2N1cnNvcihkcHVfY2ZnLCBzc3BwLCBzYmxrLCBOVUxMLAo+ IC0JCQkJCQkJCSZjdXJzb3JfY291bnQpOwo+IC0JCX0gZWxzZSBpZiAoIXN0cmNtcCh0eXBlLCAi ZG1hIikpIHsKPiAtCQkJLyogTm8gcHJvcCB2YWx1ZXMgZm9yIERNQSBwaXBlcyAqLwo+IC0JCQlf ZHB1X3NzcHBfc2V0dXBfZG1hKGRwdV9jZmcsIHNzcHAsIHNibGssIE5VTEwsCj4gLQkJCQkJCQkJ JmRtYV9jb3VudCk7Cj4gLQkJfSBlbHNlIHsKPiAtCQkJRFBVX0VSUk9SKCJpbnZhbGlkIHNzcHAg dHlwZTolc1xuIiwgdHlwZSk7Cj4gLQkJCXJjID0gLUVJTlZBTDsKPiAtCQkJZ290byBlbmQ7Cj4g LQkJfQo+IC0KPiAtCQlzbnByaW50ZihzYmxrLT5zcmNfYmxrLm5hbWUsIERQVV9IV19CTEtfTkFN RV9MRU4sICJzc3BwX3NyY18ldSIsCj4gLQkJCQlzc3BwLT5pZCAtIFNTUFBfVklHMCk7Cj4gLQo+ IC0JCWlmIChzc3BwLT5jbGtfY3RybCA+PSBEUFVfQ0xLX0NUUkxfTUFYKSB7Cj4gLQkJCURQVV9F UlJPUigiJXM6IGludmFsaWQgY2xrIGN0cmw6ICVkXG4iLAo+IC0JCQkJCXNibGstPnNyY19ibGsu bmFtZSwgc3NwcC0+Y2xrX2N0cmwpOwo+IC0JCQlyYyA9IC1FSU5WQUw7Cj4gLQkJCWdvdG8gZW5k Owo+IC0JCX0KPiAtCj4gLQkJc2Jsay0+bWF4aGRlY2lleHAgPSBNQVhfSE9SWl9ERUNJTUFUSU9O Owo+IC0JCXNibGstPm1heHZkZWNpZXhwID0gTUFYX1ZFUlRfREVDSU1BVElPTjsKPiAtCj4gLQkJ c3NwcC0+eGluX2lkID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwgU1NQUF9YSU4sIGkp Owo+IC0JCXNibGstPnBpeGVsX3JhbV9zaXplID0gREVGQVVMVF9QSVhFTF9SQU1fU0laRTsKPiAt CQlzYmxrLT5zcmNfYmxrLmxlbiA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsIFNTUFBf U0laRSwgMCk7Cj4gLQo+IC0JCWlmIChQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBTU1BQ X0VYQ0xfUkVDVCwgaSkgPT0gMSkKPiAtCQkJc2V0X2JpdChEUFVfU1NQUF9FWENMX1JFQ1QsICZz c3BwLT5mZWF0dXJlcyk7Cj4gLQo+IC0JCWlmIChwcm9wX2V4aXN0c1tTU1BQX01BWF9QRVJfUElQ RV9CV10pCj4gLQkJCXNibGstPm1heF9wZXJfcGlwZV9idyA9IFBST1BfVkFMVUVfQUNDRVNTKHBy b3BfdmFsdWUsCj4gLQkJCQkJU1NQUF9NQVhfUEVSX1BJUEVfQlcsIGkpOwo+IC0JCWVsc2UKPiAt CQkJc2Jsay0+bWF4X3Blcl9waXBlX2J3ID0gREVGQVVMVF9NQVhfUEVSX1BJUEVfQlc7Cj4gLQo+ IC0JCWZvciAoaiA9IDA7IGogPCBkcHVfY2ZnLT5tZHBfY291bnQ7IGorKykgewo+IC0JCQlkcHVf Y2ZnLT5tZHBbal0uY2xrX2N0cmxzW3NzcHAtPmNsa19jdHJsXS5yZWdfb2ZmID0KPiAtCQkJCVBS T1BfQklUVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCj4gLQkJCQkJCVNTUFBfQ0xLX0NUUkwsIGks IDApOwo+IC0JCQlkcHVfY2ZnLT5tZHBbal0uY2xrX2N0cmxzW3NzcHAtPmNsa19jdHJsXS5iaXRf b2ZmID0KPiAtCQkJCVBST1BfQklUVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCj4gLQkJCQkJCVNT UFBfQ0xLX0NUUkwsIGksIDEpOwo+IC0JCX0KPiAtCj4gLQkJRFBVX0RFQlVHKAo+IC0JCQkieGlu OiVkIHJhbTolZCBjbGslZDoleC8lZFxuIiwKPiAtCQkJc3NwcC0+eGluX2lkLAo+IC0JCQlzYmxr LT5waXhlbF9yYW1fc2l6ZSwKPiAtCQkJc3NwcC0+Y2xrX2N0cmwsCj4gLQkJCWRwdV9jZmctPm1k cFswXS5jbGtfY3RybHNbc3NwcC0+Y2xrX2N0cmxdLnJlZ19vZmYsCj4gLQkJCWRwdV9jZmctPm1k cFswXS5jbGtfY3RybHNbc3NwcC0+Y2xrX2N0cmxdLmJpdF9vZmYpOwo+IC0JfQo+IC0KPiAtZW5k Ogo+IC0Ja2ZyZWUocHJvcF92YWx1ZSk7Cj4gLQlrZnJlZSh2aWdfcHJvcF92YWx1ZSk7Cj4gLQlr ZnJlZShyZ2JfcHJvcF92YWx1ZSk7Cj4gLQlyZXR1cm4gcmM7Cj4gLX0KPiAtCj4gLXN0YXRpYyBp bnQgZHB1X2N0bF9wYXJzZV9kdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAo+IC0JCXN0cnVjdCBk cHVfbWRzc19jZmcgKmRwdV9jZmcpCj4gLXsKPiAtCWludCByYywgcHJvcF9jb3VudFtIV19QUk9Q X01BWF0sIGk7Cj4gLQlib29sIHByb3BfZXhpc3RzW0hXX1BST1BfTUFYXTsKPiAtCXN0cnVjdCBk cHVfcHJvcF92YWx1ZSAqcHJvcF92YWx1ZSA9IE5VTEw7Cj4gLQlzdHJ1Y3QgZHB1X2N0bF9jZmcg KmN0bDsKPiAtCXUzMiBvZmZfY291bnQ7Cj4gLQo+IC0JaWYgKCFkcHVfY2ZnKSB7Cj4gLQkJRFBV X0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50IGlucHV0IHBhcmFtXG4iKTsKPiAtCQlyYyA9IC1FSU5W QUw7Cj4gLQkJZ290byBlbmQ7Cj4gLQl9Cj4gLQo+IC0JcHJvcF92YWx1ZSA9IGt6YWxsb2MoSFdf UFJPUF9NQVggKgo+IC0JCQlzaXplb2Yoc3RydWN0IGRwdV9wcm9wX3ZhbHVlKSwgR0ZQX0tFUk5F TCk7Cj4gLQlpZiAoIXByb3BfdmFsdWUpIHsKPiAtCQlyYyA9IC1FTk9NRU07Cj4gLQkJZ290byBl bmQ7Cj4gLQl9Cj4gLQo+IC0JcmMgPSBfdmFsaWRhdGVfZHRfZW50cnkobnAsIGN0bF9wcm9wLCBB UlJBWV9TSVpFKGN0bF9wcm9wKSwgcHJvcF9jb3VudCwKPiAtCQkmb2ZmX2NvdW50KTsKPiAtCWlm IChyYykKPiAtCQlnb3RvIGVuZDsKPiAtCj4gLQlkcHVfY2ZnLT5jdGxfY291bnQgPSBvZmZfY291 bnQ7Cj4gLQo+IC0JcmMgPSBfcmVhZF9kdF9lbnRyeShucCwgY3RsX3Byb3AsIEFSUkFZX1NJWkUo Y3RsX3Byb3ApLCBwcm9wX2NvdW50LAo+IC0JCXByb3BfZXhpc3RzLCBwcm9wX3ZhbHVlKTsKPiAt CWlmIChyYykKPiAtCQlnb3RvIGVuZDsKPiAtCj4gLQlmb3IgKGkgPSAwOyBpIDwgb2ZmX2NvdW50 OyBpKyspIHsKPiAtCQljdGwgPSBkcHVfY2ZnLT5jdGwgKyBpOwo+IC0JCWN0bC0+YmFzZSA9IFBS T1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsIEhXX09GRiwgaSk7Cj4gLQkJY3RsLT5sZW4gPSBQ Uk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBIV19MRU4sIDApOwo+IC0JCWN0bC0+aWQgPSBD VExfMCArIGk7Cj4gLQkJc25wcmludGYoY3RsLT5uYW1lLCBEUFVfSFdfQkxLX05BTUVfTEVOLCAi Y3RsXyV1IiwKPiAtCQkJCWN0bC0+aWQgLSBDVExfMCk7Cj4gLQo+IC0JCWlmIChpIDwgTUFYX1NQ TElUX0RJU1BMQVlfQ1RMKQo+IC0JCQlzZXRfYml0KERQVV9DVExfU1BMSVRfRElTUExBWSwgJmN0 bC0+ZmVhdHVyZXMpOwo+IC0JCWlmIChpIDwgTUFYX1BQX1NQTElUX0RJU1BMQVlfQ1RMKQo+IC0J CQlzZXRfYml0KERQVV9DVExfUElOR1BPTkdfU1BMSVQsICZjdGwtPmZlYXR1cmVzKTsKPiAtCX0K PiAtCj4gLWVuZDoKPiAtCWtmcmVlKHByb3BfdmFsdWUpOwo+IC0JcmV0dXJuIHJjOwo+IC19Cj4g LQo+IC1zdGF0aWMgaW50IGRwdV9taXhlcl9wYXJzZV9kdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5w LAo+IC0JCQkJCQlzdHJ1Y3QgZHB1X21kc3NfY2ZnICpkcHVfY2ZnKQo+IC17Cj4gLQlpbnQgcmMs IHByb3BfY291bnRbTUlYRVJfUFJPUF9NQVhdLCBpLCBqOwo+IC0JaW50IGJsb2Nrc19wcm9wX2Nv dW50W01JWEVSX0JMT0NLU19QUk9QX01BWF07Cj4gLQlpbnQgYmxlbmRfcHJvcF9jb3VudFtNSVhF Ul9CTEVORF9QUk9QX01BWF07Cj4gLQlib29sIHByb3BfZXhpc3RzW01JWEVSX1BST1BfTUFYXTsK PiAtCWJvb2wgYmxvY2tzX3Byb3BfZXhpc3RzW01JWEVSX0JMT0NLU19QUk9QX01BWF07Cj4gLQli b29sIGJsZW5kX3Byb3BfZXhpc3RzW01JWEVSX0JMRU5EX1BST1BfTUFYXTsKPiAtCXN0cnVjdCBk cHVfcHJvcF92YWx1ZSAqcHJvcF92YWx1ZSA9IE5VTEwsICpibG9ja3NfcHJvcF92YWx1ZSA9IE5V TEw7Cj4gLQlzdHJ1Y3QgZHB1X3Byb3BfdmFsdWUgKmJsZW5kX3Byb3BfdmFsdWUgPSBOVUxMOwo+ IC0JdTMyIG9mZl9jb3VudCwgYmxlbmRfb2ZmX2NvdW50LCBtYXhfYmxlbmRzdGFnZXMsIGxtX3Bh aXJfbWFzazsKPiAtCXN0cnVjdCBkcHVfbG1fY2ZnICptaXhlcjsKPiAtCXN0cnVjdCBkcHVfbG1f c3ViX2Jsa3MgKnNibGs7Cj4gLQlpbnQgcHBfY291bnQsIGRzcHBfY291bnQsIGRzX2NvdW50Owo+ IC0JdTMyIHBwX2lkeCwgZHNwcF9pZHgsIGRzX2lkeDsKPiAtCXN0cnVjdCBkZXZpY2Vfbm9kZSAq c25wID0gTlVMTDsKPiAtCj4gLQlpZiAoIWRwdV9jZmcpIHsKPiAtCQlEUFVfRVJST1IoImludmFs aWQgYXJndW1lbnQgaW5wdXQgcGFyYW1cbiIpOwo+IC0JCXJjID0gLUVJTlZBTDsKPiAtCQlnb3Rv IGVuZDsKPiAtCX0KPiAtCW1heF9ibGVuZHN0YWdlcyA9IGRwdV9jZmctPm1heF9taXhlcl9ibGVu ZHN0YWdlczsKPiAtCj4gLQlwcm9wX3ZhbHVlID0ga2NhbGxvYyhNSVhFUl9QUk9QX01BWCwKPiAt CQkJc2l6ZW9mKHN0cnVjdCBkcHVfcHJvcF92YWx1ZSksIEdGUF9LRVJORUwpOwo+IC0JaWYgKCFw cm9wX3ZhbHVlKSB7Cj4gLQkJcmMgPSAtRU5PTUVNOwo+IC0JCWdvdG8gZW5kOwo+IC0JfQo+IC0K PiAtCXJjID0gX3ZhbGlkYXRlX2R0X2VudHJ5KG5wLCBtaXhlcl9wcm9wLCBBUlJBWV9TSVpFKG1p eGVyX3Byb3ApLAo+IC0JCXByb3BfY291bnQsICZvZmZfY291bnQpOwo+IC0JaWYgKHJjKQo+IC0J CWdvdG8gZW5kOwo+IC0KPiAtCWRwdV9jZmctPm1peGVyX2NvdW50ID0gb2ZmX2NvdW50Owo+IC0K PiAtCXJjID0gX3JlYWRfZHRfZW50cnkobnAsIG1peGVyX3Byb3AsIEFSUkFZX1NJWkUobWl4ZXJf cHJvcCksIHByb3BfY291bnQsCj4gLQkJcHJvcF9leGlzdHMsIHByb3BfdmFsdWUpOwo+IC0JaWYg KHJjKQo+IC0JCWdvdG8gZW5kOwo+IC0KPiAtCXBwX2NvdW50ID0gZHB1X2NmZy0+cGluZ3Bvbmdf Y291bnQ7Cj4gLQlkc3BwX2NvdW50ID0gZHB1X2NmZy0+ZHNwcF9jb3VudDsKPiAtCWRzX2NvdW50 ID0gZHB1X2NmZy0+ZHNfY291bnQ7Cj4gLQo+IC0JLyogZ2V0IG1peGVyIGZlYXR1cmUgZHQgcHJv cGVydGllcyBpZiB0aGV5IGV4aXN0ICovCj4gLQlzbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShu cCwgbWl4ZXJfcHJvcFtNSVhFUl9CTE9DS1NdLnByb3BfbmFtZSk7Cj4gLQlpZiAoc25wKSB7Cj4g LQkJYmxvY2tzX3Byb3BfdmFsdWUgPSBremFsbG9jKE1JWEVSX0JMT0NLU19QUk9QX01BWCAqCj4g LQkJCQlNQVhfRFBVX0hXX0JMSyAqIHNpemVvZihzdHJ1Y3QgZHB1X3Byb3BfdmFsdWUpLAo+IC0J CQkJR0ZQX0tFUk5FTCk7Cj4gLQkJaWYgKCFibG9ja3NfcHJvcF92YWx1ZSkgewo+IC0JCQlyYyA9 IC1FTk9NRU07Cj4gLQkJCWdvdG8gZW5kOwo+IC0JCX0KPiAtCQlyYyA9IF92YWxpZGF0ZV9kdF9l bnRyeShzbnAsIG1peGVyX2Jsb2Nrc19wcm9wLAo+IC0JCQlBUlJBWV9TSVpFKG1peGVyX2Jsb2Nr c19wcm9wKSwgYmxvY2tzX3Byb3BfY291bnQsIE5VTEwpOwo+IC0JCWlmIChyYykKPiAtCQkJZ290 byBlbmQ7Cj4gLQkJcmMgPSBfcmVhZF9kdF9lbnRyeShzbnAsIG1peGVyX2Jsb2Nrc19wcm9wLAo+ IC0JCQkJQVJSQVlfU0laRShtaXhlcl9ibG9ja3NfcHJvcCksCj4gLQkJCQlibG9ja3NfcHJvcF9j b3VudCwgYmxvY2tzX3Byb3BfZXhpc3RzLAo+IC0JCQkJYmxvY2tzX3Byb3BfdmFsdWUpOwo+IC0J fQo+IC0KPiAtCS8qIGdldCB0aGUgYmxlbmRfb3AgcmVnaXN0ZXIgb2Zmc2V0cyAqLwo+IC0JYmxl bmRfcHJvcF92YWx1ZSA9IGt6YWxsb2MoTUlYRVJfQkxFTkRfUFJPUF9NQVggKgo+IC0JCQlzaXpl b2Yoc3RydWN0IGRwdV9wcm9wX3ZhbHVlKSwgR0ZQX0tFUk5FTCk7Cj4gLQlpZiAoIWJsZW5kX3By b3BfdmFsdWUpIHsKPiAtCQlyYyA9IC1FTk9NRU07Cj4gLQkJZ290byBlbmQ7Cj4gLQl9Cj4gLQly YyA9IF92YWxpZGF0ZV9kdF9lbnRyeShucCwgbWl4ZXJfYmxlbmRfcHJvcCwKPiAtCQlBUlJBWV9T SVpFKG1peGVyX2JsZW5kX3Byb3ApLCBibGVuZF9wcm9wX2NvdW50LAo+IC0JCSZibGVuZF9vZmZf Y291bnQpOwo+IC0JaWYgKHJjKQo+IC0JCWdvdG8gZW5kOwo+IC0KPiAtCXJjID0gX3JlYWRfZHRf ZW50cnkobnAsIG1peGVyX2JsZW5kX3Byb3AsIEFSUkFZX1NJWkUobWl4ZXJfYmxlbmRfcHJvcCks Cj4gLQkJYmxlbmRfcHJvcF9jb3VudCwgYmxlbmRfcHJvcF9leGlzdHMsIGJsZW5kX3Byb3BfdmFs dWUpOwo+IC0JaWYgKHJjKQo+IC0JCWdvdG8gZW5kOwo+IC0KPiAtCWZvciAoaSA9IDAsIHBwX2lk eCA9IDAsIGRzcHBfaWR4ID0gMCwgZHNfaWR4ID0gMDsgaSA8IG9mZl9jb3VudDsgaSsrKSB7Cj4g LQkJbWl4ZXIgPSBkcHVfY2ZnLT5taXhlciArIGk7Cj4gLQkJc2JsayA9IGt6YWxsb2Moc2l6ZW9m KCpzYmxrKSwgR0ZQX0tFUk5FTCk7Cj4gLQkJaWYgKCFzYmxrKSB7Cj4gLQkJCXJjID0gLUVOT01F TTsKPiAtCQkJLyogY2F0YWxvZyBkZWluaXQgd2lsbCByZWxlYXNlIHRoZSBhbGxvY2F0ZWQgYmxv Y2tzICovCj4gLQkJCWdvdG8gZW5kOwo+IC0JCX0KPiAtCQltaXhlci0+c2JsayA9IHNibGs7Cj4g LQo+IC0JCW1peGVyLT5iYXNlID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwgTUlYRVJf T0ZGLCBpKTsKPiAtCQltaXhlci0+bGVuID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwg TUlYRVJfTEVOLCAwKTsKPiAtCQltaXhlci0+aWQgPSBMTV8wICsgaTsKPiAtCQlzbnByaW50Ziht aXhlci0+bmFtZSwgRFBVX0hXX0JMS19OQU1FX0xFTiwgImxtXyV1IiwKPiAtCQkJCW1peGVyLT5p ZCAtIExNXzApOwo+IC0KPiAtCQlpZiAoIXByb3BfZXhpc3RzW01JWEVSX0xFTl0pCj4gLQkJCW1p eGVyLT5sZW4gPSBERUZBVUxUX0RQVV9IV19CTE9DS19MRU47Cj4gLQo+IC0JCWxtX3BhaXJfbWFz ayA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCj4gLQkJCQlNSVhFUl9QQUlSX01BU0ss IGkpOwo+IC0JCWlmIChsbV9wYWlyX21hc2spCj4gLQkJCW1peGVyLT5sbV9wYWlyX21hc2sgPSAx IDw8IGxtX3BhaXJfbWFzazsKPiAtCj4gLQkJc2Jsay0+bWF4YmxlbmRzdGFnZXMgPSBtYXhfYmxl bmRzdGFnZXM7Cj4gLQkJc2Jsay0+bWF4d2lkdGggPSBkcHVfY2ZnLT5tYXhfbWl4ZXJfd2lkdGg7 Cj4gLQo+IC0JCWZvciAoaiA9IDA7IGogPCBibGVuZF9vZmZfY291bnQ7IGorKykKPiAtCQkJc2Js ay0+YmxlbmRzdGFnZV9iYXNlW2pdID0KPiAtCQkJCVBST1BfVkFMVUVfQUNDRVNTKGJsZW5kX3By b3BfdmFsdWUsCj4gLQkJCQkJCU1JWEVSX0JMRU5EX09QX09GRiwgaik7Cj4gLQo+IC0JCWlmIChk cHVfY2ZnLT5oYXNfc3JjX3NwbGl0KQo+IC0JCQlzZXRfYml0KERQVV9NSVhFUl9TT1VSQ0VTUExJ VCwgJm1peGVyLT5mZWF0dXJlcyk7Cj4gLQkJaWYgKGRwdV9jZmctPmhhc19kaW1fbGF5ZXIpCj4g LQkJCXNldF9iaXQoRFBVX0RJTV9MQVlFUiwgJm1peGVyLT5mZWF0dXJlcyk7Cj4gLQo+IC0JCWlm ICgoaSA8IFJPVF9MTV9PRkZTRVQpIHx8IChpID49IExJTkVfTE1fT0ZGU0VUKSkgewo+IC0JCQlt aXhlci0+cGluZ3BvbmcgPSBwcF9jb3VudCA+IDAgPyBwcF9pZHggKyBQSU5HUE9OR18wCj4gLQkJ CQkJCQkJOiBQSU5HUE9OR19NQVg7Cj4gLQkJCW1peGVyLT5kc3BwID0gZHNwcF9jb3VudCA+IDAg PyBkc3BwX2lkeCArIERTUFBfMAo+IC0JCQkJCQkJCTogRFNQUF9NQVg7Cj4gLQkJCW1peGVyLT5k cyA9IGRzX2NvdW50ID4gMCA/IGRzX2lkeCArIERTXzAgOiBEU19NQVg7Cj4gLQkJCXBwX2NvdW50 LS07Cj4gLQkJCWRzcHBfY291bnQtLTsKPiAtCQkJZHNfY291bnQtLTsKPiAtCQkJcHBfaWR4Kys7 Cj4gLQkJCWRzcHBfaWR4Kys7Cj4gLQkJCWRzX2lkeCsrOwo+IC0JCX0gZWxzZSB7Cj4gLQkJCW1p eGVyLT5waW5ncG9uZyA9IFBJTkdQT05HX01BWDsKPiAtCQkJbWl4ZXItPmRzcHAgPSBEU1BQX01B WDsKPiAtCQkJbWl4ZXItPmRzID0gRFNfTUFYOwo+IC0JCX0KPiAtCj4gLQkJc2Jsay0+Z2MuaWQg PSBEUFVfTUlYRVJfR0M7Cj4gLQkJaWYgKGJsb2Nrc19wcm9wX3ZhbHVlICYmIGJsb2Nrc19wcm9w X2V4aXN0c1tNSVhFUl9HQ19QUk9QXSkgewo+IC0JCQlzYmxrLT5nYy5iYXNlID0gUFJPUF9WQUxV RV9BQ0NFU1MoYmxvY2tzX3Byb3BfdmFsdWUsCj4gLQkJCQkJTUlYRVJfR0NfUFJPUCwgMCk7Cj4g LQkJCXNibGstPmdjLnZlcnNpb24gPSBQUk9QX1ZBTFVFX0FDQ0VTUyhibG9ja3NfcHJvcF92YWx1 ZSwKPiAtCQkJCQlNSVhFUl9HQ19QUk9QLCAxKTsKPiAtCQkJc2Jsay0+Z2MubGVuID0gMDsKPiAt CQkJc2V0X2JpdChEUFVfTUlYRVJfR0MsICZtaXhlci0+ZmVhdHVyZXMpOwo+IC0JCX0KPiAtCX0K PiAtCj4gLWVuZDoKPiAtCWtmcmVlKHByb3BfdmFsdWUpOwo+IC0Ja2ZyZWUoYmxvY2tzX3Byb3Bf dmFsdWUpOwo+IC0Ja2ZyZWUoYmxlbmRfcHJvcF92YWx1ZSk7Cj4gLQlyZXR1cm4gcmM7Cj4gLX0K PiAtCj4gLXN0YXRpYyBpbnQgZHB1X2ludGZfcGFyc2VfZHQoc3RydWN0IGRldmljZV9ub2RlICpu cCwKPiAtCQkJCQkJc3RydWN0IGRwdV9tZHNzX2NmZyAqZHB1X2NmZykKPiAtewo+IC0JaW50IHJj LCBwcm9wX2NvdW50W0lOVEZfUFJPUF9NQVhdLCBpOwo+IC0Jc3RydWN0IGRwdV9wcm9wX3ZhbHVl ICpwcm9wX3ZhbHVlID0gTlVMTDsKPiAtCWJvb2wgcHJvcF9leGlzdHNbSU5URl9QUk9QX01BWF07 Cj4gLQl1MzIgb2ZmX2NvdW50Owo+IC0JdTMyIGRzaV9jb3VudCA9IDAsIG5vbmVfY291bnQgPSAw LCBoZG1pX2NvdW50ID0gMCwgZHBfY291bnQgPSAwOwo+IC0JY29uc3QgY2hhciAqdHlwZTsKPiAt CXN0cnVjdCBkcHVfaW50Zl9jZmcgKmludGY7Cj4gLQo+IC0JaWYgKCFkcHVfY2ZnKSB7Cj4gLQkJ RFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50XG4iKTsKPiAtCQlyYyA9IC1FSU5WQUw7Cj4gLQkJ Z290byBlbmQ7Cj4gLQl9Cj4gLQo+IC0JcHJvcF92YWx1ZSA9IGt6YWxsb2MoSU5URl9QUk9QX01B WCAqCj4gLQkJCXNpemVvZihzdHJ1Y3QgZHB1X3Byb3BfdmFsdWUpLCBHRlBfS0VSTkVMKTsKPiAt CWlmICghcHJvcF92YWx1ZSkgewo+IC0JCXJjID0gLUVOT01FTTsKPiAtCQlnb3RvIGVuZDsKPiAt CX0KPiAtCj4gLQlyYyA9IF92YWxpZGF0ZV9kdF9lbnRyeShucCwgaW50Zl9wcm9wLCBBUlJBWV9T SVpFKGludGZfcHJvcCksCj4gLQkJcHJvcF9jb3VudCwgJm9mZl9jb3VudCk7Cj4gLQlpZiAocmMp Cj4gLQkJZ290byBlbmQ7Cj4gLQo+IC0JZHB1X2NmZy0+aW50Zl9jb3VudCA9IG9mZl9jb3VudDsK PiAtCj4gLQlyYyA9IF9yZWFkX2R0X2VudHJ5KG5wLCBpbnRmX3Byb3AsIEFSUkFZX1NJWkUoaW50 Zl9wcm9wKSwgcHJvcF9jb3VudCwKPiAtCQlwcm9wX2V4aXN0cywgcHJvcF92YWx1ZSk7Cj4gLQlp ZiAocmMpCj4gLQkJZ290byBlbmQ7Cj4gLQo+IC0JZm9yIChpID0gMDsgaSA8IG9mZl9jb3VudDsg aSsrKSB7Cj4gLQkJaW50ZiA9IGRwdV9jZmctPmludGYgKyBpOwo+IC0JCWludGYtPmJhc2UgPSBQ Uk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBJTlRGX09GRiwgaSk7Cj4gLQkJaW50Zi0+bGVu ID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwgSU5URl9MRU4sIDApOwo+IC0JCWludGYt PmlkID0gSU5URl8wICsgaTsKPiAtCQlzbnByaW50ZihpbnRmLT5uYW1lLCBEUFVfSFdfQkxLX05B TUVfTEVOLCAiaW50Zl8ldSIsCj4gLQkJCQlpbnRmLT5pZCAtIElOVEZfMCk7Cj4gLQo+IC0JCWlm ICghcHJvcF9leGlzdHNbSU5URl9MRU5dKQo+IC0JCQlpbnRmLT5sZW4gPSBERUZBVUxUX0RQVV9I V19CTE9DS19MRU47Cj4gLQo+IC0JCWludGYtPnByb2dfZmV0Y2hfbGluZXNfd29yc3RfY2FzZSA9 Cj4gLQkJCQkhcHJvcF9leGlzdHNbSU5URl9QUkVGRVRDSF0gPwo+IC0JCQkJZHB1X2NmZy0+cGVy Zi5taW5fcHJlZmlsbF9saW5lcyA6Cj4gLQkJCQlQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVl LCBJTlRGX1BSRUZFVENILCBpKTsKPiAtCj4gLQkJb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmdfaW5k ZXgobnAsCj4gLQkJCQlpbnRmX3Byb3BbSU5URl9UWVBFXS5wcm9wX25hbWUsIGksICZ0eXBlKTsK PiAtCQlpZiAoIXN0cmNtcCh0eXBlLCAiZHNpIikpIHsKPiAtCQkJaW50Zi0+dHlwZSA9IElOVEZf RFNJOwo+IC0JCQlpbnRmLT5jb250cm9sbGVyX2lkID0gZHNpX2NvdW50Owo+IC0JCQlkc2lfY291 bnQrKzsKPiAtCQl9IGVsc2UgaWYgKCFzdHJjbXAodHlwZSwgImhkbWkiKSkgewo+IC0JCQlpbnRm LT50eXBlID0gSU5URl9IRE1JOwo+IC0JCQlpbnRmLT5jb250cm9sbGVyX2lkID0gaGRtaV9jb3Vu dDsKPiAtCQkJaGRtaV9jb3VudCsrOwo+IC0JCX0gZWxzZSBpZiAoIXN0cmNtcCh0eXBlLCAiZHAi KSkgewo+IC0JCQlpbnRmLT50eXBlID0gSU5URl9EUDsKPiAtCQkJaW50Zi0+Y29udHJvbGxlcl9p ZCA9IGRwX2NvdW50Owo+IC0JCQlkcF9jb3VudCsrOwo+IC0JCX0gZWxzZSB7Cj4gLQkJCWludGYt PnR5cGUgPSBJTlRGX05PTkU7Cj4gLQkJCWludGYtPmNvbnRyb2xsZXJfaWQgPSBub25lX2NvdW50 Owo+IC0JCQlub25lX2NvdW50Kys7Cj4gLQkJfQo+IC0JfQo+IC0KPiAtZW5kOgo+IC0Ja2ZyZWUo cHJvcF92YWx1ZSk7Cj4gLQlyZXR1cm4gcmM7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgZHB1X3di X3BhcnNlX2R0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHN0cnVjdCBkcHVfbWRzc19jZmcgKmRw dV9jZmcpCj4gLXsKPiAtCWludCByYywgcHJvcF9jb3VudFtXQl9QUk9QX01BWF0sIGksIGo7Cj4g LQlzdHJ1Y3QgZHB1X3Byb3BfdmFsdWUgKnByb3BfdmFsdWUgPSBOVUxMOwo+IC0JYm9vbCBwcm9w X2V4aXN0c1tXQl9QUk9QX01BWF07Cj4gLQl1MzIgb2ZmX2NvdW50Owo+IC0Jc3RydWN0IGRwdV93 Yl9jZmcgKndiOwo+IC0Jc3RydWN0IGRwdV93Yl9zdWJfYmxvY2tzICpzYmxrOwo+IC0KPiAtCWlm ICghZHB1X2NmZykgewo+IC0JCURQVV9FUlJPUigiaW52YWxpZCBhcmd1bWVudFxuIik7Cj4gLQkJ cmMgPSAtRUlOVkFMOwo+IC0JCWdvdG8gZW5kOwo+IC0JfQo+IC0KPiAtCXByb3BfdmFsdWUgPSBr emFsbG9jKFdCX1BST1BfTUFYICoKPiAtCQkJc2l6ZW9mKHN0cnVjdCBkcHVfcHJvcF92YWx1ZSks IEdGUF9LRVJORUwpOwo+IC0JaWYgKCFwcm9wX3ZhbHVlKSB7Cj4gLQkJcmMgPSAtRU5PTUVNOwo+ IC0JCWdvdG8gZW5kOwo+IC0JfQo+IC0KPiAtCXJjID0gX3ZhbGlkYXRlX2R0X2VudHJ5KG5wLCB3 Yl9wcm9wLCBBUlJBWV9TSVpFKHdiX3Byb3ApLCBwcm9wX2NvdW50LAo+IC0JCSZvZmZfY291bnQp Owo+IC0JaWYgKHJjKQo+IC0JCWdvdG8gZW5kOwo+IC0KPiAtCWRwdV9jZmctPndiX2NvdW50ID0g b2ZmX2NvdW50Owo+IC0KPiAtCXJjID0gX3JlYWRfZHRfZW50cnkobnAsIHdiX3Byb3AsIEFSUkFZ X1NJWkUod2JfcHJvcCksIHByb3BfY291bnQsCj4gLQkJcHJvcF9leGlzdHMsIHByb3BfdmFsdWUp Owo+IC0JaWYgKHJjKQo+IC0JCWdvdG8gZW5kOwo+IC0KPiAtCWZvciAoaSA9IDA7IGkgPCBvZmZf Y291bnQ7IGkrKykgewo+IC0JCXdiID0gZHB1X2NmZy0+d2IgKyBpOwo+IC0JCXNibGsgPSBremFs bG9jKHNpemVvZigqc2JsayksIEdGUF9LRVJORUwpOwo+IC0JCWlmICghc2Jsaykgewo+IC0JCQly YyA9IC1FTk9NRU07Cj4gLQkJCS8qIGNhdGFsb2cgZGVpbml0IHdpbGwgcmVsZWFzZSB0aGUgYWxs b2NhdGVkIGJsb2NrcyAqLwo+IC0JCQlnb3RvIGVuZDsKPiAtCQl9Cj4gLQkJd2ItPnNibGsgPSBz YmxrOwo+IC0KPiAtCQl3Yi0+YmFzZSA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsIFdC X09GRiwgaSk7Cj4gLQkJd2ItPmlkID0gV0JfMCArIFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFs dWUsIFdCX0lELCBpKTsKPiAtCQlzbnByaW50Zih3Yi0+bmFtZSwgRFBVX0hXX0JMS19OQU1FX0xF TiwgIndiXyV1IiwKPiAtCQkJCXdiLT5pZCAtIFdCXzApOwo+IC0JCXdiLT5jbGtfY3RybCA9IERQ VV9DTEtfQ1RSTF9XQjAgKwo+IC0JCQlQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBXQl9J RCwgaSk7Cj4gLQkJd2ItPnhpbl9pZCA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsIFdC X1hJTl9JRCwgaSk7Cj4gLQo+IC0JCWlmICh3Yi0+Y2xrX2N0cmwgPj0gRFBVX0NMS19DVFJMX01B WCkgewo+IC0JCQlEUFVfRVJST1IoIiVzOiBpbnZhbGlkIGNsayBjdHJsOiAlZFxuIiwKPiAtCQkJ CQl3Yi0+bmFtZSwgd2ItPmNsa19jdHJsKTsKPiAtCQkJcmMgPSAtRUlOVkFMOwo+IC0JCQlnb3Rv IGVuZDsKPiAtCQl9Cj4gLQo+IC0JCWlmIChJU19EUFVfTUFKT1JfTUlOT1JfU0FNRSgoZHB1X2Nm Zy0+aHd2ZXJzaW9uKSwKPiAtCQkJCURQVV9IV19WRVJfMTcwKSkKPiAtCQkJd2ItPnZiaWZfaWR4 ID0gVkJJRl9OUlQ7Cj4gLQkJZWxzZQo+IC0JCQl3Yi0+dmJpZl9pZHggPSBWQklGX1JUOwo+IC0K PiAtCQl3Yi0+bGVuID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwgV0JfTEVOLCAwKTsK PiAtCQlpZiAoIXByb3BfZXhpc3RzW1dCX0xFTl0pCj4gLQkJCXdiLT5sZW4gPSBERUZBVUxUX0RQ VV9IV19CTE9DS19MRU47Cj4gLQkJc2Jsay0+bWF4bGluZXdpZHRoID0gZHB1X2NmZy0+bWF4X3di X2xpbmV3aWR0aDsKPiAtCj4gLQkJaWYgKHdiLT5pZCA+PSBMSU5FX01PREVfV0JfT0ZGU0VUKQo+ IC0JCQlzZXRfYml0KERQVV9XQl9MSU5FX01PREUsICZ3Yi0+ZmVhdHVyZXMpOwo+IC0JCWVsc2UK PiAtCQkJc2V0X2JpdChEUFVfV0JfQkxPQ0tfTU9ERSwgJndiLT5mZWF0dXJlcyk7Cj4gLQkJc2V0 X2JpdChEUFVfV0JfVFJBRkZJQ19TSEFQRVIsICZ3Yi0+ZmVhdHVyZXMpOwo+IC0JCXNldF9iaXQo RFBVX1dCX1lVVl9DT05GSUcsICZ3Yi0+ZmVhdHVyZXMpOwo+IC0KPiAtCQlpZiAoZHB1X2NmZy0+ aGFzX2NkcCkKPiAtCQkJc2V0X2JpdChEUFVfV0JfQ0RQLCAmd2ItPmZlYXR1cmVzKTsKPiAtCj4g LQkJc2V0X2JpdChEUFVfV0JfUU9TLCAmd2ItPmZlYXR1cmVzKTsKPiAtCQlpZiAoZHB1X2NmZy0+ dmJpZl9xb3Nfbmx2bCA9PSA4KQo+IC0JCQlzZXRfYml0KERQVV9XQl9RT1NfOExWTCwgJndiLT5m ZWF0dXJlcyk7Cj4gLQo+IC0JCWlmIChkcHVfY2ZnLT5oYXNfd2JfdWJ3YykKPiAtCQkJc2V0X2Jp dChEUFVfV0JfVUJXQywgJndiLT5mZWF0dXJlcyk7Cj4gLQo+IC0JCWZvciAoaiA9IDA7IGogPCBk cHVfY2ZnLT5tZHBfY291bnQ7IGorKykgewo+IC0JCQlkcHVfY2ZnLT5tZHBbal0uY2xrX2N0cmxz W3diLT5jbGtfY3RybF0ucmVnX29mZiA9Cj4gLQkJCQlQUk9QX0JJVFZBTFVFX0FDQ0VTUyhwcm9w X3ZhbHVlLAo+IC0JCQkJCQlXQl9DTEtfQ1RSTCwgaSwgMCk7Cj4gLQkJCWRwdV9jZmctPm1kcFtq XS5jbGtfY3RybHNbd2ItPmNsa19jdHJsXS5iaXRfb2ZmID0KPiAtCQkJCVBST1BfQklUVkFMVUVf QUNDRVNTKHByb3BfdmFsdWUsCj4gLQkJCQkJCVdCX0NMS19DVFJMLCBpLCAxKTsKPiAtCQl9Cj4g LQo+IC0JCXdiLT5mb3JtYXRfbGlzdCA9IGRwdV9jZmctPndiX2Zvcm1hdHM7Cj4gLQo+IC0JCURQ VV9ERUJVRygKPiAtCQkJIndiOiVkIHhpbjolZCB2YmlmOiVkIGNsayVkOiV4LyVkXG4iLAo+IC0J CQl3Yi0+aWQgLSBXQl8wLAo+IC0JCQl3Yi0+eGluX2lkLAo+IC0JCQl3Yi0+dmJpZl9pZHgsCj4g LQkJCXdiLT5jbGtfY3RybCwKPiAtCQkJZHB1X2NmZy0+bWRwWzBdLmNsa19jdHJsc1t3Yi0+Y2xr X2N0cmxdLnJlZ19vZmYsCj4gLQkJCWRwdV9jZmctPm1kcFswXS5jbGtfY3RybHNbd2ItPmNsa19j dHJsXS5iaXRfb2ZmKTsKPiAtCX0KPiAtCj4gLWVuZDoKPiAtCWtmcmVlKHByb3BfdmFsdWUpOwo+ IC0JcmV0dXJuIHJjOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBfZHB1X2RzcHBfc2V0dXBfYmxv Y2tzKHN0cnVjdCBkcHVfbWRzc19jZmcgKmRwdV9jZmcsCj4gLQlzdHJ1Y3QgZHB1X2RzcHBfY2Zn ICpkc3BwLCBzdHJ1Y3QgZHB1X2RzcHBfc3ViX2Jsa3MgKnNibGssCj4gLQlib29sICpwcm9wX2V4 aXN0cywgc3RydWN0IGRwdV9wcm9wX3ZhbHVlICpwcm9wX3ZhbHVlKQo+IC17Cj4gLQlzYmxrLT5p Z2MuaWQgPSBEUFVfRFNQUF9JR0M7Cj4gLQlpZiAocHJvcF9leGlzdHNbRFNQUF9JR0NfUFJPUF0p IHsKPiAtCQlzYmxrLT5pZ2MuYmFzZSA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCj4g LQkJCURTUFBfSUdDX1BST1AsIDApOwo+IC0JCXNibGstPmlnYy52ZXJzaW9uID0gUFJPUF9WQUxV RV9BQ0NFU1MocHJvcF92YWx1ZSwKPiAtCQkJRFNQUF9JR0NfUFJPUCwgMSk7Cj4gLQkJc2Jsay0+ aWdjLmxlbiA9IDA7Cj4gLQkJc2V0X2JpdChEUFVfRFNQUF9JR0MsICZkc3BwLT5mZWF0dXJlcyk7 Cj4gLQl9Cj4gLQo+IC0Jc2Jsay0+cGNjLmlkID0gRFBVX0RTUFBfUENDOwo+IC0JaWYgKHByb3Bf ZXhpc3RzW0RTUFBfUENDX1BST1BdKSB7Cj4gLQkJc2Jsay0+cGNjLmJhc2UgPSBQUk9QX1ZBTFVF X0FDQ0VTUyhwcm9wX3ZhbHVlLAo+IC0JCQlEU1BQX1BDQ19QUk9QLCAwKTsKPiAtCQlzYmxrLT5w Y2MudmVyc2lvbiA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCj4gLQkJCURTUFBfUEND X1BST1AsIDEpOwo+IC0JCXNibGstPnBjYy5sZW4gPSAwOwo+IC0JCXNldF9iaXQoRFBVX0RTUFBf UENDLCAmZHNwcC0+ZmVhdHVyZXMpOwo+IC0JfQo+IC0KPiAtCXNibGstPmdjLmlkID0gRFBVX0RT UFBfR0M7Cj4gLQlpZiAocHJvcF9leGlzdHNbRFNQUF9HQ19QUk9QXSkgewo+IC0JCXNibGstPmdj LmJhc2UgPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBEU1BQX0dDX1BST1AsIDApOwo+ IC0JCXNibGstPmdjLnZlcnNpb24gPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAo+IC0J CQlEU1BQX0dDX1BST1AsIDEpOwo+IC0JCXNibGstPmdjLmxlbiA9IDA7Cj4gLQkJc2V0X2JpdChE UFVfRFNQUF9HQywgJmRzcHAtPmZlYXR1cmVzKTsKPiAtCX0KPiAtCj4gLQlzYmxrLT5nYW11dC5p ZCA9IERQVV9EU1BQX0dBTVVUOwo+IC0JaWYgKHByb3BfZXhpc3RzW0RTUFBfR0FNVVRfUFJPUF0p IHsKPiAtCQlzYmxrLT5nYW11dC5iYXNlID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwK PiAtCQkJRFNQUF9HQU1VVF9QUk9QLCAwKTsKPiAtCQlzYmxrLT5nYW11dC52ZXJzaW9uID0gUFJP UF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwKPiAtCQkJRFNQUF9HQU1VVF9QUk9QLCAxKTsKPiAt CQlzYmxrLT5nYW11dC5sZW4gPSAwOwo+IC0JCXNldF9iaXQoRFBVX0RTUFBfR0FNVVQsICZkc3Bw LT5mZWF0dXJlcyk7Cj4gLQl9Cj4gLQo+IC0Jc2Jsay0+ZGl0aGVyLmlkID0gRFBVX0RTUFBfRElU SEVSOwo+IC0JaWYgKHByb3BfZXhpc3RzW0RTUFBfRElUSEVSX1BST1BdKSB7Cj4gLQkJc2Jsay0+ ZGl0aGVyLmJhc2UgPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAo+IC0JCQlEU1BQX0RJ VEhFUl9QUk9QLCAwKTsKPiAtCQlzYmxrLT5kaXRoZXIudmVyc2lvbiA9IFBST1BfVkFMVUVfQUND RVNTKHByb3BfdmFsdWUsCj4gLQkJCURTUFBfRElUSEVSX1BST1AsIDEpOwo+IC0JCXNibGstPmRp dGhlci5sZW4gPSAwOwo+IC0JCXNldF9iaXQoRFBVX0RTUFBfRElUSEVSLCAmZHNwcC0+ZmVhdHVy ZXMpOwo+IC0JfQo+IC0KPiAtCXNibGstPmhpc3QuaWQgPSBEUFVfRFNQUF9ISVNUOwo+IC0JaWYg KHByb3BfZXhpc3RzW0RTUFBfSElTVF9QUk9QXSkgewo+IC0JCXNibGstPmhpc3QuYmFzZSA9IFBS T1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCj4gLQkJCURTUFBfSElTVF9QUk9QLCAwKTsKPiAt CQlzYmxrLT5oaXN0LnZlcnNpb24gPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAo+IC0J CQlEU1BQX0hJU1RfUFJPUCwgMSk7Cj4gLQkJc2Jsay0+aGlzdC5sZW4gPSAwOwo+IC0JCXNldF9i aXQoRFBVX0RTUFBfSElTVCwgJmRzcHAtPmZlYXR1cmVzKTsKPiAtCX0KPiAtCj4gLQlzYmxrLT5o c2ljLmlkID0gRFBVX0RTUFBfSFNJQzsKPiAtCWlmIChwcm9wX2V4aXN0c1tEU1BQX0hTSUNfUFJP UF0pIHsKPiAtCQlzYmxrLT5oc2ljLmJhc2UgPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVl LAo+IC0JCQlEU1BQX0hTSUNfUFJPUCwgMCk7Cj4gLQkJc2Jsay0+aHNpYy52ZXJzaW9uID0gUFJP UF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwKPiAtCQkJRFNQUF9IU0lDX1BST1AsIDEpOwo+IC0J CXNibGstPmhzaWMubGVuID0gMDsKPiAtCQlzZXRfYml0KERQVV9EU1BQX0hTSUMsICZkc3BwLT5m ZWF0dXJlcyk7Cj4gLQl9Cj4gLQo+IC0Jc2Jsay0+bWVtY29sb3IuaWQgPSBEUFVfRFNQUF9NRU1D T0xPUjsKPiAtCWlmIChwcm9wX2V4aXN0c1tEU1BQX01FTUNPTE9SX1BST1BdKSB7Cj4gLQkJc2Js ay0+bWVtY29sb3IuYmFzZSA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCj4gLQkJCURT UFBfTUVNQ09MT1JfUFJPUCwgMCk7Cj4gLQkJc2Jsay0+bWVtY29sb3IudmVyc2lvbiA9IFBST1Bf VkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCj4gLQkJCURTUFBfTUVNQ09MT1JfUFJPUCwgMSk7Cj4g LQkJc2Jsay0+bWVtY29sb3IubGVuID0gMDsKPiAtCQlzZXRfYml0KERQVV9EU1BQX01FTUNPTE9S LCAmZHNwcC0+ZmVhdHVyZXMpOwo+IC0JfQo+IC0KPiAtCXNibGstPnNpeHpvbmUuaWQgPSBEUFVf RFNQUF9TSVhaT05FOwo+IC0JaWYgKHByb3BfZXhpc3RzW0RTUFBfU0lYWk9ORV9QUk9QXSkgewo+ IC0JCXNibGstPnNpeHpvbmUuYmFzZSA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCj4g LQkJCURTUFBfU0lYWk9ORV9QUk9QLCAwKTsKPiAtCQlzYmxrLT5zaXh6b25lLnZlcnNpb24gPSBQ Uk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAo+IC0JCQlEU1BQX1NJWFpPTkVfUFJPUCwgMSk7 Cj4gLQkJc2Jsay0+c2l4em9uZS5sZW4gPSAwOwo+IC0JCXNldF9iaXQoRFBVX0RTUFBfU0lYWk9O RSwgJmRzcHAtPmZlYXR1cmVzKTsKPiAtCX0KPiAtCj4gLQlzYmxrLT52bHV0LmlkID0gRFBVX0RT UFBfVkxVVDsKPiAtCWlmIChwcm9wX2V4aXN0c1tEU1BQX1ZMVVRfUFJPUF0pIHsKPiAtCQlzYmxr LT52bHV0LmJhc2UgPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAo+IC0JCQlEU1BQX1ZM VVRfUFJPUCwgMCk7Cj4gLQkJc2Jsay0+dmx1dC52ZXJzaW9uID0gUFJPUF9WQUxVRV9BQ0NFU1Mo cHJvcF92YWx1ZSwKPiAtCQkJRFNQUF9WTFVUX1BST1AsIDEpOwo+IC0JCXNibGstPnNpeHpvbmUu bGVuID0gMDsKPiAtCQlzZXRfYml0KERQVV9EU1BQX1ZMVVQsICZkc3BwLT5mZWF0dXJlcyk7Cj4g LQl9Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgZHB1X2RzcHBfdG9wX3BhcnNlX2R0KHN0cnVjdCBk ZXZpY2Vfbm9kZSAqbnAsCj4gLQkJc3RydWN0IGRwdV9tZHNzX2NmZyAqZHB1X2NmZykKPiAtewo+ IC0JaW50IHJjLCBwcm9wX2NvdW50W0RTUFBfVE9QX1BST1BfTUFYXTsKPiAtCWJvb2wgcHJvcF9l eGlzdHNbRFNQUF9UT1BfUFJPUF9NQVhdOwo+IC0Jc3RydWN0IGRwdV9wcm9wX3ZhbHVlICpwcm9w X3ZhbHVlID0gTlVMTDsKPiAtCXUzMiBvZmZfY291bnQ7Cj4gLQo+IC0JaWYgKCFkcHVfY2ZnKSB7 Cj4gLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50XG4iKTsKPiAtCQlyYyA9IC1FSU5WQUw7 Cj4gLQkJZ290byBlbmQ7Cj4gLQl9Cj4gLQo+IC0JcHJvcF92YWx1ZSA9IGt6YWxsb2MoRFNQUF9U T1BfUFJPUF9NQVggKgo+IC0JCQlzaXplb2Yoc3RydWN0IGRwdV9wcm9wX3ZhbHVlKSwgR0ZQX0tF Uk5FTCk7Cj4gLQlpZiAoIXByb3BfdmFsdWUpIHsKPiAtCQlyYyA9IC1FTk9NRU07Cj4gLQkJZ290 byBlbmQ7Cj4gLQl9Cj4gLQo+IC0JcmMgPSBfdmFsaWRhdGVfZHRfZW50cnkobnAsIGRzcHBfdG9w X3Byb3AsIEFSUkFZX1NJWkUoZHNwcF90b3BfcHJvcCksCj4gLQkJcHJvcF9jb3VudCwgJm9mZl9j b3VudCk7Cj4gLQlpZiAocmMpCj4gLQkJZ290byBlbmQ7Cj4gLQo+IC0JcmMgPSBfcmVhZF9kdF9l bnRyeShucCwgZHNwcF90b3BfcHJvcCwgQVJSQVlfU0laRShkc3BwX3RvcF9wcm9wKSwKPiAtCQlw cm9wX2NvdW50LCBwcm9wX2V4aXN0cywgcHJvcF92YWx1ZSk7Cj4gLQlpZiAocmMpCj4gLQkJZ290 byBlbmQ7Cj4gLQo+IC0JaWYgKG9mZl9jb3VudCAhPSAxKSB7Cj4gLQkJRFBVX0VSUk9SKCJpbnZh bGlkIGRzcHBfdG9wIG9mZl9jb3VudDolZFxuIiwgb2ZmX2NvdW50KTsKPiAtCQlyYyA9IC1FSU5W QUw7Cj4gLQkJZ290byBlbmQ7Cj4gLQl9Cj4gLQo+IC0JZHB1X2NmZy0+ZHNwcF90b3AuYmFzZSA9 Cj4gLQkJUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwgRFNQUF9UT1BfT0ZGLCAwKTsKPiAt CWRwdV9jZmctPmRzcHBfdG9wLmxlbiA9Cj4gLQkJUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1 ZSwgRFNQUF9UT1BfU0laRSwgMCk7Cj4gLQlzbnByaW50ZihkcHVfY2ZnLT5kc3BwX3RvcC5uYW1l LCBEUFVfSFdfQkxLX05BTUVfTEVOLCAiZHNwcF90b3AiKTsKPiAtCj4gLWVuZDoKPiAtCWtmcmVl KHByb3BfdmFsdWUpOwo+IC0JcmV0dXJuIHJjOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IGRwdV9k c3BwX3BhcnNlX2R0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCj4gLQkJCQkJCXN0cnVjdCBkcHVf bWRzc19jZmcgKmRwdV9jZmcpCj4gKy8qCj4gKyAqIHNkbTg0NV9jZmdfaW5pdCgpOiBwb3B1bGF0 ZSBzZG04NDUgZHB1IHN1Yi1ibG9ja3MgcmVnIG9mZnNldHMKPiArICogYW5kIGluc3RhbmNlIGNv dW50cy4KPiArICovCj4gK3ZvaWQgc2RtODQ1X2NmZ19pbml0KHN0cnVjdCBkcHVfbWRzc19jZmcg KmRwdV9jZmcpCj4gIHsKPiAtCWludCByYywgcHJvcF9jb3VudFtEU1BQX1BST1BfTUFYXSwgaTsK PiAtCWludCBhZF9wcm9wX2NvdW50W0FEX1BST1BfTUFYXTsKPiAtCWJvb2wgcHJvcF9leGlzdHNb RFNQUF9QUk9QX01BWF0sIGFkX3Byb3BfZXhpc3RzW0FEX1BST1BfTUFYXTsKPiAtCWJvb2wgYmxv Y2tzX3Byb3BfZXhpc3RzW0RTUFBfQkxPQ0tTX1BST1BfTUFYXTsKPiAtCXN0cnVjdCBkcHVfcHJv cF92YWx1ZSAqYWRfcHJvcF92YWx1ZSA9IE5VTEw7Cj4gLQlpbnQgYmxvY2tzX3Byb3BfY291bnRb RFNQUF9CTE9DS1NfUFJPUF9NQVhdOwo+IC0Jc3RydWN0IGRwdV9wcm9wX3ZhbHVlICpwcm9wX3Zh bHVlID0gTlVMTCwgKmJsb2Nrc19wcm9wX3ZhbHVlID0gTlVMTDsKPiAtCXUzMiBvZmZfY291bnQs IGFkX29mZl9jb3VudDsKPiAtCXN0cnVjdCBkcHVfZHNwcF9jZmcgKmRzcHA7Cj4gLQlzdHJ1Y3Qg ZHB1X2RzcHBfc3ViX2Jsa3MgKnNibGs7Cj4gLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnNucCA9IE5V TEw7Cj4gLQo+IC0JaWYgKCFkcHVfY2ZnKSB7Cj4gLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3Vt ZW50XG4iKTsKPiAtCQlyYyA9IC1FSU5WQUw7Cj4gLQkJZ290byBlbmQ7Cj4gLQl9Cj4gLQo+IC0J cHJvcF92YWx1ZSA9IGt6YWxsb2MoRFNQUF9QUk9QX01BWCAqCj4gLQkJCXNpemVvZihzdHJ1Y3Qg ZHB1X3Byb3BfdmFsdWUpLCBHRlBfS0VSTkVMKTsKPiAtCWlmICghcHJvcF92YWx1ZSkgewo+IC0J CXJjID0gLUVOT01FTTsKPiAtCQlnb3RvIGVuZDsKPiAtCX0KPiAtCj4gLQlyYyA9IF92YWxpZGF0 ZV9kdF9lbnRyeShucCwgZHNwcF9wcm9wLCBBUlJBWV9TSVpFKGRzcHBfcHJvcCksCj4gLQkJcHJv cF9jb3VudCwgJm9mZl9jb3VudCk7Cj4gLQlpZiAocmMpCj4gLQkJZ290byBlbmQ7Cj4gLQo+IC0J ZHB1X2NmZy0+ZHNwcF9jb3VudCA9IG9mZl9jb3VudDsKPiAtCj4gLQlyYyA9IF9yZWFkX2R0X2Vu dHJ5KG5wLCBkc3BwX3Byb3AsIEFSUkFZX1NJWkUoZHNwcF9wcm9wKSwgcHJvcF9jb3VudCwKPiAt CQlwcm9wX2V4aXN0cywgcHJvcF92YWx1ZSk7Cj4gLQlpZiAocmMpCj4gLQkJZ290byBlbmQ7Cj4g LQo+IC0JLyogUGFyc2UgQUQgZHRzaSBlbnRyaWVzICovCj4gLQlhZF9wcm9wX3ZhbHVlID0ga2Nh bGxvYyhBRF9QUk9QX01BWCwKPiAtCQkJc2l6ZW9mKHN0cnVjdCBkcHVfcHJvcF92YWx1ZSksIEdG UF9LRVJORUwpOwo+IC0JaWYgKCFhZF9wcm9wX3ZhbHVlKSB7Cj4gLQkJcmMgPSAtRU5PTUVNOwo+ IC0JCWdvdG8gZW5kOwo+IC0JfQo+IC0JcmMgPSBfdmFsaWRhdGVfZHRfZW50cnkobnAsIGFkX3By b3AsIEFSUkFZX1NJWkUoYWRfcHJvcCksCj4gLQkJYWRfcHJvcF9jb3VudCwgJmFkX29mZl9jb3Vu dCk7Cj4gLQlpZiAocmMpCj4gLQkJZ290byBlbmQ7Cj4gLQlyYyA9IF9yZWFkX2R0X2VudHJ5KG5w LCBhZF9wcm9wLCBBUlJBWV9TSVpFKGFkX3Byb3ApLCBhZF9wcm9wX2NvdW50LAo+IC0JCWFkX3By b3BfZXhpc3RzLCBhZF9wcm9wX3ZhbHVlKTsKPiAtCWlmIChyYykKPiAtCQlnb3RvIGVuZDsKPiAt Cj4gLQkvKiBnZXQgRFNQUCBmZWF0dXJlIGR0IHByb3BlcnRpZXMgaWYgdGhleSBleGlzdCAqLwo+ IC0Jc25wID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUobnAsIGRzcHBfcHJvcFtEU1BQX0JMT0NLU10u cHJvcF9uYW1lKTsKPiAtCWlmIChzbnApIHsKPiAtCQlibG9ja3NfcHJvcF92YWx1ZSA9IGt6YWxs b2MoRFNQUF9CTE9DS1NfUFJPUF9NQVggKgo+IC0JCQkJTUFYX0RQVV9IV19CTEsgKiBzaXplb2Yo c3RydWN0IGRwdV9wcm9wX3ZhbHVlKSwKPiAtCQkJCUdGUF9LRVJORUwpOwo+IC0JCWlmICghYmxv Y2tzX3Byb3BfdmFsdWUpIHsKPiAtCQkJcmMgPSAtRU5PTUVNOwo+IC0JCQlnb3RvIGVuZDsKPiAt CQl9Cj4gLQkJcmMgPSBfdmFsaWRhdGVfZHRfZW50cnkoc25wLCBkc3BwX2Jsb2Nrc19wcm9wLAo+ IC0JCQlBUlJBWV9TSVpFKGRzcHBfYmxvY2tzX3Byb3ApLCBibG9ja3NfcHJvcF9jb3VudCwgTlVM TCk7Cj4gLQkJaWYgKHJjKQo+IC0JCQlnb3RvIGVuZDsKPiAtCQlyYyA9IF9yZWFkX2R0X2VudHJ5 KHNucCwgZHNwcF9ibG9ja3NfcHJvcCwKPiAtCQkJQVJSQVlfU0laRShkc3BwX2Jsb2Nrc19wcm9w KSwgYmxvY2tzX3Byb3BfY291bnQsCj4gLQkJCWJsb2Nrc19wcm9wX2V4aXN0cywgYmxvY2tzX3By b3BfdmFsdWUpOwo+IC0JCWlmIChyYykKPiAtCQkJZ290byBlbmQ7Cj4gLQl9Cj4gLQo+IC0JZm9y IChpID0gMDsgaSA8IG9mZl9jb3VudDsgaSsrKSB7Cj4gLQkJZHNwcCA9IGRwdV9jZmctPmRzcHAg KyBpOwo+IC0JCWRzcHAtPmJhc2UgPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBEU1BQ X09GRiwgaSk7Cj4gLQkJZHNwcC0+bGVuID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwg RFNQUF9TSVpFLCAwKTsKPiAtCQlkc3BwLT5pZCA9IERTUFBfMCArIGk7Cj4gLQkJc25wcmludGYo ZHNwcC0+bmFtZSwgRFBVX0hXX0JMS19OQU1FX0xFTiwgImRzcHBfJXUiLAo+IC0JCQkJZHNwcC0+ aWQgLSBEU1BQXzApOwo+IC0KPiAtCQlzYmxrID0ga3phbGxvYyhzaXplb2YoKnNibGspLCBHRlBf S0VSTkVMKTsKPiAtCQlpZiAoIXNibGspIHsKPiAtCQkJcmMgPSAtRU5PTUVNOwo+IC0JCQkvKiBj YXRhbG9nIGRlaW5pdCB3aWxsIHJlbGVhc2UgdGhlIGFsbG9jYXRlZCBibG9ja3MgKi8KPiAtCQkJ Z290byBlbmQ7Cj4gLQkJfQo+IC0JCWRzcHAtPnNibGsgPSBzYmxrOwo+IC0KPiAtCQlpZiAoYmxv Y2tzX3Byb3BfdmFsdWUpCj4gLQkJCV9kcHVfZHNwcF9zZXR1cF9ibG9ja3MoZHB1X2NmZywgZHNw cCwgc2JsaywKPiAtCQkJCQlibG9ja3NfcHJvcF9leGlzdHMsIGJsb2Nrc19wcm9wX3ZhbHVlKTsK PiAtCj4gLQkJc2Jsay0+YWQuaWQgPSBEUFVfRFNQUF9BRDsKPiAtCQlkcHVfY2ZnLT5hZF9jb3Vu dCA9IGFkX29mZl9jb3VudDsKPiAtCQlpZiAoYWRfcHJvcF92YWx1ZSAmJiAoaSA8IGFkX29mZl9j b3VudCkgJiYKPiAtCQkgICAgYWRfcHJvcF9leGlzdHNbQURfT0ZGXSkgewo+IC0JCQlzYmxrLT5h ZC5iYXNlID0gUFJPUF9WQUxVRV9BQ0NFU1MoYWRfcHJvcF92YWx1ZSwKPiAtCQkJCUFEX09GRiwg aSk7Cj4gLQkJCXNibGstPmFkLnZlcnNpb24gPSBQUk9QX1ZBTFVFX0FDQ0VTUyhhZF9wcm9wX3Zh bHVlLAo+IC0JCQkJQURfVkVSU0lPTiwgMCk7Cj4gLQkJCXNldF9iaXQoRFBVX0RTUFBfQUQsICZk c3BwLT5mZWF0dXJlcyk7Cj4gLQkJfQo+IC0JfQo+IC0KPiAtZW5kOgo+IC0Ja2ZyZWUocHJvcF92 YWx1ZSk7Cj4gLQlrZnJlZShhZF9wcm9wX3ZhbHVlKTsKPiAtCWtmcmVlKGJsb2Nrc19wcm9wX3Zh bHVlKTsKPiAtCXJldHVybiByYzsKPiArCSpkcHVfY2ZnID0gKHN0cnVjdCBkcHVfbWRzc19jZmcp ewo+ICsJCS5jYXBzID0gJnNkbTg0NV9kcHVfY2FwcywKPiArCQkubWRzc19jb3VudCA9IEFSUkFZ X1NJWkUoc2RtODQ1X21kc3MpLAo+ICsJCS5tZHNzID0gc2RtODQ1X21kc3MsCj4gKwkJLm1kcF9j b3VudCA9IEFSUkFZX1NJWkUoc2RtODQ1X21kcCksCj4gKwkJLm1kcCA9IHNkbTg0NV9tZHAsCj4g KwkJLmN0bF9jb3VudCA9IEFSUkFZX1NJWkUoc2RtODQ1X2N0bCksCj4gKwkJLmN0bCA9IHNkbTg0 NV9jdGwsCj4gKwkJLnNzcHBfY291bnQgPSBBUlJBWV9TSVpFKHNkbTg0NV9zc3BwKSwKPiArCQku c3NwcCA9IHNkbTg0NV9zc3BwLAo+ICsJCS5taXhlcl9jb3VudCA9IEFSUkFZX1NJWkUoc2RtODQ1 X2xtKSwKPiArCQkubWl4ZXIgPSBzZG04NDVfbG0sCj4gKwkJLmRzcHBfdG9wID0gc2RtODQ1X2Rz cHBfdG9wLAo+ICsJCS5kc3BwX2NvdW50ID0gQVJSQVlfU0laRShzZG04NDVfZHNwcCksCj4gKwkJ LmRzcHAgPSBzZG04NDVfZHNwcCwKPiArCQkuZHNfY291bnQgPSBBUlJBWV9TSVpFKHNkbTg0NV9k cyksCj4gKwkJLmRzID0gc2RtODQ1X2RzLAo+ICsJCS5waW5ncG9uZ19jb3VudCA9IEFSUkFZX1NJ WkUoc2RtODQ1X3BwKSwKPiArCQkucGluZ3BvbmcgPSBzZG04NDVfcHAsCj4gKwkJLmRzY19jb3Vu dCA9IEFSUkFZX1NJWkUoc2RtODQ1X2RzYyksCj4gKwkJLmRzYyA9IHNkbTg0NV9kc2MsCj4gKwkJ LmNkbV9jb3VudCA9IEFSUkFZX1NJWkUoc2RtODQ1X2NkbSksCj4gKwkJLmNkbSA9IHNkbTg0NV9j ZG0sCj4gKwkJLmludGZfY291bnQgPSBBUlJBWV9TSVpFKHNkbTg0NV9pbnRmKSwKPiArCQkuaW50 ZiA9IHNkbTg0NV9pbnRmLAo+ICsJCS53Yl9jb3VudCA9IEFSUkFZX1NJWkUoc2RtODQ1X3diKSwK PiArCQkud2IgPSBzZG04NDVfd2IsCj4gKwkJLnZiaWZfY291bnQgPSBBUlJBWV9TSVpFKHNkbTg0 NV92YmlmKSwKPiArCQkudmJpZiA9IHNkbTg0NV92YmlmLAo+ICsJCS5yZWdfZG1hX2NvdW50ID0g MSwKPiArCQkuZG1hX2NmZyA9IHNkbTg0NV9yZWdkbWEsCj4gKwkJLnBlcmYgPSBzZG04NDVfcGVy Zl9kYXRhLAo+ICsJfTsKPiAgfQo+ICAKPiAtc3RhdGljIGludCBkcHVfZHNfcGFyc2VfZHQoc3Ry dWN0IGRldmljZV9ub2RlICpucCwKPiAtCQkJc3RydWN0IGRwdV9tZHNzX2NmZyAqZHB1X2NmZykK PiAtewo+IC0JaW50IHJjLCBwcm9wX2NvdW50W0RTX1BST1BfTUFYXSwgdG9wX3Byb3BfY291bnRb RFNfVE9QX1BST1BfTUFYXSwgaTsKPiAtCXN0cnVjdCBkcHVfcHJvcF92YWx1ZSAqcHJvcF92YWx1 ZSA9IE5VTEwsICp0b3BfcHJvcF92YWx1ZSA9IE5VTEw7Cj4gLQlib29sIHByb3BfZXhpc3RzW0RT X1BST1BfTUFYXSwgdG9wX3Byb3BfZXhpc3RzW0RTX1RPUF9QUk9QX01BWF07Cj4gLQl1MzIgb2Zm X2NvdW50ID0gMCwgdG9wX29mZl9jb3VudCA9IDA7Cj4gLQlzdHJ1Y3QgZHB1X2RzX2NmZyAqZHM7 Cj4gLQlzdHJ1Y3QgZHB1X2RzX3RvcF9jZmcgKmRzX3RvcCA9IE5VTEw7Cj4gLQo+IC0JaWYgKCFk cHVfY2ZnKSB7Cj4gLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50XG4iKTsKPiAtCQlyYyA9 IC1FSU5WQUw7Cj4gLQkJZ290byBlbmQ7Cj4gLQl9Cj4gLQo+IC0JaWYgKCFkcHVfY2ZnLT5tZHBb MF0uaGFzX2Rlc3Rfc2NhbGVyKSB7Cj4gLQkJRFBVX0RFQlVHKCJkZXN0IHNjYWxlciBmZWF0dXJl IG5vdCBzdXBwb3J0ZWRcbiIpOwo+IC0JCXJjID0gMDsKPiAtCQlnb3RvIGVuZDsKPiAtCX0KPiAt Cj4gLQkvKiBQYXJzZSB0aGUgZGVzdCBzY2FsZXIgdG9wIHJlZ2lzdGVyIG9mZnNldCBhbmQgY2Fw YWJpbGl0aWVzICovCj4gLQl0b3BfcHJvcF92YWx1ZSA9IGt6YWxsb2MoRFNfVE9QX1BST1BfTUFY ICoKPiAtCQkJc2l6ZW9mKHN0cnVjdCBkcHVfcHJvcF92YWx1ZSksIEdGUF9LRVJORUwpOwo+IC0J aWYgKCF0b3BfcHJvcF92YWx1ZSkgewo+IC0JCXJjID0gLUVOT01FTTsKPiAtCQlnb3RvIGVuZDsK PiAtCX0KPiAtCj4gLQlyYyA9IF92YWxpZGF0ZV9kdF9lbnRyeShucCwgZHNfdG9wX3Byb3AsCj4g LQkJCQlBUlJBWV9TSVpFKGRzX3RvcF9wcm9wKSwKPiAtCQkJCXRvcF9wcm9wX2NvdW50LCAmdG9w X29mZl9jb3VudCk7Cj4gLQlpZiAocmMpCj4gLQkJZ290byBlbmQ7Cj4gLQo+IC0JcmMgPSBfcmVh ZF9kdF9lbnRyeShucCwgZHNfdG9wX3Byb3AsCj4gLQkJCUFSUkFZX1NJWkUoZHNfdG9wX3Byb3Ap LCB0b3BfcHJvcF9jb3VudCwKPiAtCQkJdG9wX3Byb3BfZXhpc3RzLCB0b3BfcHJvcF92YWx1ZSk7 Cj4gLQlpZiAocmMpCj4gLQkJZ290byBlbmQ7Cj4gLQo+IC0JLyogUGFyc2UgdGhlIG9mZnNldCBv ZiBlYWNoIGRlc3Qgc2NhbGVyIGJsb2NrICovCj4gLQlwcm9wX3ZhbHVlID0ga2NhbGxvYyhEU19Q Uk9QX01BWCwKPiAtCQkJc2l6ZW9mKHN0cnVjdCBkcHVfcHJvcF92YWx1ZSksIEdGUF9LRVJORUwp Owo+IC0JaWYgKCFwcm9wX3ZhbHVlKSB7Cj4gLQkJcmMgPSAtRU5PTUVNOwo+IC0JCWdvdG8gZW5k Owo+IC0JfQo+IC0KPiAtCXJjID0gX3ZhbGlkYXRlX2R0X2VudHJ5KG5wLCBkc19wcm9wLCBBUlJB WV9TSVpFKGRzX3Byb3ApLCBwcm9wX2NvdW50LAo+IC0JCSZvZmZfY291bnQpOwo+IC0JaWYgKHJj KQo+IC0JCWdvdG8gZW5kOwo+IC0KPiAtCWRwdV9jZmctPmRzX2NvdW50ID0gb2ZmX2NvdW50Owo+ IC0KPiAtCXJjID0gX3JlYWRfZHRfZW50cnkobnAsIGRzX3Byb3AsIEFSUkFZX1NJWkUoZHNfcHJv cCksIHByb3BfY291bnQsCj4gLQkJcHJvcF9leGlzdHMsIHByb3BfdmFsdWUpOwo+IC0JaWYgKHJj KQo+IC0JCWdvdG8gZW5kOwo+IC0KPiAtCWlmICghb2ZmX2NvdW50KQo+IC0JCWdvdG8gZW5kOwo+ IC0KPiAtCWRzX3RvcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkcHVfZHNfdG9wX2NmZyksIEdG UF9LRVJORUwpOwo+IC0JaWYgKCFkc190b3ApIHsKPiAtCQlyYyA9IC1FTk9NRU07Cj4gLQkJZ290 byBlbmQ7Cj4gLQl9Cj4gLQo+IC0JZHNfdG9wLT5pZCA9IERTX1RPUDsKPiAtCXNucHJpbnRmKGRz X3RvcC0+bmFtZSwgRFBVX0hXX0JMS19OQU1FX0xFTiwgImRzX3RvcF8ldSIsCj4gLQkJZHNfdG9w LT5pZCAtIERTX1RPUCk7Cj4gLQlkc190b3AtPmJhc2UgPSBQUk9QX1ZBTFVFX0FDQ0VTUyh0b3Bf cHJvcF92YWx1ZSwgRFNfVE9QX09GRiwgMCk7Cj4gLQlkc190b3AtPmxlbiA9IFBST1BfVkFMVUVf QUNDRVNTKHRvcF9wcm9wX3ZhbHVlLCBEU19UT1BfTEVOLCAwKTsKPiAtCWRzX3RvcC0+bWF4dXBz Y2FsZSA9IE1BWF9VUFNDQUxFX1JBVElPOwo+IC0KPiAtCWRzX3RvcC0+bWF4aW5wdXR3aWR0aCA9 IFBST1BfVkFMVUVfQUNDRVNTKHRvcF9wcm9wX3ZhbHVlLAo+IC0JCQlEU19UT1BfSU5QVVRfTElO RVdJRFRILCAwKTsKPiAtCWlmICghdG9wX3Byb3BfZXhpc3RzW0RTX1RPUF9JTlBVVF9MSU5FV0lE VEhdKQo+IC0JCWRzX3RvcC0+bWF4aW5wdXR3aWR0aCA9IERFRkFVTFRfRFBVX0xJTkVfV0lEVEg7 Cj4gLQo+IC0JZHNfdG9wLT5tYXhvdXRwdXR3aWR0aCA9IFBST1BfVkFMVUVfQUNDRVNTKHRvcF9w cm9wX3ZhbHVlLAo+IC0JCQlEU19UT1BfT1VUUFVUX0xJTkVXSURUSCwgMCk7Cj4gLQlpZiAoIXRv cF9wcm9wX2V4aXN0c1tEU19UT1BfT1VUUFVUX0xJTkVXSURUSF0pCj4gLQkJZHNfdG9wLT5tYXhv dXRwdXR3aWR0aCA9IERFRkFVTFRfRFBVX09VVFBVVF9MSU5FX1dJRFRIOwo+IC0KPiAtCWZvciAo aSA9IDA7IGkgPCBvZmZfY291bnQ7IGkrKykgewo+IC0JCWRzID0gZHB1X2NmZy0+ZHMgKyBpOwo+ IC0JCWRzLT50b3AgPSBkc190b3A7Cj4gLQkJZHMtPmJhc2UgPSBQUk9QX1ZBTFVFX0FDQ0VTUyhw cm9wX3ZhbHVlLCBEU19PRkYsIGkpOwo+IC0JCWRzLT5pZCA9IERTXzAgKyBpOwo+IC0JCWRzLT5s ZW4gPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBEU19MRU4sIDApOwo+IC0JCXNucHJp bnRmKGRzLT5uYW1lLCBEUFVfSFdfQkxLX05BTUVfTEVOLCAiZHNfJXUiLAo+IC0JCQlkcy0+aWQg LSBEU18wKTsKPiAtCj4gLQkJaWYgKCFwcm9wX2V4aXN0c1tEU19MRU5dKQo+IC0JCQlkcy0+bGVu ID0gREVGQVVMVF9EUFVfSFdfQkxPQ0tfTEVOOwo+IC0KPiAtCQlpZiAoZHB1X2NmZy0+cXNlZWRf dHlwZSA9PSBEUFVfU1NQUF9TQ0FMRVJfUVNFRUQzKQo+IC0JCQlzZXRfYml0KERQVV9TU1BQX1ND QUxFUl9RU0VFRDMsICZkcy0+ZmVhdHVyZXMpOwo+IC0JfQo+IC0KPiAtZW5kOgo+IC0Ja2ZyZWUo dG9wX3Byb3BfdmFsdWUpOwo+IC0Ja2ZyZWUocHJvcF92YWx1ZSk7Cj4gLQlyZXR1cm4gcmM7Cj4g K3N0YXRpYyBzdHJ1Y3QgZHB1X21kc3NfaHdfY2ZnX2hhbmRsZXIgY2ZnX2hhbmRsZXJbXSA9IHsK PiArCXsgLmh3X3JldiA9IERQVV9IV19WRVJfNDAwLCAuY2ZnX2luaXQgPSBzZG04NDVfY2ZnX2lu aXR9LAo+ICsJeyAuaHdfcmV2ID0gRFBVX0hXX1ZFUl80MDEsIC5jZmdfaW5pdCA9IHNkbTg0NV9j ZmdfaW5pdH0sCj4gIH07Cj4gIAo+IC1zdGF0aWMgaW50IGRwdV9kc2NfcGFyc2VfZHQoc3RydWN0 IGRldmljZV9ub2RlICpucCwKPiAtCQkJc3RydWN0IGRwdV9tZHNzX2NmZyAqZHB1X2NmZykKPiAt ewo+IC0JaW50IHJjLCBwcm9wX2NvdW50W01BWF9CTE9DS1NdLCBpOwo+IC0Jc3RydWN0IGRwdV9w cm9wX3ZhbHVlICpwcm9wX3ZhbHVlID0gTlVMTDsKPiAtCWJvb2wgcHJvcF9leGlzdHNbRFNDX1BS T1BfTUFYXTsKPiAtCXUzMiBvZmZfY291bnQ7Cj4gLQlzdHJ1Y3QgZHB1X2RzY19jZmcgKmRzYzsK PiAtCj4gLQlpZiAoIWRwdV9jZmcpIHsKPiAtCQlEUFVfRVJST1IoImludmFsaWQgYXJndW1lbnRc biIpOwo+IC0JCXJjID0gLUVJTlZBTDsKPiAtCQlnb3RvIGVuZDsKPiAtCX0KPiAtCj4gLQlwcm9w X3ZhbHVlID0ga3phbGxvYyhEU0NfUFJPUF9NQVggKgo+IC0JCQlzaXplb2Yoc3RydWN0IGRwdV9w cm9wX3ZhbHVlKSwgR0ZQX0tFUk5FTCk7Cj4gLQlpZiAoIXByb3BfdmFsdWUpIHsKPiAtCQlyYyA9 IC1FTk9NRU07Cj4gLQkJZ290byBlbmQ7Cj4gLQl9Cj4gLQo+IC0JcmMgPSBfdmFsaWRhdGVfZHRf ZW50cnkobnAsIGRzY19wcm9wLCBBUlJBWV9TSVpFKGRzY19wcm9wKSwgcHJvcF9jb3VudCwKPiAt CQkmb2ZmX2NvdW50KTsKPiAtCWlmIChyYykKPiAtCQlnb3RvIGVuZDsKPiAtCj4gLQlkcHVfY2Zn LT5kc2NfY291bnQgPSBvZmZfY291bnQ7Cj4gLQo+IC0JcmMgPSBfcmVhZF9kdF9lbnRyeShucCwg ZHNjX3Byb3AsIEFSUkFZX1NJWkUoZHNjX3Byb3ApLCBwcm9wX2NvdW50LAo+IC0JCXByb3BfZXhp c3RzLCBwcm9wX3ZhbHVlKTsKPiAtCWlmIChyYykKPiAtCQlnb3RvIGVuZDsKPiAtCj4gLQlmb3Ig KGkgPSAwOyBpIDwgb2ZmX2NvdW50OyBpKyspIHsKPiAtCQlkc2MgPSBkcHVfY2ZnLT5kc2MgKyBp Owo+IC0JCWRzYy0+YmFzZSA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsIERTQ19PRkYs IGkpOwo+IC0JCWRzYy0+aWQgPSBEU0NfMCArIGk7Cj4gLQkJZHNjLT5sZW4gPSBQUk9QX1ZBTFVF X0FDQ0VTUyhwcm9wX3ZhbHVlLCBEU0NfTEVOLCAwKTsKPiAtCQlzbnByaW50Zihkc2MtPm5hbWUs IERQVV9IV19CTEtfTkFNRV9MRU4sICJkc2NfJXUiLAo+IC0JCQkJZHNjLT5pZCAtIERTQ18wKTsK PiAtCj4gLQkJaWYgKCFwcm9wX2V4aXN0c1tEU0NfTEVOXSkKPiAtCQkJZHNjLT5sZW4gPSBERUZB VUxUX0RQVV9IV19CTE9DS19MRU47Cj4gLQl9Cj4gLQo+IC1lbmQ6Cj4gLQlrZnJlZShwcm9wX3Zh bHVlKTsKPiAtCXJldHVybiByYzsKPiAtfTsKPiAtCj4gLXN0YXRpYyBpbnQgZHB1X2NkbV9wYXJz ZV9kdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAo+IC0JCQkJc3RydWN0IGRwdV9tZHNzX2NmZyAq ZHB1X2NmZykKPiAtewo+IC0JaW50IHJjLCBwcm9wX2NvdW50W0hXX1BST1BfTUFYXSwgaTsKPiAt CXN0cnVjdCBkcHVfcHJvcF92YWx1ZSAqcHJvcF92YWx1ZSA9IE5VTEw7Cj4gLQlib29sIHByb3Bf ZXhpc3RzW0hXX1BST1BfTUFYXTsKPiAtCXUzMiBvZmZfY291bnQ7Cj4gLQlzdHJ1Y3QgZHB1X2Nk bV9jZmcgKmNkbTsKPiAtCj4gLQlpZiAoIWRwdV9jZmcpIHsKPiAtCQlEUFVfRVJST1IoImludmFs aWQgYXJndW1lbnRcbiIpOwo+IC0JCXJjID0gLUVJTlZBTDsKPiAtCQlnb3RvIGVuZDsKPiAtCX0K PiAtCj4gLQlwcm9wX3ZhbHVlID0ga3phbGxvYyhIV19QUk9QX01BWCAqCj4gLQkJCXNpemVvZihz dHJ1Y3QgZHB1X3Byb3BfdmFsdWUpLCBHRlBfS0VSTkVMKTsKPiAtCWlmICghcHJvcF92YWx1ZSkg ewo+IC0JCXJjID0gLUVOT01FTTsKPiAtCQlnb3RvIGVuZDsKPiAtCX0KPiAtCj4gLQlyYyA9IF92 YWxpZGF0ZV9kdF9lbnRyeShucCwgY2RtX3Byb3AsIEFSUkFZX1NJWkUoY2RtX3Byb3ApLCBwcm9w X2NvdW50LAo+IC0JCSZvZmZfY291bnQpOwo+IC0JaWYgKHJjKQo+IC0JCWdvdG8gZW5kOwo+IC0K PiAtCWRwdV9jZmctPmNkbV9jb3VudCA9IG9mZl9jb3VudDsKPiAtCj4gLQlyYyA9IF9yZWFkX2R0 X2VudHJ5KG5wLCBjZG1fcHJvcCwgQVJSQVlfU0laRShjZG1fcHJvcCksIHByb3BfY291bnQsCj4g LQkJcHJvcF9leGlzdHMsIHByb3BfdmFsdWUpOwo+IC0JaWYgKHJjKQo+IC0JCWdvdG8gZW5kOwo+ IC0KPiAtCWZvciAoaSA9IDA7IGkgPCBvZmZfY291bnQ7IGkrKykgewo+IC0JCWNkbSA9IGRwdV9j ZmctPmNkbSArIGk7Cj4gLQkJY2RtLT5iYXNlID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1 ZSwgSFdfT0ZGLCBpKTsKPiAtCQljZG0tPmlkID0gQ0RNXzAgKyBpOwo+IC0JCXNucHJpbnRmKGNk bS0+bmFtZSwgRFBVX0hXX0JMS19OQU1FX0xFTiwgImNkbV8ldSIsCj4gLQkJCQljZG0tPmlkIC0g Q0RNXzApOwo+IC0JCWNkbS0+bGVuID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwgSFdf TEVOLCAwKTsKPiAtCj4gLQkJLyogaW50ZjMgYW5kIHdiMiBmb3IgY2RtIGJsb2NrICovCj4gLQkJ Y2RtLT53Yl9jb25uZWN0ID0gZHB1X2NmZy0+d2JfY291bnQgPyBCSVQoV0JfMikgOiBCSVQoMzEp Owo+IC0JCWNkbS0+aW50Zl9jb25uZWN0ID0gZHB1X2NmZy0+aW50Zl9jb3VudCA/IEJJVChJTlRG XzMpIDogQklUKDMxKTsKPiAtCX0KPiAtCj4gLWVuZDoKPiAtCWtmcmVlKHByb3BfdmFsdWUpOwo+ IC0JcmV0dXJuIHJjOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IGRwdV92YmlmX3BhcnNlX2R0KHN0 cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCj4gLQkJCQlzdHJ1Y3QgZHB1X21kc3NfY2ZnICpkcHVfY2Zn KQo+IC17Cj4gLQlpbnQgcmMsIHByb3BfY291bnRbVkJJRl9QUk9QX01BWF0sIGksIGosIGs7Cj4g LQlzdHJ1Y3QgZHB1X3Byb3BfdmFsdWUgKnByb3BfdmFsdWUgPSBOVUxMOwo+IC0JYm9vbCBwcm9w X2V4aXN0c1tWQklGX1BST1BfTUFYXTsKPiAtCXUzMiBvZmZfY291bnQsIHZiaWZfbGVuOwo+IC0J c3RydWN0IGRwdV92YmlmX2NmZyAqdmJpZjsKPiAtCj4gLQlpZiAoIWRwdV9jZmcpIHsKPiAtCQlE UFVfRVJST1IoImludmFsaWQgYXJndW1lbnRcbiIpOwo+IC0JCXJjID0gLUVJTlZBTDsKPiAtCQln b3RvIGVuZDsKPiAtCX0KPiAtCj4gLQlwcm9wX3ZhbHVlID0ga3phbGxvYyhWQklGX1BST1BfTUFY ICoKPiAtCQkJc2l6ZW9mKHN0cnVjdCBkcHVfcHJvcF92YWx1ZSksIEdGUF9LRVJORUwpOwo+IC0J aWYgKCFwcm9wX3ZhbHVlKSB7Cj4gLQkJcmMgPSAtRU5PTUVNOwo+IC0JCWdvdG8gZW5kOwo+IC0J fQo+IC0KPiAtCXJjID0gX3ZhbGlkYXRlX2R0X2VudHJ5KG5wLCB2YmlmX3Byb3AsIEFSUkFZX1NJ WkUodmJpZl9wcm9wKSwKPiAtCQkJcHJvcF9jb3VudCwgJm9mZl9jb3VudCk7Cj4gLQlpZiAocmMp Cj4gLQkJZ290byBlbmQ7Cj4gLQo+IC0JcmMgPSBfdmFsaWRhdGVfZHRfZW50cnkobnAsICZ2Ymlm X3Byb3BbVkJJRl9EWU5BTUlDX09UX1JEX0xJTUlUXSwgMSwKPiAtCQkJJnByb3BfY291bnRbVkJJ Rl9EWU5BTUlDX09UX1JEX0xJTUlUXSwgTlVMTCk7Cj4gLQlpZiAocmMpCj4gLQkJZ290byBlbmQ7 Cj4gLQo+IC0JcmMgPSBfdmFsaWRhdGVfZHRfZW50cnkobnAsICZ2YmlmX3Byb3BbVkJJRl9EWU5B TUlDX09UX1dSX0xJTUlUXSwgMSwKPiAtCQkJJnByb3BfY291bnRbVkJJRl9EWU5BTUlDX09UX1dS X0xJTUlUXSwgTlVMTCk7Cj4gLQlpZiAocmMpCj4gLQkJZ290byBlbmQ7Cj4gLQo+IC0JcmMgPSBf dmFsaWRhdGVfZHRfZW50cnkobnAsICZ2YmlmX3Byb3BbVkJJRl9RT1NfUlRfUkVNQVBdLCAxLAo+ IC0JCQkmcHJvcF9jb3VudFtWQklGX1FPU19SVF9SRU1BUF0sIE5VTEwpOwo+IC0JaWYgKHJjKQo+ IC0JCWdvdG8gZW5kOwo+IC0KPiAtCXJjID0gX3ZhbGlkYXRlX2R0X2VudHJ5KG5wLCAmdmJpZl9w cm9wW1ZCSUZfUU9TX05SVF9SRU1BUF0sIDEsCj4gLQkJCSZwcm9wX2NvdW50W1ZCSUZfUU9TX05S VF9SRU1BUF0sIE5VTEwpOwo+IC0JaWYgKHJjKQo+IC0JCWdvdG8gZW5kOwo+IC0KPiAtCXJjID0g X3ZhbGlkYXRlX2R0X2VudHJ5KG5wLCAmdmJpZl9wcm9wW1ZCSUZfTUVNVFlQRV8wXSwgMSwKPiAt CQkJJnByb3BfY291bnRbVkJJRl9NRU1UWVBFXzBdLCBOVUxMKTsKPiAtCWlmIChyYykKPiAtCQln b3RvIGVuZDsKPiAtCj4gLQlyYyA9IF92YWxpZGF0ZV9kdF9lbnRyeShucCwgJnZiaWZfcHJvcFtW QklGX01FTVRZUEVfMV0sIDEsCj4gLQkJCSZwcm9wX2NvdW50W1ZCSUZfTUVNVFlQRV8xXSwgTlVM TCk7Cj4gLQlpZiAocmMpCj4gLQkJZ290byBlbmQ7Cj4gLQo+IC0JZHB1X2NmZy0+dmJpZl9jb3Vu dCA9IG9mZl9jb3VudDsKPiAtCj4gLQlyYyA9IF9yZWFkX2R0X2VudHJ5KG5wLCB2YmlmX3Byb3As IEFSUkFZX1NJWkUodmJpZl9wcm9wKSwgcHJvcF9jb3VudCwKPiAtCQlwcm9wX2V4aXN0cywgcHJv cF92YWx1ZSk7Cj4gLQlpZiAocmMpCj4gLQkJZ290byBlbmQ7Cj4gLQo+IC0JdmJpZl9sZW4gPSBQ Uk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBWQklGX0xFTiwgMCk7Cj4gLQlpZiAoIXByb3Bf ZXhpc3RzW1ZCSUZfTEVOXSkKPiAtCQl2YmlmX2xlbiA9IERFRkFVTFRfRFBVX0hXX0JMT0NLX0xF TjsKPiAtCj4gLQlmb3IgKGkgPSAwOyBpIDwgb2ZmX2NvdW50OyBpKyspIHsKPiAtCQl2YmlmID0g ZHB1X2NmZy0+dmJpZiArIGk7Cj4gLQkJdmJpZi0+YmFzZSA9IFBST1BfVkFMVUVfQUNDRVNTKHBy b3BfdmFsdWUsIFZCSUZfT0ZGLCBpKTsKPiAtCQl2YmlmLT5sZW4gPSB2YmlmX2xlbjsKPiAtCQl2 YmlmLT5pZCA9IFZCSUZfMCArIFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsIFZCSUZfSUQs IGkpOwo+IC0JCXNucHJpbnRmKHZiaWYtPm5hbWUsIERQVV9IV19CTEtfTkFNRV9MRU4sICJ2Ymlm XyV1IiwKPiAtCQkJCXZiaWYtPmlkIC0gVkJJRl8wKTsKPiAtCj4gLQkJRFBVX0RFQlVHKCJ2Ymlm OiVkXG4iLCB2YmlmLT5pZCAtIFZCSUZfMCk7Cj4gLQo+IC0JCXZiaWYtPnhpbl9oYWx0X3RpbWVv dXQgPSBWQklGX1hJTl9IQUxUX1RJTUVPVVQ7Cj4gLQo+IC0JCXZiaWYtPmRlZmF1bHRfb3RfcmRf bGltaXQgPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAo+IC0JCQkJVkJJRl9ERUZBVUxU X09UX1JEX0xJTUlULCAwKTsKPiAtCQlEUFVfREVCVUcoImRlZmF1bHRfb3RfcmRfbGltaXQ9JXVc biIsCj4gLQkJCQl2YmlmLT5kZWZhdWx0X290X3JkX2xpbWl0KTsKPiAtCj4gLQkJdmJpZi0+ZGVm YXVsdF9vdF93cl9saW1pdCA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCj4gLQkJCQlW QklGX0RFRkFVTFRfT1RfV1JfTElNSVQsIDApOwo+IC0JCURQVV9ERUJVRygiZGVmYXVsdF9vdF93 cl9saW1pdD0ldVxuIiwKPiAtCQkJCXZiaWYtPmRlZmF1bHRfb3Rfd3JfbGltaXQpOwo+IC0KPiAt CQl2YmlmLT5keW5hbWljX290X3JkX3RibC5jb3VudCA9Cj4gLQkJCQlwcm9wX2NvdW50W1ZCSUZf RFlOQU1JQ19PVF9SRF9MSU1JVF0gLyAyOwo+IC0JCURQVV9ERUJVRygiZHluYW1pY19vdF9yZF90 YmwuY291bnQ9JXVcbiIsCj4gLQkJCQl2YmlmLT5keW5hbWljX290X3JkX3RibC5jb3VudCk7Cj4g LQkJaWYgKHZiaWYtPmR5bmFtaWNfb3RfcmRfdGJsLmNvdW50KSB7Cj4gLQkJCXZiaWYtPmR5bmFt aWNfb3RfcmRfdGJsLmNmZyA9IGtjYWxsb2MoCj4gLQkJCQl2YmlmLT5keW5hbWljX290X3JkX3Ri bC5jb3VudCwKPiAtCQkJCXNpemVvZihzdHJ1Y3QgZHB1X3ZiaWZfZHluYW1pY19vdF9jZmcpLAo+ IC0JCQkJR0ZQX0tFUk5FTCk7Cj4gLQkJCWlmICghdmJpZi0+ZHluYW1pY19vdF9yZF90YmwuY2Zn KSB7Cj4gLQkJCQlyYyA9IC1FTk9NRU07Cj4gLQkJCQlnb3RvIGVuZDsKPiAtCQkJfQo+IC0JCX0K PiAtCj4gLQkJZm9yIChqID0gMCwgayA9IDA7IGogPCB2YmlmLT5keW5hbWljX290X3JkX3RibC5j b3VudDsgaisrKSB7Cj4gLQkJCXZiaWYtPmR5bmFtaWNfb3RfcmRfdGJsLmNmZ1tqXS5wcHMgPSAo dTY0KQo+IC0JCQkJUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwKPiAtCQkJCVZCSUZfRFlO QU1JQ19PVF9SRF9MSU1JVCwgaysrKTsKPiAtCQkJdmJpZi0+ZHluYW1pY19vdF9yZF90YmwuY2Zn W2pdLm90X2xpbWl0ID0KPiAtCQkJCVBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCj4gLQkJ CQlWQklGX0RZTkFNSUNfT1RfUkRfTElNSVQsIGsrKyk7Cj4gLQkJCURQVV9ERUJVRygiZHluYW1p Y19vdF9yZF90YmxbJWRdLmNmZz08JWxsdSAldT5cbiIsIGosCj4gLQkJCQl2YmlmLT5keW5hbWlj X290X3JkX3RibC5jZmdbal0ucHBzLAo+IC0JCQkJdmJpZi0+ZHluYW1pY19vdF9yZF90YmwuY2Zn W2pdLm90X2xpbWl0KTsKPiAtCQl9Cj4gLQo+IC0JCXZiaWYtPmR5bmFtaWNfb3Rfd3JfdGJsLmNv dW50ID0KPiAtCQkJCXByb3BfY291bnRbVkJJRl9EWU5BTUlDX09UX1dSX0xJTUlUXSAvIDI7Cj4g LQkJRFBVX0RFQlVHKCJkeW5hbWljX290X3dyX3RibC5jb3VudD0ldVxuIiwKPiAtCQkJCXZiaWYt PmR5bmFtaWNfb3Rfd3JfdGJsLmNvdW50KTsKPiAtCQlpZiAodmJpZi0+ZHluYW1pY19vdF93cl90 YmwuY291bnQpIHsKPiAtCQkJdmJpZi0+ZHluYW1pY19vdF93cl90YmwuY2ZnID0ga2NhbGxvYygK PiAtCQkJCXZiaWYtPmR5bmFtaWNfb3Rfd3JfdGJsLmNvdW50LAo+IC0JCQkJc2l6ZW9mKHN0cnVj dCBkcHVfdmJpZl9keW5hbWljX290X2NmZyksCj4gLQkJCQlHRlBfS0VSTkVMKTsKPiAtCQkJaWYg KCF2YmlmLT5keW5hbWljX290X3dyX3RibC5jZmcpIHsKPiAtCQkJCXJjID0gLUVOT01FTTsKPiAt CQkJCWdvdG8gZW5kOwo+IC0JCQl9Cj4gLQkJfQo+IC0KPiAtCQlmb3IgKGogPSAwLCBrID0gMDsg aiA8IHZiaWYtPmR5bmFtaWNfb3Rfd3JfdGJsLmNvdW50OyBqKyspIHsKPiAtCQkJdmJpZi0+ZHlu YW1pY19vdF93cl90YmwuY2ZnW2pdLnBwcyA9ICh1NjQpCj4gLQkJCQlQUk9QX1ZBTFVFX0FDQ0VT Uyhwcm9wX3ZhbHVlLAo+IC0JCQkJVkJJRl9EWU5BTUlDX09UX1dSX0xJTUlULCBrKyspOwo+IC0J CQl2YmlmLT5keW5hbWljX290X3dyX3RibC5jZmdbal0ub3RfbGltaXQgPQo+IC0JCQkJUFJPUF9W QUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwKPiAtCQkJCVZCSUZfRFlOQU1JQ19PVF9XUl9MSU1JVCwg aysrKTsKPiAtCQkJRFBVX0RFQlVHKCJkeW5hbWljX290X3dyX3RibFslZF0uY2ZnPTwlbGx1ICV1 PlxuIiwgaiwKPiAtCQkJCXZiaWYtPmR5bmFtaWNfb3Rfd3JfdGJsLmNmZ1tqXS5wcHMsCj4gLQkJ CQl2YmlmLT5keW5hbWljX290X3dyX3RibC5jZmdbal0ub3RfbGltaXQpOwo+IC0JCX0KPiAtCj4g LQkJaWYgKHZiaWYtPmRlZmF1bHRfb3RfcmRfbGltaXQgfHwgdmJpZi0+ZGVmYXVsdF9vdF93cl9s aW1pdCB8fAo+IC0JCQkJdmJpZi0+ZHluYW1pY19vdF9yZF90YmwuY291bnQgfHwKPiAtCQkJCXZi aWYtPmR5bmFtaWNfb3Rfd3JfdGJsLmNvdW50KQo+IC0JCQlzZXRfYml0KERQVV9WQklGX1FPU19P VExJTSwgJnZiaWYtPmZlYXR1cmVzKTsKPiAtCj4gLQkJdmJpZi0+cW9zX3J0X3RibC5ucHJpb3Jp dHlfbHZsID0KPiAtCQkJCXByb3BfY291bnRbVkJJRl9RT1NfUlRfUkVNQVBdOwo+IC0JCURQVV9E RUJVRygicW9zX3J0X3RibC5ucHJpb3JpdHlfbHZsPSV1XG4iLAo+IC0JCQkJdmJpZi0+cW9zX3J0 X3RibC5ucHJpb3JpdHlfbHZsKTsKPiAtCQlpZiAodmJpZi0+cW9zX3J0X3RibC5ucHJpb3JpdHlf bHZsID09IGRwdV9jZmctPnZiaWZfcW9zX25sdmwpIHsKPiAtCQkJdmJpZi0+cW9zX3J0X3RibC5w cmlvcml0eV9sdmwgPSBrY2FsbG9jKAo+IC0JCQkJdmJpZi0+cW9zX3J0X3RibC5ucHJpb3JpdHlf bHZsLCBzaXplb2YodTMyKSwKPiAtCQkJCUdGUF9LRVJORUwpOwo+IC0JCQlpZiAoIXZiaWYtPnFv c19ydF90YmwucHJpb3JpdHlfbHZsKSB7Cj4gLQkJCQlyYyA9IC1FTk9NRU07Cj4gLQkJCQlnb3Rv IGVuZDsKPiAtCQkJfQo+IC0JCX0gZWxzZSBpZiAodmJpZi0+cW9zX3J0X3RibC5ucHJpb3JpdHlf bHZsKSB7Cj4gLQkJCXZiaWYtPnFvc19ydF90YmwubnByaW9yaXR5X2x2bCA9IDA7Cj4gLQkJCXZi aWYtPnFvc19ydF90YmwucHJpb3JpdHlfbHZsID0gTlVMTDsKPiAtCQkJRFBVX0VSUk9SKCJpbnZh bGlkIHFvcyBydCB0YWJsZVxuIik7Cj4gLQkJfQo+IC0KPiAtCQlmb3IgKGogPSAwOyBqIDwgdmJp Zi0+cW9zX3J0X3RibC5ucHJpb3JpdHlfbHZsOyBqKyspIHsKPiAtCQkJdmJpZi0+cW9zX3J0X3Ri bC5wcmlvcml0eV9sdmxbal0gPQo+IC0JCQkJUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwK PiAtCQkJCQkJVkJJRl9RT1NfUlRfUkVNQVAsIGopOwo+IC0JCQlEUFVfREVCVUcoImx2bFslZF09 JXVcbiIsIGosCj4gLQkJCQkJdmJpZi0+cW9zX3J0X3RibC5wcmlvcml0eV9sdmxbal0pOwo+IC0J CX0KPiAtCj4gLQkJdmJpZi0+cW9zX25ydF90YmwubnByaW9yaXR5X2x2bCA9Cj4gLQkJCQlwcm9w X2NvdW50W1ZCSUZfUU9TX05SVF9SRU1BUF07Cj4gLQkJRFBVX0RFQlVHKCJxb3NfbnJ0X3RibC5u cHJpb3JpdHlfbHZsPSV1XG4iLAo+IC0JCQkJdmJpZi0+cW9zX25ydF90YmwubnByaW9yaXR5X2x2 bCk7Cj4gLQo+IC0JCWlmICh2YmlmLT5xb3NfbnJ0X3RibC5ucHJpb3JpdHlfbHZsID09IGRwdV9j ZmctPnZiaWZfcW9zX25sdmwpIHsKPiAtCQkJdmJpZi0+cW9zX25ydF90YmwucHJpb3JpdHlfbHZs ID0ga2NhbGxvYygKPiAtCQkJCXZiaWYtPnFvc19ucnRfdGJsLm5wcmlvcml0eV9sdmwsIHNpemVv Zih1MzIpLAo+IC0JCQkJR0ZQX0tFUk5FTCk7Cj4gLQkJCWlmICghdmJpZi0+cW9zX25ydF90Ymwu cHJpb3JpdHlfbHZsKSB7Cj4gLQkJCQlyYyA9IC1FTk9NRU07Cj4gLQkJCQlnb3RvIGVuZDsKPiAt CQkJfQo+IC0JCX0gZWxzZSBpZiAodmJpZi0+cW9zX25ydF90YmwubnByaW9yaXR5X2x2bCkgewo+ IC0JCQl2YmlmLT5xb3NfbnJ0X3RibC5ucHJpb3JpdHlfbHZsID0gMDsKPiAtCQkJdmJpZi0+cW9z X25ydF90YmwucHJpb3JpdHlfbHZsID0gTlVMTDsKPiAtCQkJRFBVX0VSUk9SKCJpbnZhbGlkIHFv cyBucnQgdGFibGVcbiIpOwo+IC0JCX0KPiAtCj4gLQkJZm9yIChqID0gMDsgaiA8IHZiaWYtPnFv c19ucnRfdGJsLm5wcmlvcml0eV9sdmw7IGorKykgewo+IC0JCQl2YmlmLT5xb3NfbnJ0X3RibC5w cmlvcml0eV9sdmxbal0gPQo+IC0JCQkJUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwKPiAt CQkJCQkJVkJJRl9RT1NfTlJUX1JFTUFQLCBqKTsKPiAtCQkJRFBVX0RFQlVHKCJsdmxbJWRdPSV1 XG4iLCBqLAo+IC0JCQkJCXZiaWYtPnFvc19ucnRfdGJsLnByaW9yaXR5X2x2bFtqXSk7Cj4gLQkJ fQo+IC0KPiAtCQlpZiAodmJpZi0+cW9zX3J0X3RibC5ucHJpb3JpdHlfbHZsIHx8Cj4gLQkJCQl2 YmlmLT5xb3NfbnJ0X3RibC5ucHJpb3JpdHlfbHZsKQo+IC0JCQlzZXRfYml0KERQVV9WQklGX1FP U19SRU1BUCwgJnZiaWYtPmZlYXR1cmVzKTsKPiAtCj4gLQkJdmJpZi0+bWVtdHlwZV9jb3VudCA9 IHByb3BfY291bnRbVkJJRl9NRU1UWVBFXzBdICsKPiAtCQkJCQlwcm9wX2NvdW50W1ZCSUZfTUVN VFlQRV8xXTsKPiAtCQlpZiAodmJpZi0+bWVtdHlwZV9jb3VudCA+IE1BWF9YSU5fQ09VTlQpIHsK PiAtCQkJdmJpZi0+bWVtdHlwZV9jb3VudCA9IDA7Cj4gLQkJCURQVV9FUlJPUigidG9vIG1hbnkg bWVtdHlwZSBkZWZzLCBpZ25vcmluZyBlbnRyaWVzXG4iKTsKPiAtCQl9Cj4gLQkJZm9yIChqID0g MCwgayA9IDA7IGogPCBwcm9wX2NvdW50W1ZCSUZfTUVNVFlQRV8wXTsgaisrKQo+IC0JCQl2Ymlm LT5tZW10eXBlW2srK10gPSBQUk9QX1ZBTFVFX0FDQ0VTUygKPiAtCQkJCQlwcm9wX3ZhbHVlLCBW QklGX01FTVRZUEVfMCwgaik7Cj4gLQkJZm9yIChqID0gMDsgaiA8IHByb3BfY291bnRbVkJJRl9N RU1UWVBFXzFdOyBqKyspCj4gLQkJCXZiaWYtPm1lbXR5cGVbaysrXSA9IFBST1BfVkFMVUVfQUND RVNTKAo+IC0JCQkJCXByb3BfdmFsdWUsIFZCSUZfTUVNVFlQRV8xLCBqKTsKPiAtCX0KPiAtCj4g LWVuZDoKPiAtCWtmcmVlKHByb3BfdmFsdWUpOwo+IC0JcmV0dXJuIHJjOwo+IC19Cj4gLQo+IC1z dGF0aWMgaW50IGRwdV9wcF9wYXJzZV9kdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBzdHJ1Y3Qg ZHB1X21kc3NfY2ZnICpkcHVfY2ZnKQo+IC17Cj4gLQlpbnQgcmMsIHByb3BfY291bnRbUFBfUFJP UF9NQVhdLCBpOwo+IC0Jc3RydWN0IGRwdV9wcm9wX3ZhbHVlICpwcm9wX3ZhbHVlID0gTlVMTDsK PiAtCWJvb2wgcHJvcF9leGlzdHNbUFBfUFJPUF9NQVhdOwo+IC0JdTMyIG9mZl9jb3VudDsKPiAt CXN0cnVjdCBkcHVfcGluZ3BvbmdfY2ZnICpwcDsKPiAtCXN0cnVjdCBkcHVfcGluZ3Bvbmdfc3Vi X2Jsa3MgKnNibGs7Cj4gLQo+IC0JaWYgKCFkcHVfY2ZnKSB7Cj4gLQkJRFBVX0VSUk9SKCJpbnZh bGlkIGFyZ3VtZW50XG4iKTsKPiAtCQlyYyA9IC1FSU5WQUw7Cj4gLQkJZ290byBlbmQ7Cj4gLQl9 Cj4gLQo+IC0JcHJvcF92YWx1ZSA9IGt6YWxsb2MoUFBfUFJPUF9NQVggKgo+IC0JCQlzaXplb2Yo c3RydWN0IGRwdV9wcm9wX3ZhbHVlKSwgR0ZQX0tFUk5FTCk7Cj4gLQlpZiAoIXByb3BfdmFsdWUp IHsKPiAtCQlyYyA9IC1FTk9NRU07Cj4gLQkJZ290byBlbmQ7Cj4gLQl9Cj4gLQo+IC0JcmMgPSBf dmFsaWRhdGVfZHRfZW50cnkobnAsIHBwX3Byb3AsIEFSUkFZX1NJWkUocHBfcHJvcCksIHByb3Bf Y291bnQsCj4gLQkJJm9mZl9jb3VudCk7Cj4gLQlpZiAocmMpCj4gLQkJZ290byBlbmQ7Cj4gLQo+ IC0JZHB1X2NmZy0+cGluZ3BvbmdfY291bnQgPSBvZmZfY291bnQ7Cj4gLQo+IC0JcmMgPSBfcmVh ZF9kdF9lbnRyeShucCwgcHBfcHJvcCwgQVJSQVlfU0laRShwcF9wcm9wKSwgcHJvcF9jb3VudCwK PiAtCQlwcm9wX2V4aXN0cywgcHJvcF92YWx1ZSk7Cj4gLQlpZiAocmMpCj4gLQkJZ290byBlbmQ7 Cj4gLQo+IC0JZm9yIChpID0gMDsgaSA8IG9mZl9jb3VudDsgaSsrKSB7Cj4gLQkJcHAgPSBkcHVf Y2ZnLT5waW5ncG9uZyArIGk7Cj4gLQkJc2JsayA9IGt6YWxsb2Moc2l6ZW9mKCpzYmxrKSwgR0ZQ X0tFUk5FTCk7Cj4gLQkJaWYgKCFzYmxrKSB7Cj4gLQkJCXJjID0gLUVOT01FTTsKPiAtCQkJLyog Y2F0YWxvZyBkZWluaXQgd2lsbCByZWxlYXNlIHRoZSBhbGxvY2F0ZWQgYmxvY2tzICovCj4gLQkJ CWdvdG8gZW5kOwo+IC0JCX0KPiAtCQlwcC0+c2JsayA9IHNibGs7Cj4gLQo+IC0JCXBwLT5iYXNl ID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwgUFBfT0ZGLCBpKTsKPiAtCQlwcC0+aWQg PSBQSU5HUE9OR18wICsgaTsKPiAtCQlzbnByaW50ZihwcC0+bmFtZSwgRFBVX0hXX0JMS19OQU1F X0xFTiwgInBpbmdwb25nXyV1IiwKPiAtCQkJCXBwLT5pZCAtIFBJTkdQT05HXzApOwo+IC0JCXBw LT5sZW4gPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBQUF9MRU4sIDApOwo+IC0KPiAt CQlzYmxrLT50ZS5iYXNlID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwgVEVfT0ZGLCBp KTsKPiAtCQlzYmxrLT50ZS5pZCA9IERQVV9QSU5HUE9OR19URTsKPiAtCQlzbnByaW50ZihzYmxr LT50ZS5uYW1lLCBEUFVfSFdfQkxLX05BTUVfTEVOLCAidGVfJXUiLAo+IC0JCQkJcHAtPmlkIC0g UElOR1BPTkdfMCk7Cj4gLQkJc2V0X2JpdChEUFVfUElOR1BPTkdfVEUsICZwcC0+ZmVhdHVyZXMp Owo+IC0KPiAtCQlzYmxrLT50ZTIuYmFzZSA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUs IFRFMl9PRkYsIGkpOwo+IC0JCWlmIChzYmxrLT50ZTIuYmFzZSkgewo+IC0JCQlzYmxrLT50ZTIu aWQgPSBEUFVfUElOR1BPTkdfVEUyOwo+IC0JCQlzbnByaW50ZihzYmxrLT50ZTIubmFtZSwgRFBV X0hXX0JMS19OQU1FX0xFTiwgInRlMl8ldSIsCj4gLQkJCQkJcHAtPmlkIC0gUElOR1BPTkdfMCk7 Cj4gLQkJCXNldF9iaXQoRFBVX1BJTkdQT05HX1RFMiwgJnBwLT5mZWF0dXJlcyk7Cj4gLQkJCXNl dF9iaXQoRFBVX1BJTkdQT05HX1NQTElULCAmcHAtPmZlYXR1cmVzKTsKPiAtCQl9Cj4gLQo+IC0J CWlmIChQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBQUF9TTEFWRSwgaSkpCj4gLQkJCXNl dF9iaXQoRFBVX1BJTkdQT05HX1NMQVZFLCAmcHAtPmZlYXR1cmVzKTsKPiAtCj4gLQkJc2Jsay0+ ZHNjLmJhc2UgPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBEU0NfT0ZGLCBpKTsKPiAt CQlpZiAoc2Jsay0+ZHNjLmJhc2UpIHsKPiAtCQkJc2Jsay0+ZHNjLmlkID0gRFBVX1BJTkdQT05H X0RTQzsKPiAtCQkJc25wcmludGYoc2Jsay0+ZHNjLm5hbWUsIERQVV9IV19CTEtfTkFNRV9MRU4s ICJkc2NfJXUiLAo+IC0JCQkJCXBwLT5pZCAtIFBJTkdQT05HXzApOwo+IC0JCQlzZXRfYml0KERQ VV9QSU5HUE9OR19EU0MsICZwcC0+ZmVhdHVyZXMpOwo+IC0JCX0KPiAtCj4gLQkJc2Jsay0+ZGl0 aGVyLmJhc2UgPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBESVRIRVJfT0ZGLAo+IC0J CQkJCQkJaSk7Cj4gLQkJaWYgKHNibGstPmRpdGhlci5iYXNlKSB7Cj4gLQkJCXNibGstPmRpdGhl ci5pZCA9IERQVV9QSU5HUE9OR19ESVRIRVI7Cj4gLQkJCXNucHJpbnRmKHNibGstPmRpdGhlci5u YW1lLCBEUFVfSFdfQkxLX05BTUVfTEVOLAo+IC0JCQkJCSJkaXRoZXJfJXUiLCBwcC0+aWQpOwo+ IC0JCQlzZXRfYml0KERQVV9QSU5HUE9OR19ESVRIRVIsICZwcC0+ZmVhdHVyZXMpOwo+IC0JCX0K PiAtCQlzYmxrLT5kaXRoZXIubGVuID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwgRElU SEVSX0xFTiwgMCk7Cj4gLQkJc2Jsay0+ZGl0aGVyLnZlcnNpb24gPSBQUk9QX1ZBTFVFX0FDQ0VT Uyhwcm9wX3ZhbHVlLCBESVRIRVJfVkVSLAo+IC0JCQkJCQkJCTApOwo+IC0JfQo+IC0KPiAtZW5k Ogo+IC0Ja2ZyZWUocHJvcF92YWx1ZSk7Cj4gLQlyZXR1cm4gcmM7Cj4gLX0KPiAtCj4gLXN0YXRp YyBpbnQgZHB1X3BhcnNlX2R0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHN0cnVjdCBkcHVfbWRz c19jZmcgKmNmZykKPiAtewo+IC0JaW50IHJjLCBkbWFfcmMsIGxlbiwgcHJvcF9jb3VudFtEUFVf UFJPUF9NQVhdOwo+IC0Jc3RydWN0IGRwdV9wcm9wX3ZhbHVlICpwcm9wX3ZhbHVlID0gTlVMTDsK PiAtCWJvb2wgcHJvcF9leGlzdHNbRFBVX1BST1BfTUFYXTsKPiAtCWNvbnN0IGNoYXIgKnR5cGU7 Cj4gLQo+IC0JaWYgKCFjZmcpIHsKPiAtCQlEUFVfRVJST1IoImludmFsaWQgYXJndW1lbnRcbiIp Owo+IC0JCXJjID0gLUVJTlZBTDsKPiAtCQlnb3RvIGVuZDsKPiAtCX0KPiAtCj4gLQlwcm9wX3Zh bHVlID0ga3phbGxvYyhEUFVfUFJPUF9NQVggKgo+IC0JCQlzaXplb2Yoc3RydWN0IGRwdV9wcm9w X3ZhbHVlKSwgR0ZQX0tFUk5FTCk7Cj4gLQlpZiAoIXByb3BfdmFsdWUpIHsKPiAtCQlyYyA9IC1F Tk9NRU07Cj4gLQkJZ290byBlbmQ7Cj4gLQl9Cj4gLQo+IC0JcmMgPSBfdmFsaWRhdGVfZHRfZW50 cnkobnAsIGRwdV9wcm9wLCBBUlJBWV9TSVpFKGRwdV9wcm9wKSwgcHJvcF9jb3VudCwKPiAtCQkm bGVuKTsKPiAtCWlmIChyYykKPiAtCQlnb3RvIGVuZDsKPiAtCj4gLQlyYyA9IF9yZWFkX2R0X2Vu dHJ5KG5wLCBkcHVfcHJvcCwgQVJSQVlfU0laRShkcHVfcHJvcCksIHByb3BfY291bnQsCj4gLQkJ cHJvcF9leGlzdHMsIHByb3BfdmFsdWUpOwo+IC0JaWYgKHJjKQo+IC0JCWdvdG8gZW5kOwo+IC0K PiAtCWNmZy0+bWRzc19jb3VudCA9IDE7Cj4gLQljZmctPm1kc3NbMF0uYmFzZSA9IE1EU1NfQkFT RV9PRkZTRVQ7Cj4gLQljZmctPm1kc3NbMF0uaWQgPSBNRFBfVE9QOwo+IC0Jc25wcmludGYoY2Zn LT5tZHNzWzBdLm5hbWUsIERQVV9IV19CTEtfTkFNRV9MRU4sICJtZHNzXyV1IiwKPiAtCQkJY2Zn LT5tZHNzWzBdLmlkIC0gTURQX1RPUCk7Cj4gLQo+IC0JY2ZnLT5tZHBfY291bnQgPSAxOwo+IC0J Y2ZnLT5tZHBbMF0uaWQgPSBNRFBfVE9QOwo+IC0Jc25wcmludGYoY2ZnLT5tZHBbMF0ubmFtZSwg RFBVX0hXX0JMS19OQU1FX0xFTiwgInRvcF8ldSIsCj4gLQkJY2ZnLT5tZHBbMF0uaWQgLSBNRFBf VE9QKTsKPiAtCWNmZy0+bWRwWzBdLmJhc2UgPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVl LCBEUFVfT0ZGLCAwKTsKPiAtCWNmZy0+bWRwWzBdLmxlbiA9IFBST1BfVkFMVUVfQUNDRVNTKHBy b3BfdmFsdWUsIERQVV9MRU4sIDApOwo+IC0JaWYgKCFwcm9wX2V4aXN0c1tEUFVfTEVOXSkKPiAt CQljZmctPm1kcFswXS5sZW4gPSBERUZBVUxUX0RQVV9IV19CTE9DS19MRU47Cj4gLQo+IC0JY2Zn LT5tYXhfc3NwcF9saW5ld2lkdGggPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAo+IC0J CQlTU1BQX0xJTkVXSURUSCwgMCk7Cj4gLQlpZiAoIXByb3BfZXhpc3RzW1NTUFBfTElORVdJRFRI XSkKPiAtCQljZmctPm1heF9zc3BwX2xpbmV3aWR0aCA9IERFRkFVTFRfRFBVX0xJTkVfV0lEVEg7 Cj4gLQo+IC0JY2ZnLT5tYXhfbWl4ZXJfd2lkdGggPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3Zh bHVlLAo+IC0JCQlNSVhFUl9MSU5FV0lEVEgsIDApOwo+IC0JaWYgKCFwcm9wX2V4aXN0c1tNSVhF Ul9MSU5FV0lEVEhdKQo+IC0JCWNmZy0+bWF4X21peGVyX3dpZHRoID0gREVGQVVMVF9EUFVfTElO RV9XSURUSDsKPiAtCj4gLQljZmctPm1heF9taXhlcl9ibGVuZHN0YWdlcyA9IFBST1BfVkFMVUVf QUNDRVNTKHByb3BfdmFsdWUsCj4gLQkJCU1JWEVSX0JMRU5ELCAwKTsKPiAtCWlmICghcHJvcF9l eGlzdHNbTUlYRVJfQkxFTkRdKQo+IC0JCWNmZy0+bWF4X21peGVyX2JsZW5kc3RhZ2VzID0gREVG QVVMVF9EUFVfTUlYRVJfQkxFTkRTVEFHRVM7Cj4gLQo+IC0JY2ZnLT5tYXhfd2JfbGluZXdpZHRo ID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwgV0JfTElORVdJRFRILCAwKTsKPiAtCWlm ICghcHJvcF9leGlzdHNbV0JfTElORVdJRFRIXSkKPiAtCQljZmctPm1heF93Yl9saW5ld2lkdGgg PSBERUZBVUxUX0RQVV9MSU5FX1dJRFRIOwo+IC0KPiAtCWNmZy0+bWRwWzBdLmhpZ2hlc3RfYmFu a19iaXQgPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAo+IC0JCQlCQU5LX0JJVCwgMCk7 Cj4gLQlpZiAoIXByb3BfZXhpc3RzW0JBTktfQklUXSkKPiAtCQljZmctPm1kcFswXS5oaWdoZXN0 X2JhbmtfYml0ID0gREVGQVVMVF9EUFVfSElHSEVTVF9CQU5LX0JJVDsKPiAtCj4gLQljZmctPnVi d2NfdmVyc2lvbiA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsIFVCV0NfVkVSU0lPTiwg MCk7Cj4gLQlpZiAoIXByb3BfZXhpc3RzW1VCV0NfVkVSU0lPTl0pCj4gLQkJY2ZnLT51YndjX3Zl cnNpb24gPSBERUZBVUxUX0RQVV9VQldDX1ZFUlNJT047Cj4gLQo+IC0JY2ZnLT5tZHBbMF0udWJ3 Y19zdGF0aWMgPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBVQldDX1NUQVRJQywgMCk7 Cj4gLQlpZiAoIXByb3BfZXhpc3RzW1VCV0NfU1RBVElDXSkKPiAtCQljZmctPm1kcFswXS51Yndj X3N0YXRpYyA9IERFRkFVTFRfRFBVX1VCV0NfU1RBVElDOwo+IC0KPiAtCWNmZy0+bWRwWzBdLnVi d2Nfc3dpenpsZSA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCj4gLQkJCVVCV0NfU1dJ WlpMRSwgMCk7Cj4gLQlpZiAoIXByb3BfZXhpc3RzW1VCV0NfU1dJWlpMRV0pCj4gLQkJY2ZnLT5t ZHBbMF0udWJ3Y19zd2l6emxlID0gREVGQVVMVF9EUFVfVUJXQ19TV0laWkxFOwo+IC0KPiAtCWNm Zy0+bWRwWzBdLmhhc19kZXN0X3NjYWxlciA9Cj4gLQkJUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92 YWx1ZSwgREVTVF9TQ0FMRVIsIDApOwo+IC0KPiAtCXJjID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJp bmcobnAsIGRwdV9wcm9wW1FTRUVEX1RZUEVdLnByb3BfbmFtZSwgJnR5cGUpOwo+IC0JaWYgKCFy YyAmJiAhc3RyY21wKHR5cGUsICJxc2VlZHYzIikpIHsKPiAtCQljZmctPnFzZWVkX3R5cGUgPSBE UFVfU1NQUF9TQ0FMRVJfUVNFRUQzOwo+IC0JfSBlbHNlIGlmICghcmMgJiYgIXN0cmNtcCh0eXBl LCAicXNlZWR2MiIpKSB7Cj4gLQkJY2ZnLT5xc2VlZF90eXBlID0gRFBVX1NTUFBfU0NBTEVSX1FT RUVEMjsKPiAtCX0gZWxzZSBpZiAocmMpIHsKPiAtCQlEUFVfREVCVUcoImludmFsaWQgUVNFRUQg Y29uZmlndXJhdGlvblxuIik7Cj4gLQkJcmMgPSAwOwo+IC0JfQo+IC0KPiAtCXJjID0gb2ZfcHJv cGVydHlfcmVhZF9zdHJpbmcobnAsIGRwdV9wcm9wW0NTQ19UWVBFXS5wcm9wX25hbWUsICZ0eXBl KTsKPiAtCWlmICghcmMgJiYgIXN0cmNtcCh0eXBlLCAiY3NjIikpIHsKPiAtCQljZmctPmNzY190 eXBlID0gRFBVX1NTUFBfQ1NDOwo+IC0JfSBlbHNlIGlmICghcmMgJiYgIXN0cmNtcCh0eXBlLCAi Y3NjLTEwYml0IikpIHsKPiAtCQljZmctPmNzY190eXBlID0gRFBVX1NTUFBfQ1NDXzEwQklUOwo+ IC0JfSBlbHNlIGlmIChyYykgewo+IC0JCURQVV9ERUJVRygiaW52YWxpZCBjc2MgY29uZmlndXJh dGlvblxuIik7Cj4gLQkJcmMgPSAwOwo+IC0JfQo+IC0KPiAtCS8qCj4gLQkgKiBDdXJyZW50IERQ VSBzdXBwb3J0IG9ubHkgU21hcnQgRE1BIDIuMC4KPiAtCSAqIE5vIHN1cHBvcnQgZm9yIFNtYXJ0 IERNQSAxLjAgeWV0Lgo+IC0JICovCj4gLQljZmctPnNtYXJ0X2RtYV9yZXYgPSAwOwo+IC0JZG1h X3JjID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcobnAsIGRwdV9wcm9wW1NNQVJUX0RNQV9SRVZd LnByb3BfbmFtZSwKPiAtCQkJJnR5cGUpOwo+IC0JaWYgKCFkbWFfcmMgJiYgIXN0cmNtcCh0eXBl LCAic21hcnRfZG1hX3YyIikpIHsKPiAtCQljZmctPnNtYXJ0X2RtYV9yZXYgPSBEUFVfU1NQUF9T TUFSVF9ETUFfVjI7Cj4gLQl9IGVsc2UgaWYgKCFkbWFfcmMgJiYgIXN0cmNtcCh0eXBlLCAic21h cnRfZG1hX3YxIikpIHsKPiAtCQlEUFVfRVJST1IoInNtYXJ0IGRtYSAxLjAgaXMgbm90IHN1cHBv cnRlZCBpbiBEUFVcbiIpOwo+IC0JCWNmZy0+c21hcnRfZG1hX3JldiA9IDA7Cj4gLQl9Cj4gLQo+ IC0JY2ZnLT5oYXNfc3JjX3NwbGl0ID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwgU1JD X1NQTElULCAwKTsKPiAtCWNmZy0+aGFzX2RpbV9sYXllciA9IFBST1BfVkFMVUVfQUNDRVNTKHBy b3BfdmFsdWUsIERJTV9MQVlFUiwgMCk7Cj4gLQljZmctPmhhc19pZGxlX3BjID0gUFJPUF9WQUxV RV9BQ0NFU1MocHJvcF92YWx1ZSwgSURMRV9QQywgMCk7Cj4gLWVuZDoKPiAtCWtmcmVlKHByb3Bf dmFsdWUpOwo+IC0JcmV0dXJuIHJjOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IGRwdV9wYXJzZV9y ZWdfZG1hX2R0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCj4gLQkJc3RydWN0IGRwdV9tZHNzX2Nm ZyAqZHB1X2NmZykKPiAtewo+IC0JdTMyIHZhbDsKPiAtCWludCByYyA9IDA7Cj4gLQlpbnQgaSA9 IDA7Cj4gLQo+IC0JZHB1X2NmZy0+cmVnX2RtYV9jb3VudCA9IDA7Cj4gLQlmb3IgKGkgPSAwOyBp IDwgUkVHX0RNQV9QUk9QX01BWDsgaSsrKSB7Cj4gLQkJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3Uz MihucCwgcmVnX2RtYV9wcm9wW2ldLnByb3BfbmFtZSwKPiAtCQkJCSZ2YWwpOwo+IC0JCWlmIChy YykKPiAtCQkJYnJlYWs7Cj4gLQkJc3dpdGNoIChpKSB7Cj4gLQkJY2FzZSBSRUdfRE1BX09GRjoK PiAtCQkJZHB1X2NmZy0+ZG1hX2NmZy5iYXNlID0gdmFsOwo+IC0JCQlicmVhazsKPiAtCQljYXNl IFJFR19ETUFfVkVSU0lPTjoKPiAtCQkJZHB1X2NmZy0+ZG1hX2NmZy52ZXJzaW9uID0gdmFsOwo+ IC0JCQlicmVhazsKPiAtCQljYXNlIFJFR19ETUFfVFJJR0dFUl9PRkY6Cj4gLQkJCWRwdV9jZmct PmRtYV9jZmcudHJpZ2dlcl9zZWxfb2ZmID0gdmFsOwo+IC0JCQlicmVhazsKPiAtCQlkZWZhdWx0 Ogo+IC0JCQlicmVhazsKPiAtCQl9Cj4gLQl9Cj4gLQlpZiAoIXJjICYmIGkgPT0gUkVHX0RNQV9Q Uk9QX01BWCkKPiAtCQlkcHVfY2ZnLT5yZWdfZG1hX2NvdW50ID0gMTsKPiAtCS8qIHJlZyBkbWEg aXMgb3B0aW9uYWwgZmVhdHVyZSBoZW5jZSByZXR1cm4gMCAqLwo+IC0JcmV0dXJuIDA7Cj4gLX0K PiAtCj4gLXN0YXRpYyBpbnQgZHB1X3BlcmZfcGFyc2VfZHQoc3RydWN0IGRldmljZV9ub2RlICpu cCwgc3RydWN0IGRwdV9tZHNzX2NmZyAqY2ZnKQo+IC17Cj4gLQlpbnQgcmMsIGxlbiwgcHJvcF9j b3VudFtQRVJGX1BST1BfTUFYXTsKPiAtCXN0cnVjdCBkcHVfcHJvcF92YWx1ZSAqcHJvcF92YWx1 ZSA9IE5VTEw7Cj4gLQlib29sIHByb3BfZXhpc3RzW1BFUkZfUFJPUF9NQVhdOwo+IC0JY29uc3Qg Y2hhciAqc3RyID0gTlVMTDsKPiAtCWludCBqLCBrOwo+IC0KPiAtCWlmICghY2ZnKSB7Cj4gLQkJ RFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50XG4iKTsKPiAtCQlyYyA9IC1FSU5WQUw7Cj4gLQkJ Z290byBlbmQ7Cj4gLQl9Cj4gLQo+IC0JcHJvcF92YWx1ZSA9IGt6YWxsb2MoUEVSRl9QUk9QX01B WCAqCj4gLQkJCXNpemVvZihzdHJ1Y3QgZHB1X3Byb3BfdmFsdWUpLCBHRlBfS0VSTkVMKTsKPiAt CWlmICghcHJvcF92YWx1ZSkgewo+IC0JCXJjID0gLUVOT01FTTsKPiAtCQlnb3RvIGVuZDsKPiAt CX0KPiAtCj4gLQlyYyA9IF92YWxpZGF0ZV9kdF9lbnRyeShucCwgZHB1X3BlcmZfcHJvcCwgQVJS QVlfU0laRShkcHVfcGVyZl9wcm9wKSwKPiAtCQkJcHJvcF9jb3VudCwgJmxlbik7Cj4gLQlpZiAo cmMpCj4gLQkJZ290byBmcmVlcHJvcDsKPiAtCj4gLQlyYyA9IF92YWxpZGF0ZV9kdF9lbnRyeShu cCwgJmRwdV9wZXJmX3Byb3BbUEVSRl9EQU5HRVJfTFVUXSwgMSwKPiAtCQkJJnByb3BfY291bnRb UEVSRl9EQU5HRVJfTFVUXSwgTlVMTCk7Cj4gLQlpZiAocmMpCj4gLQkJZ290byBmcmVlcHJvcDsK PiAtCj4gLQlyYyA9IF92YWxpZGF0ZV9kdF9lbnRyeShucCwgJmRwdV9wZXJmX3Byb3BbUEVSRl9T QUZFX0xVVF0sIDEsCj4gLQkJCSZwcm9wX2NvdW50W1BFUkZfU0FGRV9MVVRdLCBOVUxMKTsKPiAt CWlmIChyYykKPiAtCQlnb3RvIGZyZWVwcm9wOwo+IC0KPiAtCXJjID0gX3ZhbGlkYXRlX2R0X2Vu dHJ5KG5wLCAmZHB1X3BlcmZfcHJvcFtQRVJGX1FPU19MVVRfTElORUFSXSwgMSwKPiAtCQkJJnBy b3BfY291bnRbUEVSRl9RT1NfTFVUX0xJTkVBUl0sIE5VTEwpOwo+IC0JaWYgKHJjKQo+IC0JCWdv dG8gZnJlZXByb3A7Cj4gLQo+IC0JcmMgPSBfdmFsaWRhdGVfZHRfZW50cnkobnAsICZkcHVfcGVy Zl9wcm9wW1BFUkZfUU9TX0xVVF9NQUNST1RJTEVdLCAxLAo+IC0JCQkmcHJvcF9jb3VudFtQRVJG X1FPU19MVVRfTUFDUk9USUxFXSwgTlVMTCk7Cj4gLQlpZiAocmMpCj4gLQkJZ290byBmcmVlcHJv cDsKPiAtCj4gLQlyYyA9IF92YWxpZGF0ZV9kdF9lbnRyeShucCwgJmRwdV9wZXJmX3Byb3BbUEVS Rl9RT1NfTFVUX05SVF0sIDEsCj4gLQkJCSZwcm9wX2NvdW50W1BFUkZfUU9TX0xVVF9OUlRdLCBO VUxMKTsKPiAtCWlmIChyYykKPiAtCQlnb3RvIGZyZWVwcm9wOwo+IC0KPiAtCXJjID0gX3ZhbGlk YXRlX2R0X2VudHJ5KG5wLCAmZHB1X3BlcmZfcHJvcFtQRVJGX1FPU19MVVRfQ1dCXSwgMSwKPiAt CQkJJnByb3BfY291bnRbUEVSRl9RT1NfTFVUX0NXQl0sIE5VTEwpOwo+IC0JaWYgKHJjKQo+IC0J CWdvdG8gZnJlZXByb3A7Cj4gLQo+IC0JcmMgPSBfdmFsaWRhdGVfZHRfZW50cnkobnAsICZkcHVf cGVyZl9wcm9wW1BFUkZfQ0RQX1NFVFRJTkddLCAxLAo+IC0JCQkmcHJvcF9jb3VudFtQRVJGX0NE UF9TRVRUSU5HXSwgTlVMTCk7Cj4gLQlpZiAocmMpCj4gLQkJZ290byBmcmVlcHJvcDsKPiAtCj4g LQlyYyA9IF9yZWFkX2R0X2VudHJ5KG5wLCBkcHVfcGVyZl9wcm9wLCBBUlJBWV9TSVpFKGRwdV9w ZXJmX3Byb3ApLAo+IC0JCQlwcm9wX2NvdW50LCBwcm9wX2V4aXN0cywgcHJvcF92YWx1ZSk7Cj4g LQlpZiAocmMpCj4gLQkJZ290byBmcmVlcHJvcDsKPiAtCj4gLQljZmctPnBlcmYubWF4X2J3X2xv dyA9Cj4gLQkJCXByb3BfZXhpc3RzW1BFUkZfTUFYX0JXX0xPV10gPwo+IC0JCQlQUk9QX1ZBTFVF X0FDQ0VTUyhwcm9wX3ZhbHVlLCBQRVJGX01BWF9CV19MT1csIDApIDoKPiAtCQkJREVGQVVMVF9N QVhfQldfTE9XOwo+IC0JY2ZnLT5wZXJmLm1heF9id19oaWdoID0KPiAtCQkJcHJvcF9leGlzdHNb UEVSRl9NQVhfQldfSElHSF0gPwo+IC0JCQlQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBQ RVJGX01BWF9CV19ISUdILCAwKSA6Cj4gLQkJCURFRkFVTFRfTUFYX0JXX0hJR0g7Cj4gLQljZmct PnBlcmYubWluX2NvcmVfaWIgPQo+IC0JCQlwcm9wX2V4aXN0c1tQRVJGX01JTl9DT1JFX0lCXSA/ Cj4gLQkJCVBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsIFBFUkZfTUlOX0NPUkVfSUIsIDAp IDoKPiAtCQkJREVGQVVMVF9NQVhfQldfTE9XOwo+IC0JY2ZnLT5wZXJmLm1pbl9sbGNjX2liID0K PiAtCQkJcHJvcF9leGlzdHNbUEVSRl9NSU5fTExDQ19JQl0gPwo+IC0JCQlQUk9QX1ZBTFVFX0FD Q0VTUyhwcm9wX3ZhbHVlLCBQRVJGX01JTl9MTENDX0lCLCAwKSA6Cj4gLQkJCURFRkFVTFRfTUFY X0JXX0xPVzsKPiAtCWNmZy0+cGVyZi5taW5fZHJhbV9pYiA9Cj4gLQkJCXByb3BfZXhpc3RzW1BF UkZfTUlOX0RSQU1fSUJdID8KPiAtCQkJUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwgUEVS Rl9NSU5fRFJBTV9JQiwgMCkgOgo+IC0JCQlERUZBVUxUX01BWF9CV19MT1c7Cj4gLQo+IC0JLyoK PiAtCSAqIFRoZSBmb2xsb3dpbmcgcGVyZm9ybWFuY2UgcGFyYW1ldGVycyAoZS5nLiBjb3JlX2li X2ZmKSBhcmUKPiAtCSAqIG1hcHBlZCBkaXJlY3RseSBhcyBkZXZpY2UgdHJlZSBzdHJpbmcgY29u c3RhbnRzLgo+IC0JICovCj4gLQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5wLAo+IC0J CQlkcHVfcGVyZl9wcm9wW1BFUkZfQ09SRV9JQl9GRl0ucHJvcF9uYW1lLCAmc3RyKTsKPiAtCWNm Zy0+cGVyZi5jb3JlX2liX2ZmID0gcmMgPyBERUZBVUxUX0NPUkVfSUJfRkYgOiBzdHI7Cj4gLQly YyA9IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5wLAo+IC0JCQlkcHVfcGVyZl9wcm9wW1BFUkZf Q09SRV9DTEtfRkZdLnByb3BfbmFtZSwgJnN0cik7Cj4gLQljZmctPnBlcmYuY29yZV9jbGtfZmYg PSByYyA/IERFRkFVTFRfQ09SRV9DTEtfRkYgOiBzdHI7Cj4gLQlyYyA9IG9mX3Byb3BlcnR5X3Jl YWRfc3RyaW5nKG5wLAo+IC0JCQlkcHVfcGVyZl9wcm9wW1BFUkZfQ09NUF9SQVRJT19SVF0ucHJv cF9uYW1lLCAmc3RyKTsKPiAtCWNmZy0+cGVyZi5jb21wX3JhdGlvX3J0ID0gcmMgPyBERUZBVUxU X0NPTVBfUkFUSU9fUlQgOiBzdHI7Cj4gLQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5w LAo+IC0JCQlkcHVfcGVyZl9wcm9wW1BFUkZfQ09NUF9SQVRJT19OUlRdLnByb3BfbmFtZSwgJnN0 cik7Cj4gLQljZmctPnBlcmYuY29tcF9yYXRpb19ucnQgPSByYyA/IERFRkFVTFRfQ09NUF9SQVRJ T19OUlQgOiBzdHI7Cj4gLQlyYyA9IDA7Cj4gLQo+IC0JY2ZnLT5wZXJmLnVuZGVyc2l6ZWRfcHJl ZmlsbF9saW5lcyA9Cj4gLQkJCXByb3BfZXhpc3RzW1BFUkZfVU5ERVJTSVpFRF9QUkVGSUxMX0xJ TkVTXSA/Cj4gLQkJCVBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCj4gLQkJCQkJUEVSRl9V TkRFUlNJWkVEX1BSRUZJTExfTElORVMsIDApIDoKPiAtCQkJREVGQVVMVF9VTkRFUlNJWkVEX1BS RUZJTExfTElORVM7Cj4gLQljZmctPnBlcmYueHRyYV9wcmVmaWxsX2xpbmVzID0KPiAtCQkJcHJv cF9leGlzdHNbUEVSRl9YVFJBX1BSRUZJTExfTElORVNdID8KPiAtCQkJUFJPUF9WQUxVRV9BQ0NF U1MocHJvcF92YWx1ZSwKPiAtCQkJCQlQRVJGX1hUUkFfUFJFRklMTF9MSU5FUywgMCkgOgo+IC0J CQlERUZBVUxUX1hUUkFfUFJFRklMTF9MSU5FUzsKPiAtCWNmZy0+cGVyZi5kZXN0X3NjYWxlX3By ZWZpbGxfbGluZXMgPQo+IC0JCQlwcm9wX2V4aXN0c1tQRVJGX0RFU1RfU0NBTEVfUFJFRklMTF9M SU5FU10gPwo+IC0JCQlQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAo+IC0JCQkJCVBFUkZf REVTVF9TQ0FMRV9QUkVGSUxMX0xJTkVTLCAwKSA6Cj4gLQkJCURFRkFVTFRfREVTVF9TQ0FMRV9Q UkVGSUxMX0xJTkVTOwo+IC0JY2ZnLT5wZXJmLm1hY3JvdGlsZV9wcmVmaWxsX2xpbmVzID0KPiAt CQkJcHJvcF9leGlzdHNbUEVSRl9NQUNST1RJTEVfUFJFRklMTF9MSU5FU10gPwo+IC0JCQlQUk9Q X1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAo+IC0JCQkJCVBFUkZfTUFDUk9USUxFX1BSRUZJTExf TElORVMsIDApIDoKPiAtCQkJREVGQVVMVF9NQUNST1RJTEVfUFJFRklMTF9MSU5FUzsKPiAtCWNm Zy0+cGVyZi55dXZfbnYxMl9wcmVmaWxsX2xpbmVzID0KPiAtCQkJcHJvcF9leGlzdHNbUEVSRl9Z VVZfTlYxMl9QUkVGSUxMX0xJTkVTXSA/Cj4gLQkJCVBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFs dWUsCj4gLQkJCQkJUEVSRl9ZVVZfTlYxMl9QUkVGSUxMX0xJTkVTLCAwKSA6Cj4gLQkJCURFRkFV TFRfWVVWX05WMTJfUFJFRklMTF9MSU5FUzsKPiAtCWNmZy0+cGVyZi5saW5lYXJfcHJlZmlsbF9s aW5lcyA9Cj4gLQkJCXByb3BfZXhpc3RzW1BFUkZfTElORUFSX1BSRUZJTExfTElORVNdID8KPiAt CQkJUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwKPiAtCQkJCQlQRVJGX0xJTkVBUl9QUkVG SUxMX0xJTkVTLCAwKSA6Cj4gLQkJCURFRkFVTFRfTElORUFSX1BSRUZJTExfTElORVM7Cj4gLQlj ZmctPnBlcmYuZG93bnNjYWxpbmdfcHJlZmlsbF9saW5lcyA9Cj4gLQkJCXByb3BfZXhpc3RzW1BF UkZfRE9XTlNDQUxJTkdfUFJFRklMTF9MSU5FU10gPwo+IC0JCQlQUk9QX1ZBTFVFX0FDQ0VTUyhw cm9wX3ZhbHVlLAo+IC0JCQkJCVBFUkZfRE9XTlNDQUxJTkdfUFJFRklMTF9MSU5FUywgMCkgOgo+ IC0JCQlERUZBVUxUX0RPV05TQ0FMSU5HX1BSRUZJTExfTElORVM7Cj4gLQljZmctPnBlcmYuYW1v cnRpemFibGVfdGhyZXNob2xkID0KPiAtCQkJcHJvcF9leGlzdHNbUEVSRl9BTU9SVElaQUJMRV9U SFJFU0hPTERdID8KPiAtCQkJUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwKPiAtCQkJCQlQ RVJGX0FNT1JUSVpBQkxFX1RIUkVTSE9MRCwgMCkgOgo+IC0JCQlERUZBVUxUX0FNT1JUSVpBQkxF X1RIUkVTSE9MRDsKPiAtCj4gLQlpZiAocHJvcF9leGlzdHNbUEVSRl9EQU5HRVJfTFVUXSAmJiBw cm9wX2NvdW50W1BFUkZfREFOR0VSX0xVVF0gPD0KPiAtCQkJRFBVX1FPU19MVVRfVVNBR0VfTUFY KSB7Cj4gLQkJZm9yIChqID0gMDsgaiA8IHByb3BfY291bnRbUEVSRl9EQU5HRVJfTFVUXTsgaisr KSB7Cj4gLQkJCWNmZy0+cGVyZi5kYW5nZXJfbHV0X3RibFtqXSA9Cj4gLQkJCQkJUFJPUF9WQUxV RV9BQ0NFU1MocHJvcF92YWx1ZSwKPiAtCQkJCQkJUEVSRl9EQU5HRVJfTFVULCBqKTsKPiAtCQkJ RFBVX0RFQlVHKCJkYW5nZXIgdXNhZ2U6JWQgbHV0OjB4JXhcbiIsCj4gLQkJCQkJaiwgY2ZnLT5w ZXJmLmRhbmdlcl9sdXRfdGJsW2pdKTsKPiAtCQl9Cj4gLQl9Cj4gLQo+IC0JaWYgKHByb3BfZXhp c3RzW1BFUkZfU0FGRV9MVVRdICYmIHByb3BfY291bnRbUEVSRl9TQUZFX0xVVF0gPD0KPiAtCQkJ RFBVX1FPU19MVVRfVVNBR0VfTUFYKSB7Cj4gLQkJZm9yIChqID0gMDsgaiA8IHByb3BfY291bnRb UEVSRl9TQUZFX0xVVF07IGorKykgewo+IC0JCQljZmctPnBlcmYuc2FmZV9sdXRfdGJsW2pdID0K PiAtCQkJCQlQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAo+IC0JCQkJCQlQRVJGX1NBRkVf TFVULCBqKTsKPiAtCQkJRFBVX0RFQlVHKCJzYWZlIHVzYWdlOiVkIGx1dDoweCV4XG4iLAo+IC0J CQkJCWosIGNmZy0+cGVyZi5zYWZlX2x1dF90Ymxbal0pOwo+IC0JCX0KPiAtCX0KPiAtCj4gLQlm b3IgKGogPSAwOyBqIDwgRFBVX1FPU19MVVRfVVNBR0VfTUFYOyBqKyspIHsKPiAtCQlzdGF0aWMg Y29uc3QgdTMyIHByb3Bfa2V5W0RQVV9RT1NfTFVUX1VTQUdFX01BWF0gPSB7Cj4gLQkJCVtEUFVf UU9TX0xVVF9VU0FHRV9MSU5FQVJdID0KPiAtCQkJCQlQRVJGX1FPU19MVVRfTElORUFSLAo+IC0J CQlbRFBVX1FPU19MVVRfVVNBR0VfTUFDUk9USUxFXSA9Cj4gLQkJCQkJUEVSRl9RT1NfTFVUX01B Q1JPVElMRSwKPiAtCQkJW0RQVV9RT1NfTFVUX1VTQUdFX05SVF0gPQo+IC0JCQkJCVBFUkZfUU9T X0xVVF9OUlQsCj4gLQkJCVtEUFVfUU9TX0xVVF9VU0FHRV9DV0JdID0KPiAtCQkJCQlQRVJGX1FP U19MVVRfQ1dCLAo+IC0JCX07Cj4gLQkJY29uc3QgdTMyIGVudHJ5X3NpemUgPSAzOwo+IC0JCWlu dCBtLCBjb3VudDsKPiAtCQlpbnQga2V5ID0gcHJvcF9rZXlbal07Cj4gLQo+IC0JCWlmICghcHJv cF9leGlzdHNba2V5XSkKPiAtCQkJY29udGludWU7Cj4gLQo+IC0JCWNvdW50ID0gcHJvcF9jb3Vu dFtrZXldIC8gZW50cnlfc2l6ZTsKPiAtCj4gLQkJY2ZnLT5wZXJmLnFvc19sdXRfdGJsW2pdLmVu dHJpZXMgPSBrY2FsbG9jKGNvdW50LAo+IC0JCQlzaXplb2Yoc3RydWN0IGRwdV9xb3NfbHV0X2Vu dHJ5KSwgR0ZQX0tFUk5FTCk7Cj4gLQkJaWYgKCFjZmctPnBlcmYucW9zX2x1dF90Ymxbal0uZW50 cmllcykgewo+IC0JCQlyYyA9IC1FTk9NRU07Cj4gLQkJCWdvdG8gZnJlZXByb3A7Cj4gLQkJfQo+ IC0KPiAtCQlmb3IgKGsgPSAwLCBtID0gMDsgayA8IGNvdW50OyBrKyssIG0gKz0gZW50cnlfc2l6 ZSkgewo+IC0JCQl1NjQgbHV0X2hpLCBsdXRfbG87Cj4gLQo+IC0JCQljZmctPnBlcmYucW9zX2x1 dF90Ymxbal0uZW50cmllc1trXS5mbCA9Cj4gLQkJCQkJUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92 YWx1ZSwga2V5LCBtKTsKPiAtCQkJbHV0X2hpID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1 ZSwga2V5LCBtICsgMSk7Cj4gLQkJCWx1dF9sbyA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFs dWUsIGtleSwgbSArIDIpOwo+IC0JCQljZmctPnBlcmYucW9zX2x1dF90Ymxbal0uZW50cmllc1tr XS5sdXQgPQo+IC0JCQkJCShsdXRfaGkgPDwgMzIpIHwgbHV0X2xvOwo+IC0JCQlEUFVfREVCVUco InVzYWdlOiVkLiVkIGZsOiVkIGx1dDoweCVsbHhcbiIsCj4gLQkJCQlqLCBrLAo+IC0JCQkJY2Zn LT5wZXJmLnFvc19sdXRfdGJsW2pdLmVudHJpZXNba10uZmwsCj4gLQkJCQljZmctPnBlcmYucW9z X2x1dF90Ymxbal0uZW50cmllc1trXS5sdXQpOwo+IC0JCX0KPiAtCQljZmctPnBlcmYucW9zX2x1 dF90Ymxbal0ubmVudHJ5ID0gY291bnQ7Cj4gLQl9Cj4gLQo+IC0JaWYgKHByb3BfZXhpc3RzW1BF UkZfQ0RQX1NFVFRJTkddKSB7Cj4gLQkJY29uc3QgdTMyIHByb3Bfc2l6ZSA9IDI7Cj4gLQkJdTMy IGNvdW50ID0gcHJvcF9jb3VudFtQRVJGX0NEUF9TRVRUSU5HXSAvIHByb3Bfc2l6ZTsKPiAtCj4g LQkJY291bnQgPSBtaW5fdCh1MzIsIGNvdW50LCBEUFVfUEVSRl9DRFBfVVNBR0VfTUFYKTsKPiAt Cj4gLQkJZm9yIChqID0gMDsgaiA8IGNvdW50OyBqKyspIHsKPiAtCQkJY2ZnLT5wZXJmLmNkcF9j Zmdbal0ucmRfZW5hYmxlID0KPiAtCQkJCQlQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAo+ IC0JCQkJCVBFUkZfQ0RQX1NFVFRJTkcsIGogKiBwcm9wX3NpemUpOwo+IC0JCQljZmctPnBlcmYu Y2RwX2NmZ1tqXS53cl9lbmFibGUgPQo+IC0JCQkJCVBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFs dWUsCj4gLQkJCQkJUEVSRl9DRFBfU0VUVElORywgaiAqIHByb3Bfc2l6ZSArIDEpOwo+IC0JCQlE UFVfREVCVUcoImNkcCB1c2FnZTolZCByZDolZCB3cjolZFxuIiwKPiAtCQkJCWosIGNmZy0+cGVy Zi5jZHBfY2ZnW2pdLnJkX2VuYWJsZSwKPiAtCQkJCWNmZy0+cGVyZi5jZHBfY2ZnW2pdLndyX2Vu YWJsZSk7Cj4gLQkJfQo+IC0KPiAtCQljZmctPmhhc19jZHAgPSB0cnVlOwo+IC0JfQo+IC0KPiAt ZnJlZXByb3A6Cj4gLQlrZnJlZShwcm9wX3ZhbHVlKTsKPiAtZW5kOgo+IC0JcmV0dXJuIHJjOwo+ IC19Cj4gLQo+IC1zdGF0aWMgaW50IGRwdV9oYXJkd2FyZV9mb3JtYXRfY2FwcyhzdHJ1Y3QgZHB1 X21kc3NfY2ZnICpkcHVfY2ZnLAo+IC0JdWludDMyX3QgaHdfcmV2KQo+IC17Cj4gLQlpbnQgcmMg PSAwOwo+IC0JdWludDMyX3QgZG1hX2xpc3Rfc2l6ZSwgdmlnX2xpc3Rfc2l6ZSwgd2IyX2xpc3Rf c2l6ZTsKPiAtCXVpbnQzMl90IGN1cnNvcl9saXN0X3NpemUgPSAwOwo+IC0JdWludDMyX3QgaW5k ZXggPSAwOwo+IC0KPiAtCWlmIChJU19EUFVfTUFKT1JfTUlOT1JfU0FNRSgoaHdfcmV2KSwgRFBV X0hXX1ZFUl8zMDApKSB7Cj4gLQkJY3Vyc29yX2xpc3Rfc2l6ZSA9IEFSUkFZX1NJWkUoY3Vyc29y X2Zvcm1hdHMpOwo+IC0JCWRwdV9jZmctPmN1cnNvcl9mb3JtYXRzID0ga2NhbGxvYyhjdXJzb3Jf bGlzdF9zaXplLAo+IC0JCQlzaXplb2Yoc3RydWN0IGRwdV9mb3JtYXRfZXh0ZW5kZWQpLCBHRlBf S0VSTkVMKTsKPiAtCQlpZiAoIWRwdV9jZmctPmN1cnNvcl9mb3JtYXRzKSB7Cj4gLQkJCXJjID0g LUVOT01FTTsKPiAtCQkJZ290byBlbmQ7Cj4gLQkJfQo+IC0JCWluZGV4ID0gZHB1X2NvcHlfZm9y bWF0cyhkcHVfY2ZnLT5jdXJzb3JfZm9ybWF0cywKPiAtCQkJY3Vyc29yX2xpc3Rfc2l6ZSwgMCwg Y3Vyc29yX2Zvcm1hdHMsCj4gLQkJCUFSUkFZX1NJWkUoY3Vyc29yX2Zvcm1hdHMpKTsKPiAtCX0K PiAtCj4gLQlkbWFfbGlzdF9zaXplID0gQVJSQVlfU0laRShwbGFuZV9mb3JtYXRzKTsKPiAtCXZp Z19saXN0X3NpemUgPSBBUlJBWV9TSVpFKHBsYW5lX2Zvcm1hdHNfeXV2KTsKPiAtCXdiMl9saXN0 X3NpemUgPSBBUlJBWV9TSVpFKHdiMl9mb3JtYXRzKTsKPiAtCj4gLQlkbWFfbGlzdF9zaXplICs9 IEFSUkFZX1NJWkUocmdiXzEwYml0X2Zvcm1hdHMpOwo+IC0JdmlnX2xpc3Rfc2l6ZSArPSBBUlJB WV9TSVpFKHJnYl8xMGJpdF9mb3JtYXRzKQo+IC0JCSsgQVJSQVlfU0laRSh0cDEwX3Vid2NfZm9y bWF0cykKPiAtCQkrIEFSUkFZX1NJWkUocDAxMF9mb3JtYXRzKTsKPiAtCWlmIChJU19EUFVfTUFK T1JfTUlOT1JfU0FNRSgoaHdfcmV2KSwgRFBVX0hXX1ZFUl80MDApIHx8Cj4gLQkJKElTX0RQVV9N QUpPUl9NSU5PUl9TQU1FKChod19yZXYpLCBEUFVfSFdfVkVSXzQxMCkpKQo+IC0JCXZpZ19saXN0 X3NpemUgKz0gQVJSQVlfU0laRShwMDEwX3Vid2NfZm9ybWF0cyk7Cj4gLQo+IC0Jd2IyX2xpc3Rf c2l6ZSArPSBBUlJBWV9TSVpFKHJnYl8xMGJpdF9mb3JtYXRzKQo+IC0JCSsgQVJSQVlfU0laRSh0 cDEwX3Vid2NfZm9ybWF0cyk7Cj4gLQo+IC0JZHB1X2NmZy0+ZG1hX2Zvcm1hdHMgPSBrY2FsbG9j KGRtYV9saXN0X3NpemUsCj4gLQkJc2l6ZW9mKHN0cnVjdCBkcHVfZm9ybWF0X2V4dGVuZGVkKSwg R0ZQX0tFUk5FTCk7Cj4gLQlpZiAoIWRwdV9jZmctPmRtYV9mb3JtYXRzKSB7Cj4gLQkJcmMgPSAt RU5PTUVNOwo+IC0JCWdvdG8gZW5kOwo+IC0JfQo+IC0KPiAtCWRwdV9jZmctPnZpZ19mb3JtYXRz ID0ga2NhbGxvYyh2aWdfbGlzdF9zaXplLAo+IC0JCXNpemVvZihzdHJ1Y3QgZHB1X2Zvcm1hdF9l eHRlbmRlZCksIEdGUF9LRVJORUwpOwo+IC0JaWYgKCFkcHVfY2ZnLT52aWdfZm9ybWF0cykgewo+ IC0JCXJjID0gLUVOT01FTTsKPiAtCQlnb3RvIGVuZDsKPiAtCX0KPiAtCj4gLQlkcHVfY2ZnLT53 Yl9mb3JtYXRzID0ga2NhbGxvYyh3YjJfbGlzdF9zaXplLAo+IC0JCXNpemVvZihzdHJ1Y3QgZHB1 X2Zvcm1hdF9leHRlbmRlZCksIEdGUF9LRVJORUwpOwo+IC0JaWYgKCFkcHVfY2ZnLT53Yl9mb3Jt YXRzKSB7Cj4gLQkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gYWxsb2NhdGUgd2IgZm9ybWF0IGxpc3Rc biIpOwo+IC0JCXJjID0gLUVOT01FTTsKPiAtCQlnb3RvIGVuZDsKPiAtCX0KPiAtCj4gLQlpbmRl eCA9IGRwdV9jb3B5X2Zvcm1hdHMoZHB1X2NmZy0+ZG1hX2Zvcm1hdHMsIGRtYV9saXN0X3NpemUs Cj4gLQkJMCwgcGxhbmVfZm9ybWF0cywgQVJSQVlfU0laRShwbGFuZV9mb3JtYXRzKSk7Cj4gLQlp bmRleCArPSBkcHVfY29weV9mb3JtYXRzKGRwdV9jZmctPmRtYV9mb3JtYXRzLCBkbWFfbGlzdF9z aXplLAo+IC0JCWluZGV4LCByZ2JfMTBiaXRfZm9ybWF0cywKPiAtCQlBUlJBWV9TSVpFKHJnYl8x MGJpdF9mb3JtYXRzKSk7Cj4gLQo+IC0JaW5kZXggPSBkcHVfY29weV9mb3JtYXRzKGRwdV9jZmct PnZpZ19mb3JtYXRzLCB2aWdfbGlzdF9zaXplLAo+IC0JCTAsIHBsYW5lX2Zvcm1hdHNfeXV2LCBB UlJBWV9TSVpFKHBsYW5lX2Zvcm1hdHNfeXV2KSk7Cj4gLQlpbmRleCArPSBkcHVfY29weV9mb3Jt YXRzKGRwdV9jZmctPnZpZ19mb3JtYXRzLCB2aWdfbGlzdF9zaXplLAo+IC0JCWluZGV4LCByZ2Jf MTBiaXRfZm9ybWF0cywKPiAtCQlBUlJBWV9TSVpFKHJnYl8xMGJpdF9mb3JtYXRzKSk7Cj4gLQlp bmRleCArPSBkcHVfY29weV9mb3JtYXRzKGRwdV9jZmctPnZpZ19mb3JtYXRzLCB2aWdfbGlzdF9z aXplLAo+IC0JCWluZGV4LCBwMDEwX2Zvcm1hdHMsIEFSUkFZX1NJWkUocDAxMF9mb3JtYXRzKSk7 Cj4gLQlpZiAoSVNfRFBVX01BSk9SX01JTk9SX1NBTUUoKGh3X3JldiksIERQVV9IV19WRVJfNDAw KSB8fAo+IC0JCShJU19EUFVfTUFKT1JfTUlOT1JfU0FNRSgoaHdfcmV2KSwgRFBVX0hXX1ZFUl80 MTApKSkKPiAtCQlpbmRleCArPSBkcHVfY29weV9mb3JtYXRzKGRwdV9jZmctPnZpZ19mb3JtYXRz LAo+IC0JCQl2aWdfbGlzdF9zaXplLCBpbmRleCwgcDAxMF91YndjX2Zvcm1hdHMsCj4gLQkJCUFS UkFZX1NJWkUocDAxMF91YndjX2Zvcm1hdHMpKTsKPiAtCj4gLQlpbmRleCArPSBkcHVfY29weV9m b3JtYXRzKGRwdV9jZmctPnZpZ19mb3JtYXRzLCB2aWdfbGlzdF9zaXplLAo+IC0JCWluZGV4LCB0 cDEwX3Vid2NfZm9ybWF0cywKPiAtCQlBUlJBWV9TSVpFKHRwMTBfdWJ3Y19mb3JtYXRzKSk7Cj4g LQo+IC0JaW5kZXggPSBkcHVfY29weV9mb3JtYXRzKGRwdV9jZmctPndiX2Zvcm1hdHMsIHdiMl9s aXN0X3NpemUsCj4gLQkJMCwgd2IyX2Zvcm1hdHMsIEFSUkFZX1NJWkUod2IyX2Zvcm1hdHMpKTsK PiAtCWluZGV4ICs9IGRwdV9jb3B5X2Zvcm1hdHMoZHB1X2NmZy0+d2JfZm9ybWF0cywgd2IyX2xp c3Rfc2l6ZSwKPiAtCQlpbmRleCwgcmdiXzEwYml0X2Zvcm1hdHMsCj4gLQkJQVJSQVlfU0laRShy Z2JfMTBiaXRfZm9ybWF0cykpOwo+IC0JaW5kZXggKz0gZHB1X2NvcHlfZm9ybWF0cyhkcHVfY2Zn LT53Yl9mb3JtYXRzLCB3YjJfbGlzdF9zaXplLAo+IC0JCWluZGV4LCB0cDEwX3Vid2NfZm9ybWF0 cywKPiAtCQlBUlJBWV9TSVpFKHRwMTBfdWJ3Y19mb3JtYXRzKSk7Cj4gLWVuZDoKPiAtCXJldHVy biByYzsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBfZHB1X2hhcmR3YXJlX2NhcHMoc3RydWN0IGRw dV9tZHNzX2NmZyAqZHB1X2NmZywgdWludDMyX3QgaHdfcmV2KQo+IC17Cj4gLQlpbnQgcmMgPSAw Owo+IC0KPiAtCWlmICghZHB1X2NmZykKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAtCj4gLQlyYyA9 IGRwdV9oYXJkd2FyZV9mb3JtYXRfY2FwcyhkcHVfY2ZnLCBod19yZXYpOwo+IC0KPiAtCWlmIChJ U19NU004OTk2X1RBUkdFVChod19yZXYpKSB7Cj4gLQkJLyogdXBkYXRlIG1zbTg5OTYgdGFyZ2V0 IGhlcmUgKi8KPiAtCQlkcHVfY2ZnLT5wZXJmLm1pbl9wcmVmaWxsX2xpbmVzID0gMjE7Cj4gLQl9 IGVsc2UgaWYgKElTX01TTTg5OThfVEFSR0VUKGh3X3JldikpIHsKPiAtCQkvKiB1cGRhdGUgbXNt ODk5OCB0YXJnZXQgaGVyZSAqLwo+IC0JCWRwdV9jZmctPmhhc193Yl91YndjID0gdHJ1ZTsKPiAt CQlkcHVfY2ZnLT5wZXJmLm1pbl9wcmVmaWxsX2xpbmVzID0gMjU7Cj4gLQkJZHB1X2NmZy0+dmJp Zl9xb3Nfbmx2bCA9IDQ7Cj4gLQkJZHB1X2NmZy0+dHNfcHJlZmlsbF9yZXYgPSAxOwo+IC0JfSBl bHNlIGlmIChJU19TRE04NDVfVEFSR0VUKGh3X3JldikgfHwgSVNfU0RNNjcwX1RBUkdFVChod19y ZXYpKSB7Cj4gLQkJLyogdXBkYXRlIHNkbTg0NSB0YXJnZXQgaGVyZSAqLwo+IC0JCWRwdV9jZmct Pmhhc193Yl91YndjID0gdHJ1ZTsKPiAtCQlkcHVfY2ZnLT5wZXJmLm1pbl9wcmVmaWxsX2xpbmVz ID0gMjQ7Cj4gLQkJZHB1X2NmZy0+dmJpZl9xb3Nfbmx2bCA9IDg7Cj4gLQkJZHB1X2NmZy0+dHNf cHJlZmlsbF9yZXYgPSAyOwo+IC0JfSBlbHNlIGlmIChJU19TRE04NTVfVEFSR0VUKGh3X3Jldikp IHsKPiAtCQlkcHVfY2ZnLT5oYXNfd2JfdWJ3YyA9IHRydWU7Cj4gLQkJZHB1X2NmZy0+cGVyZi5t aW5fcHJlZmlsbF9saW5lcyA9IDI0Owo+IC0JfSBlbHNlIHsKPiAtCQlEUFVfRVJST1IoInVuc3Vw cG9ydGVkIGNoaXBzZXQgaWQ6JVhcbiIsIGh3X3Jldik7Cj4gLQkJZHB1X2NmZy0+cGVyZi5taW5f cHJlZmlsbF9saW5lcyA9IDB4ZmZmZjsKPiAtCQlyYyA9IC1FTk9ERVY7Cj4gLQl9Cj4gLQo+IC0J cmV0dXJuIHJjOwo+IC19Cj4gLQo+ICB2b2lkIGRwdV9od19jYXRhbG9nX2RlaW5pdChzdHJ1Y3Qg ZHB1X21kc3NfY2ZnICpkcHVfY2ZnKQo+ICB7Cj4gLQlpbnQgaTsKPiAtCj4gLQlpZiAoIWRwdV9j ZmcpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCWZvciAoaSA9IDA7IGkgPCBkcHVfY2ZnLT5zc3BwX2Nv dW50OyBpKyspCj4gLQkJa2ZyZWUoZHB1X2NmZy0+c3NwcFtpXS5zYmxrKTsKPiAtCj4gLQlmb3Ig KGkgPSAwOyBpIDwgZHB1X2NmZy0+bWl4ZXJfY291bnQ7IGkrKykKPiAtCQlrZnJlZShkcHVfY2Zn LT5taXhlcltpXS5zYmxrKTsKPiAtCj4gLQlmb3IgKGkgPSAwOyBpIDwgZHB1X2NmZy0+d2JfY291 bnQ7IGkrKykKPiAtCQlrZnJlZShkcHVfY2ZnLT53YltpXS5zYmxrKTsKPiAtCj4gLQlmb3IgKGkg PSAwOyBpIDwgZHB1X2NmZy0+ZHNwcF9jb3VudDsgaSsrKQo+IC0JCWtmcmVlKGRwdV9jZmctPmRz cHBbaV0uc2Jsayk7Cj4gLQo+IC0JaWYgKGRwdV9jZmctPmRzX2NvdW50KQo+IC0JCWtmcmVlKGRw dV9jZmctPmRzWzBdLnRvcCk7Cj4gLQo+IC0JZm9yIChpID0gMDsgaSA8IGRwdV9jZmctPnBpbmdw b25nX2NvdW50OyBpKyspCj4gLQkJa2ZyZWUoZHB1X2NmZy0+cGluZ3BvbmdbaV0uc2Jsayk7Cj4g LQo+IC0JZm9yIChpID0gMDsgaSA8IGRwdV9jZmctPnZiaWZfY291bnQ7IGkrKykgewo+IC0JCWtm cmVlKGRwdV9jZmctPnZiaWZbaV0uZHluYW1pY19vdF9yZF90YmwuY2ZnKTsKPiAtCQlrZnJlZShk cHVfY2ZnLT52YmlmW2ldLmR5bmFtaWNfb3Rfd3JfdGJsLmNmZyk7Cj4gLQkJa2ZyZWUoZHB1X2Nm Zy0+dmJpZltpXS5xb3NfcnRfdGJsLnByaW9yaXR5X2x2bCk7Cj4gLQkJa2ZyZWUoZHB1X2NmZy0+ dmJpZltpXS5xb3NfbnJ0X3RibC5wcmlvcml0eV9sdmwpOwo+IC0JfQo+IC0KPiAtCWZvciAoaSA9 IDA7IGkgPCBEUFVfUU9TX0xVVF9VU0FHRV9NQVg7IGkrKykKPiAtCQlrZnJlZShkcHVfY2ZnLT5w ZXJmLnFvc19sdXRfdGJsW2ldLmVudHJpZXMpOwo+IC0KPiAtCWtmcmVlKGRwdV9jZmctPmRtYV9m b3JtYXRzKTsKPiAtCWtmcmVlKGRwdV9jZmctPmN1cnNvcl9mb3JtYXRzKTsKPiAtCWtmcmVlKGRw dV9jZmctPnZpZ19mb3JtYXRzKTsKPiAtCWtmcmVlKGRwdV9jZmctPndiX2Zvcm1hdHMpOwo+IC0K PiAgCWtmcmVlKGRwdV9jZmcpOwo+ICB9Cj4gIAo+IC0vKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgo+IC0gKiBoYXJkd2FyZSBjYXRh bG9nIGluaXQKPiAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiovCj4gLXN0cnVjdCBkcHVfbWRzc19jZmcgKmRwdV9od19jYXRhbG9n X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTMyIGh3X3JldikKPiArc3RydWN0IGRwdV9t ZHNzX2NmZyAqZHB1X2h3X2NhdGFsb2dfaW5pdCh1MzIgaHdfcmV2KQo+ICB7Cj4gLQlpbnQgcmM7 Cj4gKwlpbnQgaTsKPiAgCXN0cnVjdCBkcHVfbWRzc19jZmcgKmRwdV9jZmc7Cj4gLQlzdHJ1Y3Qg ZGV2aWNlX25vZGUgKm5wID0gZGV2LT5kZXYtPm9mX25vZGU7Cj4gIAo+ICAJZHB1X2NmZyA9IGt6 YWxsb2Moc2l6ZW9mKCpkcHVfY2ZnKSwgR0ZQX0tFUk5FTCk7Cj4gIAlpZiAoIWRwdV9jZmcpCj4g IAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gIAo+IC0JZHB1X2NmZy0+aHd2ZXJzaW9uID0g aHdfcmV2Owo+IC0KPiAtCXJjID0gX2RwdV9oYXJkd2FyZV9jYXBzKGRwdV9jZmcsIGh3X3Jldik7 Cj4gLQlpZiAocmMpCj4gLQkJZ290byBlbmQ7Cj4gLQo+IC0JcmMgPSBkcHVfcGFyc2VfZHQobnAs IGRwdV9jZmcpOwo+IC0JaWYgKHJjKQo+IC0JCWdvdG8gZW5kOwo+IC0KPiAtCXJjID0gZHB1X3Bl cmZfcGFyc2VfZHQobnAsIGRwdV9jZmcpOwo+IC0JaWYgKHJjKQo+IC0JCWdvdG8gZW5kOwo+IC0K PiAtCXJjID0gZHB1X2N0bF9wYXJzZV9kdChucCwgZHB1X2NmZyk7Cj4gLQlpZiAocmMpCj4gLQkJ Z290byBlbmQ7Cj4gLQo+IC0JcmMgPSBkcHVfc3NwcF9wYXJzZV9kdChucCwgZHB1X2NmZyk7Cj4g LQlpZiAocmMpCj4gLQkJZ290byBlbmQ7Cj4gLQo+IC0JcmMgPSBkcHVfZHNwcF90b3BfcGFyc2Vf ZHQobnAsIGRwdV9jZmcpOwo+IC0JaWYgKHJjKQo+IC0JCWdvdG8gZW5kOwo+IC0KPiAtCXJjID0g ZHB1X2RzcHBfcGFyc2VfZHQobnAsIGRwdV9jZmcpOwo+IC0JaWYgKHJjKQo+IC0JCWdvdG8gZW5k Owo+IC0KPiAtCXJjID0gZHB1X2RzX3BhcnNlX2R0KG5wLCBkcHVfY2ZnKTsKPiAtCWlmIChyYykK PiAtCQlnb3RvIGVuZDsKPiAtCj4gLQlyYyA9IGRwdV9kc2NfcGFyc2VfZHQobnAsIGRwdV9jZmcp Owo+IC0JaWYgKHJjKQo+IC0JCWdvdG8gZW5kOwo+IC0KPiAtCXJjID0gZHB1X3BwX3BhcnNlX2R0 KG5wLCBkcHVfY2ZnKTsKPiAtCWlmIChyYykKPiAtCQlnb3RvIGVuZDsKPiAtCj4gLQkvKiBtaXhl ciBwYXJzaW5nIHNob3VsZCBiZSBkb25lIGFmdGVyIGRzcHAsCj4gLQkgKiBkcyBhbmQgcHAgZm9y IG1hcHBpbmcgc2V0dXAKPiAtCSAqLwo+IC0JcmMgPSBkcHVfbWl4ZXJfcGFyc2VfZHQobnAsIGRw dV9jZmcpOwo+IC0JaWYgKHJjKQo+IC0JCWdvdG8gZW5kOwo+IC0KPiAtCXJjID0gZHB1X2ludGZf cGFyc2VfZHQobnAsIGRwdV9jZmcpOwo+IC0JaWYgKHJjKQo+IC0JCWdvdG8gZW5kOwo+IC0KPiAt CXJjID0gZHB1X3diX3BhcnNlX2R0KG5wLCBkcHVfY2ZnKTsKPiAtCWlmIChyYykKPiAtCQlnb3Rv IGVuZDsKPiAtCj4gLQkvKiBjZG0gcGFyc2luZyBzaG91bGQgYmUgZG9uZSBhZnRlciBpbnRmIGFu ZCB3YiBmb3IgbWFwcGluZyBzZXR1cCAqLwo+IC0JcmMgPSBkcHVfY2RtX3BhcnNlX2R0KG5wLCBk cHVfY2ZnKTsKPiAtCWlmIChyYykKPiAtCQlnb3RvIGVuZDsKPiAtCj4gLQlyYyA9IGRwdV92Ymlm X3BhcnNlX2R0KG5wLCBkcHVfY2ZnKTsKPiAtCWlmIChyYykKPiAtCQlnb3RvIGVuZDsKPiAtCj4g LQlyYyA9IGRwdV9wYXJzZV9yZWdfZG1hX2R0KG5wLCBkcHVfY2ZnKTsKPiAtCWlmIChyYykKPiAt CQlnb3RvIGVuZDsKPiAtCj4gLQlyZXR1cm4gZHB1X2NmZzsKPiArCWZvciAoaSA9IDA7IGkgPCBB UlJBWV9TSVpFKGNmZ19oYW5kbGVyKTsgaSsrKSB7Cj4gKwkJaWYgKGNmZ19oYW5kbGVyW2ldLmh3 X3JldiA9PSBod19yZXYpIHsKPiArCQkJY2ZnX2hhbmRsZXJbaV0uY2ZnX2luaXQoZHB1X2NmZyk7 Cj4gKwkJCWRwdV9jZmctPmh3dmVyc2lvbiA9IGh3X3JldjsKPiArCQkJcmV0dXJuIGRwdV9jZmc7 Cj4gKwkJfQo+ICsJfQo+ICAKPiAtZW5kOgo+ICsJRFBVX0VSUk9SKCJ1bnN1cHBvcnRlZCBjaGlw c2V0IGlkOiVYXG4iLCBod19yZXYpOwo+ICAJZHB1X2h3X2NhdGFsb2dfZGVpbml0KGRwdV9jZmcp Owo+IC0JcmV0dXJuIE5VTEw7Cj4gKwlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKPiAgfQo+ICsK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2NhdGFs b2cuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jYXRhbG9nLmgKPiBp bmRleCA0MDJlOTI5Li40MGQ5MGMzIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9od19jYXRhbG9nLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvZHB1MS9kcHVfaHdfY2F0YWxvZy5oCj4gQEAgLTM4MSwxMyArMzgxLDUxIEBAIHN0cnVjdCBk cHVfcW9zX2x1dF90Ymwgewo+ICB9Owo+ICAKPiAgLyoqCj4gKyAqIHN0cnVjdCBkcHVfY2FwcyAt IGRlZmluZSBEUFUgY2FwYWJpbGl0aWVzCj4gKyAqIEBtYXhfbWl4ZXJfd2lkdGggICAgbWF4IGxh eWVyIG1peGVyIGxpbmUgd2lkdGggc3VwcG9ydC4KPiArICogQG1heF9taXhlcl9ibGVuZHN0YWdl cyBtYXggbGF5ZXIgbWl4ZXIgYmxlbmQgc3RhZ2VzIG9yCj4gKyAqICAgICAgICAgICAgICAgICAg ICAgICBzdXBwb3J0ZWQgeiBvcmRlcgo+ICsgKiBAcXNlZWRfdHlwZSAgICAgICAgIHFzZWVkMiBv ciBxc2VlZDMgc3VwcG9ydC4KPiArICogQHNtYXJ0X2RtYV9yZXYgICAgICBTdXBwb3J0ZWQgdmVy c2lvbiBvZiBTbWFydERNQSBmZWF0dXJlLgo+ICsgKiBAdWJ3Y192ZXJzaW9uICAgICAgIFVCV0Mg ZmVhdHVyZSB2ZXJzaW9uICgweDAgZm9yIG5vdCBzdXBwb3J0ZWQpCj4gKyAqIEBoYXNfc3JjX3Nw bGl0ICAgICAgc291cmNlIHNwbGl0IGZlYXR1cmUgc3RhdHVzCj4gKyAqIEBoYXNfZGltX2xheWVy ICAgICAgZGltIGxheWVyIGZlYXR1cmUgc3RhdHVzCj4gKyAqIEBoYXNfaWRsZV9wYyAgICAgICAg aW5kaWNhdGUgaWYgaWRsZSBwb3dlciBjb2xsYXBzZSBmZWF0dXJlIGlzIHN1cHBvcnRlZAo+ICsg Ki8KPiArc3RydWN0IGRwdV9jYXBzIHsKPiArCXUzMiBtYXhfbWl4ZXJfd2lkdGg7Cj4gKwl1MzIg bWF4X21peGVyX2JsZW5kc3RhZ2VzOwo+ICsJdTMyIHFzZWVkX3R5cGU7Cj4gKwl1MzIgc21hcnRf ZG1hX3JldjsKPiArCXUzMiB1YndjX3ZlcnNpb247Cj4gKwlib29sIGhhc19zcmNfc3BsaXQ7Cj4g Kwlib29sIGhhc19kaW1fbGF5ZXI7Cj4gKwlib29sIGhhc19pZGxlX3BjOwo+ICt9Owo+ICsKPiAr LyoqCj4gKyAqIHN0cnVjdCBkcHVfc3NwcF9ibGtzX2NvbW1vbiA6IFNTUFAgc3ViLWJsb2NrcyBj b21tb24gY29uZmlndXJhdGlvbgo+ICsgKiBAbWF4d2lkdGg6IG1heCBwaXhlbHdpZHRoIHN1cHBv cnRlZCBieSB0aGlzIHBpcGUKPiArICogQHBpeGVsX3JhbV9zaXplOiBzaXplIG9mIGxhdGVuY3kg aGlkaW5nIGFuZCBkZS10aWxpbmcgYnVmZmVyIGluIGJ5dGVzCj4gKyAqIEBtYXhoZGVjaWV4cDog bWF4IGhvcml6b250YWwgZGVjaW1hdGlvbiBzdXBwb3J0ZWQgYnkgdGhpcyBwaXBlCj4gKyAqCQkJ CShtYXggaXMgMl52YWx1ZSkKPiArICogQG1heHZkZWNpZXhwOiBtYXggdmVydGljYWwgZGVjaW1h dGlvbiBzdXBwb3J0ZWQgYnkgdGhpcyBwaXBlCj4gKyAqCQkJCShtYXggaXMgMl52YWx1ZSkKPiAr ICovCj4gK3N0cnVjdCBkcHVfc3NwcF9ibGtzX2NvbW1vbiB7Cj4gKwl1MzIgbWF4bGluZXdpZHRo Owo+ICsJdTMyIHBpeGVsX3JhbV9zaXplOwo+ICsJdTMyIG1heGhkZWNpZXhwOwo+ICsJdTMyIG1h eHZkZWNpZXhwOwo+ICt9Owo+ICsKPiArLyoqCj4gICAqIHN0cnVjdCBkcHVfc3NwcF9zdWJfYmxr cyA6IFNTUFAgc3ViLWJsb2Nrcwo+IC0gKiBAbWF4ZHduc2NhbGU6IG1heCBkb3duc2NhbGUgcmF0 aW8gc3VwcG9ydGVkKHdpdGhvdXQgREVDSU1BVElPTikKPiAtICogQG1heHVwc2NhbGU6ICBtYXh1 cHNjYWxlIHJhdGlvIHN1cHBvcnRlZAo+IC0gKiBAbWF4d2lkdGg6ICAgIG1heCBwaXhlbHdpZHRo IHN1cHBvcnRlZCBieSB0aGlzIHBpcGUKPiArICogY29tbW9uOiBQb2ludGVyIHRvIGNvbW1vbiBj b25maWd1cmF0aW9ucyBzaGFyZWQgYnkgc3ViIGJsb2Nrcwo+ICAgKiBAY3JlcV92Ymxhbms6IGNy ZXEgcHJpb3JpdHkgZHVyaW5nIHZlcnRpY2FsIGJsYW5raW5nCj4gICAqIEBkYW5nZXJfdmJsYW5r OiBkYW5nZXIgcHJpb3JpdHkgZHVyaW5nIHZlcnRpY2FsIGJsYW5raW5nCj4gLSAqIEBwaXhlbF9y YW1fc2l6ZTogc2l6ZSBvZiBsYXRlbmN5IGhpZGluZyBhbmQgZGUtdGlsaW5nIGJ1ZmZlciBpbiBi eXRlcwo+ICsgKiBAbWF4ZHduc2NhbGU6IG1heCBkb3duc2NhbGUgcmF0aW8gc3VwcG9ydGVkKHdp dGhvdXQgREVDSU1BVElPTikKPiArICogQG1heHVwc2NhbGU6ICBtYXh1cHNjYWxlIHJhdGlvIHN1 cHBvcnRlZAo+ICAgKiBAc21hcnRfZG1hX3ByaW9yaXR5OiBodyBwcmlvcml0eSBvZiByZWN0MSBv ZiBtdWx0aXJlY3QgcGlwZQo+ICAgKiBAbWF4X3Blcl9waXBlX2J3OiBtYXhpbXVtIGFsbG93YWJs ZSBiYW5kd2lkdGggb2YgdGhpcyBwaXBlIGluIGtCcHMKPiAgICogQHNyY19ibGs6Cj4gQEAgLTQw MSwxNCArNDM5LDExIEBAIHN0cnVjdCBkcHVfcW9zX2x1dF90Ymwgewo+ICAgKiBAdmlydF9mb3Jt YXRfbGlzdDogUG9pbnRlciB0byBsaXN0IG9mIHN1cHBvcnRlZCBmb3JtYXRzIGZvciB2aXJ0dWFs IHBsYW5lcwo+ICAgKi8KPiAgc3RydWN0IGRwdV9zc3BwX3N1Yl9ibGtzIHsKPiAtCXUzMiBtYXhs aW5ld2lkdGg7Cj4gKwljb25zdCBzdHJ1Y3QgZHB1X3NzcHBfYmxrc19jb21tb24gKmNvbW1vbjsK PiAgCXUzMiBjcmVxX3ZibGFuazsKPiAgCXUzMiBkYW5nZXJfdmJsYW5rOwo+IC0JdTMyIHBpeGVs X3JhbV9zaXplOwo+ICAJdTMyIG1heGR3bnNjYWxlOwo+ICAJdTMyIG1heHVwc2NhbGU7Cj4gLQl1 MzIgbWF4aGRlY2lleHA7IC8qIG1heCBkZWNpbWF0aW9uIGlzIDJedmFsdWUgKi8KPiAtCXUzMiBt YXh2ZGVjaWV4cDsgLyogbWF4IGRlY2ltYXRpb24gaXMgMl52YWx1ZSAqLwo+ICAJdTMyIHNtYXJ0 X2RtYV9wcmlvcml0eTsKPiAgCXUzMiBtYXhfcGVyX3BpcGVfYnc7Cj4gIAlzdHJ1Y3QgZHB1X3Ny Y19ibGsgc3JjX2JsazsKPiBAQCAtODQ1LDg1ICs4ODAsNTYgQEAgc3RydWN0IGRwdV9wZXJmX2Nm ZyB7Cj4gICAqIHRoaXMgSFcgdmVyc2lvbi4gQ29udGFpbnMgbnVtYmVyIG9mIGluc3RhbmNlcywK PiAgICogcmVnaXN0ZXIgb2Zmc2V0cywgY2FwYWJpbGl0aWVzIG9mIHRoZSBhbGwgTURTUyBIVyBz dWItYmxvY2tzLgo+ICAgKgo+IC0gKiBAbWF4X3NzcHBfbGluZXdpZHRoIG1heCBzb3VyY2UgcGlw ZSBsaW5lIHdpZHRoIHN1cHBvcnQuCj4gLSAqIEBtYXhfbWl4ZXJfd2lkdGggICAgbWF4IGxheWVy IG1peGVyIGxpbmUgd2lkdGggc3VwcG9ydC4KPiAtICogQG1heF9taXhlcl9ibGVuZHN0YWdlcyBt YXggbGF5ZXIgbWl4ZXIgYmxlbmQgc3RhZ2VzIG9yCj4gLSAqICAgICAgICAgICAgICAgICAgICAg ICBzdXBwb3J0ZWQgeiBvcmRlcgo+IC0gKiBAbWF4X3diX2xpbmV3aWR0aCAgIG1heCB3cml0ZWJh Y2sgbGluZSB3aWR0aCBzdXBwb3J0Lgo+IC0gKiBAcXNlZWRfdHlwZSAgICAgICAgIHFzZWVkMiBv ciBxc2VlZDMgc3VwcG9ydC4KPiAtICogQGNzY190eXBlICAgICAgICAgICBjc2Mgb3IgY3NjXzEw Yml0IHN1cHBvcnQuCj4gLSAqIEBzbWFydF9kbWFfcmV2ICAgICAgU3VwcG9ydGVkIHZlcnNpb24g b2YgU21hcnRETUEgZmVhdHVyZS4KPiAtICogQGhhc19zcmNfc3BsaXQgICAgICBzb3VyY2Ugc3Bs aXQgZmVhdHVyZSBzdGF0dXMKPiAtICogQGhhc19jZHAgICAgICAgICAgICBDbGllbnQgZHJpdmVu IHByZWZldGNoIGZlYXR1cmUgc3RhdHVzCj4gLSAqIEBoYXNfd2JfdWJ3YyAgICAgICAgVUJXQyBm ZWF0dXJlIHN1cHBvcnRlZCBvbiBXQgo+IC0gKiBAdWJ3Y192ZXJzaW9uICAgICAgIFVCV0MgZmVh dHVyZSB2ZXJzaW9uICgweDAgZm9yIG5vdCBzdXBwb3J0ZWQpCj4gLSAqIEBoYXNfaWRsZV9wYyAg ICAgICAgaW5kaWNhdGUgaWYgaWRsZSBwb3dlciBjb2xsYXBzZSBmZWF0dXJlIGlzIHN1cHBvcnRl ZAo+ICAgKiBAZG1hX2Zvcm1hdHMgICAgICAgIFN1cHBvcnRlZCBmb3JtYXRzIGZvciBkbWEgcGlw ZQo+ICAgKiBAY3Vyc29yX2Zvcm1hdHMgICAgIFN1cHBvcnRlZCBmb3JtYXRzIGZvciBjdXJzb3Ig cGlwZQo+ICAgKiBAdmlnX2Zvcm1hdHMgICAgICAgIFN1cHBvcnRlZCBmb3JtYXRzIGZvciB2aWcg cGlwZQo+ICAgKiBAd2JfZm9ybWF0cyAgICAgICAgIFN1cHBvcnRlZCBmb3JtYXRzIGZvciB3Ygo+ IC0gKiBAdmJpZl9xb3Nfbmx2bCAgICAgIG51bWJlciBvZiB2YmlmIFFvUyBwcmlvcml0eSBsZXZl bAo+IC0gKiBAdHNfcHJlZmlsbF9yZXYgICAgIHByZWZpbGwgdHJhZmZpYyBzaGFwZXIgZmVhdHVy ZSByZXZpc2lvbgo+ICAgKi8KPiAgc3RydWN0IGRwdV9tZHNzX2NmZyB7Cj4gIAl1MzIgaHd2ZXJz aW9uOwo+ICAKPiAtCXUzMiBtYXhfc3NwcF9saW5ld2lkdGg7Cj4gLQl1MzIgbWF4X21peGVyX3dp ZHRoOwo+IC0JdTMyIG1heF9taXhlcl9ibGVuZHN0YWdlczsKPiAtCXUzMiBtYXhfd2JfbGluZXdp ZHRoOwo+IC0JdTMyIHFzZWVkX3R5cGU7Cj4gLQl1MzIgY3NjX3R5cGU7Cj4gLQl1MzIgc21hcnRf ZG1hX3JldjsKPiAtCWJvb2wgaGFzX3NyY19zcGxpdDsKPiAtCWJvb2wgaGFzX2NkcDsKPiAtCWJv b2wgaGFzX2RpbV9sYXllcjsKPiAtCWJvb2wgaGFzX3diX3Vid2M7Cj4gLQl1MzIgdWJ3Y192ZXJz aW9uOwo+IC0JYm9vbCBoYXNfaWRsZV9wYzsKPiAtCXUzMiB2YmlmX3Fvc19ubHZsOwo+IC0JdTMy IHRzX3ByZWZpbGxfcmV2Owo+ICsJY29uc3Qgc3RydWN0IGRwdV9jYXBzICpjYXBzOwo+ICAKPiAg CXUzMiBtZHNzX2NvdW50Owo+IC0Jc3RydWN0IGRwdV9tZHNzX2Jhc2VfY2ZnIG1kc3NbTUFYX0JM T0NLU107Cj4gKwlzdHJ1Y3QgZHB1X21kc3NfYmFzZV9jZmcgKm1kc3M7Cj4gIAo+ICAJdTMyIG1k cF9jb3VudDsKPiAtCXN0cnVjdCBkcHVfbWRwX2NmZyBtZHBbTUFYX0JMT0NLU107Cj4gKwlzdHJ1 Y3QgZHB1X21kcF9jZmcgKm1kcDsKPiAgCj4gIAl1MzIgY3RsX2NvdW50Owo+IC0Jc3RydWN0IGRw dV9jdGxfY2ZnIGN0bFtNQVhfQkxPQ0tTXTsKPiArCXN0cnVjdCBkcHVfY3RsX2NmZyAqY3RsOwo+ ICAKPiAgCXUzMiBzc3BwX2NvdW50Owo+IC0Jc3RydWN0IGRwdV9zc3BwX2NmZyBzc3BwW01BWF9C TE9DS1NdOwo+ICsJc3RydWN0IGRwdV9zc3BwX2NmZyAqc3NwcDsKPiAgCj4gIAl1MzIgbWl4ZXJf Y291bnQ7Cj4gLQlzdHJ1Y3QgZHB1X2xtX2NmZyBtaXhlcltNQVhfQkxPQ0tTXTsKPiArCXN0cnVj dCBkcHVfbG1fY2ZnICptaXhlcjsKPiAgCj4gIAlzdHJ1Y3QgZHB1X2RzcHBfdG9wX2NmZyBkc3Bw X3RvcDsKPiAgCj4gIAl1MzIgZHNwcF9jb3VudDsKPiAtCXN0cnVjdCBkcHVfZHNwcF9jZmcgZHNw cFtNQVhfQkxPQ0tTXTsKPiArCXN0cnVjdCBkcHVfZHNwcF9jZmcgKmRzcHA7Cj4gIAo+ICAJdTMy IGRzX2NvdW50Owo+IC0Jc3RydWN0IGRwdV9kc19jZmcgZHNbTUFYX0JMT0NLU107Cj4gKwlzdHJ1 Y3QgZHB1X2RzX2NmZyAqZHM7Cj4gIAo+ICAJdTMyIHBpbmdwb25nX2NvdW50Owo+IC0Jc3RydWN0 IGRwdV9waW5ncG9uZ19jZmcgcGluZ3BvbmdbTUFYX0JMT0NLU107Cj4gKwlzdHJ1Y3QgZHB1X3Bp bmdwb25nX2NmZyAqcGluZ3Bvbmc7Cj4gIAo+ICAJdTMyIGRzY19jb3VudDsKPiAtCXN0cnVjdCBk cHVfZHNjX2NmZyBkc2NbTUFYX0JMT0NLU107Cj4gKwlzdHJ1Y3QgZHB1X2RzY19jZmcgKmRzYzsK PiAgCj4gIAl1MzIgY2RtX2NvdW50Owo+IC0Jc3RydWN0IGRwdV9jZG1fY2ZnIGNkbVtNQVhfQkxP Q0tTXTsKPiArCXN0cnVjdCBkcHVfY2RtX2NmZyAqY2RtOwo+ICAKPiAgCXUzMiBpbnRmX2NvdW50 Owo+IC0Jc3RydWN0IGRwdV9pbnRmX2NmZyBpbnRmW01BWF9CTE9DS1NdOwo+ICsJc3RydWN0IGRw dV9pbnRmX2NmZyAqaW50ZjsKPiAgCj4gIAl1MzIgd2JfY291bnQ7Cj4gLQlzdHJ1Y3QgZHB1X3di X2NmZyB3YltNQVhfQkxPQ0tTXTsKPiArCXN0cnVjdCBkcHVfd2JfY2ZnICp3YjsKPiAgCj4gIAl1 MzIgdmJpZl9jb3VudDsKPiAtCXN0cnVjdCBkcHVfdmJpZl9jZmcgdmJpZltNQVhfQkxPQ0tTXTsK PiArCXN0cnVjdCBkcHVfdmJpZl9jZmcgKnZiaWY7Cj4gIAo+ICAJdTMyIHJlZ19kbWFfY291bnQ7 Cj4gIAlzdHJ1Y3QgZHB1X3JlZ19kbWFfY2ZnIGRtYV9jZmc7Cj4gQEAgLTk0MCw5ICs5NDYsOCBA QCBzdHJ1Y3QgZHB1X21kc3NfY2ZnIHsKPiAgfTsKPiAgCj4gIHN0cnVjdCBkcHVfbWRzc19od19j ZmdfaGFuZGxlciB7Cj4gLQl1MzIgbWFqb3I7Cj4gLQl1MzIgbWlub3I7Cj4gLQlzdHJ1Y3QgZHB1 X21kc3NfY2ZnKiAoKmNmZ19pbml0KSh1MzIpOwo+ICsJdTMyIGh3X3JldjsKPiArCXZvaWQgKCpj ZmdfaW5pdCkoc3RydWN0IGRwdV9tZHNzX2NmZyAqZHB1X2NmZyk7Cj4gIH07Cj4gIAo+ICAvKgo+ IEBAIC05NjQsMTQgKzk2OSwxMyBAQCBzdHJ1Y3QgZHB1X21kc3NfaHdfY2ZnX2hhbmRsZXIgewo+ ICAjZGVmaW5lIEJMS19BRChzKSAoKHMpLT5hZCkKPiAgCj4gIC8qKgo+IC0gKiBkcHVfaHdfY2F0 YWxvZ19pbml0IC0gZHB1IGhhcmR3YXJlIGNhdGFsb2cgaW5pdCBBUEkgcGFyc2VzIGR0c2kgcHJv cGVydHkKPiAtICogYW5kIHN0b3JlcyBhbGwgcGFyc2VkIG9mZnNldCwgaGFyZHdhcmUgY2FwYWJp bGl0aWVzIGluIGNvbmZpZyBzdHJ1Y3R1cmUuCj4gLSAqIEBkZXY6ICAgICAgICAgIGRybSBkZXZp Y2Ugbm9kZS4KPiAtICogQGh3X3JldjogICAgICAgY2FsbGVyIG5lZWRzIHByb3ZpZGUgdGhlIGhh cmR3YXJlIHJldmlzaW9uIGJlZm9yZSBwYXJzaW5nLgo+ICsgKiBkcHVfaHdfY2F0YWxvZ19pbml0 IC0gZHB1IGhhcmR3YXJlIGNhdGFsb2cgaW5pdCBBUEkgcmV0cmlldmVzCj4gKyAqIGhhcmRjb2Rl ZCB0YXJnZXQgc3BlY2lmaWMgY2F0YWxvZyBpbmZvcm1hdGlvbiBpbiBjb25maWcgc3RydWN0dXJl Cj4gKyAqIEBod19yZXY6ICAgICAgIGNhbGxlciBuZWVkcyBwcm92aWRlIHRoZSBoYXJkd2FyZSBy ZXZpc2lvbi4KPiAgICoKPiAtICogUmV0dXJuOiBwYXJzZWQgZHB1IGNvbmZpZyBzdHJ1Y3R1cmUK PiArICogUmV0dXJuOiBkcHUgY29uZmlnIHN0cnVjdHVyZQo+ICAgKi8KPiAtc3RydWN0IGRwdV9t ZHNzX2NmZyAqZHB1X2h3X2NhdGFsb2dfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIg aHdfcmV2KTsKPiArc3RydWN0IGRwdV9tZHNzX2NmZyAqZHB1X2h3X2NhdGFsb2dfaW5pdCh1MzIg aHdfcmV2KTsKPiAgCj4gIC8qKgo+ICAgKiBkcHVfaHdfY2F0YWxvZ19kZWluaXQgLSBkcHUgaGFy ZHdhcmUgY2F0YWxvZyBjbGVhbnVwCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9od19zc3BwLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfaHdfc3NwcC5jCj4gaW5kZXggNTM0MzE4NC4uMTBiZGNlMyAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfc3NwcC5jCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3NzcHAuYwo+IEBAIC0zMjEsNyArMzIxLDcgQEAg c3RhdGljIHZvaWQgZHB1X2h3X3NzcHBfc2V0dXBfZm9ybWF0KHN0cnVjdCBkcHVfaHdfcGlwZSAq Y3R4LAo+ICAJCURQVV9SRUdfV1JJVEUoYywgU1NQUF9GRVRDSF9DT05GSUcsCj4gIAkJCURQVV9G RVRDSF9DT05GSUdfUkVTRVRfVkFMVUUgfAo+ICAJCQljdHgtPm1kcC0+aGlnaGVzdF9iYW5rX2Jp dCA8PCAxOCk7Cj4gLQkJaWYgKElTX1VCV0NfMjBfU1VQUE9SVEVEKGN0eC0+Y2F0YWxvZy0+dWJ3 Y192ZXJzaW9uKSkgewo+ICsJCWlmIChJU19VQldDXzIwX1NVUFBPUlRFRChjdHgtPmNhdGFsb2ct PmNhcHMtPnVid2NfdmVyc2lvbikpIHsKPiAgCQkJZmFzdF9jbGVhciA9IGZtdC0+YWxwaGFfZW5h YmxlID8gQklUKDMxKSA6IDA7Cj4gIAkJCURQVV9SRUdfV1JJVEUoYywgU1NQUF9VQldDX1NUQVRJ Q19DVFJMLAo+ICAJCQkJCWZhc3RfY2xlYXIgfCAoY3R4LT5tZHAtPnVid2Nfc3dpenpsZSkgfAo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfdG9wLmMg Yi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfdG9wLmMKPiBpbmRleCBmNzY0 OTUxLi4wY2FhZGNlZSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfaHdfdG9wLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf aHdfdG9wLmMKPiBAQCAtMzQwLDcgKzM0MCw3IEBAIHZvaWQgZHB1X2h3X3Jlc2V0X3Vid2Moc3Ry dWN0IGRwdV9od19tZHAgKm1kcCwgc3RydWN0IGRwdV9tZHNzX2NmZyAqbSkKPiAgCWlmICghbWRw IHx8ICFtKQo+ICAJCXJldHVybjsKPiAgCj4gLQlpZiAoIUlTX1VCV0NfMjBfU1VQUE9SVEVEKG0t PnVid2NfdmVyc2lvbikpCj4gKwlpZiAoIUlTX1VCV0NfMjBfU1VQUE9SVEVEKG0tPmNhcHMtPnVi d2NfdmVyc2lvbikpCj4gIAkJcmV0dXJuOwo+ICAKPiAgCS8qIGZvcmNlIGJsayBvZmZzZXQgdG8g emVybyB0byBhY2Nlc3MgYmVnaW5uaW5nIG9mIHJlZ2lzdGVyIHJlZ2lvbiAqLwo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfd2IuYyBiL2RyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od193Yi5jCj4gaW5kZXggZmIwMmRmNC4uOTBiMmFh ZSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfd2Iu Ywo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od193Yi5jCj4gQEAg LTE0Nyw3ICsxNDcsNyBAQCBzdGF0aWMgdm9pZCBkcHVfaHdfd2Jfc2V0dXBfZm9ybWF0KHN0cnVj dCBkcHVfaHdfd2IgKmN0eCwKPiAgCQl3cml0ZV9jb25maWcgfD0gKGN0eC0+bWRwLT5oaWdoZXN0 X2JhbmtfYml0IDw8IDgpOwo+ICAJCWlmIChmbXQtPmJhc2UucGl4ZWxfZm9ybWF0ID09IERSTV9G T1JNQVRfUkdCNTY1KQo+ICAJCQl3cml0ZV9jb25maWcgfD0gMHg4Owo+IC0JCWlmIChJU19VQldD XzIwX1NVUFBPUlRFRChjdHgtPmNhdGFsb2ctPnVid2NfdmVyc2lvbikpCj4gKwkJaWYgKElTX1VC V0NfMjBfU1VQUE9SVEVEKGN0eC0+Y2F0YWxvZy0+Y2Fwcy0+dWJ3Y192ZXJzaW9uKSkKPiAgCQkJ RFBVX1JFR19XUklURShjLCBXQl9VQldDX1NUQVRJQ19DVFJMLAo+ICAJCQkJCShjdHgtPm1kcC0+ dWJ3Y19zd2l6emxlIDw8IDApIHwKPiAgCQkJCQkoY3R4LT5tZHAtPmhpZ2hlc3RfYmFua19iaXQg PDwgNCkpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf a21zLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21zLmMKPiBpbmRleCA3 MTg2YzY0Li43NGFmYTFhIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9rbXMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9r bXMuYwo+IEBAIC0xODc2LDcgKzE4NzYsNyBAQCBzdGF0aWMgaW50IGRwdV9rbXNfaHdfaW5pdChz dHJ1Y3QgbXNtX2ttcyAqa21zKQo+ICAKPiAgCXByX2luZm8oImRwdSBoYXJkd2FyZSByZXZpc2lv bjoweCV4XG4iLCBkcHVfa21zLT5jb3JlX3Jldik7Cj4gIAo+IC0JZHB1X2ttcy0+Y2F0YWxvZyA9 IGRwdV9od19jYXRhbG9nX2luaXQoZGV2LCBkcHVfa21zLT5jb3JlX3Jldik7Cj4gKwlkcHVfa21z LT5jYXRhbG9nID0gZHB1X2h3X2NhdGFsb2dfaW5pdChkcHVfa21zLT5jb3JlX3Jldik7Cj4gIAlp ZiAoSVNfRVJSX09SX05VTEwoZHB1X2ttcy0+Y2F0YWxvZykpIHsKPiAgCQlyYyA9IFBUUl9FUlIo ZHB1X2ttcy0+Y2F0YWxvZyk7Cj4gIAkJaWYgKCFkcHVfa21zLT5jYXRhbG9nKQo+IEBAIC0xOTgx LDcgKzE5ODEsOCBAQCBzdGF0aWMgaW50IGRwdV9rbXNfaHdfaW5pdChzdHJ1Y3QgbXNtX2ttcyAq a21zKQo+ICAJICogbWF4IGNydGMgd2lkdGggaXMgZXF1YWwgdG8gdGhlIG1heCBtaXhlciB3aWR0 aCAqIDIgYW5kIG1heCBoZWlnaHQgaXMKPiAgCSAqIGlzIDRLCj4gIAkgKi8KPiAtCWRldi0+bW9k ZV9jb25maWcubWF4X3dpZHRoID0gZHB1X2ttcy0+Y2F0YWxvZy0+bWF4X21peGVyX3dpZHRoICog MjsKPiArCWRldi0+bW9kZV9jb25maWcubWF4X3dpZHRoID0KPiArCQkJZHB1X2ttcy0+Y2F0YWxv Zy0+Y2Fwcy0+bWF4X21peGVyX3dpZHRoICogMjsKPiAgCWRldi0+bW9kZV9jb25maWcubWF4X2hl aWdodCA9IDQwOTY7Cj4gIAo+ICAJLyoKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X3BsYW5lLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfcGxhbmUuYwo+IGluZGV4IGM2NTdlNmIuLjMzYTg5NGUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3BsYW5lLmMKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfcGxhbmUuYwo+IEBAIC0xODgsNyArMTg4LDcgQEAgc3RhdGlj IGlubGluZSBpbnQgX2RwdV9wbGFuZV9jYWxjX2ZpbGxfbGV2ZWwoc3RydWN0IGRybV9wbGFuZSAq cGxhbmUsCj4gIAo+ICAJcGRwdSA9IHRvX2RwdV9wbGFuZShwbGFuZSk7Cj4gIAlwc3RhdGUgPSB0 b19kcHVfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKPiAtCWZpeGVkX2J1ZmZfc2l6ZSA9IHBk cHUtPnBpcGVfc2Jsay0+cGl4ZWxfcmFtX3NpemU7Cj4gKwlmaXhlZF9idWZmX3NpemUgPSBwZHB1 LT5waXBlX3NibGstPmNvbW1vbi0+cGl4ZWxfcmFtX3NpemU7Cj4gIAo+ICAJbGlzdF9mb3JfZWFj aF9lbnRyeSh0bXAsICZwZHB1LT5tcGxhbmVfbGlzdCwgbXBsYW5lX2xpc3QpIHsKPiAgCQlpZiAo IWRwdV9wbGFuZV9lbmFibGVkKHRtcC0+YmFzZS5zdGF0ZSkpCj4gQEAgLTEzMjAsNyArMTMyMCw3 IEBAIGludCBkcHVfcGxhbmVfdmFsaWRhdGVfbXVsdGlyZWN0X3YyKHN0cnVjdCBkcHVfbXVsdGly ZWN0X3BsYW5lX3N0YXRlcyAqcGxhbmUpCj4gIAkJICogU28gd2UgY2Fubm90IHN1cHBvcnQgbW9y ZSB0aGFuIGhhbGYgb2YgdGhlIHN1cHBvcnRlZCBTU1BQCj4gIAkJICogd2lkdGggZm9yIHRpbGVk IGZvcm1hdHMuCj4gIAkJICovCj4gLQkJd2lkdGhfdGhyZXNob2xkID0gZHB1X3BsYW5lW2ldLT5w aXBlX3NibGstPm1heGxpbmV3aWR0aDsKPiArCQl3aWR0aF90aHJlc2hvbGQgPSBkcHVfcGxhbmVb aV0tPnBpcGVfc2Jsay0+Y29tbW9uLT5tYXhsaW5ld2lkdGg7Cj4gIAkJaWYgKGhhc190aWxlZF9y ZWN0KQo+ICAJCQl3aWR0aF90aHJlc2hvbGQgLz0gMjsKPiAgCj4gQEAgLTE2ODQsNyArMTY4NCw3 IEBAIHN0YXRpYyBpbnQgZHB1X3BsYW5lX3NzcHBfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fcGxh bmUgKnBsYW5lLAo+ICAKPiAgCW1heF91cHNjYWxlID0gcGRwdS0+cGlwZV9zYmxrLT5tYXh1cHNj YWxlOwo+ICAJbWF4X2Rvd25zY2FsZSA9IHBkcHUtPnBpcGVfc2Jsay0+bWF4ZHduc2NhbGU7Cj4g LQltYXhfbGluZXdpZHRoID0gcGRwdS0+cGlwZV9zYmxrLT5tYXhsaW5ld2lkdGg7Cj4gKwltYXhf bGluZXdpZHRoID0gcGRwdS0+cGlwZV9zYmxrLT5jb21tb24tPm1heGxpbmV3aWR0aDsKPiAgCj4g IAlEUFVfREVCVUdfUExBTkUocGRwdSwgImNoZWNrICVkIC0+ICVkXG4iLAo+ICAJCWRwdV9wbGFu ZV9lbmFibGVkKHBsYW5lLT5zdGF0ZSksIGRwdV9wbGFuZV9lbmFibGVkKHN0YXRlKSk7Cj4gQEAg LTE3MjksOCArMTcyOSw4IEBAIHN0YXRpYyBpbnQgZHB1X3BsYW5lX3NzcHBfYXRvbWljX2NoZWNr KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAKPiAgCS8qIGRlY2ltYXRpb24gdmFsaWRhdGlv biAqLwo+ICAJfSBlbHNlIGlmIChkZWNpX3cgfHwgZGVjaV9oKSB7Cj4gLQkJaWYgKChkZWNpX3cg PiBwZHB1LT5waXBlX3NibGstPm1heGhkZWNpZXhwKSB8fAo+IC0JCQkoZGVjaV9oID4gcGRwdS0+ cGlwZV9zYmxrLT5tYXh2ZGVjaWV4cCkpIHsKPiArCQlpZiAoKGRlY2lfdyA+IHBkcHUtPnBpcGVf c2Jsay0+Y29tbW9uLT5tYXhoZGVjaWV4cCkgfHwKPiArCQkJKGRlY2lfaCA+IHBkcHUtPnBpcGVf c2Jsay0+Y29tbW9uLT5tYXh2ZGVjaWV4cCkpIHsKPiAgCQkJRFBVX0VSUk9SX1BMQU5FKHBkcHUs Cj4gIAkJCQkJInRvbyBtdWNoIGRlY2ltYXRpb24gcmVxdWVzdGVkXG4iKTsKPiAgCQkJcmV0ID0g LUVJTlZBTDsKPiBAQCAtMjI2OCwxNyArMjI2OCwxNyBAQCBzdGF0aWMgdm9pZCBfZHB1X3BsYW5l X2luc3RhbGxfcHJvcGVydGllcyhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAgCQkweDAsIDAs IDI1NSwgMjU1LCBQTEFORV9QUk9QX0FMUEhBKTsKPiAgCj4gIAlpZiAoIW1hc3Rlcl9wbGFuZV9p ZCkgewo+IC0JCWlmIChwZHB1LT5waXBlX3NibGstPm1heGhkZWNpZXhwKSB7Cj4gKwkJaWYgKHBk cHUtPnBpcGVfc2Jsay0+Y29tbW9uLT5tYXhoZGVjaWV4cCkgewo+ICAJCQltc21fcHJvcGVydHlf aW5zdGFsbF9yYW5nZSgmcGRwdS0+cHJvcGVydHlfaW5mbywKPiAgCQkJCQkiaF9kZWNpbWF0ZSIs IDB4MCwgMCwKPiAtCQkJCQlwZHB1LT5waXBlX3NibGstPm1heGhkZWNpZXhwLCAwLAo+ICsJCQkJ CXBkcHUtPnBpcGVfc2Jsay0+Y29tbW9uLT5tYXhoZGVjaWV4cCwgMCwKPiAgCQkJCQlQTEFORV9Q Uk9QX0hfREVDSU1BVEUpOwo+ICAJCX0KPiAgCj4gLQkJaWYgKHBkcHUtPnBpcGVfc2Jsay0+bWF4 dmRlY2lleHApIHsKPiArCQlpZiAocGRwdS0+cGlwZV9zYmxrLT5jb21tb24tPm1heHZkZWNpZXhw KSB7Cj4gIAkJCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX3JhbmdlKCZwZHB1LT5wcm9wZXJ0eV9pbmZv LAo+ICAJCQkJCSJ2X2RlY2ltYXRlIiwgMHgwLCAwLAo+IC0JCQkJCXBkcHUtPnBpcGVfc2Jsay0+ bWF4dmRlY2lleHAsIDAsCj4gKwkJCQkJcGRwdS0+cGlwZV9zYmxrLT5jb21tb24tPm1heHZkZWNp ZXhwLCAwLAo+ICAJCQkJCVBMQU5FX1BST1BfVl9ERUNJTUFURSk7Cj4gIAkJfQo+ICAKPiBAQCAt MjM4OSwxNSArMjM4OSwxNSBAQCBzdGF0aWMgdm9pZCBfZHB1X3BsYW5lX2luc3RhbGxfcHJvcGVy dGllcyhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAgCQkJcGRwdS0+cGlwZV9ody0+b3BzLmdl dF9zY2FsZXJfdmVyKHBkcHUtPnBpcGVfaHcpKTsKPiAgCj4gIAlkcHVfa21zX2luZm9fYWRkX2tl eWludChpbmZvLCAibWF4X2xpbmV3aWR0aCIsCj4gLQkJCXBkcHUtPnBpcGVfc2Jsay0+bWF4bGlu ZXdpZHRoKTsKPiArCQkJcGRwdS0+cGlwZV9zYmxrLT5jb21tb24tPm1heGxpbmV3aWR0aCk7Cj4g IAlkcHVfa21zX2luZm9fYWRkX2tleWludChpbmZvLCAibWF4X3Vwc2NhbGUiLAo+ICAJCQlwZHB1 LT5waXBlX3NibGstPm1heHVwc2NhbGUpOwo+ICAJZHB1X2ttc19pbmZvX2FkZF9rZXlpbnQoaW5m bywgIm1heF9kb3duc2NhbGUiLAo+ICAJCQlwZHB1LT5waXBlX3NibGstPm1heGR3bnNjYWxlKTsK PiAgCWRwdV9rbXNfaW5mb19hZGRfa2V5aW50KGluZm8sICJtYXhfaG9yaXpvbnRhbF9kZWNpIiwK PiAtCQkJcGRwdS0+cGlwZV9zYmxrLT5tYXhoZGVjaWV4cCk7Cj4gKwkJCXBkcHUtPnBpcGVfc2Js ay0+Y29tbW9uLT5tYXhoZGVjaWV4cCk7Cj4gIAlkcHVfa21zX2luZm9fYWRkX2tleWludChpbmZv LCAibWF4X3ZlcnRpY2FsX2RlY2kiLAo+IC0JCQlwZHB1LT5waXBlX3NibGstPm1heHZkZWNpZXhw KTsKPiArCQkJcGRwdS0+cGlwZV9zYmxrLT5jb21tb24tPm1heHZkZWNpZXhwKTsKPiAgCWRwdV9r bXNfaW5mb19hZGRfa2V5aW50KGluZm8sICJtYXhfcGVyX3BpcGVfYnciLAo+ICAJCQlwZHB1LT5w aXBlX3NibGstPm1heF9wZXJfcGlwZV9idyAqIDEwMDBMTCk7Cj4gIAltc21fcHJvcGVydHlfc2V0 X2Jsb2IoJnBkcHUtPnByb3BlcnR5X2luZm8sICZwZHB1LT5ibG9iX2luZm8sCj4gLS0gCj4gVGhl IFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIGlzIGEgbWVtYmVyIG9mIHRoZSBDb2Rl IEF1cm9yYSBGb3J1bSwKPiBhIExpbnV4IEZvdW5kYXRpb24gQ29sbGFib3JhdGl2ZSBQcm9qZWN0 Cj4gCgotLSAKU2VhbiBQYXVsLCBTb2Z0d2FyZSBFbmdpbmVlciwgR29vZ2xlIC8gQ2hyb21pdW0g T1MKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRnJlZWRy ZW5vIG1haWxpbmcgbGlzdApGcmVlZHJlbm9AbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZnJlZWRyZW5vCg==