From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Kk7XV-0007OR-Gf for qemu-devel@nongnu.org; Sun, 28 Sep 2008 21:27:05 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1Kk7XU-0007OF-2M for qemu-devel@nongnu.org; Sun, 28 Sep 2008 21:27:04 -0400 Received: from [199.232.76.173] (port=32889 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Kk7XT-0007OC-TM for qemu-devel@nongnu.org; Sun, 28 Sep 2008 21:27:03 -0400 Received: from rv-out-0708.google.com ([209.85.198.240]:25444) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1Kk7XT-00039h-Fb for qemu-devel@nongnu.org; Sun, 28 Sep 2008 21:27:03 -0400 Received: by rv-out-0708.google.com with SMTP id f25so1641592rvb.22 for ; Sun, 28 Sep 2008 18:27:02 -0700 (PDT) Message-ID: Date: Mon, 29 Sep 2008 03:27:02 +0200 From: "andrzej zaborowski" MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_41199_9234861.1222651622213" Subject: [Qemu-devel] Bluetooth options Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel mailing list ------=_Part_41199_9234861.1222651622213 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Content-Disposition: inline Hi, I added code to emulate various bluetooth hardware but I didn't add any user interface to set it up or tweak. The attached patch adds command line switches for doind that but it's not very pretty, any suggestions to change it will be appreciated. There are three switches: -bt xxx tells qemu how to emulate a given HCI. A HCI is made of two parts, the transport layer (serial or USB) through which the host issues HCI commands, and the HCI logic that does something with the commands. The transport layer is determined by the emulated machine, for example a machine might have two serial dongles in it, then the first -bt switch will relate to the dongle on the first serial port and the second -bt to the other dongle. 'xxx' can be three things: -bt null simply ignores any commands, i.e. never gives any response. -bt hci[,vlan=N] emulates a virtual HCI more or less according to the specification. Using -bt hci,vlan=N adds the HCI to scatternet N (default 0) or creates a new scatternet, which is similar to a qemu ethernet vlan in that any two devices in the same vlan can connect to each other. -bt host[:ID] connects to the host's dongle named ID (defaults to 'hci0') and proxies any commands to this dongle. This has some limitations under Linux and is not very reliable. -vhci N emulates a vireual HCI (like -bt hci) that is not connected to any guest transport and instead opens /dev/vhci to create what appears as a new dongle to the host bluetooth stack. It will be connected to the qemu vlan N. -btdevice dev[,vlan=N] adds a bluetooth device 'dev' to scatternet N (default 0), similarly to -usbdevice. The only supported value for 'dev' is 'keyboard' which is like a usb HID keyboard. It doesn't support authentication (which I think, in case of a keyboard makes it out-of-spec) but that's easy to implement. A usb dongle can be added with -usbdevice bt or -usbdevice:xxx where xxx is same as in -bt xxx (defaults to 'hci,vlan=0'). Monitor usb_add should also work. It specifies both a transport layer (USB) and the HCI logic, so no -bt switch is needed. -bt is only useful for machines with a built-in transciever like the n800/n810. Regards ------=_Part_41199_9234861.1222651622213 Content-Type: text/x-patch; name=0001-Add-commandline-options-to-make-use-of-bluetooth-.patch Content-Transfer-Encoding: base64 X-Attachment-Id: f_flodvuhn0 Content-Disposition: attachment; filename=0001-Add-commandline-options-to-make-use-of-bluetooth-.patch RnJvbSA4ZjEwZjVhNDUyNmY3NGNlYjZjOGE1NjQzY2EzNWU2MzMyOTcyNzlkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyemVqIFphYm9yb3dza2kgPGJhbHJvZ0B6YWJvci5vcmc+ CkRhdGU6IE1vbiwgMjkgU2VwIDIwMDggMDI6NDg6NTggKzAyMDAKU3ViamVjdDogW1BBVENIXSBB ZGQgY29tbWFuZGxpbmUgb3B0aW9ucyB0byBtYWtlIHVzZSBvZiBibHVldG9vdGggZmVhdHVyZXMs IGUuZyBhdHRhY2gKIGRldmljZXMuCgotLS0KIHZsLmMgfCAgMTY0ICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMSBmaWxl cyBjaGFuZ2VkLCAxNjQgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS92bC5jIGIvdmwuYwppbmRleCBiMTlhNjMxLi5jZjkxM2Y5IDEwMDY0NAotLS0gYS92bC5jCisr KyBiL3ZsLmMKQEAgLTU0MTQsNiArNTQxNCwxMDUgQEAgc3RydWN0IEhDSUluZm8gKnFlbXVfbmV4 dF9oY2kodm9pZCkKICAgICByZXR1cm4gaGNpX3RhYmxlW2N1cl9oY2krK107CiB9CiAKK3N0YXRp YyBzdHJ1Y3QgSENJSW5mbyAqaGNpX2luaXQoY29uc3QgY2hhciAqc3RyKQoreworICAgIGNoYXIg KmVuZHA7CisgICAgc3RydWN0IGJ0X3NjYXR0ZXJuZXRfcyAqdmxhbiA9IDA7CisKKyAgICBpZiAo IXN0cmNtcChzdHIsICJudWxsIikpCisgICAgICAgIC8qIGJ0IG51bGwgKi8KKyAgICAgICAgcmV0 dXJuICZudWxsX2hjaTsKKyAgICBlbHNlIGlmICghc3RybmNtcChzdHIsICJob3N0IiwgNCkgJiYg KHN0cls0XSA9PSAnXDAnIHx8IHN0cls0XSA9PSAnOicpKQorICAgICAgICAvKiBidCBob3N0Wzpo Y2lOXSAqLworICAgICAgICByZXR1cm4gYnRfaG9zdF9oY2koc3RyWzRdID8gc3RyICsgNSA6ICJo Y2kwIik7CisgICAgZWxzZSBpZiAoIXN0cm5jbXAoc3RyLCAiaGNpIiwgMykpIHsKKyAgICAgICAg LyogYnQgaGNpWyx2bGFuPW5dICovCisgICAgICAgIGlmIChzdHJbM10pIHsKKyAgICAgICAgICAg IGlmICghc3RybmNtcChzdHIgKyAzLCAiLHZsYW49IiwgNikpIHsKKyAgICAgICAgICAgICAgICB2 bGFuID0gcWVtdV9maW5kX2J0X3ZsYW4oc3RydG9sKHN0ciArIDksICZlbmRwLCAwKSk7CisgICAg ICAgICAgICAgICAgaWYgKCplbmRwKQorICAgICAgICAgICAgICAgICAgICB2bGFuID0gMDsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB2bGFuID0gcWVtdV9maW5k X2J0X3ZsYW4oMCk7CisgICAgICAgIGlmICh2bGFuKQorICAgICAgICAgICByZXR1cm4gYnRfbmV3 X2hjaSh2bGFuKTsKKyAgICB9CisKKyAgICBmcHJpbnRmKHN0ZGVyciwgInFlbXU6IFVua25vd24g Ymx1ZXRvb3RoIEhDSSBgJXMnLlxuIiwgc3RyKTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0 aWMgaW50IGJ0X2hjaV9wYXJzZShjb25zdCBjaGFyICpzdHIpCit7CisgICAgc3RydWN0IEhDSUlu Zm8gKmhjaTsKKyAgICBiZGFkZHJfdCBiZGFkZHI7CisKKyAgICBpZiAobmJfaGNpcyA+PSBNQVhf TklDUykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInFlbXU6IFRvbyBtYW55IGJsdWV0b290 aCBIQ0lzIChtYXggJWkpLlxuIiwgTUFYX05JQ1MpOworICAgICAgICByZXR1cm4gLTE7CisgICAg fQorCisgICAgaGNpID0gaGNpX2luaXQoc3RyKTsKKyAgICBpZiAoIWhjaSkKKyAgICAgICAgcmV0 dXJuIC0xOworCisgICAgYmRhZGRyLmJbMF0gPSAweDUyOworICAgIGJkYWRkci5iWzFdID0gMHg1 NDsKKyAgICBiZGFkZHIuYlsyXSA9IDB4MDA7CisgICAgYmRhZGRyLmJbM10gPSAweDEyOworICAg IGJkYWRkci5iWzRdID0gMHgzNDsKKyAgICBiZGFkZHIuYls1XSA9IDB4NTYgKyBuYl9oY2lzOwor ICAgIGhjaS0+YmRhZGRyX3NldChoY2ksIGJkYWRkci5iKTsKKworICAgIGhjaV90YWJsZVtuYl9o Y2lzKytdID0gaGNpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGJ0X3ZoY2lf YWRkKGludCB2bGFuX2lkKQoreworICAgIHN0cnVjdCBidF9zY2F0dGVybmV0X3MgKnZsYW4gPSBx ZW11X2ZpbmRfYnRfdmxhbih2bGFuX2lkKTsKKworICAgIGlmICghdmxhbi0+c2xhdmUpCisgICAg ICAgIGZwcmludGYoc3RkZXJyLCAicWVtdTogd2FybmluZzogYWRkaW5nIGEgVkhDSSB0byAiCisg ICAgICAgICAgICAgICAgICAgICAgICAiYW4gZW1wdHkgc2NhdHRlcm5ldCAlaVxuIiwgdmxhbl9p ZCk7CisKKyAgICBidF92aGNpX2luaXQoYnRfbmV3X2hjaSh2bGFuKSk7Cit9CisKK3N0YXRpYyBz dHJ1Y3QgYnRfZGV2aWNlX3MgKmJ0X2RldmljZV9hZGQoY29uc3QgY2hhciAqb3B0KQoreworICAg IHN0cnVjdCBidF9zY2F0dGVybmV0X3MgKnZsYW47CisgICAgaW50IHZsYW5faWQgPSAwOworICAg IGNoYXIgKmVuZHAgPSBzdHJjaHIob3B0LCAnOicpOworICAgIGludCBsZW4gPSAoZW5kcCA/IGVu ZHAgLSBvcHQgOiBzdHJsZW4ob3B0KSkgKyAxOworICAgIGNoYXIgZGV2bmFtZVsxMF07CisKKyAg ICBwc3RyY3B5KGRldm5hbWUsIE1JTihzaXplb2YoZGV2bmFtZSksIGxlbiksIG9wdCk7CisKKyAg ICBpZiAoZW5kcCkgeworICAgICAgICB2bGFuX2lkID0gc3RydG9sKGVuZHAgKyAxLCAmZW5kcCwg MCk7CisgICAgICAgIGlmICgqZW5kcCkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJx ZW11OiB1bnJlY29nbmlzZWQgYmx1ZXRvb3RoIHZsYW4gSWRcbiIpOworICAgICAgICAgICAgcmV0 dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2bGFuID0gcWVtdV9maW5kX2J0X3ZsYW4o dmxhbl9pZCk7CisKKyAgICBpZiAoIXZsYW4tPnNsYXZlKQorICAgICAgICBmcHJpbnRmKHN0ZGVy ciwgInFlbXU6IHdhcm5pbmc6IGFkZGluZyBhIHNsYXZlIGRldmljZSB0byAiCisgICAgICAgICAg ICAgICAgICAgICAgICAiYW4gZW1wdHkgc2NhdHRlcm5ldCAlaVxuIiwgdmxhbl9pZCk7CisKKyAg ICBpZiAoIXN0cmNtcChkZXZuYW1lLCAia2V5Ym9hcmQiKSkKKyAgICAgICAgcmV0dXJuIGJ0X2tl eWJvYXJkX2luaXQodmxhbik7CisKKyAgICBmcHJpbnRmKHN0ZGVyciwgInFlbXU6IHVuc3VwcG9y dGVkIGJsdWV0b290aCBkZXZpY2UgYCVzJ1xuIiwgb3B0KTsKKyAgICByZXR1cm4gMDsKK30KKwog LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLwogLyogUUVNVSBCbG9jayBkZXZpY2VzICovCiAKQEAgLTU4NjQsNiArNTk2Myw5IEBAIHN0 YXRpYyBpbnQgdXNiX2RldmljZV9hZGQoY29uc3QgY2hhciAqZGV2bmFtZSkKICAgICAgICAgICAg IHJldHVybiAtMTsKICAgICAgICAgbmRfdGFibGVbbmljXS5tb2RlbCA9ICJ1c2IiOwogICAgICAg ICBkZXYgPSB1c2JfbmV0X2luaXQoJm5kX3RhYmxlW25pY10pOworICAgIH0gZWxzZSBpZiAoIXN0 cmNtcChkZXZuYW1lLCAiYnQiKSB8fCBzdHJzdGFydChkZXZuYW1lLCAiYnQ6IiwgJnApKSB7Cisg ICAgICAgIGRldiA9IHVzYl9idF9pbml0KGRldm5hbWVbMl0gPyBoY2lfaW5pdChwKSA6CisgICAg ICAgICAgICAgICAgICAgICAgICBidF9uZXdfaGNpKHFlbXVfZmluZF9idF92bGFuKDApKSk7CiAg ICAgfSBlbHNlIHsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KQEAgLTc3OTEsNiArNzg5Mywx MyBAQCBzdGF0aWMgdm9pZCBoZWxwKGludCBleGl0Y29kZSkKICAgICAgICAgICAgIi1uZXQgbm9u ZSAgICAgICB1c2UgaXQgYWxvbmUgdG8gaGF2ZSB6ZXJvIG5ldHdvcmsgZGV2aWNlczsgaWYgbm8g LW5ldCBvcHRpb25cbiIKICAgICAgICAgICAgIiAgICAgICAgICAgICAgICBpcyBwcm92aWRlZCwg dGhlIGRlZmF1bHQgaXMgJy1uZXQgbmljIC1uZXQgdXNlcidcbiIKICAgICAgICAgICAgIlxuIgor ICAgICAgICAgICAiLWJ0IG51bGwgICAgICAgIER1bWIgYmx1ZXRvb3RoIEhDSSAtIGRvZXNuJ3Qg cmVzcG9uZCB0byBjb21tYW5kc1xuIgorICAgICAgICAgICAiLWJ0IGhvc3RbOmlkXSAgIFVzZSBo b3N0J3MgSENJIHdpdGggdGhlIGdpdmVuIG5hbWVcbiIKKyAgICAgICAgICAgIi1idCBoY2lbLHZs YW49bl1FbXVsYXRlIGEgc3RhbmRhcmQgSENJIGluIHZpcnR1YWwgc2NhdHRlcm5ldCAnbidcbiIK KyAgICAgICAgICAgIi12aGNpIG4gICAgICAgICBBZGQgaG9zdCBjb21wdXRlciB0byB2aXJ0dWFs IHNjYXR0ZXJuZXQgJ24nIHVzaW5nIFZIQ0lcbiIKKyAgICAgICAgICAgIi1idGRldmljZSBkZXZb LHZsYW49bl1cbiIKKyAgICAgICAgICAgIiAgICAgICAgICAgICAgICBFbXVsYXRlIGEgYmx1ZXRv b3RoIGRldmljZSAnZGV2JyBpbiBzY2F0dGVybmV0ICduJ1xuIgorICAgICAgICAgICAiXG4iCiAj aWZkZWYgQ09ORklHX1NMSVJQCiAgICAgICAgICAgICItdGZ0cCBkaXIgICAgICAgYWxsb3cgdGZ0 cCBhY2Nlc3MgdG8gZmlsZXMgaW4gZGlyIFstbmV0IHVzZXJdXG4iCiAgICAgICAgICAgICItYm9v dHAgZmlsZSAgICAgYWR2ZXJ0aXNlIGZpbGUgaW4gQk9PVFAgcmVwbGllc1xuIgpAQCAtNzg5OSw2 ICs4MDA4LDkgQEAgZW51bSB7CiAgICAgUUVNVV9PUFRJT05fYm9vdHAsCiAgICAgUUVNVV9PUFRJ T05fc21iLAogICAgIFFFTVVfT1BUSU9OX3JlZGlyLAorICAgIFFFTVVfT1BUSU9OX2J0LAorICAg IFFFTVVfT1BUSU9OX2J0ZGV2aWNlLAorICAgIFFFTVVfT1BUSU9OX3ZoY2ksCiAKICAgICBRRU1V X09QVElPTl9rZXJuZWwsCiAgICAgUUVNVV9PUFRJT05fYXBwZW5kLApAQCAtNzk5Niw2ICs4MTA4 LDkgQEAgY29uc3QgUUVNVU9wdGlvbiBxZW11X29wdGlvbnNbXSA9IHsKICNlbmRpZgogICAgIHsg InJlZGlyIiwgSEFTX0FSRywgUUVNVV9PUFRJT05fcmVkaXIgfSwKICNlbmRpZgorICAgIHsgImJ0 IiwgSEFTX0FSRywgUUVNVV9PUFRJT05fYnQgfSwKKyAgICB7ICJidGRldmljZSIsIEhBU19BUkcs IFFFTVVfT1BUSU9OX2J0ZGV2aWNlIH0sCisgICAgeyAidmhjaSIsIEhBU19BUkcsIFFFTVVfT1BU SU9OX3ZoY2kgfSwKIAogICAgIHsgImtlcm5lbCIsIEhBU19BUkcsIFFFTVVfT1BUSU9OX2tlcm5l bCB9LAogICAgIHsgImFwcGVuZCIsIEhBU19BUkcsIFFFTVVfT1BUSU9OX2FwcGVuZCB9LApAQCAt ODMzMyw2ICs4NDQ4LDEyIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKICAgICBp bnQgY3lscywgaGVhZHMsIHNlY3MsIHRyYW5zbGF0aW9uOwogICAgIGNvbnN0IGNoYXIgKm5ldF9j bGllbnRzW01BWF9ORVRfQ0xJRU5UU107CiAgICAgaW50IG5iX25ldF9jbGllbnRzOworICAgIGNv bnN0IGNoYXIgKmJ0X29wdHNbTUFYX05FVF9DTElFTlRTXTsKKyAgICBpbnQgbmJfYnRfb3B0czsK KyAgICBpbnQgdmhjaV9vcHRzW01BWF9ORVRfQ0xJRU5UU107CisgICAgaW50IG5iX3ZoY2lfb3B0 czsKKyAgICBjb25zdCBjaGFyICpidGRldmljZV9vcHRzW01BWF9ORVRfQ0xJRU5UU107CisgICAg aW50IG5iX2J0ZGV2aWNlX29wdHM7CiAgICAgaW50IGhkYV9pbmRleDsKICAgICBpbnQgb3B0aW5k OwogICAgIGNvbnN0IGNoYXIgKnIsICpvcHRhcmc7CkBAIC04NDE1LDYgKzg1MzYsOSBAQCBpbnQg bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAgICAgdXNiX2RldmljZXNfaW5kZXggPSAwOwog CiAgICAgbmJfbmV0X2NsaWVudHMgPSAwOworICAgIG5iX2J0X29wdHMgPSAwOworICAgIG5iX3Zo Y2lfb3B0cyA9IDA7CisgICAgbmJfYnRkZXZpY2Vfb3B0cyA9IDA7CiAgICAgbmJfZHJpdmVzID0g MDsKICAgICBuYl9kcml2ZXNfb3B0ID0gMDsKICAgICBoZGFfaW5kZXggPSAtMTsKQEAgLTg2NDks NiArODc3MywzNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAgICAgICAgICAg ICAgICAgbmV0X3NsaXJwX3JlZGlyKG9wdGFyZyk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAj ZW5kaWYKKyAgICAgICAgICAgIGNhc2UgUUVNVV9PUFRJT05fYnQ6CisgICAgICAgICAgICAgICAg aWYgKG5iX2J0X29wdHMgPj0gTUFYX05FVF9DTElFTlRTKSB7CisgICAgICAgICAgICAgICAgICAg IGZwcmludGYoc3RkZXJyLCAicWVtdTogdG9vIG1hbnkgYmx1ZXRvb3RoIGRldmljZXNcbiIpOwor ICAgICAgICAgICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICBidF9vcHRzW25iX2J0X29wdHMrK10gPSBvcHRhcmc7CisgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICBjYXNlIFFFTVVfT1BUSU9OX3ZoY2k6CisgICAgICAgICAgICAg ICAgeworICAgICAgICAgICAgICAgICAgICBjaGFyICplbmRwOworICAgICAgICAgICAgICAgICAg ICBpbnQgdmxhbiA9IHN0cnRvbChvcHRhcmcsICZlbmRwLCAwKTsKKworICAgICAgICAgICAgICAg ICAgICBpZiAoKmVuZHApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJy LCAicWVtdTogYmFkIHNjYXR0ZXJuZXQgJyVzJ1xuIiwgb3B0YXJnKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICAgICAgaWYgKG5iX3ZoY2lfb3B0cyA+PSBNQVhfTkVUX0NMSUVOVFMpIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAicWVtdTogdG9vIG1hbnkgVkhDSSBIQ0lzXG4i KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICAgICAgdmhjaV9vcHRzW25iX3ZoY2lfb3B0cysrXSA9IHZsYW47 CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg Y2FzZSBRRU1VX09QVElPTl9idGRldmljZToKKyAgICAgICAgICAgICAgICBpZiAobmJfYnRkZXZp Y2Vfb3B0cyA+PSBNQVhfTkVUX0NMSUVOVFMpIHsKKyAgICAgICAgICAgICAgICAgICAgZnByaW50 ZihzdGRlcnIsICJxZW11OiB0b28gbWFueSBibHVldG9vdGggc2xhdmVzXG4iKTsKKyAgICAgICAg ICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg YnRkZXZpY2Vfb3B0c1tuYl9idGRldmljZV9vcHRzKytdID0gb3B0YXJnOworICAgICAgICAgICAg ICAgIGJyZWFrOwogI2lmZGVmIEhBU19BVURJTwogICAgICAgICAgICAgY2FzZSBRRU1VX09QVElP Tl9hdWRpb19oZWxwOgogICAgICAgICAgICAgICAgIEFVRF9oZWxwICgpOwpAQCAtOTExOCw2ICs5 MjcyLDE2IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKICAgICB9CiAjZW5kaWYK IAorICAgIC8qIGluaXQgdGhlIGJsdWV0b290aCB3b3JsZCAqLworICAgIGZvciAoaSA9IDA7IGkg PCBuYl9idF9vcHRzOyBpKyspCisgICAgICAgIGlmIChidF9oY2lfcGFyc2UoYnRfb3B0c1tpXSkp CisgICAgICAgICAgICBleGl0KDEpOworICAgIGZvciAoaSA9IDA7IGkgPCBuYl92aGNpX29wdHM7 IGkrKykKKyAgICAgICAgYnRfdmhjaV9hZGQodmhjaV9vcHRzW2ldKTsKKyAgICBmb3IgKGkgPSAw OyBpIDwgbmJfYnRkZXZpY2Vfb3B0czsgaSsrKQorICAgICAgICBpZiAoIWJ0X2RldmljZV9hZGQo YnRkZXZpY2Vfb3B0c1tpXSkpCisgICAgICAgICAgICBleGl0KDEpOworCiAgICAgLyogaW5pdCB0 aGUgbWVtb3J5ICovCiAgICAgcGh5c19yYW1fc2l6ZSA9IG1hY2hpbmUtPnJhbV9yZXF1aXJlICYg flJBTVNJWkVfRklYRUQ7CiAKLS0gCjEuNS4zLjQKCg== ------=_Part_41199_9234861.1222651622213--