From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v4,5/6] usb:cdns3 Add Cadence USB3 DRD Driver From: Chunfeng Yun Message-Id: <1550224667.2210.22.camel@mhfsdcap03> Date: Fri, 15 Feb 2019 17:57:47 +0800 To: Pawel Laszczak Cc: devicetree@vger.kernel.org, gregkh@linuxfoundation.org, felipe.balbi@linux.intel.com, mark.rutland@arm.com, linux-usb@vger.kernel.org, hdegoede@redhat.com, heikki.krogerus@linux.intel.com, andy.shevchenko@gmail.com, robh+dt@kernel.org, rogerq@ti.com, linux-kernel@vger.kernel.org, jbergsagel@ti.com, nsekhar@ti.com, nm@ti.com, sureshp@cadence.com, peter.chen@nxp.com, kurahul@cadence.com List-ID: aGksCk9uIFRodSwgMjAxOS0wMi0xNCBhdCAxOTo0NSArMDAwMCwgUGF3ZWwgTGFzemN6YWsgd3Jv dGU6Cj4gVGhpcyBwYXRjaCBpbnRyb2R1Y2UgbmV3IENhZGVuY2UgVVNCU1MgRFJEIGRyaXZlciB0 byBsaW51eCBrZXJuZWwuCj4gCj4gVGhlIENhZGVuY2UgVVNCU1MgRFJEIERyaXZlciBpcyBhIGhp Z2hseSBjb25maWd1cmFibGUgSVAgQ29yZSB3aGljaGkKPiBjYW4gYmUgaW5zdGFudGlhdGVkIGFz IER1YWwtUm9sZSBEZXZpY2UgKERSRCksIFBlcmlwaGVyYWwgT25seSBhbmQKPiBIb3N0IE9ubHkg KFhIQ0kpY29uZmlndXJhdGlvbnMuCj4gCj4gVGhlIGN1cnJlbnQgZHJpdmVyIGhhcyBiZWVuIHZh bGlkYXRlZCB3aXRoIEZQR0EgYnVybmVkLiBXZSBoYXZlIHN1cHBvcnQKPiBmb3IgUENJZSBidXMs IHdoaWNoIGlzIHVzZWQgb24gRlBHQSBwcm90b3R5cGluZy4KPiAKPiBUaGUgaG9zdCBzaWRlIG9m IFVTQlNTLURSRCBjb250cm9sbGVyIGlzIGNvbXBsaWFuY2Ugd2l0aCBYSENJCj4gc3BlY2lmaWNh dGlvbiwgc28gaXQgd29ya3Mgd2l0aCBzdGFuZGFyZCBYSENJIGxpbnV4IGRyaXZlci4KPiAKPiBT aWduZWQtb2ZmLWJ5OiBQYXdlbCBMYXN6Y3phayA8cGF3ZWxsQGNhZGVuY2UuY29tPgo+IC0tLQo+ ICBkcml2ZXJzL3VzYi9LY29uZmlnICAgICAgICAgICAgICAgIHwgICAgMiArCj4gIGRyaXZlcnMv dXNiL01ha2VmaWxlICAgICAgICAgICAgICAgfCAgICAyICsKPiAgZHJpdmVycy91c2IvY2RuczMv S2NvbmZpZyAgICAgICAgICB8ICAgNDQgKwo+ICBkcml2ZXJzL3VzYi9jZG5zMy9NYWtlZmlsZSAg ICAgICAgIHwgICAxNCArCj4gIGRyaXZlcnMvdXNiL2NkbnMzL2NkbnMzLXBjaS13cmFwLmMgfCAg MTU1ICsrKwo+ICBkcml2ZXJzL3VzYi9jZG5zMy9jb3JlLmMgICAgICAgICAgIHwgIDQwMyArKysr KysKPiAgZHJpdmVycy91c2IvY2RuczMvY29yZS5oICAgICAgICAgICB8ICAxMTYgKysKPiAgZHJp dmVycy91c2IvY2RuczMvZGVidWcuaCAgICAgICAgICB8ICAxNjggKysrCj4gIGRyaXZlcnMvdXNi L2NkbnMzL2RlYnVnZnMuYyAgICAgICAgfCAgMTY0ICsrKwo+ICBkcml2ZXJzL3VzYi9jZG5zMy9k cmQuYyAgICAgICAgICAgIHwgIDM2NSArKysrKwo+ICBkcml2ZXJzL3VzYi9jZG5zMy9kcmQuaCAg ICAgICAgICAgIHwgIDE2MiArKysKPiAgZHJpdmVycy91c2IvY2RuczMvZXAwLmMgICAgICAgICAg ICB8ICA5MDcgKysrKysrKysrKysrKwo+ICBkcml2ZXJzL3VzYi9jZG5zMy9nYWRnZXQtZXhwb3J0 LmggIHwgICAyOCArCj4gIGRyaXZlcnMvdXNiL2NkbnMzL2dhZGdldC5jICAgICAgICAgfCAyMDAz ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgZHJpdmVycy91c2IvY2RuczMvZ2FkZ2V0 LmggICAgICAgICB8IDEyMDcgKysrKysrKysrKysrKysrKysKPiAgZHJpdmVycy91c2IvY2RuczMv aG9zdC1leHBvcnQuaCAgICB8ICAgMjggKwo+ICBkcml2ZXJzL3VzYi9jZG5zMy9ob3N0LmMgICAg ICAgICAgIHwgICA3MiArCj4gIGRyaXZlcnMvdXNiL2NkbnMzL3RyYWNlLmMgICAgICAgICAgfCAg IDIzICsKPiAgZHJpdmVycy91c2IvY2RuczMvdHJhY2UuaCAgICAgICAgICB8ICA0MDQgKysrKysr Cj4gIDE5IGZpbGVzIGNoYW5nZWQsIDYyNjcgaW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy91c2IvY2RuczMvS2NvbmZpZwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy91c2IvY2RuczMvTWFrZWZpbGUKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdXNi L2NkbnMzL2NkbnMzLXBjaS13cmFwLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdXNi L2NkbnMzL2NvcmUuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91c2IvY2RuczMvY29y ZS5oCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9jZG5zMy9kZWJ1Zy5oCj4gIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9jZG5zMy9kZWJ1Z2ZzLmMKPiAgY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvdXNiL2NkbnMzL2RyZC5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL3VzYi9jZG5zMy9kcmQuaAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91c2Iv Y2RuczMvZXAwLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdXNiL2NkbnMzL2dhZGdl dC1leHBvcnQuaAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91c2IvY2RuczMvZ2FkZ2V0 LmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdXNiL2NkbnMzL2dhZGdldC5oCj4gIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9jZG5zMy9ob3N0LWV4cG9ydC5oCj4gIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9jZG5zMy9ob3N0LmMKPiAgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvdXNiL2NkbnMzL3RyYWNlLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvdXNiL2NkbnMzL3RyYWNlLmgKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvS2NvbmZp ZyBiL2RyaXZlcnMvdXNiL0tjb25maWcKPiBpbmRleCA5ODdmYzViYTYzMjEuLjVmOTMzNDAxOWQw NCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3VzYi9LY29uZmlnCj4gKysrIGIvZHJpdmVycy91c2Iv S2NvbmZpZwo+IEBAIC0xMTIsNiArMTEyLDggQEAgc291cmNlICJkcml2ZXJzL3VzYi91c2JpcC9L Y29uZmlnIgo+ICAKPiAgZW5kaWYKPiAgCj4gK3NvdXJjZSAiZHJpdmVycy91c2IvY2RuczMvS2Nv bmZpZyIKPiArCj4gIHNvdXJjZSAiZHJpdmVycy91c2IvbXR1My9LY29uZmlnIgo+ICAKPiAgc291 cmNlICJkcml2ZXJzL3VzYi9tdXNiL0tjb25maWciCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNi L01ha2VmaWxlIGIvZHJpdmVycy91c2IvTWFrZWZpbGUKPiBpbmRleCA3ZDFiOGM4MmIyMDguLmFi MTI1Yjk2NmNhYyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3VzYi9NYWtlZmlsZQo+ICsrKyBiL2Ry aXZlcnMvdXNiL01ha2VmaWxlCj4gQEAgLTEyLDYgKzEyLDggQEAgb2JqLSQoQ09ORklHX1VTQl9E V0MzKQkJKz0gZHdjMy8KPiAgb2JqLSQoQ09ORklHX1VTQl9EV0MyKQkJKz0gZHdjMi8KPiAgb2Jq LSQoQ09ORklHX1VTQl9JU1AxNzYwKQkrPSBpc3AxNzYwLwo+ICAKPiArb2JqLSQoQ09ORklHX1VT Ql9DRE5TMykJCSs9IGNkbnMzLwo+ICsKPiAgb2JqLSQoQ09ORklHX1VTQl9NT04pCQkrPSBtb24v Cj4gIG9iai0kKENPTkZJR19VU0JfTVRVMykJCSs9IG10dTMvCj4gIAo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL3VzYi9jZG5zMy9LY29uZmlnIGIvZHJpdmVycy91c2IvY2RuczMvS2NvbmZpZwo+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi4yN2NiM2Q4ZGJlM2QKPiAt LS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy91c2IvY2RuczMvS2NvbmZpZwo+IEBAIC0wLDAg KzEsNDQgQEAKPiArY29uZmlnIFVTQl9DRE5TMwo+ICsJdHJpc3RhdGUgIkNhZGVuY2UgVVNCMyBE dWFsLVJvbGUgQ29udHJvbGxlciIKPiArCWRlcGVuZHMgb24gVVNCX1NVUFBPUlQgJiYgKFVTQiB8 fCBVU0JfR0FER0VUKSAmJiBIQVNfRE1BCj4gKwloZWxwCj4gKwkgIFNheSBZIGhlcmUgaWYgeW91 ciBzeXN0ZW0gaGFzIGEgY2FkZW5jZSBVU0IzIGR1YWwtcm9sZSBjb250cm9sbGVyLgo+ICsJICBJ dCBzdXBwb3J0czogZHVhbC1yb2xlIHN3aXRjaCwgSG9zdC1vbmx5LCBhbmQgUGVyaXBoZXJhbC1v bmx5Lgo+ICsKPiArCSAgSWYgeW91IGNob29zZSB0byBidWlsZCB0aGlzIGRyaXZlciBpcyBhIGR5 bmFtaWNhbGx5IGxpbmtlZAo+ICsJICBhcyBtb2R1bGUsIHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxs ZWQgY2RuczMua28uCj4gKwo+ICtpZiBVU0JfQ0ROUzMKPiArCj4gK2NvbmZpZyBVU0JfQ0ROUzNf R0FER0VUCj4gKyAgICAgICAgYm9vbCAiQ2FkZW5jZSBVU0IzIGRldmljZSBjb250cm9sbGVyIgo+ ICsgICAgICAgIGRlcGVuZHMgb24gVVNCX0dBREdFVAo+ICsgICAgICAgIGhlbHAKPiArICAgICAg ICAgIFNheSBZIGhlcmUgdG8gZW5hYmxlIGRldmljZSBjb250cm9sbGVyIGZ1bmN0aW9uYWxpdHkg b2YgdGhlCj4gKyAgICAgICAgICBjYWRlbmNlIFVTQlNTLURFViBkcml2ZXIuCj4gKwo+ICsgICAg ICAgICAgVGhpcyBjb250cm9sbGVyIHN1cHBvcnRzIEZGLCBIUyBhbmQgU1MgbW9kZS4gSXQgZG9l c24ndCBzdXBwb3J0Cj4gKyAgICAgICAgICBMUyBhbmQgU1NQIG1vZGUuCj4gKwo+ICtjb25maWcg VVNCX0NETlMzX0hPU1QKPiArICAgICAgICBib29sICJDYWRlbmNlIFVTQjMgaG9zdCBjb250cm9s bGVyIgo+ICsgICAgICAgIGRlcGVuZHMgb24gVVNCX1hIQ0lfSENECj4gKyAgICAgICAgaGVscAo+ ICsgICAgICAgICAgU2F5IFkgaGVyZSB0byBlbmFibGUgaG9zdCBjb250cm9sbGVyIGZ1bmN0aW9u YWxpdHkgb2YgdGhlCj4gKyAgICAgICAgICBjYWRlbmNlIGRyaXZlci4KPiArCj4gKyAgICAgICAg ICBIb3N0IGNvbnRyb2xsZXIgaXMgY29tcGxpYW50IHdpdGggWEhDSSBzbyBpdCB3aWxsIHVzZQo+ ICsgICAgICAgICAgc3RhbmRhcmQgWEhDSSBkcml2ZXIuCj4gKwo+ICtjb25maWcgVVNCX0NETlMz X1BDSV9XUkFQCj4gKwl0cmlzdGF0ZSAiQ2FkZW5jZSBVU0IzIHN1cHBvcnQgb24gUENJZS1iYXNl ZCBwbGF0Zm9ybXMiCj4gKwlkZXBlbmRzIG9uIFVTQl9QQ0kgJiYgQUNQSQo+ICsJZGVmYXVsdCBV U0JfQ0ROUzMKPiArCWhlbHAKPiArCSAgSWYgeW91J3JlIHVzaW5nIHRoZSBVU0JTUyBDb3JlIElQ IHdpdGggYSBQQ0llLCBwbGVhc2Ugc2F5Cj4gKwkgICdZJyBvciAnTScgaGVyZS4KPiArCj4gKwkg IElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgdGhpcyBkcml2ZXIgYXMgbW9kdWxlIGl0IHdpbGwKPiAr CSAgYmUgZHluYW1pY2FsbHkgbGlua2VkIGFuZCBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2RuczMt cGNpLmtvCj4gKwo+ICtlbmRpZgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jZG5zMy9NYWtl ZmlsZSBiL2RyaXZlcnMvdXNiL2NkbnMzL01ha2VmaWxlCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQK PiBpbmRleCAwMDAwMDAwMDAwMDAuLjhmOTQzODU5MzM3NQo+IC0tLSAvZGV2L251bGwKPiArKysg Yi9kcml2ZXJzL3VzYi9jZG5zMy9NYWtlZmlsZQo+IEBAIC0wLDAgKzEsMTQgQEAKPiArIyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+ICsjIGRlZmluZV90cmFjZS5oIG5lZWRzIHRv IGtub3cgaG93IHRvIGZpbmQgb3VyIGhlYWRlcgo+ICtDRkxBR1NfdHJhY2UubwkJCQk6PSAtSSQo c3JjKQo+ICsKPiArY2RuczMteQkJCQkJOj0gY29yZS5vIGRyZC5vIHRyYWNlLm8KPiArCj4gK29i ai0kKENPTkZJR19VU0JfQ0ROUzMpCQkJKz0gY2RuczMubwo+ICtpZm5lcSAoJChDT05GSUdfREVC VUdfRlMpLCkKPiArCWNkbnMzLXkJCQkJKz0gZGVidWdmcy5vCj4gK2VuZGlmCj4gKwo+ICtjZG5z My0kKENPTkZJR19VU0JfQ0ROUzNfR0FER0VUKQkrPSBnYWRnZXQubyBlcDAubwo+ICtjZG5zMy0k KENPTkZJR19VU0JfQ0ROUzNfSE9TVCkJCSs9IGhvc3Qubwo+ICtvYmotJChDT05GSUdfVVNCX0NE TlMzX1BDSV9XUkFQKQkrPSBjZG5zMy1wY2ktd3JhcC5vCndoZW4gYnVpbGQgYXMgbW9kdWxlOgpD T05GSUdfVVNCX0NETlMzPW0KQ09ORklHX1VTQl9DRE5TM19HQURHRVQ9bQpDT05GSUdfVVNCX0NE TlMzX0hPU1Q9bQoKdGhlcmUgaXMgYW4gZXJyb3I6CkVSUk9SOiAiY2RuczNfaGFuZHNoYWtlIiBb ZHJpdmVycy91c2IvY2RuczMvY2RuczMua29dIHVuZGVmaW5lZCEKCndoZW4gb25seSBzZXQ6CkNP TkZJR19VU0JfQ0ROUzM9eQphbHNvIGVuY291bnRlciBlcnJvcnM6CmRyaXZlcnMvdXNiL2NkbnMz L2RyZC5vOiBJbiBmdW5jdGlvbiBgY2RuczNfZHJkX3N3aXRjaF9nYWRnZXQnOgovZHJpdmVycy91 c2IvY2RuczMvZHJkLmM6MTczOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBjZG5zM19oYW5kc2hh a2UnCmRyaXZlcnMvdXNiL2NkbnMzL2RyZC5vOiBJbiBmdW5jdGlvbiBgY2RuczNfZHJkX3N3aXRj aF9ob3N0JzoKZHJpdmVycy91c2IvY2RuczMvZHJkLmM6MTM5OiB1bmRlZmluZWQgcmVmZXJlbmNl IHRvIGBjZG5zM19oYW5kc2hha2UnCgoKCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NkbnMz L2NkbnMzLXBjaS13cmFwLmMgYi9kcml2ZXJzL3VzYi9jZG5zMy9jZG5zMy1wY2ktd3JhcC5jCj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLmQwYjJkM2Q5Yjk4Mwo+ IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL3VzYi9jZG5zMy9jZG5zMy1wY2ktd3JhcC5j Cj4gQEAgLTAsMCArMSwxNTUgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y LjAKPiArLyoKPiArICogQ2FkZW5jZSBVU0JTUyBQQ0kgR2x1ZSBkcml2ZXIKPiArICoKPiArICog Q29weXJpZ2h0IChDKSAyMDE4IENhZGVuY2UuCj4gKyAqCj4gKyAqIEF1dGhvcjogUGF3ZWwgTGFz emN6YWsgPHBhd2VsbEBjYWRlbmNlLmNvbT4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgv a2VybmVsLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiArI2luY2x1ZGUgPGxpbnV4 L3BjaS5oPgo+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4gKyNpbmNsdWRl IDxsaW51eC9kbWEtbWFwcGluZy5oPgo+ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPgo+ICsKPiAr c3RydWN0IGNkbnMzX3dyYXAgewo+ICsJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdF9kZXY7 Cj4gKwlzdHJ1Y3QgcGNpX2RldiAqaGdfZGV2Owo+ICsJc3RydWN0IHJlc291cmNlIGRldl9yZXNb NF07Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgY2RuczNfd3JhcCB3cmFwOwpub3QgdXNlZCBpbiBmYWN0 PwoKPiArCj4gKyNkZWZpbmUgUkVTX0lSUV9JRAkJMAo+ICsjZGVmaW5lIFJFU19IT1NUX0lECQkx Cj4gKyNkZWZpbmUgUkVTX0RFVl9JRAkJMgo+ICsjZGVmaW5lIFJFU19EUkRfSUQJCTMKPiArCj4g KyNkZWZpbmUgUENJX0JBUl9IT1NUCQkwCj4gKyNkZWZpbmUgUENJX0JBUl9ERVYJCTIKPiArI2Rl ZmluZSBQQ0lfQkFSX09URwkJNAo+ICsKPiArI2RlZmluZSBQQ0lfREVWX0ZOX0hPU1RfREVWSUNF CTAKPiArI2RlZmluZSBQQ0lfREVWX0ZOX09URwkJMQo+ICsKPiArI2RlZmluZSBQQ0lfRFJJVkVS X05BTUUJCSJjZG5zMy1wY2ktdXNic3MiCj4gKyNkZWZpbmUgUExBVF9EUklWRVJfTkFNRQkiY2Ru cy11c2IzIgo+ICsKPiArI2RlZmluZSBDRE5TX1ZFTkRPUl9JRCAweDE3Y2QKPiArI2RlZmluZSBD RE5TX0RFVklDRV9JRCAweDAxMDAKPiArCj4gKy8qKgo+ICsgKiBjZG5zM19wY2lfcHJvYmUgLSBQ cm9iZSBmdW5jdGlvbiBmb3IgQ2FkZW5jZSBVU0Igd3JhcHBlciBkcml2ZXIKPiArICogQHBkZXY6 IHBsYXRmb3JtIGRldmljZSBvYmplY3QKPiArICogQGlkOiBwY2kgZGV2aWNlIGlkCj4gKyAqCj4g KyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG90aGVyd2lzZSBuZWdhdGl2ZSBlcnJubwo+ICsgKi8K PiArc3RhdGljIGludCBjZG5zM19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCj4gKwkJ CSAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKPiArewo+ICsJc3RydWN0IHBsYXRm b3JtX2RldmljZV9pbmZvIHBsYXRfaW5mbzsKPiArCXN0cnVjdCBjZG5zM193cmFwICp3cmFwOwo+ ICsJc3RydWN0IHJlc291cmNlICpyZXM7Cj4gKwlpbnQgZXJyOwo+ICsKPiArCS8qCj4gKwkgKiBm b3IgR0FER0VUL0hPU1QgUENJIChkZXZmbikgZnVuY3Rpb24gbnVtYmVyIGlzIDAsCj4gKwkgKiBm b3IgT1RHIFBDSSAoZGV2Zm4pIGZ1bmN0aW9uIG51bWJlciBpcyAxCj4gKwkgKi8KPiArCWlmICgh aWQgfHwgcGRldi0+ZGV2Zm4gIT0gUENJX0RFVl9GTl9IT1NUX0RFVklDRSkKPiArCQlyZXR1cm4g LUVJTlZBTDsKPiArCj4gKwllcnIgPSBwY2ltX2VuYWJsZV9kZXZpY2UocGRldik7Cj4gKwlpZiAo ZXJyKSB7Cj4gKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRW5hYmxpbmcgUENJIGRldmljZSBoYXMg ZmFpbGVkICVkXG4iLCBlcnIpOwo+ICsJCXJldHVybiBlcnI7Cj4gKwl9Cj4gKwo+ICsJcGNpX3Nl dF9tYXN0ZXIocGRldik7Cj4gKwl3cmFwID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVv Zigqd3JhcCksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCF3cmFwKSB7Cj4gKwkJZGV2X2VycigmcGRl di0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeVxuIik7Cj4gKwkJcmV0dXJuIC1FTk9N RU07Cj4gKwl9Cj4gKwo+ICsJLyogZnVuY3Rpb24gMDogaG9zdChCQVJfMCkgKyBkZXZpY2UoQkFS XzEpICsgb3RnKEJBUl8yKSkuICovCj4gKwltZW1zZXQod3JhcC0+ZGV2X3JlcywgMHgwMCwKPiAr CSAgICAgICBzaXplb2Yoc3RydWN0IHJlc291cmNlKSAqIEFSUkFZX1NJWkUod3JhcC0+ZGV2X3Jl cykpOwpNYWJ5ZSBub3QgbmVjZXNzYXJ5LCBkZXZtX2t6YWxsb2MoKSBhbHJlYWR5IHNldCB0aGVt IGFzIDA7Cgo+ICsJZGV2X2RiZygmcGRldi0+ZGV2LCAiSW5pdGlhbGl6ZSBEZXZpY2UgcmVzb3Vy Y2VzXG4iKTsKPiArCXJlcyA9IHdyYXAtPmRldl9yZXM7Cj4gKwo+ICsJcmVzW1JFU19ERVZfSURd LnN0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIFBDSV9CQVJfREVWKTsKPiArCXJlc1tS RVNfREVWX0lEXS5lbmQgPSAgIHBjaV9yZXNvdXJjZV9lbmQocGRldiwgUENJX0JBUl9ERVYpOwo+ ICsJcmVzW1JFU19ERVZfSURdLm5hbWUgPSAiZGV2IjsKPiArCXJlc1tSRVNfREVWX0lEXS5mbGFn cyA9IElPUkVTT1VSQ0VfTUVNOwo+ICsJZGV2X2RiZygmcGRldi0+ZGV2LCAiVVNCU1MtREVWIHBo eXNpY2FsIGJhc2UgYWRkcjogJXBhXG4iLAo+ICsJCSZyZXNbUkVTX0RFVl9JRF0uc3RhcnQpOwo+ ICsKPiArCXJlc1tSRVNfSE9TVF9JRF0uc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwg UENJX0JBUl9IT1NUKTsKPiArCXJlc1tSRVNfSE9TVF9JRF0uZW5kID0gcGNpX3Jlc291cmNlX2Vu ZChwZGV2LCBQQ0lfQkFSX0hPU1QpOwo+ICsJcmVzW1JFU19IT1NUX0lEXS5uYW1lID0gInhoY2ki Owo+ICsJcmVzW1JFU19IT1NUX0lEXS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNOwo+ICsJZGV2X2Ri ZygmcGRldi0+ZGV2LCAiVVNCU1MtWEhDSSBwaHlzaWNhbCBiYXNlIGFkZHI6ICVwYVxuIiwKPiAr CQkmcmVzW1JFU19IT1NUX0lEXS5zdGFydCk7Cj4gKwo+ICsJcmVzW1JFU19EUkRfSURdLnN0YXJ0 ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIFBDSV9CQVJfT1RHKTsKPiArCXJlc1tSRVNfRFJE X0lEXS5lbmQgPSAgIHBjaV9yZXNvdXJjZV9lbmQocGRldiwgUENJX0JBUl9PVEcpOwo+ICsJcmVz W1JFU19EUkRfSURdLm5hbWUgPSAib3RnIjsKPiArCXJlc1tSRVNfRFJEX0lEXS5mbGFncyA9IElP UkVTT1VSQ0VfTUVNOwo+ICsJZGV2X2RiZygmcGRldi0+ZGV2LCAiVVNCU1MtRFJEIHBoeXNpY2Fs IGJhc2UgYWRkcjogJXBhXG4iLAo+ICsJCSZyZXNbUkVTX0RSRF9JRF0uc3RhcnQpOwo+ICsKPiAr CS8qIEludGVycnVwdCBjb21tb24gZm9yIGJvdGggZGV2aWNlIGFuZCBYSENJICovCj4gKwl3cmFw LT5kZXZfcmVzW1JFU19JUlFfSURdLnN0YXJ0ID0gcGRldi0+aXJxOwo+ICsJd3JhcC0+ZGV2X3Jl c1tSRVNfSVJRX0lEXS5uYW1lID0gImNkbnMzLWlycSI7Cj4gKwl3cmFwLT5kZXZfcmVzW1JFU19J UlFfSURdLmZsYWdzID0gSU9SRVNPVVJDRV9JUlE7Cj4gKwo+ICsJLyogc2V0IHVwIHBsYXRmb3Jt IGRldmljZSBpbmZvICovCj4gKwltZW1zZXQoJnBsYXRfaW5mbywgMCwgc2l6ZW9mKHBsYXRfaW5m bykpOwo+ICsJcGxhdF9pbmZvLnBhcmVudCA9ICZwZGV2LT5kZXY7Cj4gKwlwbGF0X2luZm8uZndu b2RlID0gcGRldi0+ZGV2LmZ3bm9kZTsKPiArCXBsYXRfaW5mby5uYW1lID0gUExBVF9EUklWRVJf TkFNRTsKPiArCXBsYXRfaW5mby5pZCA9IHBkZXYtPmRldmZuOwo+ICsJcGxhdF9pbmZvLnJlcyA9 IHdyYXAtPmRldl9yZXM7Cj4gKwlwbGF0X2luZm8ubnVtX3JlcyA9IEFSUkFZX1NJWkUod3JhcC0+ ZGV2X3Jlcyk7Cj4gKwlwbGF0X2luZm8uZG1hX21hc2sgPSBwZGV2LT5kbWFfbWFzazsKPiArCj4g KwkvKiByZWdpc3RlciBwbGF0Zm9ybSBkZXZpY2UgKi8KPiArCXdyYXAtPnBsYXRfZGV2ID0gcGxh dGZvcm1fZGV2aWNlX3JlZ2lzdGVyX2Z1bGwoJnBsYXRfaW5mbyk7Cj4gKwlpZiAoSVNfRVJSKHdy YXAtPnBsYXRfZGV2KSkKPiArCQlyZXR1cm4gUFRSX0VSUih3cmFwLT5wbGF0X2Rldik7Cj4gKwo+ ICsJcGNpX3NldF9kcnZkYXRhKHBkZXYsIHdyYXApOwo+ICsKPiArCXJldHVybiBlcnI7Cj4gK30K PiArCj4gK3ZvaWQgY2RuczNfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKPiArewo+ ICsJc3RydWN0IGNkbnMzX3dyYXAgKndyYXAgPSAoc3RydWN0IGNkbnMzX3dyYXAgKilwY2lfZ2V0 X2RydmRhdGEocGRldik7Cj4gKwo+ICsJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIod3JhcC0+ cGxhdF9kZXYpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQg Y2RuczNfcGNpX2lkc1tdID0gewo+ICsJeyBQQ0lfREVWSUNFKENETlNfVkVORE9SX0lELCBDRE5T X0RFVklDRV9JRCksIH0sCj4gKwl7IDAsIH0KPiArfTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgcGNp X2RyaXZlciBjZG5zM19wY2lfZHJpdmVyID0gewo+ICsJLm5hbWUgPSBQQ0lfRFJJVkVSX05BTUUs Cj4gKwkuaWRfdGFibGUgPSBjZG5zM19wY2lfaWRzLAo+ICsJLnByb2JlID0gY2RuczNfcGNpX3By b2JlLAo+ICsJLnJlbW92ZSA9IGNkbnMzX3BjaV9yZW1vdmUsCj4gK307Cj4gKwo+ICttb2R1bGVf cGNpX2RyaXZlcihjZG5zM19wY2lfZHJpdmVyKTsKPiArTU9EVUxFX0RFVklDRV9UQUJMRShwY2ks IGNkbnMzX3BjaV9pZHMpOwo+ICsKPiArTU9EVUxFX0FVVEhPUigiUGF3ZWwgTGFzemN6YWsgPHBh d2VsbEBjYWRlbmNlLmNvbT4iKTsKPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwo+ICtNT0RV TEVfREVTQ1JJUFRJT04oIkNhZGVuY2UgVVNCU1MgUENJIHdyYXBwZXJyIik7Cj4gKwo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL3VzYi9jZG5zMy9jb3JlLmMgYi9kcml2ZXJzL3VzYi9jZG5zMy9jb3Jl LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uYWEyZjYzMjQx ZGFiCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvdXNiL2NkbnMzL2NvcmUuYwo+IEBA IC0wLDAgKzEsNDAzIEBACj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4g Ky8qCj4gKyAqIENhZGVuY2UgVVNCU1MgRFJEIERyaXZlci4KPiArICoKPiArICogQ29weXJpZ2h0 IChDKSAyMDE4IENhZGVuY2UuCj4gKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IE5YUAo+ICsg Kgo+ICsgKiBBdXRob3I6IFBldGVyIENoZW4gPHBldGVyLmNoZW5AbnhwLmNvbT4KPiArICogICAg ICAgICBQYXdlbCBMYXN6Y3phayA8cGF3ZWxsQGNhZGVuY2UuY29tPgo+ICsgKi8KPiArCj4gKyNp bmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+ICsj aW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pbnRl cnJ1cHQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2lvLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9wbV9y dW50aW1lLmg+Cj4gKwo+ICsjaW5jbHVkZSAiZ2FkZ2V0LmgiCj4gKyNpbmNsdWRlICJjb3JlLmgi Cj4gKyNpbmNsdWRlICJob3N0LWV4cG9ydC5oIgo+ICsjaW5jbHVkZSAiZ2FkZ2V0LWV4cG9ydC5o Igo+ICsjaW5jbHVkZSAiZHJkLmgiCj4gKyNpbmNsdWRlICJkZWJ1Zy5oIgo+ICsKPiArc3RhdGlj IGlubGluZQo+ICtzdHJ1Y3QgY2RuczNfcm9sZV9kcml2ZXIgKmNkbnMzX2dldF9jdXJyZW50X3Jv bGVfZHJpdmVyKHN0cnVjdCBjZG5zMyAqY2RucykKPiArewo+ICsJV0FSTl9PTihjZG5zLT5yb2xl ID49IENETlMzX1JPTEVfRU5EIHx8ICFjZG5zLT5yb2xlc1tjZG5zLT5yb2xlXSk7Cj4gKwlyZXR1 cm4gY2Rucy0+cm9sZXNbY2Rucy0+cm9sZV07Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgY2RuczNf cm9sZV9zdGFydChzdHJ1Y3QgY2RuczMgKmNkbnMsIGVudW0gY2RuczNfcm9sZXMgcm9sZSkKPiAr ewo+ICsJaW50IHJldDsKPiArCj4gKwlpZiAoV0FSTl9PTihyb2xlID49IENETlMzX1JPTEVfRU5E KSkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlpZiAoIWNkbnMtPnJvbGVzW3JvbGVdKQo+ICsJCXJl dHVybiAtRU5YSU87Cj4gKwo+ICsJaWYgKGNkbnMtPnJvbGVzW3JvbGVdLT5zdGF0ZSA9PSBDRE5T M19ST0xFX1NUQVRFX0FDVElWRSkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwltdXRleF9sb2NrKCZj ZG5zLT5tdXRleCk7Cj4gKwljZG5zLT5yb2xlID0gcm9sZTsKPiArCXJldCA9IGNkbnMtPnJvbGVz W3JvbGVdLT5zdGFydChjZG5zKTsKPiArCWlmICghcmV0KQo+ICsJCWNkbnMtPnJvbGVzW3JvbGVd LT5zdGF0ZSA9IENETlMzX1JPTEVfU1RBVEVfQUNUSVZFOwo+ICsJbXV0ZXhfdW5sb2NrKCZjZG5z LT5tdXRleCk7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICt2b2lkIGNkbnMzX3JvbGVfc3Rv cChzdHJ1Y3QgY2RuczMgKmNkbnMpCj4gK3sKPiArCWVudW0gY2RuczNfcm9sZXMgcm9sZSA9IGNk bnMtPnJvbGU7Cj4gKwo+ICsJaWYgKHJvbGUgPj0gQ0ROUzNfUk9MRV9FTkQpIHsKPiArCQlXQVJO X09OKHJvbGUgPiBDRE5TM19ST0xFX0VORCk7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCWlm IChjZG5zLT5yb2xlc1tyb2xlXS0+c3RhdGUgPT0gQ0ROUzNfUk9MRV9TVEFURV9JTkFDVElWRSkK PiArCQlyZXR1cm47Cj4gKwo+ICsJbXV0ZXhfbG9jaygmY2Rucy0+bXV0ZXgpOwo+ICsJY2Rucy0+ cm9sZXNbcm9sZV0tPnN0b3AoY2Rucyk7Cj4gKwljZG5zLT5yb2xlc1tyb2xlXS0+c3RhdGUgPSBD RE5TM19ST0xFX1NUQVRFX0lOQUNUSVZFOwo+ICsJbXV0ZXhfdW5sb2NrKCZjZG5zLT5tdXRleCk7 Cj4gK30KPiArCj4gKy8qCj4gKyAqIGNkbnMtPnJvbGUgZ2V0cyBmcm9tIGNkbnMzX2dldF9pbml0 aWFsX3JvbGUsIGFuZCB0aGlzIEFQSSB0ZWxscyByb2xlIGF0IHRoZQo+ICsgKiBydW50aW1lLgo+ ICsgKiBJZiBib3RoIHJvbGVzIGFyZSBzdXBwb3J0ZWQsIHRoZSByb2xlIGlzIHNlbGVjdGVkIGJh c2VkIG9uIHZidXMvaWQuCj4gKyAqIEl0IGNvdWxkIGJlIHJlYWQgZnJvbSBPVEcgcmVnaXN0ZXIg b3IgZXh0ZXJuYWwgY29ubmVjdG9yLgo+ICsgKiBJZiBvbmx5IHNpbmdsZSByb2xlIGlzIHN1cHBv cnRlZCwgb25seSBvbmUgcm9sZSBzdHJ1Y3R1cmUKPiArICogaXMgYWxsb2NhdGVkLCBjZG5zLT5y b2xlc1tDRE5TM19ST0xFX0hPU1RdIG9yIGNkbnMtPnJvbGVzW0NETlMzX1JPTEVfR0FER0VUXS4K PiArICovCj4gK3N0YXRpYyBlbnVtIGNkbnMzX3JvbGVzIGNkbnMzX2dldF9pbml0aWFsX3JvbGUo c3RydWN0IGNkbnMzICpjZG5zKQo+ICt7Cj4gKwlpZiAoY2Rucy0+cm9sZXNbQ0ROUzNfUk9MRV9I T1NUXSAmJiBjZG5zLT5yb2xlc1tDRE5TM19ST0xFX0dBREdFVF0pIHsKPiArCQlpZiAoY2RuczNf aXNfaG9zdChjZG5zKSkKPiArCQkJcmV0dXJuIENETlMzX1JPTEVfSE9TVDsKPiArCQlpZiAoY2Ru czNfaXNfZGV2aWNlKGNkbnMpKQo+ICsJCQlyZXR1cm4gQ0ROUzNfUk9MRV9HQURHRVQ7Cj4gKwl9 Cj4gKwlyZXR1cm4gY2Rucy0+cm9sZXNbQ0ROUzNfUk9MRV9IT1NUXQo+ICsJCT8gQ0ROUzNfUk9M RV9IT1NUCj4gKwkJOiBDRE5TM19ST0xFX0dBREdFVDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQg Y2RuczNfZXhpdF9yb2xlcyhzdHJ1Y3QgY2RuczMgKmNkbnMpCj4gK3sKPiArCWNkbnMzX3JvbGVf c3RvcChjZG5zKTsKPiArCWNkbnMzX2RyZF9leGl0KGNkbnMpOwo+ICt9Cj4gKwo+ICsvKioKPiAr ICogY2RuczNfY29yZV9pbml0X3JvbGUgLSBpbml0aWFsaXplIHJvbGUgb2Ygb3BlcmF0aW9uCj4g KyAqIEBjZG5zOiBQb2ludGVyIHRvIGNkbnMzIHN0cnVjdHVyZQo+ICsgKgo+ICsgKiBSZXR1cm5z IDAgb24gc3VjY2VzcyBvdGhlcndpc2UgbmVnYXRpdmUgZXJybm8KPiArICovCj4gK3N0YXRpYyBp bnQgY2RuczNfY29yZV9pbml0X3JvbGUoc3RydWN0IGNkbnMzICpjZG5zKQo+ICt7Cj4gKwlzdHJ1 Y3QgZGV2aWNlICpkZXYgPSBjZG5zLT5kZXY7Cj4gKwllbnVtIHVzYl9kcl9tb2RlIGJlc3RfZHJf bW9kZTsKPiArCWVudW0gdXNiX2RyX21vZGUgZHJfbW9kZTsKPiArCWludCByZXQgPSAwOwo+ICsK PiArCWRyX21vZGUgPSB1c2JfZ2V0X2RyX21vZGUoZGV2KTsKPiArCWNkbnMtPnJvbGUgPSBDRE5T M19ST0xFX0VORDsKPiArCj4gKwkvKgo+ICsJICogSWYgZHJpdmVyIGNhbid0IHJlYWQgbW9kZSBi eSBtZWFucyBvZiB1c2JfZ2V0X2RyX21kb2UgZnVuY3Rpb24gdGhlbgo+ICsJICogY2hvb3NlcyBt b2RlIGFjY29yZGluZyB3aXRoIEtlcm5lbCBjb25maWd1cmF0aW9uLiBUaGlzIHNldHRpbmcKPiAr CSAqIGNhbiBiZSByZXN0cmljdGVkIGxhdGVyIGRlcGVuZGluZyBvbiBzdHJhcCBwaW4gY29uZmln dXJhdGlvbi4KPiArCSAqLwo+ICsJaWYgKGRyX21vZGUgPT0gVVNCX0RSX01PREVfVU5LTk9XTikg ewo+ICsJCWlmIChJU19FTkFCTEVEKENPTkZJR19VU0JfQ0ROUzNfSE9TVCkgJiYKPiArCQkgICAg SVNfRU5BQkxFRChDT05GSUdfVVNCX0NETlMzX0dBREdFVCkpCj4gKwkJCWRyX21vZGUgPSBVU0Jf RFJfTU9ERV9PVEc7Cj4gKwkJZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfVVNCX0NETlMzX0hP U1QpKQo+ICsJCQlkcl9tb2RlID0gVVNCX0RSX01PREVfSE9TVDsKPiArCQllbHNlIGlmIChJU19F TkFCTEVEKENPTkZJR19VU0JfQ0ROUzNfR0FER0VUKSkKPiArCQkJZHJfbW9kZSA9IFVTQl9EUl9N T0RFX1BFUklQSEVSQUw7Cj4gKwl9Cj4gKwo+ICsJYmVzdF9kcl9tb2RlID0gVVNCX0RSX01PREVf T1RHOwo+ICsKPiArCWlmIChkcl9tb2RlID09IFVTQl9EUl9NT0RFX09URykgewo+ICsJCWJlc3Rf ZHJfbW9kZSA9IGNkbnMtPmRyX21vZGU7Cj4gKwl9IGVsc2UgaWYgKGNkbnMtPmRyX21vZGUgPT0g VVNCX0RSX01PREVfT1RHKSB7Cj4gKwkJYmVzdF9kcl9tb2RlID0gZHJfbW9kZTsKPiArCX0gZWxz ZSBpZiAoY2Rucy0+ZHJfbW9kZSAhPSBkcl9tb2RlKSB7Cj4gKwkJZGV2X2VycihkZXYsICJJbmNv cnJlY3QgRFJEIGNvbmZpZ3VyYXRpb25cbiIpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ ICsKPiArCWRyX21vZGUgPSBiZXN0X2RyX21vZGU7Cj4gKwo+ICsJaWYgKGRyX21vZGUgPT0gVVNC X0RSX01PREVfT1RHIHx8IGRyX21vZGUgPT0gVVNCX0RSX01PREVfSE9TVCkgewo+ICsJCXJldCA9 IGNkbnMzX2hvc3RfaW5pdChjZG5zKTsKPiArCQlpZiAocmV0KSB7Cj4gKwkJCWRldl9lcnIoZGV2 LCAiSG9zdCBpbml0aWFsaXphdGlvbiBmYWlsZWQgd2l0aCAlZFxuIiwKPiArCQkJCXJldCk7Cj4g KwkJCWdvdG8gZXJyOwo+ICsJCX0KPiArCX0KPiArCj4gKwlpZiAoZHJfbW9kZSA9PSBVU0JfRFJf TU9ERV9PVEcgfHwgZHJfbW9kZSA9PSBVU0JfRFJfTU9ERV9QRVJJUEhFUkFMKSB7Cj4gKwkJcmV0 ID0gY2RuczNfZ2FkZ2V0X2luaXQoY2Rucyk7Cj4gKwkJaWYgKHJldCkgewo+ICsJCQlkZXZfZXJy KGRldiwgIkRldmljZSBpbml0aWFsaXphdGlvbiBmYWlsZWQgd2l0aCAlZFxuIiwKPiArCQkJCXJl dCk7Cj4gKwkJCWdvdG8gZXJyOwo+ICsJCX0KPiArCX0KPiArCj4gKwljZG5zLT5kZXNpcmVkX2Ry X21vZGUgPSBkcl9tb2RlOwo+ICsJY2Rucy0+ZHJfbW9kZSA9IGRyX21vZGU7Cj4gKwkvKgo+ICsJ ICogZHJfbW9kZSBjb3VsZCBiZSBjaGFuZ2Ugc28gRFJEIG11c3QgdXBkYXRlIGNvbnRyb2xsZXIK PiArCSAqIGNvbmZpZ3VyYXRpb24KPiArCSAqLwo+ICsJcmV0ID0gY2RuczNfZHJkX3VwZGF0ZV9t b2RlKGNkbnMpOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIGVycjsKPiArCj4gKwljZG5zLT5yb2xl ID0gY2RuczNfZ2V0X2luaXRpYWxfcm9sZShjZG5zKTsKPiArCj4gKwlyZXQgPSBjZG5zM19yb2xl X3N0YXJ0KGNkbnMsIGNkbnMtPnJvbGUpOwo+ICsJaWYgKHJldCkgewo+ICsJCWRldl9lcnIoZGV2 LCAiY2FuJ3Qgc3RhcnQgJXMgcm9sZVxuIiwKPiArCQkJY2RuczNfZ2V0X2N1cnJlbnRfcm9sZV9k cml2ZXIoY2RucyktPm5hbWUpOwo+ICsJCWdvdG8gZXJyOwo+ICsJfQo+ICsKPiArCXJldHVybiBy ZXQ7Cj4gK2VycjoKPiArCWNkbnMzX2V4aXRfcm9sZXMoY2Rucyk7Cj4gKwlyZXR1cm4gcmV0Owo+ ICt9Cj4gKwo+ICsvKioKPiArICogY2RzbjNfZ2V0X3JlYWxfcm9sZSAtIGdldCByZWFsIHJvbGUg b2YgY29udHJvbGxlciBiYXNlZCBvbiBoYXJkd2FyZSBzZXR0aW5ncy4KPiArICogQGNkbnM6IFBv aW50ZXIgdG8gY2RuczMgc3RydWN0dXJlCj4gKyAqCj4gKyAqIFJldHVybnMgcm9sZQo+ICsgKi8K PiArZW51bSBjZG5zM19yb2xlcyBjZHNuM19nZXRfcmVhbF9yb2xlKHN0cnVjdCBjZG5zMyAqY2Ru cykKPiArewo+ICsJZW51bSBjZG5zM19yb2xlcyByb2xlID0gQ0ROUzNfUk9MRV9FTkQ7Cj4gKwo+ ICsJaWYgKGNkbnMtPmN1cnJlbnRfZHJfbW9kZSA9PSBVU0JfRFJfTU9ERV9PVEcpIHsKPiArCQlp ZiAoY2RuczNfZ2V0X2lkKGNkbnMpKQo+ICsJCQlyb2xlID0gQ0ROUzNfUk9MRV9HQURHRVQ7Cj4g KwkJZWxzZQo+ICsJCQlyb2xlID0gQ0ROUzNfUk9MRV9IT1NUOwo+ICsJfSBlbHNlIHsKPiArCQlp ZiAoY2RuczNfaXNfaG9zdChjZG5zKSkKPiArCQkJcm9sZSA9IENETlMzX1JPTEVfSE9TVDsKPiAr CQlpZiAoY2RuczNfaXNfZGV2aWNlKGNkbnMpKQo+ICsJCQlyb2xlID0gQ0ROUzNfUk9MRV9HQURH RVQ7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHJvbGU7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBjZG5z M19yb2xlX3N3aXRjaCAtIHdvcmsgcXVldWUgaGFuZGxlciBmb3Igcm9sZSBzd2l0Y2gKPiArICoK PiArICogQHdvcms6IHdvcmsgcXVldWUgaXRlbSBzdHJ1Y3R1cmUKPiArICoKPiArICogSGFuZGxl cyBiZWxvdyBldmVudHM6Cj4gKyAqIC0gUm9sZSBzd2l0Y2ggZm9yIGR1YWwtcm9sZSBkZXZpY2Vz Cj4gKyAqIC0gQ0ROUzNfUk9MRV9HQURHRVQgPC0tPiBDRE5TM19ST0xFX0VORCBmb3IgcGVyaXBo ZXJhbC1vbmx5IGRldmljZXMKPiArICovCj4gK3N0YXRpYyB2b2lkIGNkbnMzX3JvbGVfc3dpdGNo KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKPiArewo+ICsJZW51bSBjZG5zM19yb2xlcyByb2xl ID0gQ0ROUzNfUk9MRV9FTkQ7Cj4gKwlzdHJ1Y3QgY2RuczNfcm9sZV9kcml2ZXIgKnJvbGVfZHJ2 Owo+ICsJZW51bSBjZG5zM19yb2xlcyBjdXJyZW50X3JvbGU7Cj4gKwlzdHJ1Y3QgY2RuczMgKmNk bnM7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwljZG5zID0gY29udGFpbmVyX29mKHdvcmssIHN0 cnVjdCBjZG5zMywgcm9sZV9zd2l0Y2hfd3EpOwo+ICsKPiArCS8qIER1cmluZyBzd2l0Y2hpbmcg Y2Rucy0+cm9sZSBjYW4gYmUgZGlmZmVyZW50IHRoZW4gcm9sZSAqLwo+ICsJcm9sZSA9IGNkc24z X2dldF9yZWFsX3JvbGUoY2Rucyk7Cj4gKwo+ICsJcm9sZV9kcnYgPSBjZG5zM19nZXRfY3VycmVu dF9yb2xlX2RyaXZlcihjZG5zKTsKPiArCj4gKwlwbV9ydW50aW1lX2dldF9zeW5jKGNkbnMtPmRl dik7Cj4gKwo+ICsJLyogRGlzYWJsZSBjdXJyZW50IHJvbGUuIFRoaXMgc3RhdGUgY2FuIGJlIGZv cmNlZCBmcm9tIHVzZXIgc3BhY2UuICovCj4gKwlpZiAoY2Rucy0+ZGVidWdfZGlzYWJsZSAmJiBy b2xlX2Rydi0+c3RhdGUgPT0gQ0ROUzNfUk9MRV9TVEFURV9BQ1RJVkUpIHsKPiArCQljZG5zM19y b2xlX3N0b3AoY2Rucyk7Cj4gKwkJZ290byBleGl0Owo+ICsJfQo+ICsKPiArCS8qIERvIG5vdGhp bmcgaWYgbm90aGluZyBjaGFuZ2VkICovCj4gKwlpZiAoY2Rucy0+cm9sZSA9PSByb2xlICYmIHJv bGVfZHJ2LT5zdGF0ZSA9PSBDRE5TM19ST0xFX1NUQVRFX0FDVElWRSkKPiArCQlnb3RvIGV4aXQ7 Cj4gKwo+ICsJY2RuczNfcm9sZV9zdG9wKGNkbnMpOwo+ICsKPiArCXJvbGUgPSBjZHNuM19nZXRf cmVhbF9yb2xlKGNkbnMpOwo+ICsKPiArCWN1cnJlbnRfcm9sZSA9IGNkbnMtPnJvbGU7Cj4gKwlk ZXZfZGJnKGNkbnMtPmRldiwgIlN3aXRjaGluZyByb2xlIik7Cj4gKwo+ICsJcmV0ID0gY2RuczNf cm9sZV9zdGFydChjZG5zLCByb2xlKTsKPiArCWlmIChyZXQpIHsKPiArCQkvKiBCYWNrIHRvIGN1 cnJlbnQgcm9sZSAqLwo+ICsJCWRldl9lcnIoY2Rucy0+ZGV2LCAic2V0ICVkIGhhcyBmYWlsZWQs IGJhY2sgdG8gJWRcbiIsCj4gKwkJCXJvbGUsIGN1cnJlbnRfcm9sZSk7Cj4gKwkJY2RuczNfcm9s ZV9zdGFydChjZG5zLCBjdXJyZW50X3JvbGUpOwo+ICsJfQo+ICtleGl0Ogo+ICsJcG1fcnVudGlt ZV9wdXRfc3luYyhjZG5zLT5kZXYpOwo+ICt9Cj4gKwo+ICsvKioKPiArICogY2RuczNfcHJvYmUg LSBwcm9iZSBmb3IgY2RuczMgY29yZSBkZXZpY2UKPiArICogQHBkZXY6IFBvaW50ZXIgdG8gY2Ru czMgY29yZSBwbGF0Zm9ybSBkZXZpY2UKPiArICoKPiArICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mg b3RoZXJ3aXNlIG5lZ2F0aXZlIGVycm5vCj4gKyAqLwo+ICtzdGF0aWMgaW50IGNkbnMzX3Byb2Jl KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2UgKmRl diA9ICZwZGV2LT5kZXY7Cj4gKwlzdHJ1Y3QgcmVzb3VyY2UJKnJlczsKPiArCXN0cnVjdCBjZG5z MyAqY2RuczsKPiArCXZvaWQgX19pb21lbSAqcmVnczsKPiArCWludCByZXQ7Cj4gKwo+ICsJY2Ru cyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqY2RucyksIEdGUF9LRVJORUwpOwo+ICsJaWYg KCFjZG5zKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWNkbnMtPmRldiA9IGRldjsKPiAr Cj4gKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBjZG5zKTsKPiArCj4gKwlyZXMgPSBwbGF0 Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOwo+ICsJaWYgKCFyZXMp IHsKPiArCQlkZXZfZXJyKGRldiwgIm1pc3NpbmcgSVJRXG4iKTsKPiArCQlyZXR1cm4gLUVOT0RF VjsKPiArCX0KPiArCWNkbnMtPmlycSA9IHJlcy0+c3RhcnQ7Cj4gKwo+ICsJY2Rucy0+eGhjaV9y ZXNbMF0gPSAqcmVzOwo+ICsKPiArCS8qCj4gKwkgKiBSZXF1ZXN0IG1lbW9yeSByZWdpb24KPiAr CSAqIHJlZ2lvbi0wOiB4SENJCj4gKwkgKiByZWdpb24tMTogUGVyaXBoZXJhbAo+ICsJICogcmVn aW9uLTI6IE9URyByZWdpc3RlcnMKPiArCSAqLwp0aGUgY29tbWVudCBzaG91bGQgYmUgbW9kaWZp ZWQgb3IgcmVtb3ZlZCBpZiBub3QgbmVjZXNzYXJ5IHdoZW4gY29kZXMKY2hhbmdlZC4KPiArCXJl cyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJ4 aGNpIik7Cj4gKwlpZiAoIXJlcykKPiArCQlyZXR1cm4gLUVOWElPOwo+ICsKPiArCWNkbnMtPnho Y2lfcmVzWzFdID0gKnJlczsKPiArCj4gKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnlu YW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAiZGV2Iik7Cj4gKwlyZWdzID0gZGV2bV9pb3JlbWFw X3Jlc291cmNlKGRldiwgcmVzKTsKPiArCWlmIChJU19FUlIocmVncykpCj4gKwkJcmV0dXJuIFBU Ul9FUlIocmVncyk7Cj4gKwljZG5zLT5kZXZfcmVncwk9IHJlZ3M7Cj4gKwo+ICsJcmVzID0gcGxh dGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgIm90ZyIpOwo+ ICsJaWYgKCFyZXMpCj4gKwkJcmV0dXJuIC1FTlhJTzsKPiArCj4gKwljZG5zLT5vdGdfcmVzID0g KnJlczsKPiArCj4gKwltdXRleF9pbml0KCZjZG5zLT5tdXRleCk7Cj4gKwo+ICsJY2Rucy0+cGh5 ID0gZGV2bV9waHlfb3B0aW9uYWxfZ2V0KGRldiwgImNkbnMzLHVzYnBoeSIpOwo+ICsJaWYgKElT X0VSUihjZG5zLT5waHkpKQo+ICsJCXJldHVybiBQVFJfRVJSKGNkbnMtPnBoeSk7Cj4gKwo+ICsJ cGh5X2luaXQoY2Rucy0+cGh5KTsKY2hlY2sgdGhlIHJldHVybiB2YWx1ZT8gYW5kCkl0J3MgYmV0 dGVyIHRvIGNhbGwgcGh5X3Bvd2VyX29uKCkgaGVyZSBldmVuIGlmIHRoZSBwaHkgZHJpdmVyIGRv ZXNuJ3QKcHJvdmlkZSBwb3dlcl9vbigpCgo+ICsKPiArCUlOSVRfV09SSygmY2Rucy0+cm9sZV9z d2l0Y2hfd3EsIGNkbnMzX3JvbGVfc3dpdGNoKTsKPiArCj4gKwlyZXQgPSBjZG5zM19kcmRfaW5p dChjZG5zKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBlcnI7Cj4gKwo+ICsJcmV0ID0gY2RuczNf Y29yZV9pbml0X3JvbGUoY2Rucyk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gZXJyOwo+ICsKPiAr CWNkbnMzX2RlYnVnZnNfaW5pdChjZG5zKTsKPiArCWRldmljZV9zZXRfd2FrZXVwX2NhcGFibGUo ZGV2LCB0cnVlKTsKPiArCXBtX3J1bnRpbWVfc2V0X2FjdGl2ZShkZXYpOwo+ICsJcG1fcnVudGlt ZV9lbmFibGUoZGV2KTsKPiArCj4gKwkvKgo+ICsJICogVGhlIGNvbnRyb2xsZXIgbmVlZHMgbGVz cyB0aW1lIGJldHdlZW4gYnVzIGFuZCBjb250cm9sbGVyIHN1c3BlbmQsCj4gKwkgKiBhbmQgd2Ug YWxzbyBuZWVkcyBhIHNtYWxsIGRlbGF5IHRvIGF2b2lkIGZyZXF1ZW50bHkgZW50ZXJpbmcgbG93 Cj4gKwkgKiBwb3dlciBtb2RlLgo+ICsJICovCj4gKwlwbV9ydW50aW1lX3NldF9hdXRvc3VzcGVu ZF9kZWxheShkZXYsIDIwKTsKPiArCXBtX3J1bnRpbWVfbWFya19sYXN0X2J1c3koZGV2KTsKPiAr CXBtX3J1bnRpbWVfdXNlX2F1dG9zdXNwZW5kKGRldik7Cj4gKwlkZXZfZGJnKGRldiwgIkNhZGVu Y2UgVVNCMyBjb3JlOiBwcm9iZSBzdWNjZWVkXG4iKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArCj4g K2VycjoKPiArCXBoeV9leGl0KGNkbnMtPnBoeSk7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ ICsvKioKPiArICogY2RuczNfcmVtb3ZlIC0gdW5iaW5kIGRyZCBkcml2ZXIgYW5kIGNsZWFuIHVw Cj4gKyAqIEBwZGV2OiBQb2ludGVyIHRvIExpbnV4IHBsYXRmb3JtIGRldmljZQo+ICsgKgo+ICsg KiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvdGhlcndpc2UgbmVnYXRpdmUgZXJybm8KPiArICovCj4g K3N0YXRpYyBpbnQgY2RuczNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4g K3sKPiArCXN0cnVjdCBjZG5zMyAqY2RucyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwo+ ICsKPiArCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJnBkZXYtPmRldik7Cj4gKwlwbV9ydW50aW1lX2Rp c2FibGUoJnBkZXYtPmRldik7Cj4gKwlwbV9ydW50aW1lX3B1dF9ub2lkbGUoJnBkZXYtPmRldik7 Cj4gKwljZG5zM19kZWJ1Z2ZzX2V4aXQoY2Rucyk7Cj4gKwljZG5zM19leGl0X3JvbGVzKGNkbnMp Owo+ICsJcGh5X2V4aXQoY2Rucy0+cGh5KTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICsjaWZk ZWYgQ09ORklHX09GCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX2NkbnMz X21hdGNoW10gPSB7Cj4gKwl7IC5jb21wYXRpYmxlID0gImNkbnMsdXNiMy0xLjAuMCIgfSwKPiAr CXsgLmNvbXBhdGlibGUgPSAiY2Rucyx1c2IzLTEuMC4xIiB9LAo+ICsJeyB9LAo+ICt9Owo+ICtN T0RVTEVfREVWSUNFX1RBQkxFKG9mLCBvZl9jZG5zM19tYXRjaCk7Cj4gKyNlbmRpZgo+ICsKPiAr c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgY2RuczNfZHJpdmVyID0gewo+ICsJLnByb2Jl CQk9IGNkbnMzX3Byb2JlLAo+ICsJLnJlbW92ZQkJPSBjZG5zM19yZW1vdmUsCj4gKwkuZHJpdmVy CQk9IHsKPiArCQkubmFtZQk9ICJjZG5zLXVzYjMiLAo+ICsJCS5vZl9tYXRjaF90YWJsZQk9IG9m X21hdGNoX3B0cihvZl9jZG5zM19tYXRjaCksCj4gKwl9LAo+ICt9Owo+ICsKPiArbW9kdWxlX3Bs YXRmb3JtX2RyaXZlcihjZG5zM19kcml2ZXIpOwo+ICsKPiArTU9EVUxFX0FMSUFTKCJwbGF0Zm9y bTpjZG5zMyIpOwo+ICtNT0RVTEVfQVVUSE9SKCJQYXdlbCBMYXN6Y3phayA8cGF3ZWxsQGNhZGVu Y2UuY29tPiIpOwo+ICtNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Cj4gK01PRFVMRV9ERVNDUklQ VElPTigiQ2FkZW5jZSBVU0IzIERSRCBDb250cm9sbGVyIERyaXZlciIpOwo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL3VzYi9jZG5zMy9jb3JlLmggYi9kcml2ZXJzL3VzYi9jZG5zMy9jb3JlLmgKPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uZmI0YjM5MjA2MTU4Cj4g LS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvdXNiL2NkbnMzL2NvcmUuaAo+IEBAIC0wLDAg KzEsMTE2IEBACj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCj4gKy8q Cj4gKyAqIENhZGVuY2UgVVNCU1MgRFJEIEhlYWRlciBGaWxlLgo+ICsgKgo+ICsgKiBDb3B5cmln aHQgKEMpIDIwMTctMjAxOCBOWFAKPiArICogQ29weXJpZ2h0IChDKSAyMDE4IENhZGVuY2UuCj4g KyAqCj4gKyAqIEF1dGhvcnM6IFBldGVyIENoZW4gPHBldGVyLmNoZW5AbnhwLmNvbT4KPiArICog ICAgICAgICAgUGF3ZWwgTGFzemN6YWsgPHBhd2VsbEBjYWRlbmNlLmNvbT4KPiArICovCj4gKyNp bmNsdWRlIDxsaW51eC91c2Ivb3RnLmg+Cj4gKwo+ICsjaWZuZGVmIF9fTElOVVhfQ0ROUzNfQ09S RV9ICj4gKyNkZWZpbmUgX19MSU5VWF9DRE5TM19DT1JFX0gKPiArCj4gK3N0cnVjdCBjZG5zMzsK PiArZW51bSBjZG5zM19yb2xlcyB7Cj4gKwlDRE5TM19ST0xFX0hPU1QgPSAwLAo+ICsJQ0ROUzNf Uk9MRV9HQURHRVQsCj4gKwlDRE5TM19ST0xFX0VORCwKPiArfTsKPiArCj4gKy8qKgo+ICsgKiBz dHJ1Y3QgY2RuczNfcm9sZV9kcml2ZXIgLSBob3N0L2dhZGdldCByb2xlIGRyaXZlcgo+ICsgKiBA c3RhcnQ6IHN0YXJ0IHRoaXMgcm9sZQo+ICsgKiBAc3RvcDogc3RvcCB0aGlzIHJvbGUKPiArICog QHN1c3BlbmQ6IHN1c3BlbmQgY2FsbGJhY2sgZm9yIHRoaXMgcm9sZQo+ICsgKiBAcmVzdW1lOiBy ZXN1bWUgY2FsbGJhY2sgZm9yIHRoaXMgcm9sZQo+ICsgKiBAaXJxOiBpcnEgaGFuZGxlciBmb3Ig dGhpcyByb2xlCm5vIGlycSBtZW1iZXIsCj4gKyAqIEBuYW1lOiByb2xlIG5hbWUgc3RyaW5nICho b3N0L2dhZGdldCkKPiArICogQHN0YXRlOiBjdXJyZW50IHN0YXRlCj4gKyAqLwo+ICtzdHJ1Y3Qg Y2RuczNfcm9sZV9kcml2ZXIgewo+ICsJaW50ICgqc3RhcnQpKHN0cnVjdCBjZG5zMyAqY2Rucyk7 Cj4gKwl2b2lkICgqc3RvcCkoc3RydWN0IGNkbnMzICpjZG5zKTsKPiArCWludCAoKnN1c3BlbmQp KHN0cnVjdCBjZG5zMyAqY2RucywgYm9vbCBkb193YWtldXApOwo+ICsJaW50ICgqcmVzdW1lKShz dHJ1Y3QgY2RuczMgKmNkbnMsIGJvb2wgaGliZXJuYXRlZCk7Cj4gKwljb25zdCBjaGFyICpuYW1l Owo+ICsjZGVmaW5lIENETlMzX1JPTEVfU1RBVEVfSU5BQ1RJVkUJMAo+ICsjZGVmaW5lIENETlMz X1JPTEVfU1RBVEVfQUNUSVZFCQkxCj4gKwlpbnQgc3RhdGU7Cj4gK307Cj4gKwo+ICsjZGVmaW5l IENETlMzX1hIQ0lfUkVTT1VSQ0VTX05VTQkyCj4gKy8qKgo+ICsgKiBzdHJ1Y3QgY2RuczMgLSBS ZXByZXNlbnRhdGlvbiBvZiBDYWRlbmNlIFVTQjMgRFJEIGNvbnRyb2xsZXIuCj4gKyAqIEBkZXY6 IHBvaW50ZXIgdG8gQ2FkZW5jZSBkZXZpY2Ugc3RydWN0Cj4gKyAqIEB4aGNpX3JlZ3M6IHBvaW50 ZXIgdG8gYmFzZSBvZiB4aGNpIHJlZ2lzdGVycwo+ICsgKiBAeGhjaV9yZXM6IHRoZSByZXNvdXJj ZSBmb3IgeGhjaQo+ICsgKiBAZGV2X3JlZ3M6IHBvaW50ZXIgdG8gYmFzZSBvZiBkZXYgcmVnaXN0 ZXJzCj4gKyAqIEBvdGdfcmVnczogcG9pbnRlciB0byBiYXNlIG9mIG90ZyByZWdpc3RlcnMKbm90 IHBvaW50ZXIKPiArICogQGlycTogaXJxIG51bWJlciBmb3IgY29udHJvbGxlcgo+ICsgKiBAcm9s ZXM6IGFycmF5IG9mIHN1cHBvcnRlZCByb2xlcyBmb3IgdGhpcyBjb250cm9sbGVyCj4gKyAqIEBy b2xlOiBjdXJyZW50IHJvbGUKPiArICogQGhvc3RfZGV2OiB0aGUgY2hpbGQgaG9zdCBkZXZpY2Ug cG9pbnRlciBmb3IgY2RuczMgY29yZQo+ICsgKiBAZ2FkZ2V0X2RldjogdGhlIGNoaWxkIGdhZGdl dCBkZXZpY2UgcG9pbnRlciBmb3IgY2RuczMgY29yZQo+ICsgKiBAdXNiOiBwaHkgZm9yIHRoaXMg Y29udHJvbGxlcgo+ICsgKiBAcm9sZV9zd2l0Y2hfd3E6IHdvcmsgcXVldWUgaXRlbSBmb3Igcm9s ZSBzd2l0Y2gKPiArICogQGluX2xwbTogdGhlIGNvbnRyb2xsZXIgaW4gbG93IHBvd2VyIG1vZGUK PiArICogQHdha2V1cF9pbnQ6IHRoZSB3YWtldXAgaW50ZXJydXB0Cj4gKyAqIEBtdXRleDogdGhl IG11dGV4IGZvciBjb25jdXJyZW50IGNvZGUgYXQgZHJpdmVyCj4gKyAqIEBkcl9tb2RlOiBzdXBw b3J0ZWQgbW9kZSBvZiBvcGVyYXRpb24gaXQgY2FuIGJlIG9ubHkgSG9zdCwgb25seSBEZXZpY2UK PiArICogICAgICAgICAgIG9yIE9URyBtb2RlIHRoYXQgYWxsb3cgdG8gc3dpdGNoIGJldHdlZW4g RGV2aWNlIGFuZCBIb3N0IG1vZGUuCj4gKyAqICAgICAgICAgICBUaGlzIGZpZWxkIGJhc2VkIG9u IGZpcm13YXJlIHNldHRpbmcsIGtlcm5lbCBjb25maWd1cmF0aW9uCj4gKyAqICAgICAgICAgICBh bmQgaGFyZHdhcmUgY29uZmlndXJhdGlvbi4KPiArICogQGN1cnJlbnRfZHJfbW9kZTogY3VycmVu dCBtb2RlIG9mIG9wZXJhdGlvbiB3aGVuIGluIGR1YWwtcm9sZSBtb2RlCj4gKyAqIEBkZXNpcmVk X2RyX21vZGU6IGRlc2lyZWQgbW9kZSBvZiBvcGVyYXRpb24gd2hlbiBpbiBkdWFsLXJvbGUgbW9k ZS4KPiArICogICAgICAgICAgIFRoaXMgdmFsdWUgY2FuIGJlIGNoYW5nZWQgZHVyaW5nIHJ1bnRp bWUuCj4gKyAqICAgICAgICAgICBBdmFpbGFibGUgb3B0aW9ucyBkZXBlbmRzIG9uICBkcl9tb2Rl Ogo+ICsgKiAgICAgICAgICAgZHJfbW9kZSAgICAgICAgICAgICAgICAgfCAgZGVzaXJlZF9kcl9t b2RlIGFuZCBjdXJyZW50X2RyX21vZGUKPiArICogICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiArICogICAg ICAgICAgIFVTQl9EUl9NT0RFX0hPU1QgICAgICAgIHwgb25seSBVU0JfRFJfTU9ERV9IT1NUCj4g KyAqICAgICAgICAgICBVU0JfRFJfTU9ERV9QRVJJUEhFUkFMICB8IG9ubHkgVVNCX0RSX01PREVf UEVSSVBIRVJBTAo+ICsgKiAgICAgICAgICAgVVNCX0RSX01PREVfT1RHICAgICAgICAgfCBvbmx5 IFVTQl9EUl9NT0RFX0hPU1QKPiArICogICAgICAgICAgIFVTQl9EUl9NT0RFX09URyAgICAgICAg IHwgb25seSBVU0JfRFJfTU9ERV9QRVJJUEhFUkFMCj4gKyAqICAgICAgICAgICBVU0JfRFJfTU9E RV9PVEcgICAgICAgICB8IFVTQl9EUl9NT0RFX09URwo+ICsgKgo+ICsgKiAgICAgICAgICAgRGVz aXJlZF9kcl9yb2xlIGNhbiBiZSBjaGFuZ2VkIGJ5IG1lYW5zIG9mIGRlYnVnZnMuCj4gKyAqIEBy b290OiBkZWJ1Z2ZzIHJvb3QgZm9sZGVyIHBvaW50ZXIKPiArICogQGRlYnVnX2Rpc2FibGU6Cj4g KyAqLwo+ICtzdHJ1Y3QgY2RuczMgewo+ICsJc3RydWN0IGRldmljZQkJCSpkZXY7Cj4gKwl2b2lk IF9faW9tZW0JCQkqeGhjaV9yZWdzOwo+ICsJc3RydWN0IHJlc291cmNlCQkJeGhjaV9yZXNbQ0RO UzNfWEhDSV9SRVNPVVJDRVNfTlVNXTsKPiArCXN0cnVjdCBjZG5zM191c2JfcmVncyBfX2lvbWVt CSpkZXZfcmVnczsKPiArCj4gKwlzdHJ1Y3QgcmVzb3VyY2UJCQlvdGdfcmVzOwo+ICsJc3RydWN0 IGNkbnMzX290Z19sZWdhY3lfcmVncwkqb3RnX3YwX3JlZ3M7Cj4gKwlzdHJ1Y3QgY2RuczNfb3Rn X3JlZ3MJCSpvdGdfdjFfcmVnczsKPiArCXN0cnVjdCBjZG5zM19vdGdfY29tbW9uX3JlZ3MJKm90 Z19yZWdzOwo+ICsjZGVmaW5lIENETlMzX0NPTlRST0xMRVJfVjAJMAo+ICsjZGVmaW5lIENETlMz X0NPTlRST0xMRVJfVjEJMQo+ICsJdTMyCQkJCXZlcnNpb247Cj4gKwo+ICsJaW50CQkJCWlycTsK PiArCXN0cnVjdCBjZG5zM19yb2xlX2RyaXZlcgkqcm9sZXNbQ0ROUzNfUk9MRV9FTkRdOwo+ICsJ ZW51bSBjZG5zM19yb2xlcwkJcm9sZTsKPiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJCSpob3N0 X2RldjsKPiArCXN0cnVjdCBjZG5zM19kZXZpY2UJCSpnYWRnZXRfZGV2Owo+ICsJc3RydWN0IHBo eQkJCSpwaHk7CkRvZXMgdGhlIHNpbmdsZSBwaHkgc3VwcG9ydCBib3RoIEhTIGFuZCBTUz8KPiAr CXN0cnVjdCB3b3JrX3N0cnVjdAkJcm9sZV9zd2l0Y2hfd3E7Cj4gKwlpbnQJCQkJaW5fbHBtOjE7 Cj4gKwlpbnQJCQkJd2FrZXVwX2ludDoxOwo+ICsJLyogbXV0ZXh0IHVzZWQgaW4gd29ya3F1ZXVl Ki8KPiArCXN0cnVjdCBtdXRleAkJCW11dGV4Owo+ICsJZW51bSB1c2JfZHJfbW9kZQkJZHJfbW9k ZTsKPiArCWVudW0gdXNiX2RyX21vZGUJCWN1cnJlbnRfZHJfbW9kZTsKPiArCWVudW0gdXNiX2Ry X21vZGUJCWRlc2lyZWRfZHJfbW9kZTsKPiArCXN0cnVjdCBkZW50cnkJCQkqcm9vdDsKPiArCWlu dAkJCQlkZWJ1Z19kaXNhYmxlOjE7Cj4gK307Cj4gKwo+ICt2b2lkIGNkbnMzX3JvbGVfc3RvcChz dHJ1Y3QgY2RuczMgKmNkbnMpOwo+ICsKPiArI2VuZGlmIC8qIF9fTElOVVhfQ0ROUzNfQ09SRV9I ICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NkbnMzL2RlYnVnLmggYi9kcml2ZXJzL3Vz Yi9jZG5zMy9kZWJ1Zy5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAw MDAuLjE5MjllZGIzYTUyMQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL3VzYi9jZG5z My9kZWJ1Zy5oCj4gQEAgLTAsMCArMSwxNjggQEAKPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAgKi8KPiArLyoKPiArICogQ2FkZW5jZSBVU0JTUyBEUkQgRHJpdmVyLgo+ICsg KiBEZWJ1ZyBoZWFkZXIgZmlsZS4KPiArICoKPiArICogQ29weXJpZ2h0IChDKSAyMDE4IENhZGVu Y2UuCj4gKyAqCj4gKyAqIEF1dGhvcjogUGF3ZWwgTGFzemN6YWsgPHBhd2VsbEBjYWRlbmNlLmNv bT4KPiArICovCj4gKyNpZm5kZWYgX19MSU5VWF9DRE5TM19ERUJVRwo+ICsjZGVmaW5lIF9fTElO VVhfQ0ROUzNfREVCVUcKPiArCj4gKyNpbmNsdWRlICJjb3JlLmgiCj4gKwo+ICtzdGF0aWMgaW5s aW5lIGNoYXIgKmNkbnMzX2RlY29kZV91c2JfaXJxKGNoYXIgKnN0ciwKPiArCQkJCQkgZW51bSB1 c2JfZGV2aWNlX3NwZWVkIHNwZWVkLAo+ICsJCQkJCSB1MzIgdXNiX2lzdHMpCj4gK3sKPiArCWlu dCByZXQ7Cj4gKwo+ICsJcmV0ID0gc3ByaW50ZihzdHIsICJJUlEgJTA4eCA9ICIsIHVzYl9pc3Rz KTsKPiArCj4gKwlpZiAodXNiX2lzdHMgJiAoVVNCX0lTVFNfQ09OMkkgfCBVU0JfSVNUU19DT05J KSkgewo+ICsJCXJldCArPSBzcHJpbnRmKHN0ciArIHJldCwgIkNvbm5lY3Rpb24gJXNcbiIsCj4g KwkJCSAgICAgICB1c2Jfc3BlZWRfc3RyaW5nKHNwZWVkKSk7Cj4gKwl9Cj4gKwlpZiAodXNiX2lz dHMgJiBVU0JfSVNUU19DT04ySSB8fCB1c2JfaXN0cyAmIFVTQl9JU1RTX0NPTkkpCj4gKwkJcmV0 ICs9IHNwcmludGYoc3RyICsgcmV0LCAiRGlzY29ubmVjdGlvbiAiKTsKPiArCWlmICh1c2JfaXN0 cyAmIFVTQl9JU1RTX0wyRU5USSkKPiArCQlyZXQgKz0gc3ByaW50ZihzdHIgKyByZXQsICJzdXNw ZW5kZWQgIik7Cj4gKwo+ICsJaWYgKHVzYl9pc3RzICYgVVNCX0lTVFNfTDJFWFRJKQo+ICsJCXJl dCArPSBzcHJpbnRmKHN0ciArIHJldCwgIkwyIGV4aXQgIik7Cj4gKwlpZiAodXNiX2lzdHMgJiBV U0JfSVNUU19VM0VYVEkpCj4gKwkJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LCAiVTMgZXhpdCAi KTsKPiArCWlmICh1c2JfaXN0cyAmIFVTQl9JU1RTX1VXUkVTSSkKPiArCQlyZXQgKz0gc3ByaW50 ZihzdHIgKyByZXQsICJXYXJtIFJlc2V0ICIpOwo+ICsJaWYgKHVzYl9pc3RzICYgVVNCX0lTVFNf VUhSRVNJKQo+ICsJCXJldCArPSBzcHJpbnRmKHN0ciArIHJldCwgIkhvdCBSZXNldCAiKTsKPiAr CWlmICh1c2JfaXN0cyAmIFVTQl9JU1RTX1UyUkVTSSkKPiArCQlyZXQgKz0gc3ByaW50ZihzdHIg KyByZXQsICJSZXNldCIpOwo+ICsKPiArCXJldHVybiBzdHI7Cj4gK30KPiArCj4gK3N0YXRpYyBp bmxpbmUgIGNoYXIgKmNkbnMzX2RlY29kZV9lcF9pcnEoY2hhciAqc3RyLAo+ICsJCQkJCSB1MzIg ZXBfc3RzLAo+ICsJCQkJCSBjb25zdCBjaGFyICplcF9uYW1lKQo+ICt7Cj4gKwlpbnQgcmV0Owo+ ICsKPiArCXJldCA9IHNwcmludGYoc3RyLCAiSVJRIGZvciAlczogJTA4eCAiLCBlcF9uYW1lLCBl cF9zdHMpOwo+ICsKPiArCWlmIChlcF9zdHMgJiBFUF9TVFNfU0VUVVApCj4gKwkJcmV0ICs9IHNw cmludGYoc3RyICsgcmV0LCAiU0VUVVAgIik7Cj4gKwlpZiAoZXBfc3RzICYgRVBfU1RTX0lPQykK PiArCQlyZXQgKz0gc3ByaW50ZihzdHIgKyByZXQsICJJT0MgIik7Cj4gKwlpZiAoZXBfc3RzICYg RVBfU1RTX0lTUCkKPiArCQlyZXQgKz0gc3ByaW50ZihzdHIgKyByZXQsICJJU1AgIik7Cj4gKwlp ZiAoZXBfc3RzICYgRVBfU1RTX0RFU0NNSVMpCj4gKwkJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0 LCAiREVTQ01JUyAiKTsKPiArCWlmIChlcF9zdHMgJiBFUF9TVFNfU1RSRUFNUikKPiArCQlyZXQg Kz0gc3ByaW50ZihzdHIgKyByZXQsICJTVFJFQU1SICIpOwo+ICsJaWYgKGVwX3N0cyAmIEVQX1NU U19NRF9FWElUKQo+ICsJCXJldCArPSBzcHJpbnRmKHN0ciArIHJldCwgIk1EX0VYSVQgIik7Cj4g KwlpZiAoZXBfc3RzICYgRVBfU1RTX1RSQkVSUikKPiArCQlyZXQgKz0gc3ByaW50ZihzdHIgKyBy ZXQsICJUUkJFUlIgIik7Cj4gKwlpZiAoZXBfc3RzICYgRVBfU1RTX05SRFkpCj4gKwkJcmV0ICs9 IHNwcmludGYoc3RyICsgcmV0LCAiTlJEWSAiKTsKPiArCWlmIChlcF9zdHMgJiBFUF9TVFNfUFJJ TUUpCj4gKwkJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LCAiUFJJTUUgIik7Cj4gKwlpZiAoZXBf c3RzICYgRVBfU1RTX1NJREVSUikKPiArCQlyZXQgKz0gc3ByaW50ZihzdHIgKyByZXQsICJTSURF UlJUICIpOwo+ICsJaWYgKGVwX3N0cyAmIEVQX1NUU19PVVRTTU0pCj4gKwkJcmV0ICs9IHNwcmlu dGYoc3RyICsgcmV0LCAiT1VUU01NICIpOwo+ICsJaWYgKGVwX3N0cyAmIEVQX1NUU19JU09FUlIp Cj4gKwkJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LCAiSVNPRVJSICIpOwo+ICsJaWYgKGVwX3N0 cyAmIEVQX1NUU19JT1QpCj4gKwkJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LCAiSU9UICIpOwo+ ICsKPiArCXJldHVybiBzdHI7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgY2hhciAqY2RuczNf ZGVjb2RlX2VweF9pcnEoY2hhciAqc3RyLAo+ICsJCQkJCSBjaGFyICplcF9uYW1lLAo+ICsJCQkJ CSB1MzIgZXBfc3RzKQo+ICt7Cj4gKwlyZXR1cm4gY2RuczNfZGVjb2RlX2VwX2lycShzdHIsIGVw X3N0cywgZXBfbmFtZSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgY2hhciAqY2RuczNfZGVj b2RlX2VwMF9pcnEoY2hhciAqc3RyLAo+ICsJCQkJCSBpbnQgZGlyLAo+ICsJCQkJCSB1MzIgZXBf c3RzKQo+ICt7Cj4gKwlyZXR1cm4gY2RuczNfZGVjb2RlX2VwX2lycShzdHIsIGVwX3N0cywKPiAr CQkJCSAgIGRpciA/ICJlcDBJTiIgOiAiZXAwT1VUIik7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBE ZWJ1ZyBhIHRyYW5zZmVyIHJpbmcuCj4gKyAqCj4gKyAqIFByaW50cyBvdXQgYWxsIFRSQnMgaW4g dGhlIGVuZHBvaW50IHJpbmcsIGV2ZW4gdGhvc2UgYWZ0ZXIgdGhlIExpbmsgVFJCLgo+ICsgKi4K PiArICovCj4gK3N0YXRpYyBpbmxpbmUgY2hhciAqY2RuczNfZGJnX3Jpbmcoc3RydWN0IGNkbnMz X2VuZHBvaW50ICpwcml2X2VwLAo+ICsJCQkJICAgc3RydWN0IGNkbnMzX3RyYiAqcmluZywgY2hh ciAqc3RyKQo+ICt7Cj4gKwlkbWFfYWRkcl90IGFkZHIgPSBwcml2X2VwLT50cmJfcG9vbF9kbWE7 Cj4gKwlzdHJ1Y3QgY2RuczNfdHJiICp0cmI7Cj4gKwlpbnQgdHJiX3Blcl9zZWN0b3I7Cj4gKwlp bnQgcmV0ID0gMDsKPiArCWludCBpOwo+ICsKPiArCXRyYl9wZXJfc2VjdG9yID0gR0VUX1RSQlNf UEVSX1NFR01FTlQocHJpdl9lcC0+dHlwZSk7Cj4gKwo+ICsJdHJiID0gJnByaXZfZXAtPnRyYl9w b29sW3ByaXZfZXAtPmRlcXVldWVdOwo+ICsJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LCAiXG5c dFx0UmluZyBjb250ZW50cyBmb3IgJXM6IiwgcHJpdl9lcC0+bmFtZSk7Cj4gKwo+ICsJcmV0ICs9 IHNwcmludGYoc3RyICsgcmV0LAo+ICsJCSAgICAgICAiXG5cdFx0UmluZyBkZXEgaW5kZXg6ICVk LCB0cmI6ICVwICh2aXJ0KSwgMHglbGx4IChkbWEpXG4iLAo+ICsJCSAgICAgICBwcml2X2VwLT5k ZXF1ZXVlLCB0cmIsCj4gKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpY2RuczNfdHJiX3Zp cnRfdG9fZG1hKHByaXZfZXAsIHRyYikpOwo+ICsKPiArCXRyYiA9ICZwcml2X2VwLT50cmJfcG9v bFtwcml2X2VwLT5lbnF1ZXVlXTsKPiArCXJldCArPSBzcHJpbnRmKHN0ciArIHJldCwKPiArCQkg ICAgICAgIlx0XHRSaW5nIGVucSBpbmRleDogJWQsIHRyYjogJXAgKHZpcnQpLCAweCVsbHggKGRt YSlcbiIsCj4gKwkJICAgICAgIHByaXZfZXAtPmVucXVldWUsIHRyYiwKPiArCQkgICAgICAgKHVu c2lnbmVkIGxvbmcgbG9uZyljZG5zM190cmJfdmlydF90b19kbWEocHJpdl9lcCwgdHJiKSk7Cj4g Kwo+ICsJcmV0ICs9IHNwcmludGYoc3RyICsgcmV0LAo+ICsJCSAgICAgICAiXHRcdGZyZWUgdHJi czogJWQsIENDUz0lZCwgUENTPSVkXG4iLAo+ICsJCSAgICAgICBwcml2X2VwLT5mcmVlX3RyYnMs IHByaXZfZXAtPmNjcywgcHJpdl9lcC0+cGNzKTsKPiArCj4gKwlpZiAodHJiX3Blcl9zZWN0b3Ig PiBUUkJTX1BFUl9TRUdNRU5UKQo+ICsJCXRyYl9wZXJfc2VjdG9yID0gVFJCU19QRVJfU0VHTUVO VDsKPiArCj4gKwlpZiAodHJiX3Blcl9zZWN0b3IgPiBUUkJTX1BFUl9TRUdNRU5UKSB7Cj4gKwkJ c3ByaW50ZihzdHIgKyByZXQsICJcdFx0VG8gYmlnIHRyYW5zZmVyIHJpbmcgJWRcbiIsCj4gKwkJ CXRyYl9wZXJfc2VjdG9yKTsKPiArCQlyZXR1cm4gc3RyOwo+ICsJfQo+ICsKPiArCWZvciAoaSA9 IDA7IGkgPCB0cmJfcGVyX3NlY3RvcjsgKytpKSB7Cj4gKwkJdHJiID0gJnJpbmdbaV07Cj4gKwkJ cmV0ICs9IHNwcmludGYoc3RyICsgcmV0LAo+ICsJCQkiXHRcdEAlcGFkICUwOHggJTA4eCAlMDh4 XG4iLCAmYWRkciwKPiArCQkJbGUzMl90b19jcHUodHJiLT5idWZmZXIpLAo+ICsJCQlsZTMyX3Rv X2NwdSh0cmItPmxlbmd0aCksCj4gKwkJCWxlMzJfdG9fY3B1KHRyYi0+Y29udHJvbCkpOwo+ICsJ CWFkZHIgKz0gc2l6ZW9mKCp0cmIpOwo+ICsJfQo+ICsKPiArCXJldHVybiBzdHI7Cj4gK30KPiAr Cj4gK3ZvaWQgY2RuczNfZGJnKHN0cnVjdCBjZG5zM19kZXZpY2UgKnByaXZfZGV2LCBjb25zdCBj aGFyICpmbXQsIC4uLik7Cj4gKwo+ICsjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCj4gK3ZvaWQgY2Ru czNfZGVidWdmc19pbml0KHN0cnVjdCBjZG5zMyAqY2Rucyk7Cj4gK3ZvaWQgY2RuczNfZGVidWdm c19leGl0KHN0cnVjdCBjZG5zMyAqY2Rucyk7Cj4gKyNlbHNlCj4gK3ZvaWQgY2RuczNfZGVidWdm c19pbml0KHN0cnVjdCBjZG5zMyAqY2Rucyk7Cj4gK3sgIH0KPiArdm9pZCBjZG5zM19kZWJ1Z2Zz X2V4aXQoc3RydWN0IGNkbnMzICpjZG5zKTsKPiAreyAgfQo+ICsjZW5kaWYKPiArCj4gKyNlbmRp ZiAvKl9fTElOVVhfQ0ROUzNfREVCVUcqLwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jZG5z My9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL3VzYi9jZG5zMy9kZWJ1Z2ZzLmMKPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uZDhmY2Q5MGQwNWIzCj4gLS0tIC9kZXYvbnVs bAo+ICsrKyBiL2RyaXZlcnMvdXNiL2NkbnMzL2RlYnVnZnMuYwo+IEBAIC0wLDAgKzEsMTY0IEBA Cj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4gKy8qCj4gKyAqIENhZGVu Y2UgVVNCU1MgRFJEIENvbnRyb2xsZXIgRGVidWdGUyBmaWxlci4KPiArICoKPiArICogQ29weXJp Z2h0IChDKSAyMDE4IENhZGVuY2UuCj4gKyAqCj4gKyAqIEF1dGhvcjogUGF3ZWwgTGFzemN6YWsg PHBhd2VsbEBjYWRlbmNlLmNvbT4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvdHlwZXMu aD4KPiArI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3NlcV9m aWxlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+Cj4gKwo+ICsjaW5jbHVkZSAiY29y ZS5oIgo+ICsjaW5jbHVkZSAiZ2FkZ2V0LmgiCj4gKyNpbmNsdWRlICJkcmQuaCIKPiArCj4gK3N0 YXRpYyBpbnQgY2RuczNfbW9kZV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2Vk KQo+ICt7Cj4gKwlzdHJ1Y3QgY2RuczMgKmNkbnMgPSBzLT5wcml2YXRlOwo+ICsKPiArCXN3aXRj aCAoY2Rucy0+Y3VycmVudF9kcl9tb2RlKSB7Cj4gKwljYXNlIFVTQl9EUl9NT0RFX0hPU1Q6Cj4g KwkJc2VxX3B1dHMocywgImhvc3RcbiIpOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBVU0JfRFJfTU9E RV9QRVJJUEhFUkFMOgo+ICsJCXNlcV9wdXRzKHMsICJkZXZpY2VcbiIpOwo+ICsJCWJyZWFrOwo+ ICsJY2FzZSBVU0JfRFJfTU9ERV9PVEc6Cj4gKwkJc2VxX3B1dHMocywgIm90Z1xuIik7Cj4gKwkJ YnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCXNlcV9wdXRzKHMsICJVTktOT1dOIG1vZGVcbiIpOwo+ ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGNkbnMzX21vZGVf b3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKPiArewo+ICsJcmV0 dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGNkbnMzX21vZGVfc2hvdywgaW5vZGUtPmlfcHJpdmF0ZSk7 Cj4gK30KPiArCj4gK3N0YXRpYyBzc2l6ZV90IGNkbnMzX21vZGVfd3JpdGUoc3RydWN0IGZpbGUg KmZpbGUsCj4gKwkJCQljb25zdCBjaGFyIF9fdXNlciAqdWJ1ZiwKPiArCQkJCXNpemVfdCBjb3Vu dCwgbG9mZl90ICpwcG9zKQo+ICt7Cj4gKwlzdHJ1Y3Qgc2VxX2ZpbGUJICpzID0gZmlsZS0+cHJp dmF0ZV9kYXRhOwo+ICsJc3RydWN0IGNkbnMzICpjZG5zID0gcy0+cHJpdmF0ZTsKPiArCXUzMiBt b2RlID0gVVNCX0RSX01PREVfVU5LTk9XTjsKPiArCWNoYXIgYnVmWzMyXTsKPiArCj4gKwlpZiAo Y29weV9mcm9tX3VzZXIoJmJ1ZiwgdWJ1ZiwgbWluX3Qoc2l6ZV90LCBzaXplb2YoYnVmKSAtIDEs IGNvdW50KSkpCj4gKwkJcmV0dXJuIC1FRkFVTFQ7Cj4gKwo+ICsJaWYgKCFzdHJuY21wKGJ1Ziwg Imhvc3QiLCA0KSkgewo+ICsJCWlmIChjZG5zLT5kcl9tb2RlID09IFVTQl9EUl9NT0RFX0hPU1Qg fHwKPiArCQkgICAgY2Rucy0+ZHJfbW9kZSA9PSBVU0JfRFJfTU9ERV9PVEcpIHsKPiArCQkJbW9k ZSA9IFVTQl9EUl9NT0RFX0hPU1Q7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCWlmICghc3RybmNtcChi dWYsICJkZXZpY2UiLCA2KSkKPiArCQlpZiAoY2Rucy0+ZHJfbW9kZSA9PSBVU0JfRFJfTU9ERV9Q RVJJUEhFUkFMIHx8Cj4gKwkJICAgIGNkbnMtPmRyX21vZGUgPT0gVVNCX0RSX01PREVfT1RHKQo+ ICsJCQltb2RlID0gVVNCX0RSX01PREVfUEVSSVBIRVJBTDsKPiArCj4gKwlpZiAoIXN0cm5jbXAo YnVmLCAib3RnIiwgMykgJiYgY2Rucy0+ZHJfbW9kZSA9PSBVU0JfRFJfTU9ERV9PVEcpCj4gKwkJ bW9kZSA9IFVTQl9EUl9NT0RFX09URzsKPiArCj4gKwlpZiAobW9kZSA9PSBVU0JfRFJfTU9ERV9V TktOT1dOKSB7Cj4gKwkJZGV2X2VycihjZG5zLT5kZXYsICJGYWlsZWQ6IGluY29ycmVjdCBtb2Rl IHNldHRpbmdcbiIpOwo+ICsJCXJldHVybiAtRUZBVUxUOwo+ICsJfQo+ICsKPiArCWlmIChjZG5z LT5jdXJyZW50X2RyX21vZGUgIT0gbW9kZSkgewo+ICsJCWNkbnMtPmRlc2lyZWRfZHJfbW9kZSA9 IG1vZGU7Cj4gKwkJY2Rucy0+ZGVidWdfZGlzYWJsZSA9IDA7Cj4gKwkJY2RuczNfcm9sZV9zdG9w KGNkbnMpOwo+ICsJCWNkbnMzX2RyZF91cGRhdGVfbW9kZShjZG5zKTsKPiArCQlxdWV1ZV93b3Jr KHN5c3RlbV9mcmVlemFibGVfd3EsICZjZG5zLT5yb2xlX3N3aXRjaF93cSk7Cj4gKwl9Cj4gKwo+ ICsJcmV0dXJuIGNvdW50Owo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3Bl cmF0aW9ucyBjZG5zM19tb2RlX2ZvcHMgPSB7Cj4gKwkub3BlbgkJCT0gY2RuczNfbW9kZV9vcGVu LAo+ICsJLndyaXRlCQkJPSBjZG5zM19tb2RlX3dyaXRlLAo+ICsJLnJlYWQJCQk9IHNlcV9yZWFk LAo+ICsJLmxsc2VlawkJCT0gc2VxX2xzZWVrLAo+ICsJLnJlbGVhc2UJCT0gc2luZ2xlX3JlbGVh c2UsCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IGNkbnMzX2Rpc2FibGVfc2hvdyhzdHJ1Y3Qgc2Vx X2ZpbGUgKnMsIHZvaWQgKnVudXNlZCkKPiArewo+ICsJc3RydWN0IGNkbnMzICpjZG5zID0gcy0+ cHJpdmF0ZTsKPiArCj4gKwlpZiAoIWNkbnMtPmRlYnVnX2Rpc2FibGUpCj4gKwkJc2VxX3B1dHMo cywgIjBcbiIpOwo+ICsJZWxzZQo+ICsJCXNlcV9wdXRzKHMsICIxXG4iKTsKPiArCj4gKwlyZXR1 cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHNzaXplX3QgY2RuczNfZGlzYWJsZV93cml0ZShzdHJ1 Y3QgZmlsZSAqZmlsZSwKPiArCQkJCSAgIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLAo+ICsJCQkJ ICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCj4gK3sKPiArCXN0cnVjdCBzZXFfZmlsZQkg KnMgPSBmaWxlLT5wcml2YXRlX2RhdGE7Cj4gKwlzdHJ1Y3QgY2RuczMgKmNkbnMgPSBzLT5wcml2 YXRlOwo+ICsJYm9vbCBkaXNhYmxlOwo+ICsJY2hhciBidWZbMTZdOwo+ICsKPiArCWlmIChjb3B5 X2Zyb21fdXNlcigmYnVmLCB1YnVmLCBtaW5fdChzaXplX3QsIHNpemVvZihidWYpIC0gMSwgY291 bnQpKSkKPiArCQlyZXR1cm4gLUVGQVVMVDsKPiArCj4gKwlpZiAoa3N0cnRvYm9vbChidWYsICZk aXNhYmxlKSkgewo+ICsJCWRldl9lcnIoY2Rucy0+ZGV2LCAid3Jvbmcgc2V0dGluZ1xuIik7Cj4g KwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJaWYgKGRpc2FibGUgIT0gY2Rucy0+ZGVi dWdfZGlzYWJsZSkgewo+ICsJCWNkbnMtPmRlYnVnX2Rpc2FibGUgPSBkaXNhYmxlOwo+ICsJCXF1 ZXVlX3dvcmsoc3lzdGVtX2ZyZWV6YWJsZV93cSwgJmNkbnMtPnJvbGVfc3dpdGNoX3dxKTsKPiAr CX0KPiArCj4gKwlyZXR1cm4gY291bnQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgY2RuczNfZGlz YWJsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQo+ICt7Cj4g KwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgY2RuczNfZGlzYWJsZV9zaG93LCBpbm9kZS0+aV9w cml2YXRlKTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMg Y2RuczNfZGlzYWJsZV9mb3BzID0gewo+ICsJLm9wZW4JCQk9IGNkbnMzX2Rpc2FibGVfb3BlbiwK PiArCS53cml0ZQkJCT0gY2RuczNfZGlzYWJsZV93cml0ZSwKPiArCS5yZWFkCQkJPSBzZXFfcmVh ZCwKPiArCS5sbHNlZWsJCQk9IHNlcV9sc2VlaywKPiArCS5yZWxlYXNlCQk9IHNpbmdsZV9yZWxl YXNlLAo+ICt9Owo+ICsKPiArdm9pZCBjZG5zM19kZWJ1Z2ZzX2luaXQoc3RydWN0IGNkbnMzICpj ZG5zKQo+ICt7Cj4gKwlzdHJ1Y3QgZGVudHJ5ICpyb290Owo+ICsKPiArCXJvb3QgPSBkZWJ1Z2Zz X2NyZWF0ZV9kaXIoZGV2X25hbWUoY2Rucy0+ZGV2KSwgTlVMTCk7Cj4gKwljZG5zLT5yb290ID0g cm9vdDsKPiArCWlmIChJU19FTkFCTEVEKENPTkZJR19VU0JfQ0ROUzNfR0FER0VUKSAmJgo+ICsJ ICAgIElTX0VOQUJMRUQoQ09ORklHX1VTQl9DRE5TM19IT1NUKSkKPiArCQlkZWJ1Z2ZzX2NyZWF0 ZV9maWxlKCJtb2RlIiwgMDY0NCwgcm9vdCwgY2RucywKPiArCQkJCSAgICAmY2RuczNfbW9kZV9m b3BzKTsKPiArCj4gKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJkaXNhYmxlIiwgMDY0NCwgcm9vdCwg Y2RucywKPiArCQkJICAgICZjZG5zM19kaXNhYmxlX2ZvcHMpOwo+ICt9Cj4gKwo+ICt2b2lkIGNk bnMzX2RlYnVnZnNfZXhpdChzdHJ1Y3QgY2RuczMgKmNkbnMpCj4gK3sKPiArCWRlYnVnZnNfcmVt b3ZlX3JlY3Vyc2l2ZShjZG5zLT5yb290KTsKPiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3Vz Yi9jZG5zMy9kcmQuYyBiL2RyaXZlcnMvdXNiL2NkbnMzL2RyZC5jCj4gbmV3IGZpbGUgbW9kZSAx MDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjNlNTYzMzhjZDdiOQo+IC0tLSAvZGV2L251bGwK PiArKysgYi9kcml2ZXJzL3VzYi9jZG5zMy9kcmQuYwo+IEBAIC0wLDAgKzEsMzY1IEBACj4gKy8v IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4gKy8qCj4gKyAqIENhZGVuY2UgVVNC U1MgRFJEIERyaXZlci4KPiArICoKPiArICogQ29weXJpZ2h0IChDKSAyMDE4IENhZGVuY2UuCj4g KyAqCj4gKyAqIEF1dGhvcjogUGF3ZWwgTGFzemN6YWsgPHBhd2VsbEBjYWRlbmNlLmNvbQo+ICsg Kgo+ICsgKi8KPiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+ICsjaW5jbHVkZSA8bGludXgv aW50ZXJydXB0Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgo+ICsjaW5jbHVkZSA8bGlu dXgvdXNiL290Zy5oPgo+ICsKPiArI2luY2x1ZGUgImdhZGdldC5oIgo+ICsjaW5jbHVkZSAiZHJk LmgiCj4gKyNpbmNsdWRlICJjb3JlLmgiCj4gKwo+ICtzdGF0aWMgaW50IGNkbnMzX2RyZF9zd2l0 Y2hfZ2FkZ2V0KHN0cnVjdCBjZG5zMyAqY2RucywgaW50IG9uKTsKPiArc3RhdGljIGludCBjZG5z M19kcmRfc3dpdGNoX2hvc3Qoc3RydWN0IGNkbnMzICpjZG5zLCBpbnQgb24pOwo+ICsKPiArLyoq Cj4gKyAqIGNkbnMzX3NldF9tb2RlIC0gY2hhbmdlIG1vZGUgb2YgT1RHIENvcmUKPiArICogQGNk bnM6IHBvaW50ZXIgdG8gY29udGV4dCBzdHJ1Y3R1cmUKPiArICogQG1vZGU6IHNlbGVjdGVkIG1v ZGUgZnJvbSBjZG5zX3JvbGUKPiArICoKPiArICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3RoZXJ3 aXNlIG5lZ2F0aXZlIGVycm5vCj4gKyAqLwo+ICtpbnQgY2RuczNfc2V0X21vZGUoc3RydWN0IGNk bnMzICpjZG5zLCBlbnVtIHVzYl9kcl9tb2RlIG1vZGUpCj4gK3sKPiArCWludCByZXQgPSAwOwo+ ICsJdTMyIHJlZzsKPiArCj4gKwljZG5zLT5jdXJyZW50X2RyX21vZGUgPSBtb2RlOwo+ICsKPiAr CXN3aXRjaCAobW9kZSkgewo+ICsJY2FzZSBVU0JfRFJfTU9ERV9QRVJJUEhFUkFMOgo+ICsJCWRl dl9pbmZvKGNkbnMtPmRldiwgIlNldCBjb250cm9sbGVyIHRvIEdhZGdldCBtb2RlXG4iKTsKPiAr CQlyZXQgPSBjZG5zM19kcmRfc3dpdGNoX2dhZGdldChjZG5zLCAxKTsKPiArCQlicmVhazsKPiAr CWNhc2UgVVNCX0RSX01PREVfSE9TVDoKPiArCQlkZXZfaW5mbyhjZG5zLT5kZXYsICJTZXQgY29u dHJvbGxlciB0byBIb3N0IG1vZGVcbiIpOwo+ICsJCXJldCA9IGNkbnMzX2RyZF9zd2l0Y2hfaG9z dChjZG5zLCAxKTsKPiArCQlicmVhazsKPiArCWNhc2UgVVNCX0RSX01PREVfT1RHOgo+ICsJCWRl dl9pbmZvKGNkbnMtPmRldiwgIlNldCBjb250cm9sbGVyIHRvIE9URyBtb2RlXG4iKTsKPiArCQlp ZiAoY2Rucy0+dmVyc2lvbiA9PSBDRE5TM19DT05UUk9MTEVSX1YxKSB7Cj4gKwkJCXJlZyA9IHJl YWRsKCZjZG5zLT5vdGdfdjFfcmVncy0+b3ZlcnJpZGUpOwo+ICsJCQlyZWcgfD0gT1ZFUlJJREVf SURQVUxMVVA7Cj4gKwkJCXdyaXRlbChyZWcsICZjZG5zLT5vdGdfdjFfcmVncy0+b3ZlcnJpZGUp Owo+ICsJCX0gZWxzZSB7Cj4gKwkJCXJlZyA9IHJlYWRsKCZjZG5zLT5vdGdfdjBfcmVncy0+Y3Ry bDEpOwo+ICsJCQlyZWcgfD0gT1ZFUlJJREVfSURQVUxMVVBfVjA7Cj4gKwkJCXdyaXRlbChyZWcs ICZjZG5zLT5vdGdfdjBfcmVncy0+Y3RybDEpOwo+ICsJCX0KPiArCj4gKwkJLyoKPiArCQkgKiBI YXJkd2FyZSBzcGVjaWZpY2F0aW9uIHNheXM6ICJJRF9WQUxVRSBtdXN0IGJlIHZhbGlkIHdpdGhp bgo+ICsJCSAqIDUwbXMgYWZ0ZXIgaWRwdWxsdXAgaXMgc2V0IHRvICcxIiBzbyBkcml2ZXIgbXVz dCB3YWl0Cj4gKwkJICogNTBtcyBiZWZvcmUgcmVhZGluZyB0aGlzIHBpbi4KPiArCQkgKi8KPiAr CQl1c2xlZXBfcmFuZ2UoNTAwMDAsIDYwMDAwKTsKPiArCQlicmVhazsKPiArCWRlZmF1bHQ6Cj4g KwkJY2Rucy0+Y3VycmVudF9kcl9tb2RlID0gVVNCX0RSX01PREVfVU5LTk9XTjsKPiArCQlkZXZf ZXJyKGNkbnMtPmRldiwgIlVuc3VwcG9ydGVkIG1vZGUgb2Ygb3BlcmF0aW9uICVkXG4iLCBtb2Rl KTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4g Kwo+ICtpbnQgY2RuczNfZ2V0X2lkKHN0cnVjdCBjZG5zMyAqY2RucykKPiArewo+ICsJaW50IGlk Owo+ICsKPiArCWlkID0gcmVhZGwoJmNkbnMtPm90Z19yZWdzLT5zdHMpICYgT1RHU1RTX0lEX1ZB TFVFOwo+ICsJZGV2X2RiZyhjZG5zLT5kZXYsICJPVEcgSUQ6ICVkIiwgaWQpOwo+ICsJcmV0dXJu IGlkOwo+ICt9Cj4gKwo+ICtpbnQgY2RuczNfaXNfaG9zdChzdHJ1Y3QgY2RuczMgKmNkbnMpCm1h eWJlIGl0J3MgYmV0dGVyIHRvIHVzZSBib29sIGluc3RlYWQgb2YgaW50Cj4gK3sKPiArCWlmIChj ZG5zLT5jdXJyZW50X2RyX21vZGUgPT0gVVNCX0RSX01PREVfSE9TVCkKPiArCQlyZXR1cm4gMTsK PiArCWVsc2UgaWYgKCFjZG5zM19nZXRfaWQoY2RucykpCj4gKwkJcmV0dXJuIDE7Cj4gKwo+ICsJ cmV0dXJuIDA7Cj4gK30KPiArCj4gK2ludCBjZG5zM19pc19kZXZpY2Uoc3RydWN0IGNkbnMzICpj ZG5zKQpkaXR0bwo+ICt7Cj4gKwlpZiAoY2Rucy0+Y3VycmVudF9kcl9tb2RlID09IFVTQl9EUl9N T0RFX1BFUklQSEVSQUwpCj4gKwkJcmV0dXJuIDE7Cj4gKwllbHNlIGlmIChjZG5zLT5jdXJyZW50 X2RyX21vZGUgPT0gVVNCX0RSX01PREVfT1RHKQo+ICsJCWlmIChjZG5zM19nZXRfaWQoY2Rucykp Cj4gKwkJCXJldHVybiAxOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKioKPiArICog Y2RuczNfb3RnX2Rpc2FibGVfaXJxIC0gRGlzYWJsZSBhbGwgT1RHIGludGVycnVwdHMKPiArICog QGNkbnM6IFBvaW50ZXIgdG8gY29udHJvbGxlciBjb250ZXh0IHN0cnVjdHVyZQo+ICsgKi8KPiAr c3RhdGljIHZvaWQgY2RuczNfb3RnX2Rpc2FibGVfaXJxKHN0cnVjdCBjZG5zMyAqY2RucykKPiAr ewo+ICsJd3JpdGVsKDAsICZjZG5zLT5vdGdfcmVncy0+aWVuKTsKPiArfQo+ICsKPiArLyoqCj4g KyAqIGNkbnMzX290Z19lbmFibGVfaXJxIC0gZW5hYmxlIGlkIGFuZCBzZXNzX3ZhbGlkIGludGVy cnVwdHMKPiArICogQGNkbnM6IFBvaW50ZXIgdG8gY29udHJvbGxlciBjb250ZXh0IHN0cnVjdHVy ZQo+ICsgKi8KPiArc3RhdGljIHZvaWQgY2RuczNfb3RnX2VuYWJsZV9pcnEoc3RydWN0IGNkbnMz ICpjZG5zKQo+ICt7Cj4gKwl3cml0ZWwoT1RHSUVOX0lEX0NIQU5HRV9JTlQgfCBPVEdJRU5fVkJV U1ZBTElEX1JJU0VfSU5UIHwKPiArCSAgICAgICBPVEdJRU5fVkJVU1ZBTElEX0ZBTExfSU5ULCAm Y2Rucy0+b3RnX3JlZ3MtPmllbik7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBjZG5zM19kcmRfc3dp dGNoX2hvc3QgLSBzdGFydC9zdG9wIGhvc3QKPiArICogQGNkbnM6IFBvaW50ZXIgdG8gY29udHJv bGxlciBjb250ZXh0IHN0cnVjdHVyZQo+ICsgKiBAb246IDEgZm9yIHN0YXJ0LCAwIGZvciBzdG9w Cj4gKyAqCj4gKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG90aGVyd2lzZSBuZWdhdGl2ZSBlcnJu bwo+ICsgKi8KWy4uLl0KPiArREVGSU5FX0VWRU5UKGNkbnMzX2xvZ19yZXF1ZXN0X2hhbmRsZWQs IGNkbnMzX3JlcXVlc3RfaGFuZGxlZCwKPiArCVRQX1BST1RPKHN0cnVjdCBjZG5zM19yZXF1ZXN0 ICpwcml2X3JlcSwgaW50IGN1cnJlbnRfaW5kZXgsCj4gKwkJIGludCBoYW5kbGVkKSwKPiArCVRQ X0FSR1MocHJpdl9yZXEsIGN1cnJlbnRfaW5kZXgsIGhhbmRsZWQpCj4gKyk7Cj4gKyNlbmRpZiAv KiBfX0xJTlVYX0NETlMzX1RSQUNFICovCj4gKwo+ICsvKiB0aGlzIHBhcnQgbXVzdCBiZSBvdXRz aWRlIGhlYWRlciBndWFyZCAqLwo+ICsKPiArI3VuZGVmIFRSQUNFX0lOQ0xVREVfUEFUSAo+ICsj ZGVmaW5lIFRSQUNFX0lOQ0xVREVfUEFUSCAuCj4gKwo+ICsjdW5kZWYgVFJBQ0VfSU5DTFVERV9G SUxFCj4gKyNkZWZpbmUgVFJBQ0VfSU5DTFVERV9GSUxFIHRyYWNlCj4gKwo+ICsjaW5jbHVkZSA8 dHJhY2UvZGVmaW5lX3RyYWNlLmg+Cg==