From 969dee239c430d27a21837d51a40acfa4a30a227 Mon Sep 17 00:00:00 2001 From: Robert Lukotka Date: Thu, 4 Apr 2024 10:44:25 +0200 Subject: [PATCH] Memo hash offline_url change --- .../transactionTemplates/commands.ts | 36 ++-- src/decodeDH.c | 158 +++++++----------- src/signTransactionParse.c | 52 +++--- test-integration/decodeMessage.js | 28 +++- .../signTransactionNewfundsreq.js | 32 +++- test-integration/signTransactionRecordobt.js | 37 +++- .../snapshots/decodeMessage/nanos.01.png | Bin 426 -> 415 bytes .../snapshots/decodeMessage/nanos.10.png | Bin 426 -> 415 bytes .../snapshots/decodeMessage/nanos.17.png | Bin 319 -> 329 bytes .../snapshots/decodeMessage/nanos.18.png | Bin 291 -> 415 bytes .../snapshots/decodeMessage/nanos.19.png | Bin 329 -> 282 bytes .../snapshots/decodeMessage/nanos.20.png | Bin 426 -> 426 bytes .../snapshots/decodeMessage/nanos.21.png | Bin 282 -> 384 bytes .../snapshots/decodeMessage/nanos.22.png | Bin 426 -> 373 bytes .../snapshots/decodeMessage/nanos.23.png | Bin 384 -> 298 bytes .../snapshots/decodeMessage/nanos.24.png | Bin 373 -> 323 bytes .../snapshots/decodeMessage/nanos.25.png | Bin 298 -> 334 bytes .../snapshots/decodeMessage/nanos.26.png | Bin 323 -> 269 bytes .../snapshots/decodeMessage/nanos.27.png | Bin 334 -> 261 bytes .../snapshots/decodeMessage/nanos.28.png | Bin 269 -> 283 bytes .../snapshots/decodeMessage/nanos.29.png | Bin 261 -> 329 bytes .../snapshots/decodeMessage/nanos.30.png | Bin 283 -> 415 bytes .../snapshots/decodeMessage/nanos.31.png | Bin 329 -> 282 bytes .../snapshots/decodeMessage/nanos.32.png | Bin 426 -> 426 bytes .../snapshots/decodeMessage/nanos.33.png | Bin 282 -> 384 bytes .../snapshots/decodeMessage/nanos.34.png | Bin 426 -> 373 bytes .../snapshots/decodeMessage/nanos.35.png | Bin 384 -> 298 bytes .../snapshots/decodeMessage/nanos.36.png | Bin 373 -> 323 bytes .../snapshots/decodeMessage/nanos.37.png | Bin 298 -> 334 bytes .../snapshots/decodeMessage/nanos.38.png | Bin 323 -> 269 bytes .../snapshots/decodeMessage/nanos.39.png | Bin 334 -> 261 bytes .../snapshots/decodeMessage/nanos.40.png | Bin 269 -> 329 bytes .../snapshots/decodeMessage/nanos.41.png | Bin 261 -> 415 bytes .../snapshots/decodeMessage/nanos.42.png | Bin 365 -> 282 bytes .../snapshots/decodeMessage/nanos.43.png | Bin 332 -> 426 bytes .../snapshots/decodeMessage/nanos.44.png | Bin 329 -> 384 bytes .../snapshots/decodeMessage/nanos.45.png | Bin 426 -> 298 bytes .../snapshots/decodeMessage/nanos.46.png | Bin 282 -> 323 bytes .../snapshots/decodeMessage/nanos.47.png | Bin 426 -> 334 bytes .../snapshots/decodeMessage/nanos.48.png | Bin 384 -> 329 bytes .../snapshots/decodeMessage/nanos.49.png | Bin 298 -> 415 bytes .../snapshots/decodeMessage/nanos.50.png | Bin 323 -> 282 bytes .../snapshots/decodeMessage/nanos.51.png | Bin 334 -> 426 bytes .../snapshots/decodeMessage/nanos.52.png | Bin 283 -> 384 bytes .../snapshots/decodeMessage/nanos.53.png | Bin 329 -> 298 bytes .../snapshots/decodeMessage/nanos.54.png | Bin 426 -> 323 bytes .../snapshots/decodeMessage/nanos.55.png | Bin 0 -> 334 bytes .../snapshots/decodeMessage/nanos.56.png | Bin 0 -> 283 bytes .../snapshots/decodeMessage/nanos.57.png | Bin 0 -> 329 bytes .../snapshots/decodeMessage/nanos.58.png | Bin 0 -> 415 bytes .../snapshots/decodeMessage/nanosp.01.png | Bin 405 -> 0 bytes .../snapshots/decodeMessage/nanosp.02.png | Bin 346 -> 0 bytes .../snapshots/decodeMessage/nanosp.03.png | Bin 592 -> 0 bytes .../snapshots/decodeMessage/nanosp.04.png | Bin 557 -> 0 bytes .../snapshots/decodeMessage/nanosp.05.png | Bin 358 -> 0 bytes .../snapshots/decodeMessage/nanosp.06.png | Bin 385 -> 0 bytes .../snapshots/decodeMessage/nanosp.07.png | Bin 393 -> 0 bytes .../snapshots/decodeMessage/nanosp.10.png | Bin 405 -> 0 bytes .../snapshots/decodeMessage/nanosp.11.png | Bin 346 -> 0 bytes .../snapshots/decodeMessage/nanosp.12.png | Bin 592 -> 0 bytes .../snapshots/decodeMessage/nanosp.13.png | Bin 557 -> 0 bytes .../snapshots/decodeMessage/nanosp.14.png | Bin 358 -> 0 bytes .../snapshots/decodeMessage/nanosp.15.png | Bin 385 -> 0 bytes .../snapshots/decodeMessage/nanosp.16.png | Bin 393 -> 0 bytes .../snapshots/decodeMessage/nanosp.17.png | Bin 380 -> 0 bytes .../snapshots/decodeMessage/nanosp.18.png | Bin 345 -> 0 bytes .../snapshots/decodeMessage/nanosp.19.png | Bin 455 -> 0 bytes .../snapshots/decodeMessage/nanosp.20.png | Bin 405 -> 0 bytes .../snapshots/decodeMessage/nanosp.21.png | Bin 346 -> 0 bytes .../snapshots/decodeMessage/nanosp.22.png | Bin 724 -> 0 bytes .../snapshots/decodeMessage/nanosp.23.png | Bin 539 -> 0 bytes .../snapshots/decodeMessage/nanosp.24.png | Bin 557 -> 0 bytes .../snapshots/decodeMessage/nanosp.25.png | Bin 544 -> 0 bytes .../snapshots/decodeMessage/nanosp.26.png | Bin 358 -> 0 bytes .../snapshots/decodeMessage/nanosp.27.png | Bin 385 -> 0 bytes .../snapshots/decodeMessage/nanosp.28.png | Bin 393 -> 0 bytes .../snapshots/decodeMessage/nanosp.29.png | Bin 330 -> 0 bytes .../snapshots/decodeMessage/nanosp.30.png | Bin 308 -> 0 bytes .../snapshots/decodeMessage/nanosp.31.png | Bin 347 -> 0 bytes .../snapshots/decodeMessage/nanosp.32.png | Bin 455 -> 0 bytes .../snapshots/decodeMessage/nanosp.33.png | Bin 405 -> 0 bytes .../snapshots/decodeMessage/nanosp.34.png | Bin 346 -> 0 bytes .../snapshots/decodeMessage/nanosp.35.png | Bin 724 -> 0 bytes .../snapshots/decodeMessage/nanosp.36.png | Bin 539 -> 0 bytes .../snapshots/decodeMessage/nanosp.37.png | Bin 760 -> 0 bytes .../snapshots/decodeMessage/nanosp.38.png | Bin 743 -> 0 bytes .../snapshots/decodeMessage/nanosp.39.png | Bin 358 -> 0 bytes .../snapshots/decodeMessage/nanosp.40.png | Bin 385 -> 0 bytes .../snapshots/decodeMessage/nanosp.41.png | Bin 393 -> 0 bytes .../snapshots/decodeMessage/nanosp.42.png | Bin 330 -> 0 bytes .../snapshots/decodeMessage/nanosp.43.png | Bin 308 -> 0 bytes .../snapshots/decodeMessage/nanosp.44.png | Bin 480 -> 0 bytes .../snapshots/decodeMessage/nanosp.45.png | Bin 555 -> 0 bytes .../snapshots/decodeMessage/nanosp.46.png | Bin 455 -> 0 bytes .../snapshots/decodeMessage/nanosp.47.png | Bin 405 -> 0 bytes .../snapshots/decodeMessage/nanosp.48.png | Bin 346 -> 0 bytes .../snapshots/decodeMessage/nanosp.49.png | Bin 592 -> 0 bytes .../snapshots/decodeMessage/nanosp.50.png | Bin 557 -> 0 bytes .../snapshots/decodeMessage/nanosp.51.png | Bin 358 -> 0 bytes .../snapshots/decodeMessage/nanosp.52.png | Bin 385 -> 0 bytes .../snapshots/decodeMessage/nanosp.53.png | Bin 393 -> 0 bytes .../snapshots/decodeMessage/nanosp.54.png | Bin 347 -> 0 bytes .../snapshots/decodeMessage/nanosp.55.png | Bin 455 -> 0 bytes .../snapshots/decodeMessage/nanosp.56.png | Bin 390 -> 0 bytes .../snapshots/decodeMessage/nanosp.57.png | Bin 405 -> 0 bytes .../snapshots/decodeMessage/nanox.17.png | Bin 380 -> 455 bytes .../snapshots/decodeMessage/nanox.18.png | Bin 345 -> 403 bytes .../snapshots/decodeMessage/nanox.19.png | Bin 455 -> 345 bytes .../snapshots/decodeMessage/nanox.20.png | Bin 403 -> 723 bytes .../snapshots/decodeMessage/nanox.21.png | Bin 345 -> 538 bytes .../snapshots/decodeMessage/nanox.22.png | Bin 723 -> 562 bytes .../snapshots/decodeMessage/nanox.23.png | Bin 538 -> 547 bytes .../snapshots/decodeMessage/nanox.24.png | Bin 562 -> 358 bytes .../snapshots/decodeMessage/nanox.25.png | Bin 547 -> 385 bytes .../snapshots/decodeMessage/nanox.26.png | Bin 358 -> 393 bytes .../snapshots/decodeMessage/nanox.27.png | Bin 385 -> 330 bytes .../snapshots/decodeMessage/nanox.28.png | Bin 393 -> 308 bytes .../snapshots/decodeMessage/nanox.29.png | Bin 330 -> 347 bytes .../snapshots/decodeMessage/nanox.30.png | Bin 308 -> 455 bytes .../snapshots/decodeMessage/nanox.31.png | Bin 347 -> 403 bytes .../snapshots/decodeMessage/nanox.32.png | Bin 455 -> 345 bytes .../snapshots/decodeMessage/nanox.33.png | Bin 403 -> 723 bytes .../snapshots/decodeMessage/nanox.34.png | Bin 345 -> 538 bytes .../snapshots/decodeMessage/nanox.35.png | Bin 723 -> 756 bytes .../snapshots/decodeMessage/nanox.36.png | Bin 538 -> 745 bytes .../snapshots/decodeMessage/nanox.37.png | Bin 756 -> 358 bytes .../snapshots/decodeMessage/nanox.38.png | Bin 745 -> 385 bytes .../snapshots/decodeMessage/nanox.39.png | Bin 358 -> 393 bytes .../snapshots/decodeMessage/nanox.40.png | Bin 385 -> 330 bytes .../snapshots/decodeMessage/nanox.41.png | Bin 393 -> 308 bytes .../snapshots/decodeMessage/nanox.42.png | Bin 330 -> 455 bytes .../snapshots/decodeMessage/nanox.43.png | Bin 308 -> 403 bytes .../snapshots/decodeMessage/nanox.44.png | Bin 479 -> 345 bytes .../snapshots/decodeMessage/nanox.45.png | Bin 552 -> 591 bytes .../snapshots/decodeMessage/nanox.46.png | Bin 455 -> 562 bytes .../snapshots/decodeMessage/nanox.47.png | Bin 403 -> 358 bytes .../snapshots/decodeMessage/nanox.48.png | Bin 345 -> 385 bytes .../snapshots/decodeMessage/nanox.49.png | Bin 591 -> 393 bytes .../snapshots/decodeMessage/nanox.50.png | Bin 562 -> 455 bytes .../snapshots/decodeMessage/nanox.51.png | Bin 358 -> 403 bytes .../snapshots/decodeMessage/nanox.52.png | Bin 385 -> 345 bytes .../snapshots/decodeMessage/nanox.53.png | Bin 393 -> 591 bytes .../snapshots/decodeMessage/nanox.54.png | Bin 347 -> 562 bytes .../snapshots/decodeMessage/nanox.55.png | Bin 455 -> 358 bytes .../snapshots/decodeMessage/nanox.56.png | Bin 389 -> 385 bytes .../snapshots/decodeMessage/nanox.57.png | Bin 403 -> 393 bytes .../{nanosp.08.png => nanox.58.png} | Bin .../{nanosp.09.png => nanox.59.png} | Bin .../snapshots/decodeMessage/nanox.60.png | Bin 0 -> 389 bytes .../snapshots/decodeMessage/nanox.61.png | Bin 0 -> 403 bytes 150 files changed, 195 insertions(+), 148 deletions(-) create mode 100644 test-integration/snapshots/decodeMessage/nanos.55.png create mode 100644 test-integration/snapshots/decodeMessage/nanos.56.png create mode 100644 test-integration/snapshots/decodeMessage/nanos.57.png create mode 100644 test-integration/snapshots/decodeMessage/nanos.58.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.01.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.02.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.03.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.04.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.05.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.06.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.07.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.10.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.11.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.12.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.13.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.14.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.15.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.16.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.17.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.18.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.19.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.20.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.21.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.22.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.23.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.24.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.25.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.26.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.27.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.28.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.29.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.30.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.31.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.32.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.33.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.34.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.35.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.36.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.37.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.38.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.39.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.40.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.41.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.42.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.43.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.44.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.45.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.46.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.47.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.48.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.49.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.50.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.51.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.52.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.53.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.54.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.55.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.56.png delete mode 100644 test-integration/snapshots/decodeMessage/nanosp.57.png rename test-integration/snapshots/decodeMessage/{nanosp.08.png => nanox.58.png} (100%) rename test-integration/snapshots/decodeMessage/{nanosp.09.png => nanox.59.png} (100%) create mode 100644 test-integration/snapshots/decodeMessage/nanox.60.png create mode 100644 test-integration/snapshots/decodeMessage/nanox.61.png diff --git a/ledgerjs-fio/src/interactions/transactionTemplates/commands.ts b/ledgerjs-fio/src/interactions/transactionTemplates/commands.ts index 572c1744..600441bf 100644 --- a/ledgerjs-fio/src/interactions/transactionTemplates/commands.ts +++ b/ledgerjs-fio/src/interactions/transactionTemplates/commands.ts @@ -413,30 +413,28 @@ export function ADD_STORAGE_CHECK(check: VALUE_STORAGE_COMPARE, c: Command): Com } } -export function COMMAND_APPEND_DATA_MEMO_HASH(memo?: VarlenAsciiString, hash?: VarlenAsciiString, offline_url?: VarlenAsciiString): Command { - var varData: Buffer = Buffer.from(""); - if (memo === undefined) { - validate(hash !== undefined, InvalidDataReason.INVALID_HASH); - validate(offline_url !== undefined, InvalidDataReason.INVALID_OFFLINE_URL); - varData = Buffer.concat([ - Buffer.from("0001", "hex"), - varuint32_to_buf(hash.length), - Buffer.from(hash), - Buffer.from("01", "hex"), - varuint32_to_buf(offline_url.length), - Buffer.from(offline_url), - ]) +function serializeOptionalString(str?: VarlenAsciiString): Buffer { + if (str === undefined) { + return Buffer.from("00", "hex") } else { - validate(hash === undefined, InvalidDataReason.INVALID_HASH); - validate(hash === undefined, InvalidDataReason.INVALID_OFFLINE_URL); - varData = Buffer.concat([ + return Buffer.concat([ Buffer.from("01", "hex"), - varuint32_to_buf(memo.length), - Buffer.from(memo), - Buffer.from("0000", "hex"), + varuint32_to_buf(str.length), + Buffer.from(str), ]) } +} + +export function COMMAND_APPEND_DATA_MEMO_HASH(memo?: VarlenAsciiString, hash?: VarlenAsciiString, offline_url?: VarlenAsciiString): Command { + validate((hash !== undefined && offline_url !== undefined) || (hash === undefined && offline_url === undefined), InvalidDataReason.INVALID_HASH); + + const varData = Buffer.concat([ + serializeOptionalString(memo), + serializeOptionalString(hash), + serializeOptionalString(offline_url), + ]) + return { ...defaultCommand, command: COMMAND.APPEND_DATA, diff --git a/src/decodeDH.c b/src/decodeDH.c index 7e1a28cf..a866a55a 100644 --- a/src/decodeDH.c +++ b/src/decodeDH.c @@ -122,78 +122,62 @@ static void decodeNewfundsreqMemo_ui_runStep() { } enum { - DECODE_NEWFUNDSREQ_HASH_UI_STEP_MESSAGE1 = 250, - DECODE_NEWFUNDSREQ_HASH_UI_STEP_MESSAGE2, - DECODE_NEWFUNDSREQ_HASH_UI_STEP_PAYEE_PUBLIC_ADDRESS, - DECODE_NEWFUNDSREQ_HASH_UI_STEP_AMOUNT, - DECODE_NEWFUNDSREQ_HASH_UI_STEP_CHAIN_CODE, - DECODE_NEWFUNDSREQ_HASH_UI_STEP_TOKEN_CODE, - DECODE_NEWFUNDSREQ_HASH_UI_STEP_HASH, - DECODE_NEWFUNDSREQ_HASH_UI_STEP_OFFLINE_URL, - DECODE_NEWFUNDSREQ_HASH_UI_STEP_CONFIRM, - DECODE_NEWFUNDSREQ_HASH_UI_STEP_RESPOND, - DECODE_NEWFUNDSREQ_HASH_UI_STEP_INVALID, + DECODE_NEWFUNDSREQ_NOMEMO_UI_STEP_MESSAGE1 = 250, + DECODE_NEWFUNDSREQ_NOMEMO_UI_STEP_MESSAGE2, + DECODE_NEWFUNDSREQ_NOMEMO_UI_STEP_PAYEE_PUBLIC_ADDRESS, + DECODE_NEWFUNDSREQ_NOMEMO_UI_STEP_AMOUNT, + DECODE_NEWFUNDSREQ_NOMEMO_UI_STEP_CHAIN_CODE, + DECODE_NEWFUNDSREQ_NOMEMO_UI_STEP_TOKEN_CODE, + DECODE_NEWFUNDSREQ_NOMEMO_UI_STEP_CONFIRM, + DECODE_NEWFUNDSREQ_NOMEMO_UI_STEP_RESPOND, + DECODE_NEWFUNDSREQ_NOMEMO_UI_STEP_INVALID, }; -static void decodeNewfundsreqHash_ui_runStep() { +static void decodeNewfundsreqNoMemo_ui_runStep() { TRACE("UI step %d", ctx->ui_step); - ui_callback_fn_t *this_fn = decodeNewfundsreqHash_ui_runStep; + ui_callback_fn_t *this_fn = decodeNewfundsreqNoMemo_ui_runStep; UI_STEP_BEGIN(ctx->ui_step, this_fn); - UI_STEP(DECODE_NEWFUNDSREQ_HASH_UI_STEP_MESSAGE1) { + UI_STEP(DECODE_NEWFUNDSREQ_NOMEMO_UI_STEP_MESSAGE1) { ui_displayPaginatedText("Decrypt content", "", this_fn); } - UI_STEP(DECODE_NEWFUNDSREQ_HASH_UI_STEP_MESSAGE2) { + UI_STEP(DECODE_NEWFUNDSREQ_NOMEMO_UI_STEP_MESSAGE2) { ui_displayPaginatedText("Interpreting", "the message as Request funds", this_fn); } - UI_STEP(DECODE_NEWFUNDSREQ_HASH_UI_STEP_PAYEE_PUBLIC_ADDRESS) { + UI_STEP(DECODE_NEWFUNDSREQ_NOMEMO_UI_STEP_PAYEE_PUBLIC_ADDRESS) { ui_displayAsciiBufferScreen("Payee public address", ctx->parsedContent.payee_public_address->data, ctx->parsedContent.payee_public_address->length, this_fn); } - UI_STEP(DECODE_NEWFUNDSREQ_HASH_UI_STEP_AMOUNT) { + UI_STEP(DECODE_NEWFUNDSREQ_NOMEMO_UI_STEP_AMOUNT) { ui_displayAsciiBufferScreen("Amount", ctx->parsedContent.amount->data, ctx->parsedContent.amount->length, this_fn); } - UI_STEP(DECODE_NEWFUNDSREQ_HASH_UI_STEP_CHAIN_CODE) { + UI_STEP(DECODE_NEWFUNDSREQ_NOMEMO_UI_STEP_CHAIN_CODE) { ui_displayAsciiBufferScreen("Chain code", ctx->parsedContent.chain_code->data, ctx->parsedContent.chain_code->length, this_fn); } - UI_STEP(DECODE_NEWFUNDSREQ_HASH_UI_STEP_TOKEN_CODE) { + UI_STEP(DECODE_NEWFUNDSREQ_NOMEMO_UI_STEP_TOKEN_CODE) { ui_displayAsciiBufferScreen("Token code", ctx->parsedContent.token_code->data, ctx->parsedContent.token_code->length, this_fn); } - UI_STEP(DECODE_NEWFUNDSREQ_HASH_UI_STEP_HASH) { - ASSERT(ctx->parsedContent.hash != NULL); - ui_displayAsciiBufferScreen("Hash", - ctx->parsedContent.hash->data, - ctx->parsedContent.hash->length, - this_fn); - } - UI_STEP(DECODE_NEWFUNDSREQ_HASH_UI_STEP_OFFLINE_URL) { - ASSERT(ctx->parsedContent.offline_url != NULL); - ui_displayAsciiBufferScreen("Offline URL", - ctx->parsedContent.offline_url->data, - ctx->parsedContent.offline_url->length, - this_fn); - } - UI_STEP(DECODE_NEWFUNDSREQ_HASH_UI_STEP_CONFIRM) { + UI_STEP(DECODE_NEWFUNDSREQ_NOMEMO_UI_STEP_CONFIRM) { ui_displayPrompt("Confirm", "response", this_fn, dh_respond_with_user_reject); } - UI_STEP(DECODE_NEWFUNDSREQ_HASH_UI_STEP_RESPOND) { + UI_STEP(DECODE_NEWFUNDSREQ_NOMEMO_UI_STEP_RESPOND) { io_send_buf(SUCCESS, NULL, 0); ui_displayBusy(); // needs to happen after I/O ctx->stage = DECODE_STAGE_SEND_REST; } - UI_STEP_END(DECODE_NEWFUNDSREQ_HASH_UI_STEP_INVALID); + UI_STEP_END(DECODE_NEWFUNDSREQ_NOMEMO_UI_STEP_INVALID); } // Parse newfundsreq data @@ -210,19 +194,18 @@ static void decodeNewfundsreqUIFlow() { readOptionalStringWithLength(&read, &ctx->parsedContent.hash); readOptionalStringWithLength(&read, &ctx->parsedContent.offline_url); VALIDATE(read == ctx->bufferLen, ERR_INVALID_DATA); + bool hasMemo = (ctx->parsedContent.memo != NULL); + bool hasHash = (ctx->parsedContent.hash != NULL); + bool hasOfflineUrl = (ctx->parsedContent.offline_url != NULL); + VALIDATE((hasHash && hasOfflineUrl) || (!hasHash && !hasOfflineUrl), ERR_INVALID_DATA); - if (ctx->parsedContent.memo != NULL && ctx->parsedContent.hash == NULL && - ctx->parsedContent.offline_url == NULL) { + if (hasMemo) { ctx->ui_step = DECODE_NEWFUNDSREQ_MEMO_UI_STEP_MESSAGE1; decodeNewfundsreqMemo_ui_runStep(); - } else if (ctx->parsedContent.memo == NULL && ctx->parsedContent.hash != NULL && - ctx->parsedContent.offline_url != NULL) { - ctx->ui_step = DECODE_NEWFUNDSREQ_HASH_UI_STEP_MESSAGE1; - decodeNewfundsreqHash_ui_runStep(); - } else { - THROW(ERR_INVALID_DATA); - } + ctx->ui_step = DECODE_NEWFUNDSREQ_NOMEMO_UI_STEP_MESSAGE1; + decodeNewfundsreqNoMemo_ui_runStep(); + } } // ============================== RECORDOBT state machine ============================== @@ -318,101 +301,85 @@ static void decodeRecordobtMemo_ui_runStep() { } enum { - DECODE_RECORDOBT_HASH_UI_STEP_MESSAGE1 = 350, - DECODE_RECORDOBT_HASH_UI_STEP_MESSAGE2, - DECODE_RECORDOBT_HASH_UI_STEP_PAYEE_PUBLIC_ADDRESS, - DECODE_RECORDOBT_HASH_UI_STEP_PAYER_PUBLIC_ADDRESS, - DECODE_RECORDOBT_HASH_UI_STEP_AMOUNT, - DECODE_RECORDOBT_HASH_UI_STEP_CHAIN_CODE, - DECODE_RECORDOBT_HASH_UI_STEP_TOKEN_CODE, - DECODE_RECORDOBT_HASH_UI_STEP_STATUS, - DECODE_RECORDOBT_HASH_UI_STEP_OBT_ID, - DECODE_RECORDOBT_HASH_UI_STEP_HASH, - DECODE_RECORDOBT_HASH_UI_STEP_OFFLINE_URL, - DECODE_RECORDOBT_HASH_UI_STEP_CONFIRM, - DECODE_RECORDOBT_HASH_UI_STEP_RESPOND, - DECODE_RECORDOBT_HASH_UI_STEP_INVALID, + DECODE_RECORDOBT_NO_MEMO_UI_STEP_MESSAGE1 = 350, + DECODE_RECORDOBT_NO_MEMO_UI_STEP_MESSAGE2, + DECODE_RECORDOBT_NO_MEMO_UI_STEP_PAYEE_PUBLIC_ADDRESS, + DECODE_RECORDOBT_NO_MEMO_UI_STEP_PAYER_PUBLIC_ADDRESS, + DECODE_RECORDOBT_NO_MEMO_UI_STEP_AMOUNT, + DECODE_RECORDOBT_NO_MEMO_UI_STEP_CHAIN_CODE, + DECODE_RECORDOBT_NO_MEMO_UI_STEP_TOKEN_CODE, + DECODE_RECORDOBT_NO_MEMO_UI_STEP_STATUS, + DECODE_RECORDOBT_NO_MEMO_UI_STEP_OBT_ID, + DECODE_RECORDOBT_NO_MEMO_UI_STEP_CONFIRM, + DECODE_RECORDOBT_NO_MEMO_UI_STEP_RESPOND, + DECODE_RECORDOBT_NO_MEMO_UI_STEP_INVALID, }; -static void decodeRecordobtHash_ui_runStep() { +static void decodeRecordobtNoMemo_ui_runStep() { TRACE("UI step %d", ctx->ui_step); - ui_callback_fn_t *this_fn = decodeRecordobtHash_ui_runStep; + ui_callback_fn_t *this_fn = decodeRecordobtNoMemo_ui_runStep; UI_STEP_BEGIN(ctx->ui_step, this_fn); - UI_STEP(DECODE_RECORDOBT_HASH_UI_STEP_MESSAGE1) { + UI_STEP(DECODE_RECORDOBT_NO_MEMO_UI_STEP_MESSAGE1) { ui_displayPaginatedText("Decrypt content", "", this_fn); } - UI_STEP(DECODE_RECORDOBT_HASH_UI_STEP_MESSAGE2) { + UI_STEP(DECODE_RECORDOBT_NO_MEMO_UI_STEP_MESSAGE2) { ui_displayPaginatedText("Interpreting", "the message as Record other blockchain transaction metadata", this_fn); } - UI_STEP(DECODE_RECORDOBT_HASH_UI_STEP_PAYEE_PUBLIC_ADDRESS) { + UI_STEP(DECODE_RECORDOBT_NO_MEMO_UI_STEP_PAYEE_PUBLIC_ADDRESS) { ui_displayAsciiBufferScreen("Payee public address", ctx->parsedContent.payee_public_address->data, ctx->parsedContent.payee_public_address->length, this_fn); } - UI_STEP(DECODE_RECORDOBT_HASH_UI_STEP_PAYER_PUBLIC_ADDRESS) { + UI_STEP(DECODE_RECORDOBT_NO_MEMO_UI_STEP_PAYER_PUBLIC_ADDRESS) { ui_displayAsciiBufferScreen("Payer public address", ctx->parsedContent.payer_public_address->data, ctx->parsedContent.payer_public_address->length, this_fn); } - UI_STEP(DECODE_RECORDOBT_HASH_UI_STEP_AMOUNT) { + UI_STEP(DECODE_RECORDOBT_NO_MEMO_UI_STEP_AMOUNT) { ui_displayAsciiBufferScreen("Amount", ctx->parsedContent.amount->data, ctx->parsedContent.amount->length, this_fn); } - UI_STEP(DECODE_RECORDOBT_HASH_UI_STEP_CHAIN_CODE) { + UI_STEP(DECODE_RECORDOBT_NO_MEMO_UI_STEP_CHAIN_CODE) { ui_displayAsciiBufferScreen("Chain code", ctx->parsedContent.chain_code->data, ctx->parsedContent.chain_code->length, this_fn); } - UI_STEP(DECODE_RECORDOBT_HASH_UI_STEP_TOKEN_CODE) { + UI_STEP(DECODE_RECORDOBT_NO_MEMO_UI_STEP_TOKEN_CODE) { ui_displayAsciiBufferScreen("Token code", ctx->parsedContent.token_code->data, ctx->parsedContent.token_code->length, this_fn); } - UI_STEP(DECODE_RECORDOBT_HASH_UI_STEP_STATUS) { + UI_STEP(DECODE_RECORDOBT_NO_MEMO_UI_STEP_STATUS) { ui_displayAsciiBufferScreen("Status", ctx->parsedContent.status->data, ctx->parsedContent.status->length, this_fn); } - UI_STEP(DECODE_RECORDOBT_HASH_UI_STEP_OBT_ID) { + UI_STEP(DECODE_RECORDOBT_NO_MEMO_UI_STEP_OBT_ID) { ui_displayAsciiBufferScreen("Obt ID", ctx->parsedContent.obt_id->data, ctx->parsedContent.obt_id->length, this_fn); } - UI_STEP(DECODE_RECORDOBT_HASH_UI_STEP_HASH) { - ASSERT(ctx->parsedContent.hash != NULL); - ui_displayAsciiBufferScreen("Hash", - ctx->parsedContent.hash->data, - ctx->parsedContent.hash->length, - this_fn); - } - UI_STEP(DECODE_RECORDOBT_HASH_UI_STEP_OFFLINE_URL) { - ASSERT(ctx->parsedContent.offline_url != NULL); - ui_displayAsciiBufferScreen("Offline URL", - ctx->parsedContent.offline_url->data, - ctx->parsedContent.offline_url->length, - this_fn); - } - UI_STEP(DECODE_RECORDOBT_HASH_UI_STEP_CONFIRM) { + UI_STEP(DECODE_RECORDOBT_NO_MEMO_UI_STEP_CONFIRM) { ui_displayPrompt("Confirm", "response", this_fn, dh_respond_with_user_reject); } - UI_STEP(DECODE_RECORDOBT_HASH_UI_STEP_RESPOND) { + UI_STEP(DECODE_RECORDOBT_NO_MEMO_UI_STEP_RESPOND) { io_send_buf(SUCCESS, NULL, 0); ui_displayBusy(); // needs to happen after I/O ctx->stage = DECODE_STAGE_SEND_REST; } - UI_STEP_END(DECODE_RECORDOBT_HASH_UI_STEP_INVALID); + UI_STEP_END(DECODE_RECORDOBT_NO_MEMO_UI_STEP_INVALID); } // Parse newfundsreq data @@ -432,19 +399,18 @@ static void decodeRecordobtUIFlow() { readOptionalStringWithLength(&read, &ctx->parsedContent.hash); readOptionalStringWithLength(&read, &ctx->parsedContent.offline_url); VALIDATE(read == ctx->bufferLen, ERR_INVALID_DATA); + bool hasMemo = (ctx->parsedContent.memo != NULL); + bool hasHash = (ctx->parsedContent.hash != NULL); + bool hasOfflineUrl = (ctx->parsedContent.offline_url != NULL); + VALIDATE((hasHash && hasOfflineUrl) || (!hasHash && !hasOfflineUrl), ERR_INVALID_DATA); - if (ctx->parsedContent.memo != NULL && ctx->parsedContent.hash == NULL && - ctx->parsedContent.offline_url == NULL) { + if (hasMemo) { ctx->ui_step = DECODE_RECORDOBT_MEMO_UI_STEP_MESSAGE1; decodeRecordobtMemo_ui_runStep(); - } else if (ctx->parsedContent.memo == NULL && ctx->parsedContent.hash != NULL && - ctx->parsedContent.offline_url != NULL) { - ctx->ui_step = DECODE_RECORDOBT_HASH_UI_STEP_MESSAGE1; - decodeRecordobtHash_ui_runStep(); - } else { - THROW(ERR_INVALID_DATA); - } + ctx->ui_step = DECODE_RECORDOBT_NO_MEMO_UI_STEP_MESSAGE1; + decodeRecordobtNoMemo_ui_runStep(); + } } // ============================== MAIN HANDLER ============================== diff --git a/src/signTransactionParse.c b/src/signTransactionParse.c index 29bb4177..9a8d0c47 100644 --- a/src/signTransactionParse.c +++ b/src/signTransactionParse.c @@ -86,38 +86,38 @@ static void displayASCIIStringWithLength(const uint8_t *value, display[strLen] = 0; } +//helper for displayMemoHash +static bool validateOptional(const uint8_t *value, uint8_t valueLen, uint8_t *read) { + VALIDATE(valueLen >= *read+1, ERR_INVALID_DATA); + uint8_t hasOptional = value[*read]; + if (hasOptional) { + VALIDATE(hasOptional == 1, ERR_INVALID_DATA); + VALIDATE(valueLen >= *read+2, ERR_INVALID_DATA); + uint8_t optionalLen = value[*read+1]; + VALIDATE(optionalLen < 127, ERR_INVALID_DATA); + *read += 2+optionalLen; + return true; + } + else { + *read += 1; + return false; + } +} + static void displayMemoHash(const uint8_t *value, uint8_t valueLen, char display[MAX_DISPLAY_VALUE_LENGTH]) { // data format: // hasMemo(0x00/0x01), if yes then memolength (1b, < 127) and memo - // then hash and offline url in the same manner - // Either memo is present, or both hash and offline url. + // hasHash(0x00/0x01), if yes then hashlength (1b, < 127) and hash + // hasOfflineUrl(0x00/0x01), if yes then offlineurllength (1b, < 127) and offlineurl + // hash and offline url have to be present at the same time. TRACE_BUFFER(value, valueLen); - VALIDATE(valueLen >= 1, ERR_INVALID_DATA); - if (value[0] == 1) { // has memo - VALIDATE(valueLen >= 2, - ERR_INVALID_DATA); // this also checks that memo has length at least 1 - size_t memoLen = value[1]; - VALIDATE(memoLen < 127, ERR_INVALID_DATA); - VALIDATE(valueLen == memoLen + 4, - ERR_INVALID_DATA); // has memo, memo length, memo, no hash, no url - VALIDATE(value[2 + memoLen] == 0, ERR_INVALID_DATA); // no hash - VALIDATE(value[3 + memoLen] == 0, ERR_INVALID_DATA); // no offline_url - } else if (value[0] == 0) { // no memo - TRACE("No memo"); - VALIDATE(valueLen >= 3, ERR_INVALID_DATA); - VALIDATE(value[1] == 1, ERR_INVALID_DATA); // has hash - size_t hashLen = value[2]; - VALIDATE(hashLen < 127, ERR_INVALID_DATA); - VALIDATE(valueLen >= hashLen + 5, ERR_INVALID_DATA); - VALIDATE(value[hashLen + 3] == 1, ERR_INVALID_DATA); // has url - size_t urlLen = value[hashLen + 4]; - VALIDATE(urlLen < 127, ERR_INVALID_DATA); - VALIDATE(valueLen == hashLen + urlLen + 5, ERR_INVALID_DATA); - } else { - VALIDATE(false, ERR_INVALID_DATA); - } + uint8_t read = 0; + bool hasMemo = validateOptional(value, valueLen, &read); + bool hasHash = validateOptional(value, valueLen, &read); + bool hasOfflineUrl = validateOptional(value, valueLen, &read); + VALIDATE((hasHash && hasOfflineUrl) || (!hasHash && !hasOfflineUrl), ERR_INVALID_DATA); // These data are not meant to e displayed at themoement snprintf(display, MAX_DISPLAY_VALUE_LENGTH, "NOT IMPLEMENTED"); } diff --git a/test-integration/decodeMessage.js b/test-integration/decodeMessage.js index b0da1113..0929220b 100644 --- a/test-integration/decodeMessage.js +++ b/test-integration/decodeMessage.js @@ -67,13 +67,23 @@ const content4 = { } const content5 = { + payee_public_address: "Payee public address", + amount: "Amount 100", + chain_code: "BTC1", + token_code: "BTC2", + memo: undefined, + hash: undefined, + offline_url: undefined, +} + +const content6 = { payee_public_address: "Payee public address", amount: "Amount 100", chain_code: "BTC1", token_code: "BTC2", memo: "My memo", hash: "My hash", - offline_url: "Offline URL", + offline_url: undefined, } const path = [44 + HARDENED, 235 + HARDENED, 0 + HARDENED, 0, 0] @@ -91,6 +101,7 @@ const encryptedContent2 = sharedCipher.encrypt('new_funds_content', content2) const encryptedContent3 = sharedCipher.encrypt('record_obt_data_content', content3) const encryptedContent4 = sharedCipher.encrypt('record_obt_data_content', content4) const encryptedContent5 = sharedCipher.encrypt('new_funds_content', content5) +const encryptedContent6 = sharedCipher.encrypt('new_funds_content', content6) testStep(" - - -", "await app.decodeMessage() - newfundsreq memo"); { @@ -105,7 +116,7 @@ testStep(" - - -", "await app.decodeMessage() - newfundsreq hash"); { const decodeMessagePromise = app.decodeMessage({path: path, publicKeyHex: otherPublicKey.toUncompressed().toBuffer().toString("hex"), message: encryptedContent2, context: "newfundsreq"}); - await device.review([1, 1, 1, 1, 1, 1, 1, 1], "Review decode message"); + await device.review([1, 1, 1, 1, 1, 1], "Review decode message"); const decodeMessageResponse = await decodeMessagePromise; assert.equal(decodeMessageResponse.message.toString("hex"), "145061796565207075626c696320616464726573730a416d6f756e7420313030044254433104425443320001074d792068617368010b4f66666c696e652055524c") } @@ -124,15 +135,24 @@ testStep(" - - -", "await app.decodeMessage() - recordobt hash"); console.log(encryptedContent4) const decodeMessagePromise = app.decodeMessage({path: path, publicKeyHex: otherPublicKey.toUncompressed().toBuffer().toString("hex"), message: encryptedContent4, context: "recordobt"}); - await device.review([1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1], "Review decode message"); + await device.review([1, 2, 1, 1, 1, 1, 1, 1, 1], "Review decode message"); const decodeMessageResponse = await decodeMessagePromise; assert.equal(decodeMessageResponse.message.toString("hex"), "2d5061796572207075626c696320616464726573732069732076657279206c6f6e672c206c6f6e672c206c6f6e672d5061796565207075626c696320616464726573732069732076657279206c6f6e672c206c6f6e672c206c6f6e670a416d6f756e74203130300442544331044254433206537461747573064f62742049440001234d792068617368206973207175697465206c6f6e6720746f6f2c20746f6f2c20746f6f01224f66666c696e652055524c206973207175697465206c6f6e6720746f6f2c20746f6f") } -testStep(" - - -", "await app.decodeMessage() - newfundsreq invalid both memo and hash"); +testStep(" - - -", "await app.decodeMessage() - newfundsreq no memo no hash no offline url"); { const decodeMessagePromise = app.decodeMessage({path: path, publicKeyHex: otherPublicKey.toUncompressed().toBuffer().toString("hex"), message: encryptedContent5, context: "newfundsreq"}); + await device.review([1, 1, 1, 1, 1, 1], "Review decode message"); + const decodeMessageResponse = await decodeMessagePromise; + assert.equal(decodeMessageResponse.message.toString("hex"), "145061796565207075626c696320616464726573730a416d6f756e742031303004425443310442544332000000") +} + +testStep(" - - -", "await app.decodeMessage() - newfundsreq invalid hash defined offlineurl undefined"); +{ + const decodeMessagePromise = app.decodeMessage({path: path, publicKeyHex: otherPublicKey.toUncompressed().toBuffer().toString("hex"), + message: encryptedContent6, context: "newfundsreq"}); await assert.rejects(decodeMessagePromise, DeviceStatusError); } diff --git a/test-integration/signTransactionNewfundsreq.js b/test-integration/signTransactionNewfundsreq.js index 8e413b98..310d5921 100644 --- a/test-integration/signTransactionNewfundsreq.js +++ b/test-integration/signTransactionNewfundsreq.js @@ -156,6 +156,34 @@ const txHash = { }], } +const txNothing = { + expiration: "2021-08-28T12:50:36.686", + ref_block_num: 0x1122, + ref_block_prefix: 0x33445566, + context_free_actions: [], + actions: [{ + account: "fio.reqobt", + name: "newfundsreq", + authorization: [{ + actor: "aftyershcu22", + permission: "active", + }], + data: { + payer_fio_address: "My payer address", + payee_fio_address: "My payee address", + max_fee: 0x11223344, + tpid: "rewards@wallet", + actor: "aftyershcu22", + + other_public_key: otherPublicKey.toUncompressed().toBuffer().toString("hex"), + payee_public_address: "My payee public address", + amount: "amount 1000", + chain_code: "BTC", + token_code: "BTC", + }, + }], +} + //------------------- SERIALIZE TRANSACTION ------------------------------------------------ async function buildTxUsingFioJs(network, tx, iv) { @@ -277,9 +305,9 @@ testStep(" - - -", "Sign testnet transaction - hash"); await runTxTest("TESTNET", txHash, longSequence, secondSequence) } -testStep(" - - -", "Sign testnet mainnet - hash"); +testStep(" - - -", "Sign testnet mainnet - nothing"); { - await runTxTest("MAINNET", txHash, longSequence, secondSequence) + await runTxTest("MAINNET", txNothing, longSequence, secondSequence) } await transport.close() diff --git a/test-integration/signTransactionRecordobt.js b/test-integration/signTransactionRecordobt.js index 1e62aa89..d56c1fb9 100644 --- a/test-integration/signTransactionRecordobt.js +++ b/test-integration/signTransactionRecordobt.js @@ -171,6 +171,41 @@ const txHash = { }], } +const txAll = { + expiration: "2021-08-28T12:50:36.686", + ref_block_num: 0x1122, + ref_block_prefix: 0x33445566, + context_free_actions: [], + actions: [{ + account: "fio.reqobt", + name: "recordobt", + authorization: [{ + actor: "aftyershcu22", + permission: "active", + }], + data: { + fio_request_id: "", + payer_fio_address: "My payer address", + payee_fio_address: "My payee address", + max_fee: 0x11223344, + tpid: "rewards@wallet", + actor: "aftyershcu22", + + other_public_key: otherPublicKey.toUncompressed().toBuffer().toString("hex"), + payer_public_address: "My payer public address", + payee_public_address: "My payee public address", + amount: "amount 1000", + chain_code: "BTC", + token_code: "BTC", + status: "status", + obt_id: "obt ID", + memo: "I have memo", + hash: "I have hash", + offline_url: "I have url", + }, + }], +} + //------------------- SERIALIZE TRANSACTION ------------------------------------------------ async function buildTxUsingFioJs(network, tx, iv) { @@ -295,7 +330,7 @@ testStep(" - - -", "Sign testnet mainnet - memo"); testStep(" - - -", "Sign testnet transaction - hash"); { - await runTxTest("TESTNET", txHash, longSequenceHash, secondSequence) + await runTxTest("TESTNET", txAll, longSequenceHash, secondSequence) } testStep(" - - -", "Sign testnet mainnet - hash"); diff --git a/test-integration/snapshots/decodeMessage/nanos.01.png b/test-integration/snapshots/decodeMessage/nanos.01.png index a0f9b734c15529d0d47fac9e4f36a34aeee88c0a..0b8230043cd1d5d8700b6e706fc50c591984d5b6 100644 GIT binary patch delta 388 zcmV-~0ek+c1D^wsB!6Z}L_t(|ob8#>lEWYfMajF-kvbwsJl<1icCP53zd8mR}xKe4;!`oe7Ha&kN$%^-k@tgxY^_rPPR7&|>hl zAYbf!S$g!<&3(Al$TvgG^Ow`B1?&O3)Z;%mO>Uso?d6PGN5#}`@+Si=BZ^TukRA|k zxAtUm<;iFscUxD7c=I!0zL=^9t~i;I2FMf|%Qju`B4fXnBl!yeU=PrR%4#OY_Md`Bs{|EP>dobw;AakooUGI5njX`@A z6iNgD0N}1HIm7N75z(@~pT%o=K5zW;JaUE=(jRouZdqqhpNO8>6R5+N=MZ$?Xj$Lu z#9ztsA*Ta}+Z;=h2MEm1E*n`(Cgdv;JJdQHjj8T3i3bQGB!5dj#8SWO8BmL@qN-yiT)Ofz=3@TaDE;OZkcjasJfC9AbjKe}*@xkTnXuS> z=C1|bBC4mlgMYRrT68_N9|QA%mXxQZ4;RiUA02kg;c^CF8;5jK2LAX3kQC4&UvH)Z&j*8PxQvAO(0p?Yt6tIdOnD uwx51ZWYgBn4%|Za?Faw>007{>c>zfN!b+jC;amU!00{s|MNUMnLSTX|Kfc!h diff --git a/test-integration/snapshots/decodeMessage/nanos.10.png b/test-integration/snapshots/decodeMessage/nanos.10.png index a0f9b734c15529d0d47fac9e4f36a34aeee88c0a..0b8230043cd1d5d8700b6e706fc50c591984d5b6 100644 GIT binary patch delta 388 zcmV-~0ek+c1D^wsB!6Z}L_t(|ob8#>lEWYfMajF-kvbwsJl<1icCP53zd8mR}xKe4;!`oe7Ha&kN$%^-k@tgxY^_rPPR7&|>hl zAYbf!S$g!<&3(Al$TvgG^Ow`B1?&O3)Z;%mO>Uso?d6PGN5#}`@+Si=BZ^TukRA|k zxAtUm<;iFscUxD7c=I!0zL=^9t~i;I2FMf|%Qju`B4fXnBl!yeU=PrR%4#OY_Md`Bs{|EP>dobw;AakooUGI5njX`@A z6iNgD0N}1HIm7N75z(@~pT%o=K5zW;JaUE=(jRouZdqqhpNO8>6R5+N=MZ$?Xj$Lu z#9ztsA*Ta}+Z;=h2MEm1E*n`(Cgdv;JJdQHjj8T3i3bQGB!5dj#8SWO8BmL@qN-yiT)Ofz=3@TaDE;OZkcjasJfC9AbjKe}*@xkTnXuS> z=C1|bBC4mlgMYRrT68_N9|QA%mXxQZ4;RiUA02kg;c^CF8;5jK2LAX3kQC4&UvH)Z&j*8PxQvAO(0p?Yt6tIdOnD uwx51ZWYgBn4%|Za?Faw>007{>c>zfN!b+jC;amU!00{s|MNUMnLSTX|Kfc!h diff --git a/test-integration/snapshots/decodeMessage/nanos.17.png b/test-integration/snapshots/decodeMessage/nanos.17.png index 10c212723b1b1c4ea34842762edf7eb40fb7ec27..8d806ca2d7eea00dc3fa6987f665e26c9907fcbc 100644 GIT binary patch delta 302 zcmV+}0nz@y0?7i9B!3V|L_t(|ob8#(62l+}hPBhY{{wrl2Pd`>x4INk{_m8yFb*In z8Up|TKr5De0Vm$QzwI$NJxug&M1pF(yBJ_#`fZW114=#{H5+^BM#;7$UG_+aQOT;w zy6|UX{BAZj2UjL?@Zes6c3=Qz#27$8G+^P$y#Qm(nH7`7sDCb1QXkanm3)+r4PY%b z-G)ABe;;k#Li_vZ)jn*nitnO2a=;FHeHy2reL$09;jV@zSFO%pbG@4N6iw^HR9y73 z)Qgm*GG}Sbe9`phh^Yky=*!Gn?NH&|(OE_1)~B!31;L_t(|ob8#x5`!QNM6sj)|G^&Yff)uRVJM>6(0wKLI^?R*lWY~7lHX$2k`H#)&X>pC-}0RX5vtsfdt+Fv6z%9heGK58DJ0K4al`i za*M8D3$5XH4_LO7+;Qk*#g>0000RCo^V8p}3a@FHWsmLvHK0ALT$h0N~X04K`N jch>m15kd$dgb+Oc2yD^{Tnr7#00000NkvXXu0mjf({sI1 delta 265 zcmV+k0rvi%1ET_vBYyzuNkl20091#$1tUR`xbr=Qw9|x0b+QmFMG9d0lY>D^+@5SvdAs@Wb(S%xBAm)iC0l) z!coU>N3A8I3BZ$91$1u8VgKcp!Ul$5x2S&QvUChxG)YN zC>jF*06;62djTijy}#`-I6X}CZbX7=yt^1+VES#5u>(pz8#Nny=|;)6BwhAMhf&F@ z$-3}oWBhJ5HV0QGa`50@fOcR2X2cjkKr~?C$-Mw$%$XIF#DAzRRZ<_+>Xm$yjtyWf zHQk0jXn!AV-9r2O=+!=Ku!`@ZIcdVLzFpnX7-V&SfaCReS_Uvs^h^%PC(!&F@K zveb)|r7~w}%zV-G=ZL8V1?bDnTJ2Eb+|gM^Ehv(Ng0)YKRGNUuBWwp`N#3(WNt;H} z4xr`Fp0wFtG$_?xZJkGw=dR)oA?UAx0RR9%FE8XfuKu400J#7F002ovPDHLkV1mad Bjn4o8 diff --git a/test-integration/snapshots/decodeMessage/nanos.20.png b/test-integration/snapshots/decodeMessage/nanos.20.png index a0f9b734c15529d0d47fac9e4f36a34aeee88c0a..20641a16b0334e7da5812636cd7b665892a79e07 100644 GIT binary patch delta 392 zcmV;30eAkY1F8d%EPt9y62l+}KuM>)|ADh;7wK3>K0yg;EN{Aq1{5V?qyY$mAP53? z-uq|^0ALz31|W~zbzUZ(^sQf4?;W<+_u|+8Sq&~?;VOB-3_z|*^(&CZmJd={N!~T8 z>s35?_UWb?WA}s1)o_RFp$1+e~J=UQ$& zaE$Lo%Uw2-M~6Ow8@&`L@IJDo-{ma_g9#suCwwpxui5_-uNt?9i)V>T&Mb^&$h>^h zLF{NQKiZIo7w$xZ)02gmklGZAWQ}a0tgbwWY2>dz)9KTb*!fC%t_ALCYG_JUZ!^0R z&s0QnXd-=9tbZ*ogI{Y5SzmOAg~^59gr@_V*Il8QBExY}6oHC7IP-HFA8=&DDnf{B zdobw;AakooUGI5njX`@A6iNgD0N}1H zIm7N75z(@~pT%o=K5zW;JaUE=(jRouZdqqhpNO8>6R5+N=MZ$?Xj$Lu#9ztsA*Ta} z+Z;=h2MEm1E*n`(Cgdv;JJdQHjj8T3i3bQGBuiR`JP)XCZGRC);&i#jS$$y-h(<_% z$1^~Gt%%F}<^`gY6ytIBfsGJ7dkwB}3%W5$nQ$&*%SXq3eGmS4bq1Yr@)$6PqC3>j z#8SWO8BmL@qN-yiT)Ofz=3@TaDE;OZkcjasJfC9AbjKe}*@xkTnXuS>=C1|bBC4ml zgSIAGbUn2n1Ap^?mXxQZ4;RiUA02kg;c^CF8;5jK2LAX3kQC4&UvH)Z&j*8PxQvAO(0p?Yt6tIdOnDwx51ZWYgBn m4%|Za?Faw>007{>c>zfN!b+jC;amU!002ovPDHLkU;%>0#=A}c diff --git a/test-integration/snapshots/decodeMessage/nanos.21.png b/test-integration/snapshots/decodeMessage/nanos.21.png index 4a84ea79b19febddeb4fa290f1fc0a9d4cba8c13..7cbf94713d9c53a3ba1382adcbc030d6be886518 100644 GIT binary patch delta 358 zcmV-s0h#`q0)PXMBYy!$Nkl8i%uhT;S+e9c5VA*N*>1~xOoIy04U|5*!DUwd78JCA*@zd zft4IOW`$U`Ns1_Ru@cxc?WeRuv8ivMYw1|D=OT|5i$+`GvVYwGhD7zjF6)(mfPh}vFD(g3cS2VluFy7QsX z>nHt6FON#F6mgzb1P_43-Vh;bb zlEL0bm$XTyuwU8nKOmt?YDV^tF958j%wxNxlqumymvlsa^W6Y+N!<*p0d(=nUD6gt z*8oaxT19YiJSGI-;a$>*pi3%)Zs=kr*8pUH000Qg0Z_F}W;N|SE&u=k07*qoM6N<$ Eg1+~sF#rGn delta 255 zcmV20091#$1tUR`xbr=Qw9|x0b+QmFMG9d0lY>D^+@5SvdAs@Wb(S%xBAm)iC0l) z!coU>N3A8I3BZ$91$1u8VgKcp!UexPQ|v5f+W+$->9*)o$GO|KL3Cu{YcrRz@8FN_sW6Jr7Kr#%=7B6_rV# zV=6(pt)xgk9V@VDY9+Nsu&ilNmH%K-pNlM7G#b^3OZ@_9NPm?&rk9PBj>fPTk<9@j z?KOZd%BS*{mo+x)b>dyRrXWz_jT>h9PF~>!tZ+u}AO`b63}({b`{7> z0=lF+%FZzdfKyc#S+GmWGU^7PORAA6VtxVWlG^B31L)$KUD8Gd)Bs9sU3qi51I7ek s*)FMH&?PN^Zs=sj*8pUH008jH57tjWX8k_xPyhe`07*qoM6N<$f_2`Za{vGU delta 400 zcmV;B0dM~G0;&U$B!6*9L_t(|ob8%R62l+}KuM>)|ADh;7wK3>K0yg;EN{Aq1{5V? zqyY$mAP53?-uq|^0ALz31|W~zbzUZ(^sQf4?;W<+_u|+8Sq&~?;VOB-3_z|*^(&CZ zmJd={N!~T8>s35?_UWb?WA}s1)o_RFn^G~aepQUq(?8`Imzje z?~>~J=UQ$&aE$Lo%Uw2-M~6Ow8@&`L@IJDo-{ma_g9#suCwwpxui5_-uNt?9i)V>T z&Mb^&$h>^hLF{NQKiZIo7w$xZ)02gmklGZAWQ}a0tgbwWY2>dz)9KTb*!fC%t_ALC zYG_JUZ!^0R&wo@zb7&%cR;(>9gI{Y5SzmOAg~^59gr@_V*Il8QBExY}6oHC7IP-HF zA8=&DDnf{B7vtWZWZh$F@CL?cup z8;A%Xgb+gT**A6uk$I_a=7AftpX>y#$u(Nm&*!q9C*+ZGeEJW*%}(>9Q=Wk8xE%Z+ zr1D@V03h3~`A(04n=2@o?g=*rls9_}92k&SPP}iSpS7`CmVa@_Ki5S#*fw;A)E~|b zNu~ZIx`dVbQ;`RJ*m0ao46!2QlPh9^L}*Dy37YQM9Mi28i%uhT;S+e9c5VA*N*>1~xOoIy04U|5*!DUwd78JCA*@zd zft4IOW`$U`Ns1_Ru@cxc?WeRuv8ivMYw1|D=OT|5i$+`GvVYwGhD7zjF6)(mfPh}vFD(g3cS2VluFy7QsX z>nHt6FON#F6mgzb1P_43-Vh;bb zlEL0bm$XTyuwU8nKOmt?YDV^tF958j%wxNxlqumymvlsa^W6Y+N!<*p0d(=nUD6gt z*8oaxT19YiJSGI-;a$>*pi3%)Zs=kr*8pUH000Qg0Z_F}W;N|SE&u=k07*qoM6N<$ Eg4I{2K>z>% diff --git a/test-integration/snapshots/decodeMessage/nanos.24.png b/test-integration/snapshots/decodeMessage/nanos.24.png index f855df8ffa801417142f56d69bd50488cbd837d1..355c272af3549fc07cb3c94c733a1f8b4886e0c3 100644 GIT binary patch delta 296 zcmV+@0oVTZ0>c83B!3D?L_t(|ob8y=4uc>JMRA$`|G_@!0|~m7Hb6#uNA8Iaip7?; zR3Ifn2qDCY^SH0l(%5m5J)yi^wdK)n`$*rhUhwz^ASr$cFHTm(R zBz{$LDePfa1!SdalsAO!M&F|3J_8yFDa{c|Q3H@f0ddpl%YVyTVf3m44c{5C?H>zJ zJLASel~t7cuSY4Pbqt1i8VSAsb2?l~?@yx1vGo2_7=w5igGg$Q-Bi)|rI@g|x-~P7 zk4huRSP;zU!#MVlkJ`Bq!i3gsaNh~fL*^Gw#_5&-p9N)rcBfN-55TjUuNZ@cO3;6@ uPyi5qw*A1Dpdm)LcAc{lLI@#*kZ3LhijPdW%$oWD0000WwY{ delta 346 zcmV-g0j2)K0`&rrB!4_fL_t(|ob8yw4#OY_hV8Px{{#2X9lBT}h*-3e_exPQ|v5f+W+$->9*)o$GO|KL3Cu{YcrRz@8FN_sW6Jr7Kr#%=7B6_rV# zV=6(pt)xgk9V@VDY9+Nsu&ilNmH%K-pNlM7G#b^3OZ@_9NPm?&rk9PBj>fPTk<9@j z?KOZd%BS*{mo+x)b>dyRrXWz_jT>h9PF~>!tZ+u}AO`b63}({b`{7> z0=lF+%FZzdfKyc#S+GmWGU^7PORAA6VtxVWlG^B31L)$KUD8Gd)Bs9sU3qi51I7ek s*)FMH&?PN^Zs=sj*8pUH008jH57tjWX8k_xPyhe`07*qoM6N<$f|gIAivR!s diff --git a/test-integration/snapshots/decodeMessage/nanos.25.png b/test-integration/snapshots/decodeMessage/nanos.25.png index e4da844413df4469d5044c9e87d1346d5970505a..e3087cbed6dfcaf950133cf9585ec5c24bae02c2 100644 GIT binary patch delta 308 zcmV-40n7fX0?q=EBYy!ENkl70|Nnz~s0T-zCO{L%z&7qX=>#P% zgeXoEA%u{-GW)rDzrH;$mZdS;1AmWUWMMdMb1nWJcb-v>KO7HV=3ttbnOQ2Cn7o>O zYAot*%x46$XHHL#o);pwc6 zEe4|#y#i8|jnu0&)9l5|#Q?WD>ctIG4;ZR{ISrCh{Z3Q~OZB_L7{tREL?Q{RbVEV9 zgJJ_!>#COBA&3{s9S}*|Fd9DPsj+aw*R(zX;4k4;kn>BQTlAOkPoT=k?Pw}NH8;Uy zpb{hkzx53i04?#i47U2yKkWfFTNkt3Ft~*fLI@#*K(Ydh6PrbYQckM?00007vtWZWZh$F@CL?cup z8;A%Xgb+gT**A6uk$I_a=7AftpX>y#$u(Nm&*!q9C*+ZGeEJW*%}(>9Q=Wk8xE%Z+ zr1D@V03h3~`A(04n=2@o?g=*rls9_}92k&SPP}iSpS7`CmVa@_Ki5S#*fw;A)E~|b zNu~ZIx`dVbQ;`RJ*m0ao46!2QlPh9^L}*Dy37YQM9Mi2ia*i3%f9(gdYoyWc83BYy!3Nkl|dq?hx4~oT> zwp1V`LI@$miSxLx($d&*l0BikUA5)WZu>~zv0m`_1|TVZENNKYJ`*!Hp2vOD^)>nN zq$GY-aw+U#R|RCHYLqvG?MC0CKxlL;-Qr=zq)0TVeF70}bC9u#hSqje01c^V15|8qKAO7Bmi$+7hQR2YMJ7=uV^j@?wz_@$VzxVkkn zj*m(s$XF1}=)*Ynk&oKB5Ww|1Sg5<&70|Nnz~s0T-zCO{L%z&7qX=>#P% zgeXoEA%u{-GW)rDzrH;$mZdS;1AmWUWMMdMb1nWJcb-v>KO7HV=3ttbnOQ2Cn7o>O zYAot*%x46$XHHL#o);pwc6 zEe4|#y#i8|jnu0&)9l5|#Q?WD>ctIG4;ZR{ISrCh{Z3Q~OZB_L7{tREL?Q{RbVEV9 zgJJ_!>#COBA&3{s9S}*|Fd9DPsj+aw*R(zX;4k4;kn>BQTlAOkPoT=k?Pw}NH8;Uy zpb{hkzx53i04?#i47U2yKkWfFTNkt3Ft~*fLI@#*K(Ydh6PrbYQckM?0000&8GU2{&P7z%xKn+-6_w4`HB1)*wdzbvHuF=yy^TSa?RiE9O8SbD#-mCzz?; z`6GNg;UH$_dD)2IrI6ws#FDY*&8VjE2~sG9`$6BWcP4L?x*05#;?01EtZgK!2{@^D zKKV>jAZI|2#GryqK(i?drT<}VDR0INMp0<$`#-P?yD*`I9}A6UKH#1e6`SD9 z0LeH909ci`UO>sQf5(2aTgS5E1k|3i&uUZM0de6c8{+5B@ZT^F@35bm9D7>S#TpL} zl$5x2S&QvUChxG)YN zC>jF*06;62djTijy}#`-I6X}CZbX7=yt^1+VES#5u>(pz8#Nny=|;)6BwhAMhf&F@ z$-3}oWBhJ5HV0QGa`50@fOcR2X2cjkKr~?C$-Mw$%$XIF#DAzRRZ<_+>Xm$yjtyWf zHQk0jXn!AV-9r2O=+!=Ku!`@ZIcdVLzFpnX7-V&SfaCReS_Uvs^h^%PC(!&F@K zveb)|r7~w}%zV-G=ZL8V1?bDnTJ2Eb+|gM^Ehv(Ng0)YKRGNUuBWwp`N#3(WNt;H} z4xr`Fp0wFtG$_?xZJkGw=dR)oA?UAx0RR9%FE8XfuKu400J#7F002ovPDHLkV1lkp Bjk*8; delta 234 zcmVRCo^V8p}3a@FHWsmLvHK0ALT$h0N~X04K`N jch>m15kd$dgb+Oc2yD^{Tnr7#00000NkvXXu0mjf$4k9Q delta 256 zcmV+b0ssD=1DgVnBYyzmNkl;6{Q`T z6p++8A|fIn!Moruu8d;Q9>DBY?Ey52v*GhSH1{jX-Ml|t*y9zWR%{ku)Zc|+dAGl)4!#l;X{RhpcTRstGu$ zcRu+{Qy^zRkHnyYOhB_K3Z?&HZ7FZYKV&E|{E?W52*w6DYmqTnSFKwB000020091#$1tUR`xbr=Qw9|x0b+QmFMG9d0lY>D^+@5SvdAs@Wb(S%xBAm)iC0l) z!coU>N3A8I3BZ$91$1u8VgKcp!Ul$5x2S&QvUChxG)YN zC>jF*06;62djTijy}#`-I6X}CZbX7=yt^1+VES#5u>(pz8#Nny=|;)6BwhAMhf&F@ z$-3}oWBhJ5HV0QGa`50@fOcR2X2cjkKr~?C$-Mw$%$XIF#DAzRRZ<_+>Xm$yjtyWf zHQk0jXn!AV-9r2O=+!=Ku!`@ZIcdVLzFpnX7-V&SfaCReS_Uvs^h^%PC(!&F@K zveb)|r7~w}%zV-G=ZL8V1?bDnTJ2Eb+|gM^Ehv(Ng0)YKRGNUuBWwp`N#3(WNt;H} z4xr`Fp0wFtG$_?xZJkGw=dR)oA?UAx0RR9%FE8XfuKu400J#7F002ovPDHLkV1mad Bjn4o8 diff --git a/test-integration/snapshots/decodeMessage/nanos.32.png b/test-integration/snapshots/decodeMessage/nanos.32.png index a0f9b734c15529d0d47fac9e4f36a34aeee88c0a..20641a16b0334e7da5812636cd7b665892a79e07 100644 GIT binary patch delta 392 zcmV;30eAkY1F8d%EPt9y62l+}KuM>)|ADh;7wK3>K0yg;EN{Aq1{5V?qyY$mAP53? z-uq|^0ALz31|W~zbzUZ(^sQf4?;W<+_u|+8Sq&~?;VOB-3_z|*^(&CZmJd={N!~T8 z>s35?_UWb?WA}s1)o_RFp$1+e~J=UQ$& zaE$Lo%Uw2-M~6Ow8@&`L@IJDo-{ma_g9#suCwwpxui5_-uNt?9i)V>T&Mb^&$h>^h zLF{NQKiZIo7w$xZ)02gmklGZAWQ}a0tgbwWY2>dz)9KTb*!fC%t_ALCYG_JUZ!^0R z&s0QnXd-=9tbZ*ogI{Y5SzmOAg~^59gr@_V*Il8QBExY}6oHC7IP-HFA8=&DDnf{B zdobw;AakooUGI5njX`@A6iNgD0N}1H zIm7N75z(@~pT%o=K5zW;JaUE=(jRouZdqqhpNO8>6R5+N=MZ$?Xj$Lu#9ztsA*Ta} z+Z;=h2MEm1E*n`(Cgdv;JJdQHjj8T3i3bQGBuiR`JP)XCZGRC);&i#jS$$y-h(<_% z$1^~Gt%%F}<^`gY6ytIBfsGJ7dkwB}3%W5$nQ$&*%SXq3eGmS4bq1Yr@)$6PqC3>j z#8SWO8BmL@qN-yiT)Ofz=3@TaDE;OZkcjasJfC9AbjKe}*@xkTnXuS>=C1|bBC4ml zgSIAGbUn2n1Ap^?mXxQZ4;RiUA02kg;c^CF8;5jK2LAX3kQC4&UvH)Z&j*8PxQvAO(0p?Yt6tIdOnDwx51ZWYgBn m4%|Za?Faw>007{>c>zfN!b+jC;amU!002ovPDHLkU;%>0#=A}c diff --git a/test-integration/snapshots/decodeMessage/nanos.33.png b/test-integration/snapshots/decodeMessage/nanos.33.png index 4a84ea79b19febddeb4fa290f1fc0a9d4cba8c13..7cbf94713d9c53a3ba1382adcbc030d6be886518 100644 GIT binary patch delta 358 zcmV-s0h#`q0)PXMBYy!$Nkl8i%uhT;S+e9c5VA*N*>1~xOoIy04U|5*!DUwd78JCA*@zd zft4IOW`$U`Ns1_Ru@cxc?WeRuv8ivMYw1|D=OT|5i$+`GvVYwGhD7zjF6)(mfPh}vFD(g3cS2VluFy7QsX z>nHt6FON#F6mgzb1P_43-Vh;bb zlEL0bm$XTyuwU8nKOmt?YDV^tF958j%wxNxlqumymvlsa^W6Y+N!<*p0d(=nUD6gt z*8oaxT19YiJSGI-;a$>*pi3%)Zs=kr*8pUH000Qg0Z_F}W;N|SE&u=k07*qoM6N<$ Eg1+~sF#rGn delta 255 zcmV20091#$1tUR`xbr=Qw9|x0b+QmFMG9d0lY>D^+@5SvdAs@Wb(S%xBAm)iC0l) z!coU>N3A8I3BZ$91$1u8VgKcp!UexPQ|v5f+W+$->9*)o$GO|KL3Cu{YcrRz@8FN_sW6Jr7Kr#%=7B6_rV# zV=6(pt)xgk9V@VDY9+Nsu&ilNmH%K-pNlM7G#b^3OZ@_9NPm?&rk9PBj>fPTk<9@j z?KOZd%BS*{mo+x)b>dyRrXWz_jT>h9PF~>!tZ+u}AO`b63}({b`{7> z0=lF+%FZzdfKyc#S+GmWGU^7PORAA6VtxVWlG^B31L)$KUD8Gd)Bs9sU3qi51I7ek s*)FMH&?PN^Zs=sj*8pUH008jH57tjWX8k_xPyhe`07*qoM6N<$f_2`Za{vGU delta 400 zcmV;B0dM~G0;&U$B!6*9L_t(|ob8%R62l+}KuM>)|ADh;7wK3>K0yg;EN{Aq1{5V? zqyY$mAP53?-uq|^0ALz31|W~zbzUZ(^sQf4?;W<+_u|+8Sq&~?;VOB-3_z|*^(&CZ zmJd={N!~T8>s35?_UWb?WA}s1)o_RFn^G~aepQUq(?8`Imzje z?~>~J=UQ$&aE$Lo%Uw2-M~6Ow8@&`L@IJDo-{ma_g9#suCwwpxui5_-uNt?9i)V>T z&Mb^&$h>^hLF{NQKiZIo7w$xZ)02gmklGZAWQ}a0tgbwWY2>dz)9KTb*!fC%t_ALC zYG_JUZ!^0R&wo@zb7&%cR;(>9gI{Y5SzmOAg~^59gr@_V*Il8QBExY}6oHC7IP-HF zA8=&DDnf{B7vtWZWZh$F@CL?cup z8;A%Xgb+gT**A6uk$I_a=7AftpX>y#$u(Nm&*!q9C*+ZGeEJW*%}(>9Q=Wk8xE%Z+ zr1D@V03h3~`A(04n=2@o?g=*rls9_}92k&SPP}iSpS7`CmVa@_Ki5S#*fw;A)E~|b zNu~ZIx`dVbQ;`RJ*m0ao46!2QlPh9^L}*Dy37YQM9Mi28i%uhT;S+e9c5VA*N*>1~xOoIy04U|5*!DUwd78JCA*@zd zft4IOW`$U`Ns1_Ru@cxc?WeRuv8ivMYw1|D=OT|5i$+`GvVYwGhD7zjF6)(mfPh}vFD(g3cS2VluFy7QsX z>nHt6FON#F6mgzb1P_43-Vh;bb zlEL0bm$XTyuwU8nKOmt?YDV^tF958j%wxNxlqumymvlsa^W6Y+N!<*p0d(=nUD6gt z*8oaxT19YiJSGI-;a$>*pi3%)Zs=kr*8pUH000Qg0Z_F}W;N|SE&u=k07*qoM6N<$ Eg4I{2K>z>% diff --git a/test-integration/snapshots/decodeMessage/nanos.36.png b/test-integration/snapshots/decodeMessage/nanos.36.png index f855df8ffa801417142f56d69bd50488cbd837d1..355c272af3549fc07cb3c94c733a1f8b4886e0c3 100644 GIT binary patch delta 296 zcmV+@0oVTZ0>c83B!3D?L_t(|ob8y=4uc>JMRA$`|G_@!0|~m7Hb6#uNA8Iaip7?; zR3Ifn2qDCY^SH0l(%5m5J)yi^wdK)n`$*rhUhwz^ASr$cFHTm(R zBz{$LDePfa1!SdalsAO!M&F|3J_8yFDa{c|Q3H@f0ddpl%YVyTVf3m44c{5C?H>zJ zJLASel~t7cuSY4Pbqt1i8VSAsb2?l~?@yx1vGo2_7=w5igGg$Q-Bi)|rI@g|x-~P7 zk4huRSP;zU!#MVlkJ`Bq!i3gsaNh~fL*^Gw#_5&-p9N)rcBfN-55TjUuNZ@cO3;6@ uPyi5qw*A1Dpdm)LcAc{lLI@#*kZ3LhijPdW%$oWD0000WwY{ delta 346 zcmV-g0j2)K0`&rrB!4_fL_t(|ob8yw4#OY_hV8Px{{#2X9lBT}h*-3e_exPQ|v5f+W+$->9*)o$GO|KL3Cu{YcrRz@8FN_sW6Jr7Kr#%=7B6_rV# zV=6(pt)xgk9V@VDY9+Nsu&ilNmH%K-pNlM7G#b^3OZ@_9NPm?&rk9PBj>fPTk<9@j z?KOZd%BS*{mo+x)b>dyRrXWz_jT>h9PF~>!tZ+u}AO`b63}({b`{7> z0=lF+%FZzdfKyc#S+GmWGU^7PORAA6VtxVWlG^B31L)$KUD8Gd)Bs9sU3qi51I7ek s*)FMH&?PN^Zs=sj*8pUH008jH57tjWX8k_xPyhe`07*qoM6N<$f|gIAivR!s diff --git a/test-integration/snapshots/decodeMessage/nanos.37.png b/test-integration/snapshots/decodeMessage/nanos.37.png index e4da844413df4469d5044c9e87d1346d5970505a..e3087cbed6dfcaf950133cf9585ec5c24bae02c2 100644 GIT binary patch delta 308 zcmV-40n7fX0?q=EBYy!ENkl70|Nnz~s0T-zCO{L%z&7qX=>#P% zgeXoEA%u{-GW)rDzrH;$mZdS;1AmWUWMMdMb1nWJcb-v>KO7HV=3ttbnOQ2Cn7o>O zYAot*%x46$XHHL#o);pwc6 zEe4|#y#i8|jnu0&)9l5|#Q?WD>ctIG4;ZR{ISrCh{Z3Q~OZB_L7{tREL?Q{RbVEV9 zgJJ_!>#COBA&3{s9S}*|Fd9DPsj+aw*R(zX;4k4;kn>BQTlAOkPoT=k?Pw}NH8;Uy zpb{hkzx53i04?#i47U2yKkWfFTNkt3Ft~*fLI@#*K(Ydh6PrbYQckM?00007vtWZWZh$F@CL?cup z8;A%Xgb+gT**A6uk$I_a=7AftpX>y#$u(Nm&*!q9C*+ZGeEJW*%}(>9Q=Wk8xE%Z+ zr1D@V03h3~`A(04n=2@o?g=*rls9_}92k&SPP}iSpS7`CmVa@_Ki5S#*fw;A)E~|b zNu~ZIx`dVbQ;`RJ*m0ao46!2QlPh9^L}*Dy37YQM9Mi2ia*i3%f9(gdYoyWc83BYy!3Nkl|dq?hx4~oT> zwp1V`LI@$miSxLx($d&*l0BikUA5)WZu>~zv0m`_1|TVZENNKYJ`*!Hp2vOD^)>nN zq$GY-aw+U#R|RCHYLqvG?MC0CKxlL;-Qr=zq)0TVeF70}bC9u#hSqje01c^V15|8qKAO7Bmi$+7hQR2YMJ7=uV^j@?wz_@$VzxVkkn zj*m(s$XF1}=)*Ynk&oKB5Ww|1Sg5<&70|Nnz~s0T-zCO{L%z&7qX=>#P% zgeXoEA%u{-GW)rDzrH;$mZdS;1AmWUWMMdMb1nWJcb-v>KO7HV=3ttbnOQ2Cn7o>O zYAot*%x46$XHHL#o);pwc6 zEe4|#y#i8|jnu0&)9l5|#Q?WD>ctIG4;ZR{ISrCh{Z3Q~OZB_L7{tREL?Q{RbVEV9 zgJJ_!>#COBA&3{s9S}*|Fd9DPsj+aw*R(zX;4k4;kn>BQTlAOkPoT=k?Pw}NH8;Uy zpb{hkzx53i04?#i47U2yKkWfFTNkt3Ft~*fLI@#*K(Ydh6PrbYQckM?0000l$5x2S&QvUChxG)YN zC>jF*06;62djTijy}#`-I6X}CZbX7=yt^1+VES#5u>(pz8#Nny=|;)6BwhAMhf&F@ z$-3}oWBhJ5HV0QGa`50@fOcR2X2cjkKr~?C$-Mw$%$XIF#DAzRRZ<_+>Xm$yjtyWf zHQk0jXn!AV-9r2O=+!=Ku!`@ZIcdVLzFpnX7-V&SfaCReS_Uvs^h^%PC(!&F@K zveb)|r7~w}%zV-G=ZL8V1?bDnTJ2Eb+|gM^Ehv(Ng0)YKRGNUuBWwp`N#3(WNt;H} z4xr`Fp0wFtG$_?xZJkGw=dR)oA?UAx0RR9%FE8XfuKu400J#7F002ovPDHLkV1l>A Bjluu` delta 242 zcmVia*i3%f9(gdYoyWRCo^V8p}3a@FHWsmLvHK0ALT$h0N~X04K`N jch>m15kd$dgb+Oc2yD^{Tnr7#00000NkvXXu0mjfrQN+V delta 234 zcmV20091#$1tUR`xbr=Qw9|x0b+QmFMG9d0lY>D^+@5SvdAs@Wb(S%xBAm)iC0l) z!coU>N3A8I3BZ$91$1u8VgKcp!U<+x0@9YjVkq+=}zvP5uF~=n41t=~ixtA$(bXvx+2Id7w zeHYzbRK>QVIo$36+kSC(Nc!1(BW?vK;!p$gOArTlLUp(b0e`SO-WJ9cfd=z|2J?Xi zGa2Ij^C+AMYg%gSjcld(hU(5@DqQX&re2kb5`36s)|ADh;7wK3>K0yg;EN{Aq1{5V? zqyY$mAP53?-uq|^0ALz31|W~zbzUZ(^sQf4?;W<+_u|+8Sq&~?;VOB-3_z|*^(&CZ zmJd={N!~T8>s35?_UWb?WA}s1)o_RFn^G~aepQUq(?8`Imzje z?~>~J=UQ$&aE$Lo%Uw2-M~6Ow8@&`L@IJDo-{ma_g9#suCwwpxui5_-uNt?9i)V>T z&Mb^&$h>^hLF{NQKiZIo7w$xZ)02gmklGZAWQ}a0tgbwWY2>dz)9KTb*!fC%t_ALC zYG_JUZ!^0R&wo@zb7&%cR;(>9gI{Y5SzmOAg~^59gr@_V*Il8QBExY}6oHC7IP-HF zA8=&DDnf{B`t@>0%6NefP&k2eiT z&(u=ZsO*#5$%($P79bTpmyCo5XC+EixI7WC7GNR+rFXDt7Jm|8pok7O&C@Wq7xJ^m z0<9gu7ddy=m*bO>N$S6OPjvPPoD)hbF|%?Qv4t z6Oefk3*>R~3GhUGZlz;*$~|Pr2oTictj>_sdN%IOI8BeU=PH?vdjZruPJVAuVO=+L z%;QvdMz8IFl`1^W&P3G#ff52mU-uRi1PA~C0QY4Fx1H+Mp`EkC00000NkvXXu0mjf D1=^1v diff --git a/test-integration/snapshots/decodeMessage/nanos.44.png b/test-integration/snapshots/decodeMessage/nanos.44.png index 8d806ca2d7eea00dc3fa6987f665e26c9907fcbc..7cbf94713d9c53a3ba1382adcbc030d6be886518 100644 GIT binary patch delta 357 zcmV-r0h<2F0)PXMB!5RqL_t(|ob8y~4#OY_hV8Px{{!!0y=Y>M9EPHiwf~o0sIx#p zVIw5~002Pb`?)?5V9m&jP9t^U6L_0;ZTn?P9>*lOc?4SkDCMEp_Bt?mnzxl9tX5co zl^i-|g;=&piYRok64*5Dr?f+{sc)cb=~%SqB99h}MqA>t-G2b(AR8ZSG;1OQ4Pf7n z%>*)yHGnSa??WGqkfSY@+vQNP=b)Mjyu3z~>d#+F5nQ~G(+|>=&|8F);RKbs^P$k| zC;dt{0Ia6WW4ol3Dd9(#bVPph-2ik+-3+P$bn(eu(iTS7 z07`CJMR0LECIsN&UDAl4ODcnI=wc?<0Azmv00_(hP_;~EHSIkv00000NkvXXu0mjf D{;H>6 delta 302 zcmV+}0nz?|1IYrAB!3V|L_t(|ob8#(62l+}hPBhY{{wrl2Pd`>x4INk{_m8yFb*In z8Up|TKr5De0Vm$QzwI$NJxug&M1pF(yBJ_#`fZW114=#{H5+^BM#;7$UG_+aQOT;w zy6|UX{BAZj2UjL?@Zes6c3=Qz#27$8G+^P$y#Qm(nH7`7sDCb1QXkanm3)+r4PY%b z-G)ABe;;k#Li_vZ)jn*nitnO2a=;FHeHy2reL$09;jV@zSFO%pbG@4N6iw^HR9y73 z)Qgm*GG}Sbe9`phh^Yky=*!Gn?NH&|(OE_7vtWZWZh$F@CL?cup z8;A%Xgb+gT**A6uk$I_a=7AftpX>y#$u(Nm&*!q9C*+ZGeEJW*%}(>9Q=Wk8xE%Z+ zr1D@V03h3~`A(04n=2@o?g=*rls9_}92k&SPP}iSpS7`CmVa@_Ki5S#*fw;A)E~|b zNu~ZIx`dVbQ;`RJ*m0ao46!2QlPh9^L}*Dy37YQM9Mi2%?El@*$@Khua)Wk_QOP&n_ETOD5zi5lsjst)i-9CS1DmGv;Fc+bI3!7LbVXD?FcK%XG&dP1%Rxgqg6| zedezP-Xf}}x_^VVCR%howI2iXfR>b}r4JX*DIXnn%;K}DV{I)XZ;b;zfR`D#(BFnB z6Gv`s){Nlh-=X*bHDL(y@g?KIc83BYy!3Nkl|dq?hx4~oT> zwp1V`LI@$miSxLx($d&*l0BikUA5)WZu>~zv0m`_1|TVZENNKYJ`*!Hp2vOD^)>nN zq$GY-aw+U#R|RCHYLqvG?MC0CKxlL;-Qr=zq)0TVeF70}bC9u#hSqje01c^V15|8qKAO7Bmi$+7hQR2YMJ7=uV^j@?wz_@$VzxVkkn zj*m(s$XF1}=)*Ynk&oKB5Ww|1Sg5<&20091#$1tUR`xbr=Qw9|x0b+QmFMG9d0lY>D^+@5SvdAs@Wb(S%xBAm)iC0l) z!coU>N3A8I3BZ$91$1u8VgKcp!U7iJ91maSV49ejSt^;ByqbM# zEb4B|X9TimPEU{H?Z6n)Mo)ODxqnXpR)9!Zl-;U?Z#hB@z<<2tF>osgzLn?U>8y<{ z2BQLqWQO zVgps{s+Qd$h!@Ho5J}rG8b0Nzv2erJv_1jgFX2{@^Glyw^q25YpvuVYXevQ9H^F0| z5+nk@^$ipN@hrCtw))dQ?EyAh7qi?jxP=fx2qA<(vI2_}n?-|CPOAU_002ovPDHLk FV1oZRiL(Fz delta 400 zcmV;B0dM}!0;&U$B!6*9L_t(|ob8%R62l+}KuM>)|ADh;7wK3>K0yg;EN{Aq1{5V? zqyY$mAP53?-uq|^0ALz31|W~zbzUZ(^sQf4?;W<+_u|+8Sq&~?;VOB-3_z|*^(&CZ zmJd={N!~T8>s35?_UWb?WA}s1)o_RFn^G~aepQUq(?8`Imzje z?~>~J=UQ$&aE$Lo%Uw2-M~6Ow8@&`L@IJDo-{ma_g9#suCwwpxui5_-uNt?9i)V>T z&Mb^&$h>^hLF{NQKiZIo7w$xZ)02gmklGZAWQ}a0tgbwWY2>dz)9KTb*!fC%t_ALC zYG_JUZ!^0R&wo@zb7&%cR;(>9gI{Y5SzmOAg~^59gr@_V*Il8QBExY}6oHC7IP-HF zA8=&DDnf{Bx4INk{_m8yFb*In z8Up|TKr5De0Vm$QzwI$NJxug&M1pF(yBJ_#`fZW114=#{H5+^BM#;7$UG_+aQOT;w zy6|UX{BAZj2UjL?@Zes6c3=Qz#27$8G+^P$y#Qm(nH7`7sDCb1QXkanm3)+r4PY%b z-G)ABe;;k#Li_vZ)jn*nitnO2a=;FHeHy2reL$09;jV@zSFO%pbG@4N6iw^HR9y73 z)Qgm*GG}Sbe9`phh^Yky=*!Gn?NH&|(OE_M9EPHiwf~o0sIx#p zVIw5~002Pb`?)?5V9m&jP9t^U6L_0;ZTn?P9>*lOc?4SkDCMEp_Bt?mnzxl9tX5co zl^i-|g;=&piYRok64*5Dr?f+{sc)cb=~%SqB99h}MqA>t-G2b(AR8ZSG;1OQ4Pf7n z%>*)yHGnSa??WGqkfSY@+vQNP=b)Mjyu3z~>d#+F5nQ~G(+|>=&|8F);RKbs^P$k| zC;dt{0Ia6WW4ol3Dd9(#bVPph-2ik+-3+P$bn(eu(iTS7 z07`CJMR0LECIsN&UDAl4ODcnI=wc?<0Azmv00_(hP_;~EHSIkv00000NkvXXu0mjf D{;H>6 diff --git a/test-integration/snapshots/decodeMessage/nanos.49.png b/test-integration/snapshots/decodeMessage/nanos.49.png index e4da844413df4469d5044c9e87d1346d5970505a..0b8230043cd1d5d8700b6e706fc50c591984d5b6 100644 GIT binary patch delta 389 zcmV;00eb$b0-pnrBYy#ANklRCo^V8p}3a@FHWsmLvHK0ALT$h0N~X04K`N jch>m15kd$dgb+Oc2yD^{Tnr7#00000NkvXXu0mjf-WI)B delta 272 zcmV+r0q_2w1F8a$BYyz#Nkl7vtWZWZh$F@CL?cup z8;A%Xgb+gT**A6uk$I_a=7AftpX>y#$u(Nm&*!q9C*+ZGeEJW*%}(>9Q=Wk8xE%Z+ zr1D@V03h3~`A(04n=2@o?g=*rls9_}92k&SPP}iSpS7`CmVa@_Ki5S#*fw;A)E~|b zNu~ZIx`dVbQ;`RJ*m0ao46!2QlPh9^L}*Dy37YQM9Mi220091#$1tUR`xbr=Qw9|x0b+QmFMG9d0lY>D^+@5SvdAs@Wb(S%xBAm)iC0l) z!coU>N3A8I3BZ$91$1u8VgKcp!Uc83BYy!3Nkl|dq?hx4~oT> zwp1V`LI@$miSxLx($d&*l0BikUA5)WZu>~zv0m`_1|TVZENNKYJ`*!Hp2vOD^)>nN zq$GY-aw+U#R|RCHYLqvG?MC0CKxlL;-Qr=zq)0TVeF70}bC9u#hSqje01c^V15|8qKAO7Bmi$+7hQR2YMJ7=uV^j@?wz_@$VzxVkkn zj*m(s$XF1}=)*Ynk&oKB5Ww|1Sg5<&)|ADh;7wK3>K0yg;EN{Aq1{5V? zqyY$mAP53?-uq|^0ALz31|W~zbzUZ(^sQf4?;W<+_u|+8Sq&~?;VOB-3_z|*^(&CZ zmJd={N!~T8>s35?_UWb?WA}s1)o_RFn^G~aepQUq(?8`Imzje z?~>~J=UQ$&aE$Lo%Uw2-M~6Ow8@&`L@IJDo-{ma_g9#suCwwpxui5_-uNt?9i)V>T z&Mb^&$h>^hLF{NQKiZIo7w$xZ)02gmklGZAWQ}a0tgbwWY2>dz)9KTb*!fC%t_ALC zYG_JUZ!^0R&wo@zb7&%cR;(>9gI{Y5SzmOAg~^59gr@_V*Il8QBExY}6oHC7IP-HF zA8=&DDnf{B7iJ91maSV49ejSt^;ByqbM# zEb4B|X9TimPEU{H?Z6n)Mo)ODxqnXpR)9!Zl-;U?Z#hB@z<<2tF>osgzLn?U>8y<{ z2BQLqWQO zVgps{s+Qd$h!@Ho5J}rG8b0Nzv2erJv_1jgFX2{@^Glyw^q25YpvuVYXevQ9H^F0| z5+nk@^$ipN@hrCtw))dQ?EyAh7qi?jxP=fx2qA<(vI2_}n?-|CPOAU_002ovPDHLk FV1oZRiL(Fz diff --git a/test-integration/snapshots/decodeMessage/nanos.52.png b/test-integration/snapshots/decodeMessage/nanos.52.png index 0a6229c935e9bba6acd82ca8c7dfa20a4e6bc79d..7cbf94713d9c53a3ba1382adcbc030d6be886518 100644 GIT binary patch delta 358 zcmV-s0h#`r0)PXMBYy!$Nkl8i%uhT;S+e9c5VA*N*>1~xOoIy04U|5*!DUwd78JCA*@zd zft4IOW`$U`Ns1_Ru@cxc?WeRuv8ivMYw1|D=OT|5i$+`GvVYwGhD7zjF6)(mfPh}vFD(g3cS2VluFy7QsX z>nHt6FON#F6mgzb1P_43-Vh;bb zlEL0bm$XTyuwU8nKOmt?YDV^tF958j%wxNxlqumymvlsa^W6Y+N!<*p0d(=nUD6gt z*8oaxT19YiJSGI-;a$>*pi3%)Zs=kr*8pUH000Qg0Z_F}W;N|SE&u=k07*qoM6N<$ Eg1}v;G5`Po delta 256 zcmV+b0ssDh1DgVnBYyzmNkl;6{Q`T z6p++8A|fIn!Moruu8d;Q9>DBY?Ey52v*GhSH1{jX-Ml|t*y9zWR%{ku)Zc|+dAGl)4!#l;X{RhpcTRstGu$ zcRu+{Qy^zRkHnyYOhB_K3Z?&HZ7FZYKV&E|{E?W52*w6DYmqTnSFKwB00007vtWZWZh$F@CL?cup z8;A%Xgb+gT**A6uk$I_a=7AftpX>y#$u(Nm&*!q9C*+ZGeEJW*%}(>9Q=Wk8xE%Z+ zr1D@V03h3~`A(04n=2@o?g=*rls9_}92k&SPP}iSpS7`CmVa@_Ki5S#*fw;A)E~|b zNu~ZIx`dVbQ;`RJ*m0ao46!2QlPh9^L}*Dy37YQM9Mi2l$5x2S&QvUChxG)YN zC>jF*06;62djTijy}#`-I6X}CZbX7=yt^1+VES#5u>(pz8#Nny=|;)6BwhAMhf&F@ z$-3}oWBhJ5HV0QGa`50@fOcR2X2cjkKr~?C$-Mw$%$XIF#DAzRRZ<_+>Xm$yjtyWf zHQk0jXn!AV-9r2O=+!=Ku!`@ZIcdVLzFpnX7-V&SfaCReS_Uvs^h^%PC(!&F@K zveb)|r7~w}%zV-G=ZL8V1?bDnTJ2Eb+|gM^Ehv(Ng0)YKRGNUuBWwp`N#3(WNt;H} z4xr`Fp0wFtG$_?xZJkGw=dR)oA?UAx0RR9%FE8XfuKu400J#7F002ovPDHLkV1n8g Bjo$zO diff --git a/test-integration/snapshots/decodeMessage/nanos.54.png b/test-integration/snapshots/decodeMessage/nanos.54.png index a0f9b734c15529d0d47fac9e4f36a34aeee88c0a..355c272af3549fc07cb3c94c733a1f8b4886e0c3 100644 GIT binary patch delta 296 zcmV+@0oVSj1H%H4B!3D?L_t(|ob8y=4uc>JMRA$`|G_@!0|~m7Hb6#uNA8Iaip7?; zR3Ifn2qDCY^SH0l(%5m5J)yi^wdK)n`$*rhUhwz^ASr$cFHTm(R zBz{$LDePfa1!SdalsAO!M&F|3J_8yFDa{c|Q3H@f0ddpl%YVyTVf3m44c{5C?H>zJ zJLASel~t7cuSY4Pbqt1i8VSAsb2?l~?@yx1vGo2_7=w5igGg$Q-Bi)|rI@g|x-~P7 zk4huRSP;zU!#MVlkJ`Bq!i3gsaNh~fL*^Gw#_5&-p9N)rcBfN-55TjUuNZ@cO3;6@ uPyi5qw*A1Dpdm)LcAc{lLI@#*kZ3LhijPdW%$oWD00004#OY_Md`Bs{|EP>dobw;AakooUGI5njX`@A z6iNgD0N}1HIm7N75z(@~pT%o=K5zW;JaUE=(jRouZdqqhpNO8>6R5+N=MZ$?Xj$Lu z#9ztsA*Ta}+Z;=h2MEm1E*n`(Cgdv;JJdQHjj8T3i3bQGB!5dj#8SWO8BmL@qN-yiT)Ofz=3@TaDE;OZkcjasJfC9AbjKe}*@xkTnXuS> z=C1|bBC4mlgMYRrT68_N9|QA%mXxQZ4;RiUA02kg;c^CF8;5jK2LAX3kQC4&UvH)Z&j*8PxQvAO(0p?Yt6tIdOnD uwx51ZWYgBn4%|Za?Faw>007{>c>zfN!b+jC;amU!00{s|MNUMnLSTYp@V@#0 diff --git a/test-integration/snapshots/decodeMessage/nanos.55.png b/test-integration/snapshots/decodeMessage/nanos.55.png new file mode 100644 index 0000000000000000000000000000000000000000..e3087cbed6dfcaf950133cf9585ec5c24bae02c2 GIT binary patch literal 334 zcmV-U0kQsxP)70|Nnz~s0T-zCO{L%z&7qX=>#P%geXoEA%u{-GW)rDzrH;$mZdS;1AmWU zWMMdMb1nWJcb-v>KO7HV=3ttbnOQ2Cn7o>OYAot*%x46$XHHL#osgzLn?U>8y<{2BQLqWQOVgps{s+Qd$h!@Ho5J}rG8b0Nzv2erJ zv_1jgFX2{@^Glyw^q25YpvuVYXevQ9H^F0|5+nk@^$ipN@wW`N`qMw{0XAC~v)nMa gg%CmrA%sA(0*e!yMT1gKs{jB107*qoM6N<$f`uB3&Hw-a literal 0 HcmV?d00001 diff --git a/test-integration/snapshots/decodeMessage/nanos.56.png b/test-integration/snapshots/decodeMessage/nanos.56.png new file mode 100644 index 0000000000000000000000000000000000000000..0a6229c935e9bba6acd82ca8c7dfa20a4e6bc79d GIT binary patch literal 283 zcmV+$0p$LPP);6{Q`T6p++8A|fIn!Moruu8d;Q9>DBY?Ey52 zv*GhSH1{jX-Ml|t*y9zWR%{ku)Zc|+djAZI|2#GryqK(i?drT<}VDR0I< hWGFHGk(h`G#s)ZRkug|Tty=&9002ovPDHLkV1hi!clH1P literal 0 HcmV?d00001 diff --git a/test-integration/snapshots/decodeMessage/nanos.57.png b/test-integration/snapshots/decodeMessage/nanos.57.png new file mode 100644 index 0000000000000000000000000000000000000000..8d806ca2d7eea00dc3fa6987f665e26c9907fcbc GIT binary patch literal 329 zcmV-P0k-~$P)l$5x2S&QvUChxG)YNC>jF*06;62djTijy}#`-I6X}CZbX7= zyt^1+VES#5u>(pz8#Nny=|;)6BwhAMhf&F@$-3}oWBhJ5HV0QGa`50@fOcR2X2cjk zKr~?C$-Mw$%$XIF#HcP+QXkanm3)+r4PY%b-G)ABe;;k#Li_vZ)jn*nitnO2a=;FH zeHy2reL$09;jV@zSFO%pbG@4N6iw^HR9y73)Qgm*GG}Sbe9`phh^Yky=*!Gn?NH&| z(OE_F-kvbwsJl<1icCP53zd8mR}xK ze4;!`oe7Ha&kN$%^-k@tgxY^_rPPR7&|>hlAYbf!S$g!<&A8RbH$%+xm(!~S>;bye z<3Bh}ZlKle<&0WK#nf){Cj%`bicvX`9uRN0_GEJ9$!H#TTUUp8^D|(+n5qY^IGK?K z$P^mOHeK){W51Ro`3nGG5733o?%x0>%FlP!__+~62qA*2PbN6rj z6B4>ws(H@Rd`6X%;kVwdQrVWiCw@!W`is0j_VrJCa&(%n?9KLxT5Gvpw220@S*u+- z5xe^98}VC3)thQO%*ub8o|?Au%;rm*^GwR;l}KMc9HX4jwtTrL?~IkZ`WqITd+Q!u zUS7Iw=Rc1ZA|fj{toSzT!7Nu1h07;vWm41@P0C*Lb@7HuL*=wLHPVi%d$;8u9w_iRJ7#^29pT9ce$dB`%xz{n)zh9eY&eq?|Ew&)A vfOpYyg{?WaLbt>|}Aba4!+nDh2lAYZeBfNS9G z67_fWo|~uFO%PymTIO-U{r%63Dcc^W2u!^77^n*f4(zX3>$hP3%%g8V+lZ$XwWqKz zS?aG@)*Q!vms805%K(Cyn{I6wDUK67$&xr_9S1L+|P+CF7^-U^DoFze>i z-3wLsq&?QL4tTtyH)E^9JeIIky$#3QcHaJ1pzGuwQNP%}(Jt7%q2=Vwb1xd$dxP6S z42Jy`7q7qCZ0%Nd;AzP$zaFVdQ&MBb@0Ik86{{R30 diff --git a/test-integration/snapshots/decodeMessage/nanosp.03.png b/test-integration/snapshots/decodeMessage/nanosp.03.png deleted file mode 100644 index a1a25bcc339c3581703c9debb8715b97f6567df6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 592 zcmV-W0ctg`YUnZJ$di=Xuse*FM*h+N3L~m6cX)9cqWR(qro^wB_#nMi^ze z`dNRri?Qu<_w%rgMO%m3p}zFk*dR@ve9p=vs6`p>L+*b!xVLsTWS0r3c&#-TI|*4T z?+DTv>m+UEJ6O_@<;cnjsE0&W$n+ao4Wl0{C9w^7O>gXg7Vc+N|H*NshdU#M#?c;C*f@|X6$@ke+0dq zm#LvMNcR!|0Qg#>a=<np(bsio{Mk~3eqEy1eOBI~H?QltTkN!u zwS24ED#7o|Q)$y)_(%;^>deI8NZ<}&*UL;FZq?8P+&uNklQ@-F?zbcX>%jAoOazW24E1P~M_v=jgU004lu^QE3!Yx1$y`o>@e z9I>g8q|jB^?qx6EuJloP&r@stxX6DpO7d8^d(Cb`soWFVKUw>B>%H`CuHC4taz-8q zTWcz?UVdW9fqw!N^^fA^+HC@^f(^xuX&6jKO*&Pt*yWVT&Lfu)tgh!;O8gU`a^$8g zc+18&Wh9^Co@VUJ-PE&2-1@l|>>-m9zW}{=RC#+LCOgJ0^p>-T-RZJ6$HrHZ<9DhB z1<3WdDW1*ymR_{QX~sw#!?6F9%q4u3F1cBh@~bdbsOTMGd(KuO36|r^Gi!GpazdEzMJrx19+Qo0?*9St zmI+>*4eL5K2H>vF?F0dHcYqZR=Oh_ZZ)Vph)Xv(9NV~YDxeA00000h~lBWfa`M3WxOnl z;!5stnSeUkqN z*u>gn=vV%pf)bCRM$A!&0RR91vH7iLXRtX|U{4u7o?$Y{vTJ=bS93Ef~}djok0- z8+QVTd(*fCgzb0sjYxpyerNfX@-{gG00000003YHZ;7u2M2#^xB>(^b07*qoM6N<$ Ef{+)ZYybcN diff --git a/test-integration/snapshots/decodeMessage/nanosp.06.png b/test-integration/snapshots/decodeMessage/nanosp.06.png deleted file mode 100644 index e23183a4c0d8ef4cc3a691d8665c4b9c37e9bd90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 385 zcmV-{0e=38P)?Yj*NWIG*NC**W5F@nse@|+3V2cdU5C8xG0002+7N6A>7$+imJI1)M zCU>|@KpFay$29m$K#qPH?$d)Vd{_(7;_j7*l>Lvs>w?!O0L!$RxyR-o{5}DP zSbGe8;%^ib7={|L$3zSO004LaDdZ!a7d}*TqK0002!XZov%!(j1rYNjk7g?r0?(3XAb z-PXF0@u{EJFXL);Gk4MO?XCqS+s{s|C!p-jx6HvlU651zB*6HeZHx6Ts57jW)>#1n f000000KCy33cb~F6dyLg00000NkvXXu0mjfC=scD diff --git a/test-integration/snapshots/decodeMessage/nanosp.07.png b/test-integration/snapshots/decodeMessage/nanosp.07.png deleted file mode 100644 index 56eff5485e79dd0f3771be67cb4e65b087e49838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 393 zcmV;40e1e0P)Vh7bmoZIQO~|DL9sgA~S~m=XX000000{>8((0_TZHInFs7 z*5rzi4N!-^7O@%PH9(1e9q#UzAv~=sa8eWKaB+`HMC$QJ{}@8lCje$f-8^FVPjR1s zCe{%{zlk>sN=!qYxW_^a0000mux=gDte%vayNE2F*RL| z>WrGxZy1x7KZUY}J2mk;8=eYh?L^pvt%Bt?OLrf^I zQW8Gd(*WmcO0!@R00000NkvXXu0mjftTn7W diff --git a/test-integration/snapshots/decodeMessage/nanosp.10.png b/test-integration/snapshots/decodeMessage/nanosp.10.png deleted file mode 100644 index a7a8740548d2608032872a36bbf128b89b69847d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 405 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@{#ba4!+nDh2V^rmJ7o`#28 zF3;WZUv=knJBzJ8LYg9+J^$_p_fO~OY+x4zYJ!0aM;B**DUEeaiJbO#`>*2PbN6rj z6B4>ws(H@Rd`6X%;kVwdQrVWiCw@!W`is0j_VrJCa&(%n?9KLxT5Gvpw220@S*u+- z5xe^98}VC3)thQO%*ub8o|?Au%;rm*^GwR;l}KMc9HX4jwtTrL?~IkZ`WqITd+Q!u zUS7Iw=Rc1ZA|fj{toSzT!7Nu1h07;vWm41@P0C*Lb@7HuL*=wLHPVi%d$;8u9w_iRJ7#^29pT9ce$dB`%xz{n)zh9eY&eq?|Ew&)A vfOpYyg{?WaLbt>|}Aba4!+nDh2lAYZeBfNS9G z67_fWo|~uFO%PymTIO-U{r%63Dcc^W2u!^77^n*f4(zX3>$hP3%%g8V+lZ$XwWqKz zS?aG@)*Q!vms805%K(Cyn{I6wDUK67$&xr_9S1L+|P+CF7^-U^DoFze>i z-3wLsq&?QL4tTtyH)E^9JeIIky$#3QcHaJ1pzGuwQNP%}(Jt7%q2=Vwb1xd$dxP6S z42Jy`7q7qCZ0%Nd;AzP$zaFVdQ&MBb@0Ik86{{R30 diff --git a/test-integration/snapshots/decodeMessage/nanosp.12.png b/test-integration/snapshots/decodeMessage/nanosp.12.png deleted file mode 100644 index a1a25bcc339c3581703c9debb8715b97f6567df6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 592 zcmV-W0ctg`YUnZJ$di=Xuse*FM*h+N3L~m6cX)9cqWR(qro^wB_#nMi^ze z`dNRri?Qu<_w%rgMO%m3p}zFk*dR@ve9p=vs6`p>L+*b!xVLsTWS0r3c&#-TI|*4T z?+DTv>m+UEJ6O_@<;cnjsE0&W$n+ao4Wl0{C9w^7O>gXg7Vc+N|H*NshdU#M#?c;C*f@|X6$@ke+0dq zm#LvMNcR!|0Qg#>a=<np(bsio{Mk~3eqEy1eOBI~H?QltTkN!u zwS24ED#7o|Q)$y)_(%;^>deI8NZ<}&*UL;FZq?8P+&uNklQ@-F?zbcX>%jAoOazW24E1P~M_v=jgU004lu^QE3!Yx1$y`o>@e z9I>g8q|jB^?qx6EuJloP&r@stxX6DpO7d8^d(Cb`soWFVKUw>B>%H`CuHC4taz-8q zTWcz?UVdW9fqw!N^^fA^+HC@^f(^xuX&6jKO*&Pt*yWVT&Lfu)tgh!;O8gU`a^$8g zc+18&Wh9^Co@VUJ-PE&2-1@l|>>-m9zW}{=RC#+LCOgJ0^p>-T-RZJ6$HrHZ<9DhB z1<3WdDW1*ymR_{QX~sw#!?6F9%q4u3F1cBh@~bdbsOTMGd(KuO36|r^Gi!GpazdEzMJrx19+Qo0?*9St zmI+>*4eL5K2H>vF?F0dHcYqZR=Oh_ZZ)Vph)Xv(9NV~YDxeA00000h~lBWfa`M3WxOnl z;!5stnSeUkqN z*u>gn=vV%pf)bCRM$A!&0RR91vH7iLXRtX|U{4u7o?$Y{vTJ=bS93Ef~}djok0- z8+QVTd(*fCgzb0sjYxpyerNfX@-{gG00000003YHZ;7u2M2#^xB>(^b07*qoM6N<$ Ef{+)ZYybcN diff --git a/test-integration/snapshots/decodeMessage/nanosp.15.png b/test-integration/snapshots/decodeMessage/nanosp.15.png deleted file mode 100644 index e23183a4c0d8ef4cc3a691d8665c4b9c37e9bd90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 385 zcmV-{0e=38P)?Yj*NWIG*NC**W5F@nse@|+3V2cdU5C8xG0002+7N6A>7$+imJI1)M zCU>|@KpFay$29m$K#qPH?$d)Vd{_(7;_j7*l>Lvs>w?!O0L!$RxyR-o{5}DP zSbGe8;%^ib7={|L$3zSO004LaDdZ!a7d}*TqK0002!XZov%!(j1rYNjk7g?r0?(3XAb z-PXF0@u{EJFXL);Gk4MO?XCqS+s{s|C!p-jx6HvlU651zB*6HeZHx6Ts57jW)>#1n f000000KCy33cb~F6dyLg00000NkvXXu0mjfC=scD diff --git a/test-integration/snapshots/decodeMessage/nanosp.16.png b/test-integration/snapshots/decodeMessage/nanosp.16.png deleted file mode 100644 index 56eff5485e79dd0f3771be67cb4e65b087e49838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 393 zcmV;40e1e0P)Vh7bmoZIQO~|DL9sgA~S~m=XX000000{>8((0_TZHInFs7 z*5rzi4N!-^7O@%PH9(1e9q#UzAv~=sa8eWKaB+`HMC$QJ{}@8lCje$f-8^FVPjR1s zCe{%{zlk>sN=!qYxW_^a0000mux=gDte%vayNE2F*RL| z>WrGxZy1x7KZUY}J2mk;8=eYh?L^pvt%Bt?OLrf^I zQW8Gd(*WmcO0!@R00000NkvXXu0mjftTn7W diff --git a/test-integration/snapshots/decodeMessage/nanosp.17.png b/test-integration/snapshots/decodeMessage/nanosp.17.png deleted file mode 100644 index 5854c8c51cca8065ae0f2fed78a602134e03c123..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 380 zcmV-?0fYXDP)Y4+knlLomohBk6e{l6!xFJz`nVW=qq000000N`IdRu5oaMC_k) z&I?C!hGhcE(3c$3;Fo|s`enGgUs`ys9>An3&~|Zm6%l3qIli>uIs>rG=r(t}{gdwu zsABCH`i6n>Ivu;lQzm} zd_)rw$~jO^K=<5n)Q(mT^oZ*-Am?0$d%HAx_U>F0(B+r|^%68PTA?~tApigXEYQAC z_2ny8b4z};jl!)qVveLYVpV&m?e-irL6d)@^hdUERE@T_@79)%>b>aEuLq|(3gt+8 z228MPl&U0P@1vcMRJZcT=0N=+yd~y*_+%TUDl_0hG)ga~dFNh5y#!$;(|;WS00000 afT1@wsmK_v}6ba4!+nDh2#EZ-po0k=St zcP)SQGrv7z=5(yP)v@F<|NBaVrCHwTUDFg<$5iy?bU}H!S4CBMLXc?2&K;|bHh=p5e21oEDa(PgFU-RC{B3^6u_9@$#4nfk zni?M@s)Vb3jsOj8SbKB%x3zhj@6NEu-+uFL&%2&qF4c*PPw1^Tlu>!G#aO%|wq~E# zt_NSFlGn_-s(yLiMV5#X-(!}HnlCI(h_7Re!@Q!gf3y!M+=^@T@-v;+AmU`8b nwL)vv!tQ>5QxT9)fkAa#+N{NP^#*fUF%Z|&)z4*}Q$iB}=J}Bz diff --git a/test-integration/snapshots/decodeMessage/nanosp.19.png b/test-integration/snapshots/decodeMessage/nanosp.19.png deleted file mode 100644 index 0966b381351991acb6db707ea26cd67901f222f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 455 zcmV;&0XY7NP)y0cklD7Wow`|A;C>4000000001RgNTSo^eEo& z9X)`*lq>Yj=OjR*Uu%sW$y<^oV70;|jebd&fTqhq-sqQf3D6L0&{Idhl=2llfIG%j zC~5Rdx-+2Z!kstzxuv`12LJ#7VvP6A@jGEVrW;$Tt`yPUp1d^^k%NZ!a5I&3FJ{Ml zXemNoY)jW}>v5~swq<-9mA_i6_IqLi>@w2jz@EJNy4JcnsmH>#9yV|tu)QCbfN@Gb zoTN^ALUg%5E&-oyJoAoAz&Klvn!gW?-z7K!x+2@_VU`<800000xFzQIfVLxF72U41 zl-Xm7w#8N)R|i}*?i98Y9!t$yHS2=nKL>ZQbUHnt)9*Gv`@2-#*LI#epN4Yv|NcbQ z1N!}L6PbX{IMZ#6p05w9pvRV*;;W&~_xDTr)4%%Bv>!R7%y+~Y(B|fqYi5~UiuJQs x79V@SX}?%X`V+h_ehK>LNB{r;0002k=ohE*2PbN6rj z6B4>ws(H@Rd`6X%;kVwdQrVWiCw@!W`is0j_VrJCa&(%n?9KLxT5Gvpw220@S*u+- z5xe^98}VC3)thQO%*ub8o|?Au%;rm*^GwR;l}KMc9HX4jwtTrL?~IkZ`WqITd+Q!u zUS7Iw=Rc1ZA|fj{toSzT!7Nu1h07;vWm41@P0C*Lb@7HuL*=wLHPVi%d$;8u9w_iRJ7#^29pT9ce$dB`%xz{n)zh9eY&eq?|Ew&)A vfOpYyg{?WaLbt>|}Aba4!+nDh2lAYZeBfNS9G z67_fWo|~uFO%PymTIO-U{r%63Dcc^W2u!^77^n*f4(zX3>$hP3%%g8V+lZ$XwWqKz zS?aG@)*Q!vms805%K(Cyn{I6wDUK67$&xr_9S1L+|P+CF7^-U^DoFze>i z-3wLsq&?QL4tTtyH)E^9JeIIky$#3QcHaJ1pzGuwQNP%}(Jt7%q2=Vwb1xd$dxP6S z42Jy`7q7qCZ0%Nd;AzP$zaFVdQ&MBb@0Ik86{{R30 diff --git a/test-integration/snapshots/decodeMessage/nanosp.22.png b/test-integration/snapshots/decodeMessage/nanosp.22.png deleted file mode 100644 index 63ca33084772046af8e4e052eabc24df0cb998ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 724 zcmV;_0xSKAP)#6MGOsFf>H%FqaR=D?sxrcM_E6Oj2%O^C3dneMSQk6?QY-Bk@t=fC)_zi^@~XdV&C4+@ za2)>%$b&{TC3aUw_-oTnmDeCmXYlYX!>h$;8R*+wcCcsVD%b4YRlhNd5uP1_?!u+z z&Kmh=&(hAep4%LD2qA>{b8y#s5zeb17Wyons~}CS3@zC!D7uPFo}+2fCVp*(XsI-3 zK+JccDdSR21A9vxU$fBN#EzT7$$i-*#+5ApNwdzXz9qZMnlsvYfP3>lPyx&TP$jGm z2AbytK{-?yaYh^2eCyzPDMC&*pzRyaEW7p>@b3XwS7^?zBY^WoZIT4jOzt$m8EuX+ z9y`B!4u6ip8GFAc*AGG0Q4M0RP($~i?MsgEcgLbPK)v83Ed7(5Dg9LNToxOW+=?a; zJ(R^+Pi8qFMPz36P7q{`#5l z@x}hJjTqkVjOdg(a6wEh<7jtDKbi4sqgX2ig6N=D+7(Kl=Hz*Rk%fx|$47k0#dE-# zv}eDa=*z_w5I#a)ed8qDlq9FbQP9S3uP{OgA%qY@9QX$QQqf6rBkvpl0000EaktG3V{fz&>V04u`vE z?;ZIqe{%Pm<4cY;7=*~?PX4}c*)&ELQSV@oCWapcUYbj%T#oxP^ZVM`y?YAQWXxn_ zuWOGny*X1cQTzFv;&~U<=IQ5FS-ssct+M=Aee=I%Azmjf!>iwJei|dY^3dDpzMgA~ zb2$?qMsIRnx$)T7m}fI@F+Z{YkDuCd z_y^yPqnzbM;WIlXu77Un61K~8*7-ZloGaGcTI>CV#aYbr+a%VFJ2-?(KIQnHd=7pMDm<-?6N^bP4;0`8#6WKgB+OpYIqZ9b{s( z_FlTR#Kg>8Gd7^UO5j(Gkq0MeZ5lGI{)z4*}Q$iB}_YeE5 diff --git a/test-integration/snapshots/decodeMessage/nanosp.24.png b/test-integration/snapshots/decodeMessage/nanosp.24.png deleted file mode 100644 index 1c8a714f721eb077d6860f5ca1a6361d924d4455..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 557 zcmV+|0@D47P)NklQ@-F?zbcX>%jAoOazW24E1P~M_v=jgU004lu^QE3!Yx1$y`o>@e z9I>g8q|jB^?qx6EuJloP&r@stxX6DpO7d8^d(Cb`soWFVKUw>B>%H`CuHC4taz-8q zTWcz?UVdW9fqw!N^^fA^+HC@^f(^xuX&6jKO*&Pt*yWVT&Lfu)tgh!;O8gU`a^$8g zc+18&Wh9^Co@VUJ-PE&2-1@l|>>-m9zW}{=RC#+LCOgJ0^p>-T-RZJ6$HrHZ<9DhB z1<3WdDW1*ymR_{QX~sw#!?6F9%q4u3F1cBh@~bdbsOTMGd(KuO36|r^Gi!GpazdEzMJrx19+Qo0?*9St zmI+>*4eL5K2H>vF?F0dHcYqZR=Oh_ZZ)Vph)Xv(9NVEaktG3V_}@4O=lJPtEg znLqsJekyiXhm_*~B&L%FZ>v{#CLb_6rZEqsoq<8_`BK;0+qU*^y|%ok^Tt}CV_Tep z6Mt!4{`o0RN9eoF)@%KncTV{<_eyqu>&!wc$=0H^q01*#-s0Qp5P$sE7I*FRCyfEt zk6hKJ$?Q;f2&mT#TXQx@;hLGPNp9EK6DziwbtvANcqy_n%H1ZtyHx3{@vC_Zg6kD( zmd#pOFSXBh|0M3pSsPcT1%3CMbW->I53bF3c|W*y`F`Vx-7Hhx$Fsw9A6uUU zoSU|w;o9nhJN#F=?lqh7Yo=$Cw9(h)D*6v=nI~&1PcfcX;T|!6gQK*KyHDk@?Ba#% zyep>sId;eJ55K`emV+G5(gm;8l^7Uw4qp3E=FRkQL8Z7|=kb$fk8i16-?aVRrZ(0T zbBD#%LW`;u_c@+%FV-?_{joJnmC5#2nN(o%9WzR@lR=k^UbJW6J*TZHl=sw;sb8W|BE_~YDxeA00000h~lBWfa`M3WxOnl z;!5stnSeUkqN z*u>gn=vV%pf)bCRM$A!&0RR91vH7iLXRtX|U{4u7o?$Y{vTJ=bS93Ef~}djok0- z8+QVTd(*fCgzb0sjYxpyerNfX@-{gG00000003YHZ;7u2M2#^xB>(^b07*qoM6N<$ Ef{+)ZYybcN diff --git a/test-integration/snapshots/decodeMessage/nanosp.27.png b/test-integration/snapshots/decodeMessage/nanosp.27.png deleted file mode 100644 index e23183a4c0d8ef4cc3a691d8665c4b9c37e9bd90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 385 zcmV-{0e=38P)?Yj*NWIG*NC**W5F@nse@|+3V2cdU5C8xG0002+7N6A>7$+imJI1)M zCU>|@KpFay$29m$K#qPH?$d)Vd{_(7;_j7*l>Lvs>w?!O0L!$RxyR-o{5}DP zSbGe8;%^ib7={|L$3zSO004LaDdZ!a7d}*TqK0002!XZov%!(j1rYNjk7g?r0?(3XAb z-PXF0@u{EJFXL);Gk4MO?XCqS+s{s|C!p-jx6HvlU651zB*6HeZHx6Ts57jW)>#1n f000000KCy33cb~F6dyLg00000NkvXXu0mjfC=scD diff --git a/test-integration/snapshots/decodeMessage/nanosp.28.png b/test-integration/snapshots/decodeMessage/nanosp.28.png deleted file mode 100644 index 56eff5485e79dd0f3771be67cb4e65b087e49838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 393 zcmV;40e1e0P)Vh7bmoZIQO~|DL9sgA~S~m=XX000000{>8((0_TZHInFs7 z*5rzi4N!-^7O@%PH9(1e9q#UzAv~=sa8eWKaB+`HMC$QJ{}@8lCje$f-8^FVPjR1s zCe{%{zlk>sN=!qYxW_^a0000mux=gDte%vayNE2F*RL| z>WrGxZy1x7KZUY}J2mk;8=eYh?L^pvt%Bt?OLrf^I zQW8Gd(*WmcO0!@R00000NkvXXu0mjftTn7W diff --git a/test-integration/snapshots/decodeMessage/nanosp.29.png b/test-integration/snapshots/decodeMessage/nanosp.29.png deleted file mode 100644 index 9fbc447c72dd7395262af62672e5d0b2156bb7ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 330 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|wQCvY!j@0@XG6S_SFdW!lk;4CAPe;b>ck?VJ#ZQ^j zuuFC=WOi^Ed7wOyUJe+CUFuBcX`s(UX!He_jzm$j)#U715B)(T3~^rO$5xx4?}w)@+1 zf4!VxdHs(_{WMQIwg0&X@Aah)9Q7zoWoyU=v`d?>gl`oRXc0rH}jXMKPZ}2 zyr6>X*3bKg3j%FRuI%6dy8J}InWi4;<1tGXp7d~@Jh4qpnRlv#RFyecsS+)P_FbGGjOqzw!B=3C$TZABHWG&-t8vpM89sW zCHCYIB@=KA{ZYj<)Js5*{xRHtHkR;}-GMs|fi4&Ksv_bz|D4~JQ1uBQ&1{%g9R6F~ zCt!$m#nA8S?SeMj&_%q*K@0!@60CR*7|vOJj~@{??)UpQXFtW%?^AAXnU#P}8rQE_ zd}nvye})$?`|bW&baWR>z%U)P)^4Ad)>O3``ZgpWnFJ(TZVlL{^`WI-pZq0awi2jX z0{|>YHI!?rp-WQ@O{N;klSx1_2}riw8lV~q00000yu=SW-KGAHTAhyo0000?Yp-NWIH`m=K0&9J;k1yw5Ln&X876iYWmA00000U=|PW2J|ztyuB=o zV@s}(Oh6g>l42V45|E=`hP!!C!qd9}ovJ{~#a)$|mE+Ixt_0N{05^NLx#I1gbbCM* zYsJv7^xlFJuc1MVF%bg*0059uY84ek%M53zmLi7n@@_znYWby_5^oo0beC&>}ft`Z#*9W006_9s@{2wiI}r+6EQQZ zzB_MzhMvw9J}H#8eOvFW{zcYu`6) diff --git a/test-integration/snapshots/decodeMessage/nanosp.32.png b/test-integration/snapshots/decodeMessage/nanosp.32.png deleted file mode 100644 index 0966b381351991acb6db707ea26cd67901f222f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 455 zcmV;&0XY7NP)y0cklD7Wow`|A;C>4000000001RgNTSo^eEo& z9X)`*lq>Yj=OjR*Uu%sW$y<^oV70;|jebd&fTqhq-sqQf3D6L0&{Idhl=2llfIG%j zC~5Rdx-+2Z!kstzxuv`12LJ#7VvP6A@jGEVrW;$Tt`yPUp1d^^k%NZ!a5I&3FJ{Ml zXemNoY)jW}>v5~swq<-9mA_i6_IqLi>@w2jz@EJNy4JcnsmH>#9yV|tu)QCbfN@Gb zoTN^ALUg%5E&-oyJoAoAz&Klvn!gW?-z7K!x+2@_VU`<800000xFzQIfVLxF72U41 zl-Xm7w#8N)R|i}*?i98Y9!t$yHS2=nKL>ZQbUHnt)9*Gv`@2-#*LI#epN4Yv|NcbQ z1N!}L6PbX{IMZ#6p05w9pvRV*;;W&~_xDTr)4%%Bv>!R7%y+~Y(B|fqYi5~UiuJQs x79V@SX}?%X`V+h_ehK>LNB{r;0002k=ohE*2PbN6rj z6B4>ws(H@Rd`6X%;kVwdQrVWiCw@!W`is0j_VrJCa&(%n?9KLxT5Gvpw220@S*u+- z5xe^98}VC3)thQO%*ub8o|?Au%;rm*^GwR;l}KMc9HX4jwtTrL?~IkZ`WqITd+Q!u zUS7Iw=Rc1ZA|fj{toSzT!7Nu1h07;vWm41@P0C*Lb@7HuL*=wLHPVi%d$;8u9w_iRJ7#^29pT9ce$dB`%xz{n)zh9eY&eq?|Ew&)A vfOpYyg{?WaLbt>|}Aba4!+nDh2lAYZeBfNS9G z67_fWo|~uFO%PymTIO-U{r%63Dcc^W2u!^77^n*f4(zX3>$hP3%%g8V+lZ$XwWqKz zS?aG@)*Q!vms805%K(Cyn{I6wDUK67$&xr_9S1L+|P+CF7^-U^DoFze>i z-3wLsq&?QL4tTtyH)E^9JeIIky$#3QcHaJ1pzGuwQNP%}(Jt7%q2=Vwb1xd$dxP6S z42Jy`7q7qCZ0%Nd;AzP$zaFVdQ&MBb@0Ik86{{R30 diff --git a/test-integration/snapshots/decodeMessage/nanosp.35.png b/test-integration/snapshots/decodeMessage/nanosp.35.png deleted file mode 100644 index 63ca33084772046af8e4e052eabc24df0cb998ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 724 zcmV;_0xSKAP)#6MGOsFf>H%FqaR=D?sxrcM_E6Oj2%O^C3dneMSQk6?QY-Bk@t=fC)_zi^@~XdV&C4+@ za2)>%$b&{TC3aUw_-oTnmDeCmXYlYX!>h$;8R*+wcCcsVD%b4YRlhNd5uP1_?!u+z z&Kmh=&(hAep4%LD2qA>{b8y#s5zeb17Wyons~}CS3@zC!D7uPFo}+2fCVp*(XsI-3 zK+JccDdSR21A9vxU$fBN#EzT7$$i-*#+5ApNwdzXz9qZMnlsvYfP3>lPyx&TP$jGm z2AbytK{-?yaYh^2eCyzPDMC&*pzRyaEW7p>@b3XwS7^?zBY^WoZIT4jOzt$m8EuX+ z9y`B!4u6ip8GFAc*AGG0Q4M0RP($~i?MsgEcgLbPK)v83Ed7(5Dg9LNToxOW+=?a; zJ(R^+Pi8qFMPz36P7q{`#5l z@x}hJjTqkVjOdg(a6wEh<7jtDKbi4sqgX2ig6N=D+7(Kl=Hz*Rk%fx|$47k0#dE-# zv}eDa=*z_w5I#a)ed8qDlq9FbQP9S3uP{OgA%qY@9QX$QQqf6rBkvpl0000EaktG3V{fz&>V04u`vE z?;ZIqe{%Pm<4cY;7=*~?PX4}c*)&ELQSV@oCWapcUYbj%T#oxP^ZVM`y?YAQWXxn_ zuWOGny*X1cQTzFv;&~U<=IQ5FS-ssct+M=Aee=I%Azmjf!>iwJei|dY^3dDpzMgA~ zb2$?qMsIRnx$)T7m}fI@F+Z{YkDuCd z_y^yPqnzbM;WIlXu77Un61K~8*7-ZloGaGcTI>CV#aYbr+a%VFJ2-?(KIQnHd=7pMDm<-?6N^bP4;0`8#6WKgB+OpYIqZ9b{s( z_FlTR#Kg>8Gd7^UO5j(Gkq0MeZ5lGI{)z4*}Q$iB}_YeE5 diff --git a/test-integration/snapshots/decodeMessage/nanosp.37.png b/test-integration/snapshots/decodeMessage/nanosp.37.png deleted file mode 100644 index 8b7052724ced5fbc86ffd55ab51b5bba6278fd9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 760 zcmVZk$p80000009ei+c75MBy}Yh# zVKN$>pzVJ*wUPT-Wuw%>Q``(P^QMH8~7v;g(T;CH>2x_bD&iTFpup z_Sg;MecvpxR{PkNiarAv*AGQ&YjqJ&3&>Q|oVv+)iqW9#7FnG#xbn~{7`1DKrWSn$ zur^Yg%(zSDH{`_M#I2HcEOk(iI#K&i^&lr1wdfttx`%adD@Esuv4vK3g2<6h`=$-gz~ckNHu~95A56_wMjz_Rr{NLR-Jf?wF237R2>doK1bEmq~+NMJIVv2e=Ukc@kAV2 zxH>by7|6~WpQSZ}#01pZsVhMj?;aqHU4_KsYB5@jJlORQW)Tk4hcq2?V zG~{~9@FrXwBZ$VPf+)494qJPsU9ua!Krkx9LMZ`cde(9Jwqf+)~L z0RZ5avho3DQmpOIV4wmT^>S4%(-0)ksOmh1^vbG2HXTrGibhp1q4V^SjgKqi1BsY@2VYW^fXSxLd z0HE{5C+A=E6m%w;C*d``PqX|2wriI2z!J2X_bowwUh&GzH+R6{O<#Fg2ShYWu#U(- qCKiKDcryp7p}9b_1ONbVI{yK>BLf(C3mqf?0000?P)Vjz#RfF_W()qD&EYj{cwbs|gTuS*5+O^X{9dU9ncE+_j8x~S zIRm=(a+*&yQ|(WiZy#S^L6)T-sye8zIzh&kHGR9V%?_|~cAabmy5@3hRV0WU>22Ta z1HVf-jL{{?p{-T0-BZ@0t1+ndh!Z~sWc?}NCcJkbIAl6wq$buBmNP6EgH;hV9jUci z(4|c{3f?gzvVQ;xOAv_=>VTm~L_!E5ORzOO9*L6}4DZH~I1VbtwIbKDyY8}qIiMXN zk(xxOUUX*=^-^`!d62)Q2hhwa$giF1@X}=zssE{WFa0?6ecJKvdTNpUZoIOhlC1b;y!JrPfxOM(-{iGNp(^nOd#Ur_rg0j$D6me-kdi zIBFyCd*yV`^eypnRms!I4*DOv3FF+G+Dq*dlc5^=Frg)=g~}))gnS({A7BQR_3SfP z^eKqDZjk6xkfnNdcYR~)s}1K+?Q2t(V1;~|H^S{eP6f!T5~<@bQLUWd79{f^hDWo) z%e6&FJBZ=>Uzs~+2b~bJ+@^KFj(jy%wa@%dJ>d3;!xTS*+$KvA1&9onNK-t>4d2Q# z$nE>c+8)%`gmLG&Zof+n9W+iOZk2yYK1lk8X`L|EbV~>!MB#&v&ENGDv>?eR;R(D? zu>1g?6)cCsCFo(^w*=w5;!BxN?tsOce&=N!5D_fNJZ}G8Vm{o2A7(8zG!Y7xgb+ej Z=NER$>vAvmiADeb002ovPDHLkV1jMPTWSCR diff --git a/test-integration/snapshots/decodeMessage/nanosp.39.png b/test-integration/snapshots/decodeMessage/nanosp.39.png deleted file mode 100644 index 14b19bdf3efdfb7c767cdf8e25ca7a1fbe17a7d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 358 zcmV-s0h#`ZP)~YDxeA00000h~lBWfa`M3WxOnl z;!5stnSeUkqN z*u>gn=vV%pf)bCRM$A!&0RR91vH7iLXRtX|U{4u7o?$Y{vTJ=bS93Ef~}djok0- z8+QVTd(*fCgzb0sjYxpyerNfX@-{gG00000003YHZ;7u2M2#^xB>(^b07*qoM6N<$ Ef{+)ZYybcN diff --git a/test-integration/snapshots/decodeMessage/nanosp.40.png b/test-integration/snapshots/decodeMessage/nanosp.40.png deleted file mode 100644 index e23183a4c0d8ef4cc3a691d8665c4b9c37e9bd90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 385 zcmV-{0e=38P)?Yj*NWIG*NC**W5F@nse@|+3V2cdU5C8xG0002+7N6A>7$+imJI1)M zCU>|@KpFay$29m$K#qPH?$d)Vd{_(7;_j7*l>Lvs>w?!O0L!$RxyR-o{5}DP zSbGe8;%^ib7={|L$3zSO004LaDdZ!a7d}*TqK0002!XZov%!(j1rYNjk7g?r0?(3XAb z-PXF0@u{EJFXL);Gk4MO?XCqS+s{s|C!p-jx6HvlU651zB*6HeZHx6Ts57jW)>#1n f000000KCy33cb~F6dyLg00000NkvXXu0mjfC=scD diff --git a/test-integration/snapshots/decodeMessage/nanosp.41.png b/test-integration/snapshots/decodeMessage/nanosp.41.png deleted file mode 100644 index 56eff5485e79dd0f3771be67cb4e65b087e49838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 393 zcmV;40e1e0P)Vh7bmoZIQO~|DL9sgA~S~m=XX000000{>8((0_TZHInFs7 z*5rzi4N!-^7O@%PH9(1e9q#UzAv~=sa8eWKaB+`HMC$QJ{}@8lCje$f-8^FVPjR1s zCe{%{zlk>sN=!qYxW_^a0000mux=gDte%vayNE2F*RL| z>WrGxZy1x7KZUY}J2mk;8=eYh?L^pvt%Bt?OLrf^I zQW8Gd(*WmcO0!@R00000NkvXXu0mjftTn7W diff --git a/test-integration/snapshots/decodeMessage/nanosp.42.png b/test-integration/snapshots/decodeMessage/nanosp.42.png deleted file mode 100644 index 9fbc447c72dd7395262af62672e5d0b2156bb7ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 330 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|wQCvY!j@0@XG6S_SFdW!lk;4CAPe;b>ck?VJ#ZQ^j zuuFC=WOi^Ed7wOyUJe+CUFuBcX`s(UX!He_jzm$j)#U715B)(T3~^rO$5xx4?}w)@+1 zf4!VxdHs(_{WMQIwg0&X@Aah)9Q7zoWoyU=v`d?>gl`oRXc0rH}jXMKPZ}2 zyr6>X*3bKg3j%FRuI%6dy8J}InWi4;<1tGXp7d~@Jh4qpnRlv#RFyecsS+)P_FbGGjOqzw!B=3C$TZABHWG&-t8vpM89sW zCHCYIB@=KA{ZYj<)Js5*{xRHtHkR;}-GMs|fi4&Ksv_bz|D4~JQ1uBQ&1{%g9R6F~ zCt!$m#nA8S?SeMj&_%q*K@0!@60CR*7|vOJj~@{??)UpQXFtW%?^AAXnU#P}8rQE_ zd}nvye})$?`|bW&baWR>z%U)P)^4Ad)>O3``ZgpWnFJ(TZVlL{^`WI-pZq0awi2jX z0{|>YHI!?rp-WQ@O{N;klSx1_2}riw8lV~q00000yu=SW-KGAHTAhyo0000*#ld?JcI07pz^5RHHyKZU*6n>Kp} zoFT5F+?;l{u-O0@^r&nh`V>?-=5&3H_a4Fk007vGUhO&ai(~sByVk_L)j(Et)~TEJ z*oaMB+Bfre3yo~VsuWoDHMMe(dZT0Zt8S0(Gk_G?(006fV|3`MImlt1C<-k&)G^U}&@qu!|v#C^R zdA5CdUA3zBdYH$!sLml3ku0e4n(F&bm5WZaD+Ins1FW=b*;}S4N(t&@&rZQ10LhLr zo!OIAv8Hs~wS-j*D_{2rvBJ}7#$L&|0oM<2nn|g*vs2hB00SNw+cffQ@#3t&_hdr{ zcF))-Ury`*X|C_`QLBuq>W_Lqez{YTD$wdp#kkqe5nseTo8u)%&~qUG001zP<y0cklD7Wow`|A;C>4000000001RgNTSo^eEo& z9X)`*lq>Yj=OjR*Uu%sW$y<^oV70;|jebd&fTqhq-sqQf3D6L0&{Idhl=2llfIG%j zC~5Rdx-+2Z!kstzxuv`12LJ#7VvP6A@jGEVrW;$Tt`yPUp1d^^k%NZ!a5I&3FJ{Ml zXemNoY)jW}>v5~swq<-9mA_i6_IqLi>@w2jz@EJNy4JcnsmH>#9yV|tu)QCbfN@Gb zoTN^ALUg%5E&-oyJoAoAz&Klvn!gW?-z7K!x+2@_VU`<800000xFzQIfVLxF72U41 zl-Xm7w#8N)R|i}*?i98Y9!t$yHS2=nKL>ZQbUHnt)9*Gv`@2-#*LI#epN4Yv|NcbQ z1N!}L6PbX{IMZ#6p05w9pvRV*;;W&~_xDTr)4%%Bv>!R7%y+~Y(B|fqYi5~UiuJQs x79V@SX}?%X`V+h_ehK>LNB{r;0002k=ohE*2PbN6rj z6B4>ws(H@Rd`6X%;kVwdQrVWiCw@!W`is0j_VrJCa&(%n?9KLxT5Gvpw220@S*u+- z5xe^98}VC3)thQO%*ub8o|?Au%;rm*^GwR;l}KMc9HX4jwtTrL?~IkZ`WqITd+Q!u zUS7Iw=Rc1ZA|fj{toSzT!7Nu1h07;vWm41@P0C*Lb@7HuL*=wLHPVi%d$;8u9w_iRJ7#^29pT9ce$dB`%xz{n)zh9eY&eq?|Ew&)A vfOpYyg{?WaLbt>|}Aba4!+nDh2lAYZeBfNS9G z67_fWo|~uFO%PymTIO-U{r%63Dcc^W2u!^77^n*f4(zX3>$hP3%%g8V+lZ$XwWqKz zS?aG@)*Q!vms805%K(Cyn{I6wDUK67$&xr_9S1L+|P+CF7^-U^DoFze>i z-3wLsq&?QL4tTtyH)E^9JeIIky$#3QcHaJ1pzGuwQNP%}(Jt7%q2=Vwb1xd$dxP6S z42Jy`7q7qCZ0%Nd;AzP$zaFVdQ&MBb@0Ik86{{R30 diff --git a/test-integration/snapshots/decodeMessage/nanosp.49.png b/test-integration/snapshots/decodeMessage/nanosp.49.png deleted file mode 100644 index a1a25bcc339c3581703c9debb8715b97f6567df6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 592 zcmV-W0ctg`YUnZJ$di=Xuse*FM*h+N3L~m6cX)9cqWR(qro^wB_#nMi^ze z`dNRri?Qu<_w%rgMO%m3p}zFk*dR@ve9p=vs6`p>L+*b!xVLsTWS0r3c&#-TI|*4T z?+DTv>m+UEJ6O_@<;cnjsE0&W$n+ao4Wl0{C9w^7O>gXg7Vc+N|H*NshdU#M#?c;C*f@|X6$@ke+0dq zm#LvMNcR!|0Qg#>a=<np(bsio{Mk~3eqEy1eOBI~H?QltTkN!u zwS24ED#7o|Q)$y)_(%;^>deI8NZ<}&*UL;FZq?8P+&uNklQ@-F?zbcX>%jAoOazW24E1P~M_v=jgU004lu^QE3!Yx1$y`o>@e z9I>g8q|jB^?qx6EuJloP&r@stxX6DpO7d8^d(Cb`soWFVKUw>B>%H`CuHC4taz-8q zTWcz?UVdW9fqw!N^^fA^+HC@^f(^xuX&6jKO*&Pt*yWVT&Lfu)tgh!;O8gU`a^$8g zc+18&Wh9^Co@VUJ-PE&2-1@l|>>-m9zW}{=RC#+LCOgJ0^p>-T-RZJ6$HrHZ<9DhB z1<3WdDW1*ymR_{QX~sw#!?6F9%q4u3F1cBh@~bdbsOTMGd(KuO36|r^Gi!GpazdEzMJrx19+Qo0?*9St zmI+>*4eL5K2H>vF?F0dHcYqZR=Oh_ZZ)Vph)Xv(9NV~YDxeA00000h~lBWfa`M3WxOnl z;!5stnSeUkqN z*u>gn=vV%pf)bCRM$A!&0RR91vH7iLXRtX|U{4u7o?$Y{vTJ=bS93Ef~}djok0- z8+QVTd(*fCgzb0sjYxpyerNfX@-{gG00000003YHZ;7u2M2#^xB>(^b07*qoM6N<$ Ef{+)ZYybcN diff --git a/test-integration/snapshots/decodeMessage/nanosp.52.png b/test-integration/snapshots/decodeMessage/nanosp.52.png deleted file mode 100644 index e23183a4c0d8ef4cc3a691d8665c4b9c37e9bd90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 385 zcmV-{0e=38P)?Yj*NWIG*NC**W5F@nse@|+3V2cdU5C8xG0002+7N6A>7$+imJI1)M zCU>|@KpFay$29m$K#qPH?$d)Vd{_(7;_j7*l>Lvs>w?!O0L!$RxyR-o{5}DP zSbGe8;%^ib7={|L$3zSO004LaDdZ!a7d}*TqK0002!XZov%!(j1rYNjk7g?r0?(3XAb z-PXF0@u{EJFXL);Gk4MO?XCqS+s{s|C!p-jx6HvlU651zB*6HeZHx6Ts57jW)>#1n f000000KCy33cb~F6dyLg00000NkvXXu0mjfC=scD diff --git a/test-integration/snapshots/decodeMessage/nanosp.53.png b/test-integration/snapshots/decodeMessage/nanosp.53.png deleted file mode 100644 index 56eff5485e79dd0f3771be67cb4e65b087e49838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 393 zcmV;40e1e0P)Vh7bmoZIQO~|DL9sgA~S~m=XX000000{>8((0_TZHInFs7 z*5rzi4N!-^7O@%PH9(1e9q#UzAv~=sa8eWKaB+`HMC$QJ{}@8lCje$f-8^FVPjR1s zCe{%{zlk>sN=!qYxW_^a0000mux=gDte%vayNE2F*RL| z>WrGxZy1x7KZUY}J2mk;8=eYh?L^pvt%Bt?OLrf^I zQW8Gd(*WmcO0!@R00000NkvXXu0mjftTn7W diff --git a/test-integration/snapshots/decodeMessage/nanosp.54.png b/test-integration/snapshots/decodeMessage/nanosp.54.png deleted file mode 100644 index 8a50d7e0aefb037bc7c64b380116e1dd54e9430f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 347 zcmV-h0i^zkP)?Yp-NWIH`m=K0&9J;k1yw5Ln&X876iYWmA00000U=|PW2J|ztyuB=o zV@s}(Oh6g>l42V45|E=`hP!!C!qd9}ovJ{~#a)$|mE+Ixt_0N{05^NLx#I1gbbCM* zYsJv7^xlFJuc1MVF%bg*0059uY84ek%M53zmLi7n@@_znYWby_5^oo0beC&>}ft`Z#*9W006_9s@{2wiI}r+6EQQZ zzB_MzhMvw9J}H#8eOvFW{zcYu`6) diff --git a/test-integration/snapshots/decodeMessage/nanosp.55.png b/test-integration/snapshots/decodeMessage/nanosp.55.png deleted file mode 100644 index 0966b381351991acb6db707ea26cd67901f222f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 455 zcmV;&0XY7NP)y0cklD7Wow`|A;C>4000000001RgNTSo^eEo& z9X)`*lq>Yj=OjR*Uu%sW$y<^oV70;|jebd&fTqhq-sqQf3D6L0&{Idhl=2llfIG%j zC~5Rdx-+2Z!kstzxuv`12LJ#7VvP6A@jGEVrW;$Tt`yPUp1d^^k%NZ!a5I&3FJ{Ml zXemNoY)jW}>v5~swq<-9mA_i6_IqLi>@w2jz@EJNy4JcnsmH>#9yV|tu)QCbfN@Gb zoTN^ALUg%5E&-oyJoAoAz&Klvn!gW?-z7K!x+2@_VU`<800000xFzQIfVLxF72U41 zl-Xm7w#8N)R|i}*?i98Y9!t$yHS2=nKL>ZQbUHnt)9*Gv`@2-#*LI#epN4Yv|NcbQ z1N!}L6PbX{IMZ#6p05w9pvRV*;;W&~_xDTr)4%%Bv>!R7%y+~Y(B|fqYi5~UiuJQs x79V@SX}?%X`V+h_ehK>LNB{r;0002k=ohEm^N~K0Vh?NInn>U0Kz0@juTrLGXMYp0002Y)mm$<*WS(P zGr9v;OsgzcdM6e@DaD_34OEB)V6zN#t8Zo>(H*#Gyx}NT-xRL^*Ogne`lcJe zZKwvYnuO&@2GGvBt96kIy#U5Fk8}oN0jyS>x*3QC;HGOH-GvYU0LVaY8K>^ouc5Wp z_b=w!$al`}?JxK9?CIVoYV05Ti2t{tI6ZQb{mX|xgpB={rlYmH0-m&)9xdC~{0^X$ zk}ZR_UOrmK?oHc_gwfBkNv2;HzbW6{$8B$d-JgWpBiqlVW@(0+o>b%a?OV k00000000000KhGM0bh{T$_#fJQUCw|07*qoM6N<$f@(~#N&o-= diff --git a/test-integration/snapshots/decodeMessage/nanosp.57.png b/test-integration/snapshots/decodeMessage/nanosp.57.png deleted file mode 100644 index a7a8740548d2608032872a36bbf128b89b69847d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 405 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@{#ba4!+nDh2V^rmJ7o`#28 zF3;WZUv=knJBzJ8LYg9+J^$_p_fO~OY+x4zYJ!0aM;B**DUEeaiJbO#`>*2PbN6rj z6B4>ws(H@Rd`6X%;kVwdQrVWiCw@!W`is0j_VrJCa&(%n?9KLxT5Gvpw220@S*u+- z5xe^98}VC3)thQO%*ub8o|?Au%;rm*^GwR;l}KMc9HX4jwtTrL?~IkZ`WqITd+Q!u zUS7Iw=Rc1ZA|fj{toSzT!7Nu1h07;vWm41@P0C*Lb@7HuL*=wLHPVi%d$;8u9w_iRJ7#^29pT9ce$dB`%xz{n)zh9eY&eq?|Ew&)A vfOpYyg{?WaLbt>|=Z8B!7-cL_t(|obB3eZo?o9fMGW6Cfxr>zRP}~S{5HxnoJmX@AIo= zYoInE!A&Uu00000003}r zrprOz=$CW}&=70TQ%Ap)@)bRRJH}NgY4l6FGob0hoj3ZqrGLBS2LJ#7VvP6A@jGEV zrW;$Tt`yPUp1d^^k%NZ!a5I&3FJ{MlXemNoY)jW}>v5~swq<-9mA_i6_IqLi>@w2j zz@EJNy4JcnsmH>#9yV|tu)QCbfN@GboTN^ALUg%5E&-oyJoAoAz&Klvn!gW?-z7K! zx+2@_VU`<80Dk}g0JtUQ_kgw|UlrZ1w3OLninhg899IWiHSQF)6CO*=S~cr};y(v> zv2;2;pwsU*Kl{5>-Pd-WJD-Mf_5c1v)&u(eZWEb+&N$O;jGnI#tDwi0o8qgX&iD6A z`P0Ap(X<~qq|A538PMkDm1}01U5fRyR~8?8z-hl&N+$Xfyf1zU`sYXh000000NCgk Xr}ijk!ZS_E00000NkvXXu0mjfYZ1_P delta 353 zcmV-n0iOQH1N;JzB!5FmL_t(|obB6N4#FT1g<&-Ag#9mR_Tod62DvnbHgZn=zbC6N zWTs4Es3`#e00000;9ope4`5zI?4NVa3rBK>Wdh33mmJgJmw-L`Ww^UvT6nG=z@#eB zc5!zV5oP^3zO>*v1F+2KHg~-JlkW_uV(l3Ejo&ILu?!V)kAICA0001hPt)67qm8j^ zE8;d@s|PTn-2=A=GA>6n>Ivu;lQzm}d_)rw$~jO^K=<5n)Q(mT^oZ*-Am?0$d%HAx z_U>F0(B+r|^%68PTA?~tApigXEYQAC_2ny8b4z};jl!)qVveLYVpV&m?e-irL6d)@ z^hdUERE@T_?^@QDj_SSW(XR)mItt}TdIn6eYm}-aVDF=yk5sqv$mT%(A-pB#eE4J= zr7APvLNrP*rg`UHMZE-JCDVT$0RR910Dz%4HmS%MuH`?600000NkvXXu0mjfO~Rm+ diff --git a/test-integration/snapshots/decodeMessage/nanox.18.png b/test-integration/snapshots/decodeMessage/nanox.18.png index 8ffe94b05a95808cf3742a29cdad5a587c437b6e..c843773c2ed183cf3d5c88991b1c616a122c8a16 100644 GIT binary patch delta 376 zcmV-;0f+wC0+R!fB!5~-L_t(|obA|K5`!QNK+&|*ow)xcxtD%8wM-Hy772{r^VRx5 zNaP_R00000000000001>i$~Ye*L4+hJcud}IBoL$zuwTF|uPUsL6sWPedn&6y8B%sj9 zy&n_?qMB>0^`o+SF+FDNcpE_leZmH-DqVI6npV1QmVghjcI& z{zydMF*Ycyf^h~LuosluytI3hV)n6*o^_Adr??fnCe>{Bqp5uG=PgICFBB4B{BG#E z8iN?WJip)^@b}*8c4KfqxL^Vr1?M1o2vXCgokiPK?ttEO5(WSO0000000000;5OcH W+X&*Q(%oeM0000&0BL^F2oSZ%cV z)A#2)G#yJ>4xD{q7QW|i^E-|eNoys3xxClZ_#jawT`vvP6{l9u_A!ti^Wq26I_4 OkbtMFpUXO@geCyjQ1pdaH=k}_s9KZuSjRf>@t)p{tqSv4!dCS*9CO=w z+ir*0Lgh94FV1(Ezf#%Z(36~Wkq3^CuOt?2Gv<0Ap8qS#ba!$Jqu%n%B}%-#solmo zmafa&Qxog0yw~jdZytU-PUH5TS4Ba!sylnx&obWT%Yt|lO4dK)-ji@U+3MwVCy=Z8B!7-cL_t(|obB3eZo?o9fMGW6Cfxr>zRP}~S{5HxnoJmX@AIo= zYoInE!A&Uu00000003}r zrprOz=$CW}&=70TQ%Ap)@)bRRJH}NgY4l6FGob0hoj3ZqrGLBS2LJ#7VvP6A@jGEV zrW;$Tt`yPUp1d^^k%NZ!a5I&3FJ{MlXemNoY)jW}>v5~swq<-9mA_i6_IqLi>@w2j zz@EJNy4JcnsmH>#9yV|tu)QCbfN@GboTN^ALUg%5E&-oyJoAoAz&Klvn!gW?-z7K! zx+2@_VU`<80Dk}g0JtUQ_kgw|UlrZ1w3OLninhg899IWiHSQF)6CO*=S~cr};y(v> zv2;2;pwsU*Kl{5>-Pd-WJD-Mf_5c1v)&u(eZWEb+&N$O;jGnI#tDwi0o8qgX&iD6A z`P0Ap(X<~qq|A538PMkDm1}01U5fRyR~8?8z-hl&N+$Xfyf1zU`sYXh000000NCgk Xr}ijk!ZS_E00000NkvXXu0mjfFlx|K diff --git a/test-integration/snapshots/decodeMessage/nanox.20.png b/test-integration/snapshots/decodeMessage/nanox.20.png index c843773c2ed183cf3d5c88991b1c616a122c8a16..eb63da2dc63bbf2c9c98562213a0b1b895d32acb 100644 GIT binary patch delta 700 zcmV;t0z>_i1JebNBYy&#Nkl$=W`)iP5SVu+;;)fZ`6Y^%Z4=?VO>gArLslvlSp% zbyyQS`=yrK*~ESl&RP4(I+a!Zi8U+7w7_xfD?kQ~VoL0;j_}u}og%M6n$Fci5OfzNEqB()zx^!tIo5NV!ww;Y5PKYVtruau3Syzp zVz~;^)XLD3y@H~v)X629CT-%^W{8$ba|XnG7urszR@1=V635ppbT_f%rf_mw4vBF& z%YV|Wv!ZX+-DS-g?L5G|`8!m=@;?*_i-UpYIYCek6@NyY(MC4gI=Ehns3#lH_BYQg zyY?5b?*Uj>XwI%9fb&Idk_6L?bQ<7{HpgrpJHL7ke~!T!`@ARD4?)*a3}UZPL(ib? zOI-N7W6>L+Uf>B!-xHtGPZ`f;aUjX9;G=N!EPOqg#X*V?X7x@GVZ{E=Yraox?yb5$ z+{diUIe(H0Jntl*5=u=t)B|u^dliShI(j$sid!Lvy*esIm`jNtfZHToE0IM=S2yh{ z&tTj$7i$S2gb+f=1!%W!HZ3ezbKjTz^)q4j#lG7{4DWYFbV>?-JP+7p;bMXNh+lK@9Iz(s?KR&{wB_Oo2p=J@zHt(6N|ICJC}`ui iR~R9L5JCtc27Cjnxz4h(bSSg{00009Bf-t*P^ zKuF{vA^-pY0000000000po>S>(${qrk!4x--|Fx7yL@B)sYA7DEaWVG6Cg>v(qt14Y~2%1*9ZkB)#v3Tkgn{yt{t)3BK!h!Kd zi2g`K-!V2Qta5?|8?YCY+q|@UlVbLULvrKe%858U^PddI(a}rkzFGRqlY^bP@&t00000000000N^&> XaN7vtsM6hK00000NkvXXu0mjf=L53| diff --git a/test-integration/snapshots/decodeMessage/nanox.21.png b/test-integration/snapshots/decodeMessage/nanox.21.png index 89232403b5576341c8ecb578f16ff08caa79e159..5d91b1e427debb37426419c7ce36fcdc8c32d004 100644 GIT binary patch delta 512 zcmcb~G>c_|O8rAm7srr_Id5miPCBf>(eU=%y(7QnPwsx>oF=Q?Kf^U1Ga1?I+G0X)&RlpZtjF+}#p1P9`?j2XIOT27 zvv(ir+5hq?E)_{W^X*jn*`0SLwVsY^>$#$w8+vGJz9auqm+boK$urZlSYsZavHx5= zug6j&l*49YhTln}eN%OBZ(lY!XusthyQpQn$HE=NmG2y!lN#ESV|zX@b?M9{KhN0C zXgIU#>MoalNi(YDLti9{EZF>If*4_>Jg~<*lo1-t37rt6hrMuDU@V3<3cgh$T z9u(jF^X+xY_Hg$shTk7=o2tCGy1$<_Gxfx(2`jJKop$T@IhpEodGX3m6?&pshqhVn zzP{|xFC7G`PuMaAVm5ZOF=07l>#!XWldwhwvFDfx2ib#{=Pr>mdKI;Vst0EWc* A*Z=?k delta 318 zcmbQma+7I-O1*-oi(^Q|oVPav`I;33Tmx^HsK2ZC+&sN*f&i1#GLHl9?|)`Yxm9?m z!^4)30Sx|hUw_5&Yi8sfyYt0~YULhc3U7Z+Ns|1+B~Weu_T6bW&i7Y2OHNrut-BvO zGqUP`=6kOIS;mNEWiz$o{Q1pdaH=k}_s9KZuSjRf>@t)p{tqSv4!dCS*9CO=w z+ir*0Lgh94FV1(Ezf#%Z(36~Wkq3^CuOt?2Gv<0Ap8qS#ba!$Jqu%n%B}%-#solmo zmafa&Qxog0yw~jdZytU-PUH5TS4Ba!sylnx&obWT%Yt|lO4dK)-ji@U+3MwVCy&iSfb zDu{?Fw-f*X004m7`BLLrs~m3IcB3;LcHfjsQs^oyx3ZRRSNf{B=h?RH<2?V#D9K~t z=9*1IsoWCUpX~fL^$vX-Yu78QoRJ5@TB~xb6`xqL_hwIgCE1@-B`83y#|`ml+?Uj%B}Oxo#6EQEPswb+kt~^f zk;*Ffl~B<-!hdo7op8G=?+OD$GRKdhRajOGlDl%lB%jOK5(Foi-+=2r4gmn*EmXnN zzLe7YYCY-X#3%7dQq4Ho-g^11`*QazsSU8$o`h;Ys81N%p$vMW?tZIhcan@+%TT;V zcfz6JJZ@*rO6DG7D-*(eEjnW*V=-B{#{Lh8Qzm$E)PJq(Sm=PeI=2!8jNJiNnCX*r zr@EO{tx(%*D*kV~LV!sLAe@kDD>e2^I`<=;4xFj-2+CGvZzCZ0x@%0#YgImoK z+w!zlx`DH6x#|+mbLLP#em6V?-Oz`bFF_JIqW}N^0000000000000000000000000 c@Q?Wg^b>^|8og+jumAu607*qoM6N<$f{Hf+djJ3c delta 700 zcmV;t0z>_>1k(kOBYy&#Nkl$=W`)iP5SVu+;;)fZ`6Y^%Z4=?VO>gArLslvlSp% zbyyQS`=yrK*~ESl&RP4(I+a!Zi8U+7w7_xfD?kQ~VoL0;j_}u}og%M6n$Fci5OfzNEqB()zx^!tIo5NV!ww;Y5PKYVtruau3Syzp zVz~;^)XLD3y@H~v)X629CT-%^W{8$ba|XnG7urszR@1=V635ppbT_f%rf_mw4vBF& z%YV|Wv!ZX+-DS-g?L5G|`8!m=@;?*_i-UpYIYCek6@NyY(MC4gI=Ehns3#lH_BYQg zyY?5b?*Uj>XwI%9fb&Idk_6L?bQ<7{HpgrpJHL7ke~!T!`@ARD4?)*a3}UZPL(ib? zOI-N7W6>L+Uf>B!-xHtGPZ`f;aUjX9;G=N!EPOqg#X*V?X7x@GVZ{E=Yraox?yb5$ z+{diUIe(H0Jntl*5=u=t)B|u^dliShI(j$sid!Lvy*esIm`jNtfZHToE0IM=S2yh{ z&tTj$7i$S2gb+f=1!%W!HZ3ezbKjTz^)q4j#lG7{4DWYFbV>?-JP+7p;bMXNh+lK@9Iz(s?KR&{wB_Oo2p=J@zHt(6N|ICJC}`ui iR~R9L5JCtc27Cjnxz4h(bSSg{0000ix1fv9yB!B8jL_t(|ob8!Wa>O7AKy9Zt@%~53UHXw}h5gRmvDCbQPAbvYgM>gH7U|r`G!GY%ZmICH3U7 za5K&(qf)N5+Ej8++ocxh+gQ8ySmlg75L!oCk%=W2%@d%gKYtW2)@~_KYr7u0HpOOS z)T9mS73)YDtUS_@mb1k>k?t97o&XiEAbhTxtKSXZnP16;TAHz`Zc>jFkg#iR>`cGFI>a_2gHdJyto4kjd2svt$zVA!*_rcX1XQ&u&Nbmdu>Go zT@3?Pwj$1(VCP%(eU=%y(7QnPwsx>oF=Q?Kf^U1Ga1?I+G0X)&RlpZtjF+}#p1P9`?j2XIOT27 zvv(ir+5hq?E)_{W^X*jn*`0SLwVsY^>$#$w8+vGJz9auqm+boK$urZlSYsZavHx5= zug6j&l*49YhTln}eN%OBZ(lY!XusthyQpQn$HE=NmG2y!lN#ESV|zX@b?M9{KhN0C zXgIU#>MoalNi(YDLti9{EZF>If*4_>Jg~<*lo1-t37rt6hrMuDU@V3<3cgh$T z9u(jF^X+xY_Hg$shTk7=o2tCGy1$<_Gxfx(2`jJKop$T@IhpEodGX3m6?&pshqhVn zzP{|xFC7G`PuMaAVm5ZOF=07l>#!XWldwhwvFDfx2ib#{=Pr>mdKI;Vst03O2m AqyPW_ diff --git a/test-integration/snapshots/decodeMessage/nanox.24.png b/test-integration/snapshots/decodeMessage/nanox.24.png index dbe6f3f714243705d4dc36ee44c5a707c83b1c64..94384bb38c0ef6a19e2e3cd17d8b8d8290a98075 100644 GIT binary patch delta 331 zcmV-R0kr<{90000{+_V>PUCz0Tw{25g$uC?cpbmY_V;cM=phUk8cXQH(yY>PuIt1EX z+`Y;<*Vmu^OBcMJ0H`_J<{r0y@_PafvGy4Hoxi7`#AB!tYkw4C0000$Y<{cR73|TU zmIFJRAdK%L3#r2Aizdzp`B8Ul!D?c-+7`Knwh zh=?h-6aWAK0D#;1QsY{y9B$ioqca_L-;_&I=qfC?vX*aG`l`6+*|zQDJpaik$z$Q> znoUEg+!ETK?EE(M4t*PI*DI@>kq5$Bt8%OrpIEZvp8&=7M}P5R?G^!7!Mfu5)O9AK zCXK3B>~hLr<&jGWR@X8uCH@IeF>*r|yk-3xnj|0MmS$|rP3qA}-2HQBu!l@a{0(Tm zqqeu@VzOd9LTfoEv6(LSW>0)2*`HG-C_t{q4e@B)m(-#qMl+MdK6L9($!x%pESY?f z$}0DjP|-TVaew`taJwt-3Ijtj$B&^^SXK;@yK=)MpUc@21Sgr_fa^XE0RZ4FRKe4} zl+ycZJ?Z4cC-F&A%{bZKdikyUa`!B$4Y1grgla#iPZ-;w40@vOeyeA9l8jo*P`pNW z!lB_jZfDI(<{n}z6T*BgI%6ecF63J) zx|vn2P}^%OBIs(^Vp%IJrX#=1@O=H#`O1(1)2XK@vKn00000000000000000000000000002+ bkNE}kg%TPXy=a%P00000NkvXXu0mjfsZj!o diff --git a/test-integration/snapshots/decodeMessage/nanox.25.png b/test-integration/snapshots/decodeMessage/nanox.25.png index a27c581ca7cad511e355674cfd836ebc4f9d444f..e23183a4c0d8ef4cc3a691d8665c4b9c37e9bd90 100644 GIT binary patch delta 358 zcmV-s0h#`z1c3vPB!5UrL_t(|obB3C4uc>JfMK@mCfxr>y~`d*2oY%zBeeK`Pik~v ziww{Z00000008h7pVbu@Cn9+}#<;L1ceqSI8TyjPH26zEj(!>L(}OO2S65)rA<*vP z?v;p?{g1xug4ZVi%e0!g$L1gWJ^_bVdklTzZxj?5h8nTQM1Kqb004LaDdZ!a7d}*< zCw{iyZ)RcXZpS7~yH2&HCLlE8SierGXSpJhH!l5}{sKp@#%}c6K0TrCsXEVBPSy`j z?v!Rf0iBj~%}WY3nt)JsAk#{mZ1($r<)aR3ral2N#&Q6vx45xXr6Th7VYfb~b>TqK z0002!XZov%!(U+WbZVw7ABB6%f6$hF>fP45knyRX*DvF0bu)L-@a?VzCEL$VttX)D z&9}_KK3$Mg`y{~lpKXivE~qoCm)2PU00000006wv9}2zIaTFgmzyJUM07*qoM6N<$ Ef@2h>@&Et; delta 522 zcmV+l0`>iY1EU0xB!B8jL_t(|ob8!Wa>O7AKy9Zt@%~53UHXw}h5gRmvDCbQPAbvYgM>gH7U|r`G!GY%ZmICH3U7 za5K&(qf)N5+Ej8++ocxh+gQ8ySmlg75L!oCk%=W2%@d%gKYtW2)@~_KYr7u0HpOOS z)T9mS73)YDtUS_@mb1k>k?t97o&XiEAbhTxtKSXZnP16;TAHz`Zc>jFkg#iR>`cGFI>a_2gHdJyto4kjd2svt$zVA!*_rcX1XQ&u&Nbmdu>Go zT@3?Pwj$1(VCP%<yo~E0F z6vm*K5&!@I0002~#lyM+=ZQ!;&N&;_hVYa7(&!10A@zrJYx4xai4%D))7O$i8l*MOhcWx$A3Z$0000mux=gDte%va zyNE2F*RL|>WrGxZy1x7K zZUY}J2mk;8=V!S7S41~~I?Afj1rvbX#GR~u)0=)xtTNZQw!r&DG00000007|Q4buSUYD%+U5&!@I M07*qoM6N<$f<{90000{+_V>PUCz0Tw{25g$uC?cpbmY_V;cM=phUk8cXQH(yY>PuIt1EX z+`Y;<*Vmu^OBcMJ0H`_J<{r0y@_PafvGy4Hoxi7`#AB!tYkw4C0000$Y<{cR73|TU zmIFJJfMK@mCfxr>y~`d*2oY%zBeeK`Pik~v ziww{Z00000008h7pVbu@Cn9+}#<;L1ceqSI8TyjPH26zEj(!>L(}OO2S65)rA<*vP z?v;p?{g1xug4ZVi%e0!g$L1gWJ^_bVdklTzZxj?5h8nTQM1Kqb004LaDdZ!a7d}*< zCw{iyZ)RcXZpS7~yH2&HCLlE8SierGXSpJhH!l5}{sKp@#%}c6K0TrCsXEVBPSy`j z?v!Rf0iBj~%}WY3nt)JsAk#{mZ1($r<)aR3ral2N#&Q6vx45xXr6Th7VYfb~b>TqK z0002!XZov%!(U+WbZVw7ABB6%f6$hF>fP45knyRX*DvF0bu)L-@a?VzCEL$VttX)D z&9}_KK3$Mg`y{~lpKXivE~qoCm)2PU00000006wv9}2zIaTFgmzyJUM07*qoM6N<$ Ef|k^$7XSbN diff --git a/test-integration/snapshots/decodeMessage/nanox.28.png b/test-integration/snapshots/decodeMessage/nanox.28.png index 56eff5485e79dd0f3771be67cb4e65b087e49838..dc6bcf5b9c3b7de2cbb24023166a8efa80a7bec9 100644 GIT binary patch delta 282 zcmV+#0p)P_FbGGjOqzw!B=3C$ zTZABHWG&-t8vpM89sWCHCYIB@=KA{ZYj<)Js5*{xRHtHkR;}-GMs| zfi4&Ksv_bz|D4~JQ1uBQ&1{%g9R6F~Ct!$m#nA8S?SeMj(0@g|$3YAL01~Wt4j9f^ zeUBdzH}3cQH)lV^)bCSnZ<&>VP8!#*SbS%9;D3e}FZ=EOS#)$4OTaK4wbpK*m)2CZ z8u~UQAejUtTW$^5r}d$wU(fy$ak31kS_1$qNHvses-a6$4NayR%9BYzG6_hw+!~-7 g3IG5A0KCKxJrh%<{wUwexBvhE07*qoM6N<$g6d;`V*mgE delta 367 zcmV-#0g(Q*0*M2VBYy!Vh7bmoZIQO~|DL9s zgA~S~m=XX000000{>8((0_TZHInFs7*5rzi4N!-^7O@%PH9(1e9q#UzAv~=sa8eWK zaB+`HMC$QJ{}@8lCje$f-8^FVPjR1sCe{%{zlk>sN=!qYxPQk&3;+NCFtBbN(5#-6 znY)NAp4YE0(acQFV0~V}Fq84JD!5SgQtFP`T=sPtJi5NSjWb!FJ5Z8n<#;<#PL0l< zC}rmUKV|;}bnOS_Wf56C964=(oO9C#%LatSBah$xfUOOzYw>f&Pe2`IrRz;zHoCt1 z^KJtlEeHSr0BGm9{#QgdfjY{n?z2NoD6diyKKqZ#s?GC)&hJY2sG!~4X)dT>7_oF{ z2%5QxL-!eiy8Q1o-lqY&+cM6hp8~xDbXyj4|H9xE0ssI20002s;|JhGDksCf@%@y~}=>5Qb5q|>!0059uY84ek%M53z zmLi7n@@_znYWby_5^oo0beC& z>}ft`Z#*9W006_9s@{2wiI}r+6EQQZzB_MzhMvw9J}H#8eOvFW{zcYdPL^ssD)B1AdX1up%a)8->!_$PMM)m=Z8BYy#oNkly0cklD7 zWow`|A;C>4000000001RgNTSo^eEo&9X)`*lq>Yj=OjR*Uu%sW$y<^oV70;|jebd& zfTqhq-sqQf3D6L0&{Idhl=2llfIG%jC~5Rdx-+2Z!kstzxqqd*7 zJEj|3s;(5#-k!WQ6On_4_i!_nbT4Mdd}t{`UTjO(ZtHQY*S2MR8tU7~N`C+V006ip=J$ZMBVQHWuC$cdV~V!LRvcFcTs7_#wi6yp&000LjJ)qO?Hb48jRNdEho;#n0a`pfIMAifP{caPPfX+D6ZH%6;538WZmYd?Mq0aaB zOZn5k`q8u>Ii$>Y#2L`$=9Oz^nO%zYvsV@$d%$VGSSL#Q6TB~e3Hs+q00000007wN Y7pL|pXTmd0$^ZZW07*qoM6N<$g7s<8F8}}l delta 282 zcmV+#0p)P_FbGGjOqzw!B=3C$ zTZABHWG&-t8vpM89sWCHCYIB@=KA{ZYj<)Js5*{xRHtHkR;}-GMs| zfi4&Ksv_bz|D4~JQ1uBQ&1{%g9R6F~Ct!$m#nA8S?SeMj(0@g|$3YAL01~Wt4j9f^ zeUBdzH}3cQH)lV^)bCSnZ<&>VP8!#*SbS%9;D3e}FZ=EOS#)$4OTaK4wbpK*m)2CZ z8u~UQAejUtTW$^5r}d$wU(fy$ak31kS_1$qNHvses-a6$4NayR%9BYzG6_hw+!~-7 g3IG5A0KCKxJrh%<{wUwexBvhE07*qoM6N<$f-b&)p#T5? diff --git a/test-integration/snapshots/decodeMessage/nanox.31.png b/test-integration/snapshots/decodeMessage/nanox.31.png index 8a50d7e0aefb037bc7c64b380116e1dd54e9430f..c843773c2ed183cf3d5c88991b1c616a122c8a16 100644 GIT binary patch delta 376 zcmV-;0f+wE0+R!fB!5~-L_t(|obA|K5`!QNK+&|*ow)xcxtD%8wM-Hy772{r^VRx5 zNaP_R00000000000001>i$~Ye*L4+hJcud}IBoL$zuwTF|uPUsL6sWPedn&6y8B%sj9 zy&n_?qMB>0^`o+SF+FDNcpE_leZmH-DqVI6npV1QmVghjcI& z{zydMF*Ycyf^h~LuosluytI3hV)n6*o^_Adr??fnCe>{Bqp5uG=PgICFBB4B{BG#E z8iN?WJip)^@b}*8c4KfqxL^Vr1?M1o2vXCgokiPK?ttEO5(WSO0000000000;5OcH W+X&*Q(%oeM0000JhGDksCf@%@y~}=>5Qb5q|>!0059uY84ek%M53z zmLi7n@@_znYWby_5^oo0beC& z>}ft`Z#*9W006_9s@{2wiI}r+6EQQZzB_MzhMvw9J}H#8eOvFW{zcYdPL^ssD)B1AdX1up%a)8->!_$PMM)mQ1pdaH=k}_s9KZuSjRf>@t)p{tqSv4!dCS*9CO=w z+ir*0Lgh94FV1(Ezf#%Z(36~Wkq3^CuOt?2Gv<0Ap8qS#ba!$Jqu%n%B}%-#solmo zmafa&Qxog0yw~jdZytU-PUH5TS4Ba!sylnx&obWT%Yt|lO4dK)-ji@U+3MwVCy=Z8B!7-cL_t(|obB3eZo?o9fMGW6Cfxr>zRP}~S{5HxnoJmX@AIo= zYoInE!A&Uu00000003}r zrprOz=$CW}&=70TQ%Ap)@)bRRJH}NgY4l6FGob0hoj3ZqrGLBS2LJ#7VvP6A@jGEV zrW;$Tt`yPUp1d^^k%NZ!a5I&3FJ{MlXemNoY)jW}>v5~swq<-9mA_i6_IqLi>@w2j zz@EJNy4JcnsmH>#9yV|tu)QCbfN@GboTN^ALUg%5E&-oyJoAoAz&Klvn!gW?-z7K! zx+2@_VU`<80Dk}g0JtUQ_kgw|UlrZ1w3OLninhg899IWiHSQF)6CO*=S~cr};y(v> zv2;2;pwsU*Kl{5>-Pd-WJD-Mf_5c1v)&u(eZWEb+&N$O;jGnI#tDwi0o8qgX&iD6A z`P0Ap(X<~qq|A538PMkDm1}01U5fRyR~8?8z-hl&N+$Xfyf1zU`sYXh000000NCgk Xr}ijk!ZS_E00000NkvXXu0mjfFlx|K diff --git a/test-integration/snapshots/decodeMessage/nanox.33.png b/test-integration/snapshots/decodeMessage/nanox.33.png index c843773c2ed183cf3d5c88991b1c616a122c8a16..eb63da2dc63bbf2c9c98562213a0b1b895d32acb 100644 GIT binary patch delta 700 zcmV;t0z>_i1JebNBYy&#Nkl$=W`)iP5SVu+;;)fZ`6Y^%Z4=?VO>gArLslvlSp% zbyyQS`=yrK*~ESl&RP4(I+a!Zi8U+7w7_xfD?kQ~VoL0;j_}u}og%M6n$Fci5OfzNEqB()zx^!tIo5NV!ww;Y5PKYVtruau3Syzp zVz~;^)XLD3y@H~v)X629CT-%^W{8$ba|XnG7urszR@1=V635ppbT_f%rf_mw4vBF& z%YV|Wv!ZX+-DS-g?L5G|`8!m=@;?*_i-UpYIYCek6@NyY(MC4gI=Ehns3#lH_BYQg zyY?5b?*Uj>XwI%9fb&Idk_6L?bQ<7{HpgrpJHL7ke~!T!`@ARD4?)*a3}UZPL(ib? zOI-N7W6>L+Uf>B!-xHtGPZ`f;aUjX9;G=N!EPOqg#X*V?X7x@GVZ{E=Yraox?yb5$ z+{diUIe(H0Jntl*5=u=t)B|u^dliShI(j$sid!Lvy*esIm`jNtfZHToE0IM=S2yh{ z&tTj$7i$S2gb+f=1!%W!HZ3ezbKjTz^)q4j#lG7{4DWYFbV>?-JP+7p;bMXNh+lK@9Iz(s?KR&{wB_Oo2p=J@zHt(6N|ICJC}`ui iR~R9L5JCtc27Cjnxz4h(bSSg{00009Bf-t*P^ zKuF{vA^-pY0000000000po>S>(${qrk!4x--|Fx7yL@B)sYA7DEaWVG6Cg>v(qt14Y~2%1*9ZkB)#v3Tkgn{yt{t)3BK!h!Kd zi2g`K-!V2Qta5?|8?YCY+q|@UlVbLULvrKe%858U^PddI(a}rkzFGRqlY^bP@&t00000000000N^&> XaN7vtsM6hK00000NkvXXu0mjf=L53| diff --git a/test-integration/snapshots/decodeMessage/nanox.34.png b/test-integration/snapshots/decodeMessage/nanox.34.png index 89232403b5576341c8ecb578f16ff08caa79e159..5d91b1e427debb37426419c7ce36fcdc8c32d004 100644 GIT binary patch delta 512 zcmcb~G>c_|O8rAm7srr_Id5miPCBf>(eU=%y(7QnPwsx>oF=Q?Kf^U1Ga1?I+G0X)&RlpZtjF+}#p1P9`?j2XIOT27 zvv(ir+5hq?E)_{W^X*jn*`0SLwVsY^>$#$w8+vGJz9auqm+boK$urZlSYsZavHx5= zug6j&l*49YhTln}eN%OBZ(lY!XusthyQpQn$HE=NmG2y!lN#ESV|zX@b?M9{KhN0C zXgIU#>MoalNi(YDLti9{EZF>If*4_>Jg~<*lo1-t37rt6hrMuDU@V3<3cgh$T z9u(jF^X+xY_Hg$shTk7=o2tCGy1$<_Gxfx(2`jJKop$T@IhpEodGX3m6?&pshqhVn zzP{|xFC7G`PuMaAVm5ZOF=07l>#!XWldwhwvFDfx2ib#{=Pr>mdKI;Vst0EWc* A*Z=?k delta 318 zcmbQma+7I-O1*-oi(^Q|oVPav`I;33Tmx^HsK2ZC+&sN*f&i1#GLHl9?|)`Yxm9?m z!^4)30Sx|hUw_5&Yi8sfyYt0~YULhc3U7Z+Ns|1+B~Weu_T6bW&i7Y2OHNrut-BvO zGqUP`=6kOIS;mNEWiz$o{Q1pdaH=k}_s9KZuSjRf>@t)p{tqSv4!dCS*9CO=w z+ir*0Lgh94FV1(Ezf#%Z(36~Wkq3^CuOt?2Gv<0Ap8qS#ba!$Jqu%n%B}%-#solmo zmafa&Qxog0yw~jdZytU-PUH5TS4Ba!sylnx&obWT%Yt|lO4dK)-ji@U+3MwVCyci~^nVq=xc*4mSgS=qZ6HHY zW2y$@X+}F`x5&pyjg^N!g7I{vuBk;|0c?!aAv5lh@ijT|4{@ob-ItowtxnYWQ$5H< zMlJdTlT{&s|2wO5TsM>NNuOW7c-7&vETfs^+#T7tkJ{Sz?na0mbZ zU_UoucPuH@&Z~n#b{vL7sEBb?*gAZ_Jv_V;E;W=Q)d(g$u)~YgCJi-Iop1J8b>eAO z>d1aZ)nU_RKdPoCEqx#CUOJ5aS~Sv&r^lwkRapT>B7Zw?>d6L53Kjok7?a|hOOEQTR zJ7q7%_Z+gp+)dce$fDl9H|zy!=w^CK5Cxhj004X`D_>wH^|k#SZ0Icrd+#_yZ$XCk znac7=>3`T_-_H7F?LA6oHC-mTok&%HY}H3SqUpF=xxlTTu!ERCnk*be_4{^44`P`n z{cq)(opeqNbQ?1P8C8OAinXCLDJj z?)Hn+&`EhZ=$8LVawFjzX2PS#M7SBx>nxMK~x=DEn% z{28ax_&@7qPD&}pC|Tyuntu`^k@Hj_PHm^otB73q7FwmFRexBs9P1z1XSWCZ{HMIi zvouC2l%fbm%A#&rxt%&M>|4{x+CH|4(W)7+)dRYK;tsI&6=j6&oS~>85IDuN6(Cr3 zSQ9(@rIy>-#C{UaS^LR4l~w(TH7m!oz;Wy=Kn9IsO6;zV@YklDBCkQ3&fwv@4lfp? zd7y1`Il-BgYkzmmZnBM-weai^bQdNqch<rGyeHQWLDx|XVy{p`&!Fu~ zT==_V(Ho#%;0a6L6Q9yg8P8>LAjz%Zqj2*qd_9@PL5dJ&^-d6B#Qx7~zE5oKt-3zk z$E?gbl79+3?q}57=bkVuAaJUvu#suqN&8-!x9N<>CqmA0e;4aT0Dyl2hU+Xydn6 h7$JlZLI@!Sd;_bw&a$#}D6{|o002ovPDHLkV1lJ!RTTgL diff --git a/test-integration/snapshots/decodeMessage/nanox.36.png b/test-integration/snapshots/decodeMessage/nanox.36.png index 5d91b1e427debb37426419c7ce36fcdc8c32d004..759abef534e02a7516521d7a59b2479838bb8cfd 100644 GIT binary patch delta 722 zcmV;@0xkWT1nC8kBYy(0NklnEE*7~@ZODTU& zyLMTKGmcM2Vq9zGQ%PKHhnZo|`&x{L8+*!)Lf#OqXY7&#b$W3orwU`P>-C_&H znCvh-W^D}Q7T%E3nR(iVXpJq>iWJwVx&lal8QmwEiT0=6x6dzUMVh4@syL~8op|P! zwtPw0>HuhWl0nu2&6$q1h77`IdOJ4z#3v<(u{Q-7w5=NK_mEuF8-r-?abm~d$v?$8 z0LPT^%$nA?H-B-FLOcIDW9TYBEi@`>=lF5S4T5unzn5p+{sID05Ex--0Hz)h0RRA` zU~9NN5~FZ1ybDL-alB$&D{`gXb<+lB;2i)C*CdE~K@KwFrRa)y;Gek%r z*X1Z&{}aFM`f%$1LZLqwjnv|)(Vw`w-v`(e$G9;Afq%h>6H&|oHr;ywFZ8G-d5Dri zxz<*iPA8WJky6CI6J*|{XG8RPL#{u#z6lq{JZdAbN9Ak4`&|w`=Yu z?C09jPPI=g25RWd45gqJD5C%X@O7+wfSFX+z0Y8yPeIsq2N`_|(o|3Kt!*rdl>By5 zFR}M1oqwL6=FM?pUvQbch?=9frAJn#))yJeEw=Ml9%h_4C9oyWTUE;V%0JRNZ> z{7dpi!Z%Fqgpt!N0001i7ayCy>nSK9!6)GbJWEfod;#|gmQz6rx|!#tAU}`zrOcZL zAbHpCJZu0)1WT}v%YTsYO$)$z{0>Kgh06=#B0W%iv`XKHCfB*mh07*qoM6N<$ Ef|XHF=Kufz delta 513 zcmaFKI*Vn3ay{ciPZ!6KiaBp*#!fn{z|rvb+`S{e)K*MZ_ZqJDy+xwn8o6?Rr|J_d^qK8 z(6e_R>e>JDDlQdCKJ)EV`q`a#Cbgc9YwNk9oEv&*YQ7`?QkVMd>B%$GvshyupRxa3 zJg>)6Bb38tV}{>JqkU6#Z*N~VIcUG-9lNMyyvM>F#Fg(HoRb>blVf{6Fm>t7B|p#D z&S*HZ>gq0+e&dvRDf%-7y7?bY+E{TiZuO_>TYrj%P5L&^?ARlgC%%iVgm!ON{(XPh zyi?OAFEhRsH(ho1_lsU?YpmhQMI+jq(s z7#hGc>qS>7{Va-O|}nt&nfwG>veXJoTsaw%Q~loCIGMI B`Ro7y diff --git a/test-integration/snapshots/decodeMessage/nanox.37.png b/test-integration/snapshots/decodeMessage/nanox.37.png index 7624fa47d7a429c94f95b90fe7b95949782b1d64..94384bb38c0ef6a19e2e3cd17d8b8d8290a98075 100644 GIT binary patch delta 332 zcmV-S0ki(}1?B>fBYy!cNklp{!16Uo&cyh+vXm(fAV_*4zcza`klY0pu}US5r1nGVgLXDKx}@i*%j>3 zpOynV$$n@r;MAeel|Q*OXXIEG%yqIUp^XaWAYS zKwjB{&`&^p=S=Ub(8qgY^R}G6$sadi004j}EIi}O|8I@VtiVFQv(s_vx10V)vk;r# z?=)C;DObXsXhk+-J@`3;<+KHpx}lN#oqh980C8`cmw>SS&b}E5Q0#Y(e@l6%oB;p; e00000u!1Lw>I6hFQD4UZ0000f)@oF;vBz#0@B3zfmBz=mWPkJ(z_|WM+E}YaKy4sH zQDdqG<7q}aWw*%3NsX0 z6YwO9Ctqk|mVf)q$S5sgyZ&~BUA0$@Mn^QqpG(;wtQa_FWr36TGFpPbApH|C?{EkJ z0AN2iVRtMk)y}JfL3SL5L#T*xRM5-v5ABGm{cJg~!y)FurzRGn}3S#{!R zR_e%pM%7`{Wk0H>CM|s*>|Q#I{#rEBi>Jq?!c|!TMt>qZZ|nanw@k`40Iba0U1?-Zi=-q8^$&$PK@A%Otn&BWin4za|`a z9`5#w)X+(JI_Q@FN^&FN8)nD%Qybj^007YW;8v6K7rh0YN#sd*4e!$|KY;C;j1%U&QBYy!%Nkl?Yj*NWIG*NC**W5F@nse@|+3 zV2cdU5C8xG0002+7N6A>7$+imJI1)MCU>|@KpFay$29m$K#qPH?$d)Vd{_(7 z;_j7*l>Lvs>w?!O0L!$RxyR-o{5}DPSbGe8;%^ib7={|L$A3f&0001Z0V(7oofke- zpC^8{-*0AN>2Aj+O}kFDrY0aX;#j{n*IVuuf}fl+de&^?x{M@S5DRs zPVSUuKLMSVbj?c&HJX4>bs*D9oNV^{faRkOYonEE*7~@ZODTU& zyLMTKGmcM2Vq9zGQ%PKHhnZo|`&x{L8+*!)Lf#OqXY7&#b$W3orwU`P>-C_&H znCvh-W^D}Q7T%E3nR(iVXpJq>iWJwVx&lal8QmwEiT0=6x6dzUMVh4@syL~8op|P! zwtPw0>HuhWl0nu2&6$q1h77`IdOJ4z#3v<(u{Q-7w5=NK_mEuF8-r-?abm~d$v?$8 z0LPT^%$nA?H-B-FLOcIDW9TYBEi@`>=lF5S4T5unzn5p+{sID05Ex--0Hz)h0RRA` zU~9NN5~FZ1ybDL-alB$&D{`gXb<+lB;2i)C*CdE~K@KwFrRa)y;Gek%r z*X1Z&{}aFM`f%$1LZLqwjnv|)(Vw`w-v`(e$G9;Afq%h>6H&|oHr;ywFZ8G-d5Dri zxz<*iPA8WJky6CI6J*|{XG8RPL#{u#z6lq{JZdAbN9Ak4`&|w`=Yu z?C09jPPI=g25RWd45gqJD5C%X@O7+wfSFX+z0Y8yPeIsq2N`_|(o|3Kt!*rdl>By5 zFR}M1oqwL6=FM?pUvQbch?=9frAJn#))yJeEw=Ml9%h_4C9oyWTUE;V%0JRNZ> z{7dpi!Z%Fqgpt!N0001i7ayCy>nSK9!6)GbJWEfod;#|gmQz6rx|!#tAU}`zrOcZL zAbHpCJZu0)1WT}v%YTsYO$)$z{0>Kgh06=#B0W%iv`XKHCfB*mh07*qoM6N<$ Ef=m8T%>V!Z diff --git a/test-integration/snapshots/decodeMessage/nanox.39.png b/test-integration/snapshots/decodeMessage/nanox.39.png index 94384bb38c0ef6a19e2e3cd17d8b8d8290a98075..56eff5485e79dd0f3771be67cb4e65b087e49838 100644 GIT binary patch delta 366 zcmV-!0g?XZ0*M2VB!5szL_t(|obB3C4#FS|fMGP=g!><yo~E0F z6vm*K5&!@I0002~#lyM+=ZQ!;&N&;_hVYa7(&!10A@zrJYx4xai4%D))7O$i8l*MOhcWx$A3Z$0000mux=gDte%va zyNE2F*RL|>WrGxZy1x7K zZUY}J2mk;8=V!S7S41~~I?Afj1rvbX#GR~u)0=)xtTNZQw!r&DG00000007|Q4buSUYD%+U5&!@I M07*qoM6N<$f<{90000{+_V>PUCz0Tw{25g$uC?cpbmY_V;cM=phUk8cXQH(yY>PuIt1EX z+`Y;<*Vmu^OBcMJ0H`_J<{r0y@_PafvGy4Hoxi7`#AB!tYkw4C0000$Y<{cR73|TU zmIFJJfMK@mCfxr>y~`d*2oY%zBeeK`Pik~v ziww{Z00000008h7pVbu@Cn9+}#<;L1ceqSI8TyjPH26zEj(!>L(}OO2S65)rA<*vP z?v;p?{g1xug4ZVi%e0!g$L1gWJ^_bVdklTzZxj?5h8nTQM1Kqb004LaDdZ!a7d}*< zCw{iyZ)RcXZpS7~yH2&HCLlE8SierGXSpJhH!l5}{sKp@#%}c6K0TrCsXEVBPSy`j z?v!Rf0iBj~%}WY3nt)JsAk#{mZ1($r<)aR3ral2N#&Q6vx45xXr6Th7VYfb~b>TqK z0002!XZov%!(U+WbZVw7ABB6%f6$hF>fP45knyRX*DvF0bu)L-@a?VzCEL$VttX)D z&9}_KK3$Mg`y{~lpKXivE~qoCm)2PU00000006wv9}2zIaTFgmzyJUM07*qoM6N<$ Ef|k^$7XSbN diff --git a/test-integration/snapshots/decodeMessage/nanox.41.png b/test-integration/snapshots/decodeMessage/nanox.41.png index 56eff5485e79dd0f3771be67cb4e65b087e49838..dc6bcf5b9c3b7de2cbb24023166a8efa80a7bec9 100644 GIT binary patch delta 282 zcmV+#0p)P_FbGGjOqzw!B=3C$ zTZABHWG&-t8vpM89sWCHCYIB@=KA{ZYj<)Js5*{xRHtHkR;}-GMs| zfi4&Ksv_bz|D4~JQ1uBQ&1{%g9R6F~Ct!$m#nA8S?SeMj(0@g|$3YAL01~Wt4j9f^ zeUBdzH}3cQH)lV^)bCSnZ<&>VP8!#*SbS%9;D3e}FZ=EOS#)$4OTaK4wbpK*m)2CZ z8u~UQAejUtTW$^5r}d$wU(fy$ak31kS_1$qNHvses-a6$4NayR%9BYzG6_hw+!~-7 g3IG5A0KCKxJrh%<{wUwexBvhE07*qoM6N<$g6d;`V*mgE delta 367 zcmV-#0g(Q*0*M2VBYy!Vh7bmoZIQO~|DL9s zgA~S~m=XX000000{>8((0_TZHInFs7*5rzi4N!-^7O@%PH9(1e9q#UzAv~=sa8eWK zaB+`HMC$QJ{}@8lCje$f-8^FVPjR1sCe{%{zlk>sN=!qYxPQk&3;+NCFtBbN(5#-6 znY)NAp4YE0(acQFV0~V}Fq84JD!5SgQtFP`T=sPtJi5NSjWb!FJ5Z8n<#;<#PL0l< zC}rmUKV|;}bnOS_Wf56C964=(oO9C#%LatSBah$xfUOOzYw>f&Pe2`IrRz;zHoCt1 z^KJtlEeHSr0BGm9{#QgdfjY{n?z2NoD6diyKKqZ#s?GC)&hJY2sG!~4X)dT>7_oF{ z2%5QxL-!eiy8Q1o-lqY&+cM6hp8~xDbXyj4|H9xE0ssI20002s;|=Z8B!7-cL_t(|obB3eZo?o9fMGW6Cfxr>zRP}~S{5HxnoJmX@AIo= zYoInE!A&Uu00000003}r zrprOz=$CW}&=70TQ%Ap)@)bRRJH}NgY4l6FGob0hoj3ZqrGLBS2LJ#7VvP6A@jGEV zrW;$Tt`yPUp1d^^k%NZ!a5I&3FJ{MlXemNoY)jW}>v5~swq<-9mA_i6_IqLi>@w2j zz@EJNy4JcnsmH>#9yV|tu)QCbfN@GboTN^ALUg%5E&-oyJoAoAz&Klvn!gW?-z7K! zx+2@_VU`<80Dk}g0JtUQ_kgw|UlrZ1w3OLninhg899IWiHSQF)6CO*=S~cr};y(v> zv2;2;pwsU*Kl{5>-Pd-WJD-Mf_5c1v)&u(eZWEb+&N$O;jGnI#tDwi0o8qgX&iD6A z`P0Ap(X<~qq|A538PMkDm1}01U5fRyR~8?8z-hl&N+$Xfyf1zU`sYXh000000NCgk Xr}ijk!ZS_E00000NkvXXu0mjf7e~-U delta 303 zcmV+~0nq-(1IhxBB!3Y}L_t(|obB3M4#F@DL{Wp-iTA%G?}d*_QIv$DmP#I%d%ju< zQsl&aOfdrh00000z`uB858%9rXxr|dIFetKoPfUcy^7ONZvtBN`*JToEa90wfRlzo zm#ceK5z(K2_IFFD+5t%OX_;4C{#LgGhFVuF{ifbskZ~I-;(s0wVgLXDKmyU{fV%PW z9n259`$9Bf-t*P^ zKuF{vA^-pY0000000000po>S>(${qrk!4x--|Fx7yL@B)sYA7DEaWVG6Cg>v(qt14Y~2%1*9ZkB)#v3Tkgn{yt{t)3BK!h!Kd zi2g`K-!V2Qta5?|8?YCY+q|@UlVbLULvrKe%858U^PddI(a}rkzFGRqlY^bP@&t00000000000N^&> XaN7vtsM6hK00000NkvXXu0mjfwDhv) delta 282 zcmV+#0p)P_FbGGjOqzw!B=3C$ zTZABHWG&-t8vpM89sWCHCYIB@=KA{ZYj<)Js5*{xRHtHkR;}-GMs| zfi4&Ksv_bz|D4~JQ1uBQ&1{%g9R6F~Ct!$m#nA8S?SeMj(0@g|$3YAL01~Wt4j9f^ zeUBdzH}3cQH)lV^)bCSnZ<&>VP8!#*SbS%9;D3e}FZ=EOS#)$4OTaK4wbpK*m)2CZ z8u~UQAejUtTW$^5r}d$wU(fy$ak31kS_1$qNHvses-a6$4NayR%9BYzG6_hw+!~-7 g3IG5A0KCKxJrh%<{wUwexBvhE07*qoM6N<$g7s&AZ2$lO diff --git a/test-integration/snapshots/decodeMessage/nanox.44.png b/test-integration/snapshots/decodeMessage/nanox.44.png index d9bc6a61c548440d73bb596a25e427a8c717f2ec..89232403b5576341c8ecb578f16ff08caa79e159 100644 GIT binary patch delta 318 zcmcc5e3NN{O1*-oi(^Q|oVPav`I;33Tmx^HsK2ZC+&sN*f&i1#GLHl9?|)`Yxm9?m z!^4)30Sx|hUw_5&Yi8sfyYt0~YULhc3U7Z+Ns|1+B~Weu_T6bW&i7Y2OHNrut-BvO zGqUP`=6kOIS;mNEWiz$o{Q1pdaH=k}_s9KZuSjRf>@t)p{tqSv4!dCS*9CO=w z+ir*0Lgh94FV1(Ezf#%Z(36~Wkq3^CuOt?2Gv<0Ap8qS#ba!$Jqu%n%B}%-#solmo zmafa&Qxog0yw~jdZytU-PUH5TS4Ba!sylnx&obWT%Yt|lO4dK)-ji@U+3MwVCy8}fKv8DYn{fXlahF*jMHU8P7*b68->Rj7 zP?HdFLI3~&0B}hurIhsNiRzyH?(V?1d+qMPFnL|a7(0csTo$_GeE{?{B7>e%l9AO> zjxjo)h`bL#j;Rb{C!qN!w-oUX6&)fueES*HIY?ab?T}!Hew5x_SO8|Ml&0+A_Z1_4YeGk-Y9jB(c!*M z(LY9?LN+c7^T9HAWXYRa{#Q^#J9+iUF1EhvlNBYMU-kSpQLA6QUwB((^mt2fv^S+9 zs$J2yjEsDvIC;1hw{wzKnzNr!^xw`ZY{WKW06sQj05*H}AslKi0OZ%|F~RVf v^UdvioljkKo`L8C00000000000Kgi5QwN$w0^94n00000NkvXXu0mjfXwcbJ diff --git a/test-integration/snapshots/decodeMessage/nanox.45.png b/test-integration/snapshots/decodeMessage/nanox.45.png index ae332bd67a6c7dc0180c43bc7b279e40916f96eb..a64aac087f0feb195d39ed1955fb16ec7ae0ba43 100644 GIT binary patch delta 567 zcmV-70?7TS1kVJJBYy%GNklctg`YUnZJ$di=Xuse*FM*h z+N3L~m6cX)9cqWR(qro^wB_#nMi^ze`dNRri?Qu<_w%rgMSoj|+M&Mm*w`RVoqW#9 zBdA3g?nCZ>H@LTUHe{CxsCcb47dr`AD(?u=8S5l%$wB38;rgmlAK^5%qsr zJDo2hmSDb%oZ;xaggV{j2>MzA?*S2{-QCy=2LJ#7D|mae;QSVZL4S(pTacnbwr>&L z<>FIkW_-+(E-xi1UExZ$3#bJp!Gx?RSC zVap}edWHoPFx-c(VJG*q>i;2pDzF42oov2y@OmkNCL3k#&#Rld{Q>-UfUXv>+0}yb z)lf>3N}8#gMhQmBFy_*$ZJz&;1={71Bi3vf7+ zD3s&T*L7(8*;0glU82{0R^FjEuj{#6?6i=ze5=|j!SBmcY13Z#NDWo$%*5bG;0|Ed z%S<0`)zAdoJqAvI@)=~tAhn-12N52_r3iQVFxh^z$J8WD)kmo_wD499J#1^!ICgAc zZ%V=g>@cHHW&$;IF_-`V0000000000000000000$Ab;|S7^4pdUNisz002ovPDHLk FV1la^5Y_+y delta 528 zcmV+r0`L9L1gHd%BYy$!Nkl8Y3jRWsC;!;%I70000> z@&A#R)YFTvsq)5DpfskSW#ESLhP|m&X?eDMdR?`u_j;K7xTtPGDk4~rMeKf%H5{wY|*BJZ}nm8GB_zQ`C~q``9-CuXlZ5X#kp%g{M_R zEBk2ucVmd0uVBWCx5=jS84P#U&fZ_~9?(Hk`2_#~00000000000002CRAdK%L3#r2Aizdzp`B8Ul!D?c-+7`Knwh zh=?h-6aWAK0D#;1QsY{y9B$ioqca_L-;_&I=qfC?vX*aG`l`6+*|zQDJpaik$z$Q> znoUEg+!ETK?EE(M4t*PI*DI@>kq5$Bt8%OrpIEZvp8&=7M}P5R?G^!7!Mfu5)O9AK zCXK3B>~hLr<&jGWR@X8uCH@IeF>*r|yk-3xnj|0MmS$|rP3qA}-2HQBu!l@a{0(Tm zqqeu@VzOd9LTfoEv6(LSW>0)2*`HG-C_t{q4e@B)m(-#qMl+MdK6L9($!x%pESY?f z$}0DjP|-TVaew`taJwt-3Ijtj$B&^^SXK;@yK=)MpUc@21Sgr_fa^XE0RZ4FRKe4} zl+ycZJ?Z4cC-F&A%{bZKdikyUa`!B$4Y1grgla#iPZ-;w40@vOeyeA9l8jo*P`pNW z!lB_jZfDI(<{n}z6T*BgI%6ecF63J) zx|vn2P}^%OBIs(^Vp%IJrX#=1@O=H#`O1(1)2XK@vKn00000000000000000000000000002+ bkNE}kg%TPXy=a%P00000NkvXXu0mjfYGMLx delta 429 zcmV;e0aE_51jhrAB!7-cL_t(|obB3eZo?o9fMGW6Cfxr>zRP}~S{5HxnoJmX@AIo= zYoInE!A&Uu00000003}r zrprOz=$CW}&=70TQ%Ap)@)bRRJH}NgY4l6FGob0hoj3ZqrGLBS2LJ#7VvP6A@jGEV zrW;$Tt`yPUp1d^^k%NZ!a5I&3FJ{MlXemNoY)jW}>v5~swq<-9mA_i6_IqLi>@w2j zz@EJNy4JcnsmH>#9yV|tu)QCbfN@GboTN^ALUg%5E&-oyJoAoAz&Klvn!gW?-z7K! zx+2@_VU`<80Dk}g0JtUQ_kgw|UlrZ1w3OLninhg899IWiHSQF)6CO*=S~cr};y(v> zv2;2;pwsU*Kl{5>-Pd-WJD-Mf_5c1v)&u(eZWEb+&N$O;jGnI#tDwi0o8qgX&iD6A z`P0Ap(X<~qq|A538PMkDm1}01U5fRyR~8?8z-hl&N+$Xfyf1zU`sYXh000000NCgk Xr}ijk!ZS_E00000NkvXXu0mjf@>tL= diff --git a/test-integration/snapshots/decodeMessage/nanox.47.png b/test-integration/snapshots/decodeMessage/nanox.47.png index c843773c2ed183cf3d5c88991b1c616a122c8a16..94384bb38c0ef6a19e2e3cd17d8b8d8290a98075 100644 GIT binary patch delta 331 zcmV-R0kr;;1LgvdB!4YQL_t(|obB3C4#FS|fMGP=WcNQ3cky9L$jT6Bq%HlwCnQEm z3)@;v2><{90000{+_V>PUCz0Tw{25g$uC?cpbmY_V;cM=phUk8cXQH(yY>PuIt1EX z+`Y;<*Vmu^OBcMJ0H`_J<{r0y@_PafvGy4Hoxi7`#AB!tYkw4C0000$Y<{cR73|TU zmIFJi$~Ye*L4+hJcud}IBoL$zuwTF|uPUsL6sWPedn&6y8B%sj9 zy&n_?qMB>0^`o+SF+FDNcpE_leZmH-DqVI6npV1QmVghjcI& z{zydMF*Ycyf^h~LuosluytI3hV)n6*o^_Adr??fnCe>{Bqp5uG=PgICFBB4B{BG#E z8iN?WJip)^@b}*8c4KfqxL^Vr1?M1o2vXCgokiPK?ttEO5(WSO0000000000;5OcH W+X&*Q(%oeM0000JfMK@mCfxr>y~`d*2oY%zBeeK`Pik~v ziww{Z00000008h7pVbu@Cn9+}#<;L1ceqSI8TyjPH26zEj(!>L(}OO2S65)rA<*vP z?v;p?{g1xug4ZVi%e0!g$L1gWJ^_bVdklTzZxj?5h8nTQM1Kqb004LaDdZ!a7d}*< zCw{iyZ)RcXZpS7~yH2&HCLlE8SierGXSpJhH!l5}{sKp@#%}c6K0TrCsXEVBPSy`j z?v!Rf0iBj~%}WY3nt)JsAk#{mZ1($r<)aR3ral2N#&Q6vx45xXr6Th7VYfb~b>TqK z0002!XZov%!(U+WbZVw7ABB6%f6$hF>fP45knyRX*DvF0bu)L-@a?VzCEL$VttX)D z&9}_KK3$Mg`y{~lpKXivE~qoCm)2PU00000006wv9}2zIaTFgmzyJUM07*qoM6N<$ Ef~(G_CIA2c delta 318 zcmZo(Jg}1+^BuReZ5~#L+`|h+G=liRiC8w;S*4+=C z8Cmr|^SxJqEMvs7vYFa(|JvViocI;B@ip__gq4Jvj7w0?7U#aYH=t)kx$OFg6R}zc18FM`l&;J!=x;r_AQE&O>5+&Z=)NbP( zOV{P?sfqPg-fMRKHxIuZr*V7FtD>M<)t$ZUXBltvWkI|NCF`GY?@73wZ1r-w6G+6< L)z4*}Q$iB}DcpVh7bmoZIQO~|DL9s zgA~S~m=XX000000{>8((0_TZHInFs7*5rzi4N!-^7O@%PH9(1e9q#UzAv~=sa8eWK zaB+`HMC$QJ{}@8lCje$f-8^FVPjR1sCe{%{zlk>sN=!qYxPQk&3;+NCFtBbN(5#-6 znY)NAp4YE0(acQFV0~V}Fq84JD!5SgQtFP`T=sPtJi5NSjWb!FJ5Z8n<#;<#PL0l< zC}rmUKV|;}bnOS_Wf56C964=(oO9C#%LatSBah$xfUOOzYw>f&Pe2`IrRz;zHoCt1 z^KJtlEeHSr0BGm9{#QgdfjY{n?z2NoD6diyKKqZ#s?GC)&hJY2sG!~4X)dT>7_oF{ z2%5QxL-!eiy8Q1o-lqY&+cM6hp8~xDbXyj4|H9xE0ssI20002s;|ctg`YUnZJ$di=Xuse*FM*h z+N3L~m6cX)9cqWR(qro^wB_#nMi^ze`dNRri?Qu<_w%rgMSoj|+M&Mm*w`RVoqW#9 zBdA3g?nCZ>H@LTUHe{CxsCcb47dr`AD(?u=8S5l%$wB38;rgmlAK^5%qsr zJDo2hmSDb%oZ;xaggV{j2>MzA?*S2{-QCy=2LJ#7D|mae;QSVZL4S(pTacnbwr>&L z<>FIkW_-+(E-xi1UExZ$3#bJp!Gx?RSC zVap}edWHoPFx-c(VJG*q>i;2pDzF42oov2y@OmkNCL3k#&#Rld{Q>-UfUXv>+0}yb z)lf>3N}8#gMhQmBFy_*$ZJz&;1={71Bi3vf7+ zD3s&T*L7(8*;0glU82{0R^FjEuj{#6?6i=ze5=|j!SBmcY13Z#NDWo$%*5bG;0|Ed z%S<0`)zAdoJqAvI@)=~tAhn-12N52_r3iQVFxh^z$J8WD)kmo_wD499J#1^!ICgAc zZ%V=g>@cHHW&$;IF_-`V0000000000000000000$Ab;|S7^4pdUNisz002ovPDHLk FV1i^e5VimS diff --git a/test-integration/snapshots/decodeMessage/nanox.50.png b/test-integration/snapshots/decodeMessage/nanox.50.png index dbe6f3f714243705d4dc36ee44c5a707c83b1c64..0966b381351991acb6db707ea26cd67901f222f9 100644 GIT binary patch delta 429 zcmV;e0aE_51jhrAB!7-cL_t(|obB3eZo?o9fMGW6Cfxr>zRP}~S{5HxnoJmX@AIo= zYoInE!A&Uu00000003}r zrprOz=$CW}&=70TQ%Ap)@)bRRJH}NgY4l6FGob0hoj3ZqrGLBS2LJ#7VvP6A@jGEV zrW;$Tt`yPUp1d^^k%NZ!a5I&3FJ{MlXemNoY)jW}>v5~swq<-9mA_i6_IqLi>@w2j zz@EJNy4JcnsmH>#9yV|tu)QCbfN@GboTN^ALUg%5E&-oyJoAoAz&Klvn!gW?-z7K! zx+2@_VU`<80Dk}g0JtUQ_kgw|UlrZ1w3OLninhg899IWiHSQF)6CO*=S~cr};y(v> zv2;2;pwsU*Kl{5>-Pd-WJD-Mf_5c1v)&u(eZWEb+&N$O;jGnI#tDwi0o8qgX&iD6A z`P0Ap(X<~qq|A538PMkDm1}01U5fRyR~8?8z-hl&N+$Xfyf1zU`sYXh000000NCgk Xr}ijk!ZS_E00000NkvXXu0mjf@>tL= delta 537 zcmV+!0_Oe41F{5=B!BryL_t(|ob8!gj>RAdK%L3#r2Aizdzp`B8Ul!D?c-+7`Knwh zh=?h-6aWAK0D#;1QsY{y9B$ioqca_L-;_&I=qfC?vX*aG`l`6+*|zQDJpaik$z$Q> znoUEg+!ETK?EE(M4t*PI*DI@>kq5$Bt8%OrpIEZvp8&=7M}P5R?G^!7!Mfu5)O9AK zCXK3B>~hLr<&jGWR@X8uCH@IeF>*r|yk-3xnj|0MmS$|rP3qA}-2HQBu!l@a{0(Tm zqqeu@VzOd9LTfoEv6(LSW>0)2*`HG-C_t{q4e@B)m(-#qMl+MdK6L9($!x%pESY?f z$}0DjP|-TVaew`taJwt-3Ijtj$B&^^SXK;@yK=)MpUc@21Sgr_fa^XE0RZ4FRKe4} zl+ycZJ?Z4cC-F&A%{bZKdikyUa`!B$4Y1grgla#iPZ-;w40@vOeyeA9l8jo*P`pNW z!lB_jZfDI(<{n}z6T*BgI%6ecF63J) zx|vn2P}^%OBIs(^Vp%IJrX#=1@O=H#`O1(1)2XK@vKn00000000000000000000000000002+ bkNE}kg%TPXy=a%P00000NkvXXu0mjfYGMLx diff --git a/test-integration/snapshots/decodeMessage/nanox.51.png b/test-integration/snapshots/decodeMessage/nanox.51.png index 94384bb38c0ef6a19e2e3cd17d8b8d8290a98075..c843773c2ed183cf3d5c88991b1c616a122c8a16 100644 GIT binary patch delta 376 zcmV-;0f+wP0+R!fB!5~-L_t(|obA|K5`!QNK+&|*ow)xcxtD%8wM-Hy772{r^VRx5 zNaP_R00000000000001>i$~Ye*L4+hJcud}IBoL$zuwTF|uPUsL6sWPedn&6y8B%sj9 zy&n_?qMB>0^`o+SF+FDNcpE_leZmH-DqVI6npV1QmVghjcI& z{zydMF*Ycyf^h~LuosluytI3hV)n6*o^_Adr??fnCe>{Bqp5uG=PgICFBB4B{BG#E z8iN?WJip)^@b}*8c4KfqxL^Vr1?M1o2vXCgokiPK?ttEO5(WSO0000000000;5OcH W+X&*Q(%oeM0000<{90000{+_V>PUCz0Tw{25g$uC?cpbmY_V;cM=phUk8cXQH(yY>PuIt1EX z+`Y;<*Vmu^OBcMJ0H`_J<{r0y@_PafvGy4Hoxi7`#AB!tYkw4C0000$Y<{cR73|TU zmIFJ(Jg}1+^BuReZ5~#L+`|h+G=liRiC8w;S*4+=C z8Cmr|^SxJqEMvs7vYFa(|JvViocI;B@ip__gq4Jvj7w0?7U#aYH=t)kx$OFg6R}zc18FM`l&;J!=x;r_AQE&O>5+&Z=)NbP( zOV{P?sfqPg-fMRKHxIuZr*V7FtD>M<)t$ZUXBltvWkI|NCF`GY?@73wZ1r-w6G+6< L)z4*}Q$iB}DcpJfMK@mCfxr>y~`d*2oY%zBeeK`Pik~v ziww{Z00000008h7pVbu@Cn9+}#<;L1ceqSI8TyjPH26zEj(!>L(}OO2S65)rA<*vP z?v;p?{g1xug4ZVi%e0!g$L1gWJ^_bVdklTzZxj?5h8nTQM1Kqb004LaDdZ!a7d}*< zCw{iyZ)RcXZpS7~yH2&HCLlE8SierGXSpJhH!l5}{sKp@#%}c6K0TrCsXEVBPSy`j z?v!Rf0iBj~%}WY3nt)JsAk#{mZ1($r<)aR3ral2N#&Q6vx45xXr6Th7VYfb~b>TqK z0002!XZov%!(U+WbZVw7ABB6%f6$hF>fP45knyRX*DvF0bu)L-@a?VzCEL$VttX)D z&9}_KK3$Mg`y{~lpKXivE~qoCm)2PU00000006wv9}2zIaTFgmzyJUM07*qoM6N<$ Ef~(G_CIA2c diff --git a/test-integration/snapshots/decodeMessage/nanox.53.png b/test-integration/snapshots/decodeMessage/nanox.53.png index 56eff5485e79dd0f3771be67cb4e65b087e49838..a64aac087f0feb195d39ed1955fb16ec7ae0ba43 100644 GIT binary patch delta 567 zcmV-70?7S|1J4AIBYy%GNklctg`YUnZJ$di=Xuse*FM*h z+N3L~m6cX)9cqWR(qro^wB_#nMi^ze`dNRri?Qu<_w%rgMSoj|+M&Mm*w`RVoqW#9 zBdA3g?nCZ>H@LTUHe{CxsCcb47dr`AD(?u=8S5l%$wB38;rgmlAK^5%qsr zJDo2hmSDb%oZ;xaggV{j2>MzA?*S2{-QCy=2LJ#7D|mae;QSVZL4S(pTacnbwr>&L z<>FIkW_-+(E-xi1UExZ$3#bJp!Gx?RSC zVap}edWHoPFx-c(VJG*q>i;2pDzF42oov2y@OmkNCL3k#&#Rld{Q>-UfUXv>+0}yb z)lf>3N}8#gMhQmBFy_*$ZJz&;1={71Bi3vf7+ zD3s&T*L7(8*;0glU82{0R^FjEuj{#6?6i=ze5=|j!SBmcY13Z#NDWo$%*5bG;0|Ed z%S<0`)zAdoJqAvI@)=~tAhn-12N52_r3iQVFxh^z$J8WD)kmo_wD499J#1^!ICgAc zZ%V=g>@cHHW&$;IF_-`V0000000000000000000$Ab;|S7^4pdUNisz002ovPDHLk FV1i^e5VimS delta 367 zcmV-#0g(RB1c?KXBYy!Vh7bmoZIQO~|DL9s zgA~S~m=XX000000{>8((0_TZHInFs7*5rzi4N!-^7O@%PH9(1e9q#UzAv~=sa8eWK zaB+`HMC$QJ{}@8lCje$f-8^FVPjR1sCe{%{zlk>sN=!qYxPQk&3;+NCFtBbN(5#-6 znY)NAp4YE0(acQFV0~V}Fq84JD!5SgQtFP`T=sPtJi5NSjWb!FJ5Z8n<#;<#PL0l< zC}rmUKV|;}bnOS_Wf56C964=(oO9C#%LatSBah$xfUOOzYw>f&Pe2`IrRz;zHoCt1 z^KJtlEeHSr0BGm9{#QgdfjY{n?z2NoD6diyKKqZ#s?GC)&hJY2sG!~4X)dT>7_oF{ z2%5QxL-!eiy8Q1o-lqY&+cM6hp8~xDbXyj4|H9xE0ssI20002s;|RAdK%L3#r2Aizdzp`B8Ul!D?c-+7`Knwh zh=?h-6aWAK0D#;1QsY{y9B$ioqca_L-;_&I=qfC?vX*aG`l`6+*|zQDJpaik$z$Q> znoUEg+!ETK?EE(M4t*PI*DI@>kq5$Bt8%OrpIEZvp8&=7M}P5R?G^!7!Mfu5)O9AK zCXK3B>~hLr<&jGWR@X8uCH@IeF>*r|yk-3xnj|0MmS$|rP3qA}-2HQBu!l@a{0(Tm zqqeu@VzOd9LTfoEv6(LSW>0)2*`HG-C_t{q4e@B)m(-#qMl+MdK6L9($!x%pESY?f z$}0DjP|-TVaew`taJwt-3Ijtj$B&^^SXK;@yK=)MpUc@21Sgr_fa^XE0RZ4FRKe4} zl+ycZJ?Z4cC-F&A%{bZKdikyUa`!B$4Y1grgla#iPZ-;w40@vOeyeA9l8jo*P`pNW z!lB_jZfDI(<{n}z6T*BgI%6ecF63J) zx|vn2P}^%OBIs(^Vp%IJrX#=1@O=H#`O1(1)2XK@vKn00000000000000000000000000002+ bkNE}kg%TPXy=a%P00000NkvXXu0mjfl0E`| delta 320 zcmV-G0l)sT1lt0TB!41FL_t(|obB3S4uc>JhGDksCf@%@y~}=>5Qb5q|>!0059uY84ek%M53z zmLi7n@@_znYWby_5^oo0beC& z>}ft`Z#*9W006_9s@{2wiI}r+6EQQZzB_MzhMvw9J}H#8eOvFW{zcYdPL^ssD)B1AdX1up%a)8->!_$PMM)m<{90000{+_V>PUCz0Tw{25g$uC?cpbmY_V;cM=phUk8cXQH(yY>PuIt1EX z+`Y;<*Vmu^OBcMJ0H`_J<{r0y@_PafvGy4Hoxi7`#AB!tYkw4C0000$Y<{cR73|TU zmIFJ=Z8B!7-cL_t(|obB3eZo?o9fMGW6Cfxr>zRP}~S{5HxnoJmX@AIo= zYoInE!A&Uu00000003}r zrprOz=$CW}&=70TQ%Ap)@)bRRJH}NgY4l6FGob0hoj3ZqrGLBS2LJ#7VvP6A@jGEV zrW;$Tt`yPUp1d^^k%NZ!a5I&3FJ{MlXemNoY)jW}>v5~swq<-9mA_i6_IqLi>@w2j zz@EJNy4JcnsmH>#9yV|tu)QCbfN@GboTN^ALUg%5E&-oyJoAoAz&Klvn!gW?-z7K! zx+2@_VU`<80Dk}g0JtUQ_kgw|UlrZ1w3OLninhg899IWiHSQF)6CO*=S~cr};y(v> zv2;2;pwsU*Kl{5>-Pd-WJD-Mf_5c1v)&u(eZWEb+&N$O;jGnI#tDwi0o8qgX&iD6A z`P0Ap(X<~qq|A538PMkDm1}01U5fRyR~8?8z-hl&N+$Xfyf1zU`sYXh000000NCgk Xr}ijk!ZS_E00000NkvXXu0mjfMl;Z0 diff --git a/test-integration/snapshots/decodeMessage/nanox.56.png b/test-integration/snapshots/decodeMessage/nanox.56.png index 348d43dc7cf374983af69c3cc7cc261f8ab8ca03..e23183a4c0d8ef4cc3a691d8665c4b9c37e9bd90 100644 GIT binary patch delta 358 zcmV-s0h#`V1AzmOB!5UrL_t(|obB3C4uc>JfMK@mCfxr>y~`d*2oY%zBeeK`Pik~v ziww{Z00000008h7pVbu@Cn9+}#<;L1ceqSI8TyjPH26zEj(!>L(}OO2S65)rA<*vP z?v;p?{g1xug4ZVi%e0!g$L1gWJ^_bVdklTzZxj?5h8nTQM1Kqb004LaDdZ!a7d}*< zCw{iyZ)RcXZpS7~yH2&HCLlE8SierGXSpJhH!l5}{sKp@#%}c6K0TrCsXEVBPSy`j z?v!Rf0iBj~%}WY3nt)JsAk#{mZ1($r<)aR3ral2N#&Q6vx45xXr6Th7VYfb~b>TqK z0002!XZov%!(U+WbZVw7ABB6%f6$hF>fP45knyRX*DvF0bu)L-@a?VzCEL$VttX)D z&9}_KK3$Mg`y{~lpKXivE~qoCm)2PU00000006wv9}2zIaTFgmzyJUM07*qoM6N<$ Ef;YRS(*OVf delta 362 zcmV-w0hRuN1BC;SB!5gvL_t(|obB0J4#F@DMNxy;N%p@a?}ZPes$}SdAb#kcA3zkE z`lU(Km;nF)0001>&)wbq+P68~XE)%AZk6RqAH)JErNo=6+{?%102N{ZST6(J>YLeZ zb^|VI2OP!fo8lc1s&b1~-*f}`8>#_}CSf^}0jy`;(Yi>5UVi}XnnyYVu>eLZPTdT| z0tnqTkM2SU003klw~SNw_B7Ppr!3~ysqZ!*4!+#ZQ|J1riG6?BO8nBEV)t*8>|Z|O zWmezc)ppqG4(RsijXle3m-z~yl#(!mb;)*X8a+BL#NG=%$}Ge6K9+aWGZ>X=G*EO8 zI6kUmsJ^WOuw&U7#M#>h?6#-v?8lFvu6`Jor*Wt1e*9OKX8H{&Hs#x~eq)Y3I|)}) zNOzLJ390(;=Op(7{z-}<=%7@~M*si-0000000000000<yo~E0F z6vm*K5&!@I0002~#lyM+=ZQ!;&N&;_hVYa7(&!10A@zrJYx4xai4%D))7O$i8l*MOhcWx$A3Z$0000mux=gDte%va zyNE2F*RL|>WrGxZy1x7K zZUY}J2mk;8=V!S7S41~~I?Afj1rvbX#GR~u)0=)xtTNZQw!r&DG00000007|Q4buSUYD%+U5&!@I M07*qoM6N<$g32?gt^fc4 delta 376 zcmeBVp3FQ!r9R5j#WAE}&f6Q&Ld^<14i~pvp1b3}>dxtP7F&IUG{iW2?tQ-c%faJ` zq7nlFEa-N>e(8Ft=)}~>Z}(rl|F*j(`R_{StywxxbZUhaJoj8mljlmRKJt6&wRfhw znC^cMoV4S{mX*rY=0Ph%S$7@n@@#%9oOv>K^Vc`^;ai?=OZhn=>CLz7DY`+e=}Xh^ zUb<6wX{`@`@z(~)dGpdt5|+HW$6S;@ZC00m{;QniTE7+{y%HfdL?AsdyH{|V Uzopr0Cdo@yZ`_I diff --git a/test-integration/snapshots/decodeMessage/nanosp.08.png b/test-integration/snapshots/decodeMessage/nanox.58.png similarity index 100% rename from test-integration/snapshots/decodeMessage/nanosp.08.png rename to test-integration/snapshots/decodeMessage/nanox.58.png diff --git a/test-integration/snapshots/decodeMessage/nanosp.09.png b/test-integration/snapshots/decodeMessage/nanox.59.png similarity index 100% rename from test-integration/snapshots/decodeMessage/nanosp.09.png rename to test-integration/snapshots/decodeMessage/nanox.59.png diff --git a/test-integration/snapshots/decodeMessage/nanox.60.png b/test-integration/snapshots/decodeMessage/nanox.60.png new file mode 100644 index 0000000000000000000000000000000000000000..348d43dc7cf374983af69c3cc7cc261f8ab8ca03 GIT binary patch literal 389 zcmV;00eb$4P)YL&n5UO&ER^N03_#3JL zj3!|@k^!t|-O;*8geLZPTdT|0tnqTkM2SU003klw~SNw_B7Ppr!3~y zsqZ!*4!+#ZQ|J1riG6?BO8nBEV)t*8>|Z|OWmezc)ppqG4(RsijXle3m-z~yl#(!m zb;)*X8a+BL#NG=%$}Ge6K9+aWGZ>X=G*EO8I6kUmsJ^WOu-O^J+1m!}wx{jv$B&<` zei)ahai{8j{8yG{`VA>I<=e4-V~#yL30G4{cap#fsrv8dB=-aUNs1xppj69800000 j000000000002p}!Ca}?+WY!`W00000NkvXXu0mjfx+|;Z literal 0 HcmV?d00001 diff --git a/test-integration/snapshots/decodeMessage/nanox.61.png b/test-integration/snapshots/decodeMessage/nanox.61.png new file mode 100644 index 0000000000000000000000000000000000000000..c843773c2ed183cf3d5c88991b1c616a122c8a16 GIT binary patch literal 403 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@{$ba4!+nDh2Vv{17GkHf_+ zm*?*Iuex)3oyArkAq_Fko_n9K{&MhmqNoJa0|N`X-LGG|UMe~gkyO-`1URvwJU;MQ}a^Ac&lY}L&?lBkTPn*@{ zpZ_W+xz_K6fXGUtmEUGPnB%Il;KGT$@*-@DW@WGWx_DESp>5im3Ta2y+CyxswPMRS zW`*s_o7TX;vEr5J>|(idYv&0j9%}sP*7487<-Vbr#+oKJ=?&sjZtvMrJvr&y#{PMw z{Wq5H5Z$eIHRt={l{Fup>$oBa=DK77CTsw}y{en$e66zg+^ uDvqGb%jUY?4t>{fuSAFq7C;OP56tcr+~#<+;?mtzkf5ilpUXO@geCxD+_gXe literal 0 HcmV?d00001