Return-Path: From: "Li, Zhigang" To: Marcel Holtmann CC: "linux-bluetooth@vger.kernel.org" Date: Tue, 16 Dec 2008 15:55:51 +0800 Subject: RE: To enablue DID in coming bluez release Message-ID: References: <1229046931.22285.30.camel@violet.holtmann.net> In-Reply-To: <1229046931.22285.30.camel@violet.holtmann.net> Content-Type: multipart/mixed; boundary="_003_B94C62E7C2870743865418621F040C1303A640A8pdsmsx502ccrcor_" MIME-Version: 1.0 List-ID: --_003_B94C62E7C2870743865418621F040C1303A640A8pdsmsx502ccrcor_ Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 UGxlYXNlIHNlZSB0aGUgYXR0YWNoZWQgDQpUaGUgcGF0Y2ggaXMgdmFsaWRhdGVkIGluIG15IHBj IHdpdGggNC4xOCB2ZXJzaW9uIGFuZCB3b3JrcyBmaW5lLg0KSWYgaXQncyBvayBmb3IgeW91IHBs ZWFzZSBtZXJnZSBpdCBpbnRvIHVwc3RyZWFtLg0KVGhhbmtzDQoNCg0KLS0tLS1PcmlnaW5hbCBN ZXNzYWdlLS0tLS0NCkZyb206IE1hcmNlbCBIb2x0bWFubiBbbWFpbHRvOm1hcmNlbEBob2x0bWFu bi5vcmddIA0KU2VudDogMjAwOMTqMTLUwjEyyNUgOTo1Ng0KVG86IExpLCBaaGlnYW5nDQpDYzog bGludXgtYmx1ZXRvb3RoQHZnZXIua2VybmVsLm9yZw0KU3ViamVjdDogUmU6IFRvIGVuYWJsdWUg RElEIGluIGNvbWluZyBibHVleiByZWxlYXNlDQoNCkhpIFpoaWdhbmcsDQoNCj4gQ291bGQgeW91 IHBsZWFzZSBlbmFibGUgdGhpcyBwcm9maWxlIGluIHRoZSBjb21pbmcgcmVsZWFzZT8NCj4gVG8g dXBkYXRlOg0KPiBBZGQgVklELFBJRCxWRVIgc2V0dGluZyBpbiBtYWluLmNvbmYNCj4gDQo+IEkg dGhpbmsgdGhlIHBhcnNlX2NvbmZpZyBhbHNvIG5lZWQgYWRkIGNvZGUgaW4gb3JkZXIgdG8gcGFy c2UgdGhlc2UgdmFsdWUgdG8gbWFpbl9vcHQuZGlkLg0KDQpJIHdhcyBleHBlY3RpbmcgdGhhdCB5 b3Ugc2VuZCBtZSBhIHBhdGNoIGZvciBpdC4NCg0KUmVnYXJkcw0KDQpNYXJjZWwNCg0KDQo= --_003_B94C62E7C2870743865418621F040C1303A640A8pdsmsx502ccrcor_ Content-Type: application/octet-stream; name="main.conf" Content-Description: main.conf Content-Disposition: attachment; filename="main.conf"; size=1090; creation-date="Tue, 16 Dec 2008 15:18:53 GMT"; modification-date="Tue, 16 Dec 2008 15:19:51 GMT" Content-Transfer-Encoding: base64 W0dlbmVyYWxdCgojIExpc3Qgb2YgcGx1Z2lucyB0aGF0IHNob3VsZCBub3QgYmUgbG9hZGVkIG9u IGJsdWV0b290aGQgc3RhcnR1cAojRGlzYWJsZVBsdWdpbnMgPSBuZXR3b3JrLGlucHV0CgojIERl ZmF1bHQgYWRhcGVyIG5hbWUKIyAlaCAtIHN1YnN0aXR1dGVkIGZvciBob3N0bmFtZQojICVkIC0g c3Vic3RpdHV0ZWQgZm9yIGFkYXB0ZXIgaWQKTmFtZSA9ICVoLSVkCgojIERlZmF1bHQgZGV2aWNl IGNsYXNzLiBPbmx5IHRoZSBtYWpvciBhbmQgbWlub3IgZGV2aWNlIGNsYXNzIGJpdHMgYXJlCiMg Y29uc2lkZXJlZApDbGFzcyA9IDB4MDAwMTAwCgojIEhvdyBsb25nIHRvIHN0YXkgaW4gZGlzY292 ZXJhYmxlIG1vZGUgYmVmb3JlIGdvaW5nIGJhY2sgdG8gbm9uLWRpc2NvdmVyYWJsZQojIFRoZSB2 YWx1ZSBpcyBpbiBzZWNvbmRzLiBEZWZhdWx0IGlzIDE4MCwgaS5lLiAzIG1pbnV0ZXMuCiMgMCA9 IGRpc2FibGUgdGltZXIsIGkuZS4gc3RheSBkaXNjb3ZlcmFibGUgZm9yZXZlcgpEaXNjb3ZlcmFi bGVUaW1lb3V0ID0gMAoKIyBVc2Ugc29tZSBvdGhlciBwYWdlIHRpbWVvdXQgdGhhbiB0aGUgY29u dHJvbGxlciBkZWZhdWx0IG9uZQojICgxNjM4NCA9IDEwIHNlY29uZHMpClBhZ2VUaW1lb3V0ID0g ODE5MgoKIyBCZWhhdmlvdXIgZm9yIEFkYXB0ZXIuU2V0UHJvcGVydHkoIm1vZGUiLCAib2ZmIikK IyBQb3NzaWJsZSB2YWx1ZXM6ICJEZXZEb3duIiwgIk5vU2NhbiIgKGRlZmF1bHQpCk9mZk1vZGUg PSBOb1NjYW4KCiMgRGlzY292ZXIgc2NoZWR1bGVyIGludGVydmFsIHVzZWQgaW4gQWRhcHRlci5E aXNjb3ZlckRldmljZXMKIyBUaGUgdmFsdWUgaXMgaW4gc2Vjb25kcy4gRGVmYXVsdHMgaXMgMCB0 byB1c2UgY29udHJvbGxlciBzY2hlZHVsZXIKRGlzY292ZXJTY2hlZHVsZXJJbnRlcnZhbCA9IDAK CgojIFVzZXIgdmVybmRvciBhbmQgcHJvZHVjdCBhbmQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhcmUg dXNlZCBpbiBESUQgcHJvZmlsZQojICI6IiB0byBpZGVudGlmeSB0aGUgdmFsdWUuIEZGRkYgaXMg cmVzZXJ2ZWQgZm9yIFZlbmRvcklkIGJ5IGRlZmF1bHQuClZJRC9QSUQvVkVSID0gMTIzNDo1Njc4 OmFiY2QKCg== --_003_B94C62E7C2870743865418621F040C1303A640A8pdsmsx502ccrcor_ Content-Type: text/plain; name="main.c" Content-Description: main.c Content-Disposition: attachment; filename="main.c"; size=17224; creation-date="Tue, 16 Dec 2008 15:19:02 GMT"; modification-date="Mon, 15 Dec 2008 17:54:55 GMT" Content-Transfer-Encoding: base64 LyoNCiAqDQogKiAgQmx1ZVogLSBCbHVldG9vdGggcHJvdG9jb2wgc3RhY2sgZm9yIExpbnV4DQog Kg0KICogIENvcHlyaWdodCAoQykgMjAwMC0yMDAxICBRdWFsY29tbSBJbmNvcnBvcmF0ZWQNCiAq ICBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMyAgTWF4aW0gS3Jhc255YW5za3kgPG1heGtAcXVhbGNv bW0uY29tPg0KICogIENvcHlyaWdodCAoQykgMjAwMi0yMDA4ICBNYXJjZWwgSG9sdG1hbm4gPG1h cmNlbEBob2x0bWFubi5vcmc+DQogKg0KICoNCiAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KICogIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5DQogKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBv ZiB0aGUgTGljZW5zZSwgb3INCiAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u Lg0KICoNCiAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwNCiAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCiAqICBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KICoNCiAqICBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KICogIGFs b25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl DQogKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0 b24sIE1BICAwMjExMC0xMzAxICBVU0ENCiAqDQogKi8NCg0KI2lmZGVmIEhBVkVfQ09ORklHX0gN CiNpbmNsdWRlIDxjb25maWcuaD4NCiNlbmRpZg0KDQojaW5jbHVkZSA8c3RkaW8uaD4NCiNpbmNs dWRlIDxlcnJuby5oPg0KI2luY2x1ZGUgPGZjbnRsLmg+DQojaW5jbHVkZSA8dW5pc3RkLmg+DQoj aW5jbHVkZSA8c3RkbGliLmg+DQojaW5jbHVkZSA8c3RyaW5nLmg+DQojaW5jbHVkZSA8c2lnbmFs Lmg+DQojaW5jbHVkZSA8c3lzL3N0YXQuaD4NCiNpbmNsdWRlIDxzeXMvaW9jdGwuaD4NCiNpbmNs dWRlIDxzeXMvc29ja2V0Lmg+DQojaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQojaW5jbHVkZSA8c3lz L3dhaXQuaD4NCg0KI2luY2x1ZGUgPGJsdWV0b290aC9ibHVldG9vdGguaD4NCiNpbmNsdWRlIDxi bHVldG9vdGgvaGNpLmg+DQojaW5jbHVkZSA8Ymx1ZXRvb3RoL2hjaV9saWIuaD4NCg0KI2luY2x1 ZGUgPGdsaWIuaD4NCg0KI2luY2x1ZGUgPGRidXMvZGJ1cy5oPg0KDQojaW5jbHVkZSAibG9nZ2lu Zy5oIg0KDQojaW5jbHVkZSAiaGNpZC5oIg0KI2luY2x1ZGUgInNkcGQuaCINCiNpbmNsdWRlICJh ZGFwdGVyLmgiDQojaW5jbHVkZSAiZGJ1cy1oY2kuaCINCiNpbmNsdWRlICJkYnVzLWNvbW1vbi5o Ig0KI2luY2x1ZGUgImFnZW50LmgiDQojaW5jbHVkZSAibWFuYWdlci5oIg0KI2luY2x1ZGUgInN0 b3JhZ2UuaCINCg0KI2RlZmluZSBIQ0lEX0RFRkFVTFRfRElTQ09WRVJBQkxFX1RJTUVPVVQgMTgw IC8qIDMgbWludXRlcyAqLw0KDQplbnVtIHsNCglIQ0lEX1NFVF9OQU1FLA0KCUhDSURfU0VUX0NM QVNTLA0KCUhDSURfU0VUX1BBR0VUTywNCglIQ0lEX1NFVF9ESVNDT1ZUTywNCn07DQoNCnN0cnVj dCBtYWluX29wdHMgbWFpbl9vcHRzOw0KDQpzdGF0aWMgaW50IGNoaWxkX3BpcGVbMl07DQoNCnN0 YXRpYyBHS2V5RmlsZSAqbG9hZF9jb25maWcoY29uc3QgY2hhciAqZmlsZSkNCnsNCglHRXJyb3Ig KmVyciA9IE5VTEw7DQoJR0tleUZpbGUgKmtleWZpbGU7DQoNCglrZXlmaWxlID0gZ19rZXlfZmls ZV9uZXcoKTsNCg0KCWdfa2V5X2ZpbGVfc2V0X2xpc3Rfc2VwYXJhdG9yKGtleWZpbGUsICcsJyk7 DQoNCglpZiAoIWdfa2V5X2ZpbGVfbG9hZF9mcm9tX2ZpbGUoa2V5ZmlsZSwgZmlsZSwgMCwgJmVy cikpIHsNCgkJZXJyb3IoIlBhcnNpbmcgJXMgZmFpbGVkOiAlcyIsIGZpbGUsIGVyci0+bWVzc2Fn ZSk7DQoJCWdfZXJyb3JfZnJlZShlcnIpOw0KCQlnX2tleV9maWxlX2ZyZWUoa2V5ZmlsZSk7DQoJ CXJldHVybiBOVUxMOw0KCX0NCg0KCXJldHVybiBrZXlmaWxlOw0KfQ0KDQpzdGF0aWMgdm9pZCBw YXJzZV9jb25maWcoR0tleUZpbGUgKmNvbmZpZykNCnsNCglHRXJyb3IgKmVyciA9IE5VTEw7DQoJ Y2hhciAqc3RyOw0KCWludCB2YWw7DQoNCglpZiAoIWNvbmZpZykNCgkJcmV0dXJuOw0KDQoJZGVi dWcoInBhcnNpbmcgbWFpbi5jb25mIik7DQoNCglzdHIgPSBnX2tleV9maWxlX2dldF9zdHJpbmco Y29uZmlnLCAiR2VuZXJhbCIsDQoJCQkJCSJPZmZNb2RlIiwgJmVycik7DQoJaWYgKGVycikgew0K CQlkZWJ1ZygiJXMiLCBlcnItPm1lc3NhZ2UpOw0KCQlnX2NsZWFyX2Vycm9yKCZlcnIpOw0KCX0g ZWxzZSB7DQoJCWRlYnVnKCJvZmZtb2RlPSVzIiwgc3RyKTsNCgkJaWYgKGdfc3RyX2VxdWFsKHN0 ciwgIkRldkRvd24iKSkNCgkJCW1haW5fb3B0cy5vZmZtb2RlID0gSENJRF9PRkZNT0RFX0RFVkRP V047DQoJCWdfZnJlZShzdHIpOw0KCX0NCg0KCXZhbCA9IGdfa2V5X2ZpbGVfZ2V0X2ludGVnZXIo Y29uZmlnLCAiR2VuZXJhbCIsDQoJCQkJCSJEaXNjb3ZlcmFibGVUaW1lb3V0IiwNCgkJCQkJJmVy cik7DQoJaWYgKGVycikgew0KCQlkZWJ1ZygiJXMiLCBlcnItPm1lc3NhZ2UpOw0KCQlnX2NsZWFy X2Vycm9yKCZlcnIpOw0KCX0gZWxzZSB7DQoJCWRlYnVnKCJkaXNjb3Z0bz0lZCIsIHZhbCk7DQoJ CW1haW5fb3B0cy5kaXNjb3Z0byA9IHZhbDsNCgkJbWFpbl9vcHRzLmZsYWdzIHw9IDEgPDwgSENJ RF9TRVRfRElTQ09WVE87DQoJfQ0KDQoJdmFsID0gZ19rZXlfZmlsZV9nZXRfaW50ZWdlcihjb25m aWcsICJHZW5lcmFsIiwNCgkJCQkJIlBhZ2VUaW1lb3V0IiwNCgkJCQkJJmVycik7DQoJaWYgKGVy cikgew0KCQlkZWJ1ZygiJXMiLCBlcnItPm1lc3NhZ2UpOw0KCQlnX2NsZWFyX2Vycm9yKCZlcnIp Ow0KCX0gZWxzZSB7DQoJCWRlYnVnKCJwYWdldG89JWQiLCB2YWwpOw0KCQltYWluX29wdHMucGFn ZXRvID0gdmFsOw0KCQltYWluX29wdHMuZmxhZ3MgfD0gMSA8PCBIQ0lEX1NFVF9QQUdFVE87DQoJ fQ0KDQoJc3RyID0gZ19rZXlfZmlsZV9nZXRfc3RyaW5nKGNvbmZpZywgIkdlbmVyYWwiLA0KCQkJ CQkiTmFtZSIsICZlcnIpOw0KCWlmIChlcnIpIHsNCgkJZGVidWcoIiVzIiwgZXJyLT5tZXNzYWdl KTsNCgkJZ19jbGVhcl9lcnJvcigmZXJyKTsNCgl9IGVsc2Ugew0KCQlkZWJ1ZygibmFtZT0lcyIs IHN0cik7DQoJCWdfZnJlZShtYWluX29wdHMubmFtZSk7DQoJCW1haW5fb3B0cy5uYW1lID0gZ19z dHJkdXAoc3RyKTsNCgkJbWFpbl9vcHRzLmZsYWdzIHw9IDEgPDwgSENJRF9TRVRfTkFNRTsNCgkJ Z19mcmVlKHN0cik7DQoJfQ0KDQoJc3RyID0gZ19rZXlfZmlsZV9nZXRfc3RyaW5nKGNvbmZpZywg IkdlbmVyYWwiLA0KCQkJCQkiQ2xhc3MiLCAmZXJyKTsNCglpZiAoZXJyKSB7DQoJCWRlYnVnKCIl cyIsIGVyci0+bWVzc2FnZSk7DQoJCWdfY2xlYXJfZXJyb3IoJmVycik7DQoJfSBlbHNlIHsNCgkJ ZGVidWcoImNsYXNzPSVzIiwgc3RyKTsNCgkJbWFpbl9vcHRzLmNsYXNzID0gc3RydG9sKHN0ciwg TlVMTCwgMTYpOw0KCQltYWluX29wdHMuZmxhZ3MgfD0gMSA8PCBIQ0lEX1NFVF9DTEFTUzsNCgkJ Z19mcmVlKHN0cik7DQoJfQ0KDQoJdmFsID0gZ19rZXlfZmlsZV9nZXRfaW50ZWdlcihjb25maWcs ICJHZW5lcmFsIiwNCgkJCQkJIkRpc2NvdmVyU2NoZWR1bGVySW50ZXJ2YWwiLA0KCQkJCQkmZXJy KTsNCglpZiAoZXJyKSB7DQoJCWRlYnVnKCIlcyIsIGVyci0+bWVzc2FnZSk7DQoJCWdfY2xlYXJf ZXJyb3IoJmVycik7DQoJfSBlbHNlIHsNCgkJZGVidWcoImlucW1vZGU9JWQiLCB2YWwpOw0KCQlt YWluX29wdHMuaW5xbW9kZSA9IHZhbDsNCgl9DQoJc3RyID0gZ19rZXlfZmlsZV9nZXRfc3RyaW5n KGNvbmZpZywgIkdlbmVyYWwiLA0KCQkJCQkiVklEL1BJRC9WRVIiLCAmZXJyKTsNCglpZiAoZXJy KSB7DQoJCWRlYnVnKCIlcyIsIGVyci0+bWVzc2FnZSk7DQoJCWdfY2xlYXJfZXJyb3IoJmVycik7 DQoJfSBlbHNlIHsNCgkJZGVidWcoInZpZC9waWQvdmVyPSVzIiwgc3RyKTsNCgkJc3RyY3B5KCBt YWluX29wdHMuZGV2aWNlaWQsc3RyKTsNCgkJZ19mcmVlKHN0cik7DQoJfQ0KDQoJbWFpbl9vcHRz LmxpbmtfbW9kZSA9IEhDSV9MTV9BQ0NFUFQ7DQoNCgltYWluX29wdHMubGlua19wb2xpY3kgPSBI Q0lfTFBfUlNXSVRDSCB8IEhDSV9MUF9TTklGRiB8DQoJCQkJCQlIQ0lfTFBfSE9MRCB8IEhDSV9M UF9QQVJLOw0KfQ0KDQpzdGF0aWMgdm9pZCB1cGRhdGVfc2VydmljZV9jbGFzc2VzKGNvbnN0IGJk YWRkcl90ICpiZGFkZHIsIHVpbnQ4X3QgdmFsdWUpDQp7DQoJc3RydWN0IGhjaV9kZXZfbGlzdF9y ZXEgKmRsOw0KCXN0cnVjdCBoY2lfZGV2X3JlcSAqZHI7DQoJaW50IGksIHNrOw0KDQoJc2sgPSBz b2NrZXQoQUZfQkxVRVRPT1RILCBTT0NLX1JBVywgQlRQUk9UT19IQ0kpOw0KCWlmIChzayA8IDAp DQoJCXJldHVybjsNCg0KCWRsID0gZ19tYWxsb2MwKEhDSV9NQVhfREVWICogc2l6ZW9mKCpkcikg KyBzaXplb2YoKmRsKSk7DQoNCglkbC0+ZGV2X251bSA9IEhDSV9NQVhfREVWOw0KCWRyID0gZGwt PmRldl9yZXE7DQoNCglpZiAoaW9jdGwoc2ssIEhDSUdFVERFVkxJU1QsIGRsKSA8IDApIHsNCgkJ Y2xvc2Uoc2spOw0KCQlnX2ZyZWUoZGwpOw0KCQlyZXR1cm47DQoJfQ0KDQoJZHIgPSBkbC0+ZGV2 X3JlcTsNCg0KCWZvciAoaSA9IDA7IGkgPCBkbC0+ZGV2X251bTsgaSsrLCBkcisrKSB7DQoJCXN0 cnVjdCBoY2lfZGV2X2luZm8gZGk7DQoJCXVpbnQ4X3QgY2xzWzNdOw0KCQlpbnQgZGQ7DQoNCgkJ aWYgKGhjaV9kZXZpbmZvKGRyLT5kZXZfaWQsICZkaSkgPCAwKQ0KCQkJY29udGludWU7DQoNCgkJ aWYgKGhjaV90ZXN0X2JpdChIQ0lfUkFXLCAmZGkuZmxhZ3MpKQ0KCQkJY29udGludWU7DQoNCgkJ aWYgKCFoY2lfdGVzdF9iaXQoSENJX1VQLCAmZGkuZmxhZ3MpKQ0KCQkJY29udGludWU7DQoNCgkJ aWYgKG1hbmFnZXJfZ2V0X2FkYXB0ZXJfY2xhc3MoZGkuZGV2X2lkLCBjbHMpIDwgMCkNCgkJCWNv bnRpbnVlOw0KDQoJCWRkID0gaGNpX29wZW5fZGV2KGRpLmRldl9pZCk7DQoJCWlmIChkZCA8IDAp DQoJCQljb250aW51ZTsNCg0KCQlzZXRfc2VydmljZV9jbGFzc2VzKGRkLCBjbHMsIHZhbHVlKTsN Cg0KCQloY2lfY2xvc2VfZGV2KGRkKTsNCg0KCQltYW5hZ2VyX3VwZGF0ZV9hZGFwdGVyKGRpLmRl dl9pZCk7DQoJfQ0KDQoJZ19mcmVlKGRsKTsNCg0KCWNsb3NlKHNrKTsNCn0NCg0KLyoNCiAqIERl dmljZSBuYW1lIGV4cGFuc2lvbg0KICogICAlZCAtIGRldmljZSBpZA0KICovDQpzdGF0aWMgY2hh ciAqZXhwYW5kX25hbWUoY2hhciAqZHN0LCBpbnQgc2l6ZSwgY2hhciAqc3RyLCBpbnQgZGV2X2lk KQ0Kew0KCXJlZ2lzdGVyIGludCBzcCwgbnAsIG9sZW47DQoJY2hhciAqb3B0LCBidWZbMTBdOw0K DQoJaWYgKCFzdHIgJiYgIWRzdCkNCgkJcmV0dXJuIE5VTEw7DQoNCglzcCA9IG5wID0gMDsNCgl3 aGlsZSAobnAgPCBzaXplIC0gMSAmJiBzdHJbc3BdKSB7DQoJCXN3aXRjaCAoc3RyW3NwXSkgew0K CQljYXNlICclJzoNCgkJCW9wdCA9IE5VTEw7DQoNCgkJCXN3aXRjaCAoc3RyW3NwKzFdKSB7DQoJ CQljYXNlICdkJzoNCgkJCQlzcHJpbnRmKGJ1ZiwgIiVkIiwgZGV2X2lkKTsNCgkJCQlvcHQgPSBi dWY7DQoJCQkJYnJlYWs7DQoNCgkJCWNhc2UgJ2gnOg0KCQkJCW9wdCA9IG1haW5fb3B0cy5ob3N0 X25hbWU7DQoJCQkJYnJlYWs7DQoNCgkJCWNhc2UgJyUnOg0KCQkJCWRzdFtucCsrXSA9IHN0cltz cCsrXTsNCgkJCQkvKiBmYWxsIHRocm91Z2ggKi8NCgkJCWRlZmF1bHQ6DQoJCQkJc3ArKzsNCgkJ CQljb250aW51ZTsNCgkJCX0NCg0KCQkJaWYgKG9wdCkgew0KCQkJCS8qIHN1YnN0aXR1dGUgKi8N CgkJCQlvbGVuID0gc3RybGVuKG9wdCk7DQoJCQkJaWYgKG5wICsgb2xlbiA8IHNpemUgLSAxKQ0K CQkJCQltZW1jcHkoZHN0ICsgbnAsIG9wdCwgb2xlbik7DQoJCQkJbnAgKz0gb2xlbjsNCgkJCX0N CgkJCXNwICs9IDI7DQoJCQljb250aW51ZTsNCg0KCQljYXNlICdcXCc6DQoJCQlzcCsrOw0KCQkJ LyogZmFsbCB0aHJvdWdoICovDQoJCWRlZmF1bHQ6DQoJCQlkc3RbbnArK10gPSBzdHJbc3ArK107 DQoJCQlicmVhazsNCgkJfQ0KCX0NCglkc3RbbnBdID0gJ1wwJzsNCglyZXR1cm4gZHN0Ow0KfQ0K DQpzdGF0aWMgZ2Jvb2xlYW4gY2hpbGRfZXhpdChHSU9DaGFubmVsICppbywgR0lPQ29uZGl0aW9u IGNvbmQsIHZvaWQgKnVzZXJfZGF0YSkNCnsNCglpbnQgc3RhdHVzLCBmZCA9IGdfaW9fY2hhbm5l bF91bml4X2dldF9mZChpbyk7DQoJcGlkX3QgY2hpbGRfcGlkOw0KDQoJaWYgKHJlYWQoZmQsICZj aGlsZF9waWQsIHNpemVvZihjaGlsZF9waWQpKSAhPSBzaXplb2YoY2hpbGRfcGlkKSkgew0KCQll cnJvcigiY2hpbGRfZXhpdDogdW5hYmxlIHRvIHJlYWQgY2hpbGQgcGlkIGZyb20gcGlwZSIpOw0K CQlyZXR1cm4gVFJVRTsNCgl9DQoNCglpZiAod2FpdHBpZChjaGlsZF9waWQsICZzdGF0dXMsIDAp ICE9IGNoaWxkX3BpZCkNCgkJZXJyb3IoIndhaXRwaWQoJWQpIGZhaWxlZCIsIGNoaWxkX3BpZCk7 DQoJZWxzZQ0KCQlkZWJ1ZygiY2hpbGQgJWQgZXhpdGVkIiwgY2hpbGRfcGlkKTsNCg0KCXJldHVy biBUUlVFOw0KfQ0KDQpzdGF0aWMgdm9pZCBhdF9jaGlsZF9leGl0KHZvaWQpDQp7DQoJcGlkX3Qg cGlkID0gZ2V0cGlkKCk7DQoNCglpZiAod3JpdGUoY2hpbGRfcGlwZVsxXSwgJnBpZCwgc2l6ZW9m KHBpZCkpICE9IHNpemVvZihwaWQpKQ0KCQllcnJvcigidW5hYmxlIHRvIHdyaXRlIHRvIGNoaWxk IHBpcGUiKTsNCn0NCg0Kc3RhdGljIHZvaWQgY29uZmlndXJlX2RldmljZShpbnQgZGV2X2lkKQ0K ew0KCXN0cnVjdCBoY2lfZGV2X2luZm8gZGk7DQoJdWludDE2X3QgcG9saWN5Ow0KCWludCBkZDsN Cg0KCWlmIChoY2lfZGV2aW5mbyhkZXZfaWQsICZkaSkgPCAwKQ0KCQlyZXR1cm47DQoNCglpZiAo aGNpX3Rlc3RfYml0KEhDSV9SQVcsICZkaS5mbGFncykpDQoJCXJldHVybjsNCg0KCWRkID0gaGNp X29wZW5fZGV2KGRldl9pZCk7DQoJaWYgKGRkIDwgMCkgew0KCQllcnJvcigiQ2FuJ3Qgb3BlbiBk ZXZpY2UgaGNpJWQ6ICVzICglZCkiLA0KCQkJCQkJZGV2X2lkLCBzdHJlcnJvcihlcnJubyksIGVy cm5vKTsNCgkJcmV0dXJuOw0KCX0NCg0KCS8qIFNldCBkZXZpY2UgbmFtZSAqLw0KCWlmICgobWFp bl9vcHRzLmZsYWdzICYgKDEgPDwgSENJRF9TRVRfTkFNRSkpICYmIG1haW5fb3B0cy5uYW1lKSB7 DQoJCWNoYW5nZV9sb2NhbF9uYW1lX2NwIGNwOw0KDQoJCW1lbXNldChjcC5uYW1lLCAwLCBzaXpl b2YoY3AubmFtZSkpOw0KCQlleHBhbmRfbmFtZSgoY2hhciAqKSBjcC5uYW1lLCBzaXplb2YoY3Au bmFtZSksDQoJCQkJCQltYWluX29wdHMubmFtZSwgZGV2X2lkKTsNCg0KCQloY2lfc2VuZF9jbWQo ZGQsIE9HRl9IT1NUX0NUTCwgT0NGX0NIQU5HRV9MT0NBTF9OQU1FLA0KCQkJCQlDSEFOR0VfTE9D QUxfTkFNRV9DUF9TSVpFLCAmY3ApOw0KCX0NCg0KCS8qIFNldCBkZXZpY2UgY2xhc3MgKi8NCglp ZiAoKG1haW5fb3B0cy5mbGFncyAmICgxIDw8IEhDSURfU0VUX0NMQVNTKSkpIHsNCgkJd3JpdGVf Y2xhc3Nfb2ZfZGV2X2NwIGNwOw0KCQl1aW50MzJfdCBjbGFzczsNCgkJdWludDhfdCBjbHNbM107 DQoNCgkJaWYgKHJlYWRfbG9jYWxfY2xhc3MoJmRpLmJkYWRkciwgY2xzKSA8IDApIHsNCgkJCWNs YXNzID0gaHRvYmwobWFpbl9vcHRzLmNsYXNzKTsNCgkJCWNsc1syXSA9IGdldF9zZXJ2aWNlX2Ns YXNzZXMoJmRpLmJkYWRkcik7DQoJCQltZW1jcHkoY3AuZGV2X2NsYXNzLCAmY2xhc3MsIDMpOw0K CQl9IGVsc2Ugew0KCQkJaWYgKCEobWFpbl9vcHRzLnNjYW4gJiBTQ0FOX0lOUVVJUlkpKQ0KCQkJ CWNsc1sxXSAmPSAweGRmOyAvKiBDbGVhciBkaXNjb3ZlcmFibGUgYml0ICovDQoJCQljbHNbMl0g PSBnZXRfc2VydmljZV9jbGFzc2VzKCZkaS5iZGFkZHIpOw0KCQkJbWVtY3B5KGNwLmRldl9jbGFz cywgY2xzLCAzKTsNCgkJfQ0KDQoJCWhjaV9zZW5kX2NtZChkZCwgT0dGX0hPU1RfQ1RMLCBPQ0Zf V1JJVEVfQ0xBU1NfT0ZfREVWLA0KCQkJCQlXUklURV9DTEFTU19PRl9ERVZfQ1BfU0laRSwgJmNw KTsNCgl9DQoNCgkvKiBTZXQgcGFnZSB0aW1lb3V0ICovDQoJaWYgKChtYWluX29wdHMuZmxhZ3Mg JiAoMSA8PCBIQ0lEX1NFVF9QQUdFVE8pKSkgew0KCQl3cml0ZV9wYWdlX3RpbWVvdXRfY3AgY3A7 DQoNCgkJY3AudGltZW91dCA9IGh0b2JzKG1haW5fb3B0cy5wYWdldG8pOw0KCQloY2lfc2VuZF9j bWQoZGQsIE9HRl9IT1NUX0NUTCwgT0NGX1dSSVRFX1BBR0VfVElNRU9VVCwNCgkJCQkJV1JJVEVf UEFHRV9USU1FT1VUX0NQX1NJWkUsICZjcCk7DQoJfQ0KDQoJLyogU2V0IGRlZmF1bHQgbGluayBw b2xpY3kgKi8NCglwb2xpY3kgPSBodG9icyhtYWluX29wdHMubGlua19wb2xpY3kpOw0KCWhjaV9z ZW5kX2NtZChkZCwgT0dGX0xJTktfUE9MSUNZLA0KCQkJCU9DRl9XUklURV9ERUZBVUxUX0xJTktf UE9MSUNZLCAyLCAmcG9saWN5KTsNCn0NCg0Kc3RhdGljIHZvaWQgaW5pdF9kZXZpY2UoaW50IGRl dl9pZCkNCnsNCglzdHJ1Y3QgaGNpX2Rldl9yZXEgZHI7DQoJc3RydWN0IGhjaV9kZXZfaW5mbyBk aTsNCglwaWRfdCBwaWQ7DQoJaW50IGRkOw0KDQoJLyogRG8gaW5pdGlhbGl6YXRpb24gaW4gdGhl IHNlcGFyYXRlIHByb2Nlc3MgKi8NCglwaWQgPSBmb3JrKCk7DQoJc3dpdGNoIChwaWQpIHsNCgkJ Y2FzZSAwOg0KCQkJYXRleGl0KGF0X2NoaWxkX2V4aXQpOw0KCQkJYnJlYWs7DQoJCWNhc2UgLTE6 DQoJCQllcnJvcigiRm9yayBmYWlsZWQuIENhbid0IGluaXQgZGV2aWNlIGhjaSVkOiAlcyAoJWQp IiwNCgkJCQkJZGV2X2lkLCBzdHJlcnJvcihlcnJubyksIGVycm5vKTsNCgkJZGVmYXVsdDoNCgkJ CWRlYnVnKCJjaGlsZCAlZCBmb3JrZWQiLCBwaWQpOw0KCQkJcmV0dXJuOw0KCX0NCg0KCWRkID0g aGNpX29wZW5fZGV2KGRldl9pZCk7DQoJaWYgKGRkIDwgMCkgew0KCQllcnJvcigiQ2FuJ3Qgb3Bl biBkZXZpY2UgaGNpJWQ6ICVzICglZCkiLA0KCQkJCQlkZXZfaWQsIHN0cmVycm9yKGVycm5vKSwg ZXJybm8pOw0KCQlleGl0KDEpOw0KCX0NCg0KCW1lbXNldCgmZHIsIDAsIHNpemVvZihkcikpOw0K CWRyLmRldl9pZCA9IGRldl9pZDsNCg0KCS8qIFNldCBsaW5rIG1vZGUgKi8NCglkci5kZXZfb3B0 ID0gbWFpbl9vcHRzLmxpbmtfbW9kZTsNCglpZiAoaW9jdGwoZGQsIEhDSVNFVExJTktNT0RFLCAo dW5zaWduZWQgbG9uZykgJmRyKSA8IDApIHsNCgkJZXJyb3IoIkNhbid0IHNldCBsaW5rIG1vZGUg b24gaGNpJWQ6ICVzICglZCkiLA0KCQkJCQlkZXZfaWQsIHN0cmVycm9yKGVycm5vKSwgZXJybm8p Ow0KCX0NCg0KCS8qIFNldCBsaW5rIHBvbGljeSAqLw0KCWRyLmRldl9vcHQgPSBtYWluX29wdHMu bGlua19wb2xpY3k7DQoJaWYgKGlvY3RsKGRkLCBIQ0lTRVRMSU5LUE9MLCAodW5zaWduZWQgbG9u ZykgJmRyKSA8IDAgJiYNCgkJCQkJCQllcnJubyAhPSBFTkVURE9XTikgew0KCQllcnJvcigiQ2Fu J3Qgc2V0IGxpbmsgcG9saWN5IG9uIGhjaSVkOiAlcyAoJWQpIiwNCgkJCQkJZGV2X2lkLCBzdHJl cnJvcihlcnJubyksIGVycm5vKTsNCgl9DQoNCgkvKiBTdGFydCBIQ0kgZGV2aWNlICovDQoJaWYg KGlvY3RsKGRkLCBIQ0lERVZVUCwgZGV2X2lkKSA8IDAgJiYgZXJybm8gIT0gRUFMUkVBRFkpIHsN CgkJZXJyb3IoIkNhbid0IGluaXQgZGV2aWNlIGhjaSVkOiAlcyAoJWQpIiwNCgkJCQkJZGV2X2lk LCBzdHJlcnJvcihlcnJubyksIGVycm5vKTsNCgkJZ290byBmYWlsOw0KCX0NCg0KCWlmIChoY2lf ZGV2aW5mbyhkZXZfaWQsICZkaSkgPCAwKQ0KCQlnb3RvIGZhaWw7DQoNCglpZiAoaGNpX3Rlc3Rf Yml0KEhDSV9SQVcsICZkaS5mbGFncykpDQoJCWdvdG8gZG9uZTsNCg0KZG9uZToNCgloY2lfY2xv c2VfZGV2KGRkKTsNCglleGl0KDApOw0KDQpmYWlsOg0KCWhjaV9jbG9zZV9kZXYoZGQpOw0KCWV4 aXQoMSk7DQp9DQoNCnN0YXRpYyB2b2lkIGRldmljZV9kZXZyZWdfc2V0dXAoaW50IGRldl9pZCkN CnsNCglzdHJ1Y3QgaGNpX2Rldl9pbmZvIGRpOw0KDQoJaW5pdF9kZXZpY2UoZGV2X2lkKTsNCg0K CWlmIChoY2lfZGV2aW5mbyhkZXZfaWQsICZkaSkgPCAwKQ0KCQlyZXR1cm47DQoNCglpZiAoIWhj aV90ZXN0X2JpdChIQ0lfUkFXLCAmZGkuZmxhZ3MpKQ0KCQltYW5hZ2VyX3JlZ2lzdGVyX2FkYXB0 ZXIoZGV2X2lkKTsNCn0NCg0Kc3RhdGljIHZvaWQgZGV2aWNlX2RldnVwX3NldHVwKGludCBkZXZf aWQpDQp7DQoJY29uZmlndXJlX2RldmljZShkZXZfaWQpOw0KDQoJbWFuYWdlcl9zdGFydF9hZGFw dGVyKGRldl9pZCk7DQoJc3RhcnRfc2VjdXJpdHlfbWFuYWdlcihkZXZfaWQpOw0KfQ0KDQpzdGF0 aWMgdm9pZCBpbml0X2FsbF9kZXZpY2VzKGludCBjdGwpDQp7DQoJc3RydWN0IGhjaV9kZXZfbGlz dF9yZXEgKmRsOw0KCXN0cnVjdCBoY2lfZGV2X3JlcSAqZHI7DQoJaW50IGk7DQoNCglkbCA9IGdf dHJ5X21hbGxvYzAoSENJX01BWF9ERVYgKiBzaXplb2Yoc3RydWN0IGhjaV9kZXZfcmVxKSArIHNp emVvZih1aW50MTZfdCkpOw0KCWlmICghZGwpIHsNCgkJaW5mbygiQ2FuJ3QgYWxsb2NhdGUgZGV2 bGlzdCBidWZmZXI6ICVzICglZCkiLA0KCQkJCQkJCXN0cmVycm9yKGVycm5vKSwgZXJybm8pOw0K CQlleGl0KDEpOw0KCX0NCg0KCWRsLT5kZXZfbnVtID0gSENJX01BWF9ERVY7DQoJZHIgPSBkbC0+ ZGV2X3JlcTsNCg0KCWlmIChpb2N0bChjdGwsIEhDSUdFVERFVkxJU1QsICh2b2lkICopIGRsKSA8 IDApIHsNCgkJaW5mbygiQ2FuJ3QgZ2V0IGRldmljZSBsaXN0OiAlcyAoJWQpIiwNCgkJCQkJCQlz dHJlcnJvcihlcnJubyksIGVycm5vKTsNCgkJZXhpdCgxKTsNCgl9DQoNCglmb3IgKGkgPSAwOyBp IDwgZGwtPmRldl9udW07IGkrKywgZHIrKykgew0KCQlpbmZvKCJIQ0kgZGV2ICVkIHJlZ2lzdGVy ZWQiLCBkci0+ZGV2X2lkKTsNCgkJZGV2aWNlX2RldnJlZ19zZXR1cChkci0+ZGV2X2lkKTsNCgkJ aWYgKGhjaV90ZXN0X2JpdChIQ0lfVVAsICZkci0+ZGV2X29wdCkpIHsNCgkJCWluZm8oIkhDSSBk ZXYgJWQgYWxyZWFkeSB1cCIsIGRyLT5kZXZfaWQpOw0KCQkJZGV2aWNlX2RldnVwX3NldHVwKGRy LT5kZXZfaWQpOw0KCQl9DQoJfQ0KDQoJZ19mcmVlKGRsKTsNCn0NCg0Kc3RhdGljIHZvaWQgaW5p dF9kZWZhdWx0cyh2b2lkKQ0Kew0KCS8qIERlZmF1bHQgSENJZCBzZXR0aW5ncyAqLw0KCW1lbXNl dCgmbWFpbl9vcHRzLCAwLCBzaXplb2YobWFpbl9vcHRzKSk7DQoJbWFpbl9vcHRzLm9mZm1vZGUJ PSBIQ0lEX09GRk1PREVfTk9TQ0FOOw0KCW1haW5fb3B0cy5zY2FuCT0gU0NBTl9QQUdFOw0KCW1h aW5fb3B0cy5tb2RlCT0gTU9ERV9DT05ORUNUQUJMRTsNCgltYWluX29wdHMubmFtZQk9IGdfc3Ry ZHVwKCJCbHVlWiIpOw0KCW1haW5fb3B0cy5kaXNjb3Z0bwk9IEhDSURfREVGQVVMVF9ESVNDT1ZF UkFCTEVfVElNRU9VVDsNCg0KCWlmIChnZXRob3N0bmFtZShtYWluX29wdHMuaG9zdF9uYW1lLCBz aXplb2YobWFpbl9vcHRzLmhvc3RfbmFtZSkgLSAxKSA8IDApDQoJCXN0cmNweShtYWluX29wdHMu aG9zdF9uYW1lLCAibm9uYW1lIik7DQp9DQoNCnN0YXRpYyBpbmxpbmUgdm9pZCBkZXZpY2VfZXZl bnQoR0lPQ2hhbm5lbCAqY2hhbiwgZXZ0X3N0YWNrX2ludGVybmFsICpzaSkNCnsNCglldnRfc2lf ZGV2aWNlICpzZCA9ICh2b2lkICopICZzaS0+ZGF0YTsNCg0KCXN3aXRjaCAoc2QtPmV2ZW50KSB7 DQoJY2FzZSBIQ0lfREVWX1JFRzoNCgkJaW5mbygiSENJIGRldiAlZCByZWdpc3RlcmVkIiwgc2Qt PmRldl9pZCk7DQoJCWRldmljZV9kZXZyZWdfc2V0dXAoc2QtPmRldl9pZCk7DQoJCWJyZWFrOw0K DQoJY2FzZSBIQ0lfREVWX1VOUkVHOg0KCQlpbmZvKCJIQ0kgZGV2ICVkIHVucmVnaXN0ZXJlZCIs IHNkLT5kZXZfaWQpOw0KCQltYW5hZ2VyX3VucmVnaXN0ZXJfYWRhcHRlcihzZC0+ZGV2X2lkKTsN CgkJYnJlYWs7DQoNCgljYXNlIEhDSV9ERVZfVVA6DQoJCWluZm8oIkhDSSBkZXYgJWQgdXAiLCBz ZC0+ZGV2X2lkKTsNCgkJZGV2aWNlX2RldnVwX3NldHVwKHNkLT5kZXZfaWQpOw0KCQlicmVhazsN Cg0KCWNhc2UgSENJX0RFVl9ET1dOOg0KCQlpbmZvKCJIQ0kgZGV2ICVkIGRvd24iLCBzZC0+ZGV2 X2lkKTsNCgkJbWFuYWdlcl9zdG9wX2FkYXB0ZXIoc2QtPmRldl9pZCk7DQoJCXN0b3Bfc2VjdXJp dHlfbWFuYWdlcihzZC0+ZGV2X2lkKTsNCgkJYnJlYWs7DQoJfQ0KfQ0KDQpzdGF0aWMgZ2Jvb2xl YW4gaW9fc3RhY2tfZXZlbnQoR0lPQ2hhbm5lbCAqY2hhbiwgR0lPQ29uZGl0aW9uIGNvbmQsIGdw b2ludGVyIGRhdGEpDQp7DQoJdW5zaWduZWQgY2hhciBidWZbSENJX01BWF9GUkFNRV9TSVpFXSwg KnB0cjsNCglldnRfc3RhY2tfaW50ZXJuYWwgKnNpOw0KCWhjaV9ldmVudF9oZHIgKmVoOw0KCWlu dCB0eXBlOw0KCXNpemVfdCBsZW47DQoJR0lPRXJyb3IgZXJyOw0KDQoJcHRyID0gYnVmOw0KDQoJ aWYgKChlcnIgPSBnX2lvX2NoYW5uZWxfcmVhZChjaGFuLCAoZ2NoYXIgKikgYnVmLCBzaXplb2Yo YnVmKSwgJmxlbikpKSB7DQoJCWlmIChlcnIgPT0gR19JT19FUlJPUl9BR0FJTikNCgkJCXJldHVy biBUUlVFOw0KDQoJCWVycm9yKCJSZWFkIGZyb20gY29udHJvbCBzb2NrZXQgZmFpbGVkOiAlcyAo JWQpIiwNCgkJCQkJCQlzdHJlcnJvcihlcnJubyksIGVycm5vKTsNCgkJcmV0dXJuIEZBTFNFOw0K CX0NCg0KCXR5cGUgPSAqcHRyKys7DQoNCglpZiAodHlwZSAhPSBIQ0lfRVZFTlRfUEtUKQ0KCQly ZXR1cm4gVFJVRTsNCg0KCWVoID0gKGhjaV9ldmVudF9oZHIgKikgcHRyOw0KCWlmIChlaC0+ZXZ0 ICE9IEVWVF9TVEFDS19JTlRFUk5BTCkNCgkJcmV0dXJuIFRSVUU7DQoNCglwdHIgKz0gSENJX0VW RU5UX0hEUl9TSVpFOw0KDQoJc2kgPSAoZXZ0X3N0YWNrX2ludGVybmFsICopIHB0cjsNCglzd2l0 Y2ggKHNpLT50eXBlKSB7DQoJY2FzZSBFVlRfU0lfREVWSUNFOg0KCQlkZXZpY2VfZXZlbnQoY2hh biwgc2kpOw0KCQlicmVhazsNCgl9DQoNCglyZXR1cm4gVFJVRTsNCn0NCg0Kc3RhdGljIEdNYWlu TG9vcCAqZXZlbnRfbG9vcDsNCg0Kc3RhdGljIHZvaWQgc2lnX3Rlcm0oaW50IHNpZykNCnsNCgln X21haW5fbG9vcF9xdWl0KGV2ZW50X2xvb3ApOw0KfQ0KDQpzdGF0aWMgdm9pZCBzaWdfZGVidWco aW50IHNpZykNCnsNCgl0b2dnbGVfZGVidWcoKTsNCn0NCg0Kc3RhdGljIGdib29sZWFuIG9wdGlv bl9kZXRhY2ggPSBUUlVFOw0Kc3RhdGljIGdib29sZWFuIG9wdGlvbl9kZWJ1ZyA9IEZBTFNFOw0K DQpzdGF0aWMgR09wdGlvbkVudHJ5IG9wdGlvbnNbXSA9IHsNCgl7ICJub2RhZW1vbiIsICduJywg R19PUFRJT05fRkxBR19SRVZFUlNFLA0KCQkJCUdfT1BUSU9OX0FSR19OT05FLCAmb3B0aW9uX2Rl dGFjaCwNCgkJCQkiRG9uJ3QgcnVuIGFzIGRhZW1vbiBpbiBiYWNrZ3JvdW5kIiB9LA0KCXsgImRl YnVnIiwgJ2QnLCAwLCBHX09QVElPTl9BUkdfTk9ORSwgJm9wdGlvbl9kZWJ1ZywNCgkJCQkiRW5h YmxlIGRlYnVnIGluZm9ybWF0aW9uIG91dHB1dCIgfSwNCgl7IE5VTEwgfSwNCn07DQoNCmludCBt YWluKGludCBhcmdjLCBjaGFyICphcmd2W10pDQp7DQoJR09wdGlvbkNvbnRleHQgKmNvbnRleHQ7 DQoJR0Vycm9yICplcnIgPSBOVUxMOw0KCXN0cnVjdCBzb2NrYWRkcl9oY2kgYWRkcjsNCglzdHJ1 Y3QgaGNpX2ZpbHRlciBmbHQ7DQoJc3RydWN0IHNpZ2FjdGlvbiBzYTsNCglHSU9DaGFubmVsICpj dGxfaW8sICpjaGlsZF9pbzsNCgl1aW50MTZfdCBtdHUgPSAwOw0KCUdLZXlGaWxlICpjb25maWc7 DQoNCglpbml0X2RlZmF1bHRzKCk7DQoNCgljb250ZXh0ID0gZ19vcHRpb25fY29udGV4dF9uZXco TlVMTCk7DQoJZ19vcHRpb25fY29udGV4dF9hZGRfbWFpbl9lbnRyaWVzKGNvbnRleHQsIG9wdGlv bnMsIE5VTEwpOw0KDQoJaWYgKGdfb3B0aW9uX2NvbnRleHRfcGFyc2UoY29udGV4dCwgJmFyZ2Ms ICZhcmd2LCAmZXJyKSA9PSBGQUxTRSkgew0KCQlpZiAoZXJyICE9IE5VTEwpIHsNCgkJCWdfcHJp bnRlcnIoIiVzXG4iLCBlcnItPm1lc3NhZ2UpOw0KCQkJZ19lcnJvcl9mcmVlKGVycik7DQoJCX0g ZWxzZQ0KCQkJZ19wcmludGVycigiQW4gdW5rbm93biBlcnJvciBvY2N1cnJlZFxuIik7DQoJCWV4 aXQoMSk7DQoJfQ0KDQoJZ19vcHRpb25fY29udGV4dF9mcmVlKGNvbnRleHQpOw0KDQoJaWYgKG9w dGlvbl9kZXRhY2ggPT0gVFJVRSkgew0KCQlpZiAoZGFlbW9uKDAsIDApKSB7DQoJCQlwZXJyb3Io IkNhbid0IHN0YXJ0IGRhZW1vbiIpOw0KCQkJZXhpdCgxKTsNCgkJfQ0KCX0NCg0KCXVtYXNrKDAw NzcpOw0KDQoJc3RhcnRfbG9nZ2luZygiYmx1ZXRvb3RoZCIsICJCbHVldG9vdGggZGFlbW9uIik7 DQoNCgltZW1zZXQoJnNhLCAwLCBzaXplb2Yoc2EpKTsNCglzYS5zYV9mbGFncyA9IFNBX05PQ0xE U1RPUDsNCglzYS5zYV9oYW5kbGVyID0gc2lnX3Rlcm07DQoJc2lnYWN0aW9uKFNJR1RFUk0sICZz YSwgTlVMTCk7DQoJc2lnYWN0aW9uKFNJR0lOVCwgICZzYSwgTlVMTCk7DQoNCglzYS5zYV9oYW5k bGVyID0gc2lnX2RlYnVnOw0KCXNpZ2FjdGlvbihTSUdVU1IyLCAmc2EsIE5VTEwpOw0KDQoJc2Eu c2FfaGFuZGxlciA9IFNJR19JR047DQoJc2lnYWN0aW9uKFNJR1BJUEUsICZzYSwgTlVMTCk7DQoN CglpZiAob3B0aW9uX2RlYnVnID09IFRSVUUpIHsNCgkJaW5mbygiRW5hYmxpbmcgZGVidWcgaW5m b3JtYXRpb24iKTsNCgkJZW5hYmxlX2RlYnVnKCk7DQoJfQ0KDQoJLyogQ3JlYXRlIGFuZCBiaW5k IEhDSSBzb2NrZXQgKi8NCglpZiAoKG1haW5fb3B0cy5zb2NrID0gc29ja2V0KEFGX0JMVUVUT09U SCwgU09DS19SQVcsIEJUUFJPVE9fSENJKSkgPCAwKSB7DQoJCWVycm9yKCJDYW4ndCBvcGVuIEhD SSBzb2NrZXQ6ICVzICglZCkiLA0KCQkJCQkJCXN0cmVycm9yKGVycm5vKSwgZXJybm8pOw0KCQll eGl0KDEpOw0KCX0NCg0KCS8qIFNldCBmaWx0ZXIgKi8NCgloY2lfZmlsdGVyX2NsZWFyKCZmbHQp Ow0KCWhjaV9maWx0ZXJfc2V0X3B0eXBlKEhDSV9FVkVOVF9QS1QsICZmbHQpOw0KCWhjaV9maWx0 ZXJfc2V0X2V2ZW50KEVWVF9TVEFDS19JTlRFUk5BTCwgJmZsdCk7DQoJaWYgKHNldHNvY2tvcHQo bWFpbl9vcHRzLnNvY2ssIFNPTF9IQ0ksIEhDSV9GSUxURVIsICZmbHQsIHNpemVvZihmbHQpKSA8 IDApIHsNCgkJZXJyb3IoIkNhbid0IHNldCBmaWx0ZXI6ICVzICglZCkiLA0KCQkJCQkJCXN0cmVy cm9yKGVycm5vKSwgZXJybm8pOw0KCQlleGl0KDEpOw0KCX0NCg0KCWFkZHIuaGNpX2ZhbWlseSA9 IEFGX0JMVUVUT09USDsNCglhZGRyLmhjaV9kZXYgPSBIQ0lfREVWX05PTkU7DQoJaWYgKGJpbmQo bWFpbl9vcHRzLnNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmFkZHIsIHNpemVvZihhZGRyKSkg PCAwKSB7DQoJCWVycm9yKCJDYW4ndCBiaW5kIEhDSSBzb2NrZXQ6ICVzICglZCkiLA0KCQkJCQkJ CXN0cmVycm9yKGVycm5vKSwgZXJybm8pOw0KCQlleGl0KDEpOw0KCX0NCg0KCWNvbmZpZyA9IGxv YWRfY29uZmlnKENPTkZJR0RJUiAiL21haW4uY29uZiIpOw0KDQoJcGFyc2VfY29uZmlnKGNvbmZp Zyk7DQoNCglpZiAocGlwZShjaGlsZF9waXBlKSA8IDApIHsNCgkJZXJyb3IoInBpcGUoKTogJXMg KCVkKSIsIHN0cmVycm9yKGVycm5vKSwgZXJybm8pOw0KCQlleGl0KDEpOw0KCX0NCg0KCWNoaWxk X2lvID0gZ19pb19jaGFubmVsX3VuaXhfbmV3KGNoaWxkX3BpcGVbMF0pOw0KCWdfaW9fY2hhbm5l bF9zZXRfY2xvc2Vfb25fdW5yZWYoY2hpbGRfaW8sIFRSVUUpOw0KCWdfaW9fYWRkX3dhdGNoKGNo aWxkX2lvLA0KCQkJR19JT19JTiB8IEdfSU9fRVJSIHwgR19JT19IVVAgfCBHX0lPX05WQUwsDQoJ CQljaGlsZF9leGl0LCBOVUxMKTsNCglnX2lvX2NoYW5uZWxfdW5yZWYoY2hpbGRfaW8pOw0KDQoJ YWdlbnRfaW5pdCgpOw0KDQoJaWYgKGhjaWRfZGJ1c19pbml0KCkgPCAwKSB7DQoJCWVycm9yKCJV bmFibGUgdG8gZ2V0IG9uIEQtQnVzIik7DQoJCWV4aXQoMSk7DQoJfQ0KDQoJc3RhcnRfc2RwX3Nl cnZlcihtdHUsIG1haW5fb3B0cy5kZXZpY2VpZCwgU0RQX1NFUlZFUl9DT01QQVQpOw0KCXNldF9z ZXJ2aWNlX2NsYXNzZXNfY2FsbGJhY2sodXBkYXRlX3NlcnZpY2VfY2xhc3Nlcyk7DQoNCgkvKiBM b2FkaW5nIHBsdWdpbnMgaGFzIHRvIGJlIGRvbmUgYWZ0ZXIgRC1CdXMgaGFzIGJlZW4gc2V0dXAg c2luY2UNCgkgKiB0aGUgcGx1Z2lucyBtaWdodCB3YW5uYSBleHBvc2Ugc29tZSBwYXRocyBvbiB0 aGUgYnVzLiBIb3dldmVyIHRoZQ0KCSAqIGJlc3Qgb3JkZXIgb2YgaG93IHRvIGluaXQgdmFyaW91 cyBzdWJzeXN0ZW1zIG9mIHRoZSBCbHVldG9vdGgNCgkgKiBkYWVtb24gbmVlZHMgdG8gYmUgcmUt d29ya2VkLiAqLw0KCXBsdWdpbl9pbml0KGNvbmZpZyk7DQoNCglldmVudF9sb29wID0gZ19tYWlu X2xvb3BfbmV3KE5VTEwsIEZBTFNFKTsNCg0KCWN0bF9pbyA9IGdfaW9fY2hhbm5lbF91bml4X25l dyhtYWluX29wdHMuc29jayk7DQoJZ19pb19jaGFubmVsX3NldF9jbG9zZV9vbl91bnJlZihjdGxf aW8sIFRSVUUpOw0KDQoJZ19pb19hZGRfd2F0Y2goY3RsX2lvLCBHX0lPX0lOLCBpb19zdGFja19l dmVudCwgTlVMTCk7DQoNCglnX2lvX2NoYW5uZWxfdW5yZWYoY3RsX2lvKTsNCg0KCS8qIEluaXRp YWxpemUgYWxyZWFkeSBjb25uZWN0ZWQgZGV2aWNlcyAqLw0KCWluaXRfYWxsX2RldmljZXMobWFp bl9vcHRzLnNvY2spOw0KDQoJZ19tYWluX2xvb3BfcnVuKGV2ZW50X2xvb3ApOw0KDQoJaGNpZF9k YnVzX3VucmVnaXN0ZXIoKTsNCg0KCXBsdWdpbl9jbGVhbnVwKCk7DQoNCglzdG9wX3NkcF9zZXJ2 ZXIoKTsNCg0KCWFnZW50X2V4aXQoKTsNCg0KCWhjaWRfZGJ1c19leGl0KCk7DQoNCglnX21haW5f bG9vcF91bnJlZihldmVudF9sb29wKTsNCg0KCWlmIChjb25maWcpDQoJCWdfa2V5X2ZpbGVfZnJl ZShjb25maWcpOw0KDQoJaW5mbygiRXhpdCIpOw0KDQoJc3RvcF9sb2dnaW5nKCk7DQoNCglyZXR1 cm4gMDsNCn0NCg== --_003_B94C62E7C2870743865418621F040C1303A640A8pdsmsx502ccrcor_--