├── README.md ├── alexandre-normand ├── README.markdown ├── device-info.txt ├── dexcom-capture.csv ├── hex-lines.txt ├── incremental-export.xml ├── rehex.diff ├── rehexed-incr.txt └── rehexed.txt ├── bin ├── rehex-usb-dump.sh └── usblyzer_filter.sh ├── dexcom_reader ├── Makefile ├── README.markdown ├── dexpager ├── dxcom ├── dxcom-records-cal-set ├── dxcom-records-cgm ├── dxcom-records-insertion ├── dxcom-records-meter ├── dxcom-records-sensor ├── dxcom-records-user-events ├── dxcom-scan ├── dxcom-status └── logs │ ├── records-cgm.log.markdown │ ├── records-insertion.log.markdown │ ├── records-meter.log.markdown │ ├── records-user-events.log.markdown │ ├── scan.log.markdown │ └── status.log.markdown ├── friend-01 ├── README.markdown ├── crc.markdown ├── instructions.markdown └── times.markdown ├── henrik ├── README.markdown ├── explain.jpg ├── prologue.jpg └── test_gui.png └── times.markdown /README.md: -------------------------------------------------------------------------------- 1 | decoding-dexcom 2 | =============== 3 | 4 | hacking diabetes: give me my data 5 | 6 | ## Setup 7 | 8 | There are some scripts in the 9 | [dexcom_reader](https://github.com/bewest/decoding-dexcom/tree/master/dexcom_reader) directory. 10 | 11 | They depend on https://github.com/compbrain/dexcom_reader. 12 | To use these scripts: 13 | 14 | ```bash 15 | $ git clone https://github.com/bewest/decoding-dexcom.git 16 | $ cd decoding-dexcom/dexcom_reader 17 | $ git clone https://github.com/compbrain/dexcom_reader.git 18 | 19 | ``` 20 | then to test that everything worked, try 21 | 22 | ```bash 23 | $ python dxcom-scan 24 | ``` 25 | 26 | ## helping 27 | 28 | Send me your packet captures! 29 | 30 | ### fork this repo 31 | 32 | Then 33 | ```bash 34 | $ git clone git@github.com//decoding-dexcom.git 35 | $ cd decoding-dexcom 36 | $ git checkout -b 37 | $ mkdir 38 | $ cp ~/path/to/captures ./ 39 | $ git add -v 40 | $ git commit -am ' adding captures for @bewest et al.' 41 | $ git push -u origin 42 | ``` 43 | 44 | Then you can send me an email or a pull request. 45 | -------------------------------------------------------------------------------- /alexandre-normand/README.markdown: -------------------------------------------------------------------------------- 1 | 2 | 3 | ### More 4 | 5 | Serial number of dexcom: 6 | 7 | Exported records from dexcom software: 8 | 9 | ```bash 10 | $ wc -l hex-lines.txt 11 | 205 hex-lines.txt 12 | ``` 13 | -------------------------------------------------------------------------------- /alexandre-normand/device-info.txt: -------------------------------------------------------------------------------- 1 | Connection Status Device connected 2 | Current Configuration 1 3 | Speed Full (12 Mbit/s) 4 | Device Address 8 5 | Number Of Open Pipes 3 6 | 7 | Device Descriptor DexCom Gen4 USB Serial 8 | Offset Field Size Value Description 9 | 0 bLength 1 12h 10 | 1 bDescriptorType 1 01h Device 11 | 2 bcdUSB 2 0110h USB Spec 1.1 12 | 4 bDeviceClass 1 02h CDC Control 13 | 5 bDeviceSubClass 1 00h 14 | 6 bDeviceProtocol 1 00h 15 | 7 bMaxPacketSize0 1 08h 8 bytes 16 | 8 idVendor 2 22A3h 17 | 10 idProduct 2 0047h 18 | 12 bcdDevice 2 0100h 1.00 19 | 14 iManufacturer 1 01h "DexCom" 20 | 15 iProduct 1 02h "DexCom Gen4 USB Serial" 21 | 16 iSerialNumber 1 00h 22 | 17 bNumConfigurations 1 01h 23 | 24 | Configuration Descriptor 1 25 | Offset Field Size Value Description 26 | 0 bLength 1 09h 27 | 1 bDescriptorType 1 02h Configuration 28 | 2 wTotalLength 2 0043h 29 | 4 bNumInterfaces 1 02h 30 | 5 bConfigurationValue 1 01h 31 | 6 iConfiguration 1 00h 32 | 7 bmAttributes 1 C0h Self Powered 33 | 4..0: Reserved ...00000 34 | 5: Remote Wakeup ..0..... No 35 | 6: Self Powered .1...... Yes 36 | 7: Reserved (set to one) 37 | (bus-powered for 1.0) 1....... 38 | 8 bMaxPower 1 FAh 500 mA 39 | 40 | Interface Descriptor 0/0 CDC Control, 1 Endpoint 41 | Offset Field Size Value Description 42 | 0 bLength 1 09h 43 | 1 bDescriptorType 1 04h Interface 44 | 2 bInterfaceNumber 1 00h 45 | 3 bAlternateSetting 1 00h 46 | 4 bNumEndpoints 1 01h 47 | 5 bInterfaceClass 1 02h CDC Control 48 | 6 bInterfaceSubClass 1 02h Abstract Control Model 49 | 7 bInterfaceProtocol 1 01h AT Commands: V.250 etc 50 | 8 iInterface 1 00h 51 | 52 | Header Functional Descriptor 53 | Offset Field Size Value Description 54 | 0 bFunctionLength 1 05h 55 | 1 bDescriptorType 1 24h CS Interface 56 | 2 bDescriptorSubtype 1 00h Header 57 | 3 bcdCDC 2 1001h 10.01 58 | 59 | Call Management Functional Descriptor 60 | Offset Field Size Value Description 61 | 0 bFunctionLength 1 05h 62 | 1 bDescriptorType 1 24h CS Interface 63 | 2 bDescriptorSubtype 1 01h Call Management 64 | 3 bmCapabilities 1 03h 65 | 7..2: Reserved 000000.. 66 | 1: Data Ifc Usage ......1. Call management over Data Ifc 67 | 0: Call Management .......1 Handles call management itself 68 | 4 bDataInterface 1 01h 69 | 70 | Abstract Control Management Functional Descriptor 71 | Offset Field Size Value Description 72 | 0 bFunctionLength 1 04h 73 | 1 bDescriptorType 1 24h CS Interface 74 | 2 bDescriptorSubtype 1 02h Abstract Control Management 75 | 3 bmCapabilities 1 06h 76 | 7..4: Reserved 0000.... 77 | 3: Connection ....0... 78 | 2: Send Break .....1.. Send Break request supported 79 | 1: Line Coding ......1. Line Coding requests and Serial State notification supported 80 | 0: Comm Features .......0 81 | 82 | Union Functional Descriptor 83 | Offset Field Size Value Description 84 | 0 bFunctionLength 1 05h 85 | 1 bDescriptorType 1 24h CS Interface 86 | 2 bDescriptorSubtype 1 06h Union 87 | 3 bControlInterface 1 00h 88 | 4 bSubordinateInterface0 1 01h CDC Data 89 | 90 | Endpoint Descriptor 81 1 In, Interrupt, 255 ms 91 | Offset Field Size Value Description 92 | 0 bLength 1 07h 93 | 1 bDescriptorType 1 05h Endpoint 94 | 2 bEndpointAddress 1 81h 1 In 95 | 3 bmAttributes 1 03h Interrupt 96 | 1..0: Transfer Type ......11 Interrupt 97 | 7..2: Reserved 000000.. 98 | 4 wMaxPacketSize 2 0008h 8 bytes 99 | 6 bInterval 1 FFh 255 ms 100 | 101 | Interface Descriptor 1/0 CDC Data, 2 Endpoints 102 | Offset Field Size Value Description 103 | 0 bLength 1 09h 104 | 1 bDescriptorType 1 04h Interface 105 | 2 bInterfaceNumber 1 01h 106 | 3 bAlternateSetting 1 00h 107 | 4 bNumEndpoints 1 02h 108 | 5 bInterfaceClass 1 0Ah CDC Data 109 | 6 bInterfaceSubClass 1 00h 110 | 7 bInterfaceProtocol 1 00h 111 | 8 iInterface 1 00h 112 | 113 | Endpoint Descriptor 02 2 Out, Bulk, 64 bytes 114 | Offset Field Size Value Description 115 | 0 bLength 1 07h 116 | 1 bDescriptorType 1 05h Endpoint 117 | 2 bEndpointAddress 1 02h 2 Out 118 | 3 bmAttributes 1 02h Bulk 119 | 1..0: Transfer Type ......10 Bulk 120 | 7..2: Reserved 000000.. 121 | 4 wMaxPacketSize 2 0040h 64 bytes 122 | 6 bInterval 1 00h 123 | 124 | Endpoint Descriptor 83 3 In, Bulk, 64 bytes 125 | Offset Field Size Value Description 126 | 0 bLength 1 07h 127 | 1 bDescriptorType 1 05h Endpoint 128 | 2 bEndpointAddress 1 83h 3 In 129 | 3 bmAttributes 1 02h Bulk 130 | 1..0: Transfer Type ......10 Bulk 131 | 7..2: Reserved 000000.. 132 | 4 wMaxPacketSize 2 0040h 64 bytes 133 | 6 bInterval 1 00h 134 | -------------------------------------------------------------------------------- /alexandre-normand/incremental-export.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | -------------------------------------------------------------------------------- /alexandre-normand/rehexed.txt: -------------------------------------------------------------------------------- 1 | out 2 | 0000000: 0106 000a 5e65 ....^e 3 | out 4 | 0000000: 0106 000b 7f75 .....u 5 | in 6 | 0000000: 0103 0101 3c46 6972 6d77 6172 6548 6561 ........ 45 | out 46 | 0000000: 0106 0027 9190 ...'.. 47 | in 48 | 0000000: 0107 0001 004d c8 .....M. 49 | out 50 | 0000000: 0106 000a 5e65 ....^e 51 | in 52 | 0000000: 0106 0001 35d4 ....5. 53 | out 54 | 0000000: 0106 000b 7f75 .....u 55 | in 56 | 0000000: 0103 0101 3c46 6972 6d77 6172 6548 6561 ......... 96 | 00000d0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 97 | 00000e0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 98 | 00000f0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 99 | out 100 | 0000000: 0107 0010 000f f8 ....... 101 | in 102 | 0000000: 010e 0001 0000 0000 0000 0000 2cbb ............,. 103 | out 104 | 0000000: 010c 0011 0000 0000 0001 6e45 ..........nE 105 | in 106 | 0000000: 0116 0201 0000 0000 0100 0000 0001 0000 ................ 107 | 0000010: 0000 0000 0000 0000 0000 0000 0000 3a7d ..............:} 108 | 0000020: 7df6 8907 fd85 8907 3c4d 616e 7566 6163 }........... 122 | out 123 | 0000000: 0106 000b 7f75 .....u 124 | in 125 | 0000000: 0103 0101 3c46 6972 6d77 6172 6548 6561 ........ 168 | out 169 | 0000000: 0107 0010 024d d8 .....M. 170 | in 171 | 0000000: 010e 0001 0000 0000 0000 0000 2cbb ............,. 172 | out 173 | 0000000: 0107 0010 024d d8 .....M. 174 | in 175 | 0000000: 010e 0001 0000 0000 0000 0000 2cbb ............,. 176 | out 177 | 0000000: 010c 0011 0200 0000 0001 2ece ............ 178 | in 179 | 0000000: 0116 0201 0000 0000 0100 0000 0201 0000 ................ 180 | 0000010: 0000 0000 0000 0000 0000 0000 0000 798d ..............y. 181 | 0000020: 7df6 8907 fd85 8907 3c50 4350 6172 616d }............ 192 | 00000d0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 193 | 00000e0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 194 | 00000f0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 195 | out 196 | 0000000: 0106 0036 8192 ...6.. 197 | in 198 | 0000000: 012d 0001 3c46 6972 6d77 6172 6553 6574 .-... 201 | out 202 | 0000000: 0106 0022 34c0 ..."4. 203 | in 204 | 0000000: 010a 0001 1a87 d608 83ed .......... 205 | out 206 | 0000000: 0106 001d 8807 ...... 207 | in 208 | 0000000: 010a 0001 b79d ffff 5799 ........W. 209 | out 210 | 0000000: 0106 0023 15d0 ...#.. 211 | in 212 | 0000000: 010a 0001 2cbe 8907 a952 ....,....R 213 | out 214 | 0000000: 0106 001f ca27 .....' 215 | in 216 | 0000000: 010a 0001 eec8 4c01 aaef ......L... 217 | out 218 | 0000000: 0106 0019 0c47 .....G 219 | in 220 | 0000000: 010b 0001 3630 484d 5720 70 ....60HMW p 221 | out 222 | 0000000: 0106 001b 4e67 ....Ng 223 | in 224 | 0000000: 0108 0001 0904 a18a ........ 225 | out 226 | 0000000: 0106 0025 d3b0 ...%.. 227 | in 228 | 0000000: 0107 0001 016c d8 .....l. 229 | out 230 | 0000000: 0106 0027 9190 ...'.. 231 | in 232 | 0000000: 0107 0001 004d c8 .....M. 233 | out 234 | 0000000: 0106 0029 5f71 ...)_q 235 | in 236 | 0000000: 0107 0001 016c d8 .....l. 237 | out 238 | 0000000: 0106 002b 1d51 ...+.Q 239 | in 240 | 0000000: 0107 0001 004d c8 .....M. 241 | out 242 | 0000000: 010a 0033 f804 0000 ef90 ...3...... 243 | in 244 | 0000000: 0116 0201 ffff ffff ffff ffff ffff ffff ................ 245 | 0000010: ffff ffff ffff ffff ffff ffff ffff ffff ................ 246 | 0000020: ffff ffff ffff ffff ffff ffff ffff ffff ................ 247 | 0000030: ffff ffff ffff ffff ffff ffff ffff ffff ................ 248 | 0000040: ffff ffff ffff ffff ffff ffff ffff ffff ................ 249 | 0000050: ffff ffff ffff ffff ffff ffff ffff ffff ................ 250 | 0000060: ffff ffff ffff ffff ffff ffff ffff ffff ................ 251 | 0000070: ffff ffff ffff ffff ffff ffff ffff ffff ................ 252 | 0000080: ffff ffff ffff ffff ffff ffff ffff ffff ................ 253 | 0000090: ffff ffff ffff ffff ffff ffff ffff ffff ................ 254 | 00000a0: ffff ffff ffff ffff ffff ffff ffff ffff ................ 255 | 00000b0: ffff ffff ffff ffff ffff ffff ffff ffff ................ 256 | 00000c0: ffff ffff ffff ffff ffff ffff ffff ffff ................ 257 | 00000d0: ffff ffff ffff ffff ffff ffff ffff ffff ................ 258 | 00000e0: ffff ffff ffff ffff ffff ffff ffff ffff ................ 259 | 00000f0: ffff ffff ffff ffff ffff ffff ffff ffff ................ 260 | out 261 | 0000000: 0106 000f fb35 .....5 262 | in 263 | 0000000: 0156 0401 3c50 6172 7469 7469 6f6e 496e .V.. 268 | 0000050: 3c50 6172 7469 7469 6f6e 204e 616d 653d 287 | 0000050: 3c50 6172 7469 7469 6f6e 204e 616d 653d .. 408 | 00000f0: 2077 0100 5084 0100 c200 1aef 9ea1 d208 w..P........... 409 | out 410 | 0000000: 010c 0011 036f 0800 0004 cd22 .....o....." 411 | in 412 | 0000000: 0146 0801 d7d2 0000 1900 0000 0301 6f08 .F............o. 413 | 0000010: 0000 0000 0000 0000 0000 0000 0000 b6be ................ 414 | 0000020: ea09 d308 a0a7 d208 30ab 0100 c0a9 0100 ........0....... 415 | 0000030: b400 9605 160b d308 cca8 d208 a0ad 0100 ................ 416 | 0000040: 10ab 0100 b900 97e3 420c d308 f8a9 d208 ........B....... 417 | 0000050: a0ab 0100 30ac 0100 bb00 36e5 6e0d d308 ....0.....6.n... 418 | 0000060: 24ab d208 60ac 0100 a0ac 0100 b900 bea8 $...`........... 419 | 0000070: 9a0e d308 50ac d208 f0ae 0100 d0ac 0100 ....P........... 420 | 0000080: b900 ecc6 c60f d308 7cad d208 30b2 0100 ........|...0... 421 | 0000090: 90ad 0100 b500 28e5 f210 d308 a8ae d208 ......(......... 422 | 00000a0: 10b7 0100 e0af 0100 b700 9a58 1e12 d308 ...........X.... 423 | 00000b0: d4af d208 00b8 0100 60b3 0100 a700 03e6 ........`....... 424 | 00000c0: 4a13 d308 00b1 d208 e0bc 0100 40b7 0100 J...........@... 425 | 00000d0: a600 c366 7614 d308 2cb2 d208 00be 0100 ...fv...,....... 426 | 00000e0: a0ba 0100 a600 2795 a215 d308 58b3 d208 ......'.....X... 427 | 00000f0: 40be 0100 00bd 0100 b100 5e3d ce16 d308 @.........^=.... 428 | out 429 | 0000000: 010c 0011 0373 0800 0004 bcad .....s...... 430 | in 431 | 0000000: 0146 0801 3bd3 0000 1900 0000 0301 7308 .F..;.........s. 432 | 0000010: 0000 0000 0000 0000 0000 0000 0000 7aa2 ..............z. 433 | 0000020: 197f d308 cf1c d308 40d9 0100 10d5 0100 ........@....... 434 | 0000030: d100 1f36 4580 d308 fb1d d308 70df 0100 ...6E.......p... 435 | 0000040: d0da 0100 d100 22ae 7181 d308 271f d308 ......".q...'... 436 | 0000050: 60e3 0100 70dd 0100 d000 300f 9d82 d308 `...p.....0..... 437 | 0000060: 5320 d308 e0e6 0100 30e0 0100 c300 7123 S ......0.....q# 438 | 0000070: c983 d308 7f21 d308 30e4 0100 60e3 0100 .....!..0...`... 439 | 0000080: c900 64b1 f584 d308 ab22 d308 70de 0100 ..d......"..p... 440 | 0000090: e0e4 0100 cb00 02f1 2186 d308 d723 d308 ........!....#.. 441 | 00000a0: d0da 0100 10e3 0100 c800 d90f 4d87 d308 ............M... 442 | 00000b0: 0325 d308 90d6 0100 60de 0100 cb00 1a22 .%......`......" 443 | 00000c0: 7988 d308 2f26 d308 30d1 0100 b0d8 0100 y.../&..0....... 444 | 00000d0: ce00 d19e a589 d308 5b27 d308 10cc 0100 ........['...... 445 | 00000e0: 60d3 0100 cb00 bb2a d18a d308 8728 d308 `......*.....(.. 446 | 00000f0: 40c9 0100 c0ce 0100 cc00 f0b6 fc8b d308 @............... 447 | out 448 | 0000000: 010c 0011 0377 0800 0004 ba24 .....w.....$ 449 | in 450 | 0000000: 0146 0801 9fd3 0000 1900 0000 0301 7708 .F............w. 451 | 0000010: 0000 0000 0000 0000 0000 0000 0000 6977 ..............iw 452 | 0000020: 48f4 d308 fe91 d308 9068 0100 c068 0100 H........h...h.. 453 | 0000030: c200 e608 74f5 d308 2a93 d308 3066 0100 ....t...*...0f.. 454 | 0000040: 906a 0100 c700 15b6 a0f6 d308 5694 d308 .j..........V... 455 | 0000050: f05e 0100 0068 0100 cd00 951b ccf7 d308 .^...h.......... 456 | 0000060: 8295 d308 b060 0100 d063 0100 c100 46fe .....`...c....F. 457 | 0000070: f8f8 d308 ae96 d308 0058 0100 805f 0100 .........X..._.. 458 | 0000080: c800 4061 24fa d308 da97 d308 4055 0100 ..@a$.......@U.. 459 | 0000090: 605b 0100 c200 aea6 50fb d308 0699 d308 `[......P....... 460 | 00000a0: 3059 0100 5058 0100 bc00 0412 7cfc d308 0Y..PX......|... 461 | 00000b0: 329a d308 906a 0100 c058 0100 b600 95d8 2....j...X...... 462 | 00000c0: a8fd d308 5e9b d308 9069 0100 005e 0100 ....^....i...^.. 463 | 00000d0: b400 e10b d3fe d308 8a9c d308 706b 0100 ............pk.. 464 | 00000e0: d065 0100 ab00 5284 ffff d308 b59d d308 .e....R......... 465 | 00000f0: b070 0100 906c 0100 b100 2e0a 2b01 d408 .p...l......+... 466 | out 467 | 0000000: 010c 0011 037b 0800 0004 91af .....{...... 468 | in 469 | 0000000: 0146 0801 03d4 0000 1900 0000 0301 7b08 .F............{. 470 | 0000010: 0000 0000 0000 0000 0000 0000 0000 91e1 ................ 471 | 0000020: 7769 d408 2d07 d408 1082 0100 a07d 0100 wi..-........}.. 472 | 0000030: c300 2e48 a36a d408 5908 d408 d07e 0100 ...H.j..Y....~.. 473 | 0000040: a07f 0100 c400 e3c1 cf6b d408 8509 d408 .........k...... 474 | 0000050: 507a 0100 2080 0100 b500 2efa fb6c d408 Pz.. ........l.. 475 | 0000060: b10a d408 8081 0100 307f 0100 c800 7b3a ........0.....{: 476 | 0000070: 276e d408 dd0b d408 2088 0100 207f 0100 'n...... ... ... 477 | 0000080: d000 6e9e 536f d408 090d d408 c092 0100 ..n.So.......... 478 | 0000090: d082 0100 c900 526f 7f70 d408 350e d408 ......Ro.p..5... 479 | 00000a0: 608e 0100 a089 0100 ca00 4e35 ab71 d408 `.........N5.q.. 480 | 00000b0: 610f d408 608c 0100 308f 0100 c200 1522 a...`...0......" 481 | 00000c0: d772 d408 8d10 d408 7084 0100 c08f 0100 .r......p....... 482 | 00000d0: ba00 4763 0374 d408 b911 d408 d07b 0100 ..Gc.t.......{.. 483 | 00000e0: 708a 0100 be00 16b9 2f75 d408 e512 d408 p......./u...... 484 | 00000f0: b075 0100 e081 0100 c500 58a7 5b76 d408 .u........X.[v.. 485 | out 486 | 0000000: 010c 0011 037f 0800 0004 9726 ...........& 487 | in 488 | 0000000: 0146 0801 67d4 0000 1900 0000 0301 7f08 .F..g........... 489 | 0000010: 0000 0000 0000 0000 0000 0000 0000 78b3 ..............x. 490 | 0000020: a6de d408 5c7c d408 407c 0100 d05d 0100 ....\|..@|...].. 491 | 0000030: d000 4ac2 d2df d408 887d d408 6085 0100 ..J......}..`... 492 | 0000040: 2074 0100 d400 48ce fee0 d408 b47e d408 t....H......~.. 493 | 0000050: 7096 0100 a084 0100 cf00 62b1 2ae2 d408 p.........b.*... 494 | 0000060: e07f d408 30a8 0100 0091 0100 df00 c9eb ....0........... 495 | 0000070: 56e3 d408 0c81 d408 e0ad 0100 909c 0100 V............... 496 | 0000080: dd00 c95d 82e4 d408 3882 d408 60b4 0100 ...]....8...`... 497 | 0000090: 40a8 0100 dc00 fc3f aee5 d408 6483 d408 @......?....d... 498 | 00000a0: 20b2 0100 30b1 0100 dc00 c4a4 dae6 d408 ...0........... 499 | 00000b0: 9084 d408 d0b2 0100 f0b4 0100 d700 86f3 ................ 500 | 00000c0: 06e8 d408 bc85 d408 10bf 0100 10b6 0100 ................ 501 | 00000d0: d100 0f9a 31e9 d408 e886 d408 00c0 0100 ....1........... 502 | 00000e0: f0b7 0100 cf00 5c04 5dea d408 1388 d408 ......\.]....... 503 | 00000f0: 50c9 0100 d0bc 0100 ce00 6431 89eb d408 P.........d1.... 504 | out 505 | 0000000: 010c 0011 0383 0800 0004 ea92 ............ 506 | in 507 | 0000000: 0146 0801 cbd4 0000 1900 0000 0301 8308 .F.............. 508 | 0000010: 0000 0000 0000 0000 0000 0000 0000 04a5 ................ 509 | 0000020: d553 d508 8bf1 d408 5084 0100 207b 0100 .S......P... {.. 510 | 0000030: b901 cbda 0155 d508 b7f2 d408 40a2 0100 .....U......@... 511 | 0000040: 3082 0100 ba00 3285 2d56 d508 e3f3 d408 0.....2.-V...... 512 | 0000050: 90ad 0100 b08f 0100 a401 664a 5957 d508 ..........fJYW.. 513 | 0000060: 0ff5 d408 60b1 0100 e0a0 0100 bf00 1d21 ....`..........! 514 | 0000070: 8558 d508 3bf6 d408 70b5 0100 b0af 0100 .X..;...p....... 515 | 0000080: bf00 384f b159 d508 67f7 d408 b0b7 0100 ..8O.Y..g....... 516 | 0000090: 50b7 0100 bf00 becb dd5a d508 93f8 d408 P........Z...... 517 | 00000a0: d0b5 0100 80b8 0100 bf00 23a2 085c d508 ..........#..\.. 518 | 00000b0: bff9 d408 f0b3 0100 e0b6 0100 be00 e020 ............... 519 | 00000c0: 345d d508 eafa d408 10b1 0100 a0b4 0100 4].............. 520 | 00000d0: b900 834c 605e d508 16fc d408 30b0 0100 ...L`^......0... 521 | 00000e0: 80b2 0100 b900 9d10 8c5f d508 42fd d408 ........._..B... 522 | 00000f0: 40ad 0100 80b0 0100 b900 a92b b860 d508 @..........+.`.. 523 | out 524 | 0000000: 010c 0011 0387 0800 0004 ec1b ............ 525 | in 526 | 0000000: 0146 0801 2fd5 0000 1900 0000 0301 8708 .F../........... 527 | 0000010: 0000 0000 0000 0000 0000 0000 0000 eab8 ................ 528 | 0000020: 04c9 d508 ba66 d508 0049 0100 f04a 0100 .....f...I...J.. 529 | 0000030: bf00 3026 30ca d508 e667 d508 b04d 0100 ..0&0....g...M.. 530 | 0000040: b049 0100 c800 389e 5ccb d508 1269 d508 .I....8.\....i.. 531 | 0000050: 1037 0100 d047 0100 c300 0f0a 88cc d508 .7...G.......... 532 | 0000060: 3e6a d508 4052 0100 5046 0100 c300 c935 >j..@R..PF.....5 533 | 0000070: b4cd d508 6a6b d508 2050 0100 0047 0100 ....jk.. P...G.. 534 | 0000080: c300 f821 e0ce d508 966c d508 905b 0100 ...!.....l...[.. 535 | 0000090: a04b 0100 be01 155b 0cd0 d508 c26d d508 .K.....[.....m.. 536 | 00000a0: 8063 0100 f054 0100 c400 beb2 38d1 d508 .c...T......8... 537 | 00000b0: ee6e d508 9074 0100 d05f 0100 cd00 d304 .n...t..._...... 538 | 00000c0: 64d2 d508 1a70 d508 20b3 0100 6071 0100 d....p.. ...`q.. 539 | 00000d0: cd00 5b51 8fd3 d508 4671 d508 70bd 0100 ..[Q....Fq..p... 540 | 00000e0: 608c 0100 c900 0da0 bbd4 d508 7172 d508 `...........qr.. 541 | 00000f0: 40ba 0100 50aa 0100 c000 aa8d e7d5 d508 @...P........... 542 | out 543 | 0000000: 010c 0011 038b 0800 0003 20e0 .......... . 544 | in 545 | 0000000: 0136 0601 93d5 0000 1900 0000 0301 8b08 .6.............. 546 | 0000010: 0000 0000 0000 0000 0000 0000 0000 8b28 ...............( 547 | 0000020: 333e d608 e9db d508 7056 0100 7057 0100 3>......pV..pW.. 548 | 0000030: c300 35ec 5f3f d608 15dd d508 405a 0100 ..5._?......@Z.. 549 | 0000040: 6058 0100 c300 f52a 8b40 d608 41de d508 `X.....*.@..A... 550 | 0000050: 7051 0100 e057 0100 be00 2022 b741 d608 pQ...W.... ".A.. 551 | 0000060: 6ddf d508 5058 0100 b056 0100 c400 ce3c m...PX...V.....< 552 | 0000070: e342 d608 99e0 d508 505d 0100 9056 0100 .B......P]...V.. 553 | 0000080: be00 ab71 0f44 d608 c5e1 d508 d06a 0100 ...q.D.......j.. 554 | 0000090: d059 0100 be00 e1eb 3a45 d608 f1e2 d508 .Y......:E...... 555 | 00000a0: d06f 0100 6061 0100 bd00 7d42 6646 d608 .o..`a....}BfF.. 556 | 00000b0: 1ce4 d508 e071 0100 706a 0100 bc00 6130 .....q..pj....a0 557 | 00000c0: 9247 d608 48e5 d508 f072 0100 7071 0100 .G..H....r..pq.. 558 | 00000d0: bc00 7dcf be48 d608 74e6 d508 c077 0100 ..}..H..t....w.. 559 | 00000e0: d074 0100 b000 c211 ea49 d608 a0e7 d508 .t.......I...... 560 | 00000f0: 106a 0100 7074 0100 c300 4049 164b d608 .j..pt....@I.K.. 561 | out 562 | 0000000: 0107 0010 048b b8 ....... 563 | in 564 | 0000000: 010e 0001 d304 0000 b905 0000 2c6d ............,m 565 | out 566 | 0000000: 010b 0012 04a2 0500 00a0 c9 ........... 567 | in 568 | 0000000: 0122 0001 0cd6 0000 2600 0000 0402 a205 ."......&....... 569 | 0000010: 0000 0000 0000 0000 0000 0000 0000 7b79 ..............{y 570 | 0000020: c324 .$ 571 | out 572 | 0000000: 010c 0011 04a2 0500 0004 c8c1 ............ 573 | in 574 | 0000000: 0146 0801 0cd6 0000 2600 0000 0402 a205 .F......&....... 575 | 0000010: 0000 0000 0000 0000 0000 0000 0000 7b79 ..............{y 576 | 0000020: cf80 d208 851e d208 8500 1494 f5fb 81d2 ................ 577 | 0000030: 08b1 1fd2 0882 0014 aa6c 2783 d208 dd20 .........l'.... 578 | 0000040: d208 8100 1405 8b53 84d2 0809 22d2 087f .......S...."... 579 | 0000050: 0014 918e 7f85 d208 3523 d208 7e00 1411 ........5#..~... 580 | 0000060: c1ab 86d2 0861 24d2 087c 0014 ab34 d787 .....a$..|...4.. 581 | 0000070: d208 8d25 d208 7900 146d f703 89d2 08b9 ...%..y..m...... 582 | 0000080: 26d2 0875 0014 5624 2f8a d208 e527 d208 &..u..V$/....'.. 583 | 0000090: 6e00 14e4 825b 8bd2 0811 29d2 0869 0015 n....[....)..i.. 584 | 00000a0: 38fc 878c d208 3d2a d208 6500 1555 0cb3 8.....=*..e..U.. 585 | 00000b0: 8dd2 0869 2bd2 0861 0014 006f df8e d208 ...i+..a...o.... 586 | 00000c0: 952c d208 5e00 148f 9f0b 90d2 08c1 2dd2 .,..^.........-. 587 | 00000d0: 085b 0014 e97e 3791 d208 ed2e d208 5700 .[...~7.......W. 588 | 00000e0: 143e 9a63 92d2 0819 30d2 0855 0014 4771 .>.c....0..U..Gq 589 | 00000f0: 8f93 d208 4531 d208 5200 1402 f2bb 94d2 ....E1..R....... 590 | out 591 | 0000000: 010c 0011 04a6 0500 0004 ce48 ...........H 592 | in 593 | 0000000: 0146 0801 a4d6 0000 2600 0000 0402 a605 .F......&....... 594 | 0000010: 0000 0000 0000 0000 0000 0000 0000 030e ................ 595 | 0000020: 9630 d308 4cce d208 4900 14cc 96c2 31d3 .0..L...I.....1. 596 | 0000030: 0878 cfd2 0849 0014 cd64 ee32 d308 a4d0 .x...I...d.2.... 597 | 0000040: d208 4900 1433 401a 34d3 08d0 d1d2 084a ..I..3@.4......J 598 | 0000050: 0014 a409 4635 d308 fcd2 d208 4c00 141d ....F5......L... 599 | 0000060: c472 36d3 0828 d4d2 084d 0014 abe1 9e37 .r6..(...M.....7 600 | 0000070: d308 54d5 d208 4d00 1488 89ca 38d3 0880 ..T...M.....8... 601 | 0000080: d6d2 084f 0014 bebf f639 d308 acd7 d208 ...O.....9...... 602 | 0000090: 5200 147a a422 3bd3 08d8 d8d2 0855 0014 R..z.";......U.. 603 | 00000a0: c1b6 4e3c d308 04da d208 5700 1478 417a ..N<......W..xAz 604 | 00000b0: 3dd3 0830 dbd2 085a 0014 871f a63e d308 =..0...Z.....>.. 605 | 00000c0: 5cdc d208 5c00 1453 5ed2 3fd3 0888 ddd2 \...\..S^.?..... 606 | 00000d0: 085e 0014 ab70 fe40 d308 b4de d208 6000 .^...p.@......`. 607 | 00000e0: 148a bb2a 42d3 08e0 dfd2 0861 0014 c4f5 ...*B......a.... 608 | 00000f0: 5643 d308 0ce1 d208 6300 141d 5982 44d3 VC......c...Y.D. 609 | out 610 | 0000000: 010c 0011 04aa 0500 0004 e5c3 ............ 611 | in 612 | 0000000: 0146 0801 3cd7 0000 2600 0000 0402 aa05 .F..<...&....... 613 | 0000010: 0000 0000 0000 0000 0000 0000 0000 a484 ................ 614 | 0000020: 88e1 d308 3e7f d308 4400 14f8 4fb4 e2d3 ....>...D...O... 615 | 0000030: 086a 80d3 0841 0014 a766 e0e3 d308 9681 .j...A...f...... 616 | 0000040: d308 3f00 1417 b20c e5d3 08c2 82d3 083a ..?............: 617 | 0000050: 0014 255b 38e6 d308 ee83 d308 3400 14d6 ..%[8.......4... 618 | 0000060: 2664 e7d3 081a 85d3 0832 0014 ad7a 90e8 &d.......2...z.. 619 | 0000070: d308 4686 d308 3000 141f 57bc e9d3 0872 ..F...0...W....r 620 | 0000080: 87d3 082e 0014 60e4 e8ea d308 9e88 d308 ......`......... 621 | 0000090: 2f00 14bb ad14 ecd3 08ca 89d3 082c 0014 /............,.. 622 | 00000a0: 5428 40ed d308 f68a d308 2b00 1428 476c T(@.......+..(Gl 623 | 00000b0: eed3 0822 8cd3 082c 0014 8d27 98ef d308 ..."...,...'.... 624 | 00000c0: 4e8d d308 2e00 1406 e1c4 f0d3 087a 8ed3 N............z.. 625 | 00000d0: 0830 0014 c9cf f0f1 d308 a68f d308 3200 .0............2. 626 | 00000e0: 1449 361c f3d3 08d2 90d3 0832 0014 2fe6 .I6........2../. 627 | 00000f0: 48f4 d308 fe91 d308 3200 1447 c374 f5d3 H.......2..G.t.. 628 | out 629 | 0000000: 010c 0011 04ae 0500 0004 e34a ...........J 630 | in 631 | 0000000: 0146 0801 d4d7 0000 2600 0000 0402 ae05 .F......&....... 632 | 0000010: 0000 0000 0000 0000 0000 0000 0000 957e ...............~ 633 | 0000020: 4f91 d408 052f d408 3b00 14cb 347b 92d4 O..../..;...4{.. 634 | 0000030: 0831 30d4 083a 0014 f85b a793 d408 5d31 .10..:...[....]1 635 | 0000040: d408 3a00 14e7 fbd3 94d4 0889 32d4 083a ..:.........2..: 636 | 0000050: 0014 8043 ff95 d408 b533 d408 3d00 14a0 ...C.....3..=... 637 | 0000060: be2b 97d4 08e1 34d4 083f 0014 5f24 5798 .+....4..?.._$W. 638 | 0000070: d408 0d36 d408 4100 1474 3883 99d4 0839 ...6..A..t8....9 639 | 0000080: 37d4 0841 0014 df43 af9a d408 6538 d408 7..A...C....e8.. 640 | 0000090: 4100 145c d6db 9bd4 0891 39d4 0841 0014 A..\......9..A.. 641 | 00000a0: 32f8 079d d408 bd3a d408 4000 144b 2533 2......:..@..K%3 642 | 00000b0: 9ed4 08e9 3bd4 0840 0014 7554 5f9f d408 ....;..@..uT_... 643 | 00000c0: 153d d408 4000 1444 d68b a0d4 0841 3ed4 .=..@..D.....A>. 644 | 00000d0: 083f 0014 e3f5 b7a1 d408 6d3f d408 3e00 .?........m?..>. 645 | 00000e0: 1425 d8e3 a2d4 0899 40d4 083c 0014 e429 .%......@..<...) 646 | 00000f0: 0fa4 d408 c541 d408 3a00 146b 813b a5d4 .....A..:..k.;.. 647 | out 648 | 0000000: 010c 0011 04b2 0500 0004 92c5 ............ 649 | in 650 | 0000000: 0146 0801 6cd8 0000 2600 0000 0402 b205 .F..l...&....... 651 | 0000010: 0000 0000 0000 0000 0000 0000 0000 f799 ................ 652 | 0000020: 1541 d508 cbde d408 3100 14c5 9941 42d5 .A......1....AB. 653 | 0000030: 08f7 dfd4 0831 0014 e326 6d43 d508 23e1 .....1...&mC..#. 654 | 0000040: d408 3300 14f2 5199 44d5 084f e2d4 0835 ..3...Q.D..O...5 655 | 0000050: 0014 46b3 c545 d508 7be3 d408 3600 1499 ..F..E..{...6... 656 | 0000060: baf1 46d5 08a7 e4d4 0837 0014 2249 1d48 ..F......7.."I.H 657 | 0000070: d508 d3e5 d408 3600 142d d349 49d5 08ff ......6..-.II... 658 | 0000080: e6d4 0837 0014 8a39 754a d508 2be8 d408 ...7...9uJ..+... 659 | 0000090: 3900 14c1 9fa1 4bd5 0857 e9d4 083a 0014 9.....K..W...:.. 660 | 00000a0: 7bf3 cd4c d508 83ea d408 3a00 14af bcf9 {..L......:..... 661 | 00000b0: 4dd5 08af ebd4 0837 0014 8646 254f d508 M......7...F%O.. 662 | 00000c0: dbec d408 3700 1461 7e51 50d5 0807 eed4 ....7..a~QP..... 663 | 00000d0: 0844 0094 06de 7d51 d508 33ef d408 4200 .D....}Q..3...B. 664 | 00000e0: 94bb 877d 51d5 0833 efd4 0842 8014 ab0d ...}Q..3...B.... 665 | 00000f0: a952 d508 5ff0 d408 4400 14af e2d6 53d5 .R.._...D.....S. 666 | out 667 | 0000000: 010c 0011 04b6 0500 0004 944c ...........L 668 | in 669 | 0000000: 0146 0801 04d9 0000 2600 0000 0402 b605 .F......&....... 670 | 0000010: 0000 0000 0000 0000 0000 0000 0000 c12c ..............., 671 | 0000020: 84ee d508 3a8c d508 5c00 14d5 09b0 efd5 ....:...\....... 672 | 0000030: 0866 8dd5 085f 0014 9c6c dcf0 d508 928e .f..._...l...... 673 | 0000040: d508 5d00 1403 fd08 f2d5 08be 8fd5 0859 ..]............Y 674 | 0000050: 0014 714f 34f3 d508 ea90 d508 5b00 245f ..qO4.......[.$_ 675 | 0000060: 8060 f4d5 0816 92d5 0858 0024 e973 8cf5 .`.......X.$.s.. 676 | 0000070: d508 4293 d508 5600 2490 fdb8 f6d5 086e ..B...V.$......n 677 | 0000080: 94d5 0855 0024 d34f e4f7 d508 9a95 d508 ...U.$.O........ 678 | 0000090: 5400 2479 5e10 f9d5 08c6 96d5 0853 0024 T.$y^........S.$ 679 | 00000a0: 7ef7 3cfa d508 f297 d508 5200 24d9 f568 ~.<.......R.$..h 680 | 00000b0: fbd5 081e 99d5 0850 0014 2b48 94fc d508 .......P..+H.... 681 | 00000c0: 4a9a d508 4e00 14f3 28c0 fdd5 0876 9bd5 J...N...(....v.. 682 | 00000d0: 084c 0014 3f27 ecfe d508 a29c d508 4a00 .L..?'........J. 683 | 00000e0: 140a 3518 00d6 08ce 9dd5 0847 0014 f09f ..5........G.... 684 | 00000f0: 4401 d608 fa9e d508 4700 143f 4470 02d6 D.......G..?Dp.. 685 | out 686 | 0000000: 0107 0010 05aa a8 ....... 687 | in 688 | 0000000: 010e 0001 7f02 0000 9b02 0000 e104 .............. 689 | out 690 | 0000000: 010b 0012 0591 0200 0054 51 .........TQ 691 | in 692 | 0000000: 0122 0001 b307 0000 0300 0000 0502 9102 .".............. 693 | 0000010: 0000 0000 0000 0000 0000 0000 0000 4ed6 ..............N. 694 | 0000020: 10f1 .. 695 | out 696 | 0000000: 010c 0011 0591 0200 0004 7937 ..........y7 697 | in 698 | 0000000: 0146 0801 b307 0000 0300 0000 0502 9102 .F.............. 699 | 0000010: 0000 0000 0000 0000 0000 0000 0000 4ed6 ..............N. 700 | 0000020: 1817 d208 ceb4 d108 ddfa a729 585c 9040 ...........)X\.@ 701 | 0000030: 0000 0000 004c dd40 0000 0000 0000 f03f .....L.@.......? 702 | 0000040: 0306 0000 0000 0000 0000 0006 1fb1 d008 ................ 703 | 0000050: 8200 0000 4060 0200 efb1 d008 002b f5d0 ....@`.......+.. 704 | 0000060: 0887 0000 00a0 8d02 00e6 f5d0 0800 2b5b ..............+[ 705 | 0000070: d108 3700 0000 d07d 0100 d95b d108 00bf ..7....}...[.... 706 | 0000080: cbd1 084b 0000 0010 c801 0058 ccd1 0800 ...K.......X.... 707 | 0000090: cde5 d108 5f00 0000 2001 0200 4ce7 d108 ...._... ...L... 708 | 00000a0: 00f9 16d2 0844 0000 0080 aa01 002c 16d2 .....D.......,.. 709 | 00000b0: 0800 ae94 8418 d208 3ab6 d108 6ad6 da34 ........:...j..4 710 | 00000c0: 9f68 9040 0000 0000 004c dd40 0000 0000 .h.@.....L.@.... 711 | 00000d0: 0000 f03f 0306 03ab aaaa aaaa aaf0 3f06 ...?..........?. 712 | 00000e0: 1fb1 d008 8200 0000 4060 0200 efb1 d008 ........@`...... 713 | 00000f0: 002b f5d0 0887 0000 00a0 8d02 00e6 f5d0 .+.............. 714 | out 715 | 0000000: 010c 0011 0595 0200 0004 7fbe ............ 716 | in 717 | 0000000: 0146 0801 bf07 0000 0300 0000 0502 9502 .F.............. 718 | 0000010: 0000 0000 0000 0000 0000 0000 0000 f7f4 ................ 719 | 0000020: 1fbb d408 d558 d408 07cb fff9 5139 9140 .....X......Q9.@ 720 | 0000030: 0000 0000 004c dd40 5d59 0c4a 51a5 f03f .....L.@]Y.JQ..? 721 | 0000040: 0306 0000 0000 0000 0000 0006 efae d208 ................ 722 | 0000050: 4900 0000 20a7 0100 aeaf d208 0082 18d3 I... ........... 723 | 0000060: 0847 0000 00f0 b201 0025 19d3 0800 eead .G.......%...... 724 | 0000070: d308 5100 0000 d0f3 0100 24af d308 00f6 ..Q.......$..... 725 | 0000080: f7d3 082e 0000 0000 5801 00f8 f8d3 0800 ........X....... 726 | 0000090: 146a d408 3900 0000 507a 0100 cf6b d408 .j..9...Pz...k.. 727 | 00000a0: 0000 bbd4 0856 0000 0010 ab01 0052 bad4 .....V.......R.. 728 | 00000b0: 0800 a767 aabc d408 605a d408 55af dcff ...g....`Z..U... 729 | 00000c0: fb5b 9140 0000 0000 004c dd40 2f41 aa58 .[.@.....L.@/A.X 730 | 00000d0: 004e f03f 0306 0300 0000 0000 0000 0006 .N.?............ 731 | 00000e0: efae d208 4900 0000 20a7 0100 aeaf d208 ....I... ....... 732 | 00000f0: 0082 18d3 0847 0000 00f0 b201 0025 19d3 .....G.......%.. 733 | out 734 | 0000000: 010c 0011 0599 0200 0003 b345 ...........E 735 | in 736 | 0000000: 0136 0601 cb07 0000 0300 0000 0502 9902 .6.............. 737 | 0000010: 0000 0000 0000 0000 0000 0000 0000 c1d0 ................ 738 | 0000020: 78dd d508 2e7b d508 5811 b960 b2ee 8c40 x....{..X..`...@ 739 | 0000030: 907e f0af 5413 d640 0000 0000 0000 f03f .~..T..@.......? 740 | 0000040: 0306 0000 0000 0000 0000 0006 ee4f d508 .............O.. 741 | 0000050: 5100 0000 3077 0100 7d51 d508 000d 50d5 Q...0w..}Q....P. 742 | 0000060: 0851 0000 0030 7701 007d 51d5 0800 2250 .Q...0w..}Q..."P 743 | 0000070: d508 5100 0000 3077 0100 7d51 d508 00d8 ..Q...0w..}Q.... 744 | 0000080: 52d5 0850 0000 0050 8401 00d5 53d5 0800 R..P...P....S... 745 | 0000090: 87bd d508 4100 0000 4048 0100 78be d508 ....A...@H..x... 746 | 00000a0: 0059 ddd5 0873 0000 00d0 fa01 00ef dcd5 .Y...s.......... 747 | 00000b0: 0801 8895 48df d508 fe7c d508 edd8 0969 ....H....|.....i 748 | 00000c0: 6004 8e40 b433 d26c 337b d340 0000 0000 `..@.3.l3{.@.... 749 | 00000d0: 0000 f03f 0306 0300 0000 0000 0000 0006 ...?............ 750 | 00000e0: ee4f d508 5100 0000 3077 0100 7d51 d508 .O..Q...0w..}Q.. 751 | 00000f0: 000d 50d5 0851 0000 0030 7701 007d 51d5 ..P..Q...0w..}Q. 752 | out 753 | 0000000: 0107 0010 06c9 98 ....... 754 | in 755 | 0000000: 010e 0001 0000 0000 0000 0000 2cbb ............,. 756 | out 757 | 0000000: 010b 0012 0600 0000 00cd 61 ..........a 758 | in 759 | 0000000: 0122 0001 0000 0000 1000 0000 0601 0000 .".............. 760 | 0000010: 0000 0000 0000 0000 0000 0000 0000 40ad ..............@. 761 | 0000020: 8e28 .( 762 | out 763 | 0000000: 0107 0010 07e8 88 ....... 764 | in 765 | 0000000: 010e 0001 0000 0000 0100 0000 98cd .............. 766 | out 767 | 0000000: 010b 0012 0701 0000 0028 bd .........(. 768 | in 769 | 0000000: 0122 0001 2100 0000 2000 0000 0701 0100 ."..!... ....... 770 | 0000010: 0000 0000 0000 0000 0000 0000 0000 6b40 ..............k@ 771 | 0000020: f62d .- 772 | out 773 | 0000000: 0107 0010 0807 79 ......y 774 | in 775 | 0000000: 010e 0001 4f0b 0000 7f0b 0000 7bb9 ....O.......{. 776 | out 777 | 0000000: 010c 0011 084f 0b00 0004 0772 .....O.....r 778 | in 779 | 0000000: 0146 0801 b71a 0100 1900 0000 0801 4f0b .F............O. 780 | 0000010: 0000 0000 0000 0000 0000 0000 0000 b622 ..............." 781 | 0000020: 4cf7 d208 0295 d208 093b 0000 0000 0000 L........;...... 782 | 0000030: 0000 f3c6 5af8 d208 1096 d208 0982 0000 ....Z........... 783 | 0000040: 0001 0000 0000 fb1d 79f8 d208 2f96 d208 ........y.../... 784 | 0000050: 093b 0000 0000 0000 0000 3e0b 87f9 d208 .;........>..... 785 | 0000060: 3d97 d208 0982 0000 0001 0000 0000 9ca7 =............... 786 | 0000070: a5f9 d208 5b97 d208 093b 0000 0000 0000 ....[....;...... 787 | 0000080: 0000 2a3c b3fa d208 6998 d208 0982 0000 ..*<....i....... 788 | 0000090: 0001 0000 0000 82b0 d2fa d208 8898 d208 ................ 789 | 00000a0: 093b 0000 0000 0000 0000 a1f7 e0fb d208 .;.............. 790 | 00000b0: 9699 d208 0982 0000 0001 0000 0000 8550 ...............P 791 | 00000c0: fffb d208 b599 d208 093b 0000 0000 0000 .........;...... 792 | 00000d0: 0000 9190 0dfd d208 c39a d208 0982 0000 ................ 793 | 00000e0: 0001 0000 0000 468e 2bfd d208 e19a d208 ......F.+....... 794 | 00000f0: 093b 0000 0000 0000 0000 4d33 3afe d208 .;........M3:... 795 | out 796 | 0000000: 010c 0011 0853 0b00 0004 76fd .....S....v. 797 | in 798 | 0000000: 0146 0801 1b1b 0100 1900 0000 0801 530b .F............S. 799 | 0000010: 0000 0000 0000 0000 0000 0000 0000 33b3 ..............3. 800 | 0000020: ab45 d308 61e3 d208 093b 0000 0000 0000 .E..a....;...... 801 | 0000030: 0000 2651 f545 d308 abe3 d208 0901 6600 ..&Q.E........f. 802 | 0000040: 0404 0000 0000 eb51 f745 d308 ade3 d208 .......Q.E...... 803 | 0000050: 0906 0000 0000 0000 0000 b099 f945 d308 .............E.. 804 | 0000060: afe3 d208 090c 0000 0000 0000 0000 6171 ..............aq 805 | 0000070: fa45 d308 b0e3 d208 0914 0000 0000 0000 .E.............. 806 | 0000080: 0000 8856 fe45 d308 b4e3 d208 0915 0000 ...V.E.......... 807 | 0000090: 0000 0000 0000 a9b0 ff45 d308 b5e3 d208 .........E...... 808 | 00000a0: 0916 0000 0000 0000 0000 bd16 0046 d308 .............F.. 809 | 00000b0: b6e3 d208 090c 0000 0000 0000 0000 440c ..............D. 810 | 00000c0: 1e46 d308 d4e3 d208 093b 0000 0000 0000 .F.......;...... 811 | 00000d0: 0000 2b0a b048 d308 66e6 d208 0901 6700 ..+..H..f.....g. 812 | 00000e0: 0404 0000 0000 eb68 cf48 d308 85e6 d208 .......h.H...... 813 | 00000f0: 093b 0000 0000 0000 0000 de27 3953 d308 .;.........'9S.. 814 | out 815 | 0000000: 010c 0011 0857 0b00 0004 7074 .....W....pt 816 | in 817 | 0000000: 0146 0801 7f1b 0100 1900 0000 0801 570b .F............W. 818 | 0000010: 0000 0000 0000 0000 0000 0000 0000 dae1 ................ 819 | 0000020: 578e d308 0d2c d308 0901 4600 0404 0000 W....,....F..... 820 | 0000030: 0000 bb1a 758e d308 2b2c d308 093b 0000 ....u...+,...;.. 821 | 0000040: 0000 0000 0000 a96b 6c8f d308 222d d308 .......kl..."-.. 822 | 0000050: 0901 4600 0404 0000 0000 a5bf 718f d308 ..F.........q... 823 | 0000060: 272d d308 0906 0000 0000 0000 0000 7072 '-............pr 824 | 0000070: 738f d308 292d d308 090c 0000 0000 0000 s...)-.......... 825 | 0000080: 0000 a78d 748f d308 2a2d d308 0911 0000 ....t...*-...... 826 | 0000090: 0000 0000 0000 1cfd 758f d308 2b2d d308 ........u...+-.. 827 | 00000a0: 0912 0000 0000 0000 0000 085b 768f d308 ...........[v... 828 | 00000b0: 2c2d d308 0913 0000 0000 0000 0000 5fc0 ,-............_. 829 | 00000c0: 778f d308 2d2d d308 090c 0000 0000 0000 w...--.......... 830 | 00000d0: 0000 a580 958f d308 4b2d d308 093b 0000 ........K-...;.. 831 | 00000e0: 0000 0000 0000 0761 3194 d308 e731 d308 .......a1....1.. 832 | 00000f0: 0982 0000 0001 0000 0000 56cc 3394 d308 ..........V.3... 833 | out 834 | 0000000: 010c 0011 085b 0b00 0004 5bff .....[....[. 835 | in 836 | 0000000: 0146 0801 e31b 0100 1900 0000 0801 5b0b .F............[. 837 | 0000010: 0000 0000 0000 0000 0000 0000 0000 0fbf ................ 838 | 0000020: 44ed d308 fa8a d308 0901 2b00 0404 0000 D.........+..... 839 | 0000030: 0000 9606 62ed d308 188b d308 093b 0000 ....b........;.. 840 | 0000040: 0000 0000 0000 f898 fcf2 d308 b290 d308 ................ 841 | 0000050: 0901 3200 0404 0000 0000 38cf 1af3 d308 ..2.......8..... 842 | 0000060: d090 d308 093b 0000 0000 0000 0000 942b .....;.........+ 843 | 0000070: 49f4 d308 ff91 d308 0988 0000 0003 0000 I............... 844 | 0000080: 0000 cf9b 4bf4 d308 0192 d308 0901 3200 ....K.........2. 845 | 0000090: 0404 0000 0000 bdb6 69f4 d308 1f92 d308 ........i....... 846 | 00000a0: 093b 0000 0000 0000 0000 9dc8 7ef5 d308 .;..........~... 847 | 00000b0: 3493 d308 0901 3100 0404 0000 0000 03f1 4.....1......... 848 | 00000c0: 9df5 d308 5393 d308 093b 0000 0000 0000 ....S....;...... 849 | 00000d0: 0000 6a4b faf5 d308 b093 d308 0901 3100 ..jK..........1. 850 | 00000e0: 0404 0000 0000 604c 10f6 d308 c693 d308 ......`L........ 851 | 00000f0: 0906 0000 0000 0000 0000 d6d1 2ef6 d308 ................ 852 | out 853 | 0000000: 010c 0011 085f 0b00 0004 5d76 ....._....]v 854 | in 855 | 0000000: 0146 0801 471c 0100 1900 0000 0801 5f0b .F..G........._. 856 | 0000010: 0000 0000 0000 0000 0000 0000 0000 31a2 ..............1. 857 | 0000020: d120 d408 87be d308 0988 0d00 5f03 0000 . .........._... 858 | 0000030: 0000 7f56 f020 d408 a6be d308 093b 0000 ...V. .......;.. 859 | 0000040: 0000 0000 0000 eade fe21 d408 b4bf d308 .........!...... 860 | 0000050: 0988 0d00 5f03 0000 0000 0021 1c22 d408 ...._......!.".. 861 | 0000060: d2bf d308 093b 0000 0000 0000 0000 f8df .....;.......... 862 | 0000070: 2a23 d408 e0c0 d308 0988 0d00 5f03 0000 *#.........._... 863 | 0000080: 0000 afae 3123 d408 e7c0 d308 0901 3400 ....1#........4. 864 | 0000090: 0404 0000 0000 126b 3323 d408 e9c0 d308 .......k3#...... 865 | 00000a0: 0906 0000 0000 0000 0000 e00c 3523 d408 ............5#.. 866 | 00000b0: ebc0 d308 0901 3400 0404 0000 0000 7b8d ......4.......{. 867 | 00000c0: 5923 d408 0fc1 d308 093b 0000 0000 0000 Y#.......;...... 868 | 00000d0: 0000 b706 302a d408 e6c7 d308 0988 0000 ....0*.......... 869 | 00000e0: 0003 0000 0000 12e8 4f2a d408 05c8 d308 ........O*...... 870 | 00000f0: 093b 0000 0000 0000 0000 ce30 5d2b d408 .;.........0]+.. 871 | out 872 | 0000000: 010c 0011 0863 0b00 0004 98f1 .....c...... 873 | in 874 | 0000000: 0146 0801 ab1c 0100 1900 0000 0801 630b .F............c. 875 | 0000010: 0000 0000 0000 0000 0000 0000 0000 5dbd ..............]. 876 | 0000020: eb6a d408 a108 d408 0906 0000 0000 0000 .j.............. 877 | 0000030: 0000 b3d0 ed6a d408 a308 d408 090c 0000 .....j.......... 878 | 0000040: 0000 0000 0000 0dc9 f16a d408 a708 d408 .........j...... 879 | 0000050: 0911 0000 0000 0000 0000 52ca f36a d408 ..........R..j.. 880 | 0000060: a908 d408 090c 0000 0000 0000 0000 d0d7 ................ 881 | 0000070: f56a d408 ab08 d408 0914 0000 0000 0000 .j.............. 882 | 0000080: 0000 f75b f66a d408 ac08 d408 0915 0000 ...[.j.......... 883 | 0000090: 0000 0000 0000 a0c0 f76a d408 ad08 d408 .........j...... 884 | 00000a0: 0916 0000 0000 0000 0000 b466 f86a d408 ...........f.j.. 885 | 00000b0: ae08 d408 090c 0000 0000 0000 0000 cb56 ...............V 886 | 00000c0: fc6a d408 b208 d408 0914 0000 0000 0000 .j.............. 887 | 00000d0: 0000 540c ff6a d408 b508 d408 0915 0000 ..T..j.......... 888 | 00000e0: 0000 0000 0000 0397 006b d408 b608 d408 .........k...... 889 | 00000f0: 0916 0000 0000 0000 0000 1c3d 006b d408 ...........=.k.. 890 | out 891 | 0000000: 010c 0011 0867 0b00 0004 9e78 .....g.....x 892 | in 893 | 0000000: 0146 0801 0f1d 0100 1900 0000 0801 670b .F............g. 894 | 0000010: 0000 0000 0000 0000 0000 0000 0000 fa2d ...............- 895 | 0000020: ceac d408 844a d408 093b 0000 0000 0000 .....J...;...... 896 | 0000030: 0000 96ae c7af d408 7d4d d408 0988 0000 ........}M...... 897 | 0000040: 0003 0000 0000 336b c9af d408 7f4d d408 ......3k.....M.. 898 | 0000050: 0901 3500 0404 0000 0000 037e e7af d408 ..5........~.... 899 | 0000060: 9d4d d408 093b 0000 0000 0000 0000 c4f7 .M...;.......... 900 | 0000070: 1fb2 d408 d54f d408 0982 0000 0001 0000 .....O.......... 901 | 0000080: 0000 5fbe 21b2 d408 d74f d408 0901 3b00 .._.!....O....;. 902 | 0000090: 0404 0000 0000 4599 40b2 d408 f64f d408 ......E.@....O.. 903 | 00000a0: 093b 0000 0000 0000 0000 d485 cfb6 d408 .;.............. 904 | 00000b0: 8554 d408 0901 3d00 0404 0000 0000 138b .T....=......... 905 | 00000c0: eeb6 d408 a454 d408 093b 0000 0000 0000 .....T...;...... 906 | 00000d0: 0000 d6ec aab8 d408 6056 d408 0901 4200 ........`V....B. 907 | 00000e0: 0404 0000 0000 5be4 abb8 d408 6156 d408 ......[.....aV.. 908 | 00000f0: 0906 0000 0000 0000 0000 7128 adb8 d408 ..........q(.... 909 | out 910 | 0000000: 010c 0011 086b 0b00 0004 b5f3 .....k...... 911 | in 912 | 0000000: 0146 0801 731d 0100 1900 0000 0801 6b0b .F..s.........k. 913 | 0000010: 0000 0000 0000 0000 0000 0000 0000 613a ..............a: 914 | 0000020: 8f13 d508 45b1 d408 0906 0000 0000 0000 ....E........... 915 | 0000030: 0000 6b97 9613 d508 4cb1 d408 090c 0000 ..k.....L....... 916 | 0000040: 0000 0000 0000 581b 9713 d508 4db1 d408 ......X.....M... 917 | 0000050: 0911 0000 0000 0000 0000 c59d 9c13 d508 ................ 918 | 0000060: 52b1 d408 0912 0000 0000 0000 0000 061c R............... 919 | 0000070: af13 d508 65b1 d408 0913 0000 0000 0000 ....e........... 920 | 0000080: 0000 49db b013 d508 66b1 d408 090c 0000 ..I.....f....... 921 | 0000090: 0000 0000 0000 056e ce13 d508 84b1 d408 .......n........ 922 | 00000a0: 093b 0000 0000 0000 0000 5431 2415 d508 .;........T1$... 923 | 00000b0: dab2 d408 0901 4700 0404 0000 0000 7fdc ......G......... 924 | 00000c0: 2715 d508 ddb2 d408 0906 0000 0000 0000 '............... 925 | 00000d0: 0000 cfa3 2b15 d508 e1b2 d408 090c 0000 ....+........... 926 | 00000e0: 0000 0000 0000 6900 4915 d508 ffb2 d408 ......i.I....... 927 | 00000f0: 093b 0000 0000 0000 0000 389d ba15 d508 .;........8..... 928 | out 929 | 0000000: 010c 0011 086f 0b00 0004 b37a .....o.....z 930 | in 931 | 0000000: 0146 0801 d71d 0100 1900 0000 0801 6f0b .F............o. 932 | 0000010: 0000 0000 0000 0000 0000 0000 0000 72ef ..............r. 933 | 0000020: 7973 d508 2f11 d508 0982 0000 0001 0000 ys../........... 934 | 0000030: 0000 4171 9873 d508 4e11 d508 093b 0000 ..Aq.s..N....;.. 935 | 0000040: 0000 0000 0000 0386 a674 d508 5c12 d508 .........t..\... 936 | 0000050: 0982 0000 0001 0000 0000 abde c474 d508 .............t.. 937 | 0000060: 7a12 d508 093b 0000 0000 0000 0000 3d95 z....;........=. 938 | 0000070: d275 d508 8813 d508 0982 0000 0001 0000 .u.............. 939 | 0000080: 0000 a1c0 f175 d508 a713 d508 093b 0000 .....u.......;.. 940 | 0000090: 0000 0000 0000 9310 ff76 d508 b514 d508 .........v...... 941 | 00000a0: 0982 0000 0001 0000 0000 3e09 1d77 d508 ..........>..w.. 942 | 00000b0: d314 d508 093b 0000 0000 0000 0000 ea9e .....;.......... 943 | 00000c0: 2b78 d508 e115 d508 0982 0000 0001 0000 +x.............. 944 | 00000d0: 0000 34a7 4a78 d508 0016 d508 093b 0000 ..4.Jx.......;.. 945 | 00000e0: 0000 0000 0000 b22f 5879 d508 0e17 d508 ......./Xy...... 946 | 00000f0: 0982 0000 0001 0000 0000 bebb 7679 d508 ............vy.. 947 | out 948 | 0000000: 010c 0011 0873 0b00 0004 c2f5 .....s...... 949 | in 950 | 0000000: 0146 0801 3b1e 0100 1900 0000 0801 730b .F..;.........s. 951 | 0000010: 0000 0000 0000 0000 0000 0000 0000 d678 ...............x 952 | 0000020: a1bd d508 575b d508 0901 3e00 0404 0000 ....W[....>..... 953 | 0000030: 0000 6c2c a2bd d508 585b d508 0906 0000 ..l,....X[...... 954 | 0000040: 0000 0000 0000 b251 a4bd d508 5a5b d508 .......Q....Z[.. 955 | 0000050: 0909 0000 0000 0000 0000 c03f a6bd d508 ...........?.... 956 | 0000060: 5c5b d508 090a 0000 0000 0000 0000 a0e9 \[.............. 957 | 0000070: a6bd d508 5c5b d508 090b 0000 0000 0000 ....\[.......... 958 | 0000080: 0000 8302 aabd d508 605b d508 0901 4300 ........`[....C. 959 | 0000090: 0404 0000 0000 2710 c9bd d508 7f5b d508 ......'......[.. 960 | 00000a0: 093b 0000 0000 0000 0000 17e9 21be d508 .;..........!... 961 | 00000b0: d75b d508 0901 4300 0404 0000 0000 434b .[....C.......CK 962 | 00000c0: 25be d508 db5b d508 0906 0000 0000 0000 %....[.......... 963 | 00000d0: 0000 83ad 28be d508 de5b d508 090c 0000 ....(....[...... 964 | 00000e0: 0000 0000 0000 2635 29be d508 df5b d508 ......&5)....[.. 965 | 00000f0: 0914 0000 0000 0000 0000 77c4 2bbe d508 ..........w.+... 966 | out 967 | 0000000: 010c 0011 0877 0b00 0004 c47c .....w.....| 968 | in 969 | 0000000: 0146 0801 9f1e 0100 1900 0000 0801 770b .F............w. 970 | 0000010: 0000 0000 0000 0000 0000 0000 0000 c5ad ................ 971 | 0000020: 3d04 d608 f3a1 d508 0901 4400 0404 0000 =.........D..... 972 | 0000030: 0000 a4d6 4204 d608 f8a1 d508 0906 0000 ....B........... 973 | 0000040: 0000 0000 0000 d88a 6104 d608 17a2 d508 ........a....... 974 | 0000050: 093b 0000 0000 0000 0000 8260 a904 d608 .;.........`.... 975 | 0000060: 5fa2 d508 0901 4400 0404 0000 0000 3920 _.....D.......9 976 | 0000070: ab04 d608 61a2 d508 0906 0000 0000 0000 ....a........... 977 | 0000080: 0000 ffac ac04 d608 62a2 d508 0909 0000 ........b....... 978 | 0000090: 0000 0000 0000 dd49 ae04 d608 64a2 d508 .......I....d... 979 | 00000a0: 090a 0000 0000 0000 0000 bd9f ae04 d608 ................ 980 | 00000b0: 64a2 d508 090b 0000 0000 0000 0000 9e74 d..............t 981 | 00000c0: b204 d608 68a2 d508 0901 4100 0404 0000 ....h.....A..... 982 | 00000d0: 0000 5b40 d004 d608 86a2 d508 093b 0000 ..[@.........;.. 983 | 00000e0: 0000 0000 0000 649a 0905 d608 bfa2 d508 ......d......... 984 | 00000f0: 0901 4000 0404 0000 0000 78cc 2805 d608 ..@.......x.(... 985 | out 986 | 0000000: 010c 0011 087b 0b00 0004 eff7 .....{...... 987 | in 988 | 0000000: 0146 0801 031f 0100 1900 0000 0801 7b0b .F............{. 989 | 0000010: 0000 0000 0000 0000 0000 0000 0000 a4b6 ................ 990 | 0000020: b735 d608 6dd3 d508 0909 0000 0000 0000 .5..m........... 991 | 0000030: 0000 dcc7 b935 d608 6fd3 d508 0906 0000 .....5..o....... 992 | 0000040: 0000 0000 0000 c158 bb35 d608 71d3 d508 .......X.5..q... 993 | 0000050: 090c 0000 0000 0000 0000 e161 bb35 d608 ...........a.5.. 994 | 0000060: 71d3 d508 0911 0000 0000 0000 0000 2c6c q.............,l 995 | 0000070: bd35 d608 73d3 d508 0912 0000 0000 0000 .5..s........... 996 | 0000080: 0000 4eb7 be35 d608 74d3 d508 0913 0000 ..N..5..t....... 997 | 0000090: 0000 0000 0000 192c be35 d608 74d3 d508 .......,.5..t... 998 | 00000a0: 090c 0000 0000 0000 0000 b3e7 dd35 d608 .............5.. 999 | 00000b0: 93d3 d508 093b 0000 0000 0000 0000 203d .....;........ = 1000 | 00000c0: 7b36 d608 31d4 d508 0901 3a00 0404 0000 {6..1.....:..... 1001 | 00000d0: 0000 c4ab 9936 d608 4fd4 d508 093b 0000 .....6..O....;.. 1002 | 00000e0: 0000 0000 0000 ce61 1538 d608 cbd5 d508 .......a.8...... 1003 | 00000f0: 0901 3a00 0404 0000 0000 60ce 3438 d608 ..:.......`.48.. 1004 | out 1005 | 0000000: 010c 0011 087f 0b00 0001 4c2e ..........L. 1006 | in 1007 | 0000000: 0116 0201 671f 0100 1300 0000 0801 7f0b ....g........... 1008 | 0000010: 0000 0000 0000 0000 0000 0000 0000 5e61 ..............^a 1009 | 0000020: 2a83 d608 e020 d608 090a 0000 0000 0000 *.... .......... 1010 | 0000030: 0000 819a 2b83 d608 e120 d608 090b 0000 ....+.... ...... 1011 | 0000040: 0000 0000 0000 f2fa 2e83 d608 e520 d608 ............. .. 1012 | 0000050: 0901 5c00 0404 0000 0000 2dbd 4d83 d608 ..\.......-.M... 1013 | 0000060: 0321 d608 093b 0000 0000 0000 0000 fb52 .!...;.........R 1014 | 0000070: b983 d608 6f21 d608 0901 5a00 0404 0000 ....o!....Z..... 1015 | 0000080: 0000 67d7 d883 d608 8e21 d608 093b 0000 ..g......!...;.. 1016 | 0000090: 0000 0000 0000 5c7d 1c85 d608 d222 d608 ......\}.....".. 1017 | 00000a0: 0901 5b00 0404 0000 0000 e24e 3a85 d608 ..[........N:... 1018 | 00000b0: f022 d608 093b 0000 0000 0000 0000 2259 ."...;........"Y 1019 | 00000c0: 0486 d608 ba23 d608 0901 5900 0404 0000 .....#....Y..... 1020 | 00000d0: 0000 8aeb 2286 d608 d823 d608 093b 0000 ...."....#...;.. 1021 | 00000e0: 0000 0000 0000 5358 5286 d608 0824 d608 ......SXR....$.. 1022 | 00000f0: 0901 5900 0404 0000 0000 82d2 7086 d608 ..Y.........p... 1023 | out 1024 | 0000000: 0107 0010 0926 69 .....&i 1025 | in 1026 | 0000000: 010e 0001 ffff ffff ffff ffff cd1d .............. 1027 | out 1028 | 0000000: 0107 0010 0a45 59 .....EY 1029 | in 1030 | 0000000: 010e 0001 1f00 0000 2200 0000 7c85 ........"...|. 1031 | out 1032 | 0000000: 010b 0012 0a22 0000 00c0 30 ....."....0 1033 | in 1034 | 0000000: 0122 0001 1e04 0000 1500 0000 0a01 2200 ."............". 1035 | 0000010: 0000 0000 0000 0000 0000 0000 0000 4feb ..............O. 1036 | 0000020: 3746 7F 1037 | out 1038 | 0000000: 010c 0011 0a22 0000 0001 5b8f ....."....[. 1039 | in 1040 | 0000000: 0116 0201 1e04 0000 1500 0000 0a01 2200 ..............". 1041 | 0000010: 0000 0000 0000 0000 0000 0000 0000 4feb ..............O. 1042 | 0000020: 49f5 d008 ff92 d008 8700 2bf5 d008 3286 I.........+...2. 1043 | 0000030: 495b d108 fff8 d008 3700 2b5b d108 03e0 I[......7.+[.... 1044 | 0000040: ddcb d108 9369 d108 4b00 bfcb d108 c6f9 .....i..K....... 1045 | 0000050: ebe5 d108 a183 d108 5f00 cde5 d108 21f5 ........_.....!. 1046 | 0000060: 1717 d208 cdb4 d108 4400 f916 d208 4ca6 ........D.....L. 1047 | 0000070: 0daf d208 c34c d208 4900 efae d208 0011 .....L..I....... 1048 | 0000080: a018 d308 56b6 d208 4700 8218 d308 a527 ....V...G......' 1049 | 0000090: 0cae d308 c24b d308 5100 eead d308 59be .....K..Q.....Y. 1050 | 00000a0: 14f8 d308 ca95 d308 2e00 f6f7 d308 975d ...............] 1051 | 00000b0: 326a d408 e807 d408 3900 146a d408 aaf8 2j......9..j.... 1052 | 00000c0: 1ebb d408 d458 d408 5600 00bb d408 7308 .....X..V.....s. 1053 | 00000d0: ba06 d508 70a4 d408 6700 9c06 d508 9144 ....p...g......D 1054 | 00000e0: 0c50 d508 c2ed d408 5100 ee4f d508 d304 .P......Q..O.... 1055 | 00000f0: 2b50 d508 e1ed d408 5100 0d50 d508 bc11 +P......Q..P.... 1056 | out 1057 | 0000000: 0107 0010 0b64 49 .....dI 1058 | in 1059 | 0000000: 010e 0001 5d00 0000 7500 0000 1cd8 ....]...u..... 1060 | out 1061 | 0000000: 010b 0012 0b73 0000 001e 99 .....s..... 1062 | in 1063 | 0000000: 0122 0001 3b0b 0000 1900 0000 0b01 7300 ."..;.........s. 1064 | 0000010: 0000 0000 0000 0000 0000 0000 0000 46d3 ..............F. 1065 | 0000020: e156 .V 1066 | out 1067 | 0000000: 010c 0011 0b73 0000 0003 da55 .....s.....U 1068 | in 1069 | 0000000: 0136 0601 3b0b 0000 1900 0000 0b01 7300 .6..;.........s. 1070 | 0000010: 0000 0000 0000 0000 0000 0000 0000 46d3 ..............F. 1071 | 0000020: ce7f d008 841d d008 0100 641d d008 0400 ..........d..... 1072 | 0000030: 0000 e98b 81b1 d008 374f d008 0200 144f ........7O.....O 1073 | 0000040: d008 5e01 0000 ccfa 2cd2 d008 e26f d008 ..^.....,....o.. 1074 | 0000050: 0100 a86f d008 0b00 0000 d2f6 2fd7 d008 ...o......../... 1075 | 0000060: e574 d008 0100 d074 d008 0300 0000 c650 .t.....t.......P 1076 | 0000070: b9d8 d008 6f76 d008 0100 3876 d008 0400 ....ov....8v.... 1077 | 0000080: 0000 402f 00ed d008 b68a d008 0200 9c8a ..@/............ 1078 | 0000090: d008 fa00 0000 8037 7ff5 d008 3593 d008 .......7....5... 1079 | 00000a0: 0200 0c93 d008 6400 0000 8369 a65b d108 ......d....i.[.. 1080 | 00000b0: 5cf9 d008 0200 3cf9 d008 f401 0000 a920 \.....<........ 1081 | 00000c0: 96cc d108 4c6a d108 0200 346a d108 5802 ....Lj....4j..X. 1082 | 00000d0: 0000 73f1 9acc d108 506a d108 0200 346a ..s.....Pj....4j 1083 | 00000e0: d108 2c01 0000 56f1 77e6 d108 2d84 d108 ..,...V.w...-... 1084 | 00000f0: 0200 fc83 d108 9600 0000 c9a0 5917 d208 ............Y... 1085 | out 1086 | 0000000: 0107 0010 0c83 39 ......9 1087 | in 1088 | 0000000: 010e 0001 0000 0000 0300 0000 f020 ............. 1089 | out 1090 | 0000000: 010b 0012 0c03 0000 00bf bc ........... 1091 | in 1092 | 0000000: 0122 0001 1e00 0000 0a00 0000 0c03 0300 .".............. 1093 | 0000010: 0000 0000 0000 0000 0000 0000 0000 62d0 ..............b. 1094 | 0000020: 159d .. 1095 | -------------------------------------------------------------------------------- /bin/rehex-usb-dump.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | infile=${1-'-'} 4 | 5 | cat $infile | while IFS="," read dir hex ; do 6 | echo $dir 7 | echo $hex | xxd -p -r - - | xxd 8 | 9 | done 10 | 11 | -------------------------------------------------------------------------------- /bin/usblyzer_filter.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Filter input file so that only useful columns are shown. 3 | # Also only show lines with content following (in|out),.*$ 4 | # Playing around shows that each set of data is always represented exactly 5 | # twice, uniq reliably halves it. 6 | cut -d, -f 1,2,3,4,9,16 $1 | egrep "(,(in|out))([,]).*$" \ 7 | | cut -d, -f5- | uniq 8 | ##### 9 | # EOF 10 | -------------------------------------------------------------------------------- /dexcom_reader/Makefile: -------------------------------------------------------------------------------- 1 | 2 | #PATH=?${PATH}:./ 3 | 4 | all: scan \ 5 | status \ 6 | records-meter \ 7 | records-cgm \ 8 | records-user-events \ 9 | records-insertion 10 | 11 | 12 | scan: logs/scan.log.markdown 13 | # $* 14 | 15 | status: logs/status.log.markdown 16 | records-meter: logs/records-meter.log.markdown 17 | records-cgm: logs/records-cgm.log.markdown 18 | records-user-events: logs/records-user-events.log.markdown 19 | records-insertion: logs/records-insertion.log.markdown 20 | 21 | logs/%.log.markdown: dxcom-% 22 | ./$< | tee -a $@ 23 | 24 | ##### 25 | # EOF 26 | -------------------------------------------------------------------------------- /dexcom_reader/README.markdown: -------------------------------------------------------------------------------- 1 | 2 | ## [dexcom_reader](https://github.com/compbrain/dexcom_reader) 3 | 4 | [dexcom_reader](https://github.com/compbrain/dexcom_reader) is a python library implementing 5 | a serial protocol that allows communicating with the newer, circa 2013, dexcom CGM. 6 | 7 | I used these tools to investigate how it works on a friend's device. 8 | -------------------------------------------------------------------------------- /dexcom_reader/dexpager: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # PYTHON_ARGCOMPLETE_OK 3 | 4 | import user 5 | import dexcom_reader 6 | from dexcom_reader import readdata, constants 7 | from pprint import pformat, pprint 8 | import argparse 9 | import sys 10 | import json 11 | import argcomplete 12 | 13 | doc = """ 14 | %(prog)s - Read Dexcom pages. 15 | """ 16 | def get_parser ( ): 17 | parser = argparse.ArgumentParser(description=doc) 18 | parser.add_argument('--out', 19 | type=argparse.FileType('w'), default=sys.stdout) 20 | parser.add_argument('--query', action='store_const', default=False, const=True) 21 | types = constants.RECORD_TYPES 22 | parser.add_argument('type', choices=types) 23 | argcomplete.autocomplete(parser) 24 | return parser 25 | 26 | def main( ): 27 | parser = get_parser( ) 28 | args = parser.parse_args( ) 29 | Dexcom = readdata.Dexcom 30 | device = Dexcom.FindDevice() 31 | if not device: 32 | sys.stderr.write('Could not find Dexcom G4 Receiver!\n') 33 | sys.exit(1) 34 | else: 35 | print device 36 | dex = Dexcom(device) 37 | pprint(args) 38 | if args.query: 39 | page_range = dex.ReadDatabasePageRange(args.type) 40 | print page_range 41 | else: 42 | records = dex.ReadRecords(args.type) 43 | print '### %s records: %d' % (args.type, len(records)) 44 | print '```python' 45 | results = [ ] 46 | for record in records: 47 | if callable(getattr(record, 'to_dict')): 48 | results.append(record.to_dict( )) 49 | else: 50 | results.append(str(record)) 51 | json.dump(results, args.out) 52 | print '```' 53 | print '### Sensor records: %d' % (len(records)) 54 | 55 | if __name__ == '__main__': 56 | main( ) 57 | 58 | ##### 59 | # EOF 60 | -------------------------------------------------------------------------------- /dexcom_reader/dxcom: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | PATH=$PATH:./ 4 | command=$1 5 | candidate="dxcom-$command" 6 | confirmed=$(which $candidate) 7 | 8 | 9 | if [[ -n "$confirmed" ]] ; then 10 | shift 11 | $confirmed $* 12 | 13 | fi 14 | -------------------------------------------------------------------------------- /dexcom_reader/dxcom-records-cal-set: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import user 4 | import dexcom_reader 5 | from dexcom_reader import readdata 6 | from pprint import pformat, pprint 7 | 8 | def main( ): 9 | Dexcom = readdata.Dexcom 10 | device = Dexcom.FindDevice() 11 | if not device: 12 | sys.stderr.write('Could not find Dexcom G4 Receiver!\n') 13 | sys.exit(1) 14 | else: 15 | print device 16 | dex = Dexcom(device) 17 | records = dex.ReadRecords('CAL_SET') 18 | print '### CAL records: %d' % (len(records)) 19 | print '```python' 20 | pprint(records) 21 | print '```' 22 | print '### CAL records: %d' % (len(records)) 23 | print "### Raw dump" 24 | for rec in records: 25 | print '```' 26 | print rec.dump( ) 27 | print '```' 28 | 29 | if __name__ == '__main__': 30 | main( ) 31 | 32 | ##### 33 | # EOF 34 | -------------------------------------------------------------------------------- /dexcom_reader/dxcom-records-cgm: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import user 4 | import dexcom_reader 5 | from dexcom_reader import readdata 6 | from pprint import pformat, pprint 7 | 8 | def main( ): 9 | Dexcom = readdata.Dexcom 10 | device = Dexcom.FindDevice() 11 | if not device: 12 | sys.stderr.write('Could not find Dexcom G4 Receiver!\n') 13 | sys.exit(1) 14 | else: 15 | print device 16 | dex = Dexcom(device) 17 | records = dex.ReadRecords('EGV_DATA') 18 | print '### CGM records: %d' % (len(records)) 19 | print '```python' 20 | pprint(records) 21 | print '```' 22 | print '### CGM records: %d' % (len(records)) 23 | 24 | if __name__ == '__main__': 25 | main( ) 26 | 27 | ##### 28 | # EOF 29 | -------------------------------------------------------------------------------- /dexcom_reader/dxcom-records-insertion: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import user 4 | import dexcom_reader 5 | from dexcom_reader import readdata 6 | from pprint import pformat, pprint 7 | 8 | def main( ): 9 | Dexcom = readdata.Dexcom 10 | device = Dexcom.FindDevice() 11 | if not device: 12 | sys.stderr.write('Could not find Dexcom G4 Receiver!\n') 13 | sys.exit(1) 14 | else: 15 | print device 16 | dex = Dexcom(device) 17 | records = dex.ReadRecords('INSERTION_TIME') 18 | print '### Insertion records: %d' % (len(records)) 19 | print '```python' 20 | pprint(records) 21 | print '```' 22 | print '### Insertion records: %d' % (len(records)) 23 | 24 | if __name__ == '__main__': 25 | main( ) 26 | 27 | ##### 28 | # EOF 29 | -------------------------------------------------------------------------------- /dexcom_reader/dxcom-records-meter: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import user 4 | import dexcom_reader 5 | from dexcom_reader import readdata 6 | from pprint import pformat, pprint 7 | 8 | def main( ): 9 | Dexcom = readdata.Dexcom 10 | device = Dexcom.FindDevice() 11 | if not device: 12 | sys.stderr.write('Could not find Dexcom G4 Receiver!\n') 13 | sys.exit(1) 14 | else: 15 | print device 16 | dex = Dexcom(device) 17 | records = dex.ReadRecords('METER_DATA') 18 | print '### Meter records: %d' % (len(records)) 19 | print '```python' 20 | pprint(records) 21 | print '```' 22 | print '### Meter records: %d' % (len(records)) 23 | 24 | if __name__ == '__main__': 25 | main( ) 26 | 27 | ##### 28 | # EOF 29 | -------------------------------------------------------------------------------- /dexcom_reader/dxcom-records-sensor: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import user 4 | import dexcom_reader 5 | from dexcom_reader import readdata 6 | from pprint import pformat, pprint 7 | 8 | def main( ): 9 | Dexcom = readdata.Dexcom 10 | device = Dexcom.FindDevice() 11 | if not device: 12 | sys.stderr.write('Could not find Dexcom G4 Receiver!\n') 13 | sys.exit(1) 14 | else: 15 | print device 16 | dex = Dexcom(device) 17 | records = dex.ReadRecords('SENSOR_DATA') 18 | print '### Sensor records: %d' % (len(records)) 19 | print '```python' 20 | for record in records: 21 | pprint(record.to_dict( )) 22 | print '```' 23 | print '### Sensor records: %d' % (len(records)) 24 | 25 | if __name__ == '__main__': 26 | main( ) 27 | 28 | ##### 29 | # EOF 30 | -------------------------------------------------------------------------------- /dexcom_reader/dxcom-records-user-events: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import user 4 | import dexcom_reader 5 | from dexcom_reader import readdata 6 | from pprint import pformat, pprint 7 | 8 | def main( ): 9 | Dexcom = readdata.Dexcom 10 | device = Dexcom.FindDevice() 11 | if not device: 12 | sys.stderr.write('Could not find Dexcom G4 Receiver!\n') 13 | sys.exit(1) 14 | else: 15 | print device 16 | dex = Dexcom(device) 17 | records = dex.ReadRecords('USER_EVENT_DATA') 18 | print '### Event records: %d' % (len(records)) 19 | print '```python' 20 | pprint(records) 21 | print '```' 22 | print '### Event records: %d' % (len(records)) 23 | 24 | if __name__ == '__main__': 25 | main( ) 26 | 27 | ##### 28 | # EOF 29 | -------------------------------------------------------------------------------- /dexcom_reader/dxcom-scan: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import user 4 | import dexcom_reader 5 | from dexcom_reader import readdata 6 | from pprint import pformat, pprint 7 | 8 | def main( ): 9 | Dexcom = readdata.Dexcom 10 | device = Dexcom.FindDevice() 11 | if not device: 12 | sys.stderr.write('Could not find Dexcom G4 Receiver!\n') 13 | sys.exit(1) 14 | else: 15 | print device 16 | dex = Dexcom(device) 17 | print ('Found %s S/N: %s' 18 | % (dex.GetFirmwareHeader().get('ProductName'), 19 | dex.ReadManufacturingData().get('SerialNumber'))) 20 | 21 | if __name__ == '__main__': 22 | main( ) 23 | -------------------------------------------------------------------------------- /dexcom_reader/dxcom-status: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import user 4 | import dexcom_reader 5 | from dexcom_reader import readdata 6 | from pprint import pformat, pprint 7 | import xml.etree.ElementTree as etree 8 | 9 | def main( ): 10 | Dexcom = readdata.Dexcom 11 | device = Dexcom.FindDevice() 12 | if not device: 13 | sys.stderr.write('Could not find Dexcom G4 Receiver!\n') 14 | sys.exit(1) 15 | else: 16 | print device 17 | dex = Dexcom(device) 18 | print ('Found %s S/N: %s' 19 | % (dex.GetFirmwareHeader().get('ProductName'), 20 | dex.ReadManufacturingData().get('SerialNumber'))) 21 | xml = dex.ReadManufacturingData() 22 | for x in list(xml): 23 | print x 24 | # root.append(xml) 25 | print 26 | print 'Receiver Firmware: %s' % etree.tostring(dex.GetFirmwareHeader( )) 27 | print 'Receiver Manufacturer: %s' % etree.tostring(xml) 28 | print 'Transmitter paired: %s' % dex.ReadTransmitterId() 29 | print 'Battery Status: %s (%d%%)' % (dex.ReadBatteryState(), 30 | dex.ReadBatteryLevel()) 31 | 32 | if __name__ == '__main__': 33 | main( ) 34 | -------------------------------------------------------------------------------- /dexcom_reader/logs/records-insertion.log.markdown: -------------------------------------------------------------------------------- 1 | /dev/ttyACM0 2 | ### Insertion records: 33 3 | ```python 4 | [2013-06-29 16:11:11: state=STARTED, 5 | 2013-07-03 08:21:26: state=COUNTS_DEVIATION, 6 | 2013-07-03 08:22:13: state=STARTED, 7 | 2013-07-06 08:55:25: state=COUNTS_DEVIATION, 8 | 2013-07-06 09:20:17: state=STARTED, 9 | 2013-07-08 00:55:20: state=COUNTS_DEVIATION, 10 | 2013-07-10 20:38:22: state=STARTED, 11 | 2013-07-17 23:12:16: state=REMOVED, 12 | 2013-07-17 23:12:23: state=STARTED, 13 | 2013-07-22 20:12:56: state=REMOVED, 14 | 2013-07-22 23:30:15: state=STARTED, 15 | 2013-07-29 23:30:15: state=EXPIRED, 16 | 2013-07-29 23:30:25: state=STARTED, 17 | 2013-08-05 23:29:28: state=EXPIRED, 18 | 2013-08-06 07:48:09: state=STARTED, 19 | 2013-08-13 07:48:09: state=EXPIRED, 20 | 2013-08-13 07:48:21: state=STARTED, 21 | 2013-08-15 00:45:49: state=COUNTS_DEVIATION, 22 | 2013-08-15 09:06:14: state=STARTED, 23 | 2013-08-22 09:06:15: state=EXPIRED, 24 | 2013-08-22 09:11:24: state=STARTED, 25 | 2013-08-25 22:01:04: state=REMOVED, 26 | 2013-08-25 22:01:10: state=STARTED, 27 | 2013-09-02 00:00:22: state=EXPIRED, 28 | 2013-09-02 00:00:30: state=STARTED, 29 | 2013-09-04 07:26:18: state=REMOVED, 30 | 2013-09-04 07:26:24: state=STARTED, 31 | 2013-09-11 06:59:36: state=EXPIRED, 32 | 2013-09-11 06:59:42: state=STARTED, 33 | 2013-09-13 04:17:54: state=COUNTS_DEVIATION, 34 | 2013-09-20 07:10:28: state=STARTED, 35 | 2013-09-27 13:21:58: state=REMOVED, 36 | 2013-09-27 13:49:16: state=STARTED] 37 | ``` 38 | ### Insertion records: 33 39 | -------------------------------------------------------------------------------- /dexcom_reader/logs/records-meter.log.markdown: -------------------------------------------------------------------------------- 1 | /dev/ttyACM0 2 | ### Meter records: 93 3 | ```python 4 | [2013-09-23 20:30:18: Meter BG:154, 5 | 2013-09-24 11:36:40: Meter BG:161, 6 | 2013-09-24 11:37:17: Meter BG:134, 7 | 2013-09-24 11:37:59: Meter BG:157, 8 | 2013-09-24 11:38:31: Meter BG:157, 9 | 2013-09-25 05:36:45: Meter BG:154, 10 | 2013-09-25 10:12:56: Meter BG:303, 11 | 2013-09-26 01:56:31: Meter BG:203, 12 | 2013-09-26 09:31:30: Meter BG:139, 13 | 2013-09-27 16:48:21: Meter BG:109, 14 | 2013-09-27 16:48:32: Meter BG:115, 15 | 2013-09-27 20:31:01: Meter BG:201, 16 | 2013-09-28 00:22:22: Meter BG:62, 17 | 2013-09-28 05:10:15: Meter BG:118, 18 | 2013-09-28 10:30:38: Meter BG:121, 19 | 2013-09-28 13:47:32: Meter BG:151, 20 | 2013-09-28 17:25:33: Meter BG:109, 21 | 2013-09-28 21:23:49: Meter BG:64, 22 | 2013-09-29 04:22:21: Meter BG:116, 23 | 2013-09-29 06:52:55: Meter BG:51, 24 | 2013-09-29 10:32:42: Meter BG:81, 25 | 2013-09-29 14:45:45: Meter BG:57, 26 | 2013-09-29 20:56:29: Meter BG:99, 27 | 2013-09-29 23:35:55: Meter BG:148, 28 | 2013-09-30 13:24:24: Meter BG:163, 29 | 2013-09-30 23:46:59: Meter BG:178, 30 | 2013-10-02 13:11:53: Meter BG:155, 31 | 2013-10-02 13:12:06: Meter BG:167, 32 | 2013-10-02 13:12:47: Meter BG:151, 33 | 2013-10-02 14:55:14: Meter BG:100, 34 | 2013-10-02 19:58:47: Meter BG:209, 35 | 2013-10-14 00:47:06: Meter BG:193, 36 | 2013-10-14 00:47:22: Meter BG:194, 37 | 2013-10-14 06:50:39: Meter BG:164, 38 | 2013-10-14 11:43:39: Meter BG:117, 39 | 2013-10-14 14:28:11: Meter BG:215, 40 | 2013-10-14 14:28:21: Meter BG:206, 41 | 2013-10-22 16:09:42: Meter BG:126, 42 | 2013-10-22 16:10:31: Meter BG:110, 43 | 2013-10-22 21:50:47: Meter BG:164, 44 | 2013-10-23 00:55:26: Meter BG:211, 45 | 2013-10-23 04:39:02: Meter BG:70, 46 | 2013-10-23 07:09:39: Meter BG:105, 47 | 2013-10-23 11:50:19: Meter BG:189, 48 | 2013-10-23 12:45:01: Meter BG:172, 49 | 2013-10-23 19:24:37: Meter BG:161, 50 | 2013-10-23 20:14:44: Meter BG:186, 51 | 2013-10-23 21:49:53: Meter BG:173, 52 | 2013-10-24 06:27:58: Meter BG:198, 53 | 2013-10-24 06:28:59: Meter BG:200, 54 | 2013-10-24 14:41:09: Meter BG:205, 55 | 2013-10-24 15:04:52: Meter BG:236, 56 | 2013-10-24 22:50:02: Meter BG:190, 57 | 2013-10-25 08:41:45: Meter BG:161, 58 | 2013-10-25 16:32:27: Meter BG:209, 59 | 2013-10-25 16:32:38: Meter BG:215, 60 | 2013-10-25 19:54:35: Meter BG:117, 61 | 2013-10-25 22:57:33: Meter BG:99, 62 | 2013-10-26 00:27:38: Meter BG:129, 63 | 2013-10-26 10:26:51: Meter BG:147, 64 | 2013-10-26 13:05:00: Meter BG:141, 65 | 2013-10-26 17:34:52: Meter BG:116, 66 | 2013-10-27 00:44:35: Meter BG:92, 67 | 2013-10-27 19:27:29: Meter BG:106, 68 | 2013-10-28 01:19:50: Meter BG:74, 69 | 2013-10-28 05:13:43: Meter BG:372, 70 | 2013-10-28 08:02:59: Meter BG:258, 71 | 2013-10-28 11:07:56: Meter BG:133, 72 | 2013-10-28 21:54:25: Meter BG:151, 73 | 2013-10-29 07:08:54: Meter BG:176, 74 | 2013-10-30 01:19:30: Meter BG:72, 75 | 2013-10-30 01:19:56: Meter BG:64, 76 | 2013-10-30 07:36:59: Meter BG:129, 77 | 2013-10-30 09:54:52: Meter BG:151, 78 | 2013-10-30 12:36:43: Meter BG:201, 79 | 2013-10-30 15:20:03: Meter BG:71, 80 | 2013-10-31 08:40:14: Meter BG:224, 81 | 2013-10-31 08:40:39: Meter BG:233, 82 | 2013-10-31 11:04:40: Meter BG:191, 83 | 2013-11-01 06:22:04: Meter BG:421, 84 | 2013-11-01 06:22:41: Meter BG:429, 85 | 2013-11-01 06:39:07: Meter BG:371, 86 | 2013-11-01 08:05:27: Meter BG:294, 87 | 2013-11-01 10:36:46: Meter BG:143, 88 | 2013-11-01 14:22:51: Meter BG:62, 89 | 2013-11-02 06:31:29: Meter BG:158, 90 | 2013-11-02 16:03:05: Meter BG:86, 91 | 2013-11-02 23:25:28: Meter BG:265, 92 | 2013-11-03 21:28:48: Meter BG:126, 93 | 2013-11-04 08:57:48: Meter BG:190, 94 | 2013-11-04 11:55:24: Meter BG:187, 95 | 2013-11-04 19:54:42: Meter BG:74, 96 | 2013-11-05 16:43:16: Meter BG:155] 97 | ``` 98 | ### Meter records: 93 99 | -------------------------------------------------------------------------------- /dexcom_reader/logs/records-user-events.log.markdown: -------------------------------------------------------------------------------- 1 | /dev/ttyACM0 2 | ### Event records: 1 3 | ```python 4 | [2012-12-26 16:03:00: event_type=HEALTH sub_type=ALCOHOL value=0] 5 | ``` 6 | ### Event records: 1 7 | -------------------------------------------------------------------------------- /dexcom_reader/logs/scan.log.markdown: -------------------------------------------------------------------------------- 1 | /dev/ttyACM0 2 | Found Dexcom G4 Receiver S/N: SM23779877 3 | -------------------------------------------------------------------------------- /dexcom_reader/logs/status.log.markdown: -------------------------------------------------------------------------------- 1 | /dev/ttyACM0 2 | Found Dexcom G4 Receiver S/N: SM23779877 3 | Transmitter paired: 60H2W 4 | Battery Status: CHARGING (86%) 5 | -------------------------------------------------------------------------------- /friend-01/README.markdown: -------------------------------------------------------------------------------- 1 | 2 | # peer review and collaboration 3 | 4 | The following was result of discussion from friends working on 5 | the same problem: 6 | 7 | 8 | 9 | After sending "`01 07 00 10 04 8b b8`", the dex will reply with 10 | how many pages of data it has in bytes 8,9. The “07” I believe 11 | is asking for glucose data, there’s 11ish record types that you 12 | can ask for, 13 | 14 | My code just asks for the last page, then figures out where the 15 | last value is. You’d want to do a loop and retrieve all the 16 | pages. 17 | 18 | ## caveats 19 | 20 | > I have some concerns about legal issues that could arise, 21 | > hence I’m avoiding giving anything away that works. Some 22 | > idiot could play with this, and die because they 23 | > misinterpreted something. Hence, I wouldn’t want to give 24 | > anybody an exe that could (due to a bug I created), return an 25 | > erroneous result, and I get sued. 26 | 27 | ### examples 28 | 29 | * the dex records a glucose value of 5 or 10 (I forget which), when it’s having a sensor issue. 30 | * You can brick the dexcom. Send the wrong sequence and it’s dead. I know. There’s an enable samba method that you DO NOT want to call. 31 | * Also, it appears if you send enough malformed requests, it may decide it has a hardware fault. 32 | * It takes a couple of full restarts with a paperclip, before it comes out of that. 33 | 34 | I couldn’t find the time, it’s easy to get from c#, you could 35 | trace from there. I’d like the time, but I couldn’t figure it 36 | out. 37 | 38 | Anyway, I thought the time could be something like seconds since the epoch … so may be hard to deduce. You can also read the battery level, again, I had the hex for it, but I couldn’t work out how to get the real value. 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /friend-01/crc.markdown: -------------------------------------------------------------------------------- 1 | 2 | ## crc calculation 3 | 4 | ```csharp 5 | 6 | using System; 7 | using System.Collections.Generic; 8 | using System.Linq; 9 | using System.Text; 10 | 11 | namespace DexWatchPi 12 | { 13 | 14 | using System; 15 | 16 | public class Crc 17 | { 18 | 19 | // Fields 20 | private static ushort[] m_crc16Table = new ushort[] { 21 | 0, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 22 | 0x1231, 0x210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, 23 | 0x2462, 0x3443, 0x420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d, 24 | 0x3653, 0x2672, 0x1611, 0x630, 0x76d7, 0x66f6, 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 25 | 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x840, 0x1861, 0x2802, 0x3823, 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b, 26 | 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0xa50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a, 27 | 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0xc60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 28 | 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0xe70, 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78, 29 | 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0xa1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067, 30 | 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, 0x2b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256, 31 | 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d, 0x34e2, 0x24c3, 0x14a0, 0x481, 0x7466, 0x6447, 0x5424, 0x4405, 32 | 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2, 0x691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634, 33 | 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x8e1, 0x3882, 0x28a3, 34 | 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0xaf1, 0x1ad0, 0x2ab3, 0x3a92, 35 | 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0xcc1, 36 | 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0xed1, 0x1ef0 37 | }; 38 | private static uint[] m_crc32Table = new uint[0x100]; 39 | private static byte[] m_crc8Table = new byte[] { 40 | 0, 7, 14, 9, 0x1c, 0x1b, 0x12, 0x15, 0x38, 0x3f, 0x36, 0x31, 0x24, 0x23, 0x2a, 0x2d, 41 | 0x70, 0x77, 0x7e, 0x79, 0x6c, 0x6b, 0x62, 0x65, 0x48, 0x4f, 70, 0x41, 0x54, 0x53, 90, 0x5d, 42 | 0xe0, 0xe7, 0xee, 0xe9, 0xfc, 0xfb, 0xf2, 0xf5, 0xd8, 0xdf, 0xd6, 0xd1, 0xc4, 0xc3, 0xca, 0xcd, 43 | 0x90, 0x97, 0x9e, 0x99, 140, 0x8b, 130, 0x85, 0xa8, 0xaf, 0xa6, 0xa1, 180, 0xb3, 0xba, 0xbd, 44 | 0xc7, 0xc0, 0xc9, 0xce, 0xdb, 220, 0xd5, 210, 0xff, 0xf8, 0xf1, 0xf6, 0xe3, 0xe4, 0xed, 0xea, 45 | 0xb7, 0xb0, 0xb9, 190, 0xab, 0xac, 0xa5, 0xa2, 0x8f, 0x88, 0x81, 0x86, 0x93, 0x94, 0x9d, 0x9a, 46 | 0x27, 0x20, 0x29, 0x2e, 0x3b, 60, 0x35, 50, 0x1f, 0x18, 0x11, 0x16, 3, 4, 13, 10, 47 | 0x57, 80, 0x59, 0x5e, 0x4b, 0x4c, 0x45, 0x42, 0x6f, 0x68, 0x61, 0x66, 0x73, 0x74, 0x7d, 0x7a, 48 | 0x89, 0x8e, 0x87, 0x80, 0x95, 0x92, 0x9b, 0x9c, 0xb1, 0xb6, 0xbf, 0xb8, 0xad, 170, 0xa3, 0xa4, 49 | 0xf9, 0xfe, 0xf7, 240, 0xe5, 0xe2, 0xeb, 0xec, 0xc1, 0xc6, 0xcf, 200, 0xdd, 0xda, 0xd3, 0xd4, 50 | 0x69, 110, 0x67, 0x60, 0x75, 0x72, 0x7b, 0x7c, 0x51, 0x56, 0x5f, 0x58, 0x4d, 0x4a, 0x43, 0x44, 51 | 0x19, 30, 0x17, 0x10, 5, 2, 11, 12, 0x21, 0x26, 0x2f, 40, 0x3d, 0x3a, 0x33, 0x34, 52 | 0x4e, 0x49, 0x40, 0x47, 0x52, 0x55, 0x5c, 0x5b, 0x76, 0x71, 120, 0x7f, 0x6a, 0x6d, 100, 0x63, 53 | 0x3e, 0x39, 0x30, 0x37, 0x22, 0x25, 0x2c, 0x2b, 6, 1, 8, 15, 0x1a, 0x1d, 20, 0x13, 54 | 0xae, 0xa9, 160, 0xa7, 0xb2, 0xb5, 0xbc, 0xbb, 150, 0x91, 0x98, 0x9f, 0x8a, 0x8d, 0x84, 0x83, 55 | 0xde, 0xd9, 0xd0, 0xd7, 0xc2, 0xc5, 0xcc, 0xcb, 230, 0xe1, 0xe8, 0xef, 250, 0xfd, 0xf4, 0xf3 56 | }; 57 | 58 | // Methods 59 | static Crc() 60 | { 61 | DoGenerateCrc32Table(); 62 | } 63 | 64 | public static ushort CalculateCrc16(byte[] buf, int start, int end) 65 | { 66 | ushort num = 0; 67 | for (int i = start; i < end; i++) 68 | { 69 | num = (ushort)((num << 8) ^ m_crc16Table[((num >> 8) ^ buf[i]) & 0xff]); 70 | } 71 | return num; 72 | } 73 | 74 | public static uint CalculateCrc32(byte[] buf, int start, int end) 75 | { 76 | uint maxValue = uint.MaxValue; 77 | for (int i = start; i < end; i++) 78 | { 79 | maxValue = (maxValue >> 8) ^ m_crc32Table[(int)((IntPtr)((maxValue & 0xff) ^ buf[i]))]; 80 | } 81 | return (maxValue ^ uint.MaxValue); 82 | } 83 | 84 | public static byte CalculateCrc8(uint data) 85 | { 86 | byte num = 0; 87 | byte num2 = (byte)(data >> 0x18); 88 | num = m_crc8Table[num ^ num2]; 89 | num2 = (byte)(data >> 0x10); 90 | num = m_crc8Table[num ^ num2]; 91 | num2 = (byte)(data >> 8); 92 | num = m_crc8Table[num ^ num2]; 93 | num2 = (byte)data; 94 | return m_crc8Table[num ^ num2]; 95 | } 96 | 97 | private static void DoGenerateCrc32Table() 98 | { 99 | uint num = 0x4c11db7; 100 | for (uint i = 0; i <= 0xff; i++) 101 | { 102 | m_crc32Table[i] = Reflect(i, '\b') << 0x18; 103 | for (uint j = 0; j < 8; j++) 104 | { 105 | if ((m_crc32Table[i] & 0x80000000) > 0) 106 | { 107 | m_crc32Table[i] = (m_crc32Table[i] << 1) ^ num; 108 | } 109 | else 110 | { 111 | m_crc32Table[i] = m_crc32Table[i] << 1; 112 | } 113 | } 114 | m_crc32Table[i] = Reflect(m_crc32Table[i], ' '); 115 | } 116 | } 117 | 118 | private static uint Reflect(uint reference, char ch) 119 | { 120 | uint num = 0; 121 | for (int i = 1; i < (ch + '\x0001'); i++) 122 | { 123 | if ((reference & 1) > 0) 124 | { 125 | num |= ((uint)1) << ((ushort)(ch - i)); 126 | } 127 | reference = reference >> 1; 128 | } 129 | return num; 130 | } 131 | } 132 | 133 | } 134 | ``` 135 | 136 | -------------------------------------------------------------------------------- /friend-01/instructions.markdown: -------------------------------------------------------------------------------- 1 | 2 | 3 | From windows you can do: 4 | 5 | ```csharp 6 | Dexcom.ReceiverApi.ReceiverApi api = new Dexcom.ReceiverApi.ReceiverApi(); 7 | api.Connect(); 8 | System.Xml.XmlDocument xd = Dexcom.ReceiverApi.DownloadReceiverHelper.DownloadReceiver(api, Dexcom.ReceiverApi.ReceiverValues.AllKnownReceiverRecords, null, null); 9 | api.Disconnect(); 10 | api.Dispose(); 11 | System.Xml.XmlDocument xd1 = Dexcom.ReceiverApi.ReceiverTools.ExpandReceiverDownload(xd); 12 | xd1.Save("dexfile.xml"); 13 | ``` 14 | 15 | That gets you a dump of everything on the Dex. Using this program I used a serial port monitor to figure out 16 | what needs to be sent to the Dex. 17 | 18 | You basically ask it how many pages of data it has. Then you request the last page. 19 | You also ask how many readings are in the last page, that allows you to parse out the final record. 20 | 21 | 22 | ```csharp 23 | //Establish a Serial Connection 24 | 25 | mySerial = new System.IO.Ports.SerialPort("/dev/ttyACM0", 115200); 26 | 27 | 28 | //This gets the Dexcom ready to talk to you 29 | SendData(HexToByte("01 06 00 0a 5e 65")); 30 | 31 | 32 | //this asks for a count of the number of pages in use 33 | SendData(HexToByte("01 07 00 10 04 8b b8")); 34 | received = ReadData(); 35 | 36 | byte[] comCommand; 37 | //most of this is just place holders 38 | //will fill in with real information as we go 39 | // 40 | comCommand = HexToByte("01 0c 00 11 04 44 00 00 00 01 a1 db"); 41 | byte[] page = HexToByte(received); 42 | comCommand[5] = page[8]; 43 | comCommand[6] = page[9]; 44 | 45 | //this is the CRC calculation, a checksum on the packet you are sending 46 | //the code for the crc is a copy of what dexcom uses 47 | uint crc2 = Crc.CalculateCrc16(comCommand, 0, 10); 48 | 49 | byte[] CRC = HexToByte(crc2.ToString("X").PadLeft(4, '0')); 50 | 51 | //switch the order of the bytes 52 | comCommand[10] = CRC[1]; 53 | comCommand[11] = CRC[0]; 54 | 55 | //now you are asking for the last page of data 56 | SendData(comCommand); 57 | 58 | 59 | received = ReadData(); 60 | 61 | mySerial.Close(); 62 | 63 | 64 | byte[] receivedByte = HexToByte(received); 65 | byte[] b = new byte[1]; 66 | 67 | 68 | string recordCount = BitConverter.ToString(b); 69 | 70 | int rc = int.Parse(recordCount, System.Globalization.NumberStyles.HexNumber); 71 | 72 | string comData = BitConverter.ToString(receivedByte); 73 | 74 | //ninth byte tells you how many records in the packet 75 | int recordHeader = 108; 76 | int pageCounter = 12; 77 | int glucoseRecord = 27; 78 | 79 | int startPos = recordHeader + ((pageCounter + glucoseRecord) * (rc - 1)) + pageCounter; 80 | int numa = int.Parse(comData.Substring(startPos, 2), System.Globalization.NumberStyles.HexNumber); 81 | int numb=0; 82 | numb = int.Parse(comData.Substring(startPos+3, 2), System.Globalization.NumberStyles.HexNumber); 83 | 84 | if(numb>1){ 85 | numb=0; 86 | } 87 | // if you are over 255, dexcom setsa bit to 1 otherwise it's always 0 88 | numa=numa+(numb*255); 89 | 90 | ``` 91 | 92 | 93 | -------------------------------------------------------------------------------- /friend-01/times.markdown: -------------------------------------------------------------------------------- 1 | Below is what I’ve got for times. 2 | Look through a current trace and anything `E7 08` is most likely a time record. 3 | 4 | When I visualize a dump, I’ve been breaking the data up, by the time stamp, so I wasn’t seeing it… 5 | Example values: 6 | ``` 7 | 8E0014ACC2BDEE75087DB67508 8 | 8E0014ADD814F17508D4B87508 9 | 8900146DA841F2750801BA7508 10 | 8A00149D6B6CF375082CBB7508 11 | 8800141E2A98F4750858BC7508 12 | ``` 13 | 14 | First 4 char’s are the glucose. At the end of each packet is display time and internal time (or the reverse). 15 | For the first line it’s: `BDEE7508 7DB67508` 16 | 17 | Flip them, convert to a number(which will be in seconds) then add to the epoch. 18 | Everything is correct, except the year. 19 | 20 | ``` 21 | 0875EEBD = 141946557 = 01 Jul 1974 21:35:57 22 | 0875B67D = 141932157 = 01 Jul 1974 17:35:57 23 | ``` 24 | 25 | ## Example: 26 | ### Request time ( 3 examples a couple of minutes apart, so I can see what changes) 27 | #### Send 28 | 29 | `01 06 00 22 34 C0` 30 | 31 | #### Returns 32 | ``` 33 | 01 0A 00 01 A7 12 E7 08 B9 80 time was:9/25/2013 ( a couple of minutes before next point 34 | 35 | 01 0A 00 01 36 13 E7 08 A2 07 time was:9/25/2013 5:17:42 36 | 37 | 01 OA 00 01 B8 22 E7 08 55 8A time was:9/25/2013 6:23:52 38 | ``` 39 | 40 | Time is: 41 | `A7 12 E7 08` 42 | 43 | Reverse order, and convert 44 | ``` 45 | x08E712A7 int:149361319 46 | x08E71336 149361462 47 | x08E722B8 149365432 48 | ``` 49 | 50 | Plug the number into http://www.epochconverter.com/, you get the correct time, day and month. The year is off, 1974... 51 | 52 | Time since epoch is `1380134001` 53 | 54 | ## demo 55 | 56 | ``` 57 | //This gets the Dexcom ready to talk to you 58 | 01 06 00 0a 5e 65 59 | 60 | //Request number of pages 61 | 01 07 00 10 04 8b b8 62 | ``` 63 | 64 | Just using `01 0c 00 11 04 44 00 00 00 01 a1 db` as a template of what to fill in 65 | Bytes 6 and 7 are the number of the page you are requesting, from bytes 9 and 10 of the response from above 66 | Bytes 11 and 12 are the crc checksum 67 | Byte 2 is the number of bytes in the packet 68 | 69 | ```csharp 70 | 71 | comCommand = HexToByte("01 0c 00 11 04 44 00 00 00 01 a1 db"); 72 | byte[] page = HexToByte(received); 73 | comCommand[5] = page[8]; //byte 9 of the last response 74 | comCommand[6] = page[9]; //byte 10 of the last response 75 | 76 | //this is the CRC calculation, a checksum on the packet you are sending 77 | //the code for the crc is a copy of what dexcom uses 78 | uint crc2 = Crc.CalculateCrc16(comCommand, 0, 10); 79 | 80 | byte[] CRC = HexToByte(crc2.ToString("X").PadLeft(4, '0')); 81 | 82 | //switch the order of the crc bytes 83 | comCommand[10] = CRC[1]; 84 | comCommand[11] = CRC[0]; 85 | ``` 86 | 87 | Send it. 88 | 89 | You get back a Page of data 90 | 91 | ``` 92 | --Header-- LR 93 | 01 46 08 01 6A 62 00 00 26 00 00 00 04 02 97 02 94 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 41 22 95 | 96 | --Date 1--- --Date 2--- gl fl 97 | D5 24 BF 08 95 EC BE 08 B3 00 25 89 9A 98 | 01 26 BF 08 C1 ED BE 08 B0 00 25 A7 BA 99 | 2E 27 BF 08 EE EE BE 08 B0 00 24 75 CE 100 | 59 28 BF 08 19 F0 BE 08 B3 00 14 13 C9 101 | 85 29 BF 08 45 F1 BE 08 B3 00 14 81 30 102 | B1 2A BF 08 71 F2 BE 08 B0 00 14 B5 20 103 | DD 2B BF 08 9D F3 BE 08 AD 00 14 8C 5C 104 | 09 2D BF 08 C9 F4 BE 08 B4 00 14 D4 D8 105 | 35 2E BF 08 F5 F5 BE 08 B7 00 14 83 72 106 | 61 2F BF 08 21 F7 BE 08 B5 00 14 E1 38 107 | 8D 30 BF 08 4D F8 BE 08 B2 00 14 E8 CF 108 | B9 31 BF 08 79 F9 BE 08 B5 00 14 D6 56 109 | E5 32 BF 08 A5 FA BE 08 B4 00 14 ED EF 110 | 11 34 BF 08 D1 FB BE 08 B2 00 14 8A 4D 111 | 3D 35 BF 08 FD FC BE 08 AF 00 14 92 8E 112 | 69 36 BF 08 29 FE BE 08 AB 00 14 DA A8 113 | 95 37 BF 08 55 FF BE 08 9F 00 15 80 9C 114 | ... 115 | ``` 116 | 117 | The header is 32 bytes. A single glucose record is 13 bytes. 118 | The last record counter is byte 9. 119 | 120 | Get to the start of the last glucose record with: 121 | 122 | ```csharp 123 | startPos = recordHeaderLength + (( glucoseRecordLength) * (lastRecord - 1)); 124 | ``` 125 | 126 | Glucose is Byte 9, Byte 10 indicates if you are over 255. If byte 10 is 1 then add 255 to the value from byte 9. 127 | 128 | Dates are bytes 1-4 and 5-8, convert to int, add to the epoch(1970). The calculated year is wrong. 129 | If you use 2009 for the Epoch, then everything is correct... 130 | First Date is gmt, second is display time. 131 | 132 | 133 | A Glucose value of 5 means there's a sensor error or you're in the calibration period. 134 | -------------------------------------------------------------------------------- /henrik/README.markdown: -------------------------------------------------------------------------------- 1 | 2 | ## Dexcom RF 3 | 4 | OK, back on track and a leap forward! Got a [CC2511EMK](http://www.ti.com/tool/cc2511emk) 5 | It is the exact same chipset as being used in G4 transmitter but with 6 | USB interface. 7 | 8 | Started sniffing on the frequency mentioned in pump datasheet and the 9 | frames below were sent EXACTLY every 299984 [ms]. Nothing else was 10 | transmitted. Made a little dance, sorry didn’t video it :=) 11 | 12 | So, what protocol is used? FCS ERROR is based on (hardware check) 13 | frame checksum, and it signaled ERROR as soon as I went more than 14 | 3-4 meters from the sensor. I am 100% confident it is reliable. FCS 15 | ERROR is used in “SimpliciTI” protocol. Can it be? Yes, seems so; 16 | Dest Address FFFFFFFF is broadcast according to protocol, seems 17 | logical. Same with source address, it is unique numbers, solid every 18 | transmission. 19 | [Dexcom datasheet](http://www.dexcom.com/sites/dexcom.com/files/dexcom-g4/docs/dexcomG4-UsersGuide-English-mmol24hr.pdf) gives me 20 | 21 | ``` 22 | PARAMETER PERFORMANCE CHARACTERISTICS 23 | TX/RX Frequencies 24 | 2.424 999 877 GHz 25 | 2.449 993 677 GHz 26 | 2.474 737 539 GHz 27 | 2.477 236 919 GHz 28 | Bandwidth 334.7 kHz 29 | Maximum Output Power 1.25 mW EIRP 30 | Modulation Minimum Shift Key 31 | Data Rate 49.987 Kbits/Sec 32 | Total Packet 224 bits 33 | Transmit Duty Cycle 4.48 ms every 5 minutes at each of the 34 | four TX frequencies. 35 | 36 | ``` 37 | 38 | ### PARAMETER PERFORMANCE CHARACTERISTICS 39 | Transmit Duty Cycle 4.48 ms every 5 minutes at each 40 | of the four TX frequencies. 41 | Data Detection Range 20 feet 42 | 43 | 44 | #### capture 45 | 46 | Never mind the middle frame, it is corrupted on purpose (lost signal 47 | because of range). “Transaction ID” adds up, I bet the other 48 | frequencies has matching ID’s. 49 | 50 | So, the “Application payload” seems very much be the info of 51 | interest. They are the last 7 bytes of the following dump (where the 52 | number after “:” is the glucose readout I did on the Animas Vibe). 53 | 54 | ``` 55 | FF FF FF FF 15 1F 60 00 3F 02 11 29 29 9B DE D7 00 8B : ?.? FCS 56 | ERROR 57 | FF FF FF FF 11 1F 60 00 3F 03 57 4F 29 50 2E D7 00 C6 : 4.6 58 | FF FF FF FF 11 1F 60 00 3F 03 5B C1 29 AE 2E D8 00 89 : 4.5 59 | FF FF FF FF 11 1F 60 00 3F 03 5F C3 C9 B5 2E D7 00 7A : 4.3 60 | FF FF FF FF 11 1F 60 00 3F 03 63 2A C9 B6 2E D7 00 EE : 4.2 61 | FF FF FF FF 11 1F 60 00 3F 03 67 FA C9 5B CE D7 00 77 : 4.2 62 | FF FF FF FF 11 1F 60 00 3F 03 6B 58 A9 51 CE D8 00 9E : 4.7 63 | FF FF FF FF 11 1F 60 00 3F 03 6F 83 19 FC 2E D7 00 D8 : 4.4 64 | FF FF FF FF 11 1F 60 00 3F 03 73 A5 B9 91 6E D8 00 9B : 5.0 65 | FF FF FF FF 11 1F 60 00 37 03 77 7C 0D 5C 5E D7 00 58 : 6.0 66 | FF FF FF FF 11 1F 60 00 3F 03 7B 75 0D 2C 7E D8 00 34 : 7.3 67 | FF FF FF FF 11 1F 60 00 3F 03 7F 9B 4D E3 09 D7 00 21 : 8.3 68 | FF FF FF FF 11 1F 60 00 3F 03 83 ED CD 90 49 D8 00 93 : 9.0 69 | FF FF FF FF 11 1F 60 00 3F 03 87 EC 2D 50 C9 D7 00 DA : 9.6 70 | FF FF FF FF 11 1F 60 00 3F 03 8B 3E 2D C7 C9 D8 00 6F : 10.1 71 | FF FF FF FF 11 1F 60 00 3F 03 8F B5 2D 8E 29 D8 00 BD : 10.4 72 | FF FF FF FF 11 1F 60 00 3F 03 93 20 AD 9D 29 D8 00 93 : ? 73 | FF FF FF FF 11 1F 60 00 3F 03 97 5C AD 87 29 D8 00 7D : 10.9 74 | 75 | 76 | ``` 77 | -------------------------------------------------------------------------------- /henrik/explain.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bewest/decoding-dexcom/470bb8f0cd2c135a6a3f3342e0ba25b6e4fa57bb/henrik/explain.jpg -------------------------------------------------------------------------------- /henrik/prologue.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bewest/decoding-dexcom/470bb8f0cd2c135a6a3f3342e0ba25b6e4fa57bb/henrik/prologue.jpg -------------------------------------------------------------------------------- /henrik/test_gui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bewest/decoding-dexcom/470bb8f0cd2c135a6a3f3342e0ba25b6e4fa57bb/henrik/test_gui.png -------------------------------------------------------------------------------- /times.markdown: -------------------------------------------------------------------------------- 1 | 2 | ### interesting flow 3 | 4 | This is 5 | [alexandre's contribution](https://github.com/bewest/decoding-dexcom/blob/master/alexandre-normand/rehexed-incr.txt#L2245-L2313) 6 | 7 | Couple of things to notice. Total **in** length is `1059` bytes long: 8 | 32 byte header, then a 1024 data length segment. 9 | 10 | 11 | 12 | ```hex 13 | out 14 | 0000000: 010c 0011 0a22 0000 0002 38bf ....."....8. 15 | in 16 | 0000000: 0126 0401 1e04 0000 1f00 0000 0a01 2200 .&............". 17 | 0000010: 0000 0000 0000 0000 0000 0000 0000 5c6e ..............\n 18 | 0000020: 49f5 d008 ff92 d008 8700 2bf5 d008 3286 I.........+...2. 19 | 0000030: 495b d108 fff8 d008 3700 2b5b d108 03e0 I[......7.+[.... 20 | 0000040: ddcb d108 9369 d108 4b00 bfcb d108 c6f9 .....i..K....... 21 | 0000050: ebe5 d108 a183 d108 5f00 cde5 d108 21f5 ........_.....!. 22 | 0000060: 1717 d208 cdb4 d108 4400 f916 d208 4ca6 ........D.....L. 23 | 0000070: 0daf d208 c34c d208 4900 efae d208 0011 .....L..I....... 24 | 0000080: a018 d308 56b6 d208 4700 8218 d308 a527 ....V...G......' 25 | 0000090: 0cae d308 c24b d308 5100 eead d308 59be .....K..Q.....Y. 26 | 00000a0: 14f8 d308 ca95 d308 2e00 f6f7 d308 975d ...............] 27 | 00000b0: 326a d408 e807 d408 3900 146a d408 aaf8 2j......9..j.... 28 | 00000c0: 1ebb d408 d458 d408 5600 00bb d408 7308 .....X..V.....s. 29 | 00000d0: ba06 d508 70a4 d408 6700 9c06 d508 9144 ....p...g......D 30 | 00000e0: 0c50 d508 c2ed d408 5100 ee4f d508 d304 .P......Q..O.... 31 | 00000f0: 2b50 d508 e1ed d408 5100 0d50 d508 bc11 +P......Q..P.... 32 | 0000100: 4050 d508 f6ed d408 5100 2250 d508 c8aa @P......Q."P.... 33 | 0000110: f652 d508 acf0 d408 5000 d852 d508 8984 .R......P..R.... 34 | 0000120: a5bd d508 5b5b d508 4100 87bd d508 b0e9 ....[[..A....... 35 | 0000130: 77dd d508 2d7b d508 7300 59dd d508 c0ec w...-{..s.Y..... 36 | 0000140: ad04 d608 63a2 d508 4000 8f04 d608 3a03 ....c...@.....:. 37 | 0000150: 7e52 d608 34f0 d508 4500 6052 d608 fd38 ~R..4...E.`R...8 38 | 0000160: 2a83 d608 e020 d608 6100 0c83 d608 3737 *.... ..a.....77 39 | 0000170: 3c93 d608 f230 d608 6f00 1e93 d608 fec0 <....0..o....... 40 | 0000180: 9c9c d608 523a d608 7200 7e9c d608 98d8 ....R:..r.~..... 41 | 0000190: 6512 d708 1bb0 d608 3e00 4712 d708 b6f7 e.......>.G..... 42 | 00001a0: e935 d708 9fd3 d608 5300 cb35 d708 014d .5......S..5...M 43 | 00001b0: 0e36 d708 c4d3 d608 5000 f035 d708 b2f2 .6......P..5.... 44 | 00001c0: 5959 d708 0ff7 d608 5d00 3b59 d708 5d82 YY......].;Y..]. 45 | 00001d0: b064 d708 6602 d708 5800 9264 d708 8a14 .d..f...X..d.... 46 | 00001e0: 7f78 d708 3516 d708 5100 6178 d708 4609 .x..5...Q.ax..F. 47 | 00001f0: 5d8b d708 1329 d708 3f00 3f8b d708 7eed ]....)..?.?...~. 48 | 0000200: deb4 d708 9452 d708 4f00 c0b4 d708 287d .....R..O.....(} 49 | 0000210: ffff ffff 3d04 0000 0100 0000 0a01 2300 ....=.........#. 50 | 0000220: 0000 0000 0000 0000 0000 0000 0000 5a73 ..............Zs 51 | 0000230: d6c1 d708 8c5f d708 5500 b8c1 d708 a75f ....._..U......_ 52 | 0000240: ffff ffff ffff ffff ffff ffff ffff ffff ................ 53 | 0000250: ffff ffff ffff ffff ffff ffff ffff ffff ................ 54 | 0000260: ffff ffff ffff ffff ffff ffff ffff ffff ................ 55 | 0000270: ffff ffff ffff ffff ffff ffff ffff ffff ................ 56 | 0000280: ffff ffff ffff ffff ffff ffff ffff ffff ................ 57 | 0000290: ffff ffff ffff ffff ffff ffff ffff ffff ................ 58 | 00002a0: ffff ffff ffff ffff ffff ffff ffff ffff ................ 59 | 00002b0: ffff ffff ffff ffff ffff ffff ffff ffff ................ 60 | 00002c0: ffff ffff ffff ffff ffff ffff ffff ffff ................ 61 | 00002d0: ffff ffff ffff ffff ffff ffff ffff ffff ................ 62 | 00002e0: ffff ffff ffff ffff ffff ffff ffff ffff ................ 63 | 00002f0: ffff ffff ffff ffff ffff ffff ffff ffff ................ 64 | 0000300: ffff ffff ffff ffff ffff ffff ffff ffff ................ 65 | 0000310: ffff ffff ffff ffff ffff ffff ffff ffff ................ 66 | 0000320: ffff ffff ffff ffff ffff ffff ffff ffff ................ 67 | 0000330: ffff ffff ffff ffff ffff ffff ffff ffff ................ 68 | 0000340: ffff ffff ffff ffff ffff ffff ffff ffff ................ 69 | 0000350: ffff ffff ffff ffff ffff ffff ffff ffff ................ 70 | 0000360: ffff ffff ffff ffff ffff ffff ffff ffff ................ 71 | 0000370: ffff ffff ffff ffff ffff ffff ffff ffff ................ 72 | 0000380: ffff ffff ffff ffff ffff ffff ffff ffff ................ 73 | 0000390: ffff ffff ffff ffff ffff ffff ffff ffff ................ 74 | 00003a0: ffff ffff ffff ffff ffff ffff ffff ffff ................ 75 | 00003b0: ffff ffff ffff ffff ffff ffff ffff ffff ................ 76 | 00003c0: ffff ffff ffff ffff ffff ffff ffff ffff ................ 77 | 00003d0: ffff ffff ffff ffff ffff ffff ffff ffff ................ 78 | 00003e0: ffff ffff ffff ffff ffff ffff ffff ffff ................ 79 | 00003f0: ffff ffff ffff ffff ffff ffff ffff ffff ................ 80 | 0000400: ffff ffff ffff ffff ffff ffff ffff ffff ................ 81 | 0000410: ffff ffff ffff ffff ffff ffff ffff ffff ................ 82 | 0000420: ffff ffff dd4b .....K 83 | ``` 84 | 85 | ### noticeable ribbons 86 | 87 | Notice those segments like **`dX08`, often paired with `X100` and `X700`**. 88 | 89 | This data segment has ribbons of regular cycles: 90 | ```hex 91 | 00000a0: 14f8 d308 ca95 d308 2e00 f6f7 d308 975d ...............] 92 | 00000b0: 326a d408 e807 d408 3900 146a d408 aaf8 2j......9..j.... 93 | 00000c0: 1ebb d408 d458 d408 5600 00bb d408 7308 .....X..V.....s. 94 | 00000d0: ba06 d508 70a4 d408 6700 9c06 d508 9144 ....p...g......D 95 | 00000e0: 0c50 d508 c2ed d408 5100 ee4f d508 d304 .P......Q..O.... 96 | 00000f0: 2b50 d508 e1ed d408 5100 0d50 d508 bc11 +P......Q..P.... 97 | ``` 98 | 99 | ### xml 100 | 101 | In particular, this seems to match up with the 102 | [XML exported data](https://github.com/bewest/decoding-dexcom/blob/master/alexandre-normand/incremental-export.xml#L95-L109): 103 | 104 | ```xml 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | ``` 122 | 123 | Guessing the cyclical ribbons in the above 124 | data segment refer to the `DisplayTime`'s shown here. 125 | There are a lot of `09`, `0D`, `0B`, `04`, `05`, `03`... 126 | 127 | Also notice how the minutes are every 5 minutes, 3 minutes off the top 128 | of the hour. 129 | 130 | Minutes cycle between: 131 | ```csv 132 | DisplayTime="2013-09-13 03:58:12" 133 | DisplayTime="2013-09-13 04:03:12" 134 | DisplayTime="2013-09-13 04:08:12" 135 | DisplayTime="2013-09-13 04:13:12" 136 | DisplayTime="2013-09-13 04:18:12" 137 | DisplayTime="2013-09-13 04:23:12" 138 | DisplayTime="2013-09-13 04:28:11" 139 | DisplayTime="2013-09-13 04:33:11" 140 | DisplayTime="2013-09-13 04:38:11" 141 | DisplayTime="2013-09-13 04:43:11" 142 | DisplayTime="2013-09-13 04:48:11" 143 | DisplayTime="2013-09-13 04:53:11" 144 | DisplayTime="2013-09-13 04:58:11" 145 | DisplayTime="2013-09-13 05:03:11" 146 | DisplayTime="2013-09-13 05:08:11" 147 | ``` 148 | 149 | The fifth column in the hexdump seems to cycles between: 150 | 151 | ```csv 152 | 1f00 153 | 0000 154 | 8700 155 | 3700 156 | 4b00 157 | 5f00 158 | 4400 159 | 4900 160 | 4700 161 | 5100 162 | 2e00 163 | 3900 164 | 5600 165 | 6700 166 | 5100 167 | 5100 168 | 5100 169 | 5000 170 | 4100 171 | 7300 172 | 4000 173 | 4500 174 | 6100 175 | 6f00 176 | 7200 177 | 3e00 178 | 5300 179 | 5000 180 | 5d00 181 | 5800 182 | 5100 183 | 3f00 184 | 4f00 185 | ``` 186 | 187 | So it seems the fifth column likely has some relationship to minutes. 188 | 189 | 190 | --------------------------------------------------------------------------------