From 6850379e13a14d173eda71686eaec14cbcc07d9d Mon Sep 17 00:00:00 2001 From: jason Date: Mon, 11 May 2026 08:07:51 -0500 Subject: [PATCH] chore: import from github.com/twx284558/ledcontrol --- .../java/android/serialport/SerialPort.java | 148 ++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 serialport/src/main/java/android/serialport/SerialPort.java diff --git a/serialport/src/main/java/android/serialport/SerialPort.java b/serialport/src/main/java/android/serialport/SerialPort.java new file mode 100644 index 0000000..29b0188 --- /dev/null +++ b/serialport/src/main/java/android/serialport/SerialPort.java @@ -0,0 +1,148 @@ +LyoKICogQ29weXJpZ2h0IDIwMDkgQ2VkcmljIFByaXNjYWwKICoKICogTGljZW5zZWQgdW5kZXIg +dGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAqIHlvdSBt +YXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5z +ZS4KICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqCiAqIGh0dHA6 +Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogKgogKiBVbmxlc3MgcmVxdWly +ZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAq +IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJ +UyIgQkFTSVMsCiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5E +LCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBz +cGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAqIGxpbWl0YXRpb25z +IHVuZGVyIHRoZSBMaWNlbnNlLgogKi8KCnBhY2thZ2UgYW5kcm9pZC5zZXJpYWxwb3J0OwoKaW1w +b3J0IGFuZHJvaWQudXRpbC5Mb2c7CmltcG9ydCBhbmRyb2lkeC5hbm5vdGF0aW9uLk5vbk51bGw7 +CmltcG9ydCBhbmRyb2lkeC5hbm5vdGF0aW9uLk51bGxhYmxlOwppbXBvcnQgamF2YS5pby5GaWxl +OwppbXBvcnQgamF2YS5pby5GaWxlRGVzY3JpcHRvcjsKaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0 +U3RyZWFtOwppbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwppbXBvcnQgamF2YS5pby5J +T0V4Y2VwdGlvbjsKaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CmltcG9ydCBqYXZhLmlvLk91 +dHB1dFN0cmVhbTsKCnB1YmxpYyBmaW5hbCBjbGFzcyBTZXJpYWxQb3J0IHsKCiAgICBwcml2YXRl +IHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlNlcmlhbFBvcnQiOwoKICAgIHB1YmxpYyBzdGF0 +aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfU1VfUEFUSCA9ICIvc3lzdGVtL2Jpbi9zdSI7CgogICAg +cHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHNTdVBhdGggPSBERUZBVUxUX1NVX1BBVEg7CiAgICBwcml2 +YXRlIEZpbGUgZGV2aWNlOwogICAgcHJpdmF0ZSBpbnQgYmF1ZHJhdGU7CiAgICBwcml2YXRlIGlu +dCBkYXRhQml0czsKICAgIHByaXZhdGUgaW50IHBhcml0eTsKICAgIHByaXZhdGUgaW50IHN0b3BC +aXRzOwogICAgcHJpdmF0ZSBpbnQgZmxhZ3M7CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIHN1IGJp +bmFyeSBwYXRoLCB0aGUgZGVmYXVsdCBzdSBiaW5hcnkgcGF0aCBpcyB7QGxpbmsgI0RFRkFVTFRf +U1VfUEFUSH0KICAgICAqCiAgICAgKiBAcGFyYW0gc3VQYXRoIHN1IGJpbmFyeSBwYXRoCiAgICAg +Ki8KICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRTdVBhdGgoQE51bGxhYmxlIFN0cmluZyBzdVBh +dGgpIHsKICAgICAgICBpZiAoc3VQYXRoID09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuOwog +ICAgICAgIH0KICAgICAgICBzU3VQYXRoID0gc3VQYXRoOwogICAgfQoKICAgIC8qKgogICAgICog +R2V0IHRoZSBzdSBiaW5hcnkgcGF0aAogICAgICoKICAgICAqIEByZXR1cm4KICAgICAqLwogICAg +QE5vbk51bGwKICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFN1UGF0aCgpIHsKICAgICAgICBy +ZXR1cm4gc1N1UGF0aDsKICAgIH0KCiAgICAvKgogICAgICogRG8gbm90IHJlbW92ZSBvciByZW5h +bWUgdGhlIGZpZWxkIG1GZDogaXQgaXMgdXNlZCBieSBuYXRpdmUgbWV0aG9kIGNsb3NlKCk7CiAg +ICAgKi8KICAgIHByaXZhdGUgRmlsZURlc2NyaXB0b3IgbUZkOwogICAgcHJpdmF0ZSBGaWxlSW5w +dXRTdHJlYW0gbUZpbGVJbnB1dFN0cmVhbTsKICAgIHByaXZhdGUgRmlsZU91dHB1dFN0cmVhbSBt +RmlsZU91dHB1dFN0cmVhbTsKCiAgICAvKioKICAgICAqIHNlcmlhbCBwb3J0CiAgICAgKgogICAg +ICogQHBhcmFtIGRldmljZSBzZXJpYWwgZGV2aWNlIGZpbGUKICAgICAqIEBwYXJhbSBiYXVkcmF0 +ZSBiYXVkIHJhdGUKICAgICAqIEBwYXJhbSBkYXRhQml0cyBkYXRhIGJpdHM7IGRlZmF1bHQgOCwg +b3B0aW9uYWwgdmFsdWUgaXMgNX44CiAgICAgKiBAcGFyYW0gcGFyaXR5IHBhcml0eTsgMDogbm8g +cGFyaXR5IChOT05FLCBkZWZhdWx0KTsgMTogb2RkIHBhcml0eSAoT0REKTsgMjogZXZlbiBwYXJp +dHkgKEVWRU4pCiAgICAgKiBAcGFyYW0gc3RvcEJpdHMgc3RvcCBiaXRzOyBkZWZhdWx0IDE7IDE6 +IDEgc3RvcCBiaXRzOyAyOiAyIHN0b3AgYml0cwogICAgICogQHBhcmFtIGZsYWdzIGRlZmF1bHQg +MAogICAgICogQHRocm93cyBTZWN1cml0eUV4Y2VwdGlvbgogICAgICogQHRocm93cyBJT0V4Y2Vw +dGlvbgogICAgICoKICAgICAqLwogICAgcHVibGljIFNlcmlhbFBvcnQoQE5vbk51bGwgRmlsZSBk +ZXZpY2UsIGludCBiYXVkcmF0ZSwgaW50IGRhdGFCaXRzLCBpbnQgcGFyaXR5LCBpbnQgc3RvcEJp +dHMsCiAgICAgICAgaW50IGZsYWdzKSB0aHJvd3MgU2VjdXJpdHlFeGNlcHRpb24sIElPRXhjZXB0 +aW9uIHsKCiAgICAgICAgdGhpcy5kZXZpY2UgPSBkZXZpY2U7CiAgICAgICAgdGhpcy5iYXVkcmF0 +ZSA9IGJhdWRyYXRlOwogICAgICAgIHRoaXMuZGF0YUJpdHMgPSBkYXRhQml0czsKICAgICAgICB0 +aGlzLnBhcml0eSA9IHBhcml0eTsKICAgICAgICB0aGlzLnN0b3BCaXRzID0gc3RvcEJpdHM7CiAg +ICAgICAgdGhpcy5mbGFncyA9IGZsYWdzOwoKICAgICAgICAvKiBDaGVjayBhY2Nlc3MgcGVybWlz +c2lvbiAqLwogICAgICAgIGlmICghZGV2aWNlLmNhblJlYWQoKSB8fCAhZGV2aWNlLmNhbldyaXRl +KCkpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIC8qIE1pc3NpbmcgcmVhZC93 +cml0ZSBwZXJtaXNzaW9uLCB0cnlpbmcgdG8gY2htb2QgdGhlIGZpbGUgKi8KICAgICAgICAgICAg +ICAgIFByb2Nlc3Mgc3U7CiAgICAgICAgICAgICAgICBzdSA9IFJ1bnRpbWUuZ2V0UnVudGltZSgp +LmV4ZWMoc1N1UGF0aCk7CiAgICAgICAgICAgICAgICBTdHJpbmcgY21kID0gImNobW9kIDY2NiAi +ICsgZGV2aWNlLmdldEFic29sdXRlUGF0aCgpICsgIlxuIiArICJleGl0XG4iOwogICAgICAgICAg +ICAgICAgc3UuZ2V0T3V0cHV0U3RyZWFtKCkud3JpdGUoY21kLmdldEJ5dGVzKCkpOwogICAgICAg +ICAgICAgICAgaWYgKChzdS53YWl0Rm9yKCkgIT0gMCkgfHwgIWRldmljZS5jYW5SZWFkKCkgfHwg +IWRldmljZS5jYW5Xcml0ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNlY3Vy +aXR5RXhjZXB0aW9uKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gY2F0Y2ggKEV4 +Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAg +ICAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXhjZXB0aW9uKCk7CiAgICAgICAgICAgIH0KICAg +ICAgICB9CgogICAgICAgIG1GZCA9IG9wZW4oZGV2aWNlLmdldEFic29sdXRlUGF0aCgpLCBiYXVk +cmF0ZSwgOCwgMCwgMSwgZmxhZ3MpOwogICAgICAgIGlmIChtRmQgPT0gbnVsbCkgewogICAgICAg +ICAgICBMb2cuZShUQUcsICJuYXRpdmUgb3BlbiByZXR1cm5zIG51bGwiKTsKICAgICAgICAgICAg +dGhyb3cgbmV3IElPRXhjZXB0aW9uKCk7CiAgICAgICAgfQogICAgICAgIG1GaWxlSW5wdXRTdHJl +YW0gPSBuZXcgRmlsZUlucHV0U3RyZWFtKG1GZCk7CiAgICAgICAgbUZpbGVPdXRwdXRTdHJlYW0g +PSBuZXcgRmlsZU91dHB1dFN0cmVhbShtRmQpOwogICAgfQoKICAgIC8qKgogICAgICogU2VyaWFs +IHBvcnQsIGRlZmF1bHQgOG4xCiAgICAgKgogICAgICogQHBhcmFtIGRldmljZSBzZXJpYWwgZGV2 +aWNlIGZpbGUKICAgICAqIEBwYXJhbSBiYXVkcmF0ZSBiYXVkIHJhdGUKICAgICAqIEB0aHJvd3Mg +U2VjdXJpdHlFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgSU9FeGNlcHRpb24KICAgICAqLwogICAg +cHVibGljIFNlcmlhbFBvcnQoQE5vbk51bGwgRmlsZSBkZXZpY2UsIGludCBiYXVkcmF0ZSkgdGhy +b3dzIFNlY3VyaXR5RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgdGhpcyhkZXZpY2Us +IGJhdWRyYXRlLCA4LCAwLCAxLCAwKTsKICAgIH0KCiAgICAvKioKICAgICAqIHNlcmlhbCBwb3J0 +CiAgICAgKgogICAgICogQHBhcmFtIGRldmljZSBzZXJpYWwgZGV2aWNlIGZpbGUKICAgICAqIEBw +YXJhbSBiYXVkcmF0ZSBiYXVkIHJhdGUKICAgICAqIEBwYXJhbSBkYXRhQml0cyBkYXRhIGJpdHM7 +IGRlZmF1bHQgOCwgb3B0aW9uYWwgdmFsdWUgaXMgNX44CiAgICAgKiBAcGFyYW0gcGFyaXR5IHBh +cml0eTsgMDogbm8gcGFyaXR5IChOT05FLCBkZWZhdWx0KTsgMTogb2RkIHBhcml0eSAoT0REKTsg +MjogZXZlbiBwYXJpdHkgKEVWRU4pCiAgICAgKiBAcGFyYW0gc3RvcEJpdHMgc3RvcCBiaXRzOyBk +ZWZhdWx0IDE7IDE6IDEgc3RvcCBiaXRzOyAyOiAyIHN0b3AgYml0cwogICAgICogQHRocm93cyBT +ZWN1cml0eUV4Y2VwdGlvbgogICAgICogQHRocm93cyBJT0V4Y2VwdGlvbgogICAgICovCiAgICBw +dWJsaWMgU2VyaWFsUG9ydChATm9uTnVsbCBGaWxlIGRldmljZSwgaW50IGJhdWRyYXRlLCBpbnQg +ZGF0YUJpdHMsIGludCBwYXJpdHksIGludCBzdG9wQml0cykKICAgICAgICB0aHJvd3MgU2VjdXJp +dHlFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICB0aGlzKGRldmljZSwgYmF1ZHJhdGUs +IGRhdGFCaXRzLCBwYXJpdHksIHN0b3BCaXRzLCAwKTsKICAgIH0KCiAgICAvLyBHZXR0ZXJzIGFu +ZCBzZXR0ZXJzCiAgICBATm9uTnVsbAogICAgcHVibGljIElucHV0U3RyZWFtIGdldElucHV0U3Ry +ZWFtKCkgewogICAgICAgIHJldHVybiBtRmlsZUlucHV0U3RyZWFtOwogICAgfQoKICAgIEBOb25O +dWxsCiAgICBwdWJsaWMgT3V0cHV0U3RyZWFtIGdldE91dHB1dFN0cmVhbSgpIHsKICAgICAgICBy +ZXR1cm4gbUZpbGVPdXRwdXRTdHJlYW07CiAgICB9CgogICAgLyoqIOS4suWPo+iuvuWkh+aWh+S7 +tiAqLwogICAgQE5vbk51bGwKICAgIHB1YmxpYyBGaWxlIGdldERldmljZSgpIHsKICAgICAgICBy +ZXR1cm4gZGV2aWNlOwogICAgfQoKICAgIC8qKiDms6LnibnnjocgKi8KICAgIHB1YmxpYyBpbnQg +Z2V0QmF1ZHJhdGUoKSB7CiAgICAgICAgcmV0dXJuIGJhdWRyYXRlOwogICAgfQoKICAgIC8qKiDm +lbDmja7kvY3vvJvpu5jorqQ4LOWPr+mAieWAvOS4ujV+OCAqLwogICAgcHVibGljIGludCBnZXRE +YXRhQml0cygpIHsKICAgICAgICByZXR1cm4gZGF0YUJpdHM7CiAgICB9CgogICAgLyoqIOWlh+WB +tuagoemqjO+8mzA65peg5qCh6aqM5L2NKE5PTkXvvIzpu5jorqQp77ybMTrlpYfmoKHpqozkvY0o +T0REKTsyOuWBtuagoemqjOS9jShFVkVOKSAqLwogICAgcHVibGljIGludCBnZXRQYXJpdHkoKSB7 +CiAgICAgICAgcmV0dXJuIHBhcml0eTsKICAgIH0KCiAgICAvKiog5YGc5q2i5L2N77yb6buY6K6k +Me+8mzE6MeS9jeWBnOatouS9je+8mzI6MuS9jeWBnOatouS9jSAqLwogICAgcHVibGljIGludCBn +ZXRTdG9wQml0cygpIHsKICAgICAgICByZXR1cm4gc3RvcEJpdHM7CiAgICB9CgogICAgcHVibGlj +IGludCBnZXRGbGFncygpIHsKICAgICAgICByZXR1cm4gZmxhZ3M7CiAgICB9CgogICAgLy8gSk5J +CiAgICBwcml2YXRlIG5hdGl2ZSBGaWxlRGVzY3JpcHRvciBvcGVuKFN0cmluZyBhYnNvbHV0ZVBh +dGgsIGludCBiYXVkcmF0ZSwgaW50IGRhdGFCaXRzLCBpbnQgcGFyaXR5LAogICAgICAgIGludCBz +dG9wQml0cywgaW50IGZsYWdzKTsKCiAgICBwdWJsaWMgbmF0aXZlIHZvaWQgY2xvc2UoKTsKCiAg +ICAvKiog5YWz6Zet5rWB5ZKM5Liy5Y+j77yM5bey57uPdHJ5LWNhdGNoICovCiAgICBwdWJsaWMg +dm9pZCB0cnlDbG9zZSgpIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBtRmlsZUlucHV0U3Ry +ZWFtLmNsb3NlKCk7CiAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewogICAgICAgICAg +ICAvL2UucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgfQoKICAgICAgICB0cnkgewogICAgICAg +ICAgICBtRmlsZU91dHB1dFN0cmVhbS5jbG9zZSgpOwogICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0 +aW9uIGUpIHsKICAgICAgICAgICAgLy9lLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgIH0KCiAg +ICAgICAgdHJ5IHsKICAgICAgICAgICAgY2xvc2UoKTsKICAgICAgICB9IGNhdGNoIChFeGNlcHRp +b24gZSkgewogICAgICAgICAgICAvL2UucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgfQogICAg +fQoKICAgIHN0YXRpYyB7CiAgICAgICAgU3lzdGVtLmxvYWRMaWJyYXJ5KCJzZXJpYWxfcG9ydCIp +OwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgQnVpbGRlciBuZXdCdWlsZGVyKEZpbGUgZGV2aWNl +LCBpbnQgYmF1ZHJhdGUpIHsKICAgICAgICByZXR1cm4gbmV3IEJ1aWxkZXIoZGV2aWNlLCBiYXVk +cmF0ZSk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBCdWlsZGVyIG5ld0J1aWxkZXIoU3RyaW5n +IGRldmljZVBhdGgsIGludCBiYXVkcmF0ZSkgewogICAgICAgIHJldHVybiBuZXcgQnVpbGRlcihk +ZXZpY2VQYXRoLCBiYXVkcmF0ZSk7CiAgICB9CgogICAgcHVibGljIGZpbmFsIHN0YXRpYyBjbGFz +cyBCdWlsZGVyIHsKCiAgICAgICAgcHJpdmF0ZSBGaWxlIGRldmljZTsKICAgICAgICBwcml2YXRl +IGludCBiYXVkcmF0ZTsKICAgICAgICBwcml2YXRlIGludCBkYXRhQml0cyA9IDg7CiAgICAgICAg +cHJpdmF0ZSBpbnQgcGFyaXR5ID0gMDsKICAgICAgICBwcml2YXRlIGludCBzdG9wQml0cyA9IDE7 +CiAgICAgICAgcHJpdmF0ZSBpbnQgZmxhZ3MgPSAwOwoKICAgICAgICBwcml2YXRlIEJ1aWxkZXIo +RmlsZSBkZXZpY2UsIGludCBiYXVkcmF0ZSkgewogICAgICAgICAgICB0aGlzLmRldmljZSA9IGRl +dmljZTsKICAgICAgICAgICAgdGhpcy5iYXVkcmF0ZSA9IGJhdWRyYXRlOwogICAgICAgIH0KCiAg +ICAgICAgcHJpdmF0ZSBCdWlsZGVyKFN0cmluZyBkZXZpY2VQYXRoLCBpbnQgYmF1ZHJhdGUpIHsK +ICAgICAgICAgICAgdGhpcyhuZXcgRmlsZShkZXZpY2VQYXRoKSwgYmF1ZHJhdGUpOwogICAgICAg +IH0KCiAgICAgICAgLyoqCiAgICAgICAgICog5pWw5o2u5L2NCiAgICAgICAgICoKICAgICAgICAg +KiBAcGFyYW0gZGF0YUJpdHMg6buY6K6kOCzlj6/pgInlgLzkuLo1fjgKICAgICAgICAgKiBAcmV0 +dXJuCiAgICAgICAgICovCiAgICAgICAgcHVibGljIEJ1aWxkZXIgZGF0YUJpdHMoaW50IGRhdGFC +aXRzKSB7CiAgICAgICAgICAgIHRoaXMuZGF0YUJpdHMgPSBkYXRhQml0czsKICAgICAgICAgICAg +cmV0dXJuIHRoaXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiDmoKHpqozkvY0K +ICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSBwYXJpdHkgMDrml6DmoKHpqozkvY0oTk9ORe+8 +jOm7mOiupCnvvJsxOuWlh+agoemqjOS9jShPREQpOzI65YG25qCh6aqM5L2NKEVWRU4pCiAgICAg +ICAgICogQHJldHVybgogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBCdWlsZGVyIHBhcml0eShp +bnQgcGFyaXR5KSB7CiAgICAgICAgICAgIHRoaXMucGFyaXR5ID0gcGFyaXR5OwogICAgICAgICAg +ICByZXR1cm4gdGhpczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIOWBnOatouS9 +jQogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHN0b3BCaXRzIOm7mOiupDHvvJsxOjHkvY3l +gZzmraLkvY3vvJsyOjLkvY3lgZzmraLkvQ0KICAgICAgICAgKiBAcmV0dXJuCiAgICAgICAgICov +CiAgICAgICAgcHVibGljIEJ1aWxkZXIgc3RvcEJpdHMoaW50IHN0b3BCaXRzKSB7CiAgICAgICAg +ICAgIHRoaXMuc3RvcEJpdHMgPSBzdG9wQml0czsKICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAg +ICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiDmoIflv5cKICAgICAgICAgKgogICAgICAgICAq +IEBwYXJhbSBmbGFncyDpu5jorqQwCiAgICAgICAgICogQHJldHVybgogICAgICAgICAqLwogICAg +ICAgIHB1YmxpYyBCdWlsZGVyIGZsYWdzKGludCBmbGFncykgewogICAgICAgICAgICB0aGlzLmZs +YWdzID0gZmxhZ3M7CiAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0KCiAgICAgICAg +LyoqCiAgICAgICAgICog5omT5byA5bm26L+U5Zue5Liy5Y+jCiAgICAgICAgICoKICAgICAgICAg +KiBAcmV0dXJuCiAgICAgICAgICogQHRocm93cyBTZWN1cml0eUV4Y2VwdGlvbgogICAgICAgICAq +IEB0aHJvd3MgSU9FeGNlcHRpb24KICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgU2VyaWFsUG9y +dCBidWlsZCgpIHRocm93cyBTZWN1cml0eUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAg +ICAgICByZXR1cm4gbmV3IFNlcmlhbFBvcnQoZGV2aWNlLCBiYXVkcmF0ZSwgZGF0YUJpdHMsIHBh +cml0eSwgc3RvcEJpdHMsIGZsYWdzKTsKICAgICAgICB9CiAgICB9Cn0K \ No newline at end of file