mirror of
https://gitlab.freedesktop.org/libfprint/libfprint.git
synced 2026-05-17 02:08:10 +02:00
validity: Iteration 7 — Device Pairing & Hardware Abstraction Layer
Add HAL (validity_hal.h/c) with per-device lookup table for 4 PIDs (0090, 0097, 009a, 009d). Each entry holds init_hardcoded, clean_slate, reset_blob, db_write_enable blobs and a flash layout with partition table + RSA signature. Add device pairing SSM (validity_pair.h/c) — a 30-state machine that runs as a child of the open SSM when the sensor has no TLS partitions. Phases: raw USB keygen + partition flash, TLS handshake, erase 5 partitions, write 4096-byte TLS flash image, reboot. Integration: - OPEN_PAIR state in open SSM (between FWEXT and TLS_READ_FLASH) - Skipped in emulation, no-fwext, or already-paired cases - Post-reboot returns FP_DEVICE_ERROR_REMOVED for fprintd retry Migration: - validity_db.c and validity_fwext.c now use HAL lookups - Removed hardcoded validity_blob_dbe_009a.inc Tests: 24 new test cases (10 HAL + 14 pairing), 0 regressions. Result: 40 OK, 0 Fail, 2 Skipped.
This commit is contained in:
parent
c120ef0797
commit
a0872b3b65
22 changed files with 7081 additions and 255 deletions
217
libfprint/drivers/validity/doc/07-device-pairing-and-hal.md
Normal file
217
libfprint/drivers/validity/doc/07-device-pairing-and-hal.md
Normal file
|
|
@ -0,0 +1,217 @@
|
|||
# Iteration 7: Device Pairing & Hardware Abstraction Layer (HAL)
|
||||
|
||||
## Overview
|
||||
|
||||
Iteration 7 introduces two major subsystems:
|
||||
|
||||
1. **Hardware Abstraction Layer (HAL)** — A lookup table that maps device PIDs to
|
||||
their per-device blobs (init_hardcoded, clean_slate, reset_blob, db_write_enable)
|
||||
and flash layout (partition table + RSA signature).
|
||||
|
||||
2. **Device Pairing** — A 30-state SSM that performs first-time pairing when the
|
||||
sensor has no TLS flash partitions. This involves ECDH key exchange, certificate
|
||||
generation, partition table flashing, TLS handshake, erase cycles, and writing
|
||||
the TLS flash image.
|
||||
|
||||
## Supported Devices
|
||||
|
||||
| VID | PID | Dev Type | Clean Slate | Notes |
|
||||
|--------|--------|--------------------|-------------|------------------|
|
||||
| 0x138a | 0x0090 | VALIDITY_DEV_90 | No | Smaller blobs |
|
||||
| 0x138a | 0x0097 | VALIDITY_DEV_97 | Yes | |
|
||||
| 0x06cb | 0x009a | VALIDITY_DEV_9A | Yes | |
|
||||
| 0x138a | 0x009d | VALIDITY_DEV_9D | Yes | |
|
||||
|
||||
## Architecture
|
||||
|
||||
### HAL (`validity_hal.h`, `validity_hal.c`)
|
||||
|
||||
```
|
||||
ValidityDeviceDesc (per-PID)
|
||||
├── vid, pid, dev_type
|
||||
├── init_hardcoded / init_hardcoded_len
|
||||
├── init_clean_slate / init_clean_slate_len (NULL for 0090)
|
||||
├── reset_blob / reset_blob_len
|
||||
├── db_write_enable / db_write_enable_len
|
||||
└── flash_layout → ValidityFlashLayout
|
||||
├── partitions[] → ValidityPartition { id, type, access_lvl, offset, size }
|
||||
├── num_partitions
|
||||
├── partition_sig / partition_sig_len (256 bytes RSA-2048)
|
||||
```
|
||||
|
||||
Lookup functions:
|
||||
- `validity_hal_device_lookup(ValidityHalDeviceType)` — by enum type
|
||||
- `validity_hal_device_lookup_by_pid(guint16 pid)` — by USB PID
|
||||
|
||||
### Pairing SSM (`validity_pair.h`, `validity_pair.c`)
|
||||
|
||||
The pairing SSM runs as a child of the open SSM (`OPEN_PAIR` state). It is
|
||||
skipped when: (a) emulation mode, (b) no firmware extension loaded, or
|
||||
(c) `num_partitions > 0` (already paired).
|
||||
|
||||
#### SSM Phases
|
||||
|
||||
**Phase 1 — Raw USB (pre-TLS):**
|
||||
- `GET_FLASH_INFO` → parse flash IC params + partition count
|
||||
- Check if pairing needed (0 partitions)
|
||||
- Send reset blob
|
||||
- Generate ECDH key pair (P-256)
|
||||
- Build & send partition flash command (0x4f)
|
||||
- CMD 0x50 (get ECDH server response)
|
||||
- Extract server cert, ECDH blob, derive keys, encrypt private key
|
||||
- Cleanup commands (0x1a series)
|
||||
|
||||
**Phase 2 — TLS Handshake:**
|
||||
- Start TLS handshake child SSM
|
||||
|
||||
**Phase 3 — TLS Erase Loop:**
|
||||
- Erase 5 partitions in order: {1, 2, 5, 6, 4}
|
||||
- Each: DB write enable → erase → cleanup
|
||||
|
||||
**Phase 4 — TLS Write Flash:**
|
||||
- DB write enable → write 4096-byte TLS flash image → cleanup
|
||||
|
||||
**Phase 5 — Reboot:**
|
||||
- Send reboot command (0x05 0x02 0x00)
|
||||
- Returns `FP_DEVICE_ERROR_REMOVED` so fprintd re-opens device
|
||||
|
||||
### TLS Flash Image Format
|
||||
|
||||
```
|
||||
Offset Content
|
||||
0x000 Block 0: [id:2LE=0][size:2LE=1][SHA256:32][body:1=0x01]
|
||||
0x025 Block 4: [id:2LE=4][size:2LE][SHA256:32][priv_blob]
|
||||
Block 3: [id:2LE=3][size:2LE][SHA256:32][server_cert]
|
||||
Block 5: [id:2LE=5][size:2LE][SHA256:32][ecdh_blob]
|
||||
Block 1: [id:2LE=1][size:2LE][SHA256:32][ca_cert(420B)]
|
||||
Block 2: [id:2LE=2][size:2LE][SHA256:32][client_cert(444B)]
|
||||
Block 6: [id:2LE=6][size:2LE][SHA256:32][16 zero bytes]
|
||||
Padding: 0xff to 4096 bytes total
|
||||
```
|
||||
|
||||
## Files
|
||||
|
||||
| File | Purpose |
|
||||
|----------------------------|--------------------------------------|
|
||||
| `validity_hal.h` | HAL types, lookup function decls |
|
||||
| `validity_hal.c` | HAL device table, blob includes |
|
||||
| `validity_pair.h` | Pair state, SSM enum, helper decls |
|
||||
| `validity_pair.c` | Pair SSM runner + all helpers |
|
||||
| `validity_pair_constants.inc` | CA cert, partition signatures |
|
||||
| `validity_blobs_0090.inc` | Blobs for PID 0090 |
|
||||
| `validity_blobs_0097.inc` | Blobs for PID 0097 |
|
||||
| `validity_blobs_009a.inc` | Blobs for PID 009a |
|
||||
| `validity_blobs_009d.inc` | Blobs for PID 009d |
|
||||
|
||||
## Build & Test Runbook
|
||||
|
||||
### Build
|
||||
|
||||
```
|
||||
cd /home/lewohart/src/libfprint
|
||||
meson setup builddir # first time only
|
||||
ninja -C builddir
|
||||
```
|
||||
|
||||
### Run All Tests
|
||||
|
||||
```
|
||||
meson test -C builddir --print-errorlogs
|
||||
```
|
||||
|
||||
Expected output:
|
||||
```
|
||||
Ok: 40
|
||||
Fail: 0
|
||||
Skipped: 2
|
||||
```
|
||||
|
||||
The 2 skipped tests are `virtual-image` and `virtual-device` (require
|
||||
`FPRINT_VIRTUAL_IMAGE` / `FPRINT_VIRTUAL_DEVICE` environment variables).
|
||||
|
||||
### Run Only Unit Tests
|
||||
|
||||
```
|
||||
meson test -C builddir --suite unit-tests --print-errorlogs
|
||||
```
|
||||
|
||||
Expected output (8 unit test suites):
|
||||
```
|
||||
unit-tests - libfprint:validity-tls OK
|
||||
unit-tests - libfprint:validity-fwext OK
|
||||
unit-tests - libfprint:validity-sensor OK
|
||||
unit-tests - libfprint:validity-capture OK
|
||||
unit-tests - libfprint:validity-db OK
|
||||
unit-tests - libfprint:validity-verify OK
|
||||
unit-tests - libfprint:validity-hal OK
|
||||
unit-tests - libfprint:validity-pair OK
|
||||
unit-tests - libfprint:fpi-assembling OK
|
||||
unit-tests - libfprint:fpi-ssm OK
|
||||
unit-tests - libfprint:fpi-device OK
|
||||
```
|
||||
|
||||
### Run Individual Tests
|
||||
|
||||
```
|
||||
# HAL tests (10 test cases)
|
||||
meson test -C builddir validity-hal --print-errorlogs
|
||||
|
||||
# Pairing tests (14 test cases)
|
||||
meson test -C builddir validity-pair --print-errorlogs
|
||||
```
|
||||
|
||||
### Verbose Single Test
|
||||
|
||||
```
|
||||
./builddir/tests/test-validity-hal --verbose
|
||||
./builddir/tests/test-validity-pair --verbose
|
||||
```
|
||||
|
||||
## Test Coverage
|
||||
|
||||
### HAL Tests (`test-validity-hal.c`) — 10 cases
|
||||
|
||||
| Test | Validates |
|
||||
|------------------------------------|----------------------------------------|
|
||||
| `lookup-by-type` | All 4 device types resolve |
|
||||
| `lookup-by-pid` | All 4 PIDs resolve |
|
||||
| `lookup-invalid-type` | Invalid type returns NULL |
|
||||
| `lookup-invalid-pid` | Invalid PID returns NULL |
|
||||
| `blobs-present` | Non-null blobs with non-zero sizes |
|
||||
| `pid-0090-specifics` | 0090 has no clean_slate blob |
|
||||
| `clean-slate-presence` | 0097/009a/009d have clean_slate |
|
||||
| `flash-layout-valid` | Partition count, sig, offsets ordering |
|
||||
| `blob-sizes` | Known blob sizes per device |
|
||||
| `lookup-consistency` | by_type and by_pid return same pointer |
|
||||
|
||||
### Pairing Tests (`test-validity-pair.c`) — 14 cases
|
||||
|
||||
| Test | Validates |
|
||||
|------------------------------------|----------------------------------------|
|
||||
| `parse-flash-info-valid` | Correct parsing of flash IC params |
|
||||
| `parse-flash-info-needs-pairing` | 0 partitions = needs pairing |
|
||||
| `parse-flash-info-too-short` | Short buffer returns FALSE |
|
||||
| `serialize-partition` | Output format + embedded SHA-256 |
|
||||
| `make-cert-size` | Certificate is exactly 444 bytes |
|
||||
| `make-cert-deterministic` | Same inputs → same header bytes |
|
||||
| `encrypt-key-structure` | Output is 161 bytes, prefix 0x02 |
|
||||
| `encrypt-key-hmac-valid` | HMAC over iv+ct matches stored HMAC |
|
||||
| `build-partition-flash-cmd` | 0x4f prefix, header structure |
|
||||
| `build-tls-flash-size` | Exactly 4096 bytes, 0xff padding |
|
||||
| `build-tls-flash-blocks` | Block 0 and block 4 in correct order |
|
||||
| `state-lifecycle` | Init zeroes all fields, free is safe |
|
||||
| `state-free-with-resources` | Free releases EVP_PKEY + g_malloc'd |
|
||||
| `encrypt-key-different-inputs` | Different keys → different ciphertext |
|
||||
|
||||
## Integration Points
|
||||
|
||||
- **Open SSM**: `OPEN_PAIR` state between `OPEN_UPLOAD_FWEXT` and `OPEN_TLS_READ_FLASH`
|
||||
- **Close**: `validity_pair_state_free()` called in `dev_close`
|
||||
- **DB operations**: `validity_db_get_write_enable_blob()` now takes `guint dev_type`
|
||||
and uses HAL lookup (replaces hardcoded blob include)
|
||||
- **FWExt operations**: `validity_fwext_get_db_write_enable()` uses HAL lookup by PID
|
||||
|
||||
## Migration Notes
|
||||
|
||||
- Deleted `validity_blob_dbe_009a.inc` — replaced by per-device blobs in HAL
|
||||
- `validity_db.c` and `validity_fwext.c` now depend on `validity_hal.h`
|
||||
|
|
@ -24,6 +24,7 @@
|
|||
#include "fpi-byte-reader.h"
|
||||
#include "validity.h"
|
||||
#include "validity_fwext.h"
|
||||
#include "validity_pair.h"
|
||||
#include "validity_tls.h"
|
||||
#include "vcsfw_protocol.h"
|
||||
|
||||
|
|
@ -176,6 +177,7 @@ typedef enum {
|
|||
OPEN_SEND_GET_FW_INFO,
|
||||
OPEN_RECV_GET_FW_INFO,
|
||||
OPEN_UPLOAD_FWEXT,
|
||||
OPEN_PAIR,
|
||||
OPEN_TLS_READ_FLASH,
|
||||
OPEN_TLS_DERIVE_PSK,
|
||||
OPEN_TLS_HANDSHAKE,
|
||||
|
|
@ -280,6 +282,47 @@ fwext_upload_ssm_done (FpiSsm *ssm,
|
|||
"Device rebooting after firmware upload"));
|
||||
}
|
||||
|
||||
/* Callback for pairing child SSM */
|
||||
static void
|
||||
pair_ssm_done (FpiSsm *ssm,
|
||||
FpDevice *dev,
|
||||
GError *error)
|
||||
{
|
||||
FpiDeviceValidity *self = FPI_DEVICE_VALIDITY (dev);
|
||||
|
||||
if (error)
|
||||
{
|
||||
/* Check if the pairing caused a reboot — same pattern as fwext upload */
|
||||
if (g_error_matches (error, FP_DEVICE_ERROR, FP_DEVICE_ERROR_REMOVED))
|
||||
{
|
||||
fp_info ("Device rebooting after pairing");
|
||||
fpi_ssm_mark_failed (self->open_ssm, error);
|
||||
return;
|
||||
}
|
||||
|
||||
fp_warn ("Pairing failed: %s — continuing (device may not work)",
|
||||
error->message);
|
||||
g_clear_error (&error);
|
||||
}
|
||||
|
||||
/* Check if pairing caused a reboot (PAIR_REBOOT_RECV was reached) */
|
||||
if (self->pair_state.priv_blob != NULL)
|
||||
{
|
||||
/* Pairing was performed and device is rebooting.
|
||||
* Signal to fprintd to retry the open. */
|
||||
fp_info ("Pairing complete — device rebooting, signalling removal");
|
||||
validity_pair_state_free (&self->pair_state);
|
||||
fpi_ssm_mark_failed (self->open_ssm,
|
||||
fpi_device_error_new_msg (FP_DEVICE_ERROR_REMOVED,
|
||||
"Device rebooting after pairing"));
|
||||
return;
|
||||
}
|
||||
|
||||
/* Pairing was not needed (num_partitions > 0) — continue */
|
||||
validity_pair_state_free (&self->pair_state);
|
||||
fpi_ssm_next_state (self->open_ssm);
|
||||
}
|
||||
|
||||
/* Callback for optional TLS handshake child SSM */
|
||||
static void
|
||||
tls_handshake_ssm_done (FpiSsm *ssm,
|
||||
|
|
@ -396,6 +439,34 @@ open_run_state (FpiSsm *ssm,
|
|||
}
|
||||
break;
|
||||
|
||||
case OPEN_PAIR:
|
||||
{
|
||||
FpiDeviceValidity *self = FPI_DEVICE_VALIDITY (dev);
|
||||
|
||||
/* In emulation mode, skip pairing */
|
||||
if (g_strcmp0 (g_getenv ("FP_DEVICE_EMULATION"), "1") == 0)
|
||||
{
|
||||
fp_dbg ("Emulation mode — skipping pairing check");
|
||||
fpi_ssm_next_state (ssm);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Without fwext, no flash commands work */
|
||||
if (!self->fwext_loaded)
|
||||
{
|
||||
fp_info ("No firmware extension — skipping pairing check");
|
||||
fpi_ssm_next_state (ssm);
|
||||
return;
|
||||
}
|
||||
|
||||
fp_info ("Starting pairing check…");
|
||||
validity_pair_state_init (&self->pair_state);
|
||||
self->open_ssm = ssm;
|
||||
FpiSsm *pair_ssm = validity_pair_ssm_new (dev);
|
||||
fpi_ssm_start (pair_ssm, pair_ssm_done);
|
||||
}
|
||||
break;
|
||||
|
||||
case OPEN_TLS_READ_FLASH:
|
||||
{
|
||||
FpiDeviceValidity *self = FPI_DEVICE_VALIDITY (dev);
|
||||
|
|
@ -737,6 +808,7 @@ dev_close (FpDevice *device)
|
|||
|
||||
validity_capture_state_clear (&self->capture);
|
||||
validity_sensor_state_clear (&self->sensor);
|
||||
validity_pair_state_free (&self->pair_state);
|
||||
validity_tls_free (&self->tls);
|
||||
|
||||
g_clear_object (&self->interrupt_cancellable);
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@
|
|||
#include "fpi-ssm.h"
|
||||
#include "validity_capture.h"
|
||||
#include "validity_db.h"
|
||||
#include "validity_pair.h"
|
||||
#include "validity_sensor.h"
|
||||
#include "validity_tls.h"
|
||||
|
||||
|
|
@ -218,6 +219,9 @@ struct _FpiDeviceValidity
|
|||
/* Firmware extension status */
|
||||
gboolean fwext_loaded;
|
||||
|
||||
/* Pairing state (for uninitialized devices) */
|
||||
ValidityPairState pair_state;
|
||||
|
||||
/* Calibration state */
|
||||
gboolean calibrated;
|
||||
guint calib_iteration;
|
||||
|
|
|
|||
|
|
@ -1,230 +0,0 @@
|
|||
/* db_write_enable blob for 06cb:009a (3621 bytes) */
|
||||
static const guint8 db_write_enable_009a[] = {
|
||||
0x06, 0x02, 0x00, 0x00, 0x01, 0xf4, 0x80, 0x01, 0x07, 0x48, 0x92, 0xb6, 0xc5, 0x7d, 0xeb, 0x78,
|
||||
0x89, 0xb5, 0xeb, 0xf8, 0x6b, 0xc3, 0x04, 0x0f, 0x6d, 0x91, 0xff, 0x1f, 0x68, 0x76, 0x5f, 0x04,
|
||||
0x65, 0x91, 0x18, 0x4b, 0xe0, 0x8c, 0xf3, 0x6c, 0x15, 0x4b, 0x7e, 0xc5, 0x36, 0x81, 0x39, 0xd0,
|
||||
0xf9, 0x53, 0x23, 0x82, 0x21, 0x43, 0x79, 0xaf, 0xf3, 0xff, 0xbf, 0xe4, 0x65, 0x9e, 0x2f, 0x27,
|
||||
0x4e, 0x86, 0x4b, 0xd0, 0xad, 0x66, 0x0f, 0x99, 0xe2, 0x1d, 0xa2, 0xba, 0xb6, 0x77, 0xdb, 0xfa,
|
||||
0x90, 0x7a, 0x66, 0xce, 0x11, 0x0c, 0x18, 0x0d, 0x2d, 0xdc, 0x5d, 0xfe, 0x40, 0xb8, 0xed, 0x97,
|
||||
0x5c, 0xbe, 0xdf, 0xfc, 0x11, 0x63, 0x1f, 0x12, 0xf8, 0xbd, 0x64, 0x6a, 0x0e, 0xe8, 0x2d, 0x44,
|
||||
0xd2, 0xa6, 0xc1, 0xec, 0x9c, 0xfb, 0xd4, 0x0f, 0x48, 0x5c, 0xb3, 0xd9, 0x12, 0x43, 0x76, 0xb9,
|
||||
0x7b, 0x4a, 0x33, 0x49, 0xb0, 0xa7, 0x30, 0xad, 0xda, 0x62, 0x6d, 0x8a, 0xc2, 0x8e, 0xc2, 0x0e,
|
||||
0x88, 0x6a, 0xab, 0x1b, 0x88, 0x51, 0xde, 0xee, 0x34, 0x31, 0xc4, 0xd8, 0x9c, 0x8b, 0xb3, 0xe7,
|
||||
0x87, 0xea, 0xa9, 0xc0, 0x32, 0x3d, 0xfe, 0x58, 0x3d, 0x54, 0x24, 0xd3, 0x64, 0x36, 0xe4, 0x43,
|
||||
0x50, 0x43, 0xe0, 0x4f, 0xd4, 0xea, 0x46, 0xb1, 0xfb, 0x25, 0x07, 0xca, 0x6f, 0x0e, 0xb0, 0x3b,
|
||||
0xaf, 0x27, 0xc8, 0x4b, 0x81, 0x9c, 0xbc, 0x96, 0xce, 0xc3, 0x1a, 0x78, 0x04, 0x5e, 0xb6, 0x48,
|
||||
0x33, 0x9e, 0x2a, 0xa4, 0x78, 0x9e, 0x76, 0x72, 0xd9, 0x33, 0x93, 0x60, 0x05, 0xf4, 0x72, 0x0c,
|
||||
0x8f, 0xfd, 0xc1, 0xea, 0x23, 0xa4, 0xf3, 0x0a, 0x1c, 0xdc, 0x8f, 0x6e, 0x87, 0x77, 0x5c, 0x24,
|
||||
0x1b, 0x9a, 0xb1, 0x56, 0x6f, 0x77, 0x71, 0x85, 0x7c, 0xc4, 0x70, 0x3d, 0x57, 0x1f, 0x11, 0x06,
|
||||
0xc5, 0x26, 0xf9, 0x52, 0x32, 0x92, 0x5a, 0x6a, 0x93, 0xec, 0x8e, 0x91, 0x90, 0x22, 0xfb, 0xe3,
|
||||
0x03, 0xa5, 0x15, 0xf9, 0xaa, 0xa8, 0xca, 0x21, 0x50, 0x72, 0x06, 0x93, 0x11, 0xdd, 0x3f, 0x97,
|
||||
0xd9, 0xa4, 0xf5, 0x62, 0x59, 0xba, 0xb3, 0xa1, 0xb7, 0xa8, 0x58, 0x2d, 0x6d, 0xc2, 0xf9, 0x2d,
|
||||
0x49, 0xf0, 0x23, 0xd6, 0xf2, 0x5a, 0x05, 0x83, 0x7e, 0x15, 0x36, 0xa6, 0x33, 0xe2, 0x52, 0xef,
|
||||
0x64, 0x52, 0x25, 0xf4, 0x29, 0x39, 0x55, 0x04, 0x1a, 0x0d, 0x54, 0xdc, 0xb1, 0xd1, 0xdd, 0x7e,
|
||||
0x09, 0x7b, 0x78, 0x39, 0xde, 0x5f, 0xde, 0x2a, 0x6c, 0xe9, 0x99, 0x96, 0x6d, 0x71, 0x2b, 0x4c,
|
||||
0xb2, 0xfd, 0x9d, 0x78, 0x30, 0x03, 0x1d, 0xa5, 0x5d, 0x9f, 0xaa, 0x99, 0xf8, 0x66, 0xfb, 0xb7,
|
||||
0xe5, 0x20, 0x56, 0x6e, 0xfb, 0xa4, 0x3c, 0x25, 0x09, 0x28, 0x6b, 0xf2, 0x8e, 0x1a, 0x20, 0xc6,
|
||||
0xa8, 0x36, 0xdb, 0x8a, 0x1f, 0xa4, 0xcb, 0x9b, 0x8d, 0x19, 0x37, 0x80, 0xaa, 0xb5, 0x92, 0xd4,
|
||||
0x16, 0x53, 0x83, 0x96, 0x70, 0x12, 0x90, 0x66, 0xac, 0x56, 0xf1, 0x26, 0x8e, 0x6f, 0x76, 0x13,
|
||||
0x37, 0xf7, 0x68, 0x55, 0x5e, 0x13, 0xc5, 0xd6, 0x81, 0x37, 0xc6, 0x0f, 0x83, 0xdb, 0xa8, 0xdc,
|
||||
0x38, 0x63, 0xe0, 0x0e, 0x73, 0xfd, 0x3a, 0xf2, 0x1e, 0x23, 0xa5, 0x66, 0xda, 0xa6, 0x7f, 0x3f,
|
||||
0x14, 0xdd, 0x93, 0x4e, 0x32, 0x36, 0x51, 0x16, 0x70, 0x21, 0xca, 0x6b, 0x82, 0xa6, 0x10, 0x3c,
|
||||
0xb3, 0x0b, 0xe8, 0x49, 0x44, 0x6e, 0x2f, 0x54, 0xdd, 0xe6, 0x4a, 0x05, 0x37, 0x70, 0x52, 0xb5,
|
||||
0x73, 0x32, 0xe9, 0xbf, 0x08, 0xa1, 0x8c, 0xf5, 0x2d, 0xa2, 0xa1, 0x3e, 0xbb, 0xd5, 0x5e, 0x60,
|
||||
0x33, 0x3f, 0x8b, 0xc3, 0x19, 0xe1, 0x45, 0x7f, 0x38, 0xec, 0x5d, 0x48, 0x39, 0xec, 0x0e, 0xcd,
|
||||
0x03, 0x48, 0x25, 0xbd, 0xea, 0xf6, 0x49, 0x26, 0x85, 0x8c, 0x6e, 0x8c, 0x2d, 0xf4, 0x18, 0x71,
|
||||
0x7b, 0x5f, 0x67, 0x13, 0x5a, 0xbc, 0x03, 0x88, 0x35, 0xd3, 0xe4, 0xe1, 0xaa, 0x80, 0x95, 0x46,
|
||||
0xfd, 0x0d, 0x7f, 0x01, 0x06, 0x6a, 0x71, 0x53, 0x7f, 0x96, 0xbd, 0x1e, 0xce, 0xc3, 0x68, 0x75,
|
||||
0x83, 0xe1, 0xb5, 0x11, 0xbf, 0x48, 0xc2, 0x77, 0x6f, 0x46, 0x70, 0x15, 0x8e, 0x56, 0x16, 0x4c,
|
||||
0x62, 0xda, 0x20, 0xf6, 0x71, 0x76, 0x4c, 0x78, 0x5c, 0x35, 0x2f, 0xc3, 0xcc, 0xe2, 0x2c, 0xef,
|
||||
0xa2, 0x07, 0x60, 0xac, 0xff, 0x8f, 0x45, 0xef, 0xb5, 0x4a, 0x93, 0x4f, 0x98, 0x34, 0xd5, 0x4f,
|
||||
0x97, 0x01, 0xde, 0xda, 0xcd, 0x4d, 0x38, 0x3a, 0xc0, 0x1f, 0x8c, 0xca, 0x92, 0x56, 0x2e, 0xec,
|
||||
0x77, 0x4a, 0x58, 0xda, 0x6f, 0x55, 0xda, 0x25, 0x2c, 0x49, 0x1e, 0xe2, 0xab, 0x58, 0xff, 0x76,
|
||||
0x9f, 0x89, 0xa9, 0x64, 0x9d, 0x39, 0x56, 0x68, 0x2c, 0xa7, 0xd0, 0x6b, 0xbf, 0x33, 0xf9, 0xa9,
|
||||
0x35, 0xb7, 0x81, 0xdf, 0xc2, 0x1b, 0x12, 0x3b, 0x16, 0x69, 0x44, 0x24, 0xe7, 0x2d, 0x6a, 0x3e,
|
||||
0x67, 0x81, 0xdc, 0xf1, 0x95, 0xef, 0xfd, 0x36, 0x47, 0x0a, 0x4e, 0xab, 0x0f, 0xdc, 0x74, 0xe8,
|
||||
0x71, 0x02, 0x87, 0x9e, 0xc8, 0x1f, 0xea, 0x65, 0x49, 0x92, 0x0c, 0xce, 0x45, 0x4a, 0xc7, 0x81,
|
||||
0x39, 0x97, 0xb8, 0x2d, 0x51, 0xe7, 0xb8, 0xc1, 0xee, 0x24, 0xfa, 0xd3, 0x89, 0x90, 0x44, 0x78,
|
||||
0xf8, 0x47, 0x65, 0x4e, 0xc3, 0xa6, 0x3b, 0xc5, 0x95, 0xb9, 0xa7, 0xdd, 0xe7, 0x98, 0xdb, 0x5c,
|
||||
0x0b, 0x6f, 0x24, 0x49, 0x01, 0xf2, 0x39, 0xe7, 0x67, 0x4c, 0x98, 0xee, 0xbb, 0x42, 0xb6, 0x6e,
|
||||
0x89, 0x56, 0xa7, 0x33, 0xc3, 0x79, 0x65, 0x86, 0x28, 0x0a, 0x19, 0xa1, 0xdf, 0x8a, 0x69, 0x22,
|
||||
0x4a, 0xcd, 0x25, 0x56, 0xf7, 0xec, 0x2e, 0x27, 0xca, 0xe3, 0x7c, 0x69, 0xb3, 0x32, 0xb2, 0xc0,
|
||||
0xec, 0x85, 0x99, 0x1a, 0xe4, 0x87, 0x22, 0xf9, 0x88, 0x93, 0x5f, 0x65, 0x8b, 0x9c, 0xf3, 0x2f,
|
||||
0x46, 0xdf, 0xc6, 0xd9, 0x6a, 0x5a, 0x36, 0xf1, 0x8b, 0x6b, 0xf9, 0xf6, 0x57, 0xb5, 0x9b, 0x3d,
|
||||
0xa4, 0x24, 0x14, 0xe4, 0xd5, 0x6c, 0x0a, 0x24, 0x48, 0x5a, 0xa2, 0x98, 0xd2, 0xd0, 0xd1, 0xb1,
|
||||
0x77, 0xe7, 0xd0, 0xda, 0xfe, 0x60, 0x2a, 0x4f, 0xb4, 0xf4, 0x23, 0xde, 0xf4, 0xbd, 0xb0, 0x10,
|
||||
0xfd, 0xc6, 0x26, 0xc9, 0x47, 0x58, 0x7e, 0x19, 0xe7, 0xe4, 0xb0, 0xe6, 0xf9, 0xf2, 0xda, 0x41,
|
||||
0xc2, 0x9a, 0x8f, 0x19, 0x03, 0xd0, 0xd2, 0x80, 0x33, 0x65, 0xfe, 0x0a, 0x11, 0x3a, 0xbb, 0xa1,
|
||||
0x92, 0x20, 0x14, 0x1d, 0x1a, 0xc7, 0xce, 0xc6, 0x83, 0x96, 0x20, 0x30, 0xd3, 0xf6, 0x59, 0x1f,
|
||||
0x98, 0xea, 0x3d, 0xd0, 0x91, 0x62, 0x71, 0x5e, 0x5c, 0x12, 0xf4, 0x03, 0x32, 0xb4, 0x7c, 0x53,
|
||||
0x16, 0x45, 0x32, 0x82, 0x7e, 0x55, 0x96, 0xfb, 0x2c, 0xc0, 0xaa, 0x8f, 0x31, 0x68, 0x3c, 0xc6,
|
||||
0x3e, 0xc1, 0x4c, 0x03, 0x4c, 0x6f, 0x3d, 0x2c, 0x70, 0xb8, 0xc4, 0x76, 0x11, 0xb4, 0xc5, 0xcb,
|
||||
0x53, 0x48, 0xa2, 0x55, 0x9f, 0xb1, 0x62, 0xa7, 0x80, 0xa2, 0xb4, 0x03, 0xb0, 0x12, 0x0a, 0x68,
|
||||
0x46, 0xe2, 0x7d, 0x60, 0x57, 0xa3, 0xab, 0x9e, 0x1b, 0x18, 0x91, 0x5a, 0xe2, 0x03, 0x9e, 0x81,
|
||||
0xcc, 0x6c, 0x50, 0xd2, 0xa1, 0x4d, 0x59, 0x13, 0x61, 0x7b, 0xac, 0xae, 0x78, 0xfe, 0x9b, 0x91,
|
||||
0xe9, 0xe4, 0x9d, 0x2e, 0x82, 0xde, 0xf4, 0x75, 0x65, 0xc1, 0x2f, 0xf9, 0x38, 0xb1, 0x82, 0xf8,
|
||||
0xce, 0x94, 0x1d, 0x27, 0x81, 0xb7, 0x73, 0x47, 0x95, 0x38, 0xc7, 0x6e, 0xd9, 0xf7, 0xd4, 0x46,
|
||||
0x9f, 0x6f, 0xe5, 0xba, 0x7f, 0x6e, 0x3a, 0xd9, 0x88, 0x71, 0xb2, 0x86, 0x6f, 0x0e, 0xf4, 0xf3,
|
||||
0x62, 0x77, 0xda, 0xa7, 0x6c, 0x10, 0x42, 0xc8, 0x3f, 0x77, 0xdf, 0x0f, 0xf2, 0xe2, 0x63, 0x95,
|
||||
0x40, 0xbb, 0x35, 0x5e, 0xa8, 0x42, 0x73, 0x41, 0x1c, 0x45, 0x30, 0x81, 0xbd, 0x1e, 0x10, 0x35,
|
||||
0xc4, 0x02, 0xc5, 0x31, 0x90, 0xd0, 0xbd, 0x90, 0x5e, 0x8d, 0x01, 0xfc, 0x37, 0x87, 0xc6, 0x5b,
|
||||
0x69, 0x17, 0x2c, 0xca, 0x5b, 0x23, 0x4e, 0x92, 0xe3, 0x58, 0x46, 0x3b, 0xbb, 0x8d, 0x23, 0xe3,
|
||||
0x8c, 0x74, 0xa3, 0xa8, 0xe2, 0x73, 0x55, 0x42, 0xb9, 0x96, 0xba, 0x5e, 0xc2, 0x2c, 0x50, 0x95,
|
||||
0xa7, 0x77, 0xb6, 0x77, 0x5a, 0x72, 0x8d, 0xf5, 0x9c, 0x35, 0x60, 0xc7, 0xf3, 0x6b, 0x83, 0xd5,
|
||||
0x5f, 0x81, 0x9f, 0x19, 0x65, 0x73, 0xf8, 0xfd, 0x35, 0x63, 0x79, 0xfe, 0x9a, 0x5e, 0x7c, 0xec,
|
||||
0xb3, 0x76, 0x39, 0x5e, 0x01, 0x30, 0x9e, 0x20, 0x05, 0xb2, 0x9e, 0x3b, 0x16, 0x0c, 0xb7, 0x4c,
|
||||
0x6a, 0x58, 0x56, 0x09, 0x34, 0x80, 0xdd, 0x06, 0xae, 0xa5, 0xfb, 0x3f, 0xbe, 0x23, 0xe0, 0x04,
|
||||
0xf8, 0xd7, 0xa3, 0x8f, 0xd0, 0x78, 0x66, 0xcd, 0xf2, 0x41, 0x61, 0x39, 0x1c, 0xc7, 0x56, 0xf6,
|
||||
0xff, 0x71, 0xff, 0x07, 0x2e, 0x30, 0x8b, 0x35, 0xe2, 0x59, 0x43, 0x51, 0x11, 0xbe, 0xe0, 0x9d,
|
||||
0xdf, 0x2b, 0x8d, 0xf9, 0x9d, 0x0f, 0x2c, 0x2e, 0x8e, 0xda, 0xa4, 0xec, 0xaa, 0xbc, 0x69, 0x75,
|
||||
0xa5, 0x8f, 0x23, 0xbb, 0x6b, 0xfc, 0x94, 0xeb, 0xcb, 0xbb, 0xa0, 0xd5, 0x81, 0xf1, 0x6b, 0xe9,
|
||||
0xd0, 0x43, 0xc4, 0xe4, 0x10, 0xb3, 0x21, 0xc6, 0xdf, 0x42, 0x4e, 0xca, 0xee, 0xa9, 0x4e, 0xdb,
|
||||
0xe5, 0x80, 0x1e, 0xb7, 0x86, 0x19, 0x91, 0x24, 0x22, 0x2b, 0x09, 0x1e, 0x5b, 0x33, 0xba, 0xd6,
|
||||
0x76, 0x14, 0x45, 0xa8, 0xa6, 0x60, 0x6d, 0x0e, 0x78, 0x1c, 0x07, 0xa6, 0xf9, 0x1c, 0xd5, 0xfe,
|
||||
0x18, 0x8d, 0xdb, 0x9f, 0x9e, 0x17, 0xf5, 0xe0, 0x7b, 0x0c, 0xba, 0x31, 0x9c, 0x52, 0xe5, 0xfb,
|
||||
0x03, 0xf5, 0x3d, 0xf5, 0x70, 0xf8, 0x2d, 0xdb, 0x60, 0x3d, 0x30, 0x5b, 0x72, 0xa2, 0x40, 0x6b,
|
||||
0xc7, 0xc1, 0xa3, 0x7f, 0x92, 0x04, 0x05, 0xf8, 0xf1, 0x4d, 0x3d, 0xdf, 0x5d, 0x83, 0x6b, 0xa6,
|
||||
0x8d, 0x83, 0xc1, 0xa8, 0xd7, 0xf1, 0xa4, 0x1d, 0x14, 0x8c, 0xc3, 0x4b, 0x1e, 0xf9, 0x96, 0xdd,
|
||||
0xfb, 0x43, 0xef, 0x19, 0xd2, 0xfb, 0xf0, 0xad, 0xca, 0xd3, 0x01, 0xa4, 0x73, 0x49, 0x77, 0x39,
|
||||
0xea, 0xa1, 0x0b, 0xbc, 0xe8, 0x5e, 0x15, 0xc3, 0x2f, 0x1d, 0x90, 0xc8, 0xab, 0x86, 0x05, 0xd0,
|
||||
0xae, 0x94, 0x1e, 0xb9, 0x14, 0x08, 0x65, 0x92, 0xd0, 0x87, 0xa5, 0x21, 0xfd, 0xe3, 0x3a, 0x67,
|
||||
0x6c, 0xdf, 0xb9, 0x4a, 0x42, 0x47, 0xf6, 0x0f, 0x51, 0xed, 0xd3, 0x72, 0x94, 0x51, 0x1e, 0x92,
|
||||
0xec, 0x71, 0xa9, 0xa5, 0x4b, 0xab, 0x68, 0xa0, 0xed, 0xaa, 0xbd, 0xcb, 0x2c, 0x1a, 0x3a, 0xde,
|
||||
0xa7, 0x78, 0xf4, 0x16, 0xe3, 0x92, 0x00, 0xaf, 0x4c, 0x51, 0x7d, 0xd7, 0x15, 0x2b, 0xb7, 0x24,
|
||||
0x76, 0xc5, 0xd1, 0x41, 0x3f, 0x04, 0x70, 0x46, 0x15, 0xd7, 0x95, 0x30, 0x0f, 0x3a, 0x09, 0x12,
|
||||
0x14, 0xf4, 0xe4, 0xac, 0x2e, 0xf4, 0x19, 0x69, 0xc8, 0x1f, 0x8f, 0xc0, 0x86, 0x10, 0x86, 0x49,
|
||||
0x07, 0xb2, 0xe6, 0xed, 0xfa, 0x5f, 0xdb, 0x09, 0x26, 0xb6, 0xf0, 0x64, 0xb2, 0xa1, 0xc3, 0xb8,
|
||||
0xc7, 0xb6, 0x31, 0xcc, 0x75, 0x66, 0x3c, 0xed, 0xad, 0x5e, 0x71, 0x86, 0x8a, 0xbc, 0x9b, 0xac,
|
||||
0x67, 0x8e, 0x43, 0x01, 0x44, 0x61, 0x3c, 0xb0, 0xe5, 0x19, 0x82, 0xb9, 0xe0, 0x19, 0x09, 0x90,
|
||||
0x26, 0xb0, 0x69, 0xbb, 0x7a, 0x4d, 0xc3, 0x76, 0xcd, 0xd6, 0xa3, 0xc5, 0x95, 0x66, 0x31, 0x79,
|
||||
0x76, 0x21, 0x36, 0x72, 0x75, 0x4f, 0xac, 0x87, 0xdf, 0x85, 0x95, 0x3c, 0xdc, 0x0d, 0xe2, 0x76,
|
||||
0xfb, 0x87, 0x42, 0xf4, 0x8b, 0xa2, 0x18, 0xd4, 0x20, 0x2f, 0xe6, 0xf8, 0x65, 0x83, 0x41, 0x52,
|
||||
0x97, 0x9d, 0x6d, 0xa9, 0xb4, 0x73, 0xe5, 0xd4, 0x76, 0xc0, 0xaa, 0xa6, 0x84, 0x91, 0xf5, 0x45,
|
||||
0x09, 0x1b, 0x87, 0x9c, 0x01, 0x98, 0x60, 0x78, 0xd6, 0x4f, 0xa5, 0xf4, 0x9f, 0x60, 0xe6, 0x15,
|
||||
0xcb, 0x86, 0x5f, 0x15, 0x4f, 0x48, 0xb4, 0x51, 0x73, 0xa1, 0xdc, 0x85, 0xf2, 0xeb, 0x11, 0x28,
|
||||
0x65, 0x22, 0x90, 0xbd, 0x38, 0x3c, 0xde, 0xdc, 0xd8, 0xf2, 0x80, 0x11, 0x7e, 0x60, 0xbe, 0x03,
|
||||
0x4c, 0xe2, 0x24, 0xf9, 0x26, 0x73, 0x93, 0x4e, 0xd9, 0xe0, 0x07, 0x7d, 0x5f, 0x78, 0x99, 0xf4,
|
||||
0xe0, 0xee, 0xe0, 0x97, 0x93, 0x3a, 0x35, 0xe4, 0x0f, 0x20, 0x5d, 0x84, 0xa1, 0x07, 0x33, 0xf4,
|
||||
0x92, 0xda, 0x61, 0x98, 0x02, 0xff, 0x70, 0xd9, 0xb9, 0x49, 0xca, 0x0c, 0x2b, 0xcb, 0x9b, 0xa6,
|
||||
0x8c, 0x29, 0x0f, 0x2e, 0xf9, 0xa2, 0x0a, 0x3b, 0xf4, 0x96, 0x83, 0x4c, 0x66, 0x95, 0x6a, 0x8e,
|
||||
0xc4, 0x17, 0x92, 0x66, 0x99, 0x9d, 0x9f, 0x87, 0xbd, 0xfc, 0x14, 0xae, 0xa8, 0x65, 0xf0, 0x48,
|
||||
0x7e, 0x2b, 0xe1, 0x0a, 0x64, 0xbe, 0xcb, 0xa6, 0x95, 0x47, 0xd0, 0x16, 0x58, 0x93, 0x5e, 0x63,
|
||||
0x70, 0x39, 0x86, 0xa5, 0x6d, 0x6c, 0xe3, 0x8f, 0xe6, 0x6d, 0xbf, 0x61, 0xd7, 0x54, 0xba, 0x9a,
|
||||
0x1a, 0x27, 0x83, 0x53, 0x91, 0x34, 0x22, 0xe4, 0xf2, 0xe4, 0x10, 0x0c, 0x59, 0x62, 0x99, 0x9a,
|
||||
0x3e, 0xaa, 0x3e, 0x16, 0x72, 0xbc, 0x73, 0xed, 0xcf, 0xcc, 0x75, 0x25, 0xa2, 0xd3, 0xdb, 0xe9,
|
||||
0x56, 0x83, 0xb4, 0xbf, 0x38, 0xf7, 0x44, 0x4a, 0xc0, 0xf4, 0x70, 0xf0, 0xe9, 0x80, 0x79, 0x91,
|
||||
0x6e, 0x4e, 0x1f, 0xba, 0x3f, 0xcd, 0x5b, 0x08, 0x2f, 0xc2, 0x77, 0x2e, 0x63, 0xb5, 0xe0, 0x66,
|
||||
0x3f, 0x87, 0x63, 0x8a, 0x16, 0x38, 0x58, 0xf5, 0x90, 0x84, 0x52, 0x40, 0xa8, 0xc2, 0x2d, 0xac,
|
||||
0xf6, 0xf7, 0x99, 0x9c, 0x43, 0x1a, 0x2a, 0xb5, 0x20, 0x4a, 0x7d, 0xa7, 0x83, 0x9c, 0x9a, 0x93,
|
||||
0x26, 0x08, 0xc7, 0xf8, 0x3a, 0x87, 0xd1, 0xd7, 0x3d, 0x7d, 0x8b, 0x2f, 0xec, 0x65, 0xab, 0xb9,
|
||||
0x52, 0x21, 0xfa, 0xda, 0x44, 0x36, 0x5f, 0xe2, 0x10, 0x61, 0xdb, 0xcd, 0xe5, 0x2c, 0xb8, 0x4c,
|
||||
0xbf, 0xe9, 0xf0, 0x61, 0xc4, 0xda, 0xb3, 0xbe, 0x86, 0x00, 0x2e, 0x76, 0x83, 0xee, 0xd1, 0x6c,
|
||||
0x23, 0xc6, 0x87, 0xce, 0x61, 0xc5, 0xd9, 0x23, 0xff, 0xba, 0xb4, 0x0b, 0xee, 0x6a, 0xe9, 0x3e,
|
||||
0xd7, 0xf8, 0x57, 0xf3, 0x04, 0xe5, 0xeb, 0x16, 0xec, 0x6d, 0x08, 0x85, 0x63, 0x52, 0x4e, 0x90,
|
||||
0xd9, 0x16, 0xe4, 0x1a, 0x3a, 0x8c, 0x77, 0x77, 0xe2, 0x97, 0x31, 0xf0, 0xf4, 0x5c, 0x12, 0x50,
|
||||
0x82, 0xc4, 0x23, 0xa5, 0xc0, 0x27, 0x04, 0xc0, 0x7c, 0x6f, 0xc1, 0x9b, 0x1c, 0x48, 0x38, 0xee,
|
||||
0x3e, 0xab, 0xe1, 0x25, 0x62, 0x82, 0x9e, 0x67, 0x58, 0x1d, 0x31, 0x2c, 0x72, 0x0b, 0x79, 0x2a,
|
||||
0x41, 0x74, 0x4d, 0xec, 0x1e, 0x15, 0x74, 0x26, 0xab, 0x75, 0x13, 0x6d, 0x31, 0xee, 0x2f, 0x20,
|
||||
0x81, 0x47, 0x03, 0x90, 0x91, 0x45, 0x3c, 0x0b, 0x0e, 0x39, 0x70, 0xc5, 0x62, 0x4d, 0x7a, 0x53,
|
||||
0xdf, 0x80, 0x76, 0xe9, 0xd1, 0x62, 0x5d, 0x2c, 0x8e, 0x69, 0x3e, 0x0e, 0x9a, 0x81, 0xe2, 0x38,
|
||||
0x62, 0xdc, 0xa7, 0x89, 0x21, 0xb6, 0x6c, 0xa4, 0xc3, 0xc5, 0xed, 0x35, 0xb0, 0xb5, 0xed, 0x2e,
|
||||
0x24, 0x62, 0x2e, 0xb2, 0x16, 0xba, 0x0b, 0xa6, 0xe0, 0xc0, 0xea, 0xf9, 0x7c, 0x75, 0x4e, 0xeb,
|
||||
0x3d, 0xb4, 0xa5, 0x06, 0xd5, 0x85, 0x4a, 0x3e, 0xdc, 0x92, 0xd0, 0x11, 0x1a, 0xf3, 0xd2, 0x13,
|
||||
0x5a, 0x99, 0x87, 0x29, 0x12, 0x3f, 0x03, 0xd0, 0xf9, 0x36, 0x6b, 0xb0, 0xd2, 0xc6, 0x81, 0xcf,
|
||||
0xc6, 0x2c, 0x59, 0xbc, 0xd7, 0x5c, 0x6b, 0x41, 0x0d, 0x8e, 0x69, 0x97, 0xcc, 0xa5, 0x5c, 0x98,
|
||||
0x9f, 0x01, 0x03, 0x93, 0xd6, 0xc2, 0x42, 0xf7, 0xce, 0x1e, 0xa7, 0x1c, 0x6f, 0x26, 0x2e, 0x49,
|
||||
0x88, 0x55, 0x58, 0x43, 0x47, 0xb0, 0x4c, 0xe2, 0x6c, 0xce, 0x2e, 0x82, 0x2b, 0x8c, 0x6b, 0x7b,
|
||||
0x49, 0x37, 0x14, 0x8a, 0x45, 0xc9, 0x47, 0x07, 0x3b, 0x30, 0x0f, 0x7c, 0x72, 0xb6, 0xe7, 0x8c,
|
||||
0x42, 0x31, 0x07, 0x8d, 0x80, 0x53, 0x1b, 0x7f, 0x93, 0x17, 0xc1, 0xbb, 0x4d, 0x60, 0x70, 0xf2,
|
||||
0x99, 0xe9, 0xa9, 0x77, 0x31, 0xb1, 0xbe, 0xfe, 0xee, 0xc2, 0xda, 0xe0, 0xa1, 0xa0, 0x36, 0x45,
|
||||
0x68, 0xac, 0xbe, 0xba, 0xb0, 0x69, 0xa4, 0xb9, 0x01, 0x47, 0x77, 0x6f, 0xf7, 0xe7, 0xf7, 0x9c,
|
||||
0x1c, 0xc9, 0x8b, 0x2f, 0xe6, 0x21, 0x47, 0x92, 0x50, 0x15, 0x54, 0xf4, 0x19, 0x57, 0x83, 0xb0,
|
||||
0xf9, 0x18, 0x8c, 0xcf, 0xe9, 0x6a, 0xd8, 0xcd, 0x29, 0xf5, 0x46, 0x34, 0x09, 0xc2, 0x05, 0x4e,
|
||||
0x4a, 0x24, 0x96, 0xee, 0x65, 0xea, 0xa1, 0xfc, 0xda, 0x3d, 0x77, 0x64, 0xcd, 0x3e, 0x84, 0x31,
|
||||
0xe4, 0x4a, 0x2b, 0x05, 0xe6, 0x4a, 0xa2, 0xf9, 0xfb, 0x0d, 0x13, 0x45, 0x6b, 0xfe, 0xa9, 0xc9,
|
||||
0x1e, 0xc2, 0xd9, 0x0d, 0x00, 0x99, 0xe7, 0xe3, 0x95, 0xdc, 0xe8, 0x18, 0x65, 0x0d, 0xca, 0xf8,
|
||||
0xbd, 0xfe, 0x23, 0xb4, 0xc6, 0x44, 0x3f, 0x5c, 0x69, 0x0b, 0x18, 0xea, 0xd2, 0x21, 0xa6, 0xc2,
|
||||
0xbc, 0xd3, 0x45, 0x72, 0xff, 0xb8, 0x3b, 0x33, 0x32, 0xea, 0xfd, 0xe6, 0xe2, 0x5b, 0x37, 0xff,
|
||||
0x3a, 0xc6, 0xda, 0x0c, 0x3c, 0xc6, 0x97, 0xb9, 0x96, 0x26, 0x5c, 0xaa, 0x5a, 0x53, 0xce, 0x44,
|
||||
0x57, 0x03, 0x03, 0xd7, 0xd1, 0x11, 0xf4, 0x4c, 0x63, 0x51, 0x19, 0x59, 0x5c, 0x24, 0x7e, 0x86,
|
||||
0xa3, 0x20, 0x83, 0xf2, 0x86, 0x55, 0x01, 0x75, 0x2f, 0x93, 0xe3, 0x02, 0x4b, 0x2e, 0x2b, 0x6d,
|
||||
0x82, 0xd0, 0xc0, 0x3b, 0x74, 0x5b, 0xfd, 0x80, 0x9a, 0xf7, 0xe8, 0xe1, 0x34, 0x9d, 0x1a, 0x79,
|
||||
0xbe, 0xd5, 0x1b, 0xba, 0x41, 0x50, 0x64, 0x70, 0x1a, 0x2a, 0x78, 0x90, 0xe8, 0xf3, 0x99, 0x37,
|
||||
0xc6, 0xd2, 0xf5, 0x63, 0xb0, 0x74, 0x7b, 0xd9, 0x4f, 0x1b, 0x69, 0x86, 0x24, 0xb4, 0xfd, 0x17,
|
||||
0xdf, 0xdf, 0x68, 0xff, 0xdc, 0x04, 0x50, 0xc2, 0x6d, 0x77, 0x1f, 0x8f, 0xf4, 0xfb, 0x01, 0xa2,
|
||||
0x6f, 0xf8, 0xf6, 0x4e, 0xb5, 0xb6, 0xd9, 0x15, 0x3f, 0x5c, 0xe2, 0x9d, 0x9d, 0xfc, 0xf8, 0x4c,
|
||||
0xa2, 0x30, 0xa4, 0xc2, 0x12, 0x40, 0x1b, 0x43, 0x7d, 0x11, 0x37, 0xf8, 0x3a, 0x44, 0xf7, 0xa9,
|
||||
0x8a, 0x9f, 0xd1, 0xbc, 0x3d, 0x88, 0x3e, 0x62, 0x27, 0xce, 0x36, 0x9e, 0xd3, 0x2a, 0x96, 0x05,
|
||||
0x50, 0xaa, 0x86, 0x3f, 0x3d, 0x01, 0x4d, 0xe7, 0x49, 0x4d, 0xea, 0xd3, 0x4f, 0xce, 0xd1, 0xd7,
|
||||
0xb4, 0xea, 0xb6, 0x51, 0xd4, 0x99, 0x03, 0x35, 0x89, 0x44, 0x6f, 0xb5, 0xa1, 0x56, 0x45, 0x57,
|
||||
0xd6, 0x3e, 0x72, 0x49, 0x41, 0xe7, 0x7a, 0xe3, 0xf4, 0x6b, 0x79, 0x70, 0x3d, 0x06, 0x27, 0x7d,
|
||||
0x87, 0x35, 0x69, 0x99, 0xb5, 0x1f, 0x61, 0x89, 0x3d, 0x31, 0xc7, 0x23, 0x1b, 0x0c, 0x63, 0x5f,
|
||||
0x1d, 0x83, 0xab, 0x38, 0xa0, 0xdc, 0xe5, 0x44, 0xf5, 0xf6, 0x80, 0x38, 0x61, 0xd6, 0xe3, 0xd7,
|
||||
0xe7, 0x0d, 0x61, 0x7e, 0xcc, 0x59, 0x39, 0x20, 0xb1, 0xab, 0x90, 0x06, 0xbd, 0xc7, 0xbf, 0xf3,
|
||||
0x4a, 0x8b, 0x36, 0xa7, 0x60, 0x1e, 0xb1, 0x70, 0xa0, 0x40, 0x15, 0x6b, 0x45, 0x67, 0xab, 0x37,
|
||||
0xf5, 0x5f, 0xdf, 0x2d, 0x46, 0x6f, 0xca, 0x93, 0x74, 0x27, 0x73, 0x22, 0xf2, 0x18, 0x11, 0xd0,
|
||||
0x2c, 0x7b, 0xc5, 0x99, 0xc9, 0xed, 0x5c, 0x2b, 0x1f, 0xe7, 0xb6, 0xba, 0xa1, 0x9b, 0x1b, 0x0a,
|
||||
0x30, 0xf7, 0x9f, 0x86, 0x41, 0xb9, 0x7b, 0xf6, 0x64, 0x91, 0xdc, 0xa0, 0xb4, 0xc0, 0x34, 0x13,
|
||||
0x67, 0xaa, 0x5a, 0xce, 0xc1, 0x39, 0x8b, 0xb3, 0x7c, 0x03, 0x7d, 0x81, 0xac, 0x23, 0x68, 0xdb,
|
||||
0x49, 0xc5, 0xd5, 0x72, 0x0b, 0xbf, 0xb7, 0x46, 0x6b, 0xa6, 0x16, 0xc7, 0x0c, 0x7d, 0x83, 0x42,
|
||||
0x86, 0x30, 0x30, 0x47, 0x35, 0x7d, 0xa0, 0xe9, 0xa3, 0x4f, 0xc1, 0x4b, 0x00, 0xc1, 0x7a, 0x0a,
|
||||
0x02, 0xf6, 0xa6, 0x2a, 0x5b, 0x52, 0x97, 0x6b, 0x00, 0xed, 0x67, 0xbb, 0x2d, 0x0a, 0xa1, 0xb4,
|
||||
0xa8, 0xa9, 0x31, 0x00, 0xb7, 0x99, 0xe1, 0x83, 0x96, 0x95, 0xbd, 0xae, 0x9b, 0x98, 0xe7, 0x5c,
|
||||
0x8d, 0xf5, 0xd8, 0x34, 0x0d, 0x15, 0x8b, 0xe6, 0x03, 0x79, 0xa6, 0xf6, 0x26, 0xaf, 0x05, 0x2a,
|
||||
0xd5, 0x5c, 0x5c, 0xea, 0x01, 0xf8, 0x06, 0x04, 0x8e, 0x93, 0x7f, 0x87, 0xe0, 0x1e, 0x72, 0x5e,
|
||||
0x67, 0x62, 0x03, 0x64, 0xe5, 0x11, 0xaf, 0xd2, 0x88, 0xb2, 0x59, 0x53, 0xe9, 0xad, 0xe3, 0x43,
|
||||
0xb5, 0x96, 0x06, 0x86, 0x08, 0x19, 0x0f, 0xa5, 0xc4, 0xdf, 0x11, 0x4c, 0x93, 0xd3, 0xc8, 0xde,
|
||||
0xca, 0x92, 0x9c, 0x06, 0x6d, 0x8b, 0xae, 0x5a, 0xc2, 0xd6, 0x07, 0xe3, 0xf9, 0x4d, 0x68, 0xa5,
|
||||
0xd3, 0x55, 0x48, 0x27, 0xa6, 0x47, 0x35, 0xa4, 0x3c, 0x46, 0x2b, 0xc3, 0x68, 0x2c, 0xc1, 0x66,
|
||||
0x44, 0x11, 0xf5, 0x92, 0xc9, 0x45, 0x6f, 0x53, 0xda, 0x10, 0x26, 0xf5, 0x14, 0x59, 0xa0, 0xcf,
|
||||
0x20, 0xcc, 0x17, 0x1b, 0x9b, 0x6b, 0xed, 0xe4, 0x7c, 0xe5, 0x7d, 0x84, 0x5d, 0xff, 0xe1, 0x02,
|
||||
0x5c, 0x6e, 0xb2, 0x40, 0x61, 0x5d, 0xa1, 0x51, 0x10, 0x6a, 0x56, 0x01, 0xb7, 0x5c, 0x24, 0xc6,
|
||||
0x73, 0xd6, 0xea, 0x81, 0x8d, 0x60, 0xc3, 0x1f, 0x41, 0x4a, 0xea, 0xa5, 0x55, 0x97, 0xb4, 0x0c,
|
||||
0xc4, 0xf2, 0xed, 0x2b, 0x38, 0x50, 0xd3, 0x66, 0x08, 0x4a, 0x52, 0x51, 0x34, 0x20, 0xb0, 0x13,
|
||||
0x69, 0x5e, 0x2b, 0xfc, 0xb0, 0xdb, 0xfa, 0xd0, 0x01, 0x49, 0x75, 0xc6, 0x74, 0x71, 0xa3, 0x80,
|
||||
0x75, 0x28, 0xd1, 0x57, 0x30, 0x80, 0x2a, 0x44, 0x28, 0x84, 0x2c, 0x63, 0x68, 0xc7, 0x26, 0x50,
|
||||
0xb3, 0x16, 0x12, 0x65, 0xd6, 0xb8, 0x60, 0x07, 0x26, 0x4c, 0xf0, 0x93, 0xa3, 0x17, 0xfe, 0xe4,
|
||||
0xee, 0x38, 0x8e, 0x77, 0x21, 0xa0, 0x24, 0x34, 0xc5, 0x14, 0x32, 0x4c, 0xbf, 0x85, 0xcb, 0x57,
|
||||
0xf7, 0x09, 0xb5, 0x3f, 0xdf, 0x69, 0x62, 0x4a, 0xdc, 0x29, 0xb8, 0x55, 0x18, 0xf1, 0xa0, 0x51,
|
||||
0xf2, 0x47, 0x3a, 0xd9, 0x38, 0x4d, 0x7a, 0xc5, 0x7c, 0x2a, 0x78, 0x0a, 0xb7, 0x25, 0x06, 0xba,
|
||||
0x92, 0x5f, 0xa3, 0x99, 0x92, 0xdd, 0x2d, 0x0b, 0x00, 0xff, 0xd8, 0xc3, 0x86, 0x45, 0xd5, 0x5c,
|
||||
0x2c, 0xa2, 0xae, 0x94, 0xcf, 0x4f, 0xfa, 0x37, 0x22, 0x84, 0xa2, 0x8a, 0x13, 0x79, 0x7e, 0x25,
|
||||
0xeb, 0x0d, 0x95, 0x0c, 0x08, 0x37, 0x16, 0x56, 0xa8, 0x89, 0xe6, 0x18, 0x9f, 0x83, 0xb9, 0xc0,
|
||||
0xc8, 0xe0, 0x69, 0x52, 0xb3, 0x4f, 0xe1, 0x3c, 0xcb, 0x5c, 0x3b, 0x2c, 0x82, 0xf2, 0xd9, 0x88,
|
||||
0xf6, 0xd9, 0xa2, 0x33, 0xf1, 0xa9, 0xe6, 0x4d, 0xe9, 0x72, 0x18, 0xbe, 0x12, 0xee, 0x7a, 0x8e,
|
||||
0x84, 0x63, 0xd8, 0x21, 0x31, 0x62, 0x4c, 0xe1, 0x67, 0xe7, 0x44, 0xa3, 0xca, 0x39, 0x15, 0xc7,
|
||||
0x8e, 0x6e, 0x76, 0x36, 0x2d, 0x06, 0x09, 0x0e, 0x2a, 0x7e, 0xd6, 0x0e, 0xa7, 0x43, 0x7c, 0x84,
|
||||
0x83, 0x8d, 0x8a, 0xa7, 0x5f, 0x09, 0x6c, 0x9a, 0x92, 0x8e, 0x40, 0x3e, 0x24, 0x28, 0x55, 0x0c,
|
||||
0x98, 0xde, 0x8c, 0x43, 0xbd, 0x25, 0xe2, 0x45, 0x20, 0xae, 0xf6, 0xee, 0x53, 0x4e, 0xe1, 0xd4,
|
||||
0x70, 0x21, 0x75, 0xe6, 0xb2, 0x5d, 0x03, 0x0b, 0x87, 0x94, 0x18, 0x45, 0xce, 0xfc, 0x1d, 0xc2,
|
||||
0x89, 0xce, 0xe3, 0x3c, 0x72, 0x13, 0x9f, 0x29, 0x83, 0x9a, 0xf8, 0x1c, 0xb6, 0xa0, 0x97, 0xd1,
|
||||
0x14, 0x31, 0x1a, 0x01, 0x73, 0x6f, 0x47, 0x9b, 0xda, 0xe3, 0x2a, 0x59, 0x39, 0x8f, 0xc4, 0xa7,
|
||||
0x49, 0x4d, 0x03, 0x4f, 0xc8, 0xdc, 0x5f, 0x2b, 0xa8, 0xaf, 0x93, 0xfc, 0x4c, 0x57, 0x6b, 0x70,
|
||||
0x39, 0x67, 0xae, 0x59, 0x37, 0x80, 0x41, 0x3b, 0x44, 0xb9, 0x8f, 0x4b, 0xab, 0xa9, 0xd3, 0xfd,
|
||||
0x7b, 0x55, 0x71, 0x5a, 0xd5, 0xe5, 0xc4, 0x1f, 0x93, 0x61, 0xa4, 0x2a, 0x75, 0x7d, 0x9a, 0x6d,
|
||||
0x72, 0x20, 0xa9, 0x46, 0x7e, 0x19, 0xf7, 0x39, 0x87, 0x70, 0x76, 0x16, 0x4c, 0x14, 0x2d, 0x40,
|
||||
0xbb, 0xae, 0x95, 0x01, 0x31, 0x2c, 0x39, 0x4d, 0xc0, 0x23, 0x3d, 0xc5, 0x86, 0x88, 0x14, 0x16,
|
||||
0x2b, 0xfc, 0x1f, 0x10, 0xbd, 0x46, 0x63, 0xb2, 0x85, 0xdd, 0x2d, 0x00, 0x5f, 0x3b, 0xc3, 0xda,
|
||||
0xd2, 0xff, 0x02, 0x3f, 0x7e, 0x81, 0xb7, 0x99, 0xb1, 0xb3, 0x23, 0xb3, 0x7e, 0x82, 0xfc, 0x99,
|
||||
0xdc, 0x81, 0x29, 0x1c, 0xf9, 0x3c, 0xc0, 0x4a, 0x0e, 0x05, 0xaa, 0x67, 0x4b, 0xcf, 0xd3, 0xbc,
|
||||
0x0d, 0x93, 0x0a, 0x10, 0xd0, 0x95, 0x7e, 0xc7, 0x71, 0x2b, 0x8c, 0xc7, 0x83, 0x75, 0xdd, 0x90,
|
||||
0x4e, 0xb5, 0xa4, 0x68, 0x29, 0x60, 0x15, 0xda, 0xb1, 0xba, 0xbb, 0x07, 0x67, 0x86, 0xf3, 0x05,
|
||||
0xc8, 0xad, 0x90, 0xca, 0x39, 0x47, 0xb1, 0x50, 0xda, 0x79, 0xcb, 0x94, 0x03, 0x7e, 0x97, 0x0e,
|
||||
0x91, 0x80, 0x43, 0x7e, 0xa3, 0x4c, 0x72, 0x77, 0x1d, 0x67, 0x30, 0x00, 0x82, 0x67, 0x41, 0xfe,
|
||||
0x75, 0x9f, 0xcd, 0xc2, 0xb0, 0x35, 0x58, 0x33, 0x1f, 0xdf, 0x5b, 0x89, 0xd6, 0xe3, 0xf2, 0x5a,
|
||||
0x05, 0x24, 0x1f, 0x32, 0xf1, 0x39, 0xe8, 0x98, 0x12, 0x6a, 0xec, 0x8b, 0x17, 0x15, 0xca, 0xc0,
|
||||
0x20, 0x88, 0x31, 0xfb, 0x12, 0x05, 0xf9, 0xef, 0xb7, 0x55, 0x38, 0x75, 0x5b, 0x2d, 0x83, 0x93,
|
||||
0x1c, 0x7a, 0xd9, 0xe2, 0x52, 0xc8, 0x8c, 0x8a, 0xf3, 0xc5, 0xdf, 0x62, 0xfb, 0x99, 0x65, 0x3a,
|
||||
0xff, 0x99, 0xe6, 0xc6, 0xc0, 0x51, 0xa9, 0xa1, 0x24, 0x13, 0x81, 0xcd, 0x5c, 0xe1, 0x30, 0x72,
|
||||
0x61, 0xf8, 0x66, 0x57, 0x5c, 0xae, 0xa0, 0xa3, 0xe8, 0x47, 0x28, 0x6e, 0xcc, 0x67, 0xd7, 0xd9,
|
||||
0xaa, 0x18, 0xf4, 0x8e, 0xf2, 0xa5, 0xe5, 0xf1, 0x83, 0x28, 0x61, 0x27, 0xf8, 0xb9, 0xaa, 0x2c,
|
||||
0xaa, 0x08, 0x69, 0xec, 0x5e, 0x47, 0x4a, 0x70, 0xe5, 0x42, 0x7d, 0xc2, 0xf0, 0x48, 0x8b, 0x13,
|
||||
0x4d, 0x20, 0x12, 0x41, 0xda, 0xe6, 0x8e, 0xd3, 0x99, 0x68, 0x69, 0x45, 0x32, 0x47, 0xbb, 0x50,
|
||||
0xd8, 0xbc, 0x3d, 0x3c, 0x90, 0x99, 0x51, 0xe5, 0xa4, 0x7b, 0x1e, 0x89, 0x96, 0x10, 0x34, 0x7e,
|
||||
0xa8, 0xd7, 0x19, 0x33, 0x46, 0xbf, 0xe7, 0x54, 0xc2, 0x89, 0xad, 0x1c, 0xa4, 0x54, 0xb9, 0xc9,
|
||||
0x2a, 0x07, 0x52, 0x7b, 0x95, 0xa1, 0xfe, 0x50, 0x8d, 0x0b, 0x7c, 0x8d, 0xa5, 0xb9, 0x04, 0x7d,
|
||||
0x27, 0x75, 0x08, 0xff, 0x61, 0x5c, 0x9d, 0xc9, 0xab, 0x11, 0x59, 0x6a, 0xa8, 0x8d, 0x0c, 0x97,
|
||||
0x34, 0xa4, 0x5d, 0x81, 0xf0, 0x39, 0x32, 0x19, 0xbe, 0xad, 0x58, 0x7d, 0x3a, 0x6f, 0x9d, 0x07,
|
||||
0xc4, 0x70, 0xf2, 0xab, 0xf8, 0xd7, 0xc6, 0x99, 0x22, 0x28, 0xbf, 0x0a, 0xb6, 0xef, 0x79, 0xe4,
|
||||
0x65, 0x99, 0xbb, 0x0a, 0x60,
|
||||
};
|
||||
879
libfprint/drivers/validity/validity_blobs_0090.inc
Normal file
879
libfprint/drivers/validity/validity_blobs_0090.inc
Normal file
|
|
@ -0,0 +1,879 @@
|
|||
/* Encrypted blobs for 0x138a:0x0090
|
||||
* Auto-generated from python-validity blobs_90.py
|
||||
* DO NOT EDIT — regenerate with scripts/blob_extract/convert_blobs.py
|
||||
*/
|
||||
|
||||
/* init_hardcoded: 485 bytes */
|
||||
static const guint8 init_hardcoded_0090[] = {
|
||||
0x06, 0x02, 0x00, 0x00, 0x01, 0x39, 0x17, 0xb3, 0xdd, 0xa9, 0x13, 0x83, 0xb5, 0xbc, 0xac, 0x64,
|
||||
0xfa, 0x4a, 0xd3, 0x5d, 0xce, 0x96, 0x57, 0x0a, 0x9d, 0x2d, 0x97, 0x4b, 0x80, 0x92, 0x6a, 0x43,
|
||||
0x1f, 0x9c, 0xd4, 0x62, 0x48, 0x98, 0x0a, 0x26, 0x3c, 0x6f, 0xce, 0xf6, 0xa8, 0x28, 0x39, 0xa9,
|
||||
0x0b, 0x59, 0xac, 0x59, 0x08, 0x48, 0x85, 0x9a, 0xfa, 0xc8, 0x17, 0xb7, 0xd5, 0x3b, 0xf5, 0x1c,
|
||||
0xd3, 0x20, 0x5c, 0x1b, 0x8f, 0x43, 0x04, 0x8b, 0xe8, 0x25, 0x3c, 0x3b, 0xd2, 0x47, 0x93, 0x7c,
|
||||
0x83, 0x7a, 0xca, 0x8b, 0x18, 0xd3, 0xcc, 0x8e, 0xe8, 0xc8, 0x97, 0x1a, 0xc4, 0xf6, 0x88, 0x81,
|
||||
0x3c, 0xf3, 0xd8, 0x55, 0x0d, 0x71, 0x49, 0x69, 0x85, 0xb7, 0xec, 0x07, 0xff, 0x2d, 0xc7, 0x89,
|
||||
0x6d, 0x33, 0x0f, 0xda, 0xb2, 0x63, 0xa0, 0xee, 0x43, 0x3a, 0x5c, 0x4b, 0xc9, 0x10, 0x43, 0x9d,
|
||||
0x1c, 0x61, 0x61, 0x85, 0x3f, 0xeb, 0x03, 0xf5, 0x50, 0x22, 0x09, 0x50, 0x2e, 0x73, 0x08, 0xbe,
|
||||
0xb7, 0x91, 0x94, 0x73, 0xcf, 0xe6, 0x9f, 0x42, 0x2c, 0x30, 0x50, 0x2d, 0x22, 0x6a, 0x4d, 0x0a,
|
||||
0x34, 0xd9, 0x6c, 0x8c, 0x77, 0x95, 0x6c, 0xf6, 0x9d, 0xb8, 0xef, 0x6c, 0xf9, 0x27, 0xa3, 0xb5,
|
||||
0x78, 0x49, 0xd4, 0xaa, 0x8a, 0xd4, 0xb4, 0x42, 0x66, 0x92, 0x3e, 0x34, 0xb8, 0x2a, 0x39, 0xc8,
|
||||
0x14, 0x6b, 0xa3, 0xcd, 0x70, 0x8c, 0x70, 0xdf, 0xed, 0xb5, 0x0c, 0x2d, 0xe6, 0x1f, 0xeb, 0x45,
|
||||
0xb1, 0xd4, 0xf1, 0x95, 0x84, 0x29, 0x72, 0x03, 0xf5, 0xfd, 0xc8, 0x65, 0x79, 0x5f, 0xec, 0x9d,
|
||||
0x64, 0x49, 0xf3, 0xba, 0x9b, 0x6f, 0x1e, 0x4b, 0xed, 0x69, 0x8e, 0xe1, 0x51, 0xe8, 0x3d, 0x4d,
|
||||
0x87, 0x02, 0xf7, 0x6a, 0x40, 0x06, 0xcf, 0xa2, 0x4d, 0x9b, 0x79, 0x78, 0x88, 0x20, 0x3b, 0x22,
|
||||
0x69, 0xf8, 0xa7, 0x7d, 0x52, 0x40, 0x34, 0xac, 0x32, 0xe4, 0xaf, 0x58, 0xb8, 0x6e, 0xbc, 0x63,
|
||||
0x55, 0x2c, 0xb3, 0x5b, 0x12, 0xb2, 0x85, 0x25, 0x5d, 0xea, 0xf3, 0xa3, 0x2b, 0xf4, 0x6c, 0xdc,
|
||||
0x5a, 0xd3, 0xbc, 0x1c, 0x9e, 0xd1, 0xbc, 0xc1, 0x12, 0xc7, 0x21, 0x43, 0xf9, 0xae, 0xc5, 0x68,
|
||||
0xe2, 0xca, 0xcf, 0xa8, 0x9b, 0xa0, 0xc7, 0xbb, 0x65, 0x59, 0x0d, 0x8b, 0x93, 0xe6, 0x87, 0x1a,
|
||||
0x33, 0xc6, 0xc6, 0x98, 0x3c, 0x0a, 0xcd, 0x04, 0xe7, 0x37, 0xff, 0x55, 0xee, 0xe0, 0x24, 0xca,
|
||||
0x6b, 0x9a, 0x48, 0x33, 0x2c, 0x1a, 0x69, 0xa5, 0xa3, 0xfd, 0xd2, 0x4b, 0x96, 0x4c, 0xf7, 0xe7,
|
||||
0xc5, 0x52, 0x29, 0xbb, 0x0b, 0x48, 0xa6, 0xe3, 0x39, 0xeb, 0x2c, 0x42, 0xd0, 0x7e, 0xc8, 0x50,
|
||||
0xa4, 0xee, 0x78, 0x06, 0x60, 0xad, 0x6c, 0x77, 0xff, 0xa3, 0x02, 0xa6, 0x3b, 0xd1, 0x94, 0x26,
|
||||
0x13, 0x4c, 0x45, 0x33, 0xd6, 0xf9, 0x67, 0x44, 0x11, 0x63, 0xfb, 0x78, 0xb7, 0x35, 0x47, 0xc6,
|
||||
0x8a, 0x49, 0x3b, 0x2f, 0x80, 0x0d, 0x3c, 0xda, 0xb8, 0x27, 0xb1, 0x16, 0x76, 0x27, 0x89, 0x99,
|
||||
0x2a, 0xae, 0x3c, 0x8a, 0xb3, 0x45, 0xa4, 0x9e, 0xdd, 0x31, 0x2d, 0xfd, 0x2a, 0x27, 0xbc, 0x50,
|
||||
0x14, 0x27, 0xdc, 0x7f, 0xa0, 0x0a, 0xc3, 0xc5, 0xc3, 0x65, 0x51, 0xdb, 0xb3, 0xd5, 0xca, 0xd8,
|
||||
0xd5, 0xbd, 0x7c, 0xea, 0x37, 0xe5, 0x8a, 0x31, 0x30, 0x7a, 0x6d, 0x50, 0xe6, 0xae, 0x37, 0x9a,
|
||||
0x53, 0xf1, 0x36, 0x66, 0x78, 0xc0, 0x74, 0x1a, 0x3d, 0x87, 0x2b, 0x8d, 0xcf, 0xef, 0xa7, 0xf6,
|
||||
0x31, 0x28, 0xdc, 0x82, 0x45,
|
||||
};
|
||||
|
||||
/* init_hardcoded_clean_slate: not available for this PID */
|
||||
|
||||
/* reset_blob: 11493 bytes */
|
||||
static const guint8 reset_blob_0090[] = {
|
||||
0x06, 0x02, 0x00, 0x00, 0x01, 0xd6, 0x12, 0x32, 0x41, 0x37, 0x6f, 0x11, 0x09, 0x35, 0xa7, 0xae,
|
||||
0x38, 0xb6, 0x14, 0xce, 0xd9, 0x95, 0x2e, 0xaa, 0x38, 0xe2, 0x98, 0x48, 0x42, 0xd0, 0x55, 0x2d,
|
||||
0x98, 0x4b, 0x69, 0xab, 0x5c, 0x1a, 0x70, 0x17, 0x55, 0x13, 0x31, 0x99, 0x70, 0x22, 0x5d, 0x9c,
|
||||
0xa2, 0x5b, 0xe0, 0x63, 0xa7, 0xd7, 0x0a, 0x29, 0xdf, 0xf8, 0x03, 0x24, 0x0c, 0x09, 0x9b, 0xa5,
|
||||
0x38, 0x69, 0x10, 0xb6, 0x9c, 0x3b, 0x7c, 0xa8, 0xd0, 0xb2, 0x6e, 0xc9, 0xa5, 0x68, 0x4f, 0xe9,
|
||||
0x2a, 0xf9, 0xc6, 0xd8, 0x06, 0x8a, 0xce, 0x09, 0x54, 0xeb, 0x85, 0x82, 0xad, 0xc6, 0x20, 0x8a,
|
||||
0xa6, 0xc1, 0x16, 0xb1, 0x77, 0x8f, 0xf5, 0x31, 0xdd, 0x2b, 0x68, 0x17, 0xa1, 0x0d, 0x66, 0x7e,
|
||||
0x03, 0x85, 0xd1, 0x8a, 0xc7, 0xcc, 0xb4, 0x7e, 0xb6, 0x7f, 0x1f, 0x54, 0xb5, 0xb9, 0x4c, 0x84,
|
||||
0xd6, 0x55, 0x29, 0xc6, 0xe9, 0xfe, 0x90, 0x39, 0x21, 0x8a, 0xe9, 0xcd, 0xe1, 0x23, 0xf3, 0x8f,
|
||||
0xfa, 0x52, 0xa9, 0x53, 0xed, 0x58, 0x9d, 0x0d, 0x8b, 0xb4, 0x86, 0x80, 0xae, 0xea, 0x65, 0x44,
|
||||
0xb7, 0xce, 0xed, 0xbe, 0xa3, 0x21, 0x66, 0x15, 0x40, 0x49, 0x21, 0xb4, 0x38, 0x59, 0xfa, 0xcf,
|
||||
0x8e, 0xd4, 0x44, 0x8e, 0x58, 0x53, 0x54, 0xc5, 0x68, 0xfe, 0x8d, 0x95, 0x61, 0xef, 0xb3, 0xfc,
|
||||
0x9b, 0x88, 0xaf, 0x8e, 0x6c, 0x3c, 0x7c, 0x02, 0xac, 0x9b, 0x44, 0xad, 0xbf, 0x78, 0x0d, 0x23,
|
||||
0x73, 0x01, 0x35, 0xc1, 0xf9, 0x84, 0x0b, 0x67, 0xb3, 0x02, 0xb6, 0xef, 0xe9, 0xdb, 0x19, 0xee,
|
||||
0x1f, 0x59, 0x18, 0x74, 0x0d, 0xc0, 0x25, 0x9b, 0x3c, 0xbd, 0xd4, 0xf1, 0x0e, 0x59, 0xd1, 0xa5,
|
||||
0x17, 0xf5, 0x4e, 0x93, 0x2b, 0xf0, 0x1d, 0x2b, 0x1e, 0x5a, 0xd5, 0xc4, 0xf7, 0x1a, 0xf2, 0x33,
|
||||
0x73, 0x63, 0x2e, 0x06, 0x16, 0x0f, 0x83, 0x79, 0x9a, 0x0a, 0x1b, 0x24, 0x79, 0xd9, 0xba, 0xd0,
|
||||
0x18, 0x92, 0x66, 0x7d, 0x13, 0x6e, 0x27, 0x46, 0x3a, 0x0e, 0xac, 0x48, 0x55, 0x41, 0xf2, 0x40,
|
||||
0x18, 0xbd, 0x80, 0x46, 0x3c, 0xea, 0x17, 0xad, 0xa2, 0x64, 0xcc, 0x76, 0x0b, 0x38, 0xa0, 0xac,
|
||||
0x87, 0xb2, 0x75, 0x39, 0xb7, 0x2e, 0x1c, 0x4f, 0x05, 0xd7, 0x3f, 0x6c, 0x9c, 0x77, 0x7b, 0x2e,
|
||||
0x70, 0xc3, 0x66, 0xf1, 0xb7, 0x9d, 0x31, 0xae, 0x2d, 0xd1, 0xee, 0xbb, 0xda, 0x99, 0x23, 0x90,
|
||||
0xc6, 0x4c, 0x98, 0x8c, 0x5e, 0x04, 0xe3, 0xb4, 0xab, 0xab, 0xa8, 0xc0, 0xfb, 0xaa, 0x33, 0xda,
|
||||
0x18, 0xa0, 0x97, 0xb6, 0x09, 0x56, 0x2f, 0x60, 0x9e, 0xcd, 0xe2, 0x44, 0x3f, 0xa9, 0xb3, 0x15,
|
||||
0x66, 0x7c, 0x95, 0xfb, 0x62, 0xab, 0xed, 0xbb, 0x88, 0x87, 0xdb, 0xcd, 0x96, 0x5a, 0x1c, 0xf3,
|
||||
0x51, 0xc7, 0x95, 0xca, 0x4f, 0x5c, 0xc6, 0xe2, 0x2e, 0x84, 0x4c, 0xc8, 0x13, 0xfc, 0xce, 0xb3,
|
||||
0x47, 0x41, 0xf5, 0xc9, 0x88, 0xdd, 0x38, 0xd3, 0x1e, 0xa3, 0xbd, 0x3c, 0xb3, 0x73, 0x16, 0x2e,
|
||||
0xfd, 0x3d, 0x57, 0x44, 0x26, 0x8c, 0x1c, 0x9a, 0x5b, 0x67, 0x9c, 0x97, 0xe2, 0x35, 0x6c, 0x7b,
|
||||
0x1d, 0xe1, 0x46, 0xeb, 0x67, 0x55, 0x97, 0x88, 0x4f, 0xda, 0x01, 0xe6, 0x63, 0x60, 0xb8, 0x07,
|
||||
0xe0, 0x4c, 0x4e, 0x55, 0x7c, 0xcd, 0xe2, 0xa2, 0x9d, 0xf1, 0x03, 0x0c, 0x0d, 0xa4, 0x75, 0x0c,
|
||||
0x93, 0x14, 0xc5, 0x51, 0xb6, 0xa5, 0x06, 0x17, 0x11, 0xc6, 0xaa, 0x1a, 0x01, 0x56, 0x49, 0x33,
|
||||
0x21, 0x8e, 0x2a, 0x99, 0x38, 0xd8, 0xa1, 0x58, 0xa1, 0x7d, 0xa1, 0x54, 0x96, 0x9d, 0xcb, 0x3a,
|
||||
0xed, 0xfb, 0x8b, 0xce, 0x12, 0x02, 0x4b, 0x90, 0x8e, 0x7e, 0x75, 0xb9, 0xa8, 0xf4, 0x43, 0x83,
|
||||
0xa4, 0xa7, 0xc3, 0xa3, 0x56, 0x32, 0x05, 0x4e, 0xf1, 0xbf, 0xfa, 0x41, 0x37, 0xe0, 0xf4, 0xd7,
|
||||
0x24, 0xc3, 0xa0, 0x6a, 0x96, 0xfe, 0x98, 0x6a, 0x33, 0x9c, 0xa4, 0xf2, 0x77, 0x44, 0x70, 0x8f,
|
||||
0xeb, 0x65, 0x23, 0xa3, 0x1a, 0xa4, 0xe2, 0xa1, 0x9d, 0x15, 0x67, 0x96, 0x4d, 0x52, 0xb5, 0x68,
|
||||
0x25, 0x9c, 0xdc, 0xc6, 0x02, 0xc7, 0xeb, 0xb4, 0x68, 0xbc, 0x58, 0x46, 0xa9, 0x18, 0x3a, 0x56,
|
||||
0x91, 0x7e, 0x3f, 0x44, 0x0e, 0x52, 0x22, 0x06, 0xe7, 0xe0, 0xe0, 0x6a, 0x07, 0xae, 0xd6, 0xb6,
|
||||
0x80, 0xe0, 0xbc, 0x81, 0x82, 0x17, 0xbb, 0x4d, 0xfb, 0x20, 0x10, 0xff, 0x50, 0x3b, 0xe6, 0xd3,
|
||||
0xe5, 0x55, 0xee, 0x1a, 0xf3, 0x2e, 0xdb, 0x3f, 0x02, 0xf6, 0x90, 0x6c, 0xdc, 0xef, 0x60, 0x53,
|
||||
0xa8, 0x51, 0xe7, 0x99, 0x91, 0x31, 0x57, 0x22, 0x0c, 0x56, 0x3d, 0xdc, 0xc4, 0x7c, 0xf7, 0x66,
|
||||
0x5f, 0xed, 0xe1, 0x33, 0x6f, 0x15, 0x2d, 0xf1, 0xd1, 0xc6, 0xd1, 0x45, 0xa5, 0x35, 0xe5, 0x9d,
|
||||
0xc4, 0x1b, 0x79, 0x63, 0xbb, 0x52, 0x0e, 0x66, 0xdc, 0x12, 0xa2, 0x1e, 0xb5, 0xa9, 0x00, 0xf9,
|
||||
0x39, 0xb7, 0x83, 0x8f, 0x27, 0x4d, 0x9e, 0xbb, 0x7c, 0xd0, 0xc2, 0x95, 0x1f, 0x2b, 0x93, 0x79,
|
||||
0xb5, 0x4f, 0x20, 0xbc, 0x50, 0xee, 0x6e, 0xc2, 0xdd, 0x09, 0xd7, 0xaf, 0x7b, 0x9f, 0x02, 0x72,
|
||||
0x61, 0xc3, 0x8f, 0x05, 0x6f, 0x3f, 0x1b, 0x95, 0x3c, 0xf2, 0x1b, 0xda, 0x1f, 0x5a, 0x9c, 0xaf,
|
||||
0x3b, 0x07, 0xd1, 0x60, 0xf8, 0x0c, 0x18, 0x6f, 0xc5, 0xea, 0xa4, 0x20, 0x74, 0xd0, 0x41, 0xea,
|
||||
0xee, 0x81, 0x51, 0x8f, 0xd2, 0xb4, 0x63, 0x11, 0x2a, 0xe6, 0xa6, 0xc0, 0x7a, 0x18, 0x5e, 0x8c,
|
||||
0x24, 0x10, 0x1e, 0xe1, 0x4d, 0xdd, 0xc4, 0x40, 0x9c, 0xe7, 0xfc, 0xf9, 0xa1, 0x89, 0x55, 0xbb,
|
||||
0xeb, 0x8c, 0x71, 0x46, 0xdc, 0xd9, 0x2a, 0xb1, 0x65, 0xe2, 0x04, 0x84, 0xc2, 0xb3, 0x16, 0xac,
|
||||
0xb3, 0xd9, 0xdd, 0x22, 0x15, 0xc5, 0xb7, 0xf4, 0xeb, 0x89, 0x54, 0x20, 0x26, 0x28, 0x63, 0x5a,
|
||||
0x46, 0xb4, 0x63, 0xe1, 0xb2, 0xd3, 0x5c, 0x46, 0x6e, 0xed, 0xc3, 0xc4, 0x99, 0x51, 0x22, 0x28,
|
||||
0x40, 0x95, 0x9d, 0xb8, 0xeb, 0x11, 0x12, 0xf3, 0x2f, 0xa9, 0x52, 0xd7, 0x2f, 0x2c, 0xe2, 0xf6,
|
||||
0x29, 0x76, 0x46, 0xeb, 0xaf, 0x53, 0xdc, 0x1c, 0x0e, 0xc4, 0x84, 0xfb, 0x70, 0x39, 0x38, 0xf4,
|
||||
0x34, 0x1f, 0x21, 0xc1, 0x57, 0xfb, 0x58, 0xdc, 0x10, 0x1e, 0x39, 0x18, 0x05, 0x3d, 0x8a, 0xba,
|
||||
0xb7, 0x5c, 0x93, 0x00, 0xb2, 0x91, 0x2f, 0x84, 0x0b, 0xac, 0xdf, 0xb4, 0xe2, 0x74, 0x16, 0xbf,
|
||||
0xa3, 0xa9, 0x45, 0xde, 0x6c, 0xea, 0x14, 0xa6, 0x0f, 0x09, 0xd5, 0x7e, 0x6e, 0xc7, 0xee, 0x83,
|
||||
0xf5, 0x61, 0x6a, 0x9f, 0xbf, 0x09, 0x52, 0x01, 0x74, 0x20, 0xf8, 0x57, 0xb3, 0x5f, 0xca, 0xaf,
|
||||
0xdf, 0x7a, 0xf5, 0x04, 0x46, 0xc1, 0xe7, 0xd2, 0x62, 0x4f, 0x9c, 0xc4, 0xa1, 0x87, 0xaf, 0x0c,
|
||||
0x6c, 0xe6, 0xc1, 0x18, 0xcc, 0xd4, 0x23, 0x4d, 0x99, 0x14, 0x02, 0xc0, 0xb8, 0x1d, 0xd3, 0x8b,
|
||||
0xb5, 0x23, 0xa2, 0xec, 0xfc, 0xb1, 0x68, 0x96, 0xfe, 0x16, 0xae, 0xfe, 0x7b, 0xab, 0x3d, 0xed,
|
||||
0x4f, 0x74, 0x60, 0x49, 0xe1, 0xd3, 0x8e, 0x6f, 0x8d, 0x71, 0x30, 0xbc, 0xcb, 0xac, 0x4b, 0x33,
|
||||
0xbf, 0x54, 0x3d, 0x9c, 0x49, 0x29, 0xb7, 0xa6, 0x24, 0x7d, 0x1d, 0x4f, 0x9d, 0x57, 0x24, 0xe6,
|
||||
0x04, 0x0f, 0x5d, 0x4a, 0x35, 0x70, 0x41, 0xfa, 0x07, 0xa8, 0xad, 0x99, 0x81, 0x10, 0xca, 0x30,
|
||||
0xa3, 0xce, 0x6a, 0xc9, 0xfe, 0xd5, 0x80, 0x03, 0x4a, 0xdb, 0x66, 0xdf, 0x8f, 0xa8, 0x64, 0x3a,
|
||||
0xd3, 0xec, 0xcf, 0xcf, 0xf6, 0xcc, 0xb8, 0xdf, 0x07, 0x56, 0xff, 0x42, 0x6a, 0xa9, 0xde, 0xe0,
|
||||
0x1d, 0x65, 0x6f, 0xe6, 0x99, 0xf0, 0x91, 0x61, 0x1c, 0x5d, 0x68, 0x68, 0x8b, 0x3e, 0xe2, 0x8e,
|
||||
0x32, 0x0d, 0x9e, 0xe2, 0x96, 0x6a, 0x5c, 0xf1, 0x46, 0xc1, 0x30, 0x13, 0xfc, 0x4c, 0xe3, 0x53,
|
||||
0xc2, 0x03, 0x68, 0x9a, 0x38, 0xe0, 0x43, 0x78, 0x05, 0x71, 0x11, 0x41, 0x90, 0x0d, 0xdf, 0xa1,
|
||||
0x3c, 0x54, 0x25, 0xe5, 0xc6, 0xaa, 0x54, 0x47, 0xc1, 0x3a, 0x35, 0x89, 0x36, 0x96, 0xae, 0x04,
|
||||
0x58, 0x79, 0x01, 0x99, 0x20, 0x71, 0xde, 0xdc, 0xe8, 0x15, 0x5f, 0x27, 0x35, 0x81, 0xf0, 0xba,
|
||||
0x35, 0xb7, 0xb2, 0x3c, 0x7b, 0x86, 0x51, 0x49, 0x94, 0x5b, 0xe1, 0xbd, 0xa2, 0x23, 0x3a, 0x7b,
|
||||
0x5b, 0x4e, 0x2f, 0x55, 0x30, 0x17, 0x0d, 0xdd, 0x8f, 0xee, 0x44, 0x22, 0x9a, 0x2b, 0xbc, 0xa2,
|
||||
0x62, 0x21, 0x72, 0xb3, 0x68, 0x31, 0x44, 0x5d, 0x4c, 0x9e, 0xc9, 0xbe, 0x1d, 0xdb, 0x14, 0xde,
|
||||
0x7e, 0xab, 0x85, 0x93, 0xa6, 0xe5, 0x38, 0x9c, 0xc2, 0x60, 0xfb, 0x45, 0x3e, 0x30, 0x62, 0xb5,
|
||||
0x86, 0x2c, 0xeb, 0xa8, 0x3d, 0xd3, 0x55, 0xab, 0x50, 0xd8, 0x59, 0xbd, 0x47, 0x21, 0x5c, 0x84,
|
||||
0x40, 0x86, 0xef, 0x0f, 0x8d, 0x07, 0x44, 0x12, 0x59, 0x0e, 0xb8, 0xd1, 0x63, 0x3b, 0xc2, 0x13,
|
||||
0x45, 0xdc, 0x1a, 0xac, 0xa9, 0x42, 0x0f, 0xcf, 0x35, 0x4a, 0xe4, 0x3e, 0xfc, 0xdb, 0x9a, 0x0b,
|
||||
0x3c, 0x94, 0x22, 0xc6, 0x63, 0x4c, 0x6e, 0x15, 0xa0, 0x1d, 0x21, 0xd1, 0xcc, 0x64, 0x5b, 0xb6,
|
||||
0xf3, 0xe5, 0x56, 0xde, 0x2c, 0x17, 0x47, 0x1d, 0x4c, 0x68, 0xac, 0xa8, 0x6e, 0xbc, 0x70, 0x0e,
|
||||
0xfd, 0x31, 0xfe, 0x9e, 0xba, 0x3c, 0x31, 0xd1, 0x8c, 0x33, 0xd4, 0xb9, 0x48, 0x44, 0x1b, 0xc6,
|
||||
0xf6, 0x68, 0x29, 0x62, 0x01, 0x8d, 0xd0, 0x70, 0x4b, 0xde, 0xb7, 0x8f, 0xdf, 0xb4, 0x57, 0xc7,
|
||||
0x00, 0x75, 0xa4, 0x53, 0x97, 0x66, 0x8c, 0x85, 0xac, 0x26, 0xe1, 0x3c, 0x89, 0x0d, 0x1c, 0x98,
|
||||
0x0c, 0x2b, 0x85, 0x60, 0x2f, 0x99, 0x53, 0x8c, 0x64, 0x9f, 0xe9, 0x7a, 0x01, 0x54, 0x2f, 0x11,
|
||||
0x29, 0x18, 0xb6, 0x8c, 0xdc, 0x0b, 0x9e, 0x59, 0xf8, 0x14, 0xe2, 0x5e, 0x3d, 0xbe, 0xa2, 0x4c,
|
||||
0x8a, 0x36, 0xb0, 0x64, 0xed, 0x7f, 0x2c, 0x92, 0x4c, 0x0c, 0x45, 0xe7, 0x12, 0xa9, 0xec, 0x93,
|
||||
0x39, 0xee, 0xbb, 0xe4, 0x27, 0x8b, 0x1e, 0xd7, 0xfe, 0xfc, 0xd7, 0xd6, 0x0c, 0x27, 0xad, 0x80,
|
||||
0xa9, 0x78, 0x16, 0x1e, 0x36, 0xf7, 0x18, 0xf3, 0xb5, 0x2f, 0xd7, 0x83, 0x74, 0x54, 0xf0, 0x4b,
|
||||
0x43, 0x43, 0x8e, 0xa7, 0x8d, 0xbe, 0x7b, 0xad, 0xf3, 0x56, 0xce, 0x99, 0xe4, 0xdc, 0x3c, 0x97,
|
||||
0x49, 0xd9, 0x0d, 0xe6, 0xd6, 0x30, 0xc8, 0x8e, 0x58, 0xd8, 0xf6, 0xf8, 0x28, 0x75, 0x9d, 0xc1,
|
||||
0x4d, 0x74, 0x2e, 0xa4, 0xb6, 0x23, 0x2e, 0xfd, 0x05, 0xda, 0x4c, 0xc2, 0x00, 0x73, 0x2a, 0x4f,
|
||||
0xab, 0x8b, 0x9b, 0xc8, 0x89, 0x62, 0x33, 0x43, 0x23, 0x33, 0xd3, 0x44, 0xac, 0xbd, 0xeb, 0xa7,
|
||||
0xeb, 0x64, 0x63, 0x4e, 0x8a, 0x91, 0x91, 0x9e, 0xfd, 0x81, 0xf4, 0xb8, 0x48, 0x51, 0x1c, 0x18,
|
||||
0x1f, 0x3f, 0x45, 0xba, 0x45, 0x84, 0x1c, 0xb2, 0x35, 0xb4, 0x77, 0x45, 0x88, 0x2c, 0xdd, 0x44,
|
||||
0xba, 0xa4, 0x4e, 0xc8, 0xf7, 0x24, 0x7c, 0x47, 0x0f, 0x41, 0x23, 0x1b, 0x2c, 0x66, 0x32, 0x43,
|
||||
0x06, 0x8c, 0xc3, 0x09, 0xaa, 0x89, 0x0e, 0xf1, 0xb7, 0x9f, 0x8f, 0xc4, 0x38, 0xa5, 0x17, 0xb9,
|
||||
0x03, 0xd4, 0xe3, 0x5a, 0x1d, 0xbe, 0x1e, 0xcb, 0xaa, 0x2d, 0xf8, 0x87, 0xa1, 0xfa, 0x18, 0xaf,
|
||||
0x39, 0xc4, 0xcf, 0xe9, 0x01, 0x04, 0xd3, 0x30, 0xfa, 0x1b, 0x99, 0xef, 0x3f, 0x1e, 0xe8, 0x27,
|
||||
0x6c, 0xad, 0x45, 0x07, 0x4b, 0xfb, 0x5e, 0xc5, 0xfd, 0x72, 0xcf, 0x5b, 0x99, 0x69, 0xcb, 0xc4,
|
||||
0x79, 0x37, 0x5b, 0xd2, 0xbe, 0x27, 0x1d, 0x0a, 0x83, 0x22, 0xe5, 0x0f, 0x1b, 0x0c, 0x3b, 0x2c,
|
||||
0x66, 0xcc, 0x00, 0x88, 0xa3, 0xe4, 0xca, 0x6d, 0x72, 0x76, 0x79, 0x83, 0x32, 0x43, 0x38, 0x6c,
|
||||
0x44, 0x1e, 0x46, 0xc2, 0x50, 0x84, 0xe3, 0x76, 0x21, 0xc4, 0xa3, 0xa6, 0x77, 0x45, 0x68, 0xf6,
|
||||
0x5b, 0x9d, 0x2f, 0x50, 0x6f, 0xe6, 0x98, 0x32, 0x29, 0x73, 0xdd, 0xcb, 0x94, 0x88, 0x61, 0x59,
|
||||
0xf5, 0x5a, 0x96, 0x78, 0x80, 0xf5, 0x69, 0x33, 0xb0, 0x66, 0xad, 0xa7, 0xfd, 0xeb, 0x86, 0x1e,
|
||||
0xe4, 0x31, 0x36, 0x9c, 0xd9, 0x26, 0xee, 0x3b, 0x08, 0x8f, 0x9c, 0x5e, 0x85, 0x2a, 0xed, 0x06,
|
||||
0x4f, 0xa4, 0x00, 0x4f, 0xc6, 0x58, 0xef, 0xac, 0xc3, 0xfe, 0xc6, 0xcd, 0xc1, 0x15, 0x0b, 0xd1,
|
||||
0xb3, 0x18, 0x3f, 0xf5, 0x2c, 0xb6, 0x2d, 0x59, 0x8b, 0xaf, 0x17, 0x21, 0x26, 0xaf, 0xb3, 0xd8,
|
||||
0xb3, 0xeb, 0xa6, 0x5d, 0xb8, 0x80, 0xf3, 0x30, 0x70, 0x78, 0xd9, 0xf2, 0x63, 0xbf, 0x26, 0x1b,
|
||||
0xec, 0x79, 0x7d, 0xb7, 0x05, 0x30, 0x0f, 0x63, 0x57, 0x96, 0x77, 0x5d, 0x0e, 0x8d, 0x2a, 0x96,
|
||||
0x4f, 0x2b, 0x51, 0xad, 0x76, 0x95, 0x61, 0xb2, 0x24, 0x4a, 0x48, 0xb5, 0xf9, 0x76, 0x7f, 0x71,
|
||||
0xda, 0x48, 0x56, 0xc3, 0x29, 0xeb, 0x5a, 0x8a, 0x58, 0xcc, 0xab, 0x19, 0x93, 0xfc, 0x0f, 0x93,
|
||||
0xf3, 0x49, 0x19, 0x91, 0x31, 0x24, 0x06, 0xc2, 0x79, 0x7e, 0x5b, 0x08, 0xa0, 0xef, 0x71, 0x72,
|
||||
0x8e, 0x8c, 0xc3, 0xad, 0xcd, 0x23, 0xd2, 0x9b, 0x72, 0x48, 0xc3, 0x28, 0xb1, 0x92, 0x48, 0x9b,
|
||||
0xec, 0x81, 0xc5, 0x6b, 0xe0, 0x08, 0x7c, 0xf3, 0x86, 0x53, 0xe4, 0x14, 0x8a, 0x80, 0x65, 0x12,
|
||||
0x1f, 0xf7, 0xc6, 0xad, 0x4f, 0x8a, 0xa4, 0xbc, 0xaa, 0x37, 0x5f, 0x56, 0x6a, 0x8c, 0x61, 0x7d,
|
||||
0x59, 0xab, 0xcd, 0x6c, 0x3b, 0x0a, 0xa1, 0x3e, 0xa4, 0x59, 0x0e, 0x5e, 0x37, 0xf4, 0x7b, 0xc2,
|
||||
0x76, 0xf0, 0xf3, 0xcb, 0xfb, 0xcc, 0x0f, 0x15, 0x9e, 0x4e, 0x41, 0x1e, 0x3b, 0x42, 0xa5, 0xfd,
|
||||
0x2c, 0x44, 0x0b, 0xab, 0x91, 0x61, 0x17, 0x71, 0x02, 0x08, 0xef, 0x6f, 0x11, 0x3e, 0xa8, 0x27,
|
||||
0x09, 0xd5, 0xe0, 0xf5, 0xcd, 0xb6, 0x8f, 0xc3, 0x76, 0xfe, 0x70, 0x7f, 0x26, 0x00, 0xdb, 0x2f,
|
||||
0x5b, 0xbe, 0xf6, 0x56, 0x9f, 0xbd, 0x6c, 0xec, 0x36, 0x46, 0x21, 0xf3, 0x04, 0x45, 0xb1, 0x61,
|
||||
0xd3, 0xfa, 0xef, 0x69, 0xfa, 0x84, 0x0c, 0x87, 0xa3, 0x01, 0x60, 0x4e, 0x35, 0x1b, 0x6b, 0x25,
|
||||
0xdb, 0x6a, 0x7d, 0x20, 0xc8, 0x6c, 0x1d, 0x3d, 0x4d, 0x28, 0xeb, 0xf8, 0x88, 0x50, 0xf6, 0x0d,
|
||||
0x7a, 0xc0, 0xc1, 0xe3, 0x6e, 0x1d, 0x62, 0x9f, 0x76, 0xf0, 0x7a, 0xa6, 0x5d, 0xe7, 0x8b, 0xc9,
|
||||
0xb3, 0x33, 0x24, 0xae, 0x53, 0x31, 0x2c, 0xd1, 0x5d, 0x5c, 0xf5, 0x41, 0x75, 0xdd, 0x0d, 0xc9,
|
||||
0xb2, 0xb9, 0x05, 0x83, 0xd2, 0x92, 0x90, 0xa7, 0x25, 0x69, 0xa5, 0xe3, 0xf1, 0xd7, 0xed, 0xec,
|
||||
0x31, 0x95, 0xda, 0x0d, 0xdc, 0x54, 0x75, 0x67, 0xc9, 0x48, 0xb1, 0xb8, 0xbe, 0xd5, 0xdf, 0x3f,
|
||||
0xcd, 0xb5, 0x6f, 0x9b, 0x0c, 0x62, 0x5a, 0xa2, 0x88, 0xfd, 0x57, 0x81, 0x59, 0x61, 0x01, 0x42,
|
||||
0x98, 0xda, 0x72, 0xd5, 0x16, 0xce, 0x02, 0x0d, 0xc7, 0x35, 0x63, 0xc0, 0xd3, 0x4a, 0x74, 0x63,
|
||||
0xfa, 0x86, 0x9a, 0xdb, 0xe2, 0x49, 0x63, 0xd8, 0xf1, 0x2c, 0x80, 0xd7, 0x08, 0xb8, 0xf8, 0x51,
|
||||
0x0a, 0xbd, 0x66, 0xd9, 0x04, 0x7b, 0xd6, 0xd1, 0x4d, 0xb5, 0x81, 0x59, 0x48, 0xfe, 0x27, 0x08,
|
||||
0xac, 0x58, 0x4a, 0x6e, 0x0a, 0x6a, 0x0b, 0xe6, 0x6b, 0xd3, 0x15, 0xae, 0x1f, 0xb7, 0xda, 0xc0,
|
||||
0xbe, 0x36, 0x59, 0x10, 0xab, 0x0e, 0xee, 0xc7, 0x8c, 0x9f, 0x4b, 0x42, 0x09, 0x41, 0x59, 0x43,
|
||||
0xff, 0x05, 0x5b, 0xce, 0x11, 0xc6, 0x21, 0x62, 0x8c, 0x59, 0x32, 0x06, 0x0e, 0xb5, 0x16, 0xc2,
|
||||
0x60, 0xd4, 0xc3, 0xda, 0x41, 0xb0, 0x46, 0xa2, 0x87, 0x6c, 0xc1, 0x1e, 0xb5, 0x90, 0x78, 0xd5,
|
||||
0x50, 0xbc, 0x88, 0x3a, 0xa5, 0x72, 0x21, 0x39, 0xa0, 0x76, 0x12, 0x3c, 0x4d, 0xd2, 0xde, 0xbb,
|
||||
0x7d, 0xa7, 0x92, 0xbc, 0xda, 0xa5, 0xac, 0xe3, 0x68, 0xf8, 0xf7, 0xd5, 0xc9, 0x5b, 0xa0, 0xe7,
|
||||
0x39, 0x73, 0x93, 0xaf, 0xe1, 0xd0, 0x05, 0xcb, 0x89, 0xbb, 0xa2, 0x87, 0xb6, 0xca, 0x24, 0x40,
|
||||
0x29, 0x5b, 0xd9, 0xc3, 0xe8, 0x3a, 0x19, 0x5f, 0xfc, 0xd3, 0xa8, 0x53, 0x61, 0x7b, 0x1d, 0x4c,
|
||||
0x8b, 0x9f, 0xe1, 0xa7, 0xf5, 0xe4, 0xd4, 0x81, 0x7e, 0x7e, 0x22, 0xd0, 0xd4, 0x12, 0x55, 0xd0,
|
||||
0x44, 0xb2, 0x71, 0xa6, 0x53, 0xde, 0x5c, 0x6a, 0xb3, 0x1b, 0x17, 0xd6, 0x79, 0xc5, 0x22, 0x7d,
|
||||
0x1f, 0xba, 0x14, 0xf5, 0xde, 0x53, 0x12, 0x54, 0x24, 0xa5, 0xfa, 0xfc, 0x7c, 0xed, 0xbd, 0xf5,
|
||||
0x60, 0x37, 0x4c, 0x7d, 0x4e, 0x52, 0xd0, 0x4b, 0x6f, 0xcb, 0xb7, 0x25, 0x10, 0x8d, 0xdc, 0x8e,
|
||||
0x08, 0xe5, 0xb4, 0xfe, 0xfe, 0x9e, 0xf5, 0x65, 0xfb, 0x02, 0xcf, 0xaa, 0x3e, 0x56, 0xde, 0x43,
|
||||
0x77, 0xc6, 0xcb, 0x83, 0x6c, 0xd0, 0x20, 0x7b, 0xfd, 0x00, 0x25, 0x22, 0xcc, 0x85, 0x03, 0x80,
|
||||
0xc3, 0x9f, 0xb6, 0x6b, 0xb9, 0x2e, 0x30, 0x9c, 0x26, 0xcd, 0x05, 0xc9, 0x7d, 0x54, 0xba, 0x05,
|
||||
0x5a, 0xd5, 0x00, 0xf2, 0x3c, 0x2c, 0xac, 0x8c, 0xe1, 0xfc, 0xe2, 0x9b, 0x4c, 0x62, 0x36, 0x57,
|
||||
0xa4, 0x20, 0x58, 0x19, 0x6c, 0x3f, 0xe6, 0x35, 0xec, 0xdb, 0x7e, 0x77, 0xa0, 0x1a, 0x21, 0x14,
|
||||
0xad, 0xac, 0x63, 0xf1, 0x41, 0x16, 0x9d, 0xf1, 0xf3, 0xcd, 0xf1, 0xc8, 0x6f, 0xb6, 0xe3, 0x4f,
|
||||
0xc4, 0x19, 0xd6, 0x86, 0xe6, 0x20, 0xa4, 0x27, 0xdf, 0x4d, 0x90, 0x34, 0x97, 0x0d, 0x66, 0x18,
|
||||
0x89, 0x64, 0x73, 0xb2, 0x13, 0xf1, 0x93, 0x3c, 0x53, 0x39, 0x85, 0xf4, 0x5c, 0x91, 0x97, 0x67,
|
||||
0x9c, 0xa0, 0x3a, 0x6c, 0x6b, 0x9b, 0x98, 0x93, 0x49, 0x2e, 0xf8, 0xa7, 0x12, 0xb3, 0x8d, 0x31,
|
||||
0x76, 0x18, 0xb6, 0xca, 0x00, 0x0b, 0xf0, 0xb5, 0x13, 0x48, 0x45, 0xd6, 0xda, 0x83, 0xc9, 0xd9,
|
||||
0x3c, 0x37, 0x85, 0xb3, 0x6a, 0xd9, 0x15, 0x5c, 0xce, 0x63, 0xf7, 0x4f, 0xde, 0xc8, 0x8e, 0x03,
|
||||
0xb6, 0x9b, 0x6d, 0xb3, 0x22, 0x65, 0xcb, 0xf5, 0x73, 0x44, 0xcd, 0xa5, 0x7e, 0x5f, 0x55, 0xd2,
|
||||
0x6e, 0x26, 0x57, 0x61, 0x25, 0xfe, 0xdd, 0xae, 0xac, 0x01, 0x41, 0xcd, 0x43, 0xdc, 0x5e, 0x90,
|
||||
0x6b, 0xab, 0xc5, 0x16, 0x2a, 0xd9, 0xc9, 0x0b, 0xf6, 0x23, 0x81, 0x6e, 0xe2, 0x1d, 0xe2, 0x91,
|
||||
0x4c, 0x91, 0x42, 0xf3, 0x2e, 0x28, 0xf4, 0x89, 0x85, 0x8c, 0xf9, 0x31, 0xed, 0xae, 0x30, 0xe5,
|
||||
0xb5, 0x3a, 0x5e, 0x6a, 0xd8, 0xc6, 0xd7, 0x4f, 0xcd, 0x0f, 0x49, 0x0c, 0xd8, 0xd0, 0x19, 0x04,
|
||||
0xd0, 0x7a, 0x8d, 0xf3, 0x1c, 0x69, 0x38, 0xf7, 0x92, 0x31, 0x9b, 0xf7, 0xd0, 0x3a, 0x04, 0xb6,
|
||||
0x9c, 0x58, 0xb9, 0x6b, 0x23, 0xd4, 0x99, 0x3d, 0x10, 0x84, 0x6d, 0x43, 0x6c, 0x61, 0x84, 0x01,
|
||||
0xff, 0x97, 0x55, 0x88, 0x41, 0x48, 0x9c, 0x0b, 0x7b, 0x1b, 0xe5, 0xa8, 0xd4, 0x52, 0xd4, 0x07,
|
||||
0x00, 0x26, 0xd4, 0xe2, 0x40, 0xa9, 0xad, 0x74, 0x9b, 0x44, 0xcf, 0x80, 0x11, 0xb1, 0xae, 0xf3,
|
||||
0x7b, 0x78, 0x97, 0x82, 0xb0, 0xf8, 0xe1, 0x74, 0x60, 0xd3, 0xc4, 0x3e, 0x92, 0x55, 0x5c, 0x41,
|
||||
0x34, 0x89, 0xba, 0xf2, 0xba, 0x1e, 0x01, 0xca, 0x64, 0xeb, 0x58, 0xf3, 0xdb, 0x61, 0xb3, 0x92,
|
||||
0x19, 0x81, 0xbd, 0xc7, 0xf0, 0x05, 0x85, 0x80, 0x15, 0xa9, 0x87, 0xc4, 0x57, 0xa9, 0xdf, 0x8a,
|
||||
0x35, 0xcf, 0xb7, 0x0b, 0x27, 0x77, 0x7e, 0x70, 0x43, 0xeb, 0x0c, 0xa0, 0x6a, 0x65, 0x47, 0x3a,
|
||||
0xb3, 0xc5, 0x03, 0x95, 0x5b, 0x5a, 0x74, 0x3c, 0x89, 0xd3, 0x41, 0xc0, 0xa3, 0x2e, 0x69, 0x04,
|
||||
0x7e, 0x5d, 0x9c, 0xda, 0xca, 0x90, 0x1e, 0x06, 0xc1, 0xb2, 0xd1, 0x1f, 0xe1, 0xeb, 0x27, 0x5b,
|
||||
0x8d, 0x29, 0x2a, 0x99, 0x2a, 0x5b, 0xdf, 0xbe, 0x29, 0xd4, 0x36, 0xc0, 0x3f, 0xc0, 0xc8, 0x5f,
|
||||
0x2e, 0x5c, 0x5d, 0xa3, 0xba, 0x8a, 0x18, 0xa8, 0xb3, 0x95, 0xae, 0xf8, 0x69, 0xcc, 0x21, 0x7a,
|
||||
0xfd, 0x64, 0xdd, 0x2a, 0x74, 0x8d, 0x21, 0x53, 0x5d, 0x89, 0xa9, 0x4f, 0x64, 0xd3, 0x70, 0x45,
|
||||
0xf0, 0xb2, 0x8f, 0x73, 0x31, 0x5f, 0x3d, 0x8f, 0x42, 0x0d, 0x30, 0x82, 0xbc, 0x3c, 0x33, 0xa9,
|
||||
0x61, 0x51, 0x81, 0x2a, 0xe6, 0x83, 0xfc, 0xde, 0x4c, 0x9b, 0x64, 0xe9, 0x6c, 0xe5, 0xc4, 0x63,
|
||||
0xc9, 0x3c, 0x15, 0xaf, 0x02, 0x64, 0x9c, 0x7c, 0x56, 0xed, 0x30, 0x8c, 0x9d, 0x38, 0x62, 0x16,
|
||||
0xc8, 0x8b, 0x1e, 0xaa, 0x87, 0x71, 0x7c, 0x96, 0x85, 0x2e, 0x80, 0xe6, 0xe5, 0x44, 0xd4, 0xc3,
|
||||
0x73, 0x1e, 0xc3, 0x4a, 0xff, 0xe4, 0x3b, 0xd5, 0x9d, 0x1e, 0x5a, 0x3e, 0x28, 0x6f, 0x23, 0xac,
|
||||
0x59, 0x6c, 0x30, 0x1d, 0x13, 0x11, 0xe9, 0x86, 0x16, 0xb6, 0x87, 0x0a, 0xe4, 0x1d, 0xc3, 0xf4,
|
||||
0xb6, 0x2c, 0x1e, 0x80, 0x19, 0xc7, 0xd9, 0x4b, 0xfb, 0xca, 0xc8, 0x12, 0xa7, 0x4d, 0xad, 0x0e,
|
||||
0x12, 0xef, 0xdd, 0x08, 0x42, 0xa7, 0x50, 0xc4, 0xe6, 0x5e, 0x31, 0x1c, 0x0b, 0x76, 0x87, 0xc1,
|
||||
0x80, 0x47, 0x5a, 0xcc, 0xa5, 0x70, 0x98, 0x8f, 0x13, 0x99, 0xf8, 0x5d, 0xec, 0x16, 0x9f, 0x46,
|
||||
0x74, 0x89, 0x5f, 0x9b, 0xa2, 0x17, 0x19, 0xb7, 0x52, 0xf4, 0xb5, 0x13, 0x4f, 0x03, 0x6a, 0xf8,
|
||||
0xa6, 0x25, 0x0c, 0xaf, 0x06, 0x92, 0x8c, 0x5d, 0x4c, 0x63, 0xba, 0xb2, 0x5a, 0x9f, 0x53, 0x0f,
|
||||
0x6f, 0x6b, 0x3b, 0x8c, 0xc4, 0xbe, 0xfa, 0xef, 0xac, 0x68, 0xa2, 0xb1, 0x00, 0xd6, 0x4a, 0x9f,
|
||||
0xc9, 0x00, 0x04, 0xdc, 0x2c, 0x7f, 0xfe, 0x32, 0xeb, 0xaa, 0x31, 0xca, 0x37, 0x14, 0xa4, 0x7d,
|
||||
0x32, 0xb2, 0x3c, 0xcd, 0x34, 0x63, 0x19, 0x43, 0x87, 0x0c, 0xca, 0x98, 0x9a, 0x11, 0xe3, 0x98,
|
||||
0x8a, 0xd9, 0xa8, 0x84, 0x49, 0x1f, 0xda, 0xec, 0xea, 0xdd, 0x08, 0xe6, 0xea, 0xb8, 0x76, 0x1d,
|
||||
0x6e, 0x40, 0xb5, 0xc6, 0xbb, 0x5c, 0x6b, 0xe5, 0x7d, 0x87, 0x96, 0x35, 0xc7, 0x89, 0x9a, 0xff,
|
||||
0x67, 0xd3, 0xe0, 0xce, 0x02, 0xfc, 0xea, 0x2b, 0xcf, 0xfd, 0x43, 0x74, 0x34, 0xe9, 0x84, 0x80,
|
||||
0xa7, 0x38, 0x8e, 0x86, 0xbe, 0x96, 0xc0, 0x8b, 0xe0, 0x1d, 0x38, 0x15, 0x7a, 0x20, 0x21, 0xe6,
|
||||
0xb6, 0xe7, 0x76, 0x7b, 0x25, 0x3e, 0x5e, 0x49, 0x0d, 0x19, 0xc0, 0x07, 0xd3, 0xa5, 0x5f, 0x54,
|
||||
0xd4, 0x2d, 0x50, 0x68, 0xd5, 0x74, 0xe9, 0x4c, 0x25, 0x22, 0x41, 0xdd, 0x0b, 0xa6, 0x37, 0xe8,
|
||||
0x1b, 0x35, 0x25, 0x5d, 0x26, 0xc4, 0x01, 0x15, 0x64, 0xdc, 0x04, 0xb8, 0xe8, 0x24, 0xc5, 0x1c,
|
||||
0x06, 0x35, 0xc4, 0x5b, 0xe6, 0x56, 0x8c, 0xa3, 0xe4, 0xb8, 0xfe, 0x4b, 0x18, 0xef, 0x25, 0x9f,
|
||||
0xdf, 0x05, 0x98, 0x00, 0x5f, 0x15, 0x3d, 0x7c, 0x88, 0x02, 0x94, 0x44, 0x56, 0x47, 0xc2, 0x93,
|
||||
0xa7, 0x91, 0xae, 0x63, 0xfa, 0x0b, 0xc7, 0x18, 0x85, 0x88, 0xa4, 0xa8, 0x0a, 0xcf, 0x08, 0xa8,
|
||||
0xd2, 0x5e, 0xb3, 0x76, 0x04, 0x3a, 0x59, 0x1c, 0x6d, 0xbd, 0x91, 0xe3, 0xed, 0xe1, 0x55, 0xbb,
|
||||
0xba, 0x2d, 0xad, 0x76, 0x4a, 0xc4, 0x78, 0x08, 0x7e, 0x0b, 0xf5, 0xdb, 0x54, 0xc1, 0xe3, 0x6a,
|
||||
0x75, 0x1d, 0x4d, 0x1f, 0xbe, 0x04, 0xff, 0xd5, 0xdf, 0xa6, 0x0d, 0xad, 0xf6, 0xd5, 0xd4, 0xcb,
|
||||
0xe1, 0x72, 0x4a, 0x6b, 0xcc, 0x63, 0x76, 0xb7, 0x2c, 0x0e, 0xe9, 0x01, 0xd2, 0x44, 0x48, 0x19,
|
||||
0xd4, 0xd6, 0xd3, 0x68, 0xa7, 0xec, 0x53, 0x92, 0x00, 0xa6, 0x6a, 0x2a, 0x85, 0x42, 0x0a, 0x23,
|
||||
0xcc, 0x40, 0xcd, 0xd5, 0xb6, 0xb7, 0xab, 0xce, 0xc5, 0x43, 0xf0, 0xe7, 0x7a, 0x2c, 0xac, 0x8f,
|
||||
0x91, 0x65, 0xf1, 0x7d, 0x0b, 0xcb, 0x8d, 0x64, 0xc8, 0xd1, 0x79, 0x51, 0xae, 0x64, 0xd3, 0xe3,
|
||||
0xcc, 0x40, 0x54, 0xeb, 0x2b, 0x56, 0x26, 0x51, 0x64, 0xce, 0x17, 0xf7, 0x81, 0x0f, 0x67, 0x36,
|
||||
0x83, 0x5e, 0x7a, 0xd6, 0x65, 0x3d, 0xcb, 0x48, 0x26, 0x12, 0x1a, 0xb3, 0xc3, 0x48, 0x2c, 0x9c,
|
||||
0x47, 0xae, 0xcd, 0x70, 0x8a, 0x96, 0x87, 0x5e, 0xfc, 0xd7, 0x44, 0xe6, 0x1f, 0xd8, 0x84, 0x54,
|
||||
0x9e, 0x09, 0xc9, 0x69, 0xf7, 0x8d, 0x74, 0xbe, 0x12, 0x33, 0x6f, 0x7c, 0x0a, 0x38, 0x61, 0x71,
|
||||
0x0d, 0xde, 0x88, 0x78, 0x3a, 0xed, 0xb9, 0x97, 0x5c, 0xe0, 0xea, 0x97, 0xdf, 0x46, 0x60, 0x0a,
|
||||
0x24, 0xdb, 0xd1, 0x58, 0x0a, 0xa3, 0x3d, 0xdf, 0x6c, 0xfc, 0xf8, 0x45, 0x01, 0x3d, 0x2b, 0x1d,
|
||||
0x8f, 0x27, 0x12, 0x87, 0x81, 0x3c, 0x4e, 0xf5, 0x6d, 0x35, 0x8e, 0x6d, 0x9c, 0xe5, 0x31, 0x1b,
|
||||
0xea, 0xbb, 0x9f, 0x97, 0x81, 0x15, 0xec, 0xe8, 0x02, 0x10, 0xc3, 0x97, 0xb9, 0xbd, 0xdd, 0xb0,
|
||||
0xaa, 0x06, 0x0c, 0x18, 0x45, 0xa8, 0xef, 0xb7, 0xb4, 0x67, 0x2c, 0x8f, 0xbe, 0xcc, 0xbb, 0x99,
|
||||
0x2f, 0x8b, 0x5a, 0x1d, 0x8c, 0xd4, 0xba, 0x9d, 0xb5, 0x9f, 0x7a, 0x51, 0x33, 0x68, 0xef, 0x6e,
|
||||
0xad, 0x10, 0x4e, 0x3c, 0xde, 0x8a, 0x0d, 0xf7, 0x89, 0x86, 0x47, 0xb8, 0x9f, 0x4f, 0x7a, 0x7d,
|
||||
0x9a, 0x3a, 0x8a, 0x49, 0xe5, 0xb3, 0x46, 0x7e, 0x99, 0x59, 0xe6, 0x3f, 0x6e, 0xcc, 0x18, 0xfe,
|
||||
0x8d, 0xb3, 0x7e, 0x0e, 0x3f, 0xff, 0x24, 0x68, 0x5b, 0xe4, 0x31, 0x74, 0xa6, 0x24, 0x57, 0xca,
|
||||
0xc8, 0x76, 0xc1, 0xbd, 0x76, 0x67, 0x67, 0x15, 0x62, 0xf5, 0x98, 0x91, 0x11, 0x56, 0x1e, 0x76,
|
||||
0xc0, 0x16, 0x6b, 0xd5, 0x0b, 0x80, 0x76, 0x48, 0x61, 0xf2, 0xe8, 0x93, 0xdd, 0x3c, 0x18, 0x3e,
|
||||
0x85, 0xf5, 0x38, 0xbe, 0x50, 0x4e, 0x24, 0x46, 0x7c, 0x63, 0x3e, 0xe6, 0x30, 0xaa, 0xa1, 0x16,
|
||||
0x2b, 0xb7, 0x7b, 0xed, 0xa7, 0x8d, 0x8f, 0xe8, 0x12, 0xcb, 0x50, 0x3a, 0x3c, 0x5b, 0x9b, 0x2a,
|
||||
0xe1, 0xd8, 0xd0, 0x8b, 0xd8, 0xb5, 0x51, 0xa9, 0x3d, 0x1c, 0x11, 0xf9, 0xe0, 0xda, 0xdc, 0xb2,
|
||||
0x30, 0x32, 0xe9, 0xdd, 0xb5, 0x16, 0x4a, 0x9f, 0x7f, 0x7f, 0x40, 0x5b, 0x13, 0xd4, 0xc6, 0xb4,
|
||||
0x34, 0x8c, 0xd1, 0xaa, 0xb2, 0x36, 0xd2, 0x46, 0x1e, 0x62, 0xc1, 0x6c, 0x4b, 0xe9, 0xcb, 0x7b,
|
||||
0x13, 0xf2, 0x27, 0xf9, 0x4e, 0x58, 0x8f, 0xa1, 0xb4, 0x69, 0xe3, 0xf8, 0x81, 0x3e, 0xf4, 0x88,
|
||||
0xb1, 0x81, 0x3f, 0x99, 0xb4, 0xee, 0xa2, 0xa4, 0xbc, 0x4a, 0x01, 0xba, 0x6a, 0x8d, 0x91, 0xef,
|
||||
0xc7, 0xd4, 0x9e, 0xc6, 0x14, 0x14, 0xb4, 0x15, 0x91, 0x55, 0x15, 0x34, 0x4d, 0x08, 0x53, 0x69,
|
||||
0x91, 0x8e, 0x28, 0x32, 0x0b, 0xf0, 0x82, 0x70, 0x01, 0xdd, 0x04, 0x4f, 0x5d, 0x2b, 0x36, 0x23,
|
||||
0x26, 0xee, 0xdc, 0xd1, 0xec, 0x30, 0x89, 0x3f, 0xcc, 0xb0, 0xe7, 0xea, 0x4d, 0x06, 0x4e, 0xab,
|
||||
0x96, 0xd4, 0xd9, 0x48, 0x42, 0x4c, 0x73, 0x8a, 0xf4, 0x94, 0xb9, 0x5c, 0xa6, 0xb5, 0x81, 0x12,
|
||||
0x7b, 0x09, 0xc7, 0x91, 0x17, 0xb4, 0xeb, 0x1f, 0xb0, 0x08, 0x40, 0x84, 0xad, 0x95, 0x4b, 0x99,
|
||||
0x66, 0x0e, 0xb0, 0xbb, 0x1e, 0x4d, 0xfb, 0x8b, 0x39, 0x16, 0x45, 0x7e, 0xcf, 0x7b, 0x00, 0xae,
|
||||
0x37, 0xb4, 0x6e, 0x14, 0x68, 0xfe, 0x4c, 0x27, 0x36, 0x83, 0x34, 0xad, 0xa4, 0x86, 0x47, 0xad,
|
||||
0x51, 0x15, 0x39, 0xd9, 0xa4, 0xe0, 0x44, 0xcf, 0x78, 0x08, 0xbc, 0x3d, 0x9c, 0xc5, 0xcd, 0x3a,
|
||||
0x66, 0x09, 0xd3, 0xf0, 0xb7, 0xc2, 0x47, 0x05, 0xe6, 0xcd, 0x95, 0x58, 0xd2, 0xfc, 0x8d, 0x05,
|
||||
0x41, 0x02, 0xaa, 0x13, 0xc8, 0xba, 0xe4, 0xfe, 0xb6, 0xf9, 0x98, 0x54, 0xf5, 0xd5, 0x1a, 0x55,
|
||||
0x6a, 0xfa, 0xa7, 0x54, 0xa4, 0xeb, 0x28, 0x25, 0xbd, 0x0b, 0x18, 0x8f, 0x22, 0xda, 0xcb, 0x19,
|
||||
0x21, 0x52, 0x93, 0x53, 0x35, 0x4f, 0xbc, 0x76, 0xe3, 0x4e, 0x50, 0x48, 0x15, 0xf8, 0x6f, 0xa3,
|
||||
0xec, 0x7f, 0xec, 0x2f, 0xf8, 0xbc, 0xac, 0x70, 0xfe, 0xd8, 0xdd, 0x8b, 0x4d, 0x35, 0xc5, 0xd4,
|
||||
0xc4, 0x0b, 0x2b, 0xbe, 0x8f, 0xb0, 0xf6, 0x6a, 0x01, 0xd8, 0x25, 0x0e, 0x24, 0x8f, 0x91, 0xec,
|
||||
0x93, 0x8f, 0xa3, 0x43, 0x6d, 0x40, 0xe9, 0xbc, 0x42, 0xb5, 0xc1, 0x0a, 0xaf, 0x00, 0xcd, 0xa1,
|
||||
0x66, 0xd0, 0x84, 0x21, 0x02, 0x22, 0xf0, 0x3c, 0x59, 0x4b, 0x28, 0xc6, 0xc3, 0x81, 0x43, 0x1e,
|
||||
0xb5, 0x62, 0xdf, 0xdc, 0xd0, 0x64, 0xa0, 0x03, 0xc2, 0x30, 0x57, 0x1d, 0xf8, 0xd5, 0x81, 0x70,
|
||||
0x47, 0xd7, 0x9c, 0x64, 0xa1, 0x0c, 0x71, 0xb4, 0x5c, 0xc3, 0x54, 0x62, 0x79, 0x4b, 0x43, 0x74,
|
||||
0xb4, 0xf3, 0x35, 0x66, 0xb0, 0xdd, 0x35, 0xab, 0xa9, 0x14, 0x2c, 0x16, 0xd8, 0xb4, 0x49, 0xa4,
|
||||
0x84, 0x5c, 0x11, 0xcc, 0xac, 0x5a, 0xce, 0x61, 0x37, 0x64, 0xa2, 0xd3, 0x67, 0x65, 0x5f, 0xa0,
|
||||
0xc3, 0xf6, 0x18, 0x51, 0xbd, 0x78, 0xf3, 0xc1, 0xec, 0x9b, 0xe3, 0x36, 0x3b, 0x55, 0x05, 0x2d,
|
||||
0x99, 0x72, 0x86, 0xb9, 0x3d, 0xe7, 0x29, 0x9f, 0xec, 0x72, 0x92, 0x59, 0x25, 0x10, 0xac, 0xb1,
|
||||
0x21, 0x64, 0x53, 0x89, 0x59, 0xfe, 0x09, 0x85, 0xde, 0xd8, 0xe9, 0xb3, 0xe8, 0xad, 0x35, 0x73,
|
||||
0x09, 0x1f, 0x64, 0xf2, 0xab, 0xa3, 0xd2, 0x66, 0xe4, 0x00, 0x36, 0x0d, 0x95, 0x59, 0x59, 0x29,
|
||||
0x65, 0xe2, 0xbb, 0x09, 0x0f, 0x15, 0xa7, 0x9b, 0x0e, 0x18, 0xe2, 0x5d, 0x5e, 0x53, 0x13, 0x6c,
|
||||
0xbf, 0x46, 0xf8, 0xd5, 0xc9, 0x2f, 0x96, 0x3b, 0x03, 0x45, 0xe4, 0xb4, 0xa9, 0x53, 0xdf, 0xe6,
|
||||
0x2d, 0x87, 0xc8, 0xd1, 0x9b, 0xf1, 0x20, 0x78, 0x89, 0x3f, 0x3f, 0xf7, 0x50, 0x4b, 0x7d, 0x87,
|
||||
0xe1, 0xcb, 0x22, 0x98, 0x8e, 0x50, 0xbc, 0xda, 0x33, 0x09, 0x44, 0xd6, 0xe2, 0x1b, 0x31, 0x33,
|
||||
0x9c, 0x54, 0xa9, 0xf1, 0xf6, 0x2f, 0x74, 0xd6, 0x4e, 0x42, 0xc4, 0xce, 0x9e, 0xa1, 0x1c, 0xb2,
|
||||
0x83, 0x70, 0x62, 0x0d, 0xdd, 0x01, 0x9d, 0x72, 0xcf, 0x86, 0xf2, 0x3f, 0x8d, 0x63, 0x92, 0xfe,
|
||||
0xba, 0x71, 0x04, 0x0e, 0x67, 0x11, 0xf6, 0xb8, 0x7d, 0x45, 0x74, 0xb3, 0x53, 0x12, 0x30, 0xc2,
|
||||
0xcd, 0x42, 0x81, 0x1b, 0xeb, 0xd4, 0x27, 0x31, 0xda, 0xa3, 0xfb, 0xc2, 0x24, 0x37, 0xfc, 0xbc,
|
||||
0xd4, 0x53, 0xd5, 0x49, 0x62, 0x45, 0xd8, 0xe1, 0xd8, 0xd4, 0x1a, 0x44, 0xd3, 0x38, 0x8f, 0xdc,
|
||||
0x5f, 0x44, 0xd5, 0xa6, 0xc2, 0xef, 0xd5, 0x0a, 0xce, 0xd0, 0xc3, 0x91, 0x82, 0xb9, 0xe1, 0x3c,
|
||||
0xee, 0x5a, 0xfd, 0x25, 0x72, 0x69, 0xa7, 0x52, 0x15, 0x2d, 0x2c, 0x1a, 0xd3, 0x22, 0x76, 0xae,
|
||||
0xdd, 0x10, 0x54, 0x3d, 0x4a, 0x43, 0xc9, 0x36, 0xa8, 0x17, 0xf9, 0x7e, 0x85, 0x04, 0xc9, 0x82,
|
||||
0x9a, 0x5e, 0xe7, 0x19, 0x1e, 0xfc, 0x65, 0x88, 0xe0, 0xfc, 0x51, 0xb6, 0x8b, 0xed, 0xbc, 0x57,
|
||||
0x1d, 0x02, 0x6e, 0x88, 0xe5, 0x6d, 0xf0, 0xcf, 0x58, 0x07, 0x9e, 0xcc, 0x9f, 0x79, 0xe1, 0xda,
|
||||
0x38, 0x62, 0xe1, 0x97, 0xf6, 0x51, 0x29, 0xcb, 0xb8, 0x8c, 0xd3, 0x28, 0xda, 0xa3, 0x3c, 0xbd,
|
||||
0xc8, 0x4a, 0x10, 0xe7, 0x9e, 0xc5, 0x4d, 0xfb, 0x16, 0xd0, 0x95, 0xd6, 0xa1, 0x76, 0x61, 0x78,
|
||||
0x8a, 0x5b, 0x11, 0xc9, 0xb3, 0x3b, 0x60, 0x18, 0x01, 0x55, 0xa2, 0x8d, 0x58, 0xe5, 0x1c, 0x1b,
|
||||
0xab, 0x32, 0x5e, 0xc7, 0x36, 0x92, 0x3a, 0x5c, 0x5e, 0x68, 0xa3, 0x32, 0xfc, 0xce, 0xfc, 0x15,
|
||||
0xe8, 0x04, 0x26, 0x0e, 0x0e, 0x28, 0xd2, 0xbb, 0xca, 0x5d, 0xee, 0x30, 0x84, 0x29, 0xb2, 0x62,
|
||||
0xa1, 0xaf, 0xcf, 0xf5, 0x74, 0x94, 0x70, 0x6d, 0x7b, 0x6a, 0xf5, 0x5f, 0x9d, 0x1d, 0x29, 0x71,
|
||||
0x48, 0xb9, 0xcb, 0x0d, 0xa0, 0x19, 0x1f, 0x71, 0xa6, 0x39, 0x90, 0xa6, 0x9d, 0x74, 0x2b, 0xcd,
|
||||
0xac, 0xcc, 0xa4, 0x5e, 0x3b, 0x87, 0x06, 0x18, 0xb8, 0x7a, 0x34, 0xab, 0x54, 0x5c, 0x9f, 0xe5,
|
||||
0x6d, 0x8a, 0xbf, 0x05, 0x95, 0x05, 0x3e, 0xb3, 0x4d, 0xaa, 0x9d, 0x80, 0x5c, 0x94, 0xcd, 0xbd,
|
||||
0x76, 0x64, 0xd4, 0xb6, 0xde, 0xef, 0xac, 0xd6, 0x1f, 0x30, 0x5c, 0x6d, 0x34, 0x51, 0x4d, 0x8a,
|
||||
0xf7, 0xe4, 0x9c, 0x1f, 0xee, 0x3e, 0x61, 0xb2, 0xd5, 0x65, 0x5f, 0xe1, 0xda, 0x9c, 0xd0, 0x2b,
|
||||
0xe1, 0x0a, 0x56, 0x09, 0x0e, 0xcb, 0x65, 0x63, 0x30, 0xf1, 0xdc, 0xc9, 0x9c, 0x9d, 0xac, 0xf9,
|
||||
0x2d, 0xb2, 0x17, 0x97, 0xf8, 0xc6, 0x83, 0xea, 0x72, 0xa8, 0x23, 0xf3, 0xf4, 0x91, 0x6d, 0x1c,
|
||||
0xf4, 0x3a, 0x5f, 0x55, 0x0e, 0x41, 0x67, 0xa6, 0xb2, 0xfa, 0xad, 0xc4, 0xc7, 0x6b, 0x39, 0x96,
|
||||
0xe7, 0xc3, 0x88, 0xe9, 0xe2, 0x13, 0x35, 0x6f, 0x3f, 0x55, 0xd1, 0x1b, 0x65, 0x45, 0x1c, 0xe8,
|
||||
0x22, 0x75, 0xba, 0x73, 0xbe, 0xc5, 0x12, 0x20, 0x10, 0x7c, 0x3a, 0xef, 0x6c, 0x16, 0xa5, 0x9a,
|
||||
0x8b, 0xc4, 0x5c, 0x1c, 0xd1, 0x8d, 0xad, 0x20, 0x1e, 0x96, 0x7e, 0x95, 0xa0, 0xb5, 0xa1, 0xd5,
|
||||
0xe7, 0x9a, 0x65, 0x4b, 0x8c, 0x8e, 0x8d, 0xd4, 0x90, 0xd7, 0x44, 0x3a, 0x3f, 0xdc, 0x3c, 0x5c,
|
||||
0xc2, 0x96, 0xcf, 0x16, 0x1b, 0xcf, 0x7f, 0x5f, 0x11, 0xae, 0x5e, 0x6e, 0x28, 0x3b, 0x0a, 0xaa,
|
||||
0xcf, 0xc4, 0x7e, 0x34, 0x00, 0x2a, 0xb4, 0x74, 0xfa, 0xbd, 0x90, 0x7b, 0x3b, 0x7d, 0x3f, 0xde,
|
||||
0x6e, 0x0d, 0x70, 0x57, 0x2c, 0x72, 0xe6, 0x12, 0x06, 0x88, 0xd4, 0xd2, 0xd6, 0xb5, 0x27, 0xe3,
|
||||
0xf2, 0xef, 0xba, 0xf4, 0x3b, 0x2c, 0x8b, 0x98, 0xac, 0xba, 0x51, 0x34, 0x2d, 0x13, 0x43, 0xc2,
|
||||
0x35, 0x9e, 0x7e, 0x99, 0x77, 0x84, 0x79, 0x41, 0xbf, 0xe4, 0xec, 0x45, 0x96, 0x0a, 0x73, 0xac,
|
||||
0x7e, 0x27, 0xf1, 0x1b, 0xdd, 0x9d, 0x03, 0x14, 0xc4, 0x60, 0x75, 0x10, 0xd9, 0xa3, 0x98, 0x85,
|
||||
0x04, 0x98, 0x07, 0x28, 0xd9, 0x46, 0x72, 0xef, 0x5d, 0x0c, 0xed, 0x3b, 0x26, 0x31, 0x8a, 0xa0,
|
||||
0xd6, 0x50, 0x5d, 0x27, 0xd6, 0x85, 0x3c, 0x13, 0x51, 0x19, 0x4b, 0x16, 0x26, 0x16, 0x49, 0x7a,
|
||||
0x90, 0xa4, 0x81, 0x11, 0x58, 0xe8, 0x87, 0xf8, 0x5e, 0x43, 0xc1, 0x44, 0x7c, 0xd7, 0xb1, 0x5f,
|
||||
0x1c, 0xb9, 0x14, 0xef, 0x5f, 0x00, 0x75, 0x69, 0x33, 0xf2, 0x17, 0x81, 0xf6, 0xd5, 0x05, 0x28,
|
||||
0xf2, 0x7e, 0x65, 0xe7, 0x30, 0x63, 0xf2, 0xc9, 0xcb, 0xc3, 0x1c, 0xdf, 0xfd, 0x07, 0x72, 0x92,
|
||||
0x76, 0xef, 0x30, 0x71, 0x5c, 0x07, 0xb7, 0x02, 0x03, 0x34, 0x8f, 0x16, 0xfc, 0x79, 0x45, 0x7f,
|
||||
0x83, 0x13, 0xb4, 0x1b, 0xb4, 0xbc, 0xc2, 0x29, 0x7c, 0xe9, 0x07, 0x2d, 0xd3, 0x9d, 0x9c, 0xf5,
|
||||
0x72, 0xd7, 0x7b, 0x63, 0x39, 0x0d, 0xf5, 0xcd, 0xc7, 0x1a, 0x53, 0x14, 0x70, 0xb0, 0xa0, 0x31,
|
||||
0x14, 0x42, 0x20, 0x91, 0xbd, 0xbb, 0x92, 0x87, 0x03, 0x5b, 0xc7, 0xe8, 0x88, 0x3b, 0xc0, 0x65,
|
||||
0x15, 0xfd, 0x85, 0xd5, 0xf6, 0xa4, 0xff, 0x6c, 0x28, 0xc0, 0xfc, 0x17, 0x4b, 0xbf, 0x2a, 0x6d,
|
||||
0xeb, 0x39, 0x26, 0x4e, 0x9d, 0x4d, 0x0a, 0x15, 0x7f, 0x7a, 0x82, 0x16, 0x0d, 0x19, 0xca, 0x3d,
|
||||
0x33, 0x20, 0xe2, 0x77, 0xc6, 0x7a, 0x14, 0x50, 0x59, 0x7e, 0xe4, 0xef, 0x17, 0x13, 0x69, 0x08,
|
||||
0x65, 0x72, 0x92, 0xfb, 0x15, 0x35, 0xc5, 0x4e, 0x0f, 0x33, 0xa7, 0x4c, 0x2d, 0xf9, 0x88, 0x08,
|
||||
0xdc, 0x5f, 0x05, 0x72, 0xa2, 0xc8, 0x72, 0xf2, 0xab, 0xe3, 0xc2, 0x6b, 0x61, 0xea, 0xa5, 0x1a,
|
||||
0x1f, 0x43, 0x1f, 0x38, 0xc1, 0x73, 0x14, 0x77, 0xe5, 0x6d, 0x0b, 0x72, 0x94, 0xf8, 0x24, 0x50,
|
||||
0xf8, 0x1d, 0x3b, 0x4e, 0x24, 0xac, 0x3b, 0x91, 0x8c, 0xda, 0xfd, 0x65, 0x70, 0x76, 0xdc, 0x04,
|
||||
0xd0, 0xd2, 0x47, 0x8c, 0x66, 0x17, 0x7c, 0x52, 0xf3, 0x2e, 0x63, 0x57, 0x8f, 0xf9, 0x1c, 0xf4,
|
||||
0xb9, 0xc3, 0x47, 0x9f, 0xf9, 0xe5, 0x0d, 0x01, 0x13, 0x25, 0x67, 0x5b, 0x0f, 0x06, 0x1f, 0x9f,
|
||||
0x39, 0xa0, 0x66, 0x70, 0x9e, 0xc2, 0xe0, 0x47, 0x99, 0xd8, 0xc6, 0xb7, 0xf5, 0xc0, 0xe6, 0xcb,
|
||||
0x0f, 0x47, 0x36, 0xa9, 0xc3, 0x0c, 0x29, 0x65, 0xdd, 0x1b, 0x6d, 0x13, 0x0c, 0x46, 0x19, 0xc0,
|
||||
0x64, 0x2b, 0xf4, 0x64, 0x77, 0x91, 0x47, 0x52, 0x40, 0x55, 0x00, 0x3d, 0x7d, 0x10, 0x6e, 0x33,
|
||||
0xb8, 0xd4, 0xf2, 0x87, 0x8c, 0xa1, 0x03, 0x6d, 0xc2, 0x6b, 0xa7, 0xc0, 0x43, 0xfe, 0xec, 0x62,
|
||||
0xf2, 0x3e, 0x5e, 0x61, 0x4e, 0xd2, 0x16, 0xa7, 0x68, 0x8f, 0xd4, 0x91, 0x14, 0x1f, 0x2f, 0x0f,
|
||||
0xf0, 0x39, 0x01, 0xe2, 0x71, 0x88, 0xc4, 0xc1, 0x0c, 0xa6, 0x3c, 0x9b, 0x16, 0xc6, 0x81, 0x81,
|
||||
0x19, 0x46, 0xb7, 0x09, 0x44, 0x3f, 0xec, 0x71, 0x7c, 0x02, 0x93, 0xcf, 0x95, 0x6f, 0xe1, 0x0f,
|
||||
0x1c, 0xbc, 0x49, 0x49, 0xe9, 0x0d, 0x60, 0x22, 0xe1, 0xdf, 0x51, 0x87, 0xa4, 0xa9, 0xf3, 0x37,
|
||||
0x57, 0xb5, 0x32, 0xe7, 0xaf, 0xd7, 0x08, 0xcd, 0x92, 0x0c, 0x8c, 0xd3, 0xfb, 0x97, 0x06, 0x97,
|
||||
0x6e, 0xf9, 0x25, 0x30, 0x99, 0xae, 0xa2, 0x57, 0xba, 0x89, 0xa2, 0x7d, 0x01, 0x5f, 0x2f, 0xad,
|
||||
0x5e, 0x41, 0x3f, 0xc9, 0x0b, 0x15, 0x01, 0xd0, 0xbf, 0x33, 0x2a, 0xe7, 0x29, 0x75, 0xac, 0xb6,
|
||||
0x94, 0x65, 0x79, 0x58, 0xac, 0x58, 0x06, 0x3b, 0x95, 0x03, 0x94, 0x0b, 0xd0, 0xb5, 0xda, 0x86,
|
||||
0x67, 0xd1, 0x4a, 0x6f, 0x14, 0x77, 0x8d, 0xe4, 0x2f, 0xc5, 0xb4, 0x9a, 0xa2, 0xf3, 0x1d, 0x63,
|
||||
0x82, 0x3b, 0x45, 0x8d, 0x9d, 0x30, 0xc9, 0xca, 0xc2, 0xde, 0x64, 0x37, 0xba, 0x07, 0xa4, 0xdc,
|
||||
0x7f, 0x64, 0xc5, 0x85, 0x05, 0xf8, 0x49, 0x00, 0x66, 0xb8, 0xa3, 0x08, 0x27, 0x2a, 0xfd, 0xc5,
|
||||
0xf5, 0x2f, 0x9d, 0x38, 0x47, 0xd4, 0x5a, 0xdc, 0xb4, 0x98, 0x7a, 0x57, 0xe5, 0x1e, 0x7f, 0x87,
|
||||
0xe7, 0xb9, 0x7b, 0xe0, 0x86, 0x4c, 0xad, 0x5c, 0x32, 0xfd, 0x7d, 0x7a, 0x52, 0x3b, 0x70, 0x7d,
|
||||
0x62, 0xfe, 0x42, 0x71, 0xb6, 0x99, 0xcc, 0xa4, 0x23, 0xd8, 0x8a, 0x7b, 0x03, 0x20, 0x86, 0x15,
|
||||
0x46, 0x6b, 0x37, 0xe9, 0x14, 0xd1, 0x1b, 0xf0, 0xac, 0x09, 0xaf, 0x27, 0xbd, 0xaf, 0xdb, 0x88,
|
||||
0x81, 0xf5, 0x94, 0xaf, 0xac, 0xa9, 0xaf, 0x80, 0x4f, 0xb3, 0x99, 0x35, 0x7f, 0x78, 0x42, 0x8a,
|
||||
0x61, 0x46, 0xf4, 0x17, 0x70, 0x29, 0x43, 0x0a, 0xe8, 0x14, 0x4e, 0xfa, 0xac, 0xe1, 0x39, 0x6a,
|
||||
0x67, 0x55, 0x35, 0x01, 0x15, 0x9c, 0x6b, 0x28, 0xf5, 0x19, 0xfa, 0x2b, 0x6c, 0x52, 0x6d, 0x05,
|
||||
0x92, 0xbd, 0x76, 0x9e, 0xbb, 0x8e, 0xf8, 0xd4, 0xa9, 0xcb, 0x06, 0x01, 0x5a, 0x3c, 0xbb, 0xe4,
|
||||
0x90, 0x23, 0x8e, 0xd5, 0x40, 0x9c, 0x5c, 0x6d, 0x5c, 0x76, 0xd0, 0x50, 0xaf, 0xb8, 0x1e, 0x79,
|
||||
0x4e, 0xdb, 0x0c, 0xae, 0x2b, 0x5b, 0x32, 0xde, 0x79, 0x36, 0xa6, 0xdf, 0xc5, 0x5b, 0xdf, 0x96,
|
||||
0x29, 0xc7, 0x43, 0x9c, 0xa6, 0xe0, 0xab, 0xc5, 0xa7, 0x26, 0x39, 0xde, 0x5e, 0x49, 0x98, 0x84,
|
||||
0xf0, 0x0d, 0x38, 0x93, 0x21, 0x6f, 0x3b, 0x7a, 0xf5, 0x30, 0x6e, 0xa1, 0xe1, 0xc6, 0x52, 0x8f,
|
||||
0xfb, 0x6d, 0x21, 0x67, 0x48, 0xc4, 0x8e, 0x66, 0xe3, 0x81, 0x95, 0xba, 0xe1, 0x2b, 0x18, 0xe1,
|
||||
0xdf, 0xeb, 0xcd, 0xb9, 0x4a, 0x76, 0x97, 0x86, 0xc0, 0xd5, 0xf1, 0x17, 0x69, 0x27, 0x18, 0xb2,
|
||||
0xe4, 0x21, 0xcb, 0x6c, 0xec, 0xc3, 0x1a, 0xe3, 0x03, 0xa3, 0xcb, 0xf0, 0xd0, 0x91, 0xaa, 0x66,
|
||||
0xe0, 0x86, 0x85, 0x31, 0xa2, 0x06, 0xed, 0xc8, 0x0b, 0x6b, 0x82, 0xcb, 0xde, 0xc4, 0x68, 0xee,
|
||||
0x5f, 0x69, 0x95, 0xe1, 0x78, 0x1f, 0xdf, 0xaf, 0xee, 0xbf, 0x6e, 0x9d, 0xc2, 0x9b, 0xed, 0xb8,
|
||||
0x52, 0xd3, 0x1a, 0xb2, 0x50, 0xb6, 0x11, 0x4e, 0xa7, 0x91, 0x4d, 0xb5, 0x7f, 0x2a, 0x29, 0x00,
|
||||
0x5c, 0x75, 0xd6, 0x99, 0xf9, 0x6c, 0xf6, 0x73, 0xc0, 0x8f, 0xc8, 0x18, 0x4a, 0xfa, 0x71, 0xa1,
|
||||
0xd1, 0xd5, 0x74, 0xfd, 0xb4, 0x79, 0x0b, 0xa1, 0xb9, 0x03, 0xe4, 0xbe, 0x7d, 0xab, 0x67, 0x59,
|
||||
0x41, 0x9d, 0xd5, 0xe2, 0x67, 0x6e, 0x36, 0x74, 0x67, 0x35, 0x17, 0x66, 0x6f, 0xc2, 0xa6, 0xdf,
|
||||
0xf1, 0x5c, 0xeb, 0x63, 0xb6, 0x88, 0x98, 0xc2, 0xc0, 0x41, 0x05, 0xa6, 0x54, 0xcc, 0xdd, 0xa3,
|
||||
0x00, 0x49, 0x61, 0xe2, 0xfa, 0x04, 0xbb, 0xd6, 0x4b, 0xe6, 0xd1, 0x7e, 0x07, 0x20, 0x33, 0x13,
|
||||
0x7e, 0x91, 0x39, 0xb4, 0x08, 0xe5, 0x62, 0x7a, 0xfc, 0xe4, 0x08, 0x6e, 0xf3, 0xb6, 0x2e, 0xbc,
|
||||
0x10, 0xd7, 0x93, 0xdd, 0xae, 0x62, 0x3c, 0xa6, 0x85, 0x57, 0x13, 0x84, 0xb7, 0x20, 0x20, 0xc3,
|
||||
0x61, 0xa3, 0xc6, 0x57, 0x37, 0xad, 0xa0, 0xa9, 0x96, 0x26, 0xe1, 0xcc, 0x4e, 0xdb, 0xf3, 0xa2,
|
||||
0xd5, 0xea, 0x7b, 0x79, 0xee, 0x52, 0xa2, 0x93, 0x99, 0xc8, 0x3e, 0x33, 0x37, 0x50, 0x1f, 0x11,
|
||||
0xeb, 0xe1, 0x96, 0x77, 0x88, 0x4f, 0xc5, 0x47, 0xd4, 0x85, 0x6e, 0x0c, 0x05, 0x6b, 0x30, 0x9c,
|
||||
0x9c, 0x06, 0x93, 0x6b, 0x76, 0xe5, 0x91, 0x79, 0xb6, 0x23, 0x4d, 0xd2, 0x97, 0xad, 0x20, 0x6a,
|
||||
0x44, 0xe3, 0x67, 0x93, 0x88, 0x74, 0xc6, 0x20, 0xd3, 0x04, 0x46, 0x50, 0x08, 0xcd, 0xe3, 0xb9,
|
||||
0xcd, 0x96, 0x1f, 0xe0, 0xa2, 0x19, 0x46, 0x33, 0xb6, 0x0d, 0xa9, 0xff, 0xa3, 0xac, 0xdc, 0xde,
|
||||
0x56, 0xdd, 0xd2, 0xe9, 0xd5, 0x31, 0xc8, 0x82, 0x54, 0xc1, 0xab, 0xfc, 0x82, 0xeb, 0x32, 0xd1,
|
||||
0x76, 0xfd, 0x6e, 0xe7, 0xef, 0x48, 0x8e, 0x55, 0xff, 0x91, 0x46, 0xe3, 0x51, 0xd3, 0xf8, 0x8f,
|
||||
0x86, 0x45, 0x8b, 0x7d, 0x1c, 0x01, 0x5c, 0xbe, 0xb9, 0xa2, 0x83, 0x0c, 0x94, 0xc1, 0x39, 0xb8,
|
||||
0x8d, 0xd3, 0x72, 0x2f, 0x21, 0xff, 0xa0, 0xed, 0x5f, 0x0f, 0xe2, 0xf5, 0x22, 0x92, 0xd6, 0x3e,
|
||||
0x7a, 0x4e, 0x82, 0x96, 0xaa, 0xf6, 0xe7, 0xc6, 0x76, 0xd5, 0x0f, 0xae, 0x02, 0x74, 0x63, 0x3b,
|
||||
0x32, 0x2b, 0x11, 0x7a, 0x25, 0xb4, 0xef, 0x14, 0xde, 0x3e, 0xba, 0x71, 0xc8, 0xf7, 0x1c, 0x3f,
|
||||
0x1d, 0x7b, 0x2b, 0x6e, 0x0a, 0x72, 0x87, 0x21, 0x68, 0xd9, 0xfb, 0x4d, 0xc7, 0x73, 0x6f, 0x07,
|
||||
0xf7, 0x4f, 0x06, 0x1e, 0x97, 0x93, 0xdc, 0x11, 0xb9, 0x28, 0xfb, 0xcf, 0x06, 0x40, 0xf5, 0x07,
|
||||
0xf2, 0x58, 0x41, 0x5e, 0x27, 0x04, 0xe5, 0x90, 0xd8, 0xd8, 0xa7, 0xa3, 0xc3, 0x01, 0x50, 0x9a,
|
||||
0x94, 0x80, 0x38, 0x6e, 0x9c, 0x0d, 0xbe, 0xda, 0x03, 0xaa, 0x6e, 0xe6, 0x39, 0xd3, 0x21, 0xa0,
|
||||
0x68, 0xf1, 0xff, 0x46, 0x4d, 0xe5, 0xcb, 0x8c, 0x9e, 0x1d, 0x8a, 0x18, 0x54, 0x44, 0x89, 0xeb,
|
||||
0xe4, 0xa1, 0x0b, 0xf2, 0xa3, 0x8d, 0x6b, 0x67, 0x58, 0xda, 0x97, 0x9d, 0xd9, 0xd5, 0x7c, 0xb3,
|
||||
0x4b, 0xf0, 0x6a, 0xa0, 0x39, 0xf8, 0xc2, 0x8f, 0xf4, 0x82, 0xf7, 0x77, 0xfd, 0xf4, 0x9b, 0xb0,
|
||||
0xe2, 0x3f, 0xd5, 0xa1, 0x39, 0x97, 0xe7, 0x42, 0x68, 0xbd, 0x34, 0x15, 0x7b, 0x8e, 0x97, 0x59,
|
||||
0x74, 0x54, 0x46, 0x62, 0x0b, 0x67, 0xc0, 0x7a, 0x63, 0x1e, 0xde, 0xd4, 0xda, 0x64, 0xfd, 0x52,
|
||||
0xa8, 0x43, 0x25, 0x22, 0xa8, 0xcb, 0xef, 0x46, 0x3c, 0xf3, 0x42, 0xc2, 0x9d, 0x82, 0x4e, 0xab,
|
||||
0x6d, 0xda, 0x3b, 0xea, 0xe4, 0xfa, 0x86, 0x5a, 0x91, 0xbb, 0x93, 0xbc, 0xf1, 0x9d, 0xcb, 0xf8,
|
||||
0x3c, 0x30, 0xa4, 0x63, 0xf2, 0x72, 0x22, 0x37, 0xec, 0x6c, 0x32, 0x19, 0xe4, 0xea, 0x1a, 0x5c,
|
||||
0x83, 0x32, 0xcd, 0x31, 0xa6, 0x72, 0x81, 0x6c, 0x6d, 0x6a, 0x3a, 0x02, 0x5a, 0x2d, 0x4f, 0xe2,
|
||||
0x46, 0x5a, 0x70, 0xfe, 0x31, 0xe4, 0x08, 0x17, 0x49, 0x14, 0x90, 0x1f, 0x9c, 0xd2, 0x55, 0x55,
|
||||
0xad, 0x35, 0xee, 0x44, 0x7b, 0xed, 0xb4, 0x60, 0x79, 0xa1, 0x0e, 0x28, 0xd4, 0x5d, 0xc1, 0xdd,
|
||||
0xc0, 0x89, 0x50, 0x1c, 0xf6, 0xd2, 0x89, 0x7e, 0xf5, 0x60, 0x4c, 0xfb, 0x92, 0x6b, 0x1f, 0x91,
|
||||
0xee, 0xa8, 0x7b, 0x3b, 0x4b, 0x5c, 0xf1, 0xde, 0x1f, 0x19, 0xde, 0x0c, 0xac, 0x59, 0x0e, 0xe3,
|
||||
0x22, 0xb9, 0x01, 0x01, 0x99, 0x35, 0x65, 0x0d, 0x74, 0x01, 0xf8, 0x59, 0x4f, 0x07, 0xd0, 0xc5,
|
||||
0xb4, 0x5f, 0xf2, 0xa0, 0x70, 0xc2, 0xaa, 0x99, 0xce, 0xb5, 0x79, 0xf9, 0x23, 0x4d, 0x40, 0xa0,
|
||||
0x84, 0xba, 0xc2, 0xd3, 0x27, 0xe3, 0x9e, 0x46, 0x96, 0xc5, 0x70, 0x9e, 0x81, 0x43, 0x31, 0x1f,
|
||||
0x8c, 0xbb, 0x1b, 0x9a, 0x9e, 0x90, 0x54, 0x2f, 0x2a, 0x5c, 0x7b, 0xc3, 0x1b, 0xa5, 0x5f, 0xc7,
|
||||
0x50, 0x40, 0xcc, 0xdb, 0xb0, 0x19, 0xdf, 0x60, 0xf9, 0xf5, 0xbe, 0x34, 0x62, 0x95, 0x2c, 0x53,
|
||||
0xed, 0x5a, 0xe5, 0xd2, 0xb9, 0x63, 0xe2, 0x09, 0xae, 0xec, 0x91, 0x52, 0x28, 0x5b, 0x57, 0x45,
|
||||
0x9d, 0x9c, 0x30, 0xf1, 0x3f, 0x08, 0x24, 0xd4, 0xdf, 0x73, 0x91, 0xcd, 0x37, 0xf4, 0xc0, 0x1b,
|
||||
0xac, 0xca, 0x23, 0xbe, 0x86, 0x52, 0x2d, 0x89, 0xa3, 0xce, 0xa3, 0x0d, 0x53, 0x08, 0x70, 0x19,
|
||||
0x4c, 0x5b, 0x9f, 0x3e, 0x26, 0x85, 0x4f, 0xd5, 0xc5, 0x60, 0xed, 0x8c, 0x12, 0x78, 0x72, 0x7d,
|
||||
0xe1, 0x9e, 0xcb, 0xcc, 0x98, 0xe7, 0x06, 0x81, 0xf7, 0xf5, 0x02, 0x30, 0x01, 0x77, 0xbe, 0xc5,
|
||||
0x6c, 0x75, 0x92, 0xdc, 0xae, 0xa9, 0xde, 0x7d, 0xc8, 0x4e, 0x3a, 0x5b, 0xfe, 0x84, 0x51, 0x8a,
|
||||
0xad, 0xee, 0x91, 0x24, 0x41, 0xf3, 0x6a, 0x21, 0xea, 0x72, 0xd0, 0x2a, 0xd6, 0x46, 0xb5, 0x62,
|
||||
0x7a, 0x57, 0xfa, 0x2a, 0x93, 0x6f, 0x35, 0x4a, 0x83, 0xde, 0x8c, 0x72, 0x0b, 0xfb, 0x77, 0x50,
|
||||
0x07, 0x56, 0x52, 0x16, 0x28, 0x15, 0x24, 0x1d, 0xe1, 0xec, 0xa2, 0xb8, 0x2b, 0x26, 0x69, 0x5a,
|
||||
0x5b, 0xe5, 0x46, 0x81, 0xa3, 0x52, 0x72, 0x6c, 0x05, 0xf9, 0x21, 0x19, 0x2e, 0x26, 0x17, 0xc1,
|
||||
0x52, 0xba, 0x1b, 0x3e, 0xa9, 0x88, 0x6d, 0x21, 0xbd, 0xd9, 0xfa, 0x1a, 0xf5, 0xca, 0x71, 0x6d,
|
||||
0xb2, 0x53, 0x33, 0x75, 0x49, 0x49, 0x75, 0x52, 0xfa, 0x8a, 0x88, 0xd9, 0x0b, 0x3a, 0xa2, 0x9c,
|
||||
0xc8, 0x83, 0xbd, 0x6b, 0x70, 0xc3, 0xb4, 0x84, 0xd6, 0x1c, 0xb1, 0x3a, 0x48, 0xa1, 0x98, 0xd6,
|
||||
0x6f, 0xde, 0x54, 0x4d, 0x22, 0x20, 0x85, 0x30, 0x23, 0x42, 0x8a, 0x47, 0x2b, 0x39, 0x50, 0xa7,
|
||||
0xe2, 0x45, 0x4a, 0x96, 0x42, 0x45, 0xe9, 0x41, 0xd3, 0xaf, 0xd1, 0x79, 0x61, 0xe7, 0x71, 0x5a,
|
||||
0x8f, 0xcb, 0x57, 0x3d, 0xaf, 0x5a, 0xab, 0xad, 0x00, 0xc0, 0x4f, 0x20, 0x63, 0x76, 0x2b, 0x04,
|
||||
0x2c, 0xbd, 0xdb, 0xf7, 0x0e, 0x24, 0x72, 0x05, 0x80, 0x0c, 0xc3, 0xf6, 0x83, 0x74, 0x43, 0x28,
|
||||
0xd3, 0x6f, 0xb0, 0x99, 0xde, 0x9a, 0x55, 0xf1, 0x60, 0x11, 0x30, 0x34, 0xf2, 0xf0, 0x7d, 0x6b,
|
||||
0x17, 0xbd, 0xbf, 0xca, 0x8c, 0x90, 0x0d, 0x8f, 0xf4, 0x65, 0x42, 0x83, 0x6f, 0xec, 0xe8, 0x14,
|
||||
0xf2, 0x3d, 0xe9, 0xc0, 0xeb, 0x1f, 0xf4, 0xd7, 0xb2, 0xac, 0x19, 0x40, 0x4a, 0xee, 0xe4, 0xcc,
|
||||
0xd7, 0x30, 0x47, 0x97, 0x15, 0xeb, 0x68, 0xeb, 0xa2, 0x90, 0xf1, 0x4d, 0x4e, 0x59, 0xbf, 0xff,
|
||||
0xef, 0x6b, 0x32, 0xcf, 0xdc, 0xcd, 0xb1, 0x88, 0x7e, 0x5a, 0xc5, 0x27, 0x5e, 0xde, 0xe5, 0x10,
|
||||
0xd8, 0xf1, 0x5c, 0x40, 0x19, 0xf8, 0xd8, 0x1b, 0x50, 0x67, 0xee, 0xf8, 0x6d, 0x7e, 0x0e, 0x5a,
|
||||
0x22, 0xa5, 0xd9, 0xc3, 0xf9, 0xf0, 0x2a, 0x3f, 0x12, 0x7b, 0x79, 0x07, 0x34, 0x22, 0x2b, 0x35,
|
||||
0xc6, 0xb5, 0x85, 0x00, 0xd9, 0xe7, 0x1c, 0x52, 0xaf, 0x72, 0xcc, 0x85, 0x7e, 0x81, 0xd6, 0x74,
|
||||
0xac, 0xb5, 0xa2, 0x0f, 0x88, 0x99, 0x37, 0xb1, 0x1f, 0xcd, 0x1a, 0xfe, 0xf3, 0x57, 0x19, 0x95,
|
||||
0x93, 0xd4, 0xdc, 0x1e, 0xd3, 0xbd, 0x33, 0x0a, 0x98, 0x84, 0xdc, 0x2e, 0xc6, 0x32, 0x89, 0xaa,
|
||||
0x46, 0xbc, 0x78, 0xc3, 0xec, 0xc8, 0xbc, 0xe6, 0xb2, 0x33, 0x07, 0x3f, 0x19, 0x83, 0x8d, 0x53,
|
||||
0x3d, 0xae, 0xcc, 0x39, 0x6e, 0x4d, 0xed, 0xea, 0xad, 0x64, 0xfe, 0x2d, 0xf5, 0xb1, 0x8e, 0xc9,
|
||||
0xe5, 0xd6, 0xff, 0xb9, 0x86, 0xc2, 0xec, 0x99, 0x5e, 0x39, 0x6c, 0xe4, 0xea, 0xea, 0x86, 0x7d,
|
||||
0x1a, 0x37, 0xa0, 0xe3, 0x7b, 0x05, 0xd6, 0x2d, 0xa3, 0xe3, 0x3f, 0x18, 0x86, 0xfe, 0x49, 0x44,
|
||||
0x07, 0xc2, 0x81, 0xa5, 0x76, 0x65, 0x6d, 0x9e, 0x87, 0x74, 0x75, 0xcd, 0xde, 0x83, 0x72, 0x4a,
|
||||
0x74, 0x13, 0x9a, 0x1a, 0x0d, 0x7f, 0x46, 0xc2, 0xbf, 0xe5, 0x0b, 0xdf, 0x54, 0xee, 0xfc, 0x37,
|
||||
0x8f, 0xc5, 0x98, 0x9b, 0xf3, 0xcf, 0xb8, 0xa5, 0x0c, 0x76, 0x7e, 0x9f, 0x38, 0x73, 0x19, 0xc6,
|
||||
0x3a, 0xe3, 0xa1, 0x9b, 0xaa, 0x1f, 0x9b, 0x2e, 0xcd, 0xcd, 0x1c, 0x52, 0x0c, 0xf8, 0x98, 0x12,
|
||||
0xf5, 0xaf, 0xb7, 0xb9, 0xe1, 0xf8, 0xc4, 0x43, 0x0d, 0x30, 0xef, 0x2a, 0xd9, 0xab, 0x44, 0xec,
|
||||
0x90, 0x40, 0xe0, 0x04, 0xc3, 0x4a, 0x98, 0xaa, 0x53, 0x65, 0xaa, 0x2c, 0x47, 0xfe, 0xf4, 0xd6,
|
||||
0x1a, 0xe4, 0x46, 0x03, 0x15, 0x69, 0x5d, 0xb1, 0xd9, 0xb5, 0xc2, 0x09, 0xed, 0xb3, 0xbb, 0x2a,
|
||||
0x19, 0xc0, 0xd3, 0x93, 0x6d, 0x92, 0x6d, 0xe4, 0x9e, 0xb3, 0x88, 0x71, 0xab, 0x49, 0x16, 0x88,
|
||||
0x76, 0xdf, 0x13, 0xe1, 0x22, 0x97, 0xa0, 0xba, 0x47, 0x35, 0x94, 0x5c, 0xdf, 0xbd, 0x8e, 0x7f,
|
||||
0x92, 0x13, 0x53, 0x8f, 0x27, 0x9f, 0x1e, 0x73, 0x96, 0x2c, 0x1d, 0x93, 0xcf, 0x09, 0x3c, 0x64,
|
||||
0x1a, 0x5e, 0x89, 0x2f, 0xea, 0x0b, 0xee, 0x34, 0x98, 0x17, 0x95, 0x43, 0x1e, 0xc5, 0x88, 0x74,
|
||||
0xca, 0x33, 0x24, 0x68, 0x2e, 0x29, 0x4c, 0x59, 0x19, 0xae, 0x54, 0x2c, 0x9a, 0x24, 0xc5, 0x51,
|
||||
0x76, 0x53, 0xda, 0x87, 0x3a, 0x6c, 0x80, 0x8f, 0x6e, 0x2e, 0xe1, 0x7b, 0xf9, 0x7f, 0xb0, 0x96,
|
||||
0xaf, 0x30, 0x27, 0xba, 0x73, 0xff, 0x3b, 0xbe, 0x73, 0xb6, 0x66, 0x6b, 0xcb, 0xf5, 0xfb, 0x34,
|
||||
0x3d, 0xed, 0xcc, 0xa6, 0x08, 0xd7, 0x54, 0x25, 0x30, 0x24, 0xfc, 0x1c, 0xbf, 0x74, 0x5b, 0xe3,
|
||||
0x0b, 0x9e, 0x19, 0x26, 0x08, 0x37, 0xe7, 0xdf, 0xc0, 0x18, 0x73, 0x51, 0x24, 0xe3, 0x21, 0xb4,
|
||||
0x93, 0xae, 0x35, 0x6e, 0xa6, 0x82, 0xed, 0x8b, 0x3e, 0x54, 0x3f, 0x8e, 0xa7, 0x8e, 0xfa, 0x6f,
|
||||
0xcc, 0x67, 0x0a, 0x6f, 0x08, 0xb7, 0x69, 0x0e, 0xf6, 0x40, 0x35, 0x85, 0x63, 0xdc, 0xa8, 0x43,
|
||||
0x7c, 0x81, 0x24, 0xb5, 0x4e, 0xc5, 0xc8, 0x18, 0xc4, 0x0f, 0xd0, 0xe9, 0x00, 0x1e, 0xf5, 0x79,
|
||||
0xc8, 0xce, 0xe7, 0xde, 0xd9, 0x0a, 0x0e, 0xb5, 0x7f, 0x0b, 0xe6, 0xa7, 0x7a, 0x8b, 0xf4, 0x60,
|
||||
0x13, 0x1b, 0xa7, 0x00, 0x29, 0x91, 0x88, 0xd6, 0x85, 0x0e, 0x0b, 0x6b, 0xfe, 0x61, 0xac, 0x50,
|
||||
0x88, 0xcc, 0x42, 0x5f, 0xe4, 0xb4, 0x9d, 0xe0, 0x58, 0xf7, 0xb7, 0x71, 0xe9, 0x7f, 0x10, 0x85,
|
||||
0x1f, 0x3e, 0xf4, 0xd7, 0x3f, 0x18, 0x36, 0x8f, 0x20, 0x6d, 0x66, 0xc4, 0x6c, 0xf1, 0x4d, 0x53,
|
||||
0x50, 0x9e, 0xeb, 0x2b, 0x0e, 0x0f, 0x79, 0x17, 0xe0, 0x42, 0x47, 0x21, 0x72, 0x9a, 0x62, 0x4f,
|
||||
0x49, 0x79, 0xf9, 0x9a, 0xd0, 0x6a, 0x6e, 0xbc, 0x5b, 0xff, 0xf8, 0x8d, 0xf8, 0x67, 0x31, 0x39,
|
||||
0x5e, 0xe8, 0xff, 0xdf, 0xa2, 0xf6, 0xf8, 0x90, 0x45, 0x04, 0xff, 0xca, 0xc2, 0xca, 0x83, 0x3d,
|
||||
0xb9, 0x5a, 0xbe, 0xd6, 0x1d, 0x36, 0xa6, 0x11, 0xa0, 0xf2, 0xd8, 0xe9, 0x11, 0xfa, 0x31, 0xe9,
|
||||
0xb3, 0xd7, 0xc3, 0xb9, 0x3e, 0x81, 0x02, 0x98, 0xe6, 0x74, 0xe1, 0x27, 0x5c, 0x34, 0x78, 0x9c,
|
||||
0xbb, 0x4d, 0xb0, 0xad, 0x81, 0x45, 0x3f, 0x79, 0x80, 0x69, 0x00, 0xc7, 0xa6, 0xcf, 0x4d, 0x2b,
|
||||
0xc3, 0xb3, 0x76, 0xc3, 0xb3, 0xa8, 0x5b, 0x87, 0xa9, 0x6d, 0x0f, 0x39, 0x11, 0x32, 0xe6, 0x7b,
|
||||
0xea, 0xf0, 0xef, 0xc2, 0xef, 0xe6, 0x79, 0x7c, 0x8c, 0x96, 0x67, 0xb0, 0xb8, 0xa9, 0xe3, 0x66,
|
||||
0x74, 0x7a, 0xb4, 0x33, 0x05, 0x6e, 0x68, 0xce, 0xb4, 0x42, 0x3b, 0x12, 0xc0, 0xe9, 0x54, 0x7d,
|
||||
0xd7, 0x99, 0x3b, 0xb4, 0x57, 0x94, 0xb3, 0xe3, 0xfe, 0x3e, 0xa8, 0x26, 0x3a, 0xf9, 0x67, 0xa3,
|
||||
0x19, 0x49, 0x67, 0x55, 0xb6, 0xdc, 0xba, 0xba, 0x88, 0x9f, 0xf3, 0xa8, 0xa6, 0x3c, 0x19, 0xde,
|
||||
0x97, 0x60, 0x7f, 0xb0, 0xa4, 0x90, 0x7f, 0x05, 0xe6, 0xc1, 0xb8, 0x75, 0x1d, 0x17, 0x0d, 0x5e,
|
||||
0x47, 0x9e, 0x22, 0xee, 0x9a, 0xca, 0x00, 0x2e, 0x3a, 0xfe, 0x56, 0x41, 0x29, 0xe2, 0x0a, 0x35,
|
||||
0xc6, 0xde, 0x77, 0x25, 0xd4, 0x56, 0x5e, 0x35, 0x4c, 0x00, 0xc0, 0xdd, 0x46, 0xa7, 0x8d, 0x3b,
|
||||
0xf6, 0x4b, 0xee, 0x37, 0x66, 0xab, 0x1e, 0x97, 0x13, 0x30, 0x78, 0x16, 0xdc, 0xa4, 0x44, 0x73,
|
||||
0xcf, 0x08, 0xa4, 0x1d, 0xb6, 0x14, 0xdf, 0xe2, 0x4a, 0x1f, 0x85, 0x82, 0x9e, 0xc3, 0xb3, 0x2d,
|
||||
0x8a, 0xc2, 0x99, 0x36, 0x29, 0x96, 0xd8, 0x96, 0x3d, 0x06, 0x21, 0x32, 0x19, 0xdc, 0xc7, 0x70,
|
||||
0x57, 0xec, 0xce, 0xb8, 0xb8, 0x72, 0x38, 0x90, 0x04, 0x62, 0xfa, 0xa1, 0x6d, 0x24, 0x13, 0x8c,
|
||||
0x24, 0xe9, 0xf0, 0x00, 0xe4, 0x0e, 0x6c, 0x29, 0x86, 0xd0, 0x0d, 0x4c, 0x9e, 0x2d, 0xaa, 0x5f,
|
||||
0x88, 0x22, 0x89, 0x21, 0xd4, 0x00, 0x55, 0xc3, 0x4b, 0x12, 0xa4, 0xc0, 0xa9, 0x5e, 0x12, 0xf4,
|
||||
0x26, 0x1d, 0xac, 0x02, 0x4a, 0x80, 0x57, 0xcf, 0xa0, 0x0c, 0xc7, 0x51, 0x3f, 0x7a, 0x6f, 0x7f,
|
||||
0x8e, 0xec, 0x56, 0x38, 0xf5, 0x61, 0xff, 0x4e, 0xf2, 0x4d, 0x7f, 0xf8, 0xe8, 0xcc, 0xac, 0xd8,
|
||||
0x33, 0xfd, 0x64, 0x1d, 0x7d, 0xe4, 0x2c, 0xee, 0x3d, 0x88, 0xe9, 0x2d, 0xde, 0xd6, 0xdb, 0x82,
|
||||
0xc9, 0x47, 0xb2, 0x0d, 0x0e, 0x99, 0xdd, 0x91, 0xa4, 0xf4, 0x64, 0xa3, 0xe8, 0x49, 0x20, 0xa4,
|
||||
0xe7, 0x9b, 0x2f, 0x4b, 0xc5, 0x36, 0x8c, 0x13, 0x1a, 0xd2, 0xd1, 0xd3, 0x6a, 0x44, 0x8d, 0xd1,
|
||||
0xc3, 0x5e, 0x3a, 0x76, 0x3a, 0x9e, 0xa7, 0x7c, 0xe1, 0xae, 0x50, 0x1e, 0x5c, 0x3a, 0x3f, 0xf6,
|
||||
0x54, 0xd7, 0xb7, 0xf3, 0x57, 0x20, 0x03, 0xae, 0xb1, 0xeb, 0x3b, 0x9c, 0x76, 0x15, 0xdd, 0x1f,
|
||||
0xce, 0xab, 0x65, 0x20, 0x52, 0x78, 0xc4, 0x3a, 0x93, 0x7f, 0xe4, 0x5d, 0x8a, 0xe4, 0x4d, 0xe6,
|
||||
0x7b, 0xfd, 0x69, 0xf4, 0x06, 0xb5, 0x5e, 0xb9, 0x2f, 0x1b, 0x22, 0xbd, 0xaf, 0x71, 0xbe, 0x9c,
|
||||
0x40, 0xb1, 0xce, 0x2e, 0x49, 0x0e, 0xe7, 0xa3, 0xd0, 0xef, 0xe2, 0xeb, 0x8d, 0xb0, 0x94, 0x5c,
|
||||
0x4d, 0x9f, 0x98, 0x79, 0x59, 0x4c, 0xf1, 0x5b, 0x2d, 0x2a, 0xd0, 0xe6, 0x08, 0x23, 0x79, 0x77,
|
||||
0xa3, 0xb8, 0x10, 0x9a, 0xf5, 0x99, 0x5a, 0x4d, 0x04, 0xa7, 0x82, 0xe7, 0x4a, 0xca, 0xa5, 0x12,
|
||||
0xc6, 0xf4, 0x12, 0x47, 0x58, 0xfa, 0xcb, 0x7f, 0xe8, 0x2b, 0x4f, 0x11, 0xed, 0x4e, 0x1d, 0x00,
|
||||
0x9d, 0x4f, 0xd7, 0x2c, 0x10, 0x4c, 0x1f, 0x8a, 0xf4, 0x3b, 0xc6, 0xee, 0x8e, 0x72, 0xbe, 0xdb,
|
||||
0xdd, 0x80, 0x60, 0x66, 0x40, 0x46, 0x56, 0xff, 0x66, 0x57, 0xf6, 0xa8, 0x96, 0x14, 0x1e, 0x8e,
|
||||
0x3c, 0x64, 0xd2, 0x94, 0x62, 0xf7, 0xd9, 0xa5, 0xa8, 0x54, 0x7f, 0x8e, 0x70, 0xee, 0xcd, 0x87,
|
||||
0x9a, 0xb3, 0xce, 0x3a, 0x83, 0x85, 0x3f, 0x68, 0x6f, 0x30, 0x57, 0x79, 0x6a, 0x65, 0xdd, 0xc9,
|
||||
0x52, 0x8e, 0x77, 0x4e, 0x8d, 0xa5, 0xa5, 0x8e, 0x5b, 0x95, 0xca, 0xb5, 0x1d, 0x16, 0x30, 0xc1,
|
||||
0x10, 0x76, 0x80, 0x0c, 0x10, 0x2e, 0x3a, 0x9a, 0xed, 0xdb, 0xc6, 0x39, 0x3f, 0xcb, 0xf4, 0x53,
|
||||
0x36, 0xe3, 0x80, 0xb2, 0xc2, 0x43, 0xb2, 0x65, 0x4a, 0xbe, 0x2c, 0x60, 0xf1, 0x49, 0x82, 0x17,
|
||||
0x4d, 0xc4, 0x51, 0xe0, 0xd2, 0xcc, 0xa2, 0xc2, 0x87, 0x5f, 0x28, 0xde, 0x5d, 0xd3, 0x30, 0x15,
|
||||
0xd3, 0x00, 0x83, 0xe4, 0xe7, 0x57, 0x33, 0x9e, 0xe4, 0xe8, 0xa8, 0xbe, 0xea, 0x16, 0x70, 0x6e,
|
||||
0x0f, 0xa4, 0x05, 0x05, 0x79, 0x4c, 0xb6, 0xad, 0xd9, 0x9d, 0x4c, 0x47, 0xd3, 0xfd, 0x47, 0x4c,
|
||||
0x6d, 0xc6, 0xb7, 0xc1, 0x2b, 0xe0, 0x76, 0x35, 0xf8, 0x85, 0x20, 0xa3, 0x96, 0xd6, 0x8c, 0x1e,
|
||||
0xd4, 0x6c, 0xf5, 0x8d, 0x12, 0xc5, 0xcb, 0xd7, 0x1e, 0x8f, 0xd6, 0x11, 0xb1, 0x81, 0x4c, 0x9b,
|
||||
0x65, 0x70, 0xf8, 0x62, 0x37, 0x6e, 0x10, 0x80, 0x1b, 0x09, 0xf2, 0xa9, 0x6f, 0x9f, 0xe2, 0xfb,
|
||||
0x30, 0x70, 0x45, 0x73, 0x55, 0x2b, 0x6d, 0xaf, 0x5f, 0xe2, 0x25, 0x95, 0x6e, 0xeb, 0xf6, 0x67,
|
||||
0x0d, 0xfe, 0xc5, 0x98, 0x88, 0x17, 0x74, 0x88, 0x3f, 0xb7, 0x1f, 0x10, 0x79, 0xca, 0xa7, 0x61,
|
||||
0x0a, 0xb3, 0x16, 0xb4, 0x90, 0x45, 0x28, 0x2b, 0xcb, 0x95, 0xd6, 0x74, 0xcb, 0x97, 0xf7, 0x55,
|
||||
0xdb, 0x08, 0xad, 0xfb, 0x3d, 0xd4, 0x8c, 0x75, 0x9c, 0x1f, 0x3b, 0x84, 0x66, 0x45, 0xf6, 0xe5,
|
||||
0x98, 0xd4, 0x0d, 0x78, 0x1c, 0xf9, 0x0f, 0x9f, 0x6b, 0x4b, 0x68, 0xc6, 0xe4, 0xea, 0xfb, 0x04,
|
||||
0xca, 0x12, 0x10, 0xc3, 0xe3, 0x2c, 0x9b, 0xdb, 0xbc, 0x5c, 0xc0, 0x0e, 0x5c, 0xb7, 0x3f, 0x6f,
|
||||
0x7a, 0x89, 0x89, 0xb9, 0xf7, 0x71, 0x73, 0xcf, 0x9c, 0x48, 0xe5, 0x63, 0xd2, 0x5c, 0x08, 0xe6,
|
||||
0x42, 0x19, 0x02, 0xbb, 0xf6, 0xed, 0xa1, 0x78, 0xeb, 0xa0, 0x38, 0xa5, 0x8b, 0x63, 0x14, 0xb9,
|
||||
0x92, 0x8e, 0x05, 0xb4, 0x15, 0x27, 0x40, 0x65, 0xa2, 0x94, 0xe7, 0x97, 0xd6, 0x9a, 0xe0, 0x30,
|
||||
0xcc, 0xaf, 0x35, 0x27, 0xe5, 0xbe, 0x9e, 0x77, 0x93, 0x15, 0x2e, 0x34, 0x17, 0x95, 0x24, 0x19,
|
||||
0x1d, 0x8f, 0xb0, 0x34, 0xf6, 0x58, 0x94, 0xc8, 0x62, 0xaf, 0xb9, 0xf5, 0x27, 0x73, 0x55, 0x58,
|
||||
0x89, 0x30, 0xd0, 0x6f, 0x5e, 0x1e, 0xcd, 0xd1, 0x61, 0x24, 0x4c, 0x56, 0x20, 0xc7, 0x92, 0x7e,
|
||||
0x55, 0x87, 0xfe, 0x78, 0x59, 0xa3, 0xc9, 0xf5, 0x53, 0xa6, 0x0c, 0x61, 0xdb, 0xdb, 0xb5, 0x07,
|
||||
0x00, 0xe9, 0x4f, 0xac, 0x29, 0x96, 0x88, 0xc8, 0x25, 0x69, 0x87, 0x38, 0xfc, 0x90, 0x57, 0xa0,
|
||||
0x34, 0x27, 0x49, 0x1a, 0xb3, 0xcf, 0x23, 0x06, 0x0d, 0x1d, 0x9e, 0x65, 0x18, 0x48, 0xcf, 0x33,
|
||||
0x46, 0x67, 0x3b, 0xa6, 0x4e, 0x25, 0x20, 0x13, 0xa5, 0xe9, 0x1f, 0xa1, 0xf2, 0x08, 0x44, 0x6d,
|
||||
0x65, 0x12, 0x0e, 0x98, 0x58, 0x6e, 0x07, 0xa3, 0xf6, 0xc6, 0xb7, 0x0b, 0xc1, 0x0c, 0x4f, 0xdc,
|
||||
0x8a, 0xab, 0xa1, 0x69, 0xeb, 0x6e, 0x46, 0x7d, 0x2c, 0xc1, 0x2c, 0x3d, 0x5f, 0xe1, 0x6b, 0x27,
|
||||
0x30, 0xd1, 0x2d, 0xa8, 0xb3, 0x0d, 0xd1, 0x68, 0xf3, 0xf9, 0x17, 0x4e, 0x1d, 0xc9, 0x40, 0x89,
|
||||
0x03, 0xf9, 0xb8, 0xd7, 0xdf, 0xa0, 0x2c, 0xb5, 0xf5, 0xdd, 0xb0, 0x14, 0xf0, 0xe4, 0x60, 0x4c,
|
||||
0x49, 0x20, 0x05, 0x72, 0x61, 0xa4, 0xd3, 0x8b, 0x62, 0xb9, 0xc0, 0xb3, 0x65, 0xc6, 0xb0, 0x67,
|
||||
0xd1, 0x0e, 0x6b, 0x71, 0xbc, 0xca, 0xe6, 0x52, 0x84, 0x80, 0x2f, 0x3a, 0x40, 0x2a, 0x0e, 0x41,
|
||||
0x06, 0xba, 0xb6, 0xa2, 0xf1, 0xd3, 0x90, 0x8c, 0xa8, 0x7e, 0x80, 0x01, 0x15, 0x09, 0x49, 0xe8,
|
||||
0x6c, 0x18, 0xd7, 0x16, 0x9d, 0x0e, 0x2f, 0x96, 0xe4, 0x6e, 0xca, 0x56, 0x05, 0x9d, 0xfa, 0x54,
|
||||
0x3f, 0x12, 0x19, 0x99, 0xb7, 0x34, 0x56, 0x1c, 0x48, 0x13, 0xe6, 0x89, 0x3b, 0xcf, 0x18, 0x0a,
|
||||
0x0e, 0xd9, 0x7d, 0xcf, 0x51, 0xc2, 0x54, 0x17, 0x0d, 0x99, 0x1a, 0x8d, 0xa7, 0x92, 0xa2, 0x5e,
|
||||
0x2b, 0xb4, 0x0f, 0x6e, 0x58, 0x19, 0x35, 0x0c, 0xd5, 0xf1, 0x9b, 0xa4, 0x66, 0x34, 0xb8, 0xc7,
|
||||
0xe7, 0x34, 0xb6, 0x63, 0x1a, 0x90, 0xf0, 0xbf, 0x7b, 0xe8, 0xac, 0x65, 0x8a, 0x6a, 0xb7, 0x41,
|
||||
0x19, 0xc2, 0x4c, 0xcc, 0x80, 0x8a, 0x2a, 0xe0, 0x90, 0x87, 0x22, 0xbc, 0x71, 0xa5, 0x14, 0x95,
|
||||
0xb2, 0x32, 0x69, 0x80, 0x14, 0xd9, 0xcc, 0x86, 0x65, 0x8b, 0x7d, 0x01, 0xb5, 0xf2, 0xd3, 0xdb,
|
||||
0xc4, 0x02, 0x71, 0x9a, 0x75, 0x0c, 0x67, 0x37, 0xd0, 0xab, 0x4d, 0x38, 0x89, 0x0f, 0x36, 0x12,
|
||||
0x36, 0xc1, 0x7d, 0x8d, 0x42, 0xa9, 0x93, 0x92, 0x20, 0x63, 0xa1, 0x9c, 0x59, 0xa1, 0x99, 0xc9,
|
||||
0x23, 0x10, 0xd4, 0x72, 0x74, 0x3f, 0x23, 0x17, 0x92, 0x12, 0x46, 0xa0, 0x09, 0xd6, 0xb8, 0xb3,
|
||||
0x38, 0x56, 0x58, 0x3d, 0x98, 0xbc, 0xf0, 0x28, 0xfe, 0xd0, 0xc9, 0x06, 0xe0, 0x54, 0xa0, 0xfd,
|
||||
0x83, 0xd3, 0x72, 0x4d, 0x53, 0x5f, 0x1f, 0xc7, 0xc0, 0x6e, 0x03, 0xc5, 0x04, 0xaa, 0x1d, 0x52,
|
||||
0x54, 0xea, 0x9d, 0x10, 0x06, 0x58, 0xba, 0x42, 0x77, 0x1a, 0xa4, 0x17, 0x17, 0xa7, 0x66, 0x6c,
|
||||
0x11, 0xb7, 0xcf, 0xcc, 0x21, 0xdb, 0x52, 0xb5, 0x98, 0xf9, 0x75, 0x46, 0x21, 0x37, 0x21, 0x07,
|
||||
0xf0, 0x6f, 0x43, 0x5d, 0x01, 0xf6, 0x24, 0xb2, 0x58, 0xf9, 0xd9, 0x87, 0xa8, 0xe3, 0xc4, 0x69,
|
||||
0x9f, 0xc1, 0xc8, 0xea, 0xef, 0xbb, 0xb2, 0xc6, 0xbf, 0xa5, 0x2c, 0x24, 0xf2, 0xe7, 0xfa, 0x61,
|
||||
0xa8, 0x89, 0x4a, 0x59, 0x8c, 0x6e, 0xca, 0x12, 0x49, 0x78, 0xb5, 0x66, 0x13, 0x1c, 0xb2, 0x3a,
|
||||
0x1e, 0xa2, 0x9d, 0x5a, 0x87, 0x71, 0x56, 0x72, 0x69, 0x54, 0xb4, 0xe0, 0x25, 0xe9, 0xcd, 0xc6,
|
||||
0x61, 0x5b, 0xaf, 0x34, 0xaf, 0x61, 0x92, 0xc5, 0xee, 0x9f, 0x23, 0xfc, 0x48, 0xc8, 0xca, 0x9c,
|
||||
0xbf, 0x66, 0x29, 0x0e, 0x52, 0xc9, 0x35, 0x03, 0x92, 0x5b, 0x8d, 0xf6, 0x71, 0x8f, 0xc9, 0x82,
|
||||
0x0c, 0x84, 0x48, 0x0b, 0xf1, 0x50, 0xcd, 0x06, 0x79, 0xc0, 0x04, 0x2b, 0x52, 0xad, 0x5d, 0xd9,
|
||||
0x7d, 0x3c, 0xbf, 0x59, 0xcc, 0xce, 0x7f, 0xfc, 0x16, 0x8b, 0xfd, 0x49, 0xde, 0x2f, 0x00, 0x03,
|
||||
0x4f, 0x9c, 0x2d, 0x16, 0xf6, 0xc4, 0x38, 0xe6, 0xc1, 0xd1, 0x56, 0x18, 0x6f, 0xf1, 0x59, 0x50,
|
||||
0xa1, 0xb8, 0x29, 0xab, 0xcb, 0xb6, 0xc3, 0x39, 0xf4, 0x43, 0xcd, 0x23, 0xe6, 0xd0, 0xbe, 0x60,
|
||||
0xe8, 0x18, 0xfa, 0x05, 0x71, 0xc1, 0xcf, 0xc2, 0x2d, 0x11, 0xf6, 0x04, 0x23, 0xf5, 0x4f, 0x88,
|
||||
0x4e, 0x49, 0x39, 0xd7, 0xb7, 0x42, 0xa0, 0xaf, 0x3a, 0x14, 0x53, 0x1d, 0x93, 0x41, 0xe4, 0xe8,
|
||||
0x8c, 0x98, 0xf8, 0x00, 0xee, 0x5d, 0x05, 0xc9, 0xff, 0x29, 0xda, 0xae, 0x16, 0x5d, 0xb0, 0xaa,
|
||||
0x48, 0xe4, 0xad, 0x79, 0x25, 0xe2, 0x5e, 0xe0, 0xac, 0xf0, 0x3b, 0xf0, 0x93, 0x93, 0xc5, 0xcc,
|
||||
0xbb, 0xd6, 0x23, 0x43, 0x65, 0x6b, 0xed, 0xb3, 0xa6, 0x8d, 0x78, 0x26, 0xb0, 0x1b, 0xf9, 0xde,
|
||||
0xee, 0xbe, 0xb3, 0x2e, 0x32, 0x05, 0x88, 0x53, 0x92, 0x3f, 0x23, 0x50, 0x95, 0xcb, 0xf5, 0xfe,
|
||||
0x90, 0x99, 0x18, 0x5e, 0xf9, 0x60, 0x1b, 0x1e, 0x59, 0xe9, 0x6c, 0xbe, 0x81, 0x2a, 0x8e, 0xe8,
|
||||
0x18, 0xa5, 0xae, 0x11, 0x35, 0xde, 0x86, 0x3f, 0x52, 0x41, 0xfb, 0xcc, 0xd6, 0x27, 0x7c, 0xe0,
|
||||
0x26, 0x14, 0x87, 0xac, 0x59, 0x25, 0xc8, 0xa6, 0xd3, 0x03, 0x66, 0x6a, 0x04, 0x56, 0x65, 0x38,
|
||||
0x5b, 0x31, 0x77, 0xe4, 0xf4, 0x94, 0x5b, 0xac, 0x6f, 0xe4, 0xba, 0x1e, 0x3b, 0xfa, 0x40, 0x7b,
|
||||
0x96, 0x4b, 0x8d, 0x02, 0xf5, 0xdd, 0x12, 0x2e, 0x18, 0x06, 0xeb, 0xd8, 0xc5, 0xf9, 0x2a, 0x26,
|
||||
0x0b, 0x63, 0x52, 0x48, 0xd6, 0xfb, 0xd9, 0x93, 0xc0, 0x3a, 0xe9, 0x2f, 0x75, 0xc1, 0x6a, 0x14,
|
||||
0xce, 0x24, 0x0b, 0x17, 0x42, 0xea, 0x5d, 0x0c, 0x25, 0xef, 0x16, 0x29, 0xab, 0x0c, 0x6b, 0xb5,
|
||||
0x9b, 0xa8, 0x49, 0xcd, 0x7a, 0x0c, 0x15, 0x28, 0x4a, 0x78, 0x00, 0xae, 0x3b, 0x61, 0xb1, 0x3b,
|
||||
0xec, 0xbe, 0xd1, 0x33, 0x7d, 0x37, 0x98, 0x7e, 0x36, 0xeb, 0xd9, 0xb7, 0x5a, 0x8e, 0x64, 0x75,
|
||||
0x4a, 0x81, 0x09, 0xb5, 0xef, 0xce, 0x08, 0x30, 0x62, 0x44, 0xaa, 0x62, 0xcf, 0x7d, 0x0f, 0xf7,
|
||||
0x3b, 0x73, 0xf2, 0xea, 0xa3, 0x63, 0xd6, 0xcf, 0xb9, 0x93, 0xbe, 0x11, 0x96, 0xec, 0xb4, 0x3e,
|
||||
0xdf, 0x51, 0xe7, 0x02, 0xe7, 0x57, 0x5f, 0xc3, 0x94, 0x0a, 0x36, 0xc2, 0x07, 0x52, 0x23, 0xa7,
|
||||
0xea, 0x6c, 0x06, 0x46, 0x6f, 0x8d, 0x68, 0x9d, 0x6a, 0x8f, 0x9b, 0x23, 0x09, 0xd8, 0x93, 0x07,
|
||||
0x3a, 0xd6, 0xad, 0x0b, 0xb4, 0x40, 0x44, 0xb1, 0xbc, 0x7d, 0x0c, 0x09, 0x3b, 0x04, 0x9c, 0x07,
|
||||
0x77, 0x2e, 0x39, 0xd9, 0xe4, 0x71, 0x77, 0x33, 0x88, 0x71, 0x57, 0x46, 0x03, 0x32, 0x24, 0x1e,
|
||||
0x80, 0x7e, 0x07, 0xb0, 0xa8, 0x48, 0x71, 0x5a, 0xe8, 0xeb, 0x08, 0x5e, 0xb9, 0x61, 0x16, 0xd1,
|
||||
0xe5, 0xe3, 0xe9, 0x8b, 0x70, 0x32, 0x1a, 0xf0, 0x69, 0xc5, 0x2d, 0x34, 0xf5, 0xe8, 0xf9, 0x91,
|
||||
0x98, 0xd1, 0x8c, 0x0a, 0x7e, 0x0e, 0x70, 0x2f, 0xe4, 0xa1, 0x24, 0x19, 0x56, 0xb0, 0x9a, 0xb6,
|
||||
0xb9, 0xe5, 0x04, 0x0b, 0xa2, 0xa9, 0xf0, 0xd9, 0xc5, 0xfe, 0x87, 0xea, 0xe9, 0x88, 0x91, 0x3c,
|
||||
0x5e, 0x08, 0x55, 0x4d, 0x32, 0xfe, 0xeb, 0x3e, 0x60, 0x14, 0x8b, 0x1f, 0xb1, 0xea, 0x67, 0xb2,
|
||||
0xff, 0x55, 0x28, 0x5e, 0x92, 0x8e, 0xfe, 0x90, 0x39, 0x19, 0x7f, 0xe9, 0x78, 0x3e, 0xb0, 0xec,
|
||||
0x13, 0xd2, 0x8a, 0xa7, 0x4f, 0xcf, 0x9e, 0x55, 0x49, 0xb4, 0x8a, 0xb7, 0x09, 0x89, 0x27, 0xdf,
|
||||
0x50, 0xa6, 0xcb, 0x1b, 0xad, 0x0d, 0xed, 0xf8, 0x23, 0x6c, 0xb0, 0x99, 0xc1, 0x74, 0x68, 0x55,
|
||||
0xb1, 0x80, 0xbe, 0x40, 0x15, 0x4a, 0xca, 0x88, 0xb4, 0xe9, 0x66, 0xcb, 0x89, 0xca, 0x28, 0x13,
|
||||
0xe5, 0x7d, 0xcb, 0x0f, 0xb7, 0xd3, 0x6f, 0x4f, 0xba, 0xb5, 0xad, 0x82, 0xa9, 0x85, 0x22, 0xdf,
|
||||
0xdd, 0xd9, 0xe5, 0x0b, 0x9f, 0x63, 0x35, 0xc9, 0x7b, 0x7d, 0x36, 0xcf, 0x8f, 0x08, 0x2d, 0x4e,
|
||||
0xfd, 0xf8, 0x87, 0xcf, 0x09, 0xdf, 0xa4, 0x2a, 0x49, 0x26, 0xbb, 0xb1, 0xb5, 0x8d, 0x03, 0x3c,
|
||||
0x6a, 0xd3, 0x43, 0x73, 0x04, 0x5e, 0x0e, 0x2c, 0x9e, 0xa8, 0x3a, 0x53, 0x71, 0x27, 0xc3, 0xc7,
|
||||
0xb2, 0xc9, 0x9b, 0x53, 0x18, 0x76, 0x23, 0xaa, 0x5b, 0x42, 0x9c, 0x6c, 0xe4, 0x74, 0x99, 0xad,
|
||||
0xec, 0xde, 0xb5, 0x36, 0xeb, 0xe3, 0xd8, 0x84, 0xd4, 0x10, 0x9b, 0xc0, 0x6d, 0xe2, 0xf5, 0x4c,
|
||||
0x22, 0x12, 0x58, 0xc1, 0x5d, 0x65, 0x8e, 0xa5, 0xdd, 0x02, 0x03, 0x9d, 0x44, 0xaf, 0x44, 0xca,
|
||||
0x65, 0x41, 0xe6, 0xf4, 0xeb, 0x72, 0x42, 0xed, 0x19, 0x73, 0xdd, 0xb5, 0xcb, 0x0d, 0x08, 0xaa,
|
||||
0x78, 0xdb, 0x6a, 0xc1, 0x4d, 0x7e, 0xfd, 0x2b, 0x20, 0xdb, 0x29, 0x8a, 0xd9, 0xbc, 0x1c, 0xd6,
|
||||
0xc8, 0xb3, 0x62, 0x0c, 0x8f, 0x03, 0x54, 0x96, 0xca, 0x38, 0x64, 0x50, 0xa8, 0x1b, 0x73, 0x02,
|
||||
0x2b, 0xb9, 0xd6, 0xbd, 0xf7, 0xb5, 0x14, 0x2e, 0xa8, 0xe4, 0x9e, 0x92, 0x3a, 0x65, 0x15, 0x40,
|
||||
0x4f, 0x16, 0x6c, 0x24, 0xd1, 0xe0, 0x13, 0xb1, 0xb0, 0x40, 0x75, 0x9e, 0x08, 0x32, 0x12, 0xdd,
|
||||
0x9f, 0x2d, 0xd0, 0xb9, 0xbc, 0xd7, 0xd6, 0x6f, 0x2e, 0xaa, 0xe7, 0x1b, 0x4d, 0xa5, 0x33, 0xdb,
|
||||
0xaa, 0xd1, 0x8f, 0x34, 0xc8, 0x6e, 0x72, 0xd0, 0xb8, 0x36, 0xd8, 0xa7, 0x8c, 0x0a, 0xb0, 0xe9,
|
||||
0xfe, 0x65, 0x76, 0x16, 0xc6, 0x7c, 0x02, 0x1b, 0x99, 0x31, 0x3f, 0x06, 0x61, 0xff, 0xe4, 0x62,
|
||||
0x8a, 0x9d, 0x3c, 0xaf, 0x75, 0xc5, 0x47, 0x27, 0xc1, 0x72, 0x0a, 0xc7, 0x1b, 0xb4, 0x84, 0xfa,
|
||||
0xe1, 0x67, 0xb2, 0x4d, 0x2c, 0x19, 0x7a, 0x07, 0xcf, 0xa1, 0x03, 0x43, 0xdb, 0xeb, 0xb0, 0x2a,
|
||||
0x23, 0xe4, 0x5c, 0x7e, 0x6c, 0xea, 0x8f, 0x8f, 0xe2, 0x42, 0xa3, 0xd7, 0x40, 0x7c, 0xbc, 0xb1,
|
||||
0x55, 0x3d, 0x05, 0xa6, 0x43, 0xc6, 0x09, 0xc9, 0x78, 0x3b, 0x43, 0x58, 0x1b, 0x95, 0x7e, 0x47,
|
||||
0x35, 0x69, 0xc3, 0xb2, 0xcf, 0x88, 0xc1, 0xef, 0x91, 0xeb, 0x4a, 0x62, 0x39, 0x2b, 0x20, 0xa1,
|
||||
0x52, 0x97, 0xf8, 0xc8, 0x5c, 0xd7, 0xa1, 0xcc, 0x20, 0xb7, 0x94, 0xab, 0xae, 0x30, 0x2e, 0x3c,
|
||||
0xd3, 0xca, 0x86, 0x9b, 0x4d, 0xc2, 0x25, 0x8c, 0x57, 0xea, 0x28, 0x49, 0xe8, 0x1f, 0x31, 0xff,
|
||||
0x29, 0x61, 0xef, 0x1f, 0x02, 0xbd, 0x71, 0x70, 0x67, 0x78, 0x48, 0xc1, 0xd2, 0xaa, 0x5f, 0x4b,
|
||||
0x85, 0x46, 0x82, 0x14, 0x8e, 0x65, 0x1f, 0x34, 0xbb, 0x90, 0xfb, 0xad, 0x96, 0x06, 0xbf, 0x1b,
|
||||
0x09, 0x6f, 0x47, 0xc0, 0xa6, 0x62, 0xd0, 0x38, 0x69, 0xab, 0x96, 0x33, 0x08, 0xb7, 0x45, 0x4d,
|
||||
0x92, 0x1b, 0xcf, 0x04, 0xc3, 0x52, 0x72, 0xd5, 0x68, 0x4b, 0x31, 0xc6, 0x18, 0x2a, 0x4b, 0x44,
|
||||
0x6e, 0xb9, 0x91, 0xa9, 0x2f, 0xfe, 0x78, 0x3b, 0x49, 0x7a, 0xa0, 0x9b, 0xc9, 0x69, 0x16, 0x9a,
|
||||
0x84, 0x3e, 0x79, 0x5c, 0x57, 0x7c, 0x94, 0xdd, 0xfb, 0x27, 0x81, 0xbd, 0xea, 0x0f, 0x23, 0xbc,
|
||||
0xb5, 0xb9, 0x8c, 0x12, 0xca, 0xc3, 0x76, 0x08, 0x52, 0x19, 0xec, 0x53, 0x54, 0xbf, 0xb1, 0x98,
|
||||
0x6b, 0xf9, 0xe8, 0xe2, 0x36, 0x9f, 0x4d, 0xc1, 0xcc, 0x59, 0xf0, 0xe4, 0x97, 0x1d, 0x27, 0x10,
|
||||
0x03, 0x7e, 0x35, 0xcf, 0xa2, 0x28, 0x48, 0x2f, 0xbc, 0x8f, 0xc1, 0x97, 0xfc, 0x8a, 0x48, 0x39,
|
||||
0x37, 0xe7, 0x2c, 0x54, 0x72, 0x8e, 0xfb, 0xb7, 0xe2, 0x6b, 0x3b, 0x71, 0x22, 0x14, 0x3e, 0x62,
|
||||
0xe0, 0xf9, 0x6c, 0x6b, 0xf7, 0xa5, 0x67, 0x34, 0x44, 0xf5, 0x5a, 0xf3, 0xa2, 0x24, 0xf9, 0x80,
|
||||
0xec, 0xe9, 0x7c, 0xb3, 0x15, 0x2e, 0xa3, 0xa3, 0x6a, 0x45, 0xa4, 0x7a, 0x81, 0x90, 0xd2, 0x55,
|
||||
0xe8, 0xf8, 0x98, 0x3a, 0xa3, 0x53, 0xb9, 0x9d, 0x84, 0x41, 0x96, 0x9b, 0x5b, 0xa7, 0xf8, 0xc2,
|
||||
0x13, 0x07, 0x66, 0x05, 0x2b, 0x7d, 0x9a, 0xa4, 0x96, 0x2d, 0x73, 0x2d, 0x61, 0x8b, 0x56, 0x1b,
|
||||
0x38, 0xba, 0x4a, 0x7d, 0x58, 0x51, 0xcb, 0x1b, 0xaa, 0x6d, 0x03, 0x2d, 0x40, 0x78, 0x11, 0x4f,
|
||||
0x5e, 0x94, 0x3b, 0xc5, 0x3a, 0xf0, 0xeb, 0x52, 0xe4, 0x22, 0x36, 0x1a, 0xcd, 0x6e, 0x08, 0x8c,
|
||||
0x98, 0xa4, 0x77, 0x00, 0x0a, 0xe9, 0x1b, 0x11, 0x24, 0x2f, 0x08, 0x35, 0x54, 0xa9, 0x21, 0x83,
|
||||
0x7b, 0x69, 0xfb, 0xe5, 0x71, 0xee, 0x74, 0x60, 0xe8, 0x87, 0x7a, 0x74, 0xd5, 0x0f, 0x02, 0xd3,
|
||||
0xc8, 0x06, 0x15, 0x91, 0xc7, 0x35, 0x91, 0xcc, 0x67, 0xf1, 0x3a, 0x4c, 0x5e, 0xe8, 0xee, 0x00,
|
||||
0x21, 0x1a, 0x41, 0x42, 0x40, 0x8a, 0x75, 0x30, 0xc0, 0xde, 0x5c, 0x60, 0x6d, 0x7d, 0x76, 0x47,
|
||||
0x9b, 0xec, 0x4d, 0x9c, 0x0e, 0xd8, 0xd9, 0x6a, 0x12, 0x74, 0xb5, 0x89, 0x48, 0x8f, 0xe0, 0xe7,
|
||||
0x3c, 0x8b, 0xe1, 0xf6, 0x9b, 0x1a, 0x56, 0x50, 0xff, 0xda, 0x22, 0x4c, 0x26, 0x35, 0x44, 0x35,
|
||||
0x7b, 0x22, 0x56, 0x1f, 0x64, 0xec, 0x9e, 0x3b, 0x82, 0x52, 0x50, 0x22, 0xaf, 0x20, 0x76, 0x10,
|
||||
0x07, 0x3d, 0x6b, 0x26, 0xec, 0xb3, 0xa3, 0xf5, 0x34, 0xc9, 0x5c, 0x5b, 0xb0, 0x53, 0x6e, 0xec,
|
||||
0xaf, 0xaf, 0x7d, 0x83, 0x58, 0x6e, 0x88, 0xe7, 0x17, 0x4b, 0xec, 0xc8, 0x2e, 0xee, 0xc7, 0xd8,
|
||||
0xab, 0x52, 0xf8, 0x6c, 0xaf, 0x55, 0xfb, 0x12, 0xd6, 0xe0, 0x8d, 0x29, 0x24, 0x2a, 0x38, 0xcc,
|
||||
0x7b, 0x4b, 0x94, 0xa6, 0x21, 0x9e, 0x46, 0x34, 0x26, 0xe5, 0xa4, 0xb3, 0x8a, 0x9f, 0x33, 0x93,
|
||||
0x2c, 0x1d, 0xa2, 0xde, 0x02, 0xac, 0x96, 0xa5, 0xfb, 0xa2, 0x50, 0x02, 0x79, 0x0a, 0xb9, 0x5c,
|
||||
0xfe, 0x61, 0xd7, 0x20, 0xdc, 0x29, 0xcb, 0xac, 0x8a, 0xdc, 0xa4, 0x8d, 0xa5, 0x1b, 0xbd, 0x22,
|
||||
0xcb, 0x79, 0xa8, 0x1f, 0xec, 0x9e, 0x9a, 0x3a, 0xf2, 0x1e, 0x7d, 0x22, 0x58, 0x1c, 0x4f, 0xfb,
|
||||
0x73, 0x75, 0x92, 0x0b, 0xa7, 0x98, 0x87, 0x1a, 0x0c, 0xb6, 0x9c, 0xe6, 0xc9, 0x8f, 0xce, 0xc0,
|
||||
0x9b, 0x45, 0x20, 0xd2, 0x7d, 0x4d, 0x06, 0x2c, 0x15, 0x18, 0x65, 0x70, 0x4c, 0xa6, 0x3d, 0xe9,
|
||||
0x0b, 0x73, 0x3c, 0x7b, 0x49, 0xb6, 0xa9, 0x4b, 0xa5, 0x47, 0x7e, 0x2c, 0x58, 0x5a, 0x1e, 0x81,
|
||||
0xff, 0xfc, 0x5d, 0x49, 0x1d, 0x85, 0x02, 0x7a, 0x9c, 0xb7, 0x73, 0x34, 0x98, 0x8a, 0x91, 0x5e,
|
||||
0x5a, 0x79, 0x91, 0x76, 0x07, 0xa0, 0x03, 0x54, 0xf1, 0xec, 0xe6, 0x33, 0x4d, 0x9f, 0x3e, 0xcf,
|
||||
0xfb, 0x5b, 0x8c, 0x10, 0xf1, 0xd0, 0x59, 0xc2, 0xf6, 0x3b, 0xaa, 0xd9, 0x5c, 0x23, 0x9a, 0x95,
|
||||
0x46, 0x55, 0x30, 0x45, 0xcf, 0x3c, 0x9f, 0x31, 0x8d, 0x71, 0x69, 0xd2, 0x4d, 0xb3, 0x6c, 0xe3,
|
||||
0xb0, 0x88, 0x60, 0x9e, 0x76, 0x68, 0x82, 0x04, 0x00, 0x11, 0xb7, 0xbc, 0x05, 0xbd, 0x27, 0x1b,
|
||||
0x67, 0xbf, 0x8b, 0x37, 0x2f, 0xbc, 0x75, 0x0b, 0xc3, 0xed, 0xd1, 0x34, 0xd3, 0xc5, 0x9e, 0x87,
|
||||
0xee, 0x13, 0xab, 0xb4, 0xc2, 0xae, 0x32, 0xf6, 0x6b, 0x42, 0xc5, 0xb4, 0x8a, 0xc3, 0x82, 0x10,
|
||||
0x2c, 0x70, 0x39, 0x61, 0x9a, 0x94, 0xf8, 0xba, 0xb8, 0xff, 0x56, 0xed, 0x5f, 0xec, 0x6b, 0x44,
|
||||
0xce, 0xc3, 0xeb, 0xdf, 0x74, 0xc7, 0xc1, 0x86, 0x2b, 0x33, 0x4c, 0xab, 0x34, 0x02, 0x02, 0xd1,
|
||||
0xa8, 0x6b, 0x56, 0xb4, 0x98, 0x1e, 0x25, 0xd8, 0x3a, 0x33, 0xf5, 0xbc, 0xbc, 0x48, 0xb2, 0x60,
|
||||
0xc0, 0xb0, 0xf0, 0x92, 0xf1, 0x33, 0xc6, 0x5d, 0xd1, 0xdd, 0x64, 0x50, 0xc0, 0xae, 0x5c, 0x04,
|
||||
0xd4, 0xed, 0x44, 0xb1, 0x62, 0x37, 0xf0, 0x61, 0x8e, 0x4d, 0x81, 0x0d, 0xfc, 0xca, 0xb1, 0xe8,
|
||||
0x84, 0x69, 0x3e, 0x68, 0x3a, 0x46, 0xc7, 0x9b, 0x76, 0xe7, 0x02, 0x8f, 0x0a, 0x12, 0xff, 0xca,
|
||||
0x91, 0x15, 0xdf, 0x65, 0xe7, 0xe7, 0xd5, 0x24, 0x9c, 0xc8, 0x5e, 0xeb, 0x1d, 0x5b, 0x5a, 0x73,
|
||||
0x6f, 0x47, 0x22, 0x68, 0x95, 0xc0, 0x44, 0x5d, 0xdd, 0x71, 0x4e, 0xaa, 0x63, 0x6e, 0xf4, 0xd8,
|
||||
0x66, 0xb5, 0x4b, 0x7f, 0x71, 0x87, 0x38, 0xf5, 0x39, 0xc0, 0x63, 0xf6, 0xe8, 0x4e, 0xd8, 0x25,
|
||||
0x53, 0x90, 0xe4, 0x10, 0xb2, 0x40, 0x0a, 0xe3, 0x90, 0xa9, 0x07, 0xb2, 0xd4, 0x28, 0xde, 0x5c,
|
||||
0x10, 0xf7, 0x8e, 0x49, 0x9d, 0x8f, 0x43, 0x3f, 0x1d, 0x3e, 0xad, 0x08, 0x72, 0xf6, 0xf8, 0x46,
|
||||
0x9b, 0x35, 0xba, 0xa4, 0xc7, 0x02, 0xa7, 0xb6, 0x9e, 0xa9, 0xa6, 0xe6, 0x57, 0xd6, 0x42, 0x2c,
|
||||
0x00, 0xf3, 0x00, 0xbc, 0x15, 0xcd, 0xfa, 0x9a, 0x41, 0xea, 0xb5, 0x30, 0x96, 0xbd, 0xf3, 0xdc,
|
||||
0xfb, 0x2d, 0x80, 0xed, 0x70, 0x21, 0x98, 0x18, 0xcd, 0x69, 0x7b, 0xf0, 0x37, 0x59, 0xaa, 0x88,
|
||||
0x8b, 0xce, 0xe8, 0x6a, 0x01, 0x74, 0x1e, 0x31, 0x6c, 0xd2, 0x84, 0x41, 0x20, 0x7c, 0x12, 0xfc,
|
||||
0x9b, 0x36, 0xee, 0x8c, 0xbd, 0xc2, 0xd7, 0x74, 0x65, 0x6b, 0x58, 0x44, 0x17, 0x99, 0xfa, 0x05,
|
||||
0x15, 0x5c, 0x16, 0x14, 0xc4, 0xb7, 0x35, 0xc0, 0x81, 0xc5, 0xaf, 0x2e, 0x18, 0xd9, 0xad, 0x8a,
|
||||
0xbc, 0x73, 0x3d, 0x29, 0x24, 0xfb, 0x8d, 0x6c, 0xe8, 0xb7, 0x33, 0xd5, 0x6d, 0x67, 0xd9, 0x48,
|
||||
0x2a, 0xa4, 0x9b, 0xac, 0x97, 0x4e, 0x7d, 0xe1, 0x09, 0xbf, 0x6d, 0x32, 0xc9, 0x24, 0xe9, 0x61,
|
||||
0x72, 0x45, 0x5c, 0x4b, 0xcb, 0x0a, 0xa8, 0x5b, 0x68, 0x12, 0xc7, 0x04, 0xa2, 0xaf, 0x87, 0xc6,
|
||||
0x83, 0xa1, 0xf2, 0xa9, 0xa9, 0x10, 0x1d, 0x0f, 0xe0, 0xca, 0x70, 0xa6, 0xa6, 0xd5, 0xca, 0x1f,
|
||||
0xff, 0x04, 0x5b, 0x82, 0x32, 0x35, 0xc3, 0x34, 0x53, 0x6b, 0x9c, 0x42, 0x9d, 0xa3, 0x27, 0x23,
|
||||
0x27, 0xbe, 0x74, 0x5e, 0xfd, 0x91, 0x20, 0x40, 0xa6, 0x44, 0x5c, 0x24, 0x5f, 0x5a, 0xfa, 0x14,
|
||||
0x63, 0x50, 0xf9, 0xf1, 0x93, 0x65, 0x1f, 0x8d, 0xb4, 0x1a, 0xe4, 0xd4, 0xaf, 0xa7, 0xab, 0x81,
|
||||
0x19, 0x80, 0x43, 0xbe, 0x7c, 0xf5, 0x9d, 0xc6, 0xde, 0x02, 0x83, 0xf2, 0x7f, 0xe8, 0x48, 0xcb,
|
||||
0xdb, 0x29, 0x62, 0xca, 0xcf, 0xb9, 0x68, 0x03, 0xd9, 0xe7, 0xeb, 0xb4, 0x97, 0xab, 0x1b, 0x0e,
|
||||
0x65, 0xf8, 0x02, 0xbd, 0xd2, 0x7b, 0x9a, 0x36, 0x33, 0x3e, 0xe2, 0x4a, 0xe7, 0xf5, 0xe9, 0x4a,
|
||||
0x8c, 0xfa, 0xdd, 0xe4, 0x0e, 0x17, 0xb0, 0x1d, 0x6c, 0x72, 0xd1, 0x46, 0x3f, 0x68, 0xef, 0x98,
|
||||
0x16, 0x9e, 0xec, 0x31, 0x3f, 0x97, 0xa0, 0x2e, 0x06, 0x34, 0xcb, 0xe8, 0x9e, 0x2d, 0xd4, 0xc4,
|
||||
0xd5, 0x32, 0x17, 0xfa, 0xb8, 0xbb, 0xec, 0xe8, 0x2b, 0x1c, 0xe9, 0xdf, 0xf2, 0x5c, 0xcc, 0x6f,
|
||||
0x7c, 0x86, 0xf8, 0xe7, 0x43, 0xe2, 0x69, 0x49, 0x2a, 0xa5, 0xcd, 0x7f, 0xae, 0x7b, 0x0e, 0xc5,
|
||||
0xff, 0x32, 0x3b, 0x53, 0xd7, 0x0e, 0xcf, 0x0b, 0xd8, 0x52, 0x98, 0x98, 0x53, 0x1c, 0x6b, 0x85,
|
||||
0xf4, 0x2a, 0x30, 0x4b, 0x15, 0x2b, 0xcc, 0xfa, 0xe9, 0x2b, 0xae, 0xd9, 0x73, 0x2d, 0x68, 0x58,
|
||||
0x4c, 0x50, 0x7b, 0x51, 0x0c, 0xb2, 0x7c, 0x73, 0x27, 0x73, 0x88, 0xee, 0xa9, 0x56, 0x7b, 0x7c,
|
||||
0x3b, 0x1f, 0x76, 0x11, 0xd2, 0xe2, 0x56, 0x2a, 0x86, 0x93, 0x02, 0x81, 0xe8, 0x15, 0xc0, 0x91,
|
||||
0x9e, 0x87, 0xc9, 0xab, 0x92, 0x3c, 0xd8, 0xbe, 0x71, 0x75, 0xb7, 0xdb, 0xe8, 0x41, 0x3e, 0x37,
|
||||
0xfc, 0x51, 0x2e, 0x0d, 0x4a, 0x0a, 0x8d, 0x47, 0xac, 0x53, 0xdf, 0x1e, 0x19, 0x57, 0x63, 0x69,
|
||||
0x53, 0x9f, 0x7b, 0x5d, 0x74, 0xbe, 0x7f, 0x93, 0xa2, 0xa8, 0x66, 0xa0, 0x41, 0xfe, 0x3a, 0x8d,
|
||||
0x23, 0x19, 0x60, 0x57, 0x09, 0x9a, 0xfd, 0xcb, 0x41, 0x35, 0x3c, 0x6e, 0xba, 0x76, 0x9e, 0xda,
|
||||
0xe1, 0x3e, 0x50, 0x2c, 0x8a, 0x33, 0x31, 0x0f, 0x70, 0x09, 0xfa, 0xf5, 0xb8, 0x58, 0xb9, 0xfd,
|
||||
0xa9, 0x82, 0xc3, 0xcc, 0xd2, 0x8d, 0xb2, 0xc9, 0xce, 0xcb, 0x70, 0x22, 0xd9, 0x81, 0xc4, 0x79,
|
||||
0x67, 0xba, 0xfb, 0x8c, 0xb4, 0xbe, 0x54, 0xf0, 0xd4, 0x26, 0xd5, 0xec, 0x7e, 0x41, 0x4e, 0x3e,
|
||||
0xa0, 0xeb, 0x9a, 0x0e, 0x42, 0x18, 0xce, 0xd0, 0x0c, 0xeb, 0x39, 0x3f, 0x4e, 0xbe, 0xad, 0xe2,
|
||||
0x24, 0xdf, 0x16, 0xaf, 0x55, 0x30, 0x51, 0x55, 0xab, 0x2a, 0xf8, 0xfc, 0x8a, 0x98, 0x3b, 0xa6,
|
||||
0x4f, 0xae, 0xe5, 0x3a, 0xaf, 0x1c, 0xb6, 0xe5, 0xa1, 0x79, 0x4d, 0x3f, 0xd0, 0x50, 0x6e, 0x06,
|
||||
0x85, 0xe4, 0xb0, 0x02, 0xd6, 0x91, 0x48, 0xaa, 0xa7, 0x95, 0xa2, 0x8d, 0x31, 0x06, 0xed, 0xd9,
|
||||
0xa6, 0xa0, 0x01, 0xea, 0xd8, 0x8c, 0x22, 0x1a, 0xc5, 0x39, 0xcc, 0x44, 0xa8, 0xa2, 0x82, 0x45,
|
||||
0x5c, 0x25, 0x80, 0x4a, 0x6c, 0x26, 0xdd, 0xab, 0xbe, 0xb0, 0xc9, 0x17, 0xe8, 0x35, 0xa1, 0xf7,
|
||||
0x1a, 0xcf, 0x69, 0x20, 0xa3, 0x3c, 0x27, 0x32, 0xd7, 0x54, 0x65, 0x07, 0x7c, 0xda, 0x20, 0x5a,
|
||||
0xe8, 0x7c, 0x9d, 0x23, 0xd8, 0xb8, 0xf6, 0x7d, 0x56, 0x58, 0x81, 0xce, 0x3b, 0x4c, 0x48, 0xb6,
|
||||
0xe0, 0x6d, 0x93, 0xe3, 0x10, 0xfb, 0x1f, 0x2f, 0xa0, 0x08, 0x54, 0x93, 0x68, 0x2e, 0xe1, 0x24,
|
||||
0xd5, 0x82, 0xd8, 0x53, 0x61, 0xe2, 0x9c, 0x0c, 0xdc, 0x2f, 0x68, 0xe9, 0x3a, 0x12, 0x46, 0x71,
|
||||
0xd9, 0xe7, 0x0c, 0x43, 0x28, 0x79, 0x34, 0x06, 0xc5, 0x62, 0x28, 0x64, 0xdd, 0x90, 0x3c, 0x7a,
|
||||
0x5a, 0x02, 0x44, 0xcd, 0x24, 0xd4, 0xa8, 0xb6, 0x1f, 0x4d, 0x16, 0x47, 0xd5, 0x24, 0xe5, 0xde,
|
||||
0x8a, 0xcd, 0x57, 0x12, 0x19, 0x45, 0x5d, 0x57, 0x43, 0x8b, 0x09, 0x07, 0xa2, 0x30, 0xed, 0x3e,
|
||||
0x47, 0xa9, 0xbd, 0x3f, 0x29, 0x15, 0x48, 0xaa, 0x15, 0xa8, 0x00, 0x63, 0x08, 0xe7, 0xf1, 0xa8,
|
||||
0x59, 0x3e, 0x27, 0xf9, 0xfa, 0x55, 0xef, 0x28, 0x02, 0x66, 0xa3, 0xf1, 0x01, 0x62, 0x12, 0xdb,
|
||||
0x29, 0x21, 0xe8, 0x0a, 0xe9, 0xc5, 0xd8, 0x38, 0xa2, 0x40, 0x71, 0xac, 0x87, 0x3f, 0xe8, 0x24,
|
||||
0x5e, 0x2e, 0x87, 0x7d, 0x46, 0x6f, 0x69, 0xeb, 0x7c, 0x87, 0xdd, 0x91, 0x76, 0xf3, 0x1d, 0x38,
|
||||
0x47, 0x6e, 0xbf, 0xa9, 0xf2, 0x87, 0xa6, 0x99, 0xb7, 0xd4, 0x63, 0x49, 0x02, 0xd2, 0x2b, 0x84,
|
||||
0x3c, 0x57, 0x57, 0x14, 0xc8, 0x4a, 0xbf, 0x02, 0xf0, 0x4e, 0xdf, 0x7f, 0x56, 0xd7, 0x64, 0x6d,
|
||||
0xf6, 0x5c, 0x15, 0x59, 0x33, 0xb6, 0x43, 0xdc, 0xa2, 0xa2, 0xe7, 0x62, 0x16, 0x60, 0x63, 0x5e,
|
||||
0x21, 0x54, 0x01, 0xee, 0x70, 0x04, 0xde, 0xd4, 0xaa, 0x9e, 0x02, 0x3b, 0x13, 0xbf, 0x1c, 0xdf,
|
||||
0x44, 0x72, 0x02, 0x18, 0xa0, 0x29, 0x75, 0xb9, 0xc1, 0x47, 0x07, 0xa5, 0xba, 0xf2, 0x25, 0xbf,
|
||||
0xc4, 0x93, 0x7e, 0xad, 0x51, 0x93, 0xd5, 0x33, 0xec, 0x78, 0x24, 0x6d, 0xe1, 0xdd, 0x94, 0xa2,
|
||||
0x3f, 0x56, 0xad, 0x47, 0xde, 0x9d, 0x5b, 0x6a, 0x47, 0xce, 0x60, 0xaf, 0x33, 0x32, 0x4f, 0x5a,
|
||||
0xfd, 0xf1, 0x98, 0x1c, 0x2b, 0x46, 0x0d, 0xa8, 0x84, 0xec, 0xbe, 0x4a, 0x7f, 0x08, 0x25, 0x27,
|
||||
0xfc, 0xeb, 0xa6, 0xdf, 0xbd, 0xfa, 0x5d, 0xd3, 0x2d, 0x7c, 0xbc, 0x08, 0xa0, 0xf4, 0xf2, 0x4b,
|
||||
0x84, 0x11, 0x82, 0x1c, 0x0b, 0x22, 0xe1, 0x05, 0x30, 0x29, 0xdf, 0xb9, 0xb0, 0xd0, 0xe6, 0x1c,
|
||||
0x99, 0x7f, 0x9b, 0x4e, 0xfd, 0x97, 0x83, 0xc8, 0xc3, 0x84, 0xcb, 0x72, 0xa0, 0x42, 0xc1, 0xff,
|
||||
0x23, 0xd3, 0xeb, 0x80, 0x2a, 0x36, 0x75, 0x02, 0xff, 0x73, 0xe9, 0x52, 0xec, 0xcf, 0xd9, 0xb6,
|
||||
0xfa, 0x42, 0x21, 0x93, 0xde, 0xfc, 0x9f, 0x04, 0x0d, 0xf2, 0x91, 0xee, 0x19, 0x8b, 0x93, 0x1f,
|
||||
0xe3, 0x76, 0xb5, 0xa4, 0xac, 0xc5, 0x6c, 0xae, 0x47, 0x2c, 0x73, 0x4b, 0x08, 0xa4, 0xeb, 0xa2,
|
||||
0x93, 0x50, 0x3b, 0xd5, 0x34, 0xa1, 0x4e, 0x93, 0x5b, 0x92, 0x53, 0x22, 0xd5, 0xbb, 0x08, 0x3c,
|
||||
0xfd, 0x2e, 0xc1, 0x60, 0x08, 0x93, 0xac, 0xe9, 0xe0, 0x77, 0x23, 0x39, 0xd1, 0x7f, 0x72, 0x4f,
|
||||
0x4e, 0x54, 0xf1, 0xd9, 0xa9, 0x98, 0xfa, 0x93, 0xdc, 0xef, 0x40, 0x7a, 0xe4, 0xbf, 0xc1, 0x44,
|
||||
0x93, 0x8a, 0x7c, 0xac, 0xbb, 0xf5, 0x06, 0x32, 0x7b, 0x6e, 0xf7, 0x61, 0xf6, 0xb8, 0xbc, 0xda,
|
||||
0x13, 0x9b, 0x28, 0x52, 0xb5, 0xd1, 0x0f, 0x32, 0x5e, 0xff, 0xb7, 0x1c, 0xbb, 0x19, 0x42, 0x5c,
|
||||
0x6a, 0x21, 0x22, 0x61, 0x60, 0x4b, 0x3a, 0xb2, 0x29, 0xfa, 0x99, 0x1d, 0x8c, 0x00, 0x11, 0xfc,
|
||||
0x3b, 0xc3, 0x59, 0x2d, 0x0b, 0xee, 0x22, 0x43, 0xdb, 0x74, 0x85, 0xab, 0x0f, 0xba, 0x35, 0x20,
|
||||
0x53, 0x8a, 0xb9, 0xf5, 0x27, 0xcd, 0x5a, 0x1d, 0xab, 0x52, 0x05, 0xde, 0x32, 0x61, 0xc8, 0x28,
|
||||
0x3c, 0x93, 0xa9, 0xb6, 0xaa, 0xf1, 0xe6, 0x6c, 0x32, 0xb7, 0xa4, 0x45, 0x52, 0x6c, 0xff, 0xc1,
|
||||
0x42, 0xdd, 0xef, 0xf1, 0xc1, 0x72, 0xc5, 0x83, 0xde, 0xf9, 0xbd, 0xc2, 0xd9, 0xf7, 0x38, 0x82,
|
||||
0xe6, 0x5b, 0x9c, 0xc7, 0x49, 0x07, 0x39, 0xa0, 0x64, 0xc6, 0x2e, 0x04, 0xf4, 0xdd, 0xba, 0x49,
|
||||
0x57, 0xba, 0xdd, 0x6b, 0x50, 0xc6, 0x4a, 0x13, 0xd8, 0x79, 0x0e, 0x28, 0x20, 0xdd, 0x20, 0xd6,
|
||||
0xc1, 0x21, 0x84, 0x62, 0xaf, 0x6a, 0x07, 0x0c, 0x76, 0x8e, 0x8c, 0x95, 0x3b, 0x77, 0x9c, 0x73,
|
||||
0x2d, 0xe4, 0xff, 0x75, 0x6f, 0x87, 0xec, 0xf2, 0x69, 0x5c, 0xae, 0xd4, 0x94, 0x61, 0x21, 0x68,
|
||||
0x83, 0xbf, 0x55, 0x39, 0x41, 0x53, 0x59, 0x69, 0x1a, 0x57, 0xe6, 0x9b, 0x08, 0xc0, 0x63, 0x0f,
|
||||
0xb2, 0x73, 0x2e, 0xee, 0xe2, 0xd6, 0xe6, 0xd9, 0x9d, 0xf1, 0xcb, 0xff, 0xc2, 0x21, 0x2e, 0x79,
|
||||
0xc8, 0xcd, 0x2a, 0xb4, 0xf8, 0x05, 0x2a, 0xcf, 0x0b, 0xd2, 0xbd, 0xea, 0x1d, 0x33, 0x37, 0xcf,
|
||||
0x5b, 0x17, 0x73, 0xf5, 0xa1, 0xa0, 0x95, 0xe4, 0x31, 0xed, 0x7e, 0x46, 0x7f, 0xb3, 0x86, 0xdb,
|
||||
0xab, 0x83, 0xd3, 0x0b, 0x49, 0x24, 0xf6, 0xbb, 0x4d, 0x9e, 0xf0, 0x85, 0x1f, 0x3c, 0xd2, 0x18,
|
||||
0xc4, 0x84, 0x41, 0xaf, 0x95, 0x20, 0xe2, 0xbd, 0xc1, 0x2d, 0xb9, 0xe4, 0xd3, 0xb2, 0x2c, 0xa6,
|
||||
0x85, 0xe9, 0x54, 0x7d, 0x2a, 0x24, 0xa5, 0xb9, 0xae, 0xf0, 0x6e, 0xdb, 0x49, 0x44, 0xfd, 0xe8,
|
||||
0x79, 0xa8, 0xca, 0x7f, 0xd2, 0x52, 0x2f, 0xca, 0x75, 0x91, 0x01, 0x7e, 0x16, 0x88, 0x16, 0x37,
|
||||
0xd1, 0x20, 0x1f, 0x13, 0x54, 0x7b, 0x77, 0x7f, 0xee, 0x84, 0x9e, 0xec, 0x6c, 0xd9, 0x5d, 0x2b,
|
||||
0xb1, 0x88, 0x59, 0xb5, 0x36, 0x7e, 0x1e, 0xa7, 0x87, 0x28, 0xbc, 0x7a, 0x7c, 0xdc, 0x8d, 0xeb,
|
||||
0x7b, 0x92, 0x10, 0x3f, 0x65, 0xfd, 0x79, 0x9d, 0x23, 0xdc, 0x7e, 0x31, 0xad, 0xbe, 0x62, 0xb7,
|
||||
0x29, 0xdd, 0x22, 0x2f, 0xbf, 0x3e, 0x15, 0xa9, 0x7e, 0xf7, 0x2a, 0xea, 0x07, 0xe1, 0x83, 0x57,
|
||||
0x7f, 0x59, 0x1a, 0x08, 0x18, 0x45, 0xea, 0x34, 0x07, 0x97, 0xb7, 0x9c, 0x6c, 0x87, 0x42, 0xe8,
|
||||
0x82, 0x6a, 0x6d, 0x7d, 0xf7, 0x73, 0xec, 0x85, 0x64, 0x02, 0x5f, 0xbb, 0x57, 0x0b, 0xfb, 0xc0,
|
||||
0x01, 0x74, 0x0e, 0x34, 0x37, 0x38, 0x4d, 0xf6, 0x32, 0x4c, 0x76, 0x05, 0x52, 0x6d, 0x9a, 0x63,
|
||||
0x0a, 0x5d, 0x44, 0x83, 0xf1,
|
||||
};
|
||||
|
||||
/* db_write_enable: 1765 bytes */
|
||||
static const guint8 db_write_enable_0090[] = {
|
||||
0x06, 0x02, 0x00, 0x00, 0x01, 0x5d, 0xdf, 0x5d, 0x76, 0xa8, 0xe3, 0xba, 0xb8, 0xb1, 0x0d, 0x9f,
|
||||
0x82, 0xf0, 0xb3, 0x16, 0x52, 0xd5, 0xb2, 0x08, 0xdf, 0xf1, 0xd2, 0x07, 0x45, 0xb7, 0xc5, 0x44,
|
||||
0x2e, 0x09, 0xdb, 0x88, 0x0c, 0x80, 0xca, 0x10, 0x3d, 0x5b, 0x20, 0x71, 0xd8, 0xbd, 0xca, 0xab,
|
||||
0x45, 0x2b, 0x90, 0x0d, 0x17, 0x85, 0xbe, 0x2d, 0xe4, 0x78, 0x66, 0x9e, 0x72, 0xa9, 0xd0, 0x82,
|
||||
0x27, 0x3f, 0x0f, 0x61, 0x76, 0xb7, 0x00, 0xff, 0xb6, 0x5a, 0x02, 0x6a, 0xf0, 0x52, 0xe7, 0x6d,
|
||||
0xe5, 0xf9, 0xe2, 0x47, 0xe9, 0x94, 0xbe, 0xd7, 0xc7, 0x9e, 0x34, 0x81, 0x5b, 0x46, 0x5a, 0x80,
|
||||
0x70, 0xa7, 0x6d, 0xa7, 0xd3, 0x65, 0x52, 0x5d, 0x72, 0x85, 0xdf, 0xb1, 0x52, 0xd2, 0x4c, 0x73,
|
||||
0x2a, 0x47, 0x1f, 0x03, 0x1d, 0x22, 0xeb, 0xb6, 0x7d, 0x6e, 0x27, 0xbf, 0xff, 0x74, 0xb3, 0xab,
|
||||
0x1c, 0x47, 0x80, 0x46, 0x1a, 0x46, 0x0c, 0x0e, 0xa5, 0x71, 0x0f, 0xbd, 0x32, 0xab, 0x59, 0xa6,
|
||||
0xca, 0x9c, 0xa3, 0xe3, 0xe2, 0x42, 0x64, 0x64, 0x0b, 0x15, 0x24, 0x5a, 0x6c, 0x48, 0xb6, 0xbd,
|
||||
0x20, 0xc6, 0x84, 0x8c, 0x23, 0x07, 0xe8, 0x54, 0xaf, 0x75, 0xb0, 0x59, 0xe8, 0x67, 0x93, 0xdc,
|
||||
0x7a, 0x30, 0x47, 0x4a, 0x1b, 0x1b, 0x54, 0x84, 0xc5, 0x8d, 0xc5, 0xa4, 0x53, 0x5e, 0xb7, 0x19,
|
||||
0x11, 0xbf, 0x9b, 0x10, 0xf8, 0x2c, 0x27, 0x36, 0x2d, 0x68, 0xb4, 0xba, 0xa1, 0xac, 0xe6, 0x3a,
|
||||
0x33, 0xb7, 0xcf, 0x3d, 0xe6, 0x16, 0x81, 0x0e, 0xe5, 0x03, 0x36, 0x01, 0xfe, 0xbb, 0xcc, 0x08,
|
||||
0xb0, 0xf5, 0x51, 0x66, 0xf4, 0xca, 0x08, 0xd4, 0x2d, 0x33, 0x61, 0x42, 0x67, 0x12, 0xf7, 0xe5,
|
||||
0xa4, 0x84, 0x2e, 0x9d, 0x2e, 0x90, 0x6c, 0x87, 0xe4, 0xc5, 0xc6, 0x69, 0x4e, 0xec, 0x44, 0x8c,
|
||||
0x10, 0x9a, 0xbe, 0x32, 0x38, 0x12, 0x8f, 0xbb, 0xb8, 0xb8, 0xf3, 0x83, 0xe3, 0xb6, 0x61, 0x33,
|
||||
0xf0, 0xc9, 0xd3, 0x8c, 0xa5, 0x35, 0xd4, 0x7e, 0xe9, 0xdd, 0x88, 0x41, 0xfc, 0xb2, 0x05, 0x51,
|
||||
0x04, 0x52, 0xbd, 0x0f, 0x73, 0x3d, 0x41, 0x6b, 0x6c, 0x76, 0x3f, 0x0b, 0x7a, 0x64, 0x7e, 0x19,
|
||||
0x92, 0xed, 0xe7, 0x14, 0xb6, 0xc4, 0x56, 0x9d, 0xe3, 0x29, 0x44, 0x05, 0x49, 0xa5, 0xa1, 0xf6,
|
||||
0x64, 0x6d, 0xc8, 0x8b, 0x08, 0x28, 0x8f, 0xc6, 0xf9, 0xc4, 0xf5, 0x5d, 0x90, 0xcc, 0xc8, 0x64,
|
||||
0x87, 0xaf, 0x19, 0x5e, 0xd6, 0x35, 0xe4, 0xc9, 0xa5, 0xa2, 0xdf, 0x5d, 0xf3, 0xbc, 0x4e, 0x39,
|
||||
0xff, 0x0a, 0xd6, 0xbc, 0x70, 0xa5, 0x4d, 0x14, 0x2a, 0x01, 0xba, 0x9e, 0xf2, 0x28, 0x39, 0x85,
|
||||
0x9e, 0xa1, 0xcb, 0x9b, 0x22, 0x7c, 0xf9, 0x40, 0x7a, 0x9f, 0x61, 0xb3, 0xcf, 0x82, 0x73, 0x54,
|
||||
0x9d, 0x75, 0x9c, 0x3f, 0xfb, 0x6d, 0xb4, 0xb3, 0x3b, 0xf9, 0xa4, 0x0f, 0x6d, 0xe2, 0x68, 0x0c,
|
||||
0xde, 0x8a, 0xd0, 0x11, 0x58, 0xed, 0x1c, 0x67, 0x71, 0xbb, 0xa9, 0xfb, 0xe2, 0x30, 0xc9, 0xe9,
|
||||
0xb8, 0xa4, 0xed, 0xff, 0x94, 0x1f, 0x43, 0xc4, 0xe6, 0x29, 0x09, 0x7c, 0x61, 0x49, 0xa5, 0xac,
|
||||
0x13, 0xeb, 0xe7, 0x57, 0xb4, 0x3a, 0x52, 0xaf, 0x3f, 0x26, 0x3f, 0x8a, 0xa3, 0x6e, 0xc6, 0x99,
|
||||
0x89, 0xc6, 0x25, 0x39, 0xb6, 0x56, 0xa4, 0x9d, 0xfd, 0xb1, 0x4e, 0xa0, 0x66, 0xff, 0xec, 0x20,
|
||||
0x3c, 0x41, 0x41, 0x1d, 0xe2, 0x92, 0x51, 0xbc, 0x40, 0xf7, 0x58, 0x60, 0x97, 0x68, 0x34, 0xac,
|
||||
0xf3, 0x68, 0xdb, 0x99, 0x1d, 0x0c, 0x88, 0xcc, 0x5d, 0x9f, 0x82, 0x29, 0xbe, 0x69, 0x1f, 0x55,
|
||||
0xc1, 0xdc, 0x29, 0x8d, 0xd0, 0x69, 0x0a, 0xa0, 0x9f, 0x46, 0xa7, 0xa0, 0xdc, 0xb9, 0x29, 0x09,
|
||||
0xa6, 0x54, 0xa5, 0x4c, 0xb5, 0x84, 0xed, 0x65, 0x28, 0x02, 0x36, 0xbf, 0x36, 0x8a, 0xb2, 0xae,
|
||||
0x90, 0x90, 0x86, 0xdc, 0xba, 0xfa, 0x6f, 0xbe, 0x26, 0x55, 0x6c, 0xd7, 0x24, 0xee, 0x9e, 0x6b,
|
||||
0x7b, 0x3c, 0xe2, 0x29, 0x0c, 0x5c, 0xb8, 0x32, 0xbd, 0x43, 0x01, 0x66, 0x04, 0x7a, 0xb2, 0x28,
|
||||
0x1c, 0x55, 0xe7, 0xd9, 0xd2, 0x96, 0x37, 0xbb, 0xad, 0xfa, 0x40, 0xb4, 0xb9, 0xa5, 0x00, 0x8e,
|
||||
0x86, 0x23, 0x9a, 0x59, 0x98, 0xd3, 0x9a, 0x5d, 0xda, 0x6c, 0xfe, 0xb7, 0xd0, 0xbf, 0xf1, 0x0b,
|
||||
0xf5, 0x6c, 0x52, 0x38, 0x78, 0xdb, 0x6d, 0xe8, 0x1b, 0x7e, 0xd8, 0x24, 0xfd, 0xfd, 0xd9, 0x51,
|
||||
0x5f, 0x5d, 0x49, 0x03, 0x45, 0xb4, 0x71, 0x72, 0xbd, 0xc9, 0xdb, 0x6b, 0xbb, 0x10, 0xf1, 0x9d,
|
||||
0x39, 0xf0, 0x61, 0xfb, 0xe5, 0x3c, 0x33, 0x97, 0xdc, 0xb8, 0xfe, 0x30, 0xd5, 0xca, 0x03, 0x2c,
|
||||
0xcf, 0x2d, 0x26, 0x18, 0x46, 0x35, 0xb6, 0x91, 0x70, 0x5b, 0x47, 0x1d, 0x81, 0xdc, 0x86, 0xee,
|
||||
0x31, 0xf1, 0x44, 0x51, 0x20, 0x72, 0xd9, 0xef, 0x75, 0x59, 0xe9, 0xef, 0x9d, 0xb8, 0xa0, 0x8f,
|
||||
0xea, 0x98, 0xab, 0xb6, 0x70, 0x68, 0x33, 0xa9, 0x68, 0x48, 0x55, 0x57, 0x8e, 0xc0, 0x4b, 0x72,
|
||||
0xae, 0x1b, 0xc4, 0xe5, 0x59, 0xc8, 0x7d, 0xc1, 0xdc, 0xba, 0xc3, 0x11, 0x5c, 0x2c, 0x66, 0x97,
|
||||
0xcd, 0xb4, 0x57, 0x62, 0x40, 0x28, 0x36, 0x58, 0x0f, 0x29, 0x33, 0x0c, 0xb0, 0xfe, 0x8e, 0x41,
|
||||
0x16, 0xbd, 0xcd, 0x4d, 0xa6, 0x03, 0x08, 0x2c, 0xa4, 0x20, 0xf5, 0xde, 0x71, 0xb9, 0x26, 0x57,
|
||||
0xc5, 0xa6, 0xca, 0x96, 0xf5, 0x1e, 0x6e, 0xd9, 0x94, 0x5f, 0xfd, 0x39, 0xe9, 0xc7, 0x94, 0x41,
|
||||
0xba, 0x5c, 0xba, 0x40, 0xb2, 0xc0, 0x9a, 0xf4, 0xd1, 0x6c, 0x3d, 0x79, 0x57, 0xa2, 0xd8, 0xab,
|
||||
0x74, 0x69, 0x81, 0x9c, 0x0c, 0x6d, 0xd1, 0x77, 0xe3, 0xe7, 0xde, 0xa2, 0x24, 0x0a, 0x1d, 0x96,
|
||||
0x75, 0x6b, 0x5f, 0xde, 0x20, 0x75, 0x43, 0x16, 0x74, 0x17, 0xa7, 0x4e, 0x70, 0x2d, 0xf1, 0x78,
|
||||
0x1f, 0x65, 0x16, 0x5c, 0x4e, 0xd7, 0xbc, 0x99, 0x3e, 0x72, 0x78, 0x9a, 0xf0, 0x3c, 0x2c, 0xdc,
|
||||
0xda, 0xa7, 0xb5, 0x58, 0x42, 0x3f, 0xd0, 0x64, 0x32, 0x8d, 0x57, 0xf2, 0xec, 0x9a, 0x8a, 0xb2,
|
||||
0xbc, 0xa9, 0xbd, 0xa6, 0xf6, 0x25, 0xe1, 0x03, 0xa7, 0x9a, 0x12, 0x56, 0x16, 0x75, 0xe0, 0x5b,
|
||||
0x44, 0x8f, 0x5d, 0xec, 0x75, 0x54, 0x64, 0x9f, 0xb1, 0x0e, 0xe3, 0xd2, 0x85, 0x99, 0x30, 0x6d,
|
||||
0xe1, 0x9f, 0x63, 0xce, 0x50, 0xe4, 0xc3, 0x46, 0xca, 0xbf, 0xf9, 0xf5, 0xcc, 0xd3, 0x60, 0x72,
|
||||
0x83, 0x16, 0x64, 0xc3, 0x08, 0xe6, 0x31, 0x84, 0xcb, 0xf3, 0x1e, 0x55, 0x41, 0xf4, 0x6e, 0x01,
|
||||
0x50, 0x0d, 0x6e, 0xd0, 0x45, 0xd7, 0xd4, 0x4e, 0xb8, 0x08, 0x73, 0x55, 0xc5, 0xbd, 0x5a, 0x65,
|
||||
0xc5, 0x8c, 0x70, 0x5b, 0x52, 0x99, 0xe5, 0x2c, 0xeb, 0xcb, 0xc7, 0x92, 0x54, 0xd2, 0x0b, 0x68,
|
||||
0x35, 0xc7, 0x6c, 0xfd, 0x47, 0xd9, 0x9f, 0x9b, 0x1f, 0x4a, 0x96, 0x16, 0x92, 0x49, 0xa5, 0xe2,
|
||||
0x8d, 0x6c, 0xa7, 0x53, 0xef, 0xdb, 0x8a, 0x00, 0x8e, 0xdf, 0xfe, 0x2a, 0x7f, 0x68, 0xae, 0x23,
|
||||
0xbb, 0x7d, 0x6f, 0x84, 0xf4, 0x07, 0x51, 0xf0, 0x23, 0x22, 0x51, 0xd4, 0xad, 0x4d, 0xed, 0xf0,
|
||||
0xfb, 0x4b, 0x8b, 0x5f, 0x8f, 0xc4, 0x70, 0x1b, 0xc4, 0x57, 0x8c, 0xd8, 0xe1, 0xc4, 0xbb, 0x49,
|
||||
0x1d, 0x16, 0x19, 0x6e, 0x95, 0x2e, 0x0c, 0xe6, 0x84, 0xe6, 0x3c, 0xe9, 0xb6, 0x08, 0xef, 0x61,
|
||||
0x55, 0x10, 0x11, 0x32, 0x88, 0x66, 0x54, 0x5a, 0x69, 0x99, 0xe0, 0x88, 0x1f, 0xfc, 0x75, 0x8e,
|
||||
0x41, 0xb4, 0x51, 0xe1, 0xc2, 0xc8, 0xf5, 0x71, 0x29, 0x4e, 0xb1, 0xd5, 0x82, 0x81, 0x31, 0xaf,
|
||||
0x97, 0x35, 0x00, 0x3d, 0x00, 0x48, 0x82, 0x00, 0xdc, 0x3b, 0x9f, 0x6c, 0xb6, 0xa7, 0xd2, 0xbc,
|
||||
0x12, 0x39, 0x36, 0x7b, 0x37, 0x29, 0x14, 0xd4, 0xa3, 0xa3, 0xec, 0xaf, 0xc8, 0x93, 0x72, 0x49,
|
||||
0x7d, 0x96, 0x21, 0xc1, 0x62, 0x9c, 0x1a, 0xeb, 0x40, 0xd9, 0xb6, 0xf1, 0x7e, 0xfe, 0x1f, 0xdf,
|
||||
0x19, 0x58, 0x3a, 0xe2, 0x86, 0x7e, 0xfa, 0xf0, 0xc6, 0x82, 0xd5, 0x9e, 0xf7, 0x23, 0x97, 0xc7,
|
||||
0xd7, 0x09, 0xda, 0x80, 0x42, 0x5c, 0x30, 0xb9, 0x1b, 0x17, 0x16, 0x89, 0x30, 0x39, 0x20, 0x5b,
|
||||
0x9d, 0xc4, 0x6e, 0xf8, 0x97, 0x9a, 0xa5, 0xf8, 0x00, 0x4c, 0x6b, 0xb6, 0x98, 0xb3, 0x5c, 0x4b,
|
||||
0x60, 0x0b, 0x45, 0xcd, 0x9d, 0xfc, 0x2a, 0x92, 0x9f, 0xec, 0x37, 0xd3, 0x92, 0xce, 0x9e, 0x3b,
|
||||
0x83, 0x24, 0x07, 0x07, 0x22, 0x64, 0x02, 0xd8, 0x9b, 0xb0, 0x34, 0xc3, 0xa2, 0x30, 0x74, 0x13,
|
||||
0xba, 0x39, 0xeb, 0x1a, 0xfd, 0xca, 0xbb, 0xab, 0xe9, 0x74, 0x2f, 0xe2, 0xc6, 0x2a, 0xcb, 0x67,
|
||||
0x9a, 0x57, 0xee, 0x90, 0x3d, 0xe0, 0xa7, 0x88, 0xfe, 0xe1, 0x9d, 0x55, 0x0b, 0x78, 0xc4, 0xf2,
|
||||
0x09, 0x5e, 0x38, 0x87, 0x66, 0x72, 0x40, 0x61, 0xb3, 0x9a, 0x1e, 0x54, 0xc5, 0x85, 0xdd, 0xbc,
|
||||
0xe2, 0x38, 0xa3, 0x85, 0xe5, 0x0c, 0x4b, 0xa9, 0x86, 0x6c, 0x16, 0xea, 0x8f, 0x43, 0x8c, 0xc5,
|
||||
0x8a, 0xed, 0xac, 0xd6, 0xc2, 0x65, 0x2b, 0x0a, 0xb0, 0x84, 0x77, 0x94, 0xf8, 0x09, 0x68, 0xda,
|
||||
0xaf, 0x8a, 0x70, 0x42, 0x2c, 0x28, 0x54, 0x5c, 0xaf, 0x3e, 0x95, 0xc3, 0x8c, 0x54, 0xe1, 0x42,
|
||||
0xc8, 0xeb, 0xf2, 0x6d, 0x5b, 0x5a, 0xdc, 0xf9, 0x05, 0xd8, 0xf1, 0x05, 0xde, 0xf1, 0xdf, 0x70,
|
||||
0x99, 0x7c, 0xca, 0xf5, 0x9e, 0x25, 0x6e, 0x7b, 0x17, 0x8e, 0x4b, 0xc9, 0xee, 0x8d, 0x64, 0x37,
|
||||
0xf2, 0x3f, 0x59, 0xe7, 0xdc, 0xc8, 0xfb, 0x3f, 0x18, 0x76, 0x9f, 0xa6, 0x7b, 0xba, 0x0b, 0x47,
|
||||
0x91, 0xcf, 0x8c, 0x0a, 0x4e, 0x33, 0x07, 0x51, 0xe6, 0x71, 0xbe, 0x32, 0x35, 0xa9, 0xff, 0xd8,
|
||||
0x32, 0x72, 0xec, 0xeb, 0xaf, 0x2d, 0x3b, 0x91, 0xa9, 0x15, 0x99, 0xb1, 0xd4, 0xf8, 0x4a, 0xca,
|
||||
0x56, 0x60, 0xdc, 0xa2, 0x4a, 0xcf, 0xe5, 0xfa, 0x78, 0xe9, 0x5f, 0x94, 0x4b, 0x49, 0x30, 0xdb,
|
||||
0x9e, 0x81, 0xa6, 0xf3, 0xed, 0x23, 0xc9, 0x0b, 0x2a, 0x44, 0x6a, 0xd7, 0x83, 0x2b, 0x6f, 0x4b,
|
||||
0xd8, 0xe6, 0xb9, 0x32, 0x11, 0x6f, 0x4a, 0xed, 0xab, 0x50, 0x0a, 0x4d, 0xfe, 0x31, 0x1d, 0x54,
|
||||
0xb3, 0xff, 0x9d, 0xdd, 0x3c, 0x73, 0x81, 0x9b, 0x5c, 0x88, 0xa4, 0x7c, 0x87, 0xa1, 0x17, 0xc3,
|
||||
0xa0, 0x08, 0xe4, 0x93, 0x61, 0xba, 0x1a, 0xd4, 0x63, 0x2d, 0x38, 0xee, 0x4f, 0x2f, 0xd8, 0x82,
|
||||
0x2c, 0x07, 0x9a, 0x27, 0x8b, 0x49, 0x1e, 0xd5, 0xb9, 0x48, 0x8c, 0xdf, 0xff, 0x5e, 0xa4, 0x8d,
|
||||
0xbf, 0x8a, 0xee, 0x79, 0x3a, 0x2d, 0x2e, 0x83, 0x7a, 0x9f, 0x5f, 0xd1, 0x95, 0x83, 0x3c, 0x10,
|
||||
0x4d, 0xa3, 0x2c, 0x3a, 0x13, 0x63, 0xac, 0x84, 0x6d, 0x2a, 0x59, 0xff, 0xca, 0x0c, 0x3b, 0x12,
|
||||
0x93, 0x41, 0x50, 0x69, 0xdb, 0x5e, 0x45, 0x9e, 0xdf, 0x60, 0xd7, 0x04, 0xde, 0x47, 0x13, 0x8c,
|
||||
0x31, 0x5d, 0xf3, 0xa8, 0x44, 0x0b, 0x37, 0x8e, 0xe8, 0x8e, 0x1c, 0xdb, 0x88, 0x89, 0xb0, 0x8e,
|
||||
0x0c, 0xbe, 0xb4, 0xed, 0x98, 0x31, 0x1e, 0x52, 0x18, 0x36, 0x95, 0x35, 0xe0, 0x30, 0x62, 0x50,
|
||||
0x7d, 0x7c, 0x1d, 0x13, 0xb5, 0x22, 0xe3, 0xee, 0xc0, 0x20, 0xff, 0xd4, 0xcb, 0x1b, 0x22, 0x97,
|
||||
0x76, 0x0a, 0xdb, 0x4e, 0xf7, 0xc7, 0x6a, 0x5f, 0xd2, 0xe7, 0x8a, 0x60, 0xbe, 0xe3, 0xcf, 0x24,
|
||||
0x6f, 0x24, 0x8f, 0xad, 0x7f, 0xe6, 0xfa, 0x8e, 0x9c, 0x65, 0xb5, 0x25, 0x15, 0xa7, 0xce, 0x73,
|
||||
0xc4, 0x7c, 0x20, 0xc0, 0x4c, 0x32, 0xf3, 0x77, 0xe1, 0xd0, 0xdd, 0xc2, 0x0e, 0x7e, 0x96, 0xf7,
|
||||
0xfe, 0xa5, 0x5f, 0xd8, 0x5d, 0x84, 0x56, 0x84, 0x9f, 0xfe, 0x4c, 0xc3, 0xc6, 0xa0, 0x3c, 0x5b,
|
||||
0x9f, 0x21, 0xd0, 0x55, 0xe4, 0xd4, 0x98, 0x93, 0x4b, 0xef, 0xf1, 0x4d, 0xee, 0xc1, 0xe7, 0x7f,
|
||||
0x85, 0x70, 0x04, 0xd9, 0x29, 0x40, 0x9e, 0x23, 0xe5, 0x4e, 0xb1, 0x9e, 0x72, 0xa7, 0x33, 0xa3,
|
||||
0xfb, 0x3a, 0xbd, 0x03, 0x5b, 0x72, 0xa4, 0xa4, 0xc2, 0x07, 0x68, 0x74, 0x06, 0x1b, 0xaa, 0x55,
|
||||
0x26, 0xe8, 0x55, 0xbe, 0x24, 0xb4, 0x13, 0x75, 0x8c, 0xdc, 0xbe, 0x11, 0x50, 0xbc, 0x91, 0x65,
|
||||
0x14, 0x25, 0x4e, 0xcb, 0x95, 0x84, 0x8f, 0xc7, 0x17, 0x71, 0x82, 0x65, 0xa6, 0x90, 0x19, 0x66,
|
||||
0xf2, 0x2c, 0x33, 0xdd, 0x6a, 0xe4, 0x8f, 0xf9, 0xcb, 0x57, 0x31, 0x44, 0x6a, 0xdd, 0xb3, 0xff,
|
||||
0x2e, 0xa1, 0x7b, 0x1c, 0x35, 0x86, 0xe5, 0x2a, 0xfa, 0x23, 0xbb, 0x44, 0xea, 0x6c, 0x2b, 0xec,
|
||||
0x06, 0x2c, 0x59, 0xad, 0xcb, 0x79, 0x17, 0x36, 0xaa, 0x2d, 0xa9, 0x5e, 0xb8, 0x44, 0x5a, 0x63,
|
||||
0x81, 0xf3, 0x94, 0x19, 0x17, 0xbe, 0xd7, 0xfc, 0xf0, 0x1a, 0xb1, 0x99, 0x22, 0x8e, 0xad, 0xd1,
|
||||
0x96, 0x88, 0x47, 0xe4, 0xb9, 0xa4, 0x00, 0x22, 0xd2, 0xb0, 0xec, 0x68, 0x31, 0x8a, 0xbf, 0x97,
|
||||
0xc6, 0xd4, 0x62, 0x86, 0xa5,
|
||||
};
|
||||
1084
libfprint/drivers/validity/validity_blobs_0097.inc
Normal file
1084
libfprint/drivers/validity/validity_blobs_0097.inc
Normal file
File diff suppressed because it is too large
Load diff
1084
libfprint/drivers/validity/validity_blobs_009a.inc
Normal file
1084
libfprint/drivers/validity/validity_blobs_009a.inc
Normal file
File diff suppressed because it is too large
Load diff
1084
libfprint/drivers/validity/validity_blobs_009d.inc
Normal file
1084
libfprint/drivers/validity/validity_blobs_009d.inc
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -29,11 +29,9 @@
|
|||
#include "fpi-byte-reader.h"
|
||||
#include "fpi-byte-utils.h"
|
||||
#include "validity_db.h"
|
||||
#include "validity_hal.h"
|
||||
#include "vcsfw_protocol.h"
|
||||
|
||||
/* Include the db_write_enable blob for 009a */
|
||||
#include "validity_blob_dbe_009a.inc"
|
||||
|
||||
/* ================================================================
|
||||
* Structure cleanup helpers
|
||||
* ================================================================ */
|
||||
|
|
@ -780,8 +778,16 @@ validity_db_build_finger_data (guint16 subtype,
|
|||
* ================================================================ */
|
||||
|
||||
const guint8 *
|
||||
validity_db_get_write_enable_blob (gsize *out_len)
|
||||
validity_db_get_write_enable_blob (guint dev_type, gsize *out_len)
|
||||
{
|
||||
*out_len = sizeof (db_write_enable_009a);
|
||||
return db_write_enable_009a;
|
||||
const ValidityDeviceDesc *desc = validity_hal_device_lookup (dev_type);
|
||||
|
||||
if (!desc || !desc->db_write_enable || desc->db_write_enable_len == 0)
|
||||
{
|
||||
*out_len = 0;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
*out_len = desc->db_write_enable_len;
|
||||
return desc->db_write_enable;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -300,4 +300,4 @@ guint8 *validity_db_build_cmd_match_cleanup (gsize *out_len);
|
|||
* db_write_enable blob access
|
||||
* ================================================================ */
|
||||
|
||||
const guint8 *validity_db_get_write_enable_blob (gsize *out_len);
|
||||
const guint8 *validity_db_get_write_enable_blob (guint dev_type, gsize *out_len);
|
||||
|
|
|
|||
|
|
@ -354,7 +354,7 @@ enroll_run_state (FpiSsm *ssm,
|
|||
{
|
||||
/* Send db_write_enable blob before enrollment_update */
|
||||
gsize blob_len;
|
||||
const guint8 *blob = validity_db_get_write_enable_blob (&blob_len);
|
||||
const guint8 *blob = validity_db_get_write_enable_blob (self->dev_type, &blob_len);
|
||||
vcsfw_tls_cmd_send (self, ssm, blob, blob_len, NULL);
|
||||
}
|
||||
break;
|
||||
|
|
@ -504,7 +504,7 @@ enroll_run_state (FpiSsm *ssm,
|
|||
{
|
||||
/* Enable DB writes for storing the finger record */
|
||||
gsize blob_len;
|
||||
const guint8 *blob = validity_db_get_write_enable_blob (&blob_len);
|
||||
const guint8 *blob = validity_db_get_write_enable_blob (self->dev_type, &blob_len);
|
||||
vcsfw_tls_cmd_send (self, ssm, blob, blob_len, NULL);
|
||||
}
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@
|
|||
#include "fpi-byte-utils.h"
|
||||
#include "validity.h"
|
||||
#include "validity_fwext.h"
|
||||
#include "validity_hal.h"
|
||||
#include "vcsfw_protocol.h"
|
||||
|
||||
#include <gio/gio.h>
|
||||
|
|
@ -59,12 +60,7 @@ static const gchar *firmware_search_paths[] = {
|
|||
NULL,
|
||||
};
|
||||
|
||||
/* ---- db_write_enable blob for 06cb:009a (3621 bytes) ----
|
||||
* Opaque encrypted blob sent before each flash write.
|
||||
* The sensor firmware decrypts this internally.
|
||||
* Extracted from python-validity blobs_9a.py.
|
||||
* TODO: Iteration 6 (HAL) will consolidate blobs for all PIDs. */
|
||||
#include "validity_blob_dbe_009a.inc"
|
||||
/* db_write_enable blobs now live in HAL (validity_hal.c) */
|
||||
|
||||
/* ================================================================
|
||||
* Firmware info parsing
|
||||
|
|
@ -336,16 +332,16 @@ validity_fwext_get_db_write_enable (guint16 vid,
|
|||
guint16 pid,
|
||||
gsize *len)
|
||||
{
|
||||
/* Currently only 06cb:009a is supported.
|
||||
* Iteration 6 (HAL) will add blobs for all PIDs. */
|
||||
if (vid == 0x06cb && pid == 0x009a)
|
||||
const ValidityDeviceDesc *desc = validity_hal_device_lookup_by_pid (vid, pid);
|
||||
|
||||
if (!desc || !desc->db_write_enable || desc->db_write_enable_len == 0)
|
||||
{
|
||||
*len = sizeof (db_write_enable_009a);
|
||||
return db_write_enable_009a;
|
||||
*len = 0;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
*len = 0;
|
||||
return NULL;
|
||||
*len = desc->db_write_enable_len;
|
||||
return desc->db_write_enable;
|
||||
}
|
||||
|
||||
/* ================================================================
|
||||
|
|
|
|||
171
libfprint/drivers/validity/validity_hal.c
Normal file
171
libfprint/drivers/validity/validity_hal.c
Normal file
|
|
@ -0,0 +1,171 @@
|
|||
/*
|
||||
* Hardware Abstraction Layer for Validity/Synaptics VCSFW fingerprint sensors
|
||||
*
|
||||
* Per-device blob data, flash partition layouts, and pairing constants.
|
||||
*
|
||||
* Copyright (C) 2024 libfprint contributors
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#define FP_COMPONENT "validity"
|
||||
|
||||
#include "validity_hal.h"
|
||||
#include "fpi-log.h"
|
||||
|
||||
/* ================================================================
|
||||
* Include auto-generated blob data for each PID
|
||||
* ================================================================ */
|
||||
|
||||
#include "validity_blobs_0090.inc"
|
||||
#include "validity_blobs_0097.inc"
|
||||
#include "validity_blobs_009a.inc"
|
||||
#include "validity_blobs_009d.inc"
|
||||
|
||||
/* ================================================================
|
||||
* Include pairing constants (partition signatures, CA cert, keys)
|
||||
* ================================================================ */
|
||||
|
||||
#include "validity_pair_constants.inc"
|
||||
|
||||
/* ================================================================
|
||||
* Flash partition layouts
|
||||
*
|
||||
* Standard layout: used by PID 0097, 009a, 009d
|
||||
* Partition 4 (template DB) = 0x80000 bytes
|
||||
*
|
||||
* PID 0090 layout: smaller DB partition
|
||||
* Partition 4 (template DB) = 0x30000 bytes
|
||||
* ================================================================ */
|
||||
|
||||
/* Standard partition table (0097, 009a, 009d) */
|
||||
static const ValidityPartition flash_partitions_standard[] = {
|
||||
{ .id = 1, .type = 4, .access_lvl = 7, .offset = 0x00001000, .size = 0x00001000 }, /* cert store */
|
||||
{ .id = 2, .type = 1, .access_lvl = 2, .offset = 0x00002000, .size = 0x0003e000 }, /* xpfwext */
|
||||
{ .id = 5, .type = 5, .access_lvl = 3, .offset = 0x00040000, .size = 0x00008000 }, /* reserved */
|
||||
{ .id = 6, .type = 6, .access_lvl = 3, .offset = 0x00048000, .size = 0x00008000 }, /* calibration */
|
||||
{ .id = 4, .type = 3, .access_lvl = 5, .offset = 0x00050000, .size = 0x00080000 }, /* template DB */
|
||||
};
|
||||
|
||||
/* PID 0090 partition table (smaller DB) */
|
||||
static const ValidityPartition flash_partitions_0090[] = {
|
||||
{ .id = 1, .type = 4, .access_lvl = 7, .offset = 0x00001000, .size = 0x00001000 }, /* cert store */
|
||||
{ .id = 2, .type = 1, .access_lvl = 2, .offset = 0x00002000, .size = 0x0003e000 }, /* xpfwext */
|
||||
{ .id = 5, .type = 5, .access_lvl = 3, .offset = 0x00040000, .size = 0x00008000 }, /* reserved */
|
||||
{ .id = 6, .type = 6, .access_lvl = 3, .offset = 0x00048000, .size = 0x00008000 }, /* calibration */
|
||||
{ .id = 4, .type = 3, .access_lvl = 5, .offset = 0x00050000, .size = 0x00030000 }, /* template DB */
|
||||
};
|
||||
|
||||
/* Layout descriptors */
|
||||
static const ValidityFlashLayout flash_layout_standard = {
|
||||
.partitions = flash_partitions_standard,
|
||||
.num_partitions = G_N_ELEMENTS (flash_partitions_standard),
|
||||
.partition_sig = partition_sig_standard,
|
||||
.partition_sig_len = sizeof (partition_sig_standard),
|
||||
};
|
||||
|
||||
static const ValidityFlashLayout flash_layout_0090 = {
|
||||
.partitions = flash_partitions_0090,
|
||||
.num_partitions = G_N_ELEMENTS (flash_partitions_0090),
|
||||
.partition_sig = partition_sig_0090,
|
||||
.partition_sig_len = sizeof (partition_sig_0090),
|
||||
};
|
||||
|
||||
/* ================================================================
|
||||
* Per-device descriptors
|
||||
* ================================================================ */
|
||||
|
||||
static const ValidityDeviceDesc device_table[] = {
|
||||
[VALIDITY_HAL_DEV_90] = {
|
||||
.vid = 0x138a,
|
||||
.pid = 0x0090,
|
||||
.init_hardcoded = init_hardcoded_0090,
|
||||
.init_hardcoded_len = sizeof (init_hardcoded_0090),
|
||||
.init_clean_slate = NULL, /* not available for this PID */
|
||||
.init_clean_slate_len = 0,
|
||||
.reset_blob = reset_blob_0090,
|
||||
.reset_blob_len = sizeof (reset_blob_0090),
|
||||
.db_write_enable = db_write_enable_0090,
|
||||
.db_write_enable_len = sizeof (db_write_enable_0090),
|
||||
.flash_layout = &flash_layout_0090,
|
||||
},
|
||||
|
||||
[VALIDITY_HAL_DEV_97] = {
|
||||
.vid = 0x138a,
|
||||
.pid = 0x0097,
|
||||
.init_hardcoded = init_hardcoded_0097,
|
||||
.init_hardcoded_len = sizeof (init_hardcoded_0097),
|
||||
.init_clean_slate = init_hardcoded_clean_slate_0097,
|
||||
.init_clean_slate_len = sizeof (init_hardcoded_clean_slate_0097),
|
||||
.reset_blob = reset_blob_0097,
|
||||
.reset_blob_len = sizeof (reset_blob_0097),
|
||||
.db_write_enable = db_write_enable_0097,
|
||||
.db_write_enable_len = sizeof (db_write_enable_0097),
|
||||
.flash_layout = &flash_layout_standard,
|
||||
},
|
||||
|
||||
[VALIDITY_HAL_DEV_9A] = {
|
||||
.vid = 0x06cb,
|
||||
.pid = 0x009a,
|
||||
.init_hardcoded = init_hardcoded_009a,
|
||||
.init_hardcoded_len = sizeof (init_hardcoded_009a),
|
||||
.init_clean_slate = init_hardcoded_clean_slate_009a,
|
||||
.init_clean_slate_len = sizeof (init_hardcoded_clean_slate_009a),
|
||||
.reset_blob = reset_blob_009a,
|
||||
.reset_blob_len = sizeof (reset_blob_009a),
|
||||
.db_write_enable = db_write_enable_009a,
|
||||
.db_write_enable_len = sizeof (db_write_enable_009a),
|
||||
.flash_layout = &flash_layout_standard,
|
||||
},
|
||||
|
||||
[VALIDITY_HAL_DEV_9D] = {
|
||||
.vid = 0x138a,
|
||||
.pid = 0x009d,
|
||||
.init_hardcoded = init_hardcoded_009d,
|
||||
.init_hardcoded_len = sizeof (init_hardcoded_009d),
|
||||
.init_clean_slate = init_hardcoded_clean_slate_009d,
|
||||
.init_clean_slate_len = sizeof (init_hardcoded_clean_slate_009d),
|
||||
.reset_blob = reset_blob_009d,
|
||||
.reset_blob_len = sizeof (reset_blob_009d),
|
||||
.db_write_enable = db_write_enable_009d,
|
||||
.db_write_enable_len = sizeof (db_write_enable_009d),
|
||||
.flash_layout = &flash_layout_standard,
|
||||
},
|
||||
};
|
||||
|
||||
/* ================================================================
|
||||
* Lookup functions
|
||||
* ================================================================ */
|
||||
|
||||
const ValidityDeviceDesc *
|
||||
validity_hal_device_lookup (guint dev_type)
|
||||
{
|
||||
if (dev_type >= G_N_ELEMENTS (device_table))
|
||||
return NULL;
|
||||
|
||||
return &device_table[dev_type];
|
||||
}
|
||||
|
||||
const ValidityDeviceDesc *
|
||||
validity_hal_device_lookup_by_pid (guint16 vid, guint16 pid)
|
||||
{
|
||||
for (gsize i = 0; i < G_N_ELEMENTS (device_table); i++)
|
||||
{
|
||||
if (device_table[i].vid == vid && device_table[i].pid == pid)
|
||||
return &device_table[i];
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
95
libfprint/drivers/validity/validity_hal.h
Normal file
95
libfprint/drivers/validity/validity_hal.h
Normal file
|
|
@ -0,0 +1,95 @@
|
|||
/*
|
||||
* Hardware Abstraction Layer for Validity/Synaptics VCSFW fingerprint sensors
|
||||
*
|
||||
* Per-device blob data, flash partition layouts, and pairing constants.
|
||||
*
|
||||
* Copyright (C) 2024 libfprint contributors
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <glib.h>
|
||||
|
||||
/* Forward declaration from validity.h */
|
||||
typedef enum {
|
||||
VALIDITY_HAL_DEV_90 = 0,
|
||||
VALIDITY_HAL_DEV_97,
|
||||
VALIDITY_HAL_DEV_9A,
|
||||
VALIDITY_HAL_DEV_9D,
|
||||
} ValidityHalDeviceType;
|
||||
|
||||
/* Flash partition entry — matches python-validity PartitionInfo:
|
||||
* id, type, access_lvl, offset, size */
|
||||
typedef struct
|
||||
{
|
||||
guint8 id;
|
||||
guint8 type;
|
||||
guint16 access_lvl;
|
||||
guint32 offset;
|
||||
guint32 size;
|
||||
} ValidityPartition;
|
||||
|
||||
/* Per-device flash layout with partition table and RSA signature */
|
||||
typedef struct
|
||||
{
|
||||
const ValidityPartition *partitions;
|
||||
gsize num_partitions;
|
||||
const guint8 *partition_sig;
|
||||
gsize partition_sig_len;
|
||||
} ValidityFlashLayout;
|
||||
|
||||
/* Per-device encrypted blobs and flash layout.
|
||||
* Some blobs may be NULL/0 if not available for the device. */
|
||||
typedef struct
|
||||
{
|
||||
guint16 vid;
|
||||
guint16 pid;
|
||||
|
||||
/* init_hardcoded — sent during USB init (cmd prefix) */
|
||||
const guint8 *init_hardcoded;
|
||||
gsize init_hardcoded_len;
|
||||
|
||||
/* init_hardcoded_clean_slate — clean calibration variant */
|
||||
const guint8 *init_clean_slate;
|
||||
gsize init_clean_slate_len;
|
||||
|
||||
/* reset_blob — sent before pairing to reset device state */
|
||||
const guint8 *reset_blob;
|
||||
gsize reset_blob_len;
|
||||
|
||||
/* db_write_enable — sent before database writes */
|
||||
const guint8 *db_write_enable;
|
||||
gsize db_write_enable_len;
|
||||
|
||||
/* Flash partition layout for this device variant */
|
||||
const ValidityFlashLayout *flash_layout;
|
||||
} ValidityDeviceDesc;
|
||||
|
||||
/* Number of flash partition entries in the standard layout */
|
||||
#define VALIDITY_FLASH_NUM_PARTITIONS 5
|
||||
|
||||
/* Partition signature size (RSA-2048) */
|
||||
#define VALIDITY_PARTITION_SIG_SIZE 256
|
||||
|
||||
/* Look up device descriptor by ValidityDeviceType enum.
|
||||
* Returns NULL if dev_type is out of range. */
|
||||
const ValidityDeviceDesc *validity_hal_device_lookup (guint dev_type);
|
||||
|
||||
/* Look up device descriptor by USB VID/PID.
|
||||
* Returns NULL if no matching entry. */
|
||||
const ValidityDeviceDesc *validity_hal_device_lookup_by_pid (guint16 vid,
|
||||
guint16 pid);
|
||||
1182
libfprint/drivers/validity/validity_pair.c
Normal file
1182
libfprint/drivers/validity/validity_pair.c
Normal file
File diff suppressed because it is too large
Load diff
314
libfprint/drivers/validity/validity_pair.h
Normal file
314
libfprint/drivers/validity/validity_pair.h
Normal file
|
|
@ -0,0 +1,314 @@
|
|||
/*
|
||||
* Device pairing for Validity/Synaptics VCSFW fingerprint sensors
|
||||
*
|
||||
* Handles pairing of uninitialized devices: flash partitioning,
|
||||
* ECDH key exchange, certificate creation, and TLS flash persistence.
|
||||
*
|
||||
* Copyright (C) 2024 libfprint contributors
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <glib.h>
|
||||
#include <openssl/evp.h>
|
||||
#include "validity_hal.h"
|
||||
|
||||
/* Forward declaration */
|
||||
typedef struct _FpiDeviceValidity FpiDeviceValidity;
|
||||
typedef struct _FpiSsm FpiSsm;
|
||||
|
||||
/* Flash IC parameters — returned by CMD 0x3e (GET_FLASH_INFO) */
|
||||
typedef struct
|
||||
{
|
||||
guint32 size;
|
||||
guint32 sector_size;
|
||||
guint8 sector_erase_cmd;
|
||||
} ValidityFlashIcParams;
|
||||
|
||||
/* Pairing state kept across SSM states */
|
||||
typedef struct
|
||||
{
|
||||
/* Flash IC params from CMD 0x3e */
|
||||
ValidityFlashIcParams flash_ic;
|
||||
guint16 num_partitions; /* 0 = needs pairing */
|
||||
|
||||
/* ECDH client key pair (generated during pairing) */
|
||||
EVP_PKEY *client_key;
|
||||
|
||||
/* Server certificate returned by partition_flash (CMD 0x4f) */
|
||||
guint8 *server_cert;
|
||||
gsize server_cert_len;
|
||||
|
||||
/* ECDH blob from CMD 0x50 (server's DH params) */
|
||||
guint8 *ecdh_blob;
|
||||
gsize ecdh_blob_len;
|
||||
|
||||
/* Encrypted private key blob (client → flash) */
|
||||
guint8 *priv_blob;
|
||||
gsize priv_blob_len;
|
||||
|
||||
/* Device descriptor for this PID */
|
||||
const ValidityDeviceDesc *dev_desc;
|
||||
|
||||
/* Flash erase progress counter */
|
||||
guint erase_step;
|
||||
} ValidityPairState;
|
||||
|
||||
/* Partition entry serialized format: 12 bytes data + 4 zero + 32 SHA-256 = 48 */
|
||||
#define VALIDITY_PARTITION_ENTRY_SIZE 48
|
||||
|
||||
/* Client certificate size */
|
||||
#define VALIDITY_CLIENT_CERT_SIZE 444
|
||||
|
||||
/* CMD 0x4f header IDs */
|
||||
#define VALIDITY_HDR_FLASH_IC 0
|
||||
#define VALIDITY_HDR_PARTITION_TABLE 1
|
||||
#define VALIDITY_HDR_CA_CERT 3
|
||||
#define VALIDITY_HDR_CLIENT_CERT 5
|
||||
|
||||
/* Encrypted private key format: 0x02 prefix + IV(16) + ciphertext(112) + HMAC(32) = 161 */
|
||||
#define VALIDITY_ENCRYPTED_KEY_PREFIX 0x02
|
||||
#define VALIDITY_ENCRYPTED_KEY_IV_SIZE 16
|
||||
#define VALIDITY_EC_COORD_SIZE 32
|
||||
|
||||
/* Flash partition IDs for erase during pairing */
|
||||
static const guint8 pair_erase_partition_ids[] = { 1, 2, 5, 6, 4 };
|
||||
#define VALIDITY_PAIR_NUM_ERASE_STEPS G_N_ELEMENTS (pair_erase_partition_ids)
|
||||
|
||||
/* ---- Helper functions (testable independently) ---- */
|
||||
|
||||
/**
|
||||
* validity_pair_serialize_partition:
|
||||
* @part: partition entry to serialize
|
||||
* @out: output buffer (must be at least VALIDITY_PARTITION_ENTRY_SIZE bytes)
|
||||
*
|
||||
* Serialize a partition entry to binary format:
|
||||
* [id:1][type:1][access_lvl:2LE][offset:4LE][size:4LE][zeros:4][SHA256:32]
|
||||
*/
|
||||
void validity_pair_serialize_partition (const ValidityPartition *part,
|
||||
guint8 *out);
|
||||
|
||||
/**
|
||||
* validity_pair_build_partition_flash_cmd:
|
||||
* @flash_ic: flash IC parameters from CMD 0x3e
|
||||
* @layout: flash layout for this device
|
||||
* @client_public_x: ECDH client public key X coordinate (32 bytes, little-endian)
|
||||
* @client_public_y: ECDH client public key Y coordinate (32 bytes, little-endian)
|
||||
* @out_len: output command length
|
||||
*
|
||||
* Build the CMD 0x4f (PARTITION_FLASH) payload:
|
||||
* [4f 0000 0000]
|
||||
* [hdr0: flash IC params]
|
||||
* [hdr1: partition table + RSA signature]
|
||||
* [hdr5: client certificate (444 bytes)]
|
||||
* [hdr3: CA certificate]
|
||||
*
|
||||
* Returns: newly allocated command buffer, free with g_free().
|
||||
*/
|
||||
guint8 *validity_pair_build_partition_flash_cmd (const ValidityFlashIcParams *flash_ic,
|
||||
const ValidityFlashLayout *layout,
|
||||
const guint8 *client_public_x,
|
||||
const guint8 *client_public_y,
|
||||
gsize *out_len);
|
||||
|
||||
/**
|
||||
* validity_pair_make_cert:
|
||||
* @client_public_x: ECDH client public key X (32 bytes, little-endian)
|
||||
* @client_public_y: ECDH client public key Y (32 bytes, little-endian)
|
||||
* @out_len: set to VALIDITY_CLIENT_CERT_SIZE on success
|
||||
*
|
||||
* Build a 444-byte client certificate with ECDSA signature.
|
||||
* The HS key is derived from the hardcoded password.
|
||||
*
|
||||
* Returns: newly allocated cert buffer, or NULL on error. Free with g_free().
|
||||
*/
|
||||
guint8 *validity_pair_make_cert (const guint8 *client_public_x,
|
||||
const guint8 *client_public_y,
|
||||
gsize *out_len);
|
||||
|
||||
/**
|
||||
* validity_pair_encrypt_key:
|
||||
* @client_private: ECDH client private key scalar (32 bytes, little-endian)
|
||||
* @client_public_x: ECDH client public key X (32 bytes, little-endian)
|
||||
* @client_public_y: ECDH client public key Y (32 bytes, little-endian)
|
||||
* @psk_encryption_key: PSK encryption key (32 bytes)
|
||||
* @psk_validation_key: PSK validation key (32 bytes)
|
||||
* @out_len: output blob length
|
||||
*
|
||||
* Encrypt the ECDH private key for flash storage:
|
||||
* plaintext = x(32) + y(32) + d(32) + PKCS7 padding
|
||||
* ciphertext = AES-256-CBC(psk_encryption_key, random_iv, plaintext)
|
||||
* blob = 0x02 + iv(16) + ciphertext + HMAC-SHA256(psk_validation_key, iv+ciphertext)
|
||||
*
|
||||
* Returns: newly allocated blob, or NULL on error. Free with g_free().
|
||||
*/
|
||||
guint8 *validity_pair_encrypt_key (const guint8 *client_private,
|
||||
const guint8 *client_public_x,
|
||||
const guint8 *client_public_y,
|
||||
const guint8 *psk_encryption_key,
|
||||
const guint8 *psk_validation_key,
|
||||
gsize *out_len);
|
||||
|
||||
/**
|
||||
* validity_pair_parse_flash_info:
|
||||
* @data: response payload from CMD 0x3e (after 2-byte status)
|
||||
* @data_len: length of payload
|
||||
* @ic_out: output flash IC params
|
||||
* @num_partitions_out: output number of existing partitions
|
||||
*
|
||||
* Parse GET_FLASH_INFO (CMD 0x3e) response.
|
||||
* If num_partitions_out is 0, device needs pairing.
|
||||
*
|
||||
* Returns: TRUE on success, FALSE on parse error.
|
||||
*/
|
||||
gboolean validity_pair_parse_flash_info (const guint8 *data,
|
||||
gsize data_len,
|
||||
ValidityFlashIcParams *ic_out,
|
||||
guint16 *num_partitions_out);
|
||||
|
||||
/**
|
||||
* validity_pair_state_init:
|
||||
* @state: pairing state to initialize
|
||||
*
|
||||
* Zero-initialize the pairing state.
|
||||
*/
|
||||
void validity_pair_state_init (ValidityPairState *state);
|
||||
|
||||
/**
|
||||
* validity_pair_state_free:
|
||||
* @state: pairing state to free
|
||||
*
|
||||
* Free any allocated resources in the pairing state.
|
||||
*/
|
||||
void validity_pair_state_free (ValidityPairState *state);
|
||||
|
||||
/* ================================================================
|
||||
* Pairing SSM
|
||||
*
|
||||
* The pairing SSM runs when an uninitialized device is detected
|
||||
* (CMD 0x3e returns 0 partitions). It formats the flash, exchanges
|
||||
* ECDH keys, establishes a TLS session, persists the TLS keys to
|
||||
* flash, and reboots the device.
|
||||
*
|
||||
* Phase 1 (pre-TLS, raw USB):
|
||||
* - GET_FLASH_INFO → check if pairing needed
|
||||
* - SEND_RESET_BLOB → reset device state
|
||||
* - GENERATE_KEYS → ECDH key generation
|
||||
* - PARTITION_FLASH → format flash + write certs (CMD 0x4f)
|
||||
* - RECV_PARTITION → parse server cert from response
|
||||
* - CMD50_SEND → request ECDH server params
|
||||
* - CMD50_RECV → parse ECDH blob + encrypt private key
|
||||
* - CLEANUPS_SEND → call cleanups (0x1a) after CMD 0x50
|
||||
* - CLEANUPS_RECV → receive cleanups response
|
||||
*
|
||||
* Phase 2 (TLS):
|
||||
* - TLS_HANDSHAKE → establish TLS session
|
||||
* - ERASE_DBE_SEND → send db_write_enable before erase
|
||||
* - ERASE_DBE_RECV → receive dbe response
|
||||
* - ERASE_SEND → erase partition (CMD 0x3f)
|
||||
* - ERASE_RECV → receive erase response
|
||||
* - ERASE_CLEAN_SEND → call cleanups after erase
|
||||
* - ERASE_CLEAN_RECV → receive cleanups response
|
||||
* - ERASE_LOOP → loop over 5 partitions
|
||||
* - WRITE_DBE_SEND → send db_write_enable before write
|
||||
* - WRITE_DBE_RECV → receive dbe response
|
||||
* - WRITE_FLASH_SEND → write TLS flash (CMD 0x41)
|
||||
* - WRITE_FLASH_RECV → receive write response
|
||||
* - WRITE_CLEAN_SEND → call cleanups after write
|
||||
* - WRITE_CLEAN_RECV → receive cleanups response
|
||||
* - REBOOT_SEND → reboot device (0x05 0x02 0x00)
|
||||
* - REBOOT_RECV → receive reboot response
|
||||
* - DONE → pairing complete
|
||||
* ================================================================ */
|
||||
|
||||
typedef enum {
|
||||
PAIR_GET_FLASH_INFO = 0,
|
||||
PAIR_GET_FLASH_INFO_RECV,
|
||||
PAIR_CHECK_NEEDED,
|
||||
PAIR_SEND_RESET_BLOB,
|
||||
PAIR_SEND_RESET_BLOB_RECV,
|
||||
PAIR_GENERATE_KEYS,
|
||||
PAIR_PARTITION_FLASH_SEND,
|
||||
PAIR_PARTITION_FLASH_RECV,
|
||||
PAIR_CMD50_SEND,
|
||||
PAIR_CMD50_RECV,
|
||||
PAIR_CMD50_PROCESS,
|
||||
PAIR_CLEANUPS_SEND,
|
||||
PAIR_CLEANUPS_RECV,
|
||||
PAIR_TLS_HANDSHAKE,
|
||||
PAIR_ERASE_DBE_SEND,
|
||||
PAIR_ERASE_DBE_RECV,
|
||||
PAIR_ERASE_SEND,
|
||||
PAIR_ERASE_RECV,
|
||||
PAIR_ERASE_CLEAN_SEND,
|
||||
PAIR_ERASE_CLEAN_RECV,
|
||||
PAIR_ERASE_LOOP,
|
||||
PAIR_WRITE_DBE_SEND,
|
||||
PAIR_WRITE_DBE_RECV,
|
||||
PAIR_WRITE_FLASH_SEND,
|
||||
PAIR_WRITE_FLASH_RECV,
|
||||
PAIR_WRITE_CLEAN_SEND,
|
||||
PAIR_WRITE_CLEAN_RECV,
|
||||
PAIR_REBOOT_SEND,
|
||||
PAIR_REBOOT_RECV,
|
||||
PAIR_DONE,
|
||||
PAIR_NUM_STATES,
|
||||
} ValidityPairSsmState;
|
||||
|
||||
/* CMD 0x1a (cleanups/commit) */
|
||||
#define VCSFW_CMD_CLEANUPS 0x1a
|
||||
|
||||
/* CMD 0x50 (get ECDH server params after partition_flash) */
|
||||
#define VCSFW_CMD_GET_ECDH 0x50
|
||||
|
||||
/* Reboot: 0x05 0x02 0x00 */
|
||||
#define VCSFW_CMD_REBOOT 0x05
|
||||
|
||||
/**
|
||||
* validity_pair_ssm_new:
|
||||
* @dev: the FpDevice
|
||||
*
|
||||
* Create a new pairing SSM. The caller must set up
|
||||
* self->pair_state.dev_desc before starting the SSM.
|
||||
*
|
||||
* Returns: a new FpiSsm.
|
||||
*/
|
||||
FpiSsm *validity_pair_ssm_new (FpDevice *dev);
|
||||
|
||||
/**
|
||||
* validity_pair_run_state:
|
||||
* @ssm: the pairing SSM
|
||||
* @dev: the FpDevice
|
||||
*
|
||||
* State machine runner for the pairing SSM.
|
||||
*/
|
||||
void validity_pair_run_state (FpiSsm *ssm,
|
||||
FpDevice *dev);
|
||||
|
||||
/**
|
||||
* validity_pair_build_tls_flash:
|
||||
* @state: pairing state (must have priv_blob, server_cert, ecdh_blob set)
|
||||
* @out_len: output data length (always 0x1000 = 4096)
|
||||
*
|
||||
* Build the TLS flash image for persistence. Format matches
|
||||
* python-validity make_tls_flash(): a sequence of flash blocks
|
||||
* zero-padded to 4096 bytes.
|
||||
*
|
||||
* Returns: newly allocated 4096-byte buffer. Free with g_free().
|
||||
*/
|
||||
guint8 *validity_pair_build_tls_flash (const ValidityPairState *state,
|
||||
gsize *out_len);
|
||||
75
libfprint/drivers/validity/validity_pair_constants.inc
Normal file
75
libfprint/drivers/validity/validity_pair_constants.inc
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
/* Hardcoded pairing constants from python-validity
|
||||
* Auto-generated from init_flash.py and tls.py
|
||||
* DO NOT EDIT — regenerate with scripts/blob_extract/extract_constants.py
|
||||
*/
|
||||
|
||||
/* partition_signature: 256 bytes */
|
||||
static const guint8 partition_sig_standard[] = {
|
||||
0x1d, 0xb0, 0x2a, 0x88, 0x6b, 0x00, 0x7e, 0x2b, 0x47, 0x26, 0x3b, 0xb8, 0xfe, 0x30, 0xbd, 0x64,
|
||||
0xa1, 0xf5, 0x8b, 0xea, 0x7b, 0x25, 0xf1, 0xe1, 0xba, 0x9a, 0xe0, 0x9a, 0xdd, 0x7e, 0xcf, 0xf3,
|
||||
0x63, 0x33, 0xf8, 0x19, 0x83, 0x39, 0xcd, 0xd7, 0x13, 0xf0, 0x43, 0x63, 0x37, 0x10, 0xa1, 0x7b,
|
||||
0xc7, 0xb3, 0xf4, 0x18, 0xf1, 0xd8, 0xff, 0x43, 0x5a, 0x1b, 0xf4, 0x7f, 0x06, 0x5d, 0xff, 0xca,
|
||||
0x72, 0x71, 0x09, 0x15, 0x22, 0x17, 0xfc, 0xe7, 0x3b, 0xf2, 0xbf, 0x8e, 0x01, 0xa1, 0x64, 0x1f,
|
||||
0x6a, 0x24, 0xb0, 0xc4, 0x92, 0xa6, 0xa3, 0xf1, 0x01, 0x14, 0x05, 0x72, 0x75, 0x84, 0x68, 0x42,
|
||||
0xb1, 0xc8, 0xb6, 0x6b, 0xd6, 0x70, 0x07, 0x38, 0x52, 0x4d, 0x44, 0x71, 0xbc, 0xa3, 0x31, 0x5b,
|
||||
0xa2, 0x3b, 0xb8, 0x32, 0x74, 0x32, 0x20, 0xad, 0x19, 0x5b, 0x60, 0x55, 0x8a, 0xa7, 0x9a, 0x3e,
|
||||
0xde, 0xb2, 0x60, 0x48, 0x34, 0xe2, 0xbb, 0x62, 0xe8, 0x90, 0xb0, 0xce, 0x40, 0x5b, 0x3b, 0x8e,
|
||||
0xf2, 0xfe, 0xc2, 0xaa, 0xb3, 0xe2, 0x2b, 0xff, 0x23, 0xf8, 0x9a, 0x58, 0xff, 0x0d, 0xc0, 0x15,
|
||||
0xfe, 0xce, 0x5d, 0x3e, 0xd3, 0xf5, 0x49, 0x6a, 0xce, 0x87, 0x9a, 0x92, 0x98, 0x0a, 0xec, 0x9d,
|
||||
0x85, 0xeb, 0x7e, 0x9d, 0xf2, 0x45, 0xea, 0xe0, 0x3a, 0x41, 0xac, 0xfd, 0x4e, 0x7d, 0x1c, 0xb1,
|
||||
0xdb, 0xd0, 0xdf, 0x42, 0xd5, 0x34, 0x90, 0x4d, 0xe0, 0x0b, 0x63, 0x89, 0xf6, 0x88, 0x67, 0x64,
|
||||
0x6e, 0x9d, 0x7c, 0x3d, 0x0b, 0x1d, 0xff, 0xd7, 0x40, 0x70, 0xb2, 0xd0, 0xf2, 0x04, 0x9b, 0x9f,
|
||||
0x1d, 0xc7, 0xb0, 0xc9, 0x65, 0x1c, 0x59, 0xbe, 0x3e, 0xa8, 0x91, 0x67, 0x47, 0x25, 0xe1, 0xf2,
|
||||
0xf7, 0xa4, 0x84, 0xa9, 0x41, 0x61, 0x5b, 0x80, 0x21, 0x11, 0x05, 0x97, 0x83, 0x69, 0xcf, 0x71,
|
||||
};
|
||||
|
||||
/* partition_signature_0090: 256 bytes */
|
||||
static const guint8 partition_sig_0090[] = {
|
||||
0xe4, 0x4f, 0x7a, 0x80, 0xd6, 0x13, 0x77, 0x94, 0xd3, 0x30, 0xb5, 0xd0, 0x26, 0xc3, 0x28, 0xa7,
|
||||
0x3c, 0x90, 0x7f, 0x3f, 0x65, 0x3d, 0x41, 0x12, 0x55, 0xb7, 0xc2, 0xf8, 0xb4, 0x25, 0xd8, 0x70,
|
||||
0xa8, 0xa5, 0x3c, 0x66, 0x30, 0xca, 0x86, 0x4b, 0x84, 0x59, 0x0e, 0x3c, 0x67, 0x86, 0xf0, 0xd6,
|
||||
0x9b, 0xe4, 0xbb, 0xab, 0x57, 0x36, 0x38, 0x8f, 0x85, 0x27, 0x23, 0x7a, 0x0a, 0x86, 0xbb, 0xce,
|
||||
0x7c, 0xed, 0x94, 0x50, 0xc4, 0x96, 0x47, 0x09, 0xe8, 0x9a, 0xc5, 0x35, 0xaa, 0x00, 0x78, 0x71,
|
||||
0x58, 0xe0, 0xa8, 0xd9, 0xb1, 0xfb, 0x75, 0xf0, 0xf7, 0xae, 0x53, 0xd4, 0xbd, 0x11, 0xab, 0xfc,
|
||||
0xf5, 0xee, 0x67, 0xa5, 0xa7, 0x1e, 0x24, 0x8a, 0x42, 0x6b, 0x3a, 0xff, 0x45, 0x67, 0x04, 0x8f,
|
||||
0xa9, 0x3d, 0xe6, 0x59, 0x39, 0xcc, 0xfb, 0xe3, 0xf3, 0x11, 0x49, 0xa8, 0x2c, 0x64, 0xfb, 0xfd,
|
||||
0x6a, 0x2a, 0x6c, 0xf7, 0x48, 0xe1, 0xd9, 0xbd, 0x85, 0x62, 0xcf, 0x39, 0xb1, 0xa4, 0xb3, 0x07,
|
||||
0xb3, 0x7b, 0xe2, 0x23, 0x31, 0x7b, 0x1b, 0x81, 0x7e, 0x36, 0x4f, 0x28, 0x77, 0xd2, 0x9d, 0x12,
|
||||
0x37, 0x31, 0x31, 0x4a, 0xa6, 0x27, 0xcb, 0xf2, 0x34, 0xe0, 0xea, 0x69, 0xa4, 0x06, 0xa4, 0x73,
|
||||
0x5a, 0x03, 0xa4, 0x54, 0x95, 0x02, 0x3e, 0xf7, 0x06, 0xbd, 0xb5, 0x42, 0xc9, 0x49, 0xd2, 0x43,
|
||||
0xac, 0x2c, 0x08, 0xc0, 0x0a, 0xbf, 0x43, 0xfa, 0xa5, 0x52, 0x8a, 0x0a, 0x8e, 0x49, 0xb0, 0x2c,
|
||||
0x50, 0x7b, 0x01, 0xb6, 0xf1, 0xc9, 0xab, 0xff, 0xc6, 0x69, 0xd8, 0xc8, 0x4d, 0x7e, 0x4a, 0x71,
|
||||
0x4d, 0xa3, 0x2a, 0xad, 0xe7, 0x92, 0x8e, 0xca, 0x96, 0x98, 0xb8, 0x2b, 0xee, 0x6b, 0x72, 0xc6,
|
||||
0x42, 0xc9, 0xad, 0xd8, 0x0b, 0xbd, 0x7c, 0xcc, 0x41, 0x21, 0xb8, 0x02, 0x20, 0xd5, 0x2b, 0x8a,
|
||||
};
|
||||
|
||||
/* CA certificate: 420 bytes */
|
||||
static const guint8 ca_cert_hardcoded[] = {
|
||||
0x17, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x4b, 0x60, 0xd2, 0x27, 0x3e, 0x3c, 0xce, 0x3b, 0xf6, 0xb0, 0x53, 0xcc, 0xb0, 0x06, 0x1d, 0x65,
|
||||
0xbc, 0x86, 0x98, 0x76, 0x55, 0xbd, 0xeb, 0xb3, 0xe7, 0x93, 0x3a, 0xaa, 0xd8, 0x35, 0xc6, 0x5a,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x96, 0xc2, 0x98, 0xd8, 0x45, 0x39, 0xa1, 0xf4, 0xa0, 0x33, 0xeb, 0x2d,
|
||||
0x81, 0x7d, 0x03, 0x77, 0xf2, 0x40, 0xa4, 0x63, 0xe5, 0xe6, 0xbc, 0xf8, 0x47, 0x42, 0x2c, 0xe1,
|
||||
0xf2, 0xd1, 0x17, 0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf5, 0x51, 0xbf, 0x37, 0x68, 0x40, 0xb6, 0xcb,
|
||||
0xce, 0x5e, 0x31, 0x6b, 0x57, 0x33, 0xce, 0x2b, 0x16, 0x9e, 0x0f, 0x7c, 0x4a, 0xeb, 0xe7, 0x8e,
|
||||
0x9b, 0x7f, 0x1a, 0xfe, 0xe2, 0x42, 0xe3, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x25, 0x63, 0xfc,
|
||||
0xc2, 0xca, 0xb9, 0xf3, 0x84, 0x9e, 0x17, 0xa7, 0xad, 0xfa, 0xe6, 0xbc, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
|
|
@ -162,7 +162,9 @@ driver_sources = {
|
|||
'drivers/validity/validity_capture.c',
|
||||
'drivers/validity/validity_db.c',
|
||||
'drivers/validity/validity_enroll.c',
|
||||
'drivers/validity/validity_verify.c' ],
|
||||
'drivers/validity/validity_verify.c',
|
||||
'drivers/validity/validity_hal.c',
|
||||
'drivers/validity/validity_pair.c' ],
|
||||
}
|
||||
|
||||
helper_sources = {
|
||||
|
|
|
|||
|
|
@ -412,6 +412,36 @@ if 'validity' in supported_drivers
|
|||
suite: ['unit-tests'],
|
||||
env: envs,
|
||||
)
|
||||
|
||||
# Validity HAL unit tests
|
||||
validity_hal_test = executable('test-validity-hal',
|
||||
sources: 'test-validity-hal.c',
|
||||
dependencies: [ libfprint_private_dep ],
|
||||
c_args: common_cflags,
|
||||
link_with: libfprint_drivers,
|
||||
install: false,
|
||||
)
|
||||
test('validity-hal',
|
||||
validity_hal_test,
|
||||
suite: ['unit-tests'],
|
||||
env: envs,
|
||||
)
|
||||
|
||||
# Validity pairing unit tests
|
||||
if openssl_dep.found()
|
||||
validity_pair_test = executable('test-validity-pair',
|
||||
sources: 'test-validity-pair.c',
|
||||
dependencies: [ libfprint_private_dep, openssl_dep ],
|
||||
c_args: common_cflags,
|
||||
link_with: libfprint_drivers,
|
||||
install: false,
|
||||
)
|
||||
test('validity-pair',
|
||||
validity_pair_test,
|
||||
suite: ['unit-tests'],
|
||||
env: envs,
|
||||
)
|
||||
endif
|
||||
endif
|
||||
|
||||
# Run udev rule generator with fatal warnings
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@
|
|||
#include "fpi-byte-utils.h"
|
||||
|
||||
#include "drivers/validity/validity_db.h"
|
||||
#include "drivers/validity/validity.h"
|
||||
#include "drivers/validity/vcsfw_protocol.h"
|
||||
|
||||
/* ================================================================
|
||||
|
|
@ -567,12 +568,24 @@ static void
|
|||
test_db_write_enable_blob (void)
|
||||
{
|
||||
gsize len;
|
||||
const guint8 *blob = validity_db_get_write_enable_blob (&len);
|
||||
|
||||
/* Test with 009a device type (known to have a 3621-byte blob) */
|
||||
const guint8 *blob = validity_db_get_write_enable_blob (VALIDITY_DEV_9A, &len);
|
||||
|
||||
g_assert_nonnull (blob);
|
||||
g_assert_cmpuint (len, >, 0);
|
||||
/* The 009a blob is 3621 bytes */
|
||||
g_assert_cmpuint (len, ==, 3621);
|
||||
|
||||
/* Test all supported device types return valid blobs */
|
||||
const guint dev_types[] = { VALIDITY_DEV_90, VALIDITY_DEV_97,
|
||||
VALIDITY_DEV_9A, VALIDITY_DEV_9D };
|
||||
for (guint i = 0; i < G_N_ELEMENTS (dev_types); i++)
|
||||
{
|
||||
gsize dbe_len;
|
||||
const guint8 *dbe = validity_db_get_write_enable_blob (dev_types[i], &dbe_len);
|
||||
g_assert_nonnull (dbe);
|
||||
g_assert_cmpuint (dbe_len, >, 0);
|
||||
}
|
||||
}
|
||||
|
||||
/* ================================================================
|
||||
|
|
|
|||
251
tests/test-validity-hal.c
Normal file
251
tests/test-validity-hal.c
Normal file
|
|
@ -0,0 +1,251 @@
|
|||
/*
|
||||
* Unit tests for validity HAL (device descriptor lookup and flash layout)
|
||||
*
|
||||
* Copyright (C) 2024 libfprint contributors
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*/
|
||||
|
||||
#include <glib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "drivers/validity/validity.h"
|
||||
#include "drivers/validity/validity_hal.h"
|
||||
|
||||
/* ================================================================
|
||||
* T7.1: HAL lookup by device type — all valid types return non-NULL
|
||||
* ================================================================ */
|
||||
static void
|
||||
test_hal_lookup_all_types (void)
|
||||
{
|
||||
const guint types[] = { VALIDITY_DEV_90, VALIDITY_DEV_97,
|
||||
VALIDITY_DEV_9A, VALIDITY_DEV_9D };
|
||||
|
||||
for (guint i = 0; i < G_N_ELEMENTS (types); i++)
|
||||
{
|
||||
const ValidityDeviceDesc *desc = validity_hal_device_lookup (types[i]);
|
||||
g_assert_nonnull (desc);
|
||||
g_assert_cmpuint (desc->vid, >, 0);
|
||||
g_assert_cmpuint (desc->pid, >, 0);
|
||||
}
|
||||
}
|
||||
|
||||
/* ================================================================
|
||||
* T7.2: HAL lookup by PID — all supported VID/PID combos
|
||||
* ================================================================ */
|
||||
static void
|
||||
test_hal_lookup_by_pid (void)
|
||||
{
|
||||
/* All 4 supported devices */
|
||||
struct { guint16 vid; guint16 pid; } devices[] = {
|
||||
{ 0x138a, 0x0090 },
|
||||
{ 0x138a, 0x0097 },
|
||||
{ 0x06cb, 0x009a },
|
||||
{ 0x138a, 0x009d },
|
||||
};
|
||||
|
||||
for (guint i = 0; i < G_N_ELEMENTS (devices); i++)
|
||||
{
|
||||
const ValidityDeviceDesc *desc =
|
||||
validity_hal_device_lookup_by_pid (devices[i].vid, devices[i].pid);
|
||||
g_assert_nonnull (desc);
|
||||
g_assert_cmpuint (desc->vid, ==, devices[i].vid);
|
||||
g_assert_cmpuint (desc->pid, ==, devices[i].pid);
|
||||
}
|
||||
}
|
||||
|
||||
/* ================================================================
|
||||
* T7.3: HAL lookup — invalid type returns NULL
|
||||
* ================================================================ */
|
||||
static void
|
||||
test_hal_lookup_invalid (void)
|
||||
{
|
||||
const ValidityDeviceDesc *desc = validity_hal_device_lookup (99);
|
||||
g_assert_null (desc);
|
||||
}
|
||||
|
||||
/* ================================================================
|
||||
* T7.4: HAL lookup by PID — unknown PID returns NULL
|
||||
* ================================================================ */
|
||||
static void
|
||||
test_hal_lookup_by_pid_invalid (void)
|
||||
{
|
||||
const ValidityDeviceDesc *desc =
|
||||
validity_hal_device_lookup_by_pid (0x1234, 0x5678);
|
||||
g_assert_null (desc);
|
||||
}
|
||||
|
||||
/* ================================================================
|
||||
* T7.5: All devices have non-empty blobs
|
||||
* ================================================================ */
|
||||
static void
|
||||
test_hal_blobs_present (void)
|
||||
{
|
||||
const guint types[] = { VALIDITY_DEV_90, VALIDITY_DEV_97,
|
||||
VALIDITY_DEV_9A, VALIDITY_DEV_9D };
|
||||
|
||||
for (guint i = 0; i < G_N_ELEMENTS (types); i++)
|
||||
{
|
||||
const ValidityDeviceDesc *desc = validity_hal_device_lookup (types[i]);
|
||||
g_assert_nonnull (desc);
|
||||
|
||||
/* init_hardcoded must be present for all */
|
||||
g_assert_nonnull (desc->init_hardcoded);
|
||||
g_assert_cmpuint (desc->init_hardcoded_len, >, 0);
|
||||
|
||||
/* reset_blob must be present for all */
|
||||
g_assert_nonnull (desc->reset_blob);
|
||||
g_assert_cmpuint (desc->reset_blob_len, >, 0);
|
||||
|
||||
/* db_write_enable must be present for all */
|
||||
g_assert_nonnull (desc->db_write_enable);
|
||||
g_assert_cmpuint (desc->db_write_enable_len, >, 0);
|
||||
}
|
||||
}
|
||||
|
||||
/* ================================================================
|
||||
* T7.6: PID 0090 has smaller db partition and no clean_slate blob
|
||||
* ================================================================ */
|
||||
static void
|
||||
test_hal_pid_0090_specifics (void)
|
||||
{
|
||||
const ValidityDeviceDesc *desc = validity_hal_device_lookup (VALIDITY_DEV_90);
|
||||
g_assert_nonnull (desc);
|
||||
|
||||
/* 0090 has no init_hardcoded_clean_slate */
|
||||
g_assert_null (desc->init_clean_slate);
|
||||
g_assert_cmpuint (desc->init_clean_slate_len, ==, 0);
|
||||
|
||||
/* Flash layout should exist */
|
||||
g_assert_nonnull (desc->flash_layout);
|
||||
g_assert_cmpuint (desc->flash_layout->num_partitions, ==,
|
||||
VALIDITY_FLASH_NUM_PARTITIONS);
|
||||
}
|
||||
|
||||
/* ================================================================
|
||||
* T7.7: Non-0090 devices have init_hardcoded_clean_slate
|
||||
* ================================================================ */
|
||||
static void
|
||||
test_hal_clean_slate_present (void)
|
||||
{
|
||||
const guint types[] = { VALIDITY_DEV_97, VALIDITY_DEV_9A, VALIDITY_DEV_9D };
|
||||
|
||||
for (guint i = 0; i < G_N_ELEMENTS (types); i++)
|
||||
{
|
||||
const ValidityDeviceDesc *desc = validity_hal_device_lookup (types[i]);
|
||||
g_assert_nonnull (desc);
|
||||
g_assert_nonnull (desc->init_clean_slate);
|
||||
g_assert_cmpuint (desc->init_clean_slate_len, >, 0);
|
||||
}
|
||||
}
|
||||
|
||||
/* ================================================================
|
||||
* T7.8: Flash layout has valid partition table
|
||||
* ================================================================ */
|
||||
static void
|
||||
test_hal_flash_layout (void)
|
||||
{
|
||||
const guint types[] = { VALIDITY_DEV_90, VALIDITY_DEV_97,
|
||||
VALIDITY_DEV_9A, VALIDITY_DEV_9D };
|
||||
|
||||
for (guint i = 0; i < G_N_ELEMENTS (types); i++)
|
||||
{
|
||||
const ValidityDeviceDesc *desc = validity_hal_device_lookup (types[i]);
|
||||
g_assert_nonnull (desc);
|
||||
g_assert_nonnull (desc->flash_layout);
|
||||
|
||||
const ValidityFlashLayout *layout = desc->flash_layout;
|
||||
g_assert_cmpuint (layout->num_partitions, ==,
|
||||
VALIDITY_FLASH_NUM_PARTITIONS);
|
||||
|
||||
/* Signature must be 256 bytes */
|
||||
g_assert_nonnull (layout->partition_sig);
|
||||
g_assert_cmpuint (layout->partition_sig_len, ==,
|
||||
VALIDITY_PARTITION_SIG_SIZE);
|
||||
|
||||
/* Verify partitions are ordered and non-overlapping */
|
||||
for (guint p = 0; p < layout->num_partitions; p++)
|
||||
{
|
||||
const ValidityPartition *part = &layout->partitions[p];
|
||||
g_assert_cmpuint (part->size, >, 0);
|
||||
|
||||
if (p > 0)
|
||||
{
|
||||
const ValidityPartition *prev = &layout->partitions[p - 1];
|
||||
g_assert_cmpuint (part->offset, >=,
|
||||
prev->offset + prev->size);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* ================================================================
|
||||
* T7.9: Blob sizes match expected values from python-validity
|
||||
* ================================================================ */
|
||||
static void
|
||||
test_hal_blob_sizes (void)
|
||||
{
|
||||
const ValidityDeviceDesc *desc_9a =
|
||||
validity_hal_device_lookup (VALIDITY_DEV_9A);
|
||||
g_assert_nonnull (desc_9a);
|
||||
|
||||
/* 009a blobs: init=581, clean_slate=741, reset=12037, dbe=3621 */
|
||||
g_assert_cmpuint (desc_9a->init_hardcoded_len, ==, 581);
|
||||
g_assert_cmpuint (desc_9a->init_clean_slate_len, ==, 741);
|
||||
g_assert_cmpuint (desc_9a->reset_blob_len, ==, 12037);
|
||||
g_assert_cmpuint (desc_9a->db_write_enable_len, ==, 3621);
|
||||
|
||||
const ValidityDeviceDesc *desc_90 =
|
||||
validity_hal_device_lookup (VALIDITY_DEV_90);
|
||||
g_assert_nonnull (desc_90);
|
||||
|
||||
/* 0090 blobs: init=485, no clean_slate, reset=11493, dbe=1765 */
|
||||
g_assert_cmpuint (desc_90->init_hardcoded_len, ==, 485);
|
||||
g_assert_cmpuint (desc_90->reset_blob_len, ==, 11493);
|
||||
g_assert_cmpuint (desc_90->db_write_enable_len, ==, 1765);
|
||||
}
|
||||
|
||||
/* ================================================================
|
||||
* T7.10: Lookup consistency — by-type and by-PID return same pointer
|
||||
* ================================================================ */
|
||||
static void
|
||||
test_hal_lookup_consistency (void)
|
||||
{
|
||||
const ValidityDeviceDesc *by_type =
|
||||
validity_hal_device_lookup (VALIDITY_DEV_9A);
|
||||
const ValidityDeviceDesc *by_pid =
|
||||
validity_hal_device_lookup_by_pid (0x06cb, 0x009a);
|
||||
g_assert_true (by_type == by_pid);
|
||||
}
|
||||
|
||||
int
|
||||
main (int argc, char *argv[])
|
||||
{
|
||||
g_test_init (&argc, &argv, NULL);
|
||||
|
||||
g_test_add_func ("/validity/hal/lookup-all-types",
|
||||
test_hal_lookup_all_types);
|
||||
g_test_add_func ("/validity/hal/lookup-by-pid",
|
||||
test_hal_lookup_by_pid);
|
||||
g_test_add_func ("/validity/hal/lookup-invalid",
|
||||
test_hal_lookup_invalid);
|
||||
g_test_add_func ("/validity/hal/lookup-by-pid-invalid",
|
||||
test_hal_lookup_by_pid_invalid);
|
||||
g_test_add_func ("/validity/hal/blobs-present",
|
||||
test_hal_blobs_present);
|
||||
g_test_add_func ("/validity/hal/pid-0090-specifics",
|
||||
test_hal_pid_0090_specifics);
|
||||
g_test_add_func ("/validity/hal/clean-slate-present",
|
||||
test_hal_clean_slate_present);
|
||||
g_test_add_func ("/validity/hal/flash-layout",
|
||||
test_hal_flash_layout);
|
||||
g_test_add_func ("/validity/hal/blob-sizes",
|
||||
test_hal_blob_sizes);
|
||||
g_test_add_func ("/validity/hal/lookup-consistency",
|
||||
test_hal_lookup_consistency);
|
||||
|
||||
return g_test_run ();
|
||||
}
|
||||
497
tests/test-validity-pair.c
Normal file
497
tests/test-validity-pair.c
Normal file
|
|
@ -0,0 +1,497 @@
|
|||
/*
|
||||
* Unit tests for validity pairing helper functions
|
||||
*
|
||||
* Copyright (C) 2024 libfprint contributors
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*/
|
||||
|
||||
#include <glib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <openssl/evp.h>
|
||||
#include <openssl/hmac.h>
|
||||
#include <openssl/rand.h>
|
||||
#include <openssl/core_names.h>
|
||||
#include <openssl/param_build.h>
|
||||
#include <openssl/ec.h>
|
||||
|
||||
#include "fpi-byte-utils.h"
|
||||
#include "drivers/validity/validity.h"
|
||||
#include "drivers/validity/validity_pair.h"
|
||||
#include "drivers/validity/validity_hal.h"
|
||||
|
||||
/* ================================================================
|
||||
* T7.11: parse_flash_info — valid response
|
||||
* ================================================================ */
|
||||
static void
|
||||
test_parse_flash_info_valid (void)
|
||||
{
|
||||
/* CMD 0x3e response format (after 2-byte status, already stripped):
|
||||
* [jid0:2LE][jid1:2LE][blocks:2LE][unknown0:2LE][blocksize:2LE]
|
||||
* [unknown1:2LE][pcnt:2LE] = 14 bytes minimum */
|
||||
guint8 data[14];
|
||||
memset (data, 0, sizeof (data));
|
||||
|
||||
/* jid0=0x01, jid1=0x02, blocks=0x1000, unknown0=0, blocksize=0x100,
|
||||
* unknown1=0, pcnt=5 (5 partitions = device already paired) */
|
||||
FP_WRITE_UINT16_LE (data + 0, 0x0001); /* jid0 */
|
||||
FP_WRITE_UINT16_LE (data + 2, 0x0002); /* jid1 */
|
||||
FP_WRITE_UINT16_LE (data + 4, 0x1000); /* blocks */
|
||||
FP_WRITE_UINT16_LE (data + 6, 0x0000); /* unknown0 */
|
||||
FP_WRITE_UINT16_LE (data + 8, 0x0100); /* blocksize */
|
||||
FP_WRITE_UINT16_LE (data + 10, 0x0000); /* unknown1 */
|
||||
FP_WRITE_UINT16_LE (data + 12, 5); /* pcnt = 5 */
|
||||
|
||||
ValidityFlashIcParams ic;
|
||||
guint16 num_partitions;
|
||||
|
||||
gboolean ok = validity_pair_parse_flash_info (data, sizeof (data),
|
||||
&ic, &num_partitions);
|
||||
g_assert_true (ok);
|
||||
g_assert_cmpuint (num_partitions, ==, 5);
|
||||
g_assert_cmpuint (ic.size, ==, 0x1000 * 0x0100);
|
||||
g_assert_cmpuint (ic.sector_size, ==, 0x1000);
|
||||
g_assert_cmpuint (ic.sector_erase_cmd, ==, 0x20);
|
||||
}
|
||||
|
||||
/* ================================================================
|
||||
* T7.12: parse_flash_info — zero partitions means needs pairing
|
||||
* ================================================================ */
|
||||
static void
|
||||
test_parse_flash_info_needs_pairing (void)
|
||||
{
|
||||
guint8 data[14];
|
||||
memset (data, 0, sizeof (data));
|
||||
|
||||
FP_WRITE_UINT16_LE (data + 0, 0x0001);
|
||||
FP_WRITE_UINT16_LE (data + 2, 0x0002);
|
||||
FP_WRITE_UINT16_LE (data + 4, 0x0800);
|
||||
FP_WRITE_UINT16_LE (data + 8, 0x0200);
|
||||
FP_WRITE_UINT16_LE (data + 12, 0); /* 0 partitions */
|
||||
|
||||
ValidityFlashIcParams ic;
|
||||
guint16 num_partitions;
|
||||
|
||||
gboolean ok = validity_pair_parse_flash_info (data, sizeof (data),
|
||||
&ic, &num_partitions);
|
||||
g_assert_true (ok);
|
||||
g_assert_cmpuint (num_partitions, ==, 0);
|
||||
}
|
||||
|
||||
/* ================================================================
|
||||
* T7.13: parse_flash_info — too short data fails
|
||||
* ================================================================ */
|
||||
static void
|
||||
test_parse_flash_info_too_short (void)
|
||||
{
|
||||
guint8 data[10]; /* less than 14 bytes */
|
||||
memset (data, 0, sizeof (data));
|
||||
|
||||
ValidityFlashIcParams ic;
|
||||
guint16 num_partitions;
|
||||
|
||||
gboolean ok = validity_pair_parse_flash_info (data, sizeof (data),
|
||||
&ic, &num_partitions);
|
||||
g_assert_false (ok);
|
||||
}
|
||||
|
||||
/* ================================================================
|
||||
* T7.14: serialize_partition — known output format
|
||||
* ================================================================ */
|
||||
static void
|
||||
test_serialize_partition (void)
|
||||
{
|
||||
ValidityPartition part = {
|
||||
.id = 1,
|
||||
.type = 3,
|
||||
.access_lvl = 0x0002,
|
||||
.offset = 0x1000,
|
||||
.size = 0x8000,
|
||||
};
|
||||
|
||||
guint8 out[VALIDITY_PARTITION_ENTRY_SIZE];
|
||||
validity_pair_serialize_partition (&part, out);
|
||||
|
||||
/* Check first 12 bytes: id(1) type(1) access_lvl(2LE) offset(4LE) size(4LE) */
|
||||
g_assert_cmpuint (out[0], ==, 1);
|
||||
g_assert_cmpuint (out[1], ==, 3);
|
||||
g_assert_cmpuint (FP_READ_UINT16_LE (out + 2), ==, 0x0002);
|
||||
g_assert_cmpuint (FP_READ_UINT32_LE (out + 4), ==, 0x1000);
|
||||
g_assert_cmpuint (FP_READ_UINT32_LE (out + 8), ==, 0x8000);
|
||||
|
||||
/* Bytes 12-15 should be zero */
|
||||
for (int i = 12; i < 16; i++)
|
||||
g_assert_cmpuint (out[i], ==, 0);
|
||||
|
||||
/* Bytes 16-47 = SHA-256 of the 12-byte entry */
|
||||
g_autoptr(GChecksum) checksum = g_checksum_new (G_CHECKSUM_SHA256);
|
||||
g_checksum_update (checksum, out, 12);
|
||||
guint8 expected_hash[32];
|
||||
gsize hash_len = 32;
|
||||
g_checksum_get_digest (checksum, expected_hash, &hash_len);
|
||||
|
||||
g_assert_cmpmem (out + 16, 32, expected_hash, 32);
|
||||
|
||||
/* Total size must be VALIDITY_PARTITION_ENTRY_SIZE */
|
||||
g_assert_cmpuint (sizeof (out), ==, VALIDITY_PARTITION_ENTRY_SIZE);
|
||||
}
|
||||
|
||||
/* ================================================================
|
||||
* T7.15: make_cert — produces 444-byte certificate
|
||||
* ================================================================ */
|
||||
static void
|
||||
test_make_cert_size (void)
|
||||
{
|
||||
guint8 pub_x[32], pub_y[32];
|
||||
RAND_bytes (pub_x, 32);
|
||||
RAND_bytes (pub_y, 32);
|
||||
|
||||
gsize cert_len;
|
||||
g_autofree guint8 *cert = validity_pair_make_cert (pub_x, pub_y, &cert_len);
|
||||
|
||||
g_assert_nonnull (cert);
|
||||
g_assert_cmpuint (cert_len, ==, VALIDITY_CLIENT_CERT_SIZE);
|
||||
|
||||
/* First 4 bytes should be 0x17 in LE */
|
||||
g_assert_cmpuint (FP_READ_UINT32_LE (cert), ==, 0x17);
|
||||
/* Bytes 4-7 should be 0x20 in LE */
|
||||
g_assert_cmpuint (FP_READ_UINT32_LE (cert + 4), ==, 0x20);
|
||||
}
|
||||
|
||||
/* ================================================================
|
||||
* T7.16: make_cert — deterministic for same input
|
||||
* ================================================================ */
|
||||
static void
|
||||
test_make_cert_deterministic (void)
|
||||
{
|
||||
/* Using fixed keys so signature is reproducible.
|
||||
* Note: ECDSA uses random k, so signatures differ — but the
|
||||
* structure should be consistent. Actually ECDSA is NOT deterministic
|
||||
* without RFC 6979, so we can only verify structure matches. */
|
||||
guint8 pub_x[32] = { 0x01 };
|
||||
guint8 pub_y[32] = { 0x02 };
|
||||
|
||||
gsize len1, len2;
|
||||
g_autofree guint8 *cert1 = validity_pair_make_cert (pub_x, pub_y, &len1);
|
||||
g_autofree guint8 *cert2 = validity_pair_make_cert (pub_x, pub_y, &len2);
|
||||
|
||||
g_assert_nonnull (cert1);
|
||||
g_assert_nonnull (cert2);
|
||||
g_assert_cmpuint (len1, ==, len2);
|
||||
g_assert_cmpuint (len1, ==, VALIDITY_CLIENT_CERT_SIZE);
|
||||
|
||||
/* Header and public key portion should be identical (first 184 bytes = cert body) */
|
||||
g_assert_cmpmem (cert1, 184, cert2, 184);
|
||||
}
|
||||
|
||||
/* ================================================================
|
||||
* T7.17: encrypt_key — output blob has correct structure
|
||||
* ================================================================ */
|
||||
static void
|
||||
test_encrypt_key_structure (void)
|
||||
{
|
||||
guint8 priv[32], pub_x[32], pub_y[32];
|
||||
guint8 enc_key[32], val_key[32];
|
||||
|
||||
RAND_bytes (priv, 32);
|
||||
RAND_bytes (pub_x, 32);
|
||||
RAND_bytes (pub_y, 32);
|
||||
RAND_bytes (enc_key, 32);
|
||||
RAND_bytes (val_key, 32);
|
||||
|
||||
gsize blob_len;
|
||||
g_autofree guint8 *blob = validity_pair_encrypt_key (priv, pub_x, pub_y,
|
||||
enc_key, val_key,
|
||||
&blob_len);
|
||||
|
||||
g_assert_nonnull (blob);
|
||||
/* Blob format: 0x02(1) + IV(16) + ciphertext(112) + HMAC(32) = 161 */
|
||||
g_assert_cmpuint (blob_len, ==, 161);
|
||||
g_assert_cmpuint (blob[0], ==, VALIDITY_ENCRYPTED_KEY_PREFIX);
|
||||
}
|
||||
|
||||
/* ================================================================
|
||||
* T7.18: encrypt_key — HMAC verification
|
||||
* ================================================================ */
|
||||
static void
|
||||
test_encrypt_key_hmac_valid (void)
|
||||
{
|
||||
guint8 priv[32], pub_x[32], pub_y[32];
|
||||
guint8 enc_key[32], val_key[32];
|
||||
|
||||
RAND_bytes (priv, 32);
|
||||
RAND_bytes (pub_x, 32);
|
||||
RAND_bytes (pub_y, 32);
|
||||
RAND_bytes (enc_key, 32);
|
||||
RAND_bytes (val_key, 32);
|
||||
|
||||
gsize blob_len;
|
||||
g_autofree guint8 *blob = validity_pair_encrypt_key (priv, pub_x, pub_y,
|
||||
enc_key, val_key,
|
||||
&blob_len);
|
||||
|
||||
g_assert_nonnull (blob);
|
||||
g_assert_cmpuint (blob_len, ==, 161);
|
||||
|
||||
/* Blob: [0x02][iv:16][ct:112][hmac:32]
|
||||
* HMAC is over iv+ct (bytes 1..128) */
|
||||
const guint8 *iv_ct = blob + 1;
|
||||
gsize iv_ct_len = 16 + 112;
|
||||
const guint8 *stored_hmac = blob + 1 + iv_ct_len;
|
||||
|
||||
guint8 computed_hmac[32];
|
||||
guint hmac_len = 32;
|
||||
HMAC (EVP_sha256 (), val_key, 32, iv_ct, iv_ct_len,
|
||||
computed_hmac, &hmac_len);
|
||||
|
||||
g_assert_cmpmem (stored_hmac, 32, computed_hmac, 32);
|
||||
}
|
||||
|
||||
/* ================================================================
|
||||
* T7.19: build_partition_flash_cmd — valid output structure
|
||||
* ================================================================ */
|
||||
static void
|
||||
test_build_partition_flash_cmd (void)
|
||||
{
|
||||
/* Use a real device descriptor for the flash layout */
|
||||
const ValidityDeviceDesc *desc =
|
||||
validity_hal_device_lookup (VALIDITY_DEV_9A);
|
||||
g_assert_nonnull (desc);
|
||||
|
||||
ValidityFlashIcParams flash_ic = {
|
||||
.size = 0x200000,
|
||||
.sector_size = 0x1000,
|
||||
.sector_erase_cmd = 0x20,
|
||||
};
|
||||
|
||||
guint8 pub_x[32], pub_y[32];
|
||||
RAND_bytes (pub_x, 32);
|
||||
RAND_bytes (pub_y, 32);
|
||||
|
||||
gsize cmd_len;
|
||||
g_autofree guint8 *cmd =
|
||||
validity_pair_build_partition_flash_cmd (&flash_ic, desc->flash_layout,
|
||||
pub_x, pub_y, &cmd_len);
|
||||
|
||||
g_assert_nonnull (cmd);
|
||||
g_assert_cmpuint (cmd_len, >, 5);
|
||||
|
||||
/* Command prefix: 0x4f followed by 4 zero bytes */
|
||||
g_assert_cmpuint (cmd[0], ==, 0x4f);
|
||||
g_assert_cmpuint (cmd[1], ==, 0);
|
||||
g_assert_cmpuint (cmd[2], ==, 0);
|
||||
g_assert_cmpuint (cmd[3], ==, 0);
|
||||
g_assert_cmpuint (cmd[4], ==, 0);
|
||||
}
|
||||
|
||||
/* ================================================================
|
||||
* T7.20: build_tls_flash — produces exactly 4096 bytes
|
||||
* ================================================================ */
|
||||
static void
|
||||
test_build_tls_flash_size (void)
|
||||
{
|
||||
ValidityPairState state;
|
||||
validity_pair_state_init (&state);
|
||||
|
||||
/* Set up minimal test data */
|
||||
guint8 priv_blob[100];
|
||||
guint8 server_cert[200];
|
||||
guint8 ecdh_blob[400];
|
||||
RAND_bytes (priv_blob, sizeof (priv_blob));
|
||||
RAND_bytes (server_cert, sizeof (server_cert));
|
||||
RAND_bytes (ecdh_blob, sizeof (ecdh_blob));
|
||||
|
||||
state.priv_blob = priv_blob;
|
||||
state.priv_blob_len = sizeof (priv_blob);
|
||||
state.server_cert = server_cert;
|
||||
state.server_cert_len = sizeof (server_cert);
|
||||
state.ecdh_blob = ecdh_blob;
|
||||
state.ecdh_blob_len = sizeof (ecdh_blob);
|
||||
|
||||
gsize flash_len;
|
||||
g_autofree guint8 *flash = validity_pair_build_tls_flash (&state, &flash_len);
|
||||
|
||||
g_assert_nonnull (flash);
|
||||
g_assert_cmpuint (flash_len, ==, 0x1000);
|
||||
|
||||
/* Verify padding bytes at end are 0xff */
|
||||
gboolean has_ff_padding = FALSE;
|
||||
for (gsize i = flash_len - 1; i > 0; i--)
|
||||
{
|
||||
if (flash[i] == 0xff)
|
||||
{
|
||||
has_ff_padding = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
g_assert_true (has_ff_padding);
|
||||
|
||||
/* Don't free embedded pointers since they're stack-allocated */
|
||||
state.priv_blob = NULL;
|
||||
state.server_cert = NULL;
|
||||
state.ecdh_blob = NULL;
|
||||
validity_pair_state_free (&state);
|
||||
}
|
||||
|
||||
/* ================================================================
|
||||
* T7.21: build_tls_flash — block structure
|
||||
* ================================================================ */
|
||||
static void
|
||||
test_build_tls_flash_blocks (void)
|
||||
{
|
||||
ValidityPairState state;
|
||||
validity_pair_state_init (&state);
|
||||
|
||||
guint8 priv_blob[50];
|
||||
guint8 server_cert[100];
|
||||
guint8 ecdh_blob[400];
|
||||
memset (priv_blob, 0xAA, sizeof (priv_blob));
|
||||
memset (server_cert, 0xBB, sizeof (server_cert));
|
||||
memset (ecdh_blob, 0xCC, sizeof (ecdh_blob));
|
||||
|
||||
state.priv_blob = priv_blob;
|
||||
state.priv_blob_len = sizeof (priv_blob);
|
||||
state.server_cert = server_cert;
|
||||
state.server_cert_len = sizeof (server_cert);
|
||||
state.ecdh_blob = ecdh_blob;
|
||||
state.ecdh_blob_len = sizeof (ecdh_blob);
|
||||
|
||||
gsize flash_len;
|
||||
g_autofree guint8 *flash = validity_pair_build_tls_flash (&state, &flash_len);
|
||||
g_assert_nonnull (flash);
|
||||
|
||||
/* Block 0 should be first: id=0, size=1 */
|
||||
g_assert_cmpuint (FP_READ_UINT16_LE (flash), ==, 0); /* block id */
|
||||
g_assert_cmpuint (FP_READ_UINT16_LE (flash + 2), ==, 1); /* size = 1 */
|
||||
/* Skip 32-byte hash at flash+4 and 1-byte body at flash+36 */
|
||||
|
||||
/* Next block should be block 4 (priv_blob) at offset 37 */
|
||||
gsize offset = 4 + 32 + 1; /* header(4) + hash(32) + body(1) */
|
||||
g_assert_cmpuint (FP_READ_UINT16_LE (flash + offset), ==, 4); /* block id */
|
||||
g_assert_cmpuint (FP_READ_UINT16_LE (flash + offset + 2), ==,
|
||||
sizeof (priv_blob));
|
||||
|
||||
state.priv_blob = NULL;
|
||||
state.server_cert = NULL;
|
||||
state.ecdh_blob = NULL;
|
||||
validity_pair_state_free (&state);
|
||||
}
|
||||
|
||||
/* ================================================================
|
||||
* T7.22: pair state init and free
|
||||
* ================================================================ */
|
||||
static void
|
||||
test_pair_state_lifecycle (void)
|
||||
{
|
||||
ValidityPairState state;
|
||||
validity_pair_state_init (&state);
|
||||
|
||||
g_assert_null (state.client_key);
|
||||
g_assert_null (state.server_cert);
|
||||
g_assert_null (state.ecdh_blob);
|
||||
g_assert_null (state.priv_blob);
|
||||
g_assert_cmpuint (state.num_partitions, ==, 0);
|
||||
g_assert_cmpuint (state.erase_step, ==, 0);
|
||||
|
||||
/* Free should be safe on empty state */
|
||||
validity_pair_state_free (&state);
|
||||
}
|
||||
|
||||
/* ================================================================
|
||||
* T7.23: pair state free with allocated resources
|
||||
* ================================================================ */
|
||||
static void
|
||||
test_pair_state_free_with_resources (void)
|
||||
{
|
||||
ValidityPairState state;
|
||||
validity_pair_state_init (&state);
|
||||
|
||||
state.server_cert = g_malloc (100);
|
||||
state.server_cert_len = 100;
|
||||
state.ecdh_blob = g_malloc (400);
|
||||
state.ecdh_blob_len = 400;
|
||||
state.priv_blob = g_malloc (161);
|
||||
state.priv_blob_len = 161;
|
||||
|
||||
/* Generate a key to test EVP_PKEY_free path */
|
||||
EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id (EVP_PKEY_EC, NULL);
|
||||
EVP_PKEY_keygen_init (pctx);
|
||||
EVP_PKEY_CTX_set_ec_paramgen_curve_nid (pctx, NID_X9_62_prime256v1);
|
||||
EVP_PKEY_keygen (pctx, &state.client_key);
|
||||
EVP_PKEY_CTX_free (pctx);
|
||||
g_assert_nonnull (state.client_key);
|
||||
|
||||
/* Free should release all resources without leak */
|
||||
validity_pair_state_free (&state);
|
||||
}
|
||||
|
||||
/* ================================================================
|
||||
* T7.24: encrypt_key — different inputs produce different blobs
|
||||
* ================================================================ */
|
||||
static void
|
||||
test_encrypt_key_different_inputs (void)
|
||||
{
|
||||
guint8 priv1[32], priv2[32], pub_x[32], pub_y[32];
|
||||
guint8 enc_key[32], val_key[32];
|
||||
|
||||
RAND_bytes (priv1, 32);
|
||||
RAND_bytes (priv2, 32);
|
||||
RAND_bytes (pub_x, 32);
|
||||
RAND_bytes (pub_y, 32);
|
||||
RAND_bytes (enc_key, 32);
|
||||
RAND_bytes (val_key, 32);
|
||||
|
||||
gsize len1, len2;
|
||||
g_autofree guint8 *blob1 = validity_pair_encrypt_key (priv1, pub_x, pub_y,
|
||||
enc_key, val_key, &len1);
|
||||
g_autofree guint8 *blob2 = validity_pair_encrypt_key (priv2, pub_x, pub_y,
|
||||
enc_key, val_key, &len2);
|
||||
|
||||
g_assert_nonnull (blob1);
|
||||
g_assert_nonnull (blob2);
|
||||
g_assert_cmpuint (len1, ==, len2);
|
||||
|
||||
/* Different private keys should produce different ciphertexts */
|
||||
g_assert_true (memcmp (blob1, blob2, len1) != 0);
|
||||
}
|
||||
|
||||
int
|
||||
main (int argc, char *argv[])
|
||||
{
|
||||
g_test_init (&argc, &argv, NULL);
|
||||
|
||||
g_test_add_func ("/validity/pair/parse-flash-info-valid",
|
||||
test_parse_flash_info_valid);
|
||||
g_test_add_func ("/validity/pair/parse-flash-info-needs-pairing",
|
||||
test_parse_flash_info_needs_pairing);
|
||||
g_test_add_func ("/validity/pair/parse-flash-info-too-short",
|
||||
test_parse_flash_info_too_short);
|
||||
g_test_add_func ("/validity/pair/serialize-partition",
|
||||
test_serialize_partition);
|
||||
g_test_add_func ("/validity/pair/make-cert-size",
|
||||
test_make_cert_size);
|
||||
g_test_add_func ("/validity/pair/make-cert-deterministic",
|
||||
test_make_cert_deterministic);
|
||||
g_test_add_func ("/validity/pair/encrypt-key-structure",
|
||||
test_encrypt_key_structure);
|
||||
g_test_add_func ("/validity/pair/encrypt-key-hmac-valid",
|
||||
test_encrypt_key_hmac_valid);
|
||||
g_test_add_func ("/validity/pair/build-partition-flash-cmd",
|
||||
test_build_partition_flash_cmd);
|
||||
g_test_add_func ("/validity/pair/build-tls-flash-size",
|
||||
test_build_tls_flash_size);
|
||||
g_test_add_func ("/validity/pair/build-tls-flash-blocks",
|
||||
test_build_tls_flash_blocks);
|
||||
g_test_add_func ("/validity/pair/state-lifecycle",
|
||||
test_pair_state_lifecycle);
|
||||
g_test_add_func ("/validity/pair/state-free-with-resources",
|
||||
test_pair_state_free_with_resources);
|
||||
g_test_add_func ("/validity/pair/encrypt-key-different-inputs",
|
||||
test_encrypt_key_different_inputs);
|
||||
|
||||
return g_test_run ();
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue