From 4637cd74481ba85b3164ddb93c258b9ca8b9b949 Mon Sep 17 00:00:00 2001 From: Toni Tabak Date: Mon, 17 Apr 2023 11:41:31 +0200 Subject: [PATCH] feat: cairo1 array, fix invoke response, hash separate test --- __mocks__/cairo/hash/hash.cairo | 18 + __mocks__/cairo/hash/hash.casm | 758 ++++++ __mocks__/cairo/hash/hash.json | 3750 ++++++++++++++++++++++++++ __tests__/cairo1.test.ts | 28 +- src/types/contract.ts | 11 +- src/utils/calldata/index.ts | 9 +- src/utils/calldata/requestParser.ts | 4 +- src/utils/calldata/responseParser.ts | 14 +- 8 files changed, 4567 insertions(+), 25 deletions(-) create mode 100644 __mocks__/cairo/hash/hash.cairo create mode 100644 __mocks__/cairo/hash/hash.casm create mode 100644 __mocks__/cairo/hash/hash.json diff --git a/__mocks__/cairo/hash/hash.cairo b/__mocks__/cairo/hash/hash.cairo new file mode 100644 index 000000000..7d8e2dc5f --- /dev/null +++ b/__mocks__/cairo/hash/hash.cairo @@ -0,0 +1,18 @@ +#[contract] +mod HelloStarknet { + struct Storage { + balance: felt252, + } + + // Increases the balance by the given amount. + #[external] + fn increase_balance(amount: felt252) { + balance::write(balance::read() + amount); + } + + // Returns the current balance. + #[view] + fn get_balance() -> felt252 { + balance::read() + } +} \ No newline at end of file diff --git a/__mocks__/cairo/hash/hash.casm b/__mocks__/cairo/hash/hash.casm new file mode 100644 index 000000000..d0fac0e89 --- /dev/null +++ b/__mocks__/cairo/hash/hash.casm @@ -0,0 +1,758 @@ +{ + "prime": "0x800000000000011000000000000000000000000000000000000000000000001", + "compiler_version": "1.0.0", + "bytecode": [ + "0x40780017fff7fff", + "0x3", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0x100000000000000000000000000000000", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x7c", + "0x4825800180007ffa", + "0x0", + "0x400280007ff97fff", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x105", + "0x482680017ff98000", + "0x1", + "0x40137fed7fff8002", + "0x40137fff7fff8001", + "0x20680017fff7ffd", + "0x61", + "0x48307ffb80007ffc", + "0x40137ffd7fff8000", + "0x4824800180007fff", + "0x0", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x6", + "0x480680017fff8000", + "0x0", + "0x10780017fff7fff", + "0x4", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x1", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x3d", + "0x1104800180018000", + "0x1c6", + "0x482480017fff8000", + "0x1c5", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4825800180008002", + "0x6b08", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x4002800080017fff", + "0x10780017fff7fff", + "0x20", + "0x4825800180008002", + "0x6b08", + "0x4002800080017fff", + "0x48127fff7fff8000", + "0x480a7ffb7fff8000", + "0x480a80007fff8000", + "0x1104800180018000", + "0x105", + "0x4826800180018000", + "0x1", + "0x20680017fff7ffc", + "0xc", + "0x40780017fff7fff", + "0x1", + "0x48127ffe7fff8000", + "0x48127ff87fff8000", + "0x48127ff87fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x48127fff7fff8000", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x4f7574206f6620676173", + "0x400080007ffe7fff", + "0x4826800180018000", + "0x1", + "0x480a80027fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0x480a7ffb7fff8000", + "0x1104800180018000", + "0x103", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x496e70757420746f6f206c6f6e6720666f7220617267756d656e7473", + "0x400080007ffe7fff", + "0x480a80017fff8000", + "0x480a80027fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x496e70757420746f6f2073686f727420666f7220617267756d656e7473", + "0x400080007ffe7fff", + "0x480a80017fff8000", + "0x480a80027fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x4f7574206f6620676173", + "0x400080007ffe7fff", + "0x482680017ff98000", + "0x1", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x2", + "0xa0680017fff8000", + "0x7", + "0x482680017ffa8000", + "0x100000000000000000000000000000000", + "0x400280007ff97fff", + "0x10780017fff7fff", + "0x6b", + "0x4825800180007ffa", + "0x0", + "0x400280007ff97fff", + "0x48297ffc80007ffd", + "0x482680017ff98000", + "0x1", + "0x40137ffd7fff8001", + "0x40137fff7fff8000", + "0x4824800180007ffe", + "0x0", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x6", + "0x480680017fff8000", + "0x0", + "0x10780017fff7fff", + "0x4", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x1", + "0x48307ffe80007fff", + "0x20680017fff7fff", + "0x41", + "0x1104800180018000", + "0x13b", + "0x482480017fff8000", + "0x13a", + "0x480080007fff8000", + "0xa0680017fff8000", + "0x9", + "0x4825800180008001", + "0x3584", + "0x482480017fff8000", + "0x100000000000000000000000000000000", + "0x4002800080007fff", + "0x10780017fff7fff", + "0x24", + "0x4825800180008001", + "0x3584", + "0x4002800080007fff", + "0x48127fff7fff8000", + "0x480a7ffb7fff8000", + "0x1104800180018000", + "0xa3", + "0x4826800180008000", + "0x1", + "0x20680017fff7ffc", + "0x11", + "0x40780017fff7fff", + "0x1", + "0x48127fff7fff8000", + "0x48127ffe7fff8000", + "0x48127ffb7fff8000", + "0x1104800180018000", + "0xc9", + "0x48127ff77fff8000", + "0x48127ff17fff8000", + "0x48127ff17fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffa7fff8000", + "0x48127ffa7fff8000", + "0x208b7fff7fff7ffe", + "0x48127fff7fff8000", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ff97fff8000", + "0x48127ff97fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x4f7574206f6620676173", + "0x400080007ffe7fff", + "0x4826800180008000", + "0x1", + "0x480a80017fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0x480a7ffb7fff8000", + "0x1104800180018000", + "0x74", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x496e70757420746f6f206c6f6e6720666f7220617267756d656e7473", + "0x400080007ffe7fff", + "0x480a80007fff8000", + "0x480a80017fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x1", + "0x480680017fff8000", + "0x4f7574206f6620676173", + "0x400080007ffe7fff", + "0x482680017ff98000", + "0x1", + "0x480a7ffa7fff8000", + "0x480a7ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffa7fff8000", + "0x482480017ff98000", + "0x1", + "0x208b7fff7fff7ffe", + "0x48297ffc80007ffd", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0xa", + "0x482680017ffc8000", + "0x1", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x0", + "0x480a7ffc7fff8000", + "0x10780017fff7fff", + "0x8", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x20680017fff7ffc", + "0x7", + "0x480680017fff8000", + "0x0", + "0x480080007ffc8000", + "0x10780017fff7fff", + "0x6", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x20680017fff7ffe", + "0x8", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480680017fff8000", + "0x0", + "0x48127ffc7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ffc7fff8000", + "0x48127ffc7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x480a7ffb7fff8000", + "0x480a7ffc7fff8000", + "0x1104800180018000", + "0x26", + "0x20680017fff7ffd", + "0x19", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x48287ffd7ffd8000", + "0x1104800180018000", + "0x55", + "0x20680017fff7ffd", + "0xb", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x40780017fff7fff", + "0x18", + "0x48127fe37fff8000", + "0x48127fe37fff8000", + "0x480680017fff8000", + "0x1", + "0x48127fe37fff8000", + "0x48127fe37fff8000", + "0x208b7fff7fff7ffe", + "0x480a7ffd7fff8000", + "0x208b7fff7fff7ffe", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x206f38f7e4f15e87567361213c28f235cccdaa1d7fd34c9db1dfe9489c6a091", + "0x480680017fff8000", + "0x53746f7261676552656164", + "0x400280007ffd7fff", + "0x400380017ffd7ffc", + "0x400280027ffd7ffd", + "0x400280037ffd7ffe", + "0x480280057ffd8000", + "0x20680017fff7fff", + "0xc", + "0x480280047ffd8000", + "0x482680017ffd8000", + "0x7", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480280067ffd8000", + "0x10780017fff7fff", + "0x9", + "0x480280047ffd8000", + "0x482680017ffd8000", + "0x8", + "0x480680017fff8000", + "0x1", + "0x480280067ffd8000", + "0x480280077ffd8000", + "0x1104800180018000", + "0x4c", + "0x20680017fff7ffd", + "0xa", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x400380007ffc7ffd", + "0x480a7ffb7fff8000", + "0x482680017ffc8000", + "0x1", + "0x208b7fff7fff7ffe", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x206f38f7e4f15e87567361213c28f235cccdaa1d7fd34c9db1dfe9489c6a091", + "0x480680017fff8000", + "0x53746f726167655772697465", + "0x400280007ffc7fff", + "0x400380017ffc7ffb", + "0x400280027ffc7ffd", + "0x400280037ffc7ffe", + "0x400380047ffc7ffd", + "0x480280067ffc8000", + "0x20680017fff7fff", + "0xd", + "0x480280057ffc8000", + "0x482680017ffc8000", + "0x7", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x10780017fff7fff", + "0x9", + "0x480280057ffc8000", + "0x482680017ffc8000", + "0x9", + "0x480680017fff8000", + "0x1", + "0x480280077ffc8000", + "0x480280087ffc8000", + "0x1104800180018000", + "0x21", + "0x20680017fff7ffd", + "0xb", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x48127ff67fff8000", + "0x48127ff67fff8000", + "0x480680017fff8000", + "0x1", + "0x48127ffb7fff8000", + "0x48127ffb7fff8000", + "0x208b7fff7fff7ffe", + "0x20780017fff7ffb", + "0x8", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480a7ffd7fff8000", + "0x208b7fff7fff7ffe", + "0x480680017fff8000", + "0x1", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x208b7fff7fff7ffe", + "0x20780017fff7ffb", + "0x9", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x480680017fff8000", + "0x1", + "0x480a7ffc7fff8000", + "0x480a7ffd7fff8000", + "0x208b7fff7fff7ffe" + ], + "hints": [ + [ + 2, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 46, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x6b08" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": 2 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 67, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 85, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 103, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 117, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 131, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 148, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x0" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": -6 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 185, + [ + { + "TestLessThanOrEqual": { + "lhs": { + "Immediate": "0x3584" + }, + "rhs": { + "Deref": { + "register": "FP", + "offset": 1 + } + }, + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 205, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 228, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 246, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 260, + [ + { + "AllocSegment": { + "dst": { + "register": "AP", + "offset": 0 + } + } + } + ] + ], + [ + 372, + [ + { + "SystemCall": { + "system": { + "Deref": { + "register": "FP", + "offset": -3 + } + } + } + } + ] + ], + [ + 427, + [ + { + "SystemCall": { + "system": { + "Deref": { + "register": "FP", + "offset": -4 + } + } + } + } + ] + ] + ], + "entry_points_by_type": { + "EXTERNAL": [ + { + "selector": "0x362398bec32bc0ebb411203221a35a0301193a96f317ebe5e40be9f60d15320", + "offset": 0, + "builtins": [ + "range_check" + ] + }, + { + "selector": "0x39e11d48192e4333233c7eb19d10ad67c362bb28580c604d67884c85da39695", + "offset": 146, + "builtins": [ + "range_check" + ] + } + ], + "L1_HANDLER": [], + "CONSTRUCTOR": [] + } +} \ No newline at end of file diff --git a/__mocks__/cairo/hash/hash.json b/__mocks__/cairo/hash/hash.json new file mode 100644 index 000000000..63dc24425 --- /dev/null +++ b/__mocks__/cairo/hash/hash.json @@ -0,0 +1,3750 @@ +{ + "sierra_program": [ + "0x302e312e30", + "0x1c", + "0x66656c74323532", + "0x0", + "0x556e696e697469616c697a6564", + "0x1", + "0x1", + "0x0", + "0x52616e6765436865636b", + "0x0", + "0x556e696e697469616c697a6564", + "0x1", + "0x1", + "0x2", + "0x4761734275696c74696e", + "0x0", + "0x556e696e697469616c697a6564", + "0x1", + "0x1", + "0x4", + "0x4172726179", + "0x1", + "0x1", + "0x0", + "0x536e617073686f74", + "0x1", + "0x1", + "0x6", + "0x537472756374", + "0x2", + "0x0", + "0x1baeba72e79e9db2587cf44fedb2f3700b2075a5e8e39a562584862c4b71f62", + "0x1", + "0x7", + "0x537472756374", + "0x1", + "0x0", + "0x2ee1e2b1b89f8c495f200e4956278a4d47395fe262f27b52e5865c9524c08c3", + "0x456e756d", + "0x3", + "0x0", + "0x11c6d8087e00642489f92d2821ad6ebd6532ad1a3b6d12833da6d6810391511", + "0x1", + "0x0", + "0x1", + "0x9", + "0x753332", + "0x0", + "0x456e756d", + "0x3", + "0x0", + "0x3288d594b9a45d15bb2fcb7903f06cdb06b27f0ba88186ec4cfaa98307cb972", + "0x1", + "0x9", + "0x1", + "0x9", + "0x4275696c74696e436f737473", + "0x0", + "0x53797374656d", + "0x0", + "0x537472756374", + "0x2", + "0x0", + "0x2ee1e2b1b89f8c495f200e4956278a4d47395fe262f27b52e5865c9524c08c3", + "0x1", + "0x9", + "0x456e756d", + "0x3", + "0x0", + "0xd3a26a7712a33547a4a74e7594a446ca400cb36a0c2c307b92eff9ce82ff8", + "0x1", + "0xf", + "0x1", + "0x6", + "0x537472756374", + "0x2", + "0x0", + "0x2ee1e2b1b89f8c495f200e4956278a4d47395fe262f27b52e5865c9524c08c3", + "0x1", + "0x8", + "0x456e756d", + "0x3", + "0x0", + "0x19b3b4955bdcfa379bfc5a4949111c4efdd79128f8676f4d0895419b22e2ad7", + "0x1", + "0x11", + "0x1", + "0x6", + "0x537472756374", + "0x2", + "0x0", + "0x2ee1e2b1b89f8c495f200e4956278a4d47395fe262f27b52e5865c9524c08c3", + "0x1", + "0x0", + "0x456e756d", + "0x3", + "0x0", + "0x2f528e3c691e195fca674982b69c0dc4284f206c3ea4d680220e99b59315a92", + "0x1", + "0x13", + "0x1", + "0x6", + "0x426f78", + "0x1", + "0x1", + "0x0", + "0x456e756d", + "0x3", + "0x0", + "0x29d7d57c04a880978e7b3689f6218e507f3be17588744b58dc17762447ad0e7", + "0x1", + "0x15", + "0x1", + "0x9", + "0x456e756d", + "0x3", + "0x0", + "0x1354847dd909f9c299aa1275301f74fd0a986cacb09a04b548ae4619212e21", + "0x1", + "0x0", + "0x1", + "0x9", + "0x53746f726167654261736541646472657373", + "0x0", + "0x53746f7261676541646472657373", + "0x0", + "0x456e756d", + "0x3", + "0x0", + "0x90d0203c41ad646d024845257a6eceb2f8b59b29ce7420dd518053d2edeedc", + "0x1", + "0x0", + "0x1", + "0x6", + "0x456e756d", + "0x3", + "0x0", + "0x101dc0399934cc08fa0d6f6f2daead4e4a38cabeea1c743e1fc28d2d6e58e99", + "0x1", + "0x9", + "0x1", + "0x6", + "0x67", + "0x616c6c6f635f6c6f63616c", + "0x1", + "0x1", + "0x0", + "0x616c6c6f635f6c6f63616c", + "0x1", + "0x1", + "0x2", + "0x616c6c6f635f6c6f63616c", + "0x1", + "0x1", + "0x4", + "0x66696e616c697a655f6c6f63616c73", + "0x0", + "0x7265766f6b655f61705f747261636b696e67", + "0x0", + "0x77697468647261775f676173", + "0x0", + "0x6272616e63685f616c69676e", + "0x0", + "0x73746f72655f74656d70", + "0x1", + "0x1", + "0x8", + "0x66756e6374696f6e5f63616c6c", + "0x1", + "0x3", + "0x2", + "0x73746f72655f74656d70", + "0x1", + "0x1", + "0x2", + "0x73746f72655f6c6f63616c", + "0x1", + "0x1", + "0x4", + "0x73746f72655f6c6f63616c", + "0x1", + "0x1", + "0x2", + "0x656e756d5f6d61746368", + "0x1", + "0x1", + "0xa", + "0x7374727563745f6465636f6e737472756374", + "0x1", + "0x1", + "0x8", + "0x61727261795f6c656e", + "0x1", + "0x1", + "0x0", + "0x7533325f636f6e7374", + "0x1", + "0x2", + "0x0", + "0x73746f72655f74656d70", + "0x1", + "0x1", + "0xb", + "0x73746f72655f6c6f63616c", + "0x1", + "0x1", + "0x0", + "0x7533325f6571", + "0x0", + "0x7374727563745f636f6e737472756374", + "0x1", + "0x1", + "0x9", + "0x656e756d5f696e6974", + "0x2", + "0x1", + "0xc", + "0x2", + "0x0", + "0x73746f72655f74656d70", + "0x1", + "0x1", + "0xc", + "0x6a756d70", + "0x0", + "0x656e756d5f696e6974", + "0x2", + "0x1", + "0xc", + "0x2", + "0x1", + "0x626f6f6c5f6e6f745f696d706c", + "0x0", + "0x656e756d5f6d61746368", + "0x1", + "0x1", + "0xc", + "0x64726f70", + "0x1", + "0x1", + "0x9", + "0x6765745f6275696c74696e5f636f737473", + "0x0", + "0x73746f72655f74656d70", + "0x1", + "0x1", + "0xd", + "0x77697468647261775f6761735f616c6c", + "0x0", + "0x73746f72655f74656d70", + "0x1", + "0x1", + "0x4", + "0x73746f72655f74656d70", + "0x1", + "0x1", + "0xe", + "0x73746f72655f74656d70", + "0x1", + "0x1", + "0x0", + "0x66756e6374696f6e5f63616c6c", + "0x1", + "0x3", + "0x3", + "0x656e756d5f6d61746368", + "0x1", + "0x1", + "0x10", + "0x7374727563745f6465636f6e737472756374", + "0x1", + "0x1", + "0xf", + "0x61727261795f6e6577", + "0x1", + "0x1", + "0x0", + "0x736e617073686f745f74616b65", + "0x1", + "0x1", + "0x6", + "0x64726f70", + "0x1", + "0x1", + "0x6", + "0x7374727563745f636f6e737472756374", + "0x1", + "0x1", + "0x8", + "0x7374727563745f636f6e737472756374", + "0x1", + "0x1", + "0x11", + "0x656e756d5f696e6974", + "0x2", + "0x1", + "0x12", + "0x2", + "0x0", + "0x73746f72655f74656d70", + "0x1", + "0x1", + "0x12", + "0x656e756d5f696e6974", + "0x2", + "0x1", + "0x12", + "0x2", + "0x1", + "0x64726f70", + "0x1", + "0x1", + "0x0", + "0x66656c743235325f636f6e7374", + "0x1", + "0x2", + "0x4f7574206f6620676173", + "0x61727261795f617070656e64", + "0x1", + "0x1", + "0x0", + "0x66756e6374696f6e5f63616c6c", + "0x1", + "0x3", + "0x4", + "0x66656c743235325f636f6e7374", + "0x1", + "0x2", + "0x496e70757420746f6f206c6f6e6720666f7220617267756d656e7473", + "0x64726f70", + "0x1", + "0x1", + "0x8", + "0x64726f70", + "0x1", + "0x1", + "0x1", + "0x7374727563745f6465636f6e737472756374", + "0x1", + "0x1", + "0x9", + "0x66656c743235325f636f6e7374", + "0x1", + "0x2", + "0x496e70757420746f6f2073686f727420666f7220617267756d656e7473", + "0x64726f70", + "0x1", + "0x1", + "0x3", + "0x64726f70", + "0x1", + "0x1", + "0x5", + "0x66756e6374696f6e5f63616c6c", + "0x1", + "0x3", + "0x5", + "0x656e756d5f6d61746368", + "0x1", + "0x1", + "0x14", + "0x7374727563745f6465636f6e737472756374", + "0x1", + "0x1", + "0x13", + "0x73746f72655f74656d70", + "0x1", + "0x1", + "0x6", + "0x66756e6374696f6e5f63616c6c", + "0x1", + "0x3", + "0x6", + "0x61727261795f736e617073686f745f706f705f66726f6e74", + "0x1", + "0x1", + "0x0", + "0x656e756d5f696e6974", + "0x2", + "0x1", + "0x16", + "0x2", + "0x0", + "0x73746f72655f74656d70", + "0x1", + "0x1", + "0x7", + "0x73746f72655f74656d70", + "0x1", + "0x1", + "0x16", + "0x656e756d5f696e6974", + "0x2", + "0x1", + "0x16", + "0x2", + "0x1", + "0x656e756d5f6d61746368", + "0x1", + "0x1", + "0x16", + "0x756e626f78", + "0x1", + "0x1", + "0x0", + "0x656e756d5f696e6974", + "0x2", + "0x1", + "0x17", + "0x2", + "0x0", + "0x73746f72655f74656d70", + "0x1", + "0x1", + "0x17", + "0x656e756d5f696e6974", + "0x2", + "0x1", + "0x17", + "0x2", + "0x1", + "0x656e756d5f6d61746368", + "0x1", + "0x1", + "0x17", + "0x72656e616d65", + "0x1", + "0x1", + "0x0", + "0x656e756d5f696e6974", + "0x2", + "0x1", + "0xa", + "0x2", + "0x0", + "0x73746f72655f74656d70", + "0x1", + "0x1", + "0xa", + "0x656e756d5f696e6974", + "0x2", + "0x1", + "0xa", + "0x2", + "0x1", + "0x66656c743235325f616464", + "0x0", + "0x66756e6374696f6e5f63616c6c", + "0x1", + "0x3", + "0x7", + "0x7374727563745f636f6e737472756374", + "0x1", + "0x1", + "0xf", + "0x656e756d5f696e6974", + "0x2", + "0x1", + "0x10", + "0x2", + "0x0", + "0x73746f72655f74656d70", + "0x1", + "0x1", + "0x10", + "0x656e756d5f696e6974", + "0x2", + "0x1", + "0x10", + "0x2", + "0x1", + "0x73746f72655f74656d70", + "0x1", + "0x1", + "0x9", + "0x73746f726167655f626173655f616464726573735f636f6e7374", + "0x1", + "0x2", + "0x206f38f7e4f15e87567361213c28f235cccdaa1d7fd34c9db1dfe9489c6a091", + "0x73746f726167655f616464726573735f66726f6d5f62617365", + "0x0", + "0x73746f72655f74656d70", + "0x1", + "0x1", + "0x19", + "0x73746f726167655f726561645f73797363616c6c", + "0x0", + "0x656e756d5f696e6974", + "0x2", + "0x1", + "0x1a", + "0x2", + "0x0", + "0x73746f72655f74656d70", + "0x1", + "0x1", + "0x1a", + "0x656e756d5f696e6974", + "0x2", + "0x1", + "0x1a", + "0x2", + "0x1", + "0x72656e616d65", + "0x1", + "0x1", + "0x1a", + "0x66756e6374696f6e5f63616c6c", + "0x1", + "0x3", + "0x8", + "0x7374727563745f636f6e737472756374", + "0x1", + "0x1", + "0x13", + "0x656e756d5f696e6974", + "0x2", + "0x1", + "0x14", + "0x2", + "0x0", + "0x73746f72655f74656d70", + "0x1", + "0x1", + "0x14", + "0x656e756d5f696e6974", + "0x2", + "0x1", + "0x14", + "0x2", + "0x1", + "0x73746f726167655f77726974655f73797363616c6c", + "0x0", + "0x656e756d5f696e6974", + "0x2", + "0x1", + "0x1b", + "0x2", + "0x0", + "0x73746f72655f74656d70", + "0x1", + "0x1", + "0x1b", + "0x656e756d5f696e6974", + "0x2", + "0x1", + "0x1b", + "0x2", + "0x1", + "0x72656e616d65", + "0x1", + "0x1", + "0x1b", + "0x66756e6374696f6e5f63616c6c", + "0x1", + "0x3", + "0x9", + "0x656e756d5f6d61746368", + "0x1", + "0x1", + "0x1a", + "0x656e756d5f6d61746368", + "0x1", + "0x1", + "0x1b", + "0x18b", + "0x0", + "0x0", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x5", + "0x0", + "0x1", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x7", + "0x0", + "0x2", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x9", + "0x0", + "0x3", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x4", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x5", + "0x2", + "0x0", + "0x1", + "0x2", + "0xffffffffffffffff", + "0x2", + "0x6", + "0x8", + "0x6b", + "0x2", + "0xa", + "0xb", + "0x0", + "0x6", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x7", + "0x1", + "0x3", + "0x1", + "0xffffffffffffffff", + "0x1", + "0xe", + "0x0", + "0x8", + "0x1", + "0xe", + "0x1", + "0xffffffffffffffff", + "0x2", + "0xc", + "0xd", + "0x0", + "0x9", + "0x1", + "0x6", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x6", + "0x0", + "0xa", + "0x2", + "0x9", + "0x8", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x8", + "0x0", + "0xb", + "0x2", + "0x7", + "0x6", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x6", + "0x0", + "0xc", + "0x1", + "0xd", + "0x2", + "0xffffffffffffffff", + "0x1", + "0x4", + "0x5d", + "0x1", + "0xf", + "0x0", + "0x6", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0xd", + "0x1", + "0xc", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x10", + "0x0", + "0xe", + "0x1", + "0x10", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x11", + "0x0", + "0xf", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x12", + "0x0", + "0x10", + "0x1", + "0x11", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x11", + "0x0", + "0x11", + "0x2", + "0x5", + "0x4", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x4", + "0x0", + "0x12", + "0x2", + "0x11", + "0x12", + "0x2", + "0xffffffffffffffff", + "0x0", + "0x19", + "0x0", + "0x0", + "0x6", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x13", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x13", + "0x0", + "0x14", + "0x1", + "0x13", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x14", + "0x0", + "0x15", + "0x1", + "0x14", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x15", + "0x0", + "0x16", + "0x0", + "0x1", + "0x1d", + "0x0", + "0x0", + "0x6", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x13", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x16", + "0x0", + "0x17", + "0x1", + "0x16", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x17", + "0x0", + "0x15", + "0x1", + "0x17", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x15", + "0x0", + "0x18", + "0x1", + "0x15", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x18", + "0x0", + "0x15", + "0x1", + "0x18", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x18", + "0x0", + "0x19", + "0x1", + "0x18", + "0x2", + "0xffffffffffffffff", + "0x1", + "0x19", + "0x4d", + "0x1", + "0x1a", + "0x0", + "0x6", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x1a", + "0x1", + "0x19", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x1b", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x1b", + "0x0", + "0x1c", + "0x1", + "0x1b", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x1b", + "0x0", + "0x1d", + "0x3", + "0x6", + "0x8", + "0x1b", + "0x2", + "0xffffffffffffffff", + "0x2", + "0x1c", + "0x1d", + "0x41", + "0x2", + "0x1e", + "0x1f", + "0x0", + "0x6", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x1e", + "0x1", + "0x1d", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x23", + "0x0", + "0x1f", + "0x1", + "0x2", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x24", + "0x0", + "0x20", + "0x1", + "0x4", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x25", + "0x0", + "0x21", + "0x3", + "0x23", + "0x24", + "0x25", + "0x1", + "0xffffffffffffffff", + "0x3", + "0x20", + "0x21", + "0x22", + "0x0", + "0x9", + "0x1", + "0x1c", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x1c", + "0x0", + "0x22", + "0x1", + "0x22", + "0x2", + "0xffffffffffffffff", + "0x1", + "0x26", + "0x3a", + "0x1", + "0x27", + "0x0", + "0x6", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x23", + "0x1", + "0x26", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x28", + "0x0", + "0x1a", + "0x1", + "0x28", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x24", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x29", + "0x0", + "0x25", + "0x1", + "0x29", + "0x1", + "0xffffffffffffffff", + "0x2", + "0x2a", + "0x2b", + "0x0", + "0x26", + "0x1", + "0x2a", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x27", + "0x1", + "0x2b", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x2c", + "0x0", + "0x28", + "0x1", + "0x2c", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x2d", + "0x0", + "0x29", + "0x1", + "0x2d", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x2e", + "0x0", + "0x9", + "0x1", + "0x1c", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x2f", + "0x0", + "0x1e", + "0x1", + "0x20", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x30", + "0x0", + "0x1f", + "0x1", + "0x21", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x31", + "0x0", + "0x2a", + "0x1", + "0x2e", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x32", + "0x1", + "0x4", + "0x2f", + "0x30", + "0x31", + "0x32", + "0x0", + "0x6", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x2b", + "0x1", + "0x27", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x33", + "0x0", + "0x9", + "0x1", + "0x1c", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x34", + "0x0", + "0x1e", + "0x1", + "0x20", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x35", + "0x0", + "0x1f", + "0x1", + "0x21", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x36", + "0x0", + "0x2a", + "0x1", + "0x33", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x37", + "0x1", + "0x4", + "0x34", + "0x35", + "0x36", + "0x37", + "0x0", + "0x6", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x2c", + "0x1", + "0x4", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x24", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x38", + "0x0", + "0x2d", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x39", + "0x0", + "0x20", + "0x1", + "0x39", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x39", + "0x0", + "0x2e", + "0x2", + "0x38", + "0x39", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x3a", + "0x0", + "0x2b", + "0x1", + "0x3a", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x3b", + "0x0", + "0x9", + "0x1", + "0x1e", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x3c", + "0x0", + "0x1e", + "0x1", + "0x1f", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x3d", + "0x0", + "0x1f", + "0x1", + "0x2", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x3e", + "0x0", + "0x2a", + "0x1", + "0x3b", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x3f", + "0x1", + "0x4", + "0x3c", + "0x3d", + "0x3e", + "0x3f", + "0x0", + "0x6", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x1a", + "0x1", + "0x1a", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x2c", + "0x1", + "0x4", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x1f", + "0x1", + "0x2", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x42", + "0x0", + "0x2f", + "0x1", + "0x42", + "0x1", + "0xffffffffffffffff", + "0x2", + "0x40", + "0x41", + "0x0", + "0x1a", + "0x1", + "0x41", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x24", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x43", + "0x0", + "0x30", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x44", + "0x0", + "0x20", + "0x1", + "0x44", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x44", + "0x0", + "0x2e", + "0x2", + "0x43", + "0x44", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x45", + "0x0", + "0x2b", + "0x1", + "0x45", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x46", + "0x0", + "0x9", + "0x1", + "0x6", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x47", + "0x0", + "0x1e", + "0x1", + "0x8", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x48", + "0x0", + "0x1f", + "0x1", + "0x40", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x49", + "0x0", + "0x2a", + "0x1", + "0x46", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x4a", + "0x1", + "0x4", + "0x47", + "0x48", + "0x49", + "0x4a", + "0x0", + "0x6", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x31", + "0x1", + "0xc", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x32", + "0x1", + "0x5", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x33", + "0x1", + "0xf", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x24", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x4b", + "0x0", + "0x34", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x4c", + "0x0", + "0x20", + "0x1", + "0x4c", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x4c", + "0x0", + "0x2e", + "0x2", + "0x4b", + "0x4c", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x4d", + "0x0", + "0x2b", + "0x1", + "0x4d", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x4e", + "0x0", + "0x9", + "0x1", + "0x6", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x4f", + "0x0", + "0x1e", + "0x1", + "0x8", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x50", + "0x0", + "0x1f", + "0x1", + "0x2", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x51", + "0x0", + "0x2a", + "0x1", + "0x4e", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x52", + "0x1", + "0x4", + "0x4f", + "0x50", + "0x51", + "0x52", + "0x0", + "0x6", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x32", + "0x1", + "0x5", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x31", + "0x1", + "0x3", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x35", + "0x1", + "0x7", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x36", + "0x1", + "0x9", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x24", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x53", + "0x0", + "0x2d", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x54", + "0x0", + "0x20", + "0x1", + "0x54", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x54", + "0x0", + "0x2e", + "0x2", + "0x53", + "0x54", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x55", + "0x0", + "0x2b", + "0x1", + "0x55", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x56", + "0x0", + "0x9", + "0x1", + "0xa", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x57", + "0x0", + "0x1e", + "0x1", + "0xb", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x58", + "0x0", + "0x1f", + "0x1", + "0x2", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x59", + "0x0", + "0x2a", + "0x1", + "0x56", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x5a", + "0x1", + "0x4", + "0x57", + "0x58", + "0x59", + "0x5a", + "0x0", + "0x1", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x5", + "0x0", + "0x2", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x7", + "0x0", + "0x3", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x4", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x5", + "0x2", + "0x0", + "0x1", + "0x2", + "0xffffffffffffffff", + "0x2", + "0x4", + "0x6", + "0xd1", + "0x2", + "0x8", + "0x9", + "0x0", + "0x6", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0xd", + "0x1", + "0x3", + "0x1", + "0xffffffffffffffff", + "0x1", + "0xa", + "0x0", + "0xe", + "0x1", + "0xa", + "0x1", + "0xffffffffffffffff", + "0x1", + "0xb", + "0x0", + "0xf", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x1", + "0xc", + "0x0", + "0x10", + "0x1", + "0xb", + "0x1", + "0xffffffffffffffff", + "0x1", + "0xb", + "0x0", + "0x9", + "0x1", + "0x4", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x4", + "0x0", + "0xa", + "0x2", + "0x7", + "0x6", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x6", + "0x0", + "0xb", + "0x2", + "0x5", + "0x4", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x4", + "0x0", + "0x12", + "0x2", + "0xb", + "0xc", + "0x2", + "0xffffffffffffffff", + "0x0", + "0x8d", + "0x0", + "0x0", + "0x6", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x13", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x1", + "0xd", + "0x0", + "0x14", + "0x1", + "0xd", + "0x1", + "0xffffffffffffffff", + "0x1", + "0xe", + "0x0", + "0x15", + "0x1", + "0xe", + "0x1", + "0xffffffffffffffff", + "0x1", + "0xf", + "0x0", + "0x16", + "0x0", + "0x1", + "0x91", + "0x0", + "0x0", + "0x6", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x13", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x10", + "0x0", + "0x17", + "0x1", + "0x10", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x11", + "0x0", + "0x15", + "0x1", + "0x11", + "0x1", + "0xffffffffffffffff", + "0x1", + "0xf", + "0x0", + "0x18", + "0x1", + "0xf", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x12", + "0x0", + "0x15", + "0x1", + "0x12", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x12", + "0x0", + "0x19", + "0x1", + "0x12", + "0x2", + "0xffffffffffffffff", + "0x1", + "0x13", + "0xc2", + "0x1", + "0x14", + "0x0", + "0x6", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x1a", + "0x1", + "0x13", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x1b", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x15", + "0x0", + "0x1c", + "0x1", + "0x15", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x15", + "0x0", + "0x1d", + "0x3", + "0x4", + "0x6", + "0x15", + "0x2", + "0xffffffffffffffff", + "0x2", + "0x16", + "0x17", + "0xb7", + "0x2", + "0x18", + "0x19", + "0x0", + "0x6", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x1e", + "0x1", + "0x17", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x1d", + "0x0", + "0x1f", + "0x1", + "0x2", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x1e", + "0x0", + "0x37", + "0x2", + "0x1d", + "0x1e", + "0x1", + "0xffffffffffffffff", + "0x3", + "0x1a", + "0x1b", + "0x1c", + "0x0", + "0x9", + "0x1", + "0x16", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x16", + "0x0", + "0x38", + "0x1", + "0x1c", + "0x2", + "0xffffffffffffffff", + "0x1", + "0x1f", + "0xb0", + "0x1", + "0x20", + "0x0", + "0x6", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x39", + "0x1", + "0x1f", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x21", + "0x0", + "0x24", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x22", + "0x0", + "0x3a", + "0x1", + "0x22", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x25", + "0x0", + "0x20", + "0x1", + "0x21", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x26", + "0x0", + "0x3b", + "0x2", + "0x25", + "0x26", + "0x1", + "0xffffffffffffffff", + "0x2", + "0x23", + "0x24", + "0x0", + "0x1a", + "0x1", + "0x24", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x25", + "0x1", + "0x23", + "0x1", + "0xffffffffffffffff", + "0x2", + "0x27", + "0x28", + "0x0", + "0x26", + "0x1", + "0x27", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x27", + "0x1", + "0x28", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x29", + "0x0", + "0x28", + "0x1", + "0x29", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x2a", + "0x0", + "0x29", + "0x1", + "0x2a", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x2b", + "0x0", + "0x9", + "0x1", + "0x16", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x2c", + "0x0", + "0x1e", + "0x1", + "0x1a", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x2d", + "0x0", + "0x1f", + "0x1", + "0x1b", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x2e", + "0x0", + "0x2a", + "0x1", + "0x2b", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x2f", + "0x1", + "0x4", + "0x2c", + "0x2d", + "0x2e", + "0x2f", + "0x0", + "0x6", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x2b", + "0x1", + "0x20", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x30", + "0x0", + "0x9", + "0x1", + "0x16", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x31", + "0x0", + "0x1e", + "0x1", + "0x1a", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x32", + "0x0", + "0x1f", + "0x1", + "0x1b", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x33", + "0x0", + "0x2a", + "0x1", + "0x30", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x34", + "0x1", + "0x4", + "0x31", + "0x32", + "0x33", + "0x34", + "0x0", + "0x6", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x24", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x35", + "0x0", + "0x2d", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x36", + "0x0", + "0x20", + "0x1", + "0x36", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x36", + "0x0", + "0x2e", + "0x2", + "0x35", + "0x36", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x37", + "0x0", + "0x2b", + "0x1", + "0x37", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x38", + "0x0", + "0x9", + "0x1", + "0x18", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x39", + "0x0", + "0x1e", + "0x1", + "0x19", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x3a", + "0x0", + "0x1f", + "0x1", + "0x2", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x3b", + "0x0", + "0x2a", + "0x1", + "0x38", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x3c", + "0x1", + "0x4", + "0x39", + "0x3a", + "0x3b", + "0x3c", + "0x0", + "0x6", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x1a", + "0x1", + "0x14", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x1f", + "0x1", + "0x2", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x3f", + "0x0", + "0x2f", + "0x1", + "0x3f", + "0x1", + "0xffffffffffffffff", + "0x2", + "0x3d", + "0x3e", + "0x0", + "0x1a", + "0x1", + "0x3e", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x24", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x40", + "0x0", + "0x30", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x41", + "0x0", + "0x20", + "0x1", + "0x41", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x41", + "0x0", + "0x2e", + "0x2", + "0x40", + "0x41", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x42", + "0x0", + "0x2b", + "0x1", + "0x42", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x43", + "0x0", + "0x9", + "0x1", + "0x4", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x44", + "0x0", + "0x1e", + "0x1", + "0x6", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x45", + "0x0", + "0x1f", + "0x1", + "0x3d", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x46", + "0x0", + "0x2a", + "0x1", + "0x43", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x47", + "0x1", + "0x4", + "0x44", + "0x45", + "0x46", + "0x47", + "0x0", + "0x6", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x31", + "0x1", + "0x3", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x35", + "0x1", + "0x5", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x36", + "0x1", + "0x7", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x24", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x48", + "0x0", + "0x2d", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x49", + "0x0", + "0x20", + "0x1", + "0x49", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x49", + "0x0", + "0x2e", + "0x2", + "0x48", + "0x49", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x4a", + "0x0", + "0x2b", + "0x1", + "0x4a", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x4b", + "0x0", + "0x9", + "0x1", + "0x8", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x4c", + "0x0", + "0x1e", + "0x1", + "0x9", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x4d", + "0x0", + "0x1f", + "0x1", + "0x2", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x4e", + "0x0", + "0x2a", + "0x1", + "0x4b", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x4f", + "0x1", + "0x4", + "0x4c", + "0x4d", + "0x4e", + "0x4f", + "0x0", + "0xd", + "0x1", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x1", + "0x0", + "0x3c", + "0x1", + "0x1", + "0x2", + "0xffffffffffffffff", + "0x2", + "0x2", + "0x3", + "0xe6", + "0x1", + "0x4", + "0x0", + "0x6", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x3d", + "0x1", + "0x3", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x5", + "0x0", + "0x3e", + "0x1", + "0x2", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x6", + "0x0", + "0x3f", + "0x1", + "0x5", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x7", + "0x0", + "0x16", + "0x0", + "0x1", + "0xeb", + "0x0", + "0x0", + "0x6", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x13", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x8", + "0x0", + "0x40", + "0x1", + "0x8", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x9", + "0x0", + "0x3e", + "0x1", + "0x4", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x6", + "0x0", + "0x3f", + "0x1", + "0x9", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x7", + "0x0", + "0x27", + "0x1", + "0x6", + "0x1", + "0xffffffffffffffff", + "0x1", + "0xa", + "0x0", + "0x7", + "0x1", + "0xa", + "0x1", + "0xffffffffffffffff", + "0x1", + "0xa", + "0x0", + "0x41", + "0x1", + "0x7", + "0x2", + "0xffffffffffffffff", + "0x1", + "0xb", + "0xf3", + "0x1", + "0xc", + "0x0", + "0x6", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x42", + "0x1", + "0xb", + "0x1", + "0xffffffffffffffff", + "0x1", + "0xd", + "0x0", + "0x43", + "0x1", + "0xd", + "0x1", + "0xffffffffffffffff", + "0x1", + "0xe", + "0x0", + "0x44", + "0x1", + "0xe", + "0x1", + "0xffffffffffffffff", + "0x1", + "0xf", + "0x0", + "0x16", + "0x0", + "0x1", + "0xf8", + "0x0", + "0x0", + "0x6", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x1a", + "0x1", + "0xc", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x13", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x10", + "0x0", + "0x45", + "0x1", + "0x10", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x11", + "0x0", + "0x44", + "0x1", + "0x11", + "0x1", + "0xffffffffffffffff", + "0x1", + "0xf", + "0x0", + "0x46", + "0x1", + "0xf", + "0x2", + "0xffffffffffffffff", + "0x1", + "0x12", + "0xff", + "0x1", + "0x13", + "0x0", + "0x6", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x47", + "0x1", + "0x12", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x14", + "0x0", + "0x48", + "0x1", + "0x14", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x15", + "0x0", + "0x7", + "0x1", + "0xa", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x16", + "0x0", + "0x49", + "0x1", + "0x15", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x17", + "0x1", + "0x2", + "0x16", + "0x17", + "0x0", + "0x6", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x4a", + "0x1", + "0x13", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x18", + "0x0", + "0x7", + "0x1", + "0xa", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x19", + "0x0", + "0x49", + "0x1", + "0x18", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x1a", + "0x1", + "0x2", + "0x19", + "0x1a", + "0x0", + "0x1e", + "0x1", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x6", + "0x0", + "0x1f", + "0x1", + "0x1", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x7", + "0x0", + "0x37", + "0x2", + "0x6", + "0x7", + "0x1", + "0xffffffffffffffff", + "0x3", + "0x3", + "0x4", + "0x5", + "0x0", + "0x38", + "0x1", + "0x5", + "0x2", + "0xffffffffffffffff", + "0x1", + "0x8", + "0x120", + "0x1", + "0x9", + "0x0", + "0x6", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x39", + "0x1", + "0x8", + "0x1", + "0xffffffffffffffff", + "0x1", + "0xa", + "0x0", + "0x4b", + "0x2", + "0xa", + "0x2", + "0x1", + "0xffffffffffffffff", + "0x1", + "0xb", + "0x0", + "0x1e", + "0x1", + "0x3", + "0x1", + "0xffffffffffffffff", + "0x1", + "0xf", + "0x0", + "0x1f", + "0x1", + "0x4", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x10", + "0x0", + "0x20", + "0x1", + "0xb", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x11", + "0x0", + "0x4c", + "0x3", + "0xf", + "0x10", + "0x11", + "0x1", + "0xffffffffffffffff", + "0x3", + "0xc", + "0xd", + "0xe", + "0x0", + "0x22", + "0x1", + "0xe", + "0x2", + "0xffffffffffffffff", + "0x1", + "0x12", + "0x11a", + "0x1", + "0x13", + "0x0", + "0x6", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x23", + "0x1", + "0x12", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x14", + "0x0", + "0x1a", + "0x1", + "0x14", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x13", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x15", + "0x0", + "0x4d", + "0x1", + "0x15", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x16", + "0x0", + "0x4e", + "0x1", + "0x16", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x17", + "0x0", + "0x1e", + "0x1", + "0xc", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x18", + "0x0", + "0x1f", + "0x1", + "0xd", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x19", + "0x0", + "0x4f", + "0x1", + "0x17", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x1a", + "0x1", + "0x3", + "0x18", + "0x19", + "0x1a", + "0x0", + "0x6", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x50", + "0x1", + "0x13", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x1b", + "0x0", + "0x1e", + "0x1", + "0xc", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x1c", + "0x0", + "0x1f", + "0x1", + "0xd", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x1d", + "0x0", + "0x4f", + "0x1", + "0x1b", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x1e", + "0x1", + "0x3", + "0x1c", + "0x1d", + "0x1e", + "0x0", + "0x6", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x2c", + "0x1", + "0x2", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x50", + "0x1", + "0x9", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x1f", + "0x0", + "0x1e", + "0x1", + "0x3", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x20", + "0x0", + "0x1f", + "0x1", + "0x4", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x21", + "0x0", + "0x4f", + "0x1", + "0x1f", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x22", + "0x1", + "0x3", + "0x20", + "0x21", + "0x22", + "0x0", + "0x13", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x1", + "0x0", + "0x1f", + "0x1", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x2", + "0x0", + "0x51", + "0x1", + "0x1", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x3", + "0x1", + "0x2", + "0x2", + "0x3", + "0x0", + "0xf", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x2", + "0x0", + "0x52", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x3", + "0x0", + "0x53", + "0x1", + "0x3", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x4", + "0x0", + "0x10", + "0x1", + "0x2", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x2", + "0x0", + "0x54", + "0x1", + "0x4", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x4", + "0x0", + "0x55", + "0x4", + "0x0", + "0x1", + "0x2", + "0x4", + "0x2", + "0xffffffffffffffff", + "0x3", + "0x5", + "0x6", + "0x7", + "0x137", + "0x3", + "0x8", + "0x9", + "0xa", + "0x0", + "0x6", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x56", + "0x1", + "0x7", + "0x1", + "0xffffffffffffffff", + "0x1", + "0xb", + "0x0", + "0x1e", + "0x1", + "0x5", + "0x1", + "0xffffffffffffffff", + "0x1", + "0xc", + "0x0", + "0x1f", + "0x1", + "0x6", + "0x1", + "0xffffffffffffffff", + "0x1", + "0xd", + "0x0", + "0x57", + "0x1", + "0xb", + "0x1", + "0xffffffffffffffff", + "0x1", + "0xe", + "0x0", + "0x16", + "0x0", + "0x1", + "0x13c", + "0x0", + "0x0", + "0x6", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x58", + "0x1", + "0xa", + "0x1", + "0xffffffffffffffff", + "0x1", + "0xf", + "0x0", + "0x1e", + "0x1", + "0x8", + "0x1", + "0xffffffffffffffff", + "0x1", + "0xc", + "0x0", + "0x1f", + "0x1", + "0x9", + "0x1", + "0xffffffffffffffff", + "0x1", + "0xd", + "0x0", + "0x57", + "0x1", + "0xf", + "0x1", + "0xffffffffffffffff", + "0x1", + "0xe", + "0x0", + "0x59", + "0x1", + "0xe", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x11", + "0x0", + "0x5a", + "0x1", + "0x11", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x10", + "0x0", + "0x38", + "0x1", + "0x10", + "0x2", + "0xffffffffffffffff", + "0x1", + "0x12", + "0x147", + "0x1", + "0x13", + "0x0", + "0x6", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x39", + "0x1", + "0x12", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x14", + "0x0", + "0x5b", + "0x1", + "0x14", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x15", + "0x0", + "0x5c", + "0x1", + "0x15", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x16", + "0x0", + "0x1e", + "0x1", + "0xc", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x17", + "0x0", + "0x1f", + "0x1", + "0xd", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x18", + "0x0", + "0x5d", + "0x1", + "0x16", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x19", + "0x1", + "0x3", + "0x17", + "0x18", + "0x19", + "0x0", + "0x6", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x5e", + "0x1", + "0x13", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x1a", + "0x0", + "0x1e", + "0x1", + "0xc", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x1b", + "0x0", + "0x1f", + "0x1", + "0xd", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x1c", + "0x0", + "0x5d", + "0x1", + "0x1a", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x1d", + "0x1", + "0x3", + "0x1b", + "0x1c", + "0x1d", + "0x0", + "0x2e", + "0x2", + "0x0", + "0x1", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x2", + "0x0", + "0x13", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x3", + "0x0", + "0x1a", + "0x1", + "0x3", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x13", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x4", + "0x0", + "0x3a", + "0x1", + "0x2", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x5", + "0x0", + "0x51", + "0x1", + "0x4", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x6", + "0x1", + "0x2", + "0x5", + "0x6", + "0x0", + "0xf", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x3", + "0x0", + "0x52", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x4", + "0x0", + "0x53", + "0x1", + "0x4", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x5", + "0x0", + "0x10", + "0x1", + "0x3", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x3", + "0x0", + "0x54", + "0x1", + "0x5", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x5", + "0x0", + "0x5f", + "0x5", + "0x0", + "0x1", + "0x3", + "0x5", + "0x2", + "0x2", + "0xffffffffffffffff", + "0x2", + "0x6", + "0x7", + "0x161", + "0x3", + "0x8", + "0x9", + "0xa", + "0x0", + "0x6", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x13", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x1", + "0xb", + "0x0", + "0x60", + "0x1", + "0xb", + "0x1", + "0xffffffffffffffff", + "0x1", + "0xc", + "0x0", + "0x1e", + "0x1", + "0x6", + "0x1", + "0xffffffffffffffff", + "0x1", + "0xd", + "0x0", + "0x1f", + "0x1", + "0x7", + "0x1", + "0xffffffffffffffff", + "0x1", + "0xe", + "0x0", + "0x61", + "0x1", + "0xc", + "0x1", + "0xffffffffffffffff", + "0x1", + "0xf", + "0x0", + "0x16", + "0x0", + "0x1", + "0x166", + "0x0", + "0x0", + "0x6", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x62", + "0x1", + "0xa", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x10", + "0x0", + "0x1e", + "0x1", + "0x8", + "0x1", + "0xffffffffffffffff", + "0x1", + "0xd", + "0x0", + "0x1f", + "0x1", + "0x9", + "0x1", + "0xffffffffffffffff", + "0x1", + "0xe", + "0x0", + "0x61", + "0x1", + "0x10", + "0x1", + "0xffffffffffffffff", + "0x1", + "0xf", + "0x0", + "0x63", + "0x1", + "0xf", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x12", + "0x0", + "0x64", + "0x1", + "0x12", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x11", + "0x0", + "0x22", + "0x1", + "0x11", + "0x2", + "0xffffffffffffffff", + "0x1", + "0x13", + "0x171", + "0x1", + "0x14", + "0x0", + "0x6", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x23", + "0x1", + "0x13", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x15", + "0x0", + "0x4d", + "0x1", + "0x15", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x16", + "0x0", + "0x4e", + "0x1", + "0x16", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x17", + "0x0", + "0x1e", + "0x1", + "0xd", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x18", + "0x0", + "0x1f", + "0x1", + "0xe", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x19", + "0x0", + "0x4f", + "0x1", + "0x17", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x1a", + "0x1", + "0x3", + "0x18", + "0x19", + "0x1a", + "0x0", + "0x6", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x50", + "0x1", + "0x14", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x1b", + "0x0", + "0x1e", + "0x1", + "0xd", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x1c", + "0x0", + "0x1f", + "0x1", + "0xe", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x1d", + "0x0", + "0x4f", + "0x1", + "0x1b", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x1e", + "0x1", + "0x3", + "0x1c", + "0x1d", + "0x1e", + "0x0", + "0x65", + "0x1", + "0x0", + "0x2", + "0xffffffffffffffff", + "0x1", + "0x1", + "0x17d", + "0x1", + "0x2", + "0x0", + "0x6", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x5b", + "0x1", + "0x1", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x3", + "0x0", + "0x5c", + "0x1", + "0x3", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x4", + "0x0", + "0x5d", + "0x1", + "0x4", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x5", + "0x1", + "0x1", + "0x5", + "0x0", + "0x6", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x5e", + "0x1", + "0x2", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x6", + "0x0", + "0x5d", + "0x1", + "0x6", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x7", + "0x1", + "0x1", + "0x7", + "0x0", + "0x66", + "0x1", + "0x0", + "0x2", + "0xffffffffffffffff", + "0x1", + "0x1", + "0x187", + "0x1", + "0x2", + "0x0", + "0x6", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x4d", + "0x1", + "0x1", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x3", + "0x0", + "0x4e", + "0x1", + "0x3", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x4", + "0x0", + "0x4f", + "0x1", + "0x4", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x5", + "0x1", + "0x1", + "0x5", + "0x0", + "0x6", + "0x0", + "0x1", + "0xffffffffffffffff", + "0x0", + "0x0", + "0x50", + "0x1", + "0x2", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x6", + "0x0", + "0x4f", + "0x1", + "0x6", + "0x1", + "0xffffffffffffffff", + "0x1", + "0x7", + "0x1", + "0x1", + "0x7", + "0xa", + "0x4", + "0x2", + "0x4", + "0xe", + "0x8", + "0x4", + "0x2", + "0x4", + "0xe", + "0x12", + "0x0", + "0x1", + "0x2", + "0x3", + "0x0", + "0x4", + "0x2", + "0x4", + "0xe", + "0x8", + "0x4", + "0x2", + "0x4", + "0xe", + "0x12", + "0x0", + "0x1", + "0x2", + "0x3", + "0x7a", + "0x1", + "0x8", + "0x2", + "0x8", + "0xa", + "0x0", + "0xdf", + "0x3", + "0x4", + "0xe", + "0x0", + "0x3", + "0x4", + "0xe", + "0x10", + "0x0", + "0x1", + "0x2", + "0x104", + "0x1", + "0xe", + "0x2", + "0xe", + "0x9", + "0x0", + "0x127", + "0x2", + "0x4", + "0xe", + "0x3", + "0x4", + "0xe", + "0x14", + "0x0", + "0x1", + "0x12b", + "0x2", + "0x6", + "0x0", + "0x2", + "0x6", + "0x9", + "0x0", + "0x1", + "0x14d", + "0x3", + "0x4", + "0xe", + "0x0", + "0x3", + "0x4", + "0xe", + "0x10", + "0x0", + "0x1", + "0x2", + "0x154", + "0x1", + "0x1a", + "0x1", + "0x14", + "0x0", + "0x177", + "0x1", + "0x1b", + "0x1", + "0x10", + "0x0", + "0x181" + ], + "sierra_program_debug_info": { + "type_names": [], + "libfunc_names": [], + "user_func_names": [] + }, + "contract_class_version": "0.1.0", + "entry_points_by_type": { + "EXTERNAL": [ + { + "selector": "0x362398bec32bc0ebb411203221a35a0301193a96f317ebe5e40be9f60d15320", + "function_idx": 0 + }, + { + "selector": "0x39e11d48192e4333233c7eb19d10ad67c362bb28580c604d67884c85da39695", + "function_idx": 1 + } + ], + "L1_HANDLER": [], + "CONSTRUCTOR": [] + }, + "abi": [ + { + "type": "function", + "name": "increase_balance", + "inputs": [ + { + "name": "amount", + "type": "core::felt252" + } + ], + "outputs": [], + "state_mutability": "external" + }, + { + "type": "function", + "name": "get_balance", + "inputs": [], + "outputs": [ + { + "type": "core::felt252" + } + ], + "state_mutability": "view" + } + ] +} diff --git a/__tests__/cairo1.test.ts b/__tests__/cairo1.test.ts index 849d14752..40c34a4f9 100644 --- a/__tests__/cairo1.test.ts +++ b/__tests__/cairo1.test.ts @@ -16,7 +16,7 @@ describeIfDevnetSequencer('Cairo 1', () => { describe('Sequencer API', () => { const provider = getTestProvider() as SequencerProvider; const account = getTestAccount(provider); - let classHash: any; // = '0x5b3507904c785fcceff17b34b4269f729bbddc1a432e4a63145c70071383413'; + let classHash: any; //= '0x5b3507904c785fcceff17b34b4269f729bbddc1a432e4a63145c70071383413'; let contractAddress: any; let declareV2Tx: any; let cairo1Contract: Contract; @@ -83,14 +83,14 @@ describeIfDevnetSequencer('Cairo 1', () => { const tx = await cairo1Contract.increase_balance(100); await account.waitForTransaction(tx.transaction_hash); const balance = await cairo1Contract.get_balance(); - expect(toBigInt(balance[0])).toBe(200n); + expect(toBigInt(balance)).toBe(200n); }); test('Cairo 1 Contract Interaction - uint', async () => { const tx = await cairo1Contract.increase_balance_u8(255); await account.waitForTransaction(tx.transaction_hash); const balance = await cairo1Contract.get_balance_u8(); - expect(toBigInt(balance[0])).toBe(255n); + expect(toBigInt(balance)).toBe(255n); }); test('Cairo 1 Contract Interaction - bool', async () => { @@ -98,19 +98,19 @@ describeIfDevnetSequencer('Cairo 1', () => { await account.waitForTransaction(tx.transaction_hash); let status = await cairo1Contract.get_status(); - expect(status[0]).toBe(true); + expect(status).toBe(true); tx = await cairo1Contract.set_status(false); await account.waitForTransaction(tx.transaction_hash); status = await cairo1Contract.get_status(); - expect(status[0]).toBe(false); + expect(status).toBe(false); tx = await cairo1Contract.set_status(true); await account.waitForTransaction(tx.transaction_hash); status = await cairo1Contract.get_status(); - expect(status[0]).toBe(true); + expect(status).toBe(true); }); test('Cairo 1 Contract Interaction - ContractAddress', async () => { @@ -118,31 +118,27 @@ describeIfDevnetSequencer('Cairo 1', () => { await account.waitForTransaction(tx.transaction_hash); const status = await cairo1Contract.get_ca(); - expect(status[0]).toBe(123n); + expect(status).toBe(123n); }); test('Cairo 1 Contract Interaction - echo flat un-named un-nested tuple', async () => { // TODO: flatten result ? const status = await cairo1Contract.echo_un_tuple(tuple(77, 123)); - expect(status[0][0]).toBe(77n); - expect(status[0][1]).toBe(123n); + expect(Object.values(status)).toEqual([77n, 123n]); }); - xtest('Cairo 1 Contract Interaction - echo Array', async () => { + test('Cairo 1 Contract Interaction - echo flat un-nested Array', async () => { // TODO: complete array const status = await cairo1Contract.echo_array([123, 55, 77, 255]); - expect(status[0]).toBe(123n); - expect(status[1]).toBe(55); - expect(status[2]).toBe(77); - expect(status[3]).toBe(255); + expect(status).toEqual([123n, 55n, 77n, 255n]); }); - xtest('Cairo 1 Contract Interaction - echo Array', async () => { + xtest('Cairo 1 Contract Interaction - echo flat un-nested Struct', async () => { // TODO: Do Structure const status = await cairo1Contract.echo_struct({ val: 'simple', }); - expect(status[0]).toBe('simple'); + expect(status).toBe('simple'); }); }); }); diff --git a/src/types/contract.ts b/src/types/contract.ts index 8513a6161..e490f1123 100644 --- a/src/types/contract.ts +++ b/src/types/contract.ts @@ -1,5 +1,10 @@ export type AsyncContractFunction = (...args: Array) => Promise; export type ContractFunction = (...args: Array) => any; -export type Result = { - [key: string]: any; -}; +export type Result = + | { + [key: string]: any; + } + | bigint + | string + | boolean + | any[]; diff --git a/src/utils/calldata/index.ts b/src/utils/calldata/index.ts index 1b64a71ed..e8e3f2db6 100644 --- a/src/utils/calldata/index.ts +++ b/src/utils/calldata/index.ts @@ -1,4 +1,4 @@ -import { Abi, AbiEntry, AbiStructs, Args, Calldata, FunctionAbi } from '../../types'; +import { Abi, AbiEntry, AbiStructs, Args, Calldata, FunctionAbi, Result } from '../../types'; import assert from '../assert'; import { isBigInt } from '../num'; import { isLongText, splitLongString } from '../shortString'; @@ -126,11 +126,11 @@ export class CallData { * @param response - response from the method * @return - parsed response corresponding to the abi */ - public parse(method: string, response: string[]): object { + public parse(method: string, response: string[]): Result { const { outputs } = this.abi.find((abi) => abi.name === method) as FunctionAbi; const responseIterator = response.flat()[Symbol.iterator](); - return outputs.flat().reduce((acc, output, idx) => { + const parsed = outputs.flat().reduce((acc, output, idx) => { const propName = output.name ?? idx; acc[propName] = responseParser(responseIterator, output, this.structs, acc); if (acc[propName] && acc[`${propName}_len`]) { @@ -138,6 +138,9 @@ export class CallData { } return acc; }, {} as Args); + + // Cairo1 avoid object.0 structure + return Object.keys(parsed).length === 1 && 0 in parsed ? (parsed[0] as Result) : parsed; } /** diff --git a/src/utils/calldata/requestParser.ts b/src/utils/calldata/requestParser.ts index 5a92bc452..bd3917825 100644 --- a/src/utils/calldata/requestParser.ts +++ b/src/utils/calldata/requestParser.ts @@ -119,8 +119,8 @@ export function parseCalldataField( return (value as (BigNumberish | ParsedStruct)[]).reduce((acc, el) => { if (isTypeFelt(arrayType) || isTypeUint(arrayType) || isTypeContractAddress(arrayType)) { acc.push(felt(el as BigNumberish)); - } else if (isTypeBool(arrayType)) { - acc.push(el); + } else if (isTypeBool(arrayType) && typeof el === 'boolean') { + acc.push((el as boolean).toString()); } else { // structure or tuple acc.push(...parseCalldataValue(el, arrayType, structs)); diff --git a/src/utils/calldata/responseParser.ts b/src/utils/calldata/responseParser.ts index 37abd9556..21f7f1f5b 100644 --- a/src/utils/calldata/responseParser.ts +++ b/src/utils/calldata/responseParser.ts @@ -1,6 +1,6 @@ import { AbiEntry, AbiStructs, Args, ParsedStruct } from '../../types'; import { BigNumberish } from '../num'; -import { isLen, isTypeArray, isTypeBool, isTypeTuple } from './cairo'; +import { isCairo1Type, isLen, isTypeArray, isTypeBool, isTypeTuple } from './cairo'; import extractTupleMemberTypes from './tuple'; /** @@ -66,6 +66,18 @@ export default function responseParser( // eslint-disable-next-line no-case-declarations const parsedDataArr: (BigNumberish | ParsedStruct)[] = []; + // Cairo 1 Array + if (isCairo1Type(type)) { + responseIterator.next(); // skip length + let it = responseIterator.next(); + + while (!it.done) { + parsedDataArr.push(BigInt(it.value)); + it = responseIterator.next(); + } + return parsedDataArr; + } + if (parsedResult && parsedResult[`${name}_len`]) { const arrLen = parsedResult[`${name}_len`] as number; while (parsedDataArr.length < arrLen) {