Return-Path: MIME-Version: 1.0 In-Reply-To: References: Date: Wed, 2 Mar 2016 12:16:35 +0100 Message-ID: Subject: Fwd: GATT server example issues in BlueZ From: Ivan Deviatkin To: linux-bluetooth@vger.kernel.org Content-Type: multipart/mixed; boundary=001a11c17e78d8b90a052d0f038a Sender: linux-bluetooth-owner@vger.kernel.org List-ID: --001a11c17e78d8b90a052d0f038a Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Dears, I am working on GATT server application and would like to use BlueZ for tha= t. Unfortunately, I have faced different issues during trying to establish working GATT server from examples provided by Bluez. First of all, I have tried to run gatt_example plugin from Bluez package in Ubuntu environment (14.04 LTS 32 bit and 15.10 64 bit). For that I have rebuild from source 5.37 (Ubuntu 14.04, default BlueZ - 4.x) and 5.35 (Ubuntu 15.10 - default Bluez 5.35) with: $ ./configure --prefix=3D/usr --mandir=3D/usr/share/man --sysconfdir=3D/etc --localstatedir=3D/var --enable-experimental --enable-debug --enable-maintainer-mode --with-systemdsystemunitdir=3D/lib/systemd/system --with-systemduserunitdir=3D/usr/lib/systemd And I have ran "bluetoothd" (previously configured my Bluetooth dongle Cirago BTA8000) via: $ sudo ./bluetoothd --plugin=3Dgatt_example -nEd To communicate to my Linux environment I have used Android Nexus 6 with "BLE Scanner" application (I have checked also with other applications - result the same). However it works as expected only for version 5.27. Starting from 5.28 till latest 5.37 it does not work to me. Logs shows issue: "Not enough free handles to register service" (See logs attached). It looks similar to one mentioned here - http://stackoverflow.com/questions/29891254/bluez-5-30-not-enough-free-hand= les-to-register-service-error-in-starting-blue. I have checked this link, and can see, that method which adding servers to "servers glist" btd_adapter_gatt_server_start() is called in 5.27 but not called in 5.37 at all. Additionally I have checked python example "example-gatt-server" from \tests - it reports that GATT server is running but in bluetoothd logs still the same issue. Also I have tried to work with BlueZ D-Bus interface (experimental) but I can see that some methods used during registering of external service via D-Bus are not fully implemented yet, see example (bluez 5.37/tools/gatt_service, line 414): =E2=80=9C dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, "{sv}", &dict); /* TODO: Add options dictionary */ <-- it means what it is not finished, right? =E2=80=9D It seems to me, that without passing dictionary it is impossible to register external service. Because dictionary includes information about characteristics of service. May I kindly ask you to clarify to me next: - Should I apply manual fix (call of btd_adapter_gatt_server_start() method or some other way of adding server to list) for that in Bluez 5.37 source? If "yes" what is the proper place to do that from design point of view? - What is recommended (and working) example in BlueZ package to run GATT server? - What is recommended code to follow as example/sample for my own GATT server application? - If I would like to participate in development of BlueZ (http://git.kernel.org/cgit/bluetooth/bluez.git) who is the right person to get latest GATT serevr status and ask design questions, to apply fixes in proper place? BR, Ivan --001a11c17e78d8b90a052d0f038a Content-Type: application/octet-stream; name="log.log" Content-Disposition: attachment; filename="log.log" Content-Transfer-Encoding: base64 X-Attachment-Id: f_ilaqyi6z0 aWRldmlhdGtpbkBpZGV2aWF0a2luOi91c3IvbGliZXhlYy9ibHVldG9vdGgkIGhjaWNvbmZpZw0K aGNpMDoJVHlwZTogQlIvRURSICBCdXM6IFVTQg0KCUJEIEFkZHJlc3M6IDgwOjAwOjBCOkJEOjFD OkU4ICBBQ0wgTVRVOiAzMTA6MTAgIFNDTyBNVFU6IDY0OjgNCglET1dOIA0KCVJYIGJ5dGVzOjEy ODAgYWNsOjAgc2NvOjAgZXZlbnRzOjgyIGVycm9yczowDQoJVFggYnl0ZXM6MjE5OSBhY2w6MCBz Y286MCBjb21tYW5kczo4MiBlcnJvcnM6MA0KDQppZGV2aWF0a2luQGlkZXZpYXRraW46L3Vzci9s aWJleGVjL2JsdWV0b290aCQgc3VkbyBoY2ljb25maWcgaGNpMCByZXNldA0KaWRldmlhdGtpbkBp ZGV2aWF0a2luOi91c3IvbGliZXhlYy9ibHVldG9vdGgkIHN1ZG8gaGNpY29uZmlnIGhjaTAgcHNj YW4NCmlkZXZpYXRraW5AaWRldmlhdGtpbjovdXNyL2xpYmV4ZWMvYmx1ZXRvb3RoJCBzdWRvIGhj aWNvbmZpZyBoY2kwIGxlYWR2DQppZGV2aWF0a2luQGlkZXZpYXRraW46L3Vzci9saWJleGVjL2Js dWV0b290aCQgaGNpY29uZmlnDQpoY2kwOglUeXBlOiBCUi9FRFIgIEJ1czogVVNCDQoJQkQgQWRk cmVzczogODA6MDA6MEI6QkQ6MUM6RTggIEFDTCBNVFU6IDMxMDoxMCAgU0NPIE1UVTogNjQ6OA0K CVVQIFJVTk5JTkcgUFNDQU4gDQoJUlggYnl0ZXM6MTkwOCBhY2w6MCBzY286MCBldmVudHM6MTIx IGVycm9yczowDQoJVFggYnl0ZXM6MjkyNyBhY2w6MCBzY286MCBjb21tYW5kczoxMjEgZXJyb3Jz OjANCg0KaWRldmlhdGtpbkBpZGV2aWF0a2luOi91c3IvbGliZXhlYy9ibHVldG9vdGgkIHN1ZG8g Li9ibHVldG9vdGhkIC0tcGx1Z2luPWdhdHRfZXhhbXBsZSAtbkVkDQpibHVldG9vdGhkWzE5NjFd OiBCbHVldG9vdGggZGFlbW9uIDUuMzUNCmJsdWV0b290aGRbMTk2MV06IHNyYy9tYWluLmM6cGFy c2VfY29uZmlnKCkgcGFyc2luZyBtYWluLmNvbmYNCmJsdWV0b290aGRbMTk2MV06IHNyYy9tYWlu LmM6cGFyc2VfY29uZmlnKCkgS2V5IGZpbGUgZG9lcyBub3QgaGF2ZSBrZXkgJ0Rpc2NvdmVyYWJs ZVRpbWVvdXQnIGluIGdyb3VwICdHZW5lcmFsJw0KYmx1ZXRvb3RoZFsxOTYxXTogc3JjL21haW4u YzpwYXJzZV9jb25maWcoKSBLZXkgZmlsZSBkb2VzIG5vdCBoYXZlIGtleSAnUGFpcmFibGVUaW1l b3V0JyBpbiBncm91cCAnR2VuZXJhbCcNCmJsdWV0b290aGRbMTk2MV06IHNyYy9tYWluLmM6cGFy c2VfY29uZmlnKCkgS2V5IGZpbGUgZG9lcyBub3QgaGF2ZSBrZXkgJ0F1dG9Db25uZWN0VGltZW91 dCcgaW4gZ3JvdXAgJ0dlbmVyYWwnDQpibHVldG9vdGhkWzE5NjFdOiBzcmMvbWFpbi5jOnBhcnNl X2NvbmZpZygpIEtleSBmaWxlIGRvZXMgbm90IGhhdmUga2V5ICdOYW1lJyBpbiBncm91cCAnR2Vu ZXJhbCcNCmJsdWV0b290aGRbMTk2MV06IHNyYy9tYWluLmM6cGFyc2VfY29uZmlnKCkgS2V5IGZp bGUgZG9lcyBub3QgaGF2ZSBrZXkgJ0NsYXNzJyBpbiBncm91cCAnR2VuZXJhbCcNCmJsdWV0b290 aGRbMTk2MV06IHNyYy9tYWluLmM6cGFyc2VfY29uZmlnKCkgS2V5IGZpbGUgZG9lcyBub3QgaGF2 ZSBrZXkgJ0RldmljZUlEJyBpbiBncm91cCAnR2VuZXJhbCcNCmJsdWV0b290aGRbMTk2MV06IHNy Yy9tYWluLmM6cGFyc2VfY29uZmlnKCkgS2V5IGZpbGUgZG9lcyBub3QgaGF2ZSBrZXkgJ1JldmVy c2VTZXJ2aWNlRGlzY292ZXJ5JyBpbiBncm91cCAnR2VuZXJhbCcNCmJsdWV0b290aGRbMTk2MV06 IHNyYy9hZGFwdGVyLmM6YWRhcHRlcl9pbml0KCkgc2VuZGluZyByZWFkIHZlcnNpb24gY29tbWFu ZA0KYmx1ZXRvb3RoZFsxOTYxXTogU3RhcnRpbmcgU0RQIHNlcnZlcg0KYmx1ZXRvb3RoZFsxOTYx XTogc3JjL3NkcGQtc2VydmljZS5jOnJlZ2lzdGVyX2RldmljZV9pZCgpIEFkZGluZyBkZXZpY2Ug aWQgcmVjb3JkIGZvciAwMDAyOjFkNmI6MDI0NjowNTIzDQpibHVldG9vdGhkWzE5NjFdOiBzcmMv cGx1Z2luLmM6cGx1Z2luX2luaXQoKSBMb2FkaW5nIGJ1aWx0aW4gcGx1Z2lucw0KYmx1ZXRvb3Ro ZFsxOTYxXTogSWdub3JpbmcgKGNsaSkgaG9zdG5hbWUNCmJsdWV0b290aGRbMTk2MV06IElnbm9y aW5nIChjbGkpIHdpaW1vdGUNCmJsdWV0b290aGRbMTk2MV06IElnbm9yaW5nIChjbGkpIGF1dG9w YWlyDQpibHVldG9vdGhkWzE5NjFdOiBJZ25vcmluZyAoY2xpKSBwb2xpY3kNCmJsdWV0b290aGRb MTk2MV06IHNyYy9wbHVnaW4uYzphZGRfcGx1Z2luKCkgTG9hZGluZyBnYXR0X2V4YW1wbGUgcGx1 Z2luDQpibHVldG9vdGhkWzE5NjFdOiBJZ25vcmluZyAoY2xpKSBuZWFyZA0KYmx1ZXRvb3RoZFsx OTYxXTogSWdub3JpbmcgKGNsaSkgc2FwDQpibHVldG9vdGhkWzE5NjFdOiBJZ25vcmluZyAoY2xp KSBhMmRwDQpibHVldG9vdGhkWzE5NjFdOiBJZ25vcmluZyAoY2xpKSBhdnJjcA0KYmx1ZXRvb3Ro ZFsxOTYxXTogSWdub3JpbmcgKGNsaSkgbmV0d29yaw0KYmx1ZXRvb3RoZFsxOTYxXTogSWdub3Jp bmcgKGNsaSkgaW5wdXQNCmJsdWV0b290aGRbMTk2MV06IElnbm9yaW5nIChjbGkpIGhvZw0KYmx1 ZXRvb3RoZFsxOTYxXTogSWdub3JpbmcgKGNsaSkgaGVhbHRoDQpibHVldG9vdGhkWzE5NjFdOiBJ Z25vcmluZyAoY2xpKSBnYXANCmJsdWV0b290aGRbMTk2MV06IElnbm9yaW5nIChjbGkpIHNjYW5w YXJhbQ0KYmx1ZXRvb3RoZFsxOTYxXTogSWdub3JpbmcgKGNsaSkgZGV2aWNlaW5mbw0KYmx1ZXRv b3RoZFsxOTYxXTogSWdub3JpbmcgKGNsaSkgYWxlcnQNCmJsdWV0b290aGRbMTk2MV06IElnbm9y aW5nIChjbGkpIHRpbWUNCmJsdWV0b290aGRbMTk2MV06IElnbm9yaW5nIChjbGkpIHByb3hpbWl0 eQ0KYmx1ZXRvb3RoZFsxOTYxXTogSWdub3JpbmcgKGNsaSkgdGhlcm1vbWV0ZXINCmJsdWV0b290 aGRbMTk2MV06IElnbm9yaW5nIChjbGkpIGhlYXJ0cmF0ZQ0KYmx1ZXRvb3RoZFsxOTYxXTogSWdu b3JpbmcgKGNsaSkgY3ljbGluZ3NwZWVkDQpibHVldG9vdGhkWzE5NjFdOiBzcmMvcGx1Z2luLmM6 cGx1Z2luX2luaXQoKSBMb2FkaW5nIHBsdWdpbnMgL2hvbWUvaWRldmlhdGtpbi9wcm9qZWN0cy9i bHVlei01LjM1L3BsdWdpbnMvLmxpYnMNCmJsdWV0b290aGRbMTk2MV06IElnbm9yaW5nIChjbGkp IGV4dGVybmFsX2R1bW15DQpibHVldG9vdGhkWzE5NjFdOiBzcmMvbWFpbi5jOm1haW4oKSBFbnRl cmluZyBtYWluIGxvb3ANCmJsdWV0b290aGRbMTk2MV06IHNyYy9yZmtpbGwuYzpyZmtpbGxfZXZl bnQoKSBSRktJTEwgZXZlbnQgaWR4IDAgdHlwZSAyIG9wIDAgc29mdCAwIGhhcmQgMA0KYmx1ZXRv b3RoZFsxOTYxXTogQmx1ZXRvb3RoIG1hbmFnZW1lbnQgaW50ZXJmYWNlIDEuMTAgaW5pdGlhbGl6 ZWQNCmJsdWV0b290aGRbMTk2MV06IHNyYy9hZGFwdGVyLmM6cmVhZF92ZXJzaW9uX2NvbXBsZXRl KCkgc2VuZGluZyByZWFkIHN1cHBvcnRlZCBjb21tYW5kcyBjb21tYW5kDQpibHVldG9vdGhkWzE5 NjFdOiBzcmMvYWRhcHRlci5jOnJlYWRfdmVyc2lvbl9jb21wbGV0ZSgpIHNlbmRpbmcgcmVhZCBp bmRleCBsaXN0IGNvbW1hbmQNCmJsdWV0b290aGRbMTk2MV06IHNyYy9hZGFwdGVyLmM6cmVhZF9j b21tYW5kc19jb21wbGV0ZSgpIE51bWJlciBvZiBjb21tYW5kczogNjENCmJsdWV0b290aGRbMTk2 MV06IHNyYy9hZGFwdGVyLmM6cmVhZF9jb21tYW5kc19jb21wbGV0ZSgpIE51bWJlciBvZiBldmVu dHM6IDM0DQpibHVldG9vdGhkWzE5NjFdOiBzcmMvYWRhcHRlci5jOnJlYWRfY29tbWFuZHNfY29t cGxldGUoKSBlbmFibGluZyBrZXJuZWwtc2lkZSBjb25uZWN0aW9uIGNvbnRyb2wNCmJsdWV0b290 aGRbMTk2MV06IHNyYy9hZGFwdGVyLmM6cmVhZF9pbmRleF9saXN0X2NvbXBsZXRlKCkgTnVtYmVy IG9mIGNvbnRyb2xsZXJzOiAxDQpibHVldG9vdGhkWzE5NjFdOiBzcmMvYWRhcHRlci5jOnJlYWRf aW5kZXhfbGlzdF9jb21wbGV0ZSgpIEZvdW5kIGluZGV4IDANCmJsdWV0b290aGRbMTk2MV06IHNy Yy9hZGFwdGVyLmM6aW5kZXhfYWRkZWQoKSBpbmRleCAwDQpibHVldG9vdGhkWzE5NjFdOiBzcmMv YWRhcHRlci5jOmJ0ZF9hZGFwdGVyX25ldygpIFN5c3RlbSBuYW1lOiBCbHVlWiA1LjM1DQpibHVl dG9vdGhkWzE5NjFdOiBzcmMvYWRhcHRlci5jOmJ0ZF9hZGFwdGVyX25ldygpIE1ham9yIGNsYXNz OiAwDQpibHVldG9vdGhkWzE5NjFdOiBzcmMvYWRhcHRlci5jOmJ0ZF9hZGFwdGVyX25ldygpIE1p bm9yIGNsYXNzOiAwDQpibHVldG9vdGhkWzE5NjFdOiBzcmMvYWRhcHRlci5jOmJ0ZF9hZGFwdGVy X25ldygpIE1vZGFsaWFzOiB1c2I6djFENkJwMDI0NmQwNTIzDQpibHVldG9vdGhkWzE5NjFdOiBz cmMvYWRhcHRlci5jOmJ0ZF9hZGFwdGVyX25ldygpIERpc2NvdmVyYWJsZSB0aW1lb3V0OiAxODAg c2Vjb25kcw0KYmx1ZXRvb3RoZFsxOTYxXTogc3JjL2FkYXB0ZXIuYzpidGRfYWRhcHRlcl9uZXco KSBQYWlyYWJsZSB0aW1lb3V0OiAwIHNlY29uZHMNCmJsdWV0b290aGRbMTk2MV06IHNyYy9hZGFw dGVyLmM6aW5kZXhfYWRkZWQoKSBzZW5kaW5nIHJlYWQgaW5mbyBjb21tYW5kIGZvciBpbmRleCAw DQpibHVldG9vdGhkWzE5NjFdOiBzcmMvYWRhcHRlci5jOnJlYWRfaW5mb19jb21wbGV0ZSgpIGlu ZGV4IDAgc3RhdHVzIDB4MDANCmJsdWV0b290aGRbMTk2MV06IHNyYy9hZGFwdGVyLmM6Y2xlYXJf dXVpZHMoKSBzZW5kaW5nIGNsZWFyIHV1aWRzIGNvbW1hbmQgZm9yIGluZGV4IDANCmJsdWV0b290 aGRbMTk2MV06IHNyYy9hZGFwdGVyLmM6Y2xlYXJfZGV2aWNlcygpIHNlbmRpbmcgY2xlYXIgZGV2 aWNlcyBjb21tYW5kIGZvciBpbmRleCAwDQpibHVldG9vdGhkWzE5NjFdOiBzcmMvZ2F0dC1kYXRh YmFzZS5jOmJ0ZF9nYXR0X2RhdGFiYXNlX25ldygpIEdBVFQgTWFuYWdlciByZWdpc3RlcmVkIGZv ciBhZGFwdGVyOiAvb3JnL2JsdWV6L2hjaTANCmJsdWV0b290aGRbMTk2MV06IHNyYy9hZGFwdGVy LmM6YWRhcHRlcl9zZXJ2aWNlX2FkZCgpIC9vcmcvYmx1ZXovaGNpMA0KYmx1ZXRvb3RoZFsxOTYx XTogc3JjL3NkcGQtc2VydmljZS5jOmFkZF9yZWNvcmRfdG9fc2VydmVyKCkgQWRkaW5nIHJlY29y ZCB3aXRoIGhhbmRsZSAweDEwMDAxDQpibHVldG9vdGhkWzE5NjFdOiBzcmMvc2RwZC1zZXJ2aWNl LmM6YWRkX3JlY29yZF90b19zZXJ2ZXIoKSBSZWNvcmQgcGF0dGVybiBVVUlEIDAwMDAwMDA3LTAw MDAtMTAwMC04MDAwLTAwODA1ZjkNCmJsdWV0b290aGRbMTk2MV06IHNyYy9zZHBkLXNlcnZpY2Uu YzphZGRfcmVjb3JkX3RvX3NlcnZlcigpIFJlY29yZCBwYXR0ZXJuIFVVSUQgMDAwMDAxMDAtMDAw MC0xMDAwLTgwMDAtMDA4MDVmOQ0KYmx1ZXRvb3RoZFsxOTYxXTogc3JjL3NkcGQtc2VydmljZS5j OmFkZF9yZWNvcmRfdG9fc2VydmVyKCkgUmVjb3JkIHBhdHRlcm4gVVVJRCAwMDAwMTAwMi0wMDAw LTEwMDAtODAwMC0wMDgwNWY5DQpibHVldG9vdGhkWzE5NjFdOiBzcmMvc2RwZC1zZXJ2aWNlLmM6 YWRkX3JlY29yZF90b19zZXJ2ZXIoKSBSZWNvcmQgcGF0dGVybiBVVUlEIDAwMDAxODAwLTAwMDAt MTAwMC04MDAwLTAwODA1ZjkNCmJsdWV0b290aGRbMTk2MV06IHNyYy9hZGFwdGVyLmM6YWRhcHRl cl9zZXJ2aWNlX2luc2VydCgpIC9vcmcvYmx1ZXovaGNpMA0KYmx1ZXRvb3RoZFsxOTYxXTogc3Jj L2FkYXB0ZXIuYzphZGRfdXVpZCgpIHNlbmRpbmcgYWRkIHV1aWQgY29tbWFuZCBmb3IgaW5kZXgg MA0KYmx1ZXRvb3RoZFsxOTYxXTogc3JjL2dhdHQtZGF0YWJhc2UuYzpnYXR0X2RiX3NlcnZpY2Vf YWRkZWQoKSBHQVRUIFNlcnZpY2UgYWRkZWQgdG8gbG9jYWwgZGF0YWJhc2UNCmJsdWV0b290aGRb MTk2MV06IEZhaWxlZCB0byBvYnRhaW4gaGFuZGxlcyBmb3IgIlNlcnZpY2UgQ2hhbmdlZCIgY2hh cmFjdGVyaXN0aWMNCmJsdWV0b290aGRbMTk2MV06IHNyYy9hZGFwdGVyLmM6YWRhcHRlcl9zZXJ2 aWNlX2FkZCgpIC9vcmcvYmx1ZXovaGNpMA0KYmx1ZXRvb3RoZFsxOTYxXTogc3JjL3NkcGQtc2Vy dmljZS5jOmFkZF9yZWNvcmRfdG9fc2VydmVyKCkgQWRkaW5nIHJlY29yZCB3aXRoIGhhbmRsZSAw eDEwMDAyDQpibHVldG9vdGhkWzE5NjFdOiBzcmMvc2RwZC1zZXJ2aWNlLmM6YWRkX3JlY29yZF90 b19zZXJ2ZXIoKSBSZWNvcmQgcGF0dGVybiBVVUlEIDAwMDAwMDA3LTAwMDAtMTAwMC04MDAwLTAw ODA1ZjkNCmJsdWV0b290aGRbMTk2MV06IHNyYy9zZHBkLXNlcnZpY2UuYzphZGRfcmVjb3JkX3Rv X3NlcnZlcigpIFJlY29yZCBwYXR0ZXJuIFVVSUQgMDAwMDAxMDAtMDAwMC0xMDAwLTgwMDAtMDA4 MDVmOQ0KYmx1ZXRvb3RoZFsxOTYxXTogc3JjL3NkcGQtc2VydmljZS5jOmFkZF9yZWNvcmRfdG9f c2VydmVyKCkgUmVjb3JkIHBhdHRlcm4gVVVJRCAwMDAwMTAwMi0wMDAwLTEwMDAtODAwMC0wMDgw NWY5DQpibHVldG9vdGhkWzE5NjFdOiBzcmMvc2RwZC1zZXJ2aWNlLmM6YWRkX3JlY29yZF90b19z ZXJ2ZXIoKSBSZWNvcmQgcGF0dGVybiBVVUlEIDAwMDAxODAxLTAwMDAtMTAwMC04MDAwLTAwODA1 ZjkNCmJsdWV0b290aGRbMTk2MV06IHNyYy9hZGFwdGVyLmM6YWRhcHRlcl9zZXJ2aWNlX2luc2Vy dCgpIC9vcmcvYmx1ZXovaGNpMA0KYmx1ZXRvb3RoZFsxOTYxXTogc3JjL2FkYXB0ZXIuYzphZGRf dXVpZCgpIHNlbmRpbmcgYWRkIHV1aWQgY29tbWFuZCBmb3IgaW5kZXggMA0KYmx1ZXRvb3RoZFsx OTYxXTogc3JjL2dhdHQtZGF0YWJhc2UuYzpnYXR0X2RiX3NlcnZpY2VfYWRkZWQoKSBHQVRUIFNl cnZpY2UgYWRkZWQgdG8gbG9jYWwgZGF0YWJhc2UNCmJsdWV0b290aGRbMTk2MV06IHNyYy9hZHZl cnRpc2luZy5jOmJ0ZF9hZHZlcnRpc2luZ19tYW5hZ2VyX25ldygpIExFIEFkdmVydGlzaW5nIE1h bmFnZXIgY3JlYXRlZCBmb3IgYWRhcHRlcjogL29yZy9ibHVlei9oY2kwDQpibHVldG9vdGhkWzE5 NjFdOiBOb3QgZW5vdWdoIGZyZWUgaGFuZGxlcyB0byByZWdpc3RlciBzZXJ2aWNlDQpibHVldG9v dGhkWzE5NjFdOiBwbHVnaW5zL2dhdHQtZXhhbXBsZS5jOmdhdHRfZXhhbXBsZV9hZGFwdGVyX3By b2JlKCkgQmF0dGVyeSBzZXJ2aWNlIGNvdWxkIG5vdCBiZSByZWdpc3RlcmVkDQpibHVldG9vdGhk WzE5NjFdOiBnYXR0LWV4YW1wbGUtYWRhcHRlci1kcml2ZXI6IElucHV0L291dHB1dCBlcnJvciAo NSkNCmJsdWV0b290aGRbMTk2MV06IHNyYy9hZGFwdGVyLmM6YnRkX2FkYXB0ZXJfdW5ibG9ja19h ZGRyZXNzKCkgaGNpMCAwMDowMDowMDowMDowMDowMA0KYmx1ZXRvb3RoZFsxOTYxXTogc3JjL2Fk YXB0ZXIuYzpnZXRfbHRrX2luZm8oKSA1Qzo1MTo4ODpBMzpEODpGNw0KYmx1ZXRvb3RoZFsxOTYx XTogc3JjL2RldmljZS5jOmRldmljZV9jcmVhdGVfZnJvbV9zdG9yYWdlKCkgYWRkcmVzcyA1Qzo1 MTo4ODpBMzpEODpGNw0KYmx1ZXRvb3RoZFsxOTYxXTogc3JjL2RldmljZS5jOmRldmljZV9uZXco KSBhZGRyZXNzIDVDOjUxOjg4OkEzOkQ4OkY3DQpibHVldG9vdGhkWzE5NjFdOiBzcmMvZGV2aWNl LmM6ZGV2aWNlX25ldygpIENyZWF0aW5nIGRldmljZSAvb3JnL2JsdWV6L2hjaTAvZGV2XzVDXzUx Xzg4X0EzX0Q4X0Y3DQpibHVldG9vdGhkWzE5NjFdOiBzcmMvZGV2aWNlLmM6YnRkX2RldmljZV9z ZXRfdGVtcG9yYXJ5KCkgdGVtcG9yYXJ5IDANCmJsdWV0b290aGRbMTk2MV06IHNyYy9hZGFwdGVy LmM6bG9hZF9saW5rX2tleXMoKSBoY2kwIGtleXMgMCBkZWJ1Z19rZXlzIDANCmJsdWV0b290aGRb MTk2MV06IHNyYy9hZGFwdGVyLmM6bG9hZF9sdGtzKCkgaGNpMCBrZXlzIDANCmJsdWV0b290aGRb MTk2MV06IHNyYy9hZGFwdGVyLmM6bG9hZF9pcmtzKCkgaGNpMCBpcmtzIDANCmJsdWV0b290aGRb MTk2MV06IHNyYy9hZGFwdGVyLmM6bG9hZF9jb25uX3BhcmFtcygpIGhjaTAgY29ubiBwYXJhbXMg MA0KYmx1ZXRvb3RoZFsxOTYxXTogc3JjL2RldmljZS5jOmRldmljZV9wcm9iZV9wcm9maWxlcygp IFByb2JpbmcgcHJvZmlsZXMgZm9yIGRldmljZSA1Qzo1MTo4ODpBMzpEODpGNw0KYmx1ZXRvb3Ro ZFsxOTYxXTogc3JjL2FkYXB0ZXIuYzpsb2FkX2Nvbm5lY3Rpb25zKCkgc2VuZGluZyBnZXQgY29u bmVjdGlvbnMgY29tbWFuZCBmb3IgaW5kZXggMA0KYmx1ZXRvb3RoZFsxOTYxXTogc3JjL2FkYXB0 ZXIuYzphZGFwdGVyX3NlcnZpY2VfaW5zZXJ0KCkgL29yZy9ibHVlei9oY2kwDQpibHVldG9vdGhk WzE5NjFdOiBzcmMvYWRhcHRlci5jOmFkZF91dWlkKCkgc2VuZGluZyBhZGQgdXVpZCBjb21tYW5k IGZvciBpbmRleCAwDQpibHVldG9vdGhkWzE5NjFdOiBzcmMvYWRhcHRlci5jOnNldF9kaWQoKSBo Y2kwIHNvdXJjZSAyIHZlbmRvciAxZDZiIHByb2R1Y3QgMjQ2IHZlcnNpb24gNTIzDQpibHVldG9v dGhkWzE5NjFdOiBzcmMvYWRhcHRlci5jOmFkYXB0ZXJfcmVnaXN0ZXIoKSBBZGFwdGVyIC9vcmcv Ymx1ZXovaGNpMCByZWdpc3RlcmVkDQpibHVldG9vdGhkWzE5NjFdOiBzcmMvYWRhcHRlci5jOnNl dF9kZXZfY2xhc3MoKSBzZW5kaW5nIHNldCBkZXZpY2UgY2xhc3MgY29tbWFuZCBmb3IgaW5kZXgg MA0KYmx1ZXRvb3RoZFsxOTYxXTogc3JjL2FkYXB0ZXIuYzpzZXRfbmFtZSgpIHNlbmRpbmcgc2V0 IGxvY2FsIG5hbWUgY29tbWFuZCBmb3IgaW5kZXggMA0KYmx1ZXRvb3RoZFsxOTYxXTogc3JjL2Fk YXB0ZXIuYzpzZXRfbW9kZSgpIHNlbmRpbmcgc2V0IG1vZGUgY29tbWFuZCBmb3IgaW5kZXggMA0K Ymx1ZXRvb3RoZFsxOTYxXTogc3JjL2FkYXB0ZXIuYzphZGFwdGVyX3N0YXJ0KCkgYWRhcHRlciAv b3JnL2JsdWV6L2hjaTAgaGFzIGJlZW4gZW5hYmxlZA0KYmx1ZXRvb3RoZFsxOTYxXTogc3JjL2Fk YXB0ZXIuYzp0cmlnZ2VyX3Bhc3NpdmVfc2Nhbm5pbmcoKSANCmJsdWV0b290aGRbMTk2MV06IHNy Yy9hZGFwdGVyLmM6YWRkX3doaXRlbGlzdF9jb21wbGV0ZSgpIDVDOjUxOjg4OkEzOkQ4OkY3IGFk ZGVkIHRvIGtlcm5lbCB3aGl0ZWxpc3QNCmJsdWV0b290aGRbMTk2MV06IHNyYy9hZGFwdGVyLmM6 bG9hZF9saW5rX2tleXNfY29tcGxldGUoKSBsaW5rIGtleXMgbG9hZGVkIGZvciBoY2kwDQpibHVl dG9vdGhkWzE5NjFdOiBzcmMvYWRhcHRlci5jOmxvYWRfbHRrc19jb21wbGV0ZSgpIExUS3MgbG9h ZGVkIGZvciBoY2kwDQpibHVldG9vdGhkWzE5NjFdOiBzcmMvYWRhcHRlci5jOmxvYWRfaXJrc19j b21wbGV0ZSgpIElSS3MgbG9hZGVkIGZvciBoY2kwDQpibHVldG9vdGhkWzE5NjFdOiBzcmMvYWRh cHRlci5jOmxvYWRfY29ubl9wYXJhbXNfY29tcGxldGUoKSBDb25uZWN0aW9uIFBhcmFtZXRlcnMg bG9hZGVkIGZvciBoY2kwDQpibHVldG9vdGhkWzE5NjFdOiBzcmMvYWRhcHRlci5jOmdldF9jb25u ZWN0aW9uc19jb21wbGV0ZSgpIENvbm5lY3Rpb24gY291bnQ6IDANCmJsdWV0b290aGRbMTk2MV06 IHNyYy9wcm9maWxlLmM6cmVnaXN0ZXJfcHJvZmlsZSgpIHNlbmRlciA6MS41MA0KYmx1ZXRvb3Ro ZFsxOTYxXTogc3JjL3Byb2ZpbGUuYzpjcmVhdGVfZXh0KCkgQ3JlYXRlZCAiSGVhZHNldCBWb2lj ZSBnYXRld2F5Ig0KYmx1ZXRvb3RoZFsxOTYxXTogc3JjL3Byb2ZpbGUuYzpleHRfYWRhcHRlcl9w cm9iZSgpICJIZWFkc2V0IFZvaWNlIGdhdGV3YXkiIHByb2JlZA0KYmx1ZXRvb3RoZFsxOTYxXTog c3JjL3Byb2ZpbGUuYzpleHRfc3RhcnRfc2VydmVycygpIEhlYWRzZXQgVm9pY2UgZ2F0ZXdheSBs aXN0ZW5pbmcgb24gY2hhbiAxMg0KYmx1ZXRvb3RoZFsxOTYxXTogc3JjL2FkYXB0ZXIuYzphZGFw dGVyX3NlcnZpY2VfYWRkKCkgL29yZy9ibHVlei9oY2kwDQpibHVldG9vdGhkWzE5NjFdOiBzcmMv c2RwZC1zZXJ2aWNlLmM6YWRkX3JlY29yZF90b19zZXJ2ZXIoKSBBZGRpbmcgcmVjb3JkIHdpdGgg aGFuZGxlIDB4MTAwMDMNCmJsdWV0b290aGRbMTk2MV06IHNyYy9zZHBkLXNlcnZpY2UuYzphZGRf cmVjb3JkX3RvX3NlcnZlcigpIFJlY29yZCBwYXR0ZXJuIFVVSUQgMDAwMDAwMDMtMDAwMC0xMDAw LTgwMDAtMDA4MDVmOQ0KYmx1ZXRvb3RoZFsxOTYxXTogc3JjL3NkcGQtc2VydmljZS5jOmFkZF9y ZWNvcmRfdG9fc2VydmVyKCkgUmVjb3JkIHBhdHRlcm4gVVVJRCAwMDAwMDEwMC0wMDAwLTEwMDAt ODAwMC0wMDgwNWY5DQpibHVldG9vdGhkWzE5NjFdOiBzcmMvc2RwZC1zZXJ2aWNlLmM6YWRkX3Jl Y29yZF90b19zZXJ2ZXIoKSBSZWNvcmQgcGF0dGVybiBVVUlEIDAwMDAxMDAyLTAwMDAtMTAwMC04 MDAwLTAwODA1ZjkNCmJsdWV0b290aGRbMTk2MV06IHNyYy9zZHBkLXNlcnZpY2UuYzphZGRfcmVj b3JkX3RvX3NlcnZlcigpIFJlY29yZCBwYXR0ZXJuIFVVSUQgMDAwMDExMDgtMDAwMC0xMDAwLTgw MDAtMDA4MDVmOQ0KYmx1ZXRvb3RoZFsxOTYxXTogc3JjL3NkcGQtc2VydmljZS5jOmFkZF9yZWNv cmRfdG9fc2VydmVyKCkgUmVjb3JkIHBhdHRlcm4gVVVJRCAwMDAwMTExMi0wMDAwLTEwMDAtODAw MC0wMDgwNWY5DQpibHVldG9vdGhkWzE5NjFdOiBzcmMvc2RwZC1zZXJ2aWNlLmM6YWRkX3JlY29y ZF90b19zZXJ2ZXIoKSBSZWNvcmQgcGF0dGVybiBVVUlEIDAwMDAxMjAzLTAwMDAtMTAwMC04MDAw LTAwODA1ZjkNCmJsdWV0b290aGRbMTk2MV06IHNyYy9hZGFwdGVyLmM6YWRhcHRlcl9zZXJ2aWNl X2luc2VydCgpIC9vcmcvYmx1ZXovaGNpMA0KYmx1ZXRvb3RoZFsxOTYxXTogc3JjL2FkYXB0ZXIu YzphZGRfdXVpZCgpIHNlbmRpbmcgYWRkIHV1aWQgY29tbWFuZCBmb3IgaW5kZXggMA0KYmx1ZXRv b3RoZFsxOTYxXTogc3JjL2FkYXB0ZXIuYzpuZXdfc2V0dGluZ3NfY2FsbGJhY2soKSBTZXR0aW5n czogMHgwMDAwMGFkMQ0KYmx1ZXRvb3RoZFsxOTYxXTogc3JjL2FkYXB0ZXIuYzpzZXR0aW5nc19j aGFuZ2VkKCkgQ2hhbmdlZCBzZXR0aW5nczogMHgwMDAwMDAwMg0K --001a11c17e78d8b90a052d0f038a--