From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: MIME-Version: 1.0 In-Reply-To: <1262648387.16627.343.camel@localhost.localdomain> References: <2d5a2c101001040614o6627985ei278805369290b1b0@mail.gmail.com> <1262648387.16627.343.camel@localhost.localdomain> Date: Thu, 28 Jan 2010 15:54:02 +0200 Message-ID: <2d5a2c101001280554l2064b6e7p84a5f236d74a4b9d@mail.gmail.com> Subject: Re: [RFC] Media API From: Luiz Augusto von Dentz To: Marcel Holtmann Cc: linux-bluetooth@vger.kernel.org Content-Type: multipart/mixed; boundary=0016e6d9a0e806c3bf047e39da91 List-ID: --0016e6d9a0e806c3bf047e39da91 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Hi, On Tue, Jan 5, 2010 at 1:39 AM, Marcel Holtmann wrote= : > Hi Luiz, > >> The idea is to complete replace the existing audio IPC with DBus. >> Johan and I discussed this a few times in the past and today we >> finally archive something, so here are some design choices so far: >> >> 1. Codec capabilities and configuration are blobs (array of bytes or >> 'ay'), so there is no attempt to format codec structures into dbus >> structures, this make it easier for both end points as well as >> bluetoothd and also enables proprietary codecs. (suggested by Marcel >> in the last BlueZ meeting) >> >> 2. The spec is not a2dp specific. So it should be possible to register >> end points for HFP and VDP. > > if you really wanna achieve that, then I would prefer not to use > StreamEndPoint as interface. > > So first of all it should be StreamEndpoint. While SEP takes the P into > account, the word "endpoint" in itself is proper enough. > > And if this should support HFP, then the term Stream is kinda tricky. We > could just allow that, but I prefer not to mix streaming with headset > functionality. So what about just using the "Endpoint" as a generic > agent type interface. Or "MediaEndpoint" if you need to tie it to the > media interface? Here are the final documentation and a very basic implementation, note that to compile it needs dbus 1.3 (@Marcel: What about making it a hard dependency?), other remarks: - Media interface is disabled by default, to enable it one has to edit audio.conf e.g. Enable=3DMedia - simple-endpoint can be used to emulate an endpoint e.g ./simple-endpoint hci0 sbcsource (other predefined are: sbcsink mp3source mp3sink) - Due to the timeout of avdtp requests (4 sec.) Ive been using 3 sec for endpoint method calls, that why simple-endpoint always respond a predefined configuration when SelectConfiguration although SetConfiguration still requires an answer. - To not have an even bigger change which would reflect on unix socket support I had to make media_endpoint_set_configuration to block when not given a callback, this is on purpose because we are replying to avdtp commands in a sync manner. - There are still a lot missing such as: making proper use of caller of {Audio,Headset,AudioSource,AudioSink}.Connect when selecting an endpoint, hfp support, simple-endpoint for hfp roles, proper transport locking, file descriptor passing. --=20 Luiz Augusto von Dentz Engenheiro de Computa=E7=E3o --0016e6d9a0e806c3bf047e39da91 Content-Type: text/x-patch; charset=US-ASCII; name="0001-Add-media-API-documentation.patch" Content-Disposition: attachment; filename="0001-Add-media-API-documentation.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g4zln1h70 RnJvbSA0NzU5YTg4MGEzMDY5MWE3YWU5MDgxMTU0ZTJlMDZhYzdlYWY5NGJlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBMdWl6IEF1Z3VzdG8gVm9uIERlbnR6IDxsdWl6LmRlbnR6LXZv bkBub2tpYS5jb20+CkRhdGU6IFdlZCwgMTMgSmFuIDIwMTAgMTY6NTY6MjMgKzAyMDAKU3ViamVj dDogW1BBVENIIDEvNF0gQWRkIG1lZGlhIEFQSSBkb2N1bWVudGF0aW9uCgpNZWRpYSBBUEkgaXMg YSByZXBsYWNlbWVudCBmb3IgdGhlIGludGVybmFsIGF1ZGlvIElQQyB3aGljaCBpcyBubyBsb25n ZXIKbmVjZXNzYXJ5IGFzIERCdXMgMS4zIGFuZCBuZXdlciBhcmUgY2FwYWJsZSBvZiB0cmFuc2Zl cmluZyBmaWxlCmRlc2NyaXB0b3JzLgotLS0KIGRvYy9tZWRpYS1hcGkudHh0IHwgIDEyMyArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMSBmaWxl cyBjaGFuZ2VkLCAxMjMgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkb2MvbWVkaWEtYXBpLnR4dAoKZGlmZiAtLWdpdCBhL2RvYy9tZWRpYS1hcGkudHh0 IGIvZG9jL21lZGlhLWFwaS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u YjdjNjQxYwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9tZWRpYS1hcGkudHh0CkBAIC0wLDAgKzEs MTIzIEBACitCbHVlWiBELUJ1cyBNZWRpYSBBUEkgZGVzY3JpcHRpb24KKyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKgorCitNZWRpYSBoaWVyYXJjaHkKKz09PT09PT09PT09PT09PQor CitTZXJ2aWNlCQlvcmcuYmx1ZXoKK0ludGVyZmFjZQlvcmcuYmx1ZXouTWVkaWEKK09iamVjdCBw YXRoCVt2YXJpYWJsZSBwcmVmaXhdL3toY2kwLGhjaTEsLi4ufQorCitNZXRob2RzCQl2b2lkIFJl Z2lzdGVyRW5kcG9pbnQob2JqZWN0IGVuZHBvaW50LCBkaWN0IHByb3BlcnRpZXMpCisKKwkJCVJl Z2lzdGVyIGEgbG9jYWwgZW5kIHBvaW50IHRvIHNlbmRlciwgdGhlIHNlbmRlciBjYW4KKwkJCXJl Z2lzdGVyIGFzIG1hbnkgZW5kIHBvaW50cyBhcyBpdCBsaWtlcy4KKworCQkJTm90ZTogSWYgdGhl IHNlbmRlciBkaXNjb25uZWN0cyB0aGUgZW5kIHBvaW50cyBhcmUKKwkJCWF1dG9tYXRpY2FsbHkg dW5yZWdpc3RlcmVkLgorCisJCQlwb3NzaWJsZSBwcm9wZXJ0aWVzOgorCisJCQkJc3RyaW5nIFVV SUQ6CisKKwkJCQkJVVVJRCBvZiB0aGUgcHJvZmlsZSB3aGljaCB0aGUgZW5kcG9pbnQKKwkJCQkJ aXMgZm9yLgorCisJCQkJYnl0ZSBDb2RlYzoKKworCQkJCQlBc3NpZ25lZCBtdW1iZXIgb2YgY29k ZWMgdGhhdCB0aGUKKwkJCQkJZW5kcG9pbnQgaW1wbGVtZW50cy4gVGhlIHZhbHVlcyBzaG91bGQK KwkJCQkJbWF0Y2ggdGhlIHByb2ZpbGUgc3BlY2lmaWNhdGlvbiB3aGljaAorCQkJCQlpcyBpbmRp Y2F0ZWQgYnkgdGhlIFVVSUQuCisKKwkJCQlhcnJheXtieXRlfSBDYXBhYmlsaXRpZXM6CisKKwkJ CQkJQ2FwYWJpbGl0aWVzIGJsb2IsIGl0IGlzIHVzZWQgYXMgaXQgaXMKKwkJCQkJc28gdGhlIHNp emUgYW5kIGJ5dGUgb3JkZXIgbXVzdCBtYXRjaC4KKworCQl2b2lkIFVucmVnaXN0ZXJFbmRwb2lu dChvYmplY3QgZW5kcG9pbnQpCisKKwkJCVVucmVnaXN0ZXIgc2VuZGVyIGVuZCBwb2ludC4KKwor TWVkaWFFbmRwb2ludCBoaWVyYXJjaHkKKz09PT09PT09PT09PT09PT09PT09PT09CisKK1NlcnZp Y2UJCXVuaXF1ZSBuYW1lCitJbnRlcmZhY2UJb3JnLmJsdWV6Lk1lZGlhRW5kcG9pbnQKK09iamVj dCBwYXRoCWZyZWVseSBkZWZpbmFibGUKKworTWV0aG9kcwkJdm9pZCBTZXRDb25maWd1cmF0aW9u KG9iamVjdCB0cmFuc3BvcnQsIGFycmF5e2J5dGV9IGNvbmZpZ3VyYXRpb24pCisKKwkJCVNldCBj b25maWd1cmF0aW9uIGZvciB0aGUgdHJhbnNwb3J0LgorCisJCWFycmF5e2J5dGV9IFNlbGVjdENv bmZpZ3VyYXRpb24oYXJyYXl7Ynl0ZX0gY2FwYWJpbGl0aWVzKQorCisJCQlTZWxlY3QgcHJlZmVy YWJsZSBjb25maWd1cmF0aW9uIGZyb20gdGhlIHN1cHBvcnRlZAorCQkJY2FwYWJpbGl0aWVzLgor CisJCQlSZXR1cm5zIGEgY29uZmlndXJhdGlvbiB3aGljaCBjYW4gYmUgdXNlZCB0byBzZXR1cAor CQkJYSB0cmFuc3BvcnQuCisKKwkJCU5vdGU6IFRoZXJlIGlzIG5vIG5lZWQgdG8gY2FjaGUgdGhl IHNlbGVjdGVkCisJCQljb25maWd1cmF0aW9uIHNpbmNlIG9uIHN1Y2Nlc3MgdGhlIGNvbmZpZ3Vy YXRpb24gaXMKKwkJCXNlbmQgYmFjayBhcyBwYXJhbWV0ZXIgb2YgU2V0Q29uZmlndXJhdGlvbi4K KworCQl2b2lkIENsZWFyQ29uZmlndXJhdGlvbigpCisKKwkJCUNsZWFyIGFueSBjb25maWd1cmF0 aW9uIHNldC4KKworTWVkaWFUcmFuc3BvcnQgaGllcmFyY2h5Cis9PT09PT09PT09PT09PT09PT09 PT09PT0KKworU2VydmljZQkJb3JnLmJsdWV6CitJbnRlcmZhY2UJb3JnLmJsdWV6Lk1lZGlhVHJh bnNwb3J0CitPYmplY3QgcGF0aAlbdmFyaWFibGUgcHJlZml4XS97aGNpMCxoY2kxLC4uLn0vZGV2 X1hYX1hYX1hYX1hYX1hYX1hYL2ZkWAorCitNZXRob2RzCQlkaWN0IEdldFByb3BlcnRpZXMoKQor CisJCQlSZXR1cm5zIGFsbCBwcm9wZXJ0aWVzIGZvciB0aGUgaW50ZXJmYWNlLiBTZWUgdGhlCisJ CQlwcm9wZXJ0aWVzIHNlY3Rpb24gZm9yIGF2YWlsYWJsZSBwcm9wZXJ0aWVzLgorCisJCWZkIEFj cXVpcmUoc3RyaW5nIGFjY2Vzc3R5cGUpCisKKwkJCUFjcXVpcmUgdHJhbnNwb3J0IGZpbGUgZGVz Y3JpcHRvci4KKworCQkJcG9zc2libGUgYWNjZXNzdHlwZToKKworCQkJCSJyIiA6IFJlYWQgb25s eSBhY2Nlc3MKKworCQkJCSJ3IiA6IFdyaXRlIG9ubHkgYWNjZXNzCisKKwkJCQkicnciOiBSZWFk IGFuZCB3cml0ZSBhY2Nlc3MKKworCQl2b2lkIFJlbGVhc2Uoc3RyaW5nIGFjY2Vzc3R5cGUpCisK KwkJCVJlbGVhc2VzIGZpbGUgZGVzY3JpcHRvci4KKworCQl2b2lkIFNldFByb3BlcnR5KHN0cmlu ZyBuYW1lLCB2YXJpYW50IHZhbHVlKQorCisJCQlDaGFuZ2VzIHRoZSB2YWx1ZSBvZiB0aGUgc3Bl Y2lmaWVkIHByb3BlcnR5LiBPbmx5CisJCQlwcm9wZXJ0aWVzIHRoYXQgYXJlIGxpc3RlZCBhIHJl YWQtd3JpdGUgYXJlIGNoYW5nZWFibGUuCisJCQlPbiBzdWNjZXNzIHRoaXMgd2lsbCBlbWl0IGEg UHJvcGVydHlDaGFuZ2VkIHNpZ25hbC4KKworU2lnbmFscwkJdm9pZCBQcm9wZXJ0eUNoYW5nZWQo c3RyaW5nIG5hbWUsIHZhcmlhbnQgdmFsdWUpCisKKwkJCVRoaXMgc2lnbmFsIGluZGljYXRlcyBh IGNoYW5nZWQgdmFsdWUgb2YgdGhlIGdpdmVuCisJCQlwcm9wZXJ0eS4KKworUHJvcGVydGllcwl1 aW50MTYgRGVsYXkgW3JlYWR3cml0ZV0KKworCQkJT3B0aW9uYWwuIFRyYW5zcG9ydCBkZWxheSBp biAxLzEwIG9mIG1pbGlzZWNvbmQsIHRoaXMKKwkJCXByb3BlcnR5IGlzIG9ubHkgd3JpdGVhYmxl IHdoZW4gdGhlIHRyYW5zcG9ydCB3YXMKKwkJCWFjcXVpcmVkIGJ5IHRoZSBzZW5kZXIgYW5kIHRo ZSBzZW5kZXIgaXMgYSBzaW5rLgorCisJCWJvb2xlYW4gTlJFQyBbcmVhZHdyaXRlXQorCisJCQlP cHRpb25hbC4gSXQgdGVsbHMgaWYgZWNobyBjYW5jZWxsaW5nIGFuZCBub2lzZQorCQkJcmVkdWN0 aW9uIGZ1bmN0aW9ucyBhcmUgYWN0aXZlIGluIHRoZSB0cmFuc3BvcnQsIHRoaXMKKwkJCXByb3Bl cnR5IGlzIG9ubHkgd3JpdGVhYmxlIHdoZW4gdGhlIHRyYW5zcG9ydCB3YXMKKwkJCWFjcXVpcmVk IGJ5IHRoZSBzZW5kZXIuCisKKwkJb2JqZWN0IERldmljZSBbcmVhZG9ubHldCisKKwkJCURldmlj ZSBvYmplY3Qgd2hpY2ggdGhlIHRyYW5zcG9ydCBpcyBjb25uZWN0ZWQgdG8uCi0tIAoxLjYuMy4z Cgo= --0016e6d9a0e806c3bf047e39da91 Content-Type: text/x-patch; charset=US-ASCII; name="0002-Add-simple-endpoint-test-script.patch" Content-Disposition: attachment; filename="0002-Add-simple-endpoint-test-script.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g4zlnkgy1 RnJvbSAzNTc3ZWU2MDQxODdjNzU4MTgwYmNlYTZlY2Q0MDRmYzhmNGMzNTdlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBMdWl6IEF1Z3VzdG8gVm9uIERlbnR6IDxsdWl6LmRlbnR6LXZv bkBub2tpYS5jb20+CkRhdGU6IFdlZCwgMjAgSmFuIDIwMTAgMTQ6NTM6MDAgKzAyMDAKU3ViamVj dDogW1BBVENIIDIvNF0gQWRkIHNpbXBsZS1lbmRwb2ludCB0ZXN0IHNjcmlwdAoKLS0tCiB0ZXN0 L3NpbXBsZS1lbmRwb2ludCB8ICAxMDYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysKIDEgZmlsZXMgY2hhbmdlZCwgMTA2IGluc2VydGlvbnMoKyksIDAg ZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA3NTUgdGVzdC9zaW1wbGUtZW5kcG9pbnQKCmRp ZmYgLS1naXQgYS90ZXN0L3NpbXBsZS1lbmRwb2ludCBiL3Rlc3Qvc2ltcGxlLWVuZHBvaW50Cm5l dyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVmZWU4YmYKLS0tIC9kZXYvbnVsbAor KysgYi90ZXN0L3NpbXBsZS1lbmRwb2ludApAQCAtMCwwICsxLDEwNiBAQAorIyEvdXNyL2Jpbi9w eXRob24KKworaW1wb3J0IHN5cworaW1wb3J0IGRidXMKK2ltcG9ydCBkYnVzLnNlcnZpY2UKK2lt cG9ydCBkYnVzLm1haW5sb29wLmdsaWIKK2ltcG9ydCBnb2JqZWN0CisKK0EyRFBfU09VUkNFX1VV SUQgPSAiMDAwMDExMEEtMDAwMC0xMDAwLTgwMDAtMDA4MDVGOUIzNEZCIgorQTJEUF9TSU5LX1VV SUQgPSAiMDAwMDExMEItMDAwMC0xMDAwLTgwMDAtMDA4MDVGOUIzNEZCIgorCitTQkNfQ09ERUMg PSBkYnVzLkJ5dGUoMHgwMCkKKyNDaGFubmVsIE1vZGVzOiBNb25vIER1YWxDaGFubmVsIFN0ZXJl byBKb2ludFN0ZXJlbworI0ZyZXF1ZW5jaWVzOiAxNktoeiAzMktoeiA0NC4xS2h6IDQ4S2h6Cisj U3ViYmFuZHM6IDQgOAorI0Jsb2NrczogNCA4IDEyIDE2CisjQml0cG9vbCBSYW5nZTogMi02NAor U0JDX0NBUEFCSUxJVElFUyA9IGRidXMuQXJyYXkoW2RidXMuQnl0ZSgweGZmKSwgZGJ1cy5CeXRl KDB4ZmYpLCBkYnVzLkJ5dGUoMiksIGRidXMuQnl0ZSg2NCldKQorIyBKb2ludFN0ZXJlbyA0NC4x S2h6IFN1YmJhbmRzOiBCbG9ja3M6IDE2IEJpdHBvb2wgUmFuZ2U6IDY0LTY0CitTQkNfQ09ORklH VVJBVElPTiA9IGRidXMuQXJyYXkoW2RidXMuQnl0ZSgweDEyKSwgZGJ1cy5CeXRlKDB4MTUpLCBk YnVzLkJ5dGUoNjQpLCBkYnVzLkJ5dGUoNjQpXSkKKworTVAzX0NPREVDID0gZGJ1cy5CeXRlKDB4 MDEpCisjQ2hhbm5lbCBNb2RlczogTW9ubyBEdWFsQ2hhbm5lbCBTdGVyZW8gSm9pbnRTdGVyZW8K KyNGcmVxdWVuY2llczogMTZLaHogMjIuMDVLaHogMjRLaHogMzJLaHogNDQuMUtoeiA0OEtoegor I0NSQzogTm8KKyNMYXllcjogMSAyIDMKKyNCaXQgUmF0ZTogRnJlZSBmb3JtYXQKKyNWQlI6IFll cworI1BheWxvYWQgRm9ybWF0OiBSRkMtMjI1MAorTVAzX0NBUEFCSUxJVElFUyA9IGRidXMuQXJy YXkoW2RidXMuQnl0ZSgweGVmKSwgZGJ1cy5CeXRlKDB4M2YpLCBkYnVzLkJ5dGUoMHhmZiksIGRi dXMuQnl0ZSgweGZmKV0pCisjIEpvaW50U3RlcmVvIDQ0LjFLaHogTGF5ZXI6IDMgQml0IFJhdGU6 IFZCUiBGb3JtYXQ6IFJGQy0yMjUwCitNUDNfQ09ORklHVVJBVElPTiA9IGRidXMuQXJyYXkoW2Ri dXMuQnl0ZSgweDIyKSwgZGJ1cy5CeXRlKDB4MDIpLCBkYnVzLkJ5dGUoMHg4MCksIGRidXMuQnl0 ZSgweDAwKV0pCisKK2NsYXNzIFJlamVjdGVkKGRidXMuREJ1c0V4Y2VwdGlvbik6CisJX2RidXNf ZXJyb3JfbmFtZSA9ICJvcmcuYmx1ZXouRXJyb3IuUmVqZWN0ZWQiCisKK2NsYXNzIEVuZHBvaW50 KGRidXMuc2VydmljZS5PYmplY3QpOgorCWNvbmZpZ3VyYXRpb24gPSBTQkNfQ09ORklHVVJBVElP TgorCisJZGVmIGRlZmF1bHRfY29uZmlndXJhdGlvbihzZWxmLCBjb25maWd1cmF0aW9uKToKKwkJ c2VsZi5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbgorCisJQGRidXMuc2VydmljZS5tZXRo b2QoIm9yZy5ibHVlei5NZWRpYUVuZHBvaW50IiwKKwkJCQkJaW5fc2lnbmF0dXJlPSIiLCBvdXRf c2lnbmF0dXJlPSIiKQorCWRlZiBDbGVhckNvbmZpZ3VyYXRpb24oc2VsZik6CisJCXByaW50ICJD bGVhckNvbmZpZ3VyYXRpb24iCisKKwlAZGJ1cy5zZXJ2aWNlLm1ldGhvZCgib3JnLmJsdWV6Lk1l ZGlhRW5kcG9pbnQiLAorCQkJCQlpbl9zaWduYXR1cmU9Im9heSIsIG91dF9zaWduYXR1cmU9IiIp CisJZGVmIFNldENvbmZpZ3VyYXRpb24oc2VsZiwgdHJhbnNwb3J0LCBjb25maWcpOgorCQlwcmlu dCAiU2V0Q29uZmlndXJhdGlvbiAoJXMsICVzKSIgJSAodHJhbnNwb3J0LCBjb25maWcpCisJCWFj Y2VwdCA9IHJhd19pbnB1dCgiQWNjZXB0IGNvbmZpZ3VyYXRpb24gKHllcy9ubyk6ICIpCisJCWlm IChhY2NlcHQgPT0gInllcyIpOgorCQkJcmV0dXJuCisJCXJhaXNlIFJlamVjdGVkKCJJbnZhbGlk IGNvbmZpZ3VyYXRpb24iKQorCisJQGRidXMuc2VydmljZS5tZXRob2QoIm9yZy5ibHVlei5NZWRp YUVuZHBvaW50IiwKKwkJCQkJaW5fc2lnbmF0dXJlPSJheSIsIG91dF9zaWduYXR1cmU9ImF5IikK KwlkZWYgU2VsZWN0Q29uZmlndXJhdGlvbihzZWxmLCBjYXBzKToKKwkJcHJpbnQgIlNlbGVjdENv bmZpZ3VyYXRpb24gKCVzKSIgJSAoY2FwcykKKwkJcmV0dXJuIHNlbGYuY29uZmlndXJhdGlvbgor CitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorCWRidXMubWFpbmxvb3AuZ2xpYi5EQnVzR01h aW5Mb29wKHNldF9hc19kZWZhdWx0PVRydWUpCisKKwlidXMgPSBkYnVzLlN5c3RlbUJ1cygpCisJ bWFuYWdlciA9IGRidXMuSW50ZXJmYWNlKGJ1cy5nZXRfb2JqZWN0KCJvcmcuYmx1ZXoiLCAiLyIp LAorCQkJCQkJIm9yZy5ibHVlei5NYW5hZ2VyIikKKworCWlmIGxlbihzeXMuYXJndikgPiAxOgor CQlwYXRoID0gbWFuYWdlci5GaW5kQWRhcHRlcihzeXMuYXJndlsxXSkKKwllbHNlOgorCQlwYXRo ID0gbWFuYWdlci5EZWZhdWx0QWRhcHRlcigpCisKKwltZWRpYSA9IGRidXMuSW50ZXJmYWNlKGJ1 cy5nZXRfb2JqZWN0KCJvcmcuYmx1ZXoiLCBwYXRoKSwKKwkJCQkJCSJvcmcuYmx1ZXouTWVkaWEi KQorCisJcGF0aCA9ICIvdGVzdC9lbmRwb2ludCIKKwllbmRwb2ludCA9IEVuZHBvaW50KGJ1cywg cGF0aCkKKwltYWlubG9vcCA9IGdvYmplY3QuTWFpbkxvb3AoKQorCisJcHJvcGVydGllcyA9IGRi dXMuRGljdGlvbmFyeSh7ICJVVUlEIiA6IEEyRFBfU09VUkNFX1VVSUQsCisJCQkJCSJDb2RlYyIg OiBTQkNfQ09ERUMsCisJCQkJCSJDYXBhYmlsaXRpZXMiIDogU0JDX0NBUEFCSUxJVElFUyB9KQor CisJaWYgbGVuKHN5cy5hcmd2KSA+IDI6CisJCWlmIHN5cy5hcmd2WzJdID09ICJzYmNzaW5rIjoK KwkJCXByb3BlcnRpZXMgPSBkYnVzLkRpY3Rpb25hcnkoeyAiVVVJRCIgOiBBMkRQX1NJTktfVVVJ RCwKKwkJCQkJCQkiQ29kZWMiIDogU0JDX0NPREVDLAorCQkJCQkJCSJDYXBhYmlsaXRpZXMiIDog U0JDX0NBUEFCSUxJVElFUyB9KQorCQlpZiBzeXMuYXJndlsyXSA9PSAibXAzc291cmNlIjoKKwkJ CXByb3BlcnRpZXMgPSBkYnVzLkRpY3Rpb25hcnkoeyAiVVVJRCIgOiBBMkRQX1NPVVJDRV9VVUlE LAorCQkJCQkJCSJDb2RlYyIgOiBNUDNfQ09ERUMsCisJCQkJCQkJIkNhcGFiaWxpdGllcyIgOiBN UDNfQ0FQQUJJTElUSUVTIH0pCisJCQllbmRwb2ludC5kZWZhdWx0X2NvbmZpZ3VyYXRpb24oTVAz X0NPTkZJR1VSQVRJT04pCisJCWlmIHN5cy5hcmd2WzJdID09ICJtcDNzaW5rIjoKKwkJCXByb3Bl cnRpZXMgPSBkYnVzLkRpY3Rpb25hcnkoeyAiVVVJRCIgOiBBMkRQX1NPVVJDRV9VVUlELAorCQkJ CQkJCSJDb2RlYyIgOiBNUDNfQ09ERUMsCisJCQkJCQkJIkNhcGFiaWxpdGllcyIgOiBNUDNfQ0FQ QUJJTElUSUVTIH0pCisJCQllbmRwb2ludC5kZWZhdWx0X2NvbmZpZ3VyYXRpb24oTVAzX0NPTkZJ R1VSQVRJT04pCisKKwlwcmludCBwcm9wZXJ0aWVzCisKKwltZWRpYS5SZWdpc3RlckVuZHBvaW50 KHBhdGgsIHByb3BlcnRpZXMpCisKKwltYWlubG9vcC5ydW4oKQotLSAKMS42LjMuMwoK --0016e6d9a0e806c3bf047e39da91 Content-Type: text/x-patch; charset=US-ASCII; name="0003-Add-rule-to-enabling-talking-to-org.bluez.MediaEndpo.patch" Content-Disposition: attachment; filename="0003-Add-rule-to-enabling-talking-to-org.bluez.MediaEndpo.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g4zlnzm52 RnJvbSBlMzcyNTUyYmQyMjBiNGVkYWM2MDFjMjc4ZTc1ZDVjMmY1NGZlNWRjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBMdWl6IEF1Z3VzdG8gVm9uIERlbnR6IDxsdWl6LmRlbnR6LXZv bkBub2tpYS5jb20+CkRhdGU6IFRodSwgMjEgSmFuIDIwMTAgMTg6MjM6NDUgKzAyMDAKU3ViamVj dDogW1BBVENIIDMvNF0gQWRkIHJ1bGUgdG8gZW5hYmxpbmcgdGFsa2luZyB0byBvcmcuYmx1ZXou TWVkaWFFbmRwb2ludAoKLS0tCiBzcmMvYmx1ZXRvb3RoLmNvbmYgfCAgICAxICsKIDEgZmlsZXMg Y2hhbmdlZCwgMSBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3Ny Yy9ibHVldG9vdGguY29uZiBiL3NyYy9ibHVldG9vdGguY29uZgppbmRleCAzMTUwMDljLi42YmM2 YmJhIDEwMDY0NAotLS0gYS9zcmMvYmx1ZXRvb3RoLmNvbmYKKysrIGIvc3JjL2JsdWV0b290aC5j b25mCkBAIC0xMSw2ICsxMSw3IEBACiAgICAgPGFsbG93IG93bj0ib3JnLmJsdWV6Ii8+CiAgICAg PGFsbG93IHNlbmRfZGVzdGluYXRpb249Im9yZy5ibHVleiIvPgogICAgIDxhbGxvdyBzZW5kX2lu dGVyZmFjZT0ib3JnLmJsdWV6LkFnZW50Ii8+CisgICAgPGFsbG93IHNlbmRfaW50ZXJmYWNlPSJv cmcuYmx1ZXouTWVkaWFFbmRwb2ludCIvPgogICA8L3BvbGljeT4KIAogICA8cG9saWN5IGF0X2Nv bnNvbGU9InRydWUiPgotLSAKMS42LjMuMwoK --0016e6d9a0e806c3bf047e39da91 Content-Type: text/x-patch; charset=US-ASCII; name="0004-Add-initial-implementation-of-org.bluez.Media-spec.patch" Content-Disposition: attachment; filename="0004-Add-initial-implementation-of-org.bluez.Media-spec.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g4zloh5i3 RnJvbSAzZjJhZGMyNzFmOWRhMTUzNTE4YjMwMWQzZGE2ZTQ3ZDE3ODgxOGUwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBMdWl6IEF1Z3VzdG8gVm9uIERlbnR6IDxsdWl6LmRlbnR6LXZv bkBub2tpYS5jb20+CkRhdGU6IFRodSwgMjggSmFuIDIwMTAgMTU6MTE6MTMgKzAyMDAKU3ViamVj dDogW1BBVENIIDQvNF0gQWRkIGluaXRpYWwgaW1wbGVtZW50YXRpb24gb2Ygb3JnLmJsdWV6Lk1l ZGlhIHNwZWMKCi0tLQogTWFrZWZpbGUuYW0gICAgIHwgICAgMSArCiBhdWRpby9hMmRwLmMgICAg fCAgNTkyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLQogYXVkaW8v YTJkcC5oICAgIHwgICAxNCArCiBhdWRpby9hdmR0cC5jICAgfCAgICAzICsKIGF1ZGlvL21hbmFn ZXIuYyB8ICAgNTAgKysrKwogYXVkaW8vbWFuYWdlci5oIHwgICAgMSArCiBhdWRpby9tZWRpYS5j ICAgfCAgNzc4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysKIGF1ZGlvL21lZGlhLmggICB8ICAgNDUgKysrKwogYXVkaW8vc2luay5jICAgIHwg IDE3OCArKy0tLS0tLS0tLS0tCiBhdWRpby9zb3VyY2UuYyAgfCAgMTc0ICsrLS0tLS0tLS0tLS0K IGF1ZGlvL3VuaXguYyAgICB8ICAgIDEgKwogMTEgZmlsZXMgY2hhbmdlZCwgMTQ2MyBpbnNlcnRp b25zKCspLCAzNzQgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgYXVkaW8vbWVkaWEu YwogY3JlYXRlIG1vZGUgMTAwNjQ0IGF1ZGlvL21lZGlhLmgKCmRpZmYgLS1naXQgYS9NYWtlZmls ZS5hbSBiL01ha2VmaWxlLmFtCmluZGV4IGY4MTExYTkuLmM1NTgzNGEgMTAwNjQ0Ci0tLSBhL01h a2VmaWxlLmFtCisrKyBiL01ha2VmaWxlLmFtCkBAIC0xMjEsNiArMTIxLDcgQEAgYnVpbHRpbl9z b3VyY2VzICs9IGF1ZGlvL21haW4uYyBcCiAJCQlhdWRpby9hdmR0cC5oIGF1ZGlvL2F2ZHRwLmMg XAogCQkJYXVkaW8vaXBjLmggYXVkaW8vaXBjLmMgXAogCQkJYXVkaW8vdW5peC5oIGF1ZGlvL3Vu aXguYyBcCisJCQlhdWRpby9tZWRpYS5oIGF1ZGlvL21lZGlhLmMgXAogCQkJYXVkaW8vdGVsZXBo b255LmgKIGJ1aWx0aW5fbm9kaXN0ICs9IGF1ZGlvL3RlbGVwaG9ueS5jCiAKZGlmZiAtLWdpdCBh L2F1ZGlvL2EyZHAuYyBiL2F1ZGlvL2EyZHAuYwppbmRleCA1NzUyOTFhLi4wNWQ1OTcxIDEwMDY0 NAotLS0gYS9hdWRpby9hMmRwLmMKKysrIGIvYXVkaW8vYTJkcC5jCkBAIC00Myw2ICs0Myw3IEBA CiAjaW5jbHVkZSAic2luay5oIgogI2luY2x1ZGUgInNvdXJjZS5oIgogI2luY2x1ZGUgInVuaXgu aCIKKyNpbmNsdWRlICJtZWRpYS5oIgogI2luY2x1ZGUgImEyZHAuaCIKICNpbmNsdWRlICJzZHBk LmgiCiAKQEAgLTYwLDYgKzYxLDggQEAKICNlbmRpZgogCiBzdHJ1Y3QgYTJkcF9zZXAgeworCXN0 cnVjdCBhMmRwX3NlcnZlciAqc2VydmVyOworCXN0cnVjdCBtZWRpYV9lbmRwb2ludCAqZW5kcG9p bnQ7CiAJdWludDhfdCB0eXBlOwogCXVpbnQ4X3QgY29kZWM7CiAJc3RydWN0IGF2ZHRwX2xvY2Fs X3NlcCAqc2VwOwpAQCAtNzMsNiArNzYsNyBAQCBzdHJ1Y3QgYTJkcF9zZXAgewogfTsKIAogc3Ry dWN0IGEyZHBfc2V0dXBfY2IgeworCWEyZHBfc2VsZWN0X2NiX3Qgc2VsZWN0X2NiOwogCWEyZHBf Y29uZmlnX2NiX3QgY29uZmlnX2NiOwogCWEyZHBfc3RyZWFtX2NiX3QgcmVzdW1lX2NiOwogCWEy ZHBfc3RyZWFtX2NiX3Qgc3VzcGVuZF9jYjsKQEAgLTg3LDYgKzkxLDcgQEAgc3RydWN0IGEyZHBf c2V0dXAgewogCXN0cnVjdCBhdmR0cF9zdHJlYW0gKnN0cmVhbTsKIAlzdHJ1Y3QgYXZkdHBfZXJy b3IgKmVycjsKIAlHU0xpc3QgKmNsaWVudF9jYXBzOworCWdib29sZWFuIGRlbGF5X3JlcG9ydGlu ZzsKIAlnYm9vbGVhbiByZWNvbmZpZ3VyZTsKIAlnYm9vbGVhbiBjYW5jZWxlZDsKIAlnYm9vbGVh biBzdGFydDsKQEAgLTIyOCw2ICsyMzMsMjUgQEAgc3RhdGljIGdib29sZWFuIGZpbmFsaXplX3N1 c3BlbmRfZXJybm8oc3RydWN0IGEyZHBfc2V0dXAgKnMsIGludCBlcnIpCiAJcmV0dXJuIGZpbmFs aXplX3N1c3BlbmQocyk7CiB9CiAKK3N0YXRpYyBnYm9vbGVhbiBmaW5hbGl6ZV9zZWxlY3Qoc3Ry dWN0IGEyZHBfc2V0dXAgKnMsIEdTTGlzdCAqY2FwcykKK3sKKwlHU0xpc3QgKmw7CisKKwlzZXR1 cF9yZWYocyk7CisJZm9yIChsID0gcy0+Y2I7IGwgIT0gTlVMTDsgbCA9IGwtPm5leHQpIHsKKwkJ c3RydWN0IGEyZHBfc2V0dXBfY2IgKmNiID0gbC0+ZGF0YTsKKworCQlpZiAoY2ItPnNlbGVjdF9j YikgeworCQkJY2ItPnNlbGVjdF9jYihzLT5zZXNzaW9uLCBzLT5zZXAsIGNhcHMsIGNiLT51c2Vy X2RhdGEpOworCQkJY2ItPnNlbGVjdF9jYiA9IE5VTEw7CisJCQlzZXR1cF91bnJlZihzKTsKKwkJ fQorCX0KKworCXNldHVwX3VucmVmKHMpOworCXJldHVybiBGQUxTRTsKK30KKwogc3RhdGljIHN0 cnVjdCBhMmRwX3NldHVwICpmaW5kX3NldHVwX2J5X3Nlc3Npb24oc3RydWN0IGF2ZHRwICpzZXNz aW9uKQogewogCUdTTGlzdCAqbDsKQEAgLTI3Nyw2ICszMDEsOSBAQCBzdGF0aWMgdm9pZCBzdHJl YW1fc3RhdGVfY2hhbmdlZChzdHJ1Y3QgYXZkdHBfc3RyZWFtICpzdHJlYW0sCiAJCXNlcC0+c2Vz c2lvbiA9IE5VTEw7CiAJfQogCisJaWYgKHNlcC0+ZW5kcG9pbnQpCisJCW1lZGlhX2VuZHBvaW50 X2NsZWFyX2NvbmZpZ3VyYXRpb24oc2VwLT5lbmRwb2ludCk7CisKIAlzZXAtPnN0cmVhbSA9IE5V TEw7CiAKIH0KQEAgLTUwNiw2ICs1MzMsMTE3IEBAIHN0YXRpYyBnYm9vbGVhbiBtcGVnX2dldGNh cF9pbmQoc3RydWN0IGF2ZHRwICpzZXNzaW9uLAogCXJldHVybiBUUlVFOwogfQogCitzdGF0aWMg Z2Jvb2xlYW4gZW5kcG9pbnRfc2V0Y29uZl9pbmQoc3RydWN0IGF2ZHRwICpzZXNzaW9uLAorCQkJ CQlzdHJ1Y3QgYXZkdHBfbG9jYWxfc2VwICpzZXAsCisJCQkJCXN0cnVjdCBhdmR0cF9zdHJlYW0g KnN0cmVhbSwKKwkJCQkJR1NMaXN0ICpjYXBzLCB1aW50OF90ICplcnIsCisJCQkJCXVpbnQ4X3Qg KmNhdGVnb3J5LCB2b2lkICp1c2VyX2RhdGEpCit7CisJc3RydWN0IGEyZHBfc2VwICphMmRwX3Nl cCA9IHVzZXJfZGF0YTsKKwlzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXY7CisKKwlpZiAoYTJkcF9z ZXAtPnR5cGUgPT0gQVZEVFBfU0VQX1RZUEVfU0lOSykKKwkJZGVidWcoIlNpbmsgJXA6IFNldF9D b25maWd1cmF0aW9uX0luZCIsIHNlcCk7CisJZWxzZQorCQlkZWJ1ZygiU291cmNlICVwOiBTZXRf Q29uZmlndXJhdGlvbl9JbmQiLCBzZXApOworCisJZGV2ID0gYTJkcF9nZXRfZGV2KHNlc3Npb24p OworCWlmICghZGV2KSB7CisJCSplcnIgPSBBVkRUUF9VTlNVUFBPUlRFRF9DT05GSUdVUkFUSU9O OworCQkqY2F0ZWdvcnkgPSAweDAwOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJZm9yICg7IGNh cHMgIT0gTlVMTDsgY2FwcyA9IGdfc2xpc3RfbmV4dChjYXBzKSkgeworCQlzdHJ1Y3QgYXZkdHBf c2VydmljZV9jYXBhYmlsaXR5ICpjYXAgPSBjYXBzLT5kYXRhOworCQlzdHJ1Y3QgYXZkdHBfbWVk aWFfY29kZWNfY2FwYWJpbGl0eSAqY29kZWM7CisJCWdib29sZWFuIHJldDsKKworCQlpZiAoY2Fw LT5jYXRlZ29yeSA9PSBBVkRUUF9ERUxBWV9SRVBPUlRJTkcgJiYKKwkJCQkJIWEyZHBfc2VwLT5k ZWxheV9yZXBvcnRpbmcpIHsKKwkJCSplcnIgPSBBVkRUUF9VTlNVUFBPUlRFRF9DT05GSUdVUkFU SU9OOworCQkJKmNhdGVnb3J5ID0gQVZEVFBfREVMQVlfUkVQT1JUSU5HOworCQkJcmV0dXJuIEZB TFNFOworCQl9CisKKwkJaWYgKGNhcC0+Y2F0ZWdvcnkgIT0gQVZEVFBfTUVESUFfQ09ERUMpCisJ CQljb250aW51ZTsKKworCQljb2RlYyA9IChzdHJ1Y3QgYXZkdHBfbWVkaWFfY29kZWNfY2FwYWJp bGl0eSAqKSBjYXAtPmRhdGE7CisKKwkJaWYgKGNvZGVjLT5tZWRpYV9jb2RlY190eXBlICE9IGEy ZHBfc2VwLT5jb2RlYykgeworCQkJKmVyciA9IEFWRFRQX1VOU1VQUE9SVEVEX0NPTkZJR1VSQVRJ T047CisJCQkqY2F0ZWdvcnkgPSBBVkRUUF9NRURJQV9DT0RFQzsKKwkJCXJldHVybiBGQUxTRTsK KwkJfQorCisJCXJldCA9IG1lZGlhX2VuZHBvaW50X3NldF9jb25maWd1cmF0aW9uKGEyZHBfc2Vw LT5lbmRwb2ludCwgZGV2LAorCQkJCQljb2RlYy0+ZGF0YSwgY2FwLT5sZW5ndGggLSBzaXplb2Yo KmNvZGVjKSwKKwkJCQkJTlVMTCwgTlVMTCk7CisJCWlmIChyZXQpCisJCQlicmVhazsKKworCQkq ZXJyID0gQVZEVFBfVU5TVVBQT1JURURfQ09ORklHVVJBVElPTjsKKwkJKmNhdGVnb3J5ID0gQVZE VFBfTUVESUFfQ09ERUM7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlhdmR0cF9zdHJlYW1fYWRk X2NiKHNlc3Npb24sIHN0cmVhbSwgc3RyZWFtX3N0YXRlX2NoYW5nZWQsIGEyZHBfc2VwKTsKKwlh MmRwX3NlcC0+c3RyZWFtID0gc3RyZWFtOworCisJaWYgKGEyZHBfc2VwLT50eXBlID09IEFWRFRQ X1NFUF9UWVBFX1NPVVJDRSkKKwkJc2lua19uZXdfc3RyZWFtKGRldiwgc2Vzc2lvbiwgc3RyZWFt KTsKKworCXJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gZW5kcG9pbnRfZ2V0Y2Fw X2luZChzdHJ1Y3QgYXZkdHAgKnNlc3Npb24sCisJCQkJc3RydWN0IGF2ZHRwX2xvY2FsX3NlcCAq c2VwLAorCQkJCWdib29sZWFuIGdldF9hbGwsCisJCQkJR1NMaXN0ICoqY2FwcywgdWludDhfdCAq ZXJyLCB2b2lkICp1c2VyX2RhdGEpCit7CisJc3RydWN0IGEyZHBfc2VwICphMmRwX3NlcCA9IHVz ZXJfZGF0YTsKKwlzdHJ1Y3QgYXZkdHBfc2VydmljZV9jYXBhYmlsaXR5ICptZWRpYV90cmFuc3Bv cnQsICptZWRpYV9jb2RlYzsKKwlzdHJ1Y3QgYXZkdHBfbWVkaWFfY29kZWNfY2FwYWJpbGl0eSAq Y29kZWNfY2FwczsKKwl1aW50OF90ICpjYXBhYmlsaXRpZXM7CisJc2l6ZV90IGxlbmd0aDsKKwor CWlmIChhMmRwX3NlcC0+dHlwZSA9PSBBVkRUUF9TRVBfVFlQRV9TSU5LKQorCQlkZWJ1ZygiU2lu ayAlcDogR2V0X0NhcGFiaWxpdHlfSW5kIiwgc2VwKTsKKwllbHNlCisJCWRlYnVnKCJTb3VyY2Ug JXA6IEdldF9DYXBhYmlsaXR5X0luZCIsIHNlcCk7CisKKwkqY2FwcyA9IE5VTEw7CisKKwltZWRp YV90cmFuc3BvcnQgPSBhdmR0cF9zZXJ2aWNlX2NhcF9uZXcoQVZEVFBfTUVESUFfVFJBTlNQT1JU LAorCQkJCQkJTlVMTCwgMCk7CisKKwkqY2FwcyA9IGdfc2xpc3RfYXBwZW5kKCpjYXBzLCBtZWRp YV90cmFuc3BvcnQpOworCisJbGVuZ3RoID0gbWVkaWFfZW5kcG9pbnRfZ2V0X2NhcGFiaWxpdGll cyhhMmRwX3NlcC0+ZW5kcG9pbnQsCisJCQkJCQkmY2FwYWJpbGl0aWVzKTsKKworCWNvZGVjX2Nh cHMgPSBnX21hbGxvYyhzaXplb2YoKmNvZGVjX2NhcHMpICsgbGVuZ3RoKTsKKwljb2RlY19jYXBz LT5tZWRpYV90eXBlID0gQVZEVFBfTUVESUFfVFlQRV9BVURJTzsKKwljb2RlY19jYXBzLT5tZWRp YV9jb2RlY190eXBlID0gYTJkcF9zZXAtPmNvZGVjOworCW1lbWNweShjb2RlY19jYXBzLT5kYXRh LCBjYXBhYmlsaXRpZXMsIGxlbmd0aCk7CisKKwltZWRpYV9jb2RlYyA9IGF2ZHRwX3NlcnZpY2Vf Y2FwX25ldyhBVkRUUF9NRURJQV9DT0RFQywgY29kZWNfY2FwcywKKwkJCQkJCXNpemVvZigqY29k ZWNfY2FwcykgKyBsZW5ndGgpOworCisJKmNhcHMgPSBnX3NsaXN0X2FwcGVuZCgqY2FwcywgbWVk aWFfY29kZWMpOworCWdfZnJlZShjb2RlY19jYXBzKTsKKworCWlmIChnZXRfYWxsKSB7CisJCXN0 cnVjdCBhdmR0cF9zZXJ2aWNlX2NhcGFiaWxpdHkgKmRlbGF5X3JlcG9ydGluZzsKKwkJZGVsYXlf cmVwb3J0aW5nID0gYXZkdHBfc2VydmljZV9jYXBfbmV3KEFWRFRQX0RFTEFZX1JFUE9SVElORywK KwkJCQkJCQkJTlVMTCwgMCk7CisJCSpjYXBzID0gZ19zbGlzdF9hcHBlbmQoKmNhcHMsIGRlbGF5 X3JlcG9ydGluZyk7CisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisKIHN0YXRpYyB2b2lkIHNldGNv bmZfY2ZtKHN0cnVjdCBhdmR0cCAqc2Vzc2lvbiwgc3RydWN0IGF2ZHRwX2xvY2FsX3NlcCAqc2Vw LAogCQkJCXN0cnVjdCBhdmR0cF9zdHJlYW0gKnN0cmVhbSwKIAkJCQlzdHJ1Y3QgYXZkdHBfZXJy b3IgKmVyciwgdm9pZCAqdXNlcl9kYXRhKQpAQCAtNTQ0LDYgKzY4MiwyMiBAQCBzdGF0aWMgdm9p ZCBzZXRjb25mX2NmbShzdHJ1Y3QgYXZkdHAgKnNlc3Npb24sIHN0cnVjdCBhdmR0cF9sb2NhbF9z ZXAgKnNlcCwKIAllbHNlCiAJCXNvdXJjZV9uZXdfc3RyZWFtKGRldiwgc2Vzc2lvbiwgc2V0dXAt PnN0cmVhbSk7CiAKKwkvKiBOb3RpZnkgRW5kcG9pbnQgKi8KKwlpZiAoYTJkcF9zZXAtPmVuZHBv aW50KSB7CisJCXN0cnVjdCBhdmR0cF9zZXJ2aWNlX2NhcGFiaWxpdHkgKnNlcnZpY2UgPSBhdmR0 cF9zdHJlYW1fZ2V0X2NvZGVjKHN0cmVhbSk7CisJCXN0cnVjdCBhdmR0cF9tZWRpYV9jb2RlY19j YXBhYmlsaXR5ICpjb2RlYzsKKworCQljb2RlYyA9IChzdHJ1Y3QgYXZkdHBfbWVkaWFfY29kZWNf Y2FwYWJpbGl0eSAqKSBzZXJ2aWNlLT5kYXRhOworCisJCWlmIChtZWRpYV9lbmRwb2ludF9zZXRf Y29uZmlndXJhdGlvbihhMmRwX3NlcC0+ZW5kcG9pbnQsIGRldiwKKwkJCQkJCWNvZGVjLT5kYXRh LCBzZXJ2aWNlLT5sZW5ndGggLQorCQkJCQkJc2l6ZW9mKCpjb2RlYyksIE5VTEwsIE5VTEwpID09 CisJCQkJCQlGQUxTRSkgeworCQkJc2V0dXAtPnN0cmVhbSA9IE5VTEw7CisJCQlmaW5hbGl6ZV9j b25maWdfZXJybm8oc2V0dXAsIC1FUEVSTSk7CisJCX0KKwl9CisKIAlyZXQgPSBhdmR0cF9vcGVu KHNlc3Npb24sIHN0cmVhbSk7CiAJaWYgKHJldCA8IDApIHsKIAkJZXJyb3IoIkVycm9yIG9uIGF2 ZHRwX29wZW4gJXMgKCVkKSIsIHN0cmVycm9yKC1yZXQpLCAtcmV0KTsKQEAgLTEwMDUsNiArMTE1 OSwxOSBAQCBzdGF0aWMgc3RydWN0IGF2ZHRwX3NlcF9pbmQgbXBlZ19pbmQgPSB7CiAJLmRlbGF5 cmVwb3J0CQk9IGRlbGF5cmVwb3J0X2luZCwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgYXZkdHBfc2Vw X2luZCBlbmRwb2ludF9pbmQgPSB7CisJLmdldF9jYXBhYmlsaXR5CQk9IGVuZHBvaW50X2dldGNh cF9pbmQsCisJLnNldF9jb25maWd1cmF0aW9uCT0gZW5kcG9pbnRfc2V0Y29uZl9pbmQsCisJLmdl dF9jb25maWd1cmF0aW9uCT0gZ2V0Y29uZl9pbmQsCisJLm9wZW4JCQk9IG9wZW5faW5kLAorCS5z dGFydAkJCT0gc3RhcnRfaW5kLAorCS5zdXNwZW5kCQk9IHN1c3BlbmRfaW5kLAorCS5jbG9zZQkJ CT0gY2xvc2VfaW5kLAorCS5hYm9ydAkJCT0gYWJvcnRfaW5kLAorCS5yZWNvbmZpZ3VyZQkJPSBy ZWNvbmZfaW5kLAorCS5kZWxheXJlcG9ydAkJPSBkZWxheXJlcG9ydF9pbmQsCit9OworCiBzdGF0 aWMgc2RwX3JlY29yZF90ICphMmRwX3JlY29yZCh1aW50OF90IHR5cGUsIHVpbnQxNl90IGF2ZHRw X3ZlcikKIHsKIAlzZHBfbGlzdF90ICpzdmNsYXNzX2lkLCAqcGZzZXEsICphcHNlcSwgKnJvb3Q7 CkBAIC0xMDcyLDY0ICsxMjM5LDYgQEAgc3RhdGljIHNkcF9yZWNvcmRfdCAqYTJkcF9yZWNvcmQo dWludDhfdCB0eXBlLCB1aW50MTZfdCBhdmR0cF92ZXIpCiAJcmV0dXJuIHJlY29yZDsKIH0KIAot c3RhdGljIHN0cnVjdCBhMmRwX3NlcCAqYTJkcF9hZGRfc2VwKHN0cnVjdCBhMmRwX3NlcnZlciAq c2VydmVyLCB1aW50OF90IHR5cGUsCi0JCQkJCXVpbnQ4X3QgY29kZWMsIGdib29sZWFuIGRlbGF5 X3JlcG9ydGluZykKLXsKLQlzdHJ1Y3QgYTJkcF9zZXAgKnNlcDsKLQlHU0xpc3QgKipsOwotCXVp bnQzMl90ICpyZWNvcmRfaWQ7Ci0Jc2RwX3JlY29yZF90ICpyZWNvcmQ7Ci0Jc3RydWN0IGF2ZHRw X3NlcF9pbmQgKmluZDsKLQotCXNlcCA9IGdfbmV3MChzdHJ1Y3QgYTJkcF9zZXAsIDEpOwotCi0J aW5kID0gKGNvZGVjID09IEEyRFBfQ09ERUNfTVBFRzEyKSA/ICZtcGVnX2luZCA6ICZzYmNfaW5k OwotCXNlcC0+c2VwID0gYXZkdHBfcmVnaXN0ZXJfc2VwKCZzZXJ2ZXItPnNyYywgdHlwZSwKLQkJ CQkJQVZEVFBfTUVESUFfVFlQRV9BVURJTywgY29kZWMsCi0JCQkJCWRlbGF5X3JlcG9ydGluZywg aW5kLCAmY2ZtLCBzZXApOwotCWlmIChzZXAtPnNlcCA9PSBOVUxMKSB7Ci0JCWdfZnJlZShzZXAp OwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlzZXAtPmNvZGVjID0gY29kZWM7Ci0Jc2VwLT50eXBl ID0gdHlwZTsKLQlzZXAtPmRlbGF5X3JlcG9ydGluZyA9IGRlbGF5X3JlcG9ydGluZzsKLQotCWlm ICh0eXBlID09IEFWRFRQX1NFUF9UWVBFX1NPVVJDRSkgewotCQlsID0gJnNlcnZlci0+c291cmNl czsKLQkJcmVjb3JkX2lkID0gJnNlcnZlci0+c291cmNlX3JlY29yZF9pZDsKLQl9IGVsc2Ugewot CQlsID0gJnNlcnZlci0+c2lua3M7Ci0JCXJlY29yZF9pZCA9ICZzZXJ2ZXItPnNpbmtfcmVjb3Jk X2lkOwotCX0KLQotCWlmICgqcmVjb3JkX2lkICE9IDApCi0JCWdvdG8gYWRkOwotCi0JcmVjb3Jk ID0gYTJkcF9yZWNvcmQodHlwZSwgc2VydmVyLT52ZXJzaW9uKTsKLQlpZiAoIXJlY29yZCkgewot CQllcnJvcigiVW5hYmxlIHRvIGFsbG9jYXRlIG5ldyBzZXJ2aWNlIHJlY29yZCIpOwotCQlhdmR0 cF91bnJlZ2lzdGVyX3NlcChzZXAtPnNlcCk7Ci0JCWdfZnJlZShzZXApOwotCQlyZXR1cm4gTlVM TDsKLQl9Ci0KLQlpZiAoYWRkX3JlY29yZF90b19zZXJ2ZXIoJnNlcnZlci0+c3JjLCByZWNvcmQp IDwgMCkgewotCQllcnJvcigiVW5hYmxlIHRvIHJlZ2lzdGVyIEEyRFAgc2VydmljZSByZWNvcmQi KTtcCi0JCXNkcF9yZWNvcmRfZnJlZShyZWNvcmQpOwotCQlhdmR0cF91bnJlZ2lzdGVyX3NlcChz ZXAtPnNlcCk7Ci0JCWdfZnJlZShzZXApOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JKnJlY29yZF9p ZCA9IHJlY29yZC0+aGFuZGxlOwotCi1hZGQ6Ci0JKmwgPSBnX3NsaXN0X2FwcGVuZCgqbCwgc2Vw KTsKLQotCXJldHVybiBzZXA7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgYTJkcF9zZXJ2ZXIgKmZpbmRf c2VydmVyKEdTTGlzdCAqbGlzdCwgY29uc3QgYmRhZGRyX3QgKnNyYykKIHsKIAlHU0xpc3QgKmw7 CkBAIC0xMjUwLDIyICsxMzU5LDIzIEBAIHByb2NlZWQ6CiAKIAlpZiAoc291cmNlKSB7CiAJCWZv ciAoaSA9IDA7IGkgPCBzYmNfc3JjczsgaSsrKQotCQkJYTJkcF9hZGRfc2VwKHNlcnZlciwgQVZE VFBfU0VQX1RZUEVfU09VUkNFLAotCQkJCQlBMkRQX0NPREVDX1NCQywgZGVsYXlfcmVwb3J0aW5n KTsKKwkJCWEyZHBfYWRkX3NlcChzcmMsIEFWRFRQX1NFUF9UWVBFX1NPVVJDRSwKKwkJCQkJQTJE UF9DT0RFQ19TQkMsIGRlbGF5X3JlcG9ydGluZywgTlVMTCk7CiAKIAkJZm9yIChpID0gMDsgaSA8 IG1wZWcxMl9zcmNzOyBpKyspCi0JCQlhMmRwX2FkZF9zZXAoc2VydmVyLCBBVkRUUF9TRVBfVFlQ RV9TT1VSQ0UsCi0JCQkJCUEyRFBfQ09ERUNfTVBFRzEyLCBkZWxheV9yZXBvcnRpbmcpOworCQkJ YTJkcF9hZGRfc2VwKHNyYywgQVZEVFBfU0VQX1RZUEVfU09VUkNFLAorCQkJCQlBMkRQX0NPREVD X01QRUcxMiwgZGVsYXlfcmVwb3J0aW5nLCBOVUxMKTsKIAl9CiAKIAlpZiAoc2luaykgewogCQlm b3IgKGkgPSAwOyBpIDwgc2JjX3NpbmtzOyBpKyspCi0JCQlhMmRwX2FkZF9zZXAoc2VydmVyLCBB VkRUUF9TRVBfVFlQRV9TSU5LLAotCQkJCQlBMkRQX0NPREVDX1NCQywgZGVsYXlfcmVwb3J0aW5n KTsKKwkJCWEyZHBfYWRkX3NlcChzcmMsIEFWRFRQX1NFUF9UWVBFX1NJTkssCisJCQkJCUEyRFBf Q09ERUNfU0JDLCBkZWxheV9yZXBvcnRpbmcsIE5VTEwpOwogCiAJCWZvciAoaSA9IDA7IGkgPCBt cGVnMTJfc2lua3M7IGkrKykKLQkJCWEyZHBfYWRkX3NlcChzZXJ2ZXIsIEFWRFRQX1NFUF9UWVBF X1NJTkssCi0JCQkJCUEyRFBfQ09ERUNfTVBFRzEyLCBkZWxheV9yZXBvcnRpbmcpOworCQkJYTJk cF9hZGRfc2VwKHNyYywgQVZEVFBfU0VQX1RZUEVfU0lOSywKKwkJCQkJQTJEUF9DT0RFQ19NUEVH MTIsIGRlbGF5X3JlcG9ydGluZywKKwkJCQkJTlVMTCk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0x MzA5LDYgKzE0MTksOTEgQEAgdm9pZCBhMmRwX3VucmVnaXN0ZXIoY29uc3QgYmRhZGRyX3QgKnNy YykKIAljb25uZWN0aW9uID0gTlVMTDsKIH0KIAorc3RydWN0IGEyZHBfc2VwICphMmRwX2FkZF9z ZXAoY29uc3QgYmRhZGRyX3QgKnNyYywgdWludDhfdCB0eXBlLAorCQkJCXVpbnQ4X3QgY29kZWMs IGdib29sZWFuIGRlbGF5X3JlcG9ydGluZywKKwkJCQlzdHJ1Y3QgbWVkaWFfZW5kcG9pbnQgKmVu ZHBvaW50KQoreworCXN0cnVjdCBhMmRwX3NlcnZlciAqc2VydmVyOworCXN0cnVjdCBhMmRwX3Nl cCAqc2VwOworCUdTTGlzdCAqKmw7CisJdWludDMyX3QgKnJlY29yZF9pZDsKKwlzZHBfcmVjb3Jk X3QgKnJlY29yZDsKKwlzdHJ1Y3QgYXZkdHBfc2VwX2luZCAqaW5kOworCisJc2VydmVyID0gZmlu ZF9zZXJ2ZXIoc2VydmVycywgc3JjKTsKKwlpZiAoc2VydmVyID09IE5VTEwpCisJCXJldHVybiBO VUxMOworCisJc2VwID0gZ19uZXcwKHN0cnVjdCBhMmRwX3NlcCwgMSk7CisKKwlpZiAoZW5kcG9p bnQpIHsKKwkJaW5kID0gJmVuZHBvaW50X2luZDsKKwkJZ290byBwcm9jZWVkOworCX0KKworCWlu ZCA9IChjb2RlYyA9PSBBMkRQX0NPREVDX01QRUcxMikgPyAmbXBlZ19pbmQgOiAmc2JjX2luZDsK KworcHJvY2VlZDoKKwlzZXAtPnNlcCA9IGF2ZHRwX3JlZ2lzdGVyX3NlcCgmc2VydmVyLT5zcmMs IHR5cGUsCisJCQkJCUFWRFRQX01FRElBX1RZUEVfQVVESU8sIGNvZGVjLAorCQkJCQlkZWxheV9y ZXBvcnRpbmcsIGluZCwgJmNmbSwgc2VwKTsKKwlpZiAoc2VwLT5zZXAgPT0gTlVMTCkgeworCQln X2ZyZWUoc2VwKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJc2VwLT5zZXJ2ZXIgPSBzZXJ2ZXI7 CisJc2VwLT5lbmRwb2ludCA9IGVuZHBvaW50OworCXNlcC0+Y29kZWMgPSBjb2RlYzsKKwlzZXAt PnR5cGUgPSB0eXBlOworCXNlcC0+ZGVsYXlfcmVwb3J0aW5nID0gZGVsYXlfcmVwb3J0aW5nOwor CisJaWYgKHR5cGUgPT0gQVZEVFBfU0VQX1RZUEVfU09VUkNFKSB7CisJCWwgPSAmc2VydmVyLT5z b3VyY2VzOworCQlyZWNvcmRfaWQgPSAmc2VydmVyLT5zb3VyY2VfcmVjb3JkX2lkOworCX0gZWxz ZSB7CisJCWwgPSAmc2VydmVyLT5zaW5rczsKKwkJcmVjb3JkX2lkID0gJnNlcnZlci0+c2lua19y ZWNvcmRfaWQ7CisJfQorCisJaWYgKCpyZWNvcmRfaWQgIT0gMCkKKwkJZ290byBhZGQ7CisKKwly ZWNvcmQgPSBhMmRwX3JlY29yZCh0eXBlLCBzZXJ2ZXItPnZlcnNpb24pOworCWlmICghcmVjb3Jk KSB7CisJCWVycm9yKCJVbmFibGUgdG8gYWxsb2NhdGUgbmV3IHNlcnZpY2UgcmVjb3JkIik7CisJ CWF2ZHRwX3VucmVnaXN0ZXJfc2VwKHNlcC0+c2VwKTsKKwkJZ19mcmVlKHNlcCk7CisJCXJldHVy biBOVUxMOworCX0KKworCWlmIChhZGRfcmVjb3JkX3RvX3NlcnZlcigmc2VydmVyLT5zcmMsIHJl Y29yZCkgPCAwKSB7CisJCWVycm9yKCJVbmFibGUgdG8gcmVnaXN0ZXIgQTJEUCBzZXJ2aWNlIHJl Y29yZCIpO1wKKwkJc2RwX3JlY29yZF9mcmVlKHJlY29yZCk7CisJCWF2ZHRwX3VucmVnaXN0ZXJf c2VwKHNlcC0+c2VwKTsKKwkJZ19mcmVlKHNlcCk7CisJCXJldHVybiBOVUxMOworCX0KKwkqcmVj b3JkX2lkID0gcmVjb3JkLT5oYW5kbGU7CisKK2FkZDoKKwkqbCA9IGdfc2xpc3RfYXBwZW5kKCps LCBzZXApOworCisJcmV0dXJuIHNlcDsKK30KKwordm9pZCBhMmRwX3JlbW92ZV9zZXAoc3RydWN0 IGEyZHBfc2VwICpzZXApCit7CisJc3RydWN0IGEyZHBfc2VydmVyICpzZXJ2ZXIgPSBzZXAtPnNl cnZlcjsKKworCWlmIChzZXAtPnR5cGUgPT0gQVZEVFBfU0VQX1RZUEVfU09VUkNFKQorCQlzZXJ2 ZXItPnNvdXJjZXMgPSBnX3NsaXN0X3JlbW92ZShzZXJ2ZXItPnNvdXJjZXMsIHNlcCk7CisJZWxz ZQorCQlzZXJ2ZXItPnNpbmtzID0gZ19zbGlzdF9yZW1vdmUoc2VydmVyLT5zaW5rcywgc2VwKTsK KworCWEyZHBfdW5yZWdpc3Rlcl9zZXAoc2VwKTsKK30KKwogc3RydWN0IGEyZHBfc2VwICphMmRw X2dldChzdHJ1Y3QgYXZkdHAgKnNlc3Npb24sCiAJCQkJc3RydWN0IGF2ZHRwX3JlbW90ZV9zZXAg KnJzZXApCiB7CkBAIC0xMzQ3LDYgKzE1NDIsMjY5IEBAIHN0cnVjdCBhMmRwX3NlcCAqYTJkcF9n ZXQoc3RydWN0IGF2ZHRwICpzZXNzaW9uLAogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgdWlu dDhfdCBkZWZhdWx0X2JpdHBvb2wodWludDhfdCBmcmVxLCB1aW50OF90IG1vZGUpCit7CisJc3dp dGNoIChmcmVxKSB7CisJY2FzZSBTQkNfU0FNUExJTkdfRlJFUV8xNjAwMDoKKwljYXNlIFNCQ19T QU1QTElOR19GUkVRXzMyMDAwOgorCQlyZXR1cm4gNTM7CisJY2FzZSBTQkNfU0FNUExJTkdfRlJF UV80NDEwMDoKKwkJc3dpdGNoIChtb2RlKSB7CisJCWNhc2UgU0JDX0NIQU5ORUxfTU9ERV9NT05P OgorCQljYXNlIFNCQ19DSEFOTkVMX01PREVfRFVBTF9DSEFOTkVMOgorCQkJcmV0dXJuIDMxOwor CQljYXNlIFNCQ19DSEFOTkVMX01PREVfU1RFUkVPOgorCQljYXNlIFNCQ19DSEFOTkVMX01PREVf Sk9JTlRfU1RFUkVPOgorCQkJcmV0dXJuIDUzOworCQlkZWZhdWx0OgorCQkJZXJyb3IoIkludmFs aWQgY2hhbm5lbCBtb2RlICV1IiwgbW9kZSk7CisJCQlyZXR1cm4gNTM7CisJCX0KKwljYXNlIFNC Q19TQU1QTElOR19GUkVRXzQ4MDAwOgorCQlzd2l0Y2ggKG1vZGUpIHsKKwkJY2FzZSBTQkNfQ0hB Tk5FTF9NT0RFX01PTk86CisJCWNhc2UgU0JDX0NIQU5ORUxfTU9ERV9EVUFMX0NIQU5ORUw6CisJ CQlyZXR1cm4gMjk7CisJCWNhc2UgU0JDX0NIQU5ORUxfTU9ERV9TVEVSRU86CisJCWNhc2UgU0JD X0NIQU5ORUxfTU9ERV9KT0lOVF9TVEVSRU86CisJCQlyZXR1cm4gNTE7CisJCWRlZmF1bHQ6CisJ CQllcnJvcigiSW52YWxpZCBjaGFubmVsIG1vZGUgJXUiLCBtb2RlKTsKKwkJCXJldHVybiA1MTsK KwkJfQorCWRlZmF1bHQ6CisJCWVycm9yKCJJbnZhbGlkIHNhbXBsaW5nIGZyZXEgJXUiLCBmcmVx KTsKKwkJcmV0dXJuIDUzOworCX0KK30KKworc3RhdGljIGdib29sZWFuIHNlbGVjdF9zYmNfcGFy YW1zKHN0cnVjdCBzYmNfY29kZWNfY2FwICpjYXAsCisJCQkJCXN0cnVjdCBzYmNfY29kZWNfY2Fw ICpzdXBwb3J0ZWQpCit7CisJdW5zaWduZWQgaW50IG1heF9iaXRwb29sLCBtaW5fYml0cG9vbDsK KworCW1lbXNldChjYXAsIDAsIHNpemVvZihzdHJ1Y3Qgc2JjX2NvZGVjX2NhcCkpOworCisJY2Fw LT5jYXAubWVkaWFfdHlwZSA9IEFWRFRQX01FRElBX1RZUEVfQVVESU87CisJY2FwLT5jYXAubWVk aWFfY29kZWNfdHlwZSA9IEEyRFBfQ09ERUNfU0JDOworCisJaWYgKHN1cHBvcnRlZC0+ZnJlcXVl bmN5ICYgU0JDX1NBTVBMSU5HX0ZSRVFfNDQxMDApCisJCWNhcC0+ZnJlcXVlbmN5ID0gU0JDX1NB TVBMSU5HX0ZSRVFfNDQxMDA7CisJZWxzZSBpZiAoc3VwcG9ydGVkLT5mcmVxdWVuY3kgJiBTQkNf U0FNUExJTkdfRlJFUV80ODAwMCkKKwkJY2FwLT5mcmVxdWVuY3kgPSBTQkNfU0FNUExJTkdfRlJF UV80ODAwMDsKKwllbHNlIGlmIChzdXBwb3J0ZWQtPmZyZXF1ZW5jeSAmIFNCQ19TQU1QTElOR19G UkVRXzMyMDAwKQorCQljYXAtPmZyZXF1ZW5jeSA9IFNCQ19TQU1QTElOR19GUkVRXzMyMDAwOwor CWVsc2UgaWYgKHN1cHBvcnRlZC0+ZnJlcXVlbmN5ICYgU0JDX1NBTVBMSU5HX0ZSRVFfMTYwMDAp CisJCWNhcC0+ZnJlcXVlbmN5ID0gU0JDX1NBTVBMSU5HX0ZSRVFfMTYwMDA7CisJZWxzZSB7CisJ CWVycm9yKCJObyBzdXBwb3J0ZWQgZnJlcXVlbmNpZXMiKTsKKwkJcmV0dXJuIEZBTFNFOworCX0K KworCWlmIChzdXBwb3J0ZWQtPmNoYW5uZWxfbW9kZSAmIFNCQ19DSEFOTkVMX01PREVfSk9JTlRf U1RFUkVPKQorCQljYXAtPmNoYW5uZWxfbW9kZSA9IFNCQ19DSEFOTkVMX01PREVfSk9JTlRfU1RF UkVPOworCWVsc2UgaWYgKHN1cHBvcnRlZC0+Y2hhbm5lbF9tb2RlICYgU0JDX0NIQU5ORUxfTU9E RV9TVEVSRU8pCisJCWNhcC0+Y2hhbm5lbF9tb2RlID0gU0JDX0NIQU5ORUxfTU9ERV9TVEVSRU87 CisJZWxzZSBpZiAoc3VwcG9ydGVkLT5jaGFubmVsX21vZGUgJiBTQkNfQ0hBTk5FTF9NT0RFX0RV QUxfQ0hBTk5FTCkKKwkJY2FwLT5jaGFubmVsX21vZGUgPSBTQkNfQ0hBTk5FTF9NT0RFX0RVQUxf Q0hBTk5FTDsKKwllbHNlIGlmIChzdXBwb3J0ZWQtPmNoYW5uZWxfbW9kZSAmIFNCQ19DSEFOTkVM X01PREVfTU9OTykKKwkJY2FwLT5jaGFubmVsX21vZGUgPSBTQkNfQ0hBTk5FTF9NT0RFX01PTk87 CisJZWxzZSB7CisJCWVycm9yKCJObyBzdXBwb3J0ZWQgY2hhbm5lbCBtb2RlcyIpOworCQlyZXR1 cm4gRkFMU0U7CisJfQorCisJaWYgKHN1cHBvcnRlZC0+YmxvY2tfbGVuZ3RoICYgU0JDX0JMT0NL X0xFTkdUSF8xNikKKwkJY2FwLT5ibG9ja19sZW5ndGggPSBTQkNfQkxPQ0tfTEVOR1RIXzE2Owor CWVsc2UgaWYgKHN1cHBvcnRlZC0+YmxvY2tfbGVuZ3RoICYgU0JDX0JMT0NLX0xFTkdUSF8xMikK KwkJY2FwLT5ibG9ja19sZW5ndGggPSBTQkNfQkxPQ0tfTEVOR1RIXzEyOworCWVsc2UgaWYgKHN1 cHBvcnRlZC0+YmxvY2tfbGVuZ3RoICYgU0JDX0JMT0NLX0xFTkdUSF84KQorCQljYXAtPmJsb2Nr X2xlbmd0aCA9IFNCQ19CTE9DS19MRU5HVEhfODsKKwllbHNlIGlmIChzdXBwb3J0ZWQtPmJsb2Nr X2xlbmd0aCAmIFNCQ19CTE9DS19MRU5HVEhfNCkKKwkJY2FwLT5ibG9ja19sZW5ndGggPSBTQkNf QkxPQ0tfTEVOR1RIXzQ7CisJZWxzZSB7CisJCWVycm9yKCJObyBzdXBwb3J0ZWQgYmxvY2sgbGVu Z3RocyIpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJaWYgKHN1cHBvcnRlZC0+c3ViYmFuZHMg JiBTQkNfU1VCQkFORFNfOCkKKwkJY2FwLT5zdWJiYW5kcyA9IFNCQ19TVUJCQU5EU184OworCWVs c2UgaWYgKHN1cHBvcnRlZC0+c3ViYmFuZHMgJiBTQkNfU1VCQkFORFNfNCkKKwkJY2FwLT5zdWJi YW5kcyA9IFNCQ19TVUJCQU5EU180OworCWVsc2UgeworCQllcnJvcigiTm8gc3VwcG9ydGVkIHN1 YmJhbmRzIik7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlpZiAoc3VwcG9ydGVkLT5hbGxvY2F0 aW9uX21ldGhvZCAmIFNCQ19BTExPQ0FUSU9OX0xPVURORVNTKQorCQljYXAtPmFsbG9jYXRpb25f bWV0aG9kID0gU0JDX0FMTE9DQVRJT05fTE9VRE5FU1M7CisJZWxzZSBpZiAoc3VwcG9ydGVkLT5h bGxvY2F0aW9uX21ldGhvZCAmIFNCQ19BTExPQ0FUSU9OX1NOUikKKwkJY2FwLT5hbGxvY2F0aW9u X21ldGhvZCA9IFNCQ19BTExPQ0FUSU9OX1NOUjsKKworCW1pbl9iaXRwb29sID0gTUFYKE1JTl9C SVRQT09MLCBzdXBwb3J0ZWQtPm1pbl9iaXRwb29sKTsKKwltYXhfYml0cG9vbCA9IE1JTihkZWZh dWx0X2JpdHBvb2woY2FwLT5mcmVxdWVuY3ksIGNhcC0+Y2hhbm5lbF9tb2RlKSwKKwkJCQkJCQlz dXBwb3J0ZWQtPm1heF9iaXRwb29sKTsKKworCWNhcC0+bWluX2JpdHBvb2wgPSBtaW5fYml0cG9v bDsKKwljYXAtPm1heF9iaXRwb29sID0gbWF4X2JpdHBvb2w7CisKKwlyZXR1cm4gVFJVRTsKK30K Kworc3RhdGljIGdib29sZWFuIHNlbGVjdF9jYXBhYmlsaXRpZXMoc3RydWN0IGF2ZHRwICpzZXNz aW9uLAorCQkJCQlzdHJ1Y3QgYXZkdHBfcmVtb3RlX3NlcCAqcnNlcCwKKwkJCQkJR1NMaXN0ICoq Y2FwcykKK3sKKwlzdHJ1Y3QgYXZkdHBfc2VydmljZV9jYXBhYmlsaXR5ICptZWRpYV90cmFuc3Bv cnQsICptZWRpYV9jb2RlYzsKKwlzdHJ1Y3Qgc2JjX2NvZGVjX2NhcCBzYmNfY2FwOworCisJbWVk aWFfY29kZWMgPSBhdmR0cF9nZXRfY29kZWMocnNlcCk7CisJaWYgKCFtZWRpYV9jb2RlYykKKwkJ cmV0dXJuIEZBTFNFOworCisJc2VsZWN0X3NiY19wYXJhbXMoJnNiY19jYXAsIChzdHJ1Y3Qgc2Jj X2NvZGVjX2NhcCAqKSBtZWRpYV9jb2RlYy0+ZGF0YSk7CisKKwltZWRpYV90cmFuc3BvcnQgPSBh dmR0cF9zZXJ2aWNlX2NhcF9uZXcoQVZEVFBfTUVESUFfVFJBTlNQT1JULAorCQkJCQkJTlVMTCwg MCk7CisKKwkqY2FwcyA9IGdfc2xpc3RfYXBwZW5kKCpjYXBzLCBtZWRpYV90cmFuc3BvcnQpOwor CisJbWVkaWFfY29kZWMgPSBhdmR0cF9zZXJ2aWNlX2NhcF9uZXcoQVZEVFBfTUVESUFfQ09ERUMs ICZzYmNfY2FwLAorCQkJCQkJc2l6ZW9mKHNiY19jYXApKTsKKworCSpjYXBzID0gZ19zbGlzdF9h cHBlbmQoKmNhcHMsIG1lZGlhX2NvZGVjKTsKKworCWlmIChhdmR0cF9nZXRfZGVsYXlfcmVwb3J0 aW5nKHJzZXApKSB7CisJCXN0cnVjdCBhdmR0cF9zZXJ2aWNlX2NhcGFiaWxpdHkgKmRlbGF5X3Jl cG9ydGluZzsKKwkJZGVsYXlfcmVwb3J0aW5nID0gYXZkdHBfc2VydmljZV9jYXBfbmV3KEFWRFRQ X0RFTEFZX1JFUE9SVElORywKKwkJCQkJCQkJTlVMTCwgMCk7CisJCSpjYXBzID0gZ19zbGlzdF9h cHBlbmQoKmNhcHMsIGRlbGF5X3JlcG9ydGluZyk7CisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisK K3N0YXRpYyB2b2lkIHNlbGVjdF9jYihzdHJ1Y3QgbWVkaWFfZW5kcG9pbnQgKmVuZHBvaW50LCB2 b2lkICpyZXQsIHNpemVfdCBzaXplLAorCQkJdm9pZCAqdXNlcl9kYXRhKQoreworCXN0cnVjdCBh MmRwX3NldHVwICpzZXR1cCA9IHVzZXJfZGF0YTsKKwlzdHJ1Y3QgYXZkdHBfc2VydmljZV9jYXBh YmlsaXR5ICptZWRpYV90cmFuc3BvcnQsICptZWRpYV9jb2RlYzsKKwlzdHJ1Y3QgYXZkdHBfbWVk aWFfY29kZWNfY2FwYWJpbGl0eSAqY2FwOworCUdTTGlzdCAqY2FwcyA9IE5VTEw7CisKKwlpZiAo c2l6ZSA9PSAwKSB7CisJCWRlYnVnKCJFbmRwb2ludCByZXBsaWVkIGFuIGludmFsaWQgY29uZmln dXJhdGlvbiIpOworCQlnb3RvIGRvbmU7CisJfQorCisJbWVkaWFfdHJhbnNwb3J0ID0gYXZkdHBf c2VydmljZV9jYXBfbmV3KEFWRFRQX01FRElBX1RSQU5TUE9SVCwKKwkJCQkJCU5VTEwsIDApOwor CisJY2FwcyA9IGdfc2xpc3RfYXBwZW5kKGNhcHMsIG1lZGlhX3RyYW5zcG9ydCk7CisKKwljYXAg PSBnX21hbGxvYzAoc2l6ZW9mKCpjYXApICsgc2l6ZSk7CisJY2FwLT5tZWRpYV90eXBlID0gQVZE VFBfTUVESUFfVFlQRV9BVURJTzsKKwljYXAtPm1lZGlhX2NvZGVjX3R5cGUgPSBzZXR1cC0+c2Vw LT5jb2RlYzsKKwltZW1jcHkoY2FwLT5kYXRhLCByZXQsIHNpemUpOworCisJbWVkaWFfY29kZWMg PSBhdmR0cF9zZXJ2aWNlX2NhcF9uZXcoQVZEVFBfTUVESUFfQ09ERUMsIGNhcCwKKwkJCQkJCXNp emVvZigqY2FwKSArIHNpemUpOworCisJY2FwcyA9IGdfc2xpc3RfYXBwZW5kKGNhcHMsIG1lZGlh X2NvZGVjKTsKKworCWlmIChzZXR1cC0+ZGVsYXlfcmVwb3J0aW5nKSB7CisJCXN0cnVjdCBhdmR0 cF9zZXJ2aWNlX2NhcGFiaWxpdHkgKmRlbGF5X3JlcG9ydGluZzsKKwkJZGVsYXlfcmVwb3J0aW5n ID0gYXZkdHBfc2VydmljZV9jYXBfbmV3KEFWRFRQX0RFTEFZX1JFUE9SVElORywKKwkJCQkJCQkJ TlVMTCwgMCk7CisJCWNhcHMgPSBnX3NsaXN0X2FwcGVuZChjYXBzLCBkZWxheV9yZXBvcnRpbmcp OworCX0KKworZG9uZToKKwlmaW5hbGl6ZV9zZWxlY3Qoc2V0dXAsIGNhcHMpOworfQorCitzdGF0 aWMgZ2Jvb2xlYW4gYXV0b19zZWxlY3QoZ3BvaW50ZXIgZGF0YSkKK3sKKwlzdHJ1Y3QgYTJkcF9z ZXR1cCAqc2V0dXAgPSBkYXRhOworCisJZmluYWxpemVfc2VsZWN0KHNldHVwLCBzZXR1cC0+Y2xp ZW50X2NhcHMpOworCisJcmV0dXJuIEZBTFNFOworfQorCit1bnNpZ25lZCBpbnQgYTJkcF9zZWxl Y3RfY2FwYWJpbGl0aWVzKHN0cnVjdCBhdmR0cCAqc2Vzc2lvbiwKKwkJCQkJdWludDhfdCB0eXBl LCBjb25zdCBjaGFyICpzZW5kZXIsCisJCQkJCWEyZHBfc2VsZWN0X2NiX3QgY2IsCisJCQkJCXZv aWQgKnVzZXJfZGF0YSkKK3sKKwlzdHJ1Y3QgYTJkcF9zZXR1cCAqc2V0dXA7CisJc3RydWN0IGEy ZHBfc2V0dXBfY2IgKmNiX2RhdGE7CisJc3RydWN0IGEyZHBfc2VwICpzZXA7CisJc3RydWN0IGF2 ZHRwX2xvY2FsX3NlcCAqbHNlcDsKKwlzdHJ1Y3QgYXZkdHBfcmVtb3RlX3NlcCAqcnNlcDsKKwlz dHJ1Y3QgYXZkdHBfc2VydmljZV9jYXBhYmlsaXR5ICpzZXJ2aWNlOworCXN0cnVjdCBhdmR0cF9t ZWRpYV9jb2RlY19jYXBhYmlsaXR5ICpjb2RlYzsKKworCWlmIChhdmR0cF9nZXRfc2VwcyhzZXNz aW9uLCB0eXBlLCBBVkRUUF9NRURJQV9UWVBFX0FVRElPLAorCQkJCUEyRFBfQ09ERUNfU0JDLCAm bHNlcCwgJnJzZXApIDwgMCkgeworCQllcnJvcigiTm8gbWF0Y2hpbmcgQUNQIGFuZCBJTlQgU0VQ cyBmb3VuZCIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzZXAgPSBhMmRwX2dldChzZXNzaW9uLCBy c2VwKTsKKwlpZiAoIXNlcCkgeworCQllcnJvcigiVW5hYmxlIHRvIGdldCBhIGxvY2FsIHNvdXJj ZSBTRVAiKTsKKwkJcmV0dXJuIDA7CisJfQorCisJY2JfZGF0YSA9IGdfbmV3MChzdHJ1Y3QgYTJk cF9zZXR1cF9jYiwgMSk7CisJY2JfZGF0YS0+c2VsZWN0X2NiID0gY2I7CisJY2JfZGF0YS0+dXNl cl9kYXRhID0gdXNlcl9kYXRhOworCWNiX2RhdGEtPmlkID0gKytjYl9pZDsKKworCXNldHVwID0g ZmluZF9zZXR1cF9ieV9zZXNzaW9uKHNlc3Npb24pOworCWlmICghc2V0dXApIHsKKwkJc2V0dXAg PSBnX25ldzAoc3RydWN0IGEyZHBfc2V0dXAsIDEpOworCQlzZXR1cC0+c2Vzc2lvbiA9IGF2ZHRw X3JlZihzZXNzaW9uKTsKKwkJc2V0dXAtPmRldiA9IGEyZHBfZ2V0X2RldihzZXNzaW9uKTsKKwkJ c2V0dXBzID0gZ19zbGlzdF9hcHBlbmQoc2V0dXBzLCBzZXR1cCk7CisJfQorCisJc2V0dXBfcmVm KHNldHVwKTsKKwlzZXR1cC0+Y2IgPSBnX3NsaXN0X2FwcGVuZChzZXR1cC0+Y2IsIGNiX2RhdGEp OworCXNldHVwLT5zZXAgPSBzZXA7CisvLwlzZXR1cC0+ZGVsYXlfcmVwb3J0aW5nID0gKHNlcC0+ ZGVsYXlfcmVwb3J0aW5nICYmCisvLwkJCQlhdmR0cF9nZXRfZGVsYXlfcmVwb3J0aW5nKHJzZXAp KTsKKworCS8qIEZJWE1FOiBSZW1vdmUgYXV0byBzZWxlY3Qgd2hlbiBpdCBpcyBub3QgbG9uZ2Vy IHBvc3NpYmxlIHRvIHJlZ2lzdGVyCisJZW5kcG9pbnQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmls ZSAqLworCWlmIChzZXAtPmVuZHBvaW50ID09IE5VTEwpIHsKKwkJaWYgKCFzZWxlY3RfY2FwYWJp bGl0aWVzKHNlc3Npb24sIHJzZXAsICZzZXR1cC0+Y2xpZW50X2NhcHMpKSB7CisJCQllcnJvcigi VW5hYmxlIHRvIGF1dG8gc2VsZWN0IHJlbW90ZSBTRVAgY2FwYWJpbGl0aWVzIik7CisJCQlnb3Rv IGZhaWw7CisJCX0KKworCQlnX2lkbGVfYWRkKGF1dG9fc2VsZWN0LCBzZXR1cCk7CisKKwkJcmV0 dXJuIGNiX2RhdGEtPmlkOworCX0KKworCXNlcnZpY2UgPSBhdmR0cF9nZXRfY29kZWMocnNlcCk7 CisJY29kZWMgPSAoc3RydWN0IGF2ZHRwX21lZGlhX2NvZGVjX2NhcGFiaWxpdHkgKikgc2Vydmlj ZS0+ZGF0YTsKKworCWlmIChtZWRpYV9lbmRwb2ludF9zZWxlY3RfY29uZmlndXJhdGlvbihzZXAt PmVuZHBvaW50LCBjb2RlYy0+ZGF0YSwKKwkJCQkJCXNlcnZpY2UtPmxlbmd0aCAtIHNpemVvZigq Y29kZWMpLAorCQkJCQkJc2VsZWN0X2NiLCBzZXR1cCkgPT0KKwkJCQkJCVRSVUUpCisJCXJldHVy biBjYl9kYXRhLT5pZDsKKworZmFpbDoKKwlzZXR1cF91bnJlZihzZXR1cCk7CisJY2JfaWQtLTsK KwlyZXR1cm4gMDsKKworfQorCiB1bnNpZ25lZCBpbnQgYTJkcF9jb25maWcoc3RydWN0IGF2ZHRw ICpzZXNzaW9uLCBzdHJ1Y3QgYTJkcF9zZXAgKnNlcCwKIAkJCQlhMmRwX2NvbmZpZ19jYl90IGNi LCBHU0xpc3QgKmNhcHMsCiAJCQkJdm9pZCAqdXNlcl9kYXRhKQpAQCAtMTYyMCw3ICsyMDc4LDcg QEAgZ2Jvb2xlYW4gYTJkcF9jYW5jZWwoc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2LCB1bnNpZ25l ZCBpbnQgaWQpCiAKIGdib29sZWFuIGEyZHBfc2VwX2xvY2soc3RydWN0IGEyZHBfc2VwICpzZXAs IHN0cnVjdCBhdmR0cCAqc2Vzc2lvbikKIHsKLQlpZiAoc2VwLT5sb2NrZWQpCisJaWYgKHNlcC0+ bG9ja2VkIHx8IHNlcC0+ZW5kcG9pbnQpCiAJCXJldHVybiBGQUxTRTsKIAogCWRlYnVnKCJTRVAg JXAgbG9ja2VkIiwgc2VwLT5zZXApOwpkaWZmIC0tZ2l0IGEvYXVkaW8vYTJkcC5oIGIvYXVkaW8v YTJkcC5oCmluZGV4IGZhODE3NzYuLjE2YmFjNTMgMTAwNjQ0Ci0tLSBhL2F1ZGlvL2EyZHAuaAor KysgYi9hdWRpby9hMmRwLmgKQEAgLTEyMSw2ICsxMjEsMTAgQEAgc3RydWN0IG1wZWdfY29kZWNf Y2FwIHsKIAogc3RydWN0IGEyZHBfc2VwOwogCisKK3R5cGVkZWYgdm9pZCAoKmEyZHBfc2VsZWN0 X2NiX3QpIChzdHJ1Y3QgYXZkdHAgKnNlc3Npb24sCisJCQkJCXN0cnVjdCBhMmRwX3NlcCAqc2Vw LCBHU0xpc3QgKmNhcHMsCisJCQkJCXZvaWQgKnVzZXJfZGF0YSk7CiB0eXBlZGVmIHZvaWQgKCph MmRwX2NvbmZpZ19jYl90KSAoc3RydWN0IGF2ZHRwICpzZXNzaW9uLCBzdHJ1Y3QgYTJkcF9zZXAg KnNlcCwKIAkJCQkJc3RydWN0IGF2ZHRwX3N0cmVhbSAqc3RyZWFtLAogCQkJCQlzdHJ1Y3QgYXZk dHBfZXJyb3IgKmVyciwKQEAgLTEzMiw3ICsxMzYsMTcgQEAgdHlwZWRlZiB2b2lkICgqYTJkcF9z dHJlYW1fY2JfdCkgKHN0cnVjdCBhdmR0cCAqc2Vzc2lvbiwKIGludCBhMmRwX3JlZ2lzdGVyKERC dXNDb25uZWN0aW9uICpjb25uLCBjb25zdCBiZGFkZHJfdCAqc3JjLCBHS2V5RmlsZSAqY29uZmln KTsKIHZvaWQgYTJkcF91bnJlZ2lzdGVyKGNvbnN0IGJkYWRkcl90ICpzcmMpOwogCitzdHJ1Y3Qg YTJkcF9zZXAgKmEyZHBfYWRkX3NlcChjb25zdCBiZGFkZHJfdCAqc3JjLCB1aW50OF90IHR5cGUs CisJCQkJdWludDhfdCBjb2RlYywgZ2Jvb2xlYW4gZGVsYXlfcmVwb3J0aW5nLAorCQkJCXN0cnVj dCBtZWRpYV9lbmRwb2ludCAqZW5kcG9pbnQpOwordm9pZCBhMmRwX3JlbW92ZV9zZXAoc3RydWN0 IGEyZHBfc2VwICpzZXApOworCiBzdHJ1Y3QgYTJkcF9zZXAgKmEyZHBfZ2V0KHN0cnVjdCBhdmR0 cCAqc2Vzc2lvbiwgc3RydWN0IGF2ZHRwX3JlbW90ZV9zZXAgKnNlcCk7CisKK3Vuc2lnbmVkIGlu dCBhMmRwX3NlbGVjdF9jYXBhYmlsaXRpZXMoc3RydWN0IGF2ZHRwICpzZXNzaW9uLAorCQkJCQl1 aW50OF90IHR5cGUsIGNvbnN0IGNoYXIgKnNlbmRlciwKKwkJCQkJYTJkcF9zZWxlY3RfY2JfdCBj YiwKKwkJCQkJdm9pZCAqdXNlcl9kYXRhKTsKIHVuc2lnbmVkIGludCBhMmRwX2NvbmZpZyhzdHJ1 Y3QgYXZkdHAgKnNlc3Npb24sIHN0cnVjdCBhMmRwX3NlcCAqc2VwLAogCQkJCWEyZHBfY29uZmln X2NiX3QgY2IsIEdTTGlzdCAqY2FwcywKIAkJCQl2b2lkICp1c2VyX2RhdGEpOwpkaWZmIC0tZ2l0 IGEvYXVkaW8vYXZkdHAuYyBiL2F1ZGlvL2F2ZHRwLmMKaW5kZXggZTU2MjJlNC4uYTg0NGNhYiAx MDA2NDQKLS0tIGEvYXVkaW8vYXZkdHAuYworKysgYi9hdWRpby9hdmR0cC5jCkBAIC0zNTQ0LDYg KzM1NDQsOSBAQCBpbnQgYXZkdHBfdW5yZWdpc3Rlcl9zZXAoc3RydWN0IGF2ZHRwX2xvY2FsX3Nl cCAqc2VwKQogCWlmIChzZXAtPnN0cmVhbSkKIAkJcmVsZWFzZV9zdHJlYW0oc2VwLT5zdHJlYW0s IHNlcC0+c3RyZWFtLT5zZXNzaW9uKTsKIAorCWRlYnVnKCJTRVAgJXAgdW5yZWdpc3RlcmVkOiB0 eXBlOiVkIGNvZGVjOiVkIHNlaWQ6JWQiLCBzZXAsCisJCQlzZXAtPmluZm8udHlwZSwgc2VwLT5j b2RlYywgc2VwLT5pbmZvLnNlaWQpOworCiAJZ19mcmVlKHNlcCk7CiAKIAlyZXR1cm4gMDsKZGlm ZiAtLWdpdCBhL2F1ZGlvL21hbmFnZXIuYyBiL2F1ZGlvL21hbmFnZXIuYwppbmRleCA0MTNjMWYz Li4yYjE2YjZjIDEwMDY0NAotLS0gYS9hdWRpby9tYW5hZ2VyLmMKKysrIGIvYXVkaW8vbWFuYWdl ci5jCkBAIC02MSw2ICs2MSw3IEBACiAjaW5jbHVkZSAiZGV2aWNlLmgiCiAjaW5jbHVkZSAiZXJy b3IuaCIKICNpbmNsdWRlICJhdmR0cC5oIgorI2luY2x1ZGUgIm1lZGlhLmgiCiAjaW5jbHVkZSAi YTJkcC5oIgogI2luY2x1ZGUgImhlYWRzZXQuaCIKICNpbmNsdWRlICJnYXRld2F5LmgiCkBAIC0x MTMsNiArMTE0LDcgQEAgc3RhdGljIHN0cnVjdCBlbmFibGVkX2ludGVyZmFjZXMgZW5hYmxlZCA9 IHsKIAkuc2luawkJPSBUUlVFLAogCS5zb3VyY2UJCT0gRkFMU0UsCiAJLmNvbnRyb2wJPSBUUlVF LAorCS5tZWRpYQkJPSBGQUxTRQogfTsKIAogc3RhdGljIHN0cnVjdCBhdWRpb19hZGFwdGVyICpm aW5kX2FkYXB0ZXIoR1NMaXN0ICpsaXN0LApAQCAtMTAyMiw2ICsxMDI0LDM4IEBAIHN0YXRpYyB2 b2lkIGF2cmNwX3NlcnZlcl9yZW1vdmUoc3RydWN0IGJ0ZF9hZGFwdGVyICphZGFwdGVyKQogCWF1 ZGlvX2FkYXB0ZXJfdW5yZWYoYWRwKTsKIH0KIAorc3RhdGljIGludCBtZWRpYV9zZXJ2ZXJfcHJv YmUoc3RydWN0IGJ0ZF9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBhdWRpb19hZGFwdGVy ICphZHA7CisJY29uc3QgZ2NoYXIgKnBhdGggPSBhZGFwdGVyX2dldF9wYXRoKGFkYXB0ZXIpOwor CWJkYWRkcl90IHNyYzsKKworCURCRygicGF0aCAlcyIsIHBhdGgpOworCisJYWRwID0gYXVkaW9f YWRhcHRlcl9nZXQoYWRhcHRlcik7CisJaWYgKCFhZHApCisJCXJldHVybiAtRUlOVkFMOworCisJ YWRhcHRlcl9nZXRfYWRkcmVzcyhhZGFwdGVyLCAmc3JjKTsKKworCXJldHVybiBtZWRpYV9yZWdp c3Rlcihjb25uZWN0aW9uLCBwYXRoLCAmc3JjKTsKK30KKworc3RhdGljIHZvaWQgbWVkaWFfc2Vy dmVyX3JlbW92ZShzdHJ1Y3QgYnRkX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGF1ZGlv X2FkYXB0ZXIgKmFkcDsKKwljb25zdCBnY2hhciAqcGF0aCA9IGFkYXB0ZXJfZ2V0X3BhdGgoYWRh cHRlcik7CisKKwlEQkcoInBhdGggJXMiLCBwYXRoKTsKKworCWFkcCA9IGZpbmRfYWRhcHRlcihh ZGFwdGVycywgYWRhcHRlcik7CisJaWYgKCFhZHApCisJCXJldHVybjsKKworCW1lZGlhX3VucmVn aXN0ZXIocGF0aCk7CisJYXVkaW9fYWRhcHRlcl91bnJlZihhZHApOworfQorCiBzdGF0aWMgc3Ry dWN0IGJ0ZF9kZXZpY2VfZHJpdmVyIGF1ZGlvX2RyaXZlciA9IHsKIAkubmFtZQk9ICJhdWRpbyIs CiAJLnV1aWRzCT0gQlREX1VVSURTKEhTUF9IU19VVUlELCBIRlBfSFNfVVVJRCwgSFNQX0FHX1VV SUQsIEhGUF9BR19VVUlELApAQCAtMTA1NSw2ICsxMDg5LDEyIEBAIHN0YXRpYyBzdHJ1Y3QgYnRk X2FkYXB0ZXJfZHJpdmVyIGF2cmNwX3NlcnZlcl9kcml2ZXIgPSB7CiAJLnJlbW92ZQk9IGF2cmNw X3NlcnZlcl9yZW1vdmUsCiB9OwogCitzdGF0aWMgc3RydWN0IGJ0ZF9hZGFwdGVyX2RyaXZlciBt ZWRpYV9zZXJ2ZXJfZHJpdmVyID0geworCS5uYW1lCT0gIm1lZGlhIiwKKwkucHJvYmUJPSBtZWRp YV9zZXJ2ZXJfcHJvYmUsCisJLnJlbW92ZQk9IG1lZGlhX3NlcnZlcl9yZW1vdmUsCit9OworCiBp bnQgYXVkaW9fbWFuYWdlcl9pbml0KERCdXNDb25uZWN0aW9uICpjb25uLCBHS2V5RmlsZSAqY29u ZiwKIAkJCQkJCQlnYm9vbGVhbiAqZW5hYmxlX3NjbykKIHsKQEAgLTEwODMsNiArMTEyMyw4IEBA IGludCBhdWRpb19tYW5hZ2VyX2luaXQoREJ1c0Nvbm5lY3Rpb24gKmNvbm4sIEdLZXlGaWxlICpj b25mLAogCQkJZW5hYmxlZC5zb3VyY2UgPSBUUlVFOwogCQllbHNlIGlmIChnX3N0cl9lcXVhbChs aXN0W2ldLCAiQ29udHJvbCIpKQogCQkJZW5hYmxlZC5jb250cm9sID0gVFJVRTsKKwkJZWxzZSBp ZiAoZ19zdHJfZXF1YWwobGlzdFtpXSwgIk1lZGlhIikpCisJCQllbmFibGVkLm1lZGlhID0gVFJV RTsKIAl9CiAJZ19zdHJmcmVldihsaXN0KTsKIApAQCAtMTA5OSw2ICsxMTQxLDggQEAgaW50IGF1 ZGlvX21hbmFnZXJfaW5pdChEQnVzQ29ubmVjdGlvbiAqY29ubiwgR0tleUZpbGUgKmNvbmYsCiAJ CQllbmFibGVkLnNvdXJjZSA9IEZBTFNFOwogCQllbHNlIGlmIChnX3N0cl9lcXVhbChsaXN0W2ld LCAiQ29udHJvbCIpKQogCQkJZW5hYmxlZC5jb250cm9sID0gRkFMU0U7CisJCWVsc2UgaWYgKGdf c3RyX2VxdWFsKGxpc3RbaV0sICJNZWRpYSIpKQorCQkJZW5hYmxlZC5tZWRpYSA9IEZBTFNFOwog CX0KIAlnX3N0cmZyZWV2KGxpc3QpOwogCkBAIC0xMTQwLDYgKzExODQsOSBAQCBwcm9jZWVkOgog CWlmIChlbmFibGVkLmNvbnRyb2wpCiAJCWJ0ZF9yZWdpc3Rlcl9hZGFwdGVyX2RyaXZlcigmYXZy Y3Bfc2VydmVyX2RyaXZlcik7CiAKKwlpZiAoZW5hYmxlZC5tZWRpYSkKKwkJYnRkX3JlZ2lzdGVy X2FkYXB0ZXJfZHJpdmVyKCZtZWRpYV9zZXJ2ZXJfZHJpdmVyKTsKKwogCWJ0ZF9yZWdpc3Rlcl9k ZXZpY2VfZHJpdmVyKCZhdWRpb19kcml2ZXIpOwogCiAJKmVuYWJsZV9zY28gPSAoZW5hYmxlZC5n YXRld2F5IHx8IGVuYWJsZWQuaGVhZHNldCk7CkBAIC0xMTc1LDYgKzEyMjIsOSBAQCB2b2lkIGF1 ZGlvX21hbmFnZXJfZXhpdCh2b2lkKQogCWlmIChlbmFibGVkLmNvbnRyb2wpCiAJCWJ0ZF91bnJl Z2lzdGVyX2FkYXB0ZXJfZHJpdmVyKCZhdnJjcF9zZXJ2ZXJfZHJpdmVyKTsKIAorCWlmIChlbmFi bGVkLm1lZGlhKQorCQlidGRfdW5yZWdpc3Rlcl9hZGFwdGVyX2RyaXZlcigmbWVkaWFfc2VydmVy X2RyaXZlcik7CisKIAlidGRfdW5yZWdpc3Rlcl9kZXZpY2VfZHJpdmVyKCZhdWRpb19kcml2ZXIp OwogfQogCmRpZmYgLS1naXQgYS9hdWRpby9tYW5hZ2VyLmggYi9hdWRpby9tYW5hZ2VyLmgKaW5k ZXggOGUxYWJmNC4uYmVlMmE5YiAxMDA2NDQKLS0tIGEvYXVkaW8vbWFuYWdlci5oCisrKyBiL2F1 ZGlvL21hbmFnZXIuaApAQCAtMjksNiArMjksNyBAQCBzdHJ1Y3QgZW5hYmxlZF9pbnRlcmZhY2Vz IHsKIAlnYm9vbGVhbiBzaW5rOwogCWdib29sZWFuIHNvdXJjZTsKIAlnYm9vbGVhbiBjb250cm9s OworCWdib29sZWFuIG1lZGlhOwogfTsKIAogaW50IGF1ZGlvX21hbmFnZXJfaW5pdChEQnVzQ29u bmVjdGlvbiAqY29ubiwgR0tleUZpbGUgKmNvbmZpZywKZGlmZiAtLWdpdCBhL2F1ZGlvL21lZGlh LmMgYi9hdWRpby9tZWRpYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYy NGQzNTQKLS0tIC9kZXYvbnVsbAorKysgYi9hdWRpby9tZWRpYS5jCkBAIC0wLDAgKzEsNzc4IEBA CisvKgorICoKKyAqICBCbHVlWiAtIEJsdWV0b290aCBwcm90b2NvbCBzdGFjayBmb3IgTGludXgK KyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMDcgIE5va2lhIENvcnBvcmF0aW9uCisgKiAg Q29weXJpZ2h0IChDKSAyMDA0LTIwMDkgIE1hcmNlbCBIb2x0bWFubiA8bWFyY2VsQGhvbHRtYW5u Lm9yZz4KKyAqCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl LCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlz IHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0 aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEw LTEzMDEgIFVTQQorICoKKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNv bmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSA8Z2xpYi5o PgorI2luY2x1ZGUgPGdkYnVzLmg+CisKKyNpbmNsdWRlICIuLi9zcmMvYWRhcHRlci5oIgorI2lu Y2x1ZGUgIi4uL3NyYy9kYnVzLWNvbW1vbi5oIgorCisjaW5jbHVkZSAibG9nZ2luZy5oIgorI2lu Y2x1ZGUgImVycm9yLmgiCisjaW5jbHVkZSAiZGV2aWNlLmgiCisjaW5jbHVkZSAiYXZkdHAuaCIK KyNpbmNsdWRlICJtZWRpYS5oIgorI2luY2x1ZGUgImEyZHAuaCIKKworI2RlZmluZSBNRURJQV9J TlRFUkZBQ0UgIm9yZy5ibHVlei5NZWRpYSIKKyNkZWZpbmUgTUVESUFfRU5EUE9JTlRfSU5URVJG QUNFICJvcmcuYmx1ZXouTWVkaWFFbmRwb2ludCIKKyNkZWZpbmUgTUVESUFfVFJBTlNQT1JUX0lO VEVSRkFDRSAib3JnLmJsdWV6Lk1lZGlhVHJhbnNwb3J0IgorCisjZGVmaW5lIFJFUVVFU1RfVElN RU9VVCAoMyAqIDEwMDApCQkvKiAzIHNlY29uZHMgKi8KKworc3RydWN0IG1lZGlhX2FkYXB0ZXIg eworCWJkYWRkcl90CQlzcmM7CQkvKiBBZGFwdGVyIGFkZHJlc3MgKi8KKwljaGFyCQkJKnBhdGg7 CQkvKiBBZGFwdGVyIHBhdGggKi8KKwlEQnVzQ29ubmVjdGlvbgkJKmNvbm47CQkvKiBBZGFwdGVy IGNvbm5lY3Rpb24gKi8KKwlHU0xpc3QJCQkqZW5kcG9pbnRzOwkvKiBFbmRwb2ludHMgbGlzdCAq LworfTsKKworc3RydWN0IGVuZHBvaW50X3JlcXVlc3QgeworCURCdXNNZXNzYWdlCQkqbXNnOwor CURCdXNQZW5kaW5nQ2FsbAkJKmNhbGw7CisJbWVkaWFfZW5kcG9pbnRfY2JfdCBjYjsKKwl2b2lk CQkJKnVzZXJfZGF0YTsKK307CisKK3N0cnVjdCBtZWRpYV9lbmRwb2ludCB7CisJc3RydWN0IGEy ZHBfc2VwCQkqc2VwOworCWNoYXIJCQkqc2VuZGVyOwkvKiBFbmRwb2ludCBEQnVzIGJ1cyBpZCAq LworCWNoYXIJCQkqcGF0aDsJCS8qIEVuZHBvaW50IG9iamVjdCBwYXRoICovCisJY2hhcgkJCSp1 dWlkOwkJLyogRW5kcG9pbnQgcHJvcGVydHkgVVVJRCAqLworCXVpbnQ4X3QJCQljb2RlYzsJCS8q IEVuZHBvaW50IGNvZGVjICovCisJdWludDhfdAkJCSpjYXBhYmlsaXRpZXM7CS8qIEVuZHBvaW50 IHByb3BlcnR5IGNhcGFiaWxpdGllcyAqLworCXNpemVfdAkJCXNpemU7CQkvKiBFbmRwb2ludCBj YXBhYmlsaXRpZXMgc2l6ZSAqLworCWd1aW50CQkJd2F0Y2g7CisJc3RydWN0IGVuZHBvaW50X3Jl cXVlc3QgKnJlcXVlc3Q7CisJc3RydWN0IG1lZGlhX3RyYW5zcG9ydAkqdHJhbnNwb3J0OworCXN0 cnVjdCBtZWRpYV9hZGFwdGVyCSphZGFwdGVyOworfTsKKworc3RydWN0IG1lZGlhX3RyYW5zcG9y dCB7CisJY2hhcgkJCSpwYXRoOwkJLyogVHJhbnNwb3J0IG9iamVjdCBwYXRoICovCisJc3RydWN0 IGF1ZGlvX2RldmljZQkqZGV2aWNlOwkvKiBUcmFuc3BvcnQgZGV2aWNlICovCisJaW50CQkJZmQ7 CQkvKiBUcmFuc3BvcnQgZmlsZSBkZXNjcmlwdG9yICovCisJdWludDE2X3QJCWRlbGF5OwkJLyog VHJhbnNwb3J0IGRlbGF5IChhMmRwIG9ubHkpICovCisJZ2Jvb2xlYW4JCW5yZWM7CQkvKiBUcmFu c3BvcnQgbnJlYyAoaGZwIG9ubHkpICovCisJZ2Jvb2xlYW4JCXJlYWRfbG9jazsKKwlnYm9vbGVh bgkJd3JpdGVfbG9jazsKK307CisKK3N0YXRpYyBHU0xpc3QgKmFkYXB0ZXJzID0gTlVMTDsKKwor c3RhdGljIHZvaWQgbWVkaWFfZW5kcG9pbnRfcmVtb3ZlKHN0cnVjdCBtZWRpYV9lbmRwb2ludCAq ZW5kcG9pbnQpCit7CisJc3RydWN0IG1lZGlhX2FkYXB0ZXIgKmFkYXB0ZXIgPSBlbmRwb2ludC0+ YWRhcHRlcjsKKworCWluZm8oIkVuZHBvaW50IHVucmVnaXN0ZXJlZDogc2VuZGVyPSVzIHBhdGg9 JXMiLCBlbmRwb2ludC0+c2VuZGVyLAorCQkJZW5kcG9pbnQtPnBhdGgpOworCisJYWRhcHRlci0+ ZW5kcG9pbnRzID0gZ19zbGlzdF9yZW1vdmUoYWRhcHRlci0+ZW5kcG9pbnRzLCBlbmRwb2ludCk7 CisKKwlpZiAoZW5kcG9pbnQtPnNlcCkKKwkJYTJkcF9yZW1vdmVfc2VwKGVuZHBvaW50LT5zZXAp OworCisJaWYgKGVuZHBvaW50LT50cmFuc3BvcnQpIHsKKwkJZ19mcmVlKGVuZHBvaW50LT50cmFu c3BvcnQtPnBhdGgpOworCQlnX2ZyZWUoZW5kcG9pbnQtPnRyYW5zcG9ydCk7CisJfQorCisJZ19k YnVzX3JlbW92ZV93YXRjaChhZGFwdGVyLT5jb25uLCBlbmRwb2ludC0+d2F0Y2gpOworCWdfZnJl ZShlbmRwb2ludC0+Y2FwYWJpbGl0aWVzKTsKKwlnX2ZyZWUoZW5kcG9pbnQtPnNlbmRlcik7CisJ Z19mcmVlKGVuZHBvaW50LT5wYXRoKTsKKwlnX2ZyZWUoZW5kcG9pbnQtPnV1aWQpOworCWdfZnJl ZShlbmRwb2ludCk7Cit9CisKK3N0YXRpYyB2b2lkIG1lZGlhX2VuZHBvaW50X2V4aXQoREJ1c0Nv bm5lY3Rpb24gKmNvbm5lY3Rpb24sIHZvaWQgKnVzZXJfZGF0YSkKK3sKKwlzdHJ1Y3QgbWVkaWFf ZW5kcG9pbnQgKmVuZHBvaW50ID0gdXNlcl9kYXRhOworCisJZW5kcG9pbnQtPndhdGNoID0gMDsK KwltZWRpYV9lbmRwb2ludF9yZW1vdmUoZW5kcG9pbnQpOworfQorCitzdGF0aWMgc3RydWN0IG1l ZGlhX2VuZHBvaW50ICptZWRpYV9lbmRwb2ludF9jcmVhdGUoc3RydWN0IG1lZGlhX2FkYXB0ZXIg KmFkYXB0ZXIsCisJCQkJCQljb25zdCBjaGFyICpzZW5kZXIsCisJCQkJCQljb25zdCBjaGFyICpw YXRoLAorCQkJCQkJY29uc3QgY2hhciAqdXVpZCwKKwkJCQkJCWdib29sZWFuIGRlbGF5X3JlcG9y dGluZywKKwkJCQkJCXVpbnQ4X3QgY29kZWMsCisJCQkJCQl1aW50OF90ICpjYXBhYmlsaXRpZXMs CisJCQkJCQlzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgbWVkaWFfZW5kcG9pbnQgKmVuZHBvaW50 OworCisJZW5kcG9pbnQgPSBnX25ldzAoc3RydWN0IG1lZGlhX2VuZHBvaW50LCAxKTsKKwllbmRw b2ludC0+c2VuZGVyID0gZ19zdHJkdXAoc2VuZGVyKTsKKwllbmRwb2ludC0+cGF0aCA9IGdfc3Ry ZHVwKHBhdGgpOworCWVuZHBvaW50LT51dWlkID0gZ19zdHJkdXAodXVpZCk7CisJZW5kcG9pbnQt PmNvZGVjID0gY29kZWM7CisJZW5kcG9pbnQtPmNhcGFiaWxpdGllcyA9IGdfbmV3KHVpbnQ4X3Qs IHNpemUpOworCW1lbWNweShlbmRwb2ludC0+Y2FwYWJpbGl0aWVzLCBjYXBhYmlsaXRpZXMsIHNp emUpOworCWVuZHBvaW50LT5zaXplID0gc2l6ZTsKKwllbmRwb2ludC0+YWRhcHRlciA9IGFkYXB0 ZXI7CisKKwlpZiAoZ19zdHJjbXAwKHV1aWQsIEEyRFBfU09VUkNFX1VVSUQpID09IDApCisJCWVu ZHBvaW50LT5zZXAgPSBhMmRwX2FkZF9zZXAoJmFkYXB0ZXItPnNyYywgQVZEVFBfU0VQX1RZUEVf U09VUkNFLCBjb2RlYywKKwkJCQkJCWRlbGF5X3JlcG9ydGluZywgZW5kcG9pbnQpOworCWVsc2Ug aWYgKGdfc3RyY21wMCh1dWlkLCBBMkRQX1NJTktfVVVJRCkgPT0gMCkKKwkJZW5kcG9pbnQtPnNl cCA9IGEyZHBfYWRkX3NlcCgmYWRhcHRlci0+c3JjLCBBVkRUUF9TRVBfVFlQRV9TSU5LLCBjb2Rl YywKKwkJCQkJCWRlbGF5X3JlcG9ydGluZywgZW5kcG9pbnQpOworCisJaWYgKGVuZHBvaW50LT5z ZXAgPT0gTlVMTCkgeworCQlnX2ZyZWUoZW5kcG9pbnQpOworCQlyZXR1cm4gTlVMTDsKKwl9CisK KwllbmRwb2ludC0+d2F0Y2ggPSBnX2RidXNfYWRkX2Rpc2Nvbm5lY3Rfd2F0Y2goYWRhcHRlci0+ Y29ubiwgc2VuZGVyLAorCQkJCQkJbWVkaWFfZW5kcG9pbnRfZXhpdCwgZW5kcG9pbnQsCisJCQkJ CQlOVUxMKTsKKworCWFkYXB0ZXItPmVuZHBvaW50cyA9IGdfc2xpc3RfYXBwZW5kKGFkYXB0ZXIt PmVuZHBvaW50cywgZW5kcG9pbnQpOworCWluZm8oIkVuZHBvaW50IHJlZ2lzdGVyZWQ6IHNlbmRl cj0lcyBwYXRoPSVzIiwgc2VuZGVyLCBwYXRoKTsKKworCXJldHVybiBlbmRwb2ludDsKK30KKwor c3RhdGljIHN0cnVjdCBtZWRpYV9lbmRwb2ludCAqbWVkaWFfYWRhcHRlcl9maW5kX2VuZHBvaW50 KAorCQkJCQkJc3RydWN0IG1lZGlhX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJCQljb25zdCBjaGFy ICpzZW5kZXIsCisJCQkJCQljb25zdCBjaGFyICpwYXRoKQoreworCUdTTGlzdCAqbDsKKworCWZv ciAobCA9IGFkYXB0ZXItPmVuZHBvaW50czsgbDsgbCA9IGwtPm5leHQpIHsKKwkJc3RydWN0IG1l ZGlhX2VuZHBvaW50ICplbmRwb2ludCA9IGwtPmRhdGE7CisKKwkJaWYgKGdfc3RyY21wMChlbmRw b2ludC0+c2VuZGVyLCBzZW5kZXIpICE9IDApCisJCQljb250aW51ZTsKKworCQlpZiAoZ19zdHJj bXAwKGVuZHBvaW50LT5wYXRoLCBwYXRoKSA9PSAwKQorCQkJcmV0dXJuIGVuZHBvaW50OworCX0K KworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IHBhcnNlX2J5dGVfYXJyYXkoREJ1c01l c3NhZ2VJdGVyICppdGVyLCB1aW50OF90ICp2YWx1ZSwgc2l6ZV90ICpsZW5ndGgpCit7CisJREJ1 c01lc3NhZ2VJdGVyIGFycmF5OworCXNpemVfdCBpOworCisJaWYgKGRidXNfbWVzc2FnZV9pdGVy X2dldF9hcmdfdHlwZShpdGVyKSAhPSBEQlVTX1RZUEVfQVJSQVkpCisJCXJldHVybiAtRUlOVkFM OworCisJZGJ1c19tZXNzYWdlX2l0ZXJfcmVjdXJzZShpdGVyLCAmYXJyYXkpOworCisJZm9yIChp ID0gMDsgZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2FyZ190eXBlKCZhcnJheSkgIT0KKwkJCQkJREJV U19UWVBFX0lOVkFMSUQ7IGkrKykgeworCisJCWlmIChkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYXJn X3R5cGUoJmFycmF5KSAhPSBEQlVTX1RZUEVfQllURSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJ CWlmIChpID49ICpsZW5ndGgpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlkYnVzX21lc3NhZ2Vf aXRlcl9nZXRfYmFzaWMoJmFycmF5LCAmdmFsdWVbaV0pOworCisJCWRidXNfbWVzc2FnZV9pdGVy X25leHQoJmFycmF5KTsKKwl9CisKKwkqbGVuZ3RoID0gaTsKKworCXJldHVybiAwOworfQorCitz dGF0aWMgaW50IHBhcnNlX3Byb3BlcnRpZXMoREJ1c01lc3NhZ2VJdGVyICpwcm9wcywgY29uc3Qg Y2hhciAqKnV1aWQsCisJCQkJZ2Jvb2xlYW4gKmRlbGF5X3JlcG9ydGluZywgdWludDhfdCAqY29k ZWMsCisJCQkJdWludDhfdCAqY2FwYWJpbGl0aWVzLCBzaXplX3QgKnNpemUpCit7CisJd2hpbGUg KGRidXNfbWVzc2FnZV9pdGVyX2dldF9hcmdfdHlwZShwcm9wcykgPT0gREJVU19UWVBFX0RJQ1Rf RU5UUlkpIHsKKwkJY29uc3QgY2hhciAqa2V5OworCQlEQnVzTWVzc2FnZUl0ZXIgdmFsdWUsIGVu dHJ5OworCQlpbnQgdmFyOworCisJCWRidXNfbWVzc2FnZV9pdGVyX3JlY3Vyc2UocHJvcHMsICZl bnRyeSk7CisJCWRidXNfbWVzc2FnZV9pdGVyX2dldF9iYXNpYygmZW50cnksICZrZXkpOworCisJ CWRidXNfbWVzc2FnZV9pdGVyX25leHQoJmVudHJ5KTsKKwkJZGJ1c19tZXNzYWdlX2l0ZXJfcmVj dXJzZSgmZW50cnksICZ2YWx1ZSk7CisKKwkJdmFyID0gZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2Fy Z190eXBlKCZ2YWx1ZSk7CisJCWlmIChzdHJjYXNlY21wKGtleSwgIlVVSUQiKSA9PSAwKSB7CisJ CQlpZiAodmFyICE9IERCVVNfVFlQRV9TVFJJTkcpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlk YnVzX21lc3NhZ2VfaXRlcl9nZXRfYmFzaWMoJnZhbHVlLCB1dWlkKTsKKwkJfSBlbHNlIGlmIChz dHJjYXNlY21wKGtleSwgIkNvZGVjIikgPT0gMCkgeworCQkJaWYgKHZhciAhPSBEQlVTX1RZUEVf QllURSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWRidXNfbWVzc2FnZV9pdGVyX2dldF9iYXNp YygmdmFsdWUsIGNvZGVjKTsKKwkJfSBlbHNlIGlmIChzdHJjYXNlY21wKGtleSwgIkRlbGF5UmVw b3J0aW5nIikgPT0gMCkgeworCQkJaWYgKHZhciAhPSBEQlVTX1RZUEVfQk9PTEVBTikKKwkJCQly ZXR1cm4gLUVJTlZBTDsKKwkJCWRidXNfbWVzc2FnZV9pdGVyX2dldF9iYXNpYygmdmFsdWUsIGRl bGF5X3JlcG9ydGluZyk7CisJCX0gZWxzZSBpZiAoc3RyY2FzZWNtcChrZXksICJDYXBhYmlsaXRp ZXMiKSA9PSAwKSB7CisJCQlpbnQgcmV0ID0gcGFyc2VfYnl0ZV9hcnJheSgmdmFsdWUsIGNhcGFi aWxpdGllcywgc2l6ZSk7CisKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiByZXQ7CisJCX0K KworCQlkYnVzX21lc3NhZ2VfaXRlcl9uZXh0KHByb3BzKTsKKwl9CisKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIERCdXNNZXNzYWdlICpyZWdpc3Rlcl9lbmRwb2ludChEQnVzQ29ubmVjdGlvbiAq Y29ubiwgREJ1c01lc3NhZ2UgKm1zZywKKwkJCQkJdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbWVk aWFfYWRhcHRlciAqYWRhcHRlciA9IGRhdGE7CisJREJ1c01lc3NhZ2VJdGVyIGFyZ3MsIHByb3Bz OworCWNvbnN0IGNoYXIgKnNlbmRlciwgKnBhdGgsICp1dWlkID0gTlVMTDsKKwlnYm9vbGVhbiBk ZWxheV9yZXBvcnRpbmc7CisJdWludDhfdCBjb2RlYzsKKwl1aW50OF90IGNhcGFiaWxpdGllc1sx MjhdOworCXNpemVfdCBzaXplID0gc2l6ZW9mKGNhcGFiaWxpdGllcyk7CisKKwlzZW5kZXIgPSBk YnVzX21lc3NhZ2VfZ2V0X3NlbmRlcihtc2cpOworCisJZGJ1c19tZXNzYWdlX2l0ZXJfaW5pdCht c2csICZhcmdzKTsKKworCWRidXNfbWVzc2FnZV9pdGVyX2dldF9iYXNpYygmYXJncywgJnBhdGgp OworCWRidXNfbWVzc2FnZV9pdGVyX25leHQoJmFyZ3MpOworCisJaWYgKG1lZGlhX2FkYXB0ZXJf ZmluZF9lbmRwb2ludChhZGFwdGVyLCBzZW5kZXIsIHBhdGgpICE9IE5VTEwpCisJCXJldHVybiBn X2RidXNfY3JlYXRlX2Vycm9yKG1zZywgRVJST1JfSU5URVJGQUNFICIuRmFpbGVkIiwKKwkJCQki RW5kcG9pbnQgYWxyZWFkeSByZWdpc3RlcmVkIik7CisKKwlkYnVzX21lc3NhZ2VfaXRlcl9yZWN1 cnNlKCZhcmdzLCAmcHJvcHMpOworCWlmIChkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYXJnX3R5cGUo JnByb3BzKSAhPSBEQlVTX1RZUEVfRElDVF9FTlRSWSkKKwkJcmV0dXJuIGdfZGJ1c19jcmVhdGVf ZXJyb3IobXNnLCBFUlJPUl9JTlRFUkZBQ0UKKwkJCQkJIi5GYWlsZWQiLCAiSW52YWxpZCBhcmd1 bWVudCIpOworCisJaWYgKHBhcnNlX3Byb3BlcnRpZXMoJnByb3BzLCAmdXVpZCwgJmRlbGF5X3Jl cG9ydGluZywgJmNvZGVjLAorCQkJCWNhcGFiaWxpdGllcywgJnNpemUpIHx8IHV1aWQgPT0gTlVM TCkKKwkJcmV0dXJuIGdfZGJ1c19jcmVhdGVfZXJyb3IobXNnLCBFUlJPUl9JTlRFUkZBQ0UgIi5G YWlsZWQiLAorCQkJCQkJIkludmFsaWQgYXJndW1lbnQiKTsKKworCW1lZGlhX2VuZHBvaW50X2Ny ZWF0ZShhZGFwdGVyLCBzZW5kZXIsIHBhdGgsIHV1aWQsIGRlbGF5X3JlcG9ydGluZywKKwkJCQlj b2RlYywgY2FwYWJpbGl0aWVzLCBzaXplKTsKKworCXJldHVybiBnX2RidXNfY3JlYXRlX3JlcGx5 KG1zZywgREJVU19UWVBFX0lOVkFMSUQpOworfQorCitzdGF0aWMgREJ1c01lc3NhZ2UgKnVucmVn aXN0ZXJfZW5kcG9pbnQoREJ1c0Nvbm5lY3Rpb24gKmNvbm4sIERCdXNNZXNzYWdlICptc2csCisJ CQkJCXZvaWQgKmRhdGEpCit7CisJc3RydWN0IG1lZGlhX2FkYXB0ZXIgKmFkYXB0ZXIgPSBkYXRh OworCXN0cnVjdCBtZWRpYV9lbmRwb2ludCAqZW5kcG9pbnQ7CisJY29uc3QgY2hhciAqc2VuZGVy LCAqcGF0aDsKKworCWlmICghZGJ1c19tZXNzYWdlX2dldF9hcmdzKG1zZywgTlVMTCwKKwkJCQlE QlVTX1RZUEVfT0JKRUNUX1BBVEgsICZwYXRoLAorCQkJCURCVVNfVFlQRV9JTlZBTElEKSkKKwkJ cmV0dXJuIE5VTEw7CisKKwlzZW5kZXIgPSBkYnVzX21lc3NhZ2VfZ2V0X3NlbmRlcihtc2cpOwor CisJZW5kcG9pbnQgPSBtZWRpYV9hZGFwdGVyX2ZpbmRfZW5kcG9pbnQoYWRhcHRlciwgc2VuZGVy LCBwYXRoKTsKKwlpZiAoZW5kcG9pbnQgPT0gTlVMTCkKKwkJcmV0dXJuIGdfZGJ1c19jcmVhdGVf ZXJyb3IobXNnLCBFUlJPUl9JTlRFUkZBQ0UgIi5GYWlsZWQiLAorCQkJCSJFbmRwb2ludCBub3Qg cmVnaXN0ZXJlZCIpOworCisJbWVkaWFfZW5kcG9pbnRfcmVtb3ZlKGVuZHBvaW50KTsKKworCXJl dHVybiBnX2RidXNfY3JlYXRlX3JlcGx5KG1zZywgREJVU19UWVBFX0lOVkFMSUQpOworfQorCitz dGF0aWMgR0RCdXNNZXRob2RUYWJsZSBtZWRpYV9tZXRob2RzW10gPSB7CisJeyAiUmVnaXN0ZXJF bmRwb2ludCIsCSJvYXtzdn0iLAkiIiwJcmVnaXN0ZXJfZW5kcG9pbnQgfSwKKwl7ICJVbnJlZ2lz dGVyRW5kcG9pbnQiLAkibyIsCQkiIiwJdW5yZWdpc3Rlcl9lbmRwb2ludCB9LAorCXsgfSwKK307 CisKK3N0YXRpYyB2b2lkIHBhdGhfZnJlZSh2b2lkICpkYXRhKQoreworCXN0cnVjdCBtZWRpYV9h ZGFwdGVyICphZGFwdGVyID0gZGF0YTsKKworCWRidXNfY29ubmVjdGlvbl91bnJlZihhZGFwdGVy LT5jb25uKTsKKworCWdfZnJlZShhZGFwdGVyLT5wYXRoKTsKKwlnX2ZyZWUoYWRhcHRlcik7Cit9 CisKK2ludCBtZWRpYV9yZWdpc3RlcihEQnVzQ29ubmVjdGlvbiAqY29ubiwgY29uc3QgY2hhciAq cGF0aCwgY29uc3QgYmRhZGRyX3QgKnNyYykKK3sKKwlzdHJ1Y3QgbWVkaWFfYWRhcHRlciAqYWRh cHRlcjsKKworCWFkYXB0ZXIgPSBnX25ldzAoc3RydWN0IG1lZGlhX2FkYXB0ZXIsIDEpOworCWFk YXB0ZXItPmNvbm4gPSBkYnVzX2Nvbm5lY3Rpb25fcmVmKGNvbm4pOworCWJhY3B5KCZhZGFwdGVy LT5zcmMsIHNyYyk7CisJYWRhcHRlci0+cGF0aCA9IGdfc3RyZHVwKHBhdGgpOworCisJaWYgKCFn X2RidXNfcmVnaXN0ZXJfaW50ZXJmYWNlKGNvbm4sIHBhdGgsIE1FRElBX0lOVEVSRkFDRSwKKwkJ CQkJbWVkaWFfbWV0aG9kcywgTlVMTCwgTlVMTCwKKwkJCQkJYWRhcHRlciwgcGF0aF9mcmVlKSkg eworCQllcnJvcigiRC1CdXMgZmFpbGVkIHRvIHJlZ2lzdGVyICVzIHBhdGgiLCBwYXRoKTsKKwkJ cGF0aF9mcmVlKGFkYXB0ZXIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisK K3ZvaWQgbWVkaWFfdW5yZWdpc3Rlcihjb25zdCBjaGFyICpwYXRoKQoreworCUdTTGlzdCAqbDsK KworCWZvciAobCA9IGFkYXB0ZXJzOyBsOyBsID0gbC0+bmV4dCkgeworCQlzdHJ1Y3QgbWVkaWFf YWRhcHRlciAqYWRhcHRlciA9IGwtPmRhdGE7CisKKwkJaWYgKGdfc3RyY21wMChwYXRoLCBhZGFw dGVyLT5wYXRoKSA9PSAwKSB7CisJCQlnX2RidXNfdW5yZWdpc3Rlcl9pbnRlcmZhY2UoYWRhcHRl ci0+Y29ubiwgcGF0aCwKKwkJCQkJCQlNRURJQV9JTlRFUkZBQ0UpOworCQkJcmV0dXJuOworCQl9 CisJfQorfQorCitzdGF0aWMgREJ1c01lc3NhZ2UgKmdldF9wcm9wZXJ0aWVzKERCdXNDb25uZWN0 aW9uICpjb25uLCBEQnVzTWVzc2FnZSAqbXNnLAorCQkJCQl2b2lkICpkYXRhKQoreworCXN0cnVj dCBtZWRpYV90cmFuc3BvcnQgKnRyYW5zcG9ydCA9IGRhdGE7CisJREJ1c01lc3NhZ2UgKnJlcGx5 OworCURCdXNNZXNzYWdlSXRlciBpdGVyOworCURCdXNNZXNzYWdlSXRlciBkaWN0OworCisJcmVw bHkgPSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9yZXR1cm4obXNnKTsKKwlpZiAoIXJlcGx5KQor CQlyZXR1cm4gTlVMTDsKKworCWRidXNfbWVzc2FnZV9pdGVyX2luaXRfYXBwZW5kKHJlcGx5LCAm aXRlcik7CisKKwlkYnVzX21lc3NhZ2VfaXRlcl9vcGVuX2NvbnRhaW5lcigmaXRlciwgREJVU19U WVBFX0FSUkFZLAorCQkJREJVU19ESUNUX0VOVFJZX0JFR0lOX0NIQVJfQVNfU1RSSU5HCisJCQlE QlVTX1RZUEVfU1RSSU5HX0FTX1NUUklORyBEQlVTX1RZUEVfVkFSSUFOVF9BU19TVFJJTkcKKwkJ CURCVVNfRElDVF9FTlRSWV9FTkRfQ0hBUl9BU19TVFJJTkcsICZkaWN0KTsKKworCS8qIERldmlj ZSAqLworCWRpY3RfYXBwZW5kX2VudHJ5KCZkaWN0LCAiRGV2aWNlIiwgREJVU19UWVBFX09CSkVD VF9QQVRILAorCQkJCSZ0cmFuc3BvcnQtPmRldmljZS0+cGF0aCk7CisKKwkvKiBEZWxheSAoYTJk cCBvbmx5KSAqLworCWlmICh0cmFuc3BvcnQtPmRlbGF5ID4gMCkKKwkJZGljdF9hcHBlbmRfZW50 cnkoJmRpY3QsICJEZWxheSIsIERCVVNfVFlQRV9VSU5UMTYsCisJCQkJCSZ0cmFuc3BvcnQtPmRl bGF5KTsKKworCS8qIE5SRUMgKGhmcCBvbmx5KSAqLworCWlmICh0cmFuc3BvcnQtPm5yZWMpCisJ CWRpY3RfYXBwZW5kX2VudHJ5KCZkaWN0LCAiTlJFQyIsIERCVVNfVFlQRV9CT09MRUFOLAorCQkJ CQkmdHJhbnNwb3J0LT5ucmVjKTsKKworCWRidXNfbWVzc2FnZV9pdGVyX2Nsb3NlX2NvbnRhaW5l cigmaXRlciwgJmRpY3QpOworCisJcmV0dXJuIHJlcGx5OworfQorCitzdGF0aWMgREJ1c01lc3Nh Z2UgKmFjcXVpcmUoREJ1c0Nvbm5lY3Rpb24gKmNvbm4sIERCdXNNZXNzYWdlICptc2csCisJCQkJ CXZvaWQgKmRhdGEpCit7CisJc3RydWN0IG1lZGlhX3RyYW5zcG9ydCAqdHJhbnNwb3J0ID0gZGF0 YTsKKwljb25zdCBjaGFyICphY2Nlc3N0eXBlOworCisJaWYgKCFkYnVzX21lc3NhZ2VfZ2V0X2Fy Z3MobXNnLCBOVUxMLAorCQkJCURCVVNfVFlQRV9TVFJJTkcsICZhY2Nlc3N0eXBlLAorCQkJCURC VVNfVFlQRV9JTlZBTElEKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoZ19zdHJzdHJfbGVuKGFj Y2Vzc3R5cGUsIC0xLCAiciIpICE9IE5VTEwpIHsKKwkJaWYgKHRyYW5zcG9ydC0+cmVhZF9sb2Nr ID09IFRSVUUpCisJCQlyZXR1cm4gZ19kYnVzX2NyZWF0ZV9lcnJvcihtc2csIEVSUk9SX0lOVEVS RkFDRQorCQkJCQkJIi5GYWlsZWQiLAorCQkJCQkJIlBlcm1pc3Npb24gZGVuaWVkIik7CisJCXRy YW5zcG9ydC0+cmVhZF9sb2NrID0gVFJVRTsKKwl9CisKKwlpZiAoZ19zdHJzdHJfbGVuKGFjY2Vz c3R5cGUsIC0xLCAidyIpICE9IE5VTEwpIHsKKwkJaWYgKHRyYW5zcG9ydC0+d3JpdGVfbG9jayA9 PSBUUlVFKQorCQkJcmV0dXJuIGdfZGJ1c19jcmVhdGVfZXJyb3IobXNnLCBFUlJPUl9JTlRFUkZB Q0UKKwkJCQkJCSIuRmFpbGVkIiwKKwkJCQkJCSJQZXJtaXNzaW9uIGRlbmllZCIpOworCQl0cmFu c3BvcnQtPndyaXRlX2xvY2sgPSBUUlVFOworCX0KKworCXJldHVybiBnX2RidXNfY3JlYXRlX3Jl cGx5KG1zZywgREJVU19UWVBFX1VOSVhfRkQsIHRyYW5zcG9ydC0+ZmQsCisJCQkJREJVU19UWVBF X0lOVkFMSUQpOworfQorCitzdGF0aWMgREJ1c01lc3NhZ2UgKnJlbGVhc2UoREJ1c0Nvbm5lY3Rp b24gKmNvbm4sIERCdXNNZXNzYWdlICptc2csCisJCQkJCXZvaWQgKmRhdGEpCit7CisJc3RydWN0 IG1lZGlhX3RyYW5zcG9ydCAqdHJhbnNwb3J0ID0gZGF0YTsKKwljb25zdCBjaGFyICphY2Nlc3N0 eXBlOworCisJaWYgKCFkYnVzX21lc3NhZ2VfZ2V0X2FyZ3MobXNnLCBOVUxMLAorCQkJCURCVVNf VFlQRV9TVFJJTkcsICZhY2Nlc3N0eXBlLAorCQkJCURCVVNfVFlQRV9JTlZBTElEKSkKKwkJcmV0 dXJuIE5VTEw7CisKKwlpZiAoZ19zdHJzdHJfbGVuKGFjY2Vzc3R5cGUsIC0xLCAiciIpICE9IE5V TEwpIHsKKwkJaWYgKHRyYW5zcG9ydC0+cmVhZF9sb2NrID09IEZBTFNFKQorCQkJcmV0dXJuIGdf ZGJ1c19jcmVhdGVfZXJyb3IobXNnLCBFUlJPUl9JTlRFUkZBQ0UKKwkJCQkJCSIuRmFpbGVkIiwK KwkJCQkJCSJQZXJtaXNzaW9uIGRlbmllZCIpOworCQl0cmFuc3BvcnQtPnJlYWRfbG9jayA9IEZB TFNFOworCX0KKworCWlmIChnX3N0cnN0cl9sZW4oYWNjZXNzdHlwZSwgLTEsICJ3IikgIT0gTlVM TCkgeworCQlpZiAodHJhbnNwb3J0LT53cml0ZV9sb2NrID09IEZBTFNFKQorCQkJcmV0dXJuIGdf ZGJ1c19jcmVhdGVfZXJyb3IobXNnLCBFUlJPUl9JTlRFUkZBQ0UKKwkJCQkJCSIuRmFpbGVkIiwK KwkJCQkJCSJQZXJtaXNzaW9uIGRlbmllZCIpOworCQl0cmFuc3BvcnQtPndyaXRlX2xvY2sgPSBG QUxTRTsKKwl9CisKKwlyZXR1cm4gZ19kYnVzX2NyZWF0ZV9yZXBseShtc2csIERCVVNfVFlQRV9J TlZBTElEKTsKK30KKworc3RhdGljIERCdXNNZXNzYWdlICpzZXRfcHJvcGVydHkoREJ1c0Nvbm5l Y3Rpb24gKmNvbm4sIERCdXNNZXNzYWdlICptc2csCisJCQkJCXZvaWQgKmRhdGEpCit7CisJcmV0 dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBHREJ1c01ldGhvZFRhYmxlIHRyYW5zcG9ydF9tZXRob2Rz W10gPSB7CisJeyAiR2V0UHJvcGVydGllcyIsCSIiLAkiYXtzdn0iLAlnZXRfcHJvcGVydGllcyB9 LAorCXsgIkFjcXVpcmUiLAkJInMiLAkidSIsCQlhY3F1aXJlIH0sCisJeyAiUmVsZWFzZSIsCQki cyIsCSIiLAkJcmVsZWFzZSB9LAorCXsgIlNldFByb3BlcnR5IiwJInN2IiwJIiIsCQlzZXRfcHJv cGVydHkgfSwKKwl7IH0sCit9OworCitzdGF0aWMgR0RCdXNTaWduYWxUYWJsZSB0cmFuc3BvcnRf c2lnbmFsc1tdID0geworCXsgIlByb3BlcnR5Q2hhbmdlZCIsCSJzdiIJfSwKKwl7IH0KK307CisK K3N0YXRpYyB2b2lkIG1lZGlhX3RyYW5zcG9ydF9mcmVlKHZvaWQgKmRhdGEpCit7CisJc3RydWN0 IG1lZGlhX3RyYW5zcG9ydCAqdHJhbnNwb3J0ID0gZGF0YTsKKworCWdfZnJlZSh0cmFuc3BvcnQp OworfQorCitzdGF0aWMgdm9pZCBtZWRpYV90cmFuc3BvcnRfcmVtb3ZlKERCdXNDb25uZWN0aW9u ICpjb25uLAorCQkJCQlzdHJ1Y3QgbWVkaWFfdHJhbnNwb3J0ICp0cmFuc3BvcnQpCit7CisJZ19k YnVzX3VucmVnaXN0ZXJfaW50ZXJmYWNlKGNvbm4sIHRyYW5zcG9ydC0+cGF0aCwKKwkJCU1FRElB X1RSQU5TUE9SVF9JTlRFUkZBQ0UpOworfQorCitzdGF0aWMgc3RydWN0IG1lZGlhX3RyYW5zcG9y dCAqbWVkaWFfdHJhbnNwb3J0X2NyZWF0ZShEQnVzQ29ubmVjdGlvbiAqY29ubiwKKwkJCQkJCXN0 cnVjdCBhdWRpb19kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgbWVkaWFfdHJhbnNwb3J0ICp0 cmFuc3BvcnQ7CisKKwlzdGF0aWMgaW50IGZkID0gMDsKKworCXRyYW5zcG9ydCA9IGdfbmV3MChz dHJ1Y3QgbWVkaWFfdHJhbnNwb3J0LCAxKTsKKwl0cmFuc3BvcnQtPmRldmljZSA9IGRldmljZTsK Kwl0cmFuc3BvcnQtPnBhdGggPSBnX3N0cmR1cF9wcmludGYoIiVzL2ZkJWQiLCBkZXZpY2UtPnBh dGgsIGZkKyspOworCXRyYW5zcG9ydC0+ZmQgPSAtMTsKKworCWlmIChnX2RidXNfcmVnaXN0ZXJf aW50ZXJmYWNlKGNvbm4sIHRyYW5zcG9ydC0+cGF0aCwKKwkJCQlNRURJQV9UUkFOU1BPUlRfSU5U RVJGQUNFLAorCQkJCXRyYW5zcG9ydF9tZXRob2RzLCB0cmFuc3BvcnRfc2lnbmFscywgTlVMTCwK KwkJCQl0cmFuc3BvcnQsIG1lZGlhX3RyYW5zcG9ydF9mcmVlKSA9PSBGQUxTRSkgeworCQllcnJv cigiQ291bGQgbm90IHJlZ2lzdGVyIHRyYW5zcG9ydCAlcyIsIHRyYW5zcG9ydC0+cGF0aCk7CisJ CWdfZnJlZSh0cmFuc3BvcnQpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gdHJhbnNw b3J0OworfQorCitzdGF0aWMgdm9pZCBhcHBlbmRfYnl0ZV9hcnJheShEQnVzTWVzc2FnZUl0ZXIg Kml0ZXIsIHVpbnQ4X3QgKnZhbCwgc2l6ZV90IHNpemUpCit7CisJREJ1c01lc3NhZ2VJdGVyIHZh bHVlOworCWNoYXIgc2lnWzJdID0geyBEQlVTX1RZUEVfQllURSwgJ1wwJyB9OworCXNpemVfdCBp OworCisJZGJ1c19tZXNzYWdlX2l0ZXJfb3Blbl9jb250YWluZXIoaXRlciwgREJVU19UWVBFX0FS UkFZLCBzaWcsICZ2YWx1ZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorCQlkYnVz X21lc3NhZ2VfaXRlcl9hcHBlbmRfYmFzaWMoJnZhbHVlLCBEQlVTX1RZUEVfQllURSwgJnZhbFtp XSk7CisKKwlkYnVzX21lc3NhZ2VfaXRlcl9jbG9zZV9jb250YWluZXIoaXRlciwgJnZhbHVlKTsK K30KKworc2l6ZV90IG1lZGlhX2VuZHBvaW50X2dldF9jYXBhYmlsaXRpZXMoc3RydWN0IG1lZGlh X2VuZHBvaW50ICplbmRwb2ludCwKKwkJCQkJdWludDhfdCAqKmNhcGFiaWxpdGllcykKK3sKKwkq Y2FwYWJpbGl0aWVzID0gZW5kcG9pbnQtPmNhcGFiaWxpdGllczsKKwlyZXR1cm4gZW5kcG9pbnQt PnNpemU7Cit9CisKK3N0YXRpYyB2b2lkIGVuZHBvaW50X3JlcXVlc3RfZnJlZShzdHJ1Y3QgZW5k cG9pbnRfcmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlpZiAocmVxdWVzdC0+Y2FsbCkKKwkJZGJ1c19w ZW5kaW5nX2NhbGxfY2FuY2VsKHJlcXVlc3QtPmNhbGwpOworCisJZGJ1c19tZXNzYWdlX3VucmVm KHJlcXVlc3QtPm1zZyk7CisJZ19mcmVlKHJlcXVlc3QpOworfQorCitzdGF0aWMgdm9pZCBlbmRw b2ludF9yZXBseShEQnVzUGVuZGluZ0NhbGwgKmNhbGwsIHZvaWQgKnVzZXJfZGF0YSkKK3sKKwlz dHJ1Y3QgbWVkaWFfZW5kcG9pbnQgKmVuZHBvaW50ID0gdXNlcl9kYXRhOworCXN0cnVjdCBlbmRw b2ludF9yZXF1ZXN0ICpyZXF1ZXN0ID0gZW5kcG9pbnQtPnJlcXVlc3Q7CisJREJ1c01lc3NhZ2Ug KnJlcGx5OworCURCdXNFcnJvciBlcnI7CisJZ2Jvb2xlYW4gdmFsdWU7CisJdm9pZCAqcmV0ID0g TlVMTDsKKwlzaXplX3QgaSA9IDA7CisKKwkvKiBzdGVhbF9yZXBseSB3aWxsIGFsd2F5cyByZXR1 cm4gbm9uLU5VTEwgc2luY2UgdGhlIGNhbGxiYWNrCisJICogaXMgb25seSBjYWxsZWQgYWZ0ZXIg YSByZXBseSBoYXMgYmVlbiByZWNlaXZlZCAqLworCXJlcGx5ID0gZGJ1c19wZW5kaW5nX2NhbGxf c3RlYWxfcmVwbHkoY2FsbCk7CisKKwlkYnVzX2Vycm9yX2luaXQoJmVycik7CisJaWYgKGRidXNf c2V0X2Vycm9yX2Zyb21fbWVzc2FnZSgmZXJyLCByZXBseSkpIHsKKwkJZXJyb3IoIkVuZHBvaW50 IHJlcGxpZWQgd2l0aCBhbiBlcnJvcjogJXMiLAorCQkJCWVyci5uYW1lKTsKKworCQlpZiAoZGJ1 c19lcnJvcl9oYXNfbmFtZSgmZXJyLCBEQlVTX0VSUk9SX05PX1JFUExZKSkgeworCQkJbWVkaWFf ZW5kcG9pbnRfY2xlYXJfY29uZmlndXJhdGlvbihlbmRwb2ludCk7CisJCQlkYnVzX21lc3NhZ2Vf dW5yZWYocmVwbHkpOworCQkJZGJ1c19lcnJvcl9mcmVlKCZlcnIpOworCQkJcmV0dXJuOworCQl9 CisKKwkJZGJ1c19lcnJvcl9mcmVlKCZlcnIpOworCQlnb3RvIGRvbmU7CisJfQorCisJZGJ1c19l cnJvcl9pbml0KCZlcnIpOworCWlmIChkYnVzX21lc3NhZ2VfaXNfbWV0aG9kX2NhbGwocmVxdWVz dC0+bXNnLCBNRURJQV9FTkRQT0lOVF9JTlRFUkZBQ0UsCisJCQkJIlNlbGVjdENvbmZpZ3VyYXRp b24iKSkgeworCQlEQnVzTWVzc2FnZUl0ZXIgYXJnczsKKwkJdWludDhfdCBjb25maWd1cmF0aW9u WzEyOF07CisJCWludCBwZXJyOworCisJCWRidXNfbWVzc2FnZV9pdGVyX2luaXQocmVwbHksICZh cmdzKTsKKworCQlpID0gc2l6ZW9mKGNvbmZpZ3VyYXRpb24pOworCQlwZXJyID0gcGFyc2VfYnl0 ZV9hcnJheSgmYXJncywgY29uZmlndXJhdGlvbiwgJmkpOworCQlpZiAocGVyciA8IDApIHsKKwkJ CWVycm9yKCJFcnJvciBwYXJzaW5nIGNvbmZpZ3VyYXRpb246ICVzIiwgc3RyZXJyb3IoLXBlcnIp KTsKKwkJCWkgPSAwOworCQkJZ290byBkb25lOworCQl9CisKKwkJcmV0ID0gY29uZmlndXJhdGlv bjsKKwkJZ290byBkb25lOworCX0gZWxzZSAgaWYgKCFkYnVzX21lc3NhZ2VfZ2V0X2FyZ3MocmVw bHksICZlcnIsIERCVVNfVFlQRV9JTlZBTElEKSkgeworCQllcnJvcigiV3JvbmcgcmVwbHkgc2ln bmF0dXJlOiAlcyIsIGVyci5tZXNzYWdlKTsKKwkJZGJ1c19lcnJvcl9mcmVlKCZlcnIpOworCQln b3RvIGRvbmU7CisJfQorCisJaSA9IDE7CisJdmFsdWUgPSBUUlVFOworCXJldCA9ICZ2YWx1ZTsK KworZG9uZToKKwlkYnVzX21lc3NhZ2VfdW5yZWYocmVwbHkpOworCisJcmVxdWVzdC0+Y2IoZW5k cG9pbnQsIHJldCwgaSwgcmVxdWVzdC0+dXNlcl9kYXRhKTsKKworCWVuZHBvaW50X3JlcXVlc3Rf ZnJlZShyZXF1ZXN0KTsKKwllbmRwb2ludC0+cmVxdWVzdCA9IE5VTEw7Cit9CisKK3N0YXRpYyBn Ym9vbGVhbiBtZWRpYV9lbmRwb2ludF9hc3luY19jYWxsKERCdXNDb25uZWN0aW9uICpjb25uLAor CQkJCQlEQnVzTWVzc2FnZSAqbXNnLAorCQkJCQlzdHJ1Y3QgbWVkaWFfZW5kcG9pbnQgKmVuZHBv aW50LAorCQkJCQltZWRpYV9lbmRwb2ludF9jYl90IGNiLAorCQkJCQl2b2lkICp1c2VyX2RhdGEp Cit7CisJc3RydWN0IGVuZHBvaW50X3JlcXVlc3QgKnJlcXVlc3Q7CisKKwlpZiAoZW5kcG9pbnQt PnJlcXVlc3QpCisJCXJldHVybiBGQUxTRTsKKworCXJlcXVlc3QgPSBnX25ldzAoc3RydWN0IGVu ZHBvaW50X3JlcXVlc3QsIDEpOworCisJLyogVGltZW91dCBzaG91bGQgYmUgbGVzcyB0aGFuIGF2 ZHRwIHJlcXVlc3QgdGltZW91dCAoNCBzZWNvbmRzKSAqLworCWlmIChkYnVzX2Nvbm5lY3Rpb25f c2VuZF93aXRoX3JlcGx5KGNvbm4sIG1zZywgJnJlcXVlc3QtPmNhbGwsCisJCQkJCQlSRVFVRVNU X1RJTUVPVVQpID09IEZBTFNFKSB7CisJCWVycm9yKCJELUJ1cyBzZW5kIGZhaWxlZCIpOworCQln X2ZyZWUocmVxdWVzdCk7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlkYnVzX3BlbmRpbmdfY2Fs bF9zZXRfbm90aWZ5KHJlcXVlc3QtPmNhbGwsIGVuZHBvaW50X3JlcGx5LCBlbmRwb2ludCwgTlVM TCk7CisKKwlyZXF1ZXN0LT5tc2cgPSBtc2c7CisJcmVxdWVzdC0+Y2IgPSBjYjsKKwlyZXF1ZXN0 LT51c2VyX2RhdGEgPSB1c2VyX2RhdGE7CisJZW5kcG9pbnQtPnJlcXVlc3QgPSByZXF1ZXN0Owor CisJZGVidWcoIkNhbGxpbmcgJXM6IG5hbWUgPSAlcyBwYXRoID0gJXMiLCBkYnVzX21lc3NhZ2Vf Z2V0X21lbWJlcihtc2cpLAorCQkJZGJ1c19tZXNzYWdlX2dldF9kZXN0aW5hdGlvbihtc2cpLAor CQkJZGJ1c19tZXNzYWdlX2dldF9wYXRoKG1zZykpOworCisJcmV0dXJuIFRSVUU7Cit9CisKK2di b29sZWFuIG1lZGlhX2VuZHBvaW50X3NldF9jb25maWd1cmF0aW9uKHN0cnVjdCBtZWRpYV9lbmRw b2ludCAqZW5kcG9pbnQsCisJCQkJCXN0cnVjdCBhdWRpb19kZXZpY2UgKmRldmljZSwKKwkJCQkJ dWludDhfdCAqY29uZmlndXJhdGlvbiwgc2l6ZV90IHNpemUsCisJCQkJCW1lZGlhX2VuZHBvaW50 X2NiX3QgY2IsCisJCQkJCXZvaWQgKnVzZXJfZGF0YSkKK3sKKwlEQnVzQ29ubmVjdGlvbiAqY29u bjsKKwlEQnVzTWVzc2FnZSAqbXNnLCAqcmVwbHk7CisJREJ1c01lc3NhZ2VJdGVyIGl0ZXI7CisJ REJ1c0Vycm9yIGVycjsKKworCWlmIChlbmRwb2ludC0+dHJhbnNwb3J0ICE9IE5VTEwgfHwgZW5k cG9pbnQtPnJlcXVlc3QgIT0gTlVMTCkKKwkJcmV0dXJuIEZBTFNFOworCisJY29ubiA9IGVuZHBv aW50LT5hZGFwdGVyLT5jb25uOworCisJZW5kcG9pbnQtPnRyYW5zcG9ydCA9IG1lZGlhX3RyYW5z cG9ydF9jcmVhdGUoY29ubiwgZGV2aWNlKTsKKwlpZiAoZW5kcG9pbnQtPnRyYW5zcG9ydCA9PSBO VUxMKQorCQlyZXR1cm4gRkFMU0U7CisKKwltc2cgPSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9j YWxsKGVuZHBvaW50LT5zZW5kZXIsIGVuZHBvaW50LT5wYXRoLAorCQkJCQkJTUVESUFfRU5EUE9J TlRfSU5URVJGQUNFLAorCQkJCQkJIlNldENvbmZpZ3VyYXRpb24iKTsKKwlpZiAobXNnID09IE5V TEwpIHsKKwkJZXJyb3IoIkNvdWxkbid0IGFsbG9jYXRlIEQtQnVzIG1lc3NhZ2UiKTsKKwkJcmV0 dXJuIEZBTFNFOworCX0KKworCWRidXNfbWVzc2FnZV9pdGVyX2luaXRfYXBwZW5kKG1zZywgJml0 ZXIpOworCisJZGJ1c19tZXNzYWdlX2l0ZXJfYXBwZW5kX2Jhc2ljKCZpdGVyLCBEQlVTX1RZUEVf T0JKRUNUX1BBVEgsCisJCQkJCSZlbmRwb2ludC0+dHJhbnNwb3J0LT5wYXRoKTsKKworCWFwcGVu ZF9ieXRlX2FycmF5KCZpdGVyLCBjb25maWd1cmF0aW9uLCBzaXplKTsKKworCWlmIChjYiAhPSBO VUxMKQorCQlyZXR1cm4gbWVkaWFfZW5kcG9pbnRfYXN5bmNfY2FsbChjb25uLCBtc2csIGVuZHBv aW50LCBjYiwgdXNlcl9kYXRhKTsKKworCWRidXNfZXJyb3JfaW5pdCgmZXJyKTsKKworCS8qIEZJ WE1FOiByZW1vdmUgb25jZSB3ZSBjYW4gcmVwbHkgc2V0Y29uZiBhc3luY3Jvbm91c2x5ICovCisJ cmVwbHkgPSBkYnVzX2Nvbm5lY3Rpb25fc2VuZF93aXRoX3JlcGx5X2FuZF9ibG9jayhjb25uLCBt c2csCisJCQkJCQkJUkVRVUVTVF9USU1FT1VULCAmZXJyKTsKKworCWRidXNfbWVzc2FnZV91bnJl Zihtc2cpOworCisJaWYgKHJlcGx5KSB7CisJCWRidXNfbWVzc2FnZV91bnJlZihyZXBseSk7CisJ CXJldHVybiBUUlVFOworCX0KKworCWlmIChkYnVzX2Vycm9yX2lzX3NldCgmZXJyKSkgeworCQll cnJvcigiRW5kcG9pbnQgcmVwbGllZCB3aXRoIGFuIGVycm9yOiAlcyIsIGVyci5uYW1lKTsKKwor CQlpZiAoZGJ1c19lcnJvcl9oYXNfbmFtZSgmZXJyLCBEQlVTX0VSUk9SX05PX1JFUExZKSkKKwkJ CW1lZGlhX2VuZHBvaW50X2NsZWFyX2NvbmZpZ3VyYXRpb24oZW5kcG9pbnQpOworCisJCWRidXNf ZXJyb3JfZnJlZSgmZXJyKTsKKwl9CisKKwlyZXR1cm4gRkFMU0U7Cit9CisKK2dib29sZWFuIG1l ZGlhX2VuZHBvaW50X3NlbGVjdF9jb25maWd1cmF0aW9uKHN0cnVjdCBtZWRpYV9lbmRwb2ludCAq ZW5kcG9pbnQsCisJCQkJCQl1aW50OF90ICpjYXBhYmlsaXRpZXMsCisJCQkJCQlzaXplX3QgbGVu Z3RoLAorCQkJCQkJbWVkaWFfZW5kcG9pbnRfY2JfdCBjYiwKKwkJCQkJCXZvaWQgKnVzZXJfZGF0 YSkKK3sKKwlEQnVzQ29ubmVjdGlvbiAqY29ubjsKKwlEQnVzTWVzc2FnZSAqbXNnOworCURCdXNN ZXNzYWdlSXRlciBpdGVyOworCisJaWYgKGVuZHBvaW50LT5yZXF1ZXN0ICE9IE5VTEwpCisJCXJl dHVybiBGQUxTRTsKKworCWNvbm4gPSBlbmRwb2ludC0+YWRhcHRlci0+Y29ubjsKKworCW1zZyA9 IGRidXNfbWVzc2FnZV9uZXdfbWV0aG9kX2NhbGwoZW5kcG9pbnQtPnNlbmRlciwgZW5kcG9pbnQt PnBhdGgsCisJCQkJCQlNRURJQV9FTkRQT0lOVF9JTlRFUkZBQ0UsCisJCQkJCQkiU2VsZWN0Q29u ZmlndXJhdGlvbiIpOworCWlmIChtc2cgPT0gTlVMTCkgeworCQllcnJvcigiQ291bGRuJ3QgYWxs b2NhdGUgRC1CdXMgbWVzc2FnZSIpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJZGJ1c19tZXNz YWdlX2l0ZXJfaW5pdF9hcHBlbmQobXNnLCAmaXRlcik7CisKKwlhcHBlbmRfYnl0ZV9hcnJheSgm aXRlciwgY2FwYWJpbGl0aWVzLCBsZW5ndGgpOworCisJcmV0dXJuIG1lZGlhX2VuZHBvaW50X2Fz eW5jX2NhbGwoY29ubiwgbXNnLCBlbmRwb2ludCwgY2IsIHVzZXJfZGF0YSk7Cit9CisKK3ZvaWQg bWVkaWFfZW5kcG9pbnRfY2xlYXJfY29uZmlndXJhdGlvbihzdHJ1Y3QgbWVkaWFfZW5kcG9pbnQg KmVuZHBvaW50KQoreworCURCdXNDb25uZWN0aW9uICpjb25uOworCURCdXNNZXNzYWdlICptc2c7 CisKKwlpZiAoZW5kcG9pbnQtPnRyYW5zcG9ydCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlpZiAo ZW5kcG9pbnQtPnJlcXVlc3QpIHsKKwkJZW5kcG9pbnRfcmVxdWVzdF9mcmVlKGVuZHBvaW50LT5y ZXF1ZXN0KTsKKwkJZW5kcG9pbnQtPnJlcXVlc3QgPSBOVUxMOworCX0KKworCWNvbm4gPSBlbmRw b2ludC0+YWRhcHRlci0+Y29ubjsKKworCW1lZGlhX3RyYW5zcG9ydF9yZW1vdmUoY29ubiwgZW5k cG9pbnQtPnRyYW5zcG9ydCk7CisJZW5kcG9pbnQtPnRyYW5zcG9ydCA9IE5VTEw7CisKKwltc2cg PSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9jYWxsKGVuZHBvaW50LT5zZW5kZXIsIGVuZHBvaW50 LT5wYXRoLAorCQkJCQkJTUVESUFfRU5EUE9JTlRfSU5URVJGQUNFLAorCQkJCQkJIkNsZWFyQ29u ZmlndXJhdGlvbiIpOworCWlmIChtc2cgPT0gTlVMTCkgeworCQllcnJvcigiQ291bGRuJ3QgYWxs b2NhdGUgRC1CdXMgbWVzc2FnZSIpOworCQlyZXR1cm47CisJfQorCisJZ19kYnVzX3NlbmRfbWVz c2FnZShjb25uLCBtc2cpOworfQpkaWZmIC0tZ2l0IGEvYXVkaW8vbWVkaWEuaCBiL2F1ZGlvL21l ZGlhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU0YTdkZQotLS0gL2Rl di9udWxsCisrKyBiL2F1ZGlvL21lZGlhLmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqCisgKiAg Qmx1ZVogLSBCbHVldG9vdGggcHJvdG9jb2wgc3RhY2sgZm9yIExpbnV4CisgKgorICogIENvcHly aWdodCAoQykgMjAwNi0yMDA3ICBOb2tpYSBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoQykg MjAwNC0yMDA5ICBNYXJjZWwgSG9sdG1hbm4gPG1hcmNlbEBob2x0bWFubi5vcmc+CisgKgorICoK KyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBu b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEg RnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAq CisgKi8KKworc3RydWN0IG1lZGlhX2VuZHBvaW50OworCit0eXBlZGVmIHZvaWQgKCptZWRpYV9l bmRwb2ludF9jYl90KSAoc3RydWN0IG1lZGlhX2VuZHBvaW50ICplbmRwb2ludCwKKwkJCQkJdm9p ZCAqcmV0LCBzaXplX3Qgc2l6ZSwgdm9pZCAqdXNlcl9kYXRhKTsKKworaW50IG1lZGlhX3JlZ2lz dGVyKERCdXNDb25uZWN0aW9uICpjb25uLCBjb25zdCBjaGFyICpwYXRoLCBjb25zdCBiZGFkZHJf dCAqc3JjKTsKK3ZvaWQgbWVkaWFfdW5yZWdpc3Rlcihjb25zdCBjaGFyICpwYXRoKTsKKworc2l6 ZV90IG1lZGlhX2VuZHBvaW50X2dldF9jYXBhYmlsaXRpZXMoc3RydWN0IG1lZGlhX2VuZHBvaW50 ICplbmRwb2ludCwKKwkJCQkJdWludDhfdCAqKmNhcGFiaWxpdGllcyk7CitnYm9vbGVhbiBtZWRp YV9lbmRwb2ludF9zZXRfY29uZmlndXJhdGlvbihzdHJ1Y3QgbWVkaWFfZW5kcG9pbnQgKmVuZHBv aW50LAorCQkJCQlzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXZpY2UsCisJCQkJCXVpbnQ4X3QgKmNv bmZpZ3VyYXRpb24sIHNpemVfdCBzaXplLAorCQkJCQltZWRpYV9lbmRwb2ludF9jYl90IGNiLAor CQkJCQl2b2lkICp1c2VyX2RhdGEpOworZ2Jvb2xlYW4gbWVkaWFfZW5kcG9pbnRfc2VsZWN0X2Nv bmZpZ3VyYXRpb24oc3RydWN0IG1lZGlhX2VuZHBvaW50ICplbmRwb2ludCwKKwkJCQkJCXVpbnQ4 X3QgKmNhcGFiaWxpdGllcywKKwkJCQkJCXNpemVfdCBsZW5ndGgsCisJCQkJCQltZWRpYV9lbmRw b2ludF9jYl90IGNiLAorCQkJCQkJdm9pZCAqdXNlcl9kYXRhKTsKK3ZvaWQgbWVkaWFfZW5kcG9p bnRfY2xlYXJfY29uZmlndXJhdGlvbihzdHJ1Y3QgbWVkaWFfZW5kcG9pbnQgKmVuZHBvaW50KTsK ZGlmZiAtLWdpdCBhL2F1ZGlvL3NpbmsuYyBiL2F1ZGlvL3NpbmsuYwppbmRleCAzYThlYjIzLi5k YzM5OTRlIDEwMDY0NAotLS0gYS9hdWRpby9zaW5rLmMKKysrIGIvYXVkaW8vc2luay5jCkBAIC00 MCw2ICs0MCw3IEBACiAKICNpbmNsdWRlICJkZXZpY2UuaCIKICNpbmNsdWRlICJhdmR0cC5oIgor I2luY2x1ZGUgIm1lZGlhLmgiCiAjaW5jbHVkZSAiYTJkcC5oIgogI2luY2x1ZGUgImVycm9yLmgi CiAjaW5jbHVkZSAic2luay5oIgpAQCAtMzQzLDE0NiArMzQ0LDI5IEBAIHN0YXRpYyB2b2lkIHN0 cmVhbV9zZXR1cF9jb21wbGV0ZShzdHJ1Y3QgYXZkdHAgKnNlc3Npb24sIHN0cnVjdCBhMmRwX3Nl cCAqc2VwLAogCX0KIH0KIAotc3RhdGljIHVpbnQ4X3QgZGVmYXVsdF9iaXRwb29sKHVpbnQ4X3Qg ZnJlcSwgdWludDhfdCBtb2RlKQorc3RhdGljIHZvaWQgc2VsZWN0X2NvbXBsZXRlKHN0cnVjdCBh dmR0cCAqc2Vzc2lvbiwgc3RydWN0IGEyZHBfc2VwICpzZXAsCisJCQlHU0xpc3QgKmNhcHMsIHZv aWQgKnVzZXJfZGF0YSkKIHsKLQlzd2l0Y2ggKGZyZXEpIHsKLQljYXNlIFNCQ19TQU1QTElOR19G UkVRXzE2MDAwOgotCWNhc2UgU0JDX1NBTVBMSU5HX0ZSRVFfMzIwMDA6Ci0JCXJldHVybiA1MzsK LQljYXNlIFNCQ19TQU1QTElOR19GUkVRXzQ0MTAwOgotCQlzd2l0Y2ggKG1vZGUpIHsKLQkJY2Fz ZSBTQkNfQ0hBTk5FTF9NT0RFX01PTk86Ci0JCWNhc2UgU0JDX0NIQU5ORUxfTU9ERV9EVUFMX0NI QU5ORUw6Ci0JCQlyZXR1cm4gMzE7Ci0JCWNhc2UgU0JDX0NIQU5ORUxfTU9ERV9TVEVSRU86Ci0J CWNhc2UgU0JDX0NIQU5ORUxfTU9ERV9KT0lOVF9TVEVSRU86Ci0JCQlyZXR1cm4gNTM7Ci0JCWRl ZmF1bHQ6Ci0JCQllcnJvcigiSW52YWxpZCBjaGFubmVsIG1vZGUgJXUiLCBtb2RlKTsKLQkJCXJl dHVybiA1MzsKLQkJfQotCWNhc2UgU0JDX1NBTVBMSU5HX0ZSRVFfNDgwMDA6Ci0JCXN3aXRjaCAo bW9kZSkgewotCQljYXNlIFNCQ19DSEFOTkVMX01PREVfTU9OTzoKLQkJY2FzZSBTQkNfQ0hBTk5F TF9NT0RFX0RVQUxfQ0hBTk5FTDoKLQkJCXJldHVybiAyOTsKLQkJY2FzZSBTQkNfQ0hBTk5FTF9N T0RFX1NURVJFTzoKLQkJY2FzZSBTQkNfQ0hBTk5FTF9NT0RFX0pPSU5UX1NURVJFTzoKLQkJCXJl dHVybiA1MTsKLQkJZGVmYXVsdDoKLQkJCWVycm9yKCJJbnZhbGlkIGNoYW5uZWwgbW9kZSAldSIs IG1vZGUpOwotCQkJcmV0dXJuIDUxOwotCQl9Ci0JZGVmYXVsdDoKLQkJZXJyb3IoIkludmFsaWQg c2FtcGxpbmcgZnJlcSAldSIsIGZyZXEpOwotCQlyZXR1cm4gNTM7Ci0JfQotfQotCi1zdGF0aWMg Z2Jvb2xlYW4gc2VsZWN0X3NiY19wYXJhbXMoc3RydWN0IHNiY19jb2RlY19jYXAgKmNhcCwKLQkJ CQkJc3RydWN0IHNiY19jb2RlY19jYXAgKnN1cHBvcnRlZCkKLXsKLQl1bnNpZ25lZCBpbnQgbWF4 X2JpdHBvb2wsIG1pbl9iaXRwb29sOwotCi0JbWVtc2V0KGNhcCwgMCwgc2l6ZW9mKHN0cnVjdCBz YmNfY29kZWNfY2FwKSk7Ci0KLQljYXAtPmNhcC5tZWRpYV90eXBlID0gQVZEVFBfTUVESUFfVFlQ RV9BVURJTzsKLQljYXAtPmNhcC5tZWRpYV9jb2RlY190eXBlID0gQTJEUF9DT0RFQ19TQkM7Ci0K LQlpZiAoc3VwcG9ydGVkLT5mcmVxdWVuY3kgJiBTQkNfU0FNUExJTkdfRlJFUV80NDEwMCkKLQkJ Y2FwLT5mcmVxdWVuY3kgPSBTQkNfU0FNUExJTkdfRlJFUV80NDEwMDsKLQllbHNlIGlmIChzdXBw b3J0ZWQtPmZyZXF1ZW5jeSAmIFNCQ19TQU1QTElOR19GUkVRXzQ4MDAwKQotCQljYXAtPmZyZXF1 ZW5jeSA9IFNCQ19TQU1QTElOR19GUkVRXzQ4MDAwOwotCWVsc2UgaWYgKHN1cHBvcnRlZC0+ZnJl cXVlbmN5ICYgU0JDX1NBTVBMSU5HX0ZSRVFfMzIwMDApCi0JCWNhcC0+ZnJlcXVlbmN5ID0gU0JD X1NBTVBMSU5HX0ZSRVFfMzIwMDA7Ci0JZWxzZSBpZiAoc3VwcG9ydGVkLT5mcmVxdWVuY3kgJiBT QkNfU0FNUExJTkdfRlJFUV8xNjAwMCkKLQkJY2FwLT5mcmVxdWVuY3kgPSBTQkNfU0FNUExJTkdf RlJFUV8xNjAwMDsKLQllbHNlIHsKLQkJZXJyb3IoIk5vIHN1cHBvcnRlZCBmcmVxdWVuY2llcyIp OwotCQlyZXR1cm4gRkFMU0U7Ci0JfQotCi0JaWYgKHN1cHBvcnRlZC0+Y2hhbm5lbF9tb2RlICYg U0JDX0NIQU5ORUxfTU9ERV9KT0lOVF9TVEVSRU8pCi0JCWNhcC0+Y2hhbm5lbF9tb2RlID0gU0JD X0NIQU5ORUxfTU9ERV9KT0lOVF9TVEVSRU87Ci0JZWxzZSBpZiAoc3VwcG9ydGVkLT5jaGFubmVs X21vZGUgJiBTQkNfQ0hBTk5FTF9NT0RFX1NURVJFTykKLQkJY2FwLT5jaGFubmVsX21vZGUgPSBT QkNfQ0hBTk5FTF9NT0RFX1NURVJFTzsKLQllbHNlIGlmIChzdXBwb3J0ZWQtPmNoYW5uZWxfbW9k ZSAmIFNCQ19DSEFOTkVMX01PREVfRFVBTF9DSEFOTkVMKQotCQljYXAtPmNoYW5uZWxfbW9kZSA9 IFNCQ19DSEFOTkVMX01PREVfRFVBTF9DSEFOTkVMOwotCWVsc2UgaWYgKHN1cHBvcnRlZC0+Y2hh bm5lbF9tb2RlICYgU0JDX0NIQU5ORUxfTU9ERV9NT05PKQotCQljYXAtPmNoYW5uZWxfbW9kZSA9 IFNCQ19DSEFOTkVMX01PREVfTU9OTzsKLQllbHNlIHsKLQkJZXJyb3IoIk5vIHN1cHBvcnRlZCBj aGFubmVsIG1vZGVzIik7Ci0JCXJldHVybiBGQUxTRTsKLQl9Ci0KLQlpZiAoc3VwcG9ydGVkLT5i bG9ja19sZW5ndGggJiBTQkNfQkxPQ0tfTEVOR1RIXzE2KQotCQljYXAtPmJsb2NrX2xlbmd0aCA9 IFNCQ19CTE9DS19MRU5HVEhfMTY7Ci0JZWxzZSBpZiAoc3VwcG9ydGVkLT5ibG9ja19sZW5ndGgg JiBTQkNfQkxPQ0tfTEVOR1RIXzEyKQotCQljYXAtPmJsb2NrX2xlbmd0aCA9IFNCQ19CTE9DS19M RU5HVEhfMTI7Ci0JZWxzZSBpZiAoc3VwcG9ydGVkLT5ibG9ja19sZW5ndGggJiBTQkNfQkxPQ0tf TEVOR1RIXzgpCi0JCWNhcC0+YmxvY2tfbGVuZ3RoID0gU0JDX0JMT0NLX0xFTkdUSF84OwotCWVs c2UgaWYgKHN1cHBvcnRlZC0+YmxvY2tfbGVuZ3RoICYgU0JDX0JMT0NLX0xFTkdUSF80KQotCQlj YXAtPmJsb2NrX2xlbmd0aCA9IFNCQ19CTE9DS19MRU5HVEhfNDsKLQllbHNlIHsKLQkJZXJyb3Io Ik5vIHN1cHBvcnRlZCBibG9jayBsZW5ndGhzIik7Ci0JCXJldHVybiBGQUxTRTsKLQl9Ci0KLQlp ZiAoc3VwcG9ydGVkLT5zdWJiYW5kcyAmIFNCQ19TVUJCQU5EU184KQotCQljYXAtPnN1YmJhbmRz ID0gU0JDX1NVQkJBTkRTXzg7Ci0JZWxzZSBpZiAoc3VwcG9ydGVkLT5zdWJiYW5kcyAmIFNCQ19T VUJCQU5EU180KQotCQljYXAtPnN1YmJhbmRzID0gU0JDX1NVQkJBTkRTXzQ7Ci0JZWxzZSB7Ci0J CWVycm9yKCJObyBzdXBwb3J0ZWQgc3ViYmFuZHMiKTsKLQkJcmV0dXJuIEZBTFNFOwotCX0KLQot CWlmIChzdXBwb3J0ZWQtPmFsbG9jYXRpb25fbWV0aG9kICYgU0JDX0FMTE9DQVRJT05fTE9VRE5F U1MpCi0JCWNhcC0+YWxsb2NhdGlvbl9tZXRob2QgPSBTQkNfQUxMT0NBVElPTl9MT1VETkVTUzsK LQllbHNlIGlmIChzdXBwb3J0ZWQtPmFsbG9jYXRpb25fbWV0aG9kICYgU0JDX0FMTE9DQVRJT05f U05SKQotCQljYXAtPmFsbG9jYXRpb25fbWV0aG9kID0gU0JDX0FMTE9DQVRJT05fU05SOwotCi0J bWluX2JpdHBvb2wgPSBNQVgoTUlOX0JJVFBPT0wsIHN1cHBvcnRlZC0+bWluX2JpdHBvb2wpOwot CW1heF9iaXRwb29sID0gTUlOKGRlZmF1bHRfYml0cG9vbChjYXAtPmZyZXF1ZW5jeSwgY2FwLT5j aGFubmVsX21vZGUpLAotCQkJCQkJCXN1cHBvcnRlZC0+bWF4X2JpdHBvb2wpOwotCi0JY2FwLT5t aW5fYml0cG9vbCA9IG1pbl9iaXRwb29sOwotCWNhcC0+bWF4X2JpdHBvb2wgPSBtYXhfYml0cG9v bDsKLQotCXJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gc2VsZWN0X2NhcGFiaWxp dGllcyhzdHJ1Y3QgYXZkdHAgKnNlc3Npb24sCi0JCQkJCXN0cnVjdCBhdmR0cF9yZW1vdGVfc2Vw ICpyc2VwLAotCQkJCQlHU0xpc3QgKipjYXBzKQotewotCXN0cnVjdCBhdmR0cF9zZXJ2aWNlX2Nh cGFiaWxpdHkgKm1lZGlhX3RyYW5zcG9ydCwgKm1lZGlhX2NvZGVjOwotCXN0cnVjdCBzYmNfY29k ZWNfY2FwIHNiY19jYXA7Ci0KLQltZWRpYV9jb2RlYyA9IGF2ZHRwX2dldF9jb2RlYyhyc2VwKTsK LQlpZiAoIW1lZGlhX2NvZGVjKQotCQlyZXR1cm4gRkFMU0U7Ci0KLQlzZWxlY3Rfc2JjX3BhcmFt cygmc2JjX2NhcCwgKHN0cnVjdCBzYmNfY29kZWNfY2FwICopIG1lZGlhX2NvZGVjLT5kYXRhKTsK LQotCW1lZGlhX3RyYW5zcG9ydCA9IGF2ZHRwX3NlcnZpY2VfY2FwX25ldyhBVkRUUF9NRURJQV9U UkFOU1BPUlQsCi0JCQkJCQlOVUxMLCAwKTsKLQotCSpjYXBzID0gZ19zbGlzdF9hcHBlbmQoKmNh cHMsIG1lZGlhX3RyYW5zcG9ydCk7CisJc3RydWN0IHNpbmsgKnNpbmsgPSB1c2VyX2RhdGE7CisJ c3RydWN0IHBlbmRpbmdfcmVxdWVzdCAqcGVuZGluZzsKKwlpbnQgaWQ7CiAKLQltZWRpYV9jb2Rl YyA9IGF2ZHRwX3NlcnZpY2VfY2FwX25ldyhBVkRUUF9NRURJQV9DT0RFQywgJnNiY19jYXAsCi0J CQkJCQlzaXplb2Yoc2JjX2NhcCkpOworCXBlbmRpbmcgPSBzaW5rLT5jb25uZWN0OwogCi0JKmNh cHMgPSBnX3NsaXN0X2FwcGVuZCgqY2FwcywgbWVkaWFfY29kZWMpOworCWlkID0gYTJkcF9jb25m aWcoc2Vzc2lvbiwgc2VwLCBzdHJlYW1fc2V0dXBfY29tcGxldGUsIGNhcHMsIHNpbmspOworCWlm IChpZCA9PSAwKQorCQlnb3RvIGZhaWxlZDsKIAotCWlmIChhdmR0cF9nZXRfZGVsYXlfcmVwb3J0 aW5nKHJzZXApKSB7Ci0JCXN0cnVjdCBhdmR0cF9zZXJ2aWNlX2NhcGFiaWxpdHkgKmRlbGF5X3Jl cG9ydGluZzsKLQkJZGVsYXlfcmVwb3J0aW5nID0gYXZkdHBfc2VydmljZV9jYXBfbmV3KEFWRFRQ X0RFTEFZX1JFUE9SVElORywKLQkJCQkJCQkJTlVMTCwgMCk7Ci0JCSpjYXBzID0gZ19zbGlzdF9h cHBlbmQoKmNhcHMsIGRlbGF5X3JlcG9ydGluZyk7Ci0JfQorCXBlbmRpbmctPmlkID0gaWQ7CisJ cmV0dXJuOwogCi0JcmV0dXJuIFRSVUU7CitmYWlsZWQ6CisJaWYgKHBlbmRpbmctPm1zZykKKwkJ ZXJyb3JfZmFpbGVkKHBlbmRpbmctPmNvbm4sIHBlbmRpbmctPm1zZywgIlN0cmVhbSBzZXR1cCBm YWlsZWQiKTsKKwlwZW5kaW5nX3JlcXVlc3RfZnJlZShzaW5rLT5kZXYsIHBlbmRpbmcpOworCXNp bmstPmNvbm5lY3QgPSBOVUxMOworCWF2ZHRwX3VucmVmKHNpbmstPnNlc3Npb24pOworCXNpbmst PnNlc3Npb24gPSBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBkaXNjb3ZlcnlfY29tcGxldGUoc3Ry dWN0IGF2ZHRwICpzZXNzaW9uLCBHU0xpc3QgKnNlcHMsIHN0cnVjdCBhdmR0cF9lcnJvciAqZXJy LApAQCAtNDkwLDEwICszNzQsNiBAQCBzdGF0aWMgdm9pZCBkaXNjb3ZlcnlfY29tcGxldGUoc3Ry dWN0IGF2ZHRwICpzZXNzaW9uLCBHU0xpc3QgKnNlcHMsIHN0cnVjdCBhdmR0cAogewogCXN0cnVj dCBzaW5rICpzaW5rID0gdXNlcl9kYXRhOwogCXN0cnVjdCBwZW5kaW5nX3JlcXVlc3QgKnBlbmRp bmc7Ci0Jc3RydWN0IGF2ZHRwX2xvY2FsX3NlcCAqbHNlcDsKLQlzdHJ1Y3QgYXZkdHBfcmVtb3Rl X3NlcCAqcnNlcDsKLQlzdHJ1Y3QgYTJkcF9zZXAgKnNlcDsKLQlHU0xpc3QgKmNhcHMgPSBOVUxM OwogCWludCBpZDsKIAogCXBlbmRpbmcgPSBzaW5rLT5jb25uZWN0OwpAQCAtNTE1LDI0ICszOTUs OCBAQCBzdGF0aWMgdm9pZCBkaXNjb3ZlcnlfY29tcGxldGUoc3RydWN0IGF2ZHRwICpzZXNzaW9u LCBHU0xpc3QgKnNlcHMsIHN0cnVjdCBhdmR0cAogCiAJZGVidWcoIkRpc2NvdmVyeSBjb21wbGV0 ZSIpOwogCi0JaWYgKGF2ZHRwX2dldF9zZXBzKHNlc3Npb24sIEFWRFRQX1NFUF9UWVBFX1NJTkss IEFWRFRQX01FRElBX1RZUEVfQVVESU8sCi0JCQkJQTJEUF9DT0RFQ19TQkMsICZsc2VwLCAmcnNl cCkgPCAwKSB7Ci0JCWVycm9yKCJObyBtYXRjaGluZyBBQ1AgYW5kIElOVCBTRVBzIGZvdW5kIik7 Ci0JCWdvdG8gZmFpbGVkOwotCX0KLQotCWlmICghc2VsZWN0X2NhcGFiaWxpdGllcyhzZXNzaW9u LCByc2VwLCAmY2FwcykpIHsKLQkJZXJyb3IoIlVuYWJsZSB0byBzZWxlY3QgcmVtb3RlIFNFUCBj YXBhYmlsaXRpZXMiKTsKLQkJZ290byBmYWlsZWQ7Ci0JfQotCi0Jc2VwID0gYTJkcF9nZXQoc2Vz c2lvbiwgcnNlcCk7Ci0JaWYgKCFzZXApIHsKLQkJZXJyb3IoIlVuYWJsZSB0byBnZXQgYSBsb2Nh bCBzb3VyY2UgU0VQIik7Ci0JCWdvdG8gZmFpbGVkOwotCX0KLQotCWlkID0gYTJkcF9jb25maWco c2luay0+c2Vzc2lvbiwgc2VwLCBzdHJlYW1fc2V0dXBfY29tcGxldGUsIGNhcHMsIHNpbmspOwor CWlkID0gYTJkcF9zZWxlY3RfY2FwYWJpbGl0aWVzKHNpbmstPnNlc3Npb24sIEFWRFRQX1NFUF9U WVBFX1NJTkssIE5VTEwsCisJCQkJCQlzZWxlY3RfY29tcGxldGUsIHNpbmspOwogCWlmIChpZCA9 PSAwKQogCQlnb3RvIGZhaWxlZDsKIApkaWZmIC0tZ2l0IGEvYXVkaW8vc291cmNlLmMgYi9hdWRp by9zb3VyY2UuYwppbmRleCAxNTMwYzM0Li5kOWY2MmY0IDEwMDY0NAotLS0gYS9hdWRpby9zb3Vy Y2UuYworKysgYi9hdWRpby9zb3VyY2UuYwpAQCAtNDEsNiArNDEsNyBAQAogCiAjaW5jbHVkZSAi ZGV2aWNlLmgiCiAjaW5jbHVkZSAiYXZkdHAuaCIKKyNpbmNsdWRlICJtZWRpYS5oIgogI2luY2x1 ZGUgImEyZHAuaCIKICNpbmNsdWRlICJlcnJvci5oIgogI2luY2x1ZGUgInNvdXJjZS5oIgpAQCAt MzEwLDE0MCArMzExLDM0IEBAIHN0YXRpYyB2b2lkIHN0cmVhbV9zZXR1cF9jb21wbGV0ZShzdHJ1 Y3QgYXZkdHAgKnNlc3Npb24sIHN0cnVjdCBhMmRwX3NlcCAqc2VwLAogCX0KIH0KIAotc3RhdGlj IHVpbnQ4X3QgZGVmYXVsdF9iaXRwb29sKHVpbnQ4X3QgZnJlcSwgdWludDhfdCBtb2RlKQorc3Rh dGljIHZvaWQgc2VsZWN0X2NvbXBsZXRlKHN0cnVjdCBhdmR0cCAqc2Vzc2lvbiwgc3RydWN0IGEy ZHBfc2VwICpzZXAsCisJCQlHU0xpc3QgKmNhcHMsIHZvaWQgKnVzZXJfZGF0YSkKIHsKLQlzd2l0 Y2ggKGZyZXEpIHsKLQljYXNlIFNCQ19TQU1QTElOR19GUkVRXzE2MDAwOgotCWNhc2UgU0JDX1NB TVBMSU5HX0ZSRVFfMzIwMDA6Ci0JCXJldHVybiA1MzsKLQljYXNlIFNCQ19TQU1QTElOR19GUkVR XzQ0MTAwOgotCQlzd2l0Y2ggKG1vZGUpIHsKLQkJY2FzZSBTQkNfQ0hBTk5FTF9NT0RFX01PTk86 Ci0JCWNhc2UgU0JDX0NIQU5ORUxfTU9ERV9EVUFMX0NIQU5ORUw6Ci0JCQlyZXR1cm4gMzE7Ci0J CWNhc2UgU0JDX0NIQU5ORUxfTU9ERV9TVEVSRU86Ci0JCWNhc2UgU0JDX0NIQU5ORUxfTU9ERV9K T0lOVF9TVEVSRU86Ci0JCQlyZXR1cm4gNTM7Ci0JCWRlZmF1bHQ6Ci0JCQllcnJvcigiSW52YWxp ZCBjaGFubmVsIG1vZGUgJXUiLCBtb2RlKTsKLQkJCXJldHVybiA1MzsKLQkJfQotCWNhc2UgU0JD X1NBTVBMSU5HX0ZSRVFfNDgwMDA6Ci0JCXN3aXRjaCAobW9kZSkgewotCQljYXNlIFNCQ19DSEFO TkVMX01PREVfTU9OTzoKLQkJY2FzZSBTQkNfQ0hBTk5FTF9NT0RFX0RVQUxfQ0hBTk5FTDoKLQkJ CXJldHVybiAyOTsKLQkJY2FzZSBTQkNfQ0hBTk5FTF9NT0RFX1NURVJFTzoKLQkJY2FzZSBTQkNf Q0hBTk5FTF9NT0RFX0pPSU5UX1NURVJFTzoKLQkJCXJldHVybiA1MTsKLQkJZGVmYXVsdDoKLQkJ CWVycm9yKCJJbnZhbGlkIGNoYW5uZWwgbW9kZSAldSIsIG1vZGUpOwotCQkJcmV0dXJuIDUxOwot CQl9Ci0JZGVmYXVsdDoKLQkJZXJyb3IoIkludmFsaWQgc2FtcGxpbmcgZnJlcSAldSIsIGZyZXEp OwotCQlyZXR1cm4gNTM7Ci0JfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gc2VsZWN0X3NiY19wYXJh bXMoc3RydWN0IHNiY19jb2RlY19jYXAgKmNhcCwKLQkJCQkJc3RydWN0IHNiY19jb2RlY19jYXAg KnN1cHBvcnRlZCkKLXsKLQl1bnNpZ25lZCBpbnQgbWF4X2JpdHBvb2wsIG1pbl9iaXRwb29sOwot Ci0JbWVtc2V0KGNhcCwgMCwgc2l6ZW9mKHN0cnVjdCBzYmNfY29kZWNfY2FwKSk7Ci0KLQljYXAt PmNhcC5tZWRpYV90eXBlID0gQVZEVFBfTUVESUFfVFlQRV9BVURJTzsKLQljYXAtPmNhcC5tZWRp YV9jb2RlY190eXBlID0gQTJEUF9DT0RFQ19TQkM7Ci0KLQlpZiAoc3VwcG9ydGVkLT5mcmVxdWVu Y3kgJiBTQkNfU0FNUExJTkdfRlJFUV80NDEwMCkKLQkJY2FwLT5mcmVxdWVuY3kgPSBTQkNfU0FN UExJTkdfRlJFUV80NDEwMDsKLQllbHNlIGlmIChzdXBwb3J0ZWQtPmZyZXF1ZW5jeSAmIFNCQ19T QU1QTElOR19GUkVRXzQ4MDAwKQotCQljYXAtPmZyZXF1ZW5jeSA9IFNCQ19TQU1QTElOR19GUkVR XzQ4MDAwOwotCWVsc2UgaWYgKHN1cHBvcnRlZC0+ZnJlcXVlbmN5ICYgU0JDX1NBTVBMSU5HX0ZS RVFfMzIwMDApCi0JCWNhcC0+ZnJlcXVlbmN5ID0gU0JDX1NBTVBMSU5HX0ZSRVFfMzIwMDA7Ci0J ZWxzZSBpZiAoc3VwcG9ydGVkLT5mcmVxdWVuY3kgJiBTQkNfU0FNUExJTkdfRlJFUV8xNjAwMCkK LQkJY2FwLT5mcmVxdWVuY3kgPSBTQkNfU0FNUExJTkdfRlJFUV8xNjAwMDsKLQllbHNlIHsKLQkJ ZXJyb3IoIk5vIHN1cHBvcnRlZCBmcmVxdWVuY2llcyIpOwotCQlyZXR1cm4gRkFMU0U7Ci0JfQot Ci0JaWYgKHN1cHBvcnRlZC0+Y2hhbm5lbF9tb2RlICYgU0JDX0NIQU5ORUxfTU9ERV9KT0lOVF9T VEVSRU8pCi0JCWNhcC0+Y2hhbm5lbF9tb2RlID0gU0JDX0NIQU5ORUxfTU9ERV9KT0lOVF9TVEVS RU87Ci0JZWxzZSBpZiAoc3VwcG9ydGVkLT5jaGFubmVsX21vZGUgJiBTQkNfQ0hBTk5FTF9NT0RF X1NURVJFTykKLQkJY2FwLT5jaGFubmVsX21vZGUgPSBTQkNfQ0hBTk5FTF9NT0RFX1NURVJFTzsK LQllbHNlIGlmIChzdXBwb3J0ZWQtPmNoYW5uZWxfbW9kZSAmIFNCQ19DSEFOTkVMX01PREVfRFVB TF9DSEFOTkVMKQotCQljYXAtPmNoYW5uZWxfbW9kZSA9IFNCQ19DSEFOTkVMX01PREVfRFVBTF9D SEFOTkVMOwotCWVsc2UgaWYgKHN1cHBvcnRlZC0+Y2hhbm5lbF9tb2RlICYgU0JDX0NIQU5ORUxf TU9ERV9NT05PKQotCQljYXAtPmNoYW5uZWxfbW9kZSA9IFNCQ19DSEFOTkVMX01PREVfTU9OTzsK LQllbHNlIHsKLQkJZXJyb3IoIk5vIHN1cHBvcnRlZCBjaGFubmVsIG1vZGVzIik7Ci0JCXJldHVy biBGQUxTRTsKLQl9Ci0KLQlpZiAoc3VwcG9ydGVkLT5ibG9ja19sZW5ndGggJiBTQkNfQkxPQ0tf TEVOR1RIXzE2KQotCQljYXAtPmJsb2NrX2xlbmd0aCA9IFNCQ19CTE9DS19MRU5HVEhfMTY7Ci0J ZWxzZSBpZiAoc3VwcG9ydGVkLT5ibG9ja19sZW5ndGggJiBTQkNfQkxPQ0tfTEVOR1RIXzEyKQot CQljYXAtPmJsb2NrX2xlbmd0aCA9IFNCQ19CTE9DS19MRU5HVEhfMTI7Ci0JZWxzZSBpZiAoc3Vw cG9ydGVkLT5ibG9ja19sZW5ndGggJiBTQkNfQkxPQ0tfTEVOR1RIXzgpCi0JCWNhcC0+YmxvY2tf bGVuZ3RoID0gU0JDX0JMT0NLX0xFTkdUSF84OwotCWVsc2UgaWYgKHN1cHBvcnRlZC0+YmxvY2tf bGVuZ3RoICYgU0JDX0JMT0NLX0xFTkdUSF80KQotCQljYXAtPmJsb2NrX2xlbmd0aCA9IFNCQ19C TE9DS19MRU5HVEhfNDsKLQllbHNlIHsKLQkJZXJyb3IoIk5vIHN1cHBvcnRlZCBibG9jayBsZW5n dGhzIik7Ci0JCXJldHVybiBGQUxTRTsKLQl9Ci0KLQlpZiAoc3VwcG9ydGVkLT5zdWJiYW5kcyAm IFNCQ19TVUJCQU5EU184KQotCQljYXAtPnN1YmJhbmRzID0gU0JDX1NVQkJBTkRTXzg7Ci0JZWxz ZSBpZiAoc3VwcG9ydGVkLT5zdWJiYW5kcyAmIFNCQ19TVUJCQU5EU180KQotCQljYXAtPnN1YmJh bmRzID0gU0JDX1NVQkJBTkRTXzQ7Ci0JZWxzZSB7Ci0JCWVycm9yKCJObyBzdXBwb3J0ZWQgc3Vi YmFuZHMiKTsKLQkJcmV0dXJuIEZBTFNFOwotCX0KLQotCWlmIChzdXBwb3J0ZWQtPmFsbG9jYXRp b25fbWV0aG9kICYgU0JDX0FMTE9DQVRJT05fTE9VRE5FU1MpCi0JCWNhcC0+YWxsb2NhdGlvbl9t ZXRob2QgPSBTQkNfQUxMT0NBVElPTl9MT1VETkVTUzsKLQllbHNlIGlmIChzdXBwb3J0ZWQtPmFs bG9jYXRpb25fbWV0aG9kICYgU0JDX0FMTE9DQVRJT05fU05SKQotCQljYXAtPmFsbG9jYXRpb25f bWV0aG9kID0gU0JDX0FMTE9DQVRJT05fU05SOwotCi0JbWluX2JpdHBvb2wgPSBNQVgoTUlOX0JJ VFBPT0wsIHN1cHBvcnRlZC0+bWluX2JpdHBvb2wpOwotCW1heF9iaXRwb29sID0gTUlOKGRlZmF1 bHRfYml0cG9vbChjYXAtPmZyZXF1ZW5jeSwgY2FwLT5jaGFubmVsX21vZGUpLAotCQkJCQkJCXN1 cHBvcnRlZC0+bWF4X2JpdHBvb2wpOwotCi0JY2FwLT5taW5fYml0cG9vbCA9IG1pbl9iaXRwb29s OwotCWNhcC0+bWF4X2JpdHBvb2wgPSBtYXhfYml0cG9vbDsKLQotCXJldHVybiBUUlVFOwotfQot Ci1zdGF0aWMgZ2Jvb2xlYW4gc2VsZWN0X2NhcGFiaWxpdGllcyhzdHJ1Y3QgYXZkdHAgKnNlc3Np b24sCi0JCQkJCXN0cnVjdCBhdmR0cF9yZW1vdGVfc2VwICpyc2VwLAotCQkJCQlHU0xpc3QgKipj YXBzKQotewotCXN0cnVjdCBhdmR0cF9zZXJ2aWNlX2NhcGFiaWxpdHkgKm1lZGlhX3RyYW5zcG9y dCwgKm1lZGlhX2NvZGVjOwotCXN0cnVjdCBzYmNfY29kZWNfY2FwIHNiY19jYXA7Ci0KLQltZWRp YV9jb2RlYyA9IGF2ZHRwX2dldF9jb2RlYyhyc2VwKTsKLQlpZiAoIW1lZGlhX2NvZGVjKQotCQly ZXR1cm4gRkFMU0U7Ci0KLQlzZWxlY3Rfc2JjX3BhcmFtcygmc2JjX2NhcCwgKHN0cnVjdCBzYmNf Y29kZWNfY2FwICopIG1lZGlhX2NvZGVjLT5kYXRhKTsKKwlzdHJ1Y3Qgc291cmNlICpzb3VyY2Ug PSB1c2VyX2RhdGE7CisJc3RydWN0IHBlbmRpbmdfcmVxdWVzdCAqcGVuZGluZzsKKwlpbnQgaWQ7 CiAKLQltZWRpYV90cmFuc3BvcnQgPSBhdmR0cF9zZXJ2aWNlX2NhcF9uZXcoQVZEVFBfTUVESUFf VFJBTlNQT1JULAotCQkJCQkJTlVMTCwgMCk7CisJcGVuZGluZyA9IHNvdXJjZS0+Y29ubmVjdDsK IAotCSpjYXBzID0gZ19zbGlzdF9hcHBlbmQoKmNhcHMsIG1lZGlhX3RyYW5zcG9ydCk7CisJcGVu ZGluZy0+aWQgPSAwOwogCi0JbWVkaWFfY29kZWMgPSBhdmR0cF9zZXJ2aWNlX2NhcF9uZXcoQVZE VFBfTUVESUFfQ09ERUMsICZzYmNfY2FwLAotCQkJCQkJc2l6ZW9mKHNiY19jYXApKTsKKwlpZiAo Y2FwcyA9PSBOVUxMKQorCQlnb3RvIGZhaWxlZDsKIAotCSpjYXBzID0gZ19zbGlzdF9hcHBlbmQo KmNhcHMsIG1lZGlhX2NvZGVjKTsKKwlpZCA9IGEyZHBfY29uZmlnKHNlc3Npb24sIHNlcCwgc3Ry ZWFtX3NldHVwX2NvbXBsZXRlLCBjYXBzLCBzb3VyY2UpOworCWlmIChpZCA9PSAwKQorCQlnb3Rv IGZhaWxlZDsKIAorCXBlbmRpbmctPmlkID0gaWQ7CisJcmV0dXJuOwogCi0JcmV0dXJuIFRSVUU7 CitmYWlsZWQ6CisJaWYgKHBlbmRpbmctPm1zZykKKwkJZXJyb3JfZmFpbGVkKHBlbmRpbmctPmNv bm4sIHBlbmRpbmctPm1zZywgIlN0cmVhbSBzZXR1cCBmYWlsZWQiKTsKKwlwZW5kaW5nX3JlcXVl c3RfZnJlZShzb3VyY2UtPmRldiwgcGVuZGluZyk7CisJc291cmNlLT5jb25uZWN0ID0gTlVMTDsK KwlhdmR0cF91bnJlZihzb3VyY2UtPnNlc3Npb24pOworCXNvdXJjZS0+c2Vzc2lvbiA9IE5VTEw7 CiB9CiAKIHN0YXRpYyB2b2lkIGRpc2NvdmVyeV9jb21wbGV0ZShzdHJ1Y3QgYXZkdHAgKnNlc3Np b24sIEdTTGlzdCAqc2Vwcywgc3RydWN0IGF2ZHRwX2Vycm9yICplcnIsCkBAIC00NTEsMTAgKzM0 Niw2IEBAIHN0YXRpYyB2b2lkIGRpc2NvdmVyeV9jb21wbGV0ZShzdHJ1Y3QgYXZkdHAgKnNlc3Np b24sIEdTTGlzdCAqc2Vwcywgc3RydWN0IGF2ZHRwCiB7CiAJc3RydWN0IHNvdXJjZSAqc291cmNl ID0gdXNlcl9kYXRhOwogCXN0cnVjdCBwZW5kaW5nX3JlcXVlc3QgKnBlbmRpbmc7Ci0Jc3RydWN0 IGF2ZHRwX2xvY2FsX3NlcCAqbHNlcDsKLQlzdHJ1Y3QgYXZkdHBfcmVtb3RlX3NlcCAqcnNlcDsK LQlzdHJ1Y3QgYTJkcF9zZXAgKnNlcDsKLQlHU0xpc3QgKmNhcHMgPSBOVUxMOwogCWludCBpZDsK IAogCXBlbmRpbmcgPSBzb3VyY2UtPmNvbm5lY3Q7CkBAIC00NzYsMjUgKzM2Nyw4IEBAIHN0YXRp YyB2b2lkIGRpc2NvdmVyeV9jb21wbGV0ZShzdHJ1Y3QgYXZkdHAgKnNlc3Npb24sIEdTTGlzdCAq c2Vwcywgc3RydWN0IGF2ZHRwCiAKIAlkZWJ1ZygiRGlzY292ZXJ5IGNvbXBsZXRlIik7CiAKLQlp ZiAoYXZkdHBfZ2V0X3NlcHMoc2Vzc2lvbiwgQVZEVFBfU0VQX1RZUEVfU09VUkNFLCBBVkRUUF9N RURJQV9UWVBFX0FVRElPLAotCQkJCUEyRFBfQ09ERUNfU0JDLCAmbHNlcCwgJnJzZXApIDwgMCkg ewotCQllcnJvcigiTm8gbWF0Y2hpbmcgQUNQIGFuZCBJTlQgU0VQcyBmb3VuZCIpOwotCQlnb3Rv IGZhaWxlZDsKLQl9Ci0KLQlpZiAoIXNlbGVjdF9jYXBhYmlsaXRpZXMoc2Vzc2lvbiwgcnNlcCwg JmNhcHMpKSB7Ci0JCWVycm9yKCJVbmFibGUgdG8gc2VsZWN0IHJlbW90ZSBTRVAgY2FwYWJpbGl0 aWVzIik7Ci0JCWdvdG8gZmFpbGVkOwotCX0KLQotCXNlcCA9IGEyZHBfZ2V0KHNlc3Npb24sIHJz ZXApOwotCWlmICghc2VwKSB7Ci0JCWVycm9yKCJVbmFibGUgdG8gZ2V0IGEgbG9jYWwgc2luayBT RVAiKTsKLQkJZ290byBmYWlsZWQ7Ci0JfQotCi0JaWQgPSBhMmRwX2NvbmZpZyhzb3VyY2UtPnNl c3Npb24sIHNlcCwgc3RyZWFtX3NldHVwX2NvbXBsZXRlLCBjYXBzLAotCQkJCXNvdXJjZSk7CisJ aWQgPSBhMmRwX3NlbGVjdF9jYXBhYmlsaXRpZXMoc291cmNlLT5zZXNzaW9uLCBBVkRUUF9TRVBf VFlQRV9TT1VSQ0UsIE5VTEwsCisJCQkJCQlzZWxlY3RfY29tcGxldGUsIHNvdXJjZSk7CiAJaWYg KGlkID09IDApCiAJCWdvdG8gZmFpbGVkOwogCmRpZmYgLS1naXQgYS9hdWRpby91bml4LmMgYi9h dWRpby91bml4LmMKaW5kZXggNWNmNGY5NC4uNDExM2E1NiAxMDA2NDQKLS0tIGEvYXVkaW8vdW5p eC5jCisrKyBiL2F1ZGlvL3VuaXguYwpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgImRldmlj ZS5oIgogI2luY2x1ZGUgIm1hbmFnZXIuaCIKICNpbmNsdWRlICJhdmR0cC5oIgorI2luY2x1ZGUg Im1lZGlhLmgiCiAjaW5jbHVkZSAiYTJkcC5oIgogI2luY2x1ZGUgImhlYWRzZXQuaCIKICNpbmNs dWRlICJzaW5rLmgiCi0tIAoxLjYuMy4zCgo= --0016e6d9a0e806c3bf047e39da91--