Return-Path: Message-Id: <7.0.1.0.2.20110707213702.033c8098@gmx.net> Date: Thu, 07 Jul 2011 21:57:09 +0200 To: Luiz Augusto von Dentz From: Peter Kornatowski Subject: Re: Media API with more than one headset Cc: Lukasz Rymanowski , linux-bluetooth@vger.kernel.org In-Reply-To: References: <7.0.1.0.2.20110622230344.031f5790@gmx.net> <7.0.1.0.2.20110627205517.03250550@gmx.net> <7.0.1.0.2.20110629214327.0321b4e0@gmx.net> <7.0.1.0.2.20110706214918.03262000@gmx.net> <7.0.1.0.2.20110707101900.03230f68@gmx.net> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=====================_1486984==_" Sender: linux-bluetooth-owner@vger.kernel.org List-ID: --=====================_1486984==_ Content-Type: text/plain; charset="us-ascii"; format=flowed Hi Luiz, At 14:49 07.07.2011, Luiz Augusto von Dentz wrote: >Hi Peter, > >On Thu, Jul 7, 2011 at 11:25 AM, Peter Kornatowski wrote: > > Hi Luiz, > > > > At 22:35 06.07.2011, Luiz Augusto von Dentz wrote: > >> > >> Hi Peter, > >> > >> On Wed, Jul 6, 2011 at 10:54 PM, Peter Kornatowski wrote: > >> > I downloaded and checked the new bluez version 4.95. I'm wondering why > >> > the > >> > patch of Lukasz didn't get applied? As I wrote in my last e-mail, it > >> > works > >> > for not losing playing mode of all headsets when disconnecting just one. > >> > >> I don't remember actually seeing a proper patch to the mailing list, > >> that might explain why it wasn't applied yet. > > > > So Lukasz, could you make a proper patch out of it, cause it's your code? > > > >> > Did someone of you had a chance to look into the other problems I wrote > >> > about in my last e-mail? This would help me a lot. > >> > >> Nope, I was actually waiting for more input since you mentioned this > >> only happened with some code your wrote. > > > > The first problem I wrote about also occures with the > simple-endpoint script > > located in the test directory of bluez. You just have to add the "Acquire" > > call to "SetConfiguration" to actually set the headset in playing mode. I > > also posted the lines of code I added, so you can easily try to reproduce > > it. The second problem just occurs with my code, that's right. > But maybe you > > have some general ideas. Otherwise I'll have to dig in by myself. But it > > would be very helpful when you look at least into the first problem. > >Your are probably is trying to Acquire the transport before >SetConfiguration completes so that will return an error since the >configuration is not accepted yet by the endpoint. If that is causing >a crash than it needs to be fixed, otherwise you basically need to >reply to SetConfiguration before trying to Acquire the transport. I'm calling Acquire when SetConfiguration is called by bluez (isn't that the correct spot, cause there you get the transport path?). I attached the whole modified script, so you can see exactly what I'm doing. It also works for the first headset or if all headsets are in connected mode and you start the script, so generally it should be ok. But it doesn't work if you start the script and then connect the first headset (or start the script after just one headset is in connected mode). Then the headset gets into playing mode, but bluez tries to put it into playing mode on the other endpoint, too (at least it looks that way to me cause SetConfiguration is being called twice). So then Acquire is being called twice, too. For one call I get the file descriptor, but for the other call I get "Operation Not Authorized". Maybe because the second SetConfiguration is called for the other endpoint, which is on the other adapter with which the headset is not paired (each headset is only paired with one adapter). On the other hand, the transport path from both SetConfiguration calls is for the same adapter... But when you then connect the second headset (which is paired with the other adapter), bluez doesn't call SetConfiguration for it (probably because this endpoint is still "blocked" by the first headset, but it shouldn't be). Additionally, when you try to end the script with ctrl+c now, bluetoothd segfaults with: segfault at 3c ip b75359d5 sp bfd25c10 error 4 in libdbus-1.so.3.5.7[b7521000+48000] I tried the whole use case as user and as root, but no difference. I also attached the syslog output (bluetoothd started with -d). >-- >Luiz Augusto von Dentz >-- Thanks, Peter --=====================_1486984==_ Content-Type: application/octet-stream; name="connect_first_headset.syslog" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="connect_first_headset.syslog" T3V0cHV0IG9mIHNpbXBsZS1lbmRwb2ludCBweXRob24gc2NyaXB0OgoKLi9zaW1wbGUtZW5kcG9p bnQtZHVhbCBoY2kwIGhjaTEKZGJ1cy5EaWN0aW9uYXJ5KHsnQ29kZWMnOiBkYnVzLkJ5dGUoMCks ICdVVUlEJzogJzAwMDAxMTFGLTAwMDAtMTAwMC04MDAwLTAwODA1RjlCMzRGQicsICdDYXBhYmls aXRpZXMnOiBkYnVzLkFycmF5KFtdLCBzaWduYXR1cmU9ZGJ1cy5TaWduYXR1cmUoJ2F5JykpfSwg c2lnbmF0dXJlPU5vbmUpClNldENvbmZpZ3VyYXRpb24gKC9vcmcvYmx1ZXovMTAzNDYvaGNpMC9k ZXZfMDBfMjNfN0ZfNDJfODNfQjMvZmQwLCBkYnVzLkRpY3Rpb25hcnkoe2RidXMuU3RyaW5nKHUn TlJFQycpOiBkYnVzLkJvb2xlYW4oVHJ1ZSwgdmFyaWFudF9sZXZlbD0xKSwgZGJ1cy5TdHJpbmco dSdVVUlEJyk6IGRidXMuU3RyaW5nKHUnMDAwMDExMUYtMDAwMC0xMDAwLTgwMDAtMDA4MDVGOUIz NEZCJywgdmFyaWFudF9sZXZlbD0xKSwgZGJ1cy5TdHJpbmcodSdJbmJhbmRSaW5ndG9uZScpOiBk YnVzLkJvb2xlYW4oVHJ1ZSwgdmFyaWFudF9sZXZlbD0xKSwgZGJ1cy5TdHJpbmcodSdDb2RlYycp OiBkYnVzLkJ5dGUoMCwgdmFyaWFudF9sZXZlbD0xKSwgZGJ1cy5TdHJpbmcodSdSb3V0aW5nJyk6 IGRidXMuU3RyaW5nKHUnSENJJywgdmFyaWFudF9sZXZlbD0xKSwgZGJ1cy5TdHJpbmcodSdEZXZp Y2UnKTogZGJ1cy5PYmplY3RQYXRoKCcvb3JnL2JsdWV6LzEwMzQ2L2hjaTAvZGV2XzAwXzIzXzdG XzQyXzgzX0IzJywgdmFyaWFudF9sZXZlbD0xKSwgZGJ1cy5TdHJpbmcodSdDb25maWd1cmF0aW9u Jyk6IGRidXMuQXJyYXkoW10sIHNpZ25hdHVyZT1kYnVzLlNpZ25hdHVyZSgneScpLCB2YXJpYW50 X2xldmVsPTEpfSwgc2lnbmF0dXJlPWRidXMuU2lnbmF0dXJlKCdzdicpKSkKU2V0Q29uZmlndXJh dGlvbiAoL29yZy9ibHVlei8xMDM0Ni9oY2kwL2Rldl8wMF8yM183Rl80Ml84M19CMy9mZDEsIGRi dXMuRGljdGlvbmFyeSh7ZGJ1cy5TdHJpbmcodSdOUkVDJyk6IGRidXMuQm9vbGVhbihUcnVlLCB2 YXJpYW50X2xldmVsPTEpLCBkYnVzLlN0cmluZyh1J1VVSUQnKTogZGJ1cy5TdHJpbmcodScwMDAw MTExRi0wMDAwLTEwMDAtODAwMC0wMDgwNUY5QjM0RkInLCB2YXJpYW50X2xldmVsPTEpLCBkYnVz LlN0cmluZyh1J0luYmFuZFJpbmd0b25lJyk6IGRidXMuQm9vbGVhbihUcnVlLCB2YXJpYW50X2xl dmVsPTEpLCBkYnVzLlN0cmluZyh1J0NvZGVjJyk6IGRidXMuQnl0ZSgwLCB2YXJpYW50X2xldmVs PTEpLCBkYnVzLlN0cmluZyh1J1JvdXRpbmcnKTogZGJ1cy5TdHJpbmcodSdIQ0knLCB2YXJpYW50 X2xldmVsPTEpLCBkYnVzLlN0cmluZyh1J0RldmljZScpOiBkYnVzLk9iamVjdFBhdGgoJy9vcmcv Ymx1ZXovMTAzNDYvaGNpMC9kZXZfMDBfMjNfN0ZfNDJfODNfQjMnLCB2YXJpYW50X2xldmVsPTEp LCBkYnVzLlN0cmluZyh1J0NvbmZpZ3VyYXRpb24nKTogZGJ1cy5BcnJheShbXSwgc2lnbmF0dXJl PWRidXMuU2lnbmF0dXJlKCd5JyksIHZhcmlhbnRfbGV2ZWw9MSl9LCBzaWduYXR1cmU9ZGJ1cy5T aWduYXR1cmUoJ3N2JykpKQpBY3F1aXJlIGZhaWxlZDogb3JnLmJsdWV6LkVycm9yLk5vdEF1dGhv cml6ZWQ6IE9wZXJhdGlvbiBOb3QgQXV0aG9yaXplZApBY3F1aXJlIHN1Y2Nlc3NmdWxsISBOZXcg ZmQ6IDxkYnVzLlVuaXhGZCBvYmplY3QgYXQgMHhiNzRkYjNmMD4gd2l0aCBpTVRVIDQ4IGFuZCBv TVRVIDQ4CgoKCkNvbm5lY3Qgb2YgZmlyc3QgaGVhZHNldDoKCkp1bCAgNyAxOTowNDoyOCBwZXRl ciBibHVldG9vdGhkWzEwMzQ3XTogcGx1Z2lucy9oY2lvcHMuYzpjb25uX2NvbXBsZXRlKCkgc3Rh dHVzIDB4MDAKSnVsICA3IDE5OjA0OjI4IHBldGVyIGJsdWV0b290aGRbMTAzNDddOiBzcmMvYWRh cHRlci5jOmFkYXB0ZXJfZ2V0X2RldmljZSgpIDAwOjIzOjdGOjQyOjgzOkIzCkp1bCAgNyAxOTow NDoyOCBwZXRlciBibHVldG9vdGhkWzEwMzQ3XTogcGx1Z2lucy9oY2lvcHMuYzpyZW1vdGVfZmVh dHVyZXNfaW5mb3JtYXRpb24oKSBoY2kwIHN0YXR1cyAwCkp1bCAgNyAxOTowNDoyOCBwZXRlciBi bHVldG9vdGhkWzEwMzQ3XTogcGx1Z2lucy9oY2lvcHMuYzpsaW5rX2tleV9yZXF1ZXN0KCkgaGNp MCBkYmEgMDA6MjM6N0Y6NDI6ODM6QjMKSnVsICA3IDE5OjA0OjI4IHBldGVyIGJsdWV0b290aGRb MTAzNDddOiBwbHVnaW5zL2hjaW9wcy5jOmdldF9hdXRoX2luZm8oKSBoY2kwIGRiYSAwMDoyMzo3 Rjo0Mjo4MzpCMwpKdWwgIDcgMTk6MDQ6MjggcGV0ZXIgYmx1ZXRvb3RoZFsxMDM0N106IHBsdWdp bnMvaGNpb3BzLmM6bGlua19rZXlfcmVxdWVzdCgpIGtlcm5lbCBhdXRoIHJlcXVpcmVtZW50cyA9 IDB4MDQKSnVsICA3IDE5OjA0OjI4IHBldGVyIGJsdWV0b290aGRbMTAzNDddOiBwbHVnaW5zL2hj aW9wcy5jOmxpbmtfa2V5X3JlcXVlc3QoKSBNYXRjaGluZyBrZXkgZm91bmQKSnVsICA3IDE5OjA0 OjI4IHBldGVyIGJsdWV0b290aGRbMTAzNDddOiBwbHVnaW5zL2hjaW9wcy5jOmxpbmtfa2V5X3Jl cXVlc3QoKSBsaW5rIGtleSB0eXBlIDB4MDQKSnVsICA3IDE5OjA0OjI5IHBldGVyIGJsdWV0b290 aGRbMTAzNDddOiBwbHVnaW5zL2hjaW9wcy5jOmxpbmtfa2V5X3JlcXVlc3QoKSBoY2kwIGRiYSAw MDoyMzo3Rjo0Mjo4MzpCMwpKdWwgIDcgMTk6MDQ6MjkgcGV0ZXIgYmx1ZXRvb3RoZFsxMDM0N106 IHBsdWdpbnMvaGNpb3BzLmM6Z2V0X2F1dGhfaW5mbygpIGhjaTAgZGJhIDAwOjIzOjdGOjQyOjgz OkIzCkp1bCAgNyAxOTowNDoyOSBwZXRlciBibHVldG9vdGhkWzEwMzQ3XTogcGx1Z2lucy9oY2lv cHMuYzpsaW5rX2tleV9yZXF1ZXN0KCkga2VybmVsIGF1dGggcmVxdWlyZW1lbnRzID0gMHgwNApK dWwgIDcgMTk6MDQ6MjkgcGV0ZXIgYmx1ZXRvb3RoZFsxMDM0N106IHBsdWdpbnMvaGNpb3BzLmM6 bGlua19rZXlfcmVxdWVzdCgpIE1hdGNoaW5nIGtleSBmb3VuZApKdWwgIDcgMTk6MDQ6MjkgcGV0 ZXIgYmx1ZXRvb3RoZFsxMDM0N106IHBsdWdpbnMvaGNpb3BzLmM6bGlua19rZXlfcmVxdWVzdCgp IGxpbmsga2V5IHR5cGUgMHgwNApKdWwgIDcgMTk6MDQ6MjkgcGV0ZXIgYmx1ZXRvb3RoZFsxMDM0 N106IGF1ZGlvL2hlYWRzZXQuYzpoZWFkc2V0X3NldF9zdGF0ZSgpIFN0YXRlIGNoYW5nZWQgL29y Zy9ibHVlei8xMDM0Ni9oY2kwL2Rldl8wMF8yM183Rl80Ml84M19CMzogSEVBRFNFVF9TVEFURV9E SVNDT05ORUNURUQgLT4gSEVBRFNFVF9TVEFURV9DT05ORUNUSU5HCkp1bCAgNyAxOTowNDoyOSBw ZXRlciBibHVldG9vdGhkWzEwMzQ3XTogYXVkaW8vbWVkaWEuYzpoZWFkc2V0X3N0YXRlX2NoYW5n ZWQoKSAKSnVsICA3IDE5OjA0OjI5IHBldGVyIGJsdWV0b290aGRbMTAzNDddOiBhdWRpby9tZWRp YS5jOm1lZGlhX2VuZHBvaW50X2FzeW5jX2NhbGwoKSBDYWxsaW5nIFNldENvbmZpZ3VyYXRpb246 IG5hbWUgPSA6MS4zMDkgcGF0aCA9IC90ZXN0L2VuZHBvaW50MQpKdWwgIDcgMTk6MDQ6MjkgcGV0 ZXIgYmx1ZXRvb3RoZFsxMDM0N106IGF1ZGlvL21lZGlhLmM6aGVhZHNldF9zdGF0ZV9jaGFuZ2Vk KCkgCkp1bCAgNyAxOTowNDoyOSBwZXRlciBibHVldG9vdGhkWzEwMzQ3XTogYXVkaW8vbWVkaWEu YzptZWRpYV9lbmRwb2ludF9hc3luY19jYWxsKCkgQ2FsbGluZyBTZXRDb25maWd1cmF0aW9uOiBu YW1lID0gOjEuMzA5IHBhdGggPSAvdGVzdC9lbmRwb2ludDIKSnVsICA3IDE5OjA0OjI5IHBldGVy IGJsdWV0b290aGRbMTAzNDddOiBhdWRpby9oZWFkc2V0LmM6aGVhZHNldF9jb25uZWN0X2NiKCkg L29yZy9ibHVlei8xMDM0Ni9oY2kwL2Rldl8wMF8yM183Rl80Ml84M19CMzogQ29ubmVjdGVkIHRv IDAwOjIzOjdGOjQyOjgzOkIzCkp1bCAgNyAxOTowNDoyOSBwZXRlciBibHVldG9vdGhkWzEwMzQ3 XTogcGx1Z2lucy9oY2lvcHMuYzphdXRoX2NvbXBsZXRlKCkgaGNpMCBzdGF0dXMgMApKdWwgIDcg MTk6MDQ6MjkgcGV0ZXIgYmx1ZXRvb3RoZFsxMDM0N106IHBsdWdpbnMvaGNpb3BzLmM6Ym9uZGlu Z19jb21wbGV0ZSgpIHN0YXR1cyAweDAwCkp1bCAgNyAxOTowNDoyOSBwZXRlciBibHVldG9vdGhk WzEwMzQ3XTogc3JjL2V2ZW50LmM6YnRkX2V2ZW50X2JvbmRpbmdfY29tcGxldGUoKSBzdGF0dXMg MHgwMApKdWwgIDcgMTk6MDQ6MjkgcGV0ZXIgYmx1ZXRvb3RoZFsxMDM0N106IHNyYy9hZGFwdGVy LmM6YWRhcHRlcl9nZXRfZGV2aWNlKCkgMDA6MjM6N0Y6NDI6ODM6QjMKSnVsICA3IDE5OjA0OjI5 IHBldGVyIGJsdWV0b290aGRbMTAzNDddOiBzcmMvZGV2aWNlLmM6ZGV2aWNlX2JvbmRpbmdfY29t cGxldGUoKSBib25kaW5nIChuaWwpIHN0YXR1cyAweDAwCkp1bCAgNyAxOTowNDoyOSBwZXRlciBi bHVldG9vdGhkWzEwMzQ3XTogYXVkaW8vdHJhbnNwb3J0LmM6bWVkaWFfdHJhbnNwb3J0X2FjcXVp cmUoKSBUcmFuc3BvcnQgL29yZy9ibHVlei8xMDM0Ni9oY2kwL2Rldl8wMF8yM183Rl80Ml84M19C My9mZDA6IHJlYWQgbG9jayBhY3F1aXJlZApKdWwgIDcgMTk6MDQ6MjkgcGV0ZXIgYmx1ZXRvb3Ro ZFsxMDM0N106IGF1ZGlvL3RyYW5zcG9ydC5jOm1lZGlhX3RyYW5zcG9ydF9hY3F1aXJlKCkgVHJh bnNwb3J0IC9vcmcvYmx1ZXovMTAzNDYvaGNpMC9kZXZfMDBfMjNfN0ZfNDJfODNfQjMvZmQwOiB3 cml0ZSBsb2NrIGFjcXVpcmVkCkp1bCAgNyAxOTowNDoyOSBwZXRlciBibHVldG9vdGhkWzEwMzQ3 XTogYXVkaW8vdHJhbnNwb3J0LmM6bWVkaWFfb3duZXJfY3JlYXRlKCkgT3duZXIgY3JlYXRlZDog c2VuZGVyPToxLjMwOSBhY2Nlc3N0eXBlPXJ3Ckp1bCAgNyAxOTowNDoyOSBwZXRlciBibHVldG9v dGhkWzEwMzQ3XTogYXVkaW8vdHJhbnNwb3J0LmM6bWVkaWFfcmVxdWVzdF9jcmVhdGUoKSBSZXF1 ZXN0IGNyZWF0ZWQ6IG1ldGhvZD1BY3F1aXJlIGlkPTEKSnVsICA3IDE5OjA0OjI5IHBldGVyIGJs dWV0b290aGRbMTAzNDddOiBhdWRpby90cmFuc3BvcnQuYzptZWRpYV9vd25lcl9hZGQoKSBPd25l ciA6MS4zMDkgUmVxdWVzdCBBY3F1aXJlCkp1bCAgNyAxOTowNDoyOSBwZXRlciBibHVldG9vdGhk WzEwMzQ3XTogYXVkaW8vdHJhbnNwb3J0LmM6bWVkaWFfdHJhbnNwb3J0X2FkZCgpIFRyYW5zcG9y dCAvb3JnL2JsdWV6LzEwMzQ2L2hjaTAvZGV2XzAwXzIzXzdGXzQyXzgzX0IzL2ZkMCBPd25lciA6 MS4zMDkKSnVsICA3IDE5OjA0OjI5IHBldGVyIGJsdWV0b290aGRbMTAzNDddOiBhdWRpby90cmFu c3BvcnQuYzptZWRpYV90cmFuc3BvcnRfYWNxdWlyZSgpIFRyYW5zcG9ydCAvb3JnL2JsdWV6LzEw MzQ2L2hjaTAvZGV2XzAwXzIzXzdGXzQyXzgzX0IzL2ZkMTogcmVhZCBsb2NrIGFjcXVpcmVkCkp1 bCAgNyAxOTowNDoyOSBwZXRlciBibHVldG9vdGhkWzEwMzQ3XTogYXVkaW8vdHJhbnNwb3J0LmM6 bWVkaWFfdHJhbnNwb3J0X2FjcXVpcmUoKSBUcmFuc3BvcnQgL29yZy9ibHVlei8xMDM0Ni9oY2kw L2Rldl8wMF8yM183Rl80Ml84M19CMy9mZDE6IHdyaXRlIGxvY2sgYWNxdWlyZWQKSnVsICA3IDE5 OjA0OjI5IHBldGVyIGJsdWV0b290aGRbMTAzNDddOiBhdWRpby90cmFuc3BvcnQuYzptZWRpYV9v d25lcl9jcmVhdGUoKSBPd25lciBjcmVhdGVkOiBzZW5kZXI9OjEuMzA5IGFjY2Vzc3R5cGU9cncK SnVsICA3IDE5OjA0OjI5IHBldGVyIGJsdWV0b290aGRbMTAzNDddOiBhdWRpby90cmFuc3BvcnQu YzptZWRpYV9vd25lcl9mcmVlKCkgT3duZXIgOjEuMzA5Ckp1bCAgNyAxOTowNDoyOSBwZXRlciBi bHVldG9vdGhkWzEwMzQ3XTogYXVkaW8vaGVhZHNldC5jOmhhbmRsZV9ldmVudCgpIFJlY2VpdmVk IEFUK0JSU0Y9MjUKSnVsICA3IDE5OjA0OjI5IHBldGVyIGJsdWV0b290aGRbMTAzNDddOiBhdWRp by9oZWFkc2V0LmM6cHJpbnRfaGZfZmVhdHVyZXMoKSBIRlAgSEYgZmVhdHVyZXM6ICJFQyBhbmQv b3IgTlIgZnVuY3Rpb24iICJWb2ljZSByZWNvZ25pdGlvbiBhY3RpdmF0aW9uIiAiUmVtb3RlIHZv bHVtZSBjb250cm9sIiAKSnVsICA3IDE5OjA0OjI5IHBldGVyIGJsdWV0b290aGRbMTAzNDddOiBh dWRpby9oZWFkc2V0LmM6aGFuZGxlX2V2ZW50KCkgUmVjZWl2ZWQgQVQrQ0lORD0/Ckp1bCAgNyAx OTowNDozMCBwZXRlciBibHVldG9vdGhkWzEwMzQ3XTogYXVkaW8vaGVhZHNldC5jOmhhbmRsZV9l dmVudCgpIFJlY2VpdmVkIEFUK0NJTkQ/Ckp1bCAgNyAxOTowNDozMCBwZXRlciBibHVldG9vdGhk WzEwMzQ3XTogYXVkaW8vaGVhZHNldC5jOmhhbmRsZV9ldmVudCgpIFJlY2VpdmVkIEFUK0NNRVI9 MywgMCwgMCwgMQpKdWwgIDcgMTk6MDQ6MzAgcGV0ZXIgYmx1ZXRvb3RoZFsxMDM0N106IGF1ZGlv L2hlYWRzZXQuYzpldmVudF9yZXBvcnRpbmcoKSBFdmVudCByZXBvcnRpbmcgKENNRVIpOiBtb2Rl PTMsIGluZD0xCkp1bCAgNyAxOTowNDozMCBwZXRlciBibHVldG9vdGhkWzEwMzQ3XTogYXVkaW8v aGVhZHNldC5jOmhmcF9zbGNfY29tcGxldGUoKSBIRlAgU2VydmljZSBMZXZlbCBDb25uZWN0aW9u IGVzdGFibGlzaGVkCkp1bCAgNyAxOTowNDozMCBwZXRlciBibHVldG9vdGhkWzEwMzQ3XTogYXVk aW8vdGVsZXBob255LmM6dGVsZXBob255X2RldmljZV9jb25uZWN0ZWQoKSB0ZWxlcGhvbnktZHVt bXk6IGRldmljZSAweGI4NmNhZDc4IGNvbm5lY3RlZApKdWwgIDcgMTk6MDQ6MzAgcGV0ZXIgYmx1 ZXRvb3RoZFsxMDM0N106IGF1ZGlvL2hlYWRzZXQuYzpoZWFkc2V0X3NldF9zdGF0ZSgpIFN0YXRl IGNoYW5nZWQgL29yZy9ibHVlei8xMDM0Ni9oY2kwL2Rldl8wMF8yM183Rl80Ml84M19CMzogSEVB RFNFVF9TVEFURV9DT05ORUNUSU5HIC0+IEhFQURTRVRfU1RBVEVfQ09OTkVDVEVECkp1bCAgNyAx OTowNDozMCBwZXRlciBibHVldG9vdGhkWzEwMzQ3XTogYXVkaW8vbWVkaWEuYzpoZWFkc2V0X3N0 YXRlX2NoYW5nZWQoKSAKSnVsICA3IDE5OjA0OjMwIHBldGVyIGJsdWV0b290aGRbMTAzNDddOiBh dWRpby9tZWRpYS5jOmhlYWRzZXRfc3RhdGVfY2hhbmdlZCgpIApKdWwgIDcgMTk6MDQ6MzAgcGV0 ZXIgYmx1ZXRvb3RoZFsxMDM0N106IGF1ZGlvL2hlYWRzZXQuYzpoZWFkc2V0X3NldF9zdGF0ZSgp IFN0YXRlIGNoYW5nZWQgL29yZy9ibHVlei8xMDM0Ni9oY2kwL2Rldl8wMF8yM183Rl80Ml84M19C MzogSEVBRFNFVF9TVEFURV9DT05ORUNURUQgLT4gSEVBRFNFVF9TVEFURV9QTEFZX0lOX1BST0dS RVNTCkp1bCAgNyAxOTowNDozMCBwZXRlciBibHVldG9vdGhkWzEwMzQ3XTogYXVkaW8vbWVkaWEu YzpoZWFkc2V0X3N0YXRlX2NoYW5nZWQoKSAKSnVsICA3IDE5OjA0OjMwIHBldGVyIGJsdWV0b290 aGRbMTAzNDddOiBhdWRpby9tZWRpYS5jOmhlYWRzZXRfc3RhdGVfY2hhbmdlZCgpIApKdWwgIDcg MTk6MDQ6MzAgcGV0ZXIgYmx1ZXRvb3RoZFsxMDM0N106IGF1ZGlvL2hlYWRzZXQuYzpzY29fY29u bmVjdF9jYigpIFNDTyBzb2NrZXQgb3BlbmVkIGZvciBoZWFkc2V0IC9vcmcvYmx1ZXovMTAzNDYv aGNpMC9kZXZfMDBfMjNfN0ZfNDJfODNfQjMKSnVsICA3IDE5OjA0OjMwIHBldGVyIGJsdWV0b290 aGRbMTAzNDddOiBhdWRpby9oZWFkc2V0LmM6c2NvX2Nvbm5lY3RfY2IoKSBTQ08gZmQ9NDAKSnVs ICA3IDE5OjA0OjMwIHBldGVyIGJsdWV0b290aGRbMTAzNDddOiAvb3JnL2JsdWV6LzEwMzQ2L2hj aTAvZGV2XzAwXzIzXzdGXzQyXzgzX0IzL2ZkMDogZmQoNDApIHJlYWR5Ckp1bCAgNyAxOTowNDoz MCBwZXRlciBibHVldG9vdGhkWzEwMzQ3XTogYXVkaW8vdHJhbnNwb3J0LmM6bWVkaWFfb3duZXJf cmVtb3ZlKCkgT3duZXIgOjEuMzA5IFJlcXVlc3QgQWNxdWlyZQpKdWwgIDcgMTk6MDQ6MzAgcGV0 ZXIgYmx1ZXRvb3RoZFsxMDM0N106IGF1ZGlvL2hlYWRzZXQuYzpoZWFkc2V0X3NldF9zdGF0ZSgp IFN0YXRlIGNoYW5nZWQgL29yZy9ibHVlei8xMDM0Ni9oY2kwL2Rldl8wMF8yM183Rl80Ml84M19C MzogSEVBRFNFVF9TVEFURV9QTEFZX0lOX1BST0dSRVNTIC0+IEhFQURTRVRfU1RBVEVfUExBWUlO RwpKdWwgIDcgMTk6MDQ6MzAgcGV0ZXIgYmx1ZXRvb3RoZFsxMDM0N106IGF1ZGlvL21lZGlhLmM6 aGVhZHNldF9zdGF0ZV9jaGFuZ2VkKCkgCkp1bCAgNyAxOTowNDozMCBwZXRlciBibHVldG9vdGhk WzEwMzQ3XTogYXVkaW8vbWVkaWEuYzpoZWFkc2V0X3N0YXRlX2NoYW5nZWQoKSAKSnVsICA3IDE5 OjA0OjMxIHBldGVyIGJsdWV0b290aGRbMTAzNDddOiBhdWRpby9oZWFkc2V0LmM6aGFuZGxlX2V2 ZW50KCkgUmVjZWl2ZWQgQVQrVkdTPTA4CgoKQ29ubmVjdCBvZiBzZWNvbmQgaGVhZHNldDoKCkp1 bCAgNyAxOTowNTozMiBwZXRlciBibHVldG9vdGhkWzEwMzQ3XTogcGx1Z2lucy9oY2lvcHMuYzpj b25uX2NvbXBsZXRlKCkgc3RhdHVzIDB4MDAKSnVsICA3IDE5OjA1OjMyIHBldGVyIGJsdWV0b290 aGRbMTAzNDddOiBzcmMvYWRhcHRlci5jOmFkYXB0ZXJfZ2V0X2RldmljZSgpIDAwOjIzOjdGOjJC OjU0OkFDCkp1bCAgNyAxOTowNTozMyBwZXRlciBibHVldG9vdGhkWzEwMzQ3XTogcGx1Z2lucy9o Y2lvcHMuYzpyZW1vdGVfZmVhdHVyZXNfaW5mb3JtYXRpb24oKSBoY2kxIHN0YXR1cyAwCkp1bCAg NyAxOTowNTozMyBwZXRlciBibHVldG9vdGhkWzEwMzQ3XTogcGx1Z2lucy9oY2lvcHMuYzpsaW5r X2tleV9yZXF1ZXN0KCkgaGNpMSBkYmEgMDA6MjM6N0Y6MkI6NTQ6QUMKSnVsICA3IDE5OjA1OjMz IHBldGVyIGJsdWV0b290aGRbMTAzNDddOiBwbHVnaW5zL2hjaW9wcy5jOmdldF9hdXRoX2luZm8o KSBoY2kxIGRiYSAwMDoyMzo3RjoyQjo1NDpBQwpKdWwgIDcgMTk6MDU6MzMgcGV0ZXIgYmx1ZXRv b3RoZFsxMDM0N106IHBsdWdpbnMvaGNpb3BzLmM6bGlua19rZXlfcmVxdWVzdCgpIGtlcm5lbCBh dXRoIHJlcXVpcmVtZW50cyA9IDB4MDQKSnVsICA3IDE5OjA1OjMzIHBldGVyIGJsdWV0b290aGRb MTAzNDddOiBwbHVnaW5zL2hjaW9wcy5jOmxpbmtfa2V5X3JlcXVlc3QoKSBNYXRjaGluZyBrZXkg Zm91bmQKSnVsICA3IDE5OjA1OjMzIHBldGVyIGJsdWV0b290aGRbMTAzNDddOiBwbHVnaW5zL2hj aW9wcy5jOmxpbmtfa2V5X3JlcXVlc3QoKSBsaW5rIGtleSB0eXBlIDB4MDQKSnVsICA3IDE5OjA1 OjMzIHBldGVyIGJsdWV0b290aGRbMTAzNDddOiBwbHVnaW5zL2hjaW9wcy5jOmxpbmtfa2V5X3Jl cXVlc3QoKSBoY2kxIGRiYSAwMDoyMzo3RjoyQjo1NDpBQwpKdWwgIDcgMTk6MDU6MzMgcGV0ZXIg Ymx1ZXRvb3RoZFsxMDM0N106IHBsdWdpbnMvaGNpb3BzLmM6Z2V0X2F1dGhfaW5mbygpIGhjaTEg ZGJhIDAwOjIzOjdGOjJCOjU0OkFDCkp1bCAgNyAxOTowNTozMyBwZXRlciBibHVldG9vdGhkWzEw MzQ3XTogcGx1Z2lucy9oY2lvcHMuYzpsaW5rX2tleV9yZXF1ZXN0KCkga2VybmVsIGF1dGggcmVx dWlyZW1lbnRzID0gMHgwNApKdWwgIDcgMTk6MDU6MzMgcGV0ZXIgYmx1ZXRvb3RoZFsxMDM0N106 IHBsdWdpbnMvaGNpb3BzLmM6bGlua19rZXlfcmVxdWVzdCgpIE1hdGNoaW5nIGtleSBmb3VuZApK dWwgIDcgMTk6MDU6MzMgcGV0ZXIgYmx1ZXRvb3RoZFsxMDM0N106IHBsdWdpbnMvaGNpb3BzLmM6 bGlua19rZXlfcmVxdWVzdCgpIGxpbmsga2V5IHR5cGUgMHgwNApKdWwgIDcgMTk6MDU6MzMgcGV0 ZXIgYmx1ZXRvb3RoZFsxMDM0N106IHBsdWdpbnMvaGNpb3BzLmM6YXV0aF9jb21wbGV0ZSgpIGhj aTEgc3RhdHVzIDAKSnVsICA3IDE5OjA1OjMzIHBldGVyIGJsdWV0b290aGRbMTAzNDddOiBwbHVn aW5zL2hjaW9wcy5jOmJvbmRpbmdfY29tcGxldGUoKSBzdGF0dXMgMHgwMApKdWwgIDcgMTk6MDU6 MzMgcGV0ZXIgYmx1ZXRvb3RoZFsxMDM0N106IHNyYy9ldmVudC5jOmJ0ZF9ldmVudF9ib25kaW5n X2NvbXBsZXRlKCkgc3RhdHVzIDB4MDAKSnVsICA3IDE5OjA1OjMzIHBldGVyIGJsdWV0b290aGRb MTAzNDddOiBzcmMvYWRhcHRlci5jOmFkYXB0ZXJfZ2V0X2RldmljZSgpIDAwOjIzOjdGOjJCOjU0 OkFDCkp1bCAgNyAxOTowNTozMyBwZXRlciBibHVldG9vdGhkWzEwMzQ3XTogc3JjL2RldmljZS5j OmRldmljZV9ib25kaW5nX2NvbXBsZXRlKCkgYm9uZGluZyAobmlsKSBzdGF0dXMgMHgwMApKdWwg IDcgMTk6MDU6MzMgcGV0ZXIgYmx1ZXRvb3RoZFsxMDM0N106IGF1ZGlvL2hlYWRzZXQuYzpoZWFk c2V0X3NldF9zdGF0ZSgpIFN0YXRlIGNoYW5nZWQgL29yZy9ibHVlei8xMDM0Ni9oY2kxL2Rldl8w MF8yM183Rl8yQl81NF9BQzogSEVBRFNFVF9TVEFURV9ESVNDT05ORUNURUQgLT4gSEVBRFNFVF9T VEFURV9DT05ORUNUSU5HCkp1bCAgNyAxOTowNTozMyBwZXRlciBibHVldG9vdGhkWzEwMzQ3XTog YXVkaW8vbWVkaWEuYzpoZWFkc2V0X3N0YXRlX2NoYW5nZWQoKSAKSnVsICA3IDE5OjA1OjMzIHBl dGVyIGJsdWV0b290aGRbMTAzNDddOiBhdWRpby9tZWRpYS5jOmhlYWRzZXRfc3RhdGVfY2hhbmdl ZCgpIApKdWwgIDcgMTk6MDU6MzMgcGV0ZXIgYmx1ZXRvb3RoZFsxMDM0N106IGF1ZGlvL2hlYWRz ZXQuYzpoZWFkc2V0X2Nvbm5lY3RfY2IoKSAvb3JnL2JsdWV6LzEwMzQ2L2hjaTEvZGV2XzAwXzIz XzdGXzJCXzU0X0FDOiBDb25uZWN0ZWQgdG8gMDA6MjM6N0Y6MkI6NTQ6QUMKSnVsICA3IDE5OjA1 OjMzIHBldGVyIGJsdWV0b290aGRbMTAzNDddOiBhdWRpby9oZWFkc2V0LmM6aGFuZGxlX2V2ZW50 KCkgUmVjZWl2ZWQgQVQrQlJTRj0yNApKdWwgIDcgMTk6MDU6MzMgcGV0ZXIgYmx1ZXRvb3RoZFsx MDM0N106IGF1ZGlvL2hlYWRzZXQuYzpwcmludF9oZl9mZWF0dXJlcygpIEhGUCBIRiBmZWF0dXJl czogIlZvaWNlIHJlY29nbml0aW9uIGFjdGl2YXRpb24iICJSZW1vdGUgdm9sdW1lIGNvbnRyb2wi IApKdWwgIDcgMTk6MDU6MzMgcGV0ZXIgYmx1ZXRvb3RoZFsxMDM0N106IGF1ZGlvL2hlYWRzZXQu YzpoYW5kbGVfZXZlbnQoKSBSZWNlaXZlZCBBVCtDSU5EPT8KSnVsICA3IDE5OjA1OjMzIHBldGVy IGJsdWV0b290aGRbMTAzNDddOiBhdWRpby9oZWFkc2V0LmM6aGFuZGxlX2V2ZW50KCkgUmVjZWl2 ZWQgQVQrQ0lORD8KSnVsICA3IDE5OjA1OjM0IHBldGVyIGJsdWV0b290aGRbMTAzNDddOiBhdWRp by9oZWFkc2V0LmM6aGFuZGxlX2V2ZW50KCkgUmVjZWl2ZWQgQVQrQ01FUj0zLCAwLCAwLCAxCkp1 bCAgNyAxOTowNTozNCBwZXRlciBibHVldG9vdGhkWzEwMzQ3XTogYXVkaW8vaGVhZHNldC5jOmV2 ZW50X3JlcG9ydGluZygpIEV2ZW50IHJlcG9ydGluZyAoQ01FUik6IG1vZGU9MywgaW5kPTEKSnVs ICA3IDE5OjA1OjM0IHBldGVyIGJsdWV0b290aGRbMTAzNDddOiBhdWRpby9oZWFkc2V0LmM6aGZw X3NsY19jb21wbGV0ZSgpIEhGUCBTZXJ2aWNlIExldmVsIENvbm5lY3Rpb24gZXN0YWJsaXNoZWQK SnVsICA3IDE5OjA1OjM0IHBldGVyIGJsdWV0b290aGRbMTAzNDddOiBhdWRpby90ZWxlcGhvbnku Yzp0ZWxlcGhvbnlfZGV2aWNlX2Nvbm5lY3RlZCgpIHRlbGVwaG9ueS1kdW1teTogZGV2aWNlIDB4 Yjg2YzJlYjAgY29ubmVjdGVkCkp1bCAgNyAxOTowNTozNCBwZXRlciBibHVldG9vdGhkWzEwMzQ3 XTogYXVkaW8vaGVhZHNldC5jOmhlYWRzZXRfc2V0X3N0YXRlKCkgU3RhdGUgY2hhbmdlZCAvb3Jn L2JsdWV6LzEwMzQ2L2hjaTEvZGV2XzAwXzIzXzdGXzJCXzU0X0FDOiBIRUFEU0VUX1NUQVRFX0NP Tk5FQ1RJTkcgLT4gSEVBRFNFVF9TVEFURV9DT05ORUNURUQKSnVsICA3IDE5OjA1OjM0IHBldGVy IGJsdWV0b290aGRbMTAzNDddOiBhdWRpby9tZWRpYS5jOmhlYWRzZXRfc3RhdGVfY2hhbmdlZCgp IApKdWwgIDcgMTk6MDU6MzQgcGV0ZXIgYmx1ZXRvb3RoZFsxMDM0N106IGF1ZGlvL21lZGlhLmM6 aGVhZHNldF9zdGF0ZV9jaGFuZ2VkKCkgCkp1bCAgNyAxOTowNTozNCBwZXRlciBibHVldG9vdGhk WzEwMzQ3XTogYXVkaW8vaGVhZHNldC5jOmhhbmRsZV9ldmVudCgpIFJlY2VpdmVkIEFUK1ZHUz0w OAoK --=====================_1486984==_ Content-Type: application/octet-stream; name="simple-endpoint-dual" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="simple-endpoint-dual" IyEvdXNyL2Jpbi9weXRob24KCmltcG9ydCBzeXMKaW1wb3J0IGRidXMKaW1wb3J0IGRidXMuc2Vy dmljZQppbXBvcnQgZGJ1cy5tYWlubG9vcC5nbGliCmltcG9ydCBnb2JqZWN0CgpIRlBfQUdfVVVJ RCA9ICIwMDAwMTExRi0wMDAwLTEwMDAtODAwMC0wMDgwNUY5QjM0RkIiClBDTV9DT0RFQyA9IGRi dXMuQnl0ZSgweDAwKQpQQ01fQ09ORklHVVJBVElPTiA9IGRidXMuQXJyYXkoW10sIHNpZ25hdHVy ZT0iYXkiKQoKZGVmIGFjcXVpcmVfY2IoZmQsIGltdHUsIG9tdHUpOgoJcHJpbnQgIkFjcXVpcmUg c3VjY2Vzc2Z1bGwhIE5ldyBmZDogJXMgd2l0aCBpTVRVICVpIGFuZCBvTVRVICVpIiAlIChmZCwg aW10dSwgb210dSkKCmRlZiBhY3F1aXJlX2Vycm9yKGVycm9yKToKCXByaW50ICJBY3F1aXJlIGZh aWxlZDogJXMiICUgKGVycm9yKQoJI21haW5sb29wLnF1aXQoKQoKY2xhc3MgUmVqZWN0ZWQoZGJ1 cy5EQnVzRXhjZXB0aW9uKToKCV9kYnVzX2Vycm9yX25hbWUgPSAib3JnLmJsdWV6LkVycm9yLlJl amVjdGVkIgoKY2xhc3MgRW5kcG9pbnQoZGJ1cy5zZXJ2aWNlLk9iamVjdCk6CglleGl0X29uX3Jl bGVhc2UgPSBUcnVlCgljb25maWd1cmF0aW9uID0gUENNX0NPTkZJR1VSQVRJT04KCglkZWYgc2V0 X2V4aXRfb25fcmVsZWFzZShzZWxmLCBleGl0X29uX3JlbGVhc2UpOgoJCXNlbGYuZXhpdF9vbl9y ZWxlYXNlID0gZXhpdF9vbl9yZWxlYXNlCgoJZGVmIGRlZmF1bHRfY29uZmlndXJhdGlvbihzZWxm LCBjb25maWd1cmF0aW9uKToKCQlzZWxmLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uCgoJ QGRidXMuc2VydmljZS5tZXRob2QoIm9yZy5ibHVlei5NZWRpYUVuZHBvaW50IiwJaW5fc2lnbmF0 dXJlPSIiLCBvdXRfc2lnbmF0dXJlPSIiKQoJZGVmIFJlbGVhc2Uoc2VsZik6CgkJcHJpbnQgIlJl bGVhc2UiCgkJI2lmIHNlbGYuZXhpdF9vbl9yZWxlYXNlOgoJCSMJbWFpbmxvb3AucXVpdCgpCgkJ cmV0dXJuCgoJQGRidXMuc2VydmljZS5tZXRob2QoIm9yZy5ibHVlei5NZWRpYUVuZHBvaW50IiwJ aW5fc2lnbmF0dXJlPSIiLCBvdXRfc2lnbmF0dXJlPSIiKQoJZGVmIENsZWFyQ29uZmlndXJhdGlv bihzZWxmKToKCQlwcmludCAiQ2xlYXJDb25maWd1cmF0aW9uIgoJCXJldHVybgoKCUBkYnVzLnNl cnZpY2UubWV0aG9kKCJvcmcuYmx1ZXouTWVkaWFFbmRwb2ludCIsCWluX3NpZ25hdHVyZT0ib2F5 Iiwgb3V0X3NpZ25hdHVyZT0iIikKCWRlZiBTZXRDb25maWd1cmF0aW9uKHNlbGYsIHRyYW5zcG9y dCwgY29uZmlnKToKCQlwcmludCAiU2V0Q29uZmlndXJhdGlvbiAoJXMsICVzKSIgJSAodHJhbnNw b3J0LCBjb25maWcpCgkJbWVkaWFfdHJhbnNwb3J0ID0gZGJ1cy5JbnRlcmZhY2UoYnVzLmdldF9v YmplY3QoIm9yZy5ibHVleiIsIHRyYW5zcG9ydCksICJvcmcuYmx1ZXouTWVkaWFUcmFuc3BvcnQi KQoJCW1lZGlhX3RyYW5zcG9ydC5BY3F1aXJlKCJydyIsIHJlcGx5X2hhbmRsZXI9YWNxdWlyZV9j YiwgZXJyb3JfaGFuZGxlcj1hY3F1aXJlX2Vycm9yKQoJCXJldHVybgoKCUBkYnVzLnNlcnZpY2Uu bWV0aG9kKCJvcmcuYmx1ZXouTWVkaWFFbmRwb2ludCIsCWluX3NpZ25hdHVyZT0iYXkiLCBvdXRf c2lnbmF0dXJlPSJheSIpCglkZWYgU2VsZWN0Q29uZmlndXJhdGlvbihzZWxmLCBjYXBzKToKCQlw cmludCAiU2VsZWN0Q29uZmlndXJhdGlvbiAoJXMpIiAlIChjYXBzKQoJCXJldHVybiBzZWxmLmNv bmZpZ3VyYXRpb24KCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CglpZiBsZW4oc3lzLmFyZ3Yp IDwgMzoKCQlwcmludCAidXNhZ2U6ICVzIGhjaVggaGNpWCIgJSAoc3lzLmFyZ3ZbMF0pCgkJc3lz LmV4aXQoMSkKCglkYnVzLm1haW5sb29wLmdsaWIuREJ1c0dNYWluTG9vcChzZXRfYXNfZGVmYXVs dD1UcnVlKQoKCWJ1cyA9IGRidXMuU3lzdGVtQnVzKCkKCW1hbmFnZXIgPSBkYnVzLkludGVyZmFj ZShidXMuZ2V0X29iamVjdCgib3JnLmJsdWV6IiwgIi8iKSwgIm9yZy5ibHVlei5NYW5hZ2VyIikK CglwYXRoMSA9IG1hbmFnZXIuRmluZEFkYXB0ZXIoc3lzLmFyZ3ZbMV0pCgltZWRpYTEgPSBkYnVz LkludGVyZmFjZShidXMuZ2V0X29iamVjdCgib3JnLmJsdWV6IiwgcGF0aDEpLCAib3JnLmJsdWV6 Lk1lZGlhIikKCXBhdGgxID0gIi90ZXN0L2VuZHBvaW50MSIKCWVuZHBvaW50MSA9IEVuZHBvaW50 KGJ1cywgcGF0aDEpCgkKCXBhdGgyID0gbWFuYWdlci5GaW5kQWRhcHRlcihzeXMuYXJndlsyXSkK CW1lZGlhMiA9IGRidXMuSW50ZXJmYWNlKGJ1cy5nZXRfb2JqZWN0KCJvcmcuYmx1ZXoiLCBwYXRo MiksICJvcmcuYmx1ZXouTWVkaWEiKQoJcGF0aDIgPSAiL3Rlc3QvZW5kcG9pbnQyIgoJZW5kcG9p bnQyID0gRW5kcG9pbnQoYnVzLCBwYXRoMikKCglwcm9wZXJ0aWVzID0gZGJ1cy5EaWN0aW9uYXJ5 KHsgIlVVSUQiIDogSEZQX0FHX1VVSUQsICJDb2RlYyIgOiBQQ01fQ09ERUMsICJDYXBhYmlsaXRp ZXMiIDogIFBDTV9DT05GSUdVUkFUSU9OIH0pCglwcmludCBwcm9wZXJ0aWVzCgoJZW5kcG9pbnQx LmRlZmF1bHRfY29uZmlndXJhdGlvbihkYnVzLkFycmF5KFtdKSkKCWVuZHBvaW50Mi5kZWZhdWx0 X2NvbmZpZ3VyYXRpb24oZGJ1cy5BcnJheShbXSkpCgoJbWVkaWExLlJlZ2lzdGVyRW5kcG9pbnQo cGF0aDEsIHByb3BlcnRpZXMpCgltZWRpYTIuUmVnaXN0ZXJFbmRwb2ludChwYXRoMiwgcHJvcGVy dGllcykKCgltYWlubG9vcCA9IGdvYmplY3QuTWFpbkxvb3AoKQoJbWFpbmxvb3AucnVuKCkKCg== --=====================_1486984==_--